diff --git a/compendium-frontend/src/App.tsx b/compendium-frontend/src/App.tsx
index 70143095ad9095868c8e2553c615f0f50d8ee66c..b08b72fbd3763e982323897dc1cf88b9eac7e6ff 100644
--- a/compendium-frontend/src/App.tsx
+++ b/compendium-frontend/src/App.tsx
@@ -1,75 +1,75 @@
 import { ReactElement, lazy } from "react";
 import { createBrowserRouter, RouterProvider, Outlet, useLocation } from "react-router-dom";
-import Providers from "./Providers";
-import { ConnectivityPage, ServiceCategory } from "./Schema";
-import ExternalPageNavBar from "./components/global/ExternalPageNavBar";
-import GeantFooter from "./components/global/GeantFooter";
-import Landing from "./pages/Landing";
-import CompendiumData from "./pages/CompendiumData";
-import PrivacyModal from "./matomo/PrivacyModal";
+import Providers from "compendium/Providers";
+import { ConnectivityPage, ServiceCategory } from "compendium/Schema";
+import ExternalPageNavBar from "compendium/components/global/ExternalPageNavBar";
+import GeantFooter from "compendium/components/global/GeantFooter";
+import Landing from "compendium/pages/Landing";
+import CompendiumData from "compendium/pages/CompendiumData";
+import PrivacyModal from "compendium/matomo/PrivacyModal";
 
 // Organization
-const BudgetPage = lazy(() => import("./pages/Organization/Budget"));
-const ChargingStructurePage = lazy(() => import("./pages/Organization/ChargingStructure"));
-const ECProjectsPage = lazy(() => import("./pages/Organization/ECProjects"));
-const FundingSourcePage = lazy(() => import("./pages/Organization/FundingSource"));
-const ParentOrganisationPage = lazy(() => import("./pages/Organization/ParentOrganisation"));
-const StaffGraphPage = lazy(() => import("./pages/Organization/StaffGraph"));
-const StaffGraphAbsolutePage = lazy(() => import("./pages/Organization/StaffGraphAbsolute"));
-const SubOrganisationPage = lazy(() => import("./pages/Organization/SubOrganisation"));
+const BudgetPage = lazy(() => import("compendium/pages/Organization/Budget"));
+const ChargingStructurePage = lazy(() => import("compendium/pages/Organization/ChargingStructure"));
+const ECProjectsPage = lazy(() => import("compendium/pages/Organization/ECProjects"));
+const FundingSourcePage = lazy(() => import("compendium/pages/Organization/FundingSource"));
+const ParentOrganisationPage = lazy(() => import("compendium/pages/Organization/ParentOrganisation"));
+const StaffGraphPage = lazy(() => import("compendium/pages/Organization/StaffGraph"));
+const StaffGraphAbsolutePage = lazy(() => import("compendium/pages/Organization/StaffGraphAbsolute"));
+const SubOrganisationPage = lazy(() => import("compendium/pages/Organization/SubOrganisation"));
 
 // Standards & Policies
-const AuditsPage = lazy(() => import("./pages/Standards&Policies/Audits"));
-const BusinessContinuityPage = lazy(() => import("./pages/Standards&Policies/BusinessContinuity"));
-const CentralProcurementPage = lazy(() => import("./pages/Standards&Policies/CentralProcurement"));
-const CorporateStrategyPage = lazy(() => import("./pages/Standards&Policies/CorporateStrategy"));
-const CrisisExercisesPage = lazy(() => import("./pages/Standards&Policies/CrisisExercises"));
-const CrisisManagementPage = lazy(() => import("./pages/Standards&Policies/CrisisManagement"));
-const EOSCListingsPage = lazy(() => import("./pages/Standards&Policies/EOSCListings"));
-const PolicyPage = lazy(() => import("./pages/Standards&Policies/Policy"));
-const SecurityControlsPage = lazy(() => import("./pages/Standards&Policies/SecurityControls"));
-const ServiceLevelTargetsPage = lazy(() => import("./pages/Standards&Policies/ServiceLevelTargets"));
-const ServiceManagementFrameworkPage = lazy(() => import("./pages/Standards&Policies/ServiceManagementFramework"));
-const ServicesOfferedPage = lazy(() => import("./pages/Standards&Policies/ServicesOffered"));
+const AuditsPage = lazy(() => import("compendium/pages/Standards&Policies/Audits"));
+const BusinessContinuityPage = lazy(() => import("compendium/pages/Standards&Policies/BusinessContinuity"));
+const CentralProcurementPage = lazy(() => import("compendium/pages/Standards&Policies/CentralProcurement"));
+const CorporateStrategyPage = lazy(() => import("compendium/pages/Standards&Policies/CorporateStrategy"));
+const CrisisExercisesPage = lazy(() => import("compendium/pages/Standards&Policies/CrisisExercises"));
+const CrisisManagementPage = lazy(() => import("compendium/pages/Standards&Policies/CrisisManagement"));
+const EOSCListingsPage = lazy(() => import("compendium/pages/Standards&Policies/EOSCListings"));
+const PolicyPage = lazy(() => import("compendium/pages/Standards&Policies/Policy"));
+const SecurityControlsPage = lazy(() => import("compendium/pages/Standards&Policies/SecurityControls"));
+const ServiceLevelTargetsPage = lazy(() => import("compendium/pages/Standards&Policies/ServiceLevelTargets"));
+const ServiceManagementFrameworkPage = lazy(() => import("compendium/pages/Standards&Policies/ServiceManagementFramework"));
+const ServicesOfferedPage = lazy(() => import("compendium/pages/Standards&Policies/ServicesOffered"));
 
 // Connected Users
-const ConnectedInstitutionsURLsPage = lazy(() => import("./pages/ConnectedUsers/ConnectedInstitutionsURLs"));
-const ConnectedUserPage = lazy(() => import("./pages/ConnectedUsers/ConnectedUser"));
-const RemoteCampusesPage = lazy(() => import("./pages/ConnectedUsers/RemoteCampuses"));
+const ConnectedInstitutionsURLsPage = lazy(() => import("compendium/pages/ConnectedUsers/ConnectedInstitutionsURLs"));
+const ConnectedUserPage = lazy(() => import("compendium/pages/ConnectedUsers/ConnectedUser"));
+const RemoteCampusesPage = lazy(() => import("compendium/pages/ConnectedUsers/RemoteCampuses"));
 
 // Network
-const AlienWavePage = lazy(() => import("./pages/Network/AlienWave"));
-const AlienWaveInternalPage = lazy(() => import("./pages/Network/AlienWaveInternal"));
-const AutomationPage = lazy(() => import("./pages/Network/Automation"));
-const CapacityCoreIPPage = lazy(() => import("./pages/Network/CapacityCoreIP"));
-const CapacityLargestLinkPage = lazy(() => import("./pages/Network/CapacityLargestLink"));
-const CertificateProviderPage = lazy(() => import("./pages/Network/CertificateProvider"));
-const DarkFibreLeasePage = lazy(() => import("./pages/Network/DarkFibreLease"));
-const DarkFibreInstalledPage = lazy(() => import("./pages/Network/DarkFibreInstalled"));
-const ExternalConnectionsPage = lazy(() => import("./pages/Network/ExternalConnections"));
-const FibreLightPage = lazy(() => import("./pages/Network/FibreLight"));
-const IRUDurationPage = lazy(() => import("./pages/Network/IRUDuration"));
-const MonitoringToolsPage = lazy(() => import("./pages/Network/MonitoringTools"));
-const NetworkFunctionVirtualisationPage = lazy(() => import("./pages/Network/NetworkFunctionVirtualisation"));
-const NetworkMapUrlPage = lazy(() => import("./pages/Network/NetworkMapUrls"));
-const NonRAndEPeerPage = lazy(() => import("./pages/Network/NonRAndEPeer"));
-const OPsAutomationPage = lazy(() => import("./pages/Network/OPsAutomation"));
-const PassiveMonitoringPage = lazy(() => import("./pages/Network/PassiveMonitoring"));
-const PertTeamPage = lazy(() => import("./pages/Network/PertTeam"));
-const SiemVendorsPage = lazy(() => import("./pages/Network/SiemVendors"));
-const TrafficRatioPage = lazy(() => import("./pages/Network/TrafficRatio"));
-const TrafficUrlPage = lazy(() => import("./pages/Network/TrafficUrl"));
-const TrafficVolumePage = lazy(() => import("./pages/Network/TrafficVolume"));
-const NetworkWeatherMapPage = lazy(() => import("./pages/Network/WeatherMap"));
+const AlienWavePage = lazy(() => import("compendium/pages/Network/AlienWave"));
+const AlienWaveInternalPage = lazy(() => import("compendium/pages/Network/AlienWaveInternal"));
+const AutomationPage = lazy(() => import("compendium/pages/Network/Automation"));
+const CapacityCoreIPPage = lazy(() => import("compendium/pages/Network/CapacityCoreIP"));
+const CapacityLargestLinkPage = lazy(() => import("compendium/pages/Network/CapacityLargestLink"));
+const CertificateProviderPage = lazy(() => import("compendium/pages/Network/CertificateProvider"));
+const DarkFibreLeasePage = lazy(() => import("compendium/pages/Network/DarkFibreLease"));
+const DarkFibreInstalledPage = lazy(() => import("compendium/pages/Network/DarkFibreInstalled"));
+const ExternalConnectionsPage = lazy(() => import("compendium/pages/Network/ExternalConnections"));
+const FibreLightPage = lazy(() => import("compendium/pages/Network/FibreLight"));
+const IRUDurationPage = lazy(() => import("compendium/pages/Network/IRUDuration"));
+const MonitoringToolsPage = lazy(() => import("compendium/pages/Network/MonitoringTools"));
+const NetworkFunctionVirtualisationPage = lazy(() => import("compendium/pages/Network/NetworkFunctionVirtualisation"));
+const NetworkMapUrlPage = lazy(() => import("compendium/pages/Network/NetworkMapUrls"));
+const NonRAndEPeerPage = lazy(() => import("compendium/pages/Network/NonRAndEPeer"));
+const OPsAutomationPage = lazy(() => import("compendium/pages/Network/OPsAutomation"));
+const PassiveMonitoringPage = lazy(() => import("compendium/pages/Network/PassiveMonitoring"));
+const PertTeamPage = lazy(() => import("compendium/pages/Network/PertTeam"));
+const SiemVendorsPage = lazy(() => import("compendium/pages/Network/SiemVendors"));
+const TrafficRatioPage = lazy(() => import("compendium/pages/Network/TrafficRatio"));
+const TrafficUrlPage = lazy(() => import("compendium/pages/Network/TrafficUrl"));
+const TrafficVolumePage = lazy(() => import("compendium/pages/Network/TrafficVolume"));
+const NetworkWeatherMapPage = lazy(() => import("compendium/pages/Network/WeatherMap"));
 
 // Services Matrix
-const ServicesPage = lazy(() => import("./pages/Services/Services"));
+const ServicesPage = lazy(() => import("compendium/pages/Services/Services"));
 
 // Survey
-const SurveyLanding = lazy(() => import('./survey/Landing'));
-const SurveyContainerComponent = lazy(() => import('./survey/SurveyContainerComponent'));
-const SurveyManagementComponent = lazy(() => import('./survey/management/SurveyManagementComponent'));
-const UserManagementComponent = lazy(() => import('./survey/management/UserManagementComponent'));
+const SurveyLanding = lazy(() => import('compendium/survey/Landing'));
+const SurveyContainerComponent = lazy(() => import('compendium/survey/SurveyContainerComponent'));
+const SurveyManagementComponent = lazy(() => import('compendium/survey/management/SurveyManagementComponent'));
+const UserManagementComponent = lazy(() => import('compendium/survey/management/UserManagementComponent'));
 
 const GlobalLayout = () => {
   // this component is needed to provide a global layout for the app, including the navbar and footer,
diff --git a/compendium-frontend/src/Providers.tsx b/compendium-frontend/src/Providers.tsx
index 97739e8b3f3e2cc74c00e151dd856aca04ef400c..79fcf093e0700d9619dab90ae1d3964f54b586b6 100644
--- a/compendium-frontend/src/Providers.tsx
+++ b/compendium-frontend/src/Providers.tsx
@@ -1,14 +1,14 @@
 import { ReactElement } from "react";
 
-import SidebarProvider from "./providers/SidebarProvider";
-import UserProvider from "./providers/UserProvider";
-import FilterSelectionProvider from "./providers/FilterSelectionProvider";
-import ChartContainerProvider from "./providers/ChartContainerProvider";
-import PreviewProvider from "./providers/PreviewProvider";
-import NrenProvider from "./providers/NrenProvider";
-import MatomoProvider from "./matomo/MatomoProvider";
-import ConsentProvider from "./providers/ConsentProvider";
-import ConfigProvider from "./providers/ConfigProvider";
+import SidebarProvider from "compendium/providers/SidebarProvider";
+import UserProvider from "compendium/providers/UserProvider";
+import FilterSelectionProvider from "compendium/providers/FilterSelectionProvider";
+import ChartContainerProvider from "compendium/providers/ChartContainerProvider";
+import PreviewProvider from "compendium/providers/PreviewProvider";
+import NrenProvider from "compendium/providers/NrenProvider";
+import MatomoProvider from "compendium/matomo/MatomoProvider";
+import ConsentProvider from "compendium/providers/ConsentProvider";
+import ConfigProvider from "compendium/providers/ConfigProvider";
 
 function Providers({ children }): ReactElement {
     return (
diff --git a/compendium-frontend/src/components/DataPage.tsx b/compendium-frontend/src/components/DataPage.tsx
index 78d8bdf99777ccc80ca334594892da46e8445f2c..fe937c7ca5d4576e934d4ff53c70ff379ae394a1 100644
--- a/compendium-frontend/src/components/DataPage.tsx
+++ b/compendium-frontend/src/components/DataPage.tsx
@@ -1,21 +1,21 @@
 import { ReactElement, useEffect, useContext } from "react";
 import { Container, Row } from "react-bootstrap";
 import { Link } from "react-router-dom";
+import { Chart as ChartJS } from 'chart.js';
 
-import OrganizationSidebar from "./sidebar/OrganizationSidebar";
-import PageHeader from "../components/global/PageHeader"
-import SectionNavigation from "./SectionNavigation";
-import { Sections } from "../helpers/constants";
-import PolicySidebar from "./sidebar/PolicySidebar";
+import PageHeader from "compendium/components/global/PageHeader"
+import SectionNavigation from "compendium/components/SectionNavigation";
+import OrganizationSidebar from "compendium/components/sidebar/OrganizationSidebar";
+import PolicySidebar from "compendium/components/sidebar/PolicySidebar";
+import ConnectedUsersSidebar from "compendium/components/sidebar/ConnectedUsersSidebar";
+import NetworkSidebar from "compendium/components/sidebar/NetworkSidebar";
+import ServicesSidebar from "compendium/components/sidebar/ServicesSidebar";
+import DownloadContainer from "compendium/components/download/DownloadContainer";
+import useMatomo from "compendium/matomo/UseMatomo";
 
-import { Chart as ChartJS } from 'chart.js';
-import NetworkSidebar from "./sidebar/NetworkSidebar";
-import ConnectedUsersSidebar from "./sidebar/ConnectedUsersSidebar";
-import ServicesSidebar from "./sidebar/ServicesSidebar";
-import DownloadContainer from "./download/DownloadContainer";
-import useMatomo from "../matomo/UseMatomo";
-import { PreviewContext } from "@/providers/PreviewProvider";
-import { NrenAndYearDatapoint } from "../Schema";
+import { Sections } from "compendium/helpers/constants";
+import { PreviewContext } from "compendium/providers/PreviewProvider";
+import { NrenAndYearDatapoint } from "compendium/Schema";
 
 ChartJS.defaults.font.size = 16;
 ChartJS.defaults.font.family = 'Open Sans';
diff --git a/compendium-frontend/src/components/NrenYearTable.tsx b/compendium-frontend/src/components/NrenYearTable.tsx
index dcb27f5f063e58c7051cda4c76de5861b77eeedc..b3aafc6ab16cb3f4bbaa18bcb5110d6f7f114040 100644
--- a/compendium-frontend/src/components/NrenYearTable.tsx
+++ b/compendium-frontend/src/components/NrenYearTable.tsx
@@ -1,6 +1,6 @@
 import React from 'react';
 import { Table } from "react-bootstrap";
-import { addHttpIfMissing } from '../helpers/dataconversion';
+import { addHttpIfMissing } from 'compendium/helpers/dataconversion';
 
 interface configProps {
     dottedBorder?: boolean;
diff --git a/compendium-frontend/src/components/PillTable.tsx b/compendium-frontend/src/components/PillTable.tsx
index 8ed09861ff2954c9c063291df70e7cb57e3f125d..19e6589f8727688df081aaaa19e0225b6f972ef5 100644
--- a/compendium-frontend/src/components/PillTable.tsx
+++ b/compendium-frontend/src/components/PillTable.tsx
@@ -1,7 +1,7 @@
 import React from 'react';
 import { Table } from "react-bootstrap";
-import ColorPill from "./ColorPill";
-import { NrenAndYearDatapoint } from '../Schema';
+import ColorPill from "compendium/components/ColorPill";
+import { NrenAndYearDatapoint } from "compendium/Schema";
 
 interface PillTableProps<T extends NrenAndYearDatapoint | { [key: string]: number | string }> {
     columns: string[];
diff --git a/compendium-frontend/src/components/ScrollableMatrix.tsx b/compendium-frontend/src/components/ScrollableMatrix.tsx
index 2fecb62347df4659fa3442e11d21753317c440a4..bb659af09e7345b1d8d78a85a18eef62c3491e19 100644
--- a/compendium-frontend/src/components/ScrollableMatrix.tsx
+++ b/compendium-frontend/src/components/ScrollableMatrix.tsx
@@ -1,6 +1,6 @@
 import React from "react";
-import CollapsibleBox from "./CollapsibleBox";
 import { Table } from "react-bootstrap";
+import CollapsibleBox from "compendium/components/CollapsibleBox";
 
 const TICK_ICON = <span>&#10004;</span>;
 
diff --git a/compendium-frontend/src/components/ScrollableTable.tsx b/compendium-frontend/src/components/ScrollableTable.tsx
index 94888ad34eafecfe84daad04e477396b63dee5c7..44effbf0863619f16abedc71d7a54c3a4a0900fa 100644
--- a/compendium-frontend/src/components/ScrollableTable.tsx
+++ b/compendium-frontend/src/components/ScrollableTable.tsx
@@ -1,7 +1,7 @@
 import React from "react";
-import CollapsibleBox from "./CollapsibleBox";
 import { Table } from "react-bootstrap";
-import { NrenAndYearDatapoint } from "../Schema";
+import CollapsibleBox from "compendium/components/CollapsibleBox";
+import { NrenAndYearDatapoint } from "compendium/Schema";
 
 interface ScrollableTableProps<T> {
 
diff --git a/compendium-frontend/src/components/WithLegend.tsx b/compendium-frontend/src/components/WithLegend.tsx
index d5f8cf303d26c62dd134b5f2387dbf71ef741cc0..9a459a6f3b3c7c37e1d5088c9d20a06aaefc50ba 100644
--- a/compendium-frontend/src/components/WithLegend.tsx
+++ b/compendium-frontend/src/components/WithLegend.tsx
@@ -1,5 +1,5 @@
 import React from 'react';
-import ChartContainer from "./graphing/ChartContainer";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
 
 interface InputProps {
     children: React.ReactNode;
diff --git a/compendium-frontend/src/components/download/DownloadContainer.tsx b/compendium-frontend/src/components/download/DownloadContainer.tsx
index 5c1c53d7c29890c59baa9647fe3246eba24c465b..3bb280292457780c6631d0e154a743258291b853 100644
--- a/compendium-frontend/src/components/download/DownloadContainer.tsx
+++ b/compendium-frontend/src/components/download/DownloadContainer.tsx
@@ -1,8 +1,8 @@
-import DownloadDataButton from "./DownloadDataButton";
-import DownloadImageChartButton from "./DownloadImageChartButton";
+import DownloadDataButton from "compendium/components/download/DownloadDataButton";
+import DownloadImageChartButton from "compendium/components/download/DownloadImageChartButton";
 
-import { ExportType } from "../../helpers/constants";
-import { NrenAndYearDatapoint } from "../../Schema";
+import { ExportType } from "compendium/helpers/constants";
+import { NrenAndYearDatapoint } from "compendium/Schema";
 
 interface DownloadProps {
     data: NrenAndYearDatapoint[];
diff --git a/compendium-frontend/src/components/download/DownloadDataButton.tsx b/compendium-frontend/src/components/download/DownloadDataButton.tsx
index e3e2efd4c787653d7107bc4cfdee0b12d529cb36..f3f0a1e711bb22542de8cf00f3d700bed2465778 100644
--- a/compendium-frontend/src/components/download/DownloadDataButton.tsx
+++ b/compendium-frontend/src/components/download/DownloadDataButton.tsx
@@ -1,8 +1,8 @@
 import React from 'react';
 import * as XLSX from "xlsx";
-import { ExportType } from "../../helpers/constants";
+import { ExportType } from "compendium/helpers/constants";
 import { FaDownload } from 'react-icons/fa';
-import { NrenAndYearDatapoint } from '../../Schema';
+import { NrenAndYearDatapoint } from "compendium/Schema";
 
 interface DownloadProps {
     data: NrenAndYearDatapoint[];
diff --git a/compendium-frontend/src/components/download/DownloadImageChartButton.tsx b/compendium-frontend/src/components/download/DownloadImageChartButton.tsx
index ba8399a906e6973e4b291fda977627a33ef55f0d..6ca33ce92fb4d1afad8718809ceb0cab16ee7550 100644
--- a/compendium-frontend/src/components/download/DownloadImageChartButton.tsx
+++ b/compendium-frontend/src/components/download/DownloadImageChartButton.tsx
@@ -1,7 +1,7 @@
 import React, { useContext, useState, useRef, useEffect } from 'react';
 import * as htmlToImage from 'html-to-image';
-import { ImageType } from "../../helpers/constants";
-import { ChartContainerContext } from "../../providers/ChartContainerProvider";
+import { ImageType } from "compendium/helpers/constants";
+import { ChartContainerContext } from "compendium/providers/ChartContainerProvider";
 import { FaDownload } from 'react-icons/fa';
 
 interface DownloadImageChartProps {
diff --git a/compendium-frontend/src/components/global/Banner.tsx b/compendium-frontend/src/components/global/Banner.tsx
index 3b66ada09dce347c3a8658dfbe784c02f35f36eb..fa3b002b86bb905ce5669f87c37a2abce39ead21 100644
--- a/compendium-frontend/src/components/global/Banner.tsx
+++ b/compendium-frontend/src/components/global/Banner.tsx
@@ -1,6 +1,6 @@
 import { ReactElement } from "react";
 import { Container, Row } from "react-bootstrap";
-import SectionDataLogo from "../../images/home_data_icon.svg";
+import SectionDataLogo from "compendium/images/home_data_icon.svg";
 
 interface inputProps {
     type: string,
diff --git a/compendium-frontend/src/components/global/ExternalPageNavBar.tsx b/compendium-frontend/src/components/global/ExternalPageNavBar.tsx
index b578bc67baf40a328ced08d962ec6900d2114526..fd6e77bb26761609e459e98b3aad1c28d9878c51 100644
--- a/compendium-frontend/src/components/global/ExternalPageNavBar.tsx
+++ b/compendium-frontend/src/components/global/ExternalPageNavBar.tsx
@@ -2,8 +2,8 @@ import { ReactElement, useContext } from "react";
 import { Link } from "react-router-dom";
 import { useLocation } from "react-router-dom";
 import { Col, Container, Row } from "react-bootstrap";
-import GeantLogo from "../../images/geant_logo_f2020_new.svg";
-import { userContext } from "../../providers/UserProvider";
+import GeantLogo from "compendium/images/geant_logo_f2020_new.svg";
+import { userContext } from "compendium/providers/UserProvider";
 
 function ExternalPageNavBar(): ReactElement {
     const { user } = useContext(userContext);
diff --git a/compendium-frontend/src/components/global/GeantFooter.tsx b/compendium-frontend/src/components/global/GeantFooter.tsx
index 309c2b5375be452e06a0a182e8d4720c925d3ac6..5dd5b18167eb19a2990c51abf88d51e8f4c058d8 100644
--- a/compendium-frontend/src/components/global/GeantFooter.tsx
+++ b/compendium-frontend/src/components/global/GeantFooter.tsx
@@ -1,7 +1,7 @@
 import { ReactElement } from "react";
 import { Container, Row, Col } from "react-bootstrap";
-import GeantLogo from "../../images/geant_logo_colored.svg";
-import EULogo from "../../images/eu_logo.png";
+import GeantLogo from "compendium/images/geant_logo_colored.svg";
+import EULogo from "compendium/images/eu_logo.png";
 
 function GeantFooter(): ReactElement {
     return <footer className="page-footer pt-3">
diff --git a/compendium-frontend/src/components/global/PageHeader.tsx b/compendium-frontend/src/components/global/PageHeader.tsx
index 0cfee99868e4d16726f3d8bf065246fab87af50f..fe9d4a8525828ebbe2c72570af3f8d3631cfa1aa 100644
--- a/compendium-frontend/src/components/global/PageHeader.tsx
+++ b/compendium-frontend/src/components/global/PageHeader.tsx
@@ -1,8 +1,7 @@
 import { ReactElement } from "react";
 import { Container, Row, Col } from "react-bootstrap";
 import { Link } from "react-router-dom";
-
-import SectionLink from "./SectionLink";
+import SectionLink from "compendium/components/global/SectionLink";
 
 interface inputProps {
     type: string
diff --git a/compendium-frontend/src/components/global/SectionLink.tsx b/compendium-frontend/src/components/global/SectionLink.tsx
index 49c851a1984ed7864ba6dd3bdf4ae54327363978..a8562774a059ddfecddd5369ab88cf871dff8d2f 100644
--- a/compendium-frontend/src/components/global/SectionLink.tsx
+++ b/compendium-frontend/src/components/global/SectionLink.tsx
@@ -1,5 +1,5 @@
 import { ReactElement } from "react";
-import SectionDataLogo from "../../images/home_reports_icon.svg";
+import SectionDataLogo from "compendium/images/home_reports_icon.svg";
 
 interface inputProps {
     section: string
diff --git a/compendium-frontend/src/components/graphing/ChartContainer.tsx b/compendium-frontend/src/components/graphing/ChartContainer.tsx
index 9a78a7545bc99855ba7caeca47019cf5d9925366..c9fad2aa5710fd7aa140d1b58a0e985abfecaf8a 100644
--- a/compendium-frontend/src/components/graphing/ChartContainer.tsx
+++ b/compendium-frontend/src/components/graphing/ChartContainer.tsx
@@ -1,5 +1,5 @@
 import React, { useContext, ReactNode } from 'react';
-import { ChartContainerContext } from '../../providers/ChartContainerProvider';
+import { ChartContainerContext } from 'compendium/providers/ChartContainerProvider';
 
 interface ChartContainerProps {
     children: ReactNode;
diff --git a/compendium-frontend/src/components/graphing/Filter.tsx b/compendium-frontend/src/components/graphing/Filter.tsx
index 05e54d78b799037a3afba297442088493ef8c10c..cd3de35e7b2710923485dc181f685f9ff1e7f6a4 100644
--- a/compendium-frontend/src/components/graphing/Filter.tsx
+++ b/compendium-frontend/src/components/graphing/Filter.tsx
@@ -1,8 +1,8 @@
 import React, { ReactElement, useEffect, useState, useContext } from 'react';
 import { Button, Dropdown, ButtonToolbar, Col } from 'react-bootstrap';
 import Form from 'react-bootstrap/Form';
-import { FilterSelection, Nren } from "../../Schema";
-import { NrenContext } from "../../providers/NrenProvider";
+import { FilterSelection, Nren } from "compendium/Schema";
+import { NrenContext } from "compendium/providers/NrenProvider";
 
 interface inputProps {
     filterOptions: { availableNrens: Nren[], availableYears: number[] }
diff --git a/compendium-frontend/src/components/sections/ConnectedUsersLinks.tsx b/compendium-frontend/src/components/sections/ConnectedUsersLinks.tsx
index 1ce8a5078f3430b627c747b12a3baad1daa3b95f..5ae22ff43e3801da987aa4a8d51c02afdc2edcd5 100644
--- a/compendium-frontend/src/components/sections/ConnectedUsersLinks.tsx
+++ b/compendium-frontend/src/components/sections/ConnectedUsersLinks.tsx
@@ -1,6 +1,6 @@
 import { Link } from "react-router-dom";
-import LinkWithHighlight from '../LinkWithHighlight';
-import titles from "@/titles";
+import LinkWithHighlight from 'compendium/components/LinkWithHighlight';
+import titles from "compendium/titles";
 
 export default function ConnectedUsersLinks({ sidebar = false }) {
     const LinkComponent = sidebar ? LinkWithHighlight : Link;
diff --git a/compendium-frontend/src/components/sections/NetworkLinks.tsx b/compendium-frontend/src/components/sections/NetworkLinks.tsx
index 2b00d3d94cd85332fb3d2083f5030249b5fd9ca2..58cf7992ed3912042e4489d6d6d1661b14519812 100644
--- a/compendium-frontend/src/components/sections/NetworkLinks.tsx
+++ b/compendium-frontend/src/components/sections/NetworkLinks.tsx
@@ -1,6 +1,6 @@
 import { Link } from "react-router-dom";
-import LinkWithHighlight from '../LinkWithHighlight';
-import titles from "@/titles";
+import LinkWithHighlight from 'compendium/components/LinkWithHighlight';
+import titles from "compendium/titles";
 
 export default function NetworkLinks({ sidebar = false }) {
     const LinkComponent = sidebar ? LinkWithHighlight : Link;
diff --git a/compendium-frontend/src/components/sections/OrganizationLinks.tsx b/compendium-frontend/src/components/sections/OrganizationLinks.tsx
index 80ddde27b529f50cc56ee5990674e7d1703a9dc9..f7e606438553a0d4e3817537fd8e013a2d8ef89c 100644
--- a/compendium-frontend/src/components/sections/OrganizationLinks.tsx
+++ b/compendium-frontend/src/components/sections/OrganizationLinks.tsx
@@ -1,6 +1,6 @@
 import { Link } from "react-router-dom";
-import LinkWithHighlight from '../LinkWithHighlight';
-import titles from "@/titles";
+import LinkWithHighlight from 'compendium/components/LinkWithHighlight';
+import titles from "compendium/titles";
 
 export default function OrganizationLinks({ sidebar = false }) {
 
diff --git a/compendium-frontend/src/components/sections/PolicyLinks.tsx b/compendium-frontend/src/components/sections/PolicyLinks.tsx
index a827c770cd6903fef23515b0a75055d4560abadf..0ba03bd03bfd9e1162d5b6ecaa3750b9205b0a5f 100644
--- a/compendium-frontend/src/components/sections/PolicyLinks.tsx
+++ b/compendium-frontend/src/components/sections/PolicyLinks.tsx
@@ -1,6 +1,6 @@
 import { Link } from "react-router-dom";
-import LinkWithHighlight from '../LinkWithHighlight';
-import titles from "@/titles";
+import LinkWithHighlight from 'compendium/components/LinkWithHighlight';
+import titles from "compendium/titles";
 
 export default function PolicyLinks({ sidebar = false }) {
 
diff --git a/compendium-frontend/src/components/sections/ServicesLinks.tsx b/compendium-frontend/src/components/sections/ServicesLinks.tsx
index 8a91a4b916779b8df901661d1f6d9dac3f5730cc..2458661c37d67d8e880360c4f5d288f772bfb16e 100644
--- a/compendium-frontend/src/components/sections/ServicesLinks.tsx
+++ b/compendium-frontend/src/components/sections/ServicesLinks.tsx
@@ -1,6 +1,6 @@
 import { Link } from "react-router-dom";
-import LinkWithHighlight from '../LinkWithHighlight';
-import titles from "@/titles";
+import LinkWithHighlight from 'compendium/components/LinkWithHighlight';
+import titles from "compendium/titles";
 
 export default function ServicesLinks({ sidebar = false }) {
     const LinkComponent = sidebar ? LinkWithHighlight : Link;
diff --git a/compendium-frontend/src/components/sidebar/ConnectedUsersSidebar.tsx b/compendium-frontend/src/components/sidebar/ConnectedUsersSidebar.tsx
index 8eaa9eea77abdd1ebfe79158acc8213443464bf7..bf034ba61cdf8c88756b9d8402d53d69184285eb 100644
--- a/compendium-frontend/src/components/sidebar/ConnectedUsersSidebar.tsx
+++ b/compendium-frontend/src/components/sidebar/ConnectedUsersSidebar.tsx
@@ -1,5 +1,5 @@
-import Sidebar from './SideBar';
-import ConnectedUsersLinks from '../sections/ConnectedUsersLinks';
+import Sidebar from 'compendium/components/sidebar/SideBar';
+import ConnectedUsersLinks from 'compendium/components/sections/ConnectedUsersLinks';
 
 const ConnectedUsersSidebar = () => {
     return (
diff --git a/compendium-frontend/src/components/sidebar/NetworkSidebar.tsx b/compendium-frontend/src/components/sidebar/NetworkSidebar.tsx
index 2e7a9f2cfdc77090333e2ca2c475c519288dbbb3..b178bebfa66827eaaac2a84f938bfac9d7122b58 100644
--- a/compendium-frontend/src/components/sidebar/NetworkSidebar.tsx
+++ b/compendium-frontend/src/components/sidebar/NetworkSidebar.tsx
@@ -1,5 +1,5 @@
-import Sidebar from './SideBar';
-import NetworkLinks from '../sections/NetworkLinks';
+import Sidebar from 'compendium/components/sidebar/SideBar';
+import NetworkLinks from 'compendium/components/sections/NetworkLinks';
 
 const NetworkSidebar = () => {
     return (
diff --git a/compendium-frontend/src/components/sidebar/OrganizationSidebar.tsx b/compendium-frontend/src/components/sidebar/OrganizationSidebar.tsx
index fec6bd2739c5af22aed458dfddd8da864249cb39..86507763d7b15b1343327021efaa29ed9b488a6f 100644
--- a/compendium-frontend/src/components/sidebar/OrganizationSidebar.tsx
+++ b/compendium-frontend/src/components/sidebar/OrganizationSidebar.tsx
@@ -1,5 +1,5 @@
-import Sidebar from './SideBar';
-import OrganizationLinks from '../sections/OrganizationLinks';
+import Sidebar from 'compendium/components/sidebar/SideBar';
+import OrganizationLinks from 'compendium/components/sections/OrganizationLinks';
 
 const OrganizationSidebar = () => {
     return (
diff --git a/compendium-frontend/src/components/sidebar/PolicySidebar.tsx b/compendium-frontend/src/components/sidebar/PolicySidebar.tsx
index 5e320722baadbee41c9d957cef430f3303a0c9a6..3400b0866113a54e668aea721fc3ad7d889ade48 100644
--- a/compendium-frontend/src/components/sidebar/PolicySidebar.tsx
+++ b/compendium-frontend/src/components/sidebar/PolicySidebar.tsx
@@ -1,5 +1,5 @@
-import Sidebar from './SideBar';
-import PolicyLinks from '../sections/PolicyLinks';
+import Sidebar from 'compendium/components/sidebar/SideBar';
+import PolicyLinks from 'compendium/components/sections/PolicyLinks';
 
 const PolicySidebar = () => {
     return (
diff --git a/compendium-frontend/src/components/sidebar/ServicesSidebar.tsx b/compendium-frontend/src/components/sidebar/ServicesSidebar.tsx
index e7cbe174bcecef51e30ae642f75daed9a6b7bfab..8e35cbea1832deacc9d12fc19e3b6c0d08d8045b 100644
--- a/compendium-frontend/src/components/sidebar/ServicesSidebar.tsx
+++ b/compendium-frontend/src/components/sidebar/ServicesSidebar.tsx
@@ -1,5 +1,5 @@
-import Sidebar from './SideBar';
-import ServicesLinks from '../sections/ServicesLinks';
+import Sidebar from 'compendium/components/sidebar/SideBar';
+import ServicesLinks from 'compendium/components/sections/ServicesLinks';
 
 const ServicesSidebar = () => {
     return (
diff --git a/compendium-frontend/src/components/sidebar/SideBar.tsx b/compendium-frontend/src/components/sidebar/SideBar.tsx
index 4d4ff3da71143476a54aafecb26bef407b5efee3..afd19a798038889eb38a32ce98329d5801782f40 100644
--- a/compendium-frontend/src/components/sidebar/SideBar.tsx
+++ b/compendium-frontend/src/components/sidebar/SideBar.tsx
@@ -1,5 +1,5 @@
 import React, { useEffect, useState } from 'react';
-// import { sidebarContext } from "../helpers/sidebarProvider";
+// import { sidebarContext } from "compendium/providers/SidebarProvider";
 import { AiOutlineClose, AiOutlinePlus } from 'react-icons/ai';
 
 interface Props {
diff --git a/compendium-frontend/src/helpers/dataconversion.tsx b/compendium-frontend/src/helpers/dataconversion.tsx
index 3fc5e8df7318b03db50798089cd51c73c14fba51..d15ea5f703339c90a021859ed6626d64eb650db0 100644
--- a/compendium-frontend/src/helpers/dataconversion.tsx
+++ b/compendium-frontend/src/helpers/dataconversion.tsx
@@ -4,7 +4,7 @@ import {
     BasicDataset, NrenStaff, TrafficVolume, NrenAndYearDatapoint,
     TrafficRatio,
     URLDatapoint
-} from "../Schema";
+} from "compendium/Schema";
 
 // create a color from a string, credits https://stackoverflow.com/a/16348977
 const stringToColour = function (str) {
diff --git a/compendium-frontend/src/helpers/useConfig.tsx b/compendium-frontend/src/helpers/useConfig.tsx
index f8881ee85bcd3b49a2f335b8a5828617655fd2e7..2fe2cf1266b274f4771f5b945eba5b9347ccb7da 100644
--- a/compendium-frontend/src/helpers/useConfig.tsx
+++ b/compendium-frontend/src/helpers/useConfig.tsx
@@ -1,5 +1,5 @@
 import { useContext } from "react";
-import { configContext, BaseConfig } from "../providers/ConfigProvider";
+import { configContext, BaseConfig } from "compendium/providers/ConfigProvider";
 
 export function useConfig<T extends BaseConfig>(key: string): Record<string, T> & {
     setConfig: (value: T, timeout?: Date) => void
diff --git a/compendium-frontend/src/helpers/useData.ts b/compendium-frontend/src/helpers/useData.ts
index 7879a63a411e9c1baaf006c80f01e2d0448e7e6b..d3c3a2aea21833ebfa808bc6937b7e5737e1bb07 100644
--- a/compendium-frontend/src/helpers/useData.ts
+++ b/compendium-frontend/src/helpers/useData.ts
@@ -1,6 +1,6 @@
 import { useEffect, useMemo, useState } from "react";
-import { Nren, NrenAndYearDatapoint } from "../Schema";
-import { usePreview } from "./usePreview";
+import { Nren, NrenAndYearDatapoint } from "compendium/Schema";
+import { usePreview } from "compendium/helpers/usePreview";
 
 function getYearsAndNrens(sourceData: NrenAndYearDatapoint[]) {
     const years = new Set<number>();
diff --git a/compendium-frontend/src/helpers/usePreview.ts b/compendium-frontend/src/helpers/usePreview.ts
index 3394819cb174b28beb8a0181ced928675d2eabc3..51f4b24bee7c3f8d906ccbfb37aab2628c61a0cd 100644
--- a/compendium-frontend/src/helpers/usePreview.ts
+++ b/compendium-frontend/src/helpers/usePreview.ts
@@ -1,7 +1,7 @@
 import { useContext, useEffect } from "react";
-import { PreviewContext } from "../providers/PreviewProvider";
 import { useSearchParams } from "react-router-dom";
-import { userContext } from "../providers/UserProvider";
+import { PreviewContext } from "compendium/providers/PreviewProvider";
+import { userContext } from "compendium/providers/UserProvider";
 
 export function usePreview() {
     const { preview, setPreview } = useContext(PreviewContext);
diff --git a/compendium-frontend/src/index.tsx b/compendium-frontend/src/index.tsx
index 8cca5a6c1ff3f6991063cc9ecef40afef8681c01..e6bb7b61ec5b81d9fd2d9a4f8e7df4f17fa17024 100644
--- a/compendium-frontend/src/index.tsx
+++ b/compendium-frontend/src/index.tsx
@@ -1,8 +1,8 @@
 import React from 'react';
 import { createRoot } from 'react-dom/client';
-import App from "./App";
+import App from "compendium/App";
 import 'bootstrap/dist/css/bootstrap.min.css';
-import './main.scss';
+import 'compendium/main.scss';
 
 const container = document.getElementById('root') as HTMLElement;
 const root = createRoot(container);
diff --git a/compendium-frontend/src/matomo/MatomoProvider.tsx b/compendium-frontend/src/matomo/MatomoProvider.tsx
index 7e810997da540bb2e3eb74c873660c418e30f444..05a7ba831f69c7d820de9a0a6b2d3990481c3543 100644
--- a/compendium-frontend/src/matomo/MatomoProvider.tsx
+++ b/compendium-frontend/src/matomo/MatomoProvider.tsx
@@ -1,6 +1,6 @@
 import React, { createContext, useContext } from 'react'
-import MatomoTracker, { createInstance } from './MatomoTracker'
-import { consentContext } from '../providers/ConsentProvider'
+import MatomoTracker, { createInstance } from 'compendium/matomo/MatomoTracker'
+import { consentContext } from 'compendium/providers/ConsentProvider'
 
 export interface MatomoProviderProps {
     children?: React.ReactNode
diff --git a/compendium-frontend/src/matomo/MatomoTracker.ts b/compendium-frontend/src/matomo/MatomoTracker.ts
index 1427781fe3ce484fc8b5de59dda910c10c142bf2..82f795ce259a89419fc681cd9d430e9f0c5fa4f7 100644
--- a/compendium-frontend/src/matomo/MatomoTracker.ts
+++ b/compendium-frontend/src/matomo/MatomoTracker.ts
@@ -1,4 +1,4 @@
-import { TRACK_TYPES } from './constants'
+import { TRACK_TYPES } from 'compendium/matomo/constants'
 import {
     CustomDimension,
     TrackEventParams,
@@ -6,7 +6,7 @@ import {
     TrackPageViewParams,
     TrackParams,
     UserOptions,
-} from './types'
+} from 'compendium/matomo/types'
 
 class MatomoTracker {
     mutationObserver?: MutationObserver
diff --git a/compendium-frontend/src/matomo/PrivacyModal.tsx b/compendium-frontend/src/matomo/PrivacyModal.tsx
index 97e100b111777e78930896a562666f9fd6762111..f701375ab6c7d36c9b435b0491f132e8a1d74593 100644
--- a/compendium-frontend/src/matomo/PrivacyModal.tsx
+++ b/compendium-frontend/src/matomo/PrivacyModal.tsx
@@ -1,6 +1,6 @@
 import React, { useState, useContext } from 'react';
 import { Modal, Button, Form } from 'react-bootstrap';
-import { consentContext } from '../providers/ConsentProvider';
+import { consentContext } from 'compendium/providers/ConsentProvider';
 
 const PrivacyModal: React.FC = () => {
     const { consent, setConsent } = useContext(consentContext);
diff --git a/compendium-frontend/src/matomo/UseMatomo.ts b/compendium-frontend/src/matomo/UseMatomo.ts
index c3624f016040f8bf370be73da9b02b6f756a2fc7..8f8feb5238a9cc6d3fe20c8070dc713ce74d4ed5 100644
--- a/compendium-frontend/src/matomo/UseMatomo.ts
+++ b/compendium-frontend/src/matomo/UseMatomo.ts
@@ -1,10 +1,10 @@
 import { useCallback, useContext } from 'react'
-import { MatomoContext } from './MatomoProvider'
+import { MatomoContext } from 'compendium/matomo/MatomoProvider'
 import {
     TrackEventParams,
     TrackLinkParams,
     TrackPageViewParams
-} from './types'
+} from 'compendium/matomo/types'
 
 function useMatomo() {
     const instance = useContext(MatomoContext)
diff --git a/compendium-frontend/src/pages/CompendiumData.tsx b/compendium-frontend/src/pages/CompendiumData.tsx
index 274950f450d56f2aaa107939751a24a03c7bd036..3d33a02b9ebac3d67df2ba44b5058ac188aded81 100644
--- a/compendium-frontend/src/pages/CompendiumData.tsx
+++ b/compendium-frontend/src/pages/CompendiumData.tsx
@@ -1,16 +1,16 @@
 import React, { ReactElement } from "react";
 import { Container, Row } from "react-bootstrap";
-import CollapsibleBox from "../components/CollapsibleBox";
-import PageHeader from "../components/global/PageHeader"
-import Banner from "../components/global/Banner";
-import { Sections } from "../helpers/constants";
-import { usePreview } from "../helpers/usePreview";
-import useMatomo from "../matomo/UseMatomo";
-import OrganizationLinks from "../components/sections/OrganizationLinks";
-import PolicyLinks from "../components/sections/PolicyLinks";
-import ConnectedUsersLinks from "../components/sections/ConnectedUsersLinks";
-import NetworkLinks from "../components/sections/NetworkLinks";
-import ServicesLinks from "../components/sections/ServicesLinks";
+import CollapsibleBox from "compendium/components/CollapsibleBox";
+import PageHeader from "compendium/components/global/PageHeader"
+import Banner from "compendium/components/global/Banner";
+import { Sections } from "compendium/helpers/constants";
+import { usePreview } from "compendium/helpers/usePreview";
+import useMatomo from "compendium/matomo/UseMatomo";
+import OrganizationLinks from "compendium/components/sections/OrganizationLinks";
+import PolicyLinks from "compendium/components/sections/PolicyLinks";
+import ConnectedUsersLinks from "compendium/components/sections/ConnectedUsersLinks";
+import NetworkLinks from "compendium/components/sections/NetworkLinks";
+import ServicesLinks from "compendium/components/sections/ServicesLinks";
 
 function CompendiumData(): ReactElement {
     usePreview();
diff --git a/compendium-frontend/src/pages/ConnectedUsers/ConnectedInstitutionsURLs.tsx b/compendium-frontend/src/pages/ConnectedUsers/ConnectedInstitutionsURLs.tsx
index 1ca93b3fad25887ba727a825b8de2664cf8957dd..a5f185104d8c5aabc35b643b9fbb848d0698d497 100644
--- a/compendium-frontend/src/pages/ConnectedUsers/ConnectedInstitutionsURLs.tsx
+++ b/compendium-frontend/src/pages/ConnectedUsers/ConnectedInstitutionsURLs.tsx
@@ -1,15 +1,15 @@
 import { useContext } from 'react';
 
-import { URLDatapoint } from "../../Schema";
-import { createDataLookup, getLatestData, extractUrls, getTableData } from '../../helpers/dataconversion';
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter";
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import { useData } from "../../helpers/useData";
-import ChartContainer from '../../components/graphing/ChartContainer';
-import NrenYearTable from '../../components/NrenYearTable';
-import titles from "@/titles";
+import { URLDatapoint } from "compendium/Schema";
+import { createDataLookup, getLatestData, extractUrls, getTableData } from 'compendium/helpers/dataconversion';
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import { useData } from "compendium/helpers/useData";
+import ChartContainer from 'compendium/components/graphing/ChartContainer';
+import NrenYearTable from 'compendium/components/NrenYearTable';
+import titles from "compendium/titles";
 
 function ConnectedInstitutionsURLsPage() {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/ConnectedUsers/ConnectedUser.tsx b/compendium-frontend/src/pages/ConnectedUsers/ConnectedUser.tsx
index 2c5f44d538b3a9c2b2d8f52787d20115dd6c04d6..ba55aad57108b62a88453dbf4bd47bb026cc78a2 100644
--- a/compendium-frontend/src/pages/ConnectedUsers/ConnectedUser.tsx
+++ b/compendium-frontend/src/pages/ConnectedUsers/ConnectedUser.tsx
@@ -8,16 +8,16 @@ import {
     ConnectivityLevel,
     ConnectivityLoad,
     ConnectivityPage
-} from "../../Schema";
-import { createCategoryMatrixLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { CommercialConnectionCategories, CommercialOrgCategories, Sections, UserCategories } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import { ScrollableMatrix } from "../../components/ScrollableMatrix";
-import titles from "@/titles";
+} from "compendium/Schema";
+import { createCategoryMatrixLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { CommercialConnectionCategories, CommercialOrgCategories, Sections, UserCategories } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import { ScrollableMatrix } from "compendium/components/ScrollableMatrix";
+import titles from "compendium/titles";
 
 const displayTitle = {
     [ConnectivityPage.ConnectedProportion]: titles["connected-proportion"],
diff --git a/compendium-frontend/src/pages/ConnectedUsers/RemoteCampuses.tsx b/compendium-frontend/src/pages/ConnectedUsers/RemoteCampuses.tsx
index 673d25d437bf426173f4eba768ea6b121f3cd8ae..96dee3d5d5f00f1da948b0a500b4d963d639cb1b 100644
--- a/compendium-frontend/src/pages/ConnectedUsers/RemoteCampuses.tsx
+++ b/compendium-frontend/src/pages/ConnectedUsers/RemoteCampuses.tsx
@@ -1,15 +1,15 @@
 import { useContext } from 'react';
 
-import { RemoteCampuses } from "../../Schema";
-import { createDataLookupList, getTableData } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from '../../helpers/useData';
-import MulticolumnNrenYearTable from '../../components/MulticolumnNrenYearTable';
-import titles from "@/titles";
+import { RemoteCampuses } from "compendium/Schema";
+import { createDataLookupList, getTableData } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from 'compendium/helpers/useData';
+import MulticolumnNrenYearTable from 'compendium/components/MulticolumnNrenYearTable';
+import titles from "compendium/titles";
 
 function RemoteCampusesPage() {
     const field = 'remote_campus_connectivity';
diff --git a/compendium-frontend/src/pages/Landing.tsx b/compendium-frontend/src/pages/Landing.tsx
index 11dec7f8921326cf93ca2a82fb5ce1efbe29a235..156c08ccac60a369921d972a3168fbe386f8dc5c 100644
--- a/compendium-frontend/src/pages/Landing.tsx
+++ b/compendium-frontend/src/pages/Landing.tsx
@@ -1,9 +1,9 @@
 import { ReactElement, useEffect } from "react";
 import { Link } from "react-router-dom";
 import { Card, Container, Row, Col } from "react-bootstrap";
-import SectionDataLogo from "../images/home_data_icon.svg";
-import SectionReportsLogo from "../images/home_reports_icon.svg";
-import useMatomo from "../matomo/UseMatomo";
+import SectionDataLogo from "compendium/images/home_data_icon.svg";
+import SectionReportsLogo from "compendium/images/home_reports_icon.svg";
+import useMatomo from "compendium/matomo/UseMatomo";
 
 function Landing(): ReactElement {
     const { trackPageView } = useMatomo();
diff --git a/compendium-frontend/src/pages/Network/AlienWave.tsx b/compendium-frontend/src/pages/Network/AlienWave.tsx
index 0fe7e4e4e8d70d0fc4cf55c84c262fec792ef57e..095571076e087d75b767604761a25bf36c2a373a 100644
--- a/compendium-frontend/src/pages/Network/AlienWave.tsx
+++ b/compendium-frontend/src/pages/Network/AlienWave.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { AlienWave } from "../../Schema";
-import { createNrenTableLookup, addTooltip } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { AlienWave } from "compendium/Schema";
+import { createNrenTableLookup, addTooltip } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function AlienWavePage(): React.ReactElement {
     const dataField = 'alien_wave_third_party';
diff --git a/compendium-frontend/src/pages/Network/AlienWaveInternal.tsx b/compendium-frontend/src/pages/Network/AlienWaveInternal.tsx
index 0ec432e5aa3a3237d666d56d33418466d7365746..df85f6f6ffd7f9406ac6983a6ea2ab967b6fbd2b 100644
--- a/compendium-frontend/src/pages/Network/AlienWaveInternal.tsx
+++ b/compendium-frontend/src/pages/Network/AlienWaveInternal.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { AlienWaveInternal } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { AlienWaveInternal } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function AlienWaveInternalPage(): React.ReactElement {
     const dataField = 'alien_wave_internal';
diff --git a/compendium-frontend/src/pages/Network/Automation.tsx b/compendium-frontend/src/pages/Network/Automation.tsx
index 4fe24ef5a07a3dee2005defc6fea6a918a39feda..ecccbfe8b88e2cdab3bc6e6c4a5b5b9a6b476f8b 100644
--- a/compendium-frontend/src/pages/Network/Automation.tsx
+++ b/compendium-frontend/src/pages/Network/Automation.tsx
@@ -1,16 +1,16 @@
 import React, { useContext } from "react";
 import { Table } from "react-bootstrap";
 
-import { NetworkAutomation } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import ColorPill from "../../components/ColorPill";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import titles from "@/titles";
+import { NetworkAutomation } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import ColorPill from "compendium/components/ColorPill";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import titles from "compendium/titles";
 
 function AutomationPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Network/CapacityCoreIP.tsx b/compendium-frontend/src/pages/Network/CapacityCoreIP.tsx
index ca1575812cb5e42f987cb1a551b02006171188dc..fb66a40fec836845cb5b2a5c645638f8a683eec3 100644
--- a/compendium-frontend/src/pages/Network/CapacityCoreIP.tsx
+++ b/compendium-frontend/src/pages/Network/CapacityCoreIP.tsx
@@ -2,17 +2,17 @@ import { useContext } from 'react';
 import { Bar } from 'react-chartjs-2';
 import { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend } from 'chart.js';
 
-import { Capacity } from "../../Schema";
-import { createBarChartDataset } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import { useData } from '../../helpers/useData';
-import ChartContainer from '../../components/graphing/ChartContainer';
+import { Capacity } from "compendium/Schema";
+import { createBarChartDataset } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import { useData } from 'compendium/helpers/useData';
+import ChartContainer from 'compendium/components/graphing/ChartContainer';
 import ChartDataLabels from 'chartjs-plugin-datalabels';
-import { getBarChartOptions } from '../../helpers/charthelpers';
-import titles from "@/titles";
+import { getBarChartOptions } from 'compendium/helpers/charthelpers';
+import titles from "compendium/titles";
 
 ChartJS.register(
     CategoryScale,
diff --git a/compendium-frontend/src/pages/Network/CapacityLargestLink.tsx b/compendium-frontend/src/pages/Network/CapacityLargestLink.tsx
index ed591eec4557e17b356b19feb556dfd6bf5068a1..fbc32f29bf45bb126fd3431bed760153380049d6 100644
--- a/compendium-frontend/src/pages/Network/CapacityLargestLink.tsx
+++ b/compendium-frontend/src/pages/Network/CapacityLargestLink.tsx
@@ -2,17 +2,17 @@ import { useContext } from 'react';
 import { Bar } from 'react-chartjs-2';
 import { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend } from 'chart.js';
 
-import { Capacity } from "../../Schema";
-import { createBarChartDataset } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import { useData } from '../../helpers/useData';
-import ChartContainer from '../../components/graphing/ChartContainer';
+import { Capacity } from "compendium/Schema";
+import { createBarChartDataset } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import { useData } from 'compendium/helpers/useData';
+import ChartContainer from 'compendium/components/graphing/ChartContainer';
 import ChartDataLabels from 'chartjs-plugin-datalabels';
-import { getBarChartOptions } from '../../helpers/charthelpers';
-import titles from "@/titles";
+import { getBarChartOptions } from 'compendium/helpers/charthelpers';
+import titles from "compendium/titles";
 
 ChartJS.register(
     CategoryScale,
diff --git a/compendium-frontend/src/pages/Network/CertificateProvider.tsx b/compendium-frontend/src/pages/Network/CertificateProvider.tsx
index 92651e9b3af6a353fd8f85f9bc06da317a9a142e..5a19d18a182aed91284a9f9d4c2a5dbc1a21f9c8 100644
--- a/compendium-frontend/src/pages/Network/CertificateProvider.tsx
+++ b/compendium-frontend/src/pages/Network/CertificateProvider.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { CertificateProviders } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { CertificateProviders } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function CertificateProviderPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Network/DarkFibreInstalled.tsx b/compendium-frontend/src/pages/Network/DarkFibreInstalled.tsx
index 1bfbd5c439b8795322bc2e5f86a61874137588ee..8fb33dc4b1fc558b3197be32ba27f7099c8871dd 100644
--- a/compendium-frontend/src/pages/Network/DarkFibreInstalled.tsx
+++ b/compendium-frontend/src/pages/Network/DarkFibreInstalled.tsx
@@ -12,16 +12,16 @@ import {
     Legend,
 } from 'chart.js';
 
-import { DarkFibreInstalled } from "../../Schema";
-import { createLineChartDataset } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter";
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from '../../helpers/useData';
-import { getLineChartOptions } from '../../helpers/charthelpers';
-import titles from "@/titles";
+import { DarkFibreInstalled } from "compendium/Schema";
+import { createLineChartDataset } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from 'compendium/helpers/useData';
+import { getLineChartOptions } from 'compendium/helpers/charthelpers';
+import titles from "compendium/titles";
 
 ChartJS.register(
     CategoryScale,
diff --git a/compendium-frontend/src/pages/Network/DarkFibreLease.tsx b/compendium-frontend/src/pages/Network/DarkFibreLease.tsx
index edd0ab8e88685380eaac061a36aa0d0605884828..d6b727f8b1e3163c41bd30380aa03b57a367d692 100644
--- a/compendium-frontend/src/pages/Network/DarkFibreLease.tsx
+++ b/compendium-frontend/src/pages/Network/DarkFibreLease.tsx
@@ -11,16 +11,16 @@ import {
     Legend,
 } from 'chart.js';
 
-import { DarkFibreLease } from "../../Schema";
-import { createLineChartDataset } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter";
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from '../../helpers/useData';
-import { getLineChartOptions } from '../../helpers/charthelpers';
-import titles from "@/titles";
+import { DarkFibreLease } from "compendium/Schema";
+import { createLineChartDataset } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from 'compendium/helpers/useData';
+import { getLineChartOptions } from 'compendium/helpers/charthelpers';
+import titles from "compendium/titles";
 
 ChartJS.register(
     CategoryScale,
diff --git a/compendium-frontend/src/pages/Network/ExternalConnections.tsx b/compendium-frontend/src/pages/Network/ExternalConnections.tsx
index 59738a43fdcd60e8d2559177258c034a38185a41..6d98ad715562a820f1b147e0c7a3c06292afc39c 100644
--- a/compendium-frontend/src/pages/Network/ExternalConnections.tsx
+++ b/compendium-frontend/src/pages/Network/ExternalConnections.tsx
@@ -1,15 +1,15 @@
 import React, { useContext } from "react";
 
-import { ExternalConnection } from "../../Schema";
-import { createDataLookupList } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import { ScrollableTable } from "../../components/ScrollableTable";
-import titles from "@/titles";
+import { ExternalConnection } from "compendium/Schema";
+import { createDataLookupList } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import { ScrollableTable } from "compendium/components/ScrollableTable";
+import titles from "compendium/titles";
 
 function ExternalConnectionsPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Network/FibreLight.tsx b/compendium-frontend/src/pages/Network/FibreLight.tsx
index 7f1f80990af168419bc796ee0cb00f404198e1c4..a76894295c3b40915005ca60365ca6028c2b3133 100644
--- a/compendium-frontend/src/pages/Network/FibreLight.tsx
+++ b/compendium-frontend/src/pages/Network/FibreLight.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { FibreLight } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { FibreLight } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function FibreLightPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Network/IRUDuration.tsx b/compendium-frontend/src/pages/Network/IRUDuration.tsx
index 36fac6cd6c5d622627f7a931c587c2344d8ed921..a084f4d004c67892ea1a95fd3640316e32a026c9 100644
--- a/compendium-frontend/src/pages/Network/IRUDuration.tsx
+++ b/compendium-frontend/src/pages/Network/IRUDuration.tsx
@@ -12,16 +12,16 @@ import {
     Legend,
 } from 'chart.js';
 
-import { DarkFibreLease } from "../../Schema";
-import { createLineChartDataset } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter";
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from '../../helpers/useData';
-import { getLineChartOptions } from '../../helpers/charthelpers';
-import titles from "@/titles";
+import { DarkFibreLease } from "compendium/Schema";
+import { createLineChartDataset } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from 'compendium/helpers/useData';
+import { getLineChartOptions } from 'compendium/helpers/charthelpers';
+import titles from "compendium/titles";
 
 ChartJS.register(
     CategoryScale,
diff --git a/compendium-frontend/src/pages/Network/MonitoringTools.tsx b/compendium-frontend/src/pages/Network/MonitoringTools.tsx
index 2d3e804e5c4971631e037524fc7190c0f718df1f..0806ce0fd8825e517422c992158877bcde7196c4 100644
--- a/compendium-frontend/src/pages/Network/MonitoringTools.tsx
+++ b/compendium-frontend/src/pages/Network/MonitoringTools.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { MonitoringTools } from "../../Schema";
-import { createNrenTableLookup, addTooltip } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { MonitoringTools } from "compendium/Schema";
+import { createNrenTableLookup, addTooltip } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function MonitoringToolsPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Network/NetworkFunctionVirtualisation.tsx b/compendium-frontend/src/pages/Network/NetworkFunctionVirtualisation.tsx
index 668b76f788c1af33f0373973f0071a3a5223dee3..82f09fc1ed901d2a718e9791a1d86b2e50f37d9b 100644
--- a/compendium-frontend/src/pages/Network/NetworkFunctionVirtualisation.tsx
+++ b/compendium-frontend/src/pages/Network/NetworkFunctionVirtualisation.tsx
@@ -1,16 +1,16 @@
 import React, { useContext } from "react";
 import { Table } from "react-bootstrap";
 
-import { NetworkFunctionVirtualisation } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import ColorPill from "../../components/ColorPill";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import titles from "@/titles";
+import { NetworkFunctionVirtualisation } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import ColorPill from "compendium/components/ColorPill";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import titles from "compendium/titles";
 
 function NetworkFunctionVirtualisationPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Network/NetworkMapUrls.tsx b/compendium-frontend/src/pages/Network/NetworkMapUrls.tsx
index 9275e91928435da03661bd07ebb1347e21d58b4d..74356427b33f1d73d78c26b4d602728b4efe3177 100644
--- a/compendium-frontend/src/pages/Network/NetworkMapUrls.tsx
+++ b/compendium-frontend/src/pages/Network/NetworkMapUrls.tsx
@@ -1,15 +1,15 @@
 import React, { useContext } from "react";
 
-import { NetworkMapUrls } from "../../Schema";
-import { createDataLookup, getTableData, getLatestData, extractUrls } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import NrenYearTable from "../../components/NrenYearTable";
-import titles from "@/titles";
+import { NetworkMapUrls } from "compendium/Schema";
+import { createDataLookup, getTableData, getLatestData, extractUrls } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import NrenYearTable from "compendium/components/NrenYearTable";
+import titles from "compendium/titles";
 
 function NetworkMapUrlPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Network/NonRAndEPeer.tsx b/compendium-frontend/src/pages/Network/NonRAndEPeer.tsx
index 8e7884cc300ebb6261b2c34cd6f33ac13a622611..a15f9fd0b186bd5221f14b3274a7f6021fc77994 100644
--- a/compendium-frontend/src/pages/Network/NonRAndEPeer.tsx
+++ b/compendium-frontend/src/pages/Network/NonRAndEPeer.tsx
@@ -2,17 +2,17 @@ import { useContext } from 'react';
 import { Bar } from 'react-chartjs-2';
 import { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend } from 'chart.js';
 
-import { NonRAndEPeers } from "../../Schema";
-import { createBarChartDataset } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import { useData } from '../../helpers/useData';
-import ChartContainer from '../../components/graphing/ChartContainer';
+import { NonRAndEPeers } from "compendium/Schema";
+import { createBarChartDataset } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import { useData } from 'compendium/helpers/useData';
+import ChartContainer from 'compendium/components/graphing/ChartContainer';
 import ChartDataLabels from 'chartjs-plugin-datalabels';
-import { getBarChartOptions } from '../../helpers/charthelpers';
-import titles from "@/titles";
+import { getBarChartOptions } from 'compendium/helpers/charthelpers';
+import titles from "compendium/titles";
 
 ChartJS.register(
     CategoryScale,
diff --git a/compendium-frontend/src/pages/Network/OPsAutomation.tsx b/compendium-frontend/src/pages/Network/OPsAutomation.tsx
index 729c4e66cbd7ddf6aab46729814b68c472d29dfc..5db8f1016072f77b4690230fe9d5e020ee4d0993 100644
--- a/compendium-frontend/src/pages/Network/OPsAutomation.tsx
+++ b/compendium-frontend/src/pages/Network/OPsAutomation.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { OPsAutomation } from "../../Schema";
-import { createNrenTableLookup, addTooltip } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { OPsAutomation } from "compendium/Schema";
+import { createNrenTableLookup, addTooltip } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function OPsAutomationPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Network/PassiveMonitoring.tsx b/compendium-frontend/src/pages/Network/PassiveMonitoring.tsx
index 3395097d815f662aaaf9423c7dc0df5ae321f1f5..2aac55f2e1d6d84b450cdbd13e91aa97f3baf72d 100644
--- a/compendium-frontend/src/pages/Network/PassiveMonitoring.tsx
+++ b/compendium-frontend/src/pages/Network/PassiveMonitoring.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { PassiveMonitoring } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { PassiveMonitoring } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function PassiveMonitoringPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Network/PertTeam.tsx b/compendium-frontend/src/pages/Network/PertTeam.tsx
index 2570d4ba2bb704f4d3b2e6759841b0cf712035cc..4eb9f739c58b02663b5ff8c57401bebe48fcca7e 100644
--- a/compendium-frontend/src/pages/Network/PertTeam.tsx
+++ b/compendium-frontend/src/pages/Network/PertTeam.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { PertTeam } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { PertTeam } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function PertTeamPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Network/SiemVendors.tsx b/compendium-frontend/src/pages/Network/SiemVendors.tsx
index 9ea85f66203275c61dde8bb3bfad3ba2b582aa7e..95b8fbd902ce4bdce394bca4fbf19eb25c99a4d8 100644
--- a/compendium-frontend/src/pages/Network/SiemVendors.tsx
+++ b/compendium-frontend/src/pages/Network/SiemVendors.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { SiemVendors } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { SiemVendors } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function SiemVendorsPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Network/TrafficRatio.tsx b/compendium-frontend/src/pages/Network/TrafficRatio.tsx
index 7f70a03bd1b26e2ce88eb525e3cb5da787bca3ca..87a7868f545fbb927adbc0374c8fb86207df3416 100644
--- a/compendium-frontend/src/pages/Network/TrafficRatio.tsx
+++ b/compendium-frontend/src/pages/Network/TrafficRatio.tsx
@@ -2,16 +2,16 @@ import { useContext } from 'react';
 import { Bar } from 'react-chartjs-2';
 import { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend } from 'chart.js';
 
-import { TrafficRatio } from "../../Schema";
-import { createTrafficRatioDataset } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import WithLegend from '../../components/WithLegend';
-import htmlLegendPlugin from '../../plugins/HTMLLegendPlugin';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import { useData } from '../../helpers/useData';
-import titles from "@/titles";
+import { TrafficRatio } from "compendium/Schema";
+import { createTrafficRatioDataset } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import WithLegend from 'compendium/components/WithLegend';
+import htmlLegendPlugin from 'compendium/plugins/HTMLLegendPlugin';
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import { useData } from 'compendium/helpers/useData';
+import titles from "compendium/titles";
 
 ChartJS.register(
     CategoryScale,
diff --git a/compendium-frontend/src/pages/Network/TrafficUrl.tsx b/compendium-frontend/src/pages/Network/TrafficUrl.tsx
index f29618c115d09fd7fbf3738c19f99bb2557a2726..4407dddf22b925f63fc3401b16b47a6be5bb7330 100644
--- a/compendium-frontend/src/pages/Network/TrafficUrl.tsx
+++ b/compendium-frontend/src/pages/Network/TrafficUrl.tsx
@@ -1,15 +1,15 @@
 import React, { useContext } from "react";
 
-import { TrafficStatistics } from "../../Schema";
-import { createDataLookup, getTableData, getLatestData, extractUrls } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import NrenYearTable from "../../components/NrenYearTable";
-import titles from "@/titles";
+import { TrafficStatistics } from "compendium/Schema";
+import { createDataLookup, getTableData, getLatestData, extractUrls } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import NrenYearTable from "compendium/components/NrenYearTable";
+import titles from "compendium/titles";
 
 function TrafficUrlPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Network/TrafficVolume.tsx b/compendium-frontend/src/pages/Network/TrafficVolume.tsx
index 36c5af4d3b80a5c10e593afea626d2b7923eca09..5097a462bd7f11fe778eb56917f2cdacf8929ff0 100644
--- a/compendium-frontend/src/pages/Network/TrafficVolume.tsx
+++ b/compendium-frontend/src/pages/Network/TrafficVolume.tsx
@@ -12,16 +12,16 @@ import {
     Legend,
 } from 'chart.js';
 
-import { TrafficVolume } from "../../Schema";
-import { createLineChartDataset } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter";
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from '../../helpers/useData';
-import { getLineChartOptions } from '../../helpers/charthelpers';
-import titles from "@/titles";
+import { TrafficVolume } from "compendium/Schema";
+import { createLineChartDataset } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from 'compendium/helpers/useData';
+import { getLineChartOptions } from 'compendium/helpers/charthelpers';
+import titles from "compendium/titles";
 
 ChartJS.register(
     CategoryScale,
diff --git a/compendium-frontend/src/pages/Network/WeatherMap.tsx b/compendium-frontend/src/pages/Network/WeatherMap.tsx
index 839dcc9ec380fe55403f3e7a08f5f5b61753326e..8fb5e8435f061d371e0084af6da236bbcbdcb7c8 100644
--- a/compendium-frontend/src/pages/Network/WeatherMap.tsx
+++ b/compendium-frontend/src/pages/Network/WeatherMap.tsx
@@ -1,15 +1,15 @@
 import React, { useContext } from "react";
 
-import { WeatherMap } from "../../Schema";
-import { getTableData, createDataLookup, getLatestData } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import NrenYearTable from "../../components/NrenYearTable";
-import titles from "@/titles";
+import { WeatherMap } from "compendium/Schema";
+import { getTableData, createDataLookup, getLatestData } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import NrenYearTable from "compendium/components/NrenYearTable";
+import titles from "compendium/titles";
 
 function NetworkWeatherMapPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Organization/Budget.tsx b/compendium-frontend/src/pages/Organization/Budget.tsx
index 69469faae749291d2df3f32f9782fd1d2d6e6456..fc079b5ed07bd8323b73b055c7b12252dbedcf84 100644
--- a/compendium-frontend/src/pages/Organization/Budget.tsx
+++ b/compendium-frontend/src/pages/Organization/Budget.tsx
@@ -12,16 +12,16 @@ import {
     Legend,
 } from 'chart.js';
 
-import { Budget } from "../../Schema";
-import { createLineChartDataset } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter";
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from '../../helpers/useData';
-import { getLineChartOptions } from '../../helpers/charthelpers';
-import titles from "@/titles";
+import { Budget } from "compendium/Schema";
+import { createLineChartDataset } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from 'compendium/helpers/useData';
+import { getLineChartOptions } from 'compendium/helpers/charthelpers';
+import titles from "compendium/titles";
 
 ChartJS.register(
     CategoryScale,
diff --git a/compendium-frontend/src/pages/Organization/ChargingStructure.tsx b/compendium-frontend/src/pages/Organization/ChargingStructure.tsx
index a523e9ed3f8817666eee8cecf69d3acf1c372c51..dfdf549a0fc309d20a865aeaa1371b108185d15b 100644
--- a/compendium-frontend/src/pages/Organization/ChargingStructure.tsx
+++ b/compendium-frontend/src/pages/Organization/ChargingStructure.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { ChargingStructure } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { ChargingStructure } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function ChargingStructurePage(): React.ReactElement {
 
diff --git a/compendium-frontend/src/pages/Organization/ECProjects.tsx b/compendium-frontend/src/pages/Organization/ECProjects.tsx
index 9bd5760ea52d2390eab2b808651008b4b3e12644..ba76b7609842e075de4eee2943c601a54fad8b66 100644
--- a/compendium-frontend/src/pages/Organization/ECProjects.tsx
+++ b/compendium-frontend/src/pages/Organization/ECProjects.tsx
@@ -1,14 +1,14 @@
 import { useContext } from 'react';
 
-import { ECProject } from "../../Schema";
-import { createDataLookupList, getTableData } from '../../helpers/dataconversion';
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from '../../helpers/useData';
-import NrenYearTable from '../../components/NrenYearTable';
+import { ECProject } from "compendium/Schema";
+import { createDataLookupList, getTableData } from 'compendium/helpers/dataconversion';
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from 'compendium/helpers/useData';
+import NrenYearTable from 'compendium/components/NrenYearTable';
 
 function ECProjectsPage() {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Organization/FundingSource.tsx b/compendium-frontend/src/pages/Organization/FundingSource.tsx
index 54c35c5cdffe84cd30ade63785323795ae94717d..416c3967d517cf75e3baebdbb838f0858227b524 100644
--- a/compendium-frontend/src/pages/Organization/FundingSource.tsx
+++ b/compendium-frontend/src/pages/Organization/FundingSource.tsx
@@ -4,16 +4,16 @@ import { Col, Row } from "react-bootstrap";
 import { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend } from 'chart.js';
 import ChartDataLabels from 'chartjs-plugin-datalabels';
 
-import { FundingSource } from "../../Schema";
-import { createFundingSourceDataset } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import ColorBadge from '../../components/ColorBadge';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from '../../helpers/useData';
-import titles from "@/titles";
+import { FundingSource } from "compendium/Schema";
+import { createFundingSourceDataset } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import ColorBadge from 'compendium/components/ColorBadge';
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from 'compendium/helpers/useData';
+import titles from "compendium/titles";
 
 ChartJS.register(
   CategoryScale,
diff --git a/compendium-frontend/src/pages/Organization/ParentOrganisation.tsx b/compendium-frontend/src/pages/Organization/ParentOrganisation.tsx
index debd2a373c4606ad070fc15efd58da73c8a94ca9..42847734f3473c9674169a0aa4961a12b49bfd33 100644
--- a/compendium-frontend/src/pages/Organization/ParentOrganisation.tsx
+++ b/compendium-frontend/src/pages/Organization/ParentOrganisation.tsx
@@ -1,13 +1,13 @@
 import { useContext } from 'react';
-import { Organisation } from "../../Schema";
-import { createDataLookup, getTableData } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from '../../helpers/useData';
-import NrenYearTable from '../../components/NrenYearTable';
+import { Organisation } from "compendium/Schema";
+import { createDataLookup, getTableData } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from 'compendium/helpers/useData';
+import NrenYearTable from 'compendium/components/NrenYearTable';
 
 function ParentOrganisationPage() {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Organization/StaffGraph.tsx b/compendium-frontend/src/pages/Organization/StaffGraph.tsx
index f4c7c56e2808c3b7d13da1980ed6d9dd196ae092..68a5684ad8f3d60ddd3a50d4996bf8f38cabd0b1 100644
--- a/compendium-frontend/src/pages/Organization/StaffGraph.tsx
+++ b/compendium-frontend/src/pages/Organization/StaffGraph.tsx
@@ -2,16 +2,16 @@ import { useContext } from 'react';
 import { Bar } from 'react-chartjs-2';
 import { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend } from 'chart.js';
 
-import { NrenStaff } from "../../Schema";
-import { createNRENStaffDataset } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import WithLegend from '../../components/WithLegend';
-import htmlLegendPlugin from '../../plugins/HTMLLegendPlugin';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import { useData } from '../../helpers/useData';
-import titles from "@/titles";
+import { NrenStaff } from "compendium/Schema";
+import { createNRENStaffDataset } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import WithLegend from 'compendium/components/WithLegend';
+import htmlLegendPlugin from 'compendium/plugins/HTMLLegendPlugin';
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import { useData } from 'compendium/helpers/useData';
+import titles from "compendium/titles";
 
 ChartJS.register(
     CategoryScale,
diff --git a/compendium-frontend/src/pages/Organization/StaffGraphAbsolute.tsx b/compendium-frontend/src/pages/Organization/StaffGraphAbsolute.tsx
index 72324a24a6c9659b8db1ef070d724f8909c30eed..eda963405a30c78051db9241184d0596360b34e6 100644
--- a/compendium-frontend/src/pages/Organization/StaffGraphAbsolute.tsx
+++ b/compendium-frontend/src/pages/Organization/StaffGraphAbsolute.tsx
@@ -2,17 +2,17 @@ import { useContext } from 'react';
 import { Bar } from 'react-chartjs-2';
 import { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend } from 'chart.js';
 
-import { NrenStaff } from "../../Schema";
-import { createNRENStaffDatasetAbsolute } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import { useData } from '../../helpers/useData';
-import ChartContainer from '../../components/graphing/ChartContainer';
+import { NrenStaff } from "compendium/Schema";
+import { createNRENStaffDatasetAbsolute } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import { useData } from 'compendium/helpers/useData';
+import ChartContainer from 'compendium/components/graphing/ChartContainer';
 import ChartDataLabels from 'chartjs-plugin-datalabels';
-import { getBarChartOptions } from '../../helpers/charthelpers';
-import titles from "@/titles";
+import { getBarChartOptions } from 'compendium/helpers/charthelpers';
+import titles from "compendium/titles";
 
 ChartJS.register(
     CategoryScale,
diff --git a/compendium-frontend/src/pages/Organization/SubOrganisation.tsx b/compendium-frontend/src/pages/Organization/SubOrganisation.tsx
index 1a7e11e2be0eebb160802308c5481c0640e4d8de..cd4d042975022e97afe226baf9ba0de35ceeff5f 100644
--- a/compendium-frontend/src/pages/Organization/SubOrganisation.tsx
+++ b/compendium-frontend/src/pages/Organization/SubOrganisation.tsx
@@ -1,15 +1,15 @@
 import { useContext } from 'react';
 
-import { Organisation } from "../../Schema";
-import { createDataLookupList, getTableData } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from '../../helpers/useData';
-import NrenYearTable from '../../components/NrenYearTable';
-import titles from "@/titles";
+import { Organisation } from "compendium/Schema";
+import { createDataLookupList, getTableData } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from 'compendium/helpers/useData';
+import NrenYearTable from 'compendium/components/NrenYearTable';
+import titles from "compendium/titles";
 
 function SubOrganisationPage() {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Services/Services.tsx b/compendium-frontend/src/pages/Services/Services.tsx
index 6e01b018d17851c3e28ac070b662e011cd4c56d6..7cade9fe14fc6fc5c0ae9645af5d9c08b5ddacd7 100644
--- a/compendium-frontend/src/pages/Services/Services.tsx
+++ b/compendium-frontend/src/pages/Services/Services.tsx
@@ -1,16 +1,16 @@
 import React, { useContext } from "react";
 import { Table } from "react-bootstrap";
 
-import { Service, ServiceCategory } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import ColorBadgeService from "../../components/ColorBadgeService";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import titles from "@/titles";
+import { Service, ServiceCategory } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import ColorBadgeService from "compendium/components/ColorBadgeService";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import titles from "compendium/titles";
 
 interface inputProps {
     category: ServiceCategory
diff --git a/compendium-frontend/src/pages/Standards&Policies/Audits.tsx b/compendium-frontend/src/pages/Standards&Policies/Audits.tsx
index 033b01a464087faf6595b59298b5f3fe8b4187c1..2717a51b46ed6e08392d590a1354d6e5a375bf91 100644
--- a/compendium-frontend/src/pages/Standards&Policies/Audits.tsx
+++ b/compendium-frontend/src/pages/Standards&Policies/Audits.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { Standards } from "../../Schema";
-import { createNrenTableLookup, addTooltip } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { Standards } from "compendium/Schema";
+import { createNrenTableLookup, addTooltip } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function AuditsPage(): React.ReactElement {
     const dataField = 'audits';
diff --git a/compendium-frontend/src/pages/Standards&Policies/BusinessContinuity.tsx b/compendium-frontend/src/pages/Standards&Policies/BusinessContinuity.tsx
index 80002a094cea6ea4bd5bff2a9f938c145faf37e2..6d7248f5a39dd6d614756269364a266e8ff40bfb 100644
--- a/compendium-frontend/src/pages/Standards&Policies/BusinessContinuity.tsx
+++ b/compendium-frontend/src/pages/Standards&Policies/BusinessContinuity.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { Standards } from "../../Schema";
-import { createNrenTableLookup, addTooltip } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { Standards } from "compendium/Schema";
+import { createNrenTableLookup, addTooltip } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function BusinessContinuityPage(): React.ReactElement {
     const dataField = 'business_continuity_plans';
diff --git a/compendium-frontend/src/pages/Standards&Policies/CentralProcurement.tsx b/compendium-frontend/src/pages/Standards&Policies/CentralProcurement.tsx
index d11b14590a608a1433f866385cae9ca5fb4ad432..5fd90afa817ae982ed50e9978308603687ef502e 100644
--- a/compendium-frontend/src/pages/Standards&Policies/CentralProcurement.tsx
+++ b/compendium-frontend/src/pages/Standards&Policies/CentralProcurement.tsx
@@ -12,16 +12,16 @@ import {
 import ChartDataLabels from 'chartjs-plugin-datalabels';
 import { Bar } from 'react-chartjs-2';
 
-import DataPage from '../../components/DataPage';
-import ChartContainer from '../../components/graphing/ChartContainer';
-import Filter from '../../components/graphing/Filter';
-import { getBarChartOptions } from '../../helpers/charthelpers';
-import { Sections } from '../../helpers/constants';
-import { createBarChartDataset } from '../../helpers/dataconversion';
-import { useData } from '../../helpers/useData';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import { CentralProcurement } from '../../Schema';
-import titles from "@/titles";
+import DataPage from 'compendium/components/DataPage';
+import ChartContainer from 'compendium/components/graphing/ChartContainer';
+import Filter from 'compendium/components/graphing/Filter';
+import { getBarChartOptions } from 'compendium/helpers/charthelpers';
+import { Sections } from "compendium/helpers/constants";
+import { createBarChartDataset } from 'compendium/helpers/dataconversion';
+import { useData } from 'compendium/helpers/useData';
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import { CentralProcurement } from "compendium/Schema";
+import titles from "compendium/titles";
 
 ChartJS.register(
     CategoryScale,
diff --git a/compendium-frontend/src/pages/Standards&Policies/CorporateStrategy.tsx b/compendium-frontend/src/pages/Standards&Policies/CorporateStrategy.tsx
index bc92f6941f80e63ebe1cd8b43b603101064a7b92..f73a2ae36fe1eb01d757908c017e00c67aa06277 100644
--- a/compendium-frontend/src/pages/Standards&Policies/CorporateStrategy.tsx
+++ b/compendium-frontend/src/pages/Standards&Policies/CorporateStrategy.tsx
@@ -1,15 +1,15 @@
 import { useContext } from 'react';
 
-import { CorporateStrategy } from "../../Schema";
-import { createDataLookup, getLatestData, getTableData } from '../../helpers/dataconversion';
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import { useData } from '../../helpers/useData';
-import ChartContainer from '../../components/graphing/ChartContainer';
-import NrenYearTable from '../../components/NrenYearTable';
-import titles from "@/titles";
+import { CorporateStrategy } from "compendium/Schema";
+import { createDataLookup, getLatestData, getTableData } from 'compendium/helpers/dataconversion';
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import { useData } from 'compendium/helpers/useData';
+import ChartContainer from 'compendium/components/graphing/ChartContainer';
+import NrenYearTable from 'compendium/components/NrenYearTable';
+import titles from "compendium/titles";
 
 function CorporateStrategyPage() {
     const dataField = 'strategic_plan';
diff --git a/compendium-frontend/src/pages/Standards&Policies/CrisisExercises.tsx b/compendium-frontend/src/pages/Standards&Policies/CrisisExercises.tsx
index 07f57d1b0ad783cf5907c34f514397c65de4316c..905b6bca19e8130f5972816244590e868d9d65d5 100644
--- a/compendium-frontend/src/pages/Standards&Policies/CrisisExercises.tsx
+++ b/compendium-frontend/src/pages/Standards&Policies/CrisisExercises.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { CrisisExercises } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { CrisisExercises } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function CrisisExercisesPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Standards&Policies/CrisisManagement.tsx b/compendium-frontend/src/pages/Standards&Policies/CrisisManagement.tsx
index bc529911cdf73c37ced6903c0bacff4f7ebd8b1f..f0c45b2eb96c6032648c3c44535ff9b62fbf4f1a 100644
--- a/compendium-frontend/src/pages/Standards&Policies/CrisisManagement.tsx
+++ b/compendium-frontend/src/pages/Standards&Policies/CrisisManagement.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { Standards } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { Standards } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function CrisisManagementPage(): React.ReactElement {
     const dataField = 'crisis_management_procedure';
diff --git a/compendium-frontend/src/pages/Standards&Policies/EOSCListings.tsx b/compendium-frontend/src/pages/Standards&Policies/EOSCListings.tsx
index bdc3d45b889720b014e5017c5cdd6a1c79dd9a90..291559bf834c2497e819c82f14c4f184c6d99653 100644
--- a/compendium-frontend/src/pages/Standards&Policies/EOSCListings.tsx
+++ b/compendium-frontend/src/pages/Standards&Policies/EOSCListings.tsx
@@ -1,15 +1,15 @@
 import { useContext } from 'react';
 
-import { EOSCListing } from "../../Schema";
-import { createDataLookupList, getTableData } from "../../helpers/dataconversion";
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from '../../helpers/useData';
-import NrenYearTable from '../../components/NrenYearTable';
-import titles from "@/titles";
+import { EOSCListing } from "compendium/Schema";
+import { createDataLookupList, getTableData } from "compendium/helpers/dataconversion";
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from 'compendium/helpers/useData';
+import NrenYearTable from 'compendium/components/NrenYearTable';
+import titles from "compendium/titles";
 
 // The data for this page is not good quality, so it's unlisted for now.
 
diff --git a/compendium-frontend/src/pages/Standards&Policies/Policy.tsx b/compendium-frontend/src/pages/Standards&Policies/Policy.tsx
index 0371a550bc29ecae3134d5987097af86099c983d..8931ab1abf4c80231f32de4c6ab881cda6ebc9f8 100644
--- a/compendium-frontend/src/pages/Standards&Policies/Policy.tsx
+++ b/compendium-frontend/src/pages/Standards&Policies/Policy.tsx
@@ -1,15 +1,15 @@
 import { useContext } from 'react';
 
-import { Policy } from "../../Schema";
-import { createDataLookup, getLatestData, getTableData } from '../../helpers/dataconversion';
-import DataPage from '../../components/DataPage';
-import Filter from "../../components/graphing/Filter"
-import { Sections } from '../../helpers/constants';
-import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
-import { useData } from '../../helpers/useData';
-import ChartContainer from '../../components/graphing/ChartContainer';
-import NrenYearTable from '../../components/NrenYearTable';
-import titles from "@/titles";
+import { Policy } from "compendium/Schema";
+import { createDataLookup, getLatestData, getTableData } from 'compendium/helpers/dataconversion';
+import DataPage from 'compendium/components/DataPage';
+import Filter from "compendium/components/graphing/Filter"
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from 'compendium/providers/FilterSelectionProvider';
+import { useData } from 'compendium/helpers/useData';
+import ChartContainer from 'compendium/components/graphing/ChartContainer';
+import NrenYearTable from 'compendium/components/NrenYearTable';
+import titles from "compendium/titles";
 
 function PolicyPage() {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Standards&Policies/SecurityControls.tsx b/compendium-frontend/src/pages/Standards&Policies/SecurityControls.tsx
index 7d8f81584adc82d701d8f336fe774087a6e648e8..f759e5af0c9ae69b7f110a91064e67bbc0c686ee 100644
--- a/compendium-frontend/src/pages/Standards&Policies/SecurityControls.tsx
+++ b/compendium-frontend/src/pages/Standards&Policies/SecurityControls.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { SecurityControls } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { SecurityControls } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function SecurityControlsPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Standards&Policies/ServiceLevelTargets.tsx b/compendium-frontend/src/pages/Standards&Policies/ServiceLevelTargets.tsx
index de940407da006703dc8549a97a5ea254e60f5474..8d6550694f86ac2ab333588625017e615c7bfe1d 100644
--- a/compendium-frontend/src/pages/Standards&Policies/ServiceLevelTargets.tsx
+++ b/compendium-frontend/src/pages/Standards&Policies/ServiceLevelTargets.tsx
@@ -1,14 +1,14 @@
 import React, { useContext } from "react";
-import { ServiceManagement } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { ServiceManagement } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function ServiceLevelTargetsPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Standards&Policies/ServiceManagementFramework.tsx b/compendium-frontend/src/pages/Standards&Policies/ServiceManagementFramework.tsx
index 00e60331c69cdbc6c2a7b894e978cad688f5ddc2..dfaafba383a79078509ca6983df12d608b872cfc 100644
--- a/compendium-frontend/src/pages/Standards&Policies/ServiceManagementFramework.tsx
+++ b/compendium-frontend/src/pages/Standards&Policies/ServiceManagementFramework.tsx
@@ -1,15 +1,15 @@
 import React, { useContext } from "react";
 
-import { ServiceManagement } from "../../Schema";
-import { createNrenTableLookup } from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import PillTable from "../../components/PillTable";
-import titles from "@/titles";
+import { ServiceManagement } from "compendium/Schema";
+import { createNrenTableLookup } from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import PillTable from "compendium/components/PillTable";
+import titles from "compendium/titles";
 
 function ServiceManagementFrameworkPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/pages/Standards&Policies/ServicesOffered.tsx b/compendium-frontend/src/pages/Standards&Policies/ServicesOffered.tsx
index ed1191563249a56ec29a1e60b7cf48b785f9eb7a..fd405459242ac2400d9998f40024e9cd4f290b7e 100644
--- a/compendium-frontend/src/pages/Standards&Policies/ServicesOffered.tsx
+++ b/compendium-frontend/src/pages/Standards&Policies/ServicesOffered.tsx
@@ -1,18 +1,18 @@
 import React, { useContext } from "react";
 
-import { ServiceOffered } from "../../Schema";
+import { ServiceOffered } from "compendium/Schema";
 import {
     createCategoryMatrixLookup
-} from "../../helpers/dataconversion";
-import DataPage from "../../components/DataPage";
-import Filter from "../../components/graphing/Filter";
-import { Sections } from "../../helpers/constants";
-import { FilterSelectionContext } from "../../providers/FilterSelectionProvider";
-import ChartContainer from "../../components/graphing/ChartContainer";
-import { useData } from "../../helpers/useData";
-import { ScrollableMatrix } from "../../components/ScrollableMatrix";
-import { UserCategories } from "../../helpers/constants";
-import titles from "@/titles";
+} from "compendium/helpers/dataconversion";
+import DataPage from "compendium/components/DataPage";
+import Filter from "compendium/components/graphing/Filter";
+import { Sections } from "compendium/helpers/constants";
+import { FilterSelectionContext } from "compendium/providers/FilterSelectionProvider";
+import ChartContainer from "compendium/components/graphing/ChartContainer";
+import { useData } from "compendium/helpers/useData";
+import { ScrollableMatrix } from "compendium/components/ScrollableMatrix";
+import { UserCategories } from "compendium/helpers/constants";
+import titles from "compendium/titles";
 
 function ServicesOfferedPage(): React.ReactElement {
     const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
diff --git a/compendium-frontend/src/providers/FilterSelectionProvider.tsx b/compendium-frontend/src/providers/FilterSelectionProvider.tsx
index 1ef33105bfeb97f8ef5c7aa37eda8fcb6d97e532..d66ab36b72a3b8ba6185b93f8568ab802ea23486 100644
--- a/compendium-frontend/src/providers/FilterSelectionProvider.tsx
+++ b/compendium-frontend/src/providers/FilterSelectionProvider.tsx
@@ -1,5 +1,5 @@
 import React, { Dispatch, SetStateAction, createContext, useState } from 'react';
-import { FilterSelection } from '../Schema';
+import { FilterSelection } from "compendium/Schema";
 
 interface Props {
     children: React.ReactNode;
diff --git a/compendium-frontend/src/providers/NrenProvider.tsx b/compendium-frontend/src/providers/NrenProvider.tsx
index ffc584272019fdf704366c9b16d25d7c3997de36..73db5eaec70f9aebbbcfdcb373b9aafcd1b349d8 100644
--- a/compendium-frontend/src/providers/NrenProvider.tsx
+++ b/compendium-frontend/src/providers/NrenProvider.tsx
@@ -1,5 +1,5 @@
 import React, { Dispatch, SetStateAction, createContext, useState, useEffect } from 'react';
-import { Nren } from '../Schema';
+import { Nren } from "compendium/Schema";
 
 interface Props {
     children: React.ReactNode;
diff --git a/compendium-frontend/src/providers/UserProvider.tsx b/compendium-frontend/src/providers/UserProvider.tsx
index 77037c809b1c1b1026c607be5fc58fb5a6fb7607..13ecaae97de5c7f9060dda7849a192727532f20f 100644
--- a/compendium-frontend/src/providers/UserProvider.tsx
+++ b/compendium-frontend/src/providers/UserProvider.tsx
@@ -1,5 +1,5 @@
 import React, { createContext, useState, useEffect } from 'react';
-import { User } from '../Schema';
+import { User } from "compendium/Schema";
 
 interface Props {
     children: React.ReactNode;
diff --git a/compendium-frontend/src/survey/Landing.tsx b/compendium-frontend/src/survey/Landing.tsx
index fef112b10f6fefb162dadc5f236dcfdd7631311a..eadd3e87f98390ec0511ed5491e26a6860bd2503 100644
--- a/compendium-frontend/src/survey/Landing.tsx
+++ b/compendium-frontend/src/survey/Landing.tsx
@@ -1,12 +1,12 @@
 import { ReactElement, useContext, useState, useEffect } from "react";
 import { useNavigate, Link } from "react-router-dom";
 import { Table, Container, Row } from "react-bootstrap";
-import { userContext } from "../providers/UserProvider";
-import { fetchSurveys, fetchActiveSurveyYear } from "./api/survey";
-import { Survey } from "./api/types";
-import SurveySidebar from "./management/SurveySidebar";
+import { userContext } from "compendium/providers/UserProvider";
+import { fetchSurveys, fetchActiveSurveyYear } from "compendium/survey/api/survey";
+import { Survey } from "compendium/survey/api/types";
+import SurveySidebar from "compendium/survey/management/SurveySidebar";
 import * as XLSX from "xlsx";
-import useMatomo from "../matomo/UseMatomo";
+import useMatomo from "compendium/matomo/UseMatomo";
 
 const SurveyTable = () => {
 
diff --git a/compendium-frontend/src/survey/SurveyComponent.tsx b/compendium-frontend/src/survey/SurveyComponent.tsx
index 6e48c3100c84dbd8b4e63ce33e1335f57b693e25..70c8033108286d711a342f28b81f850242c2bb79 100644
--- a/compendium-frontend/src/survey/SurveyComponent.tsx
+++ b/compendium-frontend/src/survey/SurveyComponent.tsx
@@ -1,7 +1,7 @@
 import { useEffect } from "react";
 import { Question } from "survey-core";
 import { Survey } from "survey-react-ui";
-import { VerificationStatus } from './Schema';
+import { VerificationStatus } from 'compendium/survey/Schema';
 
 function customDescriptionCallback(_, options) {
     // get the customDescription for matrix rows and set it in the title
diff --git a/compendium-frontend/src/survey/SurveyContainerComponent.tsx b/compendium-frontend/src/survey/SurveyContainerComponent.tsx
index 5661a7c00b17cd2fa76d243dc9c9c9b4f8132d08..1b080acbdad24d5817185fcd710a563999ff704c 100644
--- a/compendium-frontend/src/survey/SurveyContainerComponent.tsx
+++ b/compendium-frontend/src/survey/SurveyContainerComponent.tsx
@@ -3,17 +3,17 @@ import { Container } from "react-bootstrap";
 import toast, { Toaster } from "react-hot-toast";
 import { Model, Serializer } from "survey-core";
 import { useParams } from "react-router-dom";
-import SurveyComponent from "./SurveyComponent";
-import SurveyNavigationComponent from "./SurveyNavigationComponent";
-import { VerificationStatus } from './Schema';
-import Prompt from "./Prompt";
+import SurveyComponent from "compendium/survey/SurveyComponent";
+import SurveyNavigationComponent from "compendium/survey/SurveyNavigationComponent";
+import { VerificationStatus } from 'compendium/survey/Schema';
+import Prompt from "compendium/survey/Prompt";
 import "survey-core/modern.min.css";
-import './survey.scss';
-import useMatomo from "../matomo/UseMatomo";
+import 'compendium/survey/survey.scss';
+import useMatomo from "compendium/matomo/UseMatomo";
 import { FunctionFactory } from "survey-core";
-import { validateQuestion, oldValidateWebsiteUrl } from "./validation/validation";
-import SurveySidebar from "./management/SurveySidebar";
-import { userContext } from "../providers/UserProvider";
+import { validateQuestion, oldValidateWebsiteUrl } from "compendium/survey/validation/validation";
+import SurveySidebar from "compendium/survey/management/SurveySidebar";
+import { userContext } from "compendium/providers/UserProvider";
 
 Serializer.addProperty("itemvalue", "customDescription:text");
 Serializer.addProperty("question", "hideCheckboxLabels:boolean");
diff --git a/compendium-frontend/src/survey/SurveyNavigationComponent.tsx b/compendium-frontend/src/survey/SurveyNavigationComponent.tsx
index 10fd4991bea9ed77aca40107ed62ffb7523dc92b..d03af8f4211f1492eeff32343a1a8f953433d1a1 100644
--- a/compendium-frontend/src/survey/SurveyNavigationComponent.tsx
+++ b/compendium-frontend/src/survey/SurveyNavigationComponent.tsx
@@ -1,7 +1,7 @@
 import { useContext } from "react";
-import ProgressBar from './ProgressBar';
+import ProgressBar from 'compendium/survey/ProgressBar';
 import { Container, Row } from "react-bootstrap";
-import { userContext } from "../providers/UserProvider";
+import { userContext } from "compendium/providers/UserProvider";
 
 function SurveyNavigationComponent({ surveyModel, surveyActions, year, nren, children, onPageChange
  }) {   
diff --git a/compendium-frontend/src/survey/api/survey.ts b/compendium-frontend/src/survey/api/survey.ts
index e61e6ceb5d75fab51fb161fd24c16214c6871e71..fb7eb60cda973c302bb0037148867c259223d25f 100644
--- a/compendium-frontend/src/survey/api/survey.ts
+++ b/compendium-frontend/src/survey/api/survey.ts
@@ -1,4 +1,4 @@
-import { Survey } from './types';
+import { Survey } from 'compendium/survey/api/types';
 
 export async function fetchSurveys(): Promise<Survey[]> {
     try {
diff --git a/compendium-frontend/src/survey/management/SurveyManagementComponent.tsx b/compendium-frontend/src/survey/management/SurveyManagementComponent.tsx
index d1fedda1b4e940ebd6657d1469f678bf76a41961..aa31834692b03afed999d55274e4edb58d2b47a9 100644
--- a/compendium-frontend/src/survey/management/SurveyManagementComponent.tsx
+++ b/compendium-frontend/src/survey/management/SurveyManagementComponent.tsx
@@ -5,15 +5,15 @@ import Row from 'react-bootstrap/Row';
 import Table from 'react-bootstrap/Table';
 import Container from "react-bootstrap/Container";
 import toast, { Toaster } from "react-hot-toast";
-import { SurveyStatus } from "../Schema";
-import { fetchSurveys } from "../api/survey";
-import { Survey } from "../api/types";
-import SurveySidebar from "./SurveySidebar";
+import { SurveyStatus } from "compendium/survey/Schema";
+import { fetchSurveys } from "compendium/survey/api/survey";
+import { Survey } from "compendium/survey/api/types";
+import SurveySidebar from "compendium/survey/management/SurveySidebar";
 import { Spinner } from "react-bootstrap";
-import StatusButton from "../StatusButton";
+import StatusButton from "compendium/survey/StatusButton";
 import { Link } from "react-router-dom";
 import { debounce } from "lodash"
-import { validateSurvey } from "../utils";
+import { validateSurvey } from "compendium/survey/utils";
 
 function updateSurveyNotes(year: number, nren_id: number, notes: string) {
     fetch('/api/survey/' + year + '/' + nren_id + '/notes', {
diff --git a/compendium-frontend/src/survey/management/SurveySidebar.tsx b/compendium-frontend/src/survey/management/SurveySidebar.tsx
index 248aaa19138bd42a34d019e7c25d48f6c1673193..6a70d6e733ed1dc13aee1b618b8f6146c36442ec 100644
--- a/compendium-frontend/src/survey/management/SurveySidebar.tsx
+++ b/compendium-frontend/src/survey/management/SurveySidebar.tsx
@@ -1,6 +1,5 @@
-import React from 'react';
-import Link from '../../components/LinkWithHighlight';
-import Sidebar from '../../components/sidebar/SideBar';
+import Link from 'compendium/components/LinkWithHighlight';
+import Sidebar from 'compendium/components/sidebar/SideBar';
 
 const SurveySidebar = () => {
     return (
diff --git a/compendium-frontend/src/survey/management/UserManagementComponent.tsx b/compendium-frontend/src/survey/management/UserManagementComponent.tsx
index 101c73d23205596deb7dd3c522b77c87365b9d3f..690704040cf7b23a87f467c6d5be6dfd5b6a7771 100644
--- a/compendium-frontend/src/survey/management/UserManagementComponent.tsx
+++ b/compendium-frontend/src/survey/management/UserManagementComponent.tsx
@@ -1,10 +1,10 @@
 import React, { useState, useEffect, useContext } from "react";
 import { Container, Table, Row, Form, InputGroup, Accordion, Button } from "react-bootstrap";
 import toast, { Toaster } from "react-hot-toast";
-import { userContext } from "../../providers/UserProvider";
-import { useConfig } from "../../helpers/useConfig";
-import { User, Nren } from "../Schema";
-import SurveySidebar from "./SurveySidebar";
+import { userContext } from "compendium/providers/UserProvider";
+import { useConfig } from "compendium/helpers/useConfig";
+import { User, Nren } from "compendium/Schema";
+import SurveySidebar from "compendium/survey/management/SurveySidebar";
 import { FaCheck } from "react-icons/fa";
 import { debounce } from "lodash";
 
diff --git a/compendium-frontend/src/survey/utils.ts b/compendium-frontend/src/survey/utils.ts
index a713a8a2750aa11bb7a33b5a46a39f18e90635f9..5671d44f9286927bf0693606c3247d344323bcb8 100644
--- a/compendium-frontend/src/survey/utils.ts
+++ b/compendium-frontend/src/survey/utils.ts
@@ -1,4 +1,4 @@
-import { validateQuestion, oldValidateWebsiteUrl } from './validation/validation';
+import { validateQuestion, oldValidateWebsiteUrl } from 'compendium/survey/validation/validation';
 
 export async function validateSurvey(year, nren) {
     const { Model, FunctionFactory, Serializer } = await import('survey-core');
diff --git a/compendium-frontend/tsconfig.json b/compendium-frontend/tsconfig.json
index d4521f340cba01242893dfbef90fd14d68d78d19..02cac5bc90aaee0e167c2b199148a598be1a3a5b 100644
--- a/compendium-frontend/tsconfig.json
+++ b/compendium-frontend/tsconfig.json
@@ -1,7 +1,7 @@
 {
   "compilerOptions": {
     "paths": {
-      "@/*": ["./src/*"],
+      "compendium/*": ["./src/*"],
     },
     "target": "ESNext",
     "lib": ["dom", "dom.iterable", "ESNext"],
diff --git a/compendium-frontend/vite.config.ts b/compendium-frontend/vite.config.ts
index 93d73a637f93f315578f5b9ba7901398d58c928b..64fd3b7089a940835751a943688680de6873d4f0 100644
--- a/compendium-frontend/vite.config.ts
+++ b/compendium-frontend/vite.config.ts
@@ -73,7 +73,7 @@ export default defineConfig({
     },
     resolve: {
         alias: {
-            '@': path.resolve(__dirname, 'src'),
+            'compendium': path.resolve(__dirname, 'src'),
         }
     },
 })
\ No newline at end of file
diff --git a/compendium_v2/static/AlienWave-DhaC80F-.js b/compendium_v2/static/AlienWave-AJrmdFtI.js
similarity index 97%
rename from compendium_v2/static/AlienWave-DhaC80F-.js
rename to compendium_v2/static/AlienWave-AJrmdFtI.js
index 912b876461e47e2d8fcb6a1ba8629c59423e676a..a3827370175937fd25c0cfaa604e12c0eb8dc4c5 100644
--- a/compendium_v2/static/AlienWave-DhaC80F-.js
+++ b/compendium_v2/static/AlienWave-AJrmdFtI.js
@@ -1,4 +1,4 @@
-import{c as T,r as Y,F as S,j as v,t as j,S as E}from"./index.js";import{u as W,g as C,n as F,D as M,F as P,f as R}from"./useData-Ct8E3VVL.js";import{P as L}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function K(){const e=T.c(30);let a;e[0]===Symbol.for("react.memo_cache_sentinel")?(a=d=>d.alien_wave_third_party!==null,e[0]=a):a=e[0];const x=a,{filterSelection:t,setFilterSelection:p}=Y.useContext(S),{data:_,years:w,nrens:y}=W("/api/alien-wave",p,x);let s,h;if(e[1]!==_||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let d;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(d=g=>t.selectedYears.includes(g.year)&&t.selectedNrens.includes(g.nren),e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=d):d=e[8],s=_.filter(d);const D=C(s,"alien_wave_third_party");h=F(D,A),e[1]=_,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=s,e[5]=h}else s=e[4],h=e[5];const b=h;let n,m;e[9]===Symbol.for("react.memo_cache_sentinel")?(n=["Yes","Planned","No"],m=new Map([[n[0],"yes"],[n[1],"planned"],[n[2],"no"]]),e[9]=n,e[10]=m):(n=e[9],m=e[10]);const k=m;let i;e[11]!==w?(i=[...w],e[11]=w,e[12]=i):i=e[12];let r;e[13]!==y?(r=y.values(),e[13]=y,e[14]=r):r=e[14];let l;e[15]!==r?(l=[...r],e[15]=r,e[16]=l):l=e[16];let o;e[17]!==i||e[18]!==l?(o={availableYears:i,availableNrens:l},e[17]=i,e[18]=l,e[19]=o):o=e[19];let u;e[20]!==t||e[21]!==p||e[22]!==o?(u=v.jsx(P,{filterOptions:o,filterSelection:t,setFilterSelection:p,coloredYears:!0}),e[20]=t,e[21]=p,e[22]=o,e[23]=u):u=e[23];const N=u;let c;e[24]!==b?(c=v.jsx(R,{children:v.jsx(L,{columns:n,columnLookup:k,dataLookup:b})}),e[24]=b,e[25]=c):c=e[25];let f;return e[26]!==N||e[27]!==s||e[28]!==c?(f=v.jsx(M,{title:j["alien-wave"],description:`The table below shows NREN usage of alien wavelength or lightpath services provided by third parties. 
+import{c as T,r as Y,F as S,j as v,t as j,S as E}from"./index.js";import{u as W,g as C,n as F,D as M,F as P,f as R}from"./useData-CYCBVZdC.js";import{P as L}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function K(){const e=T.c(30);let a;e[0]===Symbol.for("react.memo_cache_sentinel")?(a=d=>d.alien_wave_third_party!==null,e[0]=a):a=e[0];const x=a,{filterSelection:t,setFilterSelection:p}=Y.useContext(S),{data:_,years:w,nrens:y}=W("/api/alien-wave",p,x);let s,h;if(e[1]!==_||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let d;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(d=g=>t.selectedYears.includes(g.year)&&t.selectedNrens.includes(g.nren),e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=d):d=e[8],s=_.filter(d);const D=C(s,"alien_wave_third_party");h=F(D,A),e[1]=_,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=s,e[5]=h}else s=e[4],h=e[5];const b=h;let n,m;e[9]===Symbol.for("react.memo_cache_sentinel")?(n=["Yes","Planned","No"],m=new Map([[n[0],"yes"],[n[1],"planned"],[n[2],"no"]]),e[9]=n,e[10]=m):(n=e[9],m=e[10]);const k=m;let i;e[11]!==w?(i=[...w],e[11]=w,e[12]=i):i=e[12];let r;e[13]!==y?(r=y.values(),e[13]=y,e[14]=r):r=e[14];let l;e[15]!==r?(l=[...r],e[15]=r,e[16]=l):l=e[16];let o;e[17]!==i||e[18]!==l?(o={availableYears:i,availableNrens:l},e[17]=i,e[18]=l,e[19]=o):o=e[19];let u;e[20]!==t||e[21]!==p||e[22]!==o?(u=v.jsx(P,{filterOptions:o,filterSelection:t,setFilterSelection:p,coloredYears:!0}),e[20]=t,e[21]=p,e[22]=o,e[23]=u):u=e[23];const N=u;let c;e[24]!==b?(c=v.jsx(R,{children:v.jsx(L,{columns:n,columnLookup:k,dataLookup:b})}),e[24]=b,e[25]=c):c=e[25];let f;return e[26]!==N||e[27]!==s||e[28]!==c?(f=v.jsx(M,{title:j["alien-wave"],description:`The table below shows NREN usage of alien wavelength or lightpath services provided by third parties. 
             It does not include alien waves used internally inside the NRENs own networks, as that is covered in another table. 
             In the optical network world, the term “alien wavelength” or “alien wave” (AW) is used to describe wavelengths in a 
             DWDM line system that pass through the network, i.e. they are not sourced/terminated by the line-system operator’s 
diff --git a/compendium_v2/static/AlienWaveInternal-CeuaDpIY.js b/compendium_v2/static/AlienWaveInternal-BkYZMjCR.js
similarity index 95%
rename from compendium_v2/static/AlienWaveInternal-CeuaDpIY.js
rename to compendium_v2/static/AlienWaveInternal-BkYZMjCR.js
index 69e2a79082c07adfcc38b5e79e56ce007c5c5560..e1d0e94e1e7c7701cdefdc611cfd7ae6f1a38d9a 100644
--- a/compendium_v2/static/AlienWaveInternal-CeuaDpIY.js
+++ b/compendium_v2/static/AlienWaveInternal-BkYZMjCR.js
@@ -1,4 +1,4 @@
-import{c as k,r as Y,F as S,j as w,t as j,S as F}from"./index.js";import{u as M,g as T,D as W,F as C,f as E}from"./useData-Ct8E3VVL.js";import{P}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function B(){const e=k.c(30);let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=c=>c.alien_wave_internal!==null,e[0]=m):m=e[0];const N=m,{filterSelection:t,setFilterSelection:d}=Y.useContext(S),{data:v,years:g,nrens:x}=M("/api/alien-wave",d,N);let s,p;if(e[1]!==v||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let c;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(c=D=>t.selectedYears.includes(D.year)&&t.selectedNrens.includes(D.nren),e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=c):c=e[8],s=v.filter(c),p=T(s,"alien_wave_internal"),e[1]=v,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=s,e[5]=p}else s=e[4],p=e[5];const y=p;let n,u;e[9]===Symbol.for("react.memo_cache_sentinel")?(n=["Yes","No"],u=new Map([[n[0],"True"],[n[1],"False"]]),e[9]=n,e[10]=u):(n=e[9],u=e[10]);const b=u;let a;e[11]!==g?(a=[...g],e[11]=g,e[12]=a):a=e[12];let l;e[13]!==x?(l=x.values(),e[13]=x,e[14]=l):l=e[14];let i;e[15]!==l?(i=[...l],e[15]=l,e[16]=i):i=e[16];let r;e[17]!==a||e[18]!==i?(r={availableYears:a,availableNrens:i},e[17]=a,e[18]=i,e[19]=r):r=e[19];let h;e[20]!==t||e[21]!==d||e[22]!==r?(h=w.jsx(C,{filterOptions:r,filterSelection:t,setFilterSelection:d,coloredYears:!0}),e[20]=t,e[21]=d,e[22]=r,e[23]=h):h=e[23];const _=h;let o;e[24]!==y?(o=w.jsx(E,{children:w.jsx(P,{columns:n,columnLookup:b,dataLookup:y})}),e[24]=y,e[25]=o):o=e[25];let f;return e[26]!==_||e[27]!==s||e[28]!==o?(f=w.jsx(W,{title:j["alien-wave-internal"],description:`The table below shows NREN usage of alien waves internally within their own networks. 
+import{c as k,r as Y,F as S,j as w,t as j,S as F}from"./index.js";import{u as M,g as T,D as W,F as C,f as E}from"./useData-CYCBVZdC.js";import{P}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function B(){const e=k.c(30);let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=c=>c.alien_wave_internal!==null,e[0]=m):m=e[0];const N=m,{filterSelection:t,setFilterSelection:d}=Y.useContext(S),{data:v,years:g,nrens:x}=M("/api/alien-wave",d,N);let s,p;if(e[1]!==v||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let c;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(c=D=>t.selectedYears.includes(D.year)&&t.selectedNrens.includes(D.nren),e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=c):c=e[8],s=v.filter(c),p=T(s,"alien_wave_internal"),e[1]=v,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=s,e[5]=p}else s=e[4],p=e[5];const y=p;let n,u;e[9]===Symbol.for("react.memo_cache_sentinel")?(n=["Yes","No"],u=new Map([[n[0],"True"],[n[1],"False"]]),e[9]=n,e[10]=u):(n=e[9],u=e[10]);const b=u;let a;e[11]!==g?(a=[...g],e[11]=g,e[12]=a):a=e[12];let l;e[13]!==x?(l=x.values(),e[13]=x,e[14]=l):l=e[14];let i;e[15]!==l?(i=[...l],e[15]=l,e[16]=i):i=e[16];let r;e[17]!==a||e[18]!==i?(r={availableYears:a,availableNrens:i},e[17]=a,e[18]=i,e[19]=r):r=e[19];let h;e[20]!==t||e[21]!==d||e[22]!==r?(h=w.jsx(C,{filterOptions:r,filterSelection:t,setFilterSelection:d,coloredYears:!0}),e[20]=t,e[21]=d,e[22]=r,e[23]=h):h=e[23];const _=h;let o;e[24]!==y?(o=w.jsx(E,{children:w.jsx(P,{columns:n,columnLookup:b,dataLookup:y})}),e[24]=y,e[25]=o):o=e[25];let f;return e[26]!==_||e[27]!==s||e[28]!==o?(f=w.jsx(W,{title:j["alien-wave-internal"],description:`The table below shows NREN usage of alien waves internally within their own networks. 
             This includes, for example, alien waves used between two equipment vendors, 
             eg. coloured optics on routes carried over DWDM (dense wavelength division multiplexing) equipment.
 
diff --git a/compendium_v2/static/Audits-BldRnziS.js b/compendium_v2/static/Audits-CuvZdHfU.js
similarity index 97%
rename from compendium_v2/static/Audits-BldRnziS.js
rename to compendium_v2/static/Audits-CuvZdHfU.js
index 21b18dbe5bf84d901a6d88ee3b18894e5bd0053b..e617a814772cfe82913a809140be56f033191bb4 100644
--- a/compendium_v2/static/Audits-BldRnziS.js
+++ b/compendium_v2/static/Audits-CuvZdHfU.js
@@ -1,4 +1,4 @@
-import{c as Y,r as w,F as j,j as x,t as F,S as P}from"./index.js";import{u as C,g as D,n as E,D as L,F as R,f as M}from"./useData-Ct8E3VVL.js";import{P as A}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function K(){const e=Y.c(30);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=d=>d.audits!==null,e[0]=s):s=e[0];const k=s,{filterSelection:t,setFilterSelection:u}=w.useContext(j),{data:b,years:y,nrens:N}=C("/api/standards",u,k);let i,m;if(e[1]!==b||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let d;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(d=_=>t.selectedYears.includes(_.year)&&t.selectedNrens.includes(_.nren)&&_.audits!==null,e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=d):d=e[8],i=b.filter(d);const T=D(i,"audits");m=E(T,I),e[1]=b,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=i,e[5]=m}else i=e[4],m=e[5];const g=m;let a,p;e[9]===Symbol.for("react.memo_cache_sentinel")?(a=["Yes","No"],p=new Map([[a[0],"True"],[a[1],"False"]]),e[9]=a,e[10]=p):(a=e[9],p=e[10]);const S=p;let r;e[11]!==y?(r=[...y],e[11]=y,e[12]=r):r=e[12];let l;e[13]!==N?(l=N.values(),e[13]=N,e[14]=l):l=e[14];let o;e[15]!==l?(o=[...l],e[15]=l,e[16]=o):o=e[16];let n;e[17]!==r||e[18]!==o?(n={availableYears:r,availableNrens:o},e[17]=r,e[18]=o,e[19]=n):n=e[19];let f;e[20]!==t||e[21]!==u||e[22]!==n?(f=x.jsx(R,{filterOptions:n,filterSelection:t,setFilterSelection:u,coloredYears:!0}),e[20]=t,e[21]=u,e[22]=n,e[23]=f):f=e[23];const v=f;let c;e[24]!==g?(c=x.jsx(M,{children:x.jsx(A,{columns:a,columnLookup:S,dataLookup:g})}),e[24]=g,e[25]=c):c=e[25];let h;return e[26]!==v||e[27]!==i||e[28]!==c?(h=x.jsx(L,{title:F.audits,description:`The table below shows whether NRENs have external and/or internal audits 
+import{c as Y,r as w,F as j,j as x,t as F,S as P}from"./index.js";import{u as C,g as D,n as E,D as L,F as R,f as M}from"./useData-CYCBVZdC.js";import{P as A}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function K(){const e=Y.c(30);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=d=>d.audits!==null,e[0]=s):s=e[0];const k=s,{filterSelection:t,setFilterSelection:u}=w.useContext(j),{data:b,years:y,nrens:N}=C("/api/standards",u,k);let i,m;if(e[1]!==b||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let d;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(d=_=>t.selectedYears.includes(_.year)&&t.selectedNrens.includes(_.nren)&&_.audits!==null,e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=d):d=e[8],i=b.filter(d);const T=D(i,"audits");m=E(T,I),e[1]=b,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=i,e[5]=m}else i=e[4],m=e[5];const g=m;let a,p;e[9]===Symbol.for("react.memo_cache_sentinel")?(a=["Yes","No"],p=new Map([[a[0],"True"],[a[1],"False"]]),e[9]=a,e[10]=p):(a=e[9],p=e[10]);const S=p;let r;e[11]!==y?(r=[...y],e[11]=y,e[12]=r):r=e[12];let l;e[13]!==N?(l=N.values(),e[13]=N,e[14]=l):l=e[14];let o;e[15]!==l?(o=[...l],e[15]=l,e[16]=o):o=e[16];let n;e[17]!==r||e[18]!==o?(n={availableYears:r,availableNrens:o},e[17]=r,e[18]=o,e[19]=n):n=e[19];let f;e[20]!==t||e[21]!==u||e[22]!==n?(f=x.jsx(R,{filterOptions:n,filterSelection:t,setFilterSelection:u,coloredYears:!0}),e[20]=t,e[21]=u,e[22]=n,e[23]=f):f=e[23];const v=f;let c;e[24]!==g?(c=x.jsx(M,{children:x.jsx(A,{columns:a,columnLookup:S,dataLookup:g})}),e[24]=g,e[25]=c):c=e[25];let h;return e[26]!==v||e[27]!==i||e[28]!==c?(h=x.jsx(L,{title:F.audits,description:`The table below shows whether NRENs have external and/or internal audits 
             of the information security management systems (eg. risk management and policies). 
             Where extra information has been provided, such as whether a certified security auditor 
             on ISP 27001 is performing the audits, it can be viewed by hovering over the indicator 
diff --git a/compendium_v2/static/Automation-BAaw7w82.js b/compendium_v2/static/Automation-DItliT93.js
similarity index 98%
rename from compendium_v2/static/Automation-BAaw7w82.js
rename to compendium_v2/static/Automation-DItliT93.js
index 5d331bca2c5fa160345c29b0ceb06610d17cfd68..7c94daac4d82255039bdb7bb6ad6b3347ccf1621 100644
--- a/compendium_v2/static/Automation-BAaw7w82.js
+++ b/compendium_v2/static/Automation-DItliT93.js
@@ -1,4 +1,4 @@
-import{c as ee,r as te,F as se,S as ne,j as t,t as le}from"./index.js";import{u as oe,g as re,F as ie,D as ae,f as ce}from"./useData-Ct8E3VVL.js";import{C as Q}from"./ColorPill-CXvWIfWz.js";import{T as he}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";function we(){const e=ee.c(69),{filterSelection:l,setFilterSelection:p}=te.useContext(se),{data:U,years:c,nrens:R}=oe("/api/network-automation",p);let m,f,x,j,u,g,w,y,_,h,d,b,S,Y,v;if(e[0]!==l||e[1]!==R||e[2]!==U||e[3]!==p||e[4]!==c){let A;e[20]!==l.selectedNrens||e[21]!==l.selectedYears?(A=F=>l.selectedYears.includes(F.year)&&l.selectedNrens.includes(F.nren),e[20]=l.selectedNrens,e[21]=l.selectedYears,e[22]=A):A=e[22];const V=U.filter(A),X=re(V,"network_automation");let C;e[23]!==c?(C=[...c],e[23]=c,e[24]=C):C=e[24];let T;e[25]!==R?(T=R.values(),e[25]=R,e[26]=T):T=e[26];let D;e[27]!==T?(D=[...T],e[27]=T,e[28]=D):D=e[28];let $;e[29]!==C||e[30]!==D?($={availableYears:C,availableNrens:D},e[29]=C,e[30]=D,e[31]=$):$=e[31];let L;e[32]!==l||e[33]!==p||e[34]!==$?(L=t.jsx(ie,{filterOptions:$,filterSelection:l,setFilterSelection:p,coloredYears:!0}),e[32]=l,e[33]=p,e[34]=$,e[35]=L):L=e[35];const Z=L;let M;e[36]!==c?(M=F=>c.has(F),e[36]=c,e[37]=M):M=e[37];const W=[...l.selectedYears.filter(M)].sort();x=ae,b=le["network-automation"],S=`The table below shows which NRENs have, or plan to, automate their 
+import{c as ee,r as te,F as se,S as ne,j as t,t as le}from"./index.js";import{u as oe,g as re,F as ie,D as ae,f as ce}from"./useData-CYCBVZdC.js";import{C as Q}from"./ColorPill-CXvWIfWz.js";import{T as he}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";function we(){const e=ee.c(69),{filterSelection:l,setFilterSelection:p}=te.useContext(se),{data:U,years:c,nrens:R}=oe("/api/network-automation",p);let m,f,x,j,u,g,w,y,_,h,d,b,S,Y,v;if(e[0]!==l||e[1]!==R||e[2]!==U||e[3]!==p||e[4]!==c){let A;e[20]!==l.selectedNrens||e[21]!==l.selectedYears?(A=F=>l.selectedYears.includes(F.year)&&l.selectedNrens.includes(F.nren),e[20]=l.selectedNrens,e[21]=l.selectedYears,e[22]=A):A=e[22];const V=U.filter(A),X=re(V,"network_automation");let C;e[23]!==c?(C=[...c],e[23]=c,e[24]=C):C=e[24];let T;e[25]!==R?(T=R.values(),e[25]=R,e[26]=T):T=e[26];let D;e[27]!==T?(D=[...T],e[27]=T,e[28]=D):D=e[28];let $;e[29]!==C||e[30]!==D?($={availableYears:C,availableNrens:D},e[29]=C,e[30]=D,e[31]=$):$=e[31];let L;e[32]!==l||e[33]!==p||e[34]!==$?(L=t.jsx(ie,{filterOptions:$,filterSelection:l,setFilterSelection:p,coloredYears:!0}),e[32]=l,e[33]=p,e[34]=$,e[35]=L):L=e[35];const Z=L;let M;e[36]!==c?(M=F=>c.has(F),e[36]=c,e[37]=M):M=e[37];const W=[...l.selectedYears.filter(M)].sort();x=ae,b=le["network-automation"],S=`The table below shows which NRENs have, or plan to, automate their 
             operational processes, with specification of which processes, and the names of 
             software and tools used for this given when appropriate. 
             Where NRENs indicated that they are using automation for some network tasks, 
diff --git a/compendium_v2/static/Budget-BVbbdsI6.js b/compendium_v2/static/Budget-BD3tWhAz.js
similarity index 92%
rename from compendium_v2/static/Budget-BVbbdsI6.js
rename to compendium_v2/static/Budget-BD3tWhAz.js
index 9dd6635e3713505c7e95d1044d21124ace2e7bc6..a7fb7bbed959997ae27337cc38f70801986d4f38 100644
--- a/compendium_v2/static/Budget-BVbbdsI6.js
+++ b/compendium_v2/static/Budget-BD3tWhAz.js
@@ -1 +1 @@
-import{c as _,r as S,F as j,j as s,t as v,S as C}from"./index.js";import{L as R}from"./index-C4Nuqrw6.js";import{C as L,a as w,L as D,P as F,b as P,p as M,c as O,d as T,u as B,e as G,D as k,F as q,f as A}from"./useData-Ct8E3VVL.js";import{g as H}from"./charthelpers-DmM6tvdh.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";L.register(w,D,F,P,M,O,T);function Q(){const e=_.c(24),{filterSelection:t,setFilterSelection:o}=S.useContext(j),{data:m,nrens:b}=B("/api/budget",o);let a,l;if(e[0]!==m||e[1]!==t.selectedNrens){let h;e[4]!==t.selectedNrens?(h=E=>t.selectedNrens.includes(E.nren),e[4]=t.selectedNrens,e[5]=h):h=e[5],a=m.filter(h),l=G(a,"budget"),e[0]=m,e[1]=t.selectedNrens,e[2]=a,e[3]=l}else a=e[2],l=e[3];const N=l;let c;e[6]===Symbol.for("react.memo_cache_sentinel")?(c=[],e[6]=c):c=e[6];let i;e[7]!==b?(i=b.values(),e[7]=b,e[8]=i):i=e[8];let r;e[9]!==i?(r={availableYears:c,availableNrens:[...i]},e[9]=i,e[10]=r):r=e[10];let d;e[11]!==t||e[12]!==o||e[13]!==r?(d=s.jsx(q,{filterOptions:r,filterSelection:t,setFilterSelection:o}),e[11]=t,e[12]=o,e[13]=r,e[14]=d):d=e[14];const y=d;let f;e[15]===Symbol.for("react.memo_cache_sentinel")?(f=H({title:"Budget in M€",tooltipUnit:"M€",unit:"M€"}),e[15]=f):f=e[15];const x=f;let g;e[16]===Symbol.for("react.memo_cache_sentinel")?(g=s.jsx("br",{}),e[16]=g):g=e[16];let p;e[17]===Symbol.for("react.memo_cache_sentinel")?(p=s.jsxs("span",{children:["The graph shows NREN budgets per year (in millions Euro). When budgets are not per calendar year, the NREN is asked to provide figures of the budget that covers the largest part of the year, and to include any GÉANT subsidy they may receive.",g,"NRENs are free to decide how they define the part of their organisation dedicated to core NREN business, and the budget. The merging of different parts of a large NREN into a single organisation, with a single budget can lead to significant changes between years, as can receiving funding for specific time-bound projects.",s.jsx("br",{}),"Hovering over the graph data points shows the NREN budget for the year. Gaps indicate that the budget question was not filled in for a particular year."]}),e[17]=p):p=e[17];let n;e[18]!==N?(n=s.jsx(A,{children:s.jsx(R,{data:N,options:x})}),e[18]=N,e[19]=n):n=e[19];let u;return e[20]!==y||e[21]!==a||e[22]!==n?(u=s.jsx(k,{title:v.budget,description:p,category:C.Organisation,filter:y,data:a,filename:"budget_data",children:n}),e[20]=y,e[21]=a,e[22]=n,e[23]=u):u=e[23],u}export{Q as default};
+import{c as _,r as S,F as j,j as s,t as v,S as C}from"./index.js";import{L as R}from"./index-BfhfJiKe.js";import{C as L,a as w,L as D,P as F,b as P,p as M,c as O,d as T,u as B,e as G,D as k,F as q,f as A}from"./useData-CYCBVZdC.js";import{g as H}from"./charthelpers-CdmocpOu.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";L.register(w,D,F,P,M,O,T);function Q(){const e=_.c(24),{filterSelection:t,setFilterSelection:o}=S.useContext(j),{data:m,nrens:b}=B("/api/budget",o);let a,l;if(e[0]!==m||e[1]!==t.selectedNrens){let h;e[4]!==t.selectedNrens?(h=E=>t.selectedNrens.includes(E.nren),e[4]=t.selectedNrens,e[5]=h):h=e[5],a=m.filter(h),l=G(a,"budget"),e[0]=m,e[1]=t.selectedNrens,e[2]=a,e[3]=l}else a=e[2],l=e[3];const N=l;let c;e[6]===Symbol.for("react.memo_cache_sentinel")?(c=[],e[6]=c):c=e[6];let i;e[7]!==b?(i=b.values(),e[7]=b,e[8]=i):i=e[8];let r;e[9]!==i?(r={availableYears:c,availableNrens:[...i]},e[9]=i,e[10]=r):r=e[10];let d;e[11]!==t||e[12]!==o||e[13]!==r?(d=s.jsx(q,{filterOptions:r,filterSelection:t,setFilterSelection:o}),e[11]=t,e[12]=o,e[13]=r,e[14]=d):d=e[14];const y=d;let f;e[15]===Symbol.for("react.memo_cache_sentinel")?(f=H({title:"Budget in M€",tooltipUnit:"M€",unit:"M€"}),e[15]=f):f=e[15];const x=f;let g;e[16]===Symbol.for("react.memo_cache_sentinel")?(g=s.jsx("br",{}),e[16]=g):g=e[16];let p;e[17]===Symbol.for("react.memo_cache_sentinel")?(p=s.jsxs("span",{children:["The graph shows NREN budgets per year (in millions Euro). When budgets are not per calendar year, the NREN is asked to provide figures of the budget that covers the largest part of the year, and to include any GÉANT subsidy they may receive.",g,"NRENs are free to decide how they define the part of their organisation dedicated to core NREN business, and the budget. The merging of different parts of a large NREN into a single organisation, with a single budget can lead to significant changes between years, as can receiving funding for specific time-bound projects.",s.jsx("br",{}),"Hovering over the graph data points shows the NREN budget for the year. Gaps indicate that the budget question was not filled in for a particular year."]}),e[17]=p):p=e[17];let n;e[18]!==N?(n=s.jsx(A,{children:s.jsx(R,{data:N,options:x})}),e[18]=N,e[19]=n):n=e[19];let u;return e[20]!==y||e[21]!==a||e[22]!==n?(u=s.jsx(k,{title:v.budget,description:p,category:C.Organisation,filter:y,data:a,filename:"budget_data",children:n}),e[20]=y,e[21]=a,e[22]=n,e[23]=u):u=e[23],u}export{Q as default};
diff --git a/compendium_v2/static/BusinessContinuity-CLtH4Vxm.js b/compendium_v2/static/BusinessContinuity-MvRfhQYb.js
similarity index 97%
rename from compendium_v2/static/BusinessContinuity-CLtH4Vxm.js
rename to compendium_v2/static/BusinessContinuity-MvRfhQYb.js
index 0000db70aa0b340af418ad603be9c33690dd4466..81c39e5f91e3acf7225595ad3d0b2489e175eb97 100644
--- a/compendium_v2/static/BusinessContinuity-CLtH4Vxm.js
+++ b/compendium_v2/static/BusinessContinuity-MvRfhQYb.js
@@ -1,4 +1,4 @@
-import{c as v,r as S,F as j,j as y,t as C,S as E}from"./index.js";import{u as F,g as P,n as D,D as L,F as R,f as M}from"./useData-Ct8E3VVL.js";import{P as B}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function Q(){const e=v.c(30);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=u=>u.business_continuity_plans!==null,e[0]=s):s=e[0];const w=s,{filterSelection:t,setFilterSelection:p}=S.useContext(j),{data:b,years:_,nrens:x}=F("/api/standards",p,w);let n,d;if(e[1]!==b||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let u;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(u=k=>t.selectedYears.includes(k.year)&&t.selectedNrens.includes(k.nren)&&k.business_continuity_plans!==null,e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=u):u=e[8],n=b.filter(u);const g=P(n,"business_continuity_plans");d=D(g,O),e[1]=b,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=n,e[5]=d}else n=e[4],d=e[5];const N=d;let i,f;e[9]===Symbol.for("react.memo_cache_sentinel")?(i=["Yes","No"],f=new Map([[i[0],"True"],[i[1],"False"]]),e[9]=i,e[10]=f):(i=e[9],f=e[10]);const Y=f;let l;e[11]!==_?(l=[..._],e[11]=_,e[12]=l):l=e[12];let o;e[13]!==x?(o=x.values(),e[13]=x,e[14]=o):o=e[14];let a;e[15]!==o?(a=[...o],e[15]=o,e[16]=a):a=e[16];let r;e[17]!==l||e[18]!==a?(r={availableYears:l,availableNrens:a},e[17]=l,e[18]=a,e[19]=r):r=e[19];let m;e[20]!==t||e[21]!==p||e[22]!==r?(m=y.jsx(R,{filterOptions:r,filterSelection:t,setFilterSelection:p,coloredYears:!0}),e[20]=t,e[21]=p,e[22]=r,e[23]=m):m=e[23];const T=m;let c;e[24]!==N?(c=y.jsx(M,{children:y.jsx(B,{columns:i,columnLookup:Y,dataLookup:N})}),e[24]=N,e[25]=c):c=e[25];let h;return e[26]!==T||e[27]!==n||e[28]!==c?(h=y.jsx(L,{title:C["business-continuity"],description:`The table below shows which NRENs have business continuity plans in place to 
+import{c as v,r as S,F as j,j as y,t as C,S as E}from"./index.js";import{u as F,g as P,n as D,D as L,F as R,f as M}from"./useData-CYCBVZdC.js";import{P as B}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function Q(){const e=v.c(30);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=u=>u.business_continuity_plans!==null,e[0]=s):s=e[0];const w=s,{filterSelection:t,setFilterSelection:p}=S.useContext(j),{data:b,years:_,nrens:x}=F("/api/standards",p,w);let n,d;if(e[1]!==b||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let u;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(u=k=>t.selectedYears.includes(k.year)&&t.selectedNrens.includes(k.nren)&&k.business_continuity_plans!==null,e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=u):u=e[8],n=b.filter(u);const g=P(n,"business_continuity_plans");d=D(g,O),e[1]=b,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=n,e[5]=d}else n=e[4],d=e[5];const N=d;let i,f;e[9]===Symbol.for("react.memo_cache_sentinel")?(i=["Yes","No"],f=new Map([[i[0],"True"],[i[1],"False"]]),e[9]=i,e[10]=f):(i=e[9],f=e[10]);const Y=f;let l;e[11]!==_?(l=[..._],e[11]=_,e[12]=l):l=e[12];let o;e[13]!==x?(o=x.values(),e[13]=x,e[14]=o):o=e[14];let a;e[15]!==o?(a=[...o],e[15]=o,e[16]=a):a=e[16];let r;e[17]!==l||e[18]!==a?(r={availableYears:l,availableNrens:a},e[17]=l,e[18]=a,e[19]=r):r=e[19];let m;e[20]!==t||e[21]!==p||e[22]!==r?(m=y.jsx(R,{filterOptions:r,filterSelection:t,setFilterSelection:p,coloredYears:!0}),e[20]=t,e[21]=p,e[22]=r,e[23]=m):m=e[23];const T=m;let c;e[24]!==N?(c=y.jsx(M,{children:y.jsx(B,{columns:i,columnLookup:Y,dataLookup:N})}),e[24]=N,e[25]=c):c=e[25];let h;return e[26]!==T||e[27]!==n||e[28]!==c?(h=y.jsx(L,{title:C["business-continuity"],description:`The table below shows which NRENs have business continuity plans in place to 
             ensure business continuation and operations. Extra details about whether the NREN 
             complies with any international standards, and whether they test the continuity plans 
             regularly can be seen by hovering over the marker. The presence of this extra information 
diff --git a/compendium_v2/static/CapacityCoreIP-CjzYJH11.js b/compendium_v2/static/CapacityCoreIP-BYeiJxnz.js
similarity index 90%
rename from compendium_v2/static/CapacityCoreIP-CjzYJH11.js
rename to compendium_v2/static/CapacityCoreIP-BYeiJxnz.js
index a41351391ce93ba4306ffe70d95d5e667715c300..d7107e88cabe047520ebf5fe707bd61ecfb80121 100644
--- a/compendium_v2/static/CapacityCoreIP-CjzYJH11.js
+++ b/compendium_v2/static/CapacityCoreIP-BYeiJxnz.js
@@ -1,3 +1,3 @@
-import{c as P,r as Y,F as I,j as y,S as G,t as R}from"./index.js";import{B as L}from"./index-C4Nuqrw6.js";import{C as O,a as $,L as A,B as M,p as T,c as U,d as q,u as z,o as H,D as J,F as K,f as Q}from"./useData-Ct8E3VVL.js";import{p as V}from"./chartjs-plugin-datalabels.esm-BI98Iz1j.js";import{a as W}from"./charthelpers-DmM6tvdh.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";O.register($,A,M,T,U,q);function oe(){const e=P.c(39);let b;e[0]===Symbol.for("react.memo_cache_sentinel")?(b=n=>n.typical_backbone_capacity!=null,e[0]=b):b=e[0];const B=b,{filterSelection:t,setFilterSelection:s}=Y.useContext(I),{data:N,years:d,nrens:u}=z("/api/capacity",s,B);let i,l,a,g;if(e[1]!==N||e[2]!==t||e[3]!==u||e[4]!==s||e[5]!==d){let n;e[10]!==t.selectedNrens||e[11]!==t.selectedYears?(n=j=>t.selectedYears.includes(j.year)&&t.selectedNrens.includes(j.nren)&&B(j),e[10]=t.selectedNrens,e[11]=t.selectedYears,e[12]=n):n=e[12],a=N.filter(n),i=H(a,"typical_backbone_capacity","Backbone IP Capacity");let p;e[13]!==d?(p=[...d],e[13]=d,e[14]=p):p=e[14];let f;e[15]!==u?(f=u.values(),e[15]=u,e[16]=f):f=e[16];let m;e[17]!==f?(m=[...f],e[17]=f,e[18]=m):m=e[18];let h;e[19]!==p||e[20]!==m?(h={availableYears:p,availableNrens:m},e[19]=p,e[20]=m,e[21]=h):h=e[21];let S;e[22]!==t||e[23]!==s||e[24]!==h?(S=y.jsx(K,{filterOptions:h,filterSelection:t,setFilterSelection:s}),e[22]=t,e[23]=s,e[24]=h,e[25]=S):S=e[25],l=S,g=Array.from(new Set(a.map(X))),e[1]=N,e[2]=t,e[3]=u,e[4]=s,e[5]=d,e[6]=i,e[7]=l,e[8]=a,e[9]=g}else i=e[6],l=e[7],a=e[8],g=e[9];const w=g.length,D=Math.max(w*t.selectedYears.length*1.5+5,50),v=R["capacity-core-ip"],E=`The graph below shows the typical core usable backbone IP capacity of 
+import{c as P,r as Y,F as I,j as y,S as G,t as R}from"./index.js";import{B as L}from"./index-BfhfJiKe.js";import{C as O,a as $,L as A,B as M,p as T,c as U,d as q,u as z,o as H,D as J,F as K,f as Q}from"./useData-CYCBVZdC.js";import{p as V}from"./chartjs-plugin-datalabels.esm-CzQRWEly.js";import{a as W}from"./charthelpers-CdmocpOu.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";O.register($,A,M,T,U,q);function oe(){const e=P.c(39);let b;e[0]===Symbol.for("react.memo_cache_sentinel")?(b=n=>n.typical_backbone_capacity!=null,e[0]=b):b=e[0];const B=b,{filterSelection:t,setFilterSelection:s}=Y.useContext(I),{data:N,years:d,nrens:u}=z("/api/capacity",s,B);let i,l,a,g;if(e[1]!==N||e[2]!==t||e[3]!==u||e[4]!==s||e[5]!==d){let n;e[10]!==t.selectedNrens||e[11]!==t.selectedYears?(n=j=>t.selectedYears.includes(j.year)&&t.selectedNrens.includes(j.nren)&&B(j),e[10]=t.selectedNrens,e[11]=t.selectedYears,e[12]=n):n=e[12],a=N.filter(n),i=H(a,"typical_backbone_capacity","Backbone IP Capacity");let p;e[13]!==d?(p=[...d],e[13]=d,e[14]=p):p=e[14];let f;e[15]!==u?(f=u.values(),e[15]=u,e[16]=f):f=e[16];let m;e[17]!==f?(m=[...f],e[17]=f,e[18]=m):m=e[18];let h;e[19]!==p||e[20]!==m?(h={availableYears:p,availableNrens:m},e[19]=p,e[20]=m,e[21]=h):h=e[21];let S;e[22]!==t||e[23]!==s||e[24]!==h?(S=y.jsx(K,{filterOptions:h,filterSelection:t,setFilterSelection:s}),e[22]=t,e[23]=s,e[24]=h,e[25]=S):S=e[25],l=S,g=Array.from(new Set(a.map(X))),e[1]=N,e[2]=t,e[3]=u,e[4]=s,e[5]=d,e[6]=i,e[7]=l,e[8]=a,e[9]=g}else i=e[6],l=e[7],a=e[8],g=e[9];const w=g.length,D=Math.max(w*t.selectedYears.length*1.5+5,50),v=R["capacity-core-ip"],E=`The graph below shows the typical core usable backbone IP capacity of 
     NREN networks, expressed in Gbit/s. It refers to the circuit capacity, not the traffic over 
     the network.`;let _;e[26]===Symbol.for("react.memo_cache_sentinel")?(_=W({title:v,tooltipUnit:"Gbit/s",unit:"Gbit/s"}),e[26]=_):_=e[26];const F=_,k=`${D}rem`;let r;e[27]!==k?(r={height:k},e[27]=k,e[28]=r):r=e[28];let x;e[29]===Symbol.for("react.memo_cache_sentinel")?(x=[V],e[29]=x):x=e[29];let c;e[30]!==i?(c=y.jsx(L,{data:i,options:F,plugins:x}),e[30]=i,e[31]=c):c=e[31];let o;e[32]!==r||e[33]!==c?(o=y.jsx(Q,{children:y.jsx("div",{className:"chart-container",style:r,children:c})}),e[32]=r,e[33]=c,e[34]=o):o=e[34];let C;return e[35]!==l||e[36]!==a||e[37]!==o?(C=y.jsx(J,{title:v,description:E,category:G.Network,filter:l,data:a,filename:"capacity_core_ip",children:o}),e[35]=l,e[36]=a,e[37]=o,e[38]=C):C=e[38],C}function X(e){return e.nren}export{oe as default};
diff --git a/compendium_v2/static/CapacityLargestLink-CCiZ1Jtj.js b/compendium_v2/static/CapacityLargestLink-Bov4w9OF.js
similarity index 90%
rename from compendium_v2/static/CapacityLargestLink-CCiZ1Jtj.js
rename to compendium_v2/static/CapacityLargestLink-Bov4w9OF.js
index abaa5480d10a95551dd2b8eda64a07f111dfa4f0..812a6a6e92c99654cbddb28ca6e51d608aed3c17 100644
--- a/compendium_v2/static/CapacityLargestLink-CCiZ1Jtj.js
+++ b/compendium_v2/static/CapacityLargestLink-Bov4w9OF.js
@@ -1,3 +1,3 @@
-import{c as L,r as Y,F as G,j as u,S as R,t as O}from"./index.js";import{B as P}from"./index-C4Nuqrw6.js";import{C as $,a as A,L as M,B as U,p as W,c as q,d as z,u as H,o as I,D as J,F as K,f as Q}from"./useData-Ct8E3VVL.js";import{p as T}from"./chartjs-plugin-datalabels.esm-BI98Iz1j.js";import{a as V}from"./charthelpers-DmM6tvdh.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";$.register(A,M,U,W,q,z);function ce(){const e=L.c(39);let y;e[0]===Symbol.for("react.memo_cache_sentinel")?(y=o=>o.largest_link_capacity!=null,e[0]=y):y=e[0];const j=y,{filterSelection:t,setFilterSelection:s}=Y.useContext(G),{data:b,years:h,nrens:g}=H("/api/capacity",s,j);let i,l,a,_;if(e[1]!==b||e[2]!==t||e[3]!==g||e[4]!==s||e[5]!==h){let o;e[10]!==t.selectedNrens||e[11]!==t.selectedYears?(o=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren)&&j(v),e[10]=t.selectedNrens,e[11]=t.selectedYears,e[12]=o):o=e[12],a=b.filter(o),i=I(a,"largest_link_capacity","Link capacity");let p;e[13]!==h?(p=[...h],e[13]=h,e[14]=p):p=e[14];let f;e[15]!==g?(f=g.values(),e[15]=g,e[16]=f):f=e[16];let m;e[17]!==f?(m=[...f],e[17]=f,e[18]=m):m=e[18];let d;e[19]!==p||e[20]!==m?(d={availableYears:p,availableNrens:m},e[19]=p,e[20]=m,e[21]=d):d=e[21];let S;e[22]!==t||e[23]!==s||e[24]!==d?(S=u.jsx(K,{filterOptions:d,filterSelection:t,setFilterSelection:s}),e[22]=t,e[23]=s,e[24]=d,e[25]=S):S=e[25],l=S,_=Array.from(new Set(a.map(X))),e[1]=b,e[2]=t,e[3]=g,e[4]=s,e[5]=h,e[6]=i,e[7]=l,e[8]=a,e[9]=_}else i=e[6],l=e[7],a=e[8],_=e[9];const B=_.length,D=Math.max(B*t.selectedYears.length*1.5+5,50),w=O["capacity-largest-link"],E=`NRENs were asked to give the capacity (in Gbits/s) of the largest link in 
+import{c as L,r as Y,F as G,j as u,S as R,t as O}from"./index.js";import{B as P}from"./index-BfhfJiKe.js";import{C as $,a as A,L as M,B as U,p as W,c as q,d as z,u as H,o as I,D as J,F as K,f as Q}from"./useData-CYCBVZdC.js";import{p as T}from"./chartjs-plugin-datalabels.esm-CzQRWEly.js";import{a as V}from"./charthelpers-CdmocpOu.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";$.register(A,M,U,W,q,z);function ce(){const e=L.c(39);let y;e[0]===Symbol.for("react.memo_cache_sentinel")?(y=o=>o.largest_link_capacity!=null,e[0]=y):y=e[0];const j=y,{filterSelection:t,setFilterSelection:s}=Y.useContext(G),{data:b,years:h,nrens:g}=H("/api/capacity",s,j);let i,l,a,_;if(e[1]!==b||e[2]!==t||e[3]!==g||e[4]!==s||e[5]!==h){let o;e[10]!==t.selectedNrens||e[11]!==t.selectedYears?(o=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren)&&j(v),e[10]=t.selectedNrens,e[11]=t.selectedYears,e[12]=o):o=e[12],a=b.filter(o),i=I(a,"largest_link_capacity","Link capacity");let p;e[13]!==h?(p=[...h],e[13]=h,e[14]=p):p=e[14];let f;e[15]!==g?(f=g.values(),e[15]=g,e[16]=f):f=e[16];let m;e[17]!==f?(m=[...f],e[17]=f,e[18]=m):m=e[18];let d;e[19]!==p||e[20]!==m?(d={availableYears:p,availableNrens:m},e[19]=p,e[20]=m,e[21]=d):d=e[21];let S;e[22]!==t||e[23]!==s||e[24]!==d?(S=u.jsx(K,{filterOptions:d,filterSelection:t,setFilterSelection:s}),e[22]=t,e[23]=s,e[24]=d,e[25]=S):S=e[25],l=S,_=Array.from(new Set(a.map(X))),e[1]=b,e[2]=t,e[3]=g,e[4]=s,e[5]=h,e[6]=i,e[7]=l,e[8]=a,e[9]=_}else i=e[6],l=e[7],a=e[8],_=e[9];const B=_.length,D=Math.max(B*t.selectedYears.length*1.5+5,50),w=O["capacity-largest-link"],E=`NRENs were asked to give the capacity (in Gbits/s) of the largest link in 
     their network used for internet traffic (either shared or dedicated). While they were invited to 
     provide the sum of aggregated links, backup capacity was not to be included.`;let k;e[26]===Symbol.for("react.memo_cache_sentinel")?(k=V({title:w,tooltipUnit:"Gbit/s",unit:"Gbit/s"}),e[26]=k):k=e[26];const F=k,N=`${D}rem`;let r;e[27]!==N?(r={height:N},e[27]=N,e[28]=r):r=e[28];let x;e[29]===Symbol.for("react.memo_cache_sentinel")?(x=[T],e[29]=x):x=e[29];let n;e[30]!==i?(n=u.jsx(P,{data:i,options:F,plugins:x}),e[30]=i,e[31]=n):n=e[31];let c;e[32]!==r||e[33]!==n?(c=u.jsx(Q,{children:u.jsx("div",{className:"chart-container",style:r,children:n})}),e[32]=r,e[33]=n,e[34]=c):c=e[34];let C;return e[35]!==l||e[36]!==a||e[37]!==c?(C=u.jsx(J,{title:w,description:E,category:R.Network,filter:l,data:a,filename:"capacity_largest_link",children:c}),e[35]=l,e[36]=a,e[37]=c,e[38]=C):C=e[38],C}function X(e){return e.nren}export{ce as default};
diff --git a/compendium_v2/static/CentralProcurement-ufKA5cDY.js b/compendium_v2/static/CentralProcurement-CnLdUN2O.js
similarity index 91%
rename from compendium_v2/static/CentralProcurement-ufKA5cDY.js
rename to compendium_v2/static/CentralProcurement-CnLdUN2O.js
index f3e75b0ba918a1f71cb0bb1d593527c95abad930..441ecdb0016acc49946dc293bb6286e546c4ce5d 100644
--- a/compendium_v2/static/CentralProcurement-ufKA5cDY.js
+++ b/compendium_v2/static/CentralProcurement-CnLdUN2O.js
@@ -1 +1 @@
-import{c as Y,r as I,F as T,j as h,S as $,t as L}from"./index.js";import{C as O,a as V,L as k,B as A,p as M,c as U,d as Z,u as q,o as z,D as G,F as H,f as J}from"./useData-Ct8E3VVL.js";import{p as K}from"./chartjs-plugin-datalabels.esm-BI98Iz1j.js";import{B as Q}from"./index-C4Nuqrw6.js";import{a as W}from"./charthelpers-DmM6tvdh.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";O.register(V,k,A,M,U,Z);function ce(){const e=Y.c(40);let g;e[0]===Symbol.for("react.memo_cache_sentinel")?(g=s=>s.amount!=null,e[0]=g):g=e[0];const v=g,{filterSelection:t,setFilterSelection:l}=I.useContext(T),{data:w,years:d,nrens:y}=q("/api/central-procurement",l,v);let o,n,r,x;if(e[1]!==w||e[2]!==t||e[3]!==y||e[4]!==l||e[5]!==d){let s;e[10]!==t.selectedNrens||e[11]!==t.selectedYears?(s=j=>t.selectedYears.includes(j.year)&&t.selectedNrens.includes(j.nren),e[10]=t.selectedNrens,e[11]=t.selectedYears,e[12]=s):s=e[12],r=w.filter(s),o=z(r,"amount","Procurement Value");let a;e[13]!==d?(a=[...d],e[13]=d,e[14]=a):a=e[14];let f;e[15]!==y?(f=y.values(),e[15]=y,e[16]=f):f=e[16];let u;e[17]!==f?(u=[...f],e[17]=f,e[18]=u):u=e[18];let p;e[19]!==a||e[20]!==u?(p={availableYears:a,availableNrens:u},e[19]=a,e[20]=u,e[21]=p):p=e[21];let b;e[22]!==t||e[23]!==l||e[24]!==p?(b=h.jsx(H,{filterOptions:p,filterSelection:t,setFilterSelection:l}),e[22]=t,e[23]=l,e[24]=p,e[25]=b):b=e[25],n=b,x=Array.from(new Set(r.map(X))),e[1]=w,e[2]=t,e[3]=y,e[4]=l,e[5]=d,e[6]=o,e[7]=n,e[8]=r,e[9]=x}else o=e[6],n=e[7],r=e[8],x=e[9];const P=x.length,B=Math.max(P*t.selectedYears.length*1.5+5,50),D=L["central-procurement"];let N;e[26]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("span",{children:"Some NRENs centrally procure software for their customers. The graph below shows the total value (in Euro) of software procured in the previous year by the NRENs. Please note you can only see the select NRENs which carry out this type of procurement. Those who do not offer this are not selectable."}),e[26]=N):N=e[26];const F=N;let S;e[27]===Symbol.for("react.memo_cache_sentinel")?(S=W({title:"Software Procurement Value",valueTransform(s){return`${new Intl.NumberFormat(void 0,{style:"currency",currency:"EUR",trailingZeroDisplay:"stripIfInteger"}).format(s)}`}}),e[27]=S):S=e[27];const R=S,E=`${B}rem`;let i;e[28]!==E?(i={height:E},e[28]=E,e[29]=i):i=e[29];let _;e[30]===Symbol.for("react.memo_cache_sentinel")?(_=[K],e[30]=_):_=e[30];let c;e[31]!==o?(c=h.jsx(Q,{data:o,options:R,plugins:_}),e[31]=o,e[32]=c):c=e[32];let m;e[33]!==i||e[34]!==c?(m=h.jsx(J,{children:h.jsx("div",{className:"chart-container",style:i,children:c})}),e[33]=i,e[34]=c,e[35]=m):m=e[35];let C;return e[36]!==n||e[37]!==r||e[38]!==m?(C=h.jsx(G,{title:D,description:F,category:$.Policy,filter:n,data:r,filename:"central_procurement",children:m}),e[36]=n,e[37]=r,e[38]=m,e[39]=C):C=e[39],C}function X(e){return e.nren}export{ce as default};
+import{c as Y,r as I,F as T,j as h,S as $,t as L}from"./index.js";import{C as O,a as V,L as k,B as A,p as M,c as U,d as Z,u as q,o as z,D as G,F as H,f as J}from"./useData-CYCBVZdC.js";import{p as K}from"./chartjs-plugin-datalabels.esm-CzQRWEly.js";import{B as Q}from"./index-BfhfJiKe.js";import{a as W}from"./charthelpers-CdmocpOu.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";O.register(V,k,A,M,U,Z);function ce(){const e=Y.c(40);let g;e[0]===Symbol.for("react.memo_cache_sentinel")?(g=s=>s.amount!=null,e[0]=g):g=e[0];const v=g,{filterSelection:t,setFilterSelection:l}=I.useContext(T),{data:w,years:d,nrens:y}=q("/api/central-procurement",l,v);let o,n,r,x;if(e[1]!==w||e[2]!==t||e[3]!==y||e[4]!==l||e[5]!==d){let s;e[10]!==t.selectedNrens||e[11]!==t.selectedYears?(s=j=>t.selectedYears.includes(j.year)&&t.selectedNrens.includes(j.nren),e[10]=t.selectedNrens,e[11]=t.selectedYears,e[12]=s):s=e[12],r=w.filter(s),o=z(r,"amount","Procurement Value");let a;e[13]!==d?(a=[...d],e[13]=d,e[14]=a):a=e[14];let f;e[15]!==y?(f=y.values(),e[15]=y,e[16]=f):f=e[16];let u;e[17]!==f?(u=[...f],e[17]=f,e[18]=u):u=e[18];let p;e[19]!==a||e[20]!==u?(p={availableYears:a,availableNrens:u},e[19]=a,e[20]=u,e[21]=p):p=e[21];let b;e[22]!==t||e[23]!==l||e[24]!==p?(b=h.jsx(H,{filterOptions:p,filterSelection:t,setFilterSelection:l}),e[22]=t,e[23]=l,e[24]=p,e[25]=b):b=e[25],n=b,x=Array.from(new Set(r.map(X))),e[1]=w,e[2]=t,e[3]=y,e[4]=l,e[5]=d,e[6]=o,e[7]=n,e[8]=r,e[9]=x}else o=e[6],n=e[7],r=e[8],x=e[9];const P=x.length,B=Math.max(P*t.selectedYears.length*1.5+5,50),D=L["central-procurement"];let N;e[26]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("span",{children:"Some NRENs centrally procure software for their customers. The graph below shows the total value (in Euro) of software procured in the previous year by the NRENs. Please note you can only see the select NRENs which carry out this type of procurement. Those who do not offer this are not selectable."}),e[26]=N):N=e[26];const F=N;let S;e[27]===Symbol.for("react.memo_cache_sentinel")?(S=W({title:"Software Procurement Value",valueTransform(s){return`${new Intl.NumberFormat(void 0,{style:"currency",currency:"EUR",trailingZeroDisplay:"stripIfInteger"}).format(s)}`}}),e[27]=S):S=e[27];const R=S,E=`${B}rem`;let i;e[28]!==E?(i={height:E},e[28]=E,e[29]=i):i=e[29];let _;e[30]===Symbol.for("react.memo_cache_sentinel")?(_=[K],e[30]=_):_=e[30];let c;e[31]!==o?(c=h.jsx(Q,{data:o,options:R,plugins:_}),e[31]=o,e[32]=c):c=e[32];let m;e[33]!==i||e[34]!==c?(m=h.jsx(J,{children:h.jsx("div",{className:"chart-container",style:i,children:c})}),e[33]=i,e[34]=c,e[35]=m):m=e[35];let C;return e[36]!==n||e[37]!==r||e[38]!==m?(C=h.jsx(G,{title:D,description:F,category:$.Policy,filter:n,data:r,filename:"central_procurement",children:m}),e[36]=n,e[37]=r,e[38]=m,e[39]=C):C=e[39],C}function X(e){return e.nren}export{ce as default};
diff --git a/compendium_v2/static/CertificateProvider-S4Idgrmz.js b/compendium_v2/static/CertificateProvider-C0MtpALT.js
similarity index 93%
rename from compendium_v2/static/CertificateProvider-S4Idgrmz.js
rename to compendium_v2/static/CertificateProvider-C0MtpALT.js
index 4f9395c62e2547a045146a7b4b58330bb767735c..e810a189971d9a03a39f686cd2f577a665b0bafe 100644
--- a/compendium_v2/static/CertificateProvider-S4Idgrmz.js
+++ b/compendium_v2/static/CertificateProvider-C0MtpALT.js
@@ -1 +1 @@
-import{c as _,r as Y,F as j,j as S,t as k,S as D}from"./index.js";import{u as E,g as P,D as T,F as w,f as F}from"./useData-Ct8E3VVL.js";import{P as L}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function G(){const e=_.c(29),{filterSelection:t,setFilterSelection:c}=Y.useContext(j),{data:N,years:x,nrens:b}=E("/api/certificate-providers",c);let s,n;if(e[0]!==N||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=g=>t.selectedYears.includes(g.year)&&t.selectedNrens.includes(g.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=N.filter(u),n=P(s,"provider_names"),e[0]=N,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=n}else s=e[3],n=e[4];const v=n;let r;e[8]!==x?(r=[...x],e[8]=x,e[9]=r):r=e[9];let i;e[10]!==b?(i=b.values(),e[10]=b,e[11]=i):i=e[11];let l;e[12]!==i?(l=[...i],e[12]=i,e[13]=l):l=e[13];let o;e[14]!==r||e[15]!==l?(o={availableYears:r,availableNrens:l},e[14]=r,e[15]=l,e[16]=o):o=e[16];let f;e[17]!==t||e[18]!==c||e[19]!==o?(f=S.jsx(w,{filterOptions:o,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=o,e[20]=f):f=e[20];const C=f;let d;e[21]===Symbol.for("react.memo_cache_sentinel")?(d=["TCS","Digicert","Sectigo (outside of TCS)","Let's Encrypt","Entrust Datacard"],e[21]=d):d=e[21];const h=d;let p;e[22]===Symbol.for("react.memo_cache_sentinel")?(p=new Map([["Sectigo (outside of TCS)","Sectigo"]]),e[22]=p):p=e[22];const y=p;let a;e[23]!==v?(a=S.jsx(F,{children:S.jsx(L,{columns:h,dataLookup:v,circle:!0,columnLookup:y})}),e[23]=v,e[24]=a):a=e[24];let m;return e[25]!==C||e[26]!==s||e[27]!==a?(m=S.jsx(T,{title:k["certificate-provider"],description:"The table below shows the kinds of Network Certificate Providers used by NRENs.",category:D.Network,filter:C,data:s,filename:"certificate_provider_nrens_per_year",children:a}),e[25]=C,e[26]=s,e[27]=a,e[28]=m):m=e[28],m}export{G as default};
+import{c as _,r as Y,F as j,j as S,t as k,S as D}from"./index.js";import{u as E,g as P,D as T,F as w,f as F}from"./useData-CYCBVZdC.js";import{P as L}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function G(){const e=_.c(29),{filterSelection:t,setFilterSelection:c}=Y.useContext(j),{data:N,years:x,nrens:b}=E("/api/certificate-providers",c);let s,n;if(e[0]!==N||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=g=>t.selectedYears.includes(g.year)&&t.selectedNrens.includes(g.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=N.filter(u),n=P(s,"provider_names"),e[0]=N,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=n}else s=e[3],n=e[4];const v=n;let r;e[8]!==x?(r=[...x],e[8]=x,e[9]=r):r=e[9];let i;e[10]!==b?(i=b.values(),e[10]=b,e[11]=i):i=e[11];let l;e[12]!==i?(l=[...i],e[12]=i,e[13]=l):l=e[13];let o;e[14]!==r||e[15]!==l?(o={availableYears:r,availableNrens:l},e[14]=r,e[15]=l,e[16]=o):o=e[16];let f;e[17]!==t||e[18]!==c||e[19]!==o?(f=S.jsx(w,{filterOptions:o,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=o,e[20]=f):f=e[20];const C=f;let d;e[21]===Symbol.for("react.memo_cache_sentinel")?(d=["TCS","Digicert","Sectigo (outside of TCS)","Let's Encrypt","Entrust Datacard"],e[21]=d):d=e[21];const h=d;let p;e[22]===Symbol.for("react.memo_cache_sentinel")?(p=new Map([["Sectigo (outside of TCS)","Sectigo"]]),e[22]=p):p=e[22];const y=p;let a;e[23]!==v?(a=S.jsx(F,{children:S.jsx(L,{columns:h,dataLookup:v,circle:!0,columnLookup:y})}),e[23]=v,e[24]=a):a=e[24];let m;return e[25]!==C||e[26]!==s||e[27]!==a?(m=S.jsx(T,{title:k["certificate-provider"],description:"The table below shows the kinds of Network Certificate Providers used by NRENs.",category:D.Network,filter:C,data:s,filename:"certificate_provider_nrens_per_year",children:a}),e[25]=C,e[26]=s,e[27]=a,e[28]=m):m=e[28],m}export{G as default};
diff --git a/compendium_v2/static/ChargingStructure-D6vHlJZ3.js b/compendium_v2/static/ChargingStructure-Bv0NJy9P.js
similarity index 94%
rename from compendium_v2/static/ChargingStructure-D6vHlJZ3.js
rename to compendium_v2/static/ChargingStructure-Bv0NJy9P.js
index e0543c76fd18fc8a7690a64d936f618e833a915d..5c645a26ee27cecd5bd1b3797d8b724f8a23f81d 100644
--- a/compendium_v2/static/ChargingStructure-D6vHlJZ3.js
+++ b/compendium_v2/static/ChargingStructure-Bv0NJy9P.js
@@ -1,3 +1,3 @@
-import{c as Y,r as j,F as v,j as p,t as E,S as F}from"./index.js";import{u as D,g as R,D as k,F as w,f as P}from"./useData-Ct8E3VVL.js";import{P as T}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function G(){const e=Y.c(29),C=L,{filterSelection:t,setFilterSelection:c}=j.useContext(v),{data:g,years:b,nrens:N}=D("/api/charging",c,C);let a,f;if(e[0]!==g||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let m;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(m=x=>t.selectedYears.includes(x.year)&&t.selectedNrens.includes(x.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=m):m=e[7],a=g.filter(m),f=R(a,"fee_type"),e[0]=g,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=a,e[4]=f}else a=e[3],f=e[4];const _=f;let r;e[8]!==b?(r=[...b],e[8]=b,e[9]=r):r=e[9];let i;e[10]!==N?(i=N.values(),e[10]=N,e[11]=i):i=e[11];let l;e[12]!==i?(l=[...i],e[12]=i,e[13]=l):l=e[13];let n;e[14]!==r||e[15]!==l?(n={availableYears:r,availableNrens:l},e[14]=r,e[15]=l,e[16]=n):n=e[16];let u;e[17]!==t||e[18]!==c||e[19]!==n?(u=p.jsx(w,{filterOptions:n,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=n,e[20]=u):u=e[20];const y=u;let s,d;e[21]===Symbol.for("react.memo_cache_sentinel")?(s=["Flat fee based on bandwidth","Usage based fee","Combination flat fee & usage basedfee","No Direct Charge","Other"],d=new Map([[s[0],"flat_fee"],[s[1],"usage_based_fee"],[s[2],"combination"],[s[3],"no_charge"],[s[4],"other"]]),e[21]=s,e[22]=d):(s=e[21],d=e[22]);const S=d;let o;e[23]!==_?(o=p.jsx(P,{children:p.jsx(T,{columns:s,dataLookup:_,columnLookup:S})}),e[23]=_,e[24]=o):o=e[24];let h;return e[25]!==y||e[26]!==a||e[27]!==o?(h=p.jsx(k,{title:E.charging,description:`The charging structure is the way in which NRENs charge their customers for the services they provide.
+import{c as Y,r as j,F as v,j as p,t as E,S as F}from"./index.js";import{u as D,g as R,D as k,F as w,f as P}from"./useData-CYCBVZdC.js";import{P as T}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function G(){const e=Y.c(29),C=L,{filterSelection:t,setFilterSelection:c}=j.useContext(v),{data:g,years:b,nrens:N}=D("/api/charging",c,C);let a,f;if(e[0]!==g||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let m;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(m=x=>t.selectedYears.includes(x.year)&&t.selectedNrens.includes(x.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=m):m=e[7],a=g.filter(m),f=R(a,"fee_type"),e[0]=g,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=a,e[4]=f}else a=e[3],f=e[4];const _=f;let r;e[8]!==b?(r=[...b],e[8]=b,e[9]=r):r=e[9];let i;e[10]!==N?(i=N.values(),e[10]=N,e[11]=i):i=e[11];let l;e[12]!==i?(l=[...i],e[12]=i,e[13]=l):l=e[13];let n;e[14]!==r||e[15]!==l?(n={availableYears:r,availableNrens:l},e[14]=r,e[15]=l,e[16]=n):n=e[16];let u;e[17]!==t||e[18]!==c||e[19]!==n?(u=p.jsx(w,{filterOptions:n,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=n,e[20]=u):u=e[20];const y=u;let s,d;e[21]===Symbol.for("react.memo_cache_sentinel")?(s=["Flat fee based on bandwidth","Usage based fee","Combination flat fee & usage basedfee","No Direct Charge","Other"],d=new Map([[s[0],"flat_fee"],[s[1],"usage_based_fee"],[s[2],"combination"],[s[3],"no_charge"],[s[4],"other"]]),e[21]=s,e[22]=d):(s=e[21],d=e[22]);const S=d;let o;e[23]!==_?(o=p.jsx(P,{children:p.jsx(T,{columns:s,dataLookup:_,columnLookup:S})}),e[23]=_,e[24]=o):o=e[24];let h;return e[25]!==y||e[26]!==a||e[27]!==o?(h=p.jsx(k,{title:E.charging,description:`The charging structure is the way in which NRENs charge their customers for the services they provide.
          The charging structure can be based on a flat fee, usage based fee, a combination of both, or no direct charge. 
          By selecting multiple years and NRENs, the table can be used to compare the charging structure of NRENs.`,category:F.Organisation,filter:y,data:a,filename:"charging_mechanism_of_nrens_per_year",children:o}),e[25]=y,e[26]=a,e[27]=o,e[28]=h):h=e[28],h}function L(e){return e.fee_type!=null}export{G as default};
diff --git a/compendium_v2/static/ConnectedInstitutionsURLs-gUMBROcH.js b/compendium_v2/static/ConnectedInstitutionsURLs-C_G2PNvX.js
similarity index 92%
rename from compendium_v2/static/ConnectedInstitutionsURLs-gUMBROcH.js
rename to compendium_v2/static/ConnectedInstitutionsURLs-C_G2PNvX.js
index b8cd8d57c7ebd9cd86de9cf1d47a3569a0f3d8f4..c7c7a2fdef603a860b711c16723d06b42f241682 100644
--- a/compendium_v2/static/ConnectedInstitutionsURLs-gUMBROcH.js
+++ b/compendium_v2/static/ConnectedInstitutionsURLs-C_G2PNvX.js
@@ -1 +1 @@
-import{c as g,r as y,F as C,j as x,t as L,S as R}from"./index.js";import{u as S,q as k,k as v,i as F,D as T,F as U,f as w,s as E}from"./useData-Ct8E3VVL.js";import{N as O}from"./NrenYearTable-iS8aEX43.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function G(){const t=g.c(24),{filterSelection:e,setFilterSelection:s}=y.useContext(C),{data:i,nrens:a}=S("/api/institution-urls",s);let n,o,u;if(t[0]!==i||t[1]!==e||t[2]!==a||t[3]!==s){const j=i?k(i):[];let d;t[7]!==e.selectedNrens?(d=N=>e.selectedNrens.includes(N.nren),t[7]=e.selectedNrens,t[8]=d):d=t[8];const D=j.filter(d),h=v(D);n=F(h,_);let m;t[9]===Symbol.for("react.memo_cache_sentinel")?(m=[],t[9]=m):m=t[9];let l;t[10]!==a?(l=a.values(),t[10]=a,t[11]=l):l=t[11];let c;t[12]!==l?(c={availableYears:m,availableNrens:[...l]},t[12]=l,t[13]=c):c=t[13];let p;t[14]!==e||t[15]!==s||t[16]!==c?(p=x.jsx(U,{filterOptions:c,filterSelection:e,setFilterSelection:s}),t[14]=e,t[15]=s,t[16]=c,t[17]=p):p=t[17],o=p,u=D.map(Y),t[0]=i,t[1]=e,t[2]=a,t[3]=s,t[4]=n,t[5]=o,t[6]=u}else n=t[4],o=t[5],u=t[6];const b=u;let r;t[18]!==n?(r=x.jsx(w,{children:x.jsx(O,{data:n,columnTitle:"Institution URLs",keysAreURLs:!0,noDots:!0})}),t[18]=n,t[19]=r):r=t[19];let f;return t[20]!==b||t[21]!==o||t[22]!==r?(f=x.jsx(T,{title:L["institutions-urls"],description:"Many NRENs have a page on their website listing user institutions. Links to the pages are shown in the table below.",category:R.ConnectedUsers,filter:o,data:b,filename:"institution_urls",children:r}),t[20]=b,t[21]=o,t[22]=r,t[23]=f):f=t[23],f}function Y(t){return{...t,urls:(t.urls??[]).join(", ")}}function _(t,e){const s=E(e);if(s!=null)for(const[i,a]of Object.entries(s))t[i]=a}export{G as default};
+import{c as g,r as y,F as C,j as x,t as L,S as R}from"./index.js";import{u as S,q as k,k as v,i as F,D as T,F as U,f as w,s as E}from"./useData-CYCBVZdC.js";import{N as O}from"./NrenYearTable-RI8l8hwG.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function G(){const t=g.c(24),{filterSelection:e,setFilterSelection:s}=y.useContext(C),{data:i,nrens:a}=S("/api/institution-urls",s);let n,o,u;if(t[0]!==i||t[1]!==e||t[2]!==a||t[3]!==s){const j=i?k(i):[];let d;t[7]!==e.selectedNrens?(d=N=>e.selectedNrens.includes(N.nren),t[7]=e.selectedNrens,t[8]=d):d=t[8];const D=j.filter(d),h=v(D);n=F(h,_);let m;t[9]===Symbol.for("react.memo_cache_sentinel")?(m=[],t[9]=m):m=t[9];let l;t[10]!==a?(l=a.values(),t[10]=a,t[11]=l):l=t[11];let c;t[12]!==l?(c={availableYears:m,availableNrens:[...l]},t[12]=l,t[13]=c):c=t[13];let p;t[14]!==e||t[15]!==s||t[16]!==c?(p=x.jsx(U,{filterOptions:c,filterSelection:e,setFilterSelection:s}),t[14]=e,t[15]=s,t[16]=c,t[17]=p):p=t[17],o=p,u=D.map(Y),t[0]=i,t[1]=e,t[2]=a,t[3]=s,t[4]=n,t[5]=o,t[6]=u}else n=t[4],o=t[5],u=t[6];const b=u;let r;t[18]!==n?(r=x.jsx(w,{children:x.jsx(O,{data:n,columnTitle:"Institution URLs",keysAreURLs:!0,noDots:!0})}),t[18]=n,t[19]=r):r=t[19];let f;return t[20]!==b||t[21]!==o||t[22]!==r?(f=x.jsx(T,{title:L["institutions-urls"],description:"Many NRENs have a page on their website listing user institutions. Links to the pages are shown in the table below.",category:R.ConnectedUsers,filter:o,data:b,filename:"institution_urls",children:r}),t[20]=b,t[21]=o,t[22]=r,t[23]=f):f=t[23],f}function Y(t){return{...t,urls:(t.urls??[]).join(", ")}}function _(t,e){const s=E(e);if(s!=null)for(const[i,a]of Object.entries(s))t[i]=a}export{G as default};
diff --git a/compendium_v2/static/ConnectedUser-C39phNBn.js b/compendium_v2/static/ConnectedUser-D-CAsrxc.js
similarity index 99%
rename from compendium_v2/static/ConnectedUser-C39phNBn.js
rename to compendium_v2/static/ConnectedUser-D-CAsrxc.js
index 5daeb21a02c72533eb6d8d1aa1b66536cf9ad458..9faf5d70eaa49d91557bfc98a5d2b6b24784ca04 100644
--- a/compendium_v2/static/ConnectedUser-C39phNBn.js
+++ b/compendium_v2/static/ConnectedUser-D-CAsrxc.js
@@ -1 +1 @@
-import{a as t,t as l,j as o,L as Y,c as F,r as U,F as D,S as A,b as T,d as P,U as j}from"./index.js";import{u as G,r as u,D as $,F as q,f as B}from"./useData-Ct8E3VVL.js";import{S as z}from"./ScrollableMatrix-Dxr22l4i.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";const I={[t.ConnectedProportion]:l["connected-proportion"],[t.ConnectivityLevel]:l["connectivity-level"],[t.ConnectionCarrier]:l["connection-carrier"],[t.ConnectivityLoad]:l["connectivity-load"],[t.ConnectivityGrowth]:l["connectivity-growth"],[t.CommercialChargingLevel]:l["commercial-charging-level"],[t.CommercialConnectivity]:l["commercial-connectivity"]},H={[t.ConnectedProportion]:o.jsxs("span",{children:["European NRENs all have different connectivity remits, as is shown in the table below. The categories of institutions make use of the ISCED 2011 classification system, the UNESCO scheme for International Standard Classification of Education.",o.jsx("br",{}),"The table shows whether a particular category of institution falls within the connectivity remit of the NREN, the actual number of such institutions connected, the % market share this represents, and the actual number of end users served in the category."]}),[t.ConnectivityLevel]:o.jsxs("span",{children:["The table below shows the average level of connectivity for each category of institution. The connectivity remit of different NRENs is shown on a different page, and NRENs are asked, at a minimum, to provide information about the typical and highest capacities (in Mbit/s) at which Universities and Research Institutes are connected.",o.jsx("br",{}),"NRENs are also asked to show proportionally how many institutions are connected at the highest capacity they offer."]}),[t.ConnectionCarrier]:o.jsxs("span",{children:["The table below shows the different mechanisms employed by NRENs to carry traffic to the different types of users they serve. Not all NRENs connect all of the types of institution listed below - details of connectivity remits can be found here: ",o.jsx(Y,{to:"/connected-proportion",className:"",children:o.jsx("span",{children:I[t.ConnectedProportion]})})]}),[t.ConnectivityLoad]:o.jsx("span",{children:"The table below shows the traffic load in Mbit/s to and from institutions served by NRENs; both the average load, and peak load, when given. The types of institutions are broken down using the ISCED 2011 classification system (the UNESCO scheme for International Standard Classification of Education), plus other types."}),[t.ConnectivityGrowth]:o.jsx("span",{children:"The table below illustrates the anticipated traffic growth within NREN networks over the next three years."}),[t.CommercialChargingLevel]:o.jsx("span",{children:"The table below outlines the typical charging levels for various types of commercial connections."}),[t.CommercialConnectivity]:o.jsx("span",{children:"The table below outlines the types of commercial organizations NRENs connect."})},L={[t.ConnectedProportion]:{"Remit cover connectivity":"coverage","Number of institutions connected":"number_connected","Percentage market share of institutions connected":"market_share","Number of users served":"users_served"},[t.ConnectivityLevel]:{"Typical link speed (Mbit/s):":"typical_speed","Highest speed link (Mbit/s):":"highest_speed","Proportionally how many institutions in this category are connected at the highest capacity? (%):":"highest_speed_proportion"},[t.ConnectionCarrier]:{"Commercial Provider Backbone":"commercial_provider_backbone","NREN Local Loops":"nren_local_loops","Regional NREN Backbone":"regional_nren_backbone",MAN:"man",Other:"other"},[t.ConnectivityLoad]:{"Average Load From Institutions (Mbit/s)":"average_load_from_institutions","Average Load To Institutions (Mbit/s)":"average_load_to_institutions","Peak Load To Institution (Mbit/s)":"peak_load_to_institutions","Peak Load From Institution (Mbit/s)":"peak_load_from_institutions"},[t.ConnectivityGrowth]:{"Percentage growth":"growth"},[t.CommercialChargingLevel]:{"No charges applied if requested by R&E users":"no_charges_if_r_e_requested","Same charging model as for R&E users":"same_as_r_e_charges","Charges typically higher than for R&E users":"higher_than_r_e_charges","Charges typically lower than for R&E users":"lower_than_r_e_charges"},[t.CommercialConnectivity]:{"No - but we offer a direct or IX peering":"no_but_direct_peering","No - not eligible for policy reasons":"no_policy","No - financial restrictions (NREN is unable to charge/recover costs)":"no_financial","No - other reason / unsure":"no_other","Yes - National NREN access only":"yes_national_nren","Yes - Including transit to other networks":"yes_incl_other","Yes - only if sponsored by a connected institution":"yes_if_sponsored"}};function te(M){const e=F.c(36),{page:n}=M,O=`/api/connected-${n.toString()}`,{filterSelection:i,setFilterSelection:y}=U.useContext(D),{data:_,years:b,nrens:N}=G(O,y);let r,a,c,s;if(e[0]!==_||e[1]!==i.selectedNrens||e[2]!==i.selectedYears||e[3]!==n){let C;e[8]!==i.selectedNrens||e[9]!==i.selectedYears?(C=S=>i.selectedYears.includes(S.year)&&i.selectedNrens.includes(S.nren),e[8]=i.selectedNrens,e[9]=i.selectedYears,e[10]=C):C=e[10],s=_.filter(C),c=!1,n==t.CommercialConnectivity?(r=T,c=!0,a=u(s,Object.keys(T),void 0)):n==t.CommercialChargingLevel?(r=P,c=!0,a=u(s,Object.keys(P),void 0)):n==t.ConnectionCarrier?(r=j,c=!0,a=u(s,["carry_mechanism"],"user_category")):n==t.ConnectedProportion?(r=j,a=u(s,Object.values(L[n]),"user_category",!1)):(r=j,a=u(s,Object.values(L[n]),"user_category",!1)),e[0]=_,e[1]=i.selectedNrens,e[2]=i.selectedYears,e[3]=n,e[4]=r,e[5]=a,e[6]=c,e[7]=s}else r=e[4],a=e[5],c=e[6],s=e[7];let h;e[11]!==b?(h=[...b],e[11]=b,e[12]=h):h=e[12];let d;e[13]!==N?(d=N.values(),e[13]=N,e[14]=d):d=e[14];let f;e[15]!==d?(f=[...d],e[15]=d,e[16]=f):f=e[16];let p;e[17]!==h||e[18]!==f?(p={availableYears:h,availableNrens:f},e[17]=h,e[18]=f,e[19]=p):p=e[19];let g;e[20]!==i||e[21]!==y||e[22]!==p?(g=o.jsx(q,{filterOptions:p,filterSelection:i,setFilterSelection:y}),e[20]=i,e[21]=y,e[22]=p,e[23]=g):g=e[23];const w=g,E=L[n],k=`nren_connected_${n.toString()}`,x=I[n],R=H[n];let m;e[24]!==r||e[25]!==a||e[26]!==c||e[27]!==E?(m=o.jsx(B,{children:o.jsx(z,{dataLookup:a,rowInfo:E,isTickIcon:c,categoryLookup:r})}),e[24]=r,e[25]=a,e[26]=c,e[27]=E,e[28]=m):m=e[28];let v;return e[29]!==k||e[30]!==w||e[31]!==s||e[32]!==x||e[33]!==R||e[34]!==m?(v=o.jsx($,{title:x,description:R,category:A.ConnectedUsers,filter:w,data:s,filename:k,children:m}),e[29]=k,e[30]=w,e[31]=s,e[32]=x,e[33]=R,e[34]=m,e[35]=v):v=e[35],v}export{te as default};
+import{a as t,t as l,j as o,L as Y,c as F,r as U,F as D,S as A,b as T,d as P,U as j}from"./index.js";import{u as G,r as u,D as $,F as q,f as B}from"./useData-CYCBVZdC.js";import{S as z}from"./ScrollableMatrix-Dxr22l4i.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";const I={[t.ConnectedProportion]:l["connected-proportion"],[t.ConnectivityLevel]:l["connectivity-level"],[t.ConnectionCarrier]:l["connection-carrier"],[t.ConnectivityLoad]:l["connectivity-load"],[t.ConnectivityGrowth]:l["connectivity-growth"],[t.CommercialChargingLevel]:l["commercial-charging-level"],[t.CommercialConnectivity]:l["commercial-connectivity"]},H={[t.ConnectedProportion]:o.jsxs("span",{children:["European NRENs all have different connectivity remits, as is shown in the table below. The categories of institutions make use of the ISCED 2011 classification system, the UNESCO scheme for International Standard Classification of Education.",o.jsx("br",{}),"The table shows whether a particular category of institution falls within the connectivity remit of the NREN, the actual number of such institutions connected, the % market share this represents, and the actual number of end users served in the category."]}),[t.ConnectivityLevel]:o.jsxs("span",{children:["The table below shows the average level of connectivity for each category of institution. The connectivity remit of different NRENs is shown on a different page, and NRENs are asked, at a minimum, to provide information about the typical and highest capacities (in Mbit/s) at which Universities and Research Institutes are connected.",o.jsx("br",{}),"NRENs are also asked to show proportionally how many institutions are connected at the highest capacity they offer."]}),[t.ConnectionCarrier]:o.jsxs("span",{children:["The table below shows the different mechanisms employed by NRENs to carry traffic to the different types of users they serve. Not all NRENs connect all of the types of institution listed below - details of connectivity remits can be found here: ",o.jsx(Y,{to:"/connected-proportion",className:"",children:o.jsx("span",{children:I[t.ConnectedProportion]})})]}),[t.ConnectivityLoad]:o.jsx("span",{children:"The table below shows the traffic load in Mbit/s to and from institutions served by NRENs; both the average load, and peak load, when given. The types of institutions are broken down using the ISCED 2011 classification system (the UNESCO scheme for International Standard Classification of Education), plus other types."}),[t.ConnectivityGrowth]:o.jsx("span",{children:"The table below illustrates the anticipated traffic growth within NREN networks over the next three years."}),[t.CommercialChargingLevel]:o.jsx("span",{children:"The table below outlines the typical charging levels for various types of commercial connections."}),[t.CommercialConnectivity]:o.jsx("span",{children:"The table below outlines the types of commercial organizations NRENs connect."})},L={[t.ConnectedProportion]:{"Remit cover connectivity":"coverage","Number of institutions connected":"number_connected","Percentage market share of institutions connected":"market_share","Number of users served":"users_served"},[t.ConnectivityLevel]:{"Typical link speed (Mbit/s):":"typical_speed","Highest speed link (Mbit/s):":"highest_speed","Proportionally how many institutions in this category are connected at the highest capacity? (%):":"highest_speed_proportion"},[t.ConnectionCarrier]:{"Commercial Provider Backbone":"commercial_provider_backbone","NREN Local Loops":"nren_local_loops","Regional NREN Backbone":"regional_nren_backbone",MAN:"man",Other:"other"},[t.ConnectivityLoad]:{"Average Load From Institutions (Mbit/s)":"average_load_from_institutions","Average Load To Institutions (Mbit/s)":"average_load_to_institutions","Peak Load To Institution (Mbit/s)":"peak_load_to_institutions","Peak Load From Institution (Mbit/s)":"peak_load_from_institutions"},[t.ConnectivityGrowth]:{"Percentage growth":"growth"},[t.CommercialChargingLevel]:{"No charges applied if requested by R&E users":"no_charges_if_r_e_requested","Same charging model as for R&E users":"same_as_r_e_charges","Charges typically higher than for R&E users":"higher_than_r_e_charges","Charges typically lower than for R&E users":"lower_than_r_e_charges"},[t.CommercialConnectivity]:{"No - but we offer a direct or IX peering":"no_but_direct_peering","No - not eligible for policy reasons":"no_policy","No - financial restrictions (NREN is unable to charge/recover costs)":"no_financial","No - other reason / unsure":"no_other","Yes - National NREN access only":"yes_national_nren","Yes - Including transit to other networks":"yes_incl_other","Yes - only if sponsored by a connected institution":"yes_if_sponsored"}};function te(M){const e=F.c(36),{page:n}=M,O=`/api/connected-${n.toString()}`,{filterSelection:i,setFilterSelection:y}=U.useContext(D),{data:_,years:b,nrens:N}=G(O,y);let r,a,c,s;if(e[0]!==_||e[1]!==i.selectedNrens||e[2]!==i.selectedYears||e[3]!==n){let C;e[8]!==i.selectedNrens||e[9]!==i.selectedYears?(C=S=>i.selectedYears.includes(S.year)&&i.selectedNrens.includes(S.nren),e[8]=i.selectedNrens,e[9]=i.selectedYears,e[10]=C):C=e[10],s=_.filter(C),c=!1,n==t.CommercialConnectivity?(r=T,c=!0,a=u(s,Object.keys(T),void 0)):n==t.CommercialChargingLevel?(r=P,c=!0,a=u(s,Object.keys(P),void 0)):n==t.ConnectionCarrier?(r=j,c=!0,a=u(s,["carry_mechanism"],"user_category")):n==t.ConnectedProportion?(r=j,a=u(s,Object.values(L[n]),"user_category",!1)):(r=j,a=u(s,Object.values(L[n]),"user_category",!1)),e[0]=_,e[1]=i.selectedNrens,e[2]=i.selectedYears,e[3]=n,e[4]=r,e[5]=a,e[6]=c,e[7]=s}else r=e[4],a=e[5],c=e[6],s=e[7];let h;e[11]!==b?(h=[...b],e[11]=b,e[12]=h):h=e[12];let d;e[13]!==N?(d=N.values(),e[13]=N,e[14]=d):d=e[14];let f;e[15]!==d?(f=[...d],e[15]=d,e[16]=f):f=e[16];let p;e[17]!==h||e[18]!==f?(p={availableYears:h,availableNrens:f},e[17]=h,e[18]=f,e[19]=p):p=e[19];let g;e[20]!==i||e[21]!==y||e[22]!==p?(g=o.jsx(q,{filterOptions:p,filterSelection:i,setFilterSelection:y}),e[20]=i,e[21]=y,e[22]=p,e[23]=g):g=e[23];const w=g,E=L[n],k=`nren_connected_${n.toString()}`,x=I[n],R=H[n];let m;e[24]!==r||e[25]!==a||e[26]!==c||e[27]!==E?(m=o.jsx(B,{children:o.jsx(z,{dataLookup:a,rowInfo:E,isTickIcon:c,categoryLookup:r})}),e[24]=r,e[25]=a,e[26]=c,e[27]=E,e[28]=m):m=e[28];let v;return e[29]!==k||e[30]!==w||e[31]!==s||e[32]!==x||e[33]!==R||e[34]!==m?(v=o.jsx($,{title:x,description:R,category:A.ConnectedUsers,filter:w,data:s,filename:k,children:m}),e[29]=k,e[30]=w,e[31]=s,e[32]=x,e[33]=R,e[34]=m,e[35]=v):v=e[35],v}export{te as default};
diff --git a/compendium_v2/static/CorporateStrategy-CQ2aByV3.js b/compendium_v2/static/CorporateStrategy-D3wglOhj.js
similarity index 93%
rename from compendium_v2/static/CorporateStrategy-CQ2aByV3.js
rename to compendium_v2/static/CorporateStrategy-D3wglOhj.js
index 48b579360e30ba2c47de866b2912068b9e7a688d..2495e633c92a71b8283f8f3c163fa5d58ebe46e0 100644
--- a/compendium_v2/static/CorporateStrategy-CQ2aByV3.js
+++ b/compendium_v2/static/CorporateStrategy-D3wglOhj.js
@@ -1,3 +1,3 @@
-import{c as k,r as C,F as j,j as y,t as E,S as F}from"./index.js";import{u as R,q as T,k as Y,i as w,D as L,F as P,f as B}from"./useData-Ct8E3VVL.js";import{N as q}from"./NrenYearTable-iS8aEX43.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function J(){const e=k.c(23);let l;e[0]===Symbol.for("react.memo_cache_sentinel")?(l=x=>!!x.strategic_plan,e[0]=l):l=e[0];const b=l,{filterSelection:t,setFilterSelection:i}=C.useContext(j),{data:n,nrens:h}=R("/api/policy",i,b);let a,c;if(e[1]!==n||e[2]!==t.selectedNrens){const x=n?T(n):[];let d;e[5]!==t.selectedNrens?(d=D=>t.selectedNrens.includes(D.nren),e[5]=t.selectedNrens,e[6]=d):d=e[6],a=x.filter(d);const v=Y(a);let u;e[7]===Symbol.for("react.memo_cache_sentinel")?(u=(D,S)=>{const _=S.strategic_plan;D[_]=_},e[7]=u):u=e[7],c=w(v,u),e[1]=n,e[2]=t.selectedNrens,e[3]=a,e[4]=c}else a=e[3],c=e[4];const g=c;let p;e[8]===Symbol.for("react.memo_cache_sentinel")?(p=[],e[8]=p):p=e[8];let s;e[9]!==h?(s=h.values(),e[9]=h,e[10]=s):s=e[10];let r;e[11]!==s?(r={availableYears:p,availableNrens:[...s]},e[11]=s,e[12]=r):r=e[12];let m;e[13]!==t||e[14]!==i||e[15]!==r?(m=y.jsx(P,{filterOptions:r,filterSelection:t,setFilterSelection:i}),e[13]=t,e[14]=i,e[15]=r,e[16]=m):m=e[16];const N=m;let o;e[17]!==g?(o=y.jsx(B,{children:y.jsx(q,{data:g,columnTitle:"Corporate Strategy",noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[17]=g,e[18]=o):o=e[18];let f;return e[19]!==N||e[20]!==a||e[21]!==o?(f=y.jsx(L,{title:E["corporate-strategy"],description:`The table below contains links to the NRENs most recent corporate strategic plans. 
+import{c as k,r as C,F as j,j as y,t as E,S as F}from"./index.js";import{u as R,q as T,k as Y,i as w,D as L,F as P,f as B}from"./useData-CYCBVZdC.js";import{N as q}from"./NrenYearTable-RI8l8hwG.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function J(){const e=k.c(23);let l;e[0]===Symbol.for("react.memo_cache_sentinel")?(l=x=>!!x.strategic_plan,e[0]=l):l=e[0];const b=l,{filterSelection:t,setFilterSelection:i}=C.useContext(j),{data:n,nrens:h}=R("/api/policy",i,b);let a,c;if(e[1]!==n||e[2]!==t.selectedNrens){const x=n?T(n):[];let d;e[5]!==t.selectedNrens?(d=D=>t.selectedNrens.includes(D.nren),e[5]=t.selectedNrens,e[6]=d):d=e[6],a=x.filter(d);const v=Y(a);let u;e[7]===Symbol.for("react.memo_cache_sentinel")?(u=(D,S)=>{const _=S.strategic_plan;D[_]=_},e[7]=u):u=e[7],c=w(v,u),e[1]=n,e[2]=t.selectedNrens,e[3]=a,e[4]=c}else a=e[3],c=e[4];const g=c;let p;e[8]===Symbol.for("react.memo_cache_sentinel")?(p=[],e[8]=p):p=e[8];let s;e[9]!==h?(s=h.values(),e[9]=h,e[10]=s):s=e[10];let r;e[11]!==s?(r={availableYears:p,availableNrens:[...s]},e[11]=s,e[12]=r):r=e[12];let m;e[13]!==t||e[14]!==i||e[15]!==r?(m=y.jsx(P,{filterOptions:r,filterSelection:t,setFilterSelection:i}),e[13]=t,e[14]=i,e[15]=r,e[16]=m):m=e[16];const N=m;let o;e[17]!==g?(o=y.jsx(B,{children:y.jsx(q,{data:g,columnTitle:"Corporate Strategy",noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[17]=g,e[18]=o):o=e[18];let f;return e[19]!==N||e[20]!==a||e[21]!==o?(f=y.jsx(L,{title:E["corporate-strategy"],description:`The table below contains links to the NRENs most recent corporate strategic plans. 
             NRENs are asked if updates have been made to their corporate strategy over the previous year. 
             To avoid showing outdated links, only the most recent responses are shown.`,category:F.Policy,filter:N,data:a,filename:"nren_corporate_strategy",children:o}),e[19]=N,e[20]=a,e[21]=o,e[22]=f):f=e[22],f}export{J as default};
diff --git a/compendium_v2/static/CrisisExercises-Bw4pZ1iW.js b/compendium_v2/static/CrisisExercises-DuZg-gGP.js
similarity index 95%
rename from compendium_v2/static/CrisisExercises-Bw4pZ1iW.js
rename to compendium_v2/static/CrisisExercises-DuZg-gGP.js
index c6b6613f4c031235b808a61317d0e7d252f33b12..bf4adbb5745c40add20c2d0282553ddbc1cab202 100644
--- a/compendium_v2/static/CrisisExercises-Bw4pZ1iW.js
+++ b/compendium_v2/static/CrisisExercises-DuZg-gGP.js
@@ -1,2 +1,2 @@
-import{c as P,r as S,F as D,S as L,j as W,t as M}from"./index.js";import{u as R,g as O,F as A,D as G,f as V}from"./useData-Ct8E3VVL.js";import{P as $}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function Z(){const e=P.c(51),{filterSelection:t,setFilterSelection:i}=S.useContext(D),{data:C,years:E,nrens:T}=R("/api/crisis-exercises",i);let s,w;if(e[0]!==C||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let r;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(r=F=>t.selectedYears.includes(F.year)&&t.selectedNrens.includes(F.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=r):r=e[7],s=C.filter(r),w=O(s,"exercise_descriptions"),e[0]=C,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=w}else s=e[3],w=e[4];const Y=w;let a;e[8]!==E?(a=[...E],e[8]=E,e[9]=a):a=e[9];let l;e[10]!==T?(l=T.values(),e[10]=T,e[11]=l):l=e[11];let n;e[12]!==l?(n=[...l],e[12]=l,e[13]=n):n=e[13];let o;e[14]!==a||e[15]!==n?(o={availableYears:a,availableNrens:n},e[14]=a,e[15]=n,e[16]=o):o=e[16];let v;e[17]!==t||e[18]!==i||e[19]!==o?(v=W.jsx(A,{filterOptions:o,filterSelection:t,setFilterSelection:i,coloredYears:!0}),e[17]=t,e[18]=i,e[19]=o,e[20]=v):v=e[20];const k=v;let c,p,u,d,m,x,f,h,N,_,y;if(e[21]!==k||e[22]!==s){const r={geant_workshops:"We participate in GEANT Crisis workshops such as CLAW",national_excercises:"We participated in National crisis exercises ",tabletop_exercises:"We run our own tabletop exercises",simulation_excercises:"We run our own simulation exercises",other_excercises:"We have done/participated in other exercises or trainings",real_crisis:"We had a real crisis",internal_security_programme:"We run an internal security awareness programme",none:"No, we have not done any crisis exercises or trainings"};d=new Map(Object.entries(r).map(q)),u=G,N=M["crisis-exercise"],_=`Many NRENs run or participate in crisis exercises to test procedures and train employees. 
+import{c as P,r as S,F as D,S as L,j as W,t as M}from"./index.js";import{u as R,g as O,F as A,D as G,f as V}from"./useData-CYCBVZdC.js";import{P as $}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function Z(){const e=P.c(51),{filterSelection:t,setFilterSelection:i}=S.useContext(D),{data:C,years:E,nrens:T}=R("/api/crisis-exercises",i);let s,w;if(e[0]!==C||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let r;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(r=F=>t.selectedYears.includes(F.year)&&t.selectedNrens.includes(F.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=r):r=e[7],s=C.filter(r),w=O(s,"exercise_descriptions"),e[0]=C,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=w}else s=e[3],w=e[4];const Y=w;let a;e[8]!==E?(a=[...E],e[8]=E,e[9]=a):a=e[9];let l;e[10]!==T?(l=T.values(),e[10]=T,e[11]=l):l=e[11];let n;e[12]!==l?(n=[...l],e[12]=l,e[13]=n):n=e[13];let o;e[14]!==a||e[15]!==n?(o={availableYears:a,availableNrens:n},e[14]=a,e[15]=n,e[16]=o):o=e[16];let v;e[17]!==t||e[18]!==i||e[19]!==o?(v=W.jsx(A,{filterOptions:o,filterSelection:t,setFilterSelection:i,coloredYears:!0}),e[17]=t,e[18]=i,e[19]=o,e[20]=v):v=e[20];const k=v;let c,p,u,d,m,x,f,h,N,_,y;if(e[21]!==k||e[22]!==s){const r={geant_workshops:"We participate in GEANT Crisis workshops such as CLAW",national_excercises:"We participated in National crisis exercises ",tabletop_exercises:"We run our own tabletop exercises",simulation_excercises:"We run our own simulation exercises",other_excercises:"We have done/participated in other exercises or trainings",real_crisis:"We had a real crisis",internal_security_programme:"We run an internal security awareness programme",none:"No, we have not done any crisis exercises or trainings"};d=new Map(Object.entries(r).map(q)),u=G,N=M["crisis-exercise"],_=`Many NRENs run or participate in crisis exercises to test procedures and train employees. 
             The table below shows whether NRENs have run or participated in an exercise in the previous year. `,y=L.Policy,m=k,x=s,f="crisis_exercise_nrens_per_year",p=V,c=$,h=Object.values(r),e[21]=k,e[22]=s,e[23]=c,e[24]=p,e[25]=u,e[26]=d,e[27]=m,e[28]=x,e[29]=f,e[30]=h,e[31]=N,e[32]=_,e[33]=y}else c=e[23],p=e[24],u=e[25],d=e[26],m=e[27],x=e[28],f=e[29],h=e[30],N=e[31],_=e[32],y=e[33];let b;e[34]!==c||e[35]!==d||e[36]!==Y||e[37]!==h?(b=W.jsx(c,{columns:h,dataLookup:Y,circle:!0,columnLookup:d}),e[34]=c,e[35]=d,e[36]=Y,e[37]=h,e[38]=b):b=e[38];let g;e[39]!==p||e[40]!==b?(g=W.jsx(p,{children:b}),e[39]=p,e[40]=b,e[41]=g):g=e[41];let j;return e[42]!==u||e[43]!==m||e[44]!==x||e[45]!==f||e[46]!==g||e[47]!==N||e[48]!==_||e[49]!==y?(j=W.jsx(u,{title:N,description:_,category:y,filter:m,data:x,filename:f,children:g}),e[42]=u,e[43]=m,e[44]=x,e[45]=f,e[46]=g,e[47]=N,e[48]=_,e[49]=y,e[50]=j):j=e[50],j}function q(e){const[t,i]=e;return[i,t]}export{Z as default};
diff --git a/compendium_v2/static/CrisisManagement-TH7W12RY.js b/compendium_v2/static/CrisisManagement-B9EB2EWM.js
similarity index 93%
rename from compendium_v2/static/CrisisManagement-TH7W12RY.js
rename to compendium_v2/static/CrisisManagement-B9EB2EWM.js
index 9563b15650f59b9b04edfa0c3dda87f1ddc412dc..673dcd9ca92738a3d663004734507d1946a850f6 100644
--- a/compendium_v2/static/CrisisManagement-TH7W12RY.js
+++ b/compendium_v2/static/CrisisManagement-B9EB2EWM.js
@@ -1 +1 @@
-import{c as C,r as F,F as v,j as x,t as P,S as k}from"./index.js";import{u as w,g as D,D as E,F as T,f as L}from"./useData-Ct8E3VVL.js";import{P as M}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function H(){const e=C.c(30);let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=c=>c.crisis_management_procedure!==null,e[0]=m):m=e[0];const S=m,{filterSelection:t,setFilterSelection:d}=F.useContext(v),{data:N,years:_,nrens:g}=w("/api/standards",d,S);let s,f;if(e[1]!==N||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let c;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(c=Y=>t.selectedYears.includes(Y.year)&&t.selectedNrens.includes(Y.nren)&&S(Y),e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=c):c=e[8],s=N.filter(c),f=D(s,"crisis_management_procedure"),e[1]=N,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=s,e[5]=f}else s=e[4],f=e[5];const b=f;let l,p;e[9]===Symbol.for("react.memo_cache_sentinel")?(l=["Yes","No"],p=new Map([[l[0],"True"],[l[1],"False"]]),e[9]=l,e[10]=p):(l=e[9],p=e[10]);const j=p;let a;e[11]!==_?(a=[..._],e[11]=_,e[12]=a):a=e[12];let r;e[13]!==g?(r=g.values(),e[13]=g,e[14]=r):r=e[14];let i;e[15]!==r?(i=[...r],e[15]=r,e[16]=i):i=e[16];let n;e[17]!==a||e[18]!==i?(n={availableYears:a,availableNrens:i},e[17]=a,e[18]=i,e[19]=n):n=e[19];let u;e[20]!==t||e[21]!==d||e[22]!==n?(u=x.jsx(T,{filterOptions:n,filterSelection:t,setFilterSelection:d,coloredYears:!0}),e[20]=t,e[21]=d,e[22]=n,e[23]=u):u=e[23];const y=u;let o;e[24]!==b?(o=x.jsx(L,{children:x.jsx(M,{columns:l,columnLookup:j,dataLookup:b})}),e[24]=b,e[25]=o):o=e[25];let h;return e[26]!==y||e[27]!==s||e[28]!==o?(h=x.jsx(E,{title:P["crisis-management"],description:"The table below shows whether NRENs have a formal crisis management procedure.",category:k.Policy,filter:y,data:s,filename:"crisis_management_nrens_per_year",children:o}),e[26]=y,e[27]=s,e[28]=o,e[29]=h):h=e[29],h}export{H as default};
+import{c as C,r as F,F as v,j as x,t as P,S as k}from"./index.js";import{u as w,g as D,D as E,F as T,f as L}from"./useData-CYCBVZdC.js";import{P as M}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function H(){const e=C.c(30);let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=c=>c.crisis_management_procedure!==null,e[0]=m):m=e[0];const S=m,{filterSelection:t,setFilterSelection:d}=F.useContext(v),{data:N,years:_,nrens:g}=w("/api/standards",d,S);let s,f;if(e[1]!==N||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let c;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(c=Y=>t.selectedYears.includes(Y.year)&&t.selectedNrens.includes(Y.nren)&&S(Y),e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=c):c=e[8],s=N.filter(c),f=D(s,"crisis_management_procedure"),e[1]=N,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=s,e[5]=f}else s=e[4],f=e[5];const b=f;let l,p;e[9]===Symbol.for("react.memo_cache_sentinel")?(l=["Yes","No"],p=new Map([[l[0],"True"],[l[1],"False"]]),e[9]=l,e[10]=p):(l=e[9],p=e[10]);const j=p;let a;e[11]!==_?(a=[..._],e[11]=_,e[12]=a):a=e[12];let r;e[13]!==g?(r=g.values(),e[13]=g,e[14]=r):r=e[14];let i;e[15]!==r?(i=[...r],e[15]=r,e[16]=i):i=e[16];let n;e[17]!==a||e[18]!==i?(n={availableYears:a,availableNrens:i},e[17]=a,e[18]=i,e[19]=n):n=e[19];let u;e[20]!==t||e[21]!==d||e[22]!==n?(u=x.jsx(T,{filterOptions:n,filterSelection:t,setFilterSelection:d,coloredYears:!0}),e[20]=t,e[21]=d,e[22]=n,e[23]=u):u=e[23];const y=u;let o;e[24]!==b?(o=x.jsx(L,{children:x.jsx(M,{columns:l,columnLookup:j,dataLookup:b})}),e[24]=b,e[25]=o):o=e[25];let h;return e[26]!==y||e[27]!==s||e[28]!==o?(h=x.jsx(E,{title:P["crisis-management"],description:"The table below shows whether NRENs have a formal crisis management procedure.",category:k.Policy,filter:y,data:s,filename:"crisis_management_nrens_per_year",children:o}),e[26]=y,e[27]=s,e[28]=o,e[29]=h):h=e[29],h}export{H as default};
diff --git a/compendium_v2/static/DarkFibreInstalled-XMYWXP4t.js b/compendium_v2/static/DarkFibreInstalled-2D1iNkw5.js
similarity index 91%
rename from compendium_v2/static/DarkFibreInstalled-XMYWXP4t.js
rename to compendium_v2/static/DarkFibreInstalled-2D1iNkw5.js
index 307bcc5b935b6ca24928c8482da395b6f8da19d9..abe8ca22a755c44d37c7e65cba21356ac20a7641 100644
--- a/compendium_v2/static/DarkFibreInstalled-XMYWXP4t.js
+++ b/compendium_v2/static/DarkFibreInstalled-2D1iNkw5.js
@@ -1 +1 @@
-import{c as N,r as j,F as D,j as n,t as F,S as L}from"./index.js";import{L as w}from"./index-C4Nuqrw6.js";import{C as E,a as v,L as P,P as R,b as I,p as K,c as O,d as T,u as U,e as Y,D as $,F as q,f as z}from"./useData-Ct8E3VVL.js";import{g as A}from"./charthelpers-DmM6tvdh.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";E.register(v,P,R,I,K,O,T);function X(){const e=N.c(24);let o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=r=>r.fibre_length_in_country!=null,e[0]=o):o=e[0];const k=o,{filterSelection:t,setFilterSelection:c}=j.useContext(D),{data:u,nrens:_}=U("/api/dark-fibre-installed",c,k);let i,f;if(e[1]!==u||e[2]!==t.selectedNrens){let r;e[5]!==t.selectedNrens?(r=y=>t.selectedNrens.includes(y.nren)&&k(y),e[5]=t.selectedNrens,e[6]=r):r=e[6],i=u.filter(r),f=Y(i,"fibre_length_in_country"),e[1]=u,e[2]=t.selectedNrens,e[3]=i,e[4]=f}else i=e[3],f=e[4];const g=f;let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=[],e[7]=m):m=e[7];let s;e[8]!==_?(s=_.values(),e[8]=_,e[9]=s):s=e[9];let l;e[10]!==s?(l={availableYears:m,availableNrens:[...s]},e[10]=s,e[11]=l):l=e[11];let d;e[12]!==t||e[13]!==c||e[14]!==l?(d=n.jsx(q,{filterOptions:l,filterSelection:t,setFilterSelection:c}),e[12]=t,e[13]=c,e[14]=l,e[15]=d):d=e[15];const x=d;let p;e[16]===Symbol.for("react.memo_cache_sentinel")?(p=A({title:"Kilometres of Installed Dark Fibre",tooltipUnit:"km",unit:"km"}),e[16]=p):p=e[16];const S=p;let h;e[17]===Symbol.for("react.memo_cache_sentinel")?(h=n.jsx("span",{children:"This graph shows the number of Kilometres of dark fibre installed by NRENs within their own countries, which they own themselves. The distance is the number of kilometres of the fibre pairs, or if bidirectional traffic on a single fibre, it is treated as a fibre pair."}),e[17]=h):h=e[17];const C=h;let a;e[18]!==g?(a=n.jsx(z,{children:n.jsx(w,{data:g,options:S})}),e[18]=g,e[19]=a):a=e[19];let b;return e[20]!==x||e[21]!==i||e[22]!==a?(b=n.jsx($,{title:F["dark-fibre-installed"],description:C,category:L.Network,filter:x,data:i,filename:"dark_fibre_lease_installed",children:a}),e[20]=x,e[21]=i,e[22]=a,e[23]=b):b=e[23],b}export{X as default};
+import{c as N,r as j,F as D,j as n,t as F,S as L}from"./index.js";import{L as w}from"./index-BfhfJiKe.js";import{C as E,a as v,L as P,P as R,b as I,p as K,c as O,d as T,u as U,e as Y,D as $,F as q,f as z}from"./useData-CYCBVZdC.js";import{g as A}from"./charthelpers-CdmocpOu.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";E.register(v,P,R,I,K,O,T);function X(){const e=N.c(24);let o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=r=>r.fibre_length_in_country!=null,e[0]=o):o=e[0];const k=o,{filterSelection:t,setFilterSelection:c}=j.useContext(D),{data:u,nrens:_}=U("/api/dark-fibre-installed",c,k);let i,f;if(e[1]!==u||e[2]!==t.selectedNrens){let r;e[5]!==t.selectedNrens?(r=y=>t.selectedNrens.includes(y.nren)&&k(y),e[5]=t.selectedNrens,e[6]=r):r=e[6],i=u.filter(r),f=Y(i,"fibre_length_in_country"),e[1]=u,e[2]=t.selectedNrens,e[3]=i,e[4]=f}else i=e[3],f=e[4];const g=f;let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=[],e[7]=m):m=e[7];let s;e[8]!==_?(s=_.values(),e[8]=_,e[9]=s):s=e[9];let l;e[10]!==s?(l={availableYears:m,availableNrens:[...s]},e[10]=s,e[11]=l):l=e[11];let d;e[12]!==t||e[13]!==c||e[14]!==l?(d=n.jsx(q,{filterOptions:l,filterSelection:t,setFilterSelection:c}),e[12]=t,e[13]=c,e[14]=l,e[15]=d):d=e[15];const x=d;let p;e[16]===Symbol.for("react.memo_cache_sentinel")?(p=A({title:"Kilometres of Installed Dark Fibre",tooltipUnit:"km",unit:"km"}),e[16]=p):p=e[16];const S=p;let h;e[17]===Symbol.for("react.memo_cache_sentinel")?(h=n.jsx("span",{children:"This graph shows the number of Kilometres of dark fibre installed by NRENs within their own countries, which they own themselves. The distance is the number of kilometres of the fibre pairs, or if bidirectional traffic on a single fibre, it is treated as a fibre pair."}),e[17]=h):h=e[17];const C=h;let a;e[18]!==g?(a=n.jsx(z,{children:n.jsx(w,{data:g,options:S})}),e[18]=g,e[19]=a):a=e[19];let b;return e[20]!==x||e[21]!==i||e[22]!==a?(b=n.jsx($,{title:F["dark-fibre-installed"],description:C,category:L.Network,filter:x,data:i,filename:"dark_fibre_lease_installed",children:a}),e[20]=x,e[21]=i,e[22]=a,e[23]=b):b=e[23],b}export{X as default};
diff --git a/compendium_v2/static/DarkFibreLease-C_DLt-sT.js b/compendium_v2/static/DarkFibreLease-DOa-O_Mg.js
similarity index 92%
rename from compendium_v2/static/DarkFibreLease-C_DLt-sT.js
rename to compendium_v2/static/DarkFibreLease-DOa-O_Mg.js
index daabe5957e35eaa5bfcde93a2d5c9e36a0ce4ca6..7aa8521f7c50c9d7f96ba3e2f8b0b688cb92116f 100644
--- a/compendium_v2/static/DarkFibreLease-C_DLt-sT.js
+++ b/compendium_v2/static/DarkFibreLease-DOa-O_Mg.js
@@ -1 +1 @@
-import{c as w,r as R,F as P,j as c,S as I,t as D}from"./index.js";import{L as U}from"./index-C4Nuqrw6.js";import{C as K,a as O,L as T,P as $,b as A,p as Y,c as q,d as z,u as B,e as G,D as H,F as J,f as M}from"./useData-Ct8E3VVL.js";import{g as Q}from"./charthelpers-DmM6tvdh.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";K.register(O,T,$,A,Y,q,z);function ae(E){const e=w.c(32),{national:f}=E,s=f?"fibre_length_in_country":"fibre_length_outside_country";let d;e[0]!==s?(d=o=>o[s]!=null,e[0]=s,e[1]=d):d=e[1];const a=d,{filterSelection:t,setFilterSelection:m}=R.useContext(P),{data:k,nrens:x}=B("/api/dark-fibre-lease",m,a);let i,p;if(e[2]!==k||e[3]!==s||e[4]!==t.selectedNrens||e[5]!==a){let o;e[8]!==t.selectedNrens||e[9]!==a?(o=j=>t.selectedNrens.includes(j.nren)&&a(j),e[8]=t.selectedNrens,e[9]=a,e[10]=o):o=e[10],i=k.filter(o),p=G(i,s),e[2]=k,e[3]=s,e[4]=t.selectedNrens,e[5]=a,e[6]=i,e[7]=p}else i=e[6],p=e[7];const N=p;let h;e[11]===Symbol.for("react.memo_cache_sentinel")?(h=[],e[11]=h):h=e[11];let l;e[12]!==x?(l=x.values(),e[12]=x,e[13]=l):l=e[13];let r;e[14]!==l?(r={availableYears:h,availableNrens:[...l]},e[14]=l,e[15]=r):r=e[15];let b;e[16]!==t||e[17]!==m||e[18]!==r?(b=c.jsx(J,{filterOptions:r,filterSelection:t,setFilterSelection:m}),e[16]=t,e[17]=m,e[18]=r,e[19]=b):b=e[19];const y=b;let u;e[20]===Symbol.for("react.memo_cache_sentinel")?(u=Q({title:"Kilometres of Leased Dark Fibre",tooltipUnit:"km",unit:"km"}),e[20]=u):u=e[20];const F=u,C=f?"within":"outside";let g;e[21]!==C?(g=c.jsxs("span",{children:["This graph shows the number of Kilometres of dark fibre leased by NRENs ",C," their own countries. Also included is fibre leased via an IRU (Indefeasible Right of Use), a type of long-term lease of a portion of the capacity of a cable. It does not however, include fibre NRENs have installed, and own, themselves. The distance is the number of kilometres of the fibre pairs, or if bidirectional traffic on a single fibre, it is treated as a fibre pair."]}),e[21]=C,e[22]=g):g=e[22];const L=g,S=f?D["dark-fibre-lease"]:D["dark-fibre-lease-international"],v=`dark_fibre_lease_${f?"national":"international"}`;let n;e[23]!==N?(n=c.jsx(M,{children:c.jsx(U,{data:N,options:F})}),e[23]=N,e[24]=n):n=e[24];let _;return e[25]!==L||e[26]!==y||e[27]!==i||e[28]!==S||e[29]!==v||e[30]!==n?(_=c.jsx(H,{title:S,description:L,category:I.Network,filter:y,data:i,filename:v,children:n}),e[25]=L,e[26]=y,e[27]=i,e[28]=S,e[29]=v,e[30]=n,e[31]=_):_=e[31],_}export{ae as default};
+import{c as w,r as R,F as P,j as c,S as I,t as D}from"./index.js";import{L as U}from"./index-BfhfJiKe.js";import{C as K,a as O,L as T,P as $,b as A,p as Y,c as q,d as z,u as B,e as G,D as H,F as J,f as M}from"./useData-CYCBVZdC.js";import{g as Q}from"./charthelpers-CdmocpOu.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";K.register(O,T,$,A,Y,q,z);function ae(E){const e=w.c(32),{national:f}=E,s=f?"fibre_length_in_country":"fibre_length_outside_country";let d;e[0]!==s?(d=o=>o[s]!=null,e[0]=s,e[1]=d):d=e[1];const a=d,{filterSelection:t,setFilterSelection:m}=R.useContext(P),{data:k,nrens:x}=B("/api/dark-fibre-lease",m,a);let i,p;if(e[2]!==k||e[3]!==s||e[4]!==t.selectedNrens||e[5]!==a){let o;e[8]!==t.selectedNrens||e[9]!==a?(o=j=>t.selectedNrens.includes(j.nren)&&a(j),e[8]=t.selectedNrens,e[9]=a,e[10]=o):o=e[10],i=k.filter(o),p=G(i,s),e[2]=k,e[3]=s,e[4]=t.selectedNrens,e[5]=a,e[6]=i,e[7]=p}else i=e[6],p=e[7];const N=p;let h;e[11]===Symbol.for("react.memo_cache_sentinel")?(h=[],e[11]=h):h=e[11];let l;e[12]!==x?(l=x.values(),e[12]=x,e[13]=l):l=e[13];let r;e[14]!==l?(r={availableYears:h,availableNrens:[...l]},e[14]=l,e[15]=r):r=e[15];let b;e[16]!==t||e[17]!==m||e[18]!==r?(b=c.jsx(J,{filterOptions:r,filterSelection:t,setFilterSelection:m}),e[16]=t,e[17]=m,e[18]=r,e[19]=b):b=e[19];const y=b;let u;e[20]===Symbol.for("react.memo_cache_sentinel")?(u=Q({title:"Kilometres of Leased Dark Fibre",tooltipUnit:"km",unit:"km"}),e[20]=u):u=e[20];const F=u,C=f?"within":"outside";let g;e[21]!==C?(g=c.jsxs("span",{children:["This graph shows the number of Kilometres of dark fibre leased by NRENs ",C," their own countries. Also included is fibre leased via an IRU (Indefeasible Right of Use), a type of long-term lease of a portion of the capacity of a cable. It does not however, include fibre NRENs have installed, and own, themselves. The distance is the number of kilometres of the fibre pairs, or if bidirectional traffic on a single fibre, it is treated as a fibre pair."]}),e[21]=C,e[22]=g):g=e[22];const L=g,S=f?D["dark-fibre-lease"]:D["dark-fibre-lease-international"],v=`dark_fibre_lease_${f?"national":"international"}`;let n;e[23]!==N?(n=c.jsx(M,{children:c.jsx(U,{data:N,options:F})}),e[23]=N,e[24]=n):n=e[24];let _;return e[25]!==L||e[26]!==y||e[27]!==i||e[28]!==S||e[29]!==v||e[30]!==n?(_=c.jsx(H,{title:S,description:L,category:I.Network,filter:y,data:i,filename:v,children:n}),e[25]=L,e[26]=y,e[27]=i,e[28]=S,e[29]=v,e[30]=n,e[31]=_):_=e[31],_}export{ae as default};
diff --git a/compendium_v2/static/ECProjects-CT3RTMct.js b/compendium_v2/static/ECProjects-Cxw57QLP.js
similarity index 93%
rename from compendium_v2/static/ECProjects-CT3RTMct.js
rename to compendium_v2/static/ECProjects-Cxw57QLP.js
index b77c3d6a674bf4fcbe5d2759ef9e029d9fb6a698..2a5544275d79400132c933d7102b3cc56a6f9f49 100644
--- a/compendium_v2/static/ECProjects-CT3RTMct.js
+++ b/compendium_v2/static/ECProjects-Cxw57QLP.js
@@ -1 +1 @@
-import{c as v,r as Y,F as y,j as u,S as C}from"./index.js";import{u as D,h as T,i as _,D as g,F,f as P}from"./useData-Ct8E3VVL.js";import{N as R}from"./NrenYearTable-iS8aEX43.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function $(){const e=v.c(27),{filterSelection:t,setFilterSelection:s}=Y.useContext(y),{data:a,years:j,nrens:N}=D("/api/ec-project",s);let r,d;if(e[0]!==t.selectedNrens||e[1]!==t.selectedYears||e[2]!==a){let f;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(f=x=>t.selectedYears.includes(x.year)&&t.selectedNrens.includes(x.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=f):f=e[7],r=a.filter(f);const E=T(r);d=_(E,S),e[0]=t.selectedNrens,e[1]=t.selectedYears,e[2]=a,e[3]=r,e[4]=d}else r=e[3],d=e[4];const b=d;let o;e[8]!==j?(o=[...j],e[8]=j,e[9]=o):o=e[9];let i;e[10]!==N?(i=N.values(),e[10]=N,e[11]=i):i=e[11];let n;e[12]!==i?(n=[...i],e[12]=i,e[13]=n):n=e[13];let l;e[14]!==o||e[15]!==n?(l={availableYears:o,availableNrens:n},e[14]=o,e[15]=n,e[16]=l):l=e[16];let p;e[17]!==t||e[18]!==s||e[19]!==l?(p=u.jsx(F,{filterOptions:l,filterSelection:t,setFilterSelection:s}),e[17]=t,e[18]=s,e[19]=l,e[20]=p):p=e[20];const h=p;let c;e[21]!==b?(c=u.jsx(P,{children:u.jsx(R,{data:b,columnTitle:"EC Project Membership",dottedBorder:!0})}),e[21]=b,e[22]=c):c=e[22];let m;return e[23]!==h||e[24]!==r||e[25]!==c?(m=u.jsx(g,{title:"NREN Involvement in European Commission Projects",description:"Many NRENs are involved in a number of different European Commission project, besides GÉANT. The list of projects in the table below is not necessarily exhaustive, but does contain projects the NRENs consider important or worthy of mention.",category:C.Organisation,filter:h,data:r,filename:"nren_involvement_in_european_commission_projects",children:c}),e[23]=h,e[24]=r,e[25]=c,e[26]=m):m=e[26],m}function S(e,t){const s=t.map(O).sort();s.length&&s.forEach(a=>{e[a]=a})}function O(e){return e.project}export{$ as default};
+import{c as v,r as Y,F as y,j as u,S as C}from"./index.js";import{u as D,h as T,i as _,D as g,F,f as P}from"./useData-CYCBVZdC.js";import{N as R}from"./NrenYearTable-RI8l8hwG.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function $(){const e=v.c(27),{filterSelection:t,setFilterSelection:s}=Y.useContext(y),{data:a,years:j,nrens:N}=D("/api/ec-project",s);let r,d;if(e[0]!==t.selectedNrens||e[1]!==t.selectedYears||e[2]!==a){let f;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(f=x=>t.selectedYears.includes(x.year)&&t.selectedNrens.includes(x.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=f):f=e[7],r=a.filter(f);const E=T(r);d=_(E,S),e[0]=t.selectedNrens,e[1]=t.selectedYears,e[2]=a,e[3]=r,e[4]=d}else r=e[3],d=e[4];const b=d;let o;e[8]!==j?(o=[...j],e[8]=j,e[9]=o):o=e[9];let i;e[10]!==N?(i=N.values(),e[10]=N,e[11]=i):i=e[11];let n;e[12]!==i?(n=[...i],e[12]=i,e[13]=n):n=e[13];let l;e[14]!==o||e[15]!==n?(l={availableYears:o,availableNrens:n},e[14]=o,e[15]=n,e[16]=l):l=e[16];let p;e[17]!==t||e[18]!==s||e[19]!==l?(p=u.jsx(F,{filterOptions:l,filterSelection:t,setFilterSelection:s}),e[17]=t,e[18]=s,e[19]=l,e[20]=p):p=e[20];const h=p;let c;e[21]!==b?(c=u.jsx(P,{children:u.jsx(R,{data:b,columnTitle:"EC Project Membership",dottedBorder:!0})}),e[21]=b,e[22]=c):c=e[22];let m;return e[23]!==h||e[24]!==r||e[25]!==c?(m=u.jsx(g,{title:"NREN Involvement in European Commission Projects",description:"Many NRENs are involved in a number of different European Commission project, besides GÉANT. The list of projects in the table below is not necessarily exhaustive, but does contain projects the NRENs consider important or worthy of mention.",category:C.Organisation,filter:h,data:r,filename:"nren_involvement_in_european_commission_projects",children:c}),e[23]=h,e[24]=r,e[25]=c,e[26]=m):m=e[26],m}function S(e,t){const s=t.map(O).sort();s.length&&s.forEach(a=>{e[a]=a})}function O(e){return e.project}export{$ as default};
diff --git a/compendium_v2/static/EOSCListings-v4hLpISP.js b/compendium_v2/static/EOSCListings-Gq2b1C2V.js
similarity index 96%
rename from compendium_v2/static/EOSCListings-v4hLpISP.js
rename to compendium_v2/static/EOSCListings-Gq2b1C2V.js
index 8f5a54f871419bb13b42b56ae8a9f4c9e3a3d67e..4c5e2da5c0d95a57bb827a8fa4d474e77da472cc 100644
--- a/compendium_v2/static/EOSCListings-v4hLpISP.js
+++ b/compendium_v2/static/EOSCListings-Gq2b1C2V.js
@@ -1 +1 @@
-import{c as Y,r as j,F as C,j as f,t as D,S as E}from"./index.js";import{u as _,h as F,i as R,D as L,F as k,f as O}from"./useData-Ct8E3VVL.js";import{N as P}from"./NrenYearTable-iS8aEX43.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function H(){const e=Y.c(28),{filterSelection:t,setFilterSelection:l}=j.useContext(C),{data:a,years:N,nrens:x}=_("/api/eosc-listings",l);let s,d;if(e[0]!==a||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let h;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(h=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=h):h=e[7],s=a.filter(h);const y=F(s);d=R(y,T),e[0]=a,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=d}else s=e[3],d=e[4];const S=d;let i;e[8]!==N?(i=[...N],e[8]=N,e[9]=i):i=e[9];let r;e[10]!==x?(r=x.values(),e[10]=x,e[11]=r):r=e[11];let o;e[12]!==r?(o=[...r],e[12]=r,e[13]=o):o=e[13];let n;e[14]!==i||e[15]!==o?(n={availableYears:i,availableNrens:o},e[14]=i,e[15]=o,e[16]=n):n=e[16];let m;e[17]!==t||e[18]!==l||e[19]!==n?(m=f.jsx(k,{filterOptions:n,filterSelection:t,setFilterSelection:l}),e[17]=t,e[18]=l,e[19]=n,e[20]=m):m=e[20];const g=m;let p;e[21]===Symbol.for("react.memo_cache_sentinel")?(p=f.jsx("span",{children:"Some NRENs choose to list services on the EOSC portal, these can be seen in the table below. Click on the name of the NREN to expand the detail and see the names of the services they list."}),e[21]=p):p=e[21];const v=p;let c;e[22]!==S?(c=f.jsx(O,{children:f.jsx(P,{data:S,columnTitle:"Service Name",dottedBorder:!0,keysAreURLs:!0,noDots:!0})}),e[22]=S,e[23]=c):c=e[23];let u;return e[24]!==g||e[25]!==s||e[26]!==c?(u=f.jsx(L,{title:D.eosc_listings,description:v,category:E.Policy,filter:g,data:s,filename:"nren_eosc_listings",children:c}),e[24]=g,e[25]=s,e[26]=c,e[27]=u):u=e[27],u}function T(e,t){for(const l of t)for(const a of l.service_names)e[a]=a}export{H as default};
+import{c as Y,r as j,F as C,j as f,t as D,S as E}from"./index.js";import{u as _,h as F,i as R,D as L,F as k,f as O}from"./useData-CYCBVZdC.js";import{N as P}from"./NrenYearTable-RI8l8hwG.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function H(){const e=Y.c(28),{filterSelection:t,setFilterSelection:l}=j.useContext(C),{data:a,years:N,nrens:x}=_("/api/eosc-listings",l);let s,d;if(e[0]!==a||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let h;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(h=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=h):h=e[7],s=a.filter(h);const y=F(s);d=R(y,T),e[0]=a,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=d}else s=e[3],d=e[4];const S=d;let i;e[8]!==N?(i=[...N],e[8]=N,e[9]=i):i=e[9];let r;e[10]!==x?(r=x.values(),e[10]=x,e[11]=r):r=e[11];let o;e[12]!==r?(o=[...r],e[12]=r,e[13]=o):o=e[13];let n;e[14]!==i||e[15]!==o?(n={availableYears:i,availableNrens:o},e[14]=i,e[15]=o,e[16]=n):n=e[16];let m;e[17]!==t||e[18]!==l||e[19]!==n?(m=f.jsx(k,{filterOptions:n,filterSelection:t,setFilterSelection:l}),e[17]=t,e[18]=l,e[19]=n,e[20]=m):m=e[20];const g=m;let p;e[21]===Symbol.for("react.memo_cache_sentinel")?(p=f.jsx("span",{children:"Some NRENs choose to list services on the EOSC portal, these can be seen in the table below. Click on the name of the NREN to expand the detail and see the names of the services they list."}),e[21]=p):p=e[21];const v=p;let c;e[22]!==S?(c=f.jsx(O,{children:f.jsx(P,{data:S,columnTitle:"Service Name",dottedBorder:!0,keysAreURLs:!0,noDots:!0})}),e[22]=S,e[23]=c):c=e[23];let u;return e[24]!==g||e[25]!==s||e[26]!==c?(u=f.jsx(L,{title:D.eosc_listings,description:v,category:E.Policy,filter:g,data:s,filename:"nren_eosc_listings",children:c}),e[24]=g,e[25]=s,e[26]=c,e[27]=u):u=e[27],u}function T(e,t){for(const l of t)for(const a of l.service_names)e[a]=a}export{H as default};
diff --git a/compendium_v2/static/ExternalConnections-Ds1slbkO.js b/compendium_v2/static/ExternalConnections-ldDiu0-q.js
similarity index 98%
rename from compendium_v2/static/ExternalConnections-Ds1slbkO.js
rename to compendium_v2/static/ExternalConnections-ldDiu0-q.js
index b96557105c1e97ac65a9182a0d9801560907716b..6392337ac1e900a1ba5c1c72f7b9959b8ca49b0e 100644
--- a/compendium_v2/static/ExternalConnections-Ds1slbkO.js
+++ b/compendium_v2/static/ExternalConnections-ldDiu0-q.js
@@ -1 +1 @@
-import{c as _,j as r,e as C,r as S,F as E,t as w,S as D}from"./index.js";import{u as F,h as T,D as Y,F as R,f as L}from"./useData-Ct8E3VVL.js";import{T as O}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";function $(e){const t=_.c(8),{dataLookup:l,columnInfo:a}=e;if(!l){let s;return t[0]===Symbol.for("react.memo_cache_sentinel")?(s=r.jsx("div",{className:"matrix-border-round"}),t[0]=s):s=t[0],s}let d;if(t[1]!==a||t[2]!==l){let s;t[4]!==a?(s=j=>{const[i,h]=j;return r.jsx(C,{title:i,theme:"-table",startCollapsed:!0,children:r.jsx("div",{className:"scrollable-horizontal",children:Array.from(h.entries()).map(m=>{const[o,b]=m,x={"--before-color":`var(--color-of-the-year-muted-${o%9})`};return r.jsxs("div",{children:[r.jsx("span",{className:`scrollable-table-year color-of-the-year-${o%9} bold-caps-16pt pt-3 ps-3`,style:x,children:o}),r.jsx("div",{className:`colored-table bg-muted-color-of-the-year-${o%9}`,children:r.jsxs(O,{children:[r.jsx("thead",{children:r.jsx("tr",{children:Object.keys(a).map(c=>r.jsx("th",{style:{position:"relative"},children:r.jsx("span",{style:x,children:c})},c))})}),r.jsx("tbody",{children:b.map((c,k)=>r.jsx("tr",{children:Object.entries(a).map(u=>{const[g,f]=u,y=c[f];return r.jsx("td",{children:y},g)})},k))})]})})]},o)})})},i)},t[4]=a,t[5]=s):s=t[5],d=Array.from(l.entries()).map(s),t[1]=a,t[2]=l,t[3]=d}else d=t[3];const p=d;let n;return t[6]!==p?(n=r.jsx("div",{className:"matrix-border-round",children:p}),t[6]=p,t[7]=n):n=t[7],n}function q(){const e=_.c(29),{filterSelection:t,setFilterSelection:l}=S.useContext(E),{data:a,years:d,nrens:p}=F("/api/external-connections",l);let n,s;if(e[0]!==a||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let N;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(N=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=N):N=e[7],n=a.filter(N),s=T([...n]),e[0]=a,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=n,e[4]=s}else n=e[3],s=e[4];const j=s;let i;e[8]!==d?(i=[...d],e[8]=d,e[9]=i):i=e[9];let h;e[10]!==p?(h=p.values(),e[10]=p,e[11]=h):h=e[11];let m;e[12]!==h?(m=[...h],e[12]=h,e[13]=m):m=e[13];let o;e[14]!==i||e[15]!==m?(o={availableYears:i,availableNrens:m},e[14]=i,e[15]=m,e[16]=o):o=e[16];let b;e[17]!==t||e[18]!==l||e[19]!==o?(b=r.jsx(R,{filterOptions:o,filterSelection:t,setFilterSelection:l,coloredYears:!0}),e[17]=t,e[18]=l,e[19]=o,e[20]=b):b=e[20];const x=b;let c;e[21]===Symbol.for("react.memo_cache_sentinel")?(c={"Link Name":"link_name","Capacity (Gbit/s)":"capacity","From Organisation":"from_organization","To Organisation":"to_organization","Interconnection Method":"interconnection_method"},e[21]=c):c=e[21];const k=c;let u;e[22]===Symbol.for("react.memo_cache_sentinel")?(u=r.jsxs(r.Fragment,{children:[r.jsx("p",{children:"The table below shows the operational external IP connections of each NREN. These include links to their regional backbone (ie. GÉANT), to other research locations, to the commercial internet, peerings to internet exchanges, cross-border dark fibre links, and any other links they may have."}),r.jsx("p",{children:"NRENs are asked to state the capacity for production purposes, not any additional link that may be there solely for the purpose of giving resilience. Cross-border fibre links are meant as those links which have been commissioned or established by the NREN from a point on their network, which is near the border to another point near the border on the network of a neighbouring NREN."})]}),e[22]=u):u=e[22];const g=u;let f;e[23]!==j?(f=r.jsx(L,{children:r.jsx($,{dataLookup:j,columnInfo:k})}),e[23]=j,e[24]=f):f=e[24];let y;return e[25]!==x||e[26]!==n||e[27]!==f?(y=r.jsx(Y,{title:w["external-connections"],description:g,category:D.Network,filter:x,data:n,filename:"nren_external_connections",children:f}),e[25]=x,e[26]=n,e[27]=f,e[28]=y):y=e[28],y}export{q as default};
+import{c as _,j as r,e as C,r as S,F as E,t as w,S as D}from"./index.js";import{u as F,h as T,D as Y,F as R,f as L}from"./useData-CYCBVZdC.js";import{T as O}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";function $(e){const t=_.c(8),{dataLookup:l,columnInfo:a}=e;if(!l){let s;return t[0]===Symbol.for("react.memo_cache_sentinel")?(s=r.jsx("div",{className:"matrix-border-round"}),t[0]=s):s=t[0],s}let d;if(t[1]!==a||t[2]!==l){let s;t[4]!==a?(s=j=>{const[i,h]=j;return r.jsx(C,{title:i,theme:"-table",startCollapsed:!0,children:r.jsx("div",{className:"scrollable-horizontal",children:Array.from(h.entries()).map(m=>{const[o,b]=m,x={"--before-color":`var(--color-of-the-year-muted-${o%9})`};return r.jsxs("div",{children:[r.jsx("span",{className:`scrollable-table-year color-of-the-year-${o%9} bold-caps-16pt pt-3 ps-3`,style:x,children:o}),r.jsx("div",{className:`colored-table bg-muted-color-of-the-year-${o%9}`,children:r.jsxs(O,{children:[r.jsx("thead",{children:r.jsx("tr",{children:Object.keys(a).map(c=>r.jsx("th",{style:{position:"relative"},children:r.jsx("span",{style:x,children:c})},c))})}),r.jsx("tbody",{children:b.map((c,k)=>r.jsx("tr",{children:Object.entries(a).map(u=>{const[g,f]=u,y=c[f];return r.jsx("td",{children:y},g)})},k))})]})})]},o)})})},i)},t[4]=a,t[5]=s):s=t[5],d=Array.from(l.entries()).map(s),t[1]=a,t[2]=l,t[3]=d}else d=t[3];const p=d;let n;return t[6]!==p?(n=r.jsx("div",{className:"matrix-border-round",children:p}),t[6]=p,t[7]=n):n=t[7],n}function q(){const e=_.c(29),{filterSelection:t,setFilterSelection:l}=S.useContext(E),{data:a,years:d,nrens:p}=F("/api/external-connections",l);let n,s;if(e[0]!==a||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let N;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(N=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=N):N=e[7],n=a.filter(N),s=T([...n]),e[0]=a,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=n,e[4]=s}else n=e[3],s=e[4];const j=s;let i;e[8]!==d?(i=[...d],e[8]=d,e[9]=i):i=e[9];let h;e[10]!==p?(h=p.values(),e[10]=p,e[11]=h):h=e[11];let m;e[12]!==h?(m=[...h],e[12]=h,e[13]=m):m=e[13];let o;e[14]!==i||e[15]!==m?(o={availableYears:i,availableNrens:m},e[14]=i,e[15]=m,e[16]=o):o=e[16];let b;e[17]!==t||e[18]!==l||e[19]!==o?(b=r.jsx(R,{filterOptions:o,filterSelection:t,setFilterSelection:l,coloredYears:!0}),e[17]=t,e[18]=l,e[19]=o,e[20]=b):b=e[20];const x=b;let c;e[21]===Symbol.for("react.memo_cache_sentinel")?(c={"Link Name":"link_name","Capacity (Gbit/s)":"capacity","From Organisation":"from_organization","To Organisation":"to_organization","Interconnection Method":"interconnection_method"},e[21]=c):c=e[21];const k=c;let u;e[22]===Symbol.for("react.memo_cache_sentinel")?(u=r.jsxs(r.Fragment,{children:[r.jsx("p",{children:"The table below shows the operational external IP connections of each NREN. These include links to their regional backbone (ie. GÉANT), to other research locations, to the commercial internet, peerings to internet exchanges, cross-border dark fibre links, and any other links they may have."}),r.jsx("p",{children:"NRENs are asked to state the capacity for production purposes, not any additional link that may be there solely for the purpose of giving resilience. Cross-border fibre links are meant as those links which have been commissioned or established by the NREN from a point on their network, which is near the border to another point near the border on the network of a neighbouring NREN."})]}),e[22]=u):u=e[22];const g=u;let f;e[23]!==j?(f=r.jsx(L,{children:r.jsx($,{dataLookup:j,columnInfo:k})}),e[23]=j,e[24]=f):f=e[24];let y;return e[25]!==x||e[26]!==n||e[27]!==f?(y=r.jsx(Y,{title:w["external-connections"],description:g,category:D.Network,filter:x,data:n,filename:"nren_external_connections",children:f}),e[25]=x,e[26]=n,e[27]=f,e[28]=y):y=e[28],y}export{q as default};
diff --git a/compendium_v2/static/FibreLight-C4tQtRYN.js b/compendium_v2/static/FibreLight-CitJL-tj.js
similarity index 94%
rename from compendium_v2/static/FibreLight-C4tQtRYN.js
rename to compendium_v2/static/FibreLight-CitJL-tj.js
index 4114604ce5ffd3f3a48bb86f0f0a24f86a5b80cb..58aa01422c63318b9eba3d0e1d92d0245387e490 100644
--- a/compendium_v2/static/FibreLight-C4tQtRYN.js
+++ b/compendium_v2/static/FibreLight-CitJL-tj.js
@@ -1,2 +1,2 @@
-import{c as Y,r as j,F as k,j as h,t as v,S as E}from"./index.js";import{u as F,g as S,D as R,F as C,f as D}from"./useData-Ct8E3VVL.js";import{P as L}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function B(){const e=Y.c(29),{filterSelection:t,setFilterSelection:c}=j.useContext(k),{data:_,years:N,nrens:g}=F("/api/fibre-light",c);let s,p;if(e[0]!==_||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let m;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(m=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=m):m=e[7],s=_.filter(m),p=S(s,"light_description"),e[0]=_,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=p}else s=e[3],p=e[4];const w=p;let i;e[8]!==N?(i=[...N],e[8]=N,e[9]=i):i=e[9];let o;e[10]!==g?(o=g.values(),e[10]=g,e[11]=o):o=e[11];let n;e[12]!==o?(n=[...o],e[12]=o,e[13]=n):n=e[13];let l;e[14]!==i||e[15]!==n?(l={availableYears:i,availableNrens:n},e[14]=i,e[15]=n,e[16]=l):l=e[16];let d;e[17]!==t||e[18]!==c||e[19]!==l?(d=h.jsx(C,{filterOptions:l,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=l,e[20]=d):d=e[20];const x=d;let r,f;e[21]===Symbol.for("react.memo_cache_sentinel")?(r=["NREN owns and operates equipment","NREN owns equipment and operation is outsourced","Ownership and management are out-sourced (turn-key model)"],f=new Map([[r[0],"nren_owns_and_operates"],[r[1],"nren_owns_outsourced_operation"],[r[2],"outsourced_ownership_and_operation"]]),e[21]=r,e[22]=f):(r=e[21],f=e[22]);const y=f;let a;e[23]!==w?(a=h.jsx(D,{children:h.jsx(L,{columns:r,dataLookup:w,columnLookup:y,circle:!0})}),e[23]=w,e[24]=a):a=e[24];let u;return e[25]!==x||e[26]!==s||e[27]!==a?(u=h.jsx(R,{title:v["fibre-light"],description:`This graphic shows the different ways NRENs can light their fibre networks. 
+import{c as Y,r as j,F as k,j as h,t as v,S as E}from"./index.js";import{u as F,g as S,D as R,F as C,f as D}from"./useData-CYCBVZdC.js";import{P as L}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function B(){const e=Y.c(29),{filterSelection:t,setFilterSelection:c}=j.useContext(k),{data:_,years:N,nrens:g}=F("/api/fibre-light",c);let s,p;if(e[0]!==_||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let m;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(m=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=m):m=e[7],s=_.filter(m),p=S(s,"light_description"),e[0]=_,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=p}else s=e[3],p=e[4];const w=p;let i;e[8]!==N?(i=[...N],e[8]=N,e[9]=i):i=e[9];let o;e[10]!==g?(o=g.values(),e[10]=g,e[11]=o):o=e[11];let n;e[12]!==o?(n=[...o],e[12]=o,e[13]=n):n=e[13];let l;e[14]!==i||e[15]!==n?(l={availableYears:i,availableNrens:n},e[14]=i,e[15]=n,e[16]=l):l=e[16];let d;e[17]!==t||e[18]!==c||e[19]!==l?(d=h.jsx(C,{filterOptions:l,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=l,e[20]=d):d=e[20];const x=d;let r,f;e[21]===Symbol.for("react.memo_cache_sentinel")?(r=["NREN owns and operates equipment","NREN owns equipment and operation is outsourced","Ownership and management are out-sourced (turn-key model)"],f=new Map([[r[0],"nren_owns_and_operates"],[r[1],"nren_owns_outsourced_operation"],[r[2],"outsourced_ownership_and_operation"]]),e[21]=r,e[22]=f):(r=e[21],f=e[22]);const y=f;let a;e[23]!==w?(a=h.jsx(D,{children:h.jsx(L,{columns:r,dataLookup:w,columnLookup:y,circle:!0})}),e[23]=w,e[24]=a):a=e[24];let u;return e[25]!==x||e[26]!==s||e[27]!==a?(u=h.jsx(R,{title:v["fibre-light"],description:`This graphic shows the different ways NRENs can light their fibre networks. 
             The option 'Other' is given, with extra information if you hover over the icon.`,category:E.Network,filter:x,data:s,filename:"fibre_light_of_nrens_per_year",children:a}),e[25]=x,e[26]=s,e[27]=a,e[28]=u):u=e[28],u}export{B as default};
diff --git a/compendium_v2/static/FundingSource-C4jAa4nC.js b/compendium_v2/static/FundingSource-M1iQBQ3K.js
similarity index 96%
rename from compendium_v2/static/FundingSource-C4jAa4nC.js
rename to compendium_v2/static/FundingSource-M1iQBQ3K.js
index ca2f5cd5333bc105bcde5bcab72350c006aa5754..e609acd5b7f6f54f84e050799e154530994480a6 100644
--- a/compendium_v2/static/FundingSource-C4jAa4nC.js
+++ b/compendium_v2/static/FundingSource-M1iQBQ3K.js
@@ -1 +1 @@
-import{c as D,j as s,r as P,F as z,t as G,S as M,C as y,R as T}from"./index.js";import{B as H}from"./index-C4Nuqrw6.js";import{C as N,a as W,L as q,B as J,p as K,c as Q,d as U,u as V,j as X,D as Z,F as I,f as ee}from"./useData-Ct8E3VVL.js";import{p as te}from"./chartjs-plugin-datalabels.esm-BI98Iz1j.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";function j(e){const t=D.c(6),{index:i,active:l}=e,n=l===void 0?!0:l;let a;t[0]!==n||t[1]!==i?(a=n?s.jsx("div",{className:`color-of-badge-${i%5}`,style:{width:"20px",height:"35px",margin:"2px"}}):s.jsx("div",{className:"color-of-badge-blank",style:{width:"15px",height:"30px",margin:"2px"}}),t[0]=n,t[1]=i,t[2]=a):a=t[2];let r;return t[3]!==i||t[4]!==a?(r=s.jsx("div",{className:"d-inline-block m-2",children:a},i),t[3]=i,t[4]=a,t[5]=r):r=t[5],r}N.register(W,q,J,K,Q,U);const se={maintainAspectRatio:!1,layout:{padding:{right:60}},animation:{duration:0},plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(e){let t=e.dataset.label||"";return e.parsed.y!==null&&(t+=`: ${e.parsed.x}%`),t}}}},scales:{x:{position:"top",ticks:{callback:e=>`${e}%`,stepSize:10},max:100,min:0},xBottom:{ticks:{callback:e=>`${e}%`,stepSize:10},max:100,min:0,grid:{drawOnChartArea:!1},afterDataLimits:function(e){const t=Object.keys(N.instances);let i=-999999,l=999999;for(const n of t)N.instances[n]&&e.chart.scales.xBottom&&(l=Math.min(N.instances[n].scales.x.min,l),i=Math.max(N.instances[n].scales.x.max,i));e.chart.scales.xBottom.options.min=l,e.chart.scales.xBottom.options.max=i,e.chart.scales.xBottom.min=l,e.chart.scales.xBottom.max=i}},y:{ticks:{autoSkip:!1}}},indexAxis:"y"};function $(){const e=D.c(5);let t;e[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:0},0),"Client Institutions"]}),e[0]=t):t=e[0];let i;e[1]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:1},1),"Commercial"]}),e[1]=i):i=e[1];let l;e[2]===Symbol.for("react.memo_cache_sentinel")?(l=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:2},2),"European Funding"]}),e[2]=l):l=e[2];let n;e[3]===Symbol.for("react.memo_cache_sentinel")?(n=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:3},3),"Gov/Public Bodies"]}),e[3]=n):n=e[3];let a;return e[4]===Symbol.for("react.memo_cache_sentinel")?(a=s.jsx("div",{className:"d-flex justify-content-center bold-grey-12pt",children:s.jsxs(T,{xs:"auto",className:"border rounded-3 border-1 my-5 justify-content-center",children:[t,i,l,n,s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:4},4),"Other"]})]})}),e[4]=a):a=e[4],a}function ue(){const e=D.c(44),{filterSelection:t,setFilterSelection:i}=P.useContext(z),{data:l,years:n,nrens:a}=V("/api/funding",i);let r,c,o,_;if(e[0]!==t||e[1]!==l||e[2]!==a||e[3]!==i||e[4]!==n){let E;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(E=m=>t.selectedYears.includes(m.year)&&t.selectedNrens.includes(m.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=E):E=e[11],o=l.filter(E),c=X(o),c.datasets.forEach(m=>{m.data=m.data.filter((ne,L)=>t.selectedNrens.includes(c.labels[L]))});let k;e[12]!==t.selectedNrens?(k=m=>t.selectedNrens.includes(m),e[12]=t.selectedNrens,e[13]=k):k=e[13],c.labels=c.labels.filter(k);let x;e[14]!==n?(x=[...n],e[14]=n,e[15]=x):x=e[15];let p;e[16]!==a?(p=a.values(),e[16]=a,e[17]=p):p=e[17];let g;e[18]!==p?(g=[...p],e[18]=p,e[19]=g):g=e[19];let b;e[20]!==x||e[21]!==g?(b={availableYears:x,availableNrens:g},e[20]=x,e[21]=g,e[22]=b):b=e[22];let F;e[23]!==t||e[24]!==i||e[25]!==b?(F=s.jsx(I,{filterOptions:b,filterSelection:t,setFilterSelection:i}),e[23]=t,e[24]=i,e[25]=b,e[26]=F):F=e[26],r=F,_=Array.from(new Set(o.map(ie))),e[0]=t,e[1]=l,e[2]=a,e[3]=i,e[4]=n,e[5]=r,e[6]=c,e[7]=o,e[8]=_}else r=e[5],c=e[6],o=e[7],_=e[8];const O=_.length,Y=t.selectedYears.length,A=O*Y*2+5;let S;e[27]===Symbol.for("react.memo_cache_sentinel")?(S=s.jsxs("span",{children:['The graph shows the percentage share of their income that NRENs derive from different sources, with any funding and NREN may receive from GÉANT included within "European funding". By "Client institutions" NRENs may be referring to universities, schools, research institutes, commercial clients, or other types of organisation. "Commercial services" include services such as being a domain registry, or security support.',s.jsx("br",{}),"Hovering over the graph bars will show the exact figures, per source. When viewing multiple years, it is advisable to restrict the number of NRENs being compared."]}),e[27]=S):S=e[27];let v;e[28]===Symbol.for("react.memo_cache_sentinel")?(v=s.jsx($,{}),e[28]=v):v=e[28];const R=`${A}rem`;let d;e[29]!==R?(d={height:R},e[29]=R,e[30]=d):d=e[30];let C;e[31]===Symbol.for("react.memo_cache_sentinel")?(C=[te],e[31]=C):C=e[31];let f;e[32]!==c?(f=s.jsx(H,{plugins:C,data:c,options:se}),e[32]=c,e[33]=f):f=e[33];let u;e[34]!==d||e[35]!==f?(u=s.jsx("div",{className:"chart-container",style:d,children:f}),e[34]=d,e[35]=f,e[36]=u):u=e[36];let B;e[37]===Symbol.for("react.memo_cache_sentinel")?(B=s.jsx($,{}),e[37]=B):B=e[37];let h;e[38]!==u?(h=s.jsxs(ee,{children:[v,u,B]}),e[38]=u,e[39]=h):h=e[39];let w;return e[40]!==r||e[41]!==o||e[42]!==h?(w=s.jsx(Z,{title:G.funding,description:S,category:M.Organisation,filter:r,data:o,filename:"income_source_of_nren_per_year",children:h}),e[40]=r,e[41]=o,e[42]=h,e[43]=w):w=e[43],w}function ie(e){return e.nren}export{ue as default};
+import{c as D,j as s,r as P,F as z,t as G,S as M,C as y,R as T}from"./index.js";import{B as H}from"./index-BfhfJiKe.js";import{C as N,a as W,L as q,B as J,p as K,c as Q,d as U,u as V,j as X,D as Z,F as I,f as ee}from"./useData-CYCBVZdC.js";import{p as te}from"./chartjs-plugin-datalabels.esm-CzQRWEly.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";function j(e){const t=D.c(6),{index:i,active:l}=e,n=l===void 0?!0:l;let a;t[0]!==n||t[1]!==i?(a=n?s.jsx("div",{className:`color-of-badge-${i%5}`,style:{width:"20px",height:"35px",margin:"2px"}}):s.jsx("div",{className:"color-of-badge-blank",style:{width:"15px",height:"30px",margin:"2px"}}),t[0]=n,t[1]=i,t[2]=a):a=t[2];let r;return t[3]!==i||t[4]!==a?(r=s.jsx("div",{className:"d-inline-block m-2",children:a},i),t[3]=i,t[4]=a,t[5]=r):r=t[5],r}N.register(W,q,J,K,Q,U);const se={maintainAspectRatio:!1,layout:{padding:{right:60}},animation:{duration:0},plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(e){let t=e.dataset.label||"";return e.parsed.y!==null&&(t+=`: ${e.parsed.x}%`),t}}}},scales:{x:{position:"top",ticks:{callback:e=>`${e}%`,stepSize:10},max:100,min:0},xBottom:{ticks:{callback:e=>`${e}%`,stepSize:10},max:100,min:0,grid:{drawOnChartArea:!1},afterDataLimits:function(e){const t=Object.keys(N.instances);let i=-999999,l=999999;for(const n of t)N.instances[n]&&e.chart.scales.xBottom&&(l=Math.min(N.instances[n].scales.x.min,l),i=Math.max(N.instances[n].scales.x.max,i));e.chart.scales.xBottom.options.min=l,e.chart.scales.xBottom.options.max=i,e.chart.scales.xBottom.min=l,e.chart.scales.xBottom.max=i}},y:{ticks:{autoSkip:!1}}},indexAxis:"y"};function $(){const e=D.c(5);let t;e[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:0},0),"Client Institutions"]}),e[0]=t):t=e[0];let i;e[1]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:1},1),"Commercial"]}),e[1]=i):i=e[1];let l;e[2]===Symbol.for("react.memo_cache_sentinel")?(l=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:2},2),"European Funding"]}),e[2]=l):l=e[2];let n;e[3]===Symbol.for("react.memo_cache_sentinel")?(n=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:3},3),"Gov/Public Bodies"]}),e[3]=n):n=e[3];let a;return e[4]===Symbol.for("react.memo_cache_sentinel")?(a=s.jsx("div",{className:"d-flex justify-content-center bold-grey-12pt",children:s.jsxs(T,{xs:"auto",className:"border rounded-3 border-1 my-5 justify-content-center",children:[t,i,l,n,s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:4},4),"Other"]})]})}),e[4]=a):a=e[4],a}function ue(){const e=D.c(44),{filterSelection:t,setFilterSelection:i}=P.useContext(z),{data:l,years:n,nrens:a}=V("/api/funding",i);let r,c,o,_;if(e[0]!==t||e[1]!==l||e[2]!==a||e[3]!==i||e[4]!==n){let E;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(E=m=>t.selectedYears.includes(m.year)&&t.selectedNrens.includes(m.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=E):E=e[11],o=l.filter(E),c=X(o),c.datasets.forEach(m=>{m.data=m.data.filter((ne,L)=>t.selectedNrens.includes(c.labels[L]))});let k;e[12]!==t.selectedNrens?(k=m=>t.selectedNrens.includes(m),e[12]=t.selectedNrens,e[13]=k):k=e[13],c.labels=c.labels.filter(k);let x;e[14]!==n?(x=[...n],e[14]=n,e[15]=x):x=e[15];let p;e[16]!==a?(p=a.values(),e[16]=a,e[17]=p):p=e[17];let g;e[18]!==p?(g=[...p],e[18]=p,e[19]=g):g=e[19];let b;e[20]!==x||e[21]!==g?(b={availableYears:x,availableNrens:g},e[20]=x,e[21]=g,e[22]=b):b=e[22];let F;e[23]!==t||e[24]!==i||e[25]!==b?(F=s.jsx(I,{filterOptions:b,filterSelection:t,setFilterSelection:i}),e[23]=t,e[24]=i,e[25]=b,e[26]=F):F=e[26],r=F,_=Array.from(new Set(o.map(ie))),e[0]=t,e[1]=l,e[2]=a,e[3]=i,e[4]=n,e[5]=r,e[6]=c,e[7]=o,e[8]=_}else r=e[5],c=e[6],o=e[7],_=e[8];const O=_.length,Y=t.selectedYears.length,A=O*Y*2+5;let S;e[27]===Symbol.for("react.memo_cache_sentinel")?(S=s.jsxs("span",{children:['The graph shows the percentage share of their income that NRENs derive from different sources, with any funding and NREN may receive from GÉANT included within "European funding". By "Client institutions" NRENs may be referring to universities, schools, research institutes, commercial clients, or other types of organisation. "Commercial services" include services such as being a domain registry, or security support.',s.jsx("br",{}),"Hovering over the graph bars will show the exact figures, per source. When viewing multiple years, it is advisable to restrict the number of NRENs being compared."]}),e[27]=S):S=e[27];let v;e[28]===Symbol.for("react.memo_cache_sentinel")?(v=s.jsx($,{}),e[28]=v):v=e[28];const R=`${A}rem`;let d;e[29]!==R?(d={height:R},e[29]=R,e[30]=d):d=e[30];let C;e[31]===Symbol.for("react.memo_cache_sentinel")?(C=[te],e[31]=C):C=e[31];let f;e[32]!==c?(f=s.jsx(H,{plugins:C,data:c,options:se}),e[32]=c,e[33]=f):f=e[33];let u;e[34]!==d||e[35]!==f?(u=s.jsx("div",{className:"chart-container",style:d,children:f}),e[34]=d,e[35]=f,e[36]=u):u=e[36];let B;e[37]===Symbol.for("react.memo_cache_sentinel")?(B=s.jsx($,{}),e[37]=B):B=e[37];let h;e[38]!==u?(h=s.jsxs(ee,{children:[v,u,B]}),e[38]=u,e[39]=h):h=e[39];let w;return e[40]!==r||e[41]!==o||e[42]!==h?(w=s.jsx(Z,{title:G.funding,description:S,category:M.Organisation,filter:r,data:o,filename:"income_source_of_nren_per_year",children:h}),e[40]=r,e[41]=o,e[42]=h,e[43]=w):w=e[43],w}function ie(e){return e.nren}export{ue as default};
diff --git a/compendium_v2/static/HTMLLegendPlugin-sjJV-MGB.js b/compendium_v2/static/HTMLLegendPlugin-Cg92GHTT.js
similarity index 96%
rename from compendium_v2/static/HTMLLegendPlugin-sjJV-MGB.js
rename to compendium_v2/static/HTMLLegendPlugin-Cg92GHTT.js
index 86e4a1ad65e1eeef8527cfb17697cc50794d2a61..985e7eeb2c34a3cf8d97fe2db9f5601c31add55e 100644
--- a/compendium_v2/static/HTMLLegendPlugin-sjJV-MGB.js
+++ b/compendium_v2/static/HTMLLegendPlugin-Cg92GHTT.js
@@ -1 +1 @@
-import{c as g,j as p}from"./index.js";import{f as m,C as c}from"./useData-Ct8E3VVL.js";const C=o=>{const e=g.c(8);let{children:s,location:t}=o;t||(t="both");const r=t==="top"||t==="both",a=t==="bottom"||t==="both";let n;e[0]!==r?(n=r&&p.jsx("div",{style:{paddingLeft:"33%",paddingTop:"2.5rem",paddingBottom:"1.5rem"},id:"legendtop"}),e[0]=r,e[1]=n):n=e[1];let l;e[2]!==a?(l=a&&p.jsx("div",{style:{paddingLeft:"33%",paddingTop:"1.5rem"},id:"legendbottom"}),e[2]=a,e[3]=l):l=e[3];let i;return e[4]!==s||e[5]!==n||e[6]!==l?(i=p.jsxs(m,{children:[n,s,l]}),e[4]=s,e[5]=n,e[6]=l,e[7]=i):i=e[7],i},u=(o,e)=>{const s=document.getElementById(e);if(!s)return null;let t=s.querySelector("ul");return t||(t=document.createElement("ul"),t.style.display="flex",t.style.flexDirection="row",t.style.margin="0",t.style.padding="0",s.appendChild(t)),t},b={id:"htmlLegend",afterUpdate(o,e,s){for(const t of s.containerIDs){const r=u(o,t);if(!r)return;for(;r.firstChild;)r.firstChild.remove();o.options.plugins.legend.labels.generateLabels(o).forEach(n=>{const l=document.createElement("li");l.style.alignItems="center",l.style.cursor="pointer",l.style.display="flex",l.style.flexDirection="row",l.style.marginLeft="10px",l.onclick=()=>{const{type:f}=o.config;f==="pie"||f==="doughnut"?o.toggleDataVisibility(n.index):o.setDatasetVisibility(n.datasetIndex,!o.isDatasetVisible(n.datasetIndex)),o.update()};const i=document.createElement("span");i.style.background=n.fillStyle,i.style.borderColor=n.strokeStyle,i.style.borderWidth=n.lineWidth+"px",i.style.display="inline-block",i.style.height="1rem",i.style.marginRight="10px",i.style.width="2.5rem";const d=document.createElement("p");d.style.color=n.fontColor,d.style.margin="0",d.style.padding="0",d.style.textDecoration=n.hidden?"line-through":"",d.style.fontSize=`${c.defaults.font.size}px`,d.style.fontFamily=`${c.defaults.font.family}`,d.style.fontWeight=`${c.defaults.font.weight}`;const y=document.createTextNode(n.text);d.appendChild(y),l.appendChild(i),l.appendChild(d),r.appendChild(l)})}}};export{C as W,b as h};
+import{c as g,j as p}from"./index.js";import{f as m,C as c}from"./useData-CYCBVZdC.js";const C=o=>{const e=g.c(8);let{children:s,location:t}=o;t||(t="both");const r=t==="top"||t==="both",a=t==="bottom"||t==="both";let n;e[0]!==r?(n=r&&p.jsx("div",{style:{paddingLeft:"33%",paddingTop:"2.5rem",paddingBottom:"1.5rem"},id:"legendtop"}),e[0]=r,e[1]=n):n=e[1];let l;e[2]!==a?(l=a&&p.jsx("div",{style:{paddingLeft:"33%",paddingTop:"1.5rem"},id:"legendbottom"}),e[2]=a,e[3]=l):l=e[3];let i;return e[4]!==s||e[5]!==n||e[6]!==l?(i=p.jsxs(m,{children:[n,s,l]}),e[4]=s,e[5]=n,e[6]=l,e[7]=i):i=e[7],i},u=(o,e)=>{const s=document.getElementById(e);if(!s)return null;let t=s.querySelector("ul");return t||(t=document.createElement("ul"),t.style.display="flex",t.style.flexDirection="row",t.style.margin="0",t.style.padding="0",s.appendChild(t)),t},b={id:"htmlLegend",afterUpdate(o,e,s){for(const t of s.containerIDs){const r=u(o,t);if(!r)return;for(;r.firstChild;)r.firstChild.remove();o.options.plugins.legend.labels.generateLabels(o).forEach(n=>{const l=document.createElement("li");l.style.alignItems="center",l.style.cursor="pointer",l.style.display="flex",l.style.flexDirection="row",l.style.marginLeft="10px",l.onclick=()=>{const{type:f}=o.config;f==="pie"||f==="doughnut"?o.toggleDataVisibility(n.index):o.setDatasetVisibility(n.datasetIndex,!o.isDatasetVisible(n.datasetIndex)),o.update()};const i=document.createElement("span");i.style.background=n.fillStyle,i.style.borderColor=n.strokeStyle,i.style.borderWidth=n.lineWidth+"px",i.style.display="inline-block",i.style.height="1rem",i.style.marginRight="10px",i.style.width="2.5rem";const d=document.createElement("p");d.style.color=n.fontColor,d.style.margin="0",d.style.padding="0",d.style.textDecoration=n.hidden?"line-through":"",d.style.fontSize=`${c.defaults.font.size}px`,d.style.fontFamily=`${c.defaults.font.family}`,d.style.fontWeight=`${c.defaults.font.weight}`;const y=document.createTextNode(n.text);d.appendChild(y),l.appendChild(i),l.appendChild(d),r.appendChild(l)})}}};export{C as W,b as h};
diff --git a/compendium_v2/static/IRUDuration-C1dUeB3y.js b/compendium_v2/static/IRUDuration-CX0U79PZ.js
similarity index 90%
rename from compendium_v2/static/IRUDuration-C1dUeB3y.js
rename to compendium_v2/static/IRUDuration-CX0U79PZ.js
index 5cc6a16d55c4b4ae0dc3b7a71711516f0486df2a..46bd52bfbf338b8c0d805755d70522a99830e2e1 100644
--- a/compendium_v2/static/IRUDuration-C1dUeB3y.js
+++ b/compendium_v2/static/IRUDuration-CX0U79PZ.js
@@ -1 +1 @@
-import{c as C,r as D,F as L,j as n,t as R,S as j}from"./index.js";import{L as E}from"./index-C4Nuqrw6.js";import{C as v,a as k,L as F,P as I,b as U,p as P,c as w,d as O,u as Y,e as T,D as $,F as q,f as z}from"./useData-Ct8E3VVL.js";import{g as A}from"./charthelpers-DmM6tvdh.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";v.register(k,F,I,U,P,w,O);function W(){const e=C.c(24);let o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=r=>r.iru_duration!=null,e[0]=o):o=e[0];const N=o,{filterSelection:t,setFilterSelection:c}=D.useContext(L),{data:g,nrens:_}=Y("/api/dark-fibre-lease",c,N);let a,f;if(e[1]!==g||e[2]!==t.selectedNrens){let r;e[5]!==t.selectedNrens?(r=S=>t.selectedNrens.includes(S.nren),e[5]=t.selectedNrens,e[6]=r):r=e[6],a=g.filter(r),f=T(a,"iru_duration"),e[1]=g,e[2]=t.selectedNrens,e[3]=a,e[4]=f}else a=e[3],f=e[4];const x=f;let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=[],e[7]=m):m=e[7];let s;e[8]!==_?(s=_.values(),e[8]=_,e[9]=s):s=e[9];let i;e[10]!==s?(i={availableYears:m,availableNrens:[...s]},e[10]=s,e[11]=i):i=e[11];let d;e[12]!==t||e[13]!==c||e[14]!==i?(d=n.jsx(q,{filterOptions:i,filterSelection:t,setFilterSelection:c}),e[12]=t,e[13]=c,e[14]=i,e[15]=d):d=e[15];const y=d;let p;e[16]===Symbol.for("react.memo_cache_sentinel")?(p=A({title:"Lease Duration In Years",tooltipUnit:"years",tickLimit:999}),e[16]=p):p=e[16];const b=p;let u;e[17]===Symbol.for("react.memo_cache_sentinel")?(u=n.jsx("span",{children:"NRENs sometimes take out an IRU (Indefeasible Right of Use), which is essentially a long-term lease, on a portion of the capacity of a cable rather than laying cable themselves. This graph shows the average duration, in years, of the IRUs of NRENs."}),e[17]=u):u=e[17];let l;e[18]!==x?(l=n.jsx(z,{children:n.jsx(E,{data:x,options:b})}),e[18]=x,e[19]=l):l=e[19];let h;return e[20]!==y||e[21]!==a||e[22]!==l?(h=n.jsx($,{title:R["iru-duration"],description:u,category:j.Network,filter:y,data:a,filename:"iru_duration_data",children:l}),e[20]=y,e[21]=a,e[22]=l,e[23]=h):h=e[23],h}export{W as default};
+import{c as C,r as D,F as L,j as n,t as R,S as j}from"./index.js";import{L as E}from"./index-BfhfJiKe.js";import{C as v,a as k,L as F,P as I,b as U,p as P,c as w,d as O,u as Y,e as T,D as $,F as q,f as z}from"./useData-CYCBVZdC.js";import{g as A}from"./charthelpers-CdmocpOu.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";v.register(k,F,I,U,P,w,O);function W(){const e=C.c(24);let o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=r=>r.iru_duration!=null,e[0]=o):o=e[0];const N=o,{filterSelection:t,setFilterSelection:c}=D.useContext(L),{data:g,nrens:_}=Y("/api/dark-fibre-lease",c,N);let a,f;if(e[1]!==g||e[2]!==t.selectedNrens){let r;e[5]!==t.selectedNrens?(r=S=>t.selectedNrens.includes(S.nren),e[5]=t.selectedNrens,e[6]=r):r=e[6],a=g.filter(r),f=T(a,"iru_duration"),e[1]=g,e[2]=t.selectedNrens,e[3]=a,e[4]=f}else a=e[3],f=e[4];const x=f;let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=[],e[7]=m):m=e[7];let s;e[8]!==_?(s=_.values(),e[8]=_,e[9]=s):s=e[9];let i;e[10]!==s?(i={availableYears:m,availableNrens:[...s]},e[10]=s,e[11]=i):i=e[11];let d;e[12]!==t||e[13]!==c||e[14]!==i?(d=n.jsx(q,{filterOptions:i,filterSelection:t,setFilterSelection:c}),e[12]=t,e[13]=c,e[14]=i,e[15]=d):d=e[15];const y=d;let p;e[16]===Symbol.for("react.memo_cache_sentinel")?(p=A({title:"Lease Duration In Years",tooltipUnit:"years",tickLimit:999}),e[16]=p):p=e[16];const b=p;let u;e[17]===Symbol.for("react.memo_cache_sentinel")?(u=n.jsx("span",{children:"NRENs sometimes take out an IRU (Indefeasible Right of Use), which is essentially a long-term lease, on a portion of the capacity of a cable rather than laying cable themselves. This graph shows the average duration, in years, of the IRUs of NRENs."}),e[17]=u):u=e[17];let l;e[18]!==x?(l=n.jsx(z,{children:n.jsx(E,{data:x,options:b})}),e[18]=x,e[19]=l):l=e[19];let h;return e[20]!==y||e[21]!==a||e[22]!==l?(h=n.jsx($,{title:R["iru-duration"],description:u,category:j.Network,filter:y,data:a,filename:"iru_duration_data",children:l}),e[20]=y,e[21]=a,e[22]=l,e[23]=h):h=e[23],h}export{W as default};
diff --git a/compendium_v2/static/MonitoringTools-BrAyjiGW.js b/compendium_v2/static/MonitoringTools-sTAJWOEm.js
similarity index 97%
rename from compendium_v2/static/MonitoringTools-BrAyjiGW.js
rename to compendium_v2/static/MonitoringTools-sTAJWOEm.js
index 0b7cfb9de8b20e4acf26d16ed9d96e0c962bcf60..b6fd8beabed7dd32a565989df3cb6ba381a110c2 100644
--- a/compendium_v2/static/MonitoringTools-BrAyjiGW.js
+++ b/compendium_v2/static/MonitoringTools-sTAJWOEm.js
@@ -1,2 +1,2 @@
-import{c as v,r as S,F as T,j as h,t as Y,S as j}from"./index.js";import{u as F,g as D,n as E,D as L,F as C,f as P}from"./useData-Ct8E3VVL.js";import{P as R}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function J(){const e=v.c(29),{filterSelection:t,setFilterSelection:c}=S.useContext(T),{data:w,years:_,nrens:N}=F("/api/monitoring-tools",c);let s,f;if(e[0]!==w||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=x=>t.selectedYears.includes(x.year)&&t.selectedNrens.includes(x.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=w.filter(u);const k=D(s,"tool_descriptions");f=E(k,M),e[0]=w,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=f}else s=e[3],f=e[4];const g=f;let o,p;e[8]===Symbol.for("react.memo_cache_sentinel")?(o=["Looking Glass","Network or Services Status Dashboard","Historical traffic volume information","Netflow analysis tool"],p=new Map([[o[0],"looking_glass"],[o[1],"status_dashboard"],[o[2],"historical_traffic_volumes"],[o[3],"netflow_analysis"]]),e[8]=o,e[9]=p):(o=e[8],p=e[9]);const y=p;let l;e[10]!==_?(l=[..._],e[10]=_,e[11]=l):l=e[11];let i;e[12]!==N?(i=N.values(),e[12]=N,e[13]=i):i=e[13];let r;e[14]!==i?(r=[...i],e[14]=i,e[15]=r):r=e[15];let a;e[16]!==l||e[17]!==r?(a={availableYears:l,availableNrens:r},e[16]=l,e[17]=r,e[18]=a):a=e[18];let d;e[19]!==t||e[20]!==c||e[21]!==a?(d=h.jsx(C,{filterOptions:a,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=a,e[22]=d):d=e[22];const b=d;let n;e[23]!==g?(n=h.jsx(P,{children:h.jsx(R,{columns:o,columnLookup:y,dataLookup:g})}),e[23]=g,e[24]=n):n=e[24];let m;return e[25]!==b||e[26]!==s||e[27]!==n?(m=h.jsx(L,{title:Y["monitoring-tools"],description:`The table below shows which tools the NREN offers to client institutions to allow them to monitor the network and troubleshoot any issues which arise. 
+import{c as v,r as S,F as T,j as h,t as Y,S as j}from"./index.js";import{u as F,g as D,n as E,D as L,F as C,f as P}from"./useData-CYCBVZdC.js";import{P as R}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function J(){const e=v.c(29),{filterSelection:t,setFilterSelection:c}=S.useContext(T),{data:w,years:_,nrens:N}=F("/api/monitoring-tools",c);let s,f;if(e[0]!==w||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=x=>t.selectedYears.includes(x.year)&&t.selectedNrens.includes(x.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=w.filter(u);const k=D(s,"tool_descriptions");f=E(k,M),e[0]=w,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=f}else s=e[3],f=e[4];const g=f;let o,p;e[8]===Symbol.for("react.memo_cache_sentinel")?(o=["Looking Glass","Network or Services Status Dashboard","Historical traffic volume information","Netflow analysis tool"],p=new Map([[o[0],"looking_glass"],[o[1],"status_dashboard"],[o[2],"historical_traffic_volumes"],[o[3],"netflow_analysis"]]),e[8]=o,e[9]=p):(o=e[8],p=e[9]);const y=p;let l;e[10]!==_?(l=[..._],e[10]=_,e[11]=l):l=e[11];let i;e[12]!==N?(i=N.values(),e[12]=N,e[13]=i):i=e[13];let r;e[14]!==i?(r=[...i],e[14]=i,e[15]=r):r=e[15];let a;e[16]!==l||e[17]!==r?(a={availableYears:l,availableNrens:r},e[16]=l,e[17]=r,e[18]=a):a=e[18];let d;e[19]!==t||e[20]!==c||e[21]!==a?(d=h.jsx(C,{filterOptions:a,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=a,e[22]=d):d=e[22];const b=d;let n;e[23]!==g?(n=h.jsx(P,{children:h.jsx(R,{columns:o,columnLookup:y,dataLookup:g})}),e[23]=g,e[24]=n):n=e[24];let m;return e[25]!==b||e[26]!==s||e[27]!==n?(m=h.jsx(L,{title:Y["monitoring-tools"],description:`The table below shows which tools the NREN offers to client institutions to allow them to monitor the network and troubleshoot any issues which arise. 
             Four common tools are named, however NRENs also have the opportunity to add their own tools to the table.`,category:j.Network,filter:b,data:s,filename:"monitoring_tools_nrens_per_year",children:n}),e[25]=b,e[26]=s,e[27]=n,e[28]=m):m=e[28],m}function M(e,t){if(e==="netflow_analysis"&&t.netflow_processing_description)return t.netflow_processing_description}export{J as default};
diff --git a/compendium_v2/static/NetworkFunctionVirtualisation-BSD5a3W2.js b/compendium_v2/static/NetworkFunctionVirtualisation-mpEVvRIs.js
similarity index 98%
rename from compendium_v2/static/NetworkFunctionVirtualisation-BSD5a3W2.js
rename to compendium_v2/static/NetworkFunctionVirtualisation-mpEVvRIs.js
index d82aa3903c400a45030be0c954e3a3fb919d99f5..17f029f62d6234cb2566bbda6c5779a2467f6551 100644
--- a/compendium_v2/static/NetworkFunctionVirtualisation-BSD5a3W2.js
+++ b/compendium_v2/static/NetworkFunctionVirtualisation-mpEVvRIs.js
@@ -1 +1 @@
-import{c as W,r as X,F as Z,S as k,j as t,t as ee}from"./index.js";import{u as te,g as se,F as le,D as re,f as ne}from"./useData-Ct8E3VVL.js";import{C as I}from"./ColorPill-CXvWIfWz.js";import{T as ae}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";function ue(){const e=W.c(67),{filterSelection:n,setFilterSelection:h}=X.useContext(Z),{data:J,years:c,nrens:R}=te("/api/nfv",h);let f,p,x,j,m,u,g,v,b,o,d,w,S,Y,N;if(e[0]!==J||e[1]!==n||e[2]!==R||e[3]!==h||e[4]!==c){let A;e[20]!==n.selectedNrens||e[21]!==n.selectedYears?(A=E=>n.selectedYears.includes(E.year)&&n.selectedNrens.includes(E.nren),e[20]=n.selectedNrens,e[21]=n.selectedYears,e[22]=A):A=e[22];const K=J.filter(A),Q=se(K,"nfv_specifics");let C;e[23]!==c?(C=[...c],e[23]=c,e[24]=C):C=e[24];let T;e[25]!==R?(T=R.values(),e[25]=R,e[26]=T):T=e[26];let $;e[27]!==T?($=[...T],e[27]=T,e[28]=$):$=e[28];let D;e[29]!==C||e[30]!==$?(D={availableYears:C,availableNrens:$},e[29]=C,e[30]=$,e[31]=D):D=e[31];let L;e[32]!==n||e[33]!==h||e[34]!==D?(L=t.jsx(le,{filterOptions:D,filterSelection:n,setFilterSelection:h,coloredYears:!0}),e[32]=n,e[33]=h,e[34]=D,e[35]=L):L=e[35];const U=L;let O;e[36]!==c?(O=E=>c.has(E),e[36]=c,e[37]=O):O=e[37];const M=[...n.selectedYears.filter(O)].sort();x=re,w=ee.nfv,S="The table below shows the kinds of Network Function Virtualisation (NFV) used by NRENs.",Y=k.Network,N=U,u=K,g="network_function_virtualisation_nrens_per_year",p=ne,f=ae,m="charging-struct-table",v=!0,b=!0;let _;e[38]===Symbol.for("react.memo_cache_sentinel")?(_=t.jsx("col",{span:1,style:{width:"20%"}}),e[38]=_):_=e[38];let q;e[39]===Symbol.for("react.memo_cache_sentinel")?(q=t.jsx("col",{span:2,style:{width:"16%"}}),e[39]=q):q=e[39];let z;e[40]===Symbol.for("react.memo_cache_sentinel")?(z=t.jsx("col",{span:2,style:{width:"16%"}}),e[40]=z):z=e[40];let B;e[41]===Symbol.for("react.memo_cache_sentinel")?(B=t.jsx("col",{span:2,style:{width:"16%"}}),e[41]=B):B=e[41];let G;e[42]===Symbol.for("react.memo_cache_sentinel")?(G=t.jsx("col",{span:2,style:{width:"16%"}}),e[42]=G):G=e[42],e[43]===Symbol.for("react.memo_cache_sentinel")?(o=t.jsxs("colgroup",{children:[_,q,z,B,G,t.jsx("col",{span:2,style:{width:"16%"}})]}),d=t.jsxs("thead",{children:[t.jsxs("tr",{children:[t.jsx("th",{}),t.jsx("th",{colSpan:2,children:"Routers/switches"}),t.jsx("th",{colSpan:2,children:"Firewalls"}),t.jsx("th",{colSpan:2,children:"Load balancers"}),t.jsx("th",{colSpan:2,children:"VPN Concentrator Services"}),t.jsx("th",{colSpan:2,children:"Other"})]}),t.jsxs("tr",{children:[t.jsx("th",{}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"})]})]}),e[43]=o,e[44]=d):(o=e[43],d=e[44]),j=Array.from(Q.entries()).map(E=>{const[H,i]=E;return t.jsxs("tr",{children:[t.jsx("td",{children:H}),["routers","firewalls","load_balancers","vpn_concentrators"].map(l=>t.jsxs(t.Fragment,{children:[t.jsx("td",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&r.nfv=="yes"),tooltip:"",rounded:!0},s)})},`${l}-yes`),t.jsx("td",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&r.nfv=="planned"),tooltip:"",rounded:!0},s)})},`${l}-planned`)]})),t.jsx("td",{children:Array.from(i.keys()).filter(ce).map(l=>t.jsx("div",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&(r==null?void 0:r.nfv)=="yes"),tooltip:l,rounded:!0},s)})},`${l}-yes`))},`${H}-other-yes`),t.jsx("td",{children:Array.from(i.keys()).filter(ie).map(l=>t.jsx("div",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&(r==null?void 0:r.nfv)=="planned"),tooltip:l,rounded:!0},s)})},`${l}-planned`))},`${H}-other-planned`)]},H)}),e[0]=J,e[1]=n,e[2]=R,e[3]=h,e[4]=c,e[5]=f,e[6]=p,e[7]=x,e[8]=j,e[9]=m,e[10]=u,e[11]=g,e[12]=v,e[13]=b,e[14]=o,e[15]=d,e[16]=w,e[17]=S,e[18]=Y,e[19]=N}else f=e[5],p=e[6],x=e[7],j=e[8],m=e[9],u=e[10],g=e[11],v=e[12],b=e[13],o=e[14],d=e[15],w=e[16],S=e[17],Y=e[18],N=e[19];let F;e[45]!==j?(F=t.jsx("tbody",{children:j}),e[45]=j,e[46]=F):F=e[46];let y;e[47]!==f||e[48]!==m||e[49]!==F||e[50]!==v||e[51]!==b||e[52]!==o||e[53]!==d?(y=t.jsxs(f,{className:m,striped:v,bordered:b,children:[o,d,F]}),e[47]=f,e[48]=m,e[49]=F,e[50]=v,e[51]=b,e[52]=o,e[53]=d,e[54]=y):y=e[54];let P;e[55]!==p||e[56]!==y?(P=t.jsx(p,{children:y}),e[55]=p,e[56]=y,e[57]=P):P=e[57];let V;return e[58]!==x||e[59]!==u||e[60]!==g||e[61]!==P||e[62]!==w||e[63]!==S||e[64]!==Y||e[65]!==N?(V=t.jsx(x,{title:w,description:S,category:Y,filter:N,data:u,filename:g,children:P}),e[58]=x,e[59]=u,e[60]=g,e[61]=P,e[62]=w,e[63]=S,e[64]=Y,e[65]=N,e[66]=V):V=e[66],V}function ie(e){return!["routers","firewalls","load_balancers","vpn_concentrators"].includes(e)}function ce(e){return!["routers","firewalls","load_balancers","vpn_concentrators"].includes(e)}export{ue as default};
+import{c as W,r as X,F as Z,S as k,j as t,t as ee}from"./index.js";import{u as te,g as se,F as le,D as re,f as ne}from"./useData-CYCBVZdC.js";import{C as I}from"./ColorPill-CXvWIfWz.js";import{T as ae}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";function ue(){const e=W.c(67),{filterSelection:n,setFilterSelection:h}=X.useContext(Z),{data:J,years:c,nrens:R}=te("/api/nfv",h);let f,p,x,j,m,u,g,v,b,o,d,w,S,Y,N;if(e[0]!==J||e[1]!==n||e[2]!==R||e[3]!==h||e[4]!==c){let A;e[20]!==n.selectedNrens||e[21]!==n.selectedYears?(A=E=>n.selectedYears.includes(E.year)&&n.selectedNrens.includes(E.nren),e[20]=n.selectedNrens,e[21]=n.selectedYears,e[22]=A):A=e[22];const K=J.filter(A),Q=se(K,"nfv_specifics");let C;e[23]!==c?(C=[...c],e[23]=c,e[24]=C):C=e[24];let T;e[25]!==R?(T=R.values(),e[25]=R,e[26]=T):T=e[26];let $;e[27]!==T?($=[...T],e[27]=T,e[28]=$):$=e[28];let D;e[29]!==C||e[30]!==$?(D={availableYears:C,availableNrens:$},e[29]=C,e[30]=$,e[31]=D):D=e[31];let L;e[32]!==n||e[33]!==h||e[34]!==D?(L=t.jsx(le,{filterOptions:D,filterSelection:n,setFilterSelection:h,coloredYears:!0}),e[32]=n,e[33]=h,e[34]=D,e[35]=L):L=e[35];const U=L;let O;e[36]!==c?(O=E=>c.has(E),e[36]=c,e[37]=O):O=e[37];const M=[...n.selectedYears.filter(O)].sort();x=re,w=ee.nfv,S="The table below shows the kinds of Network Function Virtualisation (NFV) used by NRENs.",Y=k.Network,N=U,u=K,g="network_function_virtualisation_nrens_per_year",p=ne,f=ae,m="charging-struct-table",v=!0,b=!0;let _;e[38]===Symbol.for("react.memo_cache_sentinel")?(_=t.jsx("col",{span:1,style:{width:"20%"}}),e[38]=_):_=e[38];let q;e[39]===Symbol.for("react.memo_cache_sentinel")?(q=t.jsx("col",{span:2,style:{width:"16%"}}),e[39]=q):q=e[39];let z;e[40]===Symbol.for("react.memo_cache_sentinel")?(z=t.jsx("col",{span:2,style:{width:"16%"}}),e[40]=z):z=e[40];let B;e[41]===Symbol.for("react.memo_cache_sentinel")?(B=t.jsx("col",{span:2,style:{width:"16%"}}),e[41]=B):B=e[41];let G;e[42]===Symbol.for("react.memo_cache_sentinel")?(G=t.jsx("col",{span:2,style:{width:"16%"}}),e[42]=G):G=e[42],e[43]===Symbol.for("react.memo_cache_sentinel")?(o=t.jsxs("colgroup",{children:[_,q,z,B,G,t.jsx("col",{span:2,style:{width:"16%"}})]}),d=t.jsxs("thead",{children:[t.jsxs("tr",{children:[t.jsx("th",{}),t.jsx("th",{colSpan:2,children:"Routers/switches"}),t.jsx("th",{colSpan:2,children:"Firewalls"}),t.jsx("th",{colSpan:2,children:"Load balancers"}),t.jsx("th",{colSpan:2,children:"VPN Concentrator Services"}),t.jsx("th",{colSpan:2,children:"Other"})]}),t.jsxs("tr",{children:[t.jsx("th",{}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"})]})]}),e[43]=o,e[44]=d):(o=e[43],d=e[44]),j=Array.from(Q.entries()).map(E=>{const[H,i]=E;return t.jsxs("tr",{children:[t.jsx("td",{children:H}),["routers","firewalls","load_balancers","vpn_concentrators"].map(l=>t.jsxs(t.Fragment,{children:[t.jsx("td",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&r.nfv=="yes"),tooltip:"",rounded:!0},s)})},`${l}-yes`),t.jsx("td",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&r.nfv=="planned"),tooltip:"",rounded:!0},s)})},`${l}-planned`)]})),t.jsx("td",{children:Array.from(i.keys()).filter(ce).map(l=>t.jsx("div",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&(r==null?void 0:r.nfv)=="yes"),tooltip:l,rounded:!0},s)})},`${l}-yes`))},`${H}-other-yes`),t.jsx("td",{children:Array.from(i.keys()).filter(ie).map(l=>t.jsx("div",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&(r==null?void 0:r.nfv)=="planned"),tooltip:l,rounded:!0},s)})},`${l}-planned`))},`${H}-other-planned`)]},H)}),e[0]=J,e[1]=n,e[2]=R,e[3]=h,e[4]=c,e[5]=f,e[6]=p,e[7]=x,e[8]=j,e[9]=m,e[10]=u,e[11]=g,e[12]=v,e[13]=b,e[14]=o,e[15]=d,e[16]=w,e[17]=S,e[18]=Y,e[19]=N}else f=e[5],p=e[6],x=e[7],j=e[8],m=e[9],u=e[10],g=e[11],v=e[12],b=e[13],o=e[14],d=e[15],w=e[16],S=e[17],Y=e[18],N=e[19];let F;e[45]!==j?(F=t.jsx("tbody",{children:j}),e[45]=j,e[46]=F):F=e[46];let y;e[47]!==f||e[48]!==m||e[49]!==F||e[50]!==v||e[51]!==b||e[52]!==o||e[53]!==d?(y=t.jsxs(f,{className:m,striped:v,bordered:b,children:[o,d,F]}),e[47]=f,e[48]=m,e[49]=F,e[50]=v,e[51]=b,e[52]=o,e[53]=d,e[54]=y):y=e[54];let P;e[55]!==p||e[56]!==y?(P=t.jsx(p,{children:y}),e[55]=p,e[56]=y,e[57]=P):P=e[57];let V;return e[58]!==x||e[59]!==u||e[60]!==g||e[61]!==P||e[62]!==w||e[63]!==S||e[64]!==Y||e[65]!==N?(V=t.jsx(x,{title:w,description:S,category:Y,filter:N,data:u,filename:g,children:P}),e[58]=x,e[59]=u,e[60]=g,e[61]=P,e[62]=w,e[63]=S,e[64]=Y,e[65]=N,e[66]=V):V=e[66],V}function ie(e){return!["routers","firewalls","load_balancers","vpn_concentrators"].includes(e)}function ce(e){return!["routers","firewalls","load_balancers","vpn_concentrators"].includes(e)}export{ue as default};
diff --git a/compendium_v2/static/NetworkMapUrls-iZSn2qqQ.js b/compendium_v2/static/NetworkMapUrls-B9qEmtVH.js
similarity index 92%
rename from compendium_v2/static/NetworkMapUrls-iZSn2qqQ.js
rename to compendium_v2/static/NetworkMapUrls-B9qEmtVH.js
index e3e331b4de55dff0ac5271112be1a379b1988b9e..b53a6de50e61984ec7053631c60398f64a29f728 100644
--- a/compendium_v2/static/NetworkMapUrls-iZSn2qqQ.js
+++ b/compendium_v2/static/NetworkMapUrls-B9qEmtVH.js
@@ -1 +1 @@
-import{c as b,r as h,F as j,j as u,t as y,S as _}from"./index.js";import{u as g,q as v,k as S,i as F,D as C,F as E,f as L,s as R}from"./useData-Ct8E3VVL.js";import{N as T}from"./NrenYearTable-iS8aEX43.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function z(){const e=b.c(21),{filterSelection:t,setFilterSelection:r}=h.useContext(j),{data:a,nrens:i}=g("/api/network-map-urls",r);let s,c;if(e[0]!==a||e[1]!==t.selectedNrens){const x=a?v(a):[];let d;e[4]!==t.selectedNrens?(d=w=>t.selectedNrens.includes(w.nren),e[4]=t.selectedNrens,e[5]=d):d=e[5],s=x.filter(d);const D=S(s);c=F(D,Y),e[0]=a,e[1]=t.selectedNrens,e[2]=s,e[3]=c}else s=e[2],c=e[3];const k=c;let p;e[6]===Symbol.for("react.memo_cache_sentinel")?(p=[],e[6]=p):p=e[6];let o;e[7]!==i?(o=i.values(),e[7]=i,e[8]=o):o=e[8];let l;e[9]!==o?(l={availableYears:p,availableNrens:[...o]},e[9]=o,e[10]=l):l=e[10];let f;e[11]!==t||e[12]!==r||e[13]!==l?(f=u.jsx(E,{filterOptions:l,filterSelection:t,setFilterSelection:r,coloredYears:!0}),e[11]=t,e[12]=r,e[13]=l,e[14]=f):f=e[14];const N=f;let n;e[15]!==k?(n=u.jsx(L,{children:u.jsx(T,{data:k,columnTitle:"Network Map",dottedBorder:!0,noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=k,e[16]=n):n=e[16];let m;return e[17]!==N||e[18]!==s||e[19]!==n?(m=u.jsx(C,{title:y["network-map"],description:"This table provides links to NREN network maps, showing layers 1, 2, and 3 of their networks.",category:_.Network,filter:N,data:s,filename:"network_map_nrens_per_year",children:n}),e[17]=N,e[18]=s,e[19]=n,e[20]=m):m=e[20],m}function Y(e,t){const r=R(t);if(r!=null)for(const[a,i]of Object.entries(r))e[a]=i}export{z as default};
+import{c as b,r as h,F as j,j as u,t as y,S as _}from"./index.js";import{u as g,q as v,k as S,i as F,D as C,F as E,f as L,s as R}from"./useData-CYCBVZdC.js";import{N as T}from"./NrenYearTable-RI8l8hwG.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function z(){const e=b.c(21),{filterSelection:t,setFilterSelection:r}=h.useContext(j),{data:a,nrens:i}=g("/api/network-map-urls",r);let s,c;if(e[0]!==a||e[1]!==t.selectedNrens){const x=a?v(a):[];let d;e[4]!==t.selectedNrens?(d=w=>t.selectedNrens.includes(w.nren),e[4]=t.selectedNrens,e[5]=d):d=e[5],s=x.filter(d);const D=S(s);c=F(D,Y),e[0]=a,e[1]=t.selectedNrens,e[2]=s,e[3]=c}else s=e[2],c=e[3];const k=c;let p;e[6]===Symbol.for("react.memo_cache_sentinel")?(p=[],e[6]=p):p=e[6];let o;e[7]!==i?(o=i.values(),e[7]=i,e[8]=o):o=e[8];let l;e[9]!==o?(l={availableYears:p,availableNrens:[...o]},e[9]=o,e[10]=l):l=e[10];let f;e[11]!==t||e[12]!==r||e[13]!==l?(f=u.jsx(E,{filterOptions:l,filterSelection:t,setFilterSelection:r,coloredYears:!0}),e[11]=t,e[12]=r,e[13]=l,e[14]=f):f=e[14];const N=f;let n;e[15]!==k?(n=u.jsx(L,{children:u.jsx(T,{data:k,columnTitle:"Network Map",dottedBorder:!0,noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=k,e[16]=n):n=e[16];let m;return e[17]!==N||e[18]!==s||e[19]!==n?(m=u.jsx(C,{title:y["network-map"],description:"This table provides links to NREN network maps, showing layers 1, 2, and 3 of their networks.",category:_.Network,filter:N,data:s,filename:"network_map_nrens_per_year",children:n}),e[17]=N,e[18]=s,e[19]=n,e[20]=m):m=e[20],m}function Y(e,t){const r=R(t);if(r!=null)for(const[a,i]of Object.entries(r))e[a]=i}export{z as default};
diff --git a/compendium_v2/static/NonRAndEPeer-Cn_ozVAu.js b/compendium_v2/static/NonRAndEPeer-C1U-VeeG.js
similarity index 89%
rename from compendium_v2/static/NonRAndEPeer-Cn_ozVAu.js
rename to compendium_v2/static/NonRAndEPeer-C1U-VeeG.js
index 103ba409db3023e6ccc5c7559108f11bc3802146..c9edf186d49ab9d9250a156a9d9d343ec5e6b392 100644
--- a/compendium_v2/static/NonRAndEPeer-Cn_ozVAu.js
+++ b/compendium_v2/static/NonRAndEPeer-C1U-VeeG.js
@@ -1,2 +1,2 @@
-import{c as D,r as F,F as Y,j as u,S as v,t as k}from"./index.js";import{B as A}from"./index-C4Nuqrw6.js";import{C as L,a as O,L as T,B as $,p as G,c as I,d as M,u as q,o as z,D as H,F as J,f as K}from"./useData-Ct8E3VVL.js";import{p as Q}from"./chartjs-plugin-datalabels.esm-BI98Iz1j.js";import{a as U}from"./charthelpers-DmM6tvdh.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";L.register(O,T,$,G,I,M);function ne(){const e=D.c(38),{filterSelection:t,setFilterSelection:r}=F.useContext(Y),{data:b,years:d,nrens:h}=q("/api/non-re-peers",r);let a,l,s,g;if(e[0]!==b||e[1]!==t||e[2]!==h||e[3]!==r||e[4]!==d){let S;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(S=E=>t.selectedYears.includes(E.year)&&t.selectedNrens.includes(E.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=S):S=e[11],s=b.filter(S),a=z(s,"nr_of_non_r_and_e_peers","Number of Peers");let c;e[12]!==d?(c=[...d],e[12]=d,e[13]=c):c=e[13];let m;e[14]!==h?(m=h.values(),e[14]=h,e[15]=m):m=e[15];let p;e[16]!==m?(p=[...m],e[16]=m,e[17]=p):p=e[17];let f;e[18]!==c||e[19]!==p?(f={availableYears:c,availableNrens:p},e[18]=c,e[19]=p,e[20]=f):f=e[20];let C;e[21]!==t||e[22]!==r||e[23]!==f?(C=u.jsx(J,{filterOptions:f,filterSelection:t,setFilterSelection:r}),e[21]=t,e[22]=r,e[23]=f,e[24]=C):C=e[24],l=C,g=Array.from(new Set(s.map(V))),e[0]=b,e[1]=t,e[2]=h,e[3]=r,e[4]=d,e[5]=a,e[6]=l,e[7]=s,e[8]=g}else a=e[5],l=e[6],s=e[7],g=e[8];const j=g.length,w=Math.max(j*t.selectedYears.length*1.5+5,50),B=k["non-rne-peers"],P=`The graph below shows the number of non-Research and Education networks 
+import{c as D,r as F,F as Y,j as u,S as v,t as k}from"./index.js";import{B as A}from"./index-BfhfJiKe.js";import{C as L,a as O,L as T,B as $,p as G,c as I,d as M,u as q,o as z,D as H,F as J,f as K}from"./useData-CYCBVZdC.js";import{p as Q}from"./chartjs-plugin-datalabels.esm-CzQRWEly.js";import{a as U}from"./charthelpers-CdmocpOu.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";L.register(O,T,$,G,I,M);function ne(){const e=D.c(38),{filterSelection:t,setFilterSelection:r}=F.useContext(Y),{data:b,years:d,nrens:h}=q("/api/non-re-peers",r);let a,l,s,g;if(e[0]!==b||e[1]!==t||e[2]!==h||e[3]!==r||e[4]!==d){let S;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(S=E=>t.selectedYears.includes(E.year)&&t.selectedNrens.includes(E.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=S):S=e[11],s=b.filter(S),a=z(s,"nr_of_non_r_and_e_peers","Number of Peers");let c;e[12]!==d?(c=[...d],e[12]=d,e[13]=c):c=e[13];let m;e[14]!==h?(m=h.values(),e[14]=h,e[15]=m):m=e[15];let p;e[16]!==m?(p=[...m],e[16]=m,e[17]=p):p=e[17];let f;e[18]!==c||e[19]!==p?(f={availableYears:c,availableNrens:p},e[18]=c,e[19]=p,e[20]=f):f=e[20];let C;e[21]!==t||e[22]!==r||e[23]!==f?(C=u.jsx(J,{filterOptions:f,filterSelection:t,setFilterSelection:r}),e[21]=t,e[22]=r,e[23]=f,e[24]=C):C=e[24],l=C,g=Array.from(new Set(s.map(V))),e[0]=b,e[1]=t,e[2]=h,e[3]=r,e[4]=d,e[5]=a,e[6]=l,e[7]=s,e[8]=g}else a=e[5],l=e[6],s=e[7],g=e[8];const j=g.length,w=Math.max(j*t.selectedYears.length*1.5+5,50),B=k["non-rne-peers"],P=`The graph below shows the number of non-Research and Education networks 
     NRENs peer with. This includes all direct IP-peerings to commercial networks, eg. Google`;let _;e[25]===Symbol.for("react.memo_cache_sentinel")?(_=U({title:"Number of Non-R&E Peers"}),e[25]=_):_=e[25];const R=_,y=`${w}rem`;let n;e[26]!==y?(n={height:y},e[26]=y,e[27]=n):n=e[27];let N;e[28]===Symbol.for("react.memo_cache_sentinel")?(N=[Q],e[28]=N):N=e[28];let i;e[29]!==a?(i=u.jsx(A,{data:a,options:R,plugins:N}),e[29]=a,e[30]=i):i=e[30];let o;e[31]!==n||e[32]!==i?(o=u.jsx(K,{children:u.jsx("div",{className:"chart-container",style:n,children:i})}),e[31]=n,e[32]=i,e[33]=o):o=e[33];let x;return e[34]!==l||e[35]!==s||e[36]!==o?(x=u.jsx(H,{title:B,description:P,category:v.Network,filter:l,data:s,filename:"non_r_and_e_peering",children:o}),e[34]=l,e[35]=s,e[36]=o,e[37]=x):x=e[37],x}function V(e){return e.nren}export{ne as default};
diff --git a/compendium_v2/static/NrenYearTable-iS8aEX43.js b/compendium_v2/static/NrenYearTable-RI8l8hwG.js
similarity index 96%
rename from compendium_v2/static/NrenYearTable-iS8aEX43.js
rename to compendium_v2/static/NrenYearTable-RI8l8hwG.js
index b7b91992c79adbb9cdfeec29f2c7fa8f43605aae..da97bf28c28e45e85e8def348bc1152031dac408 100644
--- a/compendium_v2/static/NrenYearTable-iS8aEX43.js
+++ b/compendium_v2/static/NrenYearTable-RI8l8hwG.js
@@ -1 +1 @@
-import{c as j,j as r}from"./index.js";import{w as p}from"./useData-Ct8E3VVL.js";import{T as u}from"./Table-ClWM2_rS.js";function N(f,e,s,l,t){return f?l.startsWith("http")?r.jsx("li",{children:r.jsx("a",{href:p(l),target:"_blank",rel:"noopener noreferrer",style:e,children:t})},s):r.jsx("li",{children:r.jsx("span",{children:t})},s):r.jsx("li",{children:r.jsx("span",{children:t})},s)}function b(f,{dottedBorder:e=!1,noDots:s=!1,keysAreURLs:l=!1,removeDecoration:t=!1}){return Array.from(f.entries()).map(([i,x])=>Array.from(x.entries()).map(([o,m],d)=>{const n={};return t&&(n.textDecoration="none"),r.jsxs("tr",{className:e?"dotted-border":"",children:[r.jsx("td",{className:"pt-3 nren-column text-nowrap",children:d===0&&i}),r.jsx("td",{className:"pt-3 year-column",children:o}),r.jsx("td",{className:"pt-3 blue-column",children:r.jsx("ul",{className:s?"no-list-style-type":"",children:Array.from(Object.entries(m)).map(([a,c],h)=>N(l,n,h,c,a))})})]},i+o)}))}function _(f){const e=j.c(15),{data:s,columnTitle:l,dottedBorder:t,noDots:i,keysAreURLs:x,removeDecoration:o}=f;let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=r.jsx("th",{className:"nren-column",children:r.jsx("span",{children:"NREN"})}),e[0]=m):m=e[0];let d;e[1]===Symbol.for("react.memo_cache_sentinel")?(d=r.jsx("th",{className:"year-column",children:r.jsx("span",{children:"Year"})}),e[1]=d):d=e[1];let n;e[2]!==l?(n=r.jsx("thead",{children:r.jsxs("tr",{children:[m,d,r.jsx("th",{className:"blue-column",children:r.jsx("span",{children:l})})]})}),e[2]=l,e[3]=n):n=e[3];let a;e[4]!==s||e[5]!==t||e[6]!==x||e[7]!==i||e[8]!==o?(a=b(s,{dottedBorder:t,noDots:i,keysAreURLs:x,removeDecoration:o}),e[4]=s,e[5]=t,e[6]=x,e[7]=i,e[8]=o,e[9]=a):a=e[9];let c;e[10]!==a?(c=r.jsx("tbody",{children:a}),e[10]=a,e[11]=c):c=e[11];let h;return e[12]!==n||e[13]!==c?(h=r.jsxs(u,{borderless:!0,className:"compendium-table",children:[n,c]}),e[12]=n,e[13]=c,e[14]=h):h=e[14],h}export{_ as N};
+import{c as j,j as r}from"./index.js";import{w as p}from"./useData-CYCBVZdC.js";import{T as u}from"./Table-ClWM2_rS.js";function N(f,e,s,l,t){return f?l.startsWith("http")?r.jsx("li",{children:r.jsx("a",{href:p(l),target:"_blank",rel:"noopener noreferrer",style:e,children:t})},s):r.jsx("li",{children:r.jsx("span",{children:t})},s):r.jsx("li",{children:r.jsx("span",{children:t})},s)}function b(f,{dottedBorder:e=!1,noDots:s=!1,keysAreURLs:l=!1,removeDecoration:t=!1}){return Array.from(f.entries()).map(([i,x])=>Array.from(x.entries()).map(([o,m],d)=>{const n={};return t&&(n.textDecoration="none"),r.jsxs("tr",{className:e?"dotted-border":"",children:[r.jsx("td",{className:"pt-3 nren-column text-nowrap",children:d===0&&i}),r.jsx("td",{className:"pt-3 year-column",children:o}),r.jsx("td",{className:"pt-3 blue-column",children:r.jsx("ul",{className:s?"no-list-style-type":"",children:Array.from(Object.entries(m)).map(([a,c],h)=>N(l,n,h,c,a))})})]},i+o)}))}function _(f){const e=j.c(15),{data:s,columnTitle:l,dottedBorder:t,noDots:i,keysAreURLs:x,removeDecoration:o}=f;let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=r.jsx("th",{className:"nren-column",children:r.jsx("span",{children:"NREN"})}),e[0]=m):m=e[0];let d;e[1]===Symbol.for("react.memo_cache_sentinel")?(d=r.jsx("th",{className:"year-column",children:r.jsx("span",{children:"Year"})}),e[1]=d):d=e[1];let n;e[2]!==l?(n=r.jsx("thead",{children:r.jsxs("tr",{children:[m,d,r.jsx("th",{className:"blue-column",children:r.jsx("span",{children:l})})]})}),e[2]=l,e[3]=n):n=e[3];let a;e[4]!==s||e[5]!==t||e[6]!==x||e[7]!==i||e[8]!==o?(a=b(s,{dottedBorder:t,noDots:i,keysAreURLs:x,removeDecoration:o}),e[4]=s,e[5]=t,e[6]=x,e[7]=i,e[8]=o,e[9]=a):a=e[9];let c;e[10]!==a?(c=r.jsx("tbody",{children:a}),e[10]=a,e[11]=c):c=e[11];let h;return e[12]!==n||e[13]!==c?(h=r.jsxs(u,{borderless:!0,className:"compendium-table",children:[n,c]}),e[12]=n,e[13]=c,e[14]=h):h=e[14],h}export{_ as N};
diff --git a/compendium_v2/static/OPsAutomation-Bc59w9gr.js b/compendium_v2/static/OPsAutomation-DAHkdRQE.js
similarity index 94%
rename from compendium_v2/static/OPsAutomation-Bc59w9gr.js
rename to compendium_v2/static/OPsAutomation-DAHkdRQE.js
index 5c2d07b96f5fe8006c398d17f13daaab08c88518..df1361a7eb3cfb69df0e8b6cb339b5b644b8e73b 100644
--- a/compendium_v2/static/OPsAutomation-Bc59w9gr.js
+++ b/compendium_v2/static/OPsAutomation-DAHkdRQE.js
@@ -1,3 +1,3 @@
-import{c as y,r as P,F as S,j as h,t as g,S as k}from"./index.js";import{u as v,g as F,n as C,D,F as E,f as L}from"./useData-Ct8E3VVL.js";import{P as R}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function J(){const e=y.c(29),{filterSelection:t,setFilterSelection:c}=P.useContext(S),{data:N,years:x,nrens:_}=v("/api/ops-automation",c);let s,p;if(e[0]!==N||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let d;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(d=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=d):d=e[7],s=N.filter(d);const j=F(s,"ops_automation");p=C(j,M),e[0]=N,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=p}else s=e[3],p=e[4];const w=p;let o,m;e[8]===Symbol.for("react.memo_cache_sentinel")?(o=["Yes","Planned","No"],m=new Map([[o[0],"yes"],[o[1],"planned"],[o[2],"no"]]),e[8]=o,e[9]=m):(o=e[8],m=e[9]);const T=m;let a;e[10]!==x?(a=[...x],e[10]=x,e[11]=a):a=e[11];let l;e[12]!==_?(l=_.values(),e[12]=_,e[13]=l):l=e[13];let i;e[14]!==l?(i=[...l],e[14]=l,e[15]=i):i=e[15];let r;e[16]!==a||e[17]!==i?(r={availableYears:a,availableNrens:i},e[16]=a,e[17]=i,e[18]=r):r=e[18];let u;e[19]!==t||e[20]!==c||e[21]!==r?(u=h.jsx(E,{filterOptions:r,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=r,e[22]=u):u=e[22];const Y=u;let n;e[23]!==w?(n=h.jsx(L,{children:h.jsx(R,{columns:o,columnLookup:T,dataLookup:w})}),e[23]=w,e[24]=n):n=e[24];let f;return e[25]!==Y||e[26]!==s||e[27]!==n?(f=h.jsx(D,{title:g["ops-automation"],description:`The table below shows which NRENs have, or plan to, automate their 
+import{c as y,r as P,F as S,j as h,t as g,S as k}from"./index.js";import{u as v,g as F,n as C,D,F as E,f as L}from"./useData-CYCBVZdC.js";import{P as R}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function J(){const e=y.c(29),{filterSelection:t,setFilterSelection:c}=P.useContext(S),{data:N,years:x,nrens:_}=v("/api/ops-automation",c);let s,p;if(e[0]!==N||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let d;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(d=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=d):d=e[7],s=N.filter(d);const j=F(s,"ops_automation");p=C(j,M),e[0]=N,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=p}else s=e[3],p=e[4];const w=p;let o,m;e[8]===Symbol.for("react.memo_cache_sentinel")?(o=["Yes","Planned","No"],m=new Map([[o[0],"yes"],[o[1],"planned"],[o[2],"no"]]),e[8]=o,e[9]=m):(o=e[8],m=e[9]);const T=m;let a;e[10]!==x?(a=[...x],e[10]=x,e[11]=a):a=e[11];let l;e[12]!==_?(l=_.values(),e[12]=_,e[13]=l):l=e[13];let i;e[14]!==l?(i=[...l],e[14]=l,e[15]=i):i=e[15];let r;e[16]!==a||e[17]!==i?(r={availableYears:a,availableNrens:i},e[16]=a,e[17]=i,e[18]=r):r=e[18];let u;e[19]!==t||e[20]!==c||e[21]!==r?(u=h.jsx(E,{filterOptions:r,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=r,e[22]=u):u=e[22];const Y=u;let n;e[23]!==w?(n=h.jsx(L,{children:h.jsx(R,{columns:o,columnLookup:T,dataLookup:w})}),e[23]=w,e[24]=n):n=e[24];let f;return e[25]!==Y||e[26]!==s||e[27]!==n?(f=h.jsx(D,{title:g["ops-automation"],description:`The table below shows which NRENs have, or plan to, automate their 
             operational processes, with specification of which processes, and the names of 
             software and tools used for this given when appropriate.`,category:k.Network,filter:Y,data:s,filename:"ops_automation_nrens_per_year",children:n}),e[25]=Y,e[26]=s,e[27]=n,e[28]=f):f=e[28],f}function M(e,t){if(t.ops_automation_specifics)return t.ops_automation_specifics}export{J as default};
diff --git a/compendium_v2/static/ParentOrganisation-BqnVV9Ka.js b/compendium_v2/static/ParentOrganisation-Bpo7P6u6.js
similarity index 93%
rename from compendium_v2/static/ParentOrganisation-BqnVV9Ka.js
rename to compendium_v2/static/ParentOrganisation-Bpo7P6u6.js
index c9548602b523b6ecf7dc2f2725d91c3efc5af179..a610a6ece4f64749d428fbf37bf40e73a620271d 100644
--- a/compendium_v2/static/ParentOrganisation-BqnVV9Ka.js
+++ b/compendium_v2/static/ParentOrganisation-Bpo7P6u6.js
@@ -1 +1 @@
-import{c as b,r as y,F as j,j as p,S as v}from"./index.js";import{u as E,k as O,i as S,D as F,F as P,f as R}from"./useData-Ct8E3VVL.js";import{N as w}from"./NrenYearTable-iS8aEX43.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function q(){const e=b.c(27),{filterSelection:t,setFilterSelection:a}=y.useContext(j),{data:u,years:g,nrens:N}=E("/api/parent-organizations",a);let s,c;if(e[0]!==t.selectedNrens||e[1]!==t.selectedYears||e[2]!==u){let m;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(m=h=>t.selectedYears.includes(h.year)&&t.selectedNrens.includes(h.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=m):m=e[7],s=u.filter(m);const Y=O(s);c=S(Y,C),e[0]=t.selectedNrens,e[1]=t.selectedYears,e[2]=u,e[3]=s,e[4]=c}else s=e[3],c=e[4];const x=c;let r;e[8]!==g?(r=[...g],e[8]=g,e[9]=r):r=e[9];let i;e[10]!==N?(i=N.values(),e[10]=N,e[11]=i):i=e[11];let n;e[12]!==i?(n=[...i],e[12]=i,e[13]=n):n=e[13];let l;e[14]!==r||e[15]!==n?(l={availableYears:r,availableNrens:n},e[14]=r,e[15]=n,e[16]=l):l=e[16];let d;e[17]!==t||e[18]!==a||e[19]!==l?(d=p.jsx(P,{filterOptions:l,filterSelection:t,setFilterSelection:a,max1year:!0}),e[17]=t,e[18]=a,e[19]=l,e[20]=d):d=e[20];const D=d;let o;e[21]!==x?(o=p.jsx(R,{children:p.jsx(w,{data:x,columnTitle:"Parent Organisation",dottedBorder:!0,noDots:!0})}),e[21]=x,e[22]=o):o=e[22];let f;return e[23]!==D||e[24]!==s||e[25]!==o?(f=p.jsx(F,{title:"NREN Parent Organisations",description:"Some NRENs are part of larger organisations, including Ministries or universities. These are shown in the table below. Only NRENs who are managed in this way are available to select.",category:v.Organisation,filter:D,data:s,filename:"nren_parent_organisations",children:o}),e[23]=D,e[24]=s,e[25]=o,e[26]=f):f=e[26],f}function C(e,t){const a=t.name;e[a]=a}export{q as default};
+import{c as b,r as y,F as j,j as p,S as v}from"./index.js";import{u as E,k as O,i as S,D as F,F as P,f as R}from"./useData-CYCBVZdC.js";import{N as w}from"./NrenYearTable-RI8l8hwG.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function q(){const e=b.c(27),{filterSelection:t,setFilterSelection:a}=y.useContext(j),{data:u,years:g,nrens:N}=E("/api/parent-organizations",a);let s,c;if(e[0]!==t.selectedNrens||e[1]!==t.selectedYears||e[2]!==u){let m;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(m=h=>t.selectedYears.includes(h.year)&&t.selectedNrens.includes(h.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=m):m=e[7],s=u.filter(m);const Y=O(s);c=S(Y,C),e[0]=t.selectedNrens,e[1]=t.selectedYears,e[2]=u,e[3]=s,e[4]=c}else s=e[3],c=e[4];const x=c;let r;e[8]!==g?(r=[...g],e[8]=g,e[9]=r):r=e[9];let i;e[10]!==N?(i=N.values(),e[10]=N,e[11]=i):i=e[11];let n;e[12]!==i?(n=[...i],e[12]=i,e[13]=n):n=e[13];let l;e[14]!==r||e[15]!==n?(l={availableYears:r,availableNrens:n},e[14]=r,e[15]=n,e[16]=l):l=e[16];let d;e[17]!==t||e[18]!==a||e[19]!==l?(d=p.jsx(P,{filterOptions:l,filterSelection:t,setFilterSelection:a,max1year:!0}),e[17]=t,e[18]=a,e[19]=l,e[20]=d):d=e[20];const D=d;let o;e[21]!==x?(o=p.jsx(R,{children:p.jsx(w,{data:x,columnTitle:"Parent Organisation",dottedBorder:!0,noDots:!0})}),e[21]=x,e[22]=o):o=e[22];let f;return e[23]!==D||e[24]!==s||e[25]!==o?(f=p.jsx(F,{title:"NREN Parent Organisations",description:"Some NRENs are part of larger organisations, including Ministries or universities. These are shown in the table below. Only NRENs who are managed in this way are available to select.",category:v.Organisation,filter:D,data:s,filename:"nren_parent_organisations",children:o}),e[23]=D,e[24]=s,e[25]=o,e[26]=f):f=e[26],f}function C(e,t){const a=t.name;e[a]=a}export{q as default};
diff --git a/compendium_v2/static/PassiveMonitoring-NXmN_EjG.js b/compendium_v2/static/PassiveMonitoring-Bn2t9Pmf.js
similarity index 93%
rename from compendium_v2/static/PassiveMonitoring-NXmN_EjG.js
rename to compendium_v2/static/PassiveMonitoring-Bn2t9Pmf.js
index 937f03d8f579c4823eff0a0cec44352b3f7504b1..e36fef87d0e44027de4c476857aea2c53971d2aa 100644
--- a/compendium_v2/static/PassiveMonitoring-NXmN_EjG.js
+++ b/compendium_v2/static/PassiveMonitoring-Bn2t9Pmf.js
@@ -1 +1 @@
-import{c as Y,r as j,F as _,j as N,t as y,S as F}from"./index.js";import{u as T,g as k,D as w,F as A,f as C}from"./useData-Ct8E3VVL.js";import{P as D}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function z(){const e=Y.c(29),{filterSelection:t,setFilterSelection:c}=j.useContext(_),{data:h,years:x,nrens:g}=T("/api/passive-monitoring",c);let o,p;if(e[0]!==h||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=S=>t.selectedYears.includes(S.year)&&t.selectedNrens.includes(S.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],o=h.filter(u),p=k(o,"method",!0),e[0]=h,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=o,e[4]=p}else o=e[3],p=e[4];const v=p;let l;e[8]!==x?(l=[...x],e[8]=x,e[9]=l):l=e[9];let r;e[10]!==g?(r=g.values(),e[10]=g,e[11]=r):r=e[11];let i;e[12]!==r?(i=[...r],e[12]=r,e[13]=i):i=e[13];let a;e[14]!==l||e[15]!==i?(a={availableYears:l,availableNrens:i},e[14]=l,e[15]=i,e[16]=a):a=e[16];let m;e[17]!==t||e[18]!==c||e[19]!==a?(m=N.jsx(A,{filterOptions:a,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=a,e[20]=m):m=e[20];const P=m;let s,f;e[21]===Symbol.for("react.memo_cache_sentinel")?(s=["No monitoring occurs","SPAN ports","Passive optical TAPS","Both SPAN ports and passive optical TAPS"],f=new Map([[s[0],"null"],[s[1],"span_ports"],[s[2],"taps"],[s[3],"both"]]),e[21]=s,e[22]=f):(s=e[21],f=e[22]);const b=f;let n;e[23]!==v?(n=N.jsx(C,{children:N.jsx(D,{columns:s,dataLookup:v,columnLookup:b})}),e[23]=v,e[24]=n):n=e[24];let d;return e[25]!==P||e[26]!==o||e[27]!==n?(d=N.jsx(w,{title:y["passive-monitoring"],description:"The table below shows the methods NRENs use for the passive monitoring of international traffic.",category:F.Network,filter:P,data:o,filename:"passive_monitoring_nrens_per_year",children:n}),e[25]=P,e[26]=o,e[27]=n,e[28]=d):d=e[28],d}export{z as default};
+import{c as Y,r as j,F as _,j as N,t as y,S as F}from"./index.js";import{u as T,g as k,D as w,F as A,f as C}from"./useData-CYCBVZdC.js";import{P as D}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function z(){const e=Y.c(29),{filterSelection:t,setFilterSelection:c}=j.useContext(_),{data:h,years:x,nrens:g}=T("/api/passive-monitoring",c);let o,p;if(e[0]!==h||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=S=>t.selectedYears.includes(S.year)&&t.selectedNrens.includes(S.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],o=h.filter(u),p=k(o,"method",!0),e[0]=h,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=o,e[4]=p}else o=e[3],p=e[4];const v=p;let l;e[8]!==x?(l=[...x],e[8]=x,e[9]=l):l=e[9];let r;e[10]!==g?(r=g.values(),e[10]=g,e[11]=r):r=e[11];let i;e[12]!==r?(i=[...r],e[12]=r,e[13]=i):i=e[13];let a;e[14]!==l||e[15]!==i?(a={availableYears:l,availableNrens:i},e[14]=l,e[15]=i,e[16]=a):a=e[16];let m;e[17]!==t||e[18]!==c||e[19]!==a?(m=N.jsx(A,{filterOptions:a,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=a,e[20]=m):m=e[20];const P=m;let s,f;e[21]===Symbol.for("react.memo_cache_sentinel")?(s=["No monitoring occurs","SPAN ports","Passive optical TAPS","Both SPAN ports and passive optical TAPS"],f=new Map([[s[0],"null"],[s[1],"span_ports"],[s[2],"taps"],[s[3],"both"]]),e[21]=s,e[22]=f):(s=e[21],f=e[22]);const b=f;let n;e[23]!==v?(n=N.jsx(C,{children:N.jsx(D,{columns:s,dataLookup:v,columnLookup:b})}),e[23]=v,e[24]=n):n=e[24];let d;return e[25]!==P||e[26]!==o||e[27]!==n?(d=N.jsx(w,{title:y["passive-monitoring"],description:"The table below shows the methods NRENs use for the passive monitoring of international traffic.",category:F.Network,filter:P,data:o,filename:"passive_monitoring_nrens_per_year",children:n}),e[25]=P,e[26]=o,e[27]=n,e[28]=d):d=e[28],d}export{z as default};
diff --git a/compendium_v2/static/PertTeam-64HTdccQ.js b/compendium_v2/static/PertTeam-C-4MgsmN.js
similarity index 93%
rename from compendium_v2/static/PertTeam-64HTdccQ.js
rename to compendium_v2/static/PertTeam-C-4MgsmN.js
index 7aa7a12a7576dcf0262bb1241e3b89926464bca0..181b5c04c1e41780e877af0bff29f744a78155a2 100644
--- a/compendium_v2/static/PertTeam-64HTdccQ.js
+++ b/compendium_v2/static/PertTeam-C-4MgsmN.js
@@ -1,2 +1,2 @@
-import{c as E,r as _,F as b,j as N,t as g,S as k}from"./index.js";import{u as v,g as F,D as R,F as T,f as C}from"./useData-Ct8E3VVL.js";import{P as D}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function B(){const e=E.c(29),{filterSelection:t,setFilterSelection:c}=_.useContext(b),{data:x,years:P,nrens:Y}=v("/api/pert-team",c);let s,m;if(e[0]!==x||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=j=>t.selectedYears.includes(j.year)&&t.selectedNrens.includes(j.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=x.filter(u),m=F(s,"pert_team"),e[0]=x,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=m}else s=e[3],m=e[4];const h=m;let r,p;e[8]===Symbol.for("react.memo_cache_sentinel")?(r=["Yes","Planned","No"],p=new Map([[r[0],"yes"],[r[1],"planned"],[r[2],"no"]]),e[8]=r,e[9]=p):(r=e[8],p=e[9]);const y=p;let a;e[10]!==P?(a=[...P],e[10]=P,e[11]=a):a=e[11];let l;e[12]!==Y?(l=Y.values(),e[12]=Y,e[13]=l):l=e[13];let n;e[14]!==l?(n=[...l],e[14]=l,e[15]=n):n=e[15];let o;e[16]!==a||e[17]!==n?(o={availableYears:a,availableNrens:n},e[16]=a,e[17]=n,e[18]=o):o=e[18];let f;e[19]!==t||e[20]!==c||e[21]!==o?(f=N.jsx(T,{filterOptions:o,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=o,e[22]=f):f=e[22];const S=f;let i;e[23]!==h?(i=N.jsx(C,{children:N.jsx(D,{columns:r,columnLookup:y,dataLookup:h})}),e[23]=h,e[24]=i):i=e[24];let d;return e[25]!==S||e[26]!==s||e[27]!==i?(d=N.jsx(R,{title:g["pert-team"],description:`Some NRENs have an in-house Performance Enhancement Response Team, 
+import{c as E,r as _,F as b,j as N,t as g,S as k}from"./index.js";import{u as v,g as F,D as R,F as T,f as C}from"./useData-CYCBVZdC.js";import{P as D}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function B(){const e=E.c(29),{filterSelection:t,setFilterSelection:c}=_.useContext(b),{data:x,years:P,nrens:Y}=v("/api/pert-team",c);let s,m;if(e[0]!==x||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=j=>t.selectedYears.includes(j.year)&&t.selectedNrens.includes(j.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=x.filter(u),m=F(s,"pert_team"),e[0]=x,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=m}else s=e[3],m=e[4];const h=m;let r,p;e[8]===Symbol.for("react.memo_cache_sentinel")?(r=["Yes","Planned","No"],p=new Map([[r[0],"yes"],[r[1],"planned"],[r[2],"no"]]),e[8]=r,e[9]=p):(r=e[8],p=e[9]);const y=p;let a;e[10]!==P?(a=[...P],e[10]=P,e[11]=a):a=e[11];let l;e[12]!==Y?(l=Y.values(),e[12]=Y,e[13]=l):l=e[13];let n;e[14]!==l?(n=[...l],e[14]=l,e[15]=n):n=e[15];let o;e[16]!==a||e[17]!==n?(o={availableYears:a,availableNrens:n},e[16]=a,e[17]=n,e[18]=o):o=e[18];let f;e[19]!==t||e[20]!==c||e[21]!==o?(f=N.jsx(T,{filterOptions:o,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=o,e[22]=f):f=e[22];const S=f;let i;e[23]!==h?(i=N.jsx(C,{children:N.jsx(D,{columns:r,columnLookup:y,dataLookup:h})}),e[23]=h,e[24]=i):i=e[24];let d;return e[25]!==S||e[26]!==s||e[27]!==i?(d=N.jsx(R,{title:g["pert-team"],description:`Some NRENs have an in-house Performance Enhancement Response Team, 
             or PERT, to investigate network performance issues.`,category:k.Network,filter:S,data:s,filename:"pert_team_nrens_per_year",children:i}),e[25]=S,e[26]=s,e[27]=i,e[28]=d):d=e[28],d}export{B as default};
diff --git a/compendium_v2/static/Policy-DTXx03Vh.js b/compendium_v2/static/Policy-BdndWxZz.js
similarity index 96%
rename from compendium_v2/static/Policy-DTXx03Vh.js
rename to compendium_v2/static/Policy-BdndWxZz.js
index 0b3204c42e1c279b76170a9ab1f94f16cb58436a..905bb7e35bdd9c4e0fcd8b619cd0d366b9ea2f72 100644
--- a/compendium_v2/static/Policy-DTXx03Vh.js
+++ b/compendium_v2/static/Policy-BdndWxZz.js
@@ -1 +1 @@
-import{c as h,r as v,F as E,j as y,t as _,S as b}from"./index.js";import{u as g,q as j,k,i as S,D as q,F as C,f as F}from"./useData-Ct8E3VVL.js";import{N as R}from"./NrenYearTable-iS8aEX43.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function W(){const e=h.c(21),{filterSelection:t,setFilterSelection:n}=v.useContext(E),{data:a,nrens:c}=g("/api/policy",n);let i,o;if(e[0]!==a||e[1]!==t.selectedNrens){const D=a?j(a):[];let u;e[4]!==t.selectedNrens?(u=x=>t.selectedNrens.includes(x.nren),e[4]=t.selectedNrens,e[5]=u):u=e[5],i=D.filter(u);const P=k(i);o=S(P,T),e[0]=a,e[1]=t.selectedNrens,e[2]=i,e[3]=o}else i=e[2],o=e[3];const d=o;let p;e[6]===Symbol.for("react.memo_cache_sentinel")?(p=[],e[6]=p):p=e[6];let l;e[7]!==c?(l=c.values(),e[7]=c,e[8]=l):l=e[8];let s;e[9]!==l?(s={availableYears:p,availableNrens:[...l]},e[9]=l,e[10]=s):s=e[10];let f;e[11]!==t||e[12]!==n||e[13]!==s?(f=y.jsx(C,{filterOptions:s,filterSelection:t,setFilterSelection:n}),e[11]=t,e[12]=n,e[13]=s,e[14]=f):f=e[14];const N=f;let r;e[15]!==d?(r=y.jsx(F,{children:y.jsx(R,{data:d,columnTitle:"Policies",noDots:!0,dottedBorder:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=d,e[16]=r):r=e[16];let m;return e[17]!==N||e[18]!==i||e[19]!==r?(m=y.jsx(q,{title:_.policy,description:"The table shows links to the NRENs policies. We only include links from the most recent response from each NREN.",category:b.Policy,filter:N,data:i,filename:"nren_policies",children:r}),e[17]=N,e[18]=i,e[19]=r,e[20]=m):m=e[20],m}function T(e,t){[["acceptable_use","Acceptable Use Policy"],["connectivity","Connectivity Policy"],["data_protection","Data Protection Policy"],["environmental","Environmental Policy"],["equal_opportunity","Equal Opportunity Policy"],["gender_equality","Gender Equality Plan"],["privacy_notice","Privacy Notice"]].forEach(a=>{const[c,i]=a,o=t[c];o&&(e[i]=o)})}export{W as default};
+import{c as h,r as v,F as E,j as y,t as _,S as b}from"./index.js";import{u as g,q as j,k,i as S,D as q,F as C,f as F}from"./useData-CYCBVZdC.js";import{N as R}from"./NrenYearTable-RI8l8hwG.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function W(){const e=h.c(21),{filterSelection:t,setFilterSelection:n}=v.useContext(E),{data:a,nrens:c}=g("/api/policy",n);let i,o;if(e[0]!==a||e[1]!==t.selectedNrens){const D=a?j(a):[];let u;e[4]!==t.selectedNrens?(u=x=>t.selectedNrens.includes(x.nren),e[4]=t.selectedNrens,e[5]=u):u=e[5],i=D.filter(u);const P=k(i);o=S(P,T),e[0]=a,e[1]=t.selectedNrens,e[2]=i,e[3]=o}else i=e[2],o=e[3];const d=o;let p;e[6]===Symbol.for("react.memo_cache_sentinel")?(p=[],e[6]=p):p=e[6];let l;e[7]!==c?(l=c.values(),e[7]=c,e[8]=l):l=e[8];let s;e[9]!==l?(s={availableYears:p,availableNrens:[...l]},e[9]=l,e[10]=s):s=e[10];let f;e[11]!==t||e[12]!==n||e[13]!==s?(f=y.jsx(C,{filterOptions:s,filterSelection:t,setFilterSelection:n}),e[11]=t,e[12]=n,e[13]=s,e[14]=f):f=e[14];const N=f;let r;e[15]!==d?(r=y.jsx(F,{children:y.jsx(R,{data:d,columnTitle:"Policies",noDots:!0,dottedBorder:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=d,e[16]=r):r=e[16];let m;return e[17]!==N||e[18]!==i||e[19]!==r?(m=y.jsx(q,{title:_.policy,description:"The table shows links to the NRENs policies. We only include links from the most recent response from each NREN.",category:b.Policy,filter:N,data:i,filename:"nren_policies",children:r}),e[17]=N,e[18]=i,e[19]=r,e[20]=m):m=e[20],m}function T(e,t){[["acceptable_use","Acceptable Use Policy"],["connectivity","Connectivity Policy"],["data_protection","Data Protection Policy"],["environmental","Environmental Policy"],["equal_opportunity","Equal Opportunity Policy"],["gender_equality","Gender Equality Plan"],["privacy_notice","Privacy Notice"]].forEach(a=>{const[c,i]=a,o=t[c];o&&(e[i]=o)})}export{W as default};
diff --git a/compendium_v2/static/RemoteCampuses-DiA5hlnD.js b/compendium_v2/static/RemoteCampuses-CWuoHcc1.js
similarity index 98%
rename from compendium_v2/static/RemoteCampuses-DiA5hlnD.js
rename to compendium_v2/static/RemoteCampuses-CWuoHcc1.js
index 411c656318f444317f3a128369f17dd5422d5967..1e89b6e663745ca3bf0cc6cae50f6bceb274c71d 100644
--- a/compendium_v2/static/RemoteCampuses-DiA5hlnD.js
+++ b/compendium_v2/static/RemoteCampuses-CWuoHcc1.js
@@ -1 +1 @@
-import{c as S,j as n,r as D,F as R,t as E,S as g}from"./index.js";import{u as w,h as F,i as k,D as T,F as B,f as L}from"./useData-Ct8E3VVL.js";import{T as O}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";function $({data:e,dottedBorder:t=!1,columns:o}){return Array.from(e.entries()).map(([s,a])=>Array.from(a.entries()).map(([i,d],c)=>n.jsxs("tr",{className:t?"dotted-border":"",children:[n.jsx("td",{className:"pt-3 nren-column text-nowrap",children:c===0&&s}),n.jsx("td",{className:"pt-3 year-column",children:i}),Object.keys(o).map((r,l)=>n.jsx("td",{className:"pt-3 blue-column",children:d[r]},l))]},s+i)))}function A(e){const t=S.c(15),{data:o,dottedBorder:s,columns:a}=e;let i;t[0]===Symbol.for("react.memo_cache_sentinel")?(i=n.jsx("th",{className:"nren-column",children:n.jsx("span",{children:"NREN"})}),t[0]=i):i=t[0];let d;t[1]===Symbol.for("react.memo_cache_sentinel")?(d=n.jsx("th",{className:"year-column",children:n.jsx("span",{children:"Year"})}),t[1]=d):d=t[1];let c;t[2]!==a?(c=Object.values(a).map(P),t[2]=a,t[3]=c):c=t[3];let r;t[4]!==c?(r=n.jsx("thead",{children:n.jsxs("tr",{children:[i,d,c]})}),t[4]=c,t[5]=r):r=t[5];let l;t[6]!==a||t[7]!==o||t[8]!==s?(l=$({data:o,dottedBorder:s,columns:a}),t[6]=a,t[7]=o,t[8]=s,t[9]=l):l=t[9];let u;t[10]!==l?(u=n.jsx("tbody",{children:l}),t[10]=l,t[11]=u):u=t[11];let m;return t[12]!==r||t[13]!==u?(m=n.jsxs(O,{borderless:!0,className:"compendium-table",children:[r,u]}),t[12]=r,t[13]=u,t[14]=m):m=t[14],m}function P(e,t){return n.jsx("th",{className:"blue-column",children:n.jsx("span",{children:e})},t)}function Q(){const e=S.c(29);let t;e[0]===Symbol.for("react.memo_cache_sentinel")?(t=x=>!!x.remote_campus_connectivity,e[0]=t):t=e[0];const o=t,{filterSelection:s,setFilterSelection:a}=D.useContext(R),{data:i,years:d,nrens:c}=w("/api/remote-campuses",a,o);let r,l;if(e[1]!==i||e[2]!==s.selectedNrens||e[3]!==s.selectedYears){let x;e[6]!==s.selectedNrens||e[7]!==s.selectedYears?(x=C=>s.selectedYears.includes(C.year)&&s.selectedNrens.includes(C.nren),e[6]=s.selectedNrens,e[7]=s.selectedYears,e[8]=x):x=e[8],r=i.filter(x);const v=F(r);l=k(v,J),e[1]=i,e[2]=s.selectedNrens,e[3]=s.selectedYears,e[4]=r,e[5]=l}else r=e[4],l=e[5];const u=l;let m;e[9]!==d?(m=[...d],e[9]=d,e[10]=m):m=e[10];let f;e[11]!==c?(f=c.values(),e[11]=c,e[12]=f):f=e[12];let p;e[13]!==f?(p=[...f],e[13]=f,e[14]=p):p=e[14];let h;e[15]!==m||e[16]!==p?(h={availableYears:m,availableNrens:p},e[15]=m,e[16]=p,e[17]=h):h=e[17];let j;e[18]!==s||e[19]!==a||e[20]!==h?(j=n.jsx(B,{filterOptions:h,filterSelection:s,setFilterSelection:a}),e[18]=s,e[19]=a,e[20]=h,e[21]=j):j=e[21];const b=j;let N;e[22]===Symbol.for("react.memo_cache_sentinel")?(N={countries:"Countries with Remote Campuses",local_r_and_e_connection:"Local R&E Connection"},e[22]=N):N=e[22];const Y=N;let _;e[23]!==u?(_=n.jsx(L,{children:n.jsx(A,{data:u,columns:Y,dottedBorder:!0})}),e[23]=u,e[24]=_):_=e[24];let y;return e[25]!==b||e[26]!==r||e[27]!==_?(y=n.jsx(T,{title:E["remote-campuses"],description:"NRENs are asked whether they have remote campuses in other countries, and if so, to list the countries where they have remote campuses and whether they are connected to the local R&E network.",category:g.ConnectedUsers,filter:b,data:r,filename:"nren_remote_campuses",children:_}),e[25]=b,e[26]=r,e[27]=_,e[28]=y):y=e[28],y}function J(e,t){for(const o of t){if(!o.remote_campus_connectivity)continue;const s=o.connections.map(X).join(", ");e.countries=s,e.local_r_and_e_connection=o.connections.map(U).join(", ")}}function U(e){return e.local_r_and_e_connection?"Yes":"No"}function X(e){return e.country}export{Q as default};
+import{c as S,j as n,r as D,F as R,t as E,S as g}from"./index.js";import{u as w,h as F,i as k,D as T,F as B,f as L}from"./useData-CYCBVZdC.js";import{T as O}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";function $({data:e,dottedBorder:t=!1,columns:o}){return Array.from(e.entries()).map(([s,a])=>Array.from(a.entries()).map(([i,d],c)=>n.jsxs("tr",{className:t?"dotted-border":"",children:[n.jsx("td",{className:"pt-3 nren-column text-nowrap",children:c===0&&s}),n.jsx("td",{className:"pt-3 year-column",children:i}),Object.keys(o).map((r,l)=>n.jsx("td",{className:"pt-3 blue-column",children:d[r]},l))]},s+i)))}function A(e){const t=S.c(15),{data:o,dottedBorder:s,columns:a}=e;let i;t[0]===Symbol.for("react.memo_cache_sentinel")?(i=n.jsx("th",{className:"nren-column",children:n.jsx("span",{children:"NREN"})}),t[0]=i):i=t[0];let d;t[1]===Symbol.for("react.memo_cache_sentinel")?(d=n.jsx("th",{className:"year-column",children:n.jsx("span",{children:"Year"})}),t[1]=d):d=t[1];let c;t[2]!==a?(c=Object.values(a).map(P),t[2]=a,t[3]=c):c=t[3];let r;t[4]!==c?(r=n.jsx("thead",{children:n.jsxs("tr",{children:[i,d,c]})}),t[4]=c,t[5]=r):r=t[5];let l;t[6]!==a||t[7]!==o||t[8]!==s?(l=$({data:o,dottedBorder:s,columns:a}),t[6]=a,t[7]=o,t[8]=s,t[9]=l):l=t[9];let u;t[10]!==l?(u=n.jsx("tbody",{children:l}),t[10]=l,t[11]=u):u=t[11];let m;return t[12]!==r||t[13]!==u?(m=n.jsxs(O,{borderless:!0,className:"compendium-table",children:[r,u]}),t[12]=r,t[13]=u,t[14]=m):m=t[14],m}function P(e,t){return n.jsx("th",{className:"blue-column",children:n.jsx("span",{children:e})},t)}function Q(){const e=S.c(29);let t;e[0]===Symbol.for("react.memo_cache_sentinel")?(t=x=>!!x.remote_campus_connectivity,e[0]=t):t=e[0];const o=t,{filterSelection:s,setFilterSelection:a}=D.useContext(R),{data:i,years:d,nrens:c}=w("/api/remote-campuses",a,o);let r,l;if(e[1]!==i||e[2]!==s.selectedNrens||e[3]!==s.selectedYears){let x;e[6]!==s.selectedNrens||e[7]!==s.selectedYears?(x=C=>s.selectedYears.includes(C.year)&&s.selectedNrens.includes(C.nren),e[6]=s.selectedNrens,e[7]=s.selectedYears,e[8]=x):x=e[8],r=i.filter(x);const v=F(r);l=k(v,J),e[1]=i,e[2]=s.selectedNrens,e[3]=s.selectedYears,e[4]=r,e[5]=l}else r=e[4],l=e[5];const u=l;let m;e[9]!==d?(m=[...d],e[9]=d,e[10]=m):m=e[10];let f;e[11]!==c?(f=c.values(),e[11]=c,e[12]=f):f=e[12];let p;e[13]!==f?(p=[...f],e[13]=f,e[14]=p):p=e[14];let h;e[15]!==m||e[16]!==p?(h={availableYears:m,availableNrens:p},e[15]=m,e[16]=p,e[17]=h):h=e[17];let j;e[18]!==s||e[19]!==a||e[20]!==h?(j=n.jsx(B,{filterOptions:h,filterSelection:s,setFilterSelection:a}),e[18]=s,e[19]=a,e[20]=h,e[21]=j):j=e[21];const b=j;let N;e[22]===Symbol.for("react.memo_cache_sentinel")?(N={countries:"Countries with Remote Campuses",local_r_and_e_connection:"Local R&E Connection"},e[22]=N):N=e[22];const Y=N;let _;e[23]!==u?(_=n.jsx(L,{children:n.jsx(A,{data:u,columns:Y,dottedBorder:!0})}),e[23]=u,e[24]=_):_=e[24];let y;return e[25]!==b||e[26]!==r||e[27]!==_?(y=n.jsx(T,{title:E["remote-campuses"],description:"NRENs are asked whether they have remote campuses in other countries, and if so, to list the countries where they have remote campuses and whether they are connected to the local R&E network.",category:g.ConnectedUsers,filter:b,data:r,filename:"nren_remote_campuses",children:_}),e[25]=b,e[26]=r,e[27]=_,e[28]=y):y=e[28],y}function J(e,t){for(const o of t){if(!o.remote_campus_connectivity)continue;const s=o.connections.map(X).join(", ");e.countries=s,e.local_r_and_e_connection=o.connections.map(U).join(", ")}}function U(e){return e.local_r_and_e_connection?"Yes":"No"}function X(e){return e.country}export{Q as default};
diff --git a/compendium_v2/static/SecurityControls-TM-ptOes.js b/compendium_v2/static/SecurityControls-Ba4coYqK.js
similarity index 97%
rename from compendium_v2/static/SecurityControls-TM-ptOes.js
rename to compendium_v2/static/SecurityControls-Ba4coYqK.js
index b423e9f2d0262459685f0d36d80f03f82a10abb3..5543b7d363737372166971e3405d8ac13247c62c 100644
--- a/compendium_v2/static/SecurityControls-TM-ptOes.js
+++ b/compendium_v2/static/SecurityControls-Ba4coYqK.js
@@ -1,2 +1,2 @@
-import{c as T,r as E,F as L,S as A,j,t as I}from"./index.js";import{u as M,g as O,F as R,D as V,f as W}from"./useData-Ct8E3VVL.js";import{P as $}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function Z(){const e=T.c(51),{filterSelection:t,setFilterSelection:i}=E.useContext(L),{data:w,years:D,nrens:Y}=M("/api/security-controls",i);let s,S;if(e[0]!==w||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let r;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(r=P=>t.selectedYears.includes(P.year)&&t.selectedNrens.includes(P.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=r):r=e[7],s=w.filter(r),S=O(s,"security_control_descriptions"),e[0]=w,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=S}else s=e[3],S=e[4];const C=S;let l;e[8]!==D?(l=[...D],e[8]=D,e[9]=l):l=e[9];let o;e[10]!==Y?(o=Y.values(),e[10]=Y,e[11]=o):o=e[11];let n;e[12]!==o?(n=[...o],e[12]=o,e[13]=n):n=e[13];let a;e[14]!==l||e[15]!==n?(a={availableYears:l,availableNrens:n},e[14]=l,e[15]=n,e[16]=a):a=e[16];let b;e[17]!==t||e[18]!==i||e[19]!==a?(b=j.jsx(R,{filterOptions:a,filterSelection:t,setFilterSelection:i,coloredYears:!0}),e[17]=t,e[18]=i,e[19]=a,e[20]=b):b=e[20];const F=b;let c,u,m,p,f,d,y,g,h,N,x;if(e[21]!==F||e[22]!==s){const r={anti_virus:"Anti Virus",anti_spam:"Anti-Spam",firewall:"Firewall",ddos_mitigation:"DDoS mitigation",monitoring:"Network monitoring",ips_ids:"IPS/IDS",acl:"ACL",segmentation:"Network segmentation",integrity_checking:"Integrity checking"};p=new Map(Object.entries(r).map(q)),m=V,h=I["security-control"],N=`The table below shows the different security controls, such as anti-virus, integrity checkers, and systemic firewalls used by 
+import{c as T,r as E,F as L,S as A,j,t as I}from"./index.js";import{u as M,g as O,F as R,D as V,f as W}from"./useData-CYCBVZdC.js";import{P as $}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function Z(){const e=T.c(51),{filterSelection:t,setFilterSelection:i}=E.useContext(L),{data:w,years:D,nrens:Y}=M("/api/security-controls",i);let s,S;if(e[0]!==w||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let r;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(r=P=>t.selectedYears.includes(P.year)&&t.selectedNrens.includes(P.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=r):r=e[7],s=w.filter(r),S=O(s,"security_control_descriptions"),e[0]=w,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=S}else s=e[3],S=e[4];const C=S;let l;e[8]!==D?(l=[...D],e[8]=D,e[9]=l):l=e[9];let o;e[10]!==Y?(o=Y.values(),e[10]=Y,e[11]=o):o=e[11];let n;e[12]!==o?(n=[...o],e[12]=o,e[13]=n):n=e[13];let a;e[14]!==l||e[15]!==n?(a={availableYears:l,availableNrens:n},e[14]=l,e[15]=n,e[16]=a):a=e[16];let b;e[17]!==t||e[18]!==i||e[19]!==a?(b=j.jsx(R,{filterOptions:a,filterSelection:t,setFilterSelection:i,coloredYears:!0}),e[17]=t,e[18]=i,e[19]=a,e[20]=b):b=e[20];const F=b;let c,u,m,p,f,d,y,g,h,N,x;if(e[21]!==F||e[22]!==s){const r={anti_virus:"Anti Virus",anti_spam:"Anti-Spam",firewall:"Firewall",ddos_mitigation:"DDoS mitigation",monitoring:"Network monitoring",ips_ids:"IPS/IDS",acl:"ACL",segmentation:"Network segmentation",integrity_checking:"Integrity checking"};p=new Map(Object.entries(r).map(q)),m=V,h=I["security-control"],N=`The table below shows the different security controls, such as anti-virus, integrity checkers, and systemic firewalls used by 
             NRENs to protect their assets. Where 'other' controls are mentioned, hover over the marker for more information.`,x=A.Policy,f=F,d=s,y="security_control_nrens_per_year",u=W,c=$,g=Object.values(r),e[21]=F,e[22]=s,e[23]=c,e[24]=u,e[25]=m,e[26]=p,e[27]=f,e[28]=d,e[29]=y,e[30]=g,e[31]=h,e[32]=N,e[33]=x}else c=e[23],u=e[24],m=e[25],p=e[26],f=e[27],d=e[28],y=e[29],g=e[30],h=e[31],N=e[32],x=e[33];let _;e[34]!==c||e[35]!==p||e[36]!==C||e[37]!==g?(_=j.jsx(c,{columns:g,dataLookup:C,circle:!0,columnLookup:p}),e[34]=c,e[35]=p,e[36]=C,e[37]=g,e[38]=_):_=e[38];let k;e[39]!==u||e[40]!==_?(k=j.jsx(u,{children:_}),e[39]=u,e[40]=_,e[41]=k):k=e[41];let v;return e[42]!==m||e[43]!==f||e[44]!==d||e[45]!==y||e[46]!==k||e[47]!==h||e[48]!==N||e[49]!==x?(v=j.jsx(m,{title:h,description:N,category:x,filter:f,data:d,filename:y,children:k}),e[42]=m,e[43]=f,e[44]=d,e[45]=y,e[46]=k,e[47]=h,e[48]=N,e[49]=x,e[50]=v):v=e[50],v}function q(e){const[t,i]=e;return[i,t]}export{Z as default};
diff --git a/compendium_v2/static/ServiceLevelTargets-DMHnzoF5.js b/compendium_v2/static/ServiceLevelTargets-pvc5MWdl.js
similarity index 96%
rename from compendium_v2/static/ServiceLevelTargets-DMHnzoF5.js
rename to compendium_v2/static/ServiceLevelTargets-pvc5MWdl.js
index 3ec7608f5a2f10f44e3e6cc470a1a05b641669d1..05670067a87536ea186c2fb733c87a2b223416cb 100644
--- a/compendium_v2/static/ServiceLevelTargets-DMHnzoF5.js
+++ b/compendium_v2/static/ServiceLevelTargets-pvc5MWdl.js
@@ -1,2 +1,2 @@
-import{c as y,r as j,F,j as v,t as T,S as _}from"./index.js";import{u as E,g as L,D as P,F as w,f as C}from"./useData-Ct8E3VVL.js";import{P as D}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function A(){const e=y.c(29),{filterSelection:t,setFilterSelection:n}=j.useContext(F),{data:h,years:N,nrens:x}=E("/api/service-management",n);let s,f;if(e[0]!==h||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let p;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(p=Y=>t.selectedYears.includes(Y.year)&&t.selectedNrens.includes(Y.nren)&&Y.service_level_targets!==null,e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=p):p=e[7],s=h.filter(p),f=L(s,"service_level_targets"),e[0]=h,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=f}else s=e[3],f=e[4];const g=f;let l,d;e[8]===Symbol.for("react.memo_cache_sentinel")?(l=["Yes","No"],d=new Map([[l[0],"True"],[l[1],"False"]]),e[8]=l,e[9]=d):(l=e[8],d=e[9]);const b=d;let r;e[10]!==N?(r=[...N],e[10]=N,e[11]=r):r=e[11];let a;e[12]!==x?(a=x.values(),e[12]=x,e[13]=a):a=e[13];let i;e[14]!==a?(i=[...a],e[14]=a,e[15]=i):i=e[15];let o;e[16]!==r||e[17]!==i?(o={availableYears:r,availableNrens:i},e[16]=r,e[17]=i,e[18]=o):o=e[18];let m;e[19]!==t||e[20]!==n||e[21]!==o?(m=v.jsx(w,{filterOptions:o,filterSelection:t,setFilterSelection:n,coloredYears:!0}),e[19]=t,e[20]=n,e[21]=o,e[22]=m):m=e[22];const S=m;let c;e[23]!==g?(c=v.jsx(C,{children:v.jsx(D,{columns:l,columnLookup:b,dataLookup:g})}),e[23]=g,e[24]=c):c=e[24];let u;return e[25]!==S||e[26]!==s||e[27]!==c?(u=v.jsx(P,{title:T["service-level-targets"],description:`The table below shows which NRENs offer Service Levels Targets for their services. 
+import{c as y,r as j,F,j as v,t as T,S as _}from"./index.js";import{u as E,g as L,D as P,F as w,f as C}from"./useData-CYCBVZdC.js";import{P as D}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function A(){const e=y.c(29),{filterSelection:t,setFilterSelection:n}=j.useContext(F),{data:h,years:N,nrens:x}=E("/api/service-management",n);let s,f;if(e[0]!==h||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let p;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(p=Y=>t.selectedYears.includes(Y.year)&&t.selectedNrens.includes(Y.nren)&&Y.service_level_targets!==null,e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=p):p=e[7],s=h.filter(p),f=L(s,"service_level_targets"),e[0]=h,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=f}else s=e[3],f=e[4];const g=f;let l,d;e[8]===Symbol.for("react.memo_cache_sentinel")?(l=["Yes","No"],d=new Map([[l[0],"True"],[l[1],"False"]]),e[8]=l,e[9]=d):(l=e[8],d=e[9]);const b=d;let r;e[10]!==N?(r=[...N],e[10]=N,e[11]=r):r=e[11];let a;e[12]!==x?(a=x.values(),e[12]=x,e[13]=a):a=e[13];let i;e[14]!==a?(i=[...a],e[14]=a,e[15]=i):i=e[15];let o;e[16]!==r||e[17]!==i?(o={availableYears:r,availableNrens:i},e[16]=r,e[17]=i,e[18]=o):o=e[18];let m;e[19]!==t||e[20]!==n||e[21]!==o?(m=v.jsx(w,{filterOptions:o,filterSelection:t,setFilterSelection:n,coloredYears:!0}),e[19]=t,e[20]=n,e[21]=o,e[22]=m):m=e[22];const S=m;let c;e[23]!==g?(c=v.jsx(C,{children:v.jsx(D,{columns:l,columnLookup:b,dataLookup:g})}),e[23]=g,e[24]=c):c=e[24];let u;return e[25]!==S||e[26]!==s||e[27]!==c?(u=v.jsx(P,{title:T["service-level-targets"],description:`The table below shows which NRENs offer Service Levels Targets for their services. 
             If NRENs have never responded to this question in the survey, they are excluded. `,category:_.Policy,filter:S,data:s,filename:"service_level_targets",children:c}),e[25]=S,e[26]=s,e[27]=c,e[28]=u):u=e[28],u}export{A as default};
diff --git a/compendium_v2/static/ServiceManagementFramework-D-rGA4sI.js b/compendium_v2/static/ServiceManagementFramework-Cy_R2T5K.js
similarity index 93%
rename from compendium_v2/static/ServiceManagementFramework-D-rGA4sI.js
rename to compendium_v2/static/ServiceManagementFramework-Cy_R2T5K.js
index 8c9af4453e6f4a125aeb3a6fa11fb2669d8e0cfe..e0c871c6bfb18827b81416c4466a57c368f5b89a 100644
--- a/compendium_v2/static/ServiceManagementFramework-D-rGA4sI.js
+++ b/compendium_v2/static/ServiceManagementFramework-Cy_R2T5K.js
@@ -1,2 +1,2 @@
-import{c as b,r as F,F as S,j as h,t as j,S as _}from"./index.js";import{u as y,g as E,D as P,F as C,f as D}from"./useData-Ct8E3VVL.js";import{P as R}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function B(){const e=b.c(29),{filterSelection:t,setFilterSelection:c}=F.useContext(S),{data:v,years:N,nrens:w}=y("/api/service-management",c);let s,m;if(e[0]!==v||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=k=>t.selectedYears.includes(k.year)&&t.selectedNrens.includes(k.nren)&&k.service_management_framework!==null,e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=v.filter(u),m=E(s,"service_management_framework"),e[0]=v,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=m}else s=e[3],m=e[4];const g=m;let r,f;e[8]===Symbol.for("react.memo_cache_sentinel")?(r=["Yes","No"],f=new Map([[r[0],"True"],[r[1],"False"]]),e[8]=r,e[9]=f):(r=e[8],f=e[9]);const Y=f;let a;e[10]!==N?(a=[...N],e[10]=N,e[11]=a):a=e[11];let l;e[12]!==w?(l=w.values(),e[12]=w,e[13]=l):l=e[13];let i;e[14]!==l?(i=[...l],e[14]=l,e[15]=i):i=e[15];let o;e[16]!==a||e[17]!==i?(o={availableYears:a,availableNrens:i},e[16]=a,e[17]=i,e[18]=o):o=e[18];let p;e[19]!==t||e[20]!==c||e[21]!==o?(p=h.jsx(C,{filterOptions:o,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=o,e[22]=p):p=e[22];const x=p;let n;e[23]!==g?(n=h.jsx(D,{children:h.jsx(R,{columns:r,columnLookup:Y,dataLookup:g})}),e[23]=g,e[24]=n):n=e[24];let d;return e[25]!==x||e[26]!==s||e[27]!==n?(d=h.jsx(P,{title:j["service-management-framework"],description:`The chart below shows which NRENs operate a formal service management framework 
+import{c as b,r as F,F as S,j as h,t as j,S as _}from"./index.js";import{u as y,g as E,D as P,F as C,f as D}from"./useData-CYCBVZdC.js";import{P as R}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function B(){const e=b.c(29),{filterSelection:t,setFilterSelection:c}=F.useContext(S),{data:v,years:N,nrens:w}=y("/api/service-management",c);let s,m;if(e[0]!==v||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=k=>t.selectedYears.includes(k.year)&&t.selectedNrens.includes(k.nren)&&k.service_management_framework!==null,e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=v.filter(u),m=E(s,"service_management_framework"),e[0]=v,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=m}else s=e[3],m=e[4];const g=m;let r,f;e[8]===Symbol.for("react.memo_cache_sentinel")?(r=["Yes","No"],f=new Map([[r[0],"True"],[r[1],"False"]]),e[8]=r,e[9]=f):(r=e[8],f=e[9]);const Y=f;let a;e[10]!==N?(a=[...N],e[10]=N,e[11]=a):a=e[11];let l;e[12]!==w?(l=w.values(),e[12]=w,e[13]=l):l=e[13];let i;e[14]!==l?(i=[...l],e[14]=l,e[15]=i):i=e[15];let o;e[16]!==a||e[17]!==i?(o={availableYears:a,availableNrens:i},e[16]=a,e[17]=i,e[18]=o):o=e[18];let p;e[19]!==t||e[20]!==c||e[21]!==o?(p=h.jsx(C,{filterOptions:o,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=o,e[22]=p):p=e[22];const x=p;let n;e[23]!==g?(n=h.jsx(D,{children:h.jsx(R,{columns:r,columnLookup:Y,dataLookup:g})}),e[23]=g,e[24]=n):n=e[24];let d;return e[25]!==x||e[26]!==s||e[27]!==n?(d=h.jsx(P,{title:j["service-management-framework"],description:`The chart below shows which NRENs operate a formal service management framework 
             for all of their services. NRENs which have never answered this question cannot be selected.`,category:_.Policy,filter:x,data:s,filename:"service_management_framework",children:n}),e[25]=x,e[26]=s,e[27]=n,e[28]=d):d=e[28],d}export{B as default};
diff --git a/compendium_v2/static/Services-5TAXBWqD.js b/compendium_v2/static/Services-fP_6uX0f.js
similarity index 98%
rename from compendium_v2/static/Services-5TAXBWqD.js
rename to compendium_v2/static/Services-fP_6uX0f.js
index bed80b50919a6a833270c166851d9585faa23f27..c44d5ee3defe7e089d0207cd4bad2138804dea8e 100644
--- a/compendium_v2/static/Services-5TAXBWqD.js
+++ b/compendium_v2/static/Services-fP_6uX0f.js
@@ -1,4 +1,4 @@
-import{$ as se,c as U,j as s,r as ie,F as re,a0 as g,S as ae,t as N}from"./index.js";import{u as oe,g as le,F as ce,D as ne,f as de}from"./useData-Ct8E3VVL.js";import{T as me}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";function Q(v){return se({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"m10 15.586-3.293-3.293-1.414 1.414L10 18.414l9.707-9.707-1.414-1.414z"},child:[]}]})(v)}function pe(v){const e=U.c(9),{year:i,active:t,serviceInfo:l,tickServiceIndex:u,current:a}=v;let r="No additional information available";if(l!==void 0){const x=l.service_name;let n=l.product_name,d=l.official_description,m=l.additional_information;(n!=""||d!=""||m!="")&&(n=n||"N/A",d=d||"N/A",m=m||"N/A",r=x+`
+import{$ as se,c as U,j as s,r as ie,F as re,a0 as g,S as ae,t as N}from"./index.js";import{u as oe,g as le,F as ce,D as ne,f as de}from"./useData-CYCBVZdC.js";import{T as me}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";function Q(v){return se({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"m10 15.586-3.293-3.293-1.414 1.414L10 18.414l9.707-9.707-1.414-1.414z"},child:[]}]})(v)}function pe(v){const e=U.c(9),{year:i,active:t,serviceInfo:l,tickServiceIndex:u,current:a}=v;let r="No additional information available";if(l!==void 0){const x=l.service_name;let n=l.product_name,d=l.official_description,m=l.additional_information;(n!=""||d!=""||m!="")&&(n=n||"N/A",d=d||"N/A",m=m||"N/A",r=x+`
 `+n+`
 
 Description: `+d+`
diff --git a/compendium_v2/static/ServicesOffered-BQGRxlwg.js b/compendium_v2/static/ServicesOffered-C8SRGlPW.js
similarity index 97%
rename from compendium_v2/static/ServicesOffered-BQGRxlwg.js
rename to compendium_v2/static/ServicesOffered-C8SRGlPW.js
index 13b94184e9c42e8452e950faa24b5a40ab03d23f..10e6367ea32193d955f7708cec6cc1a4ba00fde5 100644
--- a/compendium_v2/static/ServicesOffered-BQGRxlwg.js
+++ b/compendium_v2/static/ServicesOffered-C8SRGlPW.js
@@ -1 +1 @@
-import{c as b,r as w,F as j,j as c,t as k,S as C,U as E}from"./index.js";import{u as Y,r as F,D as I,F as P,f as R}from"./useData-Ct8E3VVL.js";import{S as D}from"./ScrollableMatrix-Dxr22l4i.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function z(){const e=b.c(29),{filterSelection:t,setFilterSelection:n}=w.useContext(j),{data:h,years:g,nrens:v}=Y("/api/services-offered",n);let s,f;if(e[0]!==t.selectedNrens||e[1]!==t.selectedYears||e[2]!==h){let y;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(y=S=>t.selectedYears.includes(S.year)&&t.selectedNrens.includes(S.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=y):y=e[7],s=h.filter(y),f=F(s,["service_category"],"user_category"),e[0]=t.selectedNrens,e[1]=t.selectedYears,e[2]=h,e[3]=s,e[4]=f}else s=e[3],f=e[4];const x=f;let r;e[8]!==g?(r=[...g],e[8]=g,e[9]=r):r=e[9];let i;e[10]!==v?(i=v.values(),e[10]=v,e[11]=i):i=e[11];let o;e[12]!==i?(o=[...i],e[12]=i,e[13]=o):o=e[13];let a;e[14]!==r||e[15]!==o?(a={availableYears:r,availableNrens:o},e[14]=r,e[15]=o,e[16]=a):a=e[16];let d;e[17]!==t||e[18]!==n||e[19]!==a?(d=c.jsx(P,{filterOptions:a,filterSelection:t,setFilterSelection:n}),e[17]=t,e[18]=n,e[19]=a,e[20]=d):d=e[20];const N=d;let p;e[21]===Symbol.for("react.memo_cache_sentinel")?(p={"Identity/T&I":"identity",Multimedia:"multimedia","Professional services":"professional_services","Network services":"network_services",Collaboration:"collaboration",Security:"security","Storage and Hosting":"storage_and_hosting","ISP support":"isp_support"},e[21]=p):p=e[21];const _=p;let u;e[22]===Symbol.for("react.memo_cache_sentinel")?(u=c.jsx("span",{children:"The table below shows the different types of users served by NRENs. Selecting the institution type will expand the detail to show the categories of services offered by NRENs, with a tick indicating that the NREN offers a specific category of service to the type of user."}),e[22]=u):u=e[22];let l;e[23]!==x?(l=c.jsx(R,{children:c.jsx(D,{dataLookup:x,rowInfo:_,categoryLookup:E,isTickIcon:!0})}),e[23]=x,e[24]=l):l=e[24];let m;return e[25]!==N||e[26]!==s||e[27]!==l?(m=c.jsx(I,{title:k["services-offered"],description:u,category:C.Policy,filter:N,data:s,filename:"nren_services_offered",children:l}),e[25]=N,e[26]=s,e[27]=l,e[28]=m):m=e[28],m}export{z as default};
+import{c as b,r as w,F as j,j as c,t as k,S as C,U as E}from"./index.js";import{u as Y,r as F,D as I,F as P,f as R}from"./useData-CYCBVZdC.js";import{S as D}from"./ScrollableMatrix-Dxr22l4i.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function z(){const e=b.c(29),{filterSelection:t,setFilterSelection:n}=w.useContext(j),{data:h,years:g,nrens:v}=Y("/api/services-offered",n);let s,f;if(e[0]!==t.selectedNrens||e[1]!==t.selectedYears||e[2]!==h){let y;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(y=S=>t.selectedYears.includes(S.year)&&t.selectedNrens.includes(S.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=y):y=e[7],s=h.filter(y),f=F(s,["service_category"],"user_category"),e[0]=t.selectedNrens,e[1]=t.selectedYears,e[2]=h,e[3]=s,e[4]=f}else s=e[3],f=e[4];const x=f;let r;e[8]!==g?(r=[...g],e[8]=g,e[9]=r):r=e[9];let i;e[10]!==v?(i=v.values(),e[10]=v,e[11]=i):i=e[11];let o;e[12]!==i?(o=[...i],e[12]=i,e[13]=o):o=e[13];let a;e[14]!==r||e[15]!==o?(a={availableYears:r,availableNrens:o},e[14]=r,e[15]=o,e[16]=a):a=e[16];let d;e[17]!==t||e[18]!==n||e[19]!==a?(d=c.jsx(P,{filterOptions:a,filterSelection:t,setFilterSelection:n}),e[17]=t,e[18]=n,e[19]=a,e[20]=d):d=e[20];const N=d;let p;e[21]===Symbol.for("react.memo_cache_sentinel")?(p={"Identity/T&I":"identity",Multimedia:"multimedia","Professional services":"professional_services","Network services":"network_services",Collaboration:"collaboration",Security:"security","Storage and Hosting":"storage_and_hosting","ISP support":"isp_support"},e[21]=p):p=e[21];const _=p;let u;e[22]===Symbol.for("react.memo_cache_sentinel")?(u=c.jsx("span",{children:"The table below shows the different types of users served by NRENs. Selecting the institution type will expand the detail to show the categories of services offered by NRENs, with a tick indicating that the NREN offers a specific category of service to the type of user."}),e[22]=u):u=e[22];let l;e[23]!==x?(l=c.jsx(R,{children:c.jsx(D,{dataLookup:x,rowInfo:_,categoryLookup:E,isTickIcon:!0})}),e[23]=x,e[24]=l):l=e[24];let m;return e[25]!==N||e[26]!==s||e[27]!==l?(m=c.jsx(I,{title:k["services-offered"],description:u,category:C.Policy,filter:N,data:s,filename:"nren_services_offered",children:l}),e[25]=N,e[26]=s,e[27]=l,e[28]=m):m=e[28],m}export{z as default};
diff --git a/compendium_v2/static/SiemVendors-Ba9ZMN9z.js b/compendium_v2/static/SiemVendors-kLcSDwOx.js
similarity index 93%
rename from compendium_v2/static/SiemVendors-Ba9ZMN9z.js
rename to compendium_v2/static/SiemVendors-kLcSDwOx.js
index daf0e05bec1b67467d24b3bcc4b95bd67c24b9ad..8421eb0582939484928e8fe815767a3c9fcf7284 100644
--- a/compendium_v2/static/SiemVendors-Ba9ZMN9z.js
+++ b/compendium_v2/static/SiemVendors-kLcSDwOx.js
@@ -1 +1 @@
-import{c as Y,r as j,F as E,j as u,t as _,S as g}from"./index.js";import{u as k,g as C,D as F,F as D,f as P}from"./useData-Ct8E3VVL.js";import{P as R}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function $(){const e=Y.c(28),{filterSelection:t,setFilterSelection:n}=j.useContext(E),{data:x,years:N,nrens:S}=k("/api/siem-vendors",n);let s,c;if(e[0]!==x||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let p;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(p=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=p):p=e[7],s=x.filter(p),c=C(s,"vendor_names"),e[0]=x,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=c}else s=e[3],c=e[4];const b=c;let r;e[8]!==N?(r=[...N],e[8]=N,e[9]=r):r=e[9];let l;e[10]!==S?(l=S.values(),e[10]=S,e[11]=l):l=e[11];let a;e[12]!==l?(a=[...l],e[12]=l,e[13]=a):a=e[13];let i;e[14]!==r||e[15]!==a?(i={availableYears:r,availableNrens:a},e[14]=r,e[15]=a,e[16]=i):i=e[16];let d;e[17]!==t||e[18]!==n||e[19]!==i?(d=u.jsx(D,{filterOptions:i,filterSelection:t,setFilterSelection:n,coloredYears:!0}),e[17]=t,e[18]=n,e[19]=i,e[20]=d):d=e[20];const h=d;let m;e[21]===Symbol.for("react.memo_cache_sentinel")?(m=["Splunk","IBM Qradar","Exabeam","LogRythm","Securonix"],e[21]=m):m=e[21];const y=m;let o;e[22]!==b?(o=u.jsx(P,{children:u.jsx(R,{columns:y,dataLookup:b,circle:!0})}),e[22]=b,e[23]=o):o=e[23];let f;return e[24]!==h||e[25]!==s||e[26]!==o?(f=u.jsx(F,{title:_["siem-vendors"],description:"The table below shows the kinds of vendors of SIEM/SOC systems used by NRENs.",category:g.Network,filter:h,data:s,filename:"siem_vendor_nrens_per_year",children:o}),e[24]=h,e[25]=s,e[26]=o,e[27]=f):f=e[27],f}export{$ as default};
+import{c as Y,r as j,F as E,j as u,t as _,S as g}from"./index.js";import{u as k,g as C,D as F,F as D,f as P}from"./useData-CYCBVZdC.js";import{P as R}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function $(){const e=Y.c(28),{filterSelection:t,setFilterSelection:n}=j.useContext(E),{data:x,years:N,nrens:S}=k("/api/siem-vendors",n);let s,c;if(e[0]!==x||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let p;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(p=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=p):p=e[7],s=x.filter(p),c=C(s,"vendor_names"),e[0]=x,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=c}else s=e[3],c=e[4];const b=c;let r;e[8]!==N?(r=[...N],e[8]=N,e[9]=r):r=e[9];let l;e[10]!==S?(l=S.values(),e[10]=S,e[11]=l):l=e[11];let a;e[12]!==l?(a=[...l],e[12]=l,e[13]=a):a=e[13];let i;e[14]!==r||e[15]!==a?(i={availableYears:r,availableNrens:a},e[14]=r,e[15]=a,e[16]=i):i=e[16];let d;e[17]!==t||e[18]!==n||e[19]!==i?(d=u.jsx(D,{filterOptions:i,filterSelection:t,setFilterSelection:n,coloredYears:!0}),e[17]=t,e[18]=n,e[19]=i,e[20]=d):d=e[20];const h=d;let m;e[21]===Symbol.for("react.memo_cache_sentinel")?(m=["Splunk","IBM Qradar","Exabeam","LogRythm","Securonix"],e[21]=m):m=e[21];const y=m;let o;e[22]!==b?(o=u.jsx(P,{children:u.jsx(R,{columns:y,dataLookup:b,circle:!0})}),e[22]=b,e[23]=o):o=e[23];let f;return e[24]!==h||e[25]!==s||e[26]!==o?(f=u.jsx(F,{title:_["siem-vendors"],description:"The table below shows the kinds of vendors of SIEM/SOC systems used by NRENs.",category:g.Network,filter:h,data:s,filename:"siem_vendor_nrens_per_year",children:o}),e[24]=h,e[25]=s,e[26]=o,e[27]=f):f=e[27],f}export{$ as default};
diff --git a/compendium_v2/static/StaffGraph-DXD4Tgbx.js b/compendium_v2/static/StaffGraph-HNfHQ0pm.js
similarity index 94%
rename from compendium_v2/static/StaffGraph-DXD4Tgbx.js
rename to compendium_v2/static/StaffGraph-HNfHQ0pm.js
index 48c0d229998573b6e835ffedaba36cbe36acb3c4..4b938ea05f754acb15ee00f966d62c9b490bdb0b 100644
--- a/compendium_v2/static/StaffGraph-DXD4Tgbx.js
+++ b/compendium_v2/static/StaffGraph-HNfHQ0pm.js
@@ -1,4 +1,4 @@
-import{c as $,r as B,F as A,j as x,S as M,t as R}from"./index.js";import{B as P}from"./index-C4Nuqrw6.js";import{C as g,a as q,L as W,B as G,p as V,c as z,d as H,u as J,l as K,D as Q,F as U}from"./useData-Ct8E3VVL.js";import{h as X,W as Z}from"./HTMLLegendPlugin-sjJV-MGB.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";g.register(q,W,G,V,z,H);const I={maintainAspectRatio:!1,animation:{duration:0},plugins:{htmlLegend:{containerIDs:["legendtop","legendbottom"]},legend:{display:!1},tooltip:{callbacks:{label:function(t){let e=t.dataset.label||"";return t.parsed.x!==null&&(e+=`: ${t.parsed.x}%`),e}}}},scales:{x:{position:"top",stacked:!0,ticks:{callback:(t,e)=>`${e*10}%`}},x2:{ticks:{callback:t=>typeof t=="number"?`${t}%`:t},grid:{drawOnChartArea:!1},afterDataLimits:function(t){const e=Object.keys(g.instances);let r=-999999,s=999999;for(const n of e)g.instances[n]&&t.chart.scales.x2&&(s=Math.min(g.instances[n].scales.x.min,s),r=Math.max(g.instances[n].scales.x.max,r));t.chart.scales.x2.options.min=s,t.chart.scales.x2.options.max=r,t.chart.scales.x2.min=s,t.chart.scales.x2.max=r}},y:{stacked:!0,ticks:{autoSkip:!1}}},indexAxis:"y"};function ce(t){const e=$.c(39),{roles:r}=t,s=r===void 0?!1:r;let n;e[0]!==s?(n=function(i){return s&&i.technical_fte>0&&i.non_technical_fte>0||!s&&i.permanent_fte>0&&i.subcontracted_fte>0},e[0]=s,e[1]=n):n=e[1];const Y=n,{filterSelection:a,setFilterSelection:y}=B.useContext(A),{data:k,years:S,nrens:w}=J("/api/staff",y,Y);let l,b;if(e[2]!==k||e[3]!==a.selectedNrens||e[4]!==a.selectedYears||e[5]!==s){let u;e[8]!==a.selectedNrens||e[9]!==a.selectedYears?(u=i=>a.selectedYears.includes(i.year)&&a.selectedNrens.includes(i.nren),e[8]=a.selectedNrens,e[9]=a.selectedYears,e[10]=u):u=e[10],l=k.filter(u),b=K(l,s,a.selectedYears[0]),e[2]=k,e[3]=a.selectedNrens,e[4]=a.selectedYears,e[5]=s,e[6]=l,e[7]=b}else l=e[6],b=e[7];const F=b;let c;e[11]!==S?(c=[...S],e[11]=S,e[12]=c):c=e[12];let o;e[13]!==w?(o=w.values(),e[13]=w,e[14]=o):o=e[14];let f;e[15]!==o?(f=[...o],e[15]=o,e[16]=f):f=e[16];let d;e[17]!==c||e[18]!==f?(d={availableYears:c,availableNrens:f},e[17]=c,e[18]=f,e[19]=d):d=e[19];let N;e[20]!==a||e[21]!==y||e[22]!==d?(N=x.jsx(U,{max1year:!0,filterOptions:d,filterSelection:a,setFilterSelection:y}),e[20]=a,e[21]=y,e[22]=d,e[23]=N):N=e[23];const T=N,L=l.length,O=Math.max(L*1.5,20),v=s?R.roles:R.employment,C=s?`The graph shows division of staff FTEs (Full Time Equivalents) between technical and non-techical role per NREN.
+import{c as $,r as B,F as A,j as x,S as M,t as R}from"./index.js";import{B as P}from"./index-BfhfJiKe.js";import{C as g,a as q,L as W,B as G,p as V,c as z,d as H,u as J,l as K,D as Q,F as U}from"./useData-CYCBVZdC.js";import{h as X,W as Z}from"./HTMLLegendPlugin-Cg92GHTT.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";g.register(q,W,G,V,z,H);const I={maintainAspectRatio:!1,animation:{duration:0},plugins:{htmlLegend:{containerIDs:["legendtop","legendbottom"]},legend:{display:!1},tooltip:{callbacks:{label:function(t){let e=t.dataset.label||"";return t.parsed.x!==null&&(e+=`: ${t.parsed.x}%`),e}}}},scales:{x:{position:"top",stacked:!0,ticks:{callback:(t,e)=>`${e*10}%`}},x2:{ticks:{callback:t=>typeof t=="number"?`${t}%`:t},grid:{drawOnChartArea:!1},afterDataLimits:function(t){const e=Object.keys(g.instances);let r=-999999,s=999999;for(const n of e)g.instances[n]&&t.chart.scales.x2&&(s=Math.min(g.instances[n].scales.x.min,s),r=Math.max(g.instances[n].scales.x.max,r));t.chart.scales.x2.options.min=s,t.chart.scales.x2.options.max=r,t.chart.scales.x2.min=s,t.chart.scales.x2.max=r}},y:{stacked:!0,ticks:{autoSkip:!1}}},indexAxis:"y"};function ce(t){const e=$.c(39),{roles:r}=t,s=r===void 0?!1:r;let n;e[0]!==s?(n=function(i){return s&&i.technical_fte>0&&i.non_technical_fte>0||!s&&i.permanent_fte>0&&i.subcontracted_fte>0},e[0]=s,e[1]=n):n=e[1];const Y=n,{filterSelection:a,setFilterSelection:y}=B.useContext(A),{data:k,years:S,nrens:w}=J("/api/staff",y,Y);let l,b;if(e[2]!==k||e[3]!==a.selectedNrens||e[4]!==a.selectedYears||e[5]!==s){let u;e[8]!==a.selectedNrens||e[9]!==a.selectedYears?(u=i=>a.selectedYears.includes(i.year)&&a.selectedNrens.includes(i.nren),e[8]=a.selectedNrens,e[9]=a.selectedYears,e[10]=u):u=e[10],l=k.filter(u),b=K(l,s,a.selectedYears[0]),e[2]=k,e[3]=a.selectedNrens,e[4]=a.selectedYears,e[5]=s,e[6]=l,e[7]=b}else l=e[6],b=e[7];const F=b;let c;e[11]!==S?(c=[...S],e[11]=S,e[12]=c):c=e[12];let o;e[13]!==w?(o=w.values(),e[13]=w,e[14]=o):o=e[14];let f;e[15]!==o?(f=[...o],e[15]=o,e[16]=f):f=e[16];let d;e[17]!==c||e[18]!==f?(d={availableYears:c,availableNrens:f},e[17]=c,e[18]=f,e[19]=d):d=e[19];let N;e[20]!==a||e[21]!==y||e[22]!==d?(N=x.jsx(U,{max1year:!0,filterOptions:d,filterSelection:a,setFilterSelection:y}),e[20]=a,e[21]=y,e[22]=d,e[23]=N):N=e[23];const T=N,L=l.length,O=Math.max(L*1.5,20),v=s?R.roles:R.employment,C=s?`The graph shows division of staff FTEs (Full Time Equivalents) between technical and non-techical role per NREN.
         The exact figures of how many FTEs are dedicated to these two different functional areas can be accessed by downloading the data in either CSV or Excel format`:`The graph shows the percentage of NREN staff who are permanent, and those who are subcontracted.
         The structures and models of NRENs differ across the community, which is reflected in the types of employment offered.
         The NRENs are asked to provide the Full Time Equivalents (FTEs) rather absolute numbers of staff.`,j=s?"roles_of_nren_employees":"types_of_employment_for_nrens",D=`${O}rem`;let m;e[24]!==D?(m={height:D},e[24]=D,e[25]=m):m=e[25];let _;e[26]===Symbol.for("react.memo_cache_sentinel")?(_=[X],e[26]=_):_=e[26];let h;e[27]!==F?(h=x.jsx(P,{data:F,options:I,plugins:_}),e[27]=F,e[28]=h):h=e[28];let p;e[29]!==m||e[30]!==h?(p=x.jsx(Z,{children:x.jsx("div",{className:"chart-container",style:m,children:h})}),e[29]=m,e[30]=h,e[31]=p):p=e[31];let E;return e[32]!==C||e[33]!==j||e[34]!==T||e[35]!==l||e[36]!==p||e[37]!==v?(E=x.jsx(Q,{title:v,description:C,category:M.Organisation,filter:T,data:l,filename:j,children:p}),e[32]=C,e[33]=j,e[34]=T,e[35]=l,e[36]=p,e[37]=v,e[38]=E):E=e[38],E}export{ce as default};
diff --git a/compendium_v2/static/StaffGraphAbsolute-A86Vah2E.js b/compendium_v2/static/StaffGraphAbsolute-Bq1qlgS8.js
similarity index 90%
rename from compendium_v2/static/StaffGraphAbsolute-A86Vah2E.js
rename to compendium_v2/static/StaffGraphAbsolute-Bq1qlgS8.js
index af2a80312b16173cc549fe485fe804a5f58a408e..dac13807a644407cc65785b8714ee218ab2d2c9b 100644
--- a/compendium_v2/static/StaffGraphAbsolute-A86Vah2E.js
+++ b/compendium_v2/static/StaffGraphAbsolute-Bq1qlgS8.js
@@ -1 +1 @@
-import{c as D,r as Y,F as B,j as d,S as T,t as P}from"./index.js";import{B as A}from"./index-C4Nuqrw6.js";import{C as O,a as q,L,B as $,p as k,c as G,d as M,u as W,m as z,D as H,F as I,f as J}from"./useData-Ct8E3VVL.js";import{p as K}from"./chartjs-plugin-datalabels.esm-BI98Iz1j.js";import{a as Q}from"./charthelpers-DmM6tvdh.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";O.register(q,L,$,k,G,M);function re(){const e=D.c(38),{filterSelection:t,setFilterSelection:a}=Y.useContext(B),{data:b,years:p,nrens:u}=W("/api/staff",a);let i,n,s,g;if(e[0]!==b||e[1]!==t||e[2]!==u||e[3]!==a||e[4]!==p){let E;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(E=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=E):E=e[11],s=b.filter(E),n=z(s,t.selectedYears);let c;e[12]!==p?(c=[...p],e[12]=p,e[13]=c):c=e[13];let f;e[14]!==u?(f=u.values(),e[14]=u,e[15]=f):f=e[15];let m;e[16]!==f?(m=[...f],e[16]=f,e[17]=m):m=e[17];let h;e[18]!==c||e[19]!==m?(h={availableYears:c,availableNrens:m},e[18]=c,e[19]=m,e[20]=h):h=e[20];let S;e[21]!==t||e[22]!==a||e[23]!==h?(S=d.jsx(I,{filterOptions:h,filterSelection:t,setFilterSelection:a}),e[21]=t,e[22]=a,e[23]=h,e[24]=S):S=e[24],i=S,g=Array.from(new Set(s.map(U))),e[0]=b,e[1]=t,e[2]=u,e[3]=a,e[4]=p,e[5]=i,e[6]=n,e[7]=s,e[8]=g}else i=e[5],n=e[6],s=e[7],g=e[8];const R=g.length,w=Math.max(R*t.selectedYears.length*1.5+5,50),C=P["employee-count"],F='The graph shows the total number of employees (in FTEs) at each NREN. When filling in the survey, NRENs are asked about the number of staff engaged (whether permanent or subcontracted) in NREN activities. Please note that diversity within the NREN community means that there is not one single definition of what constitutes "NREN activities". Therefore due to differences in how their organisations are arranged, and the relationship, in some cases, with parent organisations, there can be inconsistencies in how NRENs approach this question.';let N;e[25]===Symbol.for("react.memo_cache_sentinel")?(N=Q({tooltipPrefix:"FTEs",title:"Full-Time Equivalents"}),e[25]=N):N=e[25];const j=N,_=`${w}rem`;let r;e[26]!==_?(r={height:_},e[26]=_,e[27]=r):r=e[27];let x;e[28]===Symbol.for("react.memo_cache_sentinel")?(x=[K],e[28]=x):x=e[28];let l;e[29]!==n?(l=d.jsx(A,{data:n,options:j,plugins:x}),e[29]=n,e[30]=l):l=e[30];let o;e[31]!==r||e[32]!==l?(o=d.jsx(J,{children:d.jsx("div",{className:"chart-container",style:r,children:l})}),e[31]=r,e[32]=l,e[33]=o):o=e[33];let y;return e[34]!==i||e[35]!==s||e[36]!==o?(y=d.jsx(H,{title:C,description:F,category:T.Organisation,filter:i,data:s,filename:"number_of_nren_employees",children:o}),e[34]=i,e[35]=s,e[36]=o,e[37]=y):y=e[37],y}function U(e){return e.nren}export{re as default};
+import{c as D,r as Y,F as B,j as d,S as T,t as P}from"./index.js";import{B as A}from"./index-BfhfJiKe.js";import{C as O,a as q,L,B as $,p as k,c as G,d as M,u as W,m as z,D as H,F as I,f as J}from"./useData-CYCBVZdC.js";import{p as K}from"./chartjs-plugin-datalabels.esm-CzQRWEly.js";import{a as Q}from"./charthelpers-CdmocpOu.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";O.register(q,L,$,k,G,M);function re(){const e=D.c(38),{filterSelection:t,setFilterSelection:a}=Y.useContext(B),{data:b,years:p,nrens:u}=W("/api/staff",a);let i,n,s,g;if(e[0]!==b||e[1]!==t||e[2]!==u||e[3]!==a||e[4]!==p){let E;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(E=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=E):E=e[11],s=b.filter(E),n=z(s,t.selectedYears);let c;e[12]!==p?(c=[...p],e[12]=p,e[13]=c):c=e[13];let f;e[14]!==u?(f=u.values(),e[14]=u,e[15]=f):f=e[15];let m;e[16]!==f?(m=[...f],e[16]=f,e[17]=m):m=e[17];let h;e[18]!==c||e[19]!==m?(h={availableYears:c,availableNrens:m},e[18]=c,e[19]=m,e[20]=h):h=e[20];let S;e[21]!==t||e[22]!==a||e[23]!==h?(S=d.jsx(I,{filterOptions:h,filterSelection:t,setFilterSelection:a}),e[21]=t,e[22]=a,e[23]=h,e[24]=S):S=e[24],i=S,g=Array.from(new Set(s.map(U))),e[0]=b,e[1]=t,e[2]=u,e[3]=a,e[4]=p,e[5]=i,e[6]=n,e[7]=s,e[8]=g}else i=e[5],n=e[6],s=e[7],g=e[8];const R=g.length,w=Math.max(R*t.selectedYears.length*1.5+5,50),C=P["employee-count"],F='The graph shows the total number of employees (in FTEs) at each NREN. When filling in the survey, NRENs are asked about the number of staff engaged (whether permanent or subcontracted) in NREN activities. Please note that diversity within the NREN community means that there is not one single definition of what constitutes "NREN activities". Therefore due to differences in how their organisations are arranged, and the relationship, in some cases, with parent organisations, there can be inconsistencies in how NRENs approach this question.';let N;e[25]===Symbol.for("react.memo_cache_sentinel")?(N=Q({tooltipPrefix:"FTEs",title:"Full-Time Equivalents"}),e[25]=N):N=e[25];const j=N,_=`${w}rem`;let r;e[26]!==_?(r={height:_},e[26]=_,e[27]=r):r=e[27];let x;e[28]===Symbol.for("react.memo_cache_sentinel")?(x=[K],e[28]=x):x=e[28];let l;e[29]!==n?(l=d.jsx(A,{data:n,options:j,plugins:x}),e[29]=n,e[30]=l):l=e[30];let o;e[31]!==r||e[32]!==l?(o=d.jsx(J,{children:d.jsx("div",{className:"chart-container",style:r,children:l})}),e[31]=r,e[32]=l,e[33]=o):o=e[33];let y;return e[34]!==i||e[35]!==s||e[36]!==o?(y=d.jsx(H,{title:C,description:F,category:T.Organisation,filter:i,data:s,filename:"number_of_nren_employees",children:o}),e[34]=i,e[35]=s,e[36]=o,e[37]=y):y=e[37],y}function U(e){return e.nren}export{re as default};
diff --git a/compendium_v2/static/SubOrganisation-ldENjIwX.js b/compendium_v2/static/SubOrganisation-CXMlieI0.js
similarity index 96%
rename from compendium_v2/static/SubOrganisation-ldENjIwX.js
rename to compendium_v2/static/SubOrganisation-CXMlieI0.js
index 429f596e54b04cf7319b8cb15a6989d4d8dd06ba..ee538ce02309c9e9da273bffb67badb93bbd57ed 100644
--- a/compendium_v2/static/SubOrganisation-ldENjIwX.js
+++ b/compendium_v2/static/SubOrganisation-CXMlieI0.js
@@ -1 +1 @@
-import{c as Y,r as y,F as C,j as p,t as S,S as j}from"./index.js";import{u as v,h as F,i as E,D as R,F as T,f as O}from"./useData-Ct8E3VVL.js";import{N as P}from"./NrenYearTable-iS8aEX43.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function A(){const e=Y.c(27),{filterSelection:t,setFilterSelection:s}=y.useContext(C),{data:r,years:g,nrens:h}=v("/api/sub-organizations",s);let a,d;if(e[0]!==r||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],a=r.filter(u);const D=F(a);d=E(D,$),e[0]=r,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=a,e[4]=d}else a=e[3],d=e[4];const x=d;let n;e[8]!==g?(n=[...g],e[8]=g,e[9]=n):n=e[9];let o;e[10]!==h?(o=h.values(),e[10]=h,e[11]=o):o=e[11];let i;e[12]!==o?(i=[...o],e[12]=o,e[13]=i):i=e[13];let l;e[14]!==n||e[15]!==i?(l={availableYears:n,availableNrens:i},e[14]=n,e[15]=i,e[16]=l):l=e[16];let f;e[17]!==t||e[18]!==s||e[19]!==l?(f=p.jsx(T,{filterOptions:l,filterSelection:t,setFilterSelection:s}),e[17]=t,e[18]=s,e[19]=l,e[20]=f):f=e[20];const N=f;let c;e[21]!==x?(c=p.jsx(O,{children:p.jsx(P,{data:x,columnTitle:"Suborganisation and Role",dottedBorder:!0})}),e[21]=x,e[22]=c):c=e[22];let m;return e[23]!==N||e[24]!==a||e[25]!==c?(m=p.jsx(R,{title:S.suborganisations,description:"NRENs are asked whether they have any sub-organisations, and to give the name and role of these organisations. These organisations can include HPC centres or IDC federations, amongst many others.",category:j.Organisation,filter:N,data:a,filename:"nren_suborganisations",children:c}),e[23]=N,e[24]=a,e[25]=c,e[26]=m):m=e[26],m}function $(e,t){for(const s of t.sort(k)){const r=`${s.name} (${s.role})`;e[r]=r}}function k(e,t){return e.name.localeCompare(t.name)}export{A as default};
+import{c as Y,r as y,F as C,j as p,t as S,S as j}from"./index.js";import{u as v,h as F,i as E,D as R,F as T,f as O}from"./useData-CYCBVZdC.js";import{N as P}from"./NrenYearTable-RI8l8hwG.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function A(){const e=Y.c(27),{filterSelection:t,setFilterSelection:s}=y.useContext(C),{data:r,years:g,nrens:h}=v("/api/sub-organizations",s);let a,d;if(e[0]!==r||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],a=r.filter(u);const D=F(a);d=E(D,$),e[0]=r,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=a,e[4]=d}else a=e[3],d=e[4];const x=d;let n;e[8]!==g?(n=[...g],e[8]=g,e[9]=n):n=e[9];let o;e[10]!==h?(o=h.values(),e[10]=h,e[11]=o):o=e[11];let i;e[12]!==o?(i=[...o],e[12]=o,e[13]=i):i=e[13];let l;e[14]!==n||e[15]!==i?(l={availableYears:n,availableNrens:i},e[14]=n,e[15]=i,e[16]=l):l=e[16];let f;e[17]!==t||e[18]!==s||e[19]!==l?(f=p.jsx(T,{filterOptions:l,filterSelection:t,setFilterSelection:s}),e[17]=t,e[18]=s,e[19]=l,e[20]=f):f=e[20];const N=f;let c;e[21]!==x?(c=p.jsx(O,{children:p.jsx(P,{data:x,columnTitle:"Suborganisation and Role",dottedBorder:!0})}),e[21]=x,e[22]=c):c=e[22];let m;return e[23]!==N||e[24]!==a||e[25]!==c?(m=p.jsx(R,{title:S.suborganisations,description:"NRENs are asked whether they have any sub-organisations, and to give the name and role of these organisations. These organisations can include HPC centres or IDC federations, amongst many others.",category:j.Organisation,filter:N,data:a,filename:"nren_suborganisations",children:c}),e[23]=N,e[24]=a,e[25]=c,e[26]=m):m=e[26],m}function $(e,t){for(const s of t.sort(k)){const r=`${s.name} (${s.role})`;e[r]=r}}function k(e,t){return e.name.localeCompare(t.name)}export{A as default};
diff --git a/compendium_v2/static/TrafficRatio-p8ISc0n1.js b/compendium_v2/static/TrafficRatio-BkOFtVPl.js
similarity index 93%
rename from compendium_v2/static/TrafficRatio-p8ISc0n1.js
rename to compendium_v2/static/TrafficRatio-BkOFtVPl.js
index c46e6220b14b8ab87a8069362a76cfa5d87c61ae..a78531515fa2271f11be6682d205d273f121f6e3 100644
--- a/compendium_v2/static/TrafficRatio-p8ISc0n1.js
+++ b/compendium_v2/static/TrafficRatio-BkOFtVPl.js
@@ -1 +1 @@
-import{c as C,r as L,F as E,j as x,S as F,t as Y}from"./index.js";import{B as $}from"./index-C4Nuqrw6.js";import{C as g,a as v,L as A,B,p as O,c as M,d as P,u as T,N as W,D as q,F as z}from"./useData-Ct8E3VVL.js";import{h as G,W as H}from"./HTMLLegendPlugin-sjJV-MGB.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";g.register(v,A,B,O,M,P);const J={maintainAspectRatio:!1,animation:{duration:0},plugins:{htmlLegend:{containerIDs:["legendtop","legendbottom"]},legend:{display:!1},tooltip:{callbacks:{label:function(e){let t=e.dataset.label||"";return e.parsed.x!==null&&(t+=`: ${e.parsed.x}%`),t}}}},scales:{x:{position:"top",stacked:!0,ticks:{callback:(e,t)=>`${t*10}%`}},x2:{ticks:{callback:e=>typeof e=="number"?`${e}%`:e},grid:{drawOnChartArea:!1},afterDataLimits:function(e){const t=Object.keys(g.instances);let a=-999999,i=999999;for(const s of t)g.instances[s]&&e.chart.scales.x2&&(i=Math.min(g.instances[s].scales.x.min,i),a=Math.max(g.instances[s].scales.x.max,a));e.chart.scales.x2.options.min=i,e.chart.scales.x2.options.max=a,e.chart.scales.x2.min=i,e.chart.scales.x2.max=a}},y:{stacked:!0,ticks:{autoSkip:!1}}},indexAxis:"y"};function ie(){const e=C.c(37),{filterSelection:t,setFilterSelection:a}=L.useContext(E),{data:i,years:s,nrens:n}=T("/api/traffic-ratio",a);let l,r,y,c;if(e[0]!==t||e[1]!==n||e[2]!==a||e[3]!==i||e[4]!==s){let b;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(b=S=>t.selectedYears.includes(S.year)&&t.selectedNrens.includes(S.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=b):b=e[11],r=i.filter(b),c=W(r,t.selectedYears[0]);let d;e[12]!==s?(d=[...s],e[12]=s,e[13]=d):d=e[13];let p;e[14]!==n?(p=n.values(),e[14]=n,e[15]=p):p=e[15];let u;e[16]!==p?(u=[...p],e[16]=p,e[17]=u):u=e[17];let h;e[18]!==d||e[19]!==u?(h={availableYears:d,availableNrens:u},e[18]=d,e[19]=u,e[20]=h):h=e[20];let _;e[21]!==t||e[22]!==a||e[23]!==h?(_=x.jsx(z,{max1year:!0,filterOptions:h,filterSelection:t,setFilterSelection:a}),e[21]=t,e[22]=a,e[23]=h,e[24]=_):_=e[24],l=_,y=Array.from(new Set(r.map(Q))).map(S=>n.get(S)).filter(K),e[0]=t,e[1]=n,e[2]=a,e[3]=i,e[4]=s,e[5]=l,e[6]=r,e[7]=y,e[8]=c}else l=e[5],r=e[6],y=e[7],c=e[8];const j=y.length,R=Math.max(j*1.5,20),w=Y["traffic-ratio"],D=`${R}rem`;let o;e[25]!==D?(o={height:D},e[25]=D,e[26]=o):o=e[26];let k;e[27]===Symbol.for("react.memo_cache_sentinel")?(k=[G],e[27]=k):k=e[27];let f;e[28]!==c?(f=x.jsx($,{data:c,options:J,plugins:k}),e[28]=c,e[29]=f):f=e[29];let m;e[30]!==o||e[31]!==f?(m=x.jsx(H,{children:x.jsx("div",{className:"chart-container",style:o,children:f})}),e[30]=o,e[31]=f,e[32]=m):m=e[32];let N;return e[33]!==l||e[34]!==r||e[35]!==m?(N=x.jsx(q,{title:w,description:"The graph shows the ratio of commodity versus research and education traffic in NREN networks",category:F.Network,filter:l,data:r,filename:"types_of_traffic_in_nren_networks",children:m}),e[33]=l,e[34]=r,e[35]=m,e[36]=N):N=e[36],N}function K(e){return!!e}function Q(e){return e.nren}export{ie as default};
+import{c as C,r as L,F as E,j as x,S as F,t as Y}from"./index.js";import{B as $}from"./index-BfhfJiKe.js";import{C as g,a as v,L as A,B,p as O,c as M,d as P,u as T,N as W,D as q,F as z}from"./useData-CYCBVZdC.js";import{h as G,W as H}from"./HTMLLegendPlugin-Cg92GHTT.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";g.register(v,A,B,O,M,P);const J={maintainAspectRatio:!1,animation:{duration:0},plugins:{htmlLegend:{containerIDs:["legendtop","legendbottom"]},legend:{display:!1},tooltip:{callbacks:{label:function(e){let t=e.dataset.label||"";return e.parsed.x!==null&&(t+=`: ${e.parsed.x}%`),t}}}},scales:{x:{position:"top",stacked:!0,ticks:{callback:(e,t)=>`${t*10}%`}},x2:{ticks:{callback:e=>typeof e=="number"?`${e}%`:e},grid:{drawOnChartArea:!1},afterDataLimits:function(e){const t=Object.keys(g.instances);let a=-999999,i=999999;for(const s of t)g.instances[s]&&e.chart.scales.x2&&(i=Math.min(g.instances[s].scales.x.min,i),a=Math.max(g.instances[s].scales.x.max,a));e.chart.scales.x2.options.min=i,e.chart.scales.x2.options.max=a,e.chart.scales.x2.min=i,e.chart.scales.x2.max=a}},y:{stacked:!0,ticks:{autoSkip:!1}}},indexAxis:"y"};function ie(){const e=C.c(37),{filterSelection:t,setFilterSelection:a}=L.useContext(E),{data:i,years:s,nrens:n}=T("/api/traffic-ratio",a);let l,r,y,c;if(e[0]!==t||e[1]!==n||e[2]!==a||e[3]!==i||e[4]!==s){let b;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(b=S=>t.selectedYears.includes(S.year)&&t.selectedNrens.includes(S.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=b):b=e[11],r=i.filter(b),c=W(r,t.selectedYears[0]);let d;e[12]!==s?(d=[...s],e[12]=s,e[13]=d):d=e[13];let p;e[14]!==n?(p=n.values(),e[14]=n,e[15]=p):p=e[15];let u;e[16]!==p?(u=[...p],e[16]=p,e[17]=u):u=e[17];let h;e[18]!==d||e[19]!==u?(h={availableYears:d,availableNrens:u},e[18]=d,e[19]=u,e[20]=h):h=e[20];let _;e[21]!==t||e[22]!==a||e[23]!==h?(_=x.jsx(z,{max1year:!0,filterOptions:h,filterSelection:t,setFilterSelection:a}),e[21]=t,e[22]=a,e[23]=h,e[24]=_):_=e[24],l=_,y=Array.from(new Set(r.map(Q))).map(S=>n.get(S)).filter(K),e[0]=t,e[1]=n,e[2]=a,e[3]=i,e[4]=s,e[5]=l,e[6]=r,e[7]=y,e[8]=c}else l=e[5],r=e[6],y=e[7],c=e[8];const j=y.length,R=Math.max(j*1.5,20),w=Y["traffic-ratio"],D=`${R}rem`;let o;e[25]!==D?(o={height:D},e[25]=D,e[26]=o):o=e[26];let k;e[27]===Symbol.for("react.memo_cache_sentinel")?(k=[G],e[27]=k):k=e[27];let f;e[28]!==c?(f=x.jsx($,{data:c,options:J,plugins:k}),e[28]=c,e[29]=f):f=e[29];let m;e[30]!==o||e[31]!==f?(m=x.jsx(H,{children:x.jsx("div",{className:"chart-container",style:o,children:f})}),e[30]=o,e[31]=f,e[32]=m):m=e[32];let N;return e[33]!==l||e[34]!==r||e[35]!==m?(N=x.jsx(q,{title:w,description:"The graph shows the ratio of commodity versus research and education traffic in NREN networks",category:F.Network,filter:l,data:r,filename:"types_of_traffic_in_nren_networks",children:m}),e[33]=l,e[34]=r,e[35]=m,e[36]=N):N=e[36],N}function K(e){return!!e}function Q(e){return e.nren}export{ie as default};
diff --git a/compendium_v2/static/TrafficUrl-Cupk7MWX.js b/compendium_v2/static/TrafficUrl-ppIreNuJ.js
similarity index 92%
rename from compendium_v2/static/TrafficUrl-Cupk7MWX.js
rename to compendium_v2/static/TrafficUrl-ppIreNuJ.js
index b356aa76e322d5278779ce3a718db14c252939c5..4ccd3eaa3fd7d1dad2b027bb8aa04f1123a4c476 100644
--- a/compendium_v2/static/TrafficUrl-Cupk7MWX.js
+++ b/compendium_v2/static/TrafficUrl-ppIreNuJ.js
@@ -1 +1 @@
-import{c as j,r as k,F as S,j as p,t as _,S as g}from"./index.js";import{u as v,q as y,k as L,i as R,D as T,F,f as U,s as w}from"./useData-Ct8E3VVL.js";import{N as C}from"./NrenYearTable-iS8aEX43.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function G(){const e=j.c(21),{filterSelection:t,setFilterSelection:s}=k.useContext(S),{data:r,nrens:n}=v("/api/traffic-stats",s);let a,c;if(e[0]!==r||e[1]!==t.selectedNrens){const D=r?y(r):[];let m;e[4]!==t.selectedNrens?(m=h=>t.selectedNrens.includes(h.nren),e[4]=t.selectedNrens,e[5]=m):m=e[5],a=D.filter(m);const b=L(a);c=R(b,E),e[0]=r,e[1]=t.selectedNrens,e[2]=a,e[3]=c}else a=e[2],c=e[3];const x=c;let f;e[6]===Symbol.for("react.memo_cache_sentinel")?(f=[],e[6]=f):f=e[6];let i;e[7]!==n?(i=n.values(),e[7]=n,e[8]=i):i=e[8];let l;e[9]!==i?(l={availableYears:f,availableNrens:[...i]},e[9]=i,e[10]=l):l=e[10];let u;e[11]!==t||e[12]!==s||e[13]!==l?(u=p.jsx(F,{filterOptions:l,filterSelection:t,setFilterSelection:s,coloredYears:!0}),e[11]=t,e[12]=s,e[13]=l,e[14]=u):u=e[14];const N=u;let o;e[15]!==x?(o=p.jsx(U,{children:p.jsx(C,{data:x,columnTitle:"Traffic Statistics URL",dottedBorder:!0,noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=x,e[16]=o):o=e[16];let d;return e[17]!==N||e[18]!==a||e[19]!==o?(d=p.jsx(T,{title:_["traffic-stats"],description:"This table shows the URL links to NREN websites showing traffic statistics, if available.",category:g.Network,filter:N,data:a,filename:"traffic_stats_nrens_per_year",children:o}),e[17]=N,e[18]=a,e[19]=o,e[20]=d):d=e[20],d}function E(e,t){const s=w(t);if(s!=null)for(const[r,n]of Object.entries(s))e[r]=n}export{G as default};
+import{c as j,r as k,F as S,j as p,t as _,S as g}from"./index.js";import{u as v,q as y,k as L,i as R,D as T,F,f as U,s as w}from"./useData-CYCBVZdC.js";import{N as C}from"./NrenYearTable-RI8l8hwG.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function G(){const e=j.c(21),{filterSelection:t,setFilterSelection:s}=k.useContext(S),{data:r,nrens:n}=v("/api/traffic-stats",s);let a,c;if(e[0]!==r||e[1]!==t.selectedNrens){const D=r?y(r):[];let m;e[4]!==t.selectedNrens?(m=h=>t.selectedNrens.includes(h.nren),e[4]=t.selectedNrens,e[5]=m):m=e[5],a=D.filter(m);const b=L(a);c=R(b,E),e[0]=r,e[1]=t.selectedNrens,e[2]=a,e[3]=c}else a=e[2],c=e[3];const x=c;let f;e[6]===Symbol.for("react.memo_cache_sentinel")?(f=[],e[6]=f):f=e[6];let i;e[7]!==n?(i=n.values(),e[7]=n,e[8]=i):i=e[8];let l;e[9]!==i?(l={availableYears:f,availableNrens:[...i]},e[9]=i,e[10]=l):l=e[10];let u;e[11]!==t||e[12]!==s||e[13]!==l?(u=p.jsx(F,{filterOptions:l,filterSelection:t,setFilterSelection:s,coloredYears:!0}),e[11]=t,e[12]=s,e[13]=l,e[14]=u):u=e[14];const N=u;let o;e[15]!==x?(o=p.jsx(U,{children:p.jsx(C,{data:x,columnTitle:"Traffic Statistics URL",dottedBorder:!0,noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=x,e[16]=o):o=e[16];let d;return e[17]!==N||e[18]!==a||e[19]!==o?(d=p.jsx(T,{title:_["traffic-stats"],description:"This table shows the URL links to NREN websites showing traffic statistics, if available.",category:g.Network,filter:N,data:a,filename:"traffic_stats_nrens_per_year",children:o}),e[17]=N,e[18]=a,e[19]=o,e[20]=d):d=e[20],d}function E(e,t){const s=w(t);if(s!=null)for(const[r,n]of Object.entries(s))e[r]=n}export{G as default};
diff --git a/compendium_v2/static/TrafficVolume-C0Yprx37.js b/compendium_v2/static/TrafficVolume-DjVPocrC.js
similarity index 95%
rename from compendium_v2/static/TrafficVolume-C0Yprx37.js
rename to compendium_v2/static/TrafficVolume-DjVPocrC.js
index 8040e12bbf9ec6bfbc202ede20d8d5eb54d783ae..95455a63f373ff78223c8ff6a5c87d004a404e9c 100644
--- a/compendium_v2/static/TrafficVolume-C0Yprx37.js
+++ b/compendium_v2/static/TrafficVolume-DjVPocrC.js
@@ -1 +1 @@
-import{c as A,r as G,F as U,j as t,t as Y,S as $,C as P,R as W}from"./index.js";import{L as k}from"./index-C4Nuqrw6.js";import{C as q,a as H,L as I,P as J,b as K,p as M,c as Q,d as X,u as Z,e as v,D as ee,F as te,f as se}from"./useData-Ct8E3VVL.js";import{g as le}from"./charthelpers-DmM6tvdh.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";q.register(H,I,J,K,M,Q,X);function de(){const e=A.c(47),{filterSelection:l,setFilterSelection:_}=G.useContext(U),{data:V,nrens:B}=Z("/api/traffic-volume",_);let o,a,s,g,i;if(e[0]!==V||e[1]!==l.selectedNrens){let r;e[7]!==l.selectedNrens?(r=O=>l.selectedNrens.includes(O.nren),e[7]=l.selectedNrens,e[8]=r):r=e[8],s=V.filter(r),o=v(s,"from_customers"),i=v(s,"to_customers"),a=v(s,"from_external"),g=v(s,"to_external"),e[0]=V,e[1]=l.selectedNrens,e[2]=o,e[3]=a,e[4]=s,e[5]=g,e[6]=i}else o=e[2],a=e[3],s=e[4],g=e[5],i=e[6];const F=g;let N;e[9]===Symbol.for("react.memo_cache_sentinel")?(N=le({title:"Traffic Volume in PB",tooltipUnit:"PB",valueTransform(r){return r?r/1e3:0}}),e[9]=N):N=e[9];const b=N;let j;e[10]===Symbol.for("react.memo_cache_sentinel")?(j=[],e[10]=j):j=e[10];let n;e[11]!==B?(n=B.values(),e[11]=B,e[12]=n):n=e[12];let c;e[13]!==n?(c={availableYears:j,availableNrens:[...n]},e[13]=n,e[14]=c):c=e[14];let S;e[15]!==l||e[16]!==_||e[17]!==c?(S=t.jsx(te,{filterOptions:c,filterSelection:l,setFilterSelection:_}),e[15]=l,e[16]=_,e[17]=c,e[18]=S):S=e[18];const z=S;let y;e[19]===Symbol.for("react.memo_cache_sentinel")?(y=t.jsx("span",{children:"The four graphs below show the estimates of total annual traffic in PB (1000 TB) to & from NREN customers, and to & from external networks. NREN customers are taken to mean sources that are part of the NREN's connectivity remit, while external networks are understood as outside sources including GÉANT, the general/commercial internet, internet exchanges, peerings, other NRENs, etc."}),e[19]=y):y=e[19];let T;e[20]===Symbol.for("react.memo_cache_sentinel")?(T={marginBottom:"30px"},e[20]=T):T=e[20];let E;e[21]===Symbol.for("react.memo_cache_sentinel")?(E=t.jsx("span",{style:{fontSize:"20px",color:"rgb(85, 96, 156)",fontWeight:"bold"},children:"Traffic from NREN customer"}),e[21]=E):E=e[21];let f;e[22]!==o?(f=t.jsxs(P,{children:[E,t.jsx(k,{data:o,options:b})]}),e[22]=o,e[23]=f):f=e[23];let C;e[24]===Symbol.for("react.memo_cache_sentinel")?(C=t.jsx("span",{style:{fontSize:"20px",color:"rgb(221, 100, 57)",fontWeight:"bold"},children:"Traffic to NREN customer"}),e[24]=C):C=e[24];let m;e[25]!==i?(m=t.jsxs(P,{children:[C,t.jsx(k,{data:i,options:b})]}),e[25]=i,e[26]=m):m=e[26];let d;e[27]!==m||e[28]!==f?(d=t.jsxs(W,{style:T,children:[f,m]}),e[27]=m,e[28]=f,e[29]=d):d=e[29];let R;e[30]===Symbol.for("react.memo_cache_sentinel")?(R={marginTop:"30px"},e[30]=R):R=e[30];let w;e[31]===Symbol.for("react.memo_cache_sentinel")?(w=t.jsx("span",{style:{fontSize:"20px",color:"rgb(63, 143, 77)",fontWeight:"bold"},children:"Traffic from external network"}),e[31]=w):w=e[31];let h;e[32]!==a?(h=t.jsxs(P,{children:[w,t.jsx(k,{data:a,options:b})]}),e[32]=a,e[33]=h):h=e[33];let D;e[34]===Symbol.for("react.memo_cache_sentinel")?(D=t.jsx("span",{style:{fontSize:"20px",color:"rgb(173, 48, 51)",fontWeight:"bold"},children:"Traffic to external network"}),e[34]=D):D=e[34];let x;e[35]!==F?(x=t.jsxs(P,{children:[D,t.jsx(k,{data:F,options:b})]}),e[35]=F,e[36]=x):x=e[36];let p;e[37]!==h||e[38]!==x?(p=t.jsxs(W,{style:R,children:[h,x]}),e[37]=h,e[38]=x,e[39]=p):p=e[39];let u;e[40]!==d||e[41]!==p?(u=t.jsxs(se,{children:[d,p]}),e[40]=d,e[41]=p,e[42]=u):u=e[42];let L;return e[43]!==z||e[44]!==s||e[45]!==u?(L=t.jsx(ee,{title:Y["traffic-volume"],description:y,category:$.Network,filter:z,data:s,filename:"NREN_traffic_estimates_data",children:u}),e[43]=z,e[44]=s,e[45]=u,e[46]=L):L=e[46],L}export{de as default};
+import{c as A,r as G,F as U,j as t,t as Y,S as $,C as P,R as W}from"./index.js";import{L as k}from"./index-BfhfJiKe.js";import{C as q,a as H,L as I,P as J,b as K,p as M,c as Q,d as X,u as Z,e as v,D as ee,F as te,f as se}from"./useData-CYCBVZdC.js";import{g as le}from"./charthelpers-CdmocpOu.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";q.register(H,I,J,K,M,Q,X);function de(){const e=A.c(47),{filterSelection:l,setFilterSelection:_}=G.useContext(U),{data:V,nrens:B}=Z("/api/traffic-volume",_);let o,a,s,g,i;if(e[0]!==V||e[1]!==l.selectedNrens){let r;e[7]!==l.selectedNrens?(r=O=>l.selectedNrens.includes(O.nren),e[7]=l.selectedNrens,e[8]=r):r=e[8],s=V.filter(r),o=v(s,"from_customers"),i=v(s,"to_customers"),a=v(s,"from_external"),g=v(s,"to_external"),e[0]=V,e[1]=l.selectedNrens,e[2]=o,e[3]=a,e[4]=s,e[5]=g,e[6]=i}else o=e[2],a=e[3],s=e[4],g=e[5],i=e[6];const F=g;let N;e[9]===Symbol.for("react.memo_cache_sentinel")?(N=le({title:"Traffic Volume in PB",tooltipUnit:"PB",valueTransform(r){return r?r/1e3:0}}),e[9]=N):N=e[9];const b=N;let j;e[10]===Symbol.for("react.memo_cache_sentinel")?(j=[],e[10]=j):j=e[10];let n;e[11]!==B?(n=B.values(),e[11]=B,e[12]=n):n=e[12];let c;e[13]!==n?(c={availableYears:j,availableNrens:[...n]},e[13]=n,e[14]=c):c=e[14];let S;e[15]!==l||e[16]!==_||e[17]!==c?(S=t.jsx(te,{filterOptions:c,filterSelection:l,setFilterSelection:_}),e[15]=l,e[16]=_,e[17]=c,e[18]=S):S=e[18];const z=S;let y;e[19]===Symbol.for("react.memo_cache_sentinel")?(y=t.jsx("span",{children:"The four graphs below show the estimates of total annual traffic in PB (1000 TB) to & from NREN customers, and to & from external networks. NREN customers are taken to mean sources that are part of the NREN's connectivity remit, while external networks are understood as outside sources including GÉANT, the general/commercial internet, internet exchanges, peerings, other NRENs, etc."}),e[19]=y):y=e[19];let T;e[20]===Symbol.for("react.memo_cache_sentinel")?(T={marginBottom:"30px"},e[20]=T):T=e[20];let E;e[21]===Symbol.for("react.memo_cache_sentinel")?(E=t.jsx("span",{style:{fontSize:"20px",color:"rgb(85, 96, 156)",fontWeight:"bold"},children:"Traffic from NREN customer"}),e[21]=E):E=e[21];let f;e[22]!==o?(f=t.jsxs(P,{children:[E,t.jsx(k,{data:o,options:b})]}),e[22]=o,e[23]=f):f=e[23];let C;e[24]===Symbol.for("react.memo_cache_sentinel")?(C=t.jsx("span",{style:{fontSize:"20px",color:"rgb(221, 100, 57)",fontWeight:"bold"},children:"Traffic to NREN customer"}),e[24]=C):C=e[24];let m;e[25]!==i?(m=t.jsxs(P,{children:[C,t.jsx(k,{data:i,options:b})]}),e[25]=i,e[26]=m):m=e[26];let d;e[27]!==m||e[28]!==f?(d=t.jsxs(W,{style:T,children:[f,m]}),e[27]=m,e[28]=f,e[29]=d):d=e[29];let R;e[30]===Symbol.for("react.memo_cache_sentinel")?(R={marginTop:"30px"},e[30]=R):R=e[30];let w;e[31]===Symbol.for("react.memo_cache_sentinel")?(w=t.jsx("span",{style:{fontSize:"20px",color:"rgb(63, 143, 77)",fontWeight:"bold"},children:"Traffic from external network"}),e[31]=w):w=e[31];let h;e[32]!==a?(h=t.jsxs(P,{children:[w,t.jsx(k,{data:a,options:b})]}),e[32]=a,e[33]=h):h=e[33];let D;e[34]===Symbol.for("react.memo_cache_sentinel")?(D=t.jsx("span",{style:{fontSize:"20px",color:"rgb(173, 48, 51)",fontWeight:"bold"},children:"Traffic to external network"}),e[34]=D):D=e[34];let x;e[35]!==F?(x=t.jsxs(P,{children:[D,t.jsx(k,{data:F,options:b})]}),e[35]=F,e[36]=x):x=e[36];let p;e[37]!==h||e[38]!==x?(p=t.jsxs(W,{style:R,children:[h,x]}),e[37]=h,e[38]=x,e[39]=p):p=e[39];let u;e[40]!==d||e[41]!==p?(u=t.jsxs(se,{children:[d,p]}),e[40]=d,e[41]=p,e[42]=u):u=e[42];let L;return e[43]!==z||e[44]!==s||e[45]!==u?(L=t.jsx(ee,{title:Y["traffic-volume"],description:y,category:$.Network,filter:z,data:s,filename:"NREN_traffic_estimates_data",children:u}),e[43]=z,e[44]=s,e[45]=u,e[46]=L):L=e[46],L}export{de as default};
diff --git a/compendium_v2/static/WeatherMap-DPu2PGnk.js b/compendium_v2/static/WeatherMap-CtO7coD7.js
similarity index 92%
rename from compendium_v2/static/WeatherMap-DPu2PGnk.js
rename to compendium_v2/static/WeatherMap-CtO7coD7.js
index f891776ef80d2f466546fa2536670e470a5f39e6..b92b39494cb98a7ea620909a68528ab67ab7fba7 100644
--- a/compendium_v2/static/WeatherMap-DPu2PGnk.js
+++ b/compendium_v2/static/WeatherMap-CtO7coD7.js
@@ -1 +1 @@
-import{c as b,r as k,F as w,j as m,t as g,S as j}from"./index.js";import{u as S,q as v,k as y,i as F,D as L,F as R,f as C}from"./useData-Ct8E3VVL.js";import{N as E}from"./NrenYearTable-iS8aEX43.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function O(){const e=b.c(21),{filterSelection:t,setFilterSelection:o}=k.useContext(w),{data:i,nrens:d}=S("/api/weather-map",o);let a,n;if(e[0]!==i||e[1]!==t.selectedNrens){const x=i?v(i):[];let u;e[4]!==t.selectedNrens?(u=_=>t.selectedNrens.includes(_.nren),e[4]=t.selectedNrens,e[5]=u):u=e[5],a=x.filter(u);const D=y(a);n=F(D,T),e[0]=i,e[1]=t.selectedNrens,e[2]=a,e[3]=n}else a=e[2],n=e[3];const h=n;let c;e[6]===Symbol.for("react.memo_cache_sentinel")?(c=[],e[6]=c):c=e[6];let s;e[7]!==d?(s=d.values(),e[7]=d,e[8]=s):s=e[8];let r;e[9]!==s?(r={availableYears:c,availableNrens:[...s]},e[9]=s,e[10]=r):r=e[10];let f;e[11]!==t||e[12]!==o||e[13]!==r?(f=m.jsx(R,{filterOptions:r,filterSelection:t,setFilterSelection:o,coloredYears:!0}),e[11]=t,e[12]=o,e[13]=r,e[14]=f):f=e[14];const N=f;let l;e[15]!==h?(l=m.jsx(C,{children:m.jsx(E,{data:h,columnTitle:"Network Weather Map",dottedBorder:!0,noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=h,e[16]=l):l=e[16];let p;return e[17]!==N||e[18]!==a||e[19]!==l?(p=m.jsx(L,{title:g["weather-map"],description:"This table shows the URL links to NREN websites showing weather map, if available.",category:j.Network,filter:N,data:a,filename:"weather_map_nrens_per_year",children:l}),e[17]=N,e[18]=a,e[19]=l,e[20]=p):p=e[20],p}function T(e,t){!!t.url&&(e[t.url]=t.url)}export{O as default};
+import{c as b,r as k,F as w,j as m,t as g,S as j}from"./index.js";import{u as S,q as v,k as y,i as F,D as L,F as R,f as C}from"./useData-CYCBVZdC.js";import{N as E}from"./NrenYearTable-RI8l8hwG.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-DIBz8YrO.js";import"./hook-GVc5uk5F.js";import"./Table-ClWM2_rS.js";function O(){const e=b.c(21),{filterSelection:t,setFilterSelection:o}=k.useContext(w),{data:i,nrens:d}=S("/api/weather-map",o);let a,n;if(e[0]!==i||e[1]!==t.selectedNrens){const x=i?v(i):[];let u;e[4]!==t.selectedNrens?(u=_=>t.selectedNrens.includes(_.nren),e[4]=t.selectedNrens,e[5]=u):u=e[5],a=x.filter(u);const D=y(a);n=F(D,T),e[0]=i,e[1]=t.selectedNrens,e[2]=a,e[3]=n}else a=e[2],n=e[3];const h=n;let c;e[6]===Symbol.for("react.memo_cache_sentinel")?(c=[],e[6]=c):c=e[6];let s;e[7]!==d?(s=d.values(),e[7]=d,e[8]=s):s=e[8];let r;e[9]!==s?(r={availableYears:c,availableNrens:[...s]},e[9]=s,e[10]=r):r=e[10];let f;e[11]!==t||e[12]!==o||e[13]!==r?(f=m.jsx(R,{filterOptions:r,filterSelection:t,setFilterSelection:o,coloredYears:!0}),e[11]=t,e[12]=o,e[13]=r,e[14]=f):f=e[14];const N=f;let l;e[15]!==h?(l=m.jsx(C,{children:m.jsx(E,{data:h,columnTitle:"Network Weather Map",dottedBorder:!0,noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=h,e[16]=l):l=e[16];let p;return e[17]!==N||e[18]!==a||e[19]!==l?(p=m.jsx(L,{title:g["weather-map"],description:"This table shows the URL links to NREN websites showing weather map, if available.",category:j.Network,filter:N,data:a,filename:"weather_map_nrens_per_year",children:l}),e[17]=N,e[18]=a,e[19]=l,e[20]=p):p=e[20],p}function T(e,t){!!t.url&&(e[t.url]=t.url)}export{O as default};
diff --git a/compendium_v2/static/charthelpers-DmM6tvdh.js b/compendium_v2/static/charthelpers-CdmocpOu.js
similarity index 96%
rename from compendium_v2/static/charthelpers-DmM6tvdh.js
rename to compendium_v2/static/charthelpers-CdmocpOu.js
index c7097f63416aadc732e5a5afe8c56af844de4619..7beaaa6e2e4d72c2de518c86964223b8204684a2 100644
--- a/compendium_v2/static/charthelpers-DmM6tvdh.js
+++ b/compendium_v2/static/charthelpers-CdmocpOu.js
@@ -1 +1 @@
-import{C as l}from"./useData-Ct8E3VVL.js";const x=({title:i,unit:c,tooltipPrefix:r,tooltipUnit:o,tickLimit:n,valueTransform:t})=>({responsive:!0,elements:{point:{pointStyle:"circle",pointRadius:4,pointBorderWidth:2,pointBackgroundColor:"white"}},animation:{duration:0},plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(a){let s=r??(a.dataset.label||"");const e=t?t(a.parsed.y):a.parsed.y;return a.parsed.y!==null&&(s+=`: ${e} ${o||""}`),s}}}},scales:{y:{title:{display:!!i,text:i||""},ticks:{autoSkip:!0,maxTicksLimit:n,callback:a=>`${typeof a=="string"?a:t?t(a):a} ${c||""}`}}}}),y=({title:i,unit:c,tooltipPrefix:r,tooltipUnit:o,valueTransform:n})=>({maintainAspectRatio:!1,layout:{padding:{right:60}},animation:{duration:0},plugins:{legend:{display:!1},chartDataLabels:{font:{family:'"Open Sans", sans-serif'}},tooltip:{callbacks:{label:function(t){let a=r??(t.dataset.label||"");const s=n?n(t.parsed.x):t.parsed.x;return t.parsed.y!==null&&(a+=`: ${s} ${o||""}`),a}}}},scales:{x:{title:{display:!!i,text:i||""},position:"top",ticks:{callback:t=>t&&`${n?n(t):t} ${c||""}`}},x2:{title:{display:!!i,text:i||""},ticks:{callback:t=>t&&`${n?n(t):t} ${c||""}`},grid:{drawOnChartArea:!1},afterDataLimits:function(t){const a=Object.keys(l.instances);let s=-999999,e=999999;for(const d of a)l.instances[d]&&t.chart.scales.x2&&(e=Math.min(l.instances[d].scales.x.min,e),s=Math.max(l.instances[d].scales.x.max,s));t.chart.scales.x2.options.min=e,t.chart.scales.x2.options.max=s,t.chart.scales.x2.min=e,t.chart.scales.x2.max=s}},y:{stacked:!0,ticks:{autoSkip:!1}}},indexAxis:"y"});export{y as a,x as g};
+import{C as l}from"./useData-CYCBVZdC.js";const x=({title:i,unit:c,tooltipPrefix:r,tooltipUnit:o,tickLimit:n,valueTransform:t})=>({responsive:!0,elements:{point:{pointStyle:"circle",pointRadius:4,pointBorderWidth:2,pointBackgroundColor:"white"}},animation:{duration:0},plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(a){let s=r??(a.dataset.label||"");const e=t?t(a.parsed.y):a.parsed.y;return a.parsed.y!==null&&(s+=`: ${e} ${o||""}`),s}}}},scales:{y:{title:{display:!!i,text:i||""},ticks:{autoSkip:!0,maxTicksLimit:n,callback:a=>`${typeof a=="string"?a:t?t(a):a} ${c||""}`}}}}),y=({title:i,unit:c,tooltipPrefix:r,tooltipUnit:o,valueTransform:n})=>({maintainAspectRatio:!1,layout:{padding:{right:60}},animation:{duration:0},plugins:{legend:{display:!1},chartDataLabels:{font:{family:'"Open Sans", sans-serif'}},tooltip:{callbacks:{label:function(t){let a=r??(t.dataset.label||"");const s=n?n(t.parsed.x):t.parsed.x;return t.parsed.y!==null&&(a+=`: ${s} ${o||""}`),a}}}},scales:{x:{title:{display:!!i,text:i||""},position:"top",ticks:{callback:t=>t&&`${n?n(t):t} ${c||""}`}},x2:{title:{display:!!i,text:i||""},ticks:{callback:t=>t&&`${n?n(t):t} ${c||""}`},grid:{drawOnChartArea:!1},afterDataLimits:function(t){const a=Object.keys(l.instances);let s=-999999,e=999999;for(const d of a)l.instances[d]&&t.chart.scales.x2&&(e=Math.min(l.instances[d].scales.x.min,e),s=Math.max(l.instances[d].scales.x.max,s));t.chart.scales.x2.options.min=e,t.chart.scales.x2.options.max=s,t.chart.scales.x2.min=e,t.chart.scales.x2.max=s}},y:{stacked:!0,ticks:{autoSkip:!1}}},indexAxis:"y"});export{y as a,x as g};
diff --git a/compendium_v2/static/chartjs-plugin-datalabels.esm-BI98Iz1j.js b/compendium_v2/static/chartjs-plugin-datalabels.esm-CzQRWEly.js
similarity index 99%
rename from compendium_v2/static/chartjs-plugin-datalabels.esm-BI98Iz1j.js
rename to compendium_v2/static/chartjs-plugin-datalabels.esm-CzQRWEly.js
index 2b94bbc1a87357983baffe57e1ac7e034f5e9846..9fc4bce69b9c9b0e2917971f0cbca92288e65027 100644
--- a/compendium_v2/static/chartjs-plugin-datalabels.esm-BI98Iz1j.js
+++ b/compendium_v2/static/chartjs-plugin-datalabels.esm-CzQRWEly.js
@@ -1,4 +1,4 @@
-import{x as g,y as J,z as f,A as K,E as q,G as V,H as W,I as p,J as Y,P as Q,B as Z,K as ee,M as re}from"./useData-Ct8E3VVL.js";/*!
+import{x as g,y as J,z as f,A as K,E as q,G as V,H as W,I as p,J as Y,P as Q,B as Z,K as ee,M as re}from"./useData-CYCBVZdC.js";/*!
  * chartjs-plugin-datalabels v2.2.0
  * https://chartjs-plugin-datalabels.netlify.app
  * (c) 2017-2022 chartjs-plugin-datalabels contributors
diff --git a/compendium_v2/static/index-C4Nuqrw6.js b/compendium_v2/static/index-BfhfJiKe.js
similarity index 96%
rename from compendium_v2/static/index-C4Nuqrw6.js
rename to compendium_v2/static/index-BfhfJiKe.js
index df6cbb83f55b9ab4d363231bfe03d321b840fde6..3db32e617ea8f09da204241bad1e2a14249e28e1 100644
--- a/compendium_v2/static/index-C4Nuqrw6.js
+++ b/compendium_v2/static/index-BfhfJiKe.js
@@ -1 +1 @@
-import{r as a,f as h}from"./index.js";import{C as b,t as L,v}from"./useData-Ct8E3VVL.js";const C="label";function m(t,e){typeof t=="function"?t(e):t&&(t.current=e)}function B(t,e){const n=t.options;n&&e&&Object.assign(n,e)}function y(t,e){t.labels=e}function E(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:C;const o=[];t.datasets=e.map(s=>{const u=t.datasets.find(i=>i[n]===s[n]);return!u||!s.data||o.includes(u)?{...s}:(o.push(u),Object.assign(u,s),u)})}function T(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:C;const n={labels:[],datasets:[]};return y(n,t.labels),E(n,t.datasets,e),n}function j(t,e){const{height:n=150,width:o=300,redraw:s=!1,datasetIdKey:u,type:i,data:c,options:f,plugins:w=[],fallbackContent:I,updateMode:g,...K}=t,l=a.useRef(null),r=a.useRef(null),d=()=>{l.current&&(r.current=new b(l.current,{type:i,data:T(c,u),options:f&&{...f},plugins:w}),m(e,r.current))},p=()=>{m(e,null),r.current&&(r.current.destroy(),r.current=null)};return a.useEffect(()=>{!s&&r.current&&f&&B(r.current,f)},[s,f]),a.useEffect(()=>{!s&&r.current&&y(r.current.config.data,c.labels)},[s,c.labels]),a.useEffect(()=>{!s&&r.current&&c.datasets&&E(r.current.config.data,c.datasets,u)},[s,c.datasets]),a.useEffect(()=>{r.current&&(s?(p(),setTimeout(d)):r.current.update(g))},[s,f,c.labels,c.datasets,g]),a.useEffect(()=>{r.current&&(p(),setTimeout(d))},[i]),a.useEffect(()=>(d(),()=>p()),[]),h.createElement("canvas",{ref:l,role:"img",height:n,width:o,...K},I)}const D=a.forwardRef(j);function R(t,e){return b.register(e),a.forwardRef((n,o)=>h.createElement(D,{...n,ref:o,type:t}))}const M=R("line",L),P=R("bar",v);export{P as B,M as L};
+import{r as a,f as h}from"./index.js";import{C as b,t as L,v}from"./useData-CYCBVZdC.js";const C="label";function m(t,e){typeof t=="function"?t(e):t&&(t.current=e)}function B(t,e){const n=t.options;n&&e&&Object.assign(n,e)}function y(t,e){t.labels=e}function E(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:C;const o=[];t.datasets=e.map(s=>{const u=t.datasets.find(i=>i[n]===s[n]);return!u||!s.data||o.includes(u)?{...s}:(o.push(u),Object.assign(u,s),u)})}function T(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:C;const n={labels:[],datasets:[]};return y(n,t.labels),E(n,t.datasets,e),n}function j(t,e){const{height:n=150,width:o=300,redraw:s=!1,datasetIdKey:u,type:i,data:c,options:f,plugins:w=[],fallbackContent:I,updateMode:g,...K}=t,l=a.useRef(null),r=a.useRef(null),d=()=>{l.current&&(r.current=new b(l.current,{type:i,data:T(c,u),options:f&&{...f},plugins:w}),m(e,r.current))},p=()=>{m(e,null),r.current&&(r.current.destroy(),r.current=null)};return a.useEffect(()=>{!s&&r.current&&f&&B(r.current,f)},[s,f]),a.useEffect(()=>{!s&&r.current&&y(r.current.config.data,c.labels)},[s,c.labels]),a.useEffect(()=>{!s&&r.current&&c.datasets&&E(r.current.config.data,c.datasets,u)},[s,c.datasets]),a.useEffect(()=>{r.current&&(s?(p(),setTimeout(d)):r.current.update(g))},[s,f,c.labels,c.datasets,g]),a.useEffect(()=>{r.current&&(p(),setTimeout(d))},[i]),a.useEffect(()=>(d(),()=>p()),[]),h.createElement("canvas",{ref:l,role:"img",height:n,width:o,...K},I)}const D=a.forwardRef(j);function R(t,e){return b.register(e),a.forwardRef((n,o)=>h.createElement(D,{...n,ref:o,type:t}))}const M=R("line",L),P=R("bar",v);export{P as B,M as L};
diff --git a/compendium_v2/static/index.js b/compendium_v2/static/index.js
index 6415df938a0838cb5b3027fa265f583f8ad50cec..18ace6bdb589e385467cce60373d827e4c8aa5d9 100644
--- a/compendium_v2/static/index.js
+++ b/compendium_v2/static/index.js
@@ -1,4 +1,4 @@
-const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["Budget-BVbbdsI6.js","index-C4Nuqrw6.js","useData-Ct8E3VVL.js","SideBar-CkoMfgfL.js","xlsx-BHRztzV8.js","index-DIBz8YrO.js","hook-GVc5uk5F.js","charthelpers-DmM6tvdh.js","ChargingStructure-D6vHlJZ3.js","PillTable-Cnj0nnFy.js","ColorPill-CXvWIfWz.js","Table-ClWM2_rS.js","ECProjects-CT3RTMct.js","NrenYearTable-iS8aEX43.js","FundingSource-C4jAa4nC.js","chartjs-plugin-datalabels.esm-BI98Iz1j.js","ParentOrganisation-BqnVV9Ka.js","StaffGraph-DXD4Tgbx.js","HTMLLegendPlugin-sjJV-MGB.js","StaffGraphAbsolute-A86Vah2E.js","SubOrganisation-ldENjIwX.js","Audits-BldRnziS.js","BusinessContinuity-CLtH4Vxm.js","CentralProcurement-ufKA5cDY.js","CorporateStrategy-CQ2aByV3.js","CrisisExercises-Bw4pZ1iW.js","CrisisManagement-TH7W12RY.js","EOSCListings-v4hLpISP.js","Policy-DTXx03Vh.js","SecurityControls-TM-ptOes.js","ServiceLevelTargets-DMHnzoF5.js","ServiceManagementFramework-D-rGA4sI.js","ServicesOffered-BQGRxlwg.js","ScrollableMatrix-Dxr22l4i.js","ConnectedInstitutionsURLs-gUMBROcH.js","ConnectedUser-C39phNBn.js","RemoteCampuses-DiA5hlnD.js","AlienWave-DhaC80F-.js","AlienWaveInternal-CeuaDpIY.js","Automation-BAaw7w82.js","CapacityCoreIP-CjzYJH11.js","CapacityLargestLink-CCiZ1Jtj.js","CertificateProvider-S4Idgrmz.js","DarkFibreLease-C_DLt-sT.js","DarkFibreInstalled-XMYWXP4t.js","ExternalConnections-Ds1slbkO.js","FibreLight-C4tQtRYN.js","IRUDuration-C1dUeB3y.js","MonitoringTools-BrAyjiGW.js","NetworkFunctionVirtualisation-BSD5a3W2.js","NetworkMapUrls-iZSn2qqQ.js","NonRAndEPeer-Cn_ozVAu.js","OPsAutomation-Bc59w9gr.js","PassiveMonitoring-NXmN_EjG.js","PertTeam-64HTdccQ.js","SiemVendors-Ba9ZMN9z.js","TrafficRatio-p8ISc0n1.js","TrafficUrl-Cupk7MWX.js","TrafficVolume-C0Yprx37.js","WeatherMap-DPu2PGnk.js","Services-5TAXBWqD.js","Landing-B1Sq71Lu.js","survey-3meXCY6T.js","SurveySidebar-CG0gwQ6b.js","SurveyContainerComponent-BmuW9EVe.js","index-BGZcCZJE.js","survey.core-D1mOb2z9.js","validation-COFmylEH.js","Du0IQ9wh.css","SurveyManagementComponent-BvOZUwZZ.js","lodash-CeHp3pZo.js","UserManagementComponent-BsFczL9E.js"])))=>i.map(i=>d[i]);
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["Budget-BD3tWhAz.js","index-BfhfJiKe.js","useData-CYCBVZdC.js","SideBar-CkoMfgfL.js","xlsx-BHRztzV8.js","index-DIBz8YrO.js","hook-GVc5uk5F.js","charthelpers-CdmocpOu.js","ChargingStructure-Bv0NJy9P.js","PillTable-Cnj0nnFy.js","ColorPill-CXvWIfWz.js","Table-ClWM2_rS.js","ECProjects-Cxw57QLP.js","NrenYearTable-RI8l8hwG.js","FundingSource-M1iQBQ3K.js","chartjs-plugin-datalabels.esm-CzQRWEly.js","ParentOrganisation-Bpo7P6u6.js","StaffGraph-HNfHQ0pm.js","HTMLLegendPlugin-Cg92GHTT.js","StaffGraphAbsolute-Bq1qlgS8.js","SubOrganisation-CXMlieI0.js","Audits-CuvZdHfU.js","BusinessContinuity-MvRfhQYb.js","CentralProcurement-CnLdUN2O.js","CorporateStrategy-D3wglOhj.js","CrisisExercises-DuZg-gGP.js","CrisisManagement-B9EB2EWM.js","EOSCListings-Gq2b1C2V.js","Policy-BdndWxZz.js","SecurityControls-Ba4coYqK.js","ServiceLevelTargets-pvc5MWdl.js","ServiceManagementFramework-Cy_R2T5K.js","ServicesOffered-C8SRGlPW.js","ScrollableMatrix-Dxr22l4i.js","ConnectedInstitutionsURLs-C_G2PNvX.js","ConnectedUser-D-CAsrxc.js","RemoteCampuses-CWuoHcc1.js","AlienWave-AJrmdFtI.js","AlienWaveInternal-BkYZMjCR.js","Automation-DItliT93.js","CapacityCoreIP-BYeiJxnz.js","CapacityLargestLink-Bov4w9OF.js","CertificateProvider-C0MtpALT.js","DarkFibreLease-DOa-O_Mg.js","DarkFibreInstalled-2D1iNkw5.js","ExternalConnections-ldDiu0-q.js","FibreLight-CitJL-tj.js","IRUDuration-CX0U79PZ.js","MonitoringTools-sTAJWOEm.js","NetworkFunctionVirtualisation-mpEVvRIs.js","NetworkMapUrls-B9qEmtVH.js","NonRAndEPeer-C1U-VeeG.js","OPsAutomation-DAHkdRQE.js","PassiveMonitoring-Bn2t9Pmf.js","PertTeam-C-4MgsmN.js","SiemVendors-kLcSDwOx.js","TrafficRatio-BkOFtVPl.js","TrafficUrl-ppIreNuJ.js","TrafficVolume-DjVPocrC.js","WeatherMap-CtO7coD7.js","Services-fP_6uX0f.js","Landing-B1Sq71Lu.js","survey-3meXCY6T.js","SurveySidebar-CG0gwQ6b.js","SurveyContainerComponent-BmuW9EVe.js","index-BGZcCZJE.js","survey.core-D1mOb2z9.js","validation-COFmylEH.js","Du0IQ9wh.css","SurveyManagementComponent-BvOZUwZZ.js","lodash-CeHp3pZo.js","UserManagementComponent-BsFczL9E.js"])))=>i.map(i=>d[i]);
 var Kg=Object.defineProperty;var $g=(l,n,c)=>n in l?Kg(l,n,{enumerable:!0,configurable:!0,writable:!0,value:c}):l[n]=c;var wm=(l,n,c)=>$g(l,typeof n!="symbol"?n+"":n,c);(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))s(u);new MutationObserver(u=>{for(const f of u)if(f.type==="childList")for(const d of f.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&s(d)}).observe(document,{childList:!0,subtree:!0});function c(u){const f={};return u.integrity&&(f.integrity=u.integrity),u.referrerPolicy&&(f.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?f.credentials="include":u.crossOrigin==="anonymous"?f.credentials="omit":f.credentials="same-origin",f}function s(u){if(u.ep)return;u.ep=!0;const f=c(u);fetch(u.href,f)}})();var U2=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function fr(l){return l&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l}var to={exports:{}},er={};/**
  * @license React
  * react-jsx-runtime.production.js
@@ -80,4 +80,4 @@ Please change the parent <Route path="${q}"> to <Route path="${q==="/"?"*":`${q}
 	Copyright (c) 2018 Jed Watson.
 	Licensed under the MIT License (MIT), see
 	http://jedwatson.github.io/classnames
-*/var dy;function AE(){return dy||(dy=1,function(l){(function(){var n={}.hasOwnProperty;function c(){for(var f="",d=0;d<arguments.length;d++){var y=arguments[d];y&&(f=u(f,s(y)))}return f}function s(f){if(typeof f=="string"||typeof f=="number")return f;if(typeof f!="object")return"";if(Array.isArray(f))return c.apply(null,f);if(f.toString!==Object.prototype.toString&&!f.toString.toString().includes("[native code]"))return f.toString();var d="";for(var y in f)n.call(f,y)&&f[y]&&(d=u(d,y));return d}function u(f,d){return d?f?f+" "+d:f+d:f}l.exports?(c.default=c,l.exports=c):window.classNames=c})()}(po)),po.exports}var ME=AE();const Ae=fr(ME);function zE(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.includes(s))continue;c[s]=l[s]}return c}function Ao(l,n){return Ao=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(c,s){return c.__proto__=s,c},Ao(l,n)}function LE(l,n){l.prototype=Object.create(n.prototype),l.prototype.constructor=l,Ao(l,n)}const UE=["xxl","xl","lg","md","sm","xs"],HE="xs",Zu=g.createContext({prefixes:{},breakpoints:UE,minBreakpoint:HE});function Qe(l,n){const{prefixes:c}=g.useContext(Zu);return l||c[n]||n}function tp(){const{breakpoints:l}=g.useContext(Zu);return l}function np(){const{minBreakpoint:l}=g.useContext(Zu);return l}function BE(){const{dir:l}=g.useContext(Zu);return l==="rtl"}function Ku(l){return l&&l.ownerDocument||document}function qE(l){var n=Ku(l);return n&&n.defaultView||window}function VE(l,n){return qE(l).getComputedStyle(l,n)}var YE=/([A-Z])/g;function GE(l){return l.replace(YE,"-$1").toLowerCase()}var kE=/^ms-/;function Ou(l){return GE(l).replace(kE,"-ms-")}var XE=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;function QE(l){return!!(l&&XE.test(l))}function gl(l,n){var c="",s="";if(typeof n=="string")return l.style.getPropertyValue(Ou(n))||VE(l).getPropertyValue(Ou(n));Object.keys(n).forEach(function(u){var f=n[u];!f&&f!==0?l.style.removeProperty(Ou(u)):QE(u)?s+=u+"("+f+") ":c+=Ou(u)+": "+f+";"}),s&&(c+="transform: "+s+";"),l.style.cssText+=";"+c}var vo={exports:{}},go,hy;function ZE(){if(hy)return go;hy=1;var l="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";return go=l,go}var Eo,my;function KE(){if(my)return Eo;my=1;var l=ZE();function n(){}function c(){}return c.resetWarningCache=n,Eo=function(){function s(d,y,v,p,b,R){if(R!==l){var S=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw S.name="Invariant Violation",S}}s.isRequired=s;function u(){return s}var f={array:s,bigint:s,bool:s,func:s,number:s,object:s,string:s,symbol:s,any:s,arrayOf:u,element:s,elementType:s,instanceOf:u,node:s,objectOf:u,oneOf:u,oneOfType:u,shape:u,exact:u,checkPropTypes:c,resetWarningCache:n};return f.PropTypes=f,f},Eo}var yy;function $E(){return yy||(yy=1,vo.exports=KE()()),vo.exports}var FE=$E();const fa=fr(FE),py={disabled:!1},ap=Yt.createContext(null);var JE=function(n){return n.scrollTop},cr="unmounted",hl="exited",Ba="entering",yl="entered",Mo="exiting",ha=function(l){LE(n,l);function n(s,u){var f;f=l.call(this,s,u)||this;var d=u,y=d&&!d.isMounting?s.enter:s.appear,v;return f.appearStatus=null,s.in?y?(v=hl,f.appearStatus=Ba):v=yl:s.unmountOnExit||s.mountOnEnter?v=cr:v=hl,f.state={status:v},f.nextCallback=null,f}n.getDerivedStateFromProps=function(u,f){var d=u.in;return d&&f.status===cr?{status:hl}:null};var c=n.prototype;return c.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},c.componentDidUpdate=function(u){var f=null;if(u!==this.props){var d=this.state.status;this.props.in?d!==Ba&&d!==yl&&(f=Ba):(d===Ba||d===yl)&&(f=Mo)}this.updateStatus(!1,f)},c.componentWillUnmount=function(){this.cancelNextCallback()},c.getTimeouts=function(){var u=this.props.timeout,f,d,y;return f=d=y=u,u!=null&&typeof u!="number"&&(f=u.exit,d=u.enter,y=u.appear!==void 0?u.appear:d),{exit:f,enter:d,appear:y}},c.updateStatus=function(u,f){if(u===void 0&&(u=!1),f!==null)if(this.cancelNextCallback(),f===Ba){if(this.props.unmountOnExit||this.props.mountOnEnter){var d=this.props.nodeRef?this.props.nodeRef.current:ii.findDOMNode(this);d&&JE(d)}this.performEnter(u)}else this.performExit();else this.props.unmountOnExit&&this.state.status===hl&&this.setState({status:cr})},c.performEnter=function(u){var f=this,d=this.props.enter,y=this.context?this.context.isMounting:u,v=this.props.nodeRef?[y]:[ii.findDOMNode(this),y],p=v[0],b=v[1],R=this.getTimeouts(),S=y?R.appear:R.enter;if(!u&&!d||py.disabled){this.safeSetState({status:yl},function(){f.props.onEntered(p)});return}this.props.onEnter(p,b),this.safeSetState({status:Ba},function(){f.props.onEntering(p,b),f.onTransitionEnd(S,function(){f.safeSetState({status:yl},function(){f.props.onEntered(p,b)})})})},c.performExit=function(){var u=this,f=this.props.exit,d=this.getTimeouts(),y=this.props.nodeRef?void 0:ii.findDOMNode(this);if(!f||py.disabled){this.safeSetState({status:hl},function(){u.props.onExited(y)});return}this.props.onExit(y),this.safeSetState({status:Mo},function(){u.props.onExiting(y),u.onTransitionEnd(d.exit,function(){u.safeSetState({status:hl},function(){u.props.onExited(y)})})})},c.cancelNextCallback=function(){this.nextCallback!==null&&(this.nextCallback.cancel(),this.nextCallback=null)},c.safeSetState=function(u,f){f=this.setNextCallback(f),this.setState(u,f)},c.setNextCallback=function(u){var f=this,d=!0;return this.nextCallback=function(y){d&&(d=!1,f.nextCallback=null,u(y))},this.nextCallback.cancel=function(){d=!1},this.nextCallback},c.onTransitionEnd=function(u,f){this.setNextCallback(f);var d=this.props.nodeRef?this.props.nodeRef.current:ii.findDOMNode(this),y=u==null&&!this.props.addEndListener;if(!d||y){setTimeout(this.nextCallback,0);return}if(this.props.addEndListener){var v=this.props.nodeRef?[this.nextCallback]:[d,this.nextCallback],p=v[0],b=v[1];this.props.addEndListener(p,b)}u!=null&&setTimeout(this.nextCallback,u)},c.render=function(){var u=this.state.status;if(u===cr)return null;var f=this.props,d=f.children;f.in,f.mountOnEnter,f.unmountOnExit,f.appear,f.enter,f.exit,f.timeout,f.addEndListener,f.onEnter,f.onEntering,f.onEntered,f.onExit,f.onExiting,f.onExited,f.nodeRef;var y=zE(f,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]);return Yt.createElement(ap.Provider,{value:null},typeof d=="function"?d(u,y):Yt.cloneElement(Yt.Children.only(d),y))},n}(Yt.Component);ha.contextType=ap;ha.propTypes={};function ei(){}ha.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:ei,onEntering:ei,onEntered:ei,onExit:ei,onExiting:ei,onExited:ei};ha.UNMOUNTED=cr;ha.EXITED=hl;ha.ENTERING=Ba;ha.ENTERED=yl;ha.EXITING=Mo;function PE(l){return l.code==="Escape"||l.keyCode===27}function WE(){const l=g.version.split(".");return{major:+l[0],minor:+l[1],patch:+l[2]}}function $u(l){if(!l||typeof l=="function")return null;const{major:n}=WE();return n>=19?l.props.ref:l.ref}const ri=!!(typeof window<"u"&&window.document&&window.document.createElement);var zo=!1,Lo=!1;try{var bo={get passive(){return zo=!0},get once(){return Lo=zo=!0}};ri&&(window.addEventListener("test",bo,bo),window.removeEventListener("test",bo,!0))}catch{}function lp(l,n,c,s){if(s&&typeof s!="boolean"&&!Lo){var u=s.once,f=s.capture,d=c;!Lo&&u&&(d=c.__once||function y(v){this.removeEventListener(n,y,f),c.call(this,v)},c.__once=d),l.addEventListener(n,d,zo?s:f)}l.addEventListener(n,c,s)}function Uo(l,n,c,s){var u=s&&typeof s!="boolean"?s.capture:s;l.removeEventListener(n,c,u),c.__once&&l.removeEventListener(n,c.__once,u)}function Bu(l,n,c,s){return lp(l,n,c,s),function(){Uo(l,n,c,s)}}function IE(l,n,c,s){if(s===void 0&&(s=!0),l){var u=document.createEvent("HTMLEvents");u.initEvent(n,c,s),l.dispatchEvent(u)}}function eb(l){var n=gl(l,"transitionDuration")||"",c=n.indexOf("ms")===-1?1e3:1;return parseFloat(n)*c}function tb(l,n,c){c===void 0&&(c=5);var s=!1,u=setTimeout(function(){s||IE(l,"transitionend",!0)},n+c),f=Bu(l,"transitionend",function(){s=!0},{once:!0});return function(){clearTimeout(u),f()}}function ip(l,n,c,s){c==null&&(c=eb(l)||0);var u=tb(l,c,s),f=Bu(l,"transitionend",n);return function(){u(),f()}}function vy(l,n){const c=gl(l,n)||"",s=c.indexOf("ms")===-1?1e3:1;return parseFloat(c)*s}function nb(l,n){const c=vy(l,"transitionDuration"),s=vy(l,"transitionDelay"),u=ip(l,f=>{f.target===l&&(u(),n(f))},c+s)}function ab(l){l.offsetHeight}const gy=l=>!l||typeof l=="function"?l:n=>{l.current=n};function lb(l,n){const c=gy(l),s=gy(n);return u=>{c&&c(u),s&&s(u)}}function rp(l,n){return g.useMemo(()=>lb(l,n),[l,n])}function ib(l){return l&&"setState"in l?ii.findDOMNode(l):l??null}const rb=Yt.forwardRef(({onEnter:l,onEntering:n,onEntered:c,onExit:s,onExiting:u,onExited:f,addEndListener:d,children:y,childRef:v,...p},b)=>{const R=g.useRef(null),S=rp(R,v),_=N=>{S(ib(N))},O=N=>W=>{N&&R.current&&N(R.current,W)},H=g.useCallback(O(l),[l]),U=g.useCallback(O(n),[n]),M=g.useCallback(O(c),[c]),q=g.useCallback(O(s),[s]),Y=g.useCallback(O(u),[u]),J=g.useCallback(O(f),[f]),k=g.useCallback(O(d),[d]);return h.jsx(ha,{ref:b,...p,onEnter:H,onEntered:M,onEntering:U,onExit:q,onExited:J,onExiting:Y,addEndListener:k,nodeRef:R,children:typeof y=="function"?(N,W)=>y(N,{...W,ref:_}):Yt.cloneElement(y,{ref:_})})});function ub(l){const n=g.useRef(l);return g.useEffect(()=>{n.current=l},[l]),n}function Ho(l){const n=ub(l);return g.useCallback(function(...c){return n.current&&n.current(...c)},[n])}const Po=l=>g.forwardRef((n,c)=>h.jsx("div",{...n,ref:c,className:Ae(n.className,l)}));function cb(l){const n=g.useRef(l);return g.useEffect(()=>{n.current=l},[l]),n}function pl(l){const n=cb(l);return g.useCallback(function(...c){return n.current&&n.current(...c)},[n])}function sb(){const l=g.useRef(!0),n=g.useRef(()=>l.current);return g.useEffect(()=>(l.current=!0,()=>{l.current=!1}),[]),n.current}function ob(l){const n=g.useRef(null);return g.useEffect(()=>{n.current=l}),n.current}const fb=typeof global<"u"&&global.navigator&&global.navigator.product==="ReactNative",db=typeof document<"u",Ey=db||fb?g.useLayoutEffect:g.useEffect,hb=["as","disabled"];function mb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}function yb(l){return!l||l.trim()==="#"}function up({tagName:l,disabled:n,href:c,target:s,rel:u,role:f,onClick:d,tabIndex:y=0,type:v}){l||(c!=null||s!=null||u!=null?l="a":l="button");const p={tagName:l};if(l==="button")return[{type:v||"button",disabled:n},p];const b=S=>{if((n||l==="a"&&yb(c))&&S.preventDefault(),n){S.stopPropagation();return}d==null||d(S)},R=S=>{S.key===" "&&(S.preventDefault(),b(S))};return l==="a"&&(c||(c="#"),n&&(c=void 0)),[{role:f??"button",disabled:void 0,tabIndex:n?void 0:y,href:c,target:l==="a"?s:void 0,"aria-disabled":n||void 0,rel:l==="a"?u:void 0,onClick:b,onKeyDown:R},p]}const pb=g.forwardRef((l,n)=>{let{as:c,disabled:s}=l,u=mb(l,hb);const[f,{tagName:d}]=up(Object.assign({tagName:c,disabled:s},u));return h.jsx(d,Object.assign({},u,f,{ref:n}))});pb.displayName="Button";const vb={[Ba]:"show",[yl]:"show"},Wo=g.forwardRef(({className:l,children:n,transitionClasses:c={},onEnter:s,...u},f)=>{const d={in:!1,timeout:300,mountOnEnter:!1,unmountOnExit:!1,appear:!1,...u},y=g.useCallback((v,p)=>{ab(v),s==null||s(v,p)},[s]);return h.jsx(rb,{ref:f,addEndListener:nb,...d,onEnter:y,childRef:$u(n),children:(v,p)=>g.cloneElement(n,{...p,className:Ae("fade",l,n.props.className,vb[v],c[v])})})});Wo.displayName="Fade";const gb={"aria-label":fa.string,onClick:fa.func,variant:fa.oneOf(["white"])},Io=g.forwardRef(({className:l,variant:n,"aria-label":c="Close",...s},u)=>h.jsx("button",{ref:u,type:"button",className:Ae("btn-close",n&&`btn-close-${n}`,l),"aria-label":c,...s}));Io.displayName="CloseButton";Io.propTypes=gb;const Bo=g.forwardRef(({as:l,bsPrefix:n,variant:c="primary",size:s,active:u=!1,disabled:f=!1,className:d,...y},v)=>{const p=Qe(n,"btn"),[b,{tagName:R}]=up({tagName:l,disabled:f,...y}),S=R;return h.jsx(S,{...b,...y,ref:v,disabled:f,className:Ae(d,p,u&&"active",c&&`${p}-${c}`,s&&`${p}-${s}`,y.href&&f&&"disabled")})});Bo.displayName="Button";const ef=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"card-body"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));ef.displayName="CardBody";const cp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"card-footer"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));cp.displayName="CardFooter";const sp=g.createContext(null);sp.displayName="CardHeaderContext";const op=g.forwardRef(({bsPrefix:l,className:n,as:c="div",...s},u)=>{const f=Qe(l,"card-header"),d=g.useMemo(()=>({cardHeaderBsPrefix:f}),[f]);return h.jsx(sp.Provider,{value:d,children:h.jsx(c,{ref:u,...s,className:Ae(n,f)})})});op.displayName="CardHeader";const fp=g.forwardRef(({bsPrefix:l,className:n,variant:c,as:s="img",...u},f)=>{const d=Qe(l,"card-img");return h.jsx(s,{ref:f,className:Ae(c?`${d}-${c}`:d,n),...u})});fp.displayName="CardImg";const dp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"card-img-overlay"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));dp.displayName="CardImgOverlay";const hp=g.forwardRef(({className:l,bsPrefix:n,as:c="a",...s},u)=>(n=Qe(n,"card-link"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));hp.displayName="CardLink";const Eb=Po("h6"),mp=g.forwardRef(({className:l,bsPrefix:n,as:c=Eb,...s},u)=>(n=Qe(n,"card-subtitle"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));mp.displayName="CardSubtitle";const yp=g.forwardRef(({className:l,bsPrefix:n,as:c="p",...s},u)=>(n=Qe(n,"card-text"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));yp.displayName="CardText";const bb=Po("h5"),pp=g.forwardRef(({className:l,bsPrefix:n,as:c=bb,...s},u)=>(n=Qe(n,"card-title"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));pp.displayName="CardTitle";const vp=g.forwardRef(({bsPrefix:l,className:n,bg:c,text:s,border:u,body:f=!1,children:d,as:y="div",...v},p)=>{const b=Qe(l,"card");return h.jsx(y,{ref:p,...v,className:Ae(n,b,c&&`bg-${c}`,s&&`text-${s}`,u&&`border-${u}`),children:f?h.jsx(ef,{children:d}):d})});vp.displayName="Card";const Yn=Object.assign(vp,{Img:fp,Title:pp,Subtitle:mp,Body:ef,Link:hp,Text:yp,Header:op,Footer:cp,ImgOverlay:dp});function Sb(l){const n=g.useRef(l);return n.current=l,n}function xb(l){const n=Sb(l);g.useEffect(()=>()=>n.current(),[])}function _b(l,n){return g.Children.toArray(l).some(c=>g.isValidElement(c)&&c.type===n)}function Rb({as:l,bsPrefix:n,className:c,...s}){n=Qe(n,"col");const u=tp(),f=np(),d=[],y=[];return u.forEach(v=>{const p=s[v];delete s[v];let b,R,S;typeof p=="object"&&p!=null?{span:b,offset:R,order:S}=p:b=p;const _=v!==f?`-${v}`:"";b&&d.push(b===!0?`${n}${_}`:`${n}${_}-${b}`),S!=null&&y.push(`order${_}-${S}`),R!=null&&y.push(`offset${_}-${R}`)}),[{...s,className:Ae(c,...d,...y)},{as:l,bsPrefix:n,spans:d}]}const ln=g.forwardRef((l,n)=>{const[{className:c,...s},{as:u="div",bsPrefix:f,spans:d}]=Rb(l);return h.jsx(u,{...s,ref:n,className:Ae(c,!d.length&&f)})});ln.displayName="Col";const Ya=g.forwardRef(({bsPrefix:l,fluid:n=!1,as:c="div",className:s,...u},f)=>{const d=Qe(l,"container"),y=typeof n=="string"?`-${n}`:"-fluid";return h.jsx(c,{ref:f,...u,className:Ae(s,n?`${d}${y}`:d)})});Ya.displayName="Container";var Tb=Function.prototype.bind.call(Function.prototype.call,[].slice);function ti(l,n){return Tb(l.querySelectorAll(n))}function by(l,n){if(l.contains)return l.contains(n);if(l.compareDocumentPosition)return l===n||!!(l.compareDocumentPosition(n)&16)}var So,Sy;function Nb(){if(Sy)return So;Sy=1;var l=function(){};return So=l,So}var Cb=Nb();const q2=fr(Cb),jb="data-rr-ui-";function Ob(l){return`${jb}${l}`}const gp=g.createContext(ri?window:void 0);gp.Provider;function tf(){return g.useContext(gp)}const Db={type:fa.string,tooltip:fa.bool,as:fa.elementType},Fu=g.forwardRef(({as:l="div",className:n,type:c="valid",tooltip:s=!1,...u},f)=>h.jsx(l,{...u,ref:f,className:Ae(n,`${c}-${s?"tooltip":"feedback"}`)}));Fu.displayName="Feedback";Fu.propTypes=Db;const da=g.createContext({}),nf=g.forwardRef(({id:l,bsPrefix:n,className:c,type:s="checkbox",isValid:u=!1,isInvalid:f=!1,as:d="input",...y},v)=>{const{controlId:p}=g.useContext(da);return n=Qe(n,"form-check-input"),h.jsx(d,{...y,ref:v,type:s,id:l||p,className:Ae(c,n,u&&"is-valid",f&&"is-invalid")})});nf.displayName="FormCheckInput";const qu=g.forwardRef(({bsPrefix:l,className:n,htmlFor:c,...s},u)=>{const{controlId:f}=g.useContext(da);return l=Qe(l,"form-check-label"),h.jsx("label",{...s,ref:u,htmlFor:c||f,className:Ae(n,l)})});qu.displayName="FormCheckLabel";const Ep=g.forwardRef(({id:l,bsPrefix:n,bsSwitchPrefix:c,inline:s=!1,reverse:u=!1,disabled:f=!1,isValid:d=!1,isInvalid:y=!1,feedbackTooltip:v=!1,feedback:p,feedbackType:b,className:R,style:S,title:_="",type:O="checkbox",label:H,children:U,as:M="input",...q},Y)=>{n=Qe(n,"form-check"),c=Qe(c,"form-switch");const{controlId:J}=g.useContext(da),k=g.useMemo(()=>({controlId:l||J}),[J,l]),N=!U&&H!=null&&H!==!1||_b(U,qu),W=h.jsx(nf,{...q,type:O==="switch"?"checkbox":O,ref:Y,isValid:d,isInvalid:y,disabled:f,as:M});return h.jsx(da.Provider,{value:k,children:h.jsx("div",{style:S,className:Ae(R,N&&n,s&&`${n}-inline`,u&&`${n}-reverse`,O==="switch"&&c),children:U||h.jsxs(h.Fragment,{children:[W,N&&h.jsx(qu,{title:_,children:H}),p&&h.jsx(Fu,{type:b,tooltip:v,children:p})]})})})});Ep.displayName="FormCheck";const Vu=Object.assign(Ep,{Input:nf,Label:qu}),bp=g.forwardRef(({bsPrefix:l,type:n,size:c,htmlSize:s,id:u,className:f,isValid:d=!1,isInvalid:y=!1,plaintext:v,readOnly:p,as:b="input",...R},S)=>{const{controlId:_}=g.useContext(da);return l=Qe(l,"form-control"),h.jsx(b,{...R,type:n,size:s,ref:S,readOnly:p,id:u||_,className:Ae(f,v?`${l}-plaintext`:l,c&&`${l}-${c}`,n==="color"&&`${l}-color`,d&&"is-valid",y&&"is-invalid")})});bp.displayName="FormControl";const wb=Object.assign(bp,{Feedback:Fu}),Sp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"form-floating"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));Sp.displayName="FormFloating";const af=g.forwardRef(({controlId:l,as:n="div",...c},s)=>{const u=g.useMemo(()=>({controlId:l}),[l]);return h.jsx(da.Provider,{value:u,children:h.jsx(n,{...c,ref:s})})});af.displayName="FormGroup";const xp=g.forwardRef(({as:l="label",bsPrefix:n,column:c=!1,visuallyHidden:s=!1,className:u,htmlFor:f,...d},y)=>{const{controlId:v}=g.useContext(da);n=Qe(n,"form-label");let p="col-form-label";typeof c=="string"&&(p=`${p} ${p}-${c}`);const b=Ae(u,n,s&&"visually-hidden",c&&p);return f=f||v,c?h.jsx(ln,{ref:y,as:"label",className:b,htmlFor:f,...d}):h.jsx(l,{ref:y,className:b,htmlFor:f,...d})});xp.displayName="FormLabel";const _p=g.forwardRef(({bsPrefix:l,className:n,id:c,...s},u)=>{const{controlId:f}=g.useContext(da);return l=Qe(l,"form-range"),h.jsx("input",{...s,type:"range",ref:u,className:Ae(n,l),id:c||f})});_p.displayName="FormRange";const Rp=g.forwardRef(({bsPrefix:l,size:n,htmlSize:c,className:s,isValid:u=!1,isInvalid:f=!1,id:d,...y},v)=>{const{controlId:p}=g.useContext(da);return l=Qe(l,"form-select"),h.jsx("select",{...y,size:c,ref:v,className:Ae(s,l,n&&`${l}-${n}`,u&&"is-valid",f&&"is-invalid"),id:d||p})});Rp.displayName="FormSelect";const Tp=g.forwardRef(({bsPrefix:l,className:n,as:c="small",muted:s,...u},f)=>(l=Qe(l,"form-text"),h.jsx(c,{...u,ref:f,className:Ae(n,l,s&&"text-muted")})));Tp.displayName="FormText";const Np=g.forwardRef((l,n)=>h.jsx(Vu,{...l,ref:n,type:"switch"}));Np.displayName="Switch";const Ab=Object.assign(Np,{Input:Vu.Input,Label:Vu.Label}),Cp=g.forwardRef(({bsPrefix:l,className:n,children:c,controlId:s,label:u,...f},d)=>(l=Qe(l,"form-floating"),h.jsxs(af,{ref:d,className:Ae(n,l),controlId:s,...f,children:[c,h.jsx("label",{htmlFor:s,children:u})]})));Cp.displayName="FloatingLabel";const Mb={_ref:fa.any,validated:fa.bool,as:fa.elementType},lf=g.forwardRef(({className:l,validated:n,as:c="form",...s},u)=>h.jsx(c,{...s,ref:u,className:Ae(l,n&&"was-validated")}));lf.displayName="Form";lf.propTypes=Mb;const Du=Object.assign(lf,{Group:af,Control:wb,Floating:Sp,Check:Vu,Switch:Ab,Label:xp,Text:Tp,Range:_p,Select:Rp,FloatingLabel:Cp}),xy=l=>!l||typeof l=="function"?l:n=>{l.current=n};function zb(l,n){const c=xy(l),s=xy(n);return u=>{c&&c(u),s&&s(u)}}function rf(l,n){return g.useMemo(()=>zb(l,n),[l,n])}var wu;function _y(l){if((!wu&&wu!==0||l)&&ri){var n=document.createElement("div");n.style.position="absolute",n.style.top="-9999px",n.style.width="50px",n.style.height="50px",n.style.overflow="scroll",document.body.appendChild(n),wu=n.offsetWidth-n.clientWidth,document.body.removeChild(n)}return wu}function Lb(){return g.useState(null)}function xo(l){l===void 0&&(l=Ku());try{var n=l.activeElement;return!n||!n.nodeName?null:n}catch{return l.body}}function Ub(l){const n=g.useRef(l);return n.current=l,n}function Hb(l){const n=Ub(l);g.useEffect(()=>()=>n.current(),[])}function Bb(l=document){const n=l.defaultView;return Math.abs(n.innerWidth-l.documentElement.clientWidth)}const Ry=Ob("modal-open");class uf{constructor({ownerDocument:n,handleContainerOverflow:c=!0,isRTL:s=!1}={}){this.handleContainerOverflow=c,this.isRTL=s,this.modals=[],this.ownerDocument=n}getScrollbarWidth(){return Bb(this.ownerDocument)}getElement(){return(this.ownerDocument||document).body}setModalAttributes(n){}removeModalAttributes(n){}setContainerStyle(n){const c={overflow:"hidden"},s=this.isRTL?"paddingLeft":"paddingRight",u=this.getElement();n.style={overflow:u.style.overflow,[s]:u.style[s]},n.scrollBarWidth&&(c[s]=`${parseInt(gl(u,s)||"0",10)+n.scrollBarWidth}px`),u.setAttribute(Ry,""),gl(u,c)}reset(){[...this.modals].forEach(n=>this.remove(n))}removeContainerStyle(n){const c=this.getElement();c.removeAttribute(Ry),Object.assign(c.style,n.style)}add(n){let c=this.modals.indexOf(n);return c!==-1||(c=this.modals.length,this.modals.push(n),this.setModalAttributes(n),c!==0)||(this.state={scrollBarWidth:this.getScrollbarWidth(),style:{}},this.handleContainerOverflow&&this.setContainerStyle(this.state)),c}remove(n){const c=this.modals.indexOf(n);c!==-1&&(this.modals.splice(c,1),!this.modals.length&&this.handleContainerOverflow&&this.removeContainerStyle(this.state),this.removeModalAttributes(n))}isTopModal(n){return!!this.modals.length&&this.modals[this.modals.length-1]===n}}const _o=(l,n)=>ri?l==null?(n||Ku()).body:(typeof l=="function"&&(l=l()),l&&"current"in l&&(l=l.current),l&&("nodeType"in l||l.getBoundingClientRect)?l:null):null;function qb(l,n){const c=tf(),[s,u]=g.useState(()=>_o(l,c==null?void 0:c.document));if(!s){const f=_o(l);f&&u(f)}return g.useEffect(()=>{},[n,s]),g.useEffect(()=>{const f=_o(l);f!==s&&u(f)},[l,s]),s}function Vb({children:l,in:n,onExited:c,mountOnEnter:s,unmountOnExit:u}){const f=g.useRef(null),d=g.useRef(n),y=pl(c);g.useEffect(()=>{n?d.current=!0:y(f.current)},[n,y]);const v=rf(f,$u(l)),p=g.cloneElement(l,{ref:v});return n?p:u||!d.current&&s?null:p}const Yb=["onEnter","onEntering","onEntered","onExit","onExiting","onExited","addEndListener","children"];function Gb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}function kb(l){let{onEnter:n,onEntering:c,onEntered:s,onExit:u,onExiting:f,onExited:d,addEndListener:y,children:v}=l,p=Gb(l,Yb);const b=g.useRef(null),R=rf(b,$u(v)),S=J=>k=>{J&&b.current&&J(b.current,k)},_=g.useCallback(S(n),[n]),O=g.useCallback(S(c),[c]),H=g.useCallback(S(s),[s]),U=g.useCallback(S(u),[u]),M=g.useCallback(S(f),[f]),q=g.useCallback(S(d),[d]),Y=g.useCallback(S(y),[y]);return Object.assign({},p,{nodeRef:b},n&&{onEnter:_},c&&{onEntering:O},s&&{onEntered:H},u&&{onExit:U},f&&{onExiting:M},d&&{onExited:q},y&&{addEndListener:Y},{children:typeof v=="function"?(J,k)=>v(J,Object.assign({},k,{ref:R})):g.cloneElement(v,{ref:R})})}const Xb=["component"];function Qb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}const Zb=g.forwardRef((l,n)=>{let{component:c}=l,s=Qb(l,Xb);const u=kb(s);return h.jsx(c,Object.assign({ref:n},u))});function Kb({in:l,onTransition:n}){const c=g.useRef(null),s=g.useRef(!0),u=pl(n);return Ey(()=>{if(!c.current)return;let f=!1;return u({in:l,element:c.current,initial:s.current,isStale:()=>f}),()=>{f=!0}},[l,u]),Ey(()=>(s.current=!1,()=>{s.current=!0}),[]),c}function $b({children:l,in:n,onExited:c,onEntered:s,transition:u}){const[f,d]=g.useState(!n);n&&f&&d(!1);const y=Kb({in:!!n,onTransition:p=>{const b=()=>{p.isStale()||(p.in?s==null||s(p.element,p.initial):(d(!0),c==null||c(p.element)))};Promise.resolve(u(p)).then(b,R=>{throw p.in||d(!0),R})}}),v=rf(y,$u(l));return f&&!n?null:g.cloneElement(l,{ref:v})}function Ty(l,n,c){return l?h.jsx(Zb,Object.assign({},c,{component:l})):n?h.jsx($b,Object.assign({},c,{transition:n})):h.jsx(Vb,Object.assign({},c))}const Fb=["show","role","className","style","children","backdrop","keyboard","onBackdropClick","onEscapeKeyDown","transition","runTransition","backdropTransition","runBackdropTransition","autoFocus","enforceFocus","restoreFocus","restoreFocusOptions","renderDialog","renderBackdrop","manager","container","onShow","onHide","onExit","onExited","onExiting","onEnter","onEntering","onEntered"];function Jb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}let Ro;function Pb(l){return Ro||(Ro=new uf({ownerDocument:l==null?void 0:l.document})),Ro}function Wb(l){const n=tf(),c=l||Pb(n),s=g.useRef({dialog:null,backdrop:null});return Object.assign(s.current,{add:()=>c.add(s.current),remove:()=>c.remove(s.current),isTopModal:()=>c.isTopModal(s.current),setDialogRef:g.useCallback(u=>{s.current.dialog=u},[]),setBackdropRef:g.useCallback(u=>{s.current.backdrop=u},[])})}const jp=g.forwardRef((l,n)=>{let{show:c=!1,role:s="dialog",className:u,style:f,children:d,backdrop:y=!0,keyboard:v=!0,onBackdropClick:p,onEscapeKeyDown:b,transition:R,runTransition:S,backdropTransition:_,runBackdropTransition:O,autoFocus:H=!0,enforceFocus:U=!0,restoreFocus:M=!0,restoreFocusOptions:q,renderDialog:Y,renderBackdrop:J=De=>h.jsx("div",Object.assign({},De)),manager:k,container:N,onShow:W,onHide:ie=()=>{},onExit:X,onExited:I,onExiting:de,onEnter:Ne,onEntering:Ye,onEntered:Be}=l,ze=Jb(l,Fb);const K=tf(),ce=qb(N),ne=Wb(k),Re=sb(),T=ob(c),[Q,le]=g.useState(!c),te=g.useRef(null);g.useImperativeHandle(n,()=>ne,[ne]),ri&&!T&&c&&(te.current=xo(K==null?void 0:K.document)),c&&Q&&le(!1);const P=pl(()=>{if(ne.add(),Ee.current=Bu(document,"keydown",Ce),Le.current=Bu(document,"focus",()=>setTimeout(ye),!0),W&&W(),H){var De,Rt;const St=xo((De=(Rt=ne.dialog)==null?void 0:Rt.ownerDocument)!=null?De:K==null?void 0:K.document);ne.dialog&&St&&!by(ne.dialog,St)&&(te.current=St,ne.dialog.focus())}}),ge=pl(()=>{if(ne.remove(),Ee.current==null||Ee.current(),Le.current==null||Le.current(),M){var De;(De=te.current)==null||De.focus==null||De.focus(q),te.current=null}});g.useEffect(()=>{!c||!ce||P()},[c,ce,P]),g.useEffect(()=>{Q&&ge()},[Q,ge]),Hb(()=>{ge()});const ye=pl(()=>{if(!U||!Re()||!ne.isTopModal())return;const De=xo(K==null?void 0:K.document);ne.dialog&&De&&!by(ne.dialog,De)&&ne.dialog.focus()}),Je=pl(De=>{De.target===De.currentTarget&&(p==null||p(De),y===!0&&ie())}),Ce=pl(De=>{v&&PE(De)&&ne.isTopModal()&&(b==null||b(De),De.defaultPrevented||ie())}),Le=g.useRef(),Ee=g.useRef(),Ze=(...De)=>{le(!0),I==null||I(...De)};if(!ce)return null;const vt=Object.assign({role:s,ref:ne.setDialogRef,"aria-modal":s==="dialog"?!0:void 0},ze,{style:f,className:u,tabIndex:-1});let it=Y?Y(vt):h.jsx("div",Object.assign({},vt,{children:g.cloneElement(d,{role:"document"})}));it=Ty(R,S,{unmountOnExit:!0,mountOnEnter:!0,appear:!0,in:!!c,onExit:X,onExiting:de,onExited:Ze,onEnter:Ne,onEntering:Ye,onEntered:Be,children:it});let lt=null;return y&&(lt=J({ref:ne.setBackdropRef,onClick:Je}),lt=Ty(_,O,{in:!!c,appear:!0,mountOnEnter:!0,unmountOnExit:!0,children:lt})),h.jsx(h.Fragment,{children:ii.createPortal(h.jsxs(h.Fragment,{children:[lt,it]}),ce)})});jp.displayName="Modal";const Ib=Object.assign(jp,{Manager:uf});function eS(l,n){return l.classList?l.classList.contains(n):(" "+(l.className.baseVal||l.className)+" ").indexOf(" "+n+" ")!==-1}function tS(l,n){l.classList?l.classList.add(n):eS(l,n)||(typeof l.className=="string"?l.className=l.className+" "+n:l.setAttribute("class",(l.className&&l.className.baseVal||"")+" "+n))}function Ny(l,n){return l.replace(new RegExp("(^|\\s)"+n+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}function nS(l,n){l.classList?l.classList.remove(n):typeof l.className=="string"?l.className=Ny(l.className,n):l.setAttribute("class",Ny(l.className&&l.className.baseVal||"",n))}const ni={FIXED_CONTENT:".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",STICKY_CONTENT:".sticky-top",NAVBAR_TOGGLER:".navbar-toggler"};class aS extends uf{adjustAndStore(n,c,s){const u=c.style[n];c.dataset[n]=u,gl(c,{[n]:`${parseFloat(gl(c,n))+s}px`})}restore(n,c){const s=c.dataset[n];s!==void 0&&(delete c.dataset[n],gl(c,{[n]:s}))}setContainerStyle(n){super.setContainerStyle(n);const c=this.getElement();if(tS(c,"modal-open"),!n.scrollBarWidth)return;const s=this.isRTL?"paddingLeft":"paddingRight",u=this.isRTL?"marginLeft":"marginRight";ti(c,ni.FIXED_CONTENT).forEach(f=>this.adjustAndStore(s,f,n.scrollBarWidth)),ti(c,ni.STICKY_CONTENT).forEach(f=>this.adjustAndStore(u,f,-n.scrollBarWidth)),ti(c,ni.NAVBAR_TOGGLER).forEach(f=>this.adjustAndStore(u,f,n.scrollBarWidth))}removeContainerStyle(n){super.removeContainerStyle(n);const c=this.getElement();nS(c,"modal-open");const s=this.isRTL?"paddingLeft":"paddingRight",u=this.isRTL?"marginLeft":"marginRight";ti(c,ni.FIXED_CONTENT).forEach(f=>this.restore(s,f)),ti(c,ni.STICKY_CONTENT).forEach(f=>this.restore(u,f)),ti(c,ni.NAVBAR_TOGGLER).forEach(f=>this.restore(u,f))}}let To;function lS(l){return To||(To=new aS(l)),To}const Op=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"modal-body"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));Op.displayName="ModalBody";const Dp=g.createContext({onHide(){}}),cf=g.forwardRef(({bsPrefix:l,className:n,contentClassName:c,centered:s,size:u,fullscreen:f,children:d,scrollable:y,...v},p)=>{l=Qe(l,"modal");const b=`${l}-dialog`,R=typeof f=="string"?`${l}-fullscreen-${f}`:`${l}-fullscreen`;return h.jsx("div",{...v,ref:p,className:Ae(b,n,u&&`${l}-${u}`,s&&`${b}-centered`,y&&`${b}-scrollable`,f&&R),children:h.jsx("div",{className:Ae(`${l}-content`,c),children:d})})});cf.displayName="ModalDialog";const wp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"modal-footer"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));wp.displayName="ModalFooter";const iS=g.forwardRef(({closeLabel:l="Close",closeVariant:n,closeButton:c=!1,onHide:s,children:u,...f},d)=>{const y=g.useContext(Dp),v=Ho(()=>{y==null||y.onHide(),s==null||s()});return h.jsxs("div",{ref:d,...f,children:[u,c&&h.jsx(Io,{"aria-label":l,variant:n,onClick:v})]})}),Ap=g.forwardRef(({bsPrefix:l,className:n,closeLabel:c="Close",closeButton:s=!1,...u},f)=>(l=Qe(l,"modal-header"),h.jsx(iS,{ref:f,...u,className:Ae(n,l),closeLabel:c,closeButton:s})));Ap.displayName="ModalHeader";const rS=Po("h4"),Mp=g.forwardRef(({className:l,bsPrefix:n,as:c=rS,...s},u)=>(n=Qe(n,"modal-title"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));Mp.displayName="ModalTitle";function uS(l){return h.jsx(Wo,{...l,timeout:null})}function cS(l){return h.jsx(Wo,{...l,timeout:null})}const zp=g.forwardRef(({bsPrefix:l,className:n,style:c,dialogClassName:s,contentClassName:u,children:f,dialogAs:d=cf,"data-bs-theme":y,"aria-labelledby":v,"aria-describedby":p,"aria-label":b,show:R=!1,animation:S=!0,backdrop:_=!0,keyboard:O=!0,onEscapeKeyDown:H,onShow:U,onHide:M,container:q,autoFocus:Y=!0,enforceFocus:J=!0,restoreFocus:k=!0,restoreFocusOptions:N,onEntered:W,onExit:ie,onExiting:X,onEnter:I,onEntering:de,onExited:Ne,backdropClassName:Ye,manager:Be,...ze},K)=>{const[ce,ne]=g.useState({}),[Re,T]=g.useState(!1),Q=g.useRef(!1),le=g.useRef(!1),te=g.useRef(null),[P,ge]=Lb(),ye=rp(K,ge),Je=Ho(M),Ce=BE();l=Qe(l,"modal");const Le=g.useMemo(()=>({onHide:Je}),[Je]);function Ee(){return Be||lS({isRTL:Ce})}function Ze(_e){if(!ri)return;const Ie=Ee().getScrollbarWidth()>0,Gt=_e.scrollHeight>Ku(_e).documentElement.clientHeight;ne({paddingRight:Ie&&!Gt?_y():void 0,paddingLeft:!Ie&&Gt?_y():void 0})}const vt=Ho(()=>{P&&Ze(P.dialog)});xb(()=>{Uo(window,"resize",vt),te.current==null||te.current()});const it=()=>{Q.current=!0},lt=_e=>{Q.current&&P&&_e.target===P.dialog&&(le.current=!0),Q.current=!1},De=()=>{T(!0),te.current=ip(P.dialog,()=>{T(!1)})},Rt=_e=>{_e.target===_e.currentTarget&&De()},St=_e=>{if(_==="static"){Rt(_e);return}if(le.current||_e.target!==_e.currentTarget){le.current=!1;return}M==null||M()},Pt=_e=>{O?H==null||H(_e):(_e.preventDefault(),_==="static"&&De())},Zt=(_e,Ie)=>{_e&&Ze(_e),I==null||I(_e,Ie)},un=_e=>{te.current==null||te.current(),ie==null||ie(_e)},cn=(_e,Ie)=>{de==null||de(_e,Ie),lp(window,"resize",vt)},Ut=_e=>{_e&&(_e.style.display=""),Ne==null||Ne(_e),Uo(window,"resize",vt)},Ht=g.useCallback(_e=>h.jsx("div",{..._e,className:Ae(`${l}-backdrop`,Ye,!S&&"show")}),[S,Ye,l]),mt={...c,...ce};mt.display="block";const Kt=_e=>h.jsx("div",{role:"dialog",..._e,style:mt,className:Ae(n,l,Re&&`${l}-static`,!S&&"show"),onClick:_?St:void 0,onMouseUp:lt,"data-bs-theme":y,"aria-label":b,"aria-labelledby":v,"aria-describedby":p,children:h.jsx(d,{...ze,onMouseDown:it,className:s,contentClassName:u,children:f})});return h.jsx(Dp.Provider,{value:Le,children:h.jsx(Ib,{show:R,ref:ye,backdrop:_,container:q,keyboard:!0,autoFocus:Y,enforceFocus:J,restoreFocus:k,restoreFocusOptions:N,onEscapeKeyDown:Pt,onShow:U,onHide:M,onEnter:Zt,onEntering:cn,onEntered:W,onExit:un,onExiting:X,onExited:Ut,manager:Ee(),transition:S?uS:void 0,backdropTransition:S?cS:void 0,renderBackdrop:Ht,renderDialog:Kt})})});zp.displayName="Modal";const ir=Object.assign(zp,{Body:Op,Header:Ap,Title:Mp,Footer:wp,Dialog:cf,TRANSITION_DURATION:300,BACKDROP_TRANSITION_DURATION:150}),Rn=g.forwardRef(({bsPrefix:l,className:n,as:c="div",...s},u)=>{const f=Qe(l,"row"),d=tp(),y=np(),v=`${f}-cols`,p=[];return d.forEach(b=>{const R=s[b];delete s[b];let S;R!=null&&typeof R=="object"?{cols:S}=R:S=R;const _=b!==y?`-${b}`:"";S!=null&&p.push(`${v}${_}-${S}`)}),h.jsx(c,{ref:u,...s,className:Ae(n,f,...p)})});Rn.displayName="Row";const sS="/static/DY3vaYXT.svg";function oS(){const l=Ke.c(6),{user:n}=g.useContext(Fo),{pathname:c}=Xn();let s;l[0]===Symbol.for("react.memo_cache_sentinel")?(s=h.jsx(ln,{xs:10,children:h.jsx("div",{className:"nav-wrapper",children:h.jsxs("nav",{className:"header-nav",children:[h.jsx("a",{href:"https://geant.org/",children:h.jsx("img",{src:sS,alt:"GÉANT Logo"})}),h.jsxs("ul",{children:[h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://network.geant.org/",children:"NETWORK"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://geant.org/services/",children:"SERVICES"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://community.geant.org/",children:"COMMUNITY"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://tnc23.geant.org/",children:"TNC"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://geant.org/projects/",children:"PROJECTS"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://connect.geant.org/",children:"CONNECT"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://impact.geant.org/",children:"IMPACT"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://careers.geant.org/",children:"CAREERS"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://about.geant.org/",children:"ABOUT"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://connect.geant.org/community-news",children:"NEWS"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://resources.geant.org/",children:"RESOURCES"})}),h.jsx("li",{children:h.jsx(Tn,{className:"nav-link-entry",to:"/",children:"COMPENDIUM"})})]})]})})}),l[0]=s):s=l[0];let u;l[1]!==c||l[2]!==n.permissions.admin?(u=n.permissions.admin&&!c.includes("survey")&&h.jsx("div",{className:"nav-link",style:{float:"right"},children:h.jsx(Tn,{className:"nav-link-entry",to:"/survey",children:h.jsx("span",{children:"Go to Survey"})})}),l[1]=c,l[2]=n.permissions.admin,l[3]=u):u=l[3];let f;return l[4]!==u?(f=h.jsx("div",{className:"external-page-nav-bar",children:h.jsx(Ya,{children:h.jsxs(Rn,{children:[s,h.jsx(ln,{xs:2,children:u})]})})}),l[4]=u,l[5]=f):f=l[5],f}const fS="/static/A3T3A-a_.svg",dS="/static/DOOiIGTs.png";function hS(){const l=Ke.c(9);let n;l[0]===Symbol.for("react.memo_cache_sentinel")?(n=h.jsx("a",{href:"https://geant.org",children:h.jsx("img",{src:fS,className:"m-3",style:{maxWidth:"100px"},alt:"GÉANT Logo"})}),l[0]=n):n=l[0];let c;l[1]===Symbol.for("react.memo_cache_sentinel")?(c=h.jsxs(ln,{children:[n,h.jsx("img",{src:dS,className:"m-3",style:{maxWidth:"200px"},alt:"European Union Flag"})]}),l[1]=c):c=l[1];let s,u;l[2]===Symbol.for("react.memo_cache_sentinel")?(s=h.jsx("a",{className:"mx-3 footer-link",href:"https://geant.org/Disclaimer/",children:"Disclaimer"}),u=h.jsx("wbr",{}),l[2]=s,l[3]=u):(s=l[2],u=l[3]);let f,d;l[4]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx("a",{className:"mx-3 footer-link",href:"https://geant.org/geant-anti-slavery-policy/",children:"GEANT Anti‑Slavery Policy"}),d=h.jsx("wbr",{}),l[4]=f,l[5]=d):(f=l[4],d=l[5]);let y,v;l[6]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("a",{className:"mx-3 footer-link",href:"https://geant.org/Privacy-Notice/",children:"Privacy Policy"}),v=h.jsx("wbr",{}),l[6]=y,l[7]=v):(y=l[6],v=l[7]);let p;return l[8]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx("footer",{className:"page-footer pt-3",children:h.jsx(Ya,{children:h.jsxs(Rn,{children:[c,h.jsx(ln,{className:"mt-4 text-end",children:h.jsxs("span",{children:[s,u,"|",f,d,"|",y,v,"|",h.jsx("a",{className:"mx-3 footer-link",style:{cursor:"pointer"},onClick:mS,children:"Analytics Consent"})]})})]})})}),l[8]=p):p=l[8],p}function mS(){localStorage.removeItem("matomo_consent"),window.location.reload()}const Lp="/static/C4lsyu6A.svg",Up="/static/DhA-EmEc.svg";function Hp(){const l=Ke.c(16),n=g.useContext(ep);let c;l[0]!==n?(c=O=>n==null?void 0:n.trackPageView(O),l[0]=n,l[1]=c):c=l[1];const s=c;let u;l[2]!==n?(u=O=>n==null?void 0:n.trackEvent(O),l[2]=n,l[3]=u):u=l[3];const f=u;let d;l[4]!==n?(d=()=>n==null?void 0:n.trackEvents(),l[4]=n,l[5]=d):d=l[5];const y=d;let v;l[6]!==n?(v=O=>n==null?void 0:n.trackLink(O),l[6]=n,l[7]=v):v=l[7];const p=v,b=yS;let R;l[8]!==n?(R=(O,...H)=>{const U=H;n==null||n.pushInstruction(O,...U)},l[8]=n,l[9]=R):R=l[9];const S=R;let _;return l[10]!==S||l[11]!==f||l[12]!==y||l[13]!==p||l[14]!==s?(_={trackEvent:f,trackEvents:y,trackPageView:s,trackLink:p,enableLinkTracking:b,pushInstruction:S},l[10]=S,l[11]=f,l[12]=y,l[13]=p,l[14]=s,l[15]=_):_=l[15],_}function yS(){}function Bp(){const l=Ke.c(13),{trackPageView:n}=Hp();let c,s;l[0]!==n?(c=()=>{n({documentTitle:"GEANT Compendium Landing Page"})},s=[n],l[0]=n,l[1]=c,l[2]=s):(c=l[1],s=l[2]),g.useEffect(c,s);let u;l[3]===Symbol.for("react.memo_cache_sentinel")?(u=h.jsx("h1",{className:"geant-header",children:"THE GÉANT COMPENDIUM OF NRENS"}),l[3]=u):u=l[3];let f;l[4]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx(Rn,{children:h.jsxs("div",{className:"center-text",children:[u,h.jsxs("div",{className:"wordwrap pt-4",children:[h.jsx("p",{style:{textAlign:"left",fontSize:"20px"},children:"Each year GÉANT invites European National Research and Eduction Networks to fill in a questionnaire asking about their network, their organisation, standards and policies, connected users, and the services they offer their users. This Compendium of responses is an authoritative reference source for anyone with an interest in the development of research and education networking in Europe and beyond. No two NRENs are identical, with great diversity in their structures, funding, size, and focus."}),h.jsx("p",{style:{textAlign:"left",fontSize:"20px"},children:"The GÉANT Compendium of NRENs Report is published annually, using both data from the Compendium from other sources, including surveys and studies carried out within different teams within GÉANT and the NREN community. The Report gives a broad overview of the European NREN landscape, identifying developments and trends."}),h.jsx("p",{style:{textAlign:"left",fontSize:"20px"},children:"Compendium Data, the responses from the NRENs, are made available to be viewed and downloaded. Graphs, charts, and tables can be customised to show as many or few NRENs as required, across different years. These can be downloaded as images or in PDF form."})]})]})}),l[4]=f):f=l[4];let d;l[5]===Symbol.for("react.memo_cache_sentinel")?(d={backgroundColor:"white"},l[5]=d):d=l[5];let y;l[6]===Symbol.for("react.memo_cache_sentinel")?(y={width:"18rem"},l[6]=y):y=l[6];let v;l[7]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx(Yn.Img,{src:Lp}),l[7]=v):v=l[7];let p;l[8]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx(Yn.Title,{children:"Compendium Data"}),l[8]=p):p=l[8];let b;l[9]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx(ln,{align:"center",children:h.jsx(Yn,{border:"light",style:y,children:h.jsxs(Tn,{to:"/data",className:"link-text",children:[v,h.jsxs(Yn.Body,{children:[p,h.jsx(Yn.Text,{children:h.jsx("span",{children:"Statistical representation of the annual Compendium Survey data is available here"})})]})]})})}),l[9]=b):b=l[9];let R;l[10]===Symbol.for("react.memo_cache_sentinel")?(R={width:"18rem"},l[10]=R):R=l[10];let S;l[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx(Yn.Img,{src:Up}),l[11]=S):S=l[11];let _;return l[12]===Symbol.for("react.memo_cache_sentinel")?(_=h.jsxs(Ya,{className:"py-5 grey-container",children:[f,h.jsx(Rn,{children:h.jsx(ln,{children:h.jsx(Ya,{style:d,className:"rounded-border",children:h.jsxs(Rn,{className:"justify-content-md-center",children:[b,h.jsx(ln,{align:"center",children:h.jsx(Yn,{border:"light",style:R,children:h.jsxs("a",{href:"https://resources.geant.org/geant-compendia/",className:"link-text",target:"_blank",rel:"noreferrer",children:[S,h.jsxs(Yn.Body,{children:[h.jsx(Yn.Title,{children:"Compendium Reports"}),h.jsx(Yn.Text,{children:"A GÉANT Compendium Report is published annually, drawing on data from the Compendium Survey filled in by NRENs, complemented by information from other surveys"})]})]})})})]})})})})]}),l[12]=_):_=l[12],_}var qp={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},Cy=Yt.createContext&&Yt.createContext(qp),pS=["attr","size","title"];function vS(l,n){if(l==null)return{};var c=gS(l,n),s,u;if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(l);for(u=0;u<f.length;u++)s=f[u],!(n.indexOf(s)>=0)&&Object.prototype.propertyIsEnumerable.call(l,s)&&(c[s]=l[s])}return c}function gS(l,n){if(l==null)return{};var c={};for(var s in l)if(Object.prototype.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}function Yu(){return Yu=Object.assign?Object.assign.bind():function(l){for(var n=1;n<arguments.length;n++){var c=arguments[n];for(var s in c)Object.prototype.hasOwnProperty.call(c,s)&&(l[s]=c[s])}return l},Yu.apply(this,arguments)}function jy(l,n){var c=Object.keys(l);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(l);n&&(s=s.filter(function(u){return Object.getOwnPropertyDescriptor(l,u).enumerable})),c.push.apply(c,s)}return c}function Gu(l){for(var n=1;n<arguments.length;n++){var c=arguments[n]!=null?arguments[n]:{};n%2?jy(Object(c),!0).forEach(function(s){ES(l,s,c[s])}):Object.getOwnPropertyDescriptors?Object.defineProperties(l,Object.getOwnPropertyDescriptors(c)):jy(Object(c)).forEach(function(s){Object.defineProperty(l,s,Object.getOwnPropertyDescriptor(c,s))})}return l}function ES(l,n,c){return n=bS(n),n in l?Object.defineProperty(l,n,{value:c,enumerable:!0,configurable:!0,writable:!0}):l[n]=c,l}function bS(l){var n=SS(l,"string");return typeof n=="symbol"?n:n+""}function SS(l,n){if(typeof l!="object"||!l)return l;var c=l[Symbol.toPrimitive];if(c!==void 0){var s=c.call(l,n||"default");if(typeof s!="object")return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return(n==="string"?String:Number)(l)}function Vp(l){return l&&l.map((n,c)=>Yt.createElement(n.tag,Gu({key:c},n.attr),Vp(n.child)))}function Yp(l){return n=>Yt.createElement(xS,Yu({attr:Gu({},l.attr)},n),Vp(l.child))}function xS(l){var n=c=>{var{attr:s,size:u,title:f}=l,d=vS(l,pS),y=u||c.size||"1em",v;return c.className&&(v=c.className),l.className&&(v=(v?v+" ":"")+l.className),Yt.createElement("svg",Yu({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},c.attr,s,d,{className:v,style:Gu(Gu({color:l.color||c.color},c.style),l.style),height:y,width:y,xmlns:"http://www.w3.org/2000/svg"}),f&&Yt.createElement("title",null,f),l.children)};return Cy!==void 0?Yt.createElement(Cy.Consumer,null,c=>n(c)):n(qp)}function _S(l){return Yp({tag:"svg",attr:{viewBox:"0 0 1024 1024",fill:"currentColor",fillRule:"evenodd"},child:[{tag:"path",attr:{d:"M799.855 166.312c.023.007.043.018.084.059l57.69 57.69c.041.041.052.06.059.084a.118.118 0 0 1 0 .069c-.007.023-.018.042-.059.083L569.926 512l287.703 287.703c.041.04.052.06.059.083a.118.118 0 0 1 0 .07c-.007.022-.018.042-.059.083l-57.69 57.69c-.041.041-.06.052-.084.059a.118.118 0 0 1-.069 0c-.023-.007-.042-.018-.083-.059L512 569.926 224.297 857.629c-.04.041-.06.052-.083.059a.118.118 0 0 1-.07 0c-.022-.007-.042-.018-.083-.059l-57.69-57.69c-.041-.041-.052-.06-.059-.084a.118.118 0 0 1 0-.069c.007-.023.018-.042.059-.083L454.073 512 166.371 224.297c-.041-.04-.052-.06-.059-.083a.118.118 0 0 1 0-.07c.007-.022.018-.042.059-.083l57.69-57.69c.041-.041.06-.052.084-.059a.118.118 0 0 1 .069 0c.023.007.042.018.083.059L512 454.073l287.703-287.702c.04-.041.06-.052.083-.059a.118.118 0 0 1 .07 0Z"},child:[]}]})(l)}function RS(l){return Yp({tag:"svg",attr:{viewBox:"0 0 1024 1024"},child:[{tag:"path",attr:{d:"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8Z"},child:[]},{tag:"path",attr:{d:"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8Z"},child:[]}]})(l)}const rr=l=>{const n=Ke.c(23),{title:c,children:s,startCollapsed:u,theme:f}=l,d=f===void 0?"":f,[y,v]=g.useState(!!u);let p;n[0]===Symbol.for("react.memo_cache_sentinel")?(p={color:"white",paddingBottom:"3px",marginTop:"3px",marginLeft:"3px",scale:"1.3"},n[0]=p):p=n[0];let b=p;if(d){let k;n[1]===Symbol.for("react.memo_cache_sentinel")?(k={...b,color:"black",fontWeight:"bold"},n[1]=k):k=n[1],b=k}const R=`collapsible-box${d} p-0`;let S;n[2]!==c?(S=h.jsx(ln,{children:h.jsx("h1",{className:"bold-caps-16pt dark-teal pt-3 ps-3",children:c})}),n[2]=c,n[3]=S):S=n[3];const _=`toggle-btn${d} p-${d?3:2}`;let O;n[4]!==y?(O=()=>v(!y),n[4]=y,n[5]=O):O=n[5];let H;n[6]!==y||n[7]!==b?(H=y?h.jsx(RS,{style:b}):h.jsx(_S,{style:b}),n[6]=y,n[7]=b,n[8]=H):H=n[8];let U;n[9]!==_||n[10]!==O||n[11]!==H?(U=h.jsx(ln,{className:"flex-grow-0 flex-shrink-1",children:h.jsx("div",{className:_,onClick:O,children:H})}),n[9]=_,n[10]=O,n[11]=H,n[12]=U):U=n[12];let M;n[13]!==S||n[14]!==U?(M=h.jsxs(Rn,{children:[S,U]}),n[13]=S,n[14]=U,n[15]=M):M=n[15];const q=`collapsible-content${y?" collapsed":""}`;let Y;n[16]!==s||n[17]!==q?(Y=h.jsx("div",{className:q,children:s}),n[16]=s,n[17]=q,n[18]=Y):Y=n[18];let J;return n[19]!==Y||n[20]!==R||n[21]!==M?(J=h.jsxs("div",{className:R,children:[M,Y]}),n[19]=Y,n[20]=R,n[21]=M,n[22]=J):J=n[22],J};function TS(l){const n=Ke.c(8),{section:c}=l;let s;n[0]===Symbol.for("react.memo_cache_sentinel")?(s={display:"flex",alignSelf:"right",lineHeight:"1.5rem",marginTop:"0.5rem"},n[0]=s):s=n[0];let u,f;n[1]===Symbol.for("react.memo_cache_sentinel")?(u=h.jsx("br",{}),f={float:"right"},n[1]=u,n[2]=f):(u=n[1],f=n[2]);let d;n[3]!==c?(d=h.jsx("div",{style:s,children:h.jsxs("span",{children:["Compendium ",u,h.jsx("span",{style:f,children:c})]})}),n[3]=c,n[4]=d):d=n[4];let y;n[5]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("img",{src:Up,style:{maxWidth:"4rem"},alt:"Compendium Data logo"}),n[5]=y):y=n[5];let v;return n[6]!==d?(v=h.jsxs("div",{className:"bold-caps-17pt section-container",children:[d,y]}),n[6]=d,n[7]=v):v=n[7],v}function NS(l){const n=Ke.c(14),{type:c}=l;let s="";c=="data"?s=" compendium-data-header":c=="reports"&&(s=" compendium-reports-header");let u;n[0]===Symbol.for("react.memo_cache_sentinel")?(u={marginTop:"0.5rem"},n[0]=u):u=n[0];const f=c==="data"?"/data":"/";let d;n[1]===Symbol.for("react.memo_cache_sentinel")?(d={textDecoration:"none",color:"white"},n[1]=d):d=n[1];const y=c==="data"?"Data":"Reports";let v;n[2]!==y?(v=h.jsxs("span",{children:["Compendium ",y]}),n[2]=y,n[3]=v):v=n[3];let p;n[4]!==f||n[5]!==v?(p=h.jsx(ln,{sm:8,children:h.jsx("h1",{className:"bold-caps-30pt",style:u,children:h.jsx(Tn,{to:f,style:d,children:v})})}),n[4]=f,n[5]=v,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b={color:"inherit"},n[7]=b):b=n[7];let R;n[8]===Symbol.for("react.memo_cache_sentinel")?(R=h.jsx(ln,{sm:4,children:h.jsx("a",{style:b,href:"https://resources.geant.org/geant-compendia/",target:"_blank",rel:"noreferrer",children:h.jsx(TS,{section:"Reports"})})}),n[8]=R):R=n[8];let S;n[9]!==p?(S=h.jsx(Ya,{children:h.jsxs(Rn,{children:[p,R]})}),n[9]=p,n[10]=S):S=n[10];let _;return n[11]!==s||n[12]!==S?(_=h.jsx("div",{className:s,children:S}),n[11]=s,n[12]=S,n[13]=_):_=n[13],_}function CS(l){const n=Ke.c(8),{children:c,type:s}=l;let u="";s=="data"?u=" compendium-data-banner":s=="reports"&&(u=" compendium-reports-banner");let f,d;n[0]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx("img",{src:Lp,style:{maxWidth:"7rem",marginBottom:"1rem"},alt:"Compendium Data logo"}),d={display:"flex",alignSelf:"right"},n[0]=f,n[1]=d):(f=n[0],d=n[1]);let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y={paddingTop:"1rem"},n[2]=y):y=n[2];let v;n[3]!==c?(v=h.jsx(Ya,{children:h.jsx(Rn,{children:h.jsx(Rn,{children:h.jsxs("div",{className:"section-container",children:[f,h.jsx("div",{style:d,children:h.jsx("div",{className:"center-text",style:y,children:c})})]})})})}),n[3]=c,n[4]=v):v=n[4];let p;return n[5]!==u||n[6]!==v?(p=h.jsx("div",{className:u,children:v}),n[5]=u,n[6]=v,n[7]=p):p=n[7],p}var li=(l=>(l.Organisation="ORGANISATION",l.Policy="STANDARDS AND POLICIES",l.ConnectedUsers="CONNECTED USERS",l.Network="NETWORK",l.Services="SERVICES",l))(li||{}),jS=(l=>(l.CSV="CSV",l.EXCEL="EXCEL",l))(jS||{}),OS=(l=>(l.PNG="png",l.JPEG="jpeg",l.SVG="svg",l))(OS||{});const V2={universities:"Universities & Other (ISCED 6-8)",further_education:"Further education (ISCED 4-5)",secondary_schools:"Secondary schools (ISCED 2-3)",primary_schools:"Primary schools (ISCED 1)",institutes:"Research Institutes",cultural:"Libraries, Museums, Archives, Cultural institutions",hospitals:"Non-university public Hospitals",government:"Government departments (national, regional, local)",iros:"International (virtual) research organisations",for_profit_orgs:"For-profit organisations"},Y2={commercial_r_and_e:"Commercial R&E traffic only",commercial_general:"Commercial general",commercial_collaboration:"Commercial for collaboration only (project/time limited)",commercial_service_provider:"Commercial Service Provider",university_spin_off:"University Spin Off/Incubator"},G2={collaboration:"Connection to your network for collaboration with R&E users",service_supplier:"Connection to your network for supplying services for R&E",direct_peering:"Direct peering (e.g. direct peering or cloud peering)"};function DS(){const l=Ke.c(7),{preview:n,setPreview:c}=g.useContext(Iy),{user:s}=g.useContext(Fo),[u]=lE();let f;l[0]!==u?(f=u.get("preview"),l[0]=u,l[1]=f):f=l[1];const d=f;let y,v;return l[2]!==d||l[3]!==c||l[4]!==s?(y=()=>{d!==null&&(s.permissions.admin||s.role=="observer")&&c(!0)},v=[d,c,s],l[2]=d,l[3]=c,l[4]=s,l[5]=y,l[6]=v):(y=l[5],v=l[6]),g.useEffect(y,v),n}function yr(l){const n=Ke.c(9),{to:c,children:s}=l,u=window.location.pathname===c,f=g.useRef(null);let d,y;n[0]!==u?(d=()=>{u&&f.current&&f.current.scrollIntoView({behavior:"smooth",block:"center"})},y=[u],n[0]=u,n[1]=d,n[2]=y):(d=n[1],y=n[2]),g.useEffect(d,y);let v;n[3]!==s||n[4]!==u?(v=u?h.jsx("b",{children:s}):s,n[3]=s,n[4]=u,n[5]=v):v=n[5];let p;return n[6]!==v||n[7]!==c?(p=h.jsx(Rn,{children:h.jsx(Tn,{to:c,className:"link-text-underline",ref:f,children:v})}),n[6]=v,n[7]=c,n[8]=p):p=n[8],p}const se={budget:"Budget of NRENs per Year",funding:"Income Source of NRENs",charging:"Charging Mechanism of NRENs","employee-count":"Number of NREN Employees",roles:"Roles of NREN employees (Technical v. Non-Technical)",employment:"Types of Employment within NRENs",suborganisations:"NREN Sub-Organisations",parentorganisation:"NREN Parent Organisations","ec-projects":"NREN Involvement in European Commission Projects",policy:"NREN Policies",audits:"External and Internal Audits of Information Security Management Systems","business-continuity":"NREN Business Continuity Planning","central-procurement":"Value of Software Procured for Customers by NRENs","crisis-management":"Crisis Management Procedures","crisis-exercise":"Crisis Exercises - NREN Operation and Participation",eosc_listings:"NREN Services Listed on the EOSC Portal","security-control":"Security Controls Used by NRENs","services-offered":"Services Offered by NRENs by Types of Users","corporate-strategy":"NREN Corporate Strategies","service-level-targets":"NRENs Offering Service Level Targets","service-management-framework":"NRENs Operating a Formal Service Management Framework","institutions-urls":"Webpages Listing Institutions and Organisations Connected to NREN Networks","connected-proportion":"Proportion of Different Categories of Institutions Served by NRENs","connectivity-level":"Level of IP Connectivity by Institution Type","connection-carrier":"Methods of Carrying IP Traffic to Users","connectivity-load":"Connectivity Load","connectivity-growth":"Connectivity Growth","remote-campuses":"NREN Connectivity to Remote Campuses in Other Countries","commercial-charging-level":"Commercial Charging Level","commercial-connectivity":"Commercial Connectivity","traffic-volume":"NREN Traffic - NREN Customers & External Networks","iru-duration":"Average Duration of IRU leases of Fibre by NRENs","fibre-light":"Approaches to lighting NREN fibre networks","dark-fibre-lease":"Kilometres of Leased Dark Fibre (National)","dark-fibre-lease-international":"Kilometres of Leased Dark Fibre (International)","dark-fibre-installed":"Kilometres of Installed Dark Fibre","network-map":"NREN Network Maps","monitoring-tools":"Tools for Monitoring or Troubleshooting the Network - Offered to Client Institutions","pert-team":"NRENs with Performance Enhancement Response Teams","passive-monitoring":"Methods for Passively Monitoring International Traffic","traffic-stats":"Traffic Statistics","weather-map":"NREN Online Network Weather Maps","certificate-provider":"Certification Services used by NRENs","siem-vendors":"Vendors of SIEM/SOC systems used by NRENs","alien-wave":"NREN Use of 3rd Party Alienwave/Lightpath Services","alien-wave-internal":"Internal NREN Use of Alien Waves","capacity-largest-link":"Capacity of the Largest Link in an NREN Network","external-connections":"NREN External IP Connections","capacity-core-ip":"NREN Core IP Capacity","non-rne-peers":"Number of Non-R&E Networks NRENs Peer With","traffic-ratio":"Types of traffic in NREN networks (Commodity v. Research & Education)","ops-automation":"NREN Automation of Operational Processes","network-automation":"Network Tasks for which NRENs Use Automation",nfv:"Kinds of Network Function Virtualisation used by NRENs","network-services":"NREN Network services matrix","isp-support-services":"NREN ISP support services matrix","security-services":"NREN Security services matrix","identity-services":"NREN Identity services matrix","collaboration-services":"NREN Collaboration services matrix","multimedia-services":"NREN Multimedia services matrix","storage-and-hosting-services":"NREN Storage and hosting services matrix","professional-services":"NREN Professional services matrix"};function wS(l){const n=Ke.c(52),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Organisation"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Budget, Income and Billing"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se.budget}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/budget",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se.funding}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/funding",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se.charging}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/charging",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O,H;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("hr",{className:"fake-divider"}),H=h.jsx("h6",{className:"section-title",children:"Staff and Projects"}),n[15]=O,n[16]=H):(O=n[15],H=n[16]);let U;n[17]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["employee-count"]}),n[17]=U):U=n[17];let M;n[18]!==u||n[19]!==f?(M=h.jsx(u,{to:"/employee-count",className:f,children:U}),n[18]=u,n[19]=f,n[20]=M):M=n[20];let q;n[21]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se.employment}),n[21]=q):q=n[21];let Y;n[22]!==u||n[23]!==f?(Y=h.jsx(u,{to:"/employment",className:f,children:q}),n[22]=u,n[23]=f,n[24]=Y):Y=n[24];let J;n[25]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("span",{children:se.roles}),n[25]=J):J=n[25];let k;n[26]!==u||n[27]!==f?(k=h.jsx(u,{to:"/roles",className:f,children:J}),n[26]=u,n[27]=f,n[28]=k):k=n[28];let N;n[29]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("span",{children:se.parentorganisation}),n[29]=N):N=n[29];let W;n[30]!==u||n[31]!==f?(W=h.jsx(u,{to:"/parentorganisation",className:f,children:N}),n[30]=u,n[31]=f,n[32]=W):W=n[32];let ie;n[33]===Symbol.for("react.memo_cache_sentinel")?(ie=h.jsx("span",{children:se.suborganisations}),n[33]=ie):ie=n[33];let X;n[34]!==u||n[35]!==f?(X=h.jsx(u,{to:"/suborganisations",className:f,children:ie}),n[34]=u,n[35]=f,n[36]=X):X=n[36];let I;n[37]===Symbol.for("react.memo_cache_sentinel")?(I=h.jsx("span",{children:se["ec-projects"]}),n[37]=I):I=n[37];let de;n[38]!==u||n[39]!==f?(de=h.jsx(u,{to:"/ec-projects",className:f,children:I}),n[38]=u,n[39]=f,n[40]=de):de=n[40];let Ne;return n[41]!==M||n[42]!==Y||n[43]!==k||n[44]!==W||n[45]!==d||n[46]!==X||n[47]!==de||n[48]!==p||n[49]!==R||n[50]!==_?(Ne=h.jsxs(h.Fragment,{children:[d,y,p,R,_,O,H,M,Y,k,W,X,de]}),n[41]=M,n[42]=Y,n[43]=k,n[44]=W,n[45]=d,n[46]=X,n[47]=de,n[48]=p,n[49]=R,n[50]=_,n[51]=Ne):Ne=n[51],Ne}function AS(l){const n=Ke.c(61),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Standards And Policies"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Policy & Portfolio"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se["corporate-strategy"]}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/corporate-strategy",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se.policy}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/policy",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se["central-procurement"]}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/central-procurement",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("span",{children:se["service-management-framework"]}),n[15]=O):O=n[15];let H;n[16]!==u||n[17]!==f?(H=h.jsx(u,{to:"/service-management-framework",className:f,children:O}),n[16]=u,n[17]=f,n[18]=H):H=n[18];let U;n[19]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["service-level-targets"]}),n[19]=U):U=n[19];let M;n[20]!==u||n[21]!==f?(M=h.jsx(u,{to:"/service-level-targets",className:f,children:U}),n[20]=u,n[21]=f,n[22]=M):M=n[22];let q;n[23]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se["services-offered"]}),n[23]=q):q=n[23];let Y;n[24]!==u||n[25]!==f?(Y=h.jsx(u,{to:"/services-offered",className:f,children:q}),n[24]=u,n[25]=f,n[26]=Y):Y=n[26];let J;n[27]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("h6",{className:"section-title",children:"Standards"}),n[27]=J):J=n[27];let k;n[28]===Symbol.for("react.memo_cache_sentinel")?(k=h.jsx("span",{children:se.audits}),n[28]=k):k=n[28];let N;n[29]!==u||n[30]!==f?(N=h.jsx(u,{to:"/audits",className:f,children:k}),n[29]=u,n[30]=f,n[31]=N):N=n[31];let W;n[32]===Symbol.for("react.memo_cache_sentinel")?(W=h.jsx("span",{children:se["business-continuity"]}),n[32]=W):W=n[32];let ie;n[33]!==u||n[34]!==f?(ie=h.jsx(u,{to:"/business-continuity",className:f,children:W}),n[33]=u,n[34]=f,n[35]=ie):ie=n[35];let X;n[36]===Symbol.for("react.memo_cache_sentinel")?(X=h.jsx("span",{children:se["crisis-management"]}),n[36]=X):X=n[36];let I;n[37]!==u||n[38]!==f?(I=h.jsx(u,{to:"/crisis-management",className:f,children:X}),n[37]=u,n[38]=f,n[39]=I):I=n[39];let de;n[40]===Symbol.for("react.memo_cache_sentinel")?(de=h.jsx("span",{children:se["crisis-exercise"]}),n[40]=de):de=n[40];let Ne;n[41]!==u||n[42]!==f?(Ne=h.jsx(u,{to:"/crisis-exercise",className:f,children:de}),n[41]=u,n[42]=f,n[43]=Ne):Ne=n[43];let Ye;n[44]===Symbol.for("react.memo_cache_sentinel")?(Ye=h.jsx("span",{children:se["security-control"]}),n[44]=Ye):Ye=n[44];let Be;n[45]!==u||n[46]!==f?(Be=h.jsx(u,{to:"/security-control",className:f,children:Ye}),n[45]=u,n[46]=f,n[47]=Be):Be=n[47];let ze;return n[48]!==H||n[49]!==M||n[50]!==Y||n[51]!==N||n[52]!==d||n[53]!==ie||n[54]!==I||n[55]!==Ne||n[56]!==Be||n[57]!==p||n[58]!==R||n[59]!==_?(ze=h.jsxs(h.Fragment,{children:[d,y,p,R,_,H,M,Y,J,N,ie,I,Ne,Be]}),n[48]=H,n[49]=M,n[50]=Y,n[51]=N,n[52]=d,n[53]=ie,n[54]=I,n[55]=Ne,n[56]=Be,n[57]=p,n[58]=R,n[59]=_,n[60]=ze):ze=n[60],ze}function MS(l){const n=Ke.c(52),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Connected Users"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Connected Users"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se["institutions-urls"]}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/institutions-urls",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se["connected-proportion"]}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/connected-proportion",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se["connectivity-level"]}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/connectivity-level",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("span",{children:se["connection-carrier"]}),n[15]=O):O=n[15];let H;n[16]!==u||n[17]!==f?(H=h.jsx(u,{to:"/connection-carrier",className:f,children:O}),n[16]=u,n[17]=f,n[18]=H):H=n[18];let U;n[19]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["connectivity-load"]}),n[19]=U):U=n[19];let M;n[20]!==u||n[21]!==f?(M=h.jsx(u,{to:"/connectivity-load",className:f,children:U}),n[20]=u,n[21]=f,n[22]=M):M=n[22];let q;n[23]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se["connectivity-growth"]}),n[23]=q):q=n[23];let Y;n[24]!==u||n[25]!==f?(Y=h.jsx(u,{to:"/connectivity-growth",className:f,children:q}),n[24]=u,n[25]=f,n[26]=Y):Y=n[26];let J;n[27]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("span",{children:se["remote-campuses"]}),n[27]=J):J=n[27];let k;n[28]!==u||n[29]!==f?(k=h.jsx(u,{to:"/remote-campuses",className:f,children:J}),n[28]=u,n[29]=f,n[30]=k):k=n[30];let N,W;n[31]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("hr",{className:"fake-divider"}),W=h.jsx("h6",{className:"section-title",children:"Connected Users - Commercial"}),n[31]=N,n[32]=W):(N=n[31],W=n[32]);let ie;n[33]===Symbol.for("react.memo_cache_sentinel")?(ie=h.jsx("span",{children:se["commercial-charging-level"]}),n[33]=ie):ie=n[33];let X;n[34]!==u||n[35]!==f?(X=h.jsx(u,{to:"/commercial-charging-level",className:f,children:ie}),n[34]=u,n[35]=f,n[36]=X):X=n[36];let I;n[37]===Symbol.for("react.memo_cache_sentinel")?(I=h.jsx("span",{children:se["commercial-connectivity"]}),n[37]=I):I=n[37];let de;n[38]!==u||n[39]!==f?(de=h.jsx(u,{to:"/commercial-connectivity",className:f,children:I}),n[38]=u,n[39]=f,n[40]=de):de=n[40];let Ne;return n[41]!==H||n[42]!==M||n[43]!==Y||n[44]!==k||n[45]!==d||n[46]!==X||n[47]!==de||n[48]!==p||n[49]!==R||n[50]!==_?(Ne=h.jsxs(h.Fragment,{children:[d,y,p,R,_,H,M,Y,k,N,W,X,de]}),n[41]=H,n[42]=M,n[43]=Y,n[44]=k,n[45]=d,n[46]=X,n[47]=de,n[48]=p,n[49]=R,n[50]=_,n[51]=Ne):Ne=n[51],Ne}function zS(l){const n=Ke.c(133),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Network"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Connectivity"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se["dark-fibre-lease"]}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/dark-fibre-lease",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se["dark-fibre-lease-international"]}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/dark-fibre-lease-international",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se["iru-duration"]}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/iru-duration",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("span",{children:se["dark-fibre-installed"]}),n[15]=O):O=n[15];let H;n[16]!==u||n[17]!==f?(H=h.jsx(u,{to:"/dark-fibre-installed",className:f,children:O}),n[16]=u,n[17]=f,n[18]=H):H=n[18];let U;n[19]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["fibre-light"]}),n[19]=U):U=n[19];let M;n[20]!==u||n[21]!==f?(M=h.jsx(u,{to:"/fibre-light",className:f,children:U}),n[20]=u,n[21]=f,n[22]=M):M=n[22];let q;n[23]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se["network-map"]}),n[23]=q):q=n[23];let Y;n[24]!==u||n[25]!==f?(Y=h.jsx(u,{to:"/network-map",className:f,children:q}),n[24]=u,n[25]=f,n[26]=Y):Y=n[26];let J,k;n[27]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("hr",{className:"fake-divider"}),k=h.jsx("h6",{className:"section-title",children:"Performance Monitoring & Management"}),n[27]=J,n[28]=k):(J=n[27],k=n[28]);let N;n[29]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("span",{children:se["monitoring-tools"]}),n[29]=N):N=n[29];let W;n[30]!==u||n[31]!==f?(W=h.jsx(u,{to:"/monitoring-tools",className:f,children:N}),n[30]=u,n[31]=f,n[32]=W):W=n[32];let ie;n[33]===Symbol.for("react.memo_cache_sentinel")?(ie=h.jsx("span",{children:se["passive-monitoring"]}),n[33]=ie):ie=n[33];let X;n[34]!==u||n[35]!==f?(X=h.jsx(u,{to:"/passive-monitoring",className:f,children:ie}),n[34]=u,n[35]=f,n[36]=X):X=n[36];let I;n[37]===Symbol.for("react.memo_cache_sentinel")?(I=h.jsx("span",{children:se["traffic-stats"]}),n[37]=I):I=n[37];let de;n[38]!==u||n[39]!==f?(de=h.jsx(u,{to:"/traffic-stats",className:f,children:I}),n[38]=u,n[39]=f,n[40]=de):de=n[40];let Ne;n[41]===Symbol.for("react.memo_cache_sentinel")?(Ne=h.jsx("span",{children:se["siem-vendors"]}),n[41]=Ne):Ne=n[41];let Ye;n[42]!==u||n[43]!==f?(Ye=h.jsx(u,{to:"/siem-vendors",className:f,children:Ne}),n[42]=u,n[43]=f,n[44]=Ye):Ye=n[44];let Be;n[45]===Symbol.for("react.memo_cache_sentinel")?(Be=h.jsx("span",{children:se["certificate-provider"]}),n[45]=Be):Be=n[45];let ze;n[46]!==u||n[47]!==f?(ze=h.jsx(u,{to:"/certificate-provider",className:f,children:Be}),n[46]=u,n[47]=f,n[48]=ze):ze=n[48];let K;n[49]===Symbol.for("react.memo_cache_sentinel")?(K=h.jsx("span",{children:se["weather-map"]}),n[49]=K):K=n[49];let ce;n[50]!==u||n[51]!==f?(ce=h.jsx(u,{to:"/weather-map",className:f,children:K}),n[50]=u,n[51]=f,n[52]=ce):ce=n[52];let ne;n[53]===Symbol.for("react.memo_cache_sentinel")?(ne=h.jsx("span",{children:se["pert-team"]}),n[53]=ne):ne=n[53];let Re;n[54]!==u||n[55]!==f?(Re=h.jsx(u,{to:"/pert-team",className:f,children:ne}),n[54]=u,n[55]=f,n[56]=Re):Re=n[56];let T,Q;n[57]===Symbol.for("react.memo_cache_sentinel")?(T=h.jsx("hr",{className:"fake-divider"}),Q=h.jsx("h6",{className:"section-title",children:"Alienwave"}),n[57]=T,n[58]=Q):(T=n[57],Q=n[58]);let le;n[59]===Symbol.for("react.memo_cache_sentinel")?(le=h.jsx("span",{children:se["alien-wave"]}),n[59]=le):le=n[59];let te;n[60]!==u||n[61]!==f?(te=h.jsx(u,{to:"/alien-wave",className:f,children:le}),n[60]=u,n[61]=f,n[62]=te):te=n[62];let P;n[63]===Symbol.for("react.memo_cache_sentinel")?(P=h.jsx("span",{children:se["alien-wave-internal"]}),n[63]=P):P=n[63];let ge;n[64]!==u||n[65]!==f?(ge=h.jsx(u,{to:"/alien-wave-internal",className:f,children:P}),n[64]=u,n[65]=f,n[66]=ge):ge=n[66];let ye,Je;n[67]===Symbol.for("react.memo_cache_sentinel")?(ye=h.jsx("hr",{className:"fake-divider"}),Je=h.jsx("h6",{className:"section-title",children:"Capacity"}),n[67]=ye,n[68]=Je):(ye=n[67],Je=n[68]);let Ce;n[69]===Symbol.for("react.memo_cache_sentinel")?(Ce=h.jsx("span",{children:se["capacity-largest-link"]}),n[69]=Ce):Ce=n[69];let Le;n[70]!==u||n[71]!==f?(Le=h.jsx(u,{to:"/capacity-largest-link",className:f,children:Ce}),n[70]=u,n[71]=f,n[72]=Le):Le=n[72];let Ee;n[73]===Symbol.for("react.memo_cache_sentinel")?(Ee=h.jsx("span",{children:se["capacity-core-ip"]}),n[73]=Ee):Ee=n[73];let Ze;n[74]!==u||n[75]!==f?(Ze=h.jsx(u,{to:"/capacity-core-ip",className:f,children:Ee}),n[74]=u,n[75]=f,n[76]=Ze):Ze=n[76];let vt;n[77]===Symbol.for("react.memo_cache_sentinel")?(vt=h.jsx("span",{children:se["external-connections"]}),n[77]=vt):vt=n[77];let it;n[78]!==u||n[79]!==f?(it=h.jsx(u,{to:"/external-connections",className:f,children:vt}),n[78]=u,n[79]=f,n[80]=it):it=n[80];let lt;n[81]===Symbol.for("react.memo_cache_sentinel")?(lt=h.jsx("span",{children:se["non-rne-peers"]}),n[81]=lt):lt=n[81];let De;n[82]!==u||n[83]!==f?(De=h.jsx(u,{to:"/non-rne-peers",className:f,children:lt}),n[82]=u,n[83]=f,n[84]=De):De=n[84];let Rt;n[85]===Symbol.for("react.memo_cache_sentinel")?(Rt=h.jsx("span",{children:se["traffic-volume"]}),n[85]=Rt):Rt=n[85];let St;n[86]!==u||n[87]!==f?(St=h.jsx(u,{to:"/traffic-volume",className:f,children:Rt}),n[86]=u,n[87]=f,n[88]=St):St=n[88];let Pt;n[89]===Symbol.for("react.memo_cache_sentinel")?(Pt=h.jsx("span",{children:se["traffic-ratio"]}),n[89]=Pt):Pt=n[89];let Zt;n[90]!==u||n[91]!==f?(Zt=h.jsx(u,{to:"/traffic-ratio",className:f,children:Pt}),n[90]=u,n[91]=f,n[92]=Zt):Zt=n[92];let un,cn;n[93]===Symbol.for("react.memo_cache_sentinel")?(un=h.jsx("hr",{className:"fake-divider"}),cn=h.jsx("h6",{className:"section-title",children:"Software-Defined Networking (SDN) & Network Function Virtualisation(NFV)"}),n[93]=un,n[94]=cn):(un=n[93],cn=n[94]);let Ut;n[95]===Symbol.for("react.memo_cache_sentinel")?(Ut=h.jsx("span",{children:se["ops-automation"]}),n[95]=Ut):Ut=n[95];let Ht;n[96]!==u||n[97]!==f?(Ht=h.jsx(u,{to:"/ops-automation",className:f,children:Ut}),n[96]=u,n[97]=f,n[98]=Ht):Ht=n[98];let mt;n[99]===Symbol.for("react.memo_cache_sentinel")?(mt=h.jsx("span",{children:se.nfv}),n[99]=mt):mt=n[99];let Kt;n[100]!==u||n[101]!==f?(Kt=h.jsx(u,{to:"/nfv",className:f,children:mt}),n[100]=u,n[101]=f,n[102]=Kt):Kt=n[102];let _e;n[103]===Symbol.for("react.memo_cache_sentinel")?(_e=h.jsx("span",{children:se["network-automation"]}),n[103]=_e):_e=n[103];let Ie;n[104]!==u||n[105]!==f?(Ie=h.jsx(u,{to:"/network-automation",className:f,children:_e}),n[104]=u,n[105]=f,n[106]=Ie):Ie=n[106];let Gt;return n[107]!==H||n[108]!==M||n[109]!==Y||n[110]!==W||n[111]!==d||n[112]!==X||n[113]!==de||n[114]!==Ye||n[115]!==ze||n[116]!==ce||n[117]!==Re||n[118]!==te||n[119]!==ge||n[120]!==Le||n[121]!==Ze||n[122]!==it||n[123]!==De||n[124]!==St||n[125]!==p||n[126]!==Zt||n[127]!==Ht||n[128]!==Kt||n[129]!==Ie||n[130]!==R||n[131]!==_?(Gt=h.jsxs(h.Fragment,{children:[d,y,p,R,_,H,M,Y,J,k,W,X,de,Ye,ze,ce,Re,T,Q,te,ge,ye,Je,Le,Ze,it,De,St,Zt,un,cn,Ht,Kt,Ie]}),n[107]=H,n[108]=M,n[109]=Y,n[110]=W,n[111]=d,n[112]=X,n[113]=de,n[114]=Ye,n[115]=ze,n[116]=ce,n[117]=Re,n[118]=te,n[119]=ge,n[120]=Le,n[121]=Ze,n[122]=it,n[123]=De,n[124]=St,n[125]=p,n[126]=Zt,n[127]=Ht,n[128]=Kt,n[129]=Ie,n[130]=R,n[131]=_,n[132]=Gt):Gt=n[132],Gt}function LS(l){const n=Ke.c(44),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Services"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("span",{children:se["network-services"]}),n[2]=y):y=n[2];let v;n[3]!==u||n[4]!==f?(v=h.jsx(u,{to:"/network-services",className:f,children:y}),n[3]=u,n[4]=f,n[5]=v):v=n[5];let p;n[6]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx("span",{children:se["isp-support-services"]}),n[6]=p):p=n[6];let b;n[7]!==u||n[8]!==f?(b=h.jsx(u,{to:"/isp-support-services",className:f,children:p}),n[7]=u,n[8]=f,n[9]=b):b=n[9];let R;n[10]===Symbol.for("react.memo_cache_sentinel")?(R=h.jsx("span",{children:se["security-services"]}),n[10]=R):R=n[10];let S;n[11]!==u||n[12]!==f?(S=h.jsx(u,{to:"/security-services",className:f,children:R}),n[11]=u,n[12]=f,n[13]=S):S=n[13];let _;n[14]===Symbol.for("react.memo_cache_sentinel")?(_=h.jsx("span",{children:se["identity-services"]}),n[14]=_):_=n[14];let O;n[15]!==u||n[16]!==f?(O=h.jsx(u,{to:"/identity-services",className:f,children:_}),n[15]=u,n[16]=f,n[17]=O):O=n[17];let H;n[18]===Symbol.for("react.memo_cache_sentinel")?(H=h.jsx("span",{children:se["storage-and-hosting-services"]}),n[18]=H):H=n[18];let U;n[19]!==u||n[20]!==f?(U=h.jsx(u,{to:"/storage-and-hosting-services",className:f,children:H}),n[19]=u,n[20]=f,n[21]=U):U=n[21];let M;n[22]===Symbol.for("react.memo_cache_sentinel")?(M=h.jsx("span",{children:se["multimedia-services"]}),n[22]=M):M=n[22];let q;n[23]!==u||n[24]!==f?(q=h.jsx(u,{to:"/multimedia-services",className:f,children:M}),n[23]=u,n[24]=f,n[25]=q):q=n[25];let Y;n[26]===Symbol.for("react.memo_cache_sentinel")?(Y=h.jsx("span",{children:se["collaboration-services"]}),n[26]=Y):Y=n[26];let J;n[27]!==u||n[28]!==f?(J=h.jsx(u,{to:"/collaboration-services",className:f,children:Y}),n[27]=u,n[28]=f,n[29]=J):J=n[29];let k;n[30]===Symbol.for("react.memo_cache_sentinel")?(k=h.jsx("span",{children:se["professional-services"]}),n[30]=k):k=n[30];let N;n[31]!==u||n[32]!==f?(N=h.jsx(u,{to:"/professional-services",className:f,children:k}),n[31]=u,n[32]=f,n[33]=N):N=n[33];let W;return n[34]!==O||n[35]!==U||n[36]!==q||n[37]!==J||n[38]!==N||n[39]!==d||n[40]!==v||n[41]!==b||n[42]!==S?(W=h.jsxs(h.Fragment,{children:[d,v,b,S,O,U,q,J,N]}),n[34]=O,n[35]=U,n[36]=q,n[37]=J,n[38]=N,n[39]=d,n[40]=v,n[41]=b,n[42]=S,n[43]=W):W=n[43],W}function US(){const l=Ke.c(10);DS();const{trackPageView:n}=Hp();let c,s;l[0]!==n?(c=()=>{n({documentTitle:"Compendium Data"})},s=[n],l[0]=n,l[1]=c,l[2]=s):(c=l[1],s=l[2]),Yt.useEffect(c,s);let u;l[3]===Symbol.for("react.memo_cache_sentinel")?(u=h.jsx(NS,{type:"data"}),l[3]=u):u=l[3];let f;l[4]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx(CS,{type:"data",children:h.jsx("p",{className:"wordwrap",children:"The GÉANT Compendium provides an authoritative reference source for anyone with an interest in the development of research and education networking in Europe and beyond. Published since 2001, the Compendium provides information on key areas such as users, services, traffic, budget and staffing."})}),l[4]=f):f=l[4];let d;l[5]===Symbol.for("react.memo_cache_sentinel")?(d=h.jsx(rr,{title:li.Organisation,children:h.jsx(wS,{})}),l[5]=d):d=l[5];let y;l[6]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx(rr,{title:li.Policy,startCollapsed:!0,children:h.jsx(AS,{})}),l[6]=y):y=l[6];let v;l[7]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx(rr,{title:li.ConnectedUsers,startCollapsed:!0,children:h.jsx(MS,{})}),l[7]=v):v=l[7];let p;l[8]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx(rr,{title:li.Network,startCollapsed:!0,children:h.jsx(zS,{})}),l[8]=p):p=l[8];let b;return l[9]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsxs(h.Fragment,{children:[u,f,h.jsx(Ya,{className:"mt-5 mb-5",children:h.jsxs(Rn,{children:[d,y,v,p,h.jsx(rr,{title:li.Services,startCollapsed:!0,children:h.jsx(LS,{})})]})})]}),l[9]=b):b=l[9],b}const HS=()=>{const l=Ke.c(26),{consent:n,setConsent:c}=g.useContext(Jo),[s,u]=g.useState(n===null);let f;l[0]===Symbol.for("react.memo_cache_sentinel")?(f=()=>{u(!1),window.location.reload()},l[0]=f):f=l[0];const d=f,[y,v]=g.useState(!0);let p;l[1]!==c?(p=N=>{const W=new Date;W.setDate(W.getDate()+30),localStorage.setItem("matomo_consent",JSON.stringify({consent:N,expiry:W})),c(N)},l[1]=c,l[2]=p):p=l[2];const b=p;let R;l[3]===Symbol.for("react.memo_cache_sentinel")?(R=h.jsx(ir.Header,{closeButton:!0,children:h.jsx(ir.Title,{children:"Privacy on this site"})}),l[3]=R):R=l[3];let S;l[4]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("a",{href:"https://geant.org/Privacy-Notice/",children:"Privacy Policy"}),l[4]=S):S=l[4];let _;l[5]===Symbol.for("react.memo_cache_sentinel")?(_=h.jsxs("p",{children:["On our site we use Matomo to collect and process data about your visit to better understand how it is used. For more information, see our ",S,".",h.jsx("br",{}),"Below, you can choose to accept or decline to have this data collected."]}),l[5]=_):_=l[5];let O;l[6]!==y?(O=()=>v(!y),l[6]=y,l[7]=O):O=l[7];let H;l[8]!==y||l[9]!==O?(H=h.jsx(Du.Check,{type:"checkbox",label:"Analytics",checked:y,onChange:O}),l[8]=y,l[9]=O,l[10]=H):H=l[10];let U;l[11]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx(Du.Text,{className:"text-muted",children:"We collect information about your visit on the compendium site — this helps us understand how the site is used, and how we can improve it."}),l[11]=U):U=l[11];let M;l[12]!==H?(M=h.jsxs(ir.Body,{children:[_,h.jsx(Du,{children:h.jsxs(Du.Group,{className:"mb-3",children:[H,U]})})]}),l[12]=H,l[13]=M):M=l[13];let q;l[14]!==b?(q=h.jsx(Bo,{variant:"secondary",onClick:()=>{b(!1),d()},children:"Decline all"}),l[14]=b,l[15]=q):q=l[15];let Y;l[16]!==y||l[17]!==b?(Y=h.jsx(Bo,{variant:"primary",onClick:()=>{b(y),d()},children:"Save consent for 30 days"}),l[16]=y,l[17]=b,l[18]=Y):Y=l[18];let J;l[19]!==Y||l[20]!==q?(J=h.jsxs(ir.Footer,{children:[q,Y]}),l[19]=Y,l[20]=q,l[21]=J):J=l[21];let k;return l[22]!==s||l[23]!==J||l[24]!==M?(k=h.jsxs(ir,{show:s,centered:!0,children:[R,M,J]}),l[22]=s,l[23]=J,l[24]=M,l[25]=k):k=l[25],k},BS=g.lazy(()=>be(()=>import("./Budget-BVbbdsI6.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]))),qS=g.lazy(()=>be(()=>import("./ChargingStructure-D6vHlJZ3.js"),__vite__mapDeps([8,2,3,4,5,6,9,10,11]))),VS=g.lazy(()=>be(()=>import("./ECProjects-CT3RTMct.js"),__vite__mapDeps([12,2,3,4,5,6,13,11]))),YS=g.lazy(()=>be(()=>import("./FundingSource-C4jAa4nC.js"),__vite__mapDeps([14,1,2,3,4,5,6,15]))),GS=g.lazy(()=>be(()=>import("./ParentOrganisation-BqnVV9Ka.js"),__vite__mapDeps([16,2,3,4,5,6,13,11]))),Oy=g.lazy(()=>be(()=>import("./StaffGraph-DXD4Tgbx.js"),__vite__mapDeps([17,1,2,3,4,5,6,18]))),kS=g.lazy(()=>be(()=>import("./StaffGraphAbsolute-A86Vah2E.js"),__vite__mapDeps([19,1,2,3,4,5,6,15,7]))),XS=g.lazy(()=>be(()=>import("./SubOrganisation-ldENjIwX.js"),__vite__mapDeps([20,2,3,4,5,6,13,11]))),QS=g.lazy(()=>be(()=>import("./Audits-BldRnziS.js"),__vite__mapDeps([21,2,3,4,5,6,9,10,11]))),ZS=g.lazy(()=>be(()=>import("./BusinessContinuity-CLtH4Vxm.js"),__vite__mapDeps([22,2,3,4,5,6,9,10,11]))),KS=g.lazy(()=>be(()=>import("./CentralProcurement-ufKA5cDY.js"),__vite__mapDeps([23,2,3,4,5,6,15,1,7]))),$S=g.lazy(()=>be(()=>import("./CorporateStrategy-CQ2aByV3.js"),__vite__mapDeps([24,2,3,4,5,6,13,11]))),FS=g.lazy(()=>be(()=>import("./CrisisExercises-Bw4pZ1iW.js"),__vite__mapDeps([25,2,3,4,5,6,9,10,11]))),JS=g.lazy(()=>be(()=>import("./CrisisManagement-TH7W12RY.js"),__vite__mapDeps([26,2,3,4,5,6,9,10,11]))),PS=g.lazy(()=>be(()=>import("./EOSCListings-v4hLpISP.js"),__vite__mapDeps([27,2,3,4,5,6,13,11]))),WS=g.lazy(()=>be(()=>import("./Policy-DTXx03Vh.js"),__vite__mapDeps([28,2,3,4,5,6,13,11]))),IS=g.lazy(()=>be(()=>import("./SecurityControls-TM-ptOes.js"),__vite__mapDeps([29,2,3,4,5,6,9,10,11]))),e2=g.lazy(()=>be(()=>import("./ServiceLevelTargets-DMHnzoF5.js"),__vite__mapDeps([30,2,3,4,5,6,9,10,11]))),t2=g.lazy(()=>be(()=>import("./ServiceManagementFramework-D-rGA4sI.js"),__vite__mapDeps([31,2,3,4,5,6,9,10,11]))),n2=g.lazy(()=>be(()=>import("./ServicesOffered-BQGRxlwg.js"),__vite__mapDeps([32,2,3,4,5,6,33,11]))),a2=g.lazy(()=>be(()=>import("./ConnectedInstitutionsURLs-gUMBROcH.js"),__vite__mapDeps([34,2,3,4,5,6,13,11]))),dl=g.lazy(()=>be(()=>import("./ConnectedUser-C39phNBn.js"),__vite__mapDeps([35,2,3,4,5,6,33,11]))),l2=g.lazy(()=>be(()=>import("./RemoteCampuses-DiA5hlnD.js"),__vite__mapDeps([36,2,3,4,5,6,11]))),i2=g.lazy(()=>be(()=>import("./AlienWave-DhaC80F-.js"),__vite__mapDeps([37,2,3,4,5,6,9,10,11]))),r2=g.lazy(()=>be(()=>import("./AlienWaveInternal-CeuaDpIY.js"),__vite__mapDeps([38,2,3,4,5,6,9,10,11]))),u2=g.lazy(()=>be(()=>import("./Automation-BAaw7w82.js"),__vite__mapDeps([39,2,3,4,5,6,10,11]))),c2=g.lazy(()=>be(()=>import("./CapacityCoreIP-CjzYJH11.js"),__vite__mapDeps([40,1,2,3,4,5,6,15,7]))),s2=g.lazy(()=>be(()=>import("./CapacityLargestLink-CCiZ1Jtj.js"),__vite__mapDeps([41,1,2,3,4,5,6,15,7]))),o2=g.lazy(()=>be(()=>import("./CertificateProvider-S4Idgrmz.js"),__vite__mapDeps([42,2,3,4,5,6,9,10,11]))),Dy=g.lazy(()=>be(()=>import("./DarkFibreLease-C_DLt-sT.js"),__vite__mapDeps([43,1,2,3,4,5,6,7]))),f2=g.lazy(()=>be(()=>import("./DarkFibreInstalled-XMYWXP4t.js"),__vite__mapDeps([44,1,2,3,4,5,6,7]))),d2=g.lazy(()=>be(()=>import("./ExternalConnections-Ds1slbkO.js"),__vite__mapDeps([45,2,3,4,5,6,11]))),h2=g.lazy(()=>be(()=>import("./FibreLight-C4tQtRYN.js"),__vite__mapDeps([46,2,3,4,5,6,9,10,11]))),m2=g.lazy(()=>be(()=>import("./IRUDuration-C1dUeB3y.js"),__vite__mapDeps([47,1,2,3,4,5,6,7]))),y2=g.lazy(()=>be(()=>import("./MonitoringTools-BrAyjiGW.js"),__vite__mapDeps([48,2,3,4,5,6,9,10,11]))),p2=g.lazy(()=>be(()=>import("./NetworkFunctionVirtualisation-BSD5a3W2.js"),__vite__mapDeps([49,2,3,4,5,6,10,11]))),v2=g.lazy(()=>be(()=>import("./NetworkMapUrls-iZSn2qqQ.js"),__vite__mapDeps([50,2,3,4,5,6,13,11]))),g2=g.lazy(()=>be(()=>import("./NonRAndEPeer-Cn_ozVAu.js"),__vite__mapDeps([51,1,2,3,4,5,6,15,7]))),E2=g.lazy(()=>be(()=>import("./OPsAutomation-Bc59w9gr.js"),__vite__mapDeps([52,2,3,4,5,6,9,10,11]))),b2=g.lazy(()=>be(()=>import("./PassiveMonitoring-NXmN_EjG.js"),__vite__mapDeps([53,2,3,4,5,6,9,10,11]))),S2=g.lazy(()=>be(()=>import("./PertTeam-64HTdccQ.js"),__vite__mapDeps([54,2,3,4,5,6,9,10,11]))),x2=g.lazy(()=>be(()=>import("./SiemVendors-Ba9ZMN9z.js"),__vite__mapDeps([55,2,3,4,5,6,9,10,11]))),_2=g.lazy(()=>be(()=>import("./TrafficRatio-p8ISc0n1.js"),__vite__mapDeps([56,1,2,3,4,5,6,18]))),R2=g.lazy(()=>be(()=>import("./TrafficUrl-Cupk7MWX.js"),__vite__mapDeps([57,2,3,4,5,6,13,11]))),T2=g.lazy(()=>be(()=>import("./TrafficVolume-C0Yprx37.js"),__vite__mapDeps([58,1,2,3,4,5,6,7]))),N2=g.lazy(()=>be(()=>import("./WeatherMap-DPu2PGnk.js"),__vite__mapDeps([59,2,3,4,5,6,13,11]))),Ua=g.lazy(()=>be(()=>import("./Services-5TAXBWqD.js"),__vite__mapDeps([60,2,3,4,5,6,11]))),C2=g.lazy(()=>be(()=>import("./Landing-B1Sq71Lu.js"),__vite__mapDeps([61,62,63,3,4,11]))),No=g.lazy(()=>be(()=>import("./SurveyContainerComponent-BmuW9EVe.js"),__vite__mapDeps([64,65,66,67,63,3,68]))),j2=g.lazy(()=>be(()=>import("./SurveyManagementComponent-BvOZUwZZ.js"),__vite__mapDeps([69,70,6,11,65,67,62,63,3]))),O2=g.lazy(()=>be(()=>import("./UserManagementComponent-BsFczL9E.js"),__vite__mapDeps([71,65,63,3,5,70,6,11]))),D2=()=>{const l=Ke.c(9),{pathname:n}=Xn(),c=n!=="/";let s;l[0]===Symbol.for("react.memo_cache_sentinel")?(s=h.jsx(oS,{}),l[0]=s):s=l[0];let u;l[1]!==c?(u=h.jsx("main",{className:"grow",children:c?h.jsx(T0,{}):h.jsx(Bp,{})}),l[1]=c,l[2]=u):u=l[2];let f;l[3]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx(HS,{}),l[3]=f):f=l[3];let d;l[4]!==u?(d=h.jsxs(wE,{children:[s,u,f]}),l[4]=u,l[5]=d):d=l[5];let y;l[6]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx(hS,{}),l[6]=y):y=l[6];let v;return l[7]!==d?(v=h.jsxs(h.Fragment,{children:[d,y]}),l[7]=d,l[8]=v):v=l[8],v},w2=P0([{path:"",element:h.jsx(D2,{}),children:[{path:"/budget",element:h.jsx(BS,{})},{path:"/funding",element:h.jsx(YS,{})},{path:"/employment",element:h.jsx(Oy,{},"staffgraph")},{path:"/traffic-ratio",element:h.jsx(_2,{})},{path:"/roles",element:h.jsx(Oy,{roles:!0},"staffgraphroles")},{path:"/employee-count",element:h.jsx(kS,{})},{path:"/charging",element:h.jsx(qS,{})},{path:"/suborganisations",element:h.jsx(XS,{})},{path:"/parentorganisation",element:h.jsx(GS,{})},{path:"/ec-projects",element:h.jsx(VS,{})},{path:"/policy",element:h.jsx(WS,{})},{path:"/traffic-volume",element:h.jsx(T2,{})},{path:"/data",element:h.jsx(US,{})},{path:"/institutions-urls",element:h.jsx(a2,{})},{path:"/connected-proportion",element:h.jsx(dl,{page:Qt.ConnectedProportion},Qt.ConnectedProportion)},{path:"/connectivity-level",element:h.jsx(dl,{page:Qt.ConnectivityLevel},Qt.ConnectivityLevel)},{path:"/connectivity-growth",element:h.jsx(dl,{page:Qt.ConnectivityGrowth},Qt.ConnectivityGrowth)},{path:"/connection-carrier",element:h.jsx(dl,{page:Qt.ConnectionCarrier},Qt.ConnectionCarrier)},{path:"/connectivity-load",element:h.jsx(dl,{page:Qt.ConnectivityLoad},Qt.ConnectivityLoad)},{path:"/commercial-charging-level",element:h.jsx(dl,{page:Qt.CommercialChargingLevel},Qt.CommercialChargingLevel)},{path:"/commercial-connectivity",element:h.jsx(dl,{page:Qt.CommercialConnectivity},Qt.CommercialConnectivity)},{path:"/network-services",element:h.jsx(Ua,{category:Lt.network_services},Lt.network_services)},{path:"/isp-support-services",element:h.jsx(Ua,{category:Lt.isp_support},Lt.isp_support)},{path:"/security-services",element:h.jsx(Ua,{category:Lt.security},Lt.security)},{path:"/identity-services",element:h.jsx(Ua,{category:Lt.identity},Lt.identity)},{path:"/collaboration-services",element:h.jsx(Ua,{category:Lt.collaboration},Lt.collaboration)},{path:"/multimedia-services",element:h.jsx(Ua,{category:Lt.multimedia},Lt.multimedia)},{path:"/storage-and-hosting-services",element:h.jsx(Ua,{category:Lt.storage_and_hosting},Lt.storage_and_hosting)},{path:"/professional-services",element:h.jsx(Ua,{category:Lt.professional_services},Lt.professional_services)},{path:"/dark-fibre-lease",element:h.jsx(Dy,{national:!0},"darkfibrenational")},{path:"/dark-fibre-lease-international",element:h.jsx(Dy,{},"darkfibreinternational")},{path:"/dark-fibre-installed",element:h.jsx(f2,{})},{path:"/remote-campuses",element:h.jsx(l2,{})},{path:"/eosc-listings",element:h.jsx(PS,{})},{path:"/fibre-light",element:h.jsx(h2,{})},{path:"/monitoring-tools",element:h.jsx(y2,{})},{path:"/pert-team",element:h.jsx(S2,{})},{path:"/passive-monitoring",element:h.jsx(b2,{})},{path:"/alien-wave",element:h.jsx(i2,{})},{path:"/alien-wave-internal",element:h.jsx(r2,{})},{path:"/external-connections",element:h.jsx(d2,{})},{path:"/ops-automation",element:h.jsx(E2,{})},{path:"/network-automation",element:h.jsx(u2,{})},{path:"/traffic-stats",element:h.jsx(R2,{})},{path:"/weather-map",element:h.jsx(N2,{})},{path:"/network-map",element:h.jsx(v2,{})},{path:"/nfv",element:h.jsx(p2,{})},{path:"/certificate-providers",element:h.jsx(o2,{})},{path:"/siem-vendors",element:h.jsx(x2,{})},{path:"/capacity-largest-link",element:h.jsx(s2,{})},{path:"/capacity-core-ip",element:h.jsx(c2,{})},{path:"/non-rne-peers",element:h.jsx(g2,{})},{path:"/iru-duration",element:h.jsx(m2,{})},{path:"/audits",element:h.jsx(QS,{})},{path:"/business-continuity",element:h.jsx(ZS,{})},{path:"/crisis-management",element:h.jsx(JS,{})},{path:"/crisis-exercise",element:h.jsx(FS,{})},{path:"/central-procurement",element:h.jsx(KS,{})},{path:"/security-control",element:h.jsx(IS,{})},{path:"/services-offered",element:h.jsx(n2,{})},{path:"/service-management-framework",element:h.jsx(t2,{})},{path:"/service-level-targets",element:h.jsx(e2,{})},{path:"/corporate-strategy",element:h.jsx($S,{})},{path:"/survey/admin/surveys",element:h.jsx(j2,{})},{path:"/survey/admin/users",element:h.jsx(O2,{})},{path:"/survey/admin/inspect/:year",element:h.jsx(No,{loadFrom:"/api/response/inspect/"})},{path:"/survey/admin/try/:year",element:h.jsx(No,{loadFrom:"/api/response/try/"})},{path:"/survey/response/:year/:nren",element:h.jsx(No,{loadFrom:"/api/response/load/"})},{path:"/survey/*",element:h.jsx(C2,{})},{path:"*",element:h.jsx(Bp,{})}]}]);function A2(){const l=Ke.c(1);let n;return l[0]===Symbol.for("react.memo_cache_sentinel")?(n=h.jsx("div",{className:"app",children:h.jsx(oE,{router:w2})}),l[0]=n):n=l[0],n}const M2=document.getElementById("root"),z2=a1.createRoot(M2);z2.render(h.jsx(Yt.StrictMode,{children:h.jsx(A2,{})}));export{Yp as $,Ho as A,pb as B,ln as C,Xy as D,Ya as E,yE as F,MS as G,LS as H,jS as I,vE as J,OS as K,Tn as L,Iy as M,zS as N,wS as O,AS as P,Hp as Q,Rn as R,li as S,NS as T,V2 as U,SE as V,Du as W,DS as X,_S as Y,RS as Z,zE as _,Qt as a,Lt as a0,Fo as a1,yr as a2,ku as a3,wy as a4,B2 as a5,H2 as a6,be as a7,rb as a8,nb as a9,$u as aa,gl as ab,hl as ac,Mo as ad,Ba as ae,yl as af,ab as ag,U2 as ah,nf as ai,OE as aj,Y2 as b,Ke as c,G2 as d,rr as e,Yt as f,up as g,Qe as h,Ae as i,h as j,sb as k,by as l,Bu as m,Ob as n,Ku as o,tf as p,ob as q,g as r,ti as s,se as t,pl as u,lp as v,q2 as w,rp as x,Bo as y,BE as z};
+*/var dy;function AE(){return dy||(dy=1,function(l){(function(){var n={}.hasOwnProperty;function c(){for(var f="",d=0;d<arguments.length;d++){var y=arguments[d];y&&(f=u(f,s(y)))}return f}function s(f){if(typeof f=="string"||typeof f=="number")return f;if(typeof f!="object")return"";if(Array.isArray(f))return c.apply(null,f);if(f.toString!==Object.prototype.toString&&!f.toString.toString().includes("[native code]"))return f.toString();var d="";for(var y in f)n.call(f,y)&&f[y]&&(d=u(d,y));return d}function u(f,d){return d?f?f+" "+d:f+d:f}l.exports?(c.default=c,l.exports=c):window.classNames=c})()}(po)),po.exports}var ME=AE();const Ae=fr(ME);function zE(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.includes(s))continue;c[s]=l[s]}return c}function Ao(l,n){return Ao=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(c,s){return c.__proto__=s,c},Ao(l,n)}function LE(l,n){l.prototype=Object.create(n.prototype),l.prototype.constructor=l,Ao(l,n)}const UE=["xxl","xl","lg","md","sm","xs"],HE="xs",Zu=g.createContext({prefixes:{},breakpoints:UE,minBreakpoint:HE});function Qe(l,n){const{prefixes:c}=g.useContext(Zu);return l||c[n]||n}function tp(){const{breakpoints:l}=g.useContext(Zu);return l}function np(){const{minBreakpoint:l}=g.useContext(Zu);return l}function BE(){const{dir:l}=g.useContext(Zu);return l==="rtl"}function Ku(l){return l&&l.ownerDocument||document}function qE(l){var n=Ku(l);return n&&n.defaultView||window}function VE(l,n){return qE(l).getComputedStyle(l,n)}var YE=/([A-Z])/g;function GE(l){return l.replace(YE,"-$1").toLowerCase()}var kE=/^ms-/;function Ou(l){return GE(l).replace(kE,"-ms-")}var XE=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;function QE(l){return!!(l&&XE.test(l))}function gl(l,n){var c="",s="";if(typeof n=="string")return l.style.getPropertyValue(Ou(n))||VE(l).getPropertyValue(Ou(n));Object.keys(n).forEach(function(u){var f=n[u];!f&&f!==0?l.style.removeProperty(Ou(u)):QE(u)?s+=u+"("+f+") ":c+=Ou(u)+": "+f+";"}),s&&(c+="transform: "+s+";"),l.style.cssText+=";"+c}var vo={exports:{}},go,hy;function ZE(){if(hy)return go;hy=1;var l="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";return go=l,go}var Eo,my;function KE(){if(my)return Eo;my=1;var l=ZE();function n(){}function c(){}return c.resetWarningCache=n,Eo=function(){function s(d,y,v,p,b,R){if(R!==l){var S=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw S.name="Invariant Violation",S}}s.isRequired=s;function u(){return s}var f={array:s,bigint:s,bool:s,func:s,number:s,object:s,string:s,symbol:s,any:s,arrayOf:u,element:s,elementType:s,instanceOf:u,node:s,objectOf:u,oneOf:u,oneOfType:u,shape:u,exact:u,checkPropTypes:c,resetWarningCache:n};return f.PropTypes=f,f},Eo}var yy;function $E(){return yy||(yy=1,vo.exports=KE()()),vo.exports}var FE=$E();const fa=fr(FE),py={disabled:!1},ap=Yt.createContext(null);var JE=function(n){return n.scrollTop},cr="unmounted",hl="exited",Ba="entering",yl="entered",Mo="exiting",ha=function(l){LE(n,l);function n(s,u){var f;f=l.call(this,s,u)||this;var d=u,y=d&&!d.isMounting?s.enter:s.appear,v;return f.appearStatus=null,s.in?y?(v=hl,f.appearStatus=Ba):v=yl:s.unmountOnExit||s.mountOnEnter?v=cr:v=hl,f.state={status:v},f.nextCallback=null,f}n.getDerivedStateFromProps=function(u,f){var d=u.in;return d&&f.status===cr?{status:hl}:null};var c=n.prototype;return c.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},c.componentDidUpdate=function(u){var f=null;if(u!==this.props){var d=this.state.status;this.props.in?d!==Ba&&d!==yl&&(f=Ba):(d===Ba||d===yl)&&(f=Mo)}this.updateStatus(!1,f)},c.componentWillUnmount=function(){this.cancelNextCallback()},c.getTimeouts=function(){var u=this.props.timeout,f,d,y;return f=d=y=u,u!=null&&typeof u!="number"&&(f=u.exit,d=u.enter,y=u.appear!==void 0?u.appear:d),{exit:f,enter:d,appear:y}},c.updateStatus=function(u,f){if(u===void 0&&(u=!1),f!==null)if(this.cancelNextCallback(),f===Ba){if(this.props.unmountOnExit||this.props.mountOnEnter){var d=this.props.nodeRef?this.props.nodeRef.current:ii.findDOMNode(this);d&&JE(d)}this.performEnter(u)}else this.performExit();else this.props.unmountOnExit&&this.state.status===hl&&this.setState({status:cr})},c.performEnter=function(u){var f=this,d=this.props.enter,y=this.context?this.context.isMounting:u,v=this.props.nodeRef?[y]:[ii.findDOMNode(this),y],p=v[0],b=v[1],R=this.getTimeouts(),S=y?R.appear:R.enter;if(!u&&!d||py.disabled){this.safeSetState({status:yl},function(){f.props.onEntered(p)});return}this.props.onEnter(p,b),this.safeSetState({status:Ba},function(){f.props.onEntering(p,b),f.onTransitionEnd(S,function(){f.safeSetState({status:yl},function(){f.props.onEntered(p,b)})})})},c.performExit=function(){var u=this,f=this.props.exit,d=this.getTimeouts(),y=this.props.nodeRef?void 0:ii.findDOMNode(this);if(!f||py.disabled){this.safeSetState({status:hl},function(){u.props.onExited(y)});return}this.props.onExit(y),this.safeSetState({status:Mo},function(){u.props.onExiting(y),u.onTransitionEnd(d.exit,function(){u.safeSetState({status:hl},function(){u.props.onExited(y)})})})},c.cancelNextCallback=function(){this.nextCallback!==null&&(this.nextCallback.cancel(),this.nextCallback=null)},c.safeSetState=function(u,f){f=this.setNextCallback(f),this.setState(u,f)},c.setNextCallback=function(u){var f=this,d=!0;return this.nextCallback=function(y){d&&(d=!1,f.nextCallback=null,u(y))},this.nextCallback.cancel=function(){d=!1},this.nextCallback},c.onTransitionEnd=function(u,f){this.setNextCallback(f);var d=this.props.nodeRef?this.props.nodeRef.current:ii.findDOMNode(this),y=u==null&&!this.props.addEndListener;if(!d||y){setTimeout(this.nextCallback,0);return}if(this.props.addEndListener){var v=this.props.nodeRef?[this.nextCallback]:[d,this.nextCallback],p=v[0],b=v[1];this.props.addEndListener(p,b)}u!=null&&setTimeout(this.nextCallback,u)},c.render=function(){var u=this.state.status;if(u===cr)return null;var f=this.props,d=f.children;f.in,f.mountOnEnter,f.unmountOnExit,f.appear,f.enter,f.exit,f.timeout,f.addEndListener,f.onEnter,f.onEntering,f.onEntered,f.onExit,f.onExiting,f.onExited,f.nodeRef;var y=zE(f,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]);return Yt.createElement(ap.Provider,{value:null},typeof d=="function"?d(u,y):Yt.cloneElement(Yt.Children.only(d),y))},n}(Yt.Component);ha.contextType=ap;ha.propTypes={};function ei(){}ha.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:ei,onEntering:ei,onEntered:ei,onExit:ei,onExiting:ei,onExited:ei};ha.UNMOUNTED=cr;ha.EXITED=hl;ha.ENTERING=Ba;ha.ENTERED=yl;ha.EXITING=Mo;function PE(l){return l.code==="Escape"||l.keyCode===27}function WE(){const l=g.version.split(".");return{major:+l[0],minor:+l[1],patch:+l[2]}}function $u(l){if(!l||typeof l=="function")return null;const{major:n}=WE();return n>=19?l.props.ref:l.ref}const ri=!!(typeof window<"u"&&window.document&&window.document.createElement);var zo=!1,Lo=!1;try{var bo={get passive(){return zo=!0},get once(){return Lo=zo=!0}};ri&&(window.addEventListener("test",bo,bo),window.removeEventListener("test",bo,!0))}catch{}function lp(l,n,c,s){if(s&&typeof s!="boolean"&&!Lo){var u=s.once,f=s.capture,d=c;!Lo&&u&&(d=c.__once||function y(v){this.removeEventListener(n,y,f),c.call(this,v)},c.__once=d),l.addEventListener(n,d,zo?s:f)}l.addEventListener(n,c,s)}function Uo(l,n,c,s){var u=s&&typeof s!="boolean"?s.capture:s;l.removeEventListener(n,c,u),c.__once&&l.removeEventListener(n,c.__once,u)}function Bu(l,n,c,s){return lp(l,n,c,s),function(){Uo(l,n,c,s)}}function IE(l,n,c,s){if(s===void 0&&(s=!0),l){var u=document.createEvent("HTMLEvents");u.initEvent(n,c,s),l.dispatchEvent(u)}}function eb(l){var n=gl(l,"transitionDuration")||"",c=n.indexOf("ms")===-1?1e3:1;return parseFloat(n)*c}function tb(l,n,c){c===void 0&&(c=5);var s=!1,u=setTimeout(function(){s||IE(l,"transitionend",!0)},n+c),f=Bu(l,"transitionend",function(){s=!0},{once:!0});return function(){clearTimeout(u),f()}}function ip(l,n,c,s){c==null&&(c=eb(l)||0);var u=tb(l,c,s),f=Bu(l,"transitionend",n);return function(){u(),f()}}function vy(l,n){const c=gl(l,n)||"",s=c.indexOf("ms")===-1?1e3:1;return parseFloat(c)*s}function nb(l,n){const c=vy(l,"transitionDuration"),s=vy(l,"transitionDelay"),u=ip(l,f=>{f.target===l&&(u(),n(f))},c+s)}function ab(l){l.offsetHeight}const gy=l=>!l||typeof l=="function"?l:n=>{l.current=n};function lb(l,n){const c=gy(l),s=gy(n);return u=>{c&&c(u),s&&s(u)}}function rp(l,n){return g.useMemo(()=>lb(l,n),[l,n])}function ib(l){return l&&"setState"in l?ii.findDOMNode(l):l??null}const rb=Yt.forwardRef(({onEnter:l,onEntering:n,onEntered:c,onExit:s,onExiting:u,onExited:f,addEndListener:d,children:y,childRef:v,...p},b)=>{const R=g.useRef(null),S=rp(R,v),_=N=>{S(ib(N))},O=N=>W=>{N&&R.current&&N(R.current,W)},H=g.useCallback(O(l),[l]),U=g.useCallback(O(n),[n]),M=g.useCallback(O(c),[c]),q=g.useCallback(O(s),[s]),Y=g.useCallback(O(u),[u]),J=g.useCallback(O(f),[f]),k=g.useCallback(O(d),[d]);return h.jsx(ha,{ref:b,...p,onEnter:H,onEntered:M,onEntering:U,onExit:q,onExited:J,onExiting:Y,addEndListener:k,nodeRef:R,children:typeof y=="function"?(N,W)=>y(N,{...W,ref:_}):Yt.cloneElement(y,{ref:_})})});function ub(l){const n=g.useRef(l);return g.useEffect(()=>{n.current=l},[l]),n}function Ho(l){const n=ub(l);return g.useCallback(function(...c){return n.current&&n.current(...c)},[n])}const Po=l=>g.forwardRef((n,c)=>h.jsx("div",{...n,ref:c,className:Ae(n.className,l)}));function cb(l){const n=g.useRef(l);return g.useEffect(()=>{n.current=l},[l]),n}function pl(l){const n=cb(l);return g.useCallback(function(...c){return n.current&&n.current(...c)},[n])}function sb(){const l=g.useRef(!0),n=g.useRef(()=>l.current);return g.useEffect(()=>(l.current=!0,()=>{l.current=!1}),[]),n.current}function ob(l){const n=g.useRef(null);return g.useEffect(()=>{n.current=l}),n.current}const fb=typeof global<"u"&&global.navigator&&global.navigator.product==="ReactNative",db=typeof document<"u",Ey=db||fb?g.useLayoutEffect:g.useEffect,hb=["as","disabled"];function mb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}function yb(l){return!l||l.trim()==="#"}function up({tagName:l,disabled:n,href:c,target:s,rel:u,role:f,onClick:d,tabIndex:y=0,type:v}){l||(c!=null||s!=null||u!=null?l="a":l="button");const p={tagName:l};if(l==="button")return[{type:v||"button",disabled:n},p];const b=S=>{if((n||l==="a"&&yb(c))&&S.preventDefault(),n){S.stopPropagation();return}d==null||d(S)},R=S=>{S.key===" "&&(S.preventDefault(),b(S))};return l==="a"&&(c||(c="#"),n&&(c=void 0)),[{role:f??"button",disabled:void 0,tabIndex:n?void 0:y,href:c,target:l==="a"?s:void 0,"aria-disabled":n||void 0,rel:l==="a"?u:void 0,onClick:b,onKeyDown:R},p]}const pb=g.forwardRef((l,n)=>{let{as:c,disabled:s}=l,u=mb(l,hb);const[f,{tagName:d}]=up(Object.assign({tagName:c,disabled:s},u));return h.jsx(d,Object.assign({},u,f,{ref:n}))});pb.displayName="Button";const vb={[Ba]:"show",[yl]:"show"},Wo=g.forwardRef(({className:l,children:n,transitionClasses:c={},onEnter:s,...u},f)=>{const d={in:!1,timeout:300,mountOnEnter:!1,unmountOnExit:!1,appear:!1,...u},y=g.useCallback((v,p)=>{ab(v),s==null||s(v,p)},[s]);return h.jsx(rb,{ref:f,addEndListener:nb,...d,onEnter:y,childRef:$u(n),children:(v,p)=>g.cloneElement(n,{...p,className:Ae("fade",l,n.props.className,vb[v],c[v])})})});Wo.displayName="Fade";const gb={"aria-label":fa.string,onClick:fa.func,variant:fa.oneOf(["white"])},Io=g.forwardRef(({className:l,variant:n,"aria-label":c="Close",...s},u)=>h.jsx("button",{ref:u,type:"button",className:Ae("btn-close",n&&`btn-close-${n}`,l),"aria-label":c,...s}));Io.displayName="CloseButton";Io.propTypes=gb;const Bo=g.forwardRef(({as:l,bsPrefix:n,variant:c="primary",size:s,active:u=!1,disabled:f=!1,className:d,...y},v)=>{const p=Qe(n,"btn"),[b,{tagName:R}]=up({tagName:l,disabled:f,...y}),S=R;return h.jsx(S,{...b,...y,ref:v,disabled:f,className:Ae(d,p,u&&"active",c&&`${p}-${c}`,s&&`${p}-${s}`,y.href&&f&&"disabled")})});Bo.displayName="Button";const ef=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"card-body"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));ef.displayName="CardBody";const cp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"card-footer"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));cp.displayName="CardFooter";const sp=g.createContext(null);sp.displayName="CardHeaderContext";const op=g.forwardRef(({bsPrefix:l,className:n,as:c="div",...s},u)=>{const f=Qe(l,"card-header"),d=g.useMemo(()=>({cardHeaderBsPrefix:f}),[f]);return h.jsx(sp.Provider,{value:d,children:h.jsx(c,{ref:u,...s,className:Ae(n,f)})})});op.displayName="CardHeader";const fp=g.forwardRef(({bsPrefix:l,className:n,variant:c,as:s="img",...u},f)=>{const d=Qe(l,"card-img");return h.jsx(s,{ref:f,className:Ae(c?`${d}-${c}`:d,n),...u})});fp.displayName="CardImg";const dp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"card-img-overlay"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));dp.displayName="CardImgOverlay";const hp=g.forwardRef(({className:l,bsPrefix:n,as:c="a",...s},u)=>(n=Qe(n,"card-link"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));hp.displayName="CardLink";const Eb=Po("h6"),mp=g.forwardRef(({className:l,bsPrefix:n,as:c=Eb,...s},u)=>(n=Qe(n,"card-subtitle"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));mp.displayName="CardSubtitle";const yp=g.forwardRef(({className:l,bsPrefix:n,as:c="p",...s},u)=>(n=Qe(n,"card-text"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));yp.displayName="CardText";const bb=Po("h5"),pp=g.forwardRef(({className:l,bsPrefix:n,as:c=bb,...s},u)=>(n=Qe(n,"card-title"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));pp.displayName="CardTitle";const vp=g.forwardRef(({bsPrefix:l,className:n,bg:c,text:s,border:u,body:f=!1,children:d,as:y="div",...v},p)=>{const b=Qe(l,"card");return h.jsx(y,{ref:p,...v,className:Ae(n,b,c&&`bg-${c}`,s&&`text-${s}`,u&&`border-${u}`),children:f?h.jsx(ef,{children:d}):d})});vp.displayName="Card";const Yn=Object.assign(vp,{Img:fp,Title:pp,Subtitle:mp,Body:ef,Link:hp,Text:yp,Header:op,Footer:cp,ImgOverlay:dp});function Sb(l){const n=g.useRef(l);return n.current=l,n}function xb(l){const n=Sb(l);g.useEffect(()=>()=>n.current(),[])}function _b(l,n){return g.Children.toArray(l).some(c=>g.isValidElement(c)&&c.type===n)}function Rb({as:l,bsPrefix:n,className:c,...s}){n=Qe(n,"col");const u=tp(),f=np(),d=[],y=[];return u.forEach(v=>{const p=s[v];delete s[v];let b,R,S;typeof p=="object"&&p!=null?{span:b,offset:R,order:S}=p:b=p;const _=v!==f?`-${v}`:"";b&&d.push(b===!0?`${n}${_}`:`${n}${_}-${b}`),S!=null&&y.push(`order${_}-${S}`),R!=null&&y.push(`offset${_}-${R}`)}),[{...s,className:Ae(c,...d,...y)},{as:l,bsPrefix:n,spans:d}]}const ln=g.forwardRef((l,n)=>{const[{className:c,...s},{as:u="div",bsPrefix:f,spans:d}]=Rb(l);return h.jsx(u,{...s,ref:n,className:Ae(c,!d.length&&f)})});ln.displayName="Col";const Ya=g.forwardRef(({bsPrefix:l,fluid:n=!1,as:c="div",className:s,...u},f)=>{const d=Qe(l,"container"),y=typeof n=="string"?`-${n}`:"-fluid";return h.jsx(c,{ref:f,...u,className:Ae(s,n?`${d}${y}`:d)})});Ya.displayName="Container";var Tb=Function.prototype.bind.call(Function.prototype.call,[].slice);function ti(l,n){return Tb(l.querySelectorAll(n))}function by(l,n){if(l.contains)return l.contains(n);if(l.compareDocumentPosition)return l===n||!!(l.compareDocumentPosition(n)&16)}var So,Sy;function Nb(){if(Sy)return So;Sy=1;var l=function(){};return So=l,So}var Cb=Nb();const q2=fr(Cb),jb="data-rr-ui-";function Ob(l){return`${jb}${l}`}const gp=g.createContext(ri?window:void 0);gp.Provider;function tf(){return g.useContext(gp)}const Db={type:fa.string,tooltip:fa.bool,as:fa.elementType},Fu=g.forwardRef(({as:l="div",className:n,type:c="valid",tooltip:s=!1,...u},f)=>h.jsx(l,{...u,ref:f,className:Ae(n,`${c}-${s?"tooltip":"feedback"}`)}));Fu.displayName="Feedback";Fu.propTypes=Db;const da=g.createContext({}),nf=g.forwardRef(({id:l,bsPrefix:n,className:c,type:s="checkbox",isValid:u=!1,isInvalid:f=!1,as:d="input",...y},v)=>{const{controlId:p}=g.useContext(da);return n=Qe(n,"form-check-input"),h.jsx(d,{...y,ref:v,type:s,id:l||p,className:Ae(c,n,u&&"is-valid",f&&"is-invalid")})});nf.displayName="FormCheckInput";const qu=g.forwardRef(({bsPrefix:l,className:n,htmlFor:c,...s},u)=>{const{controlId:f}=g.useContext(da);return l=Qe(l,"form-check-label"),h.jsx("label",{...s,ref:u,htmlFor:c||f,className:Ae(n,l)})});qu.displayName="FormCheckLabel";const Ep=g.forwardRef(({id:l,bsPrefix:n,bsSwitchPrefix:c,inline:s=!1,reverse:u=!1,disabled:f=!1,isValid:d=!1,isInvalid:y=!1,feedbackTooltip:v=!1,feedback:p,feedbackType:b,className:R,style:S,title:_="",type:O="checkbox",label:H,children:U,as:M="input",...q},Y)=>{n=Qe(n,"form-check"),c=Qe(c,"form-switch");const{controlId:J}=g.useContext(da),k=g.useMemo(()=>({controlId:l||J}),[J,l]),N=!U&&H!=null&&H!==!1||_b(U,qu),W=h.jsx(nf,{...q,type:O==="switch"?"checkbox":O,ref:Y,isValid:d,isInvalid:y,disabled:f,as:M});return h.jsx(da.Provider,{value:k,children:h.jsx("div",{style:S,className:Ae(R,N&&n,s&&`${n}-inline`,u&&`${n}-reverse`,O==="switch"&&c),children:U||h.jsxs(h.Fragment,{children:[W,N&&h.jsx(qu,{title:_,children:H}),p&&h.jsx(Fu,{type:b,tooltip:v,children:p})]})})})});Ep.displayName="FormCheck";const Vu=Object.assign(Ep,{Input:nf,Label:qu}),bp=g.forwardRef(({bsPrefix:l,type:n,size:c,htmlSize:s,id:u,className:f,isValid:d=!1,isInvalid:y=!1,plaintext:v,readOnly:p,as:b="input",...R},S)=>{const{controlId:_}=g.useContext(da);return l=Qe(l,"form-control"),h.jsx(b,{...R,type:n,size:s,ref:S,readOnly:p,id:u||_,className:Ae(f,v?`${l}-plaintext`:l,c&&`${l}-${c}`,n==="color"&&`${l}-color`,d&&"is-valid",y&&"is-invalid")})});bp.displayName="FormControl";const wb=Object.assign(bp,{Feedback:Fu}),Sp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"form-floating"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));Sp.displayName="FormFloating";const af=g.forwardRef(({controlId:l,as:n="div",...c},s)=>{const u=g.useMemo(()=>({controlId:l}),[l]);return h.jsx(da.Provider,{value:u,children:h.jsx(n,{...c,ref:s})})});af.displayName="FormGroup";const xp=g.forwardRef(({as:l="label",bsPrefix:n,column:c=!1,visuallyHidden:s=!1,className:u,htmlFor:f,...d},y)=>{const{controlId:v}=g.useContext(da);n=Qe(n,"form-label");let p="col-form-label";typeof c=="string"&&(p=`${p} ${p}-${c}`);const b=Ae(u,n,s&&"visually-hidden",c&&p);return f=f||v,c?h.jsx(ln,{ref:y,as:"label",className:b,htmlFor:f,...d}):h.jsx(l,{ref:y,className:b,htmlFor:f,...d})});xp.displayName="FormLabel";const _p=g.forwardRef(({bsPrefix:l,className:n,id:c,...s},u)=>{const{controlId:f}=g.useContext(da);return l=Qe(l,"form-range"),h.jsx("input",{...s,type:"range",ref:u,className:Ae(n,l),id:c||f})});_p.displayName="FormRange";const Rp=g.forwardRef(({bsPrefix:l,size:n,htmlSize:c,className:s,isValid:u=!1,isInvalid:f=!1,id:d,...y},v)=>{const{controlId:p}=g.useContext(da);return l=Qe(l,"form-select"),h.jsx("select",{...y,size:c,ref:v,className:Ae(s,l,n&&`${l}-${n}`,u&&"is-valid",f&&"is-invalid"),id:d||p})});Rp.displayName="FormSelect";const Tp=g.forwardRef(({bsPrefix:l,className:n,as:c="small",muted:s,...u},f)=>(l=Qe(l,"form-text"),h.jsx(c,{...u,ref:f,className:Ae(n,l,s&&"text-muted")})));Tp.displayName="FormText";const Np=g.forwardRef((l,n)=>h.jsx(Vu,{...l,ref:n,type:"switch"}));Np.displayName="Switch";const Ab=Object.assign(Np,{Input:Vu.Input,Label:Vu.Label}),Cp=g.forwardRef(({bsPrefix:l,className:n,children:c,controlId:s,label:u,...f},d)=>(l=Qe(l,"form-floating"),h.jsxs(af,{ref:d,className:Ae(n,l),controlId:s,...f,children:[c,h.jsx("label",{htmlFor:s,children:u})]})));Cp.displayName="FloatingLabel";const Mb={_ref:fa.any,validated:fa.bool,as:fa.elementType},lf=g.forwardRef(({className:l,validated:n,as:c="form",...s},u)=>h.jsx(c,{...s,ref:u,className:Ae(l,n&&"was-validated")}));lf.displayName="Form";lf.propTypes=Mb;const Du=Object.assign(lf,{Group:af,Control:wb,Floating:Sp,Check:Vu,Switch:Ab,Label:xp,Text:Tp,Range:_p,Select:Rp,FloatingLabel:Cp}),xy=l=>!l||typeof l=="function"?l:n=>{l.current=n};function zb(l,n){const c=xy(l),s=xy(n);return u=>{c&&c(u),s&&s(u)}}function rf(l,n){return g.useMemo(()=>zb(l,n),[l,n])}var wu;function _y(l){if((!wu&&wu!==0||l)&&ri){var n=document.createElement("div");n.style.position="absolute",n.style.top="-9999px",n.style.width="50px",n.style.height="50px",n.style.overflow="scroll",document.body.appendChild(n),wu=n.offsetWidth-n.clientWidth,document.body.removeChild(n)}return wu}function Lb(){return g.useState(null)}function xo(l){l===void 0&&(l=Ku());try{var n=l.activeElement;return!n||!n.nodeName?null:n}catch{return l.body}}function Ub(l){const n=g.useRef(l);return n.current=l,n}function Hb(l){const n=Ub(l);g.useEffect(()=>()=>n.current(),[])}function Bb(l=document){const n=l.defaultView;return Math.abs(n.innerWidth-l.documentElement.clientWidth)}const Ry=Ob("modal-open");class uf{constructor({ownerDocument:n,handleContainerOverflow:c=!0,isRTL:s=!1}={}){this.handleContainerOverflow=c,this.isRTL=s,this.modals=[],this.ownerDocument=n}getScrollbarWidth(){return Bb(this.ownerDocument)}getElement(){return(this.ownerDocument||document).body}setModalAttributes(n){}removeModalAttributes(n){}setContainerStyle(n){const c={overflow:"hidden"},s=this.isRTL?"paddingLeft":"paddingRight",u=this.getElement();n.style={overflow:u.style.overflow,[s]:u.style[s]},n.scrollBarWidth&&(c[s]=`${parseInt(gl(u,s)||"0",10)+n.scrollBarWidth}px`),u.setAttribute(Ry,""),gl(u,c)}reset(){[...this.modals].forEach(n=>this.remove(n))}removeContainerStyle(n){const c=this.getElement();c.removeAttribute(Ry),Object.assign(c.style,n.style)}add(n){let c=this.modals.indexOf(n);return c!==-1||(c=this.modals.length,this.modals.push(n),this.setModalAttributes(n),c!==0)||(this.state={scrollBarWidth:this.getScrollbarWidth(),style:{}},this.handleContainerOverflow&&this.setContainerStyle(this.state)),c}remove(n){const c=this.modals.indexOf(n);c!==-1&&(this.modals.splice(c,1),!this.modals.length&&this.handleContainerOverflow&&this.removeContainerStyle(this.state),this.removeModalAttributes(n))}isTopModal(n){return!!this.modals.length&&this.modals[this.modals.length-1]===n}}const _o=(l,n)=>ri?l==null?(n||Ku()).body:(typeof l=="function"&&(l=l()),l&&"current"in l&&(l=l.current),l&&("nodeType"in l||l.getBoundingClientRect)?l:null):null;function qb(l,n){const c=tf(),[s,u]=g.useState(()=>_o(l,c==null?void 0:c.document));if(!s){const f=_o(l);f&&u(f)}return g.useEffect(()=>{},[n,s]),g.useEffect(()=>{const f=_o(l);f!==s&&u(f)},[l,s]),s}function Vb({children:l,in:n,onExited:c,mountOnEnter:s,unmountOnExit:u}){const f=g.useRef(null),d=g.useRef(n),y=pl(c);g.useEffect(()=>{n?d.current=!0:y(f.current)},[n,y]);const v=rf(f,$u(l)),p=g.cloneElement(l,{ref:v});return n?p:u||!d.current&&s?null:p}const Yb=["onEnter","onEntering","onEntered","onExit","onExiting","onExited","addEndListener","children"];function Gb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}function kb(l){let{onEnter:n,onEntering:c,onEntered:s,onExit:u,onExiting:f,onExited:d,addEndListener:y,children:v}=l,p=Gb(l,Yb);const b=g.useRef(null),R=rf(b,$u(v)),S=J=>k=>{J&&b.current&&J(b.current,k)},_=g.useCallback(S(n),[n]),O=g.useCallback(S(c),[c]),H=g.useCallback(S(s),[s]),U=g.useCallback(S(u),[u]),M=g.useCallback(S(f),[f]),q=g.useCallback(S(d),[d]),Y=g.useCallback(S(y),[y]);return Object.assign({},p,{nodeRef:b},n&&{onEnter:_},c&&{onEntering:O},s&&{onEntered:H},u&&{onExit:U},f&&{onExiting:M},d&&{onExited:q},y&&{addEndListener:Y},{children:typeof v=="function"?(J,k)=>v(J,Object.assign({},k,{ref:R})):g.cloneElement(v,{ref:R})})}const Xb=["component"];function Qb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}const Zb=g.forwardRef((l,n)=>{let{component:c}=l,s=Qb(l,Xb);const u=kb(s);return h.jsx(c,Object.assign({ref:n},u))});function Kb({in:l,onTransition:n}){const c=g.useRef(null),s=g.useRef(!0),u=pl(n);return Ey(()=>{if(!c.current)return;let f=!1;return u({in:l,element:c.current,initial:s.current,isStale:()=>f}),()=>{f=!0}},[l,u]),Ey(()=>(s.current=!1,()=>{s.current=!0}),[]),c}function $b({children:l,in:n,onExited:c,onEntered:s,transition:u}){const[f,d]=g.useState(!n);n&&f&&d(!1);const y=Kb({in:!!n,onTransition:p=>{const b=()=>{p.isStale()||(p.in?s==null||s(p.element,p.initial):(d(!0),c==null||c(p.element)))};Promise.resolve(u(p)).then(b,R=>{throw p.in||d(!0),R})}}),v=rf(y,$u(l));return f&&!n?null:g.cloneElement(l,{ref:v})}function Ty(l,n,c){return l?h.jsx(Zb,Object.assign({},c,{component:l})):n?h.jsx($b,Object.assign({},c,{transition:n})):h.jsx(Vb,Object.assign({},c))}const Fb=["show","role","className","style","children","backdrop","keyboard","onBackdropClick","onEscapeKeyDown","transition","runTransition","backdropTransition","runBackdropTransition","autoFocus","enforceFocus","restoreFocus","restoreFocusOptions","renderDialog","renderBackdrop","manager","container","onShow","onHide","onExit","onExited","onExiting","onEnter","onEntering","onEntered"];function Jb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}let Ro;function Pb(l){return Ro||(Ro=new uf({ownerDocument:l==null?void 0:l.document})),Ro}function Wb(l){const n=tf(),c=l||Pb(n),s=g.useRef({dialog:null,backdrop:null});return Object.assign(s.current,{add:()=>c.add(s.current),remove:()=>c.remove(s.current),isTopModal:()=>c.isTopModal(s.current),setDialogRef:g.useCallback(u=>{s.current.dialog=u},[]),setBackdropRef:g.useCallback(u=>{s.current.backdrop=u},[])})}const jp=g.forwardRef((l,n)=>{let{show:c=!1,role:s="dialog",className:u,style:f,children:d,backdrop:y=!0,keyboard:v=!0,onBackdropClick:p,onEscapeKeyDown:b,transition:R,runTransition:S,backdropTransition:_,runBackdropTransition:O,autoFocus:H=!0,enforceFocus:U=!0,restoreFocus:M=!0,restoreFocusOptions:q,renderDialog:Y,renderBackdrop:J=De=>h.jsx("div",Object.assign({},De)),manager:k,container:N,onShow:W,onHide:ie=()=>{},onExit:X,onExited:I,onExiting:de,onEnter:Ne,onEntering:Ye,onEntered:Be}=l,ze=Jb(l,Fb);const K=tf(),ce=qb(N),ne=Wb(k),Re=sb(),T=ob(c),[Q,le]=g.useState(!c),te=g.useRef(null);g.useImperativeHandle(n,()=>ne,[ne]),ri&&!T&&c&&(te.current=xo(K==null?void 0:K.document)),c&&Q&&le(!1);const P=pl(()=>{if(ne.add(),Ee.current=Bu(document,"keydown",Ce),Le.current=Bu(document,"focus",()=>setTimeout(ye),!0),W&&W(),H){var De,Rt;const St=xo((De=(Rt=ne.dialog)==null?void 0:Rt.ownerDocument)!=null?De:K==null?void 0:K.document);ne.dialog&&St&&!by(ne.dialog,St)&&(te.current=St,ne.dialog.focus())}}),ge=pl(()=>{if(ne.remove(),Ee.current==null||Ee.current(),Le.current==null||Le.current(),M){var De;(De=te.current)==null||De.focus==null||De.focus(q),te.current=null}});g.useEffect(()=>{!c||!ce||P()},[c,ce,P]),g.useEffect(()=>{Q&&ge()},[Q,ge]),Hb(()=>{ge()});const ye=pl(()=>{if(!U||!Re()||!ne.isTopModal())return;const De=xo(K==null?void 0:K.document);ne.dialog&&De&&!by(ne.dialog,De)&&ne.dialog.focus()}),Je=pl(De=>{De.target===De.currentTarget&&(p==null||p(De),y===!0&&ie())}),Ce=pl(De=>{v&&PE(De)&&ne.isTopModal()&&(b==null||b(De),De.defaultPrevented||ie())}),Le=g.useRef(),Ee=g.useRef(),Ze=(...De)=>{le(!0),I==null||I(...De)};if(!ce)return null;const vt=Object.assign({role:s,ref:ne.setDialogRef,"aria-modal":s==="dialog"?!0:void 0},ze,{style:f,className:u,tabIndex:-1});let it=Y?Y(vt):h.jsx("div",Object.assign({},vt,{children:g.cloneElement(d,{role:"document"})}));it=Ty(R,S,{unmountOnExit:!0,mountOnEnter:!0,appear:!0,in:!!c,onExit:X,onExiting:de,onExited:Ze,onEnter:Ne,onEntering:Ye,onEntered:Be,children:it});let lt=null;return y&&(lt=J({ref:ne.setBackdropRef,onClick:Je}),lt=Ty(_,O,{in:!!c,appear:!0,mountOnEnter:!0,unmountOnExit:!0,children:lt})),h.jsx(h.Fragment,{children:ii.createPortal(h.jsxs(h.Fragment,{children:[lt,it]}),ce)})});jp.displayName="Modal";const Ib=Object.assign(jp,{Manager:uf});function eS(l,n){return l.classList?l.classList.contains(n):(" "+(l.className.baseVal||l.className)+" ").indexOf(" "+n+" ")!==-1}function tS(l,n){l.classList?l.classList.add(n):eS(l,n)||(typeof l.className=="string"?l.className=l.className+" "+n:l.setAttribute("class",(l.className&&l.className.baseVal||"")+" "+n))}function Ny(l,n){return l.replace(new RegExp("(^|\\s)"+n+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}function nS(l,n){l.classList?l.classList.remove(n):typeof l.className=="string"?l.className=Ny(l.className,n):l.setAttribute("class",Ny(l.className&&l.className.baseVal||"",n))}const ni={FIXED_CONTENT:".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",STICKY_CONTENT:".sticky-top",NAVBAR_TOGGLER:".navbar-toggler"};class aS extends uf{adjustAndStore(n,c,s){const u=c.style[n];c.dataset[n]=u,gl(c,{[n]:`${parseFloat(gl(c,n))+s}px`})}restore(n,c){const s=c.dataset[n];s!==void 0&&(delete c.dataset[n],gl(c,{[n]:s}))}setContainerStyle(n){super.setContainerStyle(n);const c=this.getElement();if(tS(c,"modal-open"),!n.scrollBarWidth)return;const s=this.isRTL?"paddingLeft":"paddingRight",u=this.isRTL?"marginLeft":"marginRight";ti(c,ni.FIXED_CONTENT).forEach(f=>this.adjustAndStore(s,f,n.scrollBarWidth)),ti(c,ni.STICKY_CONTENT).forEach(f=>this.adjustAndStore(u,f,-n.scrollBarWidth)),ti(c,ni.NAVBAR_TOGGLER).forEach(f=>this.adjustAndStore(u,f,n.scrollBarWidth))}removeContainerStyle(n){super.removeContainerStyle(n);const c=this.getElement();nS(c,"modal-open");const s=this.isRTL?"paddingLeft":"paddingRight",u=this.isRTL?"marginLeft":"marginRight";ti(c,ni.FIXED_CONTENT).forEach(f=>this.restore(s,f)),ti(c,ni.STICKY_CONTENT).forEach(f=>this.restore(u,f)),ti(c,ni.NAVBAR_TOGGLER).forEach(f=>this.restore(u,f))}}let To;function lS(l){return To||(To=new aS(l)),To}const Op=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"modal-body"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));Op.displayName="ModalBody";const Dp=g.createContext({onHide(){}}),cf=g.forwardRef(({bsPrefix:l,className:n,contentClassName:c,centered:s,size:u,fullscreen:f,children:d,scrollable:y,...v},p)=>{l=Qe(l,"modal");const b=`${l}-dialog`,R=typeof f=="string"?`${l}-fullscreen-${f}`:`${l}-fullscreen`;return h.jsx("div",{...v,ref:p,className:Ae(b,n,u&&`${l}-${u}`,s&&`${b}-centered`,y&&`${b}-scrollable`,f&&R),children:h.jsx("div",{className:Ae(`${l}-content`,c),children:d})})});cf.displayName="ModalDialog";const wp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"modal-footer"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));wp.displayName="ModalFooter";const iS=g.forwardRef(({closeLabel:l="Close",closeVariant:n,closeButton:c=!1,onHide:s,children:u,...f},d)=>{const y=g.useContext(Dp),v=Ho(()=>{y==null||y.onHide(),s==null||s()});return h.jsxs("div",{ref:d,...f,children:[u,c&&h.jsx(Io,{"aria-label":l,variant:n,onClick:v})]})}),Ap=g.forwardRef(({bsPrefix:l,className:n,closeLabel:c="Close",closeButton:s=!1,...u},f)=>(l=Qe(l,"modal-header"),h.jsx(iS,{ref:f,...u,className:Ae(n,l),closeLabel:c,closeButton:s})));Ap.displayName="ModalHeader";const rS=Po("h4"),Mp=g.forwardRef(({className:l,bsPrefix:n,as:c=rS,...s},u)=>(n=Qe(n,"modal-title"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));Mp.displayName="ModalTitle";function uS(l){return h.jsx(Wo,{...l,timeout:null})}function cS(l){return h.jsx(Wo,{...l,timeout:null})}const zp=g.forwardRef(({bsPrefix:l,className:n,style:c,dialogClassName:s,contentClassName:u,children:f,dialogAs:d=cf,"data-bs-theme":y,"aria-labelledby":v,"aria-describedby":p,"aria-label":b,show:R=!1,animation:S=!0,backdrop:_=!0,keyboard:O=!0,onEscapeKeyDown:H,onShow:U,onHide:M,container:q,autoFocus:Y=!0,enforceFocus:J=!0,restoreFocus:k=!0,restoreFocusOptions:N,onEntered:W,onExit:ie,onExiting:X,onEnter:I,onEntering:de,onExited:Ne,backdropClassName:Ye,manager:Be,...ze},K)=>{const[ce,ne]=g.useState({}),[Re,T]=g.useState(!1),Q=g.useRef(!1),le=g.useRef(!1),te=g.useRef(null),[P,ge]=Lb(),ye=rp(K,ge),Je=Ho(M),Ce=BE();l=Qe(l,"modal");const Le=g.useMemo(()=>({onHide:Je}),[Je]);function Ee(){return Be||lS({isRTL:Ce})}function Ze(_e){if(!ri)return;const Ie=Ee().getScrollbarWidth()>0,Gt=_e.scrollHeight>Ku(_e).documentElement.clientHeight;ne({paddingRight:Ie&&!Gt?_y():void 0,paddingLeft:!Ie&&Gt?_y():void 0})}const vt=Ho(()=>{P&&Ze(P.dialog)});xb(()=>{Uo(window,"resize",vt),te.current==null||te.current()});const it=()=>{Q.current=!0},lt=_e=>{Q.current&&P&&_e.target===P.dialog&&(le.current=!0),Q.current=!1},De=()=>{T(!0),te.current=ip(P.dialog,()=>{T(!1)})},Rt=_e=>{_e.target===_e.currentTarget&&De()},St=_e=>{if(_==="static"){Rt(_e);return}if(le.current||_e.target!==_e.currentTarget){le.current=!1;return}M==null||M()},Pt=_e=>{O?H==null||H(_e):(_e.preventDefault(),_==="static"&&De())},Zt=(_e,Ie)=>{_e&&Ze(_e),I==null||I(_e,Ie)},un=_e=>{te.current==null||te.current(),ie==null||ie(_e)},cn=(_e,Ie)=>{de==null||de(_e,Ie),lp(window,"resize",vt)},Ut=_e=>{_e&&(_e.style.display=""),Ne==null||Ne(_e),Uo(window,"resize",vt)},Ht=g.useCallback(_e=>h.jsx("div",{..._e,className:Ae(`${l}-backdrop`,Ye,!S&&"show")}),[S,Ye,l]),mt={...c,...ce};mt.display="block";const Kt=_e=>h.jsx("div",{role:"dialog",..._e,style:mt,className:Ae(n,l,Re&&`${l}-static`,!S&&"show"),onClick:_?St:void 0,onMouseUp:lt,"data-bs-theme":y,"aria-label":b,"aria-labelledby":v,"aria-describedby":p,children:h.jsx(d,{...ze,onMouseDown:it,className:s,contentClassName:u,children:f})});return h.jsx(Dp.Provider,{value:Le,children:h.jsx(Ib,{show:R,ref:ye,backdrop:_,container:q,keyboard:!0,autoFocus:Y,enforceFocus:J,restoreFocus:k,restoreFocusOptions:N,onEscapeKeyDown:Pt,onShow:U,onHide:M,onEnter:Zt,onEntering:cn,onEntered:W,onExit:un,onExiting:X,onExited:Ut,manager:Ee(),transition:S?uS:void 0,backdropTransition:S?cS:void 0,renderBackdrop:Ht,renderDialog:Kt})})});zp.displayName="Modal";const ir=Object.assign(zp,{Body:Op,Header:Ap,Title:Mp,Footer:wp,Dialog:cf,TRANSITION_DURATION:300,BACKDROP_TRANSITION_DURATION:150}),Rn=g.forwardRef(({bsPrefix:l,className:n,as:c="div",...s},u)=>{const f=Qe(l,"row"),d=tp(),y=np(),v=`${f}-cols`,p=[];return d.forEach(b=>{const R=s[b];delete s[b];let S;R!=null&&typeof R=="object"?{cols:S}=R:S=R;const _=b!==y?`-${b}`:"";S!=null&&p.push(`${v}${_}-${S}`)}),h.jsx(c,{ref:u,...s,className:Ae(n,f,...p)})});Rn.displayName="Row";const sS="/static/DY3vaYXT.svg";function oS(){const l=Ke.c(6),{user:n}=g.useContext(Fo),{pathname:c}=Xn();let s;l[0]===Symbol.for("react.memo_cache_sentinel")?(s=h.jsx(ln,{xs:10,children:h.jsx("div",{className:"nav-wrapper",children:h.jsxs("nav",{className:"header-nav",children:[h.jsx("a",{href:"https://geant.org/",children:h.jsx("img",{src:sS,alt:"GÉANT Logo"})}),h.jsxs("ul",{children:[h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://network.geant.org/",children:"NETWORK"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://geant.org/services/",children:"SERVICES"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://community.geant.org/",children:"COMMUNITY"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://tnc23.geant.org/",children:"TNC"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://geant.org/projects/",children:"PROJECTS"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://connect.geant.org/",children:"CONNECT"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://impact.geant.org/",children:"IMPACT"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://careers.geant.org/",children:"CAREERS"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://about.geant.org/",children:"ABOUT"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://connect.geant.org/community-news",children:"NEWS"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://resources.geant.org/",children:"RESOURCES"})}),h.jsx("li",{children:h.jsx(Tn,{className:"nav-link-entry",to:"/",children:"COMPENDIUM"})})]})]})})}),l[0]=s):s=l[0];let u;l[1]!==c||l[2]!==n.permissions.admin?(u=n.permissions.admin&&!c.includes("survey")&&h.jsx("div",{className:"nav-link",style:{float:"right"},children:h.jsx(Tn,{className:"nav-link-entry",to:"/survey",children:h.jsx("span",{children:"Go to Survey"})})}),l[1]=c,l[2]=n.permissions.admin,l[3]=u):u=l[3];let f;return l[4]!==u?(f=h.jsx("div",{className:"external-page-nav-bar",children:h.jsx(Ya,{children:h.jsxs(Rn,{children:[s,h.jsx(ln,{xs:2,children:u})]})})}),l[4]=u,l[5]=f):f=l[5],f}const fS="/static/A3T3A-a_.svg",dS="/static/DOOiIGTs.png";function hS(){const l=Ke.c(9);let n;l[0]===Symbol.for("react.memo_cache_sentinel")?(n=h.jsx("a",{href:"https://geant.org",children:h.jsx("img",{src:fS,className:"m-3",style:{maxWidth:"100px"},alt:"GÉANT Logo"})}),l[0]=n):n=l[0];let c;l[1]===Symbol.for("react.memo_cache_sentinel")?(c=h.jsxs(ln,{children:[n,h.jsx("img",{src:dS,className:"m-3",style:{maxWidth:"200px"},alt:"European Union Flag"})]}),l[1]=c):c=l[1];let s,u;l[2]===Symbol.for("react.memo_cache_sentinel")?(s=h.jsx("a",{className:"mx-3 footer-link",href:"https://geant.org/Disclaimer/",children:"Disclaimer"}),u=h.jsx("wbr",{}),l[2]=s,l[3]=u):(s=l[2],u=l[3]);let f,d;l[4]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx("a",{className:"mx-3 footer-link",href:"https://geant.org/geant-anti-slavery-policy/",children:"GEANT Anti‑Slavery Policy"}),d=h.jsx("wbr",{}),l[4]=f,l[5]=d):(f=l[4],d=l[5]);let y,v;l[6]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("a",{className:"mx-3 footer-link",href:"https://geant.org/Privacy-Notice/",children:"Privacy Policy"}),v=h.jsx("wbr",{}),l[6]=y,l[7]=v):(y=l[6],v=l[7]);let p;return l[8]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx("footer",{className:"page-footer pt-3",children:h.jsx(Ya,{children:h.jsxs(Rn,{children:[c,h.jsx(ln,{className:"mt-4 text-end",children:h.jsxs("span",{children:[s,u,"|",f,d,"|",y,v,"|",h.jsx("a",{className:"mx-3 footer-link",style:{cursor:"pointer"},onClick:mS,children:"Analytics Consent"})]})})]})})}),l[8]=p):p=l[8],p}function mS(){localStorage.removeItem("matomo_consent"),window.location.reload()}const Lp="/static/C4lsyu6A.svg",Up="/static/DhA-EmEc.svg";function Hp(){const l=Ke.c(16),n=g.useContext(ep);let c;l[0]!==n?(c=O=>n==null?void 0:n.trackPageView(O),l[0]=n,l[1]=c):c=l[1];const s=c;let u;l[2]!==n?(u=O=>n==null?void 0:n.trackEvent(O),l[2]=n,l[3]=u):u=l[3];const f=u;let d;l[4]!==n?(d=()=>n==null?void 0:n.trackEvents(),l[4]=n,l[5]=d):d=l[5];const y=d;let v;l[6]!==n?(v=O=>n==null?void 0:n.trackLink(O),l[6]=n,l[7]=v):v=l[7];const p=v,b=yS;let R;l[8]!==n?(R=(O,...H)=>{const U=H;n==null||n.pushInstruction(O,...U)},l[8]=n,l[9]=R):R=l[9];const S=R;let _;return l[10]!==S||l[11]!==f||l[12]!==y||l[13]!==p||l[14]!==s?(_={trackEvent:f,trackEvents:y,trackPageView:s,trackLink:p,enableLinkTracking:b,pushInstruction:S},l[10]=S,l[11]=f,l[12]=y,l[13]=p,l[14]=s,l[15]=_):_=l[15],_}function yS(){}function Bp(){const l=Ke.c(13),{trackPageView:n}=Hp();let c,s;l[0]!==n?(c=()=>{n({documentTitle:"GEANT Compendium Landing Page"})},s=[n],l[0]=n,l[1]=c,l[2]=s):(c=l[1],s=l[2]),g.useEffect(c,s);let u;l[3]===Symbol.for("react.memo_cache_sentinel")?(u=h.jsx("h1",{className:"geant-header",children:"THE GÉANT COMPENDIUM OF NRENS"}),l[3]=u):u=l[3];let f;l[4]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx(Rn,{children:h.jsxs("div",{className:"center-text",children:[u,h.jsxs("div",{className:"wordwrap pt-4",children:[h.jsx("p",{style:{textAlign:"left",fontSize:"20px"},children:"Each year GÉANT invites European National Research and Eduction Networks to fill in a questionnaire asking about their network, their organisation, standards and policies, connected users, and the services they offer their users. This Compendium of responses is an authoritative reference source for anyone with an interest in the development of research and education networking in Europe and beyond. No two NRENs are identical, with great diversity in their structures, funding, size, and focus."}),h.jsx("p",{style:{textAlign:"left",fontSize:"20px"},children:"The GÉANT Compendium of NRENs Report is published annually, using both data from the Compendium from other sources, including surveys and studies carried out within different teams within GÉANT and the NREN community. The Report gives a broad overview of the European NREN landscape, identifying developments and trends."}),h.jsx("p",{style:{textAlign:"left",fontSize:"20px"},children:"Compendium Data, the responses from the NRENs, are made available to be viewed and downloaded. Graphs, charts, and tables can be customised to show as many or few NRENs as required, across different years. These can be downloaded as images or in PDF form."})]})]})}),l[4]=f):f=l[4];let d;l[5]===Symbol.for("react.memo_cache_sentinel")?(d={backgroundColor:"white"},l[5]=d):d=l[5];let y;l[6]===Symbol.for("react.memo_cache_sentinel")?(y={width:"18rem"},l[6]=y):y=l[6];let v;l[7]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx(Yn.Img,{src:Lp}),l[7]=v):v=l[7];let p;l[8]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx(Yn.Title,{children:"Compendium Data"}),l[8]=p):p=l[8];let b;l[9]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx(ln,{align:"center",children:h.jsx(Yn,{border:"light",style:y,children:h.jsxs(Tn,{to:"/data",className:"link-text",children:[v,h.jsxs(Yn.Body,{children:[p,h.jsx(Yn.Text,{children:h.jsx("span",{children:"Statistical representation of the annual Compendium Survey data is available here"})})]})]})})}),l[9]=b):b=l[9];let R;l[10]===Symbol.for("react.memo_cache_sentinel")?(R={width:"18rem"},l[10]=R):R=l[10];let S;l[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx(Yn.Img,{src:Up}),l[11]=S):S=l[11];let _;return l[12]===Symbol.for("react.memo_cache_sentinel")?(_=h.jsxs(Ya,{className:"py-5 grey-container",children:[f,h.jsx(Rn,{children:h.jsx(ln,{children:h.jsx(Ya,{style:d,className:"rounded-border",children:h.jsxs(Rn,{className:"justify-content-md-center",children:[b,h.jsx(ln,{align:"center",children:h.jsx(Yn,{border:"light",style:R,children:h.jsxs("a",{href:"https://resources.geant.org/geant-compendia/",className:"link-text",target:"_blank",rel:"noreferrer",children:[S,h.jsxs(Yn.Body,{children:[h.jsx(Yn.Title,{children:"Compendium Reports"}),h.jsx(Yn.Text,{children:"A GÉANT Compendium Report is published annually, drawing on data from the Compendium Survey filled in by NRENs, complemented by information from other surveys"})]})]})})})]})})})})]}),l[12]=_):_=l[12],_}var qp={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},Cy=Yt.createContext&&Yt.createContext(qp),pS=["attr","size","title"];function vS(l,n){if(l==null)return{};var c=gS(l,n),s,u;if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(l);for(u=0;u<f.length;u++)s=f[u],!(n.indexOf(s)>=0)&&Object.prototype.propertyIsEnumerable.call(l,s)&&(c[s]=l[s])}return c}function gS(l,n){if(l==null)return{};var c={};for(var s in l)if(Object.prototype.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}function Yu(){return Yu=Object.assign?Object.assign.bind():function(l){for(var n=1;n<arguments.length;n++){var c=arguments[n];for(var s in c)Object.prototype.hasOwnProperty.call(c,s)&&(l[s]=c[s])}return l},Yu.apply(this,arguments)}function jy(l,n){var c=Object.keys(l);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(l);n&&(s=s.filter(function(u){return Object.getOwnPropertyDescriptor(l,u).enumerable})),c.push.apply(c,s)}return c}function Gu(l){for(var n=1;n<arguments.length;n++){var c=arguments[n]!=null?arguments[n]:{};n%2?jy(Object(c),!0).forEach(function(s){ES(l,s,c[s])}):Object.getOwnPropertyDescriptors?Object.defineProperties(l,Object.getOwnPropertyDescriptors(c)):jy(Object(c)).forEach(function(s){Object.defineProperty(l,s,Object.getOwnPropertyDescriptor(c,s))})}return l}function ES(l,n,c){return n=bS(n),n in l?Object.defineProperty(l,n,{value:c,enumerable:!0,configurable:!0,writable:!0}):l[n]=c,l}function bS(l){var n=SS(l,"string");return typeof n=="symbol"?n:n+""}function SS(l,n){if(typeof l!="object"||!l)return l;var c=l[Symbol.toPrimitive];if(c!==void 0){var s=c.call(l,n||"default");if(typeof s!="object")return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return(n==="string"?String:Number)(l)}function Vp(l){return l&&l.map((n,c)=>Yt.createElement(n.tag,Gu({key:c},n.attr),Vp(n.child)))}function Yp(l){return n=>Yt.createElement(xS,Yu({attr:Gu({},l.attr)},n),Vp(l.child))}function xS(l){var n=c=>{var{attr:s,size:u,title:f}=l,d=vS(l,pS),y=u||c.size||"1em",v;return c.className&&(v=c.className),l.className&&(v=(v?v+" ":"")+l.className),Yt.createElement("svg",Yu({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},c.attr,s,d,{className:v,style:Gu(Gu({color:l.color||c.color},c.style),l.style),height:y,width:y,xmlns:"http://www.w3.org/2000/svg"}),f&&Yt.createElement("title",null,f),l.children)};return Cy!==void 0?Yt.createElement(Cy.Consumer,null,c=>n(c)):n(qp)}function _S(l){return Yp({tag:"svg",attr:{viewBox:"0 0 1024 1024",fill:"currentColor",fillRule:"evenodd"},child:[{tag:"path",attr:{d:"M799.855 166.312c.023.007.043.018.084.059l57.69 57.69c.041.041.052.06.059.084a.118.118 0 0 1 0 .069c-.007.023-.018.042-.059.083L569.926 512l287.703 287.703c.041.04.052.06.059.083a.118.118 0 0 1 0 .07c-.007.022-.018.042-.059.083l-57.69 57.69c-.041.041-.06.052-.084.059a.118.118 0 0 1-.069 0c-.023-.007-.042-.018-.083-.059L512 569.926 224.297 857.629c-.04.041-.06.052-.083.059a.118.118 0 0 1-.07 0c-.022-.007-.042-.018-.083-.059l-57.69-57.69c-.041-.041-.052-.06-.059-.084a.118.118 0 0 1 0-.069c.007-.023.018-.042.059-.083L454.073 512 166.371 224.297c-.041-.04-.052-.06-.059-.083a.118.118 0 0 1 0-.07c.007-.022.018-.042.059-.083l57.69-57.69c.041-.041.06-.052.084-.059a.118.118 0 0 1 .069 0c.023.007.042.018.083.059L512 454.073l287.703-287.702c.04-.041.06-.052.083-.059a.118.118 0 0 1 .07 0Z"},child:[]}]})(l)}function RS(l){return Yp({tag:"svg",attr:{viewBox:"0 0 1024 1024"},child:[{tag:"path",attr:{d:"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8Z"},child:[]},{tag:"path",attr:{d:"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8Z"},child:[]}]})(l)}const rr=l=>{const n=Ke.c(23),{title:c,children:s,startCollapsed:u,theme:f}=l,d=f===void 0?"":f,[y,v]=g.useState(!!u);let p;n[0]===Symbol.for("react.memo_cache_sentinel")?(p={color:"white",paddingBottom:"3px",marginTop:"3px",marginLeft:"3px",scale:"1.3"},n[0]=p):p=n[0];let b=p;if(d){let k;n[1]===Symbol.for("react.memo_cache_sentinel")?(k={...b,color:"black",fontWeight:"bold"},n[1]=k):k=n[1],b=k}const R=`collapsible-box${d} p-0`;let S;n[2]!==c?(S=h.jsx(ln,{children:h.jsx("h1",{className:"bold-caps-16pt dark-teal pt-3 ps-3",children:c})}),n[2]=c,n[3]=S):S=n[3];const _=`toggle-btn${d} p-${d?3:2}`;let O;n[4]!==y?(O=()=>v(!y),n[4]=y,n[5]=O):O=n[5];let H;n[6]!==y||n[7]!==b?(H=y?h.jsx(RS,{style:b}):h.jsx(_S,{style:b}),n[6]=y,n[7]=b,n[8]=H):H=n[8];let U;n[9]!==_||n[10]!==O||n[11]!==H?(U=h.jsx(ln,{className:"flex-grow-0 flex-shrink-1",children:h.jsx("div",{className:_,onClick:O,children:H})}),n[9]=_,n[10]=O,n[11]=H,n[12]=U):U=n[12];let M;n[13]!==S||n[14]!==U?(M=h.jsxs(Rn,{children:[S,U]}),n[13]=S,n[14]=U,n[15]=M):M=n[15];const q=`collapsible-content${y?" collapsed":""}`;let Y;n[16]!==s||n[17]!==q?(Y=h.jsx("div",{className:q,children:s}),n[16]=s,n[17]=q,n[18]=Y):Y=n[18];let J;return n[19]!==Y||n[20]!==R||n[21]!==M?(J=h.jsxs("div",{className:R,children:[M,Y]}),n[19]=Y,n[20]=R,n[21]=M,n[22]=J):J=n[22],J};function TS(l){const n=Ke.c(8),{section:c}=l;let s;n[0]===Symbol.for("react.memo_cache_sentinel")?(s={display:"flex",alignSelf:"right",lineHeight:"1.5rem",marginTop:"0.5rem"},n[0]=s):s=n[0];let u,f;n[1]===Symbol.for("react.memo_cache_sentinel")?(u=h.jsx("br",{}),f={float:"right"},n[1]=u,n[2]=f):(u=n[1],f=n[2]);let d;n[3]!==c?(d=h.jsx("div",{style:s,children:h.jsxs("span",{children:["Compendium ",u,h.jsx("span",{style:f,children:c})]})}),n[3]=c,n[4]=d):d=n[4];let y;n[5]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("img",{src:Up,style:{maxWidth:"4rem"},alt:"Compendium Data logo"}),n[5]=y):y=n[5];let v;return n[6]!==d?(v=h.jsxs("div",{className:"bold-caps-17pt section-container",children:[d,y]}),n[6]=d,n[7]=v):v=n[7],v}function NS(l){const n=Ke.c(14),{type:c}=l;let s="";c=="data"?s=" compendium-data-header":c=="reports"&&(s=" compendium-reports-header");let u;n[0]===Symbol.for("react.memo_cache_sentinel")?(u={marginTop:"0.5rem"},n[0]=u):u=n[0];const f=c==="data"?"/data":"/";let d;n[1]===Symbol.for("react.memo_cache_sentinel")?(d={textDecoration:"none",color:"white"},n[1]=d):d=n[1];const y=c==="data"?"Data":"Reports";let v;n[2]!==y?(v=h.jsxs("span",{children:["Compendium ",y]}),n[2]=y,n[3]=v):v=n[3];let p;n[4]!==f||n[5]!==v?(p=h.jsx(ln,{sm:8,children:h.jsx("h1",{className:"bold-caps-30pt",style:u,children:h.jsx(Tn,{to:f,style:d,children:v})})}),n[4]=f,n[5]=v,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b={color:"inherit"},n[7]=b):b=n[7];let R;n[8]===Symbol.for("react.memo_cache_sentinel")?(R=h.jsx(ln,{sm:4,children:h.jsx("a",{style:b,href:"https://resources.geant.org/geant-compendia/",target:"_blank",rel:"noreferrer",children:h.jsx(TS,{section:"Reports"})})}),n[8]=R):R=n[8];let S;n[9]!==p?(S=h.jsx(Ya,{children:h.jsxs(Rn,{children:[p,R]})}),n[9]=p,n[10]=S):S=n[10];let _;return n[11]!==s||n[12]!==S?(_=h.jsx("div",{className:s,children:S}),n[11]=s,n[12]=S,n[13]=_):_=n[13],_}function CS(l){const n=Ke.c(8),{children:c,type:s}=l;let u="";s=="data"?u=" compendium-data-banner":s=="reports"&&(u=" compendium-reports-banner");let f,d;n[0]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx("img",{src:Lp,style:{maxWidth:"7rem",marginBottom:"1rem"},alt:"Compendium Data logo"}),d={display:"flex",alignSelf:"right"},n[0]=f,n[1]=d):(f=n[0],d=n[1]);let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y={paddingTop:"1rem"},n[2]=y):y=n[2];let v;n[3]!==c?(v=h.jsx(Ya,{children:h.jsx(Rn,{children:h.jsx(Rn,{children:h.jsxs("div",{className:"section-container",children:[f,h.jsx("div",{style:d,children:h.jsx("div",{className:"center-text",style:y,children:c})})]})})})}),n[3]=c,n[4]=v):v=n[4];let p;return n[5]!==u||n[6]!==v?(p=h.jsx("div",{className:u,children:v}),n[5]=u,n[6]=v,n[7]=p):p=n[7],p}var li=(l=>(l.Organisation="ORGANISATION",l.Policy="STANDARDS AND POLICIES",l.ConnectedUsers="CONNECTED USERS",l.Network="NETWORK",l.Services="SERVICES",l))(li||{}),jS=(l=>(l.CSV="CSV",l.EXCEL="EXCEL",l))(jS||{}),OS=(l=>(l.PNG="png",l.JPEG="jpeg",l.SVG="svg",l))(OS||{});const V2={universities:"Universities & Other (ISCED 6-8)",further_education:"Further education (ISCED 4-5)",secondary_schools:"Secondary schools (ISCED 2-3)",primary_schools:"Primary schools (ISCED 1)",institutes:"Research Institutes",cultural:"Libraries, Museums, Archives, Cultural institutions",hospitals:"Non-university public Hospitals",government:"Government departments (national, regional, local)",iros:"International (virtual) research organisations",for_profit_orgs:"For-profit organisations"},Y2={commercial_r_and_e:"Commercial R&E traffic only",commercial_general:"Commercial general",commercial_collaboration:"Commercial for collaboration only (project/time limited)",commercial_service_provider:"Commercial Service Provider",university_spin_off:"University Spin Off/Incubator"},G2={collaboration:"Connection to your network for collaboration with R&E users",service_supplier:"Connection to your network for supplying services for R&E",direct_peering:"Direct peering (e.g. direct peering or cloud peering)"};function DS(){const l=Ke.c(7),{preview:n,setPreview:c}=g.useContext(Iy),{user:s}=g.useContext(Fo),[u]=lE();let f;l[0]!==u?(f=u.get("preview"),l[0]=u,l[1]=f):f=l[1];const d=f;let y,v;return l[2]!==d||l[3]!==c||l[4]!==s?(y=()=>{d!==null&&(s.permissions.admin||s.role=="observer")&&c(!0)},v=[d,c,s],l[2]=d,l[3]=c,l[4]=s,l[5]=y,l[6]=v):(y=l[5],v=l[6]),g.useEffect(y,v),n}function yr(l){const n=Ke.c(9),{to:c,children:s}=l,u=window.location.pathname===c,f=g.useRef(null);let d,y;n[0]!==u?(d=()=>{u&&f.current&&f.current.scrollIntoView({behavior:"smooth",block:"center"})},y=[u],n[0]=u,n[1]=d,n[2]=y):(d=n[1],y=n[2]),g.useEffect(d,y);let v;n[3]!==s||n[4]!==u?(v=u?h.jsx("b",{children:s}):s,n[3]=s,n[4]=u,n[5]=v):v=n[5];let p;return n[6]!==v||n[7]!==c?(p=h.jsx(Rn,{children:h.jsx(Tn,{to:c,className:"link-text-underline",ref:f,children:v})}),n[6]=v,n[7]=c,n[8]=p):p=n[8],p}const se={budget:"Budget of NRENs per Year",funding:"Income Source of NRENs",charging:"Charging Mechanism of NRENs","employee-count":"Number of NREN Employees",roles:"Roles of NREN employees (Technical v. Non-Technical)",employment:"Types of Employment within NRENs",suborganisations:"NREN Sub-Organisations",parentorganisation:"NREN Parent Organisations","ec-projects":"NREN Involvement in European Commission Projects",policy:"NREN Policies",audits:"External and Internal Audits of Information Security Management Systems","business-continuity":"NREN Business Continuity Planning","central-procurement":"Value of Software Procured for Customers by NRENs","crisis-management":"Crisis Management Procedures","crisis-exercise":"Crisis Exercises - NREN Operation and Participation",eosc_listings:"NREN Services Listed on the EOSC Portal","security-control":"Security Controls Used by NRENs","services-offered":"Services Offered by NRENs by Types of Users","corporate-strategy":"NREN Corporate Strategies","service-level-targets":"NRENs Offering Service Level Targets","service-management-framework":"NRENs Operating a Formal Service Management Framework","institutions-urls":"Webpages Listing Institutions and Organisations Connected to NREN Networks","connected-proportion":"Proportion of Different Categories of Institutions Served by NRENs","connectivity-level":"Level of IP Connectivity by Institution Type","connection-carrier":"Methods of Carrying IP Traffic to Users","connectivity-load":"Connectivity Load","connectivity-growth":"Connectivity Growth","remote-campuses":"NREN Connectivity to Remote Campuses in Other Countries","commercial-charging-level":"Commercial Charging Level","commercial-connectivity":"Commercial Connectivity","traffic-volume":"NREN Traffic - NREN Customers & External Networks","iru-duration":"Average Duration of IRU leases of Fibre by NRENs","fibre-light":"Approaches to lighting NREN fibre networks","dark-fibre-lease":"Kilometres of Leased Dark Fibre (National)","dark-fibre-lease-international":"Kilometres of Leased Dark Fibre (International)","dark-fibre-installed":"Kilometres of Installed Dark Fibre","network-map":"NREN Network Maps","monitoring-tools":"Tools for Monitoring or Troubleshooting the Network - Offered to Client Institutions","pert-team":"NRENs with Performance Enhancement Response Teams","passive-monitoring":"Methods for Passively Monitoring International Traffic","traffic-stats":"Traffic Statistics","weather-map":"NREN Online Network Weather Maps","certificate-provider":"Certification Services used by NRENs","siem-vendors":"Vendors of SIEM/SOC systems used by NRENs","alien-wave":"NREN Use of 3rd Party Alienwave/Lightpath Services","alien-wave-internal":"Internal NREN Use of Alien Waves","capacity-largest-link":"Capacity of the Largest Link in an NREN Network","external-connections":"NREN External IP Connections","capacity-core-ip":"NREN Core IP Capacity","non-rne-peers":"Number of Non-R&E Networks NRENs Peer With","traffic-ratio":"Types of traffic in NREN networks (Commodity v. Research & Education)","ops-automation":"NREN Automation of Operational Processes","network-automation":"Network Tasks for which NRENs Use Automation",nfv:"Kinds of Network Function Virtualisation used by NRENs","network-services":"NREN Network services matrix","isp-support-services":"NREN ISP support services matrix","security-services":"NREN Security services matrix","identity-services":"NREN Identity services matrix","collaboration-services":"NREN Collaboration services matrix","multimedia-services":"NREN Multimedia services matrix","storage-and-hosting-services":"NREN Storage and hosting services matrix","professional-services":"NREN Professional services matrix"};function wS(l){const n=Ke.c(52),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Organisation"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Budget, Income and Billing"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se.budget}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/budget",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se.funding}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/funding",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se.charging}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/charging",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O,H;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("hr",{className:"fake-divider"}),H=h.jsx("h6",{className:"section-title",children:"Staff and Projects"}),n[15]=O,n[16]=H):(O=n[15],H=n[16]);let U;n[17]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["employee-count"]}),n[17]=U):U=n[17];let M;n[18]!==u||n[19]!==f?(M=h.jsx(u,{to:"/employee-count",className:f,children:U}),n[18]=u,n[19]=f,n[20]=M):M=n[20];let q;n[21]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se.employment}),n[21]=q):q=n[21];let Y;n[22]!==u||n[23]!==f?(Y=h.jsx(u,{to:"/employment",className:f,children:q}),n[22]=u,n[23]=f,n[24]=Y):Y=n[24];let J;n[25]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("span",{children:se.roles}),n[25]=J):J=n[25];let k;n[26]!==u||n[27]!==f?(k=h.jsx(u,{to:"/roles",className:f,children:J}),n[26]=u,n[27]=f,n[28]=k):k=n[28];let N;n[29]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("span",{children:se.parentorganisation}),n[29]=N):N=n[29];let W;n[30]!==u||n[31]!==f?(W=h.jsx(u,{to:"/parentorganisation",className:f,children:N}),n[30]=u,n[31]=f,n[32]=W):W=n[32];let ie;n[33]===Symbol.for("react.memo_cache_sentinel")?(ie=h.jsx("span",{children:se.suborganisations}),n[33]=ie):ie=n[33];let X;n[34]!==u||n[35]!==f?(X=h.jsx(u,{to:"/suborganisations",className:f,children:ie}),n[34]=u,n[35]=f,n[36]=X):X=n[36];let I;n[37]===Symbol.for("react.memo_cache_sentinel")?(I=h.jsx("span",{children:se["ec-projects"]}),n[37]=I):I=n[37];let de;n[38]!==u||n[39]!==f?(de=h.jsx(u,{to:"/ec-projects",className:f,children:I}),n[38]=u,n[39]=f,n[40]=de):de=n[40];let Ne;return n[41]!==M||n[42]!==Y||n[43]!==k||n[44]!==W||n[45]!==d||n[46]!==X||n[47]!==de||n[48]!==p||n[49]!==R||n[50]!==_?(Ne=h.jsxs(h.Fragment,{children:[d,y,p,R,_,O,H,M,Y,k,W,X,de]}),n[41]=M,n[42]=Y,n[43]=k,n[44]=W,n[45]=d,n[46]=X,n[47]=de,n[48]=p,n[49]=R,n[50]=_,n[51]=Ne):Ne=n[51],Ne}function AS(l){const n=Ke.c(61),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Standards And Policies"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Policy & Portfolio"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se["corporate-strategy"]}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/corporate-strategy",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se.policy}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/policy",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se["central-procurement"]}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/central-procurement",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("span",{children:se["service-management-framework"]}),n[15]=O):O=n[15];let H;n[16]!==u||n[17]!==f?(H=h.jsx(u,{to:"/service-management-framework",className:f,children:O}),n[16]=u,n[17]=f,n[18]=H):H=n[18];let U;n[19]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["service-level-targets"]}),n[19]=U):U=n[19];let M;n[20]!==u||n[21]!==f?(M=h.jsx(u,{to:"/service-level-targets",className:f,children:U}),n[20]=u,n[21]=f,n[22]=M):M=n[22];let q;n[23]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se["services-offered"]}),n[23]=q):q=n[23];let Y;n[24]!==u||n[25]!==f?(Y=h.jsx(u,{to:"/services-offered",className:f,children:q}),n[24]=u,n[25]=f,n[26]=Y):Y=n[26];let J;n[27]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("h6",{className:"section-title",children:"Standards"}),n[27]=J):J=n[27];let k;n[28]===Symbol.for("react.memo_cache_sentinel")?(k=h.jsx("span",{children:se.audits}),n[28]=k):k=n[28];let N;n[29]!==u||n[30]!==f?(N=h.jsx(u,{to:"/audits",className:f,children:k}),n[29]=u,n[30]=f,n[31]=N):N=n[31];let W;n[32]===Symbol.for("react.memo_cache_sentinel")?(W=h.jsx("span",{children:se["business-continuity"]}),n[32]=W):W=n[32];let ie;n[33]!==u||n[34]!==f?(ie=h.jsx(u,{to:"/business-continuity",className:f,children:W}),n[33]=u,n[34]=f,n[35]=ie):ie=n[35];let X;n[36]===Symbol.for("react.memo_cache_sentinel")?(X=h.jsx("span",{children:se["crisis-management"]}),n[36]=X):X=n[36];let I;n[37]!==u||n[38]!==f?(I=h.jsx(u,{to:"/crisis-management",className:f,children:X}),n[37]=u,n[38]=f,n[39]=I):I=n[39];let de;n[40]===Symbol.for("react.memo_cache_sentinel")?(de=h.jsx("span",{children:se["crisis-exercise"]}),n[40]=de):de=n[40];let Ne;n[41]!==u||n[42]!==f?(Ne=h.jsx(u,{to:"/crisis-exercise",className:f,children:de}),n[41]=u,n[42]=f,n[43]=Ne):Ne=n[43];let Ye;n[44]===Symbol.for("react.memo_cache_sentinel")?(Ye=h.jsx("span",{children:se["security-control"]}),n[44]=Ye):Ye=n[44];let Be;n[45]!==u||n[46]!==f?(Be=h.jsx(u,{to:"/security-control",className:f,children:Ye}),n[45]=u,n[46]=f,n[47]=Be):Be=n[47];let ze;return n[48]!==H||n[49]!==M||n[50]!==Y||n[51]!==N||n[52]!==d||n[53]!==ie||n[54]!==I||n[55]!==Ne||n[56]!==Be||n[57]!==p||n[58]!==R||n[59]!==_?(ze=h.jsxs(h.Fragment,{children:[d,y,p,R,_,H,M,Y,J,N,ie,I,Ne,Be]}),n[48]=H,n[49]=M,n[50]=Y,n[51]=N,n[52]=d,n[53]=ie,n[54]=I,n[55]=Ne,n[56]=Be,n[57]=p,n[58]=R,n[59]=_,n[60]=ze):ze=n[60],ze}function MS(l){const n=Ke.c(52),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Connected Users"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Connected Users"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se["institutions-urls"]}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/institutions-urls",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se["connected-proportion"]}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/connected-proportion",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se["connectivity-level"]}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/connectivity-level",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("span",{children:se["connection-carrier"]}),n[15]=O):O=n[15];let H;n[16]!==u||n[17]!==f?(H=h.jsx(u,{to:"/connection-carrier",className:f,children:O}),n[16]=u,n[17]=f,n[18]=H):H=n[18];let U;n[19]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["connectivity-load"]}),n[19]=U):U=n[19];let M;n[20]!==u||n[21]!==f?(M=h.jsx(u,{to:"/connectivity-load",className:f,children:U}),n[20]=u,n[21]=f,n[22]=M):M=n[22];let q;n[23]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se["connectivity-growth"]}),n[23]=q):q=n[23];let Y;n[24]!==u||n[25]!==f?(Y=h.jsx(u,{to:"/connectivity-growth",className:f,children:q}),n[24]=u,n[25]=f,n[26]=Y):Y=n[26];let J;n[27]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("span",{children:se["remote-campuses"]}),n[27]=J):J=n[27];let k;n[28]!==u||n[29]!==f?(k=h.jsx(u,{to:"/remote-campuses",className:f,children:J}),n[28]=u,n[29]=f,n[30]=k):k=n[30];let N,W;n[31]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("hr",{className:"fake-divider"}),W=h.jsx("h6",{className:"section-title",children:"Connected Users - Commercial"}),n[31]=N,n[32]=W):(N=n[31],W=n[32]);let ie;n[33]===Symbol.for("react.memo_cache_sentinel")?(ie=h.jsx("span",{children:se["commercial-charging-level"]}),n[33]=ie):ie=n[33];let X;n[34]!==u||n[35]!==f?(X=h.jsx(u,{to:"/commercial-charging-level",className:f,children:ie}),n[34]=u,n[35]=f,n[36]=X):X=n[36];let I;n[37]===Symbol.for("react.memo_cache_sentinel")?(I=h.jsx("span",{children:se["commercial-connectivity"]}),n[37]=I):I=n[37];let de;n[38]!==u||n[39]!==f?(de=h.jsx(u,{to:"/commercial-connectivity",className:f,children:I}),n[38]=u,n[39]=f,n[40]=de):de=n[40];let Ne;return n[41]!==H||n[42]!==M||n[43]!==Y||n[44]!==k||n[45]!==d||n[46]!==X||n[47]!==de||n[48]!==p||n[49]!==R||n[50]!==_?(Ne=h.jsxs(h.Fragment,{children:[d,y,p,R,_,H,M,Y,k,N,W,X,de]}),n[41]=H,n[42]=M,n[43]=Y,n[44]=k,n[45]=d,n[46]=X,n[47]=de,n[48]=p,n[49]=R,n[50]=_,n[51]=Ne):Ne=n[51],Ne}function zS(l){const n=Ke.c(133),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Network"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Connectivity"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se["dark-fibre-lease"]}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/dark-fibre-lease",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se["dark-fibre-lease-international"]}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/dark-fibre-lease-international",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se["iru-duration"]}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/iru-duration",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("span",{children:se["dark-fibre-installed"]}),n[15]=O):O=n[15];let H;n[16]!==u||n[17]!==f?(H=h.jsx(u,{to:"/dark-fibre-installed",className:f,children:O}),n[16]=u,n[17]=f,n[18]=H):H=n[18];let U;n[19]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["fibre-light"]}),n[19]=U):U=n[19];let M;n[20]!==u||n[21]!==f?(M=h.jsx(u,{to:"/fibre-light",className:f,children:U}),n[20]=u,n[21]=f,n[22]=M):M=n[22];let q;n[23]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se["network-map"]}),n[23]=q):q=n[23];let Y;n[24]!==u||n[25]!==f?(Y=h.jsx(u,{to:"/network-map",className:f,children:q}),n[24]=u,n[25]=f,n[26]=Y):Y=n[26];let J,k;n[27]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("hr",{className:"fake-divider"}),k=h.jsx("h6",{className:"section-title",children:"Performance Monitoring & Management"}),n[27]=J,n[28]=k):(J=n[27],k=n[28]);let N;n[29]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("span",{children:se["monitoring-tools"]}),n[29]=N):N=n[29];let W;n[30]!==u||n[31]!==f?(W=h.jsx(u,{to:"/monitoring-tools",className:f,children:N}),n[30]=u,n[31]=f,n[32]=W):W=n[32];let ie;n[33]===Symbol.for("react.memo_cache_sentinel")?(ie=h.jsx("span",{children:se["passive-monitoring"]}),n[33]=ie):ie=n[33];let X;n[34]!==u||n[35]!==f?(X=h.jsx(u,{to:"/passive-monitoring",className:f,children:ie}),n[34]=u,n[35]=f,n[36]=X):X=n[36];let I;n[37]===Symbol.for("react.memo_cache_sentinel")?(I=h.jsx("span",{children:se["traffic-stats"]}),n[37]=I):I=n[37];let de;n[38]!==u||n[39]!==f?(de=h.jsx(u,{to:"/traffic-stats",className:f,children:I}),n[38]=u,n[39]=f,n[40]=de):de=n[40];let Ne;n[41]===Symbol.for("react.memo_cache_sentinel")?(Ne=h.jsx("span",{children:se["siem-vendors"]}),n[41]=Ne):Ne=n[41];let Ye;n[42]!==u||n[43]!==f?(Ye=h.jsx(u,{to:"/siem-vendors",className:f,children:Ne}),n[42]=u,n[43]=f,n[44]=Ye):Ye=n[44];let Be;n[45]===Symbol.for("react.memo_cache_sentinel")?(Be=h.jsx("span",{children:se["certificate-provider"]}),n[45]=Be):Be=n[45];let ze;n[46]!==u||n[47]!==f?(ze=h.jsx(u,{to:"/certificate-provider",className:f,children:Be}),n[46]=u,n[47]=f,n[48]=ze):ze=n[48];let K;n[49]===Symbol.for("react.memo_cache_sentinel")?(K=h.jsx("span",{children:se["weather-map"]}),n[49]=K):K=n[49];let ce;n[50]!==u||n[51]!==f?(ce=h.jsx(u,{to:"/weather-map",className:f,children:K}),n[50]=u,n[51]=f,n[52]=ce):ce=n[52];let ne;n[53]===Symbol.for("react.memo_cache_sentinel")?(ne=h.jsx("span",{children:se["pert-team"]}),n[53]=ne):ne=n[53];let Re;n[54]!==u||n[55]!==f?(Re=h.jsx(u,{to:"/pert-team",className:f,children:ne}),n[54]=u,n[55]=f,n[56]=Re):Re=n[56];let T,Q;n[57]===Symbol.for("react.memo_cache_sentinel")?(T=h.jsx("hr",{className:"fake-divider"}),Q=h.jsx("h6",{className:"section-title",children:"Alienwave"}),n[57]=T,n[58]=Q):(T=n[57],Q=n[58]);let le;n[59]===Symbol.for("react.memo_cache_sentinel")?(le=h.jsx("span",{children:se["alien-wave"]}),n[59]=le):le=n[59];let te;n[60]!==u||n[61]!==f?(te=h.jsx(u,{to:"/alien-wave",className:f,children:le}),n[60]=u,n[61]=f,n[62]=te):te=n[62];let P;n[63]===Symbol.for("react.memo_cache_sentinel")?(P=h.jsx("span",{children:se["alien-wave-internal"]}),n[63]=P):P=n[63];let ge;n[64]!==u||n[65]!==f?(ge=h.jsx(u,{to:"/alien-wave-internal",className:f,children:P}),n[64]=u,n[65]=f,n[66]=ge):ge=n[66];let ye,Je;n[67]===Symbol.for("react.memo_cache_sentinel")?(ye=h.jsx("hr",{className:"fake-divider"}),Je=h.jsx("h6",{className:"section-title",children:"Capacity"}),n[67]=ye,n[68]=Je):(ye=n[67],Je=n[68]);let Ce;n[69]===Symbol.for("react.memo_cache_sentinel")?(Ce=h.jsx("span",{children:se["capacity-largest-link"]}),n[69]=Ce):Ce=n[69];let Le;n[70]!==u||n[71]!==f?(Le=h.jsx(u,{to:"/capacity-largest-link",className:f,children:Ce}),n[70]=u,n[71]=f,n[72]=Le):Le=n[72];let Ee;n[73]===Symbol.for("react.memo_cache_sentinel")?(Ee=h.jsx("span",{children:se["capacity-core-ip"]}),n[73]=Ee):Ee=n[73];let Ze;n[74]!==u||n[75]!==f?(Ze=h.jsx(u,{to:"/capacity-core-ip",className:f,children:Ee}),n[74]=u,n[75]=f,n[76]=Ze):Ze=n[76];let vt;n[77]===Symbol.for("react.memo_cache_sentinel")?(vt=h.jsx("span",{children:se["external-connections"]}),n[77]=vt):vt=n[77];let it;n[78]!==u||n[79]!==f?(it=h.jsx(u,{to:"/external-connections",className:f,children:vt}),n[78]=u,n[79]=f,n[80]=it):it=n[80];let lt;n[81]===Symbol.for("react.memo_cache_sentinel")?(lt=h.jsx("span",{children:se["non-rne-peers"]}),n[81]=lt):lt=n[81];let De;n[82]!==u||n[83]!==f?(De=h.jsx(u,{to:"/non-rne-peers",className:f,children:lt}),n[82]=u,n[83]=f,n[84]=De):De=n[84];let Rt;n[85]===Symbol.for("react.memo_cache_sentinel")?(Rt=h.jsx("span",{children:se["traffic-volume"]}),n[85]=Rt):Rt=n[85];let St;n[86]!==u||n[87]!==f?(St=h.jsx(u,{to:"/traffic-volume",className:f,children:Rt}),n[86]=u,n[87]=f,n[88]=St):St=n[88];let Pt;n[89]===Symbol.for("react.memo_cache_sentinel")?(Pt=h.jsx("span",{children:se["traffic-ratio"]}),n[89]=Pt):Pt=n[89];let Zt;n[90]!==u||n[91]!==f?(Zt=h.jsx(u,{to:"/traffic-ratio",className:f,children:Pt}),n[90]=u,n[91]=f,n[92]=Zt):Zt=n[92];let un,cn;n[93]===Symbol.for("react.memo_cache_sentinel")?(un=h.jsx("hr",{className:"fake-divider"}),cn=h.jsx("h6",{className:"section-title",children:"Software-Defined Networking (SDN) & Network Function Virtualisation(NFV)"}),n[93]=un,n[94]=cn):(un=n[93],cn=n[94]);let Ut;n[95]===Symbol.for("react.memo_cache_sentinel")?(Ut=h.jsx("span",{children:se["ops-automation"]}),n[95]=Ut):Ut=n[95];let Ht;n[96]!==u||n[97]!==f?(Ht=h.jsx(u,{to:"/ops-automation",className:f,children:Ut}),n[96]=u,n[97]=f,n[98]=Ht):Ht=n[98];let mt;n[99]===Symbol.for("react.memo_cache_sentinel")?(mt=h.jsx("span",{children:se.nfv}),n[99]=mt):mt=n[99];let Kt;n[100]!==u||n[101]!==f?(Kt=h.jsx(u,{to:"/nfv",className:f,children:mt}),n[100]=u,n[101]=f,n[102]=Kt):Kt=n[102];let _e;n[103]===Symbol.for("react.memo_cache_sentinel")?(_e=h.jsx("span",{children:se["network-automation"]}),n[103]=_e):_e=n[103];let Ie;n[104]!==u||n[105]!==f?(Ie=h.jsx(u,{to:"/network-automation",className:f,children:_e}),n[104]=u,n[105]=f,n[106]=Ie):Ie=n[106];let Gt;return n[107]!==H||n[108]!==M||n[109]!==Y||n[110]!==W||n[111]!==d||n[112]!==X||n[113]!==de||n[114]!==Ye||n[115]!==ze||n[116]!==ce||n[117]!==Re||n[118]!==te||n[119]!==ge||n[120]!==Le||n[121]!==Ze||n[122]!==it||n[123]!==De||n[124]!==St||n[125]!==p||n[126]!==Zt||n[127]!==Ht||n[128]!==Kt||n[129]!==Ie||n[130]!==R||n[131]!==_?(Gt=h.jsxs(h.Fragment,{children:[d,y,p,R,_,H,M,Y,J,k,W,X,de,Ye,ze,ce,Re,T,Q,te,ge,ye,Je,Le,Ze,it,De,St,Zt,un,cn,Ht,Kt,Ie]}),n[107]=H,n[108]=M,n[109]=Y,n[110]=W,n[111]=d,n[112]=X,n[113]=de,n[114]=Ye,n[115]=ze,n[116]=ce,n[117]=Re,n[118]=te,n[119]=ge,n[120]=Le,n[121]=Ze,n[122]=it,n[123]=De,n[124]=St,n[125]=p,n[126]=Zt,n[127]=Ht,n[128]=Kt,n[129]=Ie,n[130]=R,n[131]=_,n[132]=Gt):Gt=n[132],Gt}function LS(l){const n=Ke.c(44),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Services"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("span",{children:se["network-services"]}),n[2]=y):y=n[2];let v;n[3]!==u||n[4]!==f?(v=h.jsx(u,{to:"/network-services",className:f,children:y}),n[3]=u,n[4]=f,n[5]=v):v=n[5];let p;n[6]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx("span",{children:se["isp-support-services"]}),n[6]=p):p=n[6];let b;n[7]!==u||n[8]!==f?(b=h.jsx(u,{to:"/isp-support-services",className:f,children:p}),n[7]=u,n[8]=f,n[9]=b):b=n[9];let R;n[10]===Symbol.for("react.memo_cache_sentinel")?(R=h.jsx("span",{children:se["security-services"]}),n[10]=R):R=n[10];let S;n[11]!==u||n[12]!==f?(S=h.jsx(u,{to:"/security-services",className:f,children:R}),n[11]=u,n[12]=f,n[13]=S):S=n[13];let _;n[14]===Symbol.for("react.memo_cache_sentinel")?(_=h.jsx("span",{children:se["identity-services"]}),n[14]=_):_=n[14];let O;n[15]!==u||n[16]!==f?(O=h.jsx(u,{to:"/identity-services",className:f,children:_}),n[15]=u,n[16]=f,n[17]=O):O=n[17];let H;n[18]===Symbol.for("react.memo_cache_sentinel")?(H=h.jsx("span",{children:se["storage-and-hosting-services"]}),n[18]=H):H=n[18];let U;n[19]!==u||n[20]!==f?(U=h.jsx(u,{to:"/storage-and-hosting-services",className:f,children:H}),n[19]=u,n[20]=f,n[21]=U):U=n[21];let M;n[22]===Symbol.for("react.memo_cache_sentinel")?(M=h.jsx("span",{children:se["multimedia-services"]}),n[22]=M):M=n[22];let q;n[23]!==u||n[24]!==f?(q=h.jsx(u,{to:"/multimedia-services",className:f,children:M}),n[23]=u,n[24]=f,n[25]=q):q=n[25];let Y;n[26]===Symbol.for("react.memo_cache_sentinel")?(Y=h.jsx("span",{children:se["collaboration-services"]}),n[26]=Y):Y=n[26];let J;n[27]!==u||n[28]!==f?(J=h.jsx(u,{to:"/collaboration-services",className:f,children:Y}),n[27]=u,n[28]=f,n[29]=J):J=n[29];let k;n[30]===Symbol.for("react.memo_cache_sentinel")?(k=h.jsx("span",{children:se["professional-services"]}),n[30]=k):k=n[30];let N;n[31]!==u||n[32]!==f?(N=h.jsx(u,{to:"/professional-services",className:f,children:k}),n[31]=u,n[32]=f,n[33]=N):N=n[33];let W;return n[34]!==O||n[35]!==U||n[36]!==q||n[37]!==J||n[38]!==N||n[39]!==d||n[40]!==v||n[41]!==b||n[42]!==S?(W=h.jsxs(h.Fragment,{children:[d,v,b,S,O,U,q,J,N]}),n[34]=O,n[35]=U,n[36]=q,n[37]=J,n[38]=N,n[39]=d,n[40]=v,n[41]=b,n[42]=S,n[43]=W):W=n[43],W}function US(){const l=Ke.c(10);DS();const{trackPageView:n}=Hp();let c,s;l[0]!==n?(c=()=>{n({documentTitle:"Compendium Data"})},s=[n],l[0]=n,l[1]=c,l[2]=s):(c=l[1],s=l[2]),Yt.useEffect(c,s);let u;l[3]===Symbol.for("react.memo_cache_sentinel")?(u=h.jsx(NS,{type:"data"}),l[3]=u):u=l[3];let f;l[4]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx(CS,{type:"data",children:h.jsx("p",{className:"wordwrap",children:"The GÉANT Compendium provides an authoritative reference source for anyone with an interest in the development of research and education networking in Europe and beyond. Published since 2001, the Compendium provides information on key areas such as users, services, traffic, budget and staffing."})}),l[4]=f):f=l[4];let d;l[5]===Symbol.for("react.memo_cache_sentinel")?(d=h.jsx(rr,{title:li.Organisation,children:h.jsx(wS,{})}),l[5]=d):d=l[5];let y;l[6]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx(rr,{title:li.Policy,startCollapsed:!0,children:h.jsx(AS,{})}),l[6]=y):y=l[6];let v;l[7]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx(rr,{title:li.ConnectedUsers,startCollapsed:!0,children:h.jsx(MS,{})}),l[7]=v):v=l[7];let p;l[8]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx(rr,{title:li.Network,startCollapsed:!0,children:h.jsx(zS,{})}),l[8]=p):p=l[8];let b;return l[9]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsxs(h.Fragment,{children:[u,f,h.jsx(Ya,{className:"mt-5 mb-5",children:h.jsxs(Rn,{children:[d,y,v,p,h.jsx(rr,{title:li.Services,startCollapsed:!0,children:h.jsx(LS,{})})]})})]}),l[9]=b):b=l[9],b}const HS=()=>{const l=Ke.c(26),{consent:n,setConsent:c}=g.useContext(Jo),[s,u]=g.useState(n===null);let f;l[0]===Symbol.for("react.memo_cache_sentinel")?(f=()=>{u(!1),window.location.reload()},l[0]=f):f=l[0];const d=f,[y,v]=g.useState(!0);let p;l[1]!==c?(p=N=>{const W=new Date;W.setDate(W.getDate()+30),localStorage.setItem("matomo_consent",JSON.stringify({consent:N,expiry:W})),c(N)},l[1]=c,l[2]=p):p=l[2];const b=p;let R;l[3]===Symbol.for("react.memo_cache_sentinel")?(R=h.jsx(ir.Header,{closeButton:!0,children:h.jsx(ir.Title,{children:"Privacy on this site"})}),l[3]=R):R=l[3];let S;l[4]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("a",{href:"https://geant.org/Privacy-Notice/",children:"Privacy Policy"}),l[4]=S):S=l[4];let _;l[5]===Symbol.for("react.memo_cache_sentinel")?(_=h.jsxs("p",{children:["On our site we use Matomo to collect and process data about your visit to better understand how it is used. For more information, see our ",S,".",h.jsx("br",{}),"Below, you can choose to accept or decline to have this data collected."]}),l[5]=_):_=l[5];let O;l[6]!==y?(O=()=>v(!y),l[6]=y,l[7]=O):O=l[7];let H;l[8]!==y||l[9]!==O?(H=h.jsx(Du.Check,{type:"checkbox",label:"Analytics",checked:y,onChange:O}),l[8]=y,l[9]=O,l[10]=H):H=l[10];let U;l[11]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx(Du.Text,{className:"text-muted",children:"We collect information about your visit on the compendium site — this helps us understand how the site is used, and how we can improve it."}),l[11]=U):U=l[11];let M;l[12]!==H?(M=h.jsxs(ir.Body,{children:[_,h.jsx(Du,{children:h.jsxs(Du.Group,{className:"mb-3",children:[H,U]})})]}),l[12]=H,l[13]=M):M=l[13];let q;l[14]!==b?(q=h.jsx(Bo,{variant:"secondary",onClick:()=>{b(!1),d()},children:"Decline all"}),l[14]=b,l[15]=q):q=l[15];let Y;l[16]!==y||l[17]!==b?(Y=h.jsx(Bo,{variant:"primary",onClick:()=>{b(y),d()},children:"Save consent for 30 days"}),l[16]=y,l[17]=b,l[18]=Y):Y=l[18];let J;l[19]!==Y||l[20]!==q?(J=h.jsxs(ir.Footer,{children:[q,Y]}),l[19]=Y,l[20]=q,l[21]=J):J=l[21];let k;return l[22]!==s||l[23]!==J||l[24]!==M?(k=h.jsxs(ir,{show:s,centered:!0,children:[R,M,J]}),l[22]=s,l[23]=J,l[24]=M,l[25]=k):k=l[25],k},BS=g.lazy(()=>be(()=>import("./Budget-BD3tWhAz.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]))),qS=g.lazy(()=>be(()=>import("./ChargingStructure-Bv0NJy9P.js"),__vite__mapDeps([8,2,3,4,5,6,9,10,11]))),VS=g.lazy(()=>be(()=>import("./ECProjects-Cxw57QLP.js"),__vite__mapDeps([12,2,3,4,5,6,13,11]))),YS=g.lazy(()=>be(()=>import("./FundingSource-M1iQBQ3K.js"),__vite__mapDeps([14,1,2,3,4,5,6,15]))),GS=g.lazy(()=>be(()=>import("./ParentOrganisation-Bpo7P6u6.js"),__vite__mapDeps([16,2,3,4,5,6,13,11]))),Oy=g.lazy(()=>be(()=>import("./StaffGraph-HNfHQ0pm.js"),__vite__mapDeps([17,1,2,3,4,5,6,18]))),kS=g.lazy(()=>be(()=>import("./StaffGraphAbsolute-Bq1qlgS8.js"),__vite__mapDeps([19,1,2,3,4,5,6,15,7]))),XS=g.lazy(()=>be(()=>import("./SubOrganisation-CXMlieI0.js"),__vite__mapDeps([20,2,3,4,5,6,13,11]))),QS=g.lazy(()=>be(()=>import("./Audits-CuvZdHfU.js"),__vite__mapDeps([21,2,3,4,5,6,9,10,11]))),ZS=g.lazy(()=>be(()=>import("./BusinessContinuity-MvRfhQYb.js"),__vite__mapDeps([22,2,3,4,5,6,9,10,11]))),KS=g.lazy(()=>be(()=>import("./CentralProcurement-CnLdUN2O.js"),__vite__mapDeps([23,2,3,4,5,6,15,1,7]))),$S=g.lazy(()=>be(()=>import("./CorporateStrategy-D3wglOhj.js"),__vite__mapDeps([24,2,3,4,5,6,13,11]))),FS=g.lazy(()=>be(()=>import("./CrisisExercises-DuZg-gGP.js"),__vite__mapDeps([25,2,3,4,5,6,9,10,11]))),JS=g.lazy(()=>be(()=>import("./CrisisManagement-B9EB2EWM.js"),__vite__mapDeps([26,2,3,4,5,6,9,10,11]))),PS=g.lazy(()=>be(()=>import("./EOSCListings-Gq2b1C2V.js"),__vite__mapDeps([27,2,3,4,5,6,13,11]))),WS=g.lazy(()=>be(()=>import("./Policy-BdndWxZz.js"),__vite__mapDeps([28,2,3,4,5,6,13,11]))),IS=g.lazy(()=>be(()=>import("./SecurityControls-Ba4coYqK.js"),__vite__mapDeps([29,2,3,4,5,6,9,10,11]))),e2=g.lazy(()=>be(()=>import("./ServiceLevelTargets-pvc5MWdl.js"),__vite__mapDeps([30,2,3,4,5,6,9,10,11]))),t2=g.lazy(()=>be(()=>import("./ServiceManagementFramework-Cy_R2T5K.js"),__vite__mapDeps([31,2,3,4,5,6,9,10,11]))),n2=g.lazy(()=>be(()=>import("./ServicesOffered-C8SRGlPW.js"),__vite__mapDeps([32,2,3,4,5,6,33,11]))),a2=g.lazy(()=>be(()=>import("./ConnectedInstitutionsURLs-C_G2PNvX.js"),__vite__mapDeps([34,2,3,4,5,6,13,11]))),dl=g.lazy(()=>be(()=>import("./ConnectedUser-D-CAsrxc.js"),__vite__mapDeps([35,2,3,4,5,6,33,11]))),l2=g.lazy(()=>be(()=>import("./RemoteCampuses-CWuoHcc1.js"),__vite__mapDeps([36,2,3,4,5,6,11]))),i2=g.lazy(()=>be(()=>import("./AlienWave-AJrmdFtI.js"),__vite__mapDeps([37,2,3,4,5,6,9,10,11]))),r2=g.lazy(()=>be(()=>import("./AlienWaveInternal-BkYZMjCR.js"),__vite__mapDeps([38,2,3,4,5,6,9,10,11]))),u2=g.lazy(()=>be(()=>import("./Automation-DItliT93.js"),__vite__mapDeps([39,2,3,4,5,6,10,11]))),c2=g.lazy(()=>be(()=>import("./CapacityCoreIP-BYeiJxnz.js"),__vite__mapDeps([40,1,2,3,4,5,6,15,7]))),s2=g.lazy(()=>be(()=>import("./CapacityLargestLink-Bov4w9OF.js"),__vite__mapDeps([41,1,2,3,4,5,6,15,7]))),o2=g.lazy(()=>be(()=>import("./CertificateProvider-C0MtpALT.js"),__vite__mapDeps([42,2,3,4,5,6,9,10,11]))),Dy=g.lazy(()=>be(()=>import("./DarkFibreLease-DOa-O_Mg.js"),__vite__mapDeps([43,1,2,3,4,5,6,7]))),f2=g.lazy(()=>be(()=>import("./DarkFibreInstalled-2D1iNkw5.js"),__vite__mapDeps([44,1,2,3,4,5,6,7]))),d2=g.lazy(()=>be(()=>import("./ExternalConnections-ldDiu0-q.js"),__vite__mapDeps([45,2,3,4,5,6,11]))),h2=g.lazy(()=>be(()=>import("./FibreLight-CitJL-tj.js"),__vite__mapDeps([46,2,3,4,5,6,9,10,11]))),m2=g.lazy(()=>be(()=>import("./IRUDuration-CX0U79PZ.js"),__vite__mapDeps([47,1,2,3,4,5,6,7]))),y2=g.lazy(()=>be(()=>import("./MonitoringTools-sTAJWOEm.js"),__vite__mapDeps([48,2,3,4,5,6,9,10,11]))),p2=g.lazy(()=>be(()=>import("./NetworkFunctionVirtualisation-mpEVvRIs.js"),__vite__mapDeps([49,2,3,4,5,6,10,11]))),v2=g.lazy(()=>be(()=>import("./NetworkMapUrls-B9qEmtVH.js"),__vite__mapDeps([50,2,3,4,5,6,13,11]))),g2=g.lazy(()=>be(()=>import("./NonRAndEPeer-C1U-VeeG.js"),__vite__mapDeps([51,1,2,3,4,5,6,15,7]))),E2=g.lazy(()=>be(()=>import("./OPsAutomation-DAHkdRQE.js"),__vite__mapDeps([52,2,3,4,5,6,9,10,11]))),b2=g.lazy(()=>be(()=>import("./PassiveMonitoring-Bn2t9Pmf.js"),__vite__mapDeps([53,2,3,4,5,6,9,10,11]))),S2=g.lazy(()=>be(()=>import("./PertTeam-C-4MgsmN.js"),__vite__mapDeps([54,2,3,4,5,6,9,10,11]))),x2=g.lazy(()=>be(()=>import("./SiemVendors-kLcSDwOx.js"),__vite__mapDeps([55,2,3,4,5,6,9,10,11]))),_2=g.lazy(()=>be(()=>import("./TrafficRatio-BkOFtVPl.js"),__vite__mapDeps([56,1,2,3,4,5,6,18]))),R2=g.lazy(()=>be(()=>import("./TrafficUrl-ppIreNuJ.js"),__vite__mapDeps([57,2,3,4,5,6,13,11]))),T2=g.lazy(()=>be(()=>import("./TrafficVolume-DjVPocrC.js"),__vite__mapDeps([58,1,2,3,4,5,6,7]))),N2=g.lazy(()=>be(()=>import("./WeatherMap-CtO7coD7.js"),__vite__mapDeps([59,2,3,4,5,6,13,11]))),Ua=g.lazy(()=>be(()=>import("./Services-fP_6uX0f.js"),__vite__mapDeps([60,2,3,4,5,6,11]))),C2=g.lazy(()=>be(()=>import("./Landing-B1Sq71Lu.js"),__vite__mapDeps([61,62,63,3,4,11]))),No=g.lazy(()=>be(()=>import("./SurveyContainerComponent-BmuW9EVe.js"),__vite__mapDeps([64,65,66,67,63,3,68]))),j2=g.lazy(()=>be(()=>import("./SurveyManagementComponent-BvOZUwZZ.js"),__vite__mapDeps([69,70,6,11,65,67,62,63,3]))),O2=g.lazy(()=>be(()=>import("./UserManagementComponent-BsFczL9E.js"),__vite__mapDeps([71,65,63,3,5,70,6,11]))),D2=()=>{const l=Ke.c(9),{pathname:n}=Xn(),c=n!=="/";let s;l[0]===Symbol.for("react.memo_cache_sentinel")?(s=h.jsx(oS,{}),l[0]=s):s=l[0];let u;l[1]!==c?(u=h.jsx("main",{className:"grow",children:c?h.jsx(T0,{}):h.jsx(Bp,{})}),l[1]=c,l[2]=u):u=l[2];let f;l[3]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx(HS,{}),l[3]=f):f=l[3];let d;l[4]!==u?(d=h.jsxs(wE,{children:[s,u,f]}),l[4]=u,l[5]=d):d=l[5];let y;l[6]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx(hS,{}),l[6]=y):y=l[6];let v;return l[7]!==d?(v=h.jsxs(h.Fragment,{children:[d,y]}),l[7]=d,l[8]=v):v=l[8],v},w2=P0([{path:"",element:h.jsx(D2,{}),children:[{path:"/budget",element:h.jsx(BS,{})},{path:"/funding",element:h.jsx(YS,{})},{path:"/employment",element:h.jsx(Oy,{},"staffgraph")},{path:"/traffic-ratio",element:h.jsx(_2,{})},{path:"/roles",element:h.jsx(Oy,{roles:!0},"staffgraphroles")},{path:"/employee-count",element:h.jsx(kS,{})},{path:"/charging",element:h.jsx(qS,{})},{path:"/suborganisations",element:h.jsx(XS,{})},{path:"/parentorganisation",element:h.jsx(GS,{})},{path:"/ec-projects",element:h.jsx(VS,{})},{path:"/policy",element:h.jsx(WS,{})},{path:"/traffic-volume",element:h.jsx(T2,{})},{path:"/data",element:h.jsx(US,{})},{path:"/institutions-urls",element:h.jsx(a2,{})},{path:"/connected-proportion",element:h.jsx(dl,{page:Qt.ConnectedProportion},Qt.ConnectedProportion)},{path:"/connectivity-level",element:h.jsx(dl,{page:Qt.ConnectivityLevel},Qt.ConnectivityLevel)},{path:"/connectivity-growth",element:h.jsx(dl,{page:Qt.ConnectivityGrowth},Qt.ConnectivityGrowth)},{path:"/connection-carrier",element:h.jsx(dl,{page:Qt.ConnectionCarrier},Qt.ConnectionCarrier)},{path:"/connectivity-load",element:h.jsx(dl,{page:Qt.ConnectivityLoad},Qt.ConnectivityLoad)},{path:"/commercial-charging-level",element:h.jsx(dl,{page:Qt.CommercialChargingLevel},Qt.CommercialChargingLevel)},{path:"/commercial-connectivity",element:h.jsx(dl,{page:Qt.CommercialConnectivity},Qt.CommercialConnectivity)},{path:"/network-services",element:h.jsx(Ua,{category:Lt.network_services},Lt.network_services)},{path:"/isp-support-services",element:h.jsx(Ua,{category:Lt.isp_support},Lt.isp_support)},{path:"/security-services",element:h.jsx(Ua,{category:Lt.security},Lt.security)},{path:"/identity-services",element:h.jsx(Ua,{category:Lt.identity},Lt.identity)},{path:"/collaboration-services",element:h.jsx(Ua,{category:Lt.collaboration},Lt.collaboration)},{path:"/multimedia-services",element:h.jsx(Ua,{category:Lt.multimedia},Lt.multimedia)},{path:"/storage-and-hosting-services",element:h.jsx(Ua,{category:Lt.storage_and_hosting},Lt.storage_and_hosting)},{path:"/professional-services",element:h.jsx(Ua,{category:Lt.professional_services},Lt.professional_services)},{path:"/dark-fibre-lease",element:h.jsx(Dy,{national:!0},"darkfibrenational")},{path:"/dark-fibre-lease-international",element:h.jsx(Dy,{},"darkfibreinternational")},{path:"/dark-fibre-installed",element:h.jsx(f2,{})},{path:"/remote-campuses",element:h.jsx(l2,{})},{path:"/eosc-listings",element:h.jsx(PS,{})},{path:"/fibre-light",element:h.jsx(h2,{})},{path:"/monitoring-tools",element:h.jsx(y2,{})},{path:"/pert-team",element:h.jsx(S2,{})},{path:"/passive-monitoring",element:h.jsx(b2,{})},{path:"/alien-wave",element:h.jsx(i2,{})},{path:"/alien-wave-internal",element:h.jsx(r2,{})},{path:"/external-connections",element:h.jsx(d2,{})},{path:"/ops-automation",element:h.jsx(E2,{})},{path:"/network-automation",element:h.jsx(u2,{})},{path:"/traffic-stats",element:h.jsx(R2,{})},{path:"/weather-map",element:h.jsx(N2,{})},{path:"/network-map",element:h.jsx(v2,{})},{path:"/nfv",element:h.jsx(p2,{})},{path:"/certificate-providers",element:h.jsx(o2,{})},{path:"/siem-vendors",element:h.jsx(x2,{})},{path:"/capacity-largest-link",element:h.jsx(s2,{})},{path:"/capacity-core-ip",element:h.jsx(c2,{})},{path:"/non-rne-peers",element:h.jsx(g2,{})},{path:"/iru-duration",element:h.jsx(m2,{})},{path:"/audits",element:h.jsx(QS,{})},{path:"/business-continuity",element:h.jsx(ZS,{})},{path:"/crisis-management",element:h.jsx(JS,{})},{path:"/crisis-exercise",element:h.jsx(FS,{})},{path:"/central-procurement",element:h.jsx(KS,{})},{path:"/security-control",element:h.jsx(IS,{})},{path:"/services-offered",element:h.jsx(n2,{})},{path:"/service-management-framework",element:h.jsx(t2,{})},{path:"/service-level-targets",element:h.jsx(e2,{})},{path:"/corporate-strategy",element:h.jsx($S,{})},{path:"/survey/admin/surveys",element:h.jsx(j2,{})},{path:"/survey/admin/users",element:h.jsx(O2,{})},{path:"/survey/admin/inspect/:year",element:h.jsx(No,{loadFrom:"/api/response/inspect/"})},{path:"/survey/admin/try/:year",element:h.jsx(No,{loadFrom:"/api/response/try/"})},{path:"/survey/response/:year/:nren",element:h.jsx(No,{loadFrom:"/api/response/load/"})},{path:"/survey/*",element:h.jsx(C2,{})},{path:"*",element:h.jsx(Bp,{})}]}]);function A2(){const l=Ke.c(1);let n;return l[0]===Symbol.for("react.memo_cache_sentinel")?(n=h.jsx("div",{className:"app",children:h.jsx(oE,{router:w2})}),l[0]=n):n=l[0],n}const M2=document.getElementById("root"),z2=a1.createRoot(M2);z2.render(h.jsx(Yt.StrictMode,{children:h.jsx(A2,{})}));export{Yp as $,Ho as A,pb as B,ln as C,Xy as D,Ya as E,yE as F,MS as G,LS as H,jS as I,vE as J,OS as K,Tn as L,Iy as M,zS as N,wS as O,AS as P,Hp as Q,Rn as R,li as S,NS as T,V2 as U,SE as V,Du as W,DS as X,_S as Y,RS as Z,zE as _,Qt as a,Lt as a0,Fo as a1,yr as a2,ku as a3,wy as a4,B2 as a5,H2 as a6,be as a7,rb as a8,nb as a9,$u as aa,gl as ab,hl as ac,Mo as ad,Ba as ae,yl as af,ab as ag,U2 as ah,nf as ai,OE as aj,Y2 as b,Ke as c,G2 as d,rr as e,Yt as f,up as g,Qe as h,Ae as i,h as j,sb as k,by as l,Bu as m,Ob as n,Ku as o,tf as p,ob as q,g as r,ti as s,se as t,pl as u,lp as v,q2 as w,rp as x,Bo as y,BE as z};
diff --git a/compendium_v2/static/useData-Ct8E3VVL.js b/compendium_v2/static/useData-CYCBVZdC.js
similarity index 98%
rename from compendium_v2/static/useData-Ct8E3VVL.js
rename to compendium_v2/static/useData-CYCBVZdC.js
index 803466e01bef0c761a646ef4c0f4d59f1be6014c..34fc3e54e0cd585fc1ffa072a171188d678adb2e 100644
--- a/compendium_v2/static/useData-Ct8E3VVL.js
+++ b/compendium_v2/static/useData-CYCBVZdC.js
@@ -1,4 +1,4 @@
-var za=Object.defineProperty;var Na=(e,t,n)=>t in e?za(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var T=(e,t,n)=>Na(e,typeof t!="symbol"?t+"":t,n);import{r as A,u as Vt,g as Ba,j as M,h as Kt,i as qt,k as Ha,w as Wa,l as ms,o as Va,m as un,f as ue,n as ar,B as Ya,p as Ua,q as Xa,s as bs,v as Ka,x as lr,y as Ft,z as qa,A as Ga,c as wt,O as Ja,D as Za,S as G,E as cr,R as se,P as Qa,N as tl,G as el,H as nl,I as xe,J as hr,K as ge,M as il,Q as sl,T as ol,L as rl,V as al,C as xs,W as Jn,X as ll}from"./index.js";import{S as sn}from"./SideBar-CkoMfgfL.js";import{u as Zn,w as cl}from"./xlsx-BHRztzV8.js";import{c as ur,F as dr}from"./index-DIBz8YrO.js";import{u as hl}from"./hook-GVc5uk5F.js";function ul(){return A.useState(null)}function dl(e,t,n,i=!1){const s=Vt(n);A.useEffect(()=>{const o=typeof e=="function"?e():e;return o.addEventListener(t,s,i),()=>o.removeEventListener(t,s,i)},[e])}const fl=["onKeyDown"];function pl(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}function gl(e){return!e||e.trim()==="#"}const fr=A.forwardRef((e,t)=>{let{onKeyDown:n}=e,i=pl(e,fl);const[s]=Ba(Object.assign({tagName:"a"},i)),o=Vt(r=>{s.onKeyDown(r),n==null||n(r)});return gl(i.href)||i.role==="button"?M.jsx("a",Object.assign({ref:t},i,s,{onKeyDown:o})):M.jsx("a",Object.assign({ref:t},i,{onKeyDown:n}))});fr.displayName="Anchor";const Ti=A.forwardRef(({bsPrefix:e,className:t,role:n="toolbar",...i},s)=>{const o=Kt(e,"btn-toolbar");return M.jsx("div",{...i,ref:s,className:qt(t,o),role:n})});Ti.displayName="ButtonToolbar";function ml(e,t,n){const i=A.useRef(e!==void 0),[s,o]=A.useState(t),r=e!==void 0,a=i.current;return i.current=r,!r&&a&&s!==t&&o(t),[r?e:s,A.useCallback((...l)=>{const[c,...h]=l;let u=n==null?void 0:n(c,...h);return o(c),u},[n])]}function bl(){const[,e]=A.useReducer(t=>t+1,0);return e}const Yn=A.createContext(null);var ys=Object.prototype.hasOwnProperty;function vs(e,t,n){for(n of e.keys())if(Be(n,t))return n}function Be(e,t){var n,i,s;if(e===t)return!0;if(e&&t&&(n=e.constructor)===t.constructor){if(n===Date)return e.getTime()===t.getTime();if(n===RegExp)return e.toString()===t.toString();if(n===Array){if((i=e.length)===t.length)for(;i--&&Be(e[i],t[i]););return i===-1}if(n===Set){if(e.size!==t.size)return!1;for(i of e)if(s=i,s&&typeof s=="object"&&(s=vs(t,s),!s)||!t.has(s))return!1;return!0}if(n===Map){if(e.size!==t.size)return!1;for(i of e)if(s=i[0],s&&typeof s=="object"&&(s=vs(t,s),!s)||!Be(i[1],t.get(s)))return!1;return!0}if(n===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(n===DataView){if((i=e.byteLength)===t.byteLength)for(;i--&&e.getInt8(i)===t.getInt8(i););return i===-1}if(ArrayBuffer.isView(e)){if((i=e.byteLength)===t.byteLength)for(;i--&&e[i]===t[i];);return i===-1}if(!n||typeof e=="object"){i=0;for(n in e)if(ys.call(e,n)&&++i&&!ys.call(t,n)||!(n in t)||!Be(e[n],t[n]))return!1;return Object.keys(t).length===i}}return e!==e&&t!==t}function xl(e){const t=Ha();return[e[0],A.useCallback(n=>{if(t())return e[1](n)},[t,e[1]])]}var ut="top",xt="bottom",yt="right",dt="left",Ri="auto",on=[ut,xt,yt,dt],we="start",Ke="end",yl="clippingParents",pr="viewport",Te="popper",vl="reference",_s=on.reduce(function(e,t){return e.concat([t+"-"+we,t+"-"+Ke])},[]),gr=[].concat(on,[Ri]).reduce(function(e,t){return e.concat([t,t+"-"+we,t+"-"+Ke])},[]),_l="beforeRead",wl="read",Sl="afterRead",kl="beforeMain",Ml="main",Cl="afterMain",Pl="beforeWrite",Ol="write",Dl="afterWrite",Al=[_l,wl,Sl,kl,Ml,Cl,Pl,Ol,Dl];function Pt(e){return e.split("-")[0]}function gt(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function de(e){var t=gt(e).Element;return e instanceof t||e instanceof Element}function Ot(e){var t=gt(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Li(e){if(typeof ShadowRoot>"u")return!1;var t=gt(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}var ce=Math.max,Ln=Math.min,Se=Math.round;function yi(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function mr(){return!/^((?!chrome|android).)*safari/i.test(yi())}function ke(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var i=e.getBoundingClientRect(),s=1,o=1;t&&Ot(e)&&(s=e.offsetWidth>0&&Se(i.width)/e.offsetWidth||1,o=e.offsetHeight>0&&Se(i.height)/e.offsetHeight||1);var r=de(e)?gt(e):window,a=r.visualViewport,l=!mr()&&n,c=(i.left+(l&&a?a.offsetLeft:0))/s,h=(i.top+(l&&a?a.offsetTop:0))/o,u=i.width/s,d=i.height/o;return{width:u,height:d,top:h,right:c+u,bottom:h+d,left:c,x:c,y:h}}function Fi(e){var t=ke(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function br(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Li(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Ut(e){return e?(e.nodeName||"").toLowerCase():null}function jt(e){return gt(e).getComputedStyle(e)}function El(e){return["table","td","th"].indexOf(Ut(e))>=0}function Gt(e){return((de(e)?e.ownerDocument:e.document)||window.document).documentElement}function Un(e){return Ut(e)==="html"?e:e.assignedSlot||e.parentNode||(Li(e)?e.host:null)||Gt(e)}function ws(e){return!Ot(e)||jt(e).position==="fixed"?null:e.offsetParent}function Tl(e){var t=/firefox/i.test(yi()),n=/Trident/i.test(yi());if(n&&Ot(e)){var i=jt(e);if(i.position==="fixed")return null}var s=Un(e);for(Li(s)&&(s=s.host);Ot(s)&&["html","body"].indexOf(Ut(s))<0;){var o=jt(s);if(o.transform!=="none"||o.perspective!=="none"||o.contain==="paint"||["transform","perspective"].indexOf(o.willChange)!==-1||t&&o.willChange==="filter"||t&&o.filter&&o.filter!=="none")return s;s=s.parentNode}return null}function rn(e){for(var t=gt(e),n=ws(e);n&&El(n)&&jt(n).position==="static";)n=ws(n);return n&&(Ut(n)==="html"||Ut(n)==="body"&&jt(n).position==="static")?t:n||Tl(e)||t}function Ii(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function He(e,t,n){return ce(e,Ln(t,n))}function Rl(e,t,n){var i=He(e,t,n);return i>n?n:i}function xr(){return{top:0,right:0,bottom:0,left:0}}function yr(e){return Object.assign({},xr(),e)}function vr(e,t){return t.reduce(function(n,i){return n[i]=e,n},{})}var Ll=function(t,n){return t=typeof t=="function"?t(Object.assign({},n.rects,{placement:n.placement})):t,yr(typeof t!="number"?t:vr(t,on))};function Fl(e){var t,n=e.state,i=e.name,s=e.options,o=n.elements.arrow,r=n.modifiersData.popperOffsets,a=Pt(n.placement),l=Ii(a),c=[dt,yt].indexOf(a)>=0,h=c?"height":"width";if(!(!o||!r)){var u=Ll(s.padding,n),d=Fi(o),f=l==="y"?ut:dt,g=l==="y"?xt:yt,m=n.rects.reference[h]+n.rects.reference[l]-r[l]-n.rects.popper[h],p=r[l]-n.rects.reference[l],b=rn(o),x=b?l==="y"?b.clientHeight||0:b.clientWidth||0:0,v=m/2-p/2,_=u[f],y=x-d[h]-u[g],w=x/2-d[h]/2+v,k=He(_,w,y),S=l;n.modifiersData[i]=(t={},t[S]=k,t.centerOffset=k-w,t)}}function Il(e){var t=e.state,n=e.options,i=n.element,s=i===void 0?"[data-popper-arrow]":i;s!=null&&(typeof s=="string"&&(s=t.elements.popper.querySelector(s),!s)||br(t.elements.popper,s)&&(t.elements.arrow=s))}const jl={name:"arrow",enabled:!0,phase:"main",fn:Fl,effect:Il,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Me(e){return e.split("-")[1]}var $l={top:"auto",right:"auto",bottom:"auto",left:"auto"};function zl(e,t){var n=e.x,i=e.y,s=t.devicePixelRatio||1;return{x:Se(n*s)/s||0,y:Se(i*s)/s||0}}function Ss(e){var t,n=e.popper,i=e.popperRect,s=e.placement,o=e.variation,r=e.offsets,a=e.position,l=e.gpuAcceleration,c=e.adaptive,h=e.roundOffsets,u=e.isFixed,d=r.x,f=d===void 0?0:d,g=r.y,m=g===void 0?0:g,p=typeof h=="function"?h({x:f,y:m}):{x:f,y:m};f=p.x,m=p.y;var b=r.hasOwnProperty("x"),x=r.hasOwnProperty("y"),v=dt,_=ut,y=window;if(c){var w=rn(n),k="clientHeight",S="clientWidth";if(w===gt(n)&&(w=Gt(n),jt(w).position!=="static"&&a==="absolute"&&(k="scrollHeight",S="scrollWidth")),w=w,s===ut||(s===dt||s===yt)&&o===Ke){_=xt;var P=u&&w===y&&y.visualViewport?y.visualViewport.height:w[k];m-=P-i.height,m*=l?1:-1}if(s===dt||(s===ut||s===xt)&&o===Ke){v=yt;var D=u&&w===y&&y.visualViewport?y.visualViewport.width:w[S];f-=D-i.width,f*=l?1:-1}}var C=Object.assign({position:a},c&&$l),O=h===!0?zl({x:f,y:m},gt(n)):{x:f,y:m};if(f=O.x,m=O.y,l){var E;return Object.assign({},C,(E={},E[_]=x?"0":"",E[v]=b?"0":"",E.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",E))}return Object.assign({},C,(t={},t[_]=x?m+"px":"",t[v]=b?f+"px":"",t.transform="",t))}function Nl(e){var t=e.state,n=e.options,i=n.gpuAcceleration,s=i===void 0?!0:i,o=n.adaptive,r=o===void 0?!0:o,a=n.roundOffsets,l=a===void 0?!0:a,c={placement:Pt(t.placement),variation:Me(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:s,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Ss(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:r,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Ss(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const Bl={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:Nl,data:{}};var dn={passive:!0};function Hl(e){var t=e.state,n=e.instance,i=e.options,s=i.scroll,o=s===void 0?!0:s,r=i.resize,a=r===void 0?!0:r,l=gt(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&c.forEach(function(h){h.addEventListener("scroll",n.update,dn)}),a&&l.addEventListener("resize",n.update,dn),function(){o&&c.forEach(function(h){h.removeEventListener("scroll",n.update,dn)}),a&&l.removeEventListener("resize",n.update,dn)}}const Wl={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:Hl,data:{}};var Vl={left:"right",right:"left",bottom:"top",top:"bottom"};function En(e){return e.replace(/left|right|bottom|top/g,function(t){return Vl[t]})}var Yl={start:"end",end:"start"};function ks(e){return e.replace(/start|end/g,function(t){return Yl[t]})}function ji(e){var t=gt(e),n=t.pageXOffset,i=t.pageYOffset;return{scrollLeft:n,scrollTop:i}}function $i(e){return ke(Gt(e)).left+ji(e).scrollLeft}function Ul(e,t){var n=gt(e),i=Gt(e),s=n.visualViewport,o=i.clientWidth,r=i.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=mr();(c||!c&&t==="fixed")&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+$i(e),y:l}}function Xl(e){var t,n=Gt(e),i=ji(e),s=(t=e.ownerDocument)==null?void 0:t.body,o=ce(n.scrollWidth,n.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ce(n.scrollHeight,n.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-i.scrollLeft+$i(e),l=-i.scrollTop;return jt(s||n).direction==="rtl"&&(a+=ce(n.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}function zi(e){var t=jt(e),n=t.overflow,i=t.overflowX,s=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+s+i)}function _r(e){return["html","body","#document"].indexOf(Ut(e))>=0?e.ownerDocument.body:Ot(e)&&zi(e)?e:_r(Un(e))}function We(e,t){var n;t===void 0&&(t=[]);var i=_r(e),s=i===((n=e.ownerDocument)==null?void 0:n.body),o=gt(i),r=s?[o].concat(o.visualViewport||[],zi(i)?i:[]):i,a=t.concat(r);return s?a:a.concat(We(Un(r)))}function vi(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function Kl(e,t){var n=ke(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function Ms(e,t,n){return t===pr?vi(Ul(e,n)):de(t)?Kl(t,n):vi(Xl(Gt(e)))}function ql(e){var t=We(Un(e)),n=["absolute","fixed"].indexOf(jt(e).position)>=0,i=n&&Ot(e)?rn(e):e;return de(i)?t.filter(function(s){return de(s)&&br(s,i)&&Ut(s)!=="body"}):[]}function Gl(e,t,n,i){var s=t==="clippingParents"?ql(e):[].concat(t),o=[].concat(s,[n]),r=o[0],a=o.reduce(function(l,c){var h=Ms(e,c,i);return l.top=ce(h.top,l.top),l.right=Ln(h.right,l.right),l.bottom=Ln(h.bottom,l.bottom),l.left=ce(h.left,l.left),l},Ms(e,r,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function wr(e){var t=e.reference,n=e.element,i=e.placement,s=i?Pt(i):null,o=i?Me(i):null,r=t.x+t.width/2-n.width/2,a=t.y+t.height/2-n.height/2,l;switch(s){case ut:l={x:r,y:t.y-n.height};break;case xt:l={x:r,y:t.y+t.height};break;case yt:l={x:t.x+t.width,y:a};break;case dt:l={x:t.x-n.width,y:a};break;default:l={x:t.x,y:t.y}}var c=s?Ii(s):null;if(c!=null){var h=c==="y"?"height":"width";switch(o){case we:l[c]=l[c]-(t[h]/2-n[h]/2);break;case Ke:l[c]=l[c]+(t[h]/2-n[h]/2);break}}return l}function qe(e,t){t===void 0&&(t={});var n=t,i=n.placement,s=i===void 0?e.placement:i,o=n.strategy,r=o===void 0?e.strategy:o,a=n.boundary,l=a===void 0?yl:a,c=n.rootBoundary,h=c===void 0?pr:c,u=n.elementContext,d=u===void 0?Te:u,f=n.altBoundary,g=f===void 0?!1:f,m=n.padding,p=m===void 0?0:m,b=yr(typeof p!="number"?p:vr(p,on)),x=d===Te?vl:Te,v=e.rects.popper,_=e.elements[g?x:d],y=Gl(de(_)?_:_.contextElement||Gt(e.elements.popper),l,h,r),w=ke(e.elements.reference),k=wr({reference:w,element:v,strategy:"absolute",placement:s}),S=vi(Object.assign({},v,k)),P=d===Te?S:w,D={top:y.top-P.top+b.top,bottom:P.bottom-y.bottom+b.bottom,left:y.left-P.left+b.left,right:P.right-y.right+b.right},C=e.modifiersData.offset;if(d===Te&&C){var O=C[s];Object.keys(D).forEach(function(E){var F=[yt,xt].indexOf(E)>=0?1:-1,R=[ut,xt].indexOf(E)>=0?"y":"x";D[E]+=O[R]*F})}return D}function Jl(e,t){t===void 0&&(t={});var n=t,i=n.placement,s=n.boundary,o=n.rootBoundary,r=n.padding,a=n.flipVariations,l=n.allowedAutoPlacements,c=l===void 0?gr:l,h=Me(i),u=h?a?_s:_s.filter(function(g){return Me(g)===h}):on,d=u.filter(function(g){return c.indexOf(g)>=0});d.length===0&&(d=u);var f=d.reduce(function(g,m){return g[m]=qe(e,{placement:m,boundary:s,rootBoundary:o,padding:r})[Pt(m)],g},{});return Object.keys(f).sort(function(g,m){return f[g]-f[m]})}function Zl(e){if(Pt(e)===Ri)return[];var t=En(e);return[ks(e),t,ks(t)]}function Ql(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var s=n.mainAxis,o=s===void 0?!0:s,r=n.altAxis,a=r===void 0?!0:r,l=n.fallbackPlacements,c=n.padding,h=n.boundary,u=n.rootBoundary,d=n.altBoundary,f=n.flipVariations,g=f===void 0?!0:f,m=n.allowedAutoPlacements,p=t.options.placement,b=Pt(p),x=b===p,v=l||(x||!g?[En(p)]:Zl(p)),_=[p].concat(v).reduce(function(U,X){return U.concat(Pt(X)===Ri?Jl(t,{placement:X,boundary:h,rootBoundary:u,padding:c,flipVariations:g,allowedAutoPlacements:m}):X)},[]),y=t.rects.reference,w=t.rects.popper,k=new Map,S=!0,P=_[0],D=0;D<_.length;D++){var C=_[D],O=Pt(C),E=Me(C)===we,F=[ut,xt].indexOf(O)>=0,R=F?"width":"height",L=qe(t,{placement:C,boundary:h,rootBoundary:u,altBoundary:d,padding:c}),I=F?E?yt:dt:E?xt:ut;y[R]>w[R]&&(I=En(I));var Y=En(I),$=[];if(o&&$.push(L[O]<=0),a&&$.push(L[I]<=0,L[Y]<=0),$.every(function(U){return U})){P=C,S=!1;break}k.set(C,$)}if(S)for(var N=g?3:1,tt=function(X){var q=_.find(function(At){var B=k.get(At);if(B)return B.slice(0,X).every(function(et){return et})});if(q)return P=q,"break"},Q=N;Q>0;Q--){var nt=tt(Q);if(nt==="break")break}t.placement!==P&&(t.modifiersData[i]._skip=!0,t.placement=P,t.reset=!0)}}const tc={name:"flip",enabled:!0,phase:"main",fn:Ql,requiresIfExists:["offset"],data:{_skip:!1}};function Cs(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Ps(e){return[ut,yt,xt,dt].some(function(t){return e[t]>=0})}function ec(e){var t=e.state,n=e.name,i=t.rects.reference,s=t.rects.popper,o=t.modifiersData.preventOverflow,r=qe(t,{elementContext:"reference"}),a=qe(t,{altBoundary:!0}),l=Cs(r,i),c=Cs(a,s,o),h=Ps(l),u=Ps(c);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":u})}const nc={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:ec};function ic(e,t,n){var i=Pt(e),s=[dt,ut].indexOf(i)>=0?-1:1,o=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[dt,yt].indexOf(i)>=0?{x:a,y:r}:{x:r,y:a}}function sc(e){var t=e.state,n=e.options,i=e.name,s=n.offset,o=s===void 0?[0,0]:s,r=gr.reduce(function(h,u){return h[u]=ic(u,t.rects,o),h},{}),a=r[t.placement],l=a.x,c=a.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=c),t.modifiersData[i]=r}const oc={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:sc};function rc(e){var t=e.state,n=e.name;t.modifiersData[n]=wr({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const ac={name:"popperOffsets",enabled:!0,phase:"read",fn:rc,data:{}};function lc(e){return e==="x"?"y":"x"}function cc(e){var t=e.state,n=e.options,i=e.name,s=n.mainAxis,o=s===void 0?!0:s,r=n.altAxis,a=r===void 0?!1:r,l=n.boundary,c=n.rootBoundary,h=n.altBoundary,u=n.padding,d=n.tether,f=d===void 0?!0:d,g=n.tetherOffset,m=g===void 0?0:g,p=qe(t,{boundary:l,rootBoundary:c,padding:u,altBoundary:h}),b=Pt(t.placement),x=Me(t.placement),v=!x,_=Ii(b),y=lc(_),w=t.modifiersData.popperOffsets,k=t.rects.reference,S=t.rects.popper,P=typeof m=="function"?m(Object.assign({},t.rects,{placement:t.placement})):m,D=typeof P=="number"?{mainAxis:P,altAxis:P}:Object.assign({mainAxis:0,altAxis:0},P),C=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,O={x:0,y:0};if(w){if(o){var E,F=_==="y"?ut:dt,R=_==="y"?xt:yt,L=_==="y"?"height":"width",I=w[_],Y=I+p[F],$=I-p[R],N=f?-S[L]/2:0,tt=x===we?k[L]:S[L],Q=x===we?-S[L]:-k[L],nt=t.elements.arrow,U=f&&nt?Fi(nt):{width:0,height:0},X=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:xr(),q=X[F],At=X[R],B=He(0,k[L],U[L]),et=v?k[L]/2-N-B-q-D.mainAxis:tt-B-q-D.mainAxis,Ee=v?-k[L]/2+N+B+At+D.mainAxis:Q+B+At+D.mainAxis,zt=t.elements.arrow&&rn(t.elements.arrow),Jt=zt?_==="y"?zt.clientTop||0:zt.clientLeft||0:0,Zt=(E=C==null?void 0:C[_])!=null?E:0,lt=I+et-Zt-Jt,Ia=I+Ee-Zt,ls=He(f?Ln(Y,lt):Y,I,f?ce($,Ia):$);w[_]=ls,O[_]=ls-I}if(a){var cs,ja=_==="x"?ut:dt,$a=_==="x"?xt:yt,Qt=w[y],hn=y==="y"?"height":"width",hs=Qt+p[ja],us=Qt-p[$a],Gn=[ut,dt].indexOf(b)!==-1,ds=(cs=C==null?void 0:C[y])!=null?cs:0,fs=Gn?hs:Qt-k[hn]-S[hn]-ds+D.altAxis,ps=Gn?Qt+k[hn]+S[hn]-ds-D.altAxis:us,gs=f&&Gn?Rl(fs,Qt,ps):He(f?fs:hs,Qt,f?ps:us);w[y]=gs,O[y]=gs-Qt}t.modifiersData[i]=O}}const hc={name:"preventOverflow",enabled:!0,phase:"main",fn:cc,requiresIfExists:["offset"]};function uc(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function dc(e){return e===gt(e)||!Ot(e)?ji(e):uc(e)}function fc(e){var t=e.getBoundingClientRect(),n=Se(t.width)/e.offsetWidth||1,i=Se(t.height)/e.offsetHeight||1;return n!==1||i!==1}function pc(e,t,n){n===void 0&&(n=!1);var i=Ot(t),s=Ot(t)&&fc(t),o=Gt(t),r=ke(e,s,n),a={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(i||!i&&!n)&&((Ut(t)!=="body"||zi(o))&&(a=dc(t)),Ot(t)?(l=ke(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):o&&(l.x=$i(o))),{x:r.left+a.scrollLeft-l.x,y:r.top+a.scrollTop-l.y,width:r.width,height:r.height}}function gc(e){var t=new Map,n=new Set,i=[];e.forEach(function(o){t.set(o.name,o)});function s(o){n.add(o.name);var r=[].concat(o.requires||[],o.requiresIfExists||[]);r.forEach(function(a){if(!n.has(a)){var l=t.get(a);l&&s(l)}}),i.push(o)}return e.forEach(function(o){n.has(o.name)||s(o)}),i}function mc(e){var t=gc(e);return Al.reduce(function(n,i){return n.concat(t.filter(function(s){return s.phase===i}))},[])}function bc(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function xc(e){var t=e.reduce(function(n,i){var s=n[i.name];return n[i.name]=s?Object.assign({},s,i,{options:Object.assign({},s.options,i.options),data:Object.assign({},s.data,i.data)}):i,n},{});return Object.keys(t).map(function(n){return t[n]})}var Os={placement:"bottom",modifiers:[],strategy:"absolute"};function Ds(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some(function(i){return!(i&&typeof i.getBoundingClientRect=="function")})}function yc(e){e===void 0&&(e={});var t=e,n=t.defaultModifiers,i=n===void 0?[]:n,s=t.defaultOptions,o=s===void 0?Os:s;return function(a,l,c){c===void 0&&(c=o);var h={placement:"bottom",orderedModifiers:[],options:Object.assign({},Os,o),modifiersData:{},elements:{reference:a,popper:l},attributes:{},styles:{}},u=[],d=!1,f={state:h,setOptions:function(b){var x=typeof b=="function"?b(h.options):b;m(),h.options=Object.assign({},o,h.options,x),h.scrollParents={reference:de(a)?We(a):a.contextElement?We(a.contextElement):[],popper:We(l)};var v=mc(xc([].concat(i,h.options.modifiers)));return h.orderedModifiers=v.filter(function(_){return _.enabled}),g(),f.update()},forceUpdate:function(){if(!d){var b=h.elements,x=b.reference,v=b.popper;if(Ds(x,v)){h.rects={reference:pc(x,rn(v),h.options.strategy==="fixed"),popper:Fi(v)},h.reset=!1,h.placement=h.options.placement,h.orderedModifiers.forEach(function(D){return h.modifiersData[D.name]=Object.assign({},D.data)});for(var _=0;_<h.orderedModifiers.length;_++){if(h.reset===!0){h.reset=!1,_=-1;continue}var y=h.orderedModifiers[_],w=y.fn,k=y.options,S=k===void 0?{}:k,P=y.name;typeof w=="function"&&(h=w({state:h,options:S,name:P,instance:f})||h)}}}},update:bc(function(){return new Promise(function(p){f.forceUpdate(),p(h)})}),destroy:function(){m(),d=!0}};if(!Ds(a,l))return f;f.setOptions(c).then(function(p){!d&&c.onFirstUpdate&&c.onFirstUpdate(p)});function g(){h.orderedModifiers.forEach(function(p){var b=p.name,x=p.options,v=x===void 0?{}:x,_=p.effect;if(typeof _=="function"){var y=_({state:h,name:b,instance:f,options:v}),w=function(){};u.push(y||w)}})}function m(){u.forEach(function(p){return p()}),u=[]}return f}}const vc=yc({defaultModifiers:[nc,ac,Bl,Wl,oc,tc,hc,jl]}),_c=["enabled","placement","strategy","modifiers"];function wc(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}const Sc={name:"applyStyles",enabled:!1,phase:"afterWrite",fn:()=>{}},kc={name:"ariaDescribedBy",enabled:!0,phase:"afterWrite",effect:({state:e})=>()=>{const{reference:t,popper:n}=e.elements;if("removeAttribute"in t){const i=(t.getAttribute("aria-describedby")||"").split(",").filter(s=>s.trim()!==n.id);i.length?t.setAttribute("aria-describedby",i.join(",")):t.removeAttribute("aria-describedby")}},fn:({state:e})=>{var t;const{popper:n,reference:i}=e.elements,s=(t=n.getAttribute("role"))==null?void 0:t.toLowerCase();if(n.id&&s==="tooltip"&&"setAttribute"in i){const o=i.getAttribute("aria-describedby");if(o&&o.split(",").indexOf(n.id)!==-1)return;i.setAttribute("aria-describedby",o?`${o},${n.id}`:n.id)}}},Mc=[];function Cc(e,t,n={}){let{enabled:i=!0,placement:s="bottom",strategy:o="absolute",modifiers:r=Mc}=n,a=wc(n,_c);const l=A.useRef(r),c=A.useRef(),h=A.useCallback(()=>{var p;(p=c.current)==null||p.update()},[]),u=A.useCallback(()=>{var p;(p=c.current)==null||p.forceUpdate()},[]),[d,f]=xl(A.useState({placement:s,update:h,forceUpdate:u,attributes:{},styles:{popper:{},arrow:{}}})),g=A.useMemo(()=>({name:"updateStateModifier",enabled:!0,phase:"write",requires:["computeStyles"],fn:({state:p})=>{const b={},x={};Object.keys(p.elements).forEach(v=>{b[v]=p.styles[v],x[v]=p.attributes[v]}),f({state:p,styles:b,attributes:x,update:h,forceUpdate:u,placement:p.placement})}}),[h,u,f]),m=A.useMemo(()=>(Be(l.current,r)||(l.current=r),l.current),[r]);return A.useEffect(()=>{!c.current||!i||c.current.setOptions({placement:s,strategy:o,modifiers:[...m,g,Sc]})},[o,s,g,i,m]),A.useEffect(()=>{if(!(!i||e==null||t==null))return c.current=vc(e,t,Object.assign({},a,{placement:s,strategy:o,modifiers:[...m,kc,g]})),()=>{c.current!=null&&(c.current.destroy(),c.current=void 0,f(p=>Object.assign({},p,{attributes:{},styles:{popper:{}}})))}},[i,e,t]),d}const As=()=>{};function Pc(e){return e.button===0}function Oc(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}const Qn=e=>e&&("current"in e?e.current:e),Es={click:"mousedown",mouseup:"mousedown",pointerup:"pointerdown"};function Dc(e,t=As,{disabled:n,clickTrigger:i="click"}={}){const s=A.useRef(!1),o=A.useRef(!1),r=A.useCallback(c=>{const h=Qn(e);Wa(!!h,"ClickOutside captured a close event but does not have a ref to compare it to. useClickOutside(), should be passed a ref that resolves to a DOM node"),s.current=!h||Oc(c)||!Pc(c)||!!ms(h,c.target)||o.current,o.current=!1},[e]),a=Vt(c=>{const h=Qn(e);h&&ms(h,c.target)?o.current=!0:o.current=!1}),l=Vt(c=>{s.current||t(c)});A.useEffect(()=>{var c,h;if(n||e==null)return;const u=Va(Qn(e)),d=u.defaultView||window;let f=(c=d.event)!=null?c:(h=d.parent)==null?void 0:h.event,g=null;Es[i]&&(g=un(u,Es[i],a,!0));const m=un(u,i,r,!0),p=un(u,i,x=>{if(x===f){f=void 0;return}l(x)});let b=[];return"ontouchstart"in u.documentElement&&(b=[].slice.call(u.body.children).map(x=>un(x,"mousemove",As))),()=>{g==null||g(),m(),p(),b.forEach(x=>x())}},[e,n,i,r,a,l])}function Ac(e){const t={};return Array.isArray(e)?(e==null||e.forEach(n=>{t[n.name]=n}),t):e||t}function Ec(e={}){return Array.isArray(e)?e:Object.keys(e).map(t=>(e[t].name=t,e[t]))}function Tc({enabled:e,enableEvents:t,placement:n,flip:i,offset:s,fixed:o,containerPadding:r,arrowElement:a,popperConfig:l={}}){var c,h,u,d,f;const g=Ac(l.modifiers);return Object.assign({},l,{placement:n,enabled:e,strategy:o?"fixed":l.strategy,modifiers:Ec(Object.assign({},g,{eventListeners:{enabled:t,options:(c=g.eventListeners)==null?void 0:c.options},preventOverflow:Object.assign({},g.preventOverflow,{options:r?Object.assign({padding:r},(h=g.preventOverflow)==null?void 0:h.options):(u=g.preventOverflow)==null?void 0:u.options}),offset:{options:Object.assign({offset:s},(d=g.offset)==null?void 0:d.options)},arrow:Object.assign({},g.arrow,{enabled:!!a,options:Object.assign({},(f=g.arrow)==null?void 0:f.options,{element:a})}),flip:Object.assign({enabled:!!i},g.flip)}))})}const Rc=["children","usePopper"];function Lc(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}const Fc=()=>{};function Sr(e={}){const t=A.useContext(Yn),[n,i]=ul(),s=A.useRef(!1),{flip:o,offset:r,rootCloseEvent:a,fixed:l=!1,placement:c,popperConfig:h={},enableEventListeners:u=!0,usePopper:d=!!t}=e,f=(t==null?void 0:t.show)==null?!!e.show:t.show;f&&!s.current&&(s.current=!0);const g=w=>{t==null||t.toggle(!1,w)},{placement:m,setMenu:p,menuElement:b,toggleElement:x}=t||{},v=Cc(x,b,Tc({placement:c||m||"bottom-start",enabled:d,enableEvents:u??f,offset:r,flip:o,fixed:l,arrowElement:n,popperConfig:h})),_=Object.assign({ref:p||Fc,"aria-labelledby":x==null?void 0:x.id},v.attributes.popper,{style:v.styles.popper}),y={show:f,placement:m,hasShown:s.current,toggle:t==null?void 0:t.toggle,popper:d?v:null,arrowProps:d?Object.assign({ref:i},v.attributes.arrow,{style:v.styles.arrow}):{}};return Dc(b,g,{clickTrigger:a,disabled:!f}),[_,y]}function kr(e){let{children:t,usePopper:n=!0}=e,i=Lc(e,Rc);const[s,o]=Sr(Object.assign({},i,{usePopper:n}));return M.jsx(M.Fragment,{children:t(s,o)})}kr.displayName="DropdownMenu";const Ni={prefix:String(Math.round(Math.random()*1e10)),current:0},Mr=ue.createContext(Ni),Ic=ue.createContext(!1);let jc=!!(typeof window<"u"&&window.document&&window.document.createElement),ti=new WeakMap;function $c(e=!1){let t=A.useContext(Mr),n=A.useRef(null);if(n.current===null&&!e){var i,s;let o=(s=ue.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)===null||s===void 0||(i=s.ReactCurrentOwner)===null||i===void 0?void 0:i.current;if(o){let r=ti.get(o);r==null?ti.set(o,{id:t.current,state:o.memoizedState}):o.memoizedState!==r.state&&(t.current=r.id,ti.delete(o))}n.current=++t.current}return n.current}function zc(e){let t=A.useContext(Mr);t===Ni&&!jc&&console.warn("When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.");let n=$c(!!e),i=`react-aria${t.prefix}`;return e||`${i}-${n}`}function Nc(e){let t=ue.useId(),[n]=A.useState(Yc()),i=n?"react-aria":`react-aria${Ni.prefix}`;return e||`${i}-${t}`}const Bc=typeof ue.useId=="function"?Nc:zc;function Hc(){return!1}function Wc(){return!0}function Vc(e){return()=>{}}function Yc(){return typeof ue.useSyncExternalStore=="function"?ue.useSyncExternalStore(Vc,Hc,Wc):A.useContext(Ic)}const Cr=e=>{var t;return((t=e.getAttribute("role"))==null?void 0:t.toLowerCase())==="menu"},Ts=()=>{};function Pr(){const e=Bc(),{show:t=!1,toggle:n=Ts,setToggle:i,menuElement:s}=A.useContext(Yn)||{},o=A.useCallback(a=>{n(!t,a)},[t,n]),r={id:e,ref:i||Ts,onClick:o,"aria-expanded":!!t};return s&&Cr(s)&&(r["aria-haspopup"]=!0),[r,{show:t,toggle:n}]}function Or({children:e}){const[t,n]=Pr();return M.jsx(M.Fragment,{children:e(t,n)})}Or.displayName="DropdownToggle";const _i=A.createContext(null),Rs=(e,t=null)=>e!=null?String(e):t||null,Dr=A.createContext(null);Dr.displayName="NavContext";const Uc=["eventKey","disabled","onClick","active","as"];function Xc(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}function Ar({key:e,href:t,active:n,disabled:i,onClick:s}){const o=A.useContext(_i),r=A.useContext(Dr),{activeKey:a}=r||{},l=Rs(e,t),c=n==null&&e!=null?Rs(a)===l:n;return[{onClick:Vt(u=>{i||(s==null||s(u),o&&!u.isPropagationStopped()&&o(l,u))}),"aria-disabled":i||void 0,"aria-selected":c,[ar("dropdown-item")]:""},{isActive:c}]}const Er=A.forwardRef((e,t)=>{let{eventKey:n,disabled:i,onClick:s,active:o,as:r=Ya}=e,a=Xc(e,Uc);const[l]=Ar({key:n,href:a.href,disabled:i,onClick:s,active:o});return M.jsx(r,Object.assign({},a,{ref:t},l))});Er.displayName="DropdownItem";function Ls(){const e=bl(),t=A.useRef(null),n=A.useCallback(i=>{t.current=i,e()},[e]);return[t,n]}function an({defaultShow:e,show:t,onSelect:n,onToggle:i,itemSelector:s=`* [${ar("dropdown-item")}]`,focusFirstItemOnShow:o,placement:r="bottom-start",children:a}){const l=Ua(),[c,h]=ml(t,e,i),[u,d]=Ls(),f=u.current,[g,m]=Ls(),p=g.current,b=Xa(c),x=A.useRef(null),v=A.useRef(!1),_=A.useContext(_i),y=A.useCallback((C,O,E=O==null?void 0:O.type)=>{h(C,{originalEvent:O,source:E})},[h]),w=Vt((C,O)=>{n==null||n(C,O),y(!1,O,"select"),O.isPropagationStopped()||_==null||_(C,O)}),k=A.useMemo(()=>({toggle:y,placement:r,show:c,menuElement:f,toggleElement:p,setMenu:d,setToggle:m}),[y,r,c,f,p,d,m]);f&&b&&!c&&(v.current=f.contains(f.ownerDocument.activeElement));const S=Vt(()=>{p&&p.focus&&p.focus()}),P=Vt(()=>{const C=x.current;let O=o;if(O==null&&(O=u.current&&Cr(u.current)?"keyboard":!1),O===!1||O==="keyboard"&&!/^key.+$/.test(C))return;const E=bs(u.current,s)[0];E&&E.focus&&E.focus()});A.useEffect(()=>{c?P():v.current&&(v.current=!1,S())},[c,v,S,P]),A.useEffect(()=>{x.current=null});const D=(C,O)=>{if(!u.current)return null;const E=bs(u.current,s);let F=E.indexOf(C)+O;return F=Math.max(0,Math.min(F,E.length)),E[F]};return dl(A.useCallback(()=>l.document,[l]),"keydown",C=>{var O,E;const{key:F}=C,R=C.target,L=(O=u.current)==null?void 0:O.contains(R),I=(E=g.current)==null?void 0:E.contains(R);if(/input|textarea/i.test(R.tagName)&&(F===" "||F!=="Escape"&&L||F==="Escape"&&R.type==="search")||!L&&!I||F==="Tab"&&(!u.current||!c))return;x.current=C.type;const $={originalEvent:C,source:C.type};switch(F){case"ArrowUp":{const N=D(R,-1);N&&N.focus&&N.focus(),C.preventDefault();return}case"ArrowDown":if(C.preventDefault(),!c)h(!0,$);else{const N=D(R,1);N&&N.focus&&N.focus()}return;case"Tab":Ka(R.ownerDocument,"keyup",N=>{var tt;(N.key==="Tab"&&!N.target||!((tt=u.current)!=null&&tt.contains(N.target)))&&h(!1,$)},{once:!0});break;case"Escape":F==="Escape"&&(C.preventDefault(),C.stopPropagation()),h(!1,$);break}}),M.jsx(_i.Provider,{value:w,children:M.jsx(Yn.Provider,{value:k,children:a})})}an.displayName="Dropdown";an.Menu=kr;an.Toggle=Or;an.Item=Er;const Bi=A.createContext({});Bi.displayName="DropdownContext";const Tr=A.forwardRef(({className:e,bsPrefix:t,as:n="hr",role:i="separator",...s},o)=>(t=Kt(t,"dropdown-divider"),M.jsx(n,{ref:o,className:qt(e,t),role:i,...s})));Tr.displayName="DropdownDivider";const Rr=A.forwardRef(({className:e,bsPrefix:t,as:n="div",role:i="heading",...s},o)=>(t=Kt(t,"dropdown-header"),M.jsx(n,{ref:o,className:qt(e,t),role:i,...s})));Rr.displayName="DropdownHeader";const Lr=A.forwardRef(({bsPrefix:e,className:t,eventKey:n,disabled:i=!1,onClick:s,active:o,as:r=fr,...a},l)=>{const c=Kt(e,"dropdown-item"),[h,u]=Ar({key:n,href:a.href,disabled:i,onClick:s,active:o});return M.jsx(r,{...a,...h,ref:l,className:qt(t,c,u.isActive&&"active",i&&"disabled")})});Lr.displayName="DropdownItem";const Fr=A.forwardRef(({className:e,bsPrefix:t,as:n="span",...i},s)=>(t=Kt(t,"dropdown-item-text"),M.jsx(n,{ref:s,className:qt(e,t),...i})));Fr.displayName="DropdownItemText";const Kc=typeof global<"u"&&global.navigator&&global.navigator.product==="ReactNative",qc=typeof document<"u",Gc=qc||Kc?A.useLayoutEffect:A.useEffect,Ir=A.createContext(null);Ir.displayName="NavbarContext";function jr(e,t){return e}function $r(e,t,n){const i=n?"top-end":"top-start",s=n?"top-start":"top-end",o=n?"bottom-end":"bottom-start",r=n?"bottom-start":"bottom-end",a=n?"right-start":"left-start",l=n?"right-end":"left-end",c=n?"left-start":"right-start",h=n?"left-end":"right-end";let u=e?r:o;return t==="up"?u=e?s:i:t==="end"?u=e?h:c:t==="start"?u=e?l:a:t==="down-centered"?u="bottom":t==="up-centered"&&(u="top"),u}const zr=A.forwardRef(({bsPrefix:e,className:t,align:n,rootCloseEvent:i,flip:s=!0,show:o,renderOnMount:r,as:a="div",popperConfig:l,variant:c,...h},u)=>{let d=!1;const f=A.useContext(Ir),g=Kt(e,"dropdown-menu"),{align:m,drop:p,isRTL:b}=A.useContext(Bi);n=n||m;const x=A.useContext(ur),v=[];if(n)if(typeof n=="object"){const C=Object.keys(n);if(C.length){const O=C[0],E=n[O];d=E==="start",v.push(`${g}-${O}-${E}`)}}else n==="end"&&(d=!0);const _=$r(d,p,b),[y,{hasShown:w,popper:k,show:S,toggle:P}]=Sr({flip:s,rootCloseEvent:i,show:o,usePopper:!f&&v.length===0,offset:[0,2],popperConfig:l,placement:_});if(y.ref=lr(jr(u),y.ref),Gc(()=>{S&&(k==null||k.update())},[S]),!w&&!r&&!x)return null;typeof a!="string"&&(y.show=S,y.close=()=>P==null?void 0:P(!1),y.align=n);let D=h.style;return k!=null&&k.placement&&(D={...h.style,...y.style},h["x-placement"]=k.placement),M.jsx(a,{...h,...y,style:D,...(v.length||f)&&{"data-bs-popper":"static"},className:qt(t,g,S&&"show",d&&`${g}-end`,c&&`${g}-${c}`,...v)})});zr.displayName="DropdownMenu";const Nr=A.forwardRef(({bsPrefix:e,split:t,className:n,childBsPrefix:i,as:s=Ft,...o},r)=>{const a=Kt(e,"dropdown-toggle"),l=A.useContext(Yn);i!==void 0&&(o.bsPrefix=i);const[c]=Pr();return c.ref=lr(c.ref,jr(r)),M.jsx(s,{className:qt(n,a,t&&`${a}-split`,(l==null?void 0:l.show)&&"show"),...c,...o})});Nr.displayName="DropdownToggle";const Br=A.forwardRef((e,t)=>{const{bsPrefix:n,drop:i="down",show:s,className:o,align:r="start",onSelect:a,onToggle:l,focusFirstItemOnShow:c,as:h="div",navbar:u,autoClose:d=!0,...f}=hl(e,{show:"onToggle"}),g=A.useContext(ur),m=Kt(n,"dropdown"),p=qa(),b=k=>d===!1?k==="click":d==="inside"?k!=="rootClose":d==="outside"?k!=="select":!0,x=Ga((k,S)=>{var P;!((P=S.originalEvent)==null||(P=P.target)==null)&&P.classList.contains("dropdown-toggle")&&S.source==="mousedown"||(S.originalEvent.currentTarget===document&&(S.source!=="keydown"||S.originalEvent.key==="Escape")&&(S.source="rootClose"),b(S.source)&&(l==null||l(k,S)))}),_=$r(r==="end",i,p),y=A.useMemo(()=>({align:r,drop:i,isRTL:p}),[r,i,p]),w={down:m,"down-centered":`${m}-center`,up:"dropup","up-centered":"dropup-center dropup",end:"dropend",start:"dropstart"};return M.jsx(Bi.Provider,{value:y,children:M.jsx(an,{placement:_,show:s,onSelect:a,onToggle:x,focusFirstItemOnShow:c,itemSelector:`.${m}-item:not(.disabled):not(:disabled)`,children:g?f.children:M.jsx(h,{...f,ref:t,className:qt(o,s&&"show",w[i])})})})});Br.displayName="Dropdown";const ei=Object.assign(Br,{Toggle:Nr,Menu:zr,Item:Lr,ItemText:Fr,Divider:Tr,Header:Rr});/*!
+var za=Object.defineProperty;var Na=(e,t,n)=>t in e?za(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var T=(e,t,n)=>Na(e,typeof t!="symbol"?t+"":t,n);import{r as A,u as Vt,g as Ba,j as M,h as Kt,i as qt,k as Ha,w as Wa,l as ms,o as Va,m as un,f as ue,n as ar,B as Ya,p as Ua,q as Xa,s as bs,v as Ka,x as lr,y as Ft,z as qa,A as Ga,c as wt,D as Ja,S as G,E as cr,R as se,O as Za,P as Qa,G as tl,N as el,H as nl,I as xe,J as hr,K as ge,M as il,Q as sl,T as ol,L as rl,V as al,C as xs,W as Jn,X as ll}from"./index.js";import{S as sn}from"./SideBar-CkoMfgfL.js";import{u as Zn,w as cl}from"./xlsx-BHRztzV8.js";import{c as ur,F as dr}from"./index-DIBz8YrO.js";import{u as hl}from"./hook-GVc5uk5F.js";function ul(){return A.useState(null)}function dl(e,t,n,i=!1){const s=Vt(n);A.useEffect(()=>{const o=typeof e=="function"?e():e;return o.addEventListener(t,s,i),()=>o.removeEventListener(t,s,i)},[e])}const fl=["onKeyDown"];function pl(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}function gl(e){return!e||e.trim()==="#"}const fr=A.forwardRef((e,t)=>{let{onKeyDown:n}=e,i=pl(e,fl);const[s]=Ba(Object.assign({tagName:"a"},i)),o=Vt(r=>{s.onKeyDown(r),n==null||n(r)});return gl(i.href)||i.role==="button"?M.jsx("a",Object.assign({ref:t},i,s,{onKeyDown:o})):M.jsx("a",Object.assign({ref:t},i,{onKeyDown:n}))});fr.displayName="Anchor";const Ti=A.forwardRef(({bsPrefix:e,className:t,role:n="toolbar",...i},s)=>{const o=Kt(e,"btn-toolbar");return M.jsx("div",{...i,ref:s,className:qt(t,o),role:n})});Ti.displayName="ButtonToolbar";function ml(e,t,n){const i=A.useRef(e!==void 0),[s,o]=A.useState(t),r=e!==void 0,a=i.current;return i.current=r,!r&&a&&s!==t&&o(t),[r?e:s,A.useCallback((...l)=>{const[c,...h]=l;let u=n==null?void 0:n(c,...h);return o(c),u},[n])]}function bl(){const[,e]=A.useReducer(t=>t+1,0);return e}const Yn=A.createContext(null);var ys=Object.prototype.hasOwnProperty;function vs(e,t,n){for(n of e.keys())if(Be(n,t))return n}function Be(e,t){var n,i,s;if(e===t)return!0;if(e&&t&&(n=e.constructor)===t.constructor){if(n===Date)return e.getTime()===t.getTime();if(n===RegExp)return e.toString()===t.toString();if(n===Array){if((i=e.length)===t.length)for(;i--&&Be(e[i],t[i]););return i===-1}if(n===Set){if(e.size!==t.size)return!1;for(i of e)if(s=i,s&&typeof s=="object"&&(s=vs(t,s),!s)||!t.has(s))return!1;return!0}if(n===Map){if(e.size!==t.size)return!1;for(i of e)if(s=i[0],s&&typeof s=="object"&&(s=vs(t,s),!s)||!Be(i[1],t.get(s)))return!1;return!0}if(n===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(n===DataView){if((i=e.byteLength)===t.byteLength)for(;i--&&e.getInt8(i)===t.getInt8(i););return i===-1}if(ArrayBuffer.isView(e)){if((i=e.byteLength)===t.byteLength)for(;i--&&e[i]===t[i];);return i===-1}if(!n||typeof e=="object"){i=0;for(n in e)if(ys.call(e,n)&&++i&&!ys.call(t,n)||!(n in t)||!Be(e[n],t[n]))return!1;return Object.keys(t).length===i}}return e!==e&&t!==t}function xl(e){const t=Ha();return[e[0],A.useCallback(n=>{if(t())return e[1](n)},[t,e[1]])]}var ut="top",xt="bottom",yt="right",dt="left",Ri="auto",on=[ut,xt,yt,dt],we="start",Ke="end",yl="clippingParents",pr="viewport",Te="popper",vl="reference",_s=on.reduce(function(e,t){return e.concat([t+"-"+we,t+"-"+Ke])},[]),gr=[].concat(on,[Ri]).reduce(function(e,t){return e.concat([t,t+"-"+we,t+"-"+Ke])},[]),_l="beforeRead",wl="read",Sl="afterRead",kl="beforeMain",Ml="main",Cl="afterMain",Pl="beforeWrite",Ol="write",Dl="afterWrite",Al=[_l,wl,Sl,kl,Ml,Cl,Pl,Ol,Dl];function Pt(e){return e.split("-")[0]}function gt(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function de(e){var t=gt(e).Element;return e instanceof t||e instanceof Element}function Ot(e){var t=gt(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Li(e){if(typeof ShadowRoot>"u")return!1;var t=gt(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}var ce=Math.max,Ln=Math.min,Se=Math.round;function yi(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function mr(){return!/^((?!chrome|android).)*safari/i.test(yi())}function ke(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var i=e.getBoundingClientRect(),s=1,o=1;t&&Ot(e)&&(s=e.offsetWidth>0&&Se(i.width)/e.offsetWidth||1,o=e.offsetHeight>0&&Se(i.height)/e.offsetHeight||1);var r=de(e)?gt(e):window,a=r.visualViewport,l=!mr()&&n,c=(i.left+(l&&a?a.offsetLeft:0))/s,h=(i.top+(l&&a?a.offsetTop:0))/o,u=i.width/s,d=i.height/o;return{width:u,height:d,top:h,right:c+u,bottom:h+d,left:c,x:c,y:h}}function Fi(e){var t=ke(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function br(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Li(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Ut(e){return e?(e.nodeName||"").toLowerCase():null}function jt(e){return gt(e).getComputedStyle(e)}function El(e){return["table","td","th"].indexOf(Ut(e))>=0}function Gt(e){return((de(e)?e.ownerDocument:e.document)||window.document).documentElement}function Un(e){return Ut(e)==="html"?e:e.assignedSlot||e.parentNode||(Li(e)?e.host:null)||Gt(e)}function ws(e){return!Ot(e)||jt(e).position==="fixed"?null:e.offsetParent}function Tl(e){var t=/firefox/i.test(yi()),n=/Trident/i.test(yi());if(n&&Ot(e)){var i=jt(e);if(i.position==="fixed")return null}var s=Un(e);for(Li(s)&&(s=s.host);Ot(s)&&["html","body"].indexOf(Ut(s))<0;){var o=jt(s);if(o.transform!=="none"||o.perspective!=="none"||o.contain==="paint"||["transform","perspective"].indexOf(o.willChange)!==-1||t&&o.willChange==="filter"||t&&o.filter&&o.filter!=="none")return s;s=s.parentNode}return null}function rn(e){for(var t=gt(e),n=ws(e);n&&El(n)&&jt(n).position==="static";)n=ws(n);return n&&(Ut(n)==="html"||Ut(n)==="body"&&jt(n).position==="static")?t:n||Tl(e)||t}function Ii(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function He(e,t,n){return ce(e,Ln(t,n))}function Rl(e,t,n){var i=He(e,t,n);return i>n?n:i}function xr(){return{top:0,right:0,bottom:0,left:0}}function yr(e){return Object.assign({},xr(),e)}function vr(e,t){return t.reduce(function(n,i){return n[i]=e,n},{})}var Ll=function(t,n){return t=typeof t=="function"?t(Object.assign({},n.rects,{placement:n.placement})):t,yr(typeof t!="number"?t:vr(t,on))};function Fl(e){var t,n=e.state,i=e.name,s=e.options,o=n.elements.arrow,r=n.modifiersData.popperOffsets,a=Pt(n.placement),l=Ii(a),c=[dt,yt].indexOf(a)>=0,h=c?"height":"width";if(!(!o||!r)){var u=Ll(s.padding,n),d=Fi(o),f=l==="y"?ut:dt,g=l==="y"?xt:yt,m=n.rects.reference[h]+n.rects.reference[l]-r[l]-n.rects.popper[h],p=r[l]-n.rects.reference[l],b=rn(o),x=b?l==="y"?b.clientHeight||0:b.clientWidth||0:0,v=m/2-p/2,_=u[f],y=x-d[h]-u[g],w=x/2-d[h]/2+v,k=He(_,w,y),S=l;n.modifiersData[i]=(t={},t[S]=k,t.centerOffset=k-w,t)}}function Il(e){var t=e.state,n=e.options,i=n.element,s=i===void 0?"[data-popper-arrow]":i;s!=null&&(typeof s=="string"&&(s=t.elements.popper.querySelector(s),!s)||br(t.elements.popper,s)&&(t.elements.arrow=s))}const jl={name:"arrow",enabled:!0,phase:"main",fn:Fl,effect:Il,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Me(e){return e.split("-")[1]}var $l={top:"auto",right:"auto",bottom:"auto",left:"auto"};function zl(e,t){var n=e.x,i=e.y,s=t.devicePixelRatio||1;return{x:Se(n*s)/s||0,y:Se(i*s)/s||0}}function Ss(e){var t,n=e.popper,i=e.popperRect,s=e.placement,o=e.variation,r=e.offsets,a=e.position,l=e.gpuAcceleration,c=e.adaptive,h=e.roundOffsets,u=e.isFixed,d=r.x,f=d===void 0?0:d,g=r.y,m=g===void 0?0:g,p=typeof h=="function"?h({x:f,y:m}):{x:f,y:m};f=p.x,m=p.y;var b=r.hasOwnProperty("x"),x=r.hasOwnProperty("y"),v=dt,_=ut,y=window;if(c){var w=rn(n),k="clientHeight",S="clientWidth";if(w===gt(n)&&(w=Gt(n),jt(w).position!=="static"&&a==="absolute"&&(k="scrollHeight",S="scrollWidth")),w=w,s===ut||(s===dt||s===yt)&&o===Ke){_=xt;var P=u&&w===y&&y.visualViewport?y.visualViewport.height:w[k];m-=P-i.height,m*=l?1:-1}if(s===dt||(s===ut||s===xt)&&o===Ke){v=yt;var D=u&&w===y&&y.visualViewport?y.visualViewport.width:w[S];f-=D-i.width,f*=l?1:-1}}var C=Object.assign({position:a},c&&$l),O=h===!0?zl({x:f,y:m},gt(n)):{x:f,y:m};if(f=O.x,m=O.y,l){var E;return Object.assign({},C,(E={},E[_]=x?"0":"",E[v]=b?"0":"",E.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",E))}return Object.assign({},C,(t={},t[_]=x?m+"px":"",t[v]=b?f+"px":"",t.transform="",t))}function Nl(e){var t=e.state,n=e.options,i=n.gpuAcceleration,s=i===void 0?!0:i,o=n.adaptive,r=o===void 0?!0:o,a=n.roundOffsets,l=a===void 0?!0:a,c={placement:Pt(t.placement),variation:Me(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:s,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Ss(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:r,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Ss(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const Bl={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:Nl,data:{}};var dn={passive:!0};function Hl(e){var t=e.state,n=e.instance,i=e.options,s=i.scroll,o=s===void 0?!0:s,r=i.resize,a=r===void 0?!0:r,l=gt(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&c.forEach(function(h){h.addEventListener("scroll",n.update,dn)}),a&&l.addEventListener("resize",n.update,dn),function(){o&&c.forEach(function(h){h.removeEventListener("scroll",n.update,dn)}),a&&l.removeEventListener("resize",n.update,dn)}}const Wl={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:Hl,data:{}};var Vl={left:"right",right:"left",bottom:"top",top:"bottom"};function En(e){return e.replace(/left|right|bottom|top/g,function(t){return Vl[t]})}var Yl={start:"end",end:"start"};function ks(e){return e.replace(/start|end/g,function(t){return Yl[t]})}function ji(e){var t=gt(e),n=t.pageXOffset,i=t.pageYOffset;return{scrollLeft:n,scrollTop:i}}function $i(e){return ke(Gt(e)).left+ji(e).scrollLeft}function Ul(e,t){var n=gt(e),i=Gt(e),s=n.visualViewport,o=i.clientWidth,r=i.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=mr();(c||!c&&t==="fixed")&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+$i(e),y:l}}function Xl(e){var t,n=Gt(e),i=ji(e),s=(t=e.ownerDocument)==null?void 0:t.body,o=ce(n.scrollWidth,n.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ce(n.scrollHeight,n.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-i.scrollLeft+$i(e),l=-i.scrollTop;return jt(s||n).direction==="rtl"&&(a+=ce(n.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}function zi(e){var t=jt(e),n=t.overflow,i=t.overflowX,s=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+s+i)}function _r(e){return["html","body","#document"].indexOf(Ut(e))>=0?e.ownerDocument.body:Ot(e)&&zi(e)?e:_r(Un(e))}function We(e,t){var n;t===void 0&&(t=[]);var i=_r(e),s=i===((n=e.ownerDocument)==null?void 0:n.body),o=gt(i),r=s?[o].concat(o.visualViewport||[],zi(i)?i:[]):i,a=t.concat(r);return s?a:a.concat(We(Un(r)))}function vi(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function Kl(e,t){var n=ke(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function Ms(e,t,n){return t===pr?vi(Ul(e,n)):de(t)?Kl(t,n):vi(Xl(Gt(e)))}function ql(e){var t=We(Un(e)),n=["absolute","fixed"].indexOf(jt(e).position)>=0,i=n&&Ot(e)?rn(e):e;return de(i)?t.filter(function(s){return de(s)&&br(s,i)&&Ut(s)!=="body"}):[]}function Gl(e,t,n,i){var s=t==="clippingParents"?ql(e):[].concat(t),o=[].concat(s,[n]),r=o[0],a=o.reduce(function(l,c){var h=Ms(e,c,i);return l.top=ce(h.top,l.top),l.right=Ln(h.right,l.right),l.bottom=Ln(h.bottom,l.bottom),l.left=ce(h.left,l.left),l},Ms(e,r,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function wr(e){var t=e.reference,n=e.element,i=e.placement,s=i?Pt(i):null,o=i?Me(i):null,r=t.x+t.width/2-n.width/2,a=t.y+t.height/2-n.height/2,l;switch(s){case ut:l={x:r,y:t.y-n.height};break;case xt:l={x:r,y:t.y+t.height};break;case yt:l={x:t.x+t.width,y:a};break;case dt:l={x:t.x-n.width,y:a};break;default:l={x:t.x,y:t.y}}var c=s?Ii(s):null;if(c!=null){var h=c==="y"?"height":"width";switch(o){case we:l[c]=l[c]-(t[h]/2-n[h]/2);break;case Ke:l[c]=l[c]+(t[h]/2-n[h]/2);break}}return l}function qe(e,t){t===void 0&&(t={});var n=t,i=n.placement,s=i===void 0?e.placement:i,o=n.strategy,r=o===void 0?e.strategy:o,a=n.boundary,l=a===void 0?yl:a,c=n.rootBoundary,h=c===void 0?pr:c,u=n.elementContext,d=u===void 0?Te:u,f=n.altBoundary,g=f===void 0?!1:f,m=n.padding,p=m===void 0?0:m,b=yr(typeof p!="number"?p:vr(p,on)),x=d===Te?vl:Te,v=e.rects.popper,_=e.elements[g?x:d],y=Gl(de(_)?_:_.contextElement||Gt(e.elements.popper),l,h,r),w=ke(e.elements.reference),k=wr({reference:w,element:v,strategy:"absolute",placement:s}),S=vi(Object.assign({},v,k)),P=d===Te?S:w,D={top:y.top-P.top+b.top,bottom:P.bottom-y.bottom+b.bottom,left:y.left-P.left+b.left,right:P.right-y.right+b.right},C=e.modifiersData.offset;if(d===Te&&C){var O=C[s];Object.keys(D).forEach(function(E){var F=[yt,xt].indexOf(E)>=0?1:-1,R=[ut,xt].indexOf(E)>=0?"y":"x";D[E]+=O[R]*F})}return D}function Jl(e,t){t===void 0&&(t={});var n=t,i=n.placement,s=n.boundary,o=n.rootBoundary,r=n.padding,a=n.flipVariations,l=n.allowedAutoPlacements,c=l===void 0?gr:l,h=Me(i),u=h?a?_s:_s.filter(function(g){return Me(g)===h}):on,d=u.filter(function(g){return c.indexOf(g)>=0});d.length===0&&(d=u);var f=d.reduce(function(g,m){return g[m]=qe(e,{placement:m,boundary:s,rootBoundary:o,padding:r})[Pt(m)],g},{});return Object.keys(f).sort(function(g,m){return f[g]-f[m]})}function Zl(e){if(Pt(e)===Ri)return[];var t=En(e);return[ks(e),t,ks(t)]}function Ql(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var s=n.mainAxis,o=s===void 0?!0:s,r=n.altAxis,a=r===void 0?!0:r,l=n.fallbackPlacements,c=n.padding,h=n.boundary,u=n.rootBoundary,d=n.altBoundary,f=n.flipVariations,g=f===void 0?!0:f,m=n.allowedAutoPlacements,p=t.options.placement,b=Pt(p),x=b===p,v=l||(x||!g?[En(p)]:Zl(p)),_=[p].concat(v).reduce(function(U,X){return U.concat(Pt(X)===Ri?Jl(t,{placement:X,boundary:h,rootBoundary:u,padding:c,flipVariations:g,allowedAutoPlacements:m}):X)},[]),y=t.rects.reference,w=t.rects.popper,k=new Map,S=!0,P=_[0],D=0;D<_.length;D++){var C=_[D],O=Pt(C),E=Me(C)===we,F=[ut,xt].indexOf(O)>=0,R=F?"width":"height",L=qe(t,{placement:C,boundary:h,rootBoundary:u,altBoundary:d,padding:c}),I=F?E?yt:dt:E?xt:ut;y[R]>w[R]&&(I=En(I));var Y=En(I),$=[];if(o&&$.push(L[O]<=0),a&&$.push(L[I]<=0,L[Y]<=0),$.every(function(U){return U})){P=C,S=!1;break}k.set(C,$)}if(S)for(var N=g?3:1,tt=function(X){var q=_.find(function(At){var B=k.get(At);if(B)return B.slice(0,X).every(function(et){return et})});if(q)return P=q,"break"},Q=N;Q>0;Q--){var nt=tt(Q);if(nt==="break")break}t.placement!==P&&(t.modifiersData[i]._skip=!0,t.placement=P,t.reset=!0)}}const tc={name:"flip",enabled:!0,phase:"main",fn:Ql,requiresIfExists:["offset"],data:{_skip:!1}};function Cs(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Ps(e){return[ut,yt,xt,dt].some(function(t){return e[t]>=0})}function ec(e){var t=e.state,n=e.name,i=t.rects.reference,s=t.rects.popper,o=t.modifiersData.preventOverflow,r=qe(t,{elementContext:"reference"}),a=qe(t,{altBoundary:!0}),l=Cs(r,i),c=Cs(a,s,o),h=Ps(l),u=Ps(c);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":u})}const nc={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:ec};function ic(e,t,n){var i=Pt(e),s=[dt,ut].indexOf(i)>=0?-1:1,o=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[dt,yt].indexOf(i)>=0?{x:a,y:r}:{x:r,y:a}}function sc(e){var t=e.state,n=e.options,i=e.name,s=n.offset,o=s===void 0?[0,0]:s,r=gr.reduce(function(h,u){return h[u]=ic(u,t.rects,o),h},{}),a=r[t.placement],l=a.x,c=a.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=c),t.modifiersData[i]=r}const oc={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:sc};function rc(e){var t=e.state,n=e.name;t.modifiersData[n]=wr({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const ac={name:"popperOffsets",enabled:!0,phase:"read",fn:rc,data:{}};function lc(e){return e==="x"?"y":"x"}function cc(e){var t=e.state,n=e.options,i=e.name,s=n.mainAxis,o=s===void 0?!0:s,r=n.altAxis,a=r===void 0?!1:r,l=n.boundary,c=n.rootBoundary,h=n.altBoundary,u=n.padding,d=n.tether,f=d===void 0?!0:d,g=n.tetherOffset,m=g===void 0?0:g,p=qe(t,{boundary:l,rootBoundary:c,padding:u,altBoundary:h}),b=Pt(t.placement),x=Me(t.placement),v=!x,_=Ii(b),y=lc(_),w=t.modifiersData.popperOffsets,k=t.rects.reference,S=t.rects.popper,P=typeof m=="function"?m(Object.assign({},t.rects,{placement:t.placement})):m,D=typeof P=="number"?{mainAxis:P,altAxis:P}:Object.assign({mainAxis:0,altAxis:0},P),C=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,O={x:0,y:0};if(w){if(o){var E,F=_==="y"?ut:dt,R=_==="y"?xt:yt,L=_==="y"?"height":"width",I=w[_],Y=I+p[F],$=I-p[R],N=f?-S[L]/2:0,tt=x===we?k[L]:S[L],Q=x===we?-S[L]:-k[L],nt=t.elements.arrow,U=f&&nt?Fi(nt):{width:0,height:0},X=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:xr(),q=X[F],At=X[R],B=He(0,k[L],U[L]),et=v?k[L]/2-N-B-q-D.mainAxis:tt-B-q-D.mainAxis,Ee=v?-k[L]/2+N+B+At+D.mainAxis:Q+B+At+D.mainAxis,zt=t.elements.arrow&&rn(t.elements.arrow),Jt=zt?_==="y"?zt.clientTop||0:zt.clientLeft||0:0,Zt=(E=C==null?void 0:C[_])!=null?E:0,lt=I+et-Zt-Jt,Ia=I+Ee-Zt,ls=He(f?Ln(Y,lt):Y,I,f?ce($,Ia):$);w[_]=ls,O[_]=ls-I}if(a){var cs,ja=_==="x"?ut:dt,$a=_==="x"?xt:yt,Qt=w[y],hn=y==="y"?"height":"width",hs=Qt+p[ja],us=Qt-p[$a],Gn=[ut,dt].indexOf(b)!==-1,ds=(cs=C==null?void 0:C[y])!=null?cs:0,fs=Gn?hs:Qt-k[hn]-S[hn]-ds+D.altAxis,ps=Gn?Qt+k[hn]+S[hn]-ds-D.altAxis:us,gs=f&&Gn?Rl(fs,Qt,ps):He(f?fs:hs,Qt,f?ps:us);w[y]=gs,O[y]=gs-Qt}t.modifiersData[i]=O}}const hc={name:"preventOverflow",enabled:!0,phase:"main",fn:cc,requiresIfExists:["offset"]};function uc(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function dc(e){return e===gt(e)||!Ot(e)?ji(e):uc(e)}function fc(e){var t=e.getBoundingClientRect(),n=Se(t.width)/e.offsetWidth||1,i=Se(t.height)/e.offsetHeight||1;return n!==1||i!==1}function pc(e,t,n){n===void 0&&(n=!1);var i=Ot(t),s=Ot(t)&&fc(t),o=Gt(t),r=ke(e,s,n),a={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(i||!i&&!n)&&((Ut(t)!=="body"||zi(o))&&(a=dc(t)),Ot(t)?(l=ke(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):o&&(l.x=$i(o))),{x:r.left+a.scrollLeft-l.x,y:r.top+a.scrollTop-l.y,width:r.width,height:r.height}}function gc(e){var t=new Map,n=new Set,i=[];e.forEach(function(o){t.set(o.name,o)});function s(o){n.add(o.name);var r=[].concat(o.requires||[],o.requiresIfExists||[]);r.forEach(function(a){if(!n.has(a)){var l=t.get(a);l&&s(l)}}),i.push(o)}return e.forEach(function(o){n.has(o.name)||s(o)}),i}function mc(e){var t=gc(e);return Al.reduce(function(n,i){return n.concat(t.filter(function(s){return s.phase===i}))},[])}function bc(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function xc(e){var t=e.reduce(function(n,i){var s=n[i.name];return n[i.name]=s?Object.assign({},s,i,{options:Object.assign({},s.options,i.options),data:Object.assign({},s.data,i.data)}):i,n},{});return Object.keys(t).map(function(n){return t[n]})}var Os={placement:"bottom",modifiers:[],strategy:"absolute"};function Ds(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some(function(i){return!(i&&typeof i.getBoundingClientRect=="function")})}function yc(e){e===void 0&&(e={});var t=e,n=t.defaultModifiers,i=n===void 0?[]:n,s=t.defaultOptions,o=s===void 0?Os:s;return function(a,l,c){c===void 0&&(c=o);var h={placement:"bottom",orderedModifiers:[],options:Object.assign({},Os,o),modifiersData:{},elements:{reference:a,popper:l},attributes:{},styles:{}},u=[],d=!1,f={state:h,setOptions:function(b){var x=typeof b=="function"?b(h.options):b;m(),h.options=Object.assign({},o,h.options,x),h.scrollParents={reference:de(a)?We(a):a.contextElement?We(a.contextElement):[],popper:We(l)};var v=mc(xc([].concat(i,h.options.modifiers)));return h.orderedModifiers=v.filter(function(_){return _.enabled}),g(),f.update()},forceUpdate:function(){if(!d){var b=h.elements,x=b.reference,v=b.popper;if(Ds(x,v)){h.rects={reference:pc(x,rn(v),h.options.strategy==="fixed"),popper:Fi(v)},h.reset=!1,h.placement=h.options.placement,h.orderedModifiers.forEach(function(D){return h.modifiersData[D.name]=Object.assign({},D.data)});for(var _=0;_<h.orderedModifiers.length;_++){if(h.reset===!0){h.reset=!1,_=-1;continue}var y=h.orderedModifiers[_],w=y.fn,k=y.options,S=k===void 0?{}:k,P=y.name;typeof w=="function"&&(h=w({state:h,options:S,name:P,instance:f})||h)}}}},update:bc(function(){return new Promise(function(p){f.forceUpdate(),p(h)})}),destroy:function(){m(),d=!0}};if(!Ds(a,l))return f;f.setOptions(c).then(function(p){!d&&c.onFirstUpdate&&c.onFirstUpdate(p)});function g(){h.orderedModifiers.forEach(function(p){var b=p.name,x=p.options,v=x===void 0?{}:x,_=p.effect;if(typeof _=="function"){var y=_({state:h,name:b,instance:f,options:v}),w=function(){};u.push(y||w)}})}function m(){u.forEach(function(p){return p()}),u=[]}return f}}const vc=yc({defaultModifiers:[nc,ac,Bl,Wl,oc,tc,hc,jl]}),_c=["enabled","placement","strategy","modifiers"];function wc(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}const Sc={name:"applyStyles",enabled:!1,phase:"afterWrite",fn:()=>{}},kc={name:"ariaDescribedBy",enabled:!0,phase:"afterWrite",effect:({state:e})=>()=>{const{reference:t,popper:n}=e.elements;if("removeAttribute"in t){const i=(t.getAttribute("aria-describedby")||"").split(",").filter(s=>s.trim()!==n.id);i.length?t.setAttribute("aria-describedby",i.join(",")):t.removeAttribute("aria-describedby")}},fn:({state:e})=>{var t;const{popper:n,reference:i}=e.elements,s=(t=n.getAttribute("role"))==null?void 0:t.toLowerCase();if(n.id&&s==="tooltip"&&"setAttribute"in i){const o=i.getAttribute("aria-describedby");if(o&&o.split(",").indexOf(n.id)!==-1)return;i.setAttribute("aria-describedby",o?`${o},${n.id}`:n.id)}}},Mc=[];function Cc(e,t,n={}){let{enabled:i=!0,placement:s="bottom",strategy:o="absolute",modifiers:r=Mc}=n,a=wc(n,_c);const l=A.useRef(r),c=A.useRef(),h=A.useCallback(()=>{var p;(p=c.current)==null||p.update()},[]),u=A.useCallback(()=>{var p;(p=c.current)==null||p.forceUpdate()},[]),[d,f]=xl(A.useState({placement:s,update:h,forceUpdate:u,attributes:{},styles:{popper:{},arrow:{}}})),g=A.useMemo(()=>({name:"updateStateModifier",enabled:!0,phase:"write",requires:["computeStyles"],fn:({state:p})=>{const b={},x={};Object.keys(p.elements).forEach(v=>{b[v]=p.styles[v],x[v]=p.attributes[v]}),f({state:p,styles:b,attributes:x,update:h,forceUpdate:u,placement:p.placement})}}),[h,u,f]),m=A.useMemo(()=>(Be(l.current,r)||(l.current=r),l.current),[r]);return A.useEffect(()=>{!c.current||!i||c.current.setOptions({placement:s,strategy:o,modifiers:[...m,g,Sc]})},[o,s,g,i,m]),A.useEffect(()=>{if(!(!i||e==null||t==null))return c.current=vc(e,t,Object.assign({},a,{placement:s,strategy:o,modifiers:[...m,kc,g]})),()=>{c.current!=null&&(c.current.destroy(),c.current=void 0,f(p=>Object.assign({},p,{attributes:{},styles:{popper:{}}})))}},[i,e,t]),d}const As=()=>{};function Pc(e){return e.button===0}function Oc(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}const Qn=e=>e&&("current"in e?e.current:e),Es={click:"mousedown",mouseup:"mousedown",pointerup:"pointerdown"};function Dc(e,t=As,{disabled:n,clickTrigger:i="click"}={}){const s=A.useRef(!1),o=A.useRef(!1),r=A.useCallback(c=>{const h=Qn(e);Wa(!!h,"ClickOutside captured a close event but does not have a ref to compare it to. useClickOutside(), should be passed a ref that resolves to a DOM node"),s.current=!h||Oc(c)||!Pc(c)||!!ms(h,c.target)||o.current,o.current=!1},[e]),a=Vt(c=>{const h=Qn(e);h&&ms(h,c.target)?o.current=!0:o.current=!1}),l=Vt(c=>{s.current||t(c)});A.useEffect(()=>{var c,h;if(n||e==null)return;const u=Va(Qn(e)),d=u.defaultView||window;let f=(c=d.event)!=null?c:(h=d.parent)==null?void 0:h.event,g=null;Es[i]&&(g=un(u,Es[i],a,!0));const m=un(u,i,r,!0),p=un(u,i,x=>{if(x===f){f=void 0;return}l(x)});let b=[];return"ontouchstart"in u.documentElement&&(b=[].slice.call(u.body.children).map(x=>un(x,"mousemove",As))),()=>{g==null||g(),m(),p(),b.forEach(x=>x())}},[e,n,i,r,a,l])}function Ac(e){const t={};return Array.isArray(e)?(e==null||e.forEach(n=>{t[n.name]=n}),t):e||t}function Ec(e={}){return Array.isArray(e)?e:Object.keys(e).map(t=>(e[t].name=t,e[t]))}function Tc({enabled:e,enableEvents:t,placement:n,flip:i,offset:s,fixed:o,containerPadding:r,arrowElement:a,popperConfig:l={}}){var c,h,u,d,f;const g=Ac(l.modifiers);return Object.assign({},l,{placement:n,enabled:e,strategy:o?"fixed":l.strategy,modifiers:Ec(Object.assign({},g,{eventListeners:{enabled:t,options:(c=g.eventListeners)==null?void 0:c.options},preventOverflow:Object.assign({},g.preventOverflow,{options:r?Object.assign({padding:r},(h=g.preventOverflow)==null?void 0:h.options):(u=g.preventOverflow)==null?void 0:u.options}),offset:{options:Object.assign({offset:s},(d=g.offset)==null?void 0:d.options)},arrow:Object.assign({},g.arrow,{enabled:!!a,options:Object.assign({},(f=g.arrow)==null?void 0:f.options,{element:a})}),flip:Object.assign({enabled:!!i},g.flip)}))})}const Rc=["children","usePopper"];function Lc(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}const Fc=()=>{};function Sr(e={}){const t=A.useContext(Yn),[n,i]=ul(),s=A.useRef(!1),{flip:o,offset:r,rootCloseEvent:a,fixed:l=!1,placement:c,popperConfig:h={},enableEventListeners:u=!0,usePopper:d=!!t}=e,f=(t==null?void 0:t.show)==null?!!e.show:t.show;f&&!s.current&&(s.current=!0);const g=w=>{t==null||t.toggle(!1,w)},{placement:m,setMenu:p,menuElement:b,toggleElement:x}=t||{},v=Cc(x,b,Tc({placement:c||m||"bottom-start",enabled:d,enableEvents:u??f,offset:r,flip:o,fixed:l,arrowElement:n,popperConfig:h})),_=Object.assign({ref:p||Fc,"aria-labelledby":x==null?void 0:x.id},v.attributes.popper,{style:v.styles.popper}),y={show:f,placement:m,hasShown:s.current,toggle:t==null?void 0:t.toggle,popper:d?v:null,arrowProps:d?Object.assign({ref:i},v.attributes.arrow,{style:v.styles.arrow}):{}};return Dc(b,g,{clickTrigger:a,disabled:!f}),[_,y]}function kr(e){let{children:t,usePopper:n=!0}=e,i=Lc(e,Rc);const[s,o]=Sr(Object.assign({},i,{usePopper:n}));return M.jsx(M.Fragment,{children:t(s,o)})}kr.displayName="DropdownMenu";const Ni={prefix:String(Math.round(Math.random()*1e10)),current:0},Mr=ue.createContext(Ni),Ic=ue.createContext(!1);let jc=!!(typeof window<"u"&&window.document&&window.document.createElement),ti=new WeakMap;function $c(e=!1){let t=A.useContext(Mr),n=A.useRef(null);if(n.current===null&&!e){var i,s;let o=(s=ue.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)===null||s===void 0||(i=s.ReactCurrentOwner)===null||i===void 0?void 0:i.current;if(o){let r=ti.get(o);r==null?ti.set(o,{id:t.current,state:o.memoizedState}):o.memoizedState!==r.state&&(t.current=r.id,ti.delete(o))}n.current=++t.current}return n.current}function zc(e){let t=A.useContext(Mr);t===Ni&&!jc&&console.warn("When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.");let n=$c(!!e),i=`react-aria${t.prefix}`;return e||`${i}-${n}`}function Nc(e){let t=ue.useId(),[n]=A.useState(Yc()),i=n?"react-aria":`react-aria${Ni.prefix}`;return e||`${i}-${t}`}const Bc=typeof ue.useId=="function"?Nc:zc;function Hc(){return!1}function Wc(){return!0}function Vc(e){return()=>{}}function Yc(){return typeof ue.useSyncExternalStore=="function"?ue.useSyncExternalStore(Vc,Hc,Wc):A.useContext(Ic)}const Cr=e=>{var t;return((t=e.getAttribute("role"))==null?void 0:t.toLowerCase())==="menu"},Ts=()=>{};function Pr(){const e=Bc(),{show:t=!1,toggle:n=Ts,setToggle:i,menuElement:s}=A.useContext(Yn)||{},o=A.useCallback(a=>{n(!t,a)},[t,n]),r={id:e,ref:i||Ts,onClick:o,"aria-expanded":!!t};return s&&Cr(s)&&(r["aria-haspopup"]=!0),[r,{show:t,toggle:n}]}function Or({children:e}){const[t,n]=Pr();return M.jsx(M.Fragment,{children:e(t,n)})}Or.displayName="DropdownToggle";const _i=A.createContext(null),Rs=(e,t=null)=>e!=null?String(e):t||null,Dr=A.createContext(null);Dr.displayName="NavContext";const Uc=["eventKey","disabled","onClick","active","as"];function Xc(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}function Ar({key:e,href:t,active:n,disabled:i,onClick:s}){const o=A.useContext(_i),r=A.useContext(Dr),{activeKey:a}=r||{},l=Rs(e,t),c=n==null&&e!=null?Rs(a)===l:n;return[{onClick:Vt(u=>{i||(s==null||s(u),o&&!u.isPropagationStopped()&&o(l,u))}),"aria-disabled":i||void 0,"aria-selected":c,[ar("dropdown-item")]:""},{isActive:c}]}const Er=A.forwardRef((e,t)=>{let{eventKey:n,disabled:i,onClick:s,active:o,as:r=Ya}=e,a=Xc(e,Uc);const[l]=Ar({key:n,href:a.href,disabled:i,onClick:s,active:o});return M.jsx(r,Object.assign({},a,{ref:t},l))});Er.displayName="DropdownItem";function Ls(){const e=bl(),t=A.useRef(null),n=A.useCallback(i=>{t.current=i,e()},[e]);return[t,n]}function an({defaultShow:e,show:t,onSelect:n,onToggle:i,itemSelector:s=`* [${ar("dropdown-item")}]`,focusFirstItemOnShow:o,placement:r="bottom-start",children:a}){const l=Ua(),[c,h]=ml(t,e,i),[u,d]=Ls(),f=u.current,[g,m]=Ls(),p=g.current,b=Xa(c),x=A.useRef(null),v=A.useRef(!1),_=A.useContext(_i),y=A.useCallback((C,O,E=O==null?void 0:O.type)=>{h(C,{originalEvent:O,source:E})},[h]),w=Vt((C,O)=>{n==null||n(C,O),y(!1,O,"select"),O.isPropagationStopped()||_==null||_(C,O)}),k=A.useMemo(()=>({toggle:y,placement:r,show:c,menuElement:f,toggleElement:p,setMenu:d,setToggle:m}),[y,r,c,f,p,d,m]);f&&b&&!c&&(v.current=f.contains(f.ownerDocument.activeElement));const S=Vt(()=>{p&&p.focus&&p.focus()}),P=Vt(()=>{const C=x.current;let O=o;if(O==null&&(O=u.current&&Cr(u.current)?"keyboard":!1),O===!1||O==="keyboard"&&!/^key.+$/.test(C))return;const E=bs(u.current,s)[0];E&&E.focus&&E.focus()});A.useEffect(()=>{c?P():v.current&&(v.current=!1,S())},[c,v,S,P]),A.useEffect(()=>{x.current=null});const D=(C,O)=>{if(!u.current)return null;const E=bs(u.current,s);let F=E.indexOf(C)+O;return F=Math.max(0,Math.min(F,E.length)),E[F]};return dl(A.useCallback(()=>l.document,[l]),"keydown",C=>{var O,E;const{key:F}=C,R=C.target,L=(O=u.current)==null?void 0:O.contains(R),I=(E=g.current)==null?void 0:E.contains(R);if(/input|textarea/i.test(R.tagName)&&(F===" "||F!=="Escape"&&L||F==="Escape"&&R.type==="search")||!L&&!I||F==="Tab"&&(!u.current||!c))return;x.current=C.type;const $={originalEvent:C,source:C.type};switch(F){case"ArrowUp":{const N=D(R,-1);N&&N.focus&&N.focus(),C.preventDefault();return}case"ArrowDown":if(C.preventDefault(),!c)h(!0,$);else{const N=D(R,1);N&&N.focus&&N.focus()}return;case"Tab":Ka(R.ownerDocument,"keyup",N=>{var tt;(N.key==="Tab"&&!N.target||!((tt=u.current)!=null&&tt.contains(N.target)))&&h(!1,$)},{once:!0});break;case"Escape":F==="Escape"&&(C.preventDefault(),C.stopPropagation()),h(!1,$);break}}),M.jsx(_i.Provider,{value:w,children:M.jsx(Yn.Provider,{value:k,children:a})})}an.displayName="Dropdown";an.Menu=kr;an.Toggle=Or;an.Item=Er;const Bi=A.createContext({});Bi.displayName="DropdownContext";const Tr=A.forwardRef(({className:e,bsPrefix:t,as:n="hr",role:i="separator",...s},o)=>(t=Kt(t,"dropdown-divider"),M.jsx(n,{ref:o,className:qt(e,t),role:i,...s})));Tr.displayName="DropdownDivider";const Rr=A.forwardRef(({className:e,bsPrefix:t,as:n="div",role:i="heading",...s},o)=>(t=Kt(t,"dropdown-header"),M.jsx(n,{ref:o,className:qt(e,t),role:i,...s})));Rr.displayName="DropdownHeader";const Lr=A.forwardRef(({bsPrefix:e,className:t,eventKey:n,disabled:i=!1,onClick:s,active:o,as:r=fr,...a},l)=>{const c=Kt(e,"dropdown-item"),[h,u]=Ar({key:n,href:a.href,disabled:i,onClick:s,active:o});return M.jsx(r,{...a,...h,ref:l,className:qt(t,c,u.isActive&&"active",i&&"disabled")})});Lr.displayName="DropdownItem";const Fr=A.forwardRef(({className:e,bsPrefix:t,as:n="span",...i},s)=>(t=Kt(t,"dropdown-item-text"),M.jsx(n,{ref:s,className:qt(e,t),...i})));Fr.displayName="DropdownItemText";const Kc=typeof global<"u"&&global.navigator&&global.navigator.product==="ReactNative",qc=typeof document<"u",Gc=qc||Kc?A.useLayoutEffect:A.useEffect,Ir=A.createContext(null);Ir.displayName="NavbarContext";function jr(e,t){return e}function $r(e,t,n){const i=n?"top-end":"top-start",s=n?"top-start":"top-end",o=n?"bottom-end":"bottom-start",r=n?"bottom-start":"bottom-end",a=n?"right-start":"left-start",l=n?"right-end":"left-end",c=n?"left-start":"right-start",h=n?"left-end":"right-end";let u=e?r:o;return t==="up"?u=e?s:i:t==="end"?u=e?h:c:t==="start"?u=e?l:a:t==="down-centered"?u="bottom":t==="up-centered"&&(u="top"),u}const zr=A.forwardRef(({bsPrefix:e,className:t,align:n,rootCloseEvent:i,flip:s=!0,show:o,renderOnMount:r,as:a="div",popperConfig:l,variant:c,...h},u)=>{let d=!1;const f=A.useContext(Ir),g=Kt(e,"dropdown-menu"),{align:m,drop:p,isRTL:b}=A.useContext(Bi);n=n||m;const x=A.useContext(ur),v=[];if(n)if(typeof n=="object"){const C=Object.keys(n);if(C.length){const O=C[0],E=n[O];d=E==="start",v.push(`${g}-${O}-${E}`)}}else n==="end"&&(d=!0);const _=$r(d,p,b),[y,{hasShown:w,popper:k,show:S,toggle:P}]=Sr({flip:s,rootCloseEvent:i,show:o,usePopper:!f&&v.length===0,offset:[0,2],popperConfig:l,placement:_});if(y.ref=lr(jr(u),y.ref),Gc(()=>{S&&(k==null||k.update())},[S]),!w&&!r&&!x)return null;typeof a!="string"&&(y.show=S,y.close=()=>P==null?void 0:P(!1),y.align=n);let D=h.style;return k!=null&&k.placement&&(D={...h.style,...y.style},h["x-placement"]=k.placement),M.jsx(a,{...h,...y,style:D,...(v.length||f)&&{"data-bs-popper":"static"},className:qt(t,g,S&&"show",d&&`${g}-end`,c&&`${g}-${c}`,...v)})});zr.displayName="DropdownMenu";const Nr=A.forwardRef(({bsPrefix:e,split:t,className:n,childBsPrefix:i,as:s=Ft,...o},r)=>{const a=Kt(e,"dropdown-toggle"),l=A.useContext(Yn);i!==void 0&&(o.bsPrefix=i);const[c]=Pr();return c.ref=lr(c.ref,jr(r)),M.jsx(s,{className:qt(n,a,t&&`${a}-split`,(l==null?void 0:l.show)&&"show"),...c,...o})});Nr.displayName="DropdownToggle";const Br=A.forwardRef((e,t)=>{const{bsPrefix:n,drop:i="down",show:s,className:o,align:r="start",onSelect:a,onToggle:l,focusFirstItemOnShow:c,as:h="div",navbar:u,autoClose:d=!0,...f}=hl(e,{show:"onToggle"}),g=A.useContext(ur),m=Kt(n,"dropdown"),p=qa(),b=k=>d===!1?k==="click":d==="inside"?k!=="rootClose":d==="outside"?k!=="select":!0,x=Ga((k,S)=>{var P;!((P=S.originalEvent)==null||(P=P.target)==null)&&P.classList.contains("dropdown-toggle")&&S.source==="mousedown"||(S.originalEvent.currentTarget===document&&(S.source!=="keydown"||S.originalEvent.key==="Escape")&&(S.source="rootClose"),b(S.source)&&(l==null||l(k,S)))}),_=$r(r==="end",i,p),y=A.useMemo(()=>({align:r,drop:i,isRTL:p}),[r,i,p]),w={down:m,"down-centered":`${m}-center`,up:"dropup","up-centered":"dropup-center dropup",end:"dropend",start:"dropstart"};return M.jsx(Bi.Provider,{value:y,children:M.jsx(an,{placement:_,show:s,onSelect:a,onToggle:x,focusFirstItemOnShow:c,itemSelector:`.${m}-item:not(.disabled):not(:disabled)`,children:g?f.children:M.jsx(h,{...f,ref:t,className:qt(o,s&&"show",w[i])})})})});Br.displayName="Dropdown";const ei=Object.assign(Br,{Toggle:Nr,Menu:zr,Item:Lr,ItemText:Fr,Divider:Tr,Header:Rr});/*!
  * @kurkle/color v0.3.2
  * https://github.com/kurkle/color#readme
  * (c) 2023 Jukka Kurkela
@@ -15,6 +15,6 @@ var za=Object.defineProperty;var Na=(e,t,n)=>t in e?za(e,t,{enumerable:!0,config
  * Released under the MIT License
  */class Bu{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,n,i,s){const o=n.listeners[s],r=n.duration;o.forEach(a=>a({chart:t,initial:n.initial,numSteps:r,currentStep:Math.min(i-n.start,r)}))}_refresh(){this._request||(this._running=!0,this._request=qr.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let n=0;this._charts.forEach((i,s)=>{if(!i.running||!i.items.length)return;const o=i.items;let r=o.length-1,a=!1,l;for(;r>=0;--r)l=o[r],l._active?(l._total>i.duration&&(i.duration=l._total),l.tick(t),a=!0):(o[r]=o[o.length-1],o.pop());a&&(s.draw(),this._notify(s,i,t,"progress")),o.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),n+=o.length}),this._lastDate=t,n===0&&(this._running=!1)}_getAnims(t){const n=this._charts;let i=n.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},n.set(t,i)),i}listen(t,n,i){this._getAnims(t).listeners[n].push(i)}add(t,n){!n||!n.length||this._getAnims(t).items.push(...n)}has(t){return this._getAnims(t).items.length>0}start(t){const n=this._charts.get(t);n&&(n.running=!0,n.start=Date.now(),n.duration=n.items.reduce((i,s)=>Math.max(i,s._duration),0),this._refresh())}running(t){if(!this._running)return!1;const n=this._charts.get(t);return!(!n||!n.running||!n.items.length)}stop(t){const n=this._charts.get(t);if(!n||!n.items.length)return;const i=n.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();n.items=[],this._notify(t,n,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var Tt=new Bu;const so="transparent",Hu={boolean(e,t,n){return n>.5?t:e},color(e,t,n){const i=Xs(e||so),s=i.valid&&Xs(t||so);return s&&s.valid?s.mix(i,n).hexString():t},number(e,t,n){return e+(t-e)*n}};class Wu{constructor(t,n,i,s){const o=n[i];s=bn([t.to,s,o,t.from]);const r=bn([t.from,o,s]);this._active=!0,this._fn=t.fn||Hu[t.type||typeof r],this._easing=Ue[t.easing]||Ue.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=n,this._prop=i,this._from=r,this._to=s,this._promises=void 0}active(){return this._active}update(t,n,i){if(this._active){this._notify(!1);const s=this._target[this._prop],o=i-this._start,r=this._duration-o;this._start=i,this._duration=Math.floor(Math.max(r,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=bn([t.to,n,s,t.from]),this._from=bn([t.from,s,n])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const n=t-this._start,i=this._duration,s=this._prop,o=this._from,r=this._loop,a=this._to;let l;if(this._active=o!==a&&(r||n<i),!this._active){this._target[s]=a,this._notify(!0);return}if(n<0){this._target[s]=o;return}l=n/i%2,l=r&&l>1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[s]=this._fn(o,a,l)}wait(){const t=this._promises||(this._promises=[]);return new Promise((n,i)=>{t.push({res:n,rej:i})})}_notify(t){const n=t?"res":"rej",i=this._promises||[];for(let s=0;s<i.length;s++)i[s][n]()}}class ha{constructor(t,n){this._chart=t,this._properties=new Map,this.configure(n)}configure(t){if(!z(t))return;const n=Object.keys(K.animation),i=this._properties;Object.getOwnPropertyNames(t).forEach(s=>{const o=t[s];if(!z(o))return;const r={};for(const a of n)r[a]=o[a];(J(o.properties)&&o.properties||[s]).forEach(a=>{(a===s||!i.has(a))&&i.set(a,r)})})}_animateOptions(t,n){const i=n.options,s=Yu(t,i);if(!s)return[];const o=this._createAnimations(s,i);return i.$shared&&Vu(t.options.$animations,i).then(()=>{t.options=i},()=>{}),o}_createAnimations(t,n){const i=this._properties,s=[],o=t.$animations||(t.$animations={}),r=Object.keys(n),a=Date.now();let l;for(l=r.length-1;l>=0;--l){const c=r[l];if(c.charAt(0)==="$")continue;if(c==="options"){s.push(...this._animateOptions(t,n));continue}const h=n[c];let u=o[c];const d=i.get(c);if(u)if(d&&u.active()){u.update(d,h,a);continue}else u.cancel();if(!d||!d.duration){t[c]=h;continue}o[c]=u=new Wu(d,t,c,h),s.push(u)}return s}update(t,n){if(this._properties.size===0){Object.assign(t,n);return}const i=this._createAnimations(t,n);if(i.length)return Tt.add(this._chart,i),!0}}function Vu(e,t){const n=[],i=Object.keys(t);for(let s=0;s<i.length;s++){const o=e[i[s]];o&&o.active()&&n.push(o.wait())}return Promise.all(n)}function Yu(e,t){if(!t)return;let n=e.options;if(!n){e.options=t;return}return n.$shared&&(e.options=n=Object.assign({},n,{$shared:!1,$animations:{}})),n}function oo(e,t){const n=e&&e.options||{},i=n.reverse,s=n.min===void 0?t:0,o=n.max===void 0?t:0;return{start:i?o:s,end:i?s:o}}function Uu(e,t,n){if(n===!1)return!1;const i=oo(e,n),s=oo(t,n);return{top:s.end,right:i.end,bottom:s.start,left:i.start}}function Xu(e){let t,n,i,s;return z(e)?(t=e.top,n=e.right,i=e.bottom,s=e.left):t=n=i=s=e,{top:t,right:n,bottom:i,left:s,disabled:e===!1}}function ua(e,t){const n=[],i=e._getSortedDatasetMetas(t);let s,o;for(s=0,o=i.length;s<o;++s)n.push(i[s].index);return n}function ro(e,t,n,i={}){const s=e.keys,o=i.mode==="single";let r,a,l,c;if(t===null)return;let h=!1;for(r=0,a=s.length;r<a;++r){if(l=+s[r],l===n){if(h=!0,i.all)continue;break}c=e.values[l],vt(c)&&(o||t===0||Dt(t)===Dt(c))&&(t+=c)}return!h&&!i.all?0:t}function Ku(e,t){const{iScale:n,vScale:i}=t,s=n.axis==="x"?"x":"y",o=i.axis==="x"?"x":"y",r=Object.keys(e),a=new Array(r.length);let l,c,h;for(l=0,c=r.length;l<c;++l)h=r[l],a[l]={[s]:h,[o]:e[h]};return a}function oi(e,t){const n=e&&e.options.stacked;return n||n===void 0&&t.stack!==void 0}function qu(e,t,n){return`${e.id}.${t.id}.${n.stack||n.type}`}function Gu(e){const{min:t,max:n,minDefined:i,maxDefined:s}=e.getUserBounds();return{min:i?t:Number.NEGATIVE_INFINITY,max:s?n:Number.POSITIVE_INFINITY}}function Ju(e,t,n){const i=e[t]||(e[t]={});return i[n]||(i[n]={})}function ao(e,t,n,i){for(const s of t.getMatchingVisibleMetas(i).reverse()){const o=e[s.index];if(n&&o>0||!n&&o<0)return s.index}return null}function lo(e,t){const{chart:n,_cachedMeta:i}=e,s=n._stacks||(n._stacks={}),{iScale:o,vScale:r,index:a}=i,l=o.axis,c=r.axis,h=qu(o,r,i),u=t.length;let d;for(let f=0;f<u;++f){const g=t[f],{[l]:m,[c]:p}=g,b=g._stacks||(g._stacks={});d=b[c]=Ju(s,h,m),d[a]=p,d._top=ao(d,r,!0,i.type),d._bottom=ao(d,r,!1,i.type);const x=d._visualValues||(d._visualValues={});x[a]=p}}function ri(e,t){const n=e.scales;return Object.keys(n).filter(i=>n[i].axis===t).shift()}function Zu(e,t){return pe(e,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Qu(e,t,n){return pe(e,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:n,index:t,mode:"default",type:"data"})}function Re(e,t){const n=e.controller.index,i=e.vScale&&e.vScale.axis;if(i){t=t||e._parsed;for(const s of t){const o=s._stacks;if(!o||o[i]===void 0||o[i][n]===void 0)return;delete o[i][n],o[i]._visualValues!==void 0&&o[i]._visualValues[n]!==void 0&&delete o[i]._visualValues[n]}}}const ai=e=>e==="reset"||e==="none",co=(e,t)=>t?e:Object.assign({},e),td=(e,t,n)=>e&&!t.hidden&&t._stacked&&{keys:ua(n,!0),values:null};class _e{constructor(t,n){this.chart=t,this._ctx=t.ctx,this.index=n,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=oi(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Re(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,n=this._cachedMeta,i=this.getDataset(),s=(u,d,f,g)=>u==="x"?d:u==="r"?g:f,o=n.xAxisID=j(i.xAxisID,ri(t,"x")),r=n.yAxisID=j(i.yAxisID,ri(t,"y")),a=n.rAxisID=j(i.rAxisID,ri(t,"r")),l=n.indexAxis,c=n.iAxisID=s(l,o,r,a),h=n.vAxisID=s(l,r,o,a);n.xScale=this.getScaleForId(o),n.yScale=this.getScaleForId(r),n.rScale=this.getScaleForId(a),n.iScale=this.getScaleForId(c),n.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const n=this._cachedMeta;return t===n.iScale?n.vScale:n.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&Vs(this._data,this),t._stacked&&Re(t)}_dataCheck(){const t=this.getDataset(),n=t.data||(t.data=[]),i=this._data;if(z(n)){const s=this._cachedMeta;this._data=Ku(n,s)}else if(i!==n){if(i){Vs(i,this);const s=this._cachedMeta;Re(s),s._parsed=[]}n&&Object.isExtensible(n)&&Ih(n,this),this._syncList=[],this._data=n}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const n=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const o=n._stacked;n._stacked=oi(n.vScale,n),n.stack!==i.stack&&(s=!0,Re(n),n.stack=i.stack),this._resyncElements(t),(s||o!==n._stacked)&&(lo(this,n._parsed),n._stacked=oi(n.vScale,n))}configure(){const t=this.chart.config,n=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),n,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,n){const{_cachedMeta:i,_data:s}=this,{iScale:o,_stacked:r}=i,a=o.axis;let l=t===0&&n===s.length?!0:i._sorted,c=t>0&&i._parsed[t-1],h,u,d;if(this._parsing===!1)i._parsed=s,i._sorted=!0,d=s;else{J(s[t])?d=this.parseArrayData(i,s,t,n):z(s[t])?d=this.parseObjectData(i,s,t,n):d=this.parsePrimitiveData(i,s,t,n);const f=()=>u[a]===null||c&&u[a]<c[a];for(h=0;h<n;++h)i._parsed[h+t]=u=d[h],l&&(f()&&(l=!1),c=u);i._sorted=l}r&&lo(this,d)}parsePrimitiveData(t,n,i,s){const{iScale:o,vScale:r}=t,a=o.axis,l=r.axis,c=o.getLabels(),h=o===r,u=new Array(s);let d,f,g;for(d=0,f=s;d<f;++d)g=d+i,u[d]={[a]:h||o.parse(c[g],g),[l]:r.parse(n[g],g)};return u}parseArrayData(t,n,i,s){const{xScale:o,yScale:r}=t,a=new Array(s);let l,c,h,u;for(l=0,c=s;l<c;++l)h=l+i,u=n[h],a[l]={x:o.parse(u[0],h),y:r.parse(u[1],h)};return a}parseObjectData(t,n,i,s){const{xScale:o,yScale:r}=t,{xAxisKey:a="x",yAxisKey:l="y"}=this._parsing,c=new Array(s);let h,u,d,f;for(h=0,u=s;h<u;++h)d=h+i,f=n[d],c[h]={x:o.parse(Ce(f,a),d),y:r.parse(Ce(f,l),d)};return c}getParsed(t){return this._cachedMeta._parsed[t]}getDataElement(t){return this._cachedMeta.data[t]}applyStack(t,n,i){const s=this.chart,o=this._cachedMeta,r=n[t.axis],a={keys:ua(s,!0),values:n._stacks[t.axis]._visualValues};return ro(a,r,o.index,{mode:i})}updateRangeFromParsed(t,n,i,s){const o=i[n.axis];let r=o===null?NaN:o;const a=s&&i._stacks[n.axis];s&&a&&(s.values=a,r=ro(s,o,this._cachedMeta.index)),t.min=Math.min(t.min,r),t.max=Math.max(t.max,r)}getMinMax(t,n){const i=this._cachedMeta,s=i._parsed,o=i._sorted&&t===i.iScale,r=s.length,a=this._getOtherScale(t),l=td(n,i,this.chart),c={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:h,max:u}=Gu(a);let d,f;function g(){f=s[d];const m=f[a.axis];return!vt(f[t.axis])||h>m||u<m}for(d=0;d<r&&!(!g()&&(this.updateRangeFromParsed(c,t,f,l),o));++d);if(o){for(d=r-1;d>=0;--d)if(!g()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){const n=this._cachedMeta._parsed,i=[];let s,o,r;for(s=0,o=n.length;s<o;++s)r=n[s][t.axis],vt(r)&&i.push(r);return i}getMaxOverflow(){return!1}getLabelAndValue(t){const n=this._cachedMeta,i=n.iScale,s=n.vScale,o=this.getParsed(t);return{label:i?""+i.getLabelForValue(o[i.axis]):"",value:s?""+s.getLabelForValue(o[s.axis]):""}}_update(t){const n=this._cachedMeta;this.update(t||"default"),n._clip=Xu(j(this.options.clip,Uu(n.xScale,n.yScale,this.getMaxOverflow())))}update(t){}draw(){const t=this._ctx,n=this.chart,i=this._cachedMeta,s=i.data||[],o=n.chartArea,r=[],a=this._drawStart||0,l=this._drawCount||s.length-a,c=this.options.drawActiveElementsOnTop;let h;for(i.dataset&&i.dataset.draw(t,o,a,l),h=a;h<a+l;++h){const u=s[h];u.hidden||(u.active&&c?r.push(u):u.draw(t,o))}for(h=0;h<r.length;++h)r[h].draw(t,o)}getStyle(t,n){const i=n?"active":"default";return t===void 0&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(i):this.resolveDataElementOptions(t||0,i)}getContext(t,n,i){const s=this.getDataset();let o;if(t>=0&&t<this._cachedMeta.data.length){const r=this._cachedMeta.data[t];o=r.$context||(r.$context=Qu(this.getContext(),t,r)),o.parsed=this.getParsed(t),o.raw=s.data[t],o.index=o.dataIndex=t}else o=this.$context||(this.$context=Zu(this.chart.getContext(),this.index)),o.dataset=s,o.index=o.datasetIndex=this.index;return o.active=!!n,o.mode=i,o}resolveDatasetElementOptions(t){return this._resolveElementOptions(this.datasetElementType.id,t)}resolveDataElementOptions(t,n){return this._resolveElementOptions(this.dataElementType.id,n,t)}_resolveElementOptions(t,n="default",i){const s=n==="active",o=this._cachedDataOpts,r=t+"-"+n,a=o[r],l=this.enableOptionSharing&&Ze(i);if(a)return co(a,l);const c=this.chart.config,h=c.datasetElementScopeKeys(this._type,t),u=s?[`${t}Hover`,"hover",t,""]:[t,""],d=c.getOptionScopes(this.getDataset(),h),f=Object.keys(K.elements[t]),g=()=>this.getContext(i,s,n),m=c.resolveNamedOptions(d,f,g,u);return m.$shared&&(m.$shared=l,o[r]=Object.freeze(co(m,l))),m}_resolveAnimations(t,n,i){const s=this.chart,o=this._cachedDataOpts,r=`animation-${n}`,a=o[r];if(a)return a;let l;if(s.options.animation!==!1){const h=this.chart.config,u=h.datasetAnimationScopeKeys(this._type,n),d=h.getOptionScopes(this.getDataset(),u);l=h.createResolver(d,this.getContext(t,i,n))}const c=new ha(s,l&&l.animations);return l&&l._cacheable&&(o[r]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,n){return!n||ai(t)||this.chart._animationsDisabled}_getSharedOptions(t,n){const i=this.resolveDataElementOptions(t,n),s=this._sharedOptions,o=this.getSharedOptions(i),r=this.includeOptions(n,o)||o!==s;return this.updateSharedOptions(o,n,i),{sharedOptions:o,includeOptions:r}}updateElement(t,n,i,s){ai(s)?Object.assign(t,i):this._resolveAnimations(n,s).update(t,i)}updateSharedOptions(t,n,i){t&&!ai(n)&&this._resolveAnimations(void 0,n).update(t,i)}_setStyle(t,n,i,s){t.active=s;const o=this.getStyle(n,s);this._resolveAnimations(n,i,s).update(t,{options:!s&&this.getSharedOptions(o)||o})}removeHoverStyle(t,n,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,n,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const n=this._data,i=this._cachedMeta.data;for(const[a,l,c]of this._syncList)this[a](l,c);this._syncList=[];const s=i.length,o=n.length,r=Math.min(o,s);r&&this.parse(0,r),o>s?this._insertElements(s,o-s,t):o<s&&this._removeElements(o,s-o)}_insertElements(t,n,i=!0){const s=this._cachedMeta,o=s.data,r=t+n;let a;const l=c=>{for(c.length+=n,a=c.length-1;a>=r;a--)c[a]=c[a-n]};for(l(o),a=t;a<r;++a)o[a]=new this.dataElementType;this._parsing&&l(s._parsed),this.parse(t,n),i&&this.updateElements(o,t,n,"reset")}updateElements(t,n,i,s){}_removeElements(t,n){const i=this._cachedMeta;if(this._parsing){const s=i._parsed.splice(t,n);i._stacked&&Re(i,s)}i.data.splice(t,n)}_sync(t){if(this._parsing)this._syncList.push(t);else{const[n,i,s]=t;this[n](i,s)}this.chart._dataChanges.push([this.index,...t])}_onDataPush(){const t=arguments.length;this._sync(["_insertElements",this.getDataset().data.length-t,t])}_onDataPop(){this._sync(["_removeElements",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync(["_removeElements",0,1])}_onDataSplice(t,n){n&&this._sync(["_removeElements",t,n]);const i=arguments.length-2;i&&this._sync(["_insertElements",t,i])}_onDataUnshift(){this._sync(["_insertElements",0,arguments.length])}}T(_e,"defaults",{}),T(_e,"datasetElementType",null),T(_e,"dataElementType",null);function ed(e,t){if(!e._cache.$bar){const n=e.getMatchingVisibleMetas(t);let i=[];for(let s=0,o=n.length;s<o;s++)i=i.concat(n[s].controller.getAllParsedValues(e));e._cache.$bar=Kr(i.sort((s,o)=>s-o))}return e._cache.$bar}function nd(e){const t=e.iScale,n=ed(t,e.type);let i=t._length,s,o,r,a;const l=()=>{r===32767||r===-32768||(Ze(a)&&(i=Math.min(i,Math.abs(r-a)||i)),a=r)};for(s=0,o=n.length;s<o;++s)r=t.getPixelForValue(n[s]),l();for(a=void 0,s=0,o=t.ticks.length;s<o;++s)r=t.getPixelForTick(s),l();return i}function id(e,t,n,i){const s=n.barThickness;let o,r;return W(s)?(o=t.min*n.categoryPercentage,r=n.barPercentage):(o=s*i,r=1),{chunk:o/i,ratio:r,start:t.pixels[e]-o/2}}function sd(e,t,n,i){const s=t.pixels,o=s[e];let r=e>0?s[e-1]:null,a=e<s.length-1?s[e+1]:null;const l=n.categoryPercentage;r===null&&(r=o-(a===null?t.end-t.start:a-o)),a===null&&(a=o+o-r);const c=o-(o-Math.min(r,a))/2*l;return{chunk:Math.abs(a-r)/2*l/i,ratio:n.barPercentage,start:c}}function od(e,t,n,i){const s=n.parse(e[0],i),o=n.parse(e[1],i),r=Math.min(s,o),a=Math.max(s,o);let l=r,c=a;Math.abs(r)>Math.abs(a)&&(l=a,c=r),t[n.axis]=c,t._custom={barStart:l,barEnd:c,start:s,end:o,min:r,max:a}}function da(e,t,n,i){return J(e)?od(e,t,n,i):t[n.axis]=n.parse(e,i),t}function ho(e,t,n,i){const s=e.iScale,o=e.vScale,r=s.getLabels(),a=s===o,l=[];let c,h,u,d;for(c=n,h=n+i;c<h;++c)d=t[c],u={},u[s.axis]=a||s.parse(r[c],c),l.push(da(d,u,o,c));return l}function li(e){return e&&e.barStart!==void 0&&e.barEnd!==void 0}function rd(e,t,n){return e!==0?Dt(e):(t.isHorizontal()?1:-1)*(t.min>=n?1:-1)}function ad(e){let t,n,i,s,o;return e.horizontal?(t=e.base>e.x,n="left",i="right"):(t=e.base<e.y,n="bottom",i="top"),t?(s="end",o="start"):(s="start",o="end"),{start:n,end:i,reverse:t,top:s,bottom:o}}function ld(e,t,n,i){let s=t.borderSkipped;const o={};if(!s){e.borderSkipped=o;return}if(s===!0){e.borderSkipped={top:!0,right:!0,bottom:!0,left:!0};return}const{start:r,end:a,reverse:l,top:c,bottom:h}=ad(e);s==="middle"&&n&&(e.enableBorderRadius=!0,(n._top||0)===i?s=c:(n._bottom||0)===i?s=h:(o[uo(h,r,a,l)]=!0,s=c)),o[uo(s,r,a,l)]=!0,e.borderSkipped=o}function uo(e,t,n,i){return i?(e=cd(e,t,n),e=fo(e,n,t)):e=fo(e,t,n),e}function cd(e,t,n){return e===t?n:e===n?t:e}function fo(e,t,n){return e==="start"?t:e==="end"?n:e}function hd(e,{inflateAmount:t},n){e.inflateAmount=t==="auto"?n===1?.33:0:t}class ci extends _e{parsePrimitiveData(t,n,i,s){return ho(t,n,i,s)}parseArrayData(t,n,i,s){return ho(t,n,i,s)}parseObjectData(t,n,i,s){const{iScale:o,vScale:r}=t,{xAxisKey:a="x",yAxisKey:l="y"}=this._parsing,c=o.axis==="x"?a:l,h=r.axis==="x"?a:l,u=[];let d,f,g,m;for(d=i,f=i+s;d<f;++d)m=n[d],g={},g[o.axis]=o.parse(Ce(m,c),d),u.push(da(Ce(m,h),g,r,d));return u}updateRangeFromParsed(t,n,i,s){super.updateRangeFromParsed(t,n,i,s);const o=i._custom;o&&n===this._cachedMeta.vScale&&(t.min=Math.min(t.min,o.min),t.max=Math.max(t.max,o.max))}getMaxOverflow(){return 0}getLabelAndValue(t){const n=this._cachedMeta,{iScale:i,vScale:s}=n,o=this.getParsed(t),r=o._custom,a=li(r)?"["+r.start+", "+r.end+"]":""+s.getLabelForValue(o[s.axis]);return{label:""+i.getLabelForValue(o[i.axis]),value:a}}initialize(){this.enableOptionSharing=!0,super.initialize();const t=this._cachedMeta;t.stack=this.getDataset().stack}update(t){const n=this._cachedMeta;this.updateElements(n.data,0,n.data.length,t)}updateElements(t,n,i,s){const o=s==="reset",{index:r,_cachedMeta:{vScale:a}}=this,l=a.getBasePixel(),c=a.isHorizontal(),h=this._getRuler(),{sharedOptions:u,includeOptions:d}=this._getSharedOptions(n,s);for(let f=n;f<n+i;f++){const g=this.getParsed(f),m=o||W(g[a.axis])?{base:l,head:l}:this._calculateBarValuePixels(f),p=this._calculateBarIndexPixels(f,h),b=(g._stacks||{})[a.axis],x={horizontal:c,base:m.base,enableBorderRadius:!b||li(g._custom)||r===b._top||r===b._bottom,x:c?m.head:p.center,y:c?p.center:m.head,height:c?p.size:Math.abs(m.size),width:c?Math.abs(m.size):p.size};d&&(x.options=u||this.resolveDataElementOptions(f,t[f].active?"active":s));const v=x.options||t[f].options;ld(x,v,b,r),hd(x,v,h.ratio),this.updateElement(t[f],f,x,s)}}_getStacks(t,n){const{iScale:i}=this._cachedMeta,s=i.getMatchingVisibleMetas(this._type).filter(h=>h.controller.options.grouped),o=i.options.stacked,r=[],a=this._cachedMeta.controller.getParsed(n),l=a&&a[i.axis],c=h=>{const u=h._parsed.find(f=>f[i.axis]===l),d=u&&u[h.vScale.axis];if(W(d)||isNaN(d))return!0};for(const h of s)if(!(n!==void 0&&c(h))&&((o===!1||r.indexOf(h.stack)===-1||o===void 0&&h.stack===void 0)&&r.push(h.stack),h.index===t))break;return r.length||r.push(void 0),r}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,n,i){const s=this._getStacks(t,i),o=n!==void 0?s.indexOf(n):-1;return o===-1?s.length-1:o}_getRuler(){const t=this.options,n=this._cachedMeta,i=n.iScale,s=[];let o,r;for(o=0,r=n.data.length;o<r;++o)s.push(i.getPixelForValue(this.getParsed(o)[i.axis],o));const a=t.barThickness;return{min:a||nd(n),pixels:s,start:i._startPixel,end:i._endPixel,stackCount:this._getStackCount(),scale:i,grouped:t.grouped,ratio:a?1:t.categoryPercentage*t.barPercentage}}_calculateBarValuePixels(t){const{_cachedMeta:{vScale:n,_stacked:i,index:s},options:{base:o,minBarLength:r}}=this,a=o||0,l=this.getParsed(t),c=l._custom,h=li(c);let u=l[n.axis],d=0,f=i?this.applyStack(n,l,i):u,g,m;f!==u&&(d=f-u,f=u),h&&(u=c.barStart,f=c.barEnd-c.barStart,u!==0&&Dt(u)!==Dt(c.barEnd)&&(d=0),d+=u);const p=!W(o)&&!h?o:d;let b=n.getPixelForValue(p);if(this.chart.getDataVisibility(t)?g=n.getPixelForValue(d+f):g=b,m=g-b,Math.abs(m)<r){m=rd(m,n,a)*r,u===a&&(b-=m/2);const x=n.getPixelForDecimal(0),v=n.getPixelForDecimal(1),_=Math.min(x,v),y=Math.max(x,v);b=Math.max(Math.min(b,y),_),g=b+m,i&&!h&&(l._stacks[n.axis]._visualValues[s]=n.getValueForPixel(g)-n.getValueForPixel(b))}if(b===n.getPixelForValue(a)){const x=Dt(m)*n.getLineWidthForValue(a)/2;b+=x,m-=x}return{size:m,base:b,head:g,center:g+m/2}}_calculateBarIndexPixels(t,n){const i=n.scale,s=this.options,o=s.skipNull,r=j(s.maxBarThickness,1/0);let a,l;if(n.grouped){const c=o?this._getStackCount(t):n.stackCount,h=s.barThickness==="flex"?sd(t,n,s,c):id(t,n,s,c),u=this._getStackIndex(this.index,this._cachedMeta.stack,o?t:void 0);a=h.start+h.chunk*u+h.chunk/2,l=Math.min(r,h.chunk*h.ratio)}else a=i.getPixelForValue(this.getParsed(t)[i.axis],t),l=Math.min(r,n.min*n.ratio);return{base:a-l/2,head:a+l/2,center:a,size:l}}draw(){const t=this._cachedMeta,n=t.vScale,i=t.data,s=i.length;let o=0;for(;o<s;++o)this.getParsed(o)[n.axis]!==null&&!i[o].hidden&&i[o].draw(this._ctx)}}T(ci,"id","bar"),T(ci,"defaults",{datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}}),T(ci,"overrides",{scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}});class hi extends _e{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const n=this._cachedMeta,{dataset:i,data:s=[],_dataset:o}=n,r=this.chart._animationsDisabled;let{start:a,count:l}=zh(n,s,r);this._drawStart=a,this._drawCount=l,Nh(n)&&(a=0,l=s.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!o._decimated,i.points=s;const c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(i,void 0,{animated:!r,options:c},t),this.updateElements(s,a,l,t)}updateElements(t,n,i,s){const o=s==="reset",{iScale:r,vScale:a,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:u}=this._getSharedOptions(n,s),d=r.axis,f=a.axis,{spanGaps:g,segment:m}=this.options,p=Qe(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||s==="none",x=n+i,v=t.length;let _=n>0&&this.getParsed(n-1);for(let y=0;y<v;++y){const w=t[y],k=b?w:{};if(y<n||y>=x){k.skip=!0;continue}const S=this.getParsed(y),P=W(S[f]),D=k[d]=r.getPixelForValue(S[d],y),C=k[f]=o||P?a.getBasePixel():a.getPixelForValue(l?this.applyStack(a,S,l):S[f],y);k.skip=isNaN(D)||isNaN(C)||P,k.stop=y>0&&Math.abs(S[d]-_[d])>p,m&&(k.parsed=S,k.raw=c.data[y]),u&&(k.options=h||this.resolveDataElementOptions(y,w.active?"active":s)),b||this.updateElement(w,y,k,s),_=S}}getMaxOverflow(){const t=this._cachedMeta,n=t.dataset,i=n.options&&n.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const o=s[0].size(this.resolveDataElementOptions(0)),r=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,o,r)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}T(hi,"id","line"),T(hi,"defaults",{datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1}),T(hi,"overrides",{scales:{_index_:{type:"category"},_value_:{type:"linear"}}});function ne(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class ss{constructor(t){T(this,"options");this.options=t||{}}static override(t){Object.assign(ss.prototype,t)}init(){}formats(){return ne()}parse(){return ne()}format(){return ne()}add(){return ne()}diff(){return ne()}startOf(){return ne()}endOf(){return ne()}}var ud={_date:ss};function dd(e,t,n,i){const{controller:s,data:o,_sorted:r}=e,a=s._cachedMeta.iScale;if(a&&t===a.axis&&t!=="r"&&r&&o.length){const l=a._reversePixels?Lh:le;if(i){if(s._sharedOptions){const c=o[0],h=typeof c.getRange=="function"&&c.getRange(t);if(h){const u=l(o,t,n-h),d=l(o,t,n+h);return{lo:u.lo,hi:d.hi}}}}else return l(o,t,n)}return{lo:0,hi:o.length-1}}function cn(e,t,n,i,s){const o=e.getSortedVisibleDatasetMetas(),r=n[t];for(let a=0,l=o.length;a<l;++a){const{index:c,data:h}=o[a],{lo:u,hi:d}=dd(o[a],t,r,s);for(let f=u;f<=d;++f){const g=h[f];g.skip||i(g,c,f)}}}function fd(e){const t=e.indexOf("x")!==-1,n=e.indexOf("y")!==-1;return function(i,s){const o=t?Math.abs(i.x-s.x):0,r=n?Math.abs(i.y-s.y):0;return Math.sqrt(Math.pow(o,2)+Math.pow(r,2))}}function ui(e,t,n,i,s){const o=[];return!s&&!e.isPointInArea(t)||cn(e,n,t,function(a,l,c){!s&&!tn(a,e.chartArea,0)||a.inRange(t.x,t.y,i)&&o.push({element:a,datasetIndex:l,index:c})},!0),o}function pd(e,t,n,i){let s=[];function o(r,a,l){const{startAngle:c,endAngle:h}=r.getProps(["startAngle","endAngle"],i),{angle:u}=Ur(r,{x:t.x,y:t.y});Ui(u,c,h)&&s.push({element:r,datasetIndex:a,index:l})}return cn(e,n,t,o),s}function gd(e,t,n,i,s,o){let r=[];const a=fd(n);let l=Number.POSITIVE_INFINITY;function c(h,u,d){const f=h.inRange(t.x,t.y,s);if(i&&!f)return;const g=h.getCenterPoint(s);if(!(!!o||e.isPointInArea(g))&&!f)return;const p=a(t,g);p<l?(r=[{element:h,datasetIndex:u,index:d}],l=p):p===l&&r.push({element:h,datasetIndex:u,index:d})}return cn(e,n,t,c),r}function di(e,t,n,i,s,o){return!o&&!e.isPointInArea(t)?[]:n==="r"&&!i?pd(e,t,n,s):gd(e,t,n,i,s,o)}function po(e,t,n,i,s){const o=[],r=n==="x"?"inXRange":"inYRange";let a=!1;return cn(e,n,t,(l,c,h)=>{l[r]&&l[r](t[n],s)&&(o.push({element:l,datasetIndex:c,index:h}),a=a||l.inRange(t.x,t.y,s))}),i&&!a?[]:o}var md={evaluateInteractionItems:cn,modes:{index(e,t,n,i){const s=oe(t,e),o=n.axis||"x",r=n.includeInvisible||!1,a=n.intersect?ui(e,s,o,i,r):di(e,s,o,!1,i,r),l=[];return a.length?(e.getSortedVisibleDatasetMetas().forEach(c=>{const h=a[0].index,u=c.data[h];u&&!u.skip&&l.push({element:u,datasetIndex:c.index,index:h})}),l):[]},dataset(e,t,n,i){const s=oe(t,e),o=n.axis||"xy",r=n.includeInvisible||!1;let a=n.intersect?ui(e,s,o,i,r):di(e,s,o,!1,i,r);if(a.length>0){const l=a[0].datasetIndex,c=e.getDatasetMeta(l).data;a=[];for(let h=0;h<c.length;++h)a.push({element:c[h],datasetIndex:l,index:h})}return a},point(e,t,n,i){const s=oe(t,e),o=n.axis||"xy",r=n.includeInvisible||!1;return ui(e,s,o,i,r)},nearest(e,t,n,i){const s=oe(t,e),o=n.axis||"xy",r=n.includeInvisible||!1;return di(e,s,o,n.intersect,i,r)},x(e,t,n,i){const s=oe(t,e);return po(e,s,"x",n.intersect,i)},y(e,t,n,i){const s=oe(t,e);return po(e,s,"y",n.intersect,i)}}};const fa=["left","top","right","bottom"];function Le(e,t){return e.filter(n=>n.pos===t)}function go(e,t){return e.filter(n=>fa.indexOf(n.pos)===-1&&n.box.axis===t)}function Fe(e,t){return e.sort((n,i)=>{const s=t?i:n,o=t?n:i;return s.weight===o.weight?s.index-o.index:s.weight-o.weight})}function bd(e){const t=[];let n,i,s,o,r,a;for(n=0,i=(e||[]).length;n<i;++n)s=e[n],{position:o,options:{stack:r,stackWeight:a=1}}=s,t.push({index:n,box:s,pos:o,horizontal:s.isHorizontal(),weight:s.weight,stack:r&&o+r,stackWeight:a});return t}function xd(e){const t={};for(const n of e){const{stack:i,pos:s,stackWeight:o}=n;if(!i||!fa.includes(s))continue;const r=t[i]||(t[i]={count:0,placed:0,weight:0,size:0});r.count++,r.weight+=o}return t}function yd(e,t){const n=xd(e),{vBoxMaxWidth:i,hBoxMaxHeight:s}=t;let o,r,a;for(o=0,r=e.length;o<r;++o){a=e[o];const{fullSize:l}=a.box,c=n[a.stack],h=c&&a.stackWeight/c.weight;a.horizontal?(a.width=h?h*i:l&&t.availableWidth,a.height=s):(a.width=i,a.height=h?h*s:l&&t.availableHeight)}return n}function vd(e){const t=bd(e),n=Fe(t.filter(c=>c.box.fullSize),!0),i=Fe(Le(t,"left"),!0),s=Fe(Le(t,"right")),o=Fe(Le(t,"top"),!0),r=Fe(Le(t,"bottom")),a=go(t,"x"),l=go(t,"y");return{fullSize:n,leftAndTop:i.concat(o),rightAndBottom:s.concat(l).concat(r).concat(a),chartArea:Le(t,"chartArea"),vertical:i.concat(s).concat(l),horizontal:o.concat(r).concat(a)}}function mo(e,t,n,i){return Math.max(e[n],t[n])+Math.max(e[i],t[i])}function pa(e,t){e.top=Math.max(e.top,t.top),e.left=Math.max(e.left,t.left),e.bottom=Math.max(e.bottom,t.bottom),e.right=Math.max(e.right,t.right)}function _d(e,t,n,i){const{pos:s,box:o}=n,r=e.maxPadding;if(!z(s)){n.size&&(e[s]-=n.size);const u=i[n.stack]||{size:0,count:1};u.size=Math.max(u.size,n.horizontal?o.height:o.width),n.size=u.size/u.count,e[s]+=n.size}o.getPadding&&pa(r,o.getPadding());const a=Math.max(0,t.outerWidth-mo(r,e,"left","right")),l=Math.max(0,t.outerHeight-mo(r,e,"top","bottom")),c=a!==e.w,h=l!==e.h;return e.w=a,e.h=l,n.horizontal?{same:c,other:h}:{same:h,other:c}}function wd(e){const t=e.maxPadding;function n(i){const s=Math.max(t[i]-e[i],0);return e[i]+=s,s}e.y+=n("top"),e.x+=n("left"),n("right"),n("bottom")}function Sd(e,t){const n=t.maxPadding;function i(s){const o={left:0,top:0,right:0,bottom:0};return s.forEach(r=>{o[r]=Math.max(t[r],n[r])}),o}return i(e?["left","right"]:["top","bottom"])}function ze(e,t,n,i){const s=[];let o,r,a,l,c,h;for(o=0,r=e.length,c=0;o<r;++o){a=e[o],l=a.box,l.update(a.width||t.w,a.height||t.h,Sd(a.horizontal,t));const{same:u,other:d}=_d(t,n,a,i);c|=u&&s.length,h=h||d,l.fullSize||s.push(a)}return c&&ze(s,t,n,i)||h}function vn(e,t,n,i,s){e.top=n,e.left=t,e.right=t+i,e.bottom=n+s,e.width=i,e.height=s}function bo(e,t,n,i){const s=n.padding;let{x:o,y:r}=t;for(const a of e){const l=a.box,c=i[a.stack]||{count:1,placed:0,weight:1},h=a.stackWeight/c.weight||1;if(a.horizontal){const u=t.w*h,d=c.size||l.height;Ze(c.start)&&(r=c.start),l.fullSize?vn(l,s.left,r,n.outerWidth-s.right-s.left,d):vn(l,t.left+c.placed,r,u,d),c.start=r,c.placed+=u,r=l.bottom}else{const u=t.h*h,d=c.size||l.width;Ze(c.start)&&(o=c.start),l.fullSize?vn(l,o,s.top,d,n.outerHeight-s.bottom-s.top):vn(l,o,t.top+c.placed,d,u),c.start=o,c.placed+=u,o=l.right}}t.x=o,t.y=r}var bt={addBox(e,t){e.boxes||(e.boxes=[]),t.fullSize=t.fullSize||!1,t.position=t.position||"top",t.weight=t.weight||0,t._layers=t._layers||function(){return[{z:0,draw(n){t.draw(n)}}]},e.boxes.push(t)},removeBox(e,t){const n=e.boxes?e.boxes.indexOf(t):-1;n!==-1&&e.boxes.splice(n,1)},configure(e,t,n){t.fullSize=n.fullSize,t.position=n.position,t.weight=n.weight},update(e,t,n,i){if(!e)return;const s=_t(e.options.layout.padding),o=Math.max(t-s.width,0),r=Math.max(n-s.height,0),a=vd(e.boxes),l=a.vertical,c=a.horizontal;H(e.boxes,m=>{typeof m.beforeLayout=="function"&&m.beforeLayout()});const h=l.reduce((m,p)=>p.box.options&&p.box.options.display===!1?m:m+1,0)||1,u=Object.freeze({outerWidth:t,outerHeight:n,padding:s,availableWidth:o,availableHeight:r,vBoxMaxWidth:o/2/h,hBoxMaxHeight:r/2}),d=Object.assign({},s);pa(d,_t(i));const f=Object.assign({maxPadding:d,w:o,h:r,x:s.left,y:s.top},s),g=yd(l.concat(c),u);ze(a.fullSize,f,u,g),ze(l,f,u,g),ze(c,f,u,g)&&ze(l,f,u,g),wd(f),bo(a.leftAndTop,f,u,g),f.x+=f.w,f.y+=f.h,bo(a.rightAndBottom,f,u,g),e.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},H(a.chartArea,m=>{const p=m.box;Object.assign(p,e.chartArea),p.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}};class ga{acquireContext(t,n){}releaseContext(t){return!1}addEventListener(t,n,i){}removeEventListener(t,n,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,n,i,s){return n=Math.max(0,n||t.width),i=i||t.height,{width:n,height:Math.max(0,s?Math.floor(n/s):i)}}isAttached(t){return!0}updateConfig(t){}}class kd extends ga{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const Tn="$chartjs",Md={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},xo=e=>e===null||e==="";function Cd(e,t){const n=e.style,i=e.getAttribute("height"),s=e.getAttribute("width");if(e[Tn]={initial:{height:i,width:s,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",n.boxSizing=n.boxSizing||"border-box",xo(s)){const o=to(e,"width");o!==void 0&&(e.width=o)}if(xo(i))if(e.style.height==="")e.height=e.width/(t||2);else{const o=to(e,"height");o!==void 0&&(e.height=o)}return e}const ma=Ou?{passive:!0}:!1;function Pd(e,t,n){e&&e.addEventListener(t,n,ma)}function Od(e,t,n){e&&e.canvas&&e.canvas.removeEventListener(t,n,ma)}function Dd(e,t){const n=Md[e.type]||e.type,{x:i,y:s}=oe(e,t);return{type:n,chart:t,native:e,x:i!==void 0?i:null,y:s!==void 0?s:null}}function Nn(e,t){for(const n of e)if(n===t||n.contains(t))return!0}function Ad(e,t,n){const i=e.canvas,s=new MutationObserver(o=>{let r=!1;for(const a of o)r=r||Nn(a.addedNodes,i),r=r&&!Nn(a.removedNodes,i);r&&n()});return s.observe(document,{childList:!0,subtree:!0}),s}function Ed(e,t,n){const i=e.canvas,s=new MutationObserver(o=>{let r=!1;for(const a of o)r=r||Nn(a.removedNodes,i),r=r&&!Nn(a.addedNodes,i);r&&n()});return s.observe(document,{childList:!0,subtree:!0}),s}const nn=new Map;let yo=0;function ba(){const e=window.devicePixelRatio;e!==yo&&(yo=e,nn.forEach((t,n)=>{n.currentDevicePixelRatio!==e&&t()}))}function Td(e,t){nn.size||window.addEventListener("resize",ba),nn.set(e,t)}function Rd(e){nn.delete(e),nn.size||window.removeEventListener("resize",ba)}function Ld(e,t,n){const i=e.canvas,s=i&&is(i);if(!s)return;const o=Gr((a,l)=>{const c=s.clientWidth;n(a,l),c<s.clientWidth&&n()},window),r=new ResizeObserver(a=>{const l=a[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||o(c,h)});return r.observe(s),Td(e,o),r}function fi(e,t,n){n&&n.disconnect(),t==="resize"&&Rd(e)}function Fd(e,t,n){const i=e.canvas,s=Gr(o=>{e.ctx!==null&&n(Dd(o,e))},e);return Pd(i,t,s),s}class Id extends ga{acquireContext(t,n){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(Cd(t,n),i):null}releaseContext(t){const n=t.canvas;if(!n[Tn])return!1;const i=n[Tn].initial;["height","width"].forEach(o=>{const r=i[o];W(r)?n.removeAttribute(o):n.setAttribute(o,r)});const s=i.style||{};return Object.keys(s).forEach(o=>{n.style[o]=s[o]}),n.width=n.width,delete n[Tn],!0}addEventListener(t,n,i){this.removeEventListener(t,n);const s=t.$proxies||(t.$proxies={}),r={attach:Ad,detach:Ed,resize:Ld}[n]||Fd;s[n]=r(t,n,i)}removeEventListener(t,n){const i=t.$proxies||(t.$proxies={}),s=i[n];if(!s)return;({attach:fi,detach:fi,resize:fi}[n]||Od)(t,n,s),i[n]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,n,i,s){return Pu(t,n,i,s)}isAttached(t){const n=t&&is(t);return!!(n&&n.isConnected)}}function jd(e){return!ns()||typeof OffscreenCanvas<"u"&&e instanceof OffscreenCanvas?kd:Id}var An;let $t=(An=class{constructor(){T(this,"x");T(this,"y");T(this,"active",!1);T(this,"options");T(this,"$animations")}tooltipPosition(t){const{x:n,y:i}=this.getProps(["x","y"],t);return{x:n,y:i}}hasValue(){return Qe(this.x)&&Qe(this.y)}getProps(t,n){const i=this.$animations;if(!n||!i)return this;const s={};return t.forEach(o=>{s[o]=i[o]&&i[o].active()?i[o]._to:this[o]}),s}},T(An,"defaults",{}),T(An,"defaultRoutes"),An);function $d(e,t){const n=e.options.ticks,i=zd(e),s=Math.min(n.maxTicksLimit||i,i),o=n.major.enabled?Bd(t):[],r=o.length,a=o[0],l=o[r-1],c=[];if(r>s)return Hd(t,c,o,r/s),c;const h=Nd(o,t,s);if(r>0){let u,d;const f=r>1?Math.round((l-a)/(r-1)):null;for(_n(t,c,h,W(f)?0:a-f,a),u=0,d=r-1;u<d;u++)_n(t,c,h,o[u],o[u+1]);return _n(t,c,h,l,W(f)?t.length:l+f),c}return _n(t,c,h),c}function zd(e){const t=e.options.offset,n=e._tickSize(),i=e._length/n+(t?0:1),s=e._maxLength/n;return Math.floor(Math.min(i,s))}function Nd(e,t,n){const i=Wd(e),s=t.length/n;if(!i)return Math.max(s,1);const o=Oh(i);for(let r=0,a=o.length-1;r<a;r++){const l=o[r];if(l>s)return l}return Math.max(s,1)}function Bd(e){const t=[];let n,i;for(n=0,i=e.length;n<i;n++)e[n].major&&t.push(n);return t}function Hd(e,t,n,i){let s=0,o=n[0],r;for(i=Math.ceil(i),r=0;r<e.length;r++)r===o&&(t.push(e[r]),s++,o=n[s*i])}function _n(e,t,n,i,s){const o=j(i,0),r=Math.min(j(s,e.length),e.length);let a=0,l,c,h;for(n=Math.ceil(n),s&&(l=s-i,n=l/Math.floor(l/n)),h=o;h<0;)a++,h=Math.round(o+a*n);for(c=Math.max(o,0);c<r;c++)c===h&&(t.push(e[c]),a++,h=Math.round(o+a*n))}function Wd(e){const t=e.length;let n,i;if(t<2)return!1;for(i=e[0],n=1;n<t;++n)if(e[n]-e[n-1]!==i)return!1;return i}const Vd=e=>e==="left"?"right":e==="right"?"left":e,vo=(e,t,n)=>t==="top"||t==="left"?e[t]+n:e[t]-n,_o=(e,t)=>Math.min(t||e,e);function wo(e,t){const n=[],i=e.length/t,s=e.length;let o=0;for(;o<s;o+=i)n.push(e[Math.floor(o)]);return n}function Yd(e,t,n){const i=e.ticks.length,s=Math.min(t,i-1),o=e._startPixel,r=e._endPixel,a=1e-6;let l=e.getPixelForTick(s),c;if(!(n&&(i===1?c=Math.max(l-o,r-l):t===0?c=(e.getPixelForTick(1)-l)/2:c=(l-e.getPixelForTick(s-1))/2,l+=s<t?c:-c,l<o-a||l>r+a)))return l}function Ud(e,t){H(e,n=>{const i=n.gc,s=i.length/2;let o;if(s>t){for(o=0;o<s;++o)delete n.data[i[o]];i.splice(0,s)}})}function Ie(e){return e.drawTicks?e.tickLength:0}function So(e,t){if(!e.display)return 0;const n=at(e.font,t),i=_t(e.padding);return(J(e.text)?e.text.length:1)*n.lineHeight+i.height}function Xd(e,t){return pe(e,{scale:t,type:"scale"})}function Kd(e,t,n){return pe(e,{tick:n,index:t,type:"tick"})}function qd(e,t,n){let i=Ki(e);return(n&&t!=="right"||!n&&t==="right")&&(i=Vd(i)),i}function Gd(e,t,n,i){const{top:s,left:o,bottom:r,right:a,chart:l}=e,{chartArea:c,scales:h}=l;let u=0,d,f,g;const m=r-s,p=a-o;if(e.isHorizontal()){if(f=ot(i,o,a),z(n)){const b=Object.keys(n)[0],x=n[b];g=h[b].getPixelForValue(x)+m-t}else n==="center"?g=(c.bottom+c.top)/2+m-t:g=vo(e,n,t);d=a-o}else{if(z(n)){const b=Object.keys(n)[0],x=n[b];f=h[b].getPixelForValue(x)-p+t}else n==="center"?f=(c.left+c.right)/2-p+t:f=vo(e,n,t);g=ot(i,r,s),u=n==="left"?-it:it}return{titleX:f,titleY:g,maxWidth:d,rotation:u}}class De extends $t{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,n){return t}getUserBounds(){let{_userMin:t,_userMax:n,_suggestedMin:i,_suggestedMax:s}=this;return t=St(t,Number.POSITIVE_INFINITY),n=St(n,Number.NEGATIVE_INFINITY),i=St(i,Number.POSITIVE_INFINITY),s=St(s,Number.NEGATIVE_INFINITY),{min:St(t,i),max:St(n,s),minDefined:vt(t),maxDefined:vt(n)}}getMinMax(t){let{min:n,max:i,minDefined:s,maxDefined:o}=this.getUserBounds(),r;if(s&&o)return{min:n,max:i};const a=this.getMatchingVisibleMetas();for(let l=0,c=a.length;l<c;++l)r=a[l].controller.getMinMax(this,t),s||(n=Math.min(n,r.min)),o||(i=Math.max(i,r.max));return n=o&&n>i?i:n,i=s&&n>i?n:i,{min:St(n,St(i,n)),max:St(i,St(n,i))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){V(this.options.beforeUpdate,[this])}update(t,n,i){const{beginAtZero:s,grace:o,ticks:r}=this.options,a=r.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=n,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=ou(this,o,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const l=a<this.ticks.length;this._convertTicksToLabels(l?wo(this.ticks,a):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),r.display&&(r.autoSkip||r.source==="auto")&&(this.ticks=$d(this,this.ticks),this._labelSizes=null,this.afterAutoSkip()),l&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let t=this.options.reverse,n,i;this.isHorizontal()?(n=this.left,i=this.right):(n=this.top,i=this.bottom,t=!t),this._startPixel=n,this._endPixel=i,this._reversePixels=t,this._length=i-n,this._alignToPixels=this.options.alignToPixels}afterUpdate(){V(this.options.afterUpdate,[this])}beforeSetDimensions(){V(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){V(this.options.afterSetDimensions,[this])}_callHooks(t){this.chart.notifyPlugins(t,this.getContext()),V(this.options[t],[this])}beforeDataLimits(){this._callHooks("beforeDataLimits")}determineDataLimits(){}afterDataLimits(){this._callHooks("afterDataLimits")}beforeBuildTicks(){this._callHooks("beforeBuildTicks")}buildTicks(){return[]}afterBuildTicks(){this._callHooks("afterBuildTicks")}beforeTickToLabelConversion(){V(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){const n=this.options.ticks;let i,s,o;for(i=0,s=t.length;i<s;i++)o=t[i],o.label=V(n.callback,[o.value,i,t],this)}afterTickToLabelConversion(){V(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){V(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){const t=this.options,n=t.ticks,i=_o(this.ticks.length,t.ticks.maxTicksLimit),s=n.minRotation||0,o=n.maxRotation;let r=s,a,l,c;if(!this._isVisible()||!n.display||s>=o||i<=1||!this.isHorizontal()){this.labelRotation=s;return}const h=this._getLabelSizes(),u=h.widest.width,d=h.highest.height,f=rt(this.chart.width-u,0,this.maxWidth);a=t.offset?this.maxWidth/i:f/(i-1),u+6>a&&(a=f/(i-(t.offset?.5:1)),l=this.maxHeight-Ie(t.grid)-n.padding-So(t.title,this.chart.options.font),c=Math.sqrt(u*u+d*d),r=Eh(Math.min(Math.asin(rt((h.highest.height+6)/a,-1,1)),Math.asin(rt(l/c,-1,1))-Math.asin(rt(d/c,-1,1)))),r=Math.max(s,Math.min(o,r))),this.labelRotation=r}afterCalculateLabelRotation(){V(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){V(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:n,options:{ticks:i,title:s,grid:o}}=this,r=this._isVisible(),a=this.isHorizontal();if(r){const l=So(s,n.options.font);if(a?(t.width=this.maxWidth,t.height=Ie(o)+l):(t.height=this.maxHeight,t.width=Ie(o)+l),i.display&&this.ticks.length){const{first:c,last:h,widest:u,highest:d}=this._getLabelSizes(),f=i.padding*2,g=ae(this.labelRotation),m=Math.cos(g),p=Math.sin(g);if(a){const b=i.mirror?0:p*u.width+m*d.height;t.height=Math.min(this.maxHeight,t.height+b+f)}else{const b=i.mirror?0:m*u.width+p*d.height;t.width=Math.min(this.maxWidth,t.width+b+f)}this._calculatePadding(c,h,p,m)}}this._handleMargins(),a?(this.width=this._length=n.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=n.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,n,i,s){const{ticks:{align:o,padding:r},position:a}=this.options,l=this.labelRotation!==0,c=a!=="top"&&this.axis==="x";if(this.isHorizontal()){const h=this.getPixelForTick(0)-this.left,u=this.right-this.getPixelForTick(this.ticks.length-1);let d=0,f=0;l?c?(d=s*t.width,f=i*n.height):(d=i*t.height,f=s*n.width):o==="start"?f=n.width:o==="end"?d=t.width:o!=="inner"&&(d=t.width/2,f=n.width/2),this.paddingLeft=Math.max((d-h+r)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-u+r)*this.width/(this.width-u),0)}else{let h=n.height/2,u=t.height/2;o==="start"?(h=0,u=t.height):o==="end"&&(h=n.height,u=0),this.paddingTop=h+r,this.paddingBottom=u+r}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){V(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:n}=this.options;return n==="top"||n==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let n,i;for(n=0,i=t.length;n<i;n++)W(t[n].label)&&(t.splice(n,1),i--,n--);this.afterTickToLabelConversion()}_getLabelSizes(){let t=this._labelSizes;if(!t){const n=this.options.ticks.sampleSize;let i=this.ticks;n<i.length&&(i=wo(i,n)),this._labelSizes=t=this._computeLabelSizes(i,i.length,this.options.ticks.maxTicksLimit)}return t}_computeLabelSizes(t,n,i){const{ctx:s,_longestTextCache:o}=this,r=[],a=[],l=Math.floor(n/_o(n,i));let c=0,h=0,u,d,f,g,m,p,b,x,v,_,y;for(u=0;u<n;u+=l){if(g=t[u].label,m=this._resolveTickFontOptions(u),s.font=p=m.string,b=o[p]=o[p]||{data:{},gc:[]},x=m.lineHeight,v=_=0,!W(g)&&!J(g))v=qs(s,b.data,b.gc,v,g),_=x;else if(J(g))for(d=0,f=g.length;d<f;++d)y=g[d],!W(y)&&!J(y)&&(v=qs(s,b.data,b.gc,v,y),_+=x);r.push(v),a.push(_),c=Math.max(v,c),h=Math.max(_,h)}Ud(o,n);const w=r.indexOf(c),k=a.indexOf(h),S=P=>({width:r[P]||0,height:a[P]||0});return{first:S(0),last:S(n-1),widest:S(w),highest:S(k),widths:r,heights:a}}getLabelForValue(t){return t}getPixelForValue(t,n){return NaN}getValueForPixel(t){}getPixelForTick(t){const n=this.ticks;return t<0||t>n.length-1?null:this.getPixelForValue(n[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const n=this._startPixel+t*this._length;return Rh(this._alignToPixels?ee(this.chart,n,0):n)}getDecimalForPixel(t){const n=(t-this._startPixel)/this._length;return this._reversePixels?1-n:n}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:n}=this;return t<0&&n<0?n:t>0&&n>0?t:0}getContext(t){const n=this.ticks||[];if(t>=0&&t<n.length){const i=n[t];return i.$context||(i.$context=Kd(this.getContext(),t,i))}return this.$context||(this.$context=Xd(this.chart.getContext(),this))}_tickSize(){const t=this.options.ticks,n=ae(this.labelRotation),i=Math.abs(Math.cos(n)),s=Math.abs(Math.sin(n)),o=this._getLabelSizes(),r=t.autoSkipPadding||0,a=o?o.widest.width+r:0,l=o?o.highest.height+r:0;return this.isHorizontal()?l*i>a*s?a/i:l/s:l*s<a*i?l/i:a/s}_isVisible(){const t=this.options.display;return t!=="auto"?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){const n=this.axis,i=this.chart,s=this.options,{grid:o,position:r,border:a}=s,l=o.offset,c=this.isHorizontal(),u=this.ticks.length+(l?1:0),d=Ie(o),f=[],g=a.setContext(this.getContext()),m=g.display?g.width:0,p=m/2,b=function(L){return ee(i,L,m)};let x,v,_,y,w,k,S,P,D,C,O,E;if(r==="top")x=b(this.bottom),k=this.bottom-d,P=x-p,C=b(t.top)+p,E=t.bottom;else if(r==="bottom")x=b(this.top),C=t.top,E=b(t.bottom)-p,k=x+p,P=this.top+d;else if(r==="left")x=b(this.right),w=this.right-d,S=x-p,D=b(t.left)+p,O=t.right;else if(r==="right")x=b(this.left),D=t.left,O=b(t.right)-p,w=x+p,S=this.left+d;else if(n==="x"){if(r==="center")x=b((t.top+t.bottom)/2+.5);else if(z(r)){const L=Object.keys(r)[0],I=r[L];x=b(this.chart.scales[L].getPixelForValue(I))}C=t.top,E=t.bottom,k=x+p,P=k+d}else if(n==="y"){if(r==="center")x=b((t.left+t.right)/2);else if(z(r)){const L=Object.keys(r)[0],I=r[L];x=b(this.chart.scales[L].getPixelForValue(I))}w=x-p,S=w-d,D=t.left,O=t.right}const F=j(s.ticks.maxTicksLimit,u),R=Math.max(1,Math.ceil(u/F));for(v=0;v<u;v+=R){const L=this.getContext(v),I=o.setContext(L),Y=a.setContext(L),$=I.lineWidth,N=I.color,tt=Y.dash||[],Q=Y.dashOffset,nt=I.tickWidth,U=I.tickColor,X=I.tickBorderDash||[],q=I.tickBorderDashOffset;_=Yd(this,v,l),_!==void 0&&(y=ee(i,_,$),c?w=S=D=O=y:k=P=C=E=y,f.push({tx1:w,ty1:k,tx2:S,ty2:P,x1:D,y1:C,x2:O,y2:E,width:$,color:N,borderDash:tt,borderDashOffset:Q,tickWidth:nt,tickColor:U,tickBorderDash:X,tickBorderDashOffset:q}))}return this._ticksLength=u,this._borderValue=x,f}_computeLabelItems(t){const n=this.axis,i=this.options,{position:s,ticks:o}=i,r=this.isHorizontal(),a=this.ticks,{align:l,crossAlign:c,padding:h,mirror:u}=o,d=Ie(i.grid),f=d+h,g=u?-h:f,m=-ae(this.labelRotation),p=[];let b,x,v,_,y,w,k,S,P,D,C,O,E="middle";if(s==="top")w=this.bottom-g,k=this._getXAxisLabelAlignment();else if(s==="bottom")w=this.top+g,k=this._getXAxisLabelAlignment();else if(s==="left"){const R=this._getYAxisLabelAlignment(d);k=R.textAlign,y=R.x}else if(s==="right"){const R=this._getYAxisLabelAlignment(d);k=R.textAlign,y=R.x}else if(n==="x"){if(s==="center")w=(t.top+t.bottom)/2+f;else if(z(s)){const R=Object.keys(s)[0],L=s[R];w=this.chart.scales[R].getPixelForValue(L)+f}k=this._getXAxisLabelAlignment()}else if(n==="y"){if(s==="center")y=(t.left+t.right)/2-f;else if(z(s)){const R=Object.keys(s)[0],L=s[R];y=this.chart.scales[R].getPixelForValue(L)}k=this._getYAxisLabelAlignment(d).textAlign}n==="y"&&(l==="start"?E="top":l==="end"&&(E="bottom"));const F=this._getLabelSizes();for(b=0,x=a.length;b<x;++b){v=a[b],_=v.label;const R=o.setContext(this.getContext(b));S=this.getPixelForTick(b)+o.labelOffset,P=this._resolveTickFontOptions(b),D=P.lineHeight,C=J(_)?_.length:1;const L=C/2,I=R.color,Y=R.textStrokeColor,$=R.textStrokeWidth;let N=k;r?(y=S,k==="inner"&&(b===x-1?N=this.options.reverse?"left":"right":b===0?N=this.options.reverse?"right":"left":N="center"),s==="top"?c==="near"||m!==0?O=-C*D+D/2:c==="center"?O=-F.highest.height/2-L*D+D:O=-F.highest.height+D/2:c==="near"||m!==0?O=D/2:c==="center"?O=F.highest.height/2-L*D:O=F.highest.height-C*D,u&&(O*=-1),m!==0&&!R.showLabelBackdrop&&(y+=D/2*Math.sin(m))):(w=S,O=(1-C)*D/2);let tt;if(R.showLabelBackdrop){const Q=_t(R.backdropPadding),nt=F.heights[b],U=F.widths[b];let X=O-Q.top,q=0-Q.left;switch(E){case"middle":X-=nt/2;break;case"bottom":X-=nt;break}switch(k){case"center":q-=U/2;break;case"right":q-=U;break;case"inner":b===x-1?q-=U:b>0&&(q-=U/2);break}tt={left:q,top:X,width:U+Q.width,height:nt+Q.height,color:R.backdropColor}}p.push({label:_,font:P,textOffset:O,options:{rotation:m,color:I,strokeColor:Y,strokeWidth:$,textAlign:N,textBaseline:E,translation:[y,w],backdrop:tt}})}return p}_getXAxisLabelAlignment(){const{position:t,ticks:n}=this.options;if(-ae(this.labelRotation))return t==="top"?"left":"right";let s="center";return n.align==="start"?s="left":n.align==="end"?s="right":n.align==="inner"&&(s="inner"),s}_getYAxisLabelAlignment(t){const{position:n,ticks:{crossAlign:i,mirror:s,padding:o}}=this.options,r=this._getLabelSizes(),a=t+o,l=r.widest.width;let c,h;return n==="left"?s?(h=this.right+o,i==="near"?c="left":i==="center"?(c="center",h+=l/2):(c="right",h+=l)):(h=this.right-a,i==="near"?c="right":i==="center"?(c="center",h-=l/2):(c="left",h=this.left)):n==="right"?s?(h=this.left+o,i==="near"?c="right":i==="center"?(c="center",h-=l/2):(c="left",h-=l)):(h=this.left+a,i==="near"?c="left":i==="center"?(c="center",h+=l/2):(c="right",h=this.right)):c="right",{textAlign:c,x:h}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,n=this.options.position;if(n==="left"||n==="right")return{top:0,left:this.left,bottom:t.height,right:this.right};if(n==="top"||n==="bottom")return{top:this.top,left:0,bottom:this.bottom,right:t.width}}drawBackground(){const{ctx:t,options:{backgroundColor:n},left:i,top:s,width:o,height:r}=this;n&&(t.save(),t.fillStyle=n,t.fillRect(i,s,o,r),t.restore())}getLineWidthForValue(t){const n=this.options.grid;if(!this._isVisible()||!n.display)return 0;const s=this.ticks.findIndex(o=>o.value===t);return s>=0?n.setContext(this.getContext(s)).lineWidth:0}drawGrid(t){const n=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let o,r;const a=(l,c,h)=>{!h.width||!h.color||(i.save(),i.lineWidth=h.width,i.strokeStyle=h.color,i.setLineDash(h.borderDash||[]),i.lineDashOffset=h.borderDashOffset,i.beginPath(),i.moveTo(l.x,l.y),i.lineTo(c.x,c.y),i.stroke(),i.restore())};if(n.display)for(o=0,r=s.length;o<r;++o){const l=s[o];n.drawOnChartArea&&a({x:l.x1,y:l.y1},{x:l.x2,y:l.y2},l),n.drawTicks&&a({x:l.tx1,y:l.ty1},{x:l.tx2,y:l.ty2},{color:l.tickColor,width:l.tickWidth,borderDash:l.tickBorderDash,borderDashOffset:l.tickBorderDashOffset})}}drawBorder(){const{chart:t,ctx:n,options:{border:i,grid:s}}=this,o=i.setContext(this.getContext()),r=i.display?o.width:0;if(!r)return;const a=s.setContext(this.getContext(0)).lineWidth,l=this._borderValue;let c,h,u,d;this.isHorizontal()?(c=ee(t,this.left,r)-r/2,h=ee(t,this.right,a)+a/2,u=d=l):(u=ee(t,this.top,r)-r/2,d=ee(t,this.bottom,a)+a/2,c=h=l),n.save(),n.lineWidth=o.width,n.strokeStyle=o.color,n.beginPath(),n.moveTo(c,u),n.lineTo(h,d),n.stroke(),n.restore()}drawLabels(t){if(!this.options.ticks.display)return;const i=this.ctx,s=this._computeLabelArea();s&&Gi(i,s);const o=this.getLabelItems(t);for(const r of o){const a=r.options,l=r.font,c=r.label,h=r.textOffset;en(i,c,0,h,l,a)}s&&Ji(i)}drawTitle(){const{ctx:t,options:{position:n,title:i,reverse:s}}=this;if(!i.display)return;const o=at(i.font),r=_t(i.padding),a=i.align;let l=o.lineHeight/2;n==="bottom"||n==="center"||z(n)?(l+=r.bottom,J(i.text)&&(l+=o.lineHeight*(i.text.length-1))):l+=r.top;const{titleX:c,titleY:h,maxWidth:u,rotation:d}=Gd(this,l,n,a);en(t,i.text,0,0,o,{color:i.color,maxWidth:u,rotation:d,textAlign:qd(a,n,s),textBaseline:"middle",translation:[c,h]})}draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),this.drawBorder(),this.drawTitle(),this.drawLabels(t))}_layers(){const t=this.options,n=t.ticks&&t.ticks.z||0,i=j(t.grid&&t.grid.z,-1),s=j(t.border&&t.border.z,0);return!this._isVisible()||this.draw!==De.prototype.draw?[{z:n,draw:o=>{this.draw(o)}}]:[{z:i,draw:o=>{this.drawBackground(),this.drawGrid(o),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:n,draw:o=>{this.drawLabels(o)}}]}getMatchingVisibleMetas(t){const n=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let o,r;for(o=0,r=n.length;o<r;++o){const a=n[o];a[i]===this.id&&(!t||a.type===t)&&s.push(a)}return s}_resolveTickFontOptions(t){const n=this.options.ticks.setContext(this.getContext(t));return at(n.font)}_maxDigits(){const t=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/t}}class wn{constructor(t,n,i){this.type=t,this.scope=n,this.override=i,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){const n=Object.getPrototypeOf(t);let i;Qd(n)&&(i=this.register(n));const s=this.items,o=t.id,r=this.scope+"."+o;if(!o)throw new Error("class does not have id: "+t);return o in s||(s[o]=t,Jd(t,r,i),this.override&&K.override(t.id,t.overrides)),r}get(t){return this.items[t]}unregister(t){const n=this.items,i=t.id,s=this.scope;i in n&&delete n[i],s&&i in K[s]&&(delete K[s][i],this.override&&delete fe[i])}}function Jd(e,t,n){const i=Je(Object.create(null),[n?K.get(n):{},K.get(t),e.defaults]);K.set(t,i),e.defaultRoutes&&Zd(t,e.defaultRoutes),e.descriptors&&K.describe(t,e.descriptors)}function Zd(e,t){Object.keys(t).forEach(n=>{const i=n.split("."),s=i.pop(),o=[e].concat(i).join("."),r=t[n].split("."),a=r.pop(),l=r.join(".");K.route(o,s,l,a)})}function Qd(e){return"id"in e&&"defaults"in e}class tf{constructor(){this.controllers=new wn(_e,"datasets",!0),this.elements=new wn($t,"elements"),this.plugins=new wn(Object,"plugins"),this.scales=new wn(De,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,n,i){[...n].forEach(s=>{const o=i||this._getRegistryForType(s);i||o.isForType(s)||o===this.plugins&&s.id?this._exec(t,o,s):H(s,r=>{const a=i||this._getRegistryForType(r);this._exec(t,a,r)})})}_exec(t,n,i){const s=Yi(t);V(i["before"+s],[],i),n[t](i),V(i["after"+s],[],i)}_getRegistryForType(t){for(let n=0;n<this._typedRegistries.length;n++){const i=this._typedRegistries[n];if(i.isForType(t))return i}return this.plugins}_get(t,n,i){const s=n.get(t);if(s===void 0)throw new Error('"'+t+'" is not a registered '+i+".");return s}}var Mt=new tf;class ef{constructor(){this._init=[]}notify(t,n,i,s){n==="beforeInit"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));const o=s?this._descriptors(t).filter(s):this._descriptors(t),r=this._notify(o,t,n,i);return n==="afterDestroy"&&(this._notify(o,t,"stop"),this._notify(this._init,t,"uninstall")),r}_notify(t,n,i,s){s=s||{};for(const o of t){const r=o.plugin,a=r[i],l=[n,s,o.options];if(V(a,l,r)===!1&&s.cancelable)return!1}return!0}invalidate(){W(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;const n=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),n}_createDescriptors(t,n){const i=t&&t.config,s=j(i.options&&i.options.plugins,{}),o=nf(i);return s===!1&&!n?[]:of(t,o,s,n)}_notifyStateChanges(t){const n=this._oldCache||[],i=this._cache,s=(o,r)=>o.filter(a=>!r.some(l=>a.plugin.id===l.plugin.id));this._notify(s(n,i),t,"stop"),this._notify(s(i,n),t,"start")}}function nf(e){const t={},n=[],i=Object.keys(Mt.plugins.items);for(let o=0;o<i.length;o++)n.push(Mt.getPlugin(i[o]));const s=e.plugins||[];for(let o=0;o<s.length;o++){const r=s[o];n.indexOf(r)===-1&&(n.push(r),t[r.id]=!0)}return{plugins:n,localIds:t}}function sf(e,t){return!t&&e===!1?null:e===!0?{}:e}function of(e,{plugins:t,localIds:n},i,s){const o=[],r=e.getContext();for(const a of t){const l=a.id,c=sf(i[l],s);c!==null&&o.push({plugin:a,options:rf(e.config,{plugin:a,local:n[l]},c,r)})}return o}function rf(e,{plugin:t,local:n},i,s){const o=e.pluginScopeKeys(t),r=e.getOptionScopes(i,o);return n&&t.defaults&&r.push(t.defaults),e.createResolver(r,s,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function Pi(e,t){const n=K.datasets[e]||{};return((t.datasets||{})[e]||{}).indexAxis||t.indexAxis||n.indexAxis||"x"}function af(e,t){let n=e;return e==="_index_"?n=t:e==="_value_"&&(n=t==="x"?"y":"x"),n}function lf(e,t){return e===t?"_index_":"_value_"}function ko(e){if(e==="x"||e==="y"||e==="r")return e}function cf(e){if(e==="top"||e==="bottom")return"x";if(e==="left"||e==="right")return"y"}function Oi(e,...t){if(ko(e))return e;for(const n of t){const i=n.axis||cf(n.position)||e.length>1&&ko(e[0].toLowerCase());if(i)return i}throw new Error(`Cannot determine type of '${e}' axis. Please provide 'axis' or 'position' option.`)}function Mo(e,t,n){if(n[t+"AxisID"]===e)return{axis:t}}function hf(e,t){if(t.data&&t.data.datasets){const n=t.data.datasets.filter(i=>i.xAxisID===e||i.yAxisID===e);if(n.length)return Mo(e,"x",n[0])||Mo(e,"y",n[0])}return{}}function uf(e,t){const n=fe[e.type]||{scales:{}},i=t.scales||{},s=Pi(e.type,t),o=Object.create(null);return Object.keys(i).forEach(r=>{const a=i[r];if(!z(a))return console.error(`Invalid scale configuration for scale: ${r}`);if(a._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${r}`);const l=Oi(r,a,hf(r,e),K.scales[a.type]),c=lf(l,s),h=n.scales||{};o[r]=Ve(Object.create(null),[{axis:l},a,h[l],h[c]])}),e.data.datasets.forEach(r=>{const a=r.type||e.type,l=r.indexAxis||Pi(a,t),h=(fe[a]||{}).scales||{};Object.keys(h).forEach(u=>{const d=af(u,l),f=r[d+"AxisID"]||d;o[f]=o[f]||Object.create(null),Ve(o[f],[{axis:d},i[f],h[u]])})}),Object.keys(o).forEach(r=>{const a=o[r];Ve(a,[K.scales[a.type],K.scale])}),o}function xa(e){const t=e.options||(e.options={});t.plugins=j(t.plugins,{}),t.scales=uf(e,t)}function ya(e){return e=e||{},e.datasets=e.datasets||[],e.labels=e.labels||[],e}function df(e){return e=e||{},e.data=ya(e.data),xa(e),e}const Co=new Map,va=new Set;function Sn(e,t){let n=Co.get(e);return n||(n=t(),Co.set(e,n),va.add(n)),n}const je=(e,t,n)=>{const i=Ce(t,n);i!==void 0&&e.add(i)};class ff{constructor(t){this._config=df(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=ya(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),xa(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Sn(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,n){return Sn(`${t}.transition.${n}`,()=>[[`datasets.${t}.transitions.${n}`,`transitions.${n}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,n){return Sn(`${t}-${n}`,()=>[[`datasets.${t}.elements.${n}`,`datasets.${t}`,`elements.${n}`,""]])}pluginScopeKeys(t){const n=t.id,i=this.type;return Sn(`${i}-plugin-${n}`,()=>[[`plugins.${n}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,n){const i=this._scopeCache;let s=i.get(t);return(!s||n)&&(s=new Map,i.set(t,s)),s}getOptionScopes(t,n,i){const{options:s,type:o}=this,r=this._cachedScopes(t,i),a=r.get(n);if(a)return a;const l=new Set;n.forEach(h=>{t&&(l.add(t),h.forEach(u=>je(l,t,u))),h.forEach(u=>je(l,s,u)),h.forEach(u=>je(l,fe[o]||{},u)),h.forEach(u=>je(l,K,u)),h.forEach(u=>je(l,Mi,u))});const c=Array.from(l);return c.length===0&&c.push(Object.create(null)),va.has(n)&&r.set(n,c),c}chartOptionScopes(){const{options:t,type:n}=this;return[t,fe[n]||{},K.datasets[n]||{},{type:n},K,Mi]}resolveNamedOptions(t,n,i,s=[""]){const o={$shared:!0},{resolver:r,subPrefixes:a}=Po(this._resolverCache,t,s);let l=r;if(gf(r,n)){o.$shared=!1,i=Xt(i)?i():i;const c=this.createResolver(t,i,a);l=Pe(r,i,c)}for(const c of n)o[c]=l[c];return o}createResolver(t,n,i=[""],s){const{resolver:o}=Po(this._resolverCache,t,i);return z(n)?Pe(o,n,void 0,s):o}}function Po(e,t,n){let i=e.get(t);i||(i=new Map,e.set(t,i));const s=n.join();let o=i.get(s);return o||(o={resolver:Qi(t,n),subPrefixes:n.filter(a=>!a.toLowerCase().includes("hover"))},i.set(s,o)),o}const pf=e=>z(e)&&Object.getOwnPropertyNames(e).some(t=>Xt(e[t]));function gf(e,t){const{isScriptable:n,isIndexable:i}=na(e);for(const s of t){const o=n(s),r=i(s),a=(r||o)&&e[s];if(o&&(Xt(a)||pf(a))||r&&J(a))return!0}return!1}var mf="4.4.7";const bf=["top","bottom","left","right","chartArea"];function Oo(e,t){return e==="top"||e==="bottom"||bf.indexOf(e)===-1&&t==="x"}function Do(e,t){return function(n,i){return n[e]===i[e]?n[t]-i[t]:n[e]-i[e]}}function Ao(e){const t=e.chart,n=t.options.animation;t.notifyPlugins("afterRender"),V(n&&n.onComplete,[e],t)}function xf(e){const t=e.chart,n=t.options.animation;V(n&&n.onProgress,[e],t)}function _a(e){return ns()&&typeof e=="string"?e=document.getElementById(e):e&&e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas),e}const Rn={},Eo=e=>{const t=_a(e);return Object.values(Rn).filter(n=>n.canvas===t).pop()};function yf(e,t,n){const i=Object.keys(e);for(const s of i){const o=+s;if(o>=t){const r=e[s];delete e[s],(n>0||o>t)&&(e[o+n]=r)}}}function vf(e,t,n,i){return!n||e.type==="mouseout"?null:i?t:e}function kn(e,t,n){return e.options.clip?e[n]:t[n]}function _f(e,t){const{xScale:n,yScale:i}=e;return n&&i?{left:kn(n,t,"left"),right:kn(n,t,"right"),top:kn(i,t,"top"),bottom:kn(i,t,"bottom")}:t}class Ct{static register(...t){Mt.add(...t),To()}static unregister(...t){Mt.remove(...t),To()}constructor(t,n){const i=this.config=new ff(n),s=_a(t),o=Eo(s);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const r=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||jd(s)),this.platform.updateConfig(i);const a=this.platform.acquireContext(s,r.aspectRatio),l=a&&a.canvas,c=l&&l.height,h=l&&l.width;if(this.id=yh(),this.ctx=a,this.canvas=l,this.width=h,this.height=c,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new ef,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=jh(u=>this.update(u),r.resizeDelay||0),this._dataChanges=[],Rn[this.id]=this,!a||!l){console.error("Failed to create chart: can't acquire context from the given item");return}Tt.listen(this,"complete",Ao),Tt.listen(this,"progress",xf),this._initialize(),this.attached&&this.update()}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:n},width:i,height:s,_aspectRatio:o}=this;return W(t)?n&&o?o:s?i/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return Mt}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Qs(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Gs(this.canvas,this.ctx),this}stop(){return Tt.stop(this),this}resize(t,n){Tt.running(this)?this._resizeBeforeDraw={width:t,height:n}:this._resize(t,n)}_resize(t,n){const i=this.options,s=this.canvas,o=i.maintainAspectRatio&&this.aspectRatio,r=this.platform.getMaximumSize(s,t,n,o),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=r.width,this.height=r.height,this._aspectRatio=this.aspectRatio,Qs(this,a,!0)&&(this.notifyPlugins("resize",{size:r}),V(i.onResize,[this,r],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){const n=this.options.scales||{};H(n,(i,s)=>{i.id=s})}buildOrUpdateScales(){const t=this.options,n=t.scales,i=this.scales,s=Object.keys(i).reduce((r,a)=>(r[a]=!1,r),{});let o=[];n&&(o=o.concat(Object.keys(n).map(r=>{const a=n[r],l=Oi(r,a),c=l==="r",h=l==="x";return{options:a,dposition:c?"chartArea":h?"bottom":"left",dtype:c?"radialLinear":h?"category":"linear"}}))),H(o,r=>{const a=r.options,l=a.id,c=Oi(l,a),h=j(a.type,r.dtype);(a.position===void 0||Oo(a.position,c)!==Oo(r.dposition))&&(a.position=r.dposition),s[l]=!0;let u=null;if(l in i&&i[l].type===h)u=i[l];else{const d=Mt.getScale(h);u=new d({id:l,type:h,ctx:this.ctx,chart:this}),i[u.id]=u}u.init(a,t)}),H(s,(r,a)=>{r||delete i[a]}),H(i,r=>{bt.configure(this,r,r.options),bt.addBox(this,r)})}_updateMetasets(){const t=this._metasets,n=this.data.datasets.length,i=t.length;if(t.sort((s,o)=>s.index-o.index),i>n){for(let s=n;s<i;++s)this._destroyDatasetMeta(s);t.splice(n,i-n)}this._sortedMetasets=t.slice(0).sort(Do("order","index"))}_removeUnreferencedMetasets(){const{_metasets:t,data:{datasets:n}}=this;t.length>n.length&&delete this._stacks,t.forEach((i,s)=>{n.filter(o=>o===i._dataset).length===0&&this._destroyDatasetMeta(s)})}buildOrUpdateControllers(){const t=[],n=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=n.length;i<s;i++){const o=n[i];let r=this.getDatasetMeta(i);const a=o.type||this.config.type;if(r.type&&r.type!==a&&(this._destroyDatasetMeta(i),r=this.getDatasetMeta(i)),r.type=a,r.indexAxis=o.indexAxis||Pi(a,this.options),r.order=o.order||0,r.index=i,r.label=""+o.label,r.visible=this.isDatasetVisible(i),r.controller)r.controller.updateIndex(i),r.controller.linkScales();else{const l=Mt.getController(a),{datasetElementType:c,dataElementType:h}=K.datasets[a];Object.assign(l,{dataElementType:Mt.getElement(h),datasetElementType:c&&Mt.getElement(c)}),r.controller=new l(this,i),t.push(r.controller)}}return this._updateMetasets(),t}_resetElements(){H(this.data.datasets,(t,n)=>{this.getDatasetMeta(n).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const n=this.config;n.update();const i=this._options=n.createResolver(n.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;const o=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let r=0;for(let c=0,h=this.data.datasets.length;c<h;c++){const{controller:u}=this.getDatasetMeta(c),d=!s&&o.indexOf(u)===-1;u.buildOrUpdateElements(d),r=Math.max(+u.getMaxOverflow(),r)}r=this._minPadding=i.layout.autoPadding?r:0,this._updateLayout(r),s||H(o,c=>{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Do("z","_idx"));const{_active:a,_lastEvent:l}=this;l?this._eventHandler(l,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){H(this.scales,t=>{bt.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,n=new Set(Object.keys(this._listeners)),i=new Set(t.events);(!Ns(n,i)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,n=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:o}of n){const r=i==="_removeElements"?-o:o;yf(t,s,r)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const n=this.data.datasets.length,i=o=>new Set(t.filter(r=>r[0]===o).map((r,a)=>a+","+r.splice(1).join(","))),s=i(0);for(let o=1;o<n;o++)if(!Ns(s,i(o)))return;return Array.from(s).map(o=>o.split(",")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;bt.update(this,this.width,this.height,t);const n=this.chartArea,i=n.width<=0||n.height<=0;this._layers=[],H(this.boxes,s=>{i&&s.position==="chartArea"||(s.configure&&s.configure(),this._layers.push(...s._layers()))},this),this._layers.forEach((s,o)=>{s._idx=o}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let n=0,i=this.data.datasets.length;n<i;++n)this.getDatasetMeta(n).controller.configure();for(let n=0,i=this.data.datasets.length;n<i;++n)this._updateDataset(n,Xt(t)?t({datasetIndex:n}):t);this.notifyPlugins("afterDatasetsUpdate",{mode:t})}}_updateDataset(t,n){const i=this.getDatasetMeta(t),s={meta:i,index:t,mode:n,cancelable:!0};this.notifyPlugins("beforeDatasetUpdate",s)!==!1&&(i.controller._update(n),s.cancelable=!1,this.notifyPlugins("afterDatasetUpdate",s))}render(){this.notifyPlugins("beforeRender",{cancelable:!0})!==!1&&(Tt.has(this)?this.attached&&!Tt.running(this)&&Tt.start(this):(this.draw(),Ao({chart:this})))}draw(){let t;if(this._resizeBeforeDraw){const{width:i,height:s}=this._resizeBeforeDraw;this._resizeBeforeDraw=null,this._resize(i,s)}if(this.clear(),this.width<=0||this.height<=0||this.notifyPlugins("beforeDraw",{cancelable:!0})===!1)return;const n=this._layers;for(t=0;t<n.length&&n[t].z<=0;++t)n[t].draw(this.chartArea);for(this._drawDatasets();t<n.length;++t)n[t].draw(this.chartArea);this.notifyPlugins("afterDraw")}_getSortedDatasetMetas(t){const n=this._sortedMetasets,i=[];let s,o;for(s=0,o=n.length;s<o;++s){const r=n[s];(!t||r.visible)&&i.push(r)}return i}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(this.notifyPlugins("beforeDatasetsDraw",{cancelable:!0})===!1)return;const t=this.getSortedVisibleDatasetMetas();for(let n=t.length-1;n>=0;--n)this._drawDataset(t[n]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const n=this.ctx,i=t._clip,s=!i.disabled,o=_f(t,this.chartArea),r={meta:t,index:t.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",r)!==!1&&(s&&Gi(n,{left:i.left===!1?0:o.left-i.left,right:i.right===!1?this.width:o.right+i.right,top:i.top===!1?0:o.top-i.top,bottom:i.bottom===!1?this.height:o.bottom+i.bottom}),t.controller.draw(),s&&Ji(n),r.cancelable=!1,this.notifyPlugins("afterDatasetDraw",r))}isPointInArea(t){return tn(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,n,i,s){const o=md.modes[n];return typeof o=="function"?o(this,t,i,s):[]}getDatasetMeta(t){const n=this.data.datasets[t],i=this._metasets;let s=i.filter(o=>o&&o._dataset===n).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:n&&n.order||0,index:t,_dataset:n,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=pe(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const n=this.data.datasets[t];if(!n)return!1;const i=this.getDatasetMeta(t);return typeof i.hidden=="boolean"?!i.hidden:!n.hidden}setDatasetVisibility(t,n){const i=this.getDatasetMeta(t);i.hidden=!n}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,n,i){const s=i?"show":"hide",o=this.getDatasetMeta(t),r=o.controller._resolveAnimations(void 0,s);Ze(n)?(o.data[n].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),r.update(o,{visible:i}),this.update(a=>a.datasetIndex===t?s:void 0))}hide(t,n){this._updateVisibility(t,n,!1)}show(t,n){this._updateVisibility(t,n,!0)}_destroyDatasetMeta(t){const n=this._metasets[t];n&&n.controller&&n.controller._destroy(),delete this._metasets[t]}_stop(){let t,n;for(this.stop(),Tt.remove(this),t=0,n=this.data.datasets.length;t<n;++t)this._destroyDatasetMeta(t)}destroy(){this.notifyPlugins("beforeDestroy");const{canvas:t,ctx:n}=this;this._stop(),this.config.clearCache(),t&&(this.unbindEvents(),Gs(t,n),this.platform.releaseContext(n),this.canvas=null,this.ctx=null),delete Rn[this.id],this.notifyPlugins("afterDestroy")}toBase64Image(...t){return this.canvas.toDataURL(...t)}bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindResponsiveEvents():this.attached=!0}bindUserEvents(){const t=this._listeners,n=this.platform,i=(o,r)=>{n.addEventListener(this,o,r),t[o]=r},s=(o,r,a)=>{o.offsetX=r,o.offsetY=a,this._eventHandler(o)};H(this.options.events,o=>i(o,s))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,n=this.platform,i=(l,c)=>{n.addEventListener(this,l,c),t[l]=c},s=(l,c)=>{t[l]&&(n.removeEventListener(this,l,c),delete t[l])},o=(l,c)=>{this.canvas&&this.resize(l,c)};let r;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",o),i("detach",r)};r=()=>{this.attached=!1,s("resize",o),this._stop(),this._resize(0,0),i("attach",a)},n.isAttached(this.canvas)?a():r()}unbindEvents(){H(this._listeners,(t,n)=>{this.platform.removeEventListener(this,n,t)}),this._listeners={},H(this._responsiveListeners,(t,n)=>{this.platform.removeEventListener(this,n,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,n,i){const s=i?"set":"remove";let o,r,a,l;for(n==="dataset"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller["_"+s+"DatasetHoverStyle"]()),a=0,l=t.length;a<l;++a){r=t[a];const c=r&&this.getDatasetMeta(r.datasetIndex).controller;c&&c[s+"HoverStyle"](r.element,r.datasetIndex,r.index)}}getActiveElements(){return this._active||[]}setActiveElements(t){const n=this._active||[],i=t.map(({datasetIndex:o,index:r})=>{const a=this.getDatasetMeta(o);if(!a)throw new Error("No dataset found at index "+o);return{datasetIndex:o,element:a.data[r],index:r}});!Fn(i,n)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,n))}notifyPlugins(t,n,i){return this._plugins.notify(this,t,n,i)}isPluginEnabled(t){return this._plugins._cache.filter(n=>n.plugin.id===t).length===1}_updateHoverStyles(t,n,i){const s=this.options.hover,o=(l,c)=>l.filter(h=>!c.some(u=>h.datasetIndex===u.datasetIndex&&h.index===u.index)),r=o(n,t),a=i?t:o(t,n);r.length&&this.updateHoverStyle(r,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,n){const i={event:t,replay:n,cancelable:!0,inChartArea:this.isPointInArea(t)},s=r=>(r.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",i,s)===!1)return;const o=this._handleEvent(t,n,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(o||i.changed)&&this.render(),this}_handleEvent(t,n,i){const{_active:s=[],options:o}=this,r=n,a=this._getActiveElements(t,s,i,r),l=Mh(t),c=vf(t,this._lastEvent,i,l);i&&(this._lastEvent=null,V(o.onHover,[t,a,this],this),l&&V(o.onClick,[t,a,this],this));const h=!Fn(a,s);return(h||n)&&(this._active=a,this._updateHoverStyles(a,s,n)),this._lastEvent=c,h}_getActiveElements(t,n,i,s){if(t.type==="mouseout")return[];if(!i)return n;const o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,s)}}T(Ct,"defaults",K),T(Ct,"instances",Rn),T(Ct,"overrides",fe),T(Ct,"registry",Mt),T(Ct,"version",mf),T(Ct,"getChart",Eo);function To(){return H(Ct.instances,e=>e._plugins.invalidate())}function wf(e,t,n){const{startAngle:i,pixelMargin:s,x:o,y:r,outerRadius:a,innerRadius:l}=t;let c=s/a;e.beginPath(),e.arc(o,r,a,i-c,n+c),l>s?(c=s/l,e.arc(o,r,l,n+c,i-c,!0)):e.arc(o,r,s,n+it,i-it),e.closePath(),e.clip()}function Sf(e){return Zi(e,["outerStart","outerEnd","innerStart","innerEnd"])}function kf(e,t,n,i){const s=Sf(e.options.borderRadius),o=(n-t)/2,r=Math.min(o,i*t/2),a=l=>{const c=(n-Math.min(o,l))*i/2;return rt(l,0,Math.min(o,c))};return{outerStart:a(s.outerStart),outerEnd:a(s.outerEnd),innerStart:rt(s.innerStart,0,r),innerEnd:rt(s.innerEnd,0,r)}}function be(e,t,n,i){return{x:n+e*Math.cos(t),y:i+e*Math.sin(t)}}function Bn(e,t,n,i,s,o){const{x:r,y:a,startAngle:l,pixelMargin:c,innerRadius:h}=t,u=Math.max(t.outerRadius+i+n-c,0),d=h>0?h+i+n+c:0;let f=0;const g=s-l;if(i){const R=h>0?h-i:0,L=u>0?u-i:0,I=(R+L)/2,Y=I!==0?g*I/(I+i):g;f=(g-Y)/2}const m=Math.max(.001,g*u-n/Z)/u,p=(g-m)/2,b=l+p+f,x=s-p-f,{outerStart:v,outerEnd:_,innerStart:y,innerEnd:w}=kf(t,d,u,x-b),k=u-v,S=u-_,P=b+v/k,D=x-_/S,C=d+y,O=d+w,E=b+y/C,F=x-w/O;if(e.beginPath(),o){const R=(P+D)/2;if(e.arc(r,a,u,P,R),e.arc(r,a,u,R,D),_>0){const $=be(S,D,r,a);e.arc($.x,$.y,_,D,x+it)}const L=be(O,x,r,a);if(e.lineTo(L.x,L.y),w>0){const $=be(O,F,r,a);e.arc($.x,$.y,w,x+it,F+Math.PI)}const I=(x-w/d+(b+y/d))/2;if(e.arc(r,a,d,x-w/d,I,!0),e.arc(r,a,d,I,b+y/d,!0),y>0){const $=be(C,E,r,a);e.arc($.x,$.y,y,E+Math.PI,b-it)}const Y=be(k,b,r,a);if(e.lineTo(Y.x,Y.y),v>0){const $=be(k,P,r,a);e.arc($.x,$.y,v,b-it,P)}}else{e.moveTo(r,a);const R=Math.cos(P)*u+r,L=Math.sin(P)*u+a;e.lineTo(R,L);const I=Math.cos(D)*u+r,Y=Math.sin(D)*u+a;e.lineTo(I,Y)}e.closePath()}function Mf(e,t,n,i,s){const{fullCircles:o,startAngle:r,circumference:a}=t;let l=t.endAngle;if(o){Bn(e,t,n,i,l,s);for(let c=0;c<o;++c)e.fill();isNaN(a)||(l=r+(a%st||st))}return Bn(e,t,n,i,l,s),e.fill(),l}function Cf(e,t,n,i,s){const{fullCircles:o,startAngle:r,circumference:a,options:l}=t,{borderWidth:c,borderJoinStyle:h,borderDash:u,borderDashOffset:d}=l,f=l.borderAlign==="inner";if(!c)return;e.setLineDash(u||[]),e.lineDashOffset=d,f?(e.lineWidth=c*2,e.lineJoin=h||"round"):(e.lineWidth=c,e.lineJoin=h||"bevel");let g=t.endAngle;if(o){Bn(e,t,n,i,g,s);for(let m=0;m<o;++m)e.stroke();isNaN(a)||(g=r+(a%st||st))}f&&wf(e,t,g),o||(Bn(e,t,n,i,g,s),e.stroke())}class Mn extends $t{constructor(n){super();T(this,"circumference");T(this,"endAngle");T(this,"fullCircles");T(this,"innerRadius");T(this,"outerRadius");T(this,"pixelMargin");T(this,"startAngle");this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,n&&Object.assign(this,n)}inRange(n,i,s){const o=this.getProps(["x","y"],s),{angle:r,distance:a}=Ur(o,{x:n,y:i}),{startAngle:l,endAngle:c,innerRadius:h,outerRadius:u,circumference:d}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],s),f=(this.options.spacing+this.options.borderWidth)/2,g=j(d,c-l),m=Ui(r,l,c)&&l!==c,p=g>=st||m,b=Ht(a,h+f,u+f);return p&&b}getCenterPoint(n){const{x:i,y:s,startAngle:o,endAngle:r,innerRadius:a,outerRadius:l}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],n),{offset:c,spacing:h}=this.options,u=(o+r)/2,d=(a+l+h+c)/2;return{x:i+Math.cos(u)*d,y:s+Math.sin(u)*d}}tooltipPosition(n){return this.getCenterPoint(n)}draw(n){const{options:i,circumference:s}=this,o=(i.offset||0)/4,r=(i.spacing||0)/2,a=i.circular;if(this.pixelMargin=i.borderAlign==="inner"?.33:0,this.fullCircles=s>st?Math.floor(s/st):0,s===0||this.innerRadius<0||this.outerRadius<0)return;n.save();const l=(this.startAngle+this.endAngle)/2;n.translate(Math.cos(l)*o,Math.sin(l)*o);const c=1-Math.sin(Math.min(Z,s||0)),h=o*c;n.fillStyle=i.backgroundColor,n.strokeStyle=i.borderColor,Mf(n,this,h,r,a),Cf(n,this,h,r,a),n.restore()}}T(Mn,"id","arc"),T(Mn,"defaults",{borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0}),T(Mn,"defaultRoutes",{backgroundColor:"backgroundColor"}),T(Mn,"descriptors",{_scriptable:!0,_indexable:n=>n!=="borderDash"});function wa(e,t,n=t){e.lineCap=j(n.borderCapStyle,t.borderCapStyle),e.setLineDash(j(n.borderDash,t.borderDash)),e.lineDashOffset=j(n.borderDashOffset,t.borderDashOffset),e.lineJoin=j(n.borderJoinStyle,t.borderJoinStyle),e.lineWidth=j(n.borderWidth,t.borderWidth),e.strokeStyle=j(n.borderColor,t.borderColor)}function Pf(e,t,n){e.lineTo(n.x,n.y)}function Of(e){return e.stepped?Gh:e.tension||e.cubicInterpolationMode==="monotone"?Jh:Pf}function Sa(e,t,n={}){const i=e.length,{start:s=0,end:o=i-1}=n,{start:r,end:a}=t,l=Math.max(s,r),c=Math.min(o,a),h=s<r&&o<r||s>a&&o>a;return{count:i,start:l,loop:t.loop,ilen:c<l&&!h?i+c-l:c-l}}function Df(e,t,n,i){const{points:s,options:o}=t,{count:r,start:a,loop:l,ilen:c}=Sa(s,n,i),h=Of(o);let{move:u=!0,reverse:d}=i||{},f,g,m;for(f=0;f<=c;++f)g=s[(a+(d?c-f:f))%r],!g.skip&&(u?(e.moveTo(g.x,g.y),u=!1):h(e,m,g,d,o.stepped),m=g);return l&&(g=s[(a+(d?c:0))%r],h(e,m,g,d,o.stepped)),!!l}function Af(e,t,n,i){const s=t.points,{count:o,start:r,ilen:a}=Sa(s,n,i),{move:l=!0,reverse:c}=i||{};let h=0,u=0,d,f,g,m,p,b;const x=_=>(r+(c?a-_:_))%o,v=()=>{m!==p&&(e.lineTo(h,p),e.lineTo(h,m),e.lineTo(h,b))};for(l&&(f=s[x(0)],e.moveTo(f.x,f.y)),d=0;d<=a;++d){if(f=s[x(d)],f.skip)continue;const _=f.x,y=f.y,w=_|0;w===g?(y<m?m=y:y>p&&(p=y),h=(u*h+_)/++u):(v(),e.lineTo(_,y),g=w,u=0,m=p=y),b=y}v()}function Di(e){const t=e.options,n=t.borderDash&&t.borderDash.length;return!e._decimated&&!e._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!n?Af:Df}function Ef(e){return e.stepped?Du:e.tension||e.cubicInterpolationMode==="monotone"?Au:re}function Tf(e,t,n,i){let s=t._path;s||(s=t._path=new Path2D,t.path(s,n,i)&&s.closePath()),wa(e,t.options),e.stroke(s)}function Rf(e,t,n,i){const{segments:s,options:o}=t,r=Di(t);for(const a of s)wa(e,o,a.style),e.beginPath(),r(e,t,a,{start:n,end:n+i-1})&&e.closePath(),e.stroke()}const Lf=typeof Path2D=="function";function Ff(e,t,n,i){Lf&&!t.options.segment?Tf(e,t,n,i):Rf(e,t,n,i)}class Cn extends $t{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,n){const i=this.options;if((i.tension||i.cubicInterpolationMode==="monotone")&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;_u(this._points,i,t,s,n),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=$u(this,this.options.segment))}first(){const t=this.segments,n=this.points;return t.length&&n[t[0].start]}last(){const t=this.segments,n=this.points,i=t.length;return i&&n[t[i-1].end]}interpolate(t,n){const i=this.options,s=t[n],o=this.points,r=Fu(this,{property:n,start:s,end:s});if(!r.length)return;const a=[],l=Ef(i);let c,h;for(c=0,h=r.length;c<h;++c){const{start:u,end:d}=r[c],f=o[u],g=o[d];if(f===g){a.push(f);continue}const m=Math.abs((s-f[n])/(g[n]-f[n])),p=l(f,g,m,i.stepped);p[n]=t[n],a.push(p)}return a.length===1?a[0]:a}pathSegment(t,n,i){return Di(this)(t,this,n,i)}path(t,n,i){const s=this.segments,o=Di(this);let r=this._loop;n=n||0,i=i||this.points.length-n;for(const a of s)r&=o(t,this,a,{start:n,end:n+i-1});return!!r}draw(t,n,i,s){const o=this.options||{};(this.points||[]).length&&o.borderWidth&&(t.save(),Ff(t,this,i,s),t.restore()),this.animated&&(this._pointsUpdated=!1,this._path=void 0)}}T(Cn,"id","line"),T(Cn,"defaults",{borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0}),T(Cn,"defaultRoutes",{backgroundColor:"backgroundColor",borderColor:"borderColor"}),T(Cn,"descriptors",{_scriptable:!0,_indexable:t=>t!=="borderDash"&&t!=="fill"});function Ro(e,t,n,i){const s=e.options,{[n]:o}=e.getProps([n],i);return Math.abs(t-o)<s.radius+s.hitRadius}class pi extends $t{constructor(n){super();T(this,"parsed");T(this,"skip");T(this,"stop");this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,n&&Object.assign(this,n)}inRange(n,i,s){const o=this.options,{x:r,y:a}=this.getProps(["x","y"],s);return Math.pow(n-r,2)+Math.pow(i-a,2)<Math.pow(o.hitRadius+o.radius,2)}inXRange(n,i){return Ro(this,n,"x",i)}inYRange(n,i){return Ro(this,n,"y",i)}getCenterPoint(n){const{x:i,y:s}=this.getProps(["x","y"],n);return{x:i,y:s}}size(n){n=n||this.options||{};let i=n.radius||0;i=Math.max(i,i&&n.hoverRadius||0);const s=i&&n.borderWidth||0;return(i+s)*2}draw(n,i){const s=this.options;this.skip||s.radius<.1||!tn(this,i,this.size(s)/2)||(n.strokeStyle=s.borderColor,n.lineWidth=s.borderWidth,n.fillStyle=s.backgroundColor,Ci(n,s,this.x,this.y))}getRange(){const n=this.options||{};return n.radius+n.hitRadius}}T(pi,"id","point"),T(pi,"defaults",{borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:"circle",radius:3,rotation:0}),T(pi,"defaultRoutes",{backgroundColor:"backgroundColor",borderColor:"borderColor"});function ka(e,t){const{x:n,y:i,base:s,width:o,height:r}=e.getProps(["x","y","base","width","height"],t);let a,l,c,h,u;return e.horizontal?(u=r/2,a=Math.min(n,s),l=Math.max(n,s),c=i-u,h=i+u):(u=o/2,a=n-u,l=n+u,c=Math.min(i,s),h=Math.max(i,s)),{left:a,top:c,right:l,bottom:h}}function Wt(e,t,n,i){return e?0:rt(t,n,i)}function If(e,t,n){const i=e.options.borderWidth,s=e.borderSkipped,o=ea(i);return{t:Wt(s.top,o.top,0,n),r:Wt(s.right,o.right,0,t),b:Wt(s.bottom,o.bottom,0,n),l:Wt(s.left,o.left,0,t)}}function jf(e,t,n){const{enableBorderRadius:i}=e.getProps(["enableBorderRadius"]),s=e.options.borderRadius,o=ye(s),r=Math.min(t,n),a=e.borderSkipped,l=i||z(s);return{topLeft:Wt(!l||a.top||a.left,o.topLeft,0,r),topRight:Wt(!l||a.top||a.right,o.topRight,0,r),bottomLeft:Wt(!l||a.bottom||a.left,o.bottomLeft,0,r),bottomRight:Wt(!l||a.bottom||a.right,o.bottomRight,0,r)}}function $f(e){const t=ka(e),n=t.right-t.left,i=t.bottom-t.top,s=If(e,n/2,i/2),o=jf(e,n/2,i/2);return{outer:{x:t.left,y:t.top,w:n,h:i,radius:o},inner:{x:t.left+s.l,y:t.top+s.t,w:n-s.l-s.r,h:i-s.t-s.b,radius:{topLeft:Math.max(0,o.topLeft-Math.max(s.t,s.l)),topRight:Math.max(0,o.topRight-Math.max(s.t,s.r)),bottomLeft:Math.max(0,o.bottomLeft-Math.max(s.b,s.l)),bottomRight:Math.max(0,o.bottomRight-Math.max(s.b,s.r))}}}}function gi(e,t,n,i){const s=t===null,o=n===null,a=e&&!(s&&o)&&ka(e,i);return a&&(s||Ht(t,a.left,a.right))&&(o||Ht(n,a.top,a.bottom))}function zf(e){return e.topLeft||e.topRight||e.bottomLeft||e.bottomRight}function Nf(e,t){e.rect(t.x,t.y,t.w,t.h)}function mi(e,t,n={}){const i=e.x!==n.x?-t:0,s=e.y!==n.y?-t:0,o=(e.x+e.w!==n.x+n.w?t:0)-i,r=(e.y+e.h!==n.y+n.h?t:0)-s;return{x:e.x+i,y:e.y+s,w:e.w+o,h:e.h+r,radius:e.radius}}class bi extends $t{constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,t&&Object.assign(this,t)}draw(t){const{inflateAmount:n,options:{borderColor:i,backgroundColor:s}}=this,{inner:o,outer:r}=$f(this),a=zf(r.radius)?$n:Nf;t.save(),(r.w!==o.w||r.h!==o.h)&&(t.beginPath(),a(t,mi(r,n,o)),t.clip(),a(t,mi(o,-n,r)),t.fillStyle=i,t.fill("evenodd")),t.beginPath(),a(t,mi(o,n)),t.fillStyle=s,t.fill(),t.restore()}inRange(t,n,i){return gi(this,t,n,i)}inXRange(t,n){return gi(this,t,null,n)}inYRange(t,n){return gi(this,null,t,n)}getCenterPoint(t){const{x:n,y:i,base:s,horizontal:o}=this.getProps(["x","y","base","horizontal"],t);return{x:o?(n+s)/2:n,y:o?i:(i+s)/2}}getRange(t){return t==="x"?this.width/2:this.height/2}}T(bi,"id","bar"),T(bi,"defaults",{borderSkipped:"start",borderWidth:0,borderRadius:0,inflateAmount:"auto",pointStyle:void 0}),T(bi,"defaultRoutes",{backgroundColor:"backgroundColor",borderColor:"borderColor"});const Lo=(e,t)=>{let{boxHeight:n=t,boxWidth:i=t}=e;return e.usePointStyle&&(n=Math.min(n,t),i=e.pointStyleWidth||Math.min(i,t)),{boxWidth:i,boxHeight:n,itemHeight:Math.max(t,n)}},Bf=(e,t)=>e!==null&&t!==null&&e.datasetIndex===t.datasetIndex&&e.index===t.index;class Fo extends $t{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,n,i){this.maxWidth=t,this.maxHeight=n,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let n=V(t.generateLabels,[this.chart],this)||[];t.filter&&(n=n.filter(i=>t.filter(i,this.chart.data))),t.sort&&(n=n.sort((i,s)=>t.sort(i,s,this.chart.data))),this.options.reverse&&n.reverse(),this.legendItems=n}fit(){const{options:t,ctx:n}=this;if(!t.display){this.width=this.height=0;return}const i=t.labels,s=at(i.font),o=s.size,r=this._computeTitleHeight(),{boxWidth:a,itemHeight:l}=Lo(i,o);let c,h;n.font=s.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(r,o,a,l)+10):(h=this.maxHeight,c=this._fitCols(r,s,a,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,n,i,s){const{ctx:o,maxWidth:r,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=s+a;let u=t;o.textAlign="left",o.textBaseline="middle";let d=-1,f=-h;return this.legendItems.forEach((g,m)=>{const p=i+n/2+o.measureText(g.text).width;(m===0||c[c.length-1]+p+2*a>r)&&(u+=h,c[c.length-(m>0?0:1)]=0,f+=h,d++),l[m]={left:0,top:f,row:d,width:p,height:s},c[c.length-1]+=p+a}),u}_fitCols(t,n,i,s){const{ctx:o,maxHeight:r,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=r-t;let u=a,d=0,f=0,g=0,m=0;return this.legendItems.forEach((p,b)=>{const{itemWidth:x,itemHeight:v}=Hf(i,n,o,p,s);b>0&&f+v+2*a>h&&(u+=d+a,c.push({width:d,height:f}),g+=d+a,m++,d=f=0),l[b]={left:g,top:f,col:m,width:x,height:v},d=Math.max(d,x),f+=v+a}),u+=d,c.push({width:d,height:f}),u}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:n,options:{align:i,labels:{padding:s},rtl:o}}=this,r=ve(o,this.left,this.width);if(this.isHorizontal()){let a=0,l=ot(i,this.left+s,this.right-this.lineWidths[a]);for(const c of n)a!==c.row&&(a=c.row,l=ot(i,this.left+s,this.right-this.lineWidths[a])),c.top+=this.top+t+s,c.left=r.leftForLtr(r.x(l),c.width),l+=c.width+s}else{let a=0,l=ot(i,this.top+t+s,this.bottom-this.columnSizes[a].height);for(const c of n)c.col!==a&&(a=c.col,l=ot(i,this.top+t+s,this.bottom-this.columnSizes[a].height)),c.top=l,c.left+=this.left+s,c.left=r.leftForLtr(r.x(c.left),c.width),l+=c.height+s}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){const t=this.ctx;Gi(t,this),this._draw(),Ji(t)}}_draw(){const{options:t,columnSizes:n,lineWidths:i,ctx:s}=this,{align:o,labels:r}=t,a=K.color,l=ve(t.rtl,this.left,this.width),c=at(r.font),{padding:h}=r,u=c.size,d=u/2;let f;this.drawTitle(),s.textAlign=l.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=c.string;const{boxWidth:g,boxHeight:m,itemHeight:p}=Lo(r,u),b=function(w,k,S){if(isNaN(g)||g<=0||isNaN(m)||m<0)return;s.save();const P=j(S.lineWidth,1);if(s.fillStyle=j(S.fillStyle,a),s.lineCap=j(S.lineCap,"butt"),s.lineDashOffset=j(S.lineDashOffset,0),s.lineJoin=j(S.lineJoin,"miter"),s.lineWidth=P,s.strokeStyle=j(S.strokeStyle,a),s.setLineDash(j(S.lineDash,[])),r.usePointStyle){const D={radius:m*Math.SQRT2/2,pointStyle:S.pointStyle,rotation:S.rotation,borderWidth:P},C=l.xPlus(w,g/2),O=k+d;ta(s,D,C,O,r.pointStyleWidth&&g)}else{const D=k+Math.max((u-m)/2,0),C=l.leftForLtr(w,g),O=ye(S.borderRadius);s.beginPath(),Object.values(O).some(E=>E!==0)?$n(s,{x:C,y:D,w:g,h:m,radius:O}):s.rect(C,D,g,m),s.fill(),P!==0&&s.stroke()}s.restore()},x=function(w,k,S){en(s,S.text,w,k+p/2,c,{strikethrough:S.hidden,textAlign:l.textAlign(S.textAlign)})},v=this.isHorizontal(),_=this._computeTitleHeight();v?f={x:ot(o,this.left+h,this.right-i[0]),y:this.top+h+_,line:0}:f={x:this.left+h,y:ot(o,this.top+_+h,this.bottom-n[0].height),line:0},aa(this.ctx,t.textDirection);const y=p+h;this.legendItems.forEach((w,k)=>{s.strokeStyle=w.fontColor,s.fillStyle=w.fontColor;const S=s.measureText(w.text).width,P=l.textAlign(w.textAlign||(w.textAlign=r.textAlign)),D=g+d+S;let C=f.x,O=f.y;l.setWidth(this.width),v?k>0&&C+D+h>this.right&&(O=f.y+=y,f.line++,C=f.x=ot(o,this.left+h,this.right-i[f.line])):k>0&&O+y>this.bottom&&(C=f.x=C+n[f.line].width+h,f.line++,O=f.y=ot(o,this.top+_+h,this.bottom-n[f.line].height));const E=l.x(C);if(b(E,O,w),C=$h(P,C+g+d,v?C+D:this.right,t.rtl),x(l.x(C),O,w),v)f.x+=D+h;else if(typeof w.text!="string"){const F=c.lineHeight;f.y+=Ma(w,F)+h}else f.y+=y}),la(this.ctx,t.textDirection)}drawTitle(){const t=this.options,n=t.title,i=at(n.font),s=_t(n.padding);if(!n.display)return;const o=ve(t.rtl,this.left,this.width),r=this.ctx,a=n.position,l=i.size/2,c=s.top+l;let h,u=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+c,u=ot(t.align,u,this.right-d);else{const g=this.columnSizes.reduce((m,p)=>Math.max(m,p.height),0);h=c+ot(t.align,this.top,this.bottom-g-t.labels.padding-this._computeTitleHeight())}const f=ot(a,u,u+d);r.textAlign=o.textAlign(Ki(a)),r.textBaseline="middle",r.strokeStyle=n.color,r.fillStyle=n.color,r.font=i.string,en(r,n.text,f,h,i)}_computeTitleHeight(){const t=this.options.title,n=at(t.font),i=_t(t.padding);return t.display?n.lineHeight+i.height:0}_getLegendItemAt(t,n){let i,s,o;if(Ht(t,this.left,this.right)&&Ht(n,this.top,this.bottom)){for(o=this.legendHitBoxes,i=0;i<o.length;++i)if(s=o[i],Ht(t,s.left,s.left+s.width)&&Ht(n,s.top,s.top+s.height))return this.legendItems[i]}return null}handleEvent(t){const n=this.options;if(!Yf(t.type,n))return;const i=this._getLegendItemAt(t.x,t.y);if(t.type==="mousemove"||t.type==="mouseout"){const s=this._hoveredItem,o=Bf(s,i);s&&!o&&V(n.onLeave,[t,s,this],this),this._hoveredItem=i,i&&!o&&V(n.onHover,[t,i,this],this)}else i&&V(n.onClick,[t,i,this],this)}}function Hf(e,t,n,i,s){const o=Wf(i,e,t,n),r=Vf(s,i,t.lineHeight);return{itemWidth:o,itemHeight:r}}function Wf(e,t,n,i){let s=e.text;return s&&typeof s!="string"&&(s=s.reduce((o,r)=>o.length>r.length?o:r)),t+n.size/2+i.measureText(s).width}function Vf(e,t,n){let i=e;return typeof t.text!="string"&&(i=Ma(t,n)),i}function Ma(e,t){const n=e.text?e.text.length:0;return t*n}function Yf(e,t){return!!((e==="mousemove"||e==="mouseout")&&(t.onHover||t.onLeave)||t.onClick&&(e==="click"||e==="mouseup"))}var kg={id:"legend",_element:Fo,start(e,t,n){const i=e.legend=new Fo({ctx:e.ctx,options:n,chart:e});bt.configure(e,i,n),bt.addBox(e,i)},stop(e){bt.removeBox(e,e.legend),delete e.legend},beforeUpdate(e,t,n){const i=e.legend;bt.configure(e,i,n),i.options=n},afterUpdate(e){const t=e.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(e,t){t.replay||e.legend.handleEvent(t.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(e,t,n){const i=t.datasetIndex,s=n.chart;s.isDatasetVisible(i)?(s.hide(i),t.hidden=!0):(s.show(i),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:e=>e.chart.options.color,boxWidth:40,padding:10,generateLabels(e){const t=e.data.datasets,{labels:{usePointStyle:n,pointStyle:i,textAlign:s,color:o,useBorderRadius:r,borderRadius:a}}=e.legend.options;return e._getSortedDatasetMetas().map(l=>{const c=l.controller.getStyle(n?0:void 0),h=_t(c.borderWidth);return{text:t[l.index].label,fillStyle:c.backgroundColor,fontColor:o,hidden:!l.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:c.borderColor,pointStyle:i||c.pointStyle,rotation:c.rotation,textAlign:s||c.textAlign,borderRadius:r&&(a||c.borderRadius),datasetIndex:l.index}},this)}},title:{color:e=>e.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:e=>!e.startsWith("on"),labels:{_scriptable:e=>!["generateLabels","filter","sort"].includes(e)}}};class Ca extends $t{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,n){const i=this.options;if(this.left=0,this.top=0,!i.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=n;const s=J(i.text)?i.text.length:1;this._padding=_t(i.padding);const o=s*at(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){const{top:n,left:i,bottom:s,right:o,options:r}=this,a=r.align;let l=0,c,h,u;return this.isHorizontal()?(h=ot(a,i,o),u=n+t,c=o-i):(r.position==="left"?(h=i+t,u=ot(a,s,n),l=Z*-.5):(h=o-t,u=ot(a,n,s),l=Z*.5),c=s-n),{titleX:h,titleY:u,maxWidth:c,rotation:l}}draw(){const t=this.ctx,n=this.options;if(!n.display)return;const i=at(n.font),o=i.lineHeight/2+this._padding.top,{titleX:r,titleY:a,maxWidth:l,rotation:c}=this._drawArgs(o);en(t,n.text,0,0,i,{color:n.color,maxWidth:l,rotation:c,textAlign:Ki(n.align),textBaseline:"middle",translation:[r,a]})}}function Uf(e,t){const n=new Ca({ctx:e.ctx,options:t,chart:e});bt.configure(e,n,t),bt.addBox(e,n),e.titleBlock=n}var Mg={id:"title",_element:Ca,start(e,t,n){Uf(e,n)},stop(e){const t=e.titleBlock;bt.removeBox(e,t),delete e.titleBlock},beforeUpdate(e,t,n){const i=e.titleBlock;bt.configure(e,i,n),i.options=n},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Ne={average(e){if(!e.length)return!1;let t,n,i=new Set,s=0,o=0;for(t=0,n=e.length;t<n;++t){const a=e[t].element;if(a&&a.hasValue()){const l=a.tooltipPosition();i.add(l.x),s+=l.y,++o}}return o===0||i.size===0?!1:{x:[...i].reduce((a,l)=>a+l)/i.size,y:s/o}},nearest(e,t){if(!e.length)return!1;let n=t.x,i=t.y,s=Number.POSITIVE_INFINITY,o,r,a;for(o=0,r=e.length;o<r;++o){const l=e[o].element;if(l&&l.hasValue()){const c=l.getCenterPoint(),h=ki(t,c);h<s&&(s=h,a=l)}}if(a){const l=a.tooltipPosition();n=l.x,i=l.y}return{x:n,y:i}}};function kt(e,t){return t&&(J(t)?Array.prototype.push.apply(e,t):e.push(t)),e}function Rt(e){return(typeof e=="string"||e instanceof String)&&e.indexOf(`
 `)>-1?e.split(`
-`):e}function Xf(e,t){const{element:n,datasetIndex:i,index:s}=t,o=e.getDatasetMeta(i).controller,{label:r,value:a}=o.getLabelAndValue(s);return{chart:e,label:r,parsed:o.getParsed(s),raw:e.data.datasets[i].data[s],formattedValue:a,dataset:o.getDataset(),dataIndex:s,datasetIndex:i,element:n}}function Io(e,t){const n=e.chart.ctx,{body:i,footer:s,title:o}=e,{boxWidth:r,boxHeight:a}=t,l=at(t.bodyFont),c=at(t.titleFont),h=at(t.footerFont),u=o.length,d=s.length,f=i.length,g=_t(t.padding);let m=g.height,p=0,b=i.reduce((_,y)=>_+y.before.length+y.lines.length+y.after.length,0);if(b+=e.beforeBody.length+e.afterBody.length,u&&(m+=u*c.lineHeight+(u-1)*t.titleSpacing+t.titleMarginBottom),b){const _=t.displayColors?Math.max(a,l.lineHeight):l.lineHeight;m+=f*_+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}d&&(m+=t.footerMarginTop+d*h.lineHeight+(d-1)*t.footerSpacing);let x=0;const v=function(_){p=Math.max(p,n.measureText(_).width+x)};return n.save(),n.font=c.string,H(e.title,v),n.font=l.string,H(e.beforeBody.concat(e.afterBody),v),x=t.displayColors?r+2+t.boxPadding:0,H(i,_=>{H(_.before,v),H(_.lines,v),H(_.after,v)}),x=0,n.font=h.string,H(e.footer,v),n.restore(),p+=g.width,{width:p,height:m}}function Kf(e,t){const{y:n,height:i}=t;return n<i/2?"top":n>e.height-i/2?"bottom":"center"}function qf(e,t,n,i){const{x:s,width:o}=i,r=n.caretSize+n.caretPadding;if(e==="left"&&s+o+r>t.width||e==="right"&&s-o-r<0)return!0}function Gf(e,t,n,i){const{x:s,width:o}=n,{width:r,chartArea:{left:a,right:l}}=e;let c="center";return i==="center"?c=s<=(a+l)/2?"left":"right":s<=o/2?c="left":s>=r-o/2&&(c="right"),qf(c,e,t,n)&&(c="center"),c}function jo(e,t,n){const i=n.yAlign||t.yAlign||Kf(e,n);return{xAlign:n.xAlign||t.xAlign||Gf(e,t,n,i),yAlign:i}}function Jf(e,t){let{x:n,width:i}=e;return t==="right"?n-=i:t==="center"&&(n-=i/2),n}function Zf(e,t,n){let{y:i,height:s}=e;return t==="top"?i+=n:t==="bottom"?i-=s+n:i-=s/2,i}function $o(e,t,n,i){const{caretSize:s,caretPadding:o,cornerRadius:r}=e,{xAlign:a,yAlign:l}=n,c=s+o,{topLeft:h,topRight:u,bottomLeft:d,bottomRight:f}=ye(r);let g=Jf(t,a);const m=Zf(t,l,c);return l==="center"?a==="left"?g+=c:a==="right"&&(g-=c):a==="left"?g-=Math.max(h,d)+s:a==="right"&&(g+=Math.max(u,f)+s),{x:rt(g,0,i.width-t.width),y:rt(m,0,i.height-t.height)}}function Pn(e,t,n){const i=_t(n.padding);return t==="center"?e.x+e.width/2:t==="right"?e.x+e.width-i.right:e.x+i.left}function zo(e){return kt([],Rt(e))}function Qf(e,t,n){return pe(e,{tooltip:t,tooltipItems:n,type:"tooltip"})}function No(e,t){const n=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return n?e.override(n):e}const Pa={beforeTitle:Et,title(e){if(e.length>0){const t=e[0],n=t.chart.data.labels,i=n?n.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(i>0&&t.dataIndex<i)return n[t.dataIndex]}return""},afterTitle:Et,beforeBody:Et,beforeLabel:Et,label(e){if(this&&this.options&&this.options.mode==="dataset")return e.label+": "+e.formattedValue||e.formattedValue;let t=e.dataset.label||"";t&&(t+=": ");const n=e.formattedValue;return W(n)||(t+=n),t},labelColor(e){const n=e.chart.getDatasetMeta(e.datasetIndex).controller.getStyle(e.dataIndex);return{borderColor:n.borderColor,backgroundColor:n.backgroundColor,borderWidth:n.borderWidth,borderDash:n.borderDash,borderDashOffset:n.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(e){const n=e.chart.getDatasetMeta(e.datasetIndex).controller.getStyle(e.dataIndex);return{pointStyle:n.pointStyle,rotation:n.rotation}},afterLabel:Et,afterBody:Et,beforeFooter:Et,footer:Et,afterFooter:Et};function ct(e,t,n,i){const s=e[t].call(n,i);return typeof s>"u"?Pa[t].call(n,i):s}class Ai extends $t{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const n=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&n.options.animation&&i.animations,o=new ha(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=Qf(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,n){const{callbacks:i}=n,s=ct(i,"beforeTitle",this,t),o=ct(i,"title",this,t),r=ct(i,"afterTitle",this,t);let a=[];return a=kt(a,Rt(s)),a=kt(a,Rt(o)),a=kt(a,Rt(r)),a}getBeforeBody(t,n){return zo(ct(n.callbacks,"beforeBody",this,t))}getBody(t,n){const{callbacks:i}=n,s=[];return H(t,o=>{const r={before:[],lines:[],after:[]},a=No(i,o);kt(r.before,Rt(ct(a,"beforeLabel",this,o))),kt(r.lines,ct(a,"label",this,o)),kt(r.after,Rt(ct(a,"afterLabel",this,o))),s.push(r)}),s}getAfterBody(t,n){return zo(ct(n.callbacks,"afterBody",this,t))}getFooter(t,n){const{callbacks:i}=n,s=ct(i,"beforeFooter",this,t),o=ct(i,"footer",this,t),r=ct(i,"afterFooter",this,t);let a=[];return a=kt(a,Rt(s)),a=kt(a,Rt(o)),a=kt(a,Rt(r)),a}_createItems(t){const n=this._active,i=this.chart.data,s=[],o=[],r=[];let a=[],l,c;for(l=0,c=n.length;l<c;++l)a.push(Xf(this.chart,n[l]));return t.filter&&(a=a.filter((h,u,d)=>t.filter(h,u,d,i))),t.itemSort&&(a=a.sort((h,u)=>t.itemSort(h,u,i))),H(a,h=>{const u=No(t.callbacks,h);s.push(ct(u,"labelColor",this,h)),o.push(ct(u,"labelPointStyle",this,h)),r.push(ct(u,"labelTextColor",this,h))}),this.labelColors=s,this.labelPointStyles=o,this.labelTextColors=r,this.dataPoints=a,a}update(t,n){const i=this.options.setContext(this.getContext()),s=this._active;let o,r=[];if(!s.length)this.opacity!==0&&(o={opacity:0});else{const a=Ne[i.position].call(this,s,this._eventPosition);r=this._createItems(i),this.title=this.getTitle(r,i),this.beforeBody=this.getBeforeBody(r,i),this.body=this.getBody(r,i),this.afterBody=this.getAfterBody(r,i),this.footer=this.getFooter(r,i);const l=this._size=Io(this,i),c=Object.assign({},a,l),h=jo(this.chart,i,c),u=$o(i,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:u.x,y:u.y,width:l.width,height:l.height,caretX:a.x,caretY:a.y}}this._tooltipItems=r,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:n})}drawCaret(t,n,i,s){const o=this.getCaretPosition(t,i,s);n.lineTo(o.x1,o.y1),n.lineTo(o.x2,o.y2),n.lineTo(o.x3,o.y3)}getCaretPosition(t,n,i){const{xAlign:s,yAlign:o}=this,{caretSize:r,cornerRadius:a}=i,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:u}=ye(a),{x:d,y:f}=t,{width:g,height:m}=n;let p,b,x,v,_,y;return o==="center"?(_=f+m/2,s==="left"?(p=d,b=p-r,v=_+r,y=_-r):(p=d+g,b=p+r,v=_-r,y=_+r),x=p):(s==="left"?b=d+Math.max(l,h)+r:s==="right"?b=d+g-Math.max(c,u)-r:b=this.caretX,o==="top"?(v=f,_=v-r,p=b-r,x=b+r):(v=f+m,_=v+r,p=b+r,x=b-r),y=v),{x1:p,x2:b,x3:x,y1:v,y2:_,y3:y}}drawTitle(t,n,i){const s=this.title,o=s.length;let r,a,l;if(o){const c=ve(i.rtl,this.x,this.width);for(t.x=Pn(this,i.titleAlign,i),n.textAlign=c.textAlign(i.titleAlign),n.textBaseline="middle",r=at(i.titleFont),a=i.titleSpacing,n.fillStyle=i.titleColor,n.font=r.string,l=0;l<o;++l)n.fillText(s[l],c.x(t.x),t.y+r.lineHeight/2),t.y+=r.lineHeight+a,l+1===o&&(t.y+=i.titleMarginBottom-a)}}_drawColorBox(t,n,i,s,o){const r=this.labelColors[i],a=this.labelPointStyles[i],{boxHeight:l,boxWidth:c}=o,h=at(o.bodyFont),u=Pn(this,"left",o),d=s.x(u),f=l<h.lineHeight?(h.lineHeight-l)/2:0,g=n.y+f;if(o.usePointStyle){const m={radius:Math.min(c,l)/2,pointStyle:a.pointStyle,rotation:a.rotation,borderWidth:1},p=s.leftForLtr(d,c)+c/2,b=g+l/2;t.strokeStyle=o.multiKeyBackground,t.fillStyle=o.multiKeyBackground,Ci(t,m,p,b),t.strokeStyle=r.borderColor,t.fillStyle=r.backgroundColor,Ci(t,m,p,b)}else{t.lineWidth=z(r.borderWidth)?Math.max(...Object.values(r.borderWidth)):r.borderWidth||1,t.strokeStyle=r.borderColor,t.setLineDash(r.borderDash||[]),t.lineDashOffset=r.borderDashOffset||0;const m=s.leftForLtr(d,c),p=s.leftForLtr(s.xPlus(d,1),c-2),b=ye(r.borderRadius);Object.values(b).some(x=>x!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,$n(t,{x:m,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=r.backgroundColor,t.beginPath(),$n(t,{x:p,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(m,g,c,l),t.strokeRect(m,g,c,l),t.fillStyle=r.backgroundColor,t.fillRect(p,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,n,i){const{body:s}=this,{bodySpacing:o,bodyAlign:r,displayColors:a,boxHeight:l,boxWidth:c,boxPadding:h}=i,u=at(i.bodyFont);let d=u.lineHeight,f=0;const g=ve(i.rtl,this.x,this.width),m=function(S){n.fillText(S,g.x(t.x+f),t.y+d/2),t.y+=d+o},p=g.textAlign(r);let b,x,v,_,y,w,k;for(n.textAlign=r,n.textBaseline="middle",n.font=u.string,t.x=Pn(this,p,i),n.fillStyle=i.bodyColor,H(this.beforeBody,m),f=a&&p!=="right"?r==="center"?c/2+h:c+2+h:0,_=0,w=s.length;_<w;++_){for(b=s[_],x=this.labelTextColors[_],n.fillStyle=x,H(b.before,m),v=b.lines,a&&v.length&&(this._drawColorBox(n,t,_,g,i),d=Math.max(u.lineHeight,l)),y=0,k=v.length;y<k;++y)m(v[y]),d=u.lineHeight;H(b.after,m)}f=0,d=u.lineHeight,H(this.afterBody,m),t.y-=o}drawFooter(t,n,i){const s=this.footer,o=s.length;let r,a;if(o){const l=ve(i.rtl,this.x,this.width);for(t.x=Pn(this,i.footerAlign,i),t.y+=i.footerMarginTop,n.textAlign=l.textAlign(i.footerAlign),n.textBaseline="middle",r=at(i.footerFont),n.fillStyle=i.footerColor,n.font=r.string,a=0;a<o;++a)n.fillText(s[a],l.x(t.x),t.y+r.lineHeight/2),t.y+=r.lineHeight+i.footerSpacing}}drawBackground(t,n,i,s){const{xAlign:o,yAlign:r}=this,{x:a,y:l}=t,{width:c,height:h}=i,{topLeft:u,topRight:d,bottomLeft:f,bottomRight:g}=ye(s.cornerRadius);n.fillStyle=s.backgroundColor,n.strokeStyle=s.borderColor,n.lineWidth=s.borderWidth,n.beginPath(),n.moveTo(a+u,l),r==="top"&&this.drawCaret(t,n,i,s),n.lineTo(a+c-d,l),n.quadraticCurveTo(a+c,l,a+c,l+d),r==="center"&&o==="right"&&this.drawCaret(t,n,i,s),n.lineTo(a+c,l+h-g),n.quadraticCurveTo(a+c,l+h,a+c-g,l+h),r==="bottom"&&this.drawCaret(t,n,i,s),n.lineTo(a+f,l+h),n.quadraticCurveTo(a,l+h,a,l+h-f),r==="center"&&o==="left"&&this.drawCaret(t,n,i,s),n.lineTo(a,l+u),n.quadraticCurveTo(a,l,a+u,l),n.closePath(),n.fill(),s.borderWidth>0&&n.stroke()}_updateAnimationTarget(t){const n=this.chart,i=this.$animations,s=i&&i.x,o=i&&i.y;if(s||o){const r=Ne[t.position].call(this,this._active,this._eventPosition);if(!r)return;const a=this._size=Io(this,t),l=Object.assign({},r,this._size),c=jo(n,t,l),h=$o(t,l,c,n);(s._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=a.width,this.height=a.height,this.caretX=r.x,this.caretY=r.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){const n=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(n);const s={width:this.width,height:this.height},o={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const r=_t(n.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;n.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(o,t,s,n),aa(t,n.textDirection),o.y+=r.top,this.drawTitle(o,t,n),this.drawBody(o,t,n),this.drawFooter(o,t,n),la(t,n.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,n){const i=this._active,s=t.map(({datasetIndex:a,index:l})=>{const c=this.chart.getDatasetMeta(a);if(!c)throw new Error("Cannot find a dataset at index "+a);return{datasetIndex:a,element:c.data[l],index:l}}),o=!Fn(i,s),r=this._positionChanged(s,n);(o||r)&&(this._active=s,this._eventPosition=n,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,n,i=!0){if(n&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,o=this._active||[],r=this._getActiveElements(t,o,n,i),a=this._positionChanged(r,t),l=n||!Fn(r,o)||a;return l&&(this._active=r,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,n))),l}_getActiveElements(t,n,i,s){const o=this.options;if(t.type==="mouseout")return[];if(!s)return n.filter(a=>this.chart.data.datasets[a.datasetIndex]&&this.chart.getDatasetMeta(a.datasetIndex).controller.getParsed(a.index)!==void 0);const r=this.chart.getElementsAtEventForMode(t,o.mode,o,i);return o.reverse&&r.reverse(),r}_positionChanged(t,n){const{caretX:i,caretY:s,options:o}=this,r=Ne[o.position].call(this,t,n);return r!==!1&&(i!==r.x||s!==r.y)}}T(Ai,"positioners",Ne);var Cg={id:"tooltip",_element:Ai,positioners:Ne,afterInit(e,t,n){n&&(e.tooltip=new Ai({chart:e,options:n}))},beforeUpdate(e,t,n){e.tooltip&&e.tooltip.initialize(n)},reset(e,t,n){e.tooltip&&e.tooltip.initialize(n)},afterDraw(e){const t=e.tooltip;if(t&&t._willRender()){const n={tooltip:t};if(e.notifyPlugins("beforeTooltipDraw",{...n,cancelable:!0})===!1)return;t.draw(e.ctx),e.notifyPlugins("afterTooltipDraw",n)}},afterEvent(e,t){if(e.tooltip){const n=t.replay;e.tooltip.handleEvent(t.event,n,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(e,t)=>t.bodyFont.size,boxWidth:(e,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Pa},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:e=>e!=="filter"&&e!=="itemSort"&&e!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};const tp=(e,t,n,i)=>(typeof t=="string"?(n=e.push(t)-1,i.unshift({index:n,label:t})):isNaN(t)&&(n=null),n);function ep(e,t,n,i){const s=e.indexOf(t);if(s===-1)return tp(e,t,n,i);const o=e.lastIndexOf(t);return s!==o?n:s}const np=(e,t)=>e===null?null:rt(Math.round(e),0,t);function Bo(e){const t=this.getLabels();return e>=0&&e<t.length?t[e]:e}class Ho extends De{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const n=this._addedLabels;if(n.length){const i=this.getLabels();for(const{index:s,label:o}of n)i[s]===o&&i.splice(s,1);this._addedLabels=[]}super.init(t)}parse(t,n){if(W(t))return null;const i=this.getLabels();return n=isFinite(n)&&i[n]===t?n:ep(i,t,j(n,t),this._addedLabels),np(n,i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:n}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);this.options.bounds==="ticks"&&(t||(i=0),n||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,n=this.max,i=this.options.offset,s=[];let o=this.getLabels();o=t===0&&n===o.length-1?o:o.slice(t,n+1),this._valueRange=Math.max(o.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let r=t;r<=n;r++)s.push({value:r});return s}getLabelForValue(t){return Bo.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return typeof t!="number"&&(t=this.parse(t)),t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const n=this.ticks;return t<0||t>n.length-1?null:this.getPixelForValue(n[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}T(Ho,"id","category"),T(Ho,"defaults",{ticks:{callback:Bo}});function ip(e,t){const n=[],{bounds:s,step:o,min:r,max:a,precision:l,count:c,maxTicks:h,maxDigits:u,includeBounds:d}=e,f=o||1,g=h-1,{min:m,max:p}=t,b=!W(r),x=!W(a),v=!W(c),_=(p-m)/(u+1);let y=Hs((p-m)/g/f)*f,w,k,S,P;if(y<1e-14&&!b&&!x)return[{value:m},{value:p}];P=Math.ceil(p/y)-Math.floor(m/y),P>g&&(y=Hs(P*y/g/f)*f),W(l)||(w=Math.pow(10,l),y=Math.ceil(y*w)/w),s==="ticks"?(k=Math.floor(m/y)*y,S=Math.ceil(p/y)*y):(k=m,S=p),b&&x&&o&&Dh((a-r)/o,y/1e3)?(P=Math.round(Math.min((a-r)/y,h)),y=(a-r)/P,k=r,S=a):v?(k=b?r:k,S=x?a:S,P=c-1,y=(S-k)/P):(P=(S-k)/y,Ye(P,Math.round(P),y/1e3)?P=Math.round(P):P=Math.ceil(P));const D=Math.max(Ws(y),Ws(k));w=Math.pow(10,W(l)?D:l),k=Math.round(k*w)/w,S=Math.round(S*w)/w;let C=0;for(b&&(d&&k!==r?(n.push({value:r}),k<r&&C++,Ye(Math.round((k+C*y)*w)/w,r,Wo(r,_,e))&&C++):k<r&&C++);C<P;++C){const O=Math.round((k+C*y)*w)/w;if(x&&O>a)break;n.push({value:O})}return x&&d&&S!==a?n.length&&Ye(n[n.length-1].value,a,Wo(a,_,e))?n[n.length-1].value=a:n.push({value:a}):(!x||S===a)&&n.push({value:S}),n}function Wo(e,t,{horizontal:n,minRotation:i}){const s=ae(i),o=(n?Math.sin(s):Math.cos(s))||.001,r=.75*t*(""+e).length;return Math.min(t/o,r)}class sp extends De{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,n){return W(t)||(typeof t=="number"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:n,maxDefined:i}=this.getUserBounds();let{min:s,max:o}=this;const r=l=>s=n?s:l,a=l=>o=i?o:l;if(t){const l=Dt(s),c=Dt(o);l<0&&c<0?a(0):l>0&&c>0&&r(0)}if(s===o){let l=o===0?1:Math.abs(o*.05);a(o+l),t||r(s-l)}this.min=s,this.max=o}getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:n,stepSize:i}=t,s;return i?(s=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,s>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${s} ticks. Limiting to 1000.`),s=1e3)):(s=this.computeTickLimit(),n=n||11),n&&(s=Math.min(n,s)),s}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,n=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s={maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:n.precision,step:n.stepSize,count:n.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:n.minRotation||0,includeBounds:n.includeBounds!==!1},o=this._range||this,r=ip(s,o);return t.bounds==="ticks"&&Ah(r,this,"value"),t.reverse?(r.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),r}configure(){const t=this.ticks;let n=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-n)/Math.max(t.length-1,1)/2;n-=s,i+=s}this._startValue=n,this._endValue=i,this._valueRange=i-n}getLabelForValue(t){return Jr(t,this.chart.options.locale,this.options.ticks.format)}}class Vo extends sp{determineDataLimits(){const{min:t,max:n}=this.getMinMax(!0);this.min=vt(t)?t:0,this.max=vt(n)?n:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),n=t?this.width:this.height,i=ae(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(n/Math.min(40,o.lineHeight/s))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}T(Vo,"id","linear"),T(Vo,"defaults",{ticks:{callback:Qr.formatters.numeric}});const Kn={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ht=Object.keys(Kn);function Yo(e,t){return e-t}function Uo(e,t){if(W(t))return null;const n=e._adapter,{parser:i,round:s,isoWeekday:o}=e._parseOpts;let r=t;return typeof i=="function"&&(r=i(r)),vt(r)||(r=typeof i=="string"?n.parse(r,i):n.parse(r)),r===null?null:(s&&(r=s==="week"&&(Qe(o)||o===!0)?n.startOf(r,"isoWeek",o):n.startOf(r,s)),+r)}function Xo(e,t,n,i){const s=ht.length;for(let o=ht.indexOf(e);o<s-1;++o){const r=Kn[ht[o]],a=r.steps?r.steps:Number.MAX_SAFE_INTEGER;if(r.common&&Math.ceil((n-t)/(a*r.size))<=i)return ht[o]}return ht[s-1]}function op(e,t,n,i,s){for(let o=ht.length-1;o>=ht.indexOf(n);o--){const r=ht[o];if(Kn[r].common&&e._adapter.diff(s,i,r)>=t-1)return r}return ht[n?ht.indexOf(n):0]}function rp(e){for(let t=ht.indexOf(e)+1,n=ht.length;t<n;++t)if(Kn[ht[t]].common)return ht[t]}function Ko(e,t,n){if(!n)e[t]=!0;else if(n.length){const{lo:i,hi:s}=Xi(n,t),o=n[i]>=t?n[i]:n[s];e[o]=!0}}function ap(e,t,n,i){const s=e._adapter,o=+s.startOf(t[0].value,i),r=t[t.length-1].value;let a,l;for(a=o;a<=r;a=+s.add(a,1,i))l=n[a],l>=0&&(t[l].major=!0);return t}function qo(e,t,n){const i=[],s={},o=t.length;let r,a;for(r=0;r<o;++r)a=t[r],s[a]=r,i.push({value:a,major:!1});return o===0||!n?i:ap(e,i,s,n)}class Hn extends De{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,n={}){const i=t.time||(t.time={}),s=this._adapter=new ud._date(t.adapters.date);s.init(n),Ve(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=n.normalized}parse(t,n){return t===void 0?null:Uo(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,n=this._adapter,i=t.time.unit||"day";let{min:s,max:o,minDefined:r,maxDefined:a}=this.getUserBounds();function l(c){!r&&!isNaN(c.min)&&(s=Math.min(s,c.min)),!a&&!isNaN(c.max)&&(o=Math.max(o,c.max))}(!r||!a)&&(l(this._getLabelBounds()),(t.bounds!=="ticks"||t.ticks.source!=="labels")&&l(this.getMinMax(!1))),s=vt(s)&&!isNaN(s)?s:+n.startOf(Date.now(),i),o=vt(o)&&!isNaN(o)?o:+n.endOf(Date.now(),i)+1,this.min=Math.min(s,o-1),this.max=Math.max(s+1,o)}_getLabelBounds(){const t=this.getLabelTimestamps();let n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(n=t[0],i=t[t.length-1]),{min:n,max:i}}buildTicks(){const t=this.options,n=t.time,i=t.ticks,s=i.source==="labels"?this.getLabelTimestamps():this._generate();t.bounds==="ticks"&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const o=this.min,r=this.max,a=Fh(s,o,r);return this._unit=n.unit||(i.autoSkip?Xo(n.minUnit,this.min,this.max,this._getLabelCapacity(o)):op(this,a.length,n.minUnit,this.min,this.max)),this._majorUnit=!i.major.enabled||this._unit==="year"?void 0:rp(this._unit),this.initOffsets(s),t.reverse&&a.reverse(),qo(this,a,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map(t=>+t.value))}initOffsets(t=[]){let n=0,i=0,s,o;this.options.offset&&t.length&&(s=this.getDecimalForValue(t[0]),t.length===1?n=1-s:n=(this.getDecimalForValue(t[1])-s)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?i=o:i=(o-this.getDecimalForValue(t[t.length-2]))/2);const r=t.length<3?.5:.25;n=rt(n,0,r),i=rt(i,0,r),this._offsets={start:n,end:i,factor:1/(n+1+i)}}_generate(){const t=this._adapter,n=this.min,i=this.max,s=this.options,o=s.time,r=o.unit||Xo(o.minUnit,n,i,this._getLabelCapacity(n)),a=j(s.ticks.stepSize,1),l=r==="week"?o.isoWeekday:!1,c=Qe(l)||l===!0,h={};let u=n,d,f;if(c&&(u=+t.startOf(u,"isoWeek",l)),u=+t.startOf(u,c?"day":r),t.diff(i,n,r)>1e5*a)throw new Error(n+" and "+i+" are too far apart with stepSize of "+a+" "+r);const g=s.ticks.source==="data"&&this.getDataTimestamps();for(d=u,f=0;d<i;d=+t.add(d,a,r),f++)Ko(h,d,g);return(d===i||s.bounds==="ticks"||f===1)&&Ko(h,d,g),Object.keys(h).sort(Yo).map(m=>+m)}getLabelForValue(t){const n=this._adapter,i=this.options.time;return i.tooltipFormat?n.format(t,i.tooltipFormat):n.format(t,i.displayFormats.datetime)}format(t,n){const s=this.options.time.displayFormats,o=this._unit,r=n||s[o];return this._adapter.format(t,r)}_tickFormatFunction(t,n,i,s){const o=this.options,r=o.ticks.callback;if(r)return V(r,[t,n,i],this);const a=o.time.displayFormats,l=this._unit,c=this._majorUnit,h=l&&a[l],u=c&&a[c],d=i[n],f=c&&u&&d&&d.major;return this._adapter.format(t,s||(f?u:h))}generateTickLabels(t){let n,i,s;for(n=0,i=t.length;n<i;++n)s=t[n],s.label=this._tickFormatFunction(s.value,n,t)}getDecimalForValue(t){return t===null?NaN:(t-this.min)/(this.max-this.min)}getPixelForValue(t){const n=this._offsets,i=this.getDecimalForValue(t);return this.getPixelForDecimal((n.start+i)*n.factor)}getValueForPixel(t){const n=this._offsets,i=this.getDecimalForPixel(t)/n.factor-n.end;return this.min+i*(this.max-this.min)}_getLabelSize(t){const n=this.options.ticks,i=this.ctx.measureText(t).width,s=ae(this.isHorizontal()?n.maxRotation:n.minRotation),o=Math.cos(s),r=Math.sin(s),a=this._resolveTickFontOptions(0).size;return{w:i*o+a*r,h:i*r+a*o}}_getLabelCapacity(t){const n=this.options.time,i=n.displayFormats,s=i[n.unit]||i.millisecond,o=this._tickFormatFunction(t,0,qo(this,[t],this._majorUnit),s),r=this._getLabelSize(o),a=Math.floor(this.isHorizontal()?this.width/r.w:this.height/r.h)-1;return a>0?a:1}getDataTimestamps(){let t=this._cache.data||[],n,i;if(t.length)return t;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(n=0,i=s.length;n<i;++n)t=t.concat(s[n].controller.getAllParsedValues(this));return this._cache.data=this.normalize(t)}getLabelTimestamps(){const t=this._cache.labels||[];let n,i;if(t.length)return t;const s=this.getLabels();for(n=0,i=s.length;n<i;++n)t.push(Uo(this,s[n]));return this._cache.labels=this._normalized?t:this.normalize(t)}normalize(t){return Kr(t.sort(Yo))}}T(Hn,"id","time"),T(Hn,"defaults",{bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}});function On(e,t,n){let i=0,s=e.length-1,o,r,a,l;n?(t>=e[i].pos&&t<=e[s].pos&&({lo:i,hi:s}=le(e,"pos",t)),{pos:o,time:a}=e[i],{pos:r,time:l}=e[s]):(t>=e[i].time&&t<=e[s].time&&({lo:i,hi:s}=le(e,"time",t)),{time:o,pos:a}=e[i],{time:r,pos:l}=e[s]);const c=r-o;return c?a+(l-a)*(t-o)/c:a}class Go extends Hn{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),n=this._table=this.buildLookupTable(t);this._minPos=On(n,this.min),this._tableRange=On(n,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:n,max:i}=this,s=[],o=[];let r,a,l,c,h;for(r=0,a=t.length;r<a;++r)c=t[r],c>=n&&c<=i&&s.push(c);if(s.length<2)return[{time:n,pos:0},{time:i,pos:1}];for(r=0,a=s.length;r<a;++r)h=s[r+1],l=s[r-1],c=s[r],Math.round((h+l)/2)!==c&&o.push({time:c,pos:r/(a-1)});return o}_generate(){const t=this.min,n=this.max;let i=super.getDataTimestamps();return(!i.includes(t)||!i.length)&&i.splice(0,0,t),(!i.includes(n)||i.length===1)&&i.push(n),i.sort((s,o)=>s-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const n=this.getDataTimestamps(),i=this.getLabelTimestamps();return n.length&&i.length?t=this.normalize(n.concat(i)):t=n.length?n:i,t=this._cache.all=t,t}getDecimalForValue(t){return(On(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const n=this._offsets,i=this.getDecimalForPixel(t)/n.factor-n.end;return On(this._table,i*this._tableRange+this._minPos,!0)}}T(Go,"id","timeseries"),T(Go,"defaults",Hn.defaults);var ie={},Jo;function lp(){if(Jo)return ie;Jo=1,Object.defineProperty(ie,"__esModule",{value:!0}),ie.cartesianProductGenerator=ie.cartesianProduct=void 0;function e(...i){if(!Array.isArray(i))throw new TypeError("Please, send an array.");const[s,o,...r]=i,a=n(s,o);return r.length?e(a,...r):a}ie.cartesianProduct=e;function*t(...i){if(!Array.isArray(i))throw new TypeError("Please, send an array.");const[s,o,...r]=i,a=n(s,o);yield a,r.length&&(yield*t(a,...r))}ie.cartesianProductGenerator=t;function n(i,s){const o=[];for(let r=0;r<i.length;r++){if(!s){o.push([i[r]]);continue}for(let a=0;a<s.length;a++)Array.isArray(i[r])?o.push([...i[r],s[a]]):o.push([i[r],s[a]])}return o}return ie}var os=lp();const cp=function(e){let t=0;for(let i=0;i<e.length;i++)t=e.charCodeAt(i)+((t<<5)-t);let n="#";for(let i=0;i<3;i++){const o="00"+(t>>i*8&255).toString(16);n+=o.substring(o.length-2)}return n};function Pg(e,t=(n,i)=>{}){const n=new Map;for(const[i,s]of e){const o=new Map;for(const[r,a]of s){const l=new Map;for(const[c,h]of a){const u=t(r,h);if(u){l.set(c,{tooltip:u});continue}l.set(c,{})}o.set(r,l)}n.set(i,o)}return n}function Og(e){const t=new Map;return e.forEach(n=>{const i=t.get(n.nren);(!i||i.year<n.year)&&t.set(n.nren,n)}),Array.from(t.values())}function Dg(e){return e.match(/^[a-zA-Z]+:\/\//)?e:"https://"+e}const Ag=e=>{const t={};return!e.urls&&!e.url||(e.urls&&e.urls.forEach(n=>{t[n]=n}),e.url&&(t[e.url]=e.url)),t};function Eg(e){const t=new Map;return e.forEach(n=>{let i=t.get(n.nren);i||(i=new Map);let s=i.get(n.year);s||(s=[]),s.push(n),i.set(n.year,s),t.set(n.nren,i)}),t}function Ae(e){const t=new Map;return e.forEach(n=>{let i=t.get(n.nren);i||(i=new Map),i.set(n.year,n),t.set(n.nren,i)}),t}function Tg(e,t){const n=new Map;return e.forEach((i,s)=>{const o=new Map;Array.from(i.keys()).sort((a,l)=>l-a).forEach(a=>{const l=i.get(a),c=o.get(a)||{};t(c,l),Object.keys(c).length>0&&o.set(a,c)}),n.set(s,o)}),n}function Rg(e,t,n=!1){const i=new Map;return e.forEach(s=>{const o=a=>{let l=i.get(s.nren);l||(l=new Map);let c=l.get(a);c||(c=new Map),c.set(s.year,s),l.set(a,c),i.set(s.nren,l)};let r=s[t];typeof r=="boolean"&&(r=r?"True":"False"),n&&r==null&&(r=`${r}`),Array.isArray(r)?r.forEach(o):o(r)}),i}function Lg(e,t,n,i=!0,s){const o=new Map,r=(a,l,c)=>{a.forEach(h=>{let u=l?h[l]:c;typeof u=="boolean"&&(u=u?"True":"False");const d=h.nren,f=h.year,g=o.get(d)||new Map,m=g.get(f)||new Map,p=m.get(u)||{},b=h[c];if(b==null)return;const x=i?b:c,v=p[x]||{};v[`${b}`]=b,p[x]=v,m.set(u,p),g.set(f,m),o.set(d,g)})};if(n)for(const a of t)r(e,n,a);else for(const a of t)r(e,void 0,a);return o}const Fg=e=>{function t(){const u=(f,g,m)=>"#"+[f,g,m].map(p=>{const b=p.toString(16);return b.length===1?"0"+b:b}).join(""),d=new Map;return d.set("client_institutions",u(157,40,114)),d.set("commercial",u(241,224,79)),d.set("european_funding",u(219,42,76)),d.set("gov_public_bodies",u(237,141,24)),d.set("other",u(137,166,121)),d}const n=Ae(e),i=t(),s=[...new Set(e.map(u=>u.year))].sort(),o=[...new Set(e.map(u=>u.nren))].sort(),r={client_institutions:"Client Institutions",commercial:"Commercial",european_funding:"European Funding",gov_public_bodies:"Government/Public Bodies",other:"Other"},a=Object.keys(r),l=os.cartesianProduct(Object.keys(r),s).reduce((u,[d,f])=>{const g=`${d},${f}`;return u[g]={},u},{});return n.forEach((u,d)=>{u.forEach((f,g)=>{const m=a.map(b=>f[b]||0);if(m.reduce((b,x)=>b+x,0)!==0)for(const b of a){const x=`${b},${g}`,v=a.indexOf(b);l[x][d]=m[v]}})}),{datasets:Array.from(Object.entries(l)).map(([u,d])=>{const[f,g]=u.split(",");return{backgroundColor:i.get(f)||"black",label:r[f]+" ("+g+")",data:o.map(p=>d[p]),stack:g,borderSkipped:!0,barPercentage:.8,borderWidth:.5,categoryPercentage:.8,hidden:!1,datalabels:{display:f==a[0],formatter:function(p,b){return b.dataset.stack},font:{family:'"Open Sans", sans-serif',size:16,weight:"700"},anchor:"start",align:"end",offset:function(p){return p.chart.chartArea.width}}}}),labels:o.map(u=>u.toString())}};function Ig(e,t){const n=[...new Set(e.map(r=>r.year))].sort(),i=[...new Set(e.map(r=>r.nren))].sort(),s=Ae(e);return{datasets:i.map(r=>{const a=cp(r);return{backgroundColor:a,borderColor:a,data:n.map(l=>{const c=s.get(r);if(!c)return null;const h=c.get(l);return h?h[t]:null}),label:r,hidden:!1}}),labels:n.map(r=>r.toString())}}const jg=(e,t,n)=>{let i;t?i=["Technical FTE","Non-technical FTE"]:i=["Permanent FTE","Subcontracted FTE"];const s={"Technical FTE":"technical_fte","Non-technical FTE":"non_technical_fte","Permanent FTE":"permanent_fte","Subcontracted FTE":"subcontracted_fte"},[o,r]=i,[a,l]=[s[o],s[r]];function c(p){const b=p[a],x=p[l],v=b+x,_=(b/v||0)*100,y=(x/v||0)*100,w={};return w[o]=Math.round(Math.floor(_*100))/100,w[r]=Math.round(Math.floor(y*100))/100,w}const h=Ae(e),u=[n].sort(),d=[...new Set(e.map(p=>p.nren))].sort((p,b)=>p.localeCompare(b));return{datasets:os.cartesianProduct(i,u).map(function([p,b]){let x="";return p==="Technical FTE"?x="rgba(40, 40, 250, 0.8)":p==="Permanent FTE"?x="rgba(159, 129, 235, 1)":p==="Subcontracted FTE"?x="rgba(173, 216, 229, 1)":p==="Non-technical FTE"&&(x="rgba(116, 216, 242, 0.54)"),{backgroundColor:x,label:`${p} (${b})`,data:d.map(v=>{const _=h.get(v).get(b);return _?c(_)[p]:0}),stack:b,borderRadius:10,borderSkipped:!0,barPercentage:.8,borderWidth:.5,categoryPercentage:.8,hidden:!1}}),labels:d}},$g=(e,t)=>{const n=["Research & Education","Commodity"],i={"Research & Education":"r_and_e_percentage",Commodity:"commodity_percentage"},s=Ae(e),o=[t].sort(),r=[...new Set(e.map(h=>h.nren))].sort((h,u)=>h.localeCompare(u));return{datasets:os.cartesianProduct(n,o).map(function([h,u]){let d="";return h==="Research & Education"?d="rgba(40, 40, 250, 0.8)":h==="Commodity"&&(d="rgba(116, 216, 242, 0.54)"),{backgroundColor:d,label:`${h} (${u})`,data:r.map(f=>{const g=s.get(f).get(u);return g?g[i[h]]:0}),stack:u,borderRadius:10,borderSkipped:!0,barPercentage:.8,borderWidth:.5,categoryPercentage:.8,hidden:!1}}),labels:r}},zg=(e,t)=>{const n=["Permanent FTE","Subcontracted FTE"],i={"Technical FTE":"technical_fte","Non-technical FTE":"non_technical_fte","Permanent FTE":"permanent_fte","Subcontracted FTE":"subcontracted_fte"},[s,o]=n,[r,a]=[i[s],i[o]],l=Ae(e),c=[...new Set(e.map(f=>f.nren))].sort((f,g)=>f.localeCompare(g));function h(f,g){return{backgroundColor:"rgba(219, 42, 76, 1)",label:`Number of FTEs (${f})`,data:c.map(p=>{const b=l.get(p).get(f);return b?(b[r]??0)+(b[a]??0):0}),stack:`${f}`,borderRadius:10,borderSkipped:!0,barPercentage:.8,borderWidth:.5,categoryPercentage:.8,hidden:!1,datalabels:{display:!0,formatter:function(p,b){return b.dataset.stack},font:{family:'"Open Sans", sans-serif',size:16,weight:"700"},anchor:"start",align:"end",offset:function(p){return p.chart.chartArea.width}}}}return{datasets:t.sort().map(h),labels:c}},Ng=(e,t,n)=>{const i=Ae(e),s=[...new Set(e.map(l=>l.nren))].sort((l,c)=>l.localeCompare(c)),o=[...new Set(e.map(l=>l.year))].sort();function r(l,c){return{backgroundColor:"rgba(219, 42, 76, 1)",label:`${n} (${l})`,data:s.map(u=>{const d=i.get(u).get(l);return d?d[t]??0:0}),stack:`${l}`,borderRadius:10,borderSkipped:!0,barPercentage:.8,borderWidth:.5,categoryPercentage:.8,hidden:!1,datalabels:{display:!0,formatter:function(u,d){return d.dataset.stack},font:{family:'"Open Sans", sans-serif',size:16,weight:"700"},anchor:"start",align:"end",offset:function(u){return u.chart.chartArea.width}}}}return{datasets:o.sort().map(r),labels:s}},hp=()=>{const e=wt.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=M.jsx(sn,{children:M.jsx(Ja,{sidebar:!0})}),e[0]=t):t=e[0],t},up=e=>{const t=wt.c(41),{activeCategory:n}=e,i=Za();let s;t[0]!==n||t[1]!==i?(s=()=>i(n===G.Organisation?".":"/funding"),t[0]=n,t[1]=i,t[2]=s):s=t[2];const o=n===G.Organisation;let r;t[3]===Symbol.for("react.memo_cache_sentinel")?(r=M.jsx("span",{children:G.Organisation}),t[3]=r):r=t[3];let a;t[4]!==s||t[5]!==o?(a=M.jsx(Ft,{onClick:s,variant:"nav-box",active:o,children:r}),t[4]=s,t[5]=o,t[6]=a):a=t[6];let l;t[7]!==n||t[8]!==i?(l=()=>i(n===G.Policy?".":"/policy"),t[7]=n,t[8]=i,t[9]=l):l=t[9];const c=n===G.Policy;let h;t[10]===Symbol.for("react.memo_cache_sentinel")?(h=M.jsx("span",{children:G.Policy}),t[10]=h):h=t[10];let u;t[11]!==l||t[12]!==c?(u=M.jsx(Ft,{onClick:l,variant:"nav-box",active:c,children:h}),t[11]=l,t[12]=c,t[13]=u):u=t[13];let d;t[14]!==n||t[15]!==i?(d=()=>i(n===G.ConnectedUsers?".":"/institutions-urls"),t[14]=n,t[15]=i,t[16]=d):d=t[16];const f=n===G.ConnectedUsers;let g;t[17]===Symbol.for("react.memo_cache_sentinel")?(g=M.jsx("span",{children:G.ConnectedUsers}),t[17]=g):g=t[17];let m;t[18]!==f||t[19]!==d?(m=M.jsx(Ft,{onClick:d,variant:"nav-box",active:f,children:g}),t[18]=f,t[19]=d,t[20]=m):m=t[20];let p;t[21]!==n||t[22]!==i?(p=()=>i(n===G.Network?".":"/traffic-volume"),t[21]=n,t[22]=i,t[23]=p):p=t[23];const b=n===G.Network;let x;t[24]===Symbol.for("react.memo_cache_sentinel")?(x=M.jsx("span",{children:G.Network}),t[24]=x):x=t[24];let v;t[25]!==p||t[26]!==b?(v=M.jsx(Ft,{onClick:p,variant:"nav-box",active:b,children:x}),t[25]=p,t[26]=b,t[27]=v):v=t[27];let _;t[28]!==n||t[29]!==i?(_=()=>i(n===G.Services?".":"/network-services"),t[28]=n,t[29]=i,t[30]=_):_=t[30];const y=n===G.Services;let w;t[31]===Symbol.for("react.memo_cache_sentinel")?(w=M.jsx("span",{children:G.Services}),t[31]=w):w=t[31];let k;t[32]!==_||t[33]!==y?(k=M.jsx(Ft,{onClick:_,variant:"nav-box",active:y,children:w}),t[32]=_,t[33]=y,t[34]=k):k=t[34];let S;return t[35]!==m||t[36]!==v||t[37]!==k||t[38]!==a||t[39]!==u?(S=M.jsx(cr,{children:M.jsx(se,{children:M.jsxs(Ti,{className:"navbox-bar gap-2 m-3",children:[a,u,m,v,k]})})}),t[35]=m,t[36]=v,t[37]=k,t[38]=a,t[39]=u,t[40]=S):S=t[40],S},dp=()=>{const e=wt.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=M.jsx(sn,{children:M.jsx(Qa,{sidebar:!0})}),e[0]=t):t=e[0],t},fp=()=>{const e=wt.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=M.jsx(sn,{children:M.jsx(tl,{sidebar:!0})}),e[0]=t):t=e[0],t},pp=()=>{const e=wt.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=M.jsx(sn,{children:M.jsx(el,{sidebar:!0})}),e[0]=t):t=e[0],t},gp=()=>{const e=wt.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=M.jsx(sn,{children:M.jsx(nl,{sidebar:!0})}),e[0]=t):t=e[0],t};function mp(e,t){return e.map(n=>t.map(i=>{const s=n[i];return s===null?"":typeof s=="string"?`"${s.replace(/"/g,'""')}"`:s}).join(","))}function bp(e){if(!e.length)return"";const t=Object.keys(e[0]),n=mp(e,t);return[t.join(","),...n].join(`\r
+`):e}function Xf(e,t){const{element:n,datasetIndex:i,index:s}=t,o=e.getDatasetMeta(i).controller,{label:r,value:a}=o.getLabelAndValue(s);return{chart:e,label:r,parsed:o.getParsed(s),raw:e.data.datasets[i].data[s],formattedValue:a,dataset:o.getDataset(),dataIndex:s,datasetIndex:i,element:n}}function Io(e,t){const n=e.chart.ctx,{body:i,footer:s,title:o}=e,{boxWidth:r,boxHeight:a}=t,l=at(t.bodyFont),c=at(t.titleFont),h=at(t.footerFont),u=o.length,d=s.length,f=i.length,g=_t(t.padding);let m=g.height,p=0,b=i.reduce((_,y)=>_+y.before.length+y.lines.length+y.after.length,0);if(b+=e.beforeBody.length+e.afterBody.length,u&&(m+=u*c.lineHeight+(u-1)*t.titleSpacing+t.titleMarginBottom),b){const _=t.displayColors?Math.max(a,l.lineHeight):l.lineHeight;m+=f*_+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}d&&(m+=t.footerMarginTop+d*h.lineHeight+(d-1)*t.footerSpacing);let x=0;const v=function(_){p=Math.max(p,n.measureText(_).width+x)};return n.save(),n.font=c.string,H(e.title,v),n.font=l.string,H(e.beforeBody.concat(e.afterBody),v),x=t.displayColors?r+2+t.boxPadding:0,H(i,_=>{H(_.before,v),H(_.lines,v),H(_.after,v)}),x=0,n.font=h.string,H(e.footer,v),n.restore(),p+=g.width,{width:p,height:m}}function Kf(e,t){const{y:n,height:i}=t;return n<i/2?"top":n>e.height-i/2?"bottom":"center"}function qf(e,t,n,i){const{x:s,width:o}=i,r=n.caretSize+n.caretPadding;if(e==="left"&&s+o+r>t.width||e==="right"&&s-o-r<0)return!0}function Gf(e,t,n,i){const{x:s,width:o}=n,{width:r,chartArea:{left:a,right:l}}=e;let c="center";return i==="center"?c=s<=(a+l)/2?"left":"right":s<=o/2?c="left":s>=r-o/2&&(c="right"),qf(c,e,t,n)&&(c="center"),c}function jo(e,t,n){const i=n.yAlign||t.yAlign||Kf(e,n);return{xAlign:n.xAlign||t.xAlign||Gf(e,t,n,i),yAlign:i}}function Jf(e,t){let{x:n,width:i}=e;return t==="right"?n-=i:t==="center"&&(n-=i/2),n}function Zf(e,t,n){let{y:i,height:s}=e;return t==="top"?i+=n:t==="bottom"?i-=s+n:i-=s/2,i}function $o(e,t,n,i){const{caretSize:s,caretPadding:o,cornerRadius:r}=e,{xAlign:a,yAlign:l}=n,c=s+o,{topLeft:h,topRight:u,bottomLeft:d,bottomRight:f}=ye(r);let g=Jf(t,a);const m=Zf(t,l,c);return l==="center"?a==="left"?g+=c:a==="right"&&(g-=c):a==="left"?g-=Math.max(h,d)+s:a==="right"&&(g+=Math.max(u,f)+s),{x:rt(g,0,i.width-t.width),y:rt(m,0,i.height-t.height)}}function Pn(e,t,n){const i=_t(n.padding);return t==="center"?e.x+e.width/2:t==="right"?e.x+e.width-i.right:e.x+i.left}function zo(e){return kt([],Rt(e))}function Qf(e,t,n){return pe(e,{tooltip:t,tooltipItems:n,type:"tooltip"})}function No(e,t){const n=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return n?e.override(n):e}const Pa={beforeTitle:Et,title(e){if(e.length>0){const t=e[0],n=t.chart.data.labels,i=n?n.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(i>0&&t.dataIndex<i)return n[t.dataIndex]}return""},afterTitle:Et,beforeBody:Et,beforeLabel:Et,label(e){if(this&&this.options&&this.options.mode==="dataset")return e.label+": "+e.formattedValue||e.formattedValue;let t=e.dataset.label||"";t&&(t+=": ");const n=e.formattedValue;return W(n)||(t+=n),t},labelColor(e){const n=e.chart.getDatasetMeta(e.datasetIndex).controller.getStyle(e.dataIndex);return{borderColor:n.borderColor,backgroundColor:n.backgroundColor,borderWidth:n.borderWidth,borderDash:n.borderDash,borderDashOffset:n.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(e){const n=e.chart.getDatasetMeta(e.datasetIndex).controller.getStyle(e.dataIndex);return{pointStyle:n.pointStyle,rotation:n.rotation}},afterLabel:Et,afterBody:Et,beforeFooter:Et,footer:Et,afterFooter:Et};function ct(e,t,n,i){const s=e[t].call(n,i);return typeof s>"u"?Pa[t].call(n,i):s}class Ai extends $t{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const n=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&n.options.animation&&i.animations,o=new ha(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=Qf(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,n){const{callbacks:i}=n,s=ct(i,"beforeTitle",this,t),o=ct(i,"title",this,t),r=ct(i,"afterTitle",this,t);let a=[];return a=kt(a,Rt(s)),a=kt(a,Rt(o)),a=kt(a,Rt(r)),a}getBeforeBody(t,n){return zo(ct(n.callbacks,"beforeBody",this,t))}getBody(t,n){const{callbacks:i}=n,s=[];return H(t,o=>{const r={before:[],lines:[],after:[]},a=No(i,o);kt(r.before,Rt(ct(a,"beforeLabel",this,o))),kt(r.lines,ct(a,"label",this,o)),kt(r.after,Rt(ct(a,"afterLabel",this,o))),s.push(r)}),s}getAfterBody(t,n){return zo(ct(n.callbacks,"afterBody",this,t))}getFooter(t,n){const{callbacks:i}=n,s=ct(i,"beforeFooter",this,t),o=ct(i,"footer",this,t),r=ct(i,"afterFooter",this,t);let a=[];return a=kt(a,Rt(s)),a=kt(a,Rt(o)),a=kt(a,Rt(r)),a}_createItems(t){const n=this._active,i=this.chart.data,s=[],o=[],r=[];let a=[],l,c;for(l=0,c=n.length;l<c;++l)a.push(Xf(this.chart,n[l]));return t.filter&&(a=a.filter((h,u,d)=>t.filter(h,u,d,i))),t.itemSort&&(a=a.sort((h,u)=>t.itemSort(h,u,i))),H(a,h=>{const u=No(t.callbacks,h);s.push(ct(u,"labelColor",this,h)),o.push(ct(u,"labelPointStyle",this,h)),r.push(ct(u,"labelTextColor",this,h))}),this.labelColors=s,this.labelPointStyles=o,this.labelTextColors=r,this.dataPoints=a,a}update(t,n){const i=this.options.setContext(this.getContext()),s=this._active;let o,r=[];if(!s.length)this.opacity!==0&&(o={opacity:0});else{const a=Ne[i.position].call(this,s,this._eventPosition);r=this._createItems(i),this.title=this.getTitle(r,i),this.beforeBody=this.getBeforeBody(r,i),this.body=this.getBody(r,i),this.afterBody=this.getAfterBody(r,i),this.footer=this.getFooter(r,i);const l=this._size=Io(this,i),c=Object.assign({},a,l),h=jo(this.chart,i,c),u=$o(i,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:u.x,y:u.y,width:l.width,height:l.height,caretX:a.x,caretY:a.y}}this._tooltipItems=r,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:n})}drawCaret(t,n,i,s){const o=this.getCaretPosition(t,i,s);n.lineTo(o.x1,o.y1),n.lineTo(o.x2,o.y2),n.lineTo(o.x3,o.y3)}getCaretPosition(t,n,i){const{xAlign:s,yAlign:o}=this,{caretSize:r,cornerRadius:a}=i,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:u}=ye(a),{x:d,y:f}=t,{width:g,height:m}=n;let p,b,x,v,_,y;return o==="center"?(_=f+m/2,s==="left"?(p=d,b=p-r,v=_+r,y=_-r):(p=d+g,b=p+r,v=_-r,y=_+r),x=p):(s==="left"?b=d+Math.max(l,h)+r:s==="right"?b=d+g-Math.max(c,u)-r:b=this.caretX,o==="top"?(v=f,_=v-r,p=b-r,x=b+r):(v=f+m,_=v+r,p=b+r,x=b-r),y=v),{x1:p,x2:b,x3:x,y1:v,y2:_,y3:y}}drawTitle(t,n,i){const s=this.title,o=s.length;let r,a,l;if(o){const c=ve(i.rtl,this.x,this.width);for(t.x=Pn(this,i.titleAlign,i),n.textAlign=c.textAlign(i.titleAlign),n.textBaseline="middle",r=at(i.titleFont),a=i.titleSpacing,n.fillStyle=i.titleColor,n.font=r.string,l=0;l<o;++l)n.fillText(s[l],c.x(t.x),t.y+r.lineHeight/2),t.y+=r.lineHeight+a,l+1===o&&(t.y+=i.titleMarginBottom-a)}}_drawColorBox(t,n,i,s,o){const r=this.labelColors[i],a=this.labelPointStyles[i],{boxHeight:l,boxWidth:c}=o,h=at(o.bodyFont),u=Pn(this,"left",o),d=s.x(u),f=l<h.lineHeight?(h.lineHeight-l)/2:0,g=n.y+f;if(o.usePointStyle){const m={radius:Math.min(c,l)/2,pointStyle:a.pointStyle,rotation:a.rotation,borderWidth:1},p=s.leftForLtr(d,c)+c/2,b=g+l/2;t.strokeStyle=o.multiKeyBackground,t.fillStyle=o.multiKeyBackground,Ci(t,m,p,b),t.strokeStyle=r.borderColor,t.fillStyle=r.backgroundColor,Ci(t,m,p,b)}else{t.lineWidth=z(r.borderWidth)?Math.max(...Object.values(r.borderWidth)):r.borderWidth||1,t.strokeStyle=r.borderColor,t.setLineDash(r.borderDash||[]),t.lineDashOffset=r.borderDashOffset||0;const m=s.leftForLtr(d,c),p=s.leftForLtr(s.xPlus(d,1),c-2),b=ye(r.borderRadius);Object.values(b).some(x=>x!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,$n(t,{x:m,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=r.backgroundColor,t.beginPath(),$n(t,{x:p,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(m,g,c,l),t.strokeRect(m,g,c,l),t.fillStyle=r.backgroundColor,t.fillRect(p,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,n,i){const{body:s}=this,{bodySpacing:o,bodyAlign:r,displayColors:a,boxHeight:l,boxWidth:c,boxPadding:h}=i,u=at(i.bodyFont);let d=u.lineHeight,f=0;const g=ve(i.rtl,this.x,this.width),m=function(S){n.fillText(S,g.x(t.x+f),t.y+d/2),t.y+=d+o},p=g.textAlign(r);let b,x,v,_,y,w,k;for(n.textAlign=r,n.textBaseline="middle",n.font=u.string,t.x=Pn(this,p,i),n.fillStyle=i.bodyColor,H(this.beforeBody,m),f=a&&p!=="right"?r==="center"?c/2+h:c+2+h:0,_=0,w=s.length;_<w;++_){for(b=s[_],x=this.labelTextColors[_],n.fillStyle=x,H(b.before,m),v=b.lines,a&&v.length&&(this._drawColorBox(n,t,_,g,i),d=Math.max(u.lineHeight,l)),y=0,k=v.length;y<k;++y)m(v[y]),d=u.lineHeight;H(b.after,m)}f=0,d=u.lineHeight,H(this.afterBody,m),t.y-=o}drawFooter(t,n,i){const s=this.footer,o=s.length;let r,a;if(o){const l=ve(i.rtl,this.x,this.width);for(t.x=Pn(this,i.footerAlign,i),t.y+=i.footerMarginTop,n.textAlign=l.textAlign(i.footerAlign),n.textBaseline="middle",r=at(i.footerFont),n.fillStyle=i.footerColor,n.font=r.string,a=0;a<o;++a)n.fillText(s[a],l.x(t.x),t.y+r.lineHeight/2),t.y+=r.lineHeight+i.footerSpacing}}drawBackground(t,n,i,s){const{xAlign:o,yAlign:r}=this,{x:a,y:l}=t,{width:c,height:h}=i,{topLeft:u,topRight:d,bottomLeft:f,bottomRight:g}=ye(s.cornerRadius);n.fillStyle=s.backgroundColor,n.strokeStyle=s.borderColor,n.lineWidth=s.borderWidth,n.beginPath(),n.moveTo(a+u,l),r==="top"&&this.drawCaret(t,n,i,s),n.lineTo(a+c-d,l),n.quadraticCurveTo(a+c,l,a+c,l+d),r==="center"&&o==="right"&&this.drawCaret(t,n,i,s),n.lineTo(a+c,l+h-g),n.quadraticCurveTo(a+c,l+h,a+c-g,l+h),r==="bottom"&&this.drawCaret(t,n,i,s),n.lineTo(a+f,l+h),n.quadraticCurveTo(a,l+h,a,l+h-f),r==="center"&&o==="left"&&this.drawCaret(t,n,i,s),n.lineTo(a,l+u),n.quadraticCurveTo(a,l,a+u,l),n.closePath(),n.fill(),s.borderWidth>0&&n.stroke()}_updateAnimationTarget(t){const n=this.chart,i=this.$animations,s=i&&i.x,o=i&&i.y;if(s||o){const r=Ne[t.position].call(this,this._active,this._eventPosition);if(!r)return;const a=this._size=Io(this,t),l=Object.assign({},r,this._size),c=jo(n,t,l),h=$o(t,l,c,n);(s._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=a.width,this.height=a.height,this.caretX=r.x,this.caretY=r.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){const n=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(n);const s={width:this.width,height:this.height},o={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const r=_t(n.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;n.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(o,t,s,n),aa(t,n.textDirection),o.y+=r.top,this.drawTitle(o,t,n),this.drawBody(o,t,n),this.drawFooter(o,t,n),la(t,n.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,n){const i=this._active,s=t.map(({datasetIndex:a,index:l})=>{const c=this.chart.getDatasetMeta(a);if(!c)throw new Error("Cannot find a dataset at index "+a);return{datasetIndex:a,element:c.data[l],index:l}}),o=!Fn(i,s),r=this._positionChanged(s,n);(o||r)&&(this._active=s,this._eventPosition=n,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,n,i=!0){if(n&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,o=this._active||[],r=this._getActiveElements(t,o,n,i),a=this._positionChanged(r,t),l=n||!Fn(r,o)||a;return l&&(this._active=r,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,n))),l}_getActiveElements(t,n,i,s){const o=this.options;if(t.type==="mouseout")return[];if(!s)return n.filter(a=>this.chart.data.datasets[a.datasetIndex]&&this.chart.getDatasetMeta(a.datasetIndex).controller.getParsed(a.index)!==void 0);const r=this.chart.getElementsAtEventForMode(t,o.mode,o,i);return o.reverse&&r.reverse(),r}_positionChanged(t,n){const{caretX:i,caretY:s,options:o}=this,r=Ne[o.position].call(this,t,n);return r!==!1&&(i!==r.x||s!==r.y)}}T(Ai,"positioners",Ne);var Cg={id:"tooltip",_element:Ai,positioners:Ne,afterInit(e,t,n){n&&(e.tooltip=new Ai({chart:e,options:n}))},beforeUpdate(e,t,n){e.tooltip&&e.tooltip.initialize(n)},reset(e,t,n){e.tooltip&&e.tooltip.initialize(n)},afterDraw(e){const t=e.tooltip;if(t&&t._willRender()){const n={tooltip:t};if(e.notifyPlugins("beforeTooltipDraw",{...n,cancelable:!0})===!1)return;t.draw(e.ctx),e.notifyPlugins("afterTooltipDraw",n)}},afterEvent(e,t){if(e.tooltip){const n=t.replay;e.tooltip.handleEvent(t.event,n,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(e,t)=>t.bodyFont.size,boxWidth:(e,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Pa},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:e=>e!=="filter"&&e!=="itemSort"&&e!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};const tp=(e,t,n,i)=>(typeof t=="string"?(n=e.push(t)-1,i.unshift({index:n,label:t})):isNaN(t)&&(n=null),n);function ep(e,t,n,i){const s=e.indexOf(t);if(s===-1)return tp(e,t,n,i);const o=e.lastIndexOf(t);return s!==o?n:s}const np=(e,t)=>e===null?null:rt(Math.round(e),0,t);function Bo(e){const t=this.getLabels();return e>=0&&e<t.length?t[e]:e}class Ho extends De{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const n=this._addedLabels;if(n.length){const i=this.getLabels();for(const{index:s,label:o}of n)i[s]===o&&i.splice(s,1);this._addedLabels=[]}super.init(t)}parse(t,n){if(W(t))return null;const i=this.getLabels();return n=isFinite(n)&&i[n]===t?n:ep(i,t,j(n,t),this._addedLabels),np(n,i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:n}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);this.options.bounds==="ticks"&&(t||(i=0),n||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,n=this.max,i=this.options.offset,s=[];let o=this.getLabels();o=t===0&&n===o.length-1?o:o.slice(t,n+1),this._valueRange=Math.max(o.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let r=t;r<=n;r++)s.push({value:r});return s}getLabelForValue(t){return Bo.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return typeof t!="number"&&(t=this.parse(t)),t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const n=this.ticks;return t<0||t>n.length-1?null:this.getPixelForValue(n[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}T(Ho,"id","category"),T(Ho,"defaults",{ticks:{callback:Bo}});function ip(e,t){const n=[],{bounds:s,step:o,min:r,max:a,precision:l,count:c,maxTicks:h,maxDigits:u,includeBounds:d}=e,f=o||1,g=h-1,{min:m,max:p}=t,b=!W(r),x=!W(a),v=!W(c),_=(p-m)/(u+1);let y=Hs((p-m)/g/f)*f,w,k,S,P;if(y<1e-14&&!b&&!x)return[{value:m},{value:p}];P=Math.ceil(p/y)-Math.floor(m/y),P>g&&(y=Hs(P*y/g/f)*f),W(l)||(w=Math.pow(10,l),y=Math.ceil(y*w)/w),s==="ticks"?(k=Math.floor(m/y)*y,S=Math.ceil(p/y)*y):(k=m,S=p),b&&x&&o&&Dh((a-r)/o,y/1e3)?(P=Math.round(Math.min((a-r)/y,h)),y=(a-r)/P,k=r,S=a):v?(k=b?r:k,S=x?a:S,P=c-1,y=(S-k)/P):(P=(S-k)/y,Ye(P,Math.round(P),y/1e3)?P=Math.round(P):P=Math.ceil(P));const D=Math.max(Ws(y),Ws(k));w=Math.pow(10,W(l)?D:l),k=Math.round(k*w)/w,S=Math.round(S*w)/w;let C=0;for(b&&(d&&k!==r?(n.push({value:r}),k<r&&C++,Ye(Math.round((k+C*y)*w)/w,r,Wo(r,_,e))&&C++):k<r&&C++);C<P;++C){const O=Math.round((k+C*y)*w)/w;if(x&&O>a)break;n.push({value:O})}return x&&d&&S!==a?n.length&&Ye(n[n.length-1].value,a,Wo(a,_,e))?n[n.length-1].value=a:n.push({value:a}):(!x||S===a)&&n.push({value:S}),n}function Wo(e,t,{horizontal:n,minRotation:i}){const s=ae(i),o=(n?Math.sin(s):Math.cos(s))||.001,r=.75*t*(""+e).length;return Math.min(t/o,r)}class sp extends De{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,n){return W(t)||(typeof t=="number"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:n,maxDefined:i}=this.getUserBounds();let{min:s,max:o}=this;const r=l=>s=n?s:l,a=l=>o=i?o:l;if(t){const l=Dt(s),c=Dt(o);l<0&&c<0?a(0):l>0&&c>0&&r(0)}if(s===o){let l=o===0?1:Math.abs(o*.05);a(o+l),t||r(s-l)}this.min=s,this.max=o}getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:n,stepSize:i}=t,s;return i?(s=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,s>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${s} ticks. Limiting to 1000.`),s=1e3)):(s=this.computeTickLimit(),n=n||11),n&&(s=Math.min(n,s)),s}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,n=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s={maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:n.precision,step:n.stepSize,count:n.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:n.minRotation||0,includeBounds:n.includeBounds!==!1},o=this._range||this,r=ip(s,o);return t.bounds==="ticks"&&Ah(r,this,"value"),t.reverse?(r.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),r}configure(){const t=this.ticks;let n=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-n)/Math.max(t.length-1,1)/2;n-=s,i+=s}this._startValue=n,this._endValue=i,this._valueRange=i-n}getLabelForValue(t){return Jr(t,this.chart.options.locale,this.options.ticks.format)}}class Vo extends sp{determineDataLimits(){const{min:t,max:n}=this.getMinMax(!0);this.min=vt(t)?t:0,this.max=vt(n)?n:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),n=t?this.width:this.height,i=ae(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(n/Math.min(40,o.lineHeight/s))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}T(Vo,"id","linear"),T(Vo,"defaults",{ticks:{callback:Qr.formatters.numeric}});const Kn={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ht=Object.keys(Kn);function Yo(e,t){return e-t}function Uo(e,t){if(W(t))return null;const n=e._adapter,{parser:i,round:s,isoWeekday:o}=e._parseOpts;let r=t;return typeof i=="function"&&(r=i(r)),vt(r)||(r=typeof i=="string"?n.parse(r,i):n.parse(r)),r===null?null:(s&&(r=s==="week"&&(Qe(o)||o===!0)?n.startOf(r,"isoWeek",o):n.startOf(r,s)),+r)}function Xo(e,t,n,i){const s=ht.length;for(let o=ht.indexOf(e);o<s-1;++o){const r=Kn[ht[o]],a=r.steps?r.steps:Number.MAX_SAFE_INTEGER;if(r.common&&Math.ceil((n-t)/(a*r.size))<=i)return ht[o]}return ht[s-1]}function op(e,t,n,i,s){for(let o=ht.length-1;o>=ht.indexOf(n);o--){const r=ht[o];if(Kn[r].common&&e._adapter.diff(s,i,r)>=t-1)return r}return ht[n?ht.indexOf(n):0]}function rp(e){for(let t=ht.indexOf(e)+1,n=ht.length;t<n;++t)if(Kn[ht[t]].common)return ht[t]}function Ko(e,t,n){if(!n)e[t]=!0;else if(n.length){const{lo:i,hi:s}=Xi(n,t),o=n[i]>=t?n[i]:n[s];e[o]=!0}}function ap(e,t,n,i){const s=e._adapter,o=+s.startOf(t[0].value,i),r=t[t.length-1].value;let a,l;for(a=o;a<=r;a=+s.add(a,1,i))l=n[a],l>=0&&(t[l].major=!0);return t}function qo(e,t,n){const i=[],s={},o=t.length;let r,a;for(r=0;r<o;++r)a=t[r],s[a]=r,i.push({value:a,major:!1});return o===0||!n?i:ap(e,i,s,n)}class Hn extends De{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,n={}){const i=t.time||(t.time={}),s=this._adapter=new ud._date(t.adapters.date);s.init(n),Ve(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=n.normalized}parse(t,n){return t===void 0?null:Uo(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,n=this._adapter,i=t.time.unit||"day";let{min:s,max:o,minDefined:r,maxDefined:a}=this.getUserBounds();function l(c){!r&&!isNaN(c.min)&&(s=Math.min(s,c.min)),!a&&!isNaN(c.max)&&(o=Math.max(o,c.max))}(!r||!a)&&(l(this._getLabelBounds()),(t.bounds!=="ticks"||t.ticks.source!=="labels")&&l(this.getMinMax(!1))),s=vt(s)&&!isNaN(s)?s:+n.startOf(Date.now(),i),o=vt(o)&&!isNaN(o)?o:+n.endOf(Date.now(),i)+1,this.min=Math.min(s,o-1),this.max=Math.max(s+1,o)}_getLabelBounds(){const t=this.getLabelTimestamps();let n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(n=t[0],i=t[t.length-1]),{min:n,max:i}}buildTicks(){const t=this.options,n=t.time,i=t.ticks,s=i.source==="labels"?this.getLabelTimestamps():this._generate();t.bounds==="ticks"&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const o=this.min,r=this.max,a=Fh(s,o,r);return this._unit=n.unit||(i.autoSkip?Xo(n.minUnit,this.min,this.max,this._getLabelCapacity(o)):op(this,a.length,n.minUnit,this.min,this.max)),this._majorUnit=!i.major.enabled||this._unit==="year"?void 0:rp(this._unit),this.initOffsets(s),t.reverse&&a.reverse(),qo(this,a,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map(t=>+t.value))}initOffsets(t=[]){let n=0,i=0,s,o;this.options.offset&&t.length&&(s=this.getDecimalForValue(t[0]),t.length===1?n=1-s:n=(this.getDecimalForValue(t[1])-s)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?i=o:i=(o-this.getDecimalForValue(t[t.length-2]))/2);const r=t.length<3?.5:.25;n=rt(n,0,r),i=rt(i,0,r),this._offsets={start:n,end:i,factor:1/(n+1+i)}}_generate(){const t=this._adapter,n=this.min,i=this.max,s=this.options,o=s.time,r=o.unit||Xo(o.minUnit,n,i,this._getLabelCapacity(n)),a=j(s.ticks.stepSize,1),l=r==="week"?o.isoWeekday:!1,c=Qe(l)||l===!0,h={};let u=n,d,f;if(c&&(u=+t.startOf(u,"isoWeek",l)),u=+t.startOf(u,c?"day":r),t.diff(i,n,r)>1e5*a)throw new Error(n+" and "+i+" are too far apart with stepSize of "+a+" "+r);const g=s.ticks.source==="data"&&this.getDataTimestamps();for(d=u,f=0;d<i;d=+t.add(d,a,r),f++)Ko(h,d,g);return(d===i||s.bounds==="ticks"||f===1)&&Ko(h,d,g),Object.keys(h).sort(Yo).map(m=>+m)}getLabelForValue(t){const n=this._adapter,i=this.options.time;return i.tooltipFormat?n.format(t,i.tooltipFormat):n.format(t,i.displayFormats.datetime)}format(t,n){const s=this.options.time.displayFormats,o=this._unit,r=n||s[o];return this._adapter.format(t,r)}_tickFormatFunction(t,n,i,s){const o=this.options,r=o.ticks.callback;if(r)return V(r,[t,n,i],this);const a=o.time.displayFormats,l=this._unit,c=this._majorUnit,h=l&&a[l],u=c&&a[c],d=i[n],f=c&&u&&d&&d.major;return this._adapter.format(t,s||(f?u:h))}generateTickLabels(t){let n,i,s;for(n=0,i=t.length;n<i;++n)s=t[n],s.label=this._tickFormatFunction(s.value,n,t)}getDecimalForValue(t){return t===null?NaN:(t-this.min)/(this.max-this.min)}getPixelForValue(t){const n=this._offsets,i=this.getDecimalForValue(t);return this.getPixelForDecimal((n.start+i)*n.factor)}getValueForPixel(t){const n=this._offsets,i=this.getDecimalForPixel(t)/n.factor-n.end;return this.min+i*(this.max-this.min)}_getLabelSize(t){const n=this.options.ticks,i=this.ctx.measureText(t).width,s=ae(this.isHorizontal()?n.maxRotation:n.minRotation),o=Math.cos(s),r=Math.sin(s),a=this._resolveTickFontOptions(0).size;return{w:i*o+a*r,h:i*r+a*o}}_getLabelCapacity(t){const n=this.options.time,i=n.displayFormats,s=i[n.unit]||i.millisecond,o=this._tickFormatFunction(t,0,qo(this,[t],this._majorUnit),s),r=this._getLabelSize(o),a=Math.floor(this.isHorizontal()?this.width/r.w:this.height/r.h)-1;return a>0?a:1}getDataTimestamps(){let t=this._cache.data||[],n,i;if(t.length)return t;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(n=0,i=s.length;n<i;++n)t=t.concat(s[n].controller.getAllParsedValues(this));return this._cache.data=this.normalize(t)}getLabelTimestamps(){const t=this._cache.labels||[];let n,i;if(t.length)return t;const s=this.getLabels();for(n=0,i=s.length;n<i;++n)t.push(Uo(this,s[n]));return this._cache.labels=this._normalized?t:this.normalize(t)}normalize(t){return Kr(t.sort(Yo))}}T(Hn,"id","time"),T(Hn,"defaults",{bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}});function On(e,t,n){let i=0,s=e.length-1,o,r,a,l;n?(t>=e[i].pos&&t<=e[s].pos&&({lo:i,hi:s}=le(e,"pos",t)),{pos:o,time:a}=e[i],{pos:r,time:l}=e[s]):(t>=e[i].time&&t<=e[s].time&&({lo:i,hi:s}=le(e,"time",t)),{time:o,pos:a}=e[i],{time:r,pos:l}=e[s]);const c=r-o;return c?a+(l-a)*(t-o)/c:a}class Go extends Hn{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),n=this._table=this.buildLookupTable(t);this._minPos=On(n,this.min),this._tableRange=On(n,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:n,max:i}=this,s=[],o=[];let r,a,l,c,h;for(r=0,a=t.length;r<a;++r)c=t[r],c>=n&&c<=i&&s.push(c);if(s.length<2)return[{time:n,pos:0},{time:i,pos:1}];for(r=0,a=s.length;r<a;++r)h=s[r+1],l=s[r-1],c=s[r],Math.round((h+l)/2)!==c&&o.push({time:c,pos:r/(a-1)});return o}_generate(){const t=this.min,n=this.max;let i=super.getDataTimestamps();return(!i.includes(t)||!i.length)&&i.splice(0,0,t),(!i.includes(n)||i.length===1)&&i.push(n),i.sort((s,o)=>s-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const n=this.getDataTimestamps(),i=this.getLabelTimestamps();return n.length&&i.length?t=this.normalize(n.concat(i)):t=n.length?n:i,t=this._cache.all=t,t}getDecimalForValue(t){return(On(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const n=this._offsets,i=this.getDecimalForPixel(t)/n.factor-n.end;return On(this._table,i*this._tableRange+this._minPos,!0)}}T(Go,"id","timeseries"),T(Go,"defaults",Hn.defaults);var ie={},Jo;function lp(){if(Jo)return ie;Jo=1,Object.defineProperty(ie,"__esModule",{value:!0}),ie.cartesianProductGenerator=ie.cartesianProduct=void 0;function e(...i){if(!Array.isArray(i))throw new TypeError("Please, send an array.");const[s,o,...r]=i,a=n(s,o);return r.length?e(a,...r):a}ie.cartesianProduct=e;function*t(...i){if(!Array.isArray(i))throw new TypeError("Please, send an array.");const[s,o,...r]=i,a=n(s,o);yield a,r.length&&(yield*t(a,...r))}ie.cartesianProductGenerator=t;function n(i,s){const o=[];for(let r=0;r<i.length;r++){if(!s){o.push([i[r]]);continue}for(let a=0;a<s.length;a++)Array.isArray(i[r])?o.push([...i[r],s[a]]):o.push([i[r],s[a]])}return o}return ie}var os=lp();const cp=function(e){let t=0;for(let i=0;i<e.length;i++)t=e.charCodeAt(i)+((t<<5)-t);let n="#";for(let i=0;i<3;i++){const o="00"+(t>>i*8&255).toString(16);n+=o.substring(o.length-2)}return n};function Pg(e,t=(n,i)=>{}){const n=new Map;for(const[i,s]of e){const o=new Map;for(const[r,a]of s){const l=new Map;for(const[c,h]of a){const u=t(r,h);if(u){l.set(c,{tooltip:u});continue}l.set(c,{})}o.set(r,l)}n.set(i,o)}return n}function Og(e){const t=new Map;return e.forEach(n=>{const i=t.get(n.nren);(!i||i.year<n.year)&&t.set(n.nren,n)}),Array.from(t.values())}function Dg(e){return e.match(/^[a-zA-Z]+:\/\//)?e:"https://"+e}const Ag=e=>{const t={};return!e.urls&&!e.url||(e.urls&&e.urls.forEach(n=>{t[n]=n}),e.url&&(t[e.url]=e.url)),t};function Eg(e){const t=new Map;return e.forEach(n=>{let i=t.get(n.nren);i||(i=new Map);let s=i.get(n.year);s||(s=[]),s.push(n),i.set(n.year,s),t.set(n.nren,i)}),t}function Ae(e){const t=new Map;return e.forEach(n=>{let i=t.get(n.nren);i||(i=new Map),i.set(n.year,n),t.set(n.nren,i)}),t}function Tg(e,t){const n=new Map;return e.forEach((i,s)=>{const o=new Map;Array.from(i.keys()).sort((a,l)=>l-a).forEach(a=>{const l=i.get(a),c=o.get(a)||{};t(c,l),Object.keys(c).length>0&&o.set(a,c)}),n.set(s,o)}),n}function Rg(e,t,n=!1){const i=new Map;return e.forEach(s=>{const o=a=>{let l=i.get(s.nren);l||(l=new Map);let c=l.get(a);c||(c=new Map),c.set(s.year,s),l.set(a,c),i.set(s.nren,l)};let r=s[t];typeof r=="boolean"&&(r=r?"True":"False"),n&&r==null&&(r=`${r}`),Array.isArray(r)?r.forEach(o):o(r)}),i}function Lg(e,t,n,i=!0,s){const o=new Map,r=(a,l,c)=>{a.forEach(h=>{let u=l?h[l]:c;typeof u=="boolean"&&(u=u?"True":"False");const d=h.nren,f=h.year,g=o.get(d)||new Map,m=g.get(f)||new Map,p=m.get(u)||{},b=h[c];if(b==null)return;const x=i?b:c,v=p[x]||{};v[`${b}`]=b,p[x]=v,m.set(u,p),g.set(f,m),o.set(d,g)})};if(n)for(const a of t)r(e,n,a);else for(const a of t)r(e,void 0,a);return o}const Fg=e=>{function t(){const u=(f,g,m)=>"#"+[f,g,m].map(p=>{const b=p.toString(16);return b.length===1?"0"+b:b}).join(""),d=new Map;return d.set("client_institutions",u(157,40,114)),d.set("commercial",u(241,224,79)),d.set("european_funding",u(219,42,76)),d.set("gov_public_bodies",u(237,141,24)),d.set("other",u(137,166,121)),d}const n=Ae(e),i=t(),s=[...new Set(e.map(u=>u.year))].sort(),o=[...new Set(e.map(u=>u.nren))].sort(),r={client_institutions:"Client Institutions",commercial:"Commercial",european_funding:"European Funding",gov_public_bodies:"Government/Public Bodies",other:"Other"},a=Object.keys(r),l=os.cartesianProduct(Object.keys(r),s).reduce((u,[d,f])=>{const g=`${d},${f}`;return u[g]={},u},{});return n.forEach((u,d)=>{u.forEach((f,g)=>{const m=a.map(b=>f[b]||0);if(m.reduce((b,x)=>b+x,0)!==0)for(const b of a){const x=`${b},${g}`,v=a.indexOf(b);l[x][d]=m[v]}})}),{datasets:Array.from(Object.entries(l)).map(([u,d])=>{const[f,g]=u.split(",");return{backgroundColor:i.get(f)||"black",label:r[f]+" ("+g+")",data:o.map(p=>d[p]),stack:g,borderSkipped:!0,barPercentage:.8,borderWidth:.5,categoryPercentage:.8,hidden:!1,datalabels:{display:f==a[0],formatter:function(p,b){return b.dataset.stack},font:{family:'"Open Sans", sans-serif',size:16,weight:"700"},anchor:"start",align:"end",offset:function(p){return p.chart.chartArea.width}}}}),labels:o.map(u=>u.toString())}};function Ig(e,t){const n=[...new Set(e.map(r=>r.year))].sort(),i=[...new Set(e.map(r=>r.nren))].sort(),s=Ae(e);return{datasets:i.map(r=>{const a=cp(r);return{backgroundColor:a,borderColor:a,data:n.map(l=>{const c=s.get(r);if(!c)return null;const h=c.get(l);return h?h[t]:null}),label:r,hidden:!1}}),labels:n.map(r=>r.toString())}}const jg=(e,t,n)=>{let i;t?i=["Technical FTE","Non-technical FTE"]:i=["Permanent FTE","Subcontracted FTE"];const s={"Technical FTE":"technical_fte","Non-technical FTE":"non_technical_fte","Permanent FTE":"permanent_fte","Subcontracted FTE":"subcontracted_fte"},[o,r]=i,[a,l]=[s[o],s[r]];function c(p){const b=p[a],x=p[l],v=b+x,_=(b/v||0)*100,y=(x/v||0)*100,w={};return w[o]=Math.round(Math.floor(_*100))/100,w[r]=Math.round(Math.floor(y*100))/100,w}const h=Ae(e),u=[n].sort(),d=[...new Set(e.map(p=>p.nren))].sort((p,b)=>p.localeCompare(b));return{datasets:os.cartesianProduct(i,u).map(function([p,b]){let x="";return p==="Technical FTE"?x="rgba(40, 40, 250, 0.8)":p==="Permanent FTE"?x="rgba(159, 129, 235, 1)":p==="Subcontracted FTE"?x="rgba(173, 216, 229, 1)":p==="Non-technical FTE"&&(x="rgba(116, 216, 242, 0.54)"),{backgroundColor:x,label:`${p} (${b})`,data:d.map(v=>{const _=h.get(v).get(b);return _?c(_)[p]:0}),stack:b,borderRadius:10,borderSkipped:!0,barPercentage:.8,borderWidth:.5,categoryPercentage:.8,hidden:!1}}),labels:d}},$g=(e,t)=>{const n=["Research & Education","Commodity"],i={"Research & Education":"r_and_e_percentage",Commodity:"commodity_percentage"},s=Ae(e),o=[t].sort(),r=[...new Set(e.map(h=>h.nren))].sort((h,u)=>h.localeCompare(u));return{datasets:os.cartesianProduct(n,o).map(function([h,u]){let d="";return h==="Research & Education"?d="rgba(40, 40, 250, 0.8)":h==="Commodity"&&(d="rgba(116, 216, 242, 0.54)"),{backgroundColor:d,label:`${h} (${u})`,data:r.map(f=>{const g=s.get(f).get(u);return g?g[i[h]]:0}),stack:u,borderRadius:10,borderSkipped:!0,barPercentage:.8,borderWidth:.5,categoryPercentage:.8,hidden:!1}}),labels:r}},zg=(e,t)=>{const n=["Permanent FTE","Subcontracted FTE"],i={"Technical FTE":"technical_fte","Non-technical FTE":"non_technical_fte","Permanent FTE":"permanent_fte","Subcontracted FTE":"subcontracted_fte"},[s,o]=n,[r,a]=[i[s],i[o]],l=Ae(e),c=[...new Set(e.map(f=>f.nren))].sort((f,g)=>f.localeCompare(g));function h(f,g){return{backgroundColor:"rgba(219, 42, 76, 1)",label:`Number of FTEs (${f})`,data:c.map(p=>{const b=l.get(p).get(f);return b?(b[r]??0)+(b[a]??0):0}),stack:`${f}`,borderRadius:10,borderSkipped:!0,barPercentage:.8,borderWidth:.5,categoryPercentage:.8,hidden:!1,datalabels:{display:!0,formatter:function(p,b){return b.dataset.stack},font:{family:'"Open Sans", sans-serif',size:16,weight:"700"},anchor:"start",align:"end",offset:function(p){return p.chart.chartArea.width}}}}return{datasets:t.sort().map(h),labels:c}},Ng=(e,t,n)=>{const i=Ae(e),s=[...new Set(e.map(l=>l.nren))].sort((l,c)=>l.localeCompare(c)),o=[...new Set(e.map(l=>l.year))].sort();function r(l,c){return{backgroundColor:"rgba(219, 42, 76, 1)",label:`${n} (${l})`,data:s.map(u=>{const d=i.get(u).get(l);return d?d[t]??0:0}),stack:`${l}`,borderRadius:10,borderSkipped:!0,barPercentage:.8,borderWidth:.5,categoryPercentage:.8,hidden:!1,datalabels:{display:!0,formatter:function(u,d){return d.dataset.stack},font:{family:'"Open Sans", sans-serif',size:16,weight:"700"},anchor:"start",align:"end",offset:function(u){return u.chart.chartArea.width}}}}return{datasets:o.sort().map(r),labels:s}},hp=e=>{const t=wt.c(41),{activeCategory:n}=e,i=Ja();let s;t[0]!==n||t[1]!==i?(s=()=>i(n===G.Organisation?".":"/funding"),t[0]=n,t[1]=i,t[2]=s):s=t[2];const o=n===G.Organisation;let r;t[3]===Symbol.for("react.memo_cache_sentinel")?(r=M.jsx("span",{children:G.Organisation}),t[3]=r):r=t[3];let a;t[4]!==s||t[5]!==o?(a=M.jsx(Ft,{onClick:s,variant:"nav-box",active:o,children:r}),t[4]=s,t[5]=o,t[6]=a):a=t[6];let l;t[7]!==n||t[8]!==i?(l=()=>i(n===G.Policy?".":"/corporate-strategy"),t[7]=n,t[8]=i,t[9]=l):l=t[9];const c=n===G.Policy;let h;t[10]===Symbol.for("react.memo_cache_sentinel")?(h=M.jsx("span",{children:G.Policy}),t[10]=h):h=t[10];let u;t[11]!==l||t[12]!==c?(u=M.jsx(Ft,{onClick:l,variant:"nav-box",active:c,children:h}),t[11]=l,t[12]=c,t[13]=u):u=t[13];let d;t[14]!==n||t[15]!==i?(d=()=>i(n===G.ConnectedUsers?".":"/institutions-urls"),t[14]=n,t[15]=i,t[16]=d):d=t[16];const f=n===G.ConnectedUsers;let g;t[17]===Symbol.for("react.memo_cache_sentinel")?(g=M.jsx("span",{children:G.ConnectedUsers}),t[17]=g):g=t[17];let m;t[18]!==f||t[19]!==d?(m=M.jsx(Ft,{onClick:d,variant:"nav-box",active:f,children:g}),t[18]=f,t[19]=d,t[20]=m):m=t[20];let p;t[21]!==n||t[22]!==i?(p=()=>i(n===G.Network?".":"/dark-fibre-lease"),t[21]=n,t[22]=i,t[23]=p):p=t[23];const b=n===G.Network;let x;t[24]===Symbol.for("react.memo_cache_sentinel")?(x=M.jsx("span",{children:G.Network}),t[24]=x):x=t[24];let v;t[25]!==p||t[26]!==b?(v=M.jsx(Ft,{onClick:p,variant:"nav-box",active:b,children:x}),t[25]=p,t[26]=b,t[27]=v):v=t[27];let _;t[28]!==n||t[29]!==i?(_=()=>i(n===G.Services?".":"/network-services"),t[28]=n,t[29]=i,t[30]=_):_=t[30];const y=n===G.Services;let w;t[31]===Symbol.for("react.memo_cache_sentinel")?(w=M.jsx("span",{children:G.Services}),t[31]=w):w=t[31];let k;t[32]!==_||t[33]!==y?(k=M.jsx(Ft,{onClick:_,variant:"nav-box",active:y,children:w}),t[32]=_,t[33]=y,t[34]=k):k=t[34];let S;return t[35]!==m||t[36]!==v||t[37]!==k||t[38]!==a||t[39]!==u?(S=M.jsx(cr,{children:M.jsx(se,{children:M.jsxs(Ti,{className:"navbox-bar gap-2 m-3",children:[a,u,m,v,k]})})}),t[35]=m,t[36]=v,t[37]=k,t[38]=a,t[39]=u,t[40]=S):S=t[40],S},up=()=>{const e=wt.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=M.jsx(sn,{children:M.jsx(Za,{sidebar:!0})}),e[0]=t):t=e[0],t},dp=()=>{const e=wt.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=M.jsx(sn,{children:M.jsx(Qa,{sidebar:!0})}),e[0]=t):t=e[0],t},fp=()=>{const e=wt.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=M.jsx(sn,{children:M.jsx(tl,{sidebar:!0})}),e[0]=t):t=e[0],t},pp=()=>{const e=wt.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=M.jsx(sn,{children:M.jsx(el,{sidebar:!0})}),e[0]=t):t=e[0],t},gp=()=>{const e=wt.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=M.jsx(sn,{children:M.jsx(nl,{sidebar:!0})}),e[0]=t):t=e[0],t};function mp(e,t){return e.map(n=>t.map(i=>{const s=n[i];return s===null?"":typeof s=="string"?`"${s.replace(/"/g,'""')}"`:s}).join(","))}function bp(e){if(!e.length)return"";const t=Object.keys(e[0]),n=mp(e,t);return[t.join(","),...n].join(`\r
 `)}function xp(e,t="Sheet1"){const n=Zn.json_to_sheet(e),i=Zn.book_new();Zn.book_append_sheet(i,n,t);const s=cl(i,{bookType:"xlsx",type:"binary"}),o=new ArrayBuffer(s.length),r=new Uint8Array(o);for(let a=0;a<s.length;a++)r[a]=s.charCodeAt(a)&255;return new Blob([o],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"})}const Zo=({data:e,filename:t,exportType:n})=>{const i=()=>{let o,r,a;switch(n){case xe.EXCEL:{o=xp(e),r="xlsx",a="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8";break}case xe.CSV:default:{o=bp(e),r="csv",a="text/csv;charset=UTF-8";break}}const l=new Blob([o],{type:a});t=t.endsWith(r)?t:`${t}.${r}`;const c=document.createElement("a");c.href=URL.createObjectURL(l),c.download=t,document.body.appendChild(c),c.click(),document.body.removeChild(c)};let s="downloadbutton";return n===xe.CSV?s+=" downloadcsv":n===xe.EXCEL&&(s+=" downloadexcel"),M.jsxs("button",{className:s,onClick:i,children:[n," ",M.jsx(dr,{})]})};function yp(e,t){if(e.match(/^[a-z]+:\/\//i))return e;if(e.match(/^\/\//))return window.location.protocol+e;if(e.match(/^[a-z]+:/i))return e;const n=document.implementation.createHTMLDocument(),i=n.createElement("base"),s=n.createElement("a");return n.head.appendChild(i),n.body.appendChild(s),t&&(i.href=t),s.href=e,s.href}const vp=(()=>{let e=0;const t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(e+=1,`u${t()}${e}`)})();function It(e){const t=[];for(let n=0,i=e.length;n<i;n++)t.push(e[n]);return t}function Wn(e,t){const i=(e.ownerDocument.defaultView||window).getComputedStyle(e).getPropertyValue(t);return i?parseFloat(i.replace("px","")):0}function _p(e){const t=Wn(e,"border-left-width"),n=Wn(e,"border-right-width");return e.clientWidth+t+n}function wp(e){const t=Wn(e,"border-top-width"),n=Wn(e,"border-bottom-width");return e.clientHeight+t+n}function Oa(e,t={}){const n=t.width||_p(e),i=t.height||wp(e);return{width:n,height:i}}function Sp(){let e,t;try{t=process}catch{}const n=t&&t.env?t.env.devicePixelRatio:null;return n&&(e=parseInt(n,10),Number.isNaN(e)&&(e=1)),e||window.devicePixelRatio||1}const pt=16384;function kp(e){(e.width>pt||e.height>pt)&&(e.width>pt&&e.height>pt?e.width>e.height?(e.height*=pt/e.width,e.width=pt):(e.width*=pt/e.height,e.height=pt):e.width>pt?(e.height*=pt/e.width,e.width=pt):(e.width*=pt/e.height,e.height=pt))}function Vn(e){return new Promise((t,n)=>{const i=new Image;i.decode=()=>t(i),i.onload=()=>t(i),i.onerror=n,i.crossOrigin="anonymous",i.decoding="async",i.src=e})}async function Mp(e){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(e)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function Cp(e,t,n){const i="http://www.w3.org/2000/svg",s=document.createElementNS(i,"svg"),o=document.createElementNS(i,"foreignObject");return s.setAttribute("width",`${t}`),s.setAttribute("height",`${n}`),s.setAttribute("viewBox",`0 0 ${t} ${n}`),o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.setAttribute("x","0"),o.setAttribute("y","0"),o.setAttribute("externalResourcesRequired","true"),s.appendChild(o),o.appendChild(e),Mp(s)}const ft=(e,t)=>{if(e instanceof t)return!0;const n=Object.getPrototypeOf(e);return n===null?!1:n.constructor.name===t.name||ft(n,t)};function Pp(e){const t=e.getPropertyValue("content");return`${e.cssText} content: '${t.replace(/'|"/g,"")}';`}function Op(e){return It(e).map(t=>{const n=e.getPropertyValue(t),i=e.getPropertyPriority(t);return`${t}: ${n}${i?" !important":""};`}).join(" ")}function Dp(e,t,n){const i=`.${e}:${t}`,s=n.cssText?Pp(n):Op(n);return document.createTextNode(`${i}{${s}}`)}function Qo(e,t,n){const i=window.getComputedStyle(e,n),s=i.getPropertyValue("content");if(s===""||s==="none")return;const o=vp();try{t.className=`${t.className} ${o}`}catch{return}const r=document.createElement("style");r.appendChild(Dp(o,n,i)),t.appendChild(r)}function Ap(e,t){Qo(e,t,":before"),Qo(e,t,":after")}const tr="application/font-woff",er="image/jpeg",Ep={woff:tr,woff2:tr,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:er,jpeg:er,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function Tp(e){const t=/\.([^./]*?)$/g.exec(e);return t?t[1]:""}function rs(e){const t=Tp(e).toLowerCase();return Ep[t]||""}function Rp(e){return e.split(/,/)[1]}function Ei(e){return e.search(/^(data:)/)!==-1}function Lp(e,t){return`data:${t};base64,${e}`}async function Da(e,t,n){const i=await fetch(e,t);if(i.status===404)throw new Error(`Resource "${i.url}" not found`);const s=await i.blob();return new Promise((o,r)=>{const a=new FileReader;a.onerror=r,a.onloadend=()=>{try{o(n({res:i,result:a.result}))}catch(l){r(l)}},a.readAsDataURL(s)})}const xi={};function Fp(e,t,n){let i=e.replace(/\?.*/,"");return n&&(i=e),/ttf|otf|eot|woff2?/i.test(i)&&(i=i.replace(/.*\//,"")),t?`[${t}]${i}`:i}async function as(e,t,n){const i=Fp(e,t,n.includeQueryParams);if(xi[i]!=null)return xi[i];n.cacheBust&&(e+=(/\?/.test(e)?"&":"?")+new Date().getTime());let s;try{const o=await Da(e,n.fetchRequestInit,({res:r,result:a})=>(t||(t=r.headers.get("Content-Type")||""),Rp(a)));s=Lp(o,t)}catch(o){s=n.imagePlaceholder||"";let r=`Failed to fetch resource: ${e}`;o&&(r=typeof o=="string"?o:o.message),r&&console.warn(r)}return xi[i]=s,s}async function Ip(e){const t=e.toDataURL();return t==="data:,"?e.cloneNode(!1):Vn(t)}async function jp(e,t){if(e.currentSrc){const o=document.createElement("canvas"),r=o.getContext("2d");o.width=e.clientWidth,o.height=e.clientHeight,r==null||r.drawImage(e,0,0,o.width,o.height);const a=o.toDataURL();return Vn(a)}const n=e.poster,i=rs(n),s=await as(n,i,t);return Vn(s)}async function $p(e){var t;try{if(!((t=e==null?void 0:e.contentDocument)===null||t===void 0)&&t.body)return await qn(e.contentDocument.body,{},!0)}catch{}return e.cloneNode(!1)}async function zp(e,t){return ft(e,HTMLCanvasElement)?Ip(e):ft(e,HTMLVideoElement)?jp(e,t):ft(e,HTMLIFrameElement)?$p(e):e.cloneNode(!1)}const Np=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SLOT";async function Bp(e,t,n){var i,s;let o=[];return Np(e)&&e.assignedNodes?o=It(e.assignedNodes()):ft(e,HTMLIFrameElement)&&(!((i=e.contentDocument)===null||i===void 0)&&i.body)?o=It(e.contentDocument.body.childNodes):o=It(((s=e.shadowRoot)!==null&&s!==void 0?s:e).childNodes),o.length===0||ft(e,HTMLVideoElement)||await o.reduce((r,a)=>r.then(()=>qn(a,n)).then(l=>{l&&t.appendChild(l)}),Promise.resolve()),t}function Hp(e,t){const n=t.style;if(!n)return;const i=window.getComputedStyle(e);i.cssText?(n.cssText=i.cssText,n.transformOrigin=i.transformOrigin):It(i).forEach(s=>{let o=i.getPropertyValue(s);s==="font-size"&&o.endsWith("px")&&(o=`${Math.floor(parseFloat(o.substring(0,o.length-2)))-.1}px`),ft(e,HTMLIFrameElement)&&s==="display"&&o==="inline"&&(o="block"),s==="d"&&t.getAttribute("d")&&(o=`path(${t.getAttribute("d")})`),n.setProperty(s,o,i.getPropertyPriority(s))})}function Wp(e,t){ft(e,HTMLTextAreaElement)&&(t.innerHTML=e.value),ft(e,HTMLInputElement)&&t.setAttribute("value",e.value)}function Vp(e,t){if(ft(e,HTMLSelectElement)){const n=t,i=Array.from(n.children).find(s=>e.value===s.getAttribute("value"));i&&i.setAttribute("selected","")}}function Yp(e,t){return ft(t,Element)&&(Hp(e,t),Ap(e,t),Wp(e,t),Vp(e,t)),t}async function Up(e,t){const n=e.querySelectorAll?e.querySelectorAll("use"):[];if(n.length===0)return e;const i={};for(let o=0;o<n.length;o++){const a=n[o].getAttribute("xlink:href");if(a){const l=e.querySelector(a),c=document.querySelector(a);!l&&c&&!i[a]&&(i[a]=await qn(c,t,!0))}}const s=Object.values(i);if(s.length){const o="http://www.w3.org/1999/xhtml",r=document.createElementNS(o,"svg");r.setAttribute("xmlns",o),r.style.position="absolute",r.style.width="0",r.style.height="0",r.style.overflow="hidden",r.style.display="none";const a=document.createElementNS(o,"defs");r.appendChild(a);for(let l=0;l<s.length;l++)a.appendChild(s[l]);e.appendChild(r)}return e}async function qn(e,t,n){return!n&&t.filter&&!t.filter(e)?null:Promise.resolve(e).then(i=>zp(i,t)).then(i=>Bp(e,i,t)).then(i=>Yp(e,i)).then(i=>Up(i,t))}const Aa=/url\((['"]?)([^'"]+?)\1\)/g,Xp=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,Kp=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function qp(e){const t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function Gp(e){const t=[];return e.replace(Aa,(n,i,s)=>(t.push(s),n)),t.filter(n=>!Ei(n))}async function Jp(e,t,n,i,s){try{const o=n?yp(t,n):t,r=rs(t);let a;return s||(a=await as(o,r,i)),e.replace(qp(t),`$1${a}$3`)}catch{}return e}function Zp(e,{preferredFontFormat:t}){return t?e.replace(Kp,n=>{for(;;){const[i,,s]=Xp.exec(n)||[];if(!s)return"";if(s===t)return`src: ${i};`}}):e}function Ea(e){return e.search(Aa)!==-1}async function Ta(e,t,n){if(!Ea(e))return e;const i=Zp(e,n);return Gp(i).reduce((o,r)=>o.then(a=>Jp(a,r,t,n)),Promise.resolve(i))}async function Dn(e,t,n){var i;const s=(i=t.style)===null||i===void 0?void 0:i.getPropertyValue(e);if(s){const o=await Ta(s,null,n);return t.style.setProperty(e,o,t.style.getPropertyPriority(e)),!0}return!1}async function Qp(e,t){await Dn("background",e,t)||await Dn("background-image",e,t),await Dn("mask",e,t)||await Dn("mask-image",e,t)}async function tg(e,t){const n=ft(e,HTMLImageElement);if(!(n&&!Ei(e.src))&&!(ft(e,SVGImageElement)&&!Ei(e.href.baseVal)))return;const i=n?e.src:e.href.baseVal,s=await as(i,rs(i),t);await new Promise((o,r)=>{e.onload=o,e.onerror=r;const a=e;a.decode&&(a.decode=o),a.loading==="lazy"&&(a.loading="eager"),n?(e.srcset="",e.src=s):e.href.baseVal=s})}async function eg(e,t){const i=It(e.childNodes).map(s=>Ra(s,t));await Promise.all(i).then(()=>e)}async function Ra(e,t){ft(e,Element)&&(await Qp(e,t),await tg(e,t),await eg(e,t))}function ng(e,t){const{style:n}=e;t.backgroundColor&&(n.backgroundColor=t.backgroundColor),t.width&&(n.width=`${t.width}px`),t.height&&(n.height=`${t.height}px`);const i=t.style;return i!=null&&Object.keys(i).forEach(s=>{n[s]=i[s]}),e}const nr={};async function ir(e){let t=nr[e];if(t!=null)return t;const i=await(await fetch(e)).text();return t={url:e,cssText:i},nr[e]=t,t}async function sr(e,t){let n=e.cssText;const i=/url\(["']?([^"')]+)["']?\)/g,o=(n.match(/url\([^)]+\)/g)||[]).map(async r=>{let a=r.replace(i,"$1");return a.startsWith("https://")||(a=new URL(a,e.url).href),Da(a,t.fetchRequestInit,({result:l})=>(n=n.replace(r,`url(${l})`),[r,l]))});return Promise.all(o).then(()=>n)}function or(e){if(e==null)return[];const t=[],n=/(\/\*[\s\S]*?\*\/)/gi;let i=e.replace(n,"");const s=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const l=s.exec(i);if(l===null)break;t.push(l[0])}i=i.replace(s,"");const o=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,r="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",a=new RegExp(r,"gi");for(;;){let l=o.exec(i);if(l===null){if(l=a.exec(i),l===null)break;o.lastIndex=a.lastIndex}else a.lastIndex=o.lastIndex;t.push(l[0])}return t}async function ig(e,t){const n=[],i=[];return e.forEach(s=>{if("cssRules"in s)try{It(s.cssRules||[]).forEach((o,r)=>{if(o.type===CSSRule.IMPORT_RULE){let a=r+1;const l=o.href,c=ir(l).then(h=>sr(h,t)).then(h=>or(h).forEach(u=>{try{s.insertRule(u,u.startsWith("@import")?a+=1:s.cssRules.length)}catch(d){console.error("Error inserting rule from remote css",{rule:u,error:d})}})).catch(h=>{console.error("Error loading remote css",h.toString())});i.push(c)}})}catch(o){const r=e.find(a=>a.href==null)||document.styleSheets[0];s.href!=null&&i.push(ir(s.href).then(a=>sr(a,t)).then(a=>or(a).forEach(l=>{r.insertRule(l,s.cssRules.length)})).catch(a=>{console.error("Error loading remote stylesheet",a)})),console.error("Error inlining remote css file",o)}}),Promise.all(i).then(()=>(e.forEach(s=>{if("cssRules"in s)try{It(s.cssRules||[]).forEach(o=>{n.push(o)})}catch(o){console.error(`Error while reading CSS rules from ${s.href}`,o)}}),n))}function sg(e){return e.filter(t=>t.type===CSSRule.FONT_FACE_RULE).filter(t=>Ea(t.style.getPropertyValue("src")))}async function og(e,t){if(e.ownerDocument==null)throw new Error("Provided element is not within a Document");const n=It(e.ownerDocument.styleSheets),i=await ig(n,t);return sg(i)}async function rg(e,t){const n=await og(e,t);return(await Promise.all(n.map(s=>{const o=s.parentStyleSheet?s.parentStyleSheet.href:null;return Ta(s.cssText,o,t)}))).join(`
-`)}async function ag(e,t){const n=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await rg(e,t);if(n){const i=document.createElement("style"),s=document.createTextNode(n);i.appendChild(s),e.firstChild?e.insertBefore(i,e.firstChild):e.appendChild(i)}}async function La(e,t={}){const{width:n,height:i}=Oa(e,t),s=await qn(e,t,!0);return await ag(s,t),await Ra(s,t),ng(s,t),await Cp(s,n,i)}async function Fa(e,t={}){const{width:n,height:i}=Oa(e,t),s=await La(e,t),o=await Vn(s),r=document.createElement("canvas"),a=r.getContext("2d"),l=t.pixelRatio||Sp(),c=t.canvasWidth||n,h=t.canvasHeight||i;return r.width=c*l,r.height=h*l,t.skipAutoScale||kp(r),r.style.width=`${c}`,r.style.height=`${h}`,t.backgroundColor&&(a.fillStyle=t.backgroundColor,a.fillRect(0,0,r.width,r.height)),a.drawImage(o,0,0,r.width,r.height),r}async function lg(e,t={}){return(await Fa(e,t)).toDataURL()}async function cg(e,t={}){return(await Fa(e,t)).toDataURL("image/jpeg",t.quality||1)}const hg=e=>{const t=wt.c(17),{filename:n}=e,i=A.useContext(hr),[s,o]=A.useState(!1),r=A.useRef(null);let a;t[0]!==i||t[1]!==n?(a=async v=>{if(i!=null&&i.current){o(!1);const _={transform:"scale(1)","transform-origin":"top left",background:"white"};let y;t:switch(v){case ge.JPEG:{y=await cg(i.current,{quality:.95,style:_});break t}case ge.SVG:{y=await La(i.current,{style:_});break t}case ge.PNG:default:y=await lg(i.current,{style:_})}const w=document.createElement("a");w.href=typeof y=="string"?y:URL.createObjectURL(y),w.download=`${n}.${v}`,document.body.appendChild(w),w.click(),document.body.removeChild(w)}},t[0]=i,t[1]=n,t[2]=a):a=t[2];const l=a;let c;t[3]!==s?(c=()=>{o(!s)},t[3]=s,t[4]=c):c=t[4];const h=c;let u;t[5]===Symbol.for("react.memo_cache_sentinel")?(u=v=>{r.current&&!r.current.contains(v.target)&&o(!1)},t[5]=u):u=t[5];const d=u;let f,g;t[6]===Symbol.for("react.memo_cache_sentinel")?(f=()=>(document.addEventListener("mousedown",d),()=>{document.removeEventListener("mousedown",d)}),g=[],t[6]=f,t[7]=g):(f=t[6],g=t[7]),A.useEffect(f,g);let m;t[8]===Symbol.for("react.memo_cache_sentinel")?(m=M.jsx(dr,{}),t[8]=m):m=t[8];let p;t[9]!==h?(p=M.jsxs("button",{className:"downloadbutton downloadimage",onClick:h,children:["IMAGE ",m]}),t[9]=h,t[10]=p):p=t[10];let b;t[11]!==l||t[12]!==s?(b=s&&M.jsxs("div",{className:"image-options",children:[M.jsx("div",{className:"imageoption downloadpng",onClick:()=>l(ge.PNG),children:M.jsx("span",{children:"PNG"})}),M.jsx("div",{className:"imageoption downloadjpeg",onClick:()=>l(ge.JPEG),children:M.jsx("span",{children:"JPEG"})}),M.jsx("div",{className:"imageoption downloadsvg",onClick:()=>l(ge.SVG),children:M.jsx("span",{children:"SVG"})})]}),t[11]=l,t[12]=s,t[13]=b):b=t[13];let x;return t[14]!==p||t[15]!==b?(x=M.jsxs("div",{className:"image-dropdown",ref:r,children:[p,b]}),t[14]=p,t[15]=b,t[16]=x):x=t[16],x},ug=e=>{const t=wt.c(12),{data:n,filename:i}=e,s=`${i}.csv`;let o;t[0]!==n||t[1]!==s?(o=M.jsx(Zo,{data:n,filename:s,exportType:xe.CSV}),t[0]=n,t[1]=s,t[2]=o):o=t[2];const r=`${i}.xlsx`;let a;t[3]!==n||t[4]!==r?(a=M.jsx(Zo,{data:n,filename:r,exportType:xe.EXCEL}),t[3]=n,t[4]=r,t[5]=a):a=t[5];let l;t[6]!==i?(l=M.jsx(hg,{filename:i}),t[6]=i,t[7]=l):l=t[7];let c;return t[8]!==o||t[9]!==a||t[10]!==l?(c=M.jsxs("div",{className:"downloadcontainer",children:[o,a,l]}),t[8]=o,t[9]=a,t[10]=l,t[11]=c):c=t[11],c};Ct.defaults.font.size=16;Ct.defaults.font.family="Open Sans";Ct.defaults.font.weight=700;function Bg(e){const t=wt.c(47),{title:n,description:i,filter:s,children:o,category:r,data:a,filename:l}=e,{preview:c,setPreview:h}=A.useContext(il),u=window.location.origin+window.location.pathname,{trackPageView:d}=sl();let f,g;t[0]!==n||t[1]!==d?(f=()=>{d({documentTitle:n})},g=[d,n],t[0]=n,t[1]=d,t[2]=f,t[3]=g):(f=t[2],g=t[3]),A.useEffect(f,g);let m;t[4]!==r?(m=r===G.Organisation&&M.jsx(hp,{}),t[4]=r,t[5]=m):m=t[5];let p;t[6]!==r?(p=r===G.Policy&&M.jsx(dp,{}),t[6]=r,t[7]=p):p=t[7];let b;t[8]!==r?(b=r===G.Network&&M.jsx(fp,{}),t[8]=r,t[9]=b):b=t[9];let x;t[10]!==r?(x=r===G.ConnectedUsers&&M.jsx(pp,{}),t[10]=r,t[11]=x):x=t[11];let v;t[12]!==r?(v=r===G.Services&&M.jsx(gp,{}),t[12]=r,t[13]=v):v=t[13];let _;t[14]===Symbol.for("react.memo_cache_sentinel")?(_=M.jsx(ol,{type:"data"}),t[14]=_):_=t[14];let y;t[15]!==c||t[16]!==h?(y=c&&M.jsx(se,{className:"preview-banner",children:M.jsxs("span",{children:["You are viewing a preview of the website which includes pre-published survey data. ",M.jsx(rl,{to:u,onClick:()=>h(!1),children:"Click here"})," to deactivate preview mode."]})}),t[15]=c,t[16]=h,t[17]=y):y=t[17];let w;t[18]!==r?(w=M.jsx(up,{activeCategory:r}),t[18]=r,t[19]=w):w=t[19];let k;t[20]!==n?(k=M.jsx(se,{children:M.jsx("h3",{className:"m-1",children:n})}),t[20]=n,t[21]=k):k=t[21];let S;t[22]!==i?(S=M.jsx(se,{children:M.jsx("p",{className:"p-md-4",children:i})}),t[22]=i,t[23]=S):S=t[23];let P;t[24]===Symbol.for("react.memo_cache_sentinel")?(P={position:"relative"},t[24]=P):P=t[24];let D;t[25]!==a||t[26]!==l?(D=M.jsx(se,{align:"right",style:P,children:M.jsx(ug,{data:a,filename:l})}),t[25]=a,t[26]=l,t[27]=D):D=t[27];let C;t[28]!==s?(C=M.jsx(se,{children:s}),t[28]=s,t[29]=C):C=t[29];let O;t[30]!==o?(O=M.jsx(se,{children:o}),t[30]=o,t[31]=O):O=t[31];let E;t[32]!==k||t[33]!==S||t[34]!==D||t[35]!==C||t[36]!==O?(E=M.jsxs(cr,{className:"mb-5 grow",children:[k,S,D,C,O]}),t[32]=k,t[33]=S,t[34]=D,t[35]=C,t[36]=O,t[37]=E):E=t[37];let F;return t[38]!==w||t[39]!==E||t[40]!==m||t[41]!==p||t[42]!==b||t[43]!==x||t[44]!==v||t[45]!==y?(F=M.jsxs(M.Fragment,{children:[m,p,b,x,v,_,y,w,E]}),t[38]=w,t[39]=E,t[40]=m,t[41]=p,t[42]=b,t[43]=x,t[44]=v,t[45]=y,t[46]=F):F=t[46],F}function Hg(e){const t=wt.c(81),{filterOptions:n,filterSelection:i,setFilterSelection:s,max1year:o,coloredYears:r}=e,a=o===void 0?!1:o,l=r===void 0?!1:r,[c,h]=A.useState(!0),{nrens:u}=A.useContext(al);let d,f;if(t[0]===Symbol.for("react.memo_cache_sentinel")?(d=()=>{const B=()=>h(window.innerWidth>=992);return window.addEventListener("resize",B),()=>{window.removeEventListener("resize",B)}},f=[],t[0]=d,t[1]=f):(d=t[0],f=t[1]),A.useEffect(d,f),a&&i.selectedYears.length>1){const B=Math.max(...i.selectedYears);s({selectedYears:[B],selectedNrens:[...i.selectedNrens]})}let g;t[2]!==i.selectedNrens||t[3]!==i.selectedYears||t[4]!==s?(g=B=>{i.selectedNrens.includes(B)?s({selectedYears:[...i.selectedYears],selectedNrens:i.selectedNrens.filter(et=>et!==B)}):s({selectedYears:[...i.selectedYears],selectedNrens:[...i.selectedNrens,B]})},t[2]=i.selectedNrens,t[3]=i.selectedYears,t[4]=s,t[5]=g):g=t[5];const m=g;let p;t[6]!==i.selectedNrens||t[7]!==i.selectedYears||t[8]!==a||t[9]!==s?(p=B=>{i.selectedYears.includes(B)?s({selectedYears:i.selectedYears.filter(et=>et!==B),selectedNrens:[...i.selectedNrens]}):s({selectedYears:a?[B]:[...i.selectedYears,B],selectedNrens:[...i.selectedNrens]})},t[6]=i.selectedNrens,t[7]=i.selectedYears,t[8]=a,t[9]=s,t[10]=p):p=t[10];const b=p;let x;t[11]!==n.availableNrens||t[12]!==i.selectedYears||t[13]!==s?(x=()=>{s({selectedYears:[...i.selectedYears],selectedNrens:n.availableNrens.map(pg)})},t[11]=n.availableNrens,t[12]=i.selectedYears,t[13]=s,t[14]=x):x=t[14];const v=x;let _;t[15]!==i.selectedYears||t[16]!==s?(_=()=>{s({selectedYears:[...i.selectedYears],selectedNrens:[]})},t[15]=i.selectedYears,t[16]=s,t[17]=_):_=t[17];const y=_,w=c?3:2,k=Math.ceil(u.length/w);let S,P,D,C,O,E,F,R,L,I;if(t[18]!==n.availableNrens||t[19]!==i.selectedNrens||t[20]!==m||t[21]!==w||t[22]!==k||t[23]!==u){const B=Array.from(Array(w),fg);u.sort(dg).forEach((Jt,Zt)=>{const lt=Math.floor(Zt/k);B[lt].push(Jt)});let et;t[34]!==n.availableNrens?(et=Jt=>n.availableNrens.find(lt=>lt.name===Jt.name)!==void 0,t[34]=n.availableNrens,t[35]=et):et=t[35];const Ee=et;D=xs,L=3,P=ei,E="outside",F="m-3",t[36]===Symbol.for("react.memo_cache_sentinel")?(R=M.jsx(ei.Toggle,{id:"nren-dropdown-toggle",variant:"compendium",children:"Select NRENs    "}),t[36]=R):R=t[36],S=ei.Menu,t[37]===Symbol.for("react.memo_cache_sentinel")?(O={borderRadius:0},t[37]=O):O=t[37],I="d-flex fit-max-content mt-4 mx-3";let zt;t[38]!==i.selectedNrens||t[39]!==m||t[40]!==Ee?(zt=(Jt,Zt)=>M.jsx("div",{className:"flex-fill",children:Jt.map(lt=>M.jsx("div",{className:"filter-dropdown-item flex-fill py-1 px-3",children:M.jsxs(Jn.Check,{type:"checkbox",children:[M.jsx(Jn.Check.Input,{id:lt.name,readOnly:!0,type:"checkbox",onClick:()=>m(lt.name),checked:i.selectedNrens.includes(lt.name),className:"nren-checkbox",disabled:!Ee(lt)}),M.jsxs(Jn.Check.Label,{htmlFor:lt.name,className:"nren-checkbox-label",children:[lt.name," ",M.jsxs("span",{style:{fontWeight:"lighter"},children:["(",lt.country,")"]})]})]})},lt.name))},Zt),t[38]=i.selectedNrens,t[39]=m,t[40]=Ee,t[41]=zt):zt=t[41],C=B.map(zt),t[18]=n.availableNrens,t[19]=i.selectedNrens,t[20]=m,t[21]=w,t[22]=k,t[23]=u,t[24]=S,t[25]=P,t[26]=D,t[27]=C,t[28]=O,t[29]=E,t[30]=F,t[31]=R,t[32]=L,t[33]=I}else S=t[24],P=t[25],D=t[26],C=t[27],O=t[28],E=t[29],F=t[30],R=t[31],L=t[32],I=t[33];let Y;t[42]!==C||t[43]!==I?(Y=M.jsx("div",{className:I,children:C}),t[42]=C,t[43]=I,t[44]=Y):Y=t[44];let $;t[45]!==v?($=M.jsx(Ft,{variant:"compendium",className:"flex-fill",onClick:v,children:"Select all NRENs"}),t[45]=v,t[46]=$):$=t[46];let N;t[47]!==y?(N=M.jsx(Ft,{variant:"compendium",className:"flex-fill",onClick:y,children:"Unselect all NRENs"}),t[47]=y,t[48]=N):N=t[48];let tt;t[49]!==$||t[50]!==N?(tt=M.jsxs("div",{className:"d-flex fit-max-content gap-2 mx-4 my-3",children:[$,N]}),t[49]=$,t[50]=N,t[51]=tt):tt=t[51];let Q;t[52]!==S||t[53]!==O||t[54]!==Y||t[55]!==tt?(Q=M.jsxs(S,{style:O,children:[Y,tt]}),t[52]=S,t[53]=O,t[54]=Y,t[55]=tt,t[56]=Q):Q=t[56];let nt;t[57]!==P||t[58]!==E||t[59]!==F||t[60]!==R||t[61]!==Q?(nt=M.jsxs(P,{autoClose:E,className:F,children:[R,Q]}),t[57]=P,t[58]=E,t[59]=F,t[60]=R,t[61]=Q,t[62]=nt):nt=t[62];let U;t[63]!==D||t[64]!==L||t[65]!==nt?(U=M.jsx(D,{xs:L,children:nt}),t[63]=D,t[64]=L,t[65]=nt,t[66]=U):U=t[66];let X;if(t[67]!==l||t[68]!==n.availableYears||t[69]!==i.selectedYears||t[70]!==b){let B;t[72]!==l||t[73]!==i.selectedYears||t[74]!==b?(B=et=>M.jsx(Ft,{variant:l?"compendium-year-"+et%9:"compendium-year",active:i.selectedYears.includes(et),onClick:()=>b(et),children:et},et),t[72]=l,t[73]=i.selectedYears,t[74]=b,t[75]=B):B=t[75],X=n.availableYears.sort().map(B),t[67]=l,t[68]=n.availableYears,t[69]=i.selectedYears,t[70]=b,t[71]=X}else X=t[71];let q;t[76]!==X?(q=M.jsx(xs,{children:M.jsx(Ti,{className:"d-flex justify-content-end gap-2 m-3",children:X})}),t[76]=X,t[77]=q):q=t[77];let At;return t[78]!==U||t[79]!==q?(At=M.jsxs(M.Fragment,{children:[U,q]}),t[78]=U,t[79]=q,t[80]=At):At=t[80],At}function dg(e,t){return e.name.localeCompare(t.name)}function fg(){return[]}function pg(e){return e.name}const Wg=e=>{const t=wt.c(3),{children:n}=e,i=A.useContext(hr);let s;return t[0]!==n||t[1]!==i?(s=M.jsx("div",{ref:i,children:n}),t[0]=n,t[1]=i,t[2]=s):s=t[2],s};function rr(e){const t=new Set,n=new Map;return e.forEach(i=>{t.add(i.year),n.set(i.nren,{name:i.nren,country:i.nren_country})}),{years:t,nrens:n}}function Vg(e,t,n){const i=wt.c(14),s=n===void 0?mg:n;let o;i[0]===Symbol.for("react.memo_cache_sentinel")?(o=[],i[0]=o):o=i[0];const[r,a]=A.useState(o),l=ll(),c=e+(l?"?preview":"");let h;i[1]!==c||i[2]!==t||i[3]!==s?(h=()=>{fetch(c).then(gg).then(b=>{const x=b.filter(s);a(x);const{years:v,nrens:_}=rr(x);t(y=>{const k=y.selectedYears.filter(D=>v.has(D)).length?y.selectedYears:[Math.max(...v)],P=y.selectedNrens.filter(D=>_.has(D)).length?y.selectedNrens:[..._.keys()];return{selectedYears:k,selectedNrens:P}})})},i[1]=c,i[2]=t,i[3]=s,i[4]=h):h=i[4];let u;i[5]!==c||i[6]!==t?(u=[c,t],i[5]=c,i[6]=t,i[7]=u):u=i[7],A.useEffect(h,u);let d,f;i[8]!==r?(f=rr(r),i[8]=r,i[9]=f):f=i[9],d=f;const{years:g,nrens:m}=d;let p;return i[10]!==r||i[11]!==m||i[12]!==g?(p={data:r,years:g,nrens:m},i[10]=r,i[11]=m,i[12]=g,i[13]=p):p=i[13],p}function gg(e){return e.json()}function mg(){return!0}export{K as A,bi as B,Ct as C,Bg as D,_t as E,Hg as F,j as G,V as H,W as I,Mn as J,H as K,Vo as L,z as M,$g as N,pi as P,Ho as a,Cn as b,Cg as c,kg as d,Ig as e,Wg as f,Rg as g,Eg as h,Tg as i,Fg as j,Ae as k,jg as l,zg as m,Pg as n,Ng as o,Mg as p,Og as q,Lg as r,Ag as s,hi as t,Vg as u,ci as v,Dg as w,Je as x,at as y,bn as z};
+`)}async function ag(e,t){const n=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await rg(e,t);if(n){const i=document.createElement("style"),s=document.createTextNode(n);i.appendChild(s),e.firstChild?e.insertBefore(i,e.firstChild):e.appendChild(i)}}async function La(e,t={}){const{width:n,height:i}=Oa(e,t),s=await qn(e,t,!0);return await ag(s,t),await Ra(s,t),ng(s,t),await Cp(s,n,i)}async function Fa(e,t={}){const{width:n,height:i}=Oa(e,t),s=await La(e,t),o=await Vn(s),r=document.createElement("canvas"),a=r.getContext("2d"),l=t.pixelRatio||Sp(),c=t.canvasWidth||n,h=t.canvasHeight||i;return r.width=c*l,r.height=h*l,t.skipAutoScale||kp(r),r.style.width=`${c}`,r.style.height=`${h}`,t.backgroundColor&&(a.fillStyle=t.backgroundColor,a.fillRect(0,0,r.width,r.height)),a.drawImage(o,0,0,r.width,r.height),r}async function lg(e,t={}){return(await Fa(e,t)).toDataURL()}async function cg(e,t={}){return(await Fa(e,t)).toDataURL("image/jpeg",t.quality||1)}const hg=e=>{const t=wt.c(17),{filename:n}=e,i=A.useContext(hr),[s,o]=A.useState(!1),r=A.useRef(null);let a;t[0]!==i||t[1]!==n?(a=async v=>{if(i!=null&&i.current){o(!1);const _={transform:"scale(1)","transform-origin":"top left",background:"white"};let y;t:switch(v){case ge.JPEG:{y=await cg(i.current,{quality:.95,style:_});break t}case ge.SVG:{y=await La(i.current,{style:_});break t}case ge.PNG:default:y=await lg(i.current,{style:_})}const w=document.createElement("a");w.href=typeof y=="string"?y:URL.createObjectURL(y),w.download=`${n}.${v}`,document.body.appendChild(w),w.click(),document.body.removeChild(w)}},t[0]=i,t[1]=n,t[2]=a):a=t[2];const l=a;let c;t[3]!==s?(c=()=>{o(!s)},t[3]=s,t[4]=c):c=t[4];const h=c;let u;t[5]===Symbol.for("react.memo_cache_sentinel")?(u=v=>{r.current&&!r.current.contains(v.target)&&o(!1)},t[5]=u):u=t[5];const d=u;let f,g;t[6]===Symbol.for("react.memo_cache_sentinel")?(f=()=>(document.addEventListener("mousedown",d),()=>{document.removeEventListener("mousedown",d)}),g=[],t[6]=f,t[7]=g):(f=t[6],g=t[7]),A.useEffect(f,g);let m;t[8]===Symbol.for("react.memo_cache_sentinel")?(m=M.jsx(dr,{}),t[8]=m):m=t[8];let p;t[9]!==h?(p=M.jsxs("button",{className:"downloadbutton downloadimage",onClick:h,children:["IMAGE ",m]}),t[9]=h,t[10]=p):p=t[10];let b;t[11]!==l||t[12]!==s?(b=s&&M.jsxs("div",{className:"image-options",children:[M.jsx("div",{className:"imageoption downloadpng",onClick:()=>l(ge.PNG),children:M.jsx("span",{children:"PNG"})}),M.jsx("div",{className:"imageoption downloadjpeg",onClick:()=>l(ge.JPEG),children:M.jsx("span",{children:"JPEG"})}),M.jsx("div",{className:"imageoption downloadsvg",onClick:()=>l(ge.SVG),children:M.jsx("span",{children:"SVG"})})]}),t[11]=l,t[12]=s,t[13]=b):b=t[13];let x;return t[14]!==p||t[15]!==b?(x=M.jsxs("div",{className:"image-dropdown",ref:r,children:[p,b]}),t[14]=p,t[15]=b,t[16]=x):x=t[16],x},ug=e=>{const t=wt.c(12),{data:n,filename:i}=e,s=`${i}.csv`;let o;t[0]!==n||t[1]!==s?(o=M.jsx(Zo,{data:n,filename:s,exportType:xe.CSV}),t[0]=n,t[1]=s,t[2]=o):o=t[2];const r=`${i}.xlsx`;let a;t[3]!==n||t[4]!==r?(a=M.jsx(Zo,{data:n,filename:r,exportType:xe.EXCEL}),t[3]=n,t[4]=r,t[5]=a):a=t[5];let l;t[6]!==i?(l=M.jsx(hg,{filename:i}),t[6]=i,t[7]=l):l=t[7];let c;return t[8]!==o||t[9]!==a||t[10]!==l?(c=M.jsxs("div",{className:"downloadcontainer",children:[o,a,l]}),t[8]=o,t[9]=a,t[10]=l,t[11]=c):c=t[11],c};Ct.defaults.font.size=16;Ct.defaults.font.family="Open Sans";Ct.defaults.font.weight=700;function Bg(e){const t=wt.c(47),{title:n,description:i,filter:s,children:o,category:r,data:a,filename:l}=e,{preview:c,setPreview:h}=A.useContext(il),u=window.location.origin+window.location.pathname,{trackPageView:d}=sl();let f,g;t[0]!==n||t[1]!==d?(f=()=>{d({documentTitle:n})},g=[d,n],t[0]=n,t[1]=d,t[2]=f,t[3]=g):(f=t[2],g=t[3]),A.useEffect(f,g);let m;t[4]!==r?(m=r===G.Organisation&&M.jsx(up,{}),t[4]=r,t[5]=m):m=t[5];let p;t[6]!==r?(p=r===G.Policy&&M.jsx(dp,{}),t[6]=r,t[7]=p):p=t[7];let b;t[8]!==r?(b=r===G.Network&&M.jsx(pp,{}),t[8]=r,t[9]=b):b=t[9];let x;t[10]!==r?(x=r===G.ConnectedUsers&&M.jsx(fp,{}),t[10]=r,t[11]=x):x=t[11];let v;t[12]!==r?(v=r===G.Services&&M.jsx(gp,{}),t[12]=r,t[13]=v):v=t[13];let _;t[14]===Symbol.for("react.memo_cache_sentinel")?(_=M.jsx(ol,{type:"data"}),t[14]=_):_=t[14];let y;t[15]!==c||t[16]!==h?(y=c&&M.jsx(se,{className:"preview-banner",children:M.jsxs("span",{children:["You are viewing a preview of the website which includes pre-published survey data. ",M.jsx(rl,{to:u,onClick:()=>h(!1),children:"Click here"})," to deactivate preview mode."]})}),t[15]=c,t[16]=h,t[17]=y):y=t[17];let w;t[18]!==r?(w=M.jsx(hp,{activeCategory:r}),t[18]=r,t[19]=w):w=t[19];let k;t[20]!==n?(k=M.jsx(se,{children:M.jsx("h3",{className:"m-1",children:n})}),t[20]=n,t[21]=k):k=t[21];let S;t[22]!==i?(S=M.jsx(se,{children:M.jsx("p",{className:"p-md-4",children:i})}),t[22]=i,t[23]=S):S=t[23];let P;t[24]===Symbol.for("react.memo_cache_sentinel")?(P={position:"relative"},t[24]=P):P=t[24];let D;t[25]!==a||t[26]!==l?(D=M.jsx(se,{align:"right",style:P,children:M.jsx(ug,{data:a,filename:l})}),t[25]=a,t[26]=l,t[27]=D):D=t[27];let C;t[28]!==s?(C=M.jsx(se,{children:s}),t[28]=s,t[29]=C):C=t[29];let O;t[30]!==o?(O=M.jsx(se,{children:o}),t[30]=o,t[31]=O):O=t[31];let E;t[32]!==k||t[33]!==S||t[34]!==D||t[35]!==C||t[36]!==O?(E=M.jsxs(cr,{className:"mb-5 grow",children:[k,S,D,C,O]}),t[32]=k,t[33]=S,t[34]=D,t[35]=C,t[36]=O,t[37]=E):E=t[37];let F;return t[38]!==w||t[39]!==E||t[40]!==m||t[41]!==p||t[42]!==b||t[43]!==x||t[44]!==v||t[45]!==y?(F=M.jsxs(M.Fragment,{children:[m,p,b,x,v,_,y,w,E]}),t[38]=w,t[39]=E,t[40]=m,t[41]=p,t[42]=b,t[43]=x,t[44]=v,t[45]=y,t[46]=F):F=t[46],F}function Hg(e){const t=wt.c(81),{filterOptions:n,filterSelection:i,setFilterSelection:s,max1year:o,coloredYears:r}=e,a=o===void 0?!1:o,l=r===void 0?!1:r,[c,h]=A.useState(!0),{nrens:u}=A.useContext(al);let d,f;if(t[0]===Symbol.for("react.memo_cache_sentinel")?(d=()=>{const B=()=>h(window.innerWidth>=992);return window.addEventListener("resize",B),()=>{window.removeEventListener("resize",B)}},f=[],t[0]=d,t[1]=f):(d=t[0],f=t[1]),A.useEffect(d,f),a&&i.selectedYears.length>1){const B=Math.max(...i.selectedYears);s({selectedYears:[B],selectedNrens:[...i.selectedNrens]})}let g;t[2]!==i.selectedNrens||t[3]!==i.selectedYears||t[4]!==s?(g=B=>{i.selectedNrens.includes(B)?s({selectedYears:[...i.selectedYears],selectedNrens:i.selectedNrens.filter(et=>et!==B)}):s({selectedYears:[...i.selectedYears],selectedNrens:[...i.selectedNrens,B]})},t[2]=i.selectedNrens,t[3]=i.selectedYears,t[4]=s,t[5]=g):g=t[5];const m=g;let p;t[6]!==i.selectedNrens||t[7]!==i.selectedYears||t[8]!==a||t[9]!==s?(p=B=>{i.selectedYears.includes(B)?s({selectedYears:i.selectedYears.filter(et=>et!==B),selectedNrens:[...i.selectedNrens]}):s({selectedYears:a?[B]:[...i.selectedYears,B],selectedNrens:[...i.selectedNrens]})},t[6]=i.selectedNrens,t[7]=i.selectedYears,t[8]=a,t[9]=s,t[10]=p):p=t[10];const b=p;let x;t[11]!==n.availableNrens||t[12]!==i.selectedYears||t[13]!==s?(x=()=>{s({selectedYears:[...i.selectedYears],selectedNrens:n.availableNrens.map(pg)})},t[11]=n.availableNrens,t[12]=i.selectedYears,t[13]=s,t[14]=x):x=t[14];const v=x;let _;t[15]!==i.selectedYears||t[16]!==s?(_=()=>{s({selectedYears:[...i.selectedYears],selectedNrens:[]})},t[15]=i.selectedYears,t[16]=s,t[17]=_):_=t[17];const y=_,w=c?3:2,k=Math.ceil(u.length/w);let S,P,D,C,O,E,F,R,L,I;if(t[18]!==n.availableNrens||t[19]!==i.selectedNrens||t[20]!==m||t[21]!==w||t[22]!==k||t[23]!==u){const B=Array.from(Array(w),fg);u.sort(dg).forEach((Jt,Zt)=>{const lt=Math.floor(Zt/k);B[lt].push(Jt)});let et;t[34]!==n.availableNrens?(et=Jt=>n.availableNrens.find(lt=>lt.name===Jt.name)!==void 0,t[34]=n.availableNrens,t[35]=et):et=t[35];const Ee=et;D=xs,L=3,P=ei,E="outside",F="m-3",t[36]===Symbol.for("react.memo_cache_sentinel")?(R=M.jsx(ei.Toggle,{id:"nren-dropdown-toggle",variant:"compendium",children:"Select NRENs    "}),t[36]=R):R=t[36],S=ei.Menu,t[37]===Symbol.for("react.memo_cache_sentinel")?(O={borderRadius:0},t[37]=O):O=t[37],I="d-flex fit-max-content mt-4 mx-3";let zt;t[38]!==i.selectedNrens||t[39]!==m||t[40]!==Ee?(zt=(Jt,Zt)=>M.jsx("div",{className:"flex-fill",children:Jt.map(lt=>M.jsx("div",{className:"filter-dropdown-item flex-fill py-1 px-3",children:M.jsxs(Jn.Check,{type:"checkbox",children:[M.jsx(Jn.Check.Input,{id:lt.name,readOnly:!0,type:"checkbox",onClick:()=>m(lt.name),checked:i.selectedNrens.includes(lt.name),className:"nren-checkbox",disabled:!Ee(lt)}),M.jsxs(Jn.Check.Label,{htmlFor:lt.name,className:"nren-checkbox-label",children:[lt.name," ",M.jsxs("span",{style:{fontWeight:"lighter"},children:["(",lt.country,")"]})]})]})},lt.name))},Zt),t[38]=i.selectedNrens,t[39]=m,t[40]=Ee,t[41]=zt):zt=t[41],C=B.map(zt),t[18]=n.availableNrens,t[19]=i.selectedNrens,t[20]=m,t[21]=w,t[22]=k,t[23]=u,t[24]=S,t[25]=P,t[26]=D,t[27]=C,t[28]=O,t[29]=E,t[30]=F,t[31]=R,t[32]=L,t[33]=I}else S=t[24],P=t[25],D=t[26],C=t[27],O=t[28],E=t[29],F=t[30],R=t[31],L=t[32],I=t[33];let Y;t[42]!==C||t[43]!==I?(Y=M.jsx("div",{className:I,children:C}),t[42]=C,t[43]=I,t[44]=Y):Y=t[44];let $;t[45]!==v?($=M.jsx(Ft,{variant:"compendium",className:"flex-fill",onClick:v,children:"Select all NRENs"}),t[45]=v,t[46]=$):$=t[46];let N;t[47]!==y?(N=M.jsx(Ft,{variant:"compendium",className:"flex-fill",onClick:y,children:"Unselect all NRENs"}),t[47]=y,t[48]=N):N=t[48];let tt;t[49]!==$||t[50]!==N?(tt=M.jsxs("div",{className:"d-flex fit-max-content gap-2 mx-4 my-3",children:[$,N]}),t[49]=$,t[50]=N,t[51]=tt):tt=t[51];let Q;t[52]!==S||t[53]!==O||t[54]!==Y||t[55]!==tt?(Q=M.jsxs(S,{style:O,children:[Y,tt]}),t[52]=S,t[53]=O,t[54]=Y,t[55]=tt,t[56]=Q):Q=t[56];let nt;t[57]!==P||t[58]!==E||t[59]!==F||t[60]!==R||t[61]!==Q?(nt=M.jsxs(P,{autoClose:E,className:F,children:[R,Q]}),t[57]=P,t[58]=E,t[59]=F,t[60]=R,t[61]=Q,t[62]=nt):nt=t[62];let U;t[63]!==D||t[64]!==L||t[65]!==nt?(U=M.jsx(D,{xs:L,children:nt}),t[63]=D,t[64]=L,t[65]=nt,t[66]=U):U=t[66];let X;if(t[67]!==l||t[68]!==n.availableYears||t[69]!==i.selectedYears||t[70]!==b){let B;t[72]!==l||t[73]!==i.selectedYears||t[74]!==b?(B=et=>M.jsx(Ft,{variant:l?"compendium-year-"+et%9:"compendium-year",active:i.selectedYears.includes(et),onClick:()=>b(et),children:et},et),t[72]=l,t[73]=i.selectedYears,t[74]=b,t[75]=B):B=t[75],X=n.availableYears.sort().map(B),t[67]=l,t[68]=n.availableYears,t[69]=i.selectedYears,t[70]=b,t[71]=X}else X=t[71];let q;t[76]!==X?(q=M.jsx(xs,{children:M.jsx(Ti,{className:"d-flex justify-content-end gap-2 m-3",children:X})}),t[76]=X,t[77]=q):q=t[77];let At;return t[78]!==U||t[79]!==q?(At=M.jsxs(M.Fragment,{children:[U,q]}),t[78]=U,t[79]=q,t[80]=At):At=t[80],At}function dg(e,t){return e.name.localeCompare(t.name)}function fg(){return[]}function pg(e){return e.name}const Wg=e=>{const t=wt.c(3),{children:n}=e,i=A.useContext(hr);let s;return t[0]!==n||t[1]!==i?(s=M.jsx("div",{ref:i,children:n}),t[0]=n,t[1]=i,t[2]=s):s=t[2],s};function rr(e){const t=new Set,n=new Map;return e.forEach(i=>{t.add(i.year),n.set(i.nren,{name:i.nren,country:i.nren_country})}),{years:t,nrens:n}}function Vg(e,t,n){const i=wt.c(14),s=n===void 0?mg:n;let o;i[0]===Symbol.for("react.memo_cache_sentinel")?(o=[],i[0]=o):o=i[0];const[r,a]=A.useState(o),l=ll(),c=e+(l?"?preview":"");let h;i[1]!==c||i[2]!==t||i[3]!==s?(h=()=>{fetch(c).then(gg).then(b=>{const x=b.filter(s);a(x);const{years:v,nrens:_}=rr(x);t(y=>{const k=y.selectedYears.filter(D=>v.has(D)).length?y.selectedYears:[Math.max(...v)],P=y.selectedNrens.filter(D=>_.has(D)).length?y.selectedNrens:[..._.keys()];return{selectedYears:k,selectedNrens:P}})})},i[1]=c,i[2]=t,i[3]=s,i[4]=h):h=i[4];let u;i[5]!==c||i[6]!==t?(u=[c,t],i[5]=c,i[6]=t,i[7]=u):u=i[7],A.useEffect(h,u);let d,f;i[8]!==r?(f=rr(r),i[8]=r,i[9]=f):f=i[9],d=f;const{years:g,nrens:m}=d;let p;return i[10]!==r||i[11]!==m||i[12]!==g?(p={data:r,years:g,nrens:m},i[10]=r,i[11]=m,i[12]=g,i[13]=p):p=i[13],p}function gg(e){return e.json()}function mg(){return!0}export{K as A,bi as B,Ct as C,Bg as D,_t as E,Hg as F,j as G,V as H,W as I,Mn as J,H as K,Vo as L,z as M,$g as N,pi as P,Ho as a,Cn as b,Cg as c,kg as d,Ig as e,Wg as f,Rg as g,Eg as h,Tg as i,Fg as j,Ae as k,jg as l,zg as m,Pg as n,Ng as o,Mg as p,Og as q,Lg as r,Ag as s,hi as t,Vg as u,ci as v,Dg as w,Je as x,at as y,bn as z};