diff --git a/components/eventCard.jsx b/components/eventCard.jsx index 8aa3daa92b72dc839b0a394f6b7949ccbd41c5cb..827cd297f6179f4d37a6ba4e3a9aae0aa697b173 100644 --- a/components/eventCard.jsx +++ b/components/eventCard.jsx @@ -153,7 +153,7 @@ export default function EventCard({ </div> <div> {!event.isStammtisch && ( - <Group style={{ verticalAlign: "middle", marginTop: "20px" }}> + <Group style={{ verticalAlign: "middle", marginTop: "20px" }} grow> {event.signUp ? ( <Button href={event.signUp} diff --git a/components/signUpsModal.jsx b/components/signUpsModal.jsx index f877fd1660fbd7f27c25c74431d6561698b57177..9b4d2f62f24e14bf6a21f226993cfef43b266109 100644 --- a/components/signUpsModal.jsx +++ b/components/signUpsModal.jsx @@ -1,15 +1,37 @@ +import { useState } from "react"; + import { useTranslation } from "next-i18next"; -import { Button, Modal, Table } from "@mantine/core"; +import { Button, Group, Modal, Table } from "@mantine/core"; + +import { gql, useMutation } from "@apollo/client"; + +const sendReminderMutation = gql` + mutation sendReminder($id: Int) { + sendReminder(id: $id) + } +`; export default function SignUpsModal({ open, close, event }) { const { t } = useTranslation("common"); + const [sendReminder] = useMutation(sendReminderMutation); + const [loading, setLoading] = useState(false); const copyMailAddresses = () => { const addresses = event.signUps.map((signUp) => signUp.email).join(", "); navigator.clipboard.writeText(addresses); }; + const sendRem = async () => { + setLoading(true); + await sendReminder({ + variables: { + id: event.id, + }, + }); + setLoading(false); + }; + if (!event) return <></>; return ( @@ -34,9 +56,12 @@ export default function SignUpsModal({ open, close, event }) { </tbody> </Table> - <Button onClick={copyMailAddresses} mt="md"> - {t("copyMailAddresses")} - </Button> + <Group grow mt="md"> + <Button onClick={copyMailAddresses}>{t("copyMailAddresses")}</Button> + <Button onClick={sendRem} loading={loading}> + {t("sendReminder")} + </Button> + </Group> </Modal> ); } diff --git a/components/toc.jsx b/components/toc.jsx index 6e85d4da6c12fb188bb0d3ae1a13d867697e8001..efa1c75a8f89ed175cb921c2956a88d79367de88 100644 --- a/components/toc.jsx +++ b/components/toc.jsx @@ -11,6 +11,8 @@ import { import { Icon, ICONS } from "vseth-canine-ui"; +import { getAccentColor } from "../utilities/colors"; + const useStyles = createStyles((theme) => ({ link: { ...theme.fn.focusStyles(), @@ -119,7 +121,7 @@ export default function TOC() { }} > <Group mb="md"> - <Icon icon={ICONS.LIST} /> + <Icon icon={ICONS.LIST} color={getAccentColor(theme)} /> <Text>Table of contents</Text> </Group> {entries} diff --git a/graphql/resolvers.js b/graphql/resolvers.js index ed3f0b85ec434cb7794818d2a749f9cb29dff4cd..7941e942a31b1889ed7e67156202020c9e926852 100644 --- a/graphql/resolvers.js +++ b/graphql/resolvers.js @@ -3,7 +3,10 @@ import { getServerSession } from "next-auth/next"; import { authOptions } from "../pages/api/auth/[...nextauth]"; import hasAccess from "../utilities/hasAccess"; -import { isInFuture } from '../utilities/dates'; +import { isInFuture, formatDateFromDB, formatTimeFromDB } from '../utilities/dates'; +import { sendMail } from '../utilities/mail'; + +import config from '../thealternative.config'; export const resolvers = { Query: { @@ -21,8 +24,9 @@ export const resolvers = { lastName: hasAccess(session, true), email: hasAccess(session, true) } - }, - } + } + }, + orderBy: [{date: 'asc'}, {startTime: 'asc'}] }); const futureEvents = events.filter((event) => isInFuture(event)); return futureEvents; @@ -59,6 +63,8 @@ export const resolvers = { addSignUp: async(_, { id }, { session }) => { if(!hasAccess(session, false)) return false; + const event = await prisma.event.findUnique({ where: { id }}); + const signUp = await prisma.signUp.create({ data: { eventId: id, @@ -69,6 +75,18 @@ export const resolvers = { } }); + sendMail( + session.info.payload.email, + config.address, + config.signUpText + .replace('NAME', session.info.payload.given_name) + .replace('EVENT', event.title) + .replace('DATE', formatDateFromDB(event.date, 'en')) + .replace('TIME', formatTimeFromDB(event.startTime, event.endTime)) + .replace('PLACE', event.place), + config.signUpSubject + ); + return signUp ? true : false; }, removeSignUp: async(_, { id }, { session }) => { @@ -89,7 +107,36 @@ export const resolvers = { } }); + return true; + }, + sendReminder: async(_, { id }, { session }) => { + if(!hasAccess(session, true)) return false; + + const event = await prisma.event.findUnique({ + where: { id }, + include: { + signUps: true, + } + }); + + const promises = event.signUps.map(async (signUp) => { + await sendMail( + signUp.email, + config.address, + config.reminderText + .replace('NAME', signUp.firstName) + .replace('EVENT', event.title) + .replace('DATE', formatDateFromDB(event.date, 'en')) + .replace('TIME', formatTimeFromDB(event.startTime, event.endTime)) + .replace('PLACE', event.place), + config.reminderSubject + ); + }); + + Promise.allSettled(promises).then(([result]) => { + return true; + }); return true; } - }, + } }; diff --git a/graphql/schema.js b/graphql/schema.js index 74a0f41866bad7f48b8f750cda26492fa03d7a1a..8132aee7dbe3a93c0963f93255510c2d6d2f8a48 100644 --- a/graphql/schema.js +++ b/graphql/schema.js @@ -36,6 +36,7 @@ export const typeDefs = ` editEvent(id: Int, title: String, speaker: String, description: String, date: DateTime, time: [DateTime], place: String, signUp: String, isStammtisch: Boolean): Boolean addSignUp(id: Int): Boolean removeSignUp(id: Int): Boolean + sendReminder(id: Int): Boolean } `; diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 48d63715de96de6339f164eb5a1b3f0733bfdaba..d3ad6d52c6717035a474ec9135f7d81804024600 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -40,5 +40,6 @@ "viewParticipants": "Teilnehmendenliste", "participants": "Teilnehmendenliste", "copyMailAddresses": "Mailadressen Kopieren", - "loadTemplate": "Template Laden" + "loadTemplate": "Template Laden", + "sendReminder": "Reminder Versenden" } \ No newline at end of file diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 653fc69799f74accb3875e4ab6ca68f4245a7a18..40eca86016c2ba7986b1a7cdab356667949ab246 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -40,5 +40,6 @@ "viewParticipants": "View Participants", "participants": "Participants", "copyMailAddresses": "Copy Mail Addresses", - "loadTemplate": "Load Template" + "loadTemplate": "Load Template", + "sendReminder": "Send Reminder" } \ No newline at end of file diff --git a/styles/globals.css b/styles/globals.css index 913d8e331cfa11c90ce13b4dc1df4763255c9188..deddc8995d237b8f9f26b5f925db6df3f15f0d77 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -4,6 +4,7 @@ p { h1 { font-size: 4rem !important; + overflow-x: auto; } h2 { @@ -142,12 +143,13 @@ p { } .bash-guide pre { - background-color: #eeeeee; padding: 0.5rem; + background-color: rgba(125,125,125,0.1); + overflow-x: auto; } .bash-guide p>code { - color: #888888; + color: #f28a20; } .vseth-footer-dark { diff --git a/thealternative.config.js b/thealternative.config.js index 8e8fc8fc9dc05e23dd39a1fafad7306bb24a0e43..5785aaf1ca14f6bb8b1d98e4e92d8d6bea36e0ef 100644 --- a/thealternative.config.js +++ b/thealternative.config.js @@ -1,6 +1,94 @@ const config = { - subject: "TheAlternative Contact Request by NAME", - address: "board@thealternative.ch" + subject: 'TheAlternative Contact Request by NAME', + address: 'board@thealternative.ch', + signUpSubject: 'TheAlternative: Successful SignUp', + reminderSubject: 'TheAlternative: Event Reminder', + signUpText: ` + <html> + <body> + <div> + <table border='0' cellpadding='5' cellspacing='0' width='100%' style='max-width:600px' align='center'> + <tr> + <td + align='center' + bgcolor='#ffffff' + style="padding: 40px 0 30px 0;border-bottom: 1px dashed #bbb"" + > + <a + href='https://thealternative.ethz.ch' + target='_blank' + style='text-decoration: none;' + > + <img alt='TheAlternative Logo' style='width: 40%;' src='data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMTI1LjYxMDk0bW0iCiAgIGhlaWdodD0iMTcuNzYzMzNtbSIKICAgdmlld0JveD0iMCAwIDEyNS42MTA5NCAxNy43NjMzMyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4zICgwZTE1MGVkNmM0LCAyMDIzLTA3LTIxKSIKICAgc29kaXBvZGk6ZG9jbmFtZT0ibG9nby5zdmciCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJuYW1lZHZpZXcxIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzAwMDAwMCIKICAgICBib3JkZXJvcGFjaXR5PSIwLjI1IgogICAgIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0idHJ1ZSIKICAgICBpbmtzY2FwZTpkZXNrY29sb3I9IiNkMWQxZDEiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOnpvb209IjEuODQ2OTQ5NCIKICAgICBpbmtzY2FwZTpjeD0iMjMwLjY1MDYxIgogICAgIGlua3NjYXBlOmN5PSItMzguMTcxMDUxIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTY4MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI5ODEiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJnMTkiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczEiIC8+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQyLjA2ODc1LC0xMzkuNykiPgogICAgPGcKICAgICAgIGlkPSJnNTAiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjI2NDU4MzMzLDAsMCwwLjI2NDU4MzMzLDI1LjE4NjQ4MSwxMjIuOTI4NTkpIj4KICAgICAgPGcKICAgICAgICAgaWQ9ImcxOSI+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzIiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICAgIGQ9Im0gMTY2LjYxNiw2My4zODkgdiA1LjkyOSBoIC0xMC41NjggdiAzMC45MzQgaCAtNi44MzEgViA2OS4zMTggaCAtMTAuNTY4IHYgLTUuOTI5IHoiCiAgICAgICAgICAgICBpZD0icGF0aDEiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMyIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIj4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgICAgZD0iTSAxNzAuODc0LDEwMC4yNSBWIDYzLjM4OSBoIDYuODMxIHYgMTMuMjUgYyAyLjEzMSwtMi4zMDIgNC44NTQsLTMuNDU0IDguMTcxLC0zLjQ1NCA2LjQxLDAgOS42MTUsMy4zMzQgOS42MTUsMTAuMDAyIHYgMTcuMDY0IEggMTg4LjY2IFYgODMuMTg2IGMgMCwtMi45OSAtMS40ODcsLTQuNDg0IC00LjQ1OSwtNC40ODQgLTIuMjE3LDAgLTQuMzgyLDAuODg1IC02LjQ5NiwyLjY1NCB2IDE4Ljg5NiB6IgogICAgICAgICAgICAgaWQ9InBhdGgyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzQiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICAgIGQ9Im0gMjE0LjQxNSw3My4xODQgYyA4LjIxNCwwIDEyLjMyMiw0LjE5MyAxMi4zMjIsMTIuNTggMCwxLjExNyAtMC4wNzgsMi4yMzQgLTAuMjMyLDMuMzUxIGggLTE3Ljk2NyBjIDAsMy44MTUgMi44MDEsNS43MjQgOC40MDQsNS43MjQgMi43MzEsMCA1LjQ2NCwtMC4yNTggOC4xOTcsLTAuNzczIHYgNS40MTMgYyAtMi4zOSwwLjUxNyAtNS4yOTMsMC43NzMgLTguNzEyLDAuNzczIC05LjgxMywwIC0xNC43MiwtNC42MTQgLTE0LjcyLC0xMy44NDIgLTAuMDAxLC04LjgxOCA0LjIzNSwtMTMuMjI2IDEyLjcwOCwtMTMuMjI2IHogbSAtNS44NzgsMTEuMTg4IGggMTEuNTQ4IHYgLTAuMjA2IGMgMCwtMy43NDYgLTEuODkxLC01LjYyIC01LjY3MSwtNS42MiAtMy42MDgsMCAtNS41NjcsMS45NDIgLTUuODc3LDUuODI2IHoiCiAgICAgICAgICAgICBpZD0icGF0aDMiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMTQiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2YyOGEyMDtmaWxsLW9wYWNpdHk6MSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2YxOGEyMSIKICAgICAgICAgICAgIGQ9Im0gMjM2LjcxMywxMDAuMzE2IGggLTcuMDExIGwgMTUuNjQ3LC0zNi44NjEgaCA3LjM0NiBsIDE1Ljk4MiwzNi44NjEgaCAtNy4zNDcgbCAtNC4yMDIsLTEwLjA1MyBoIC0xMi4yNDUgbCAyLjM0NywtNS45MjkgaCA3LjQyNCBsIC01LjgsLTEzLjg0MiB6IgogICAgICAgICAgICAgaWQ9InBhdGg0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2YyOGEyMDtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBmaWxsPSIjZjE4YTIxIgogICAgICAgICAgICAgZD0ibSAyODAuMzc4LDYzLjQ1NSB2IDM2Ljg2MSBoIC02LjgzMSBWIDYzLjQ1NSBaIgogICAgICAgICAgICAgaWQ9InBhdGg1IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2YyOGEyMDtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBmaWxsPSIjZjE4YTIxIgogICAgICAgICAgICAgZD0ibSAyODcuNDM5LDY4Ljg2OCBoIDUuMDUyIGwgMS4wMzEsNC4zODIgaCA2LjgwNSB2IDUuNDE0IGggLTYuMDU4IHYgMTIuNDQ5IGMgMCwyLjUyNiAxLjA5MSwzLjc5IDMuMjczLDMuNzkgaCAyLjc4NCB2IDUuNDEzIGggLTYuMDgzIGMgLTQuNTM3LDAgLTYuODA1LC0yLjQzMiAtNi44MDUsLTcuMjk1IFYgNjguODY4IFoiCiAgICAgICAgICAgICBpZD0icGF0aDYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZjI4YTIwO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGZpbGw9IiNmMThhMjEiCiAgICAgICAgICAgICBkPSJtIDMxNy4zOTEsNzMuMjUgYyA4LjIxMywwIDEyLjMyLDQuMTkyIDEyLjMyLDEyLjU4IDAsMS4xMTYgLTAuMDc2LDIuMjMzIC0wLjIzLDMuMzUxIGggLTE3Ljk2NyBjIDAsMy44MTUgMi44MDEsNS43MjMgOC40MDEsNS43MjMgMi43MzIsMCA1LjQ2NiwtMC4yNTggOC4xOTcsLTAuNzcyIHYgNS40MTMgYyAtMi4zODksMC41MTYgLTUuMjkzLDAuNzcyIC04LjcxMywwLjc3MiAtOS44MTMsMCAtMTQuNzE4LC00LjYxMyAtMTQuNzE4LC0xMy44NDIgMC4wMDEsLTguODE3IDQuMjM4LC0xMy4yMjUgMTIuNzEsLTEzLjIyNSB6IG0gLTUuODc3LDExLjE4OCBoIDExLjU0NyB2IC0wLjIwNiBjIDAsLTMuNzQ2IC0xLjg5MSwtNS42MiAtNS42NywtNS42MiAtMy42MSwwIC01LjU2OSwxLjk0MiAtNS44NzcsNS44MjYgeiIKICAgICAgICAgICAgIGlkPSJwYXRoNyIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmMjhhMjA7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2YxOGEyMSIKICAgICAgICAgICAgIGQ9Ik0gMzM1Ljg0NCwxMDAuMzE2IFYgNzMuMjUgaCA1LjI4NSBsIDAuODUsMy40NTQgYyAyLjM3MSwtMi4zMDMgNC44ODEsLTMuNDU0IDcuNTI3LC0zLjQ1NCB2IDUuNTE3IGMgLTIuNTQzLDAgLTQuODIsMS4wNTcgLTYuODMyLDMuMTcgdiAxOC4zNzkgeiIKICAgICAgICAgICAgIGlkPSJwYXRoOCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmMjhhMjA7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2YxOGEyMSIKICAgICAgICAgICAgIGQ9Ik0gMzU0LjM3OCwxMDAuMzE2IFYgNzMuMjUgaCA1LjI4MiBsIDAuODUzLDMuOTcgYyAyLjU5NCwtMi42NDYgNS41NTEsLTMuOTcgOC44NjcsLTMuOTcgNi40MDksMCA5LjYxNCwzLjMzNCA5LjYxNCwxMC4wMDIgdiAxNy4wNjMgaCAtNi44MzIgViA4My4yNTIgYyAwLC0yLjk5IC0xLjQ4NSwtNC40ODUgLTQuNDU5LC00LjQ4NSAtMi4yMTcsMCAtNC4zODMsMC44ODUgLTYuNDk2LDIuNjU1IHYgMTguODk1IHoiCiAgICAgICAgICAgICBpZD0icGF0aDkiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZjI4YTIwO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGZpbGw9IiNmMThhMjEiCiAgICAgICAgICAgICBkPSJtIDM4NS4xNTIsOTEuODg3IGMgMCwtNS4zNzggMy45MTgsLTguMDY4IDExLjc1NCwtOC4wNjggMS44MzgsMCAzLjY3OSwwLjE3MiA1LjUxNywwLjUxNyB2IC0yLjAzNyBjIDAsLTIuNDIzIC0xLjc0NCwtMy42MzQgLTUuMjMyLC0zLjYzNCAtMi45NTUsMCAtNi4yMzgsMC40MyAtOS44NDgsMS4yODkgViA3NC41NCBjIDMuNjA4LC0wLjg1OSA2Ljg5MywtMS4yODkgOS44NDgsLTEuMjg5IDguMDQzLDAgMTIuMDY0LDIuOTc0IDEyLjA2NCw4LjkxOSB2IDE4LjE0NiBoIC0zLjk3MiBsIC0yLjQyMiwtMi40MjMgYyAtMi4zNTQsMS42MTUgLTQuOTQ5LDIuNDIzIC03Ljc4NSwyLjQyMyAtNi42MTYsMCAtOS45MjQsLTIuODA5IC05LjkyNCwtOC40MjkgeiBtIDExLjc1NCwtMy40MjggYyAtMy4yODMsMCAtNC45MjQsMS4xMTcgLTQuOTI0LDMuMzUxIDAsMi40MDYgMS4zNzUsMy42MDkgNC4xMjUsMy42MDkgMi4yNjgsMCA0LjM3MywtMC43MDUgNi4zMTQsLTIuMTE0IHYgLTQuMzMxIGMgLTEuNzE4LC0wLjM0MyAtMy41NTYsLTAuNTE1IC01LjUxNSwtMC41MTUgeiIKICAgICAgICAgICAgIGlkPSJwYXRoMTAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZjI4YTIwO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGZpbGw9IiNmMThhMjEiCiAgICAgICAgICAgICBkPSJtIDQxNi4zMTQsNjguODY4IGggNS4wNTMgbCAxLjAzMSw0LjM4MiBoIDYuODA1IHYgNS40MTQgaCAtNi4wNTcgdiAxMi40NDkgYyAwLDIuNTI2IDEuMDksMy43OSAzLjI3MywzLjc5IGggMi43ODIgdiA1LjQxMyBoIC02LjA4NCBjIC00LjUzNywwIC02LjgwNSwtMi40MzIgLTYuODA1LC03LjI5NSB6IgogICAgICAgICAgICAgaWQ9InBhdGgxMSIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmMjhhMjA7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2YxOGEyMSIKICAgICAgICAgICAgIGQ9Im0gNDQxLjY3Nyw2My40NTUgdiA1LjQxNCBoIC02LjgzIHYgLTUuNDE0IHogbSAwLDkuNzk1IHYgMjcuMDY1IGggLTYuODMgViA3My4yNSBaIgogICAgICAgICAgICAgaWQ9InBhdGgxMiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmMjhhMjA7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2YxOGEyMSIKICAgICAgICAgICAgIGQ9Im0gNDQ1LjkwMiw3My4yNSBoIDcuMjE3IGwgNi41NzQsMTguOTIxIDYuODMsLTE4LjkyMSBoIDcuMjE5IGwgLTExLjAwOCwyNy4wNjUgaCAtNi40OTYgeiIKICAgICAgICAgICAgIGlkPSJwYXRoMTMiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZjI4YTIwO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGZpbGw9IiNmMThhMjEiCiAgICAgICAgICAgICBkPSJtIDQ4OS4zODcsNzMuMjUgYyA4LjIxMywwIDEyLjMxOSw0LjE5MiAxMi4zMTksMTIuNTggMCwxLjExNiAtMC4wNzUsMi4yMzMgLTAuMjI5LDMuMzUxIEggNDgzLjUxIGMgMCwzLjgxNSAyLjgwMSw1LjcyMyA4LjQwMSw1LjcyMyAyLjczMiwwIDUuNDY2LC0wLjI1OCA4LjE5NywtMC43NzIgdiA1LjQxMyBjIC0yLjM4OSwwLjUxNiAtNS4yOTMsMC43NzIgLTguNzEzLDAuNzcyIC05LjgxMywwIC0xNC43MTksLTQuNjEzIC0xNC43MTksLTEzLjg0MiAwLjAwMiwtOC44MTcgNC4yMzgsLTEzLjIyNSAxMi43MTEsLTEzLjIyNSB6IG0gLTUuODc3LDExLjE4OCBoIDExLjU0NyB2IC0wLjIwNiBjIDAsLTMuNzQ2IC0xLjg5MiwtNS42MiAtNS42NywtNS42MiAtMy42MSwwIC01LjU2OSwxLjk0MiAtNS44NzcsNS44MjYgeiIKICAgICAgICAgICAgIGlkPSJwYXRoMTQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZjI4YTIwO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNDA1MDU2MSwwLDAsMC40MDUwNTYxLDUxMy43MjAxNiwxNTEuMDI2NjgpIgogICAgICAgICAgIGlkPSJnMTgiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImcxNyIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgICAgICBkPSJtIC0xMi4wMDMsLTEzMy4wMTQgdiA3LjgyMSBoIC04LjQ2IHYgLTcuODIxIHoiCiAgICAgICAgICAgICAgIGlkPSJwYXRoMTUiCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgICAgIGQ9Im0gMjIuNDcxLC0xMjYuMTUgYyAtMi43NjgsMC42MzYgLTUuNjM5LDAuOTU3IC04LjYxOSwwLjk1NyAtMTEuOTIyLDAgLTE3Ljg3NywtNS43OTggLTE3Ljg3NywtMTcuNCAwLC0xMC43NDggNS45NTUsLTE2LjEyMiAxNy44NzcsLTE2LjEyMiAyLjk4LDAgNS44NTQsMC4zMjEgOC42MTksMC45NiB2IDYuNzAyIGMgLTIuNzY4LC0wLjYzOSAtNS40MjcsLTAuOTU1IC03Ljk4LC0wLjk1NSAtNi43MDUsMCAtMTAuMDU2LDMuMTM5IC0xMC4wNTYsOS40MTUgMCw3LjEzMiAzLjM1MSwxMC42OTcgMTAuMDU2LDEwLjY5NyAyLjU1MywwIDUuMjEzLC0wLjMyMSA3Ljk4LC0wLjk2IHoiCiAgICAgICAgICAgICAgIGlkPSJwYXRoMTYiCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgICAgIGQ9Im0gMzAuNjA4LC0xMjUuMTkzIHYgLTQ1LjY1MSBoIDguNDYgdiAxNi40MDkgYyAyLjY0LC0yLjg1MiA2LjAxMywtNC4yNzkgMTAuMTIxLC00LjI3OSA3LjkzNywwIDExLjkwNSw0LjEzIDExLjkwNSwxMi4zODcgdiAyMS4xMzQgaCAtOC40NTggdiAtMjEuMTM0IGMgMCwtMy43MDMgLTEuODQyLC01LjU1NSAtNS41MjYsLTUuNTU1IC0yLjc0NCwwIC01LjQyNSwxLjA5NyAtOC4wNDMsMy4yODkgdiAyMy40MDEgaCAtOC40NTkgeiIKICAgICAgICAgICAgICAgaWQ9InBhdGgxNyIKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9ImcyMyIKICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gNzUuMzU4LDYzLjM4OSBjIC02LjM5OSwwIC0xMS41NTEsNS4xNTIgLTExLjU1MSwxMS41NTEgdiA0MC4yODggYyAwLDYuMzk4IDUuMTUxLDExLjU1IDExLjU1MSwxMS41NSBoIDQwLjI4NyBjIDYuMzk4LDAgMTEuNTUsLTUuMTUxIDExLjU1LC0xMS41NSBWIDc0LjkzOSBjIDAsLTYuMzk4IC01LjE1MSwtMTEuNTUxIC0xMS41NSwtMTEuNTUxIHogbSAxLjE4MiwzLjgyMyBoIDM2LjMyNSBjIDUuODIxLDAgMTAuNTA3LDQuNjg2IDEwLjUwNywxMC41MDcgdiAzNi4zMjUgYyAwLDUuODIgLTQuNjg2LDEwLjUwNyAtMTAuNTA3LDEwLjUwNyBIIDc2LjU0IGMgLTUuODIyLDAgLTEwLjUwNywtNC42ODcgLTEwLjUwNywtMTAuNTA3IFYgNzcuNzIgYyAwLC01LjgyMiA0LjY4NSwtMTAuNTA4IDEwLjUwNywtMTAuNTA4IHoiCiAgICAgICAgICAgaWQ9InBhdGgxOSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9ImcyMiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIj4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgICAgZD0ibSA4NS42NDcsOTYuNjc4IGggLTMuNjYzIGwgOC4xNzQsLTE5LjI1NiBoIDMuODM3IGwgOC4zNSwxOS4yNTYgaCAtMy44MzggbCAtMi4xOTQsLTUuMjUxIGggLTYuMzk2IGwgMS4yMjYsLTMuMDk3IGggMy44NzggbCAtMy4wMywtNy4yMzEgeiIKICAgICAgICAgICAgIGlkPSJwYXRoMjAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgICBkPSJtIDEwNy45MzMsNzcuNDIyIHYgMTkuMjU2IGggLTMuNTY4IFYgNzcuNDIyIFoiCiAgICAgICAgICAgICBpZD0icGF0aDIxIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgICAgZD0ibSAxMTEuMDk3LDgwLjI1MSBoIDIuNjM5IGwgMC41MzksMi4yODkgaCAzLjU1NSB2IDIuODI4IGggLTMuMTY0IHYgNi41MDQgYyAwLDEuMzE4IDAuNTcsMS45NzkgMS43MSwxLjk3OSBoIDEuNDU0IHYgMi44MjggaCAtMy4xNzggYyAtMi4zNywwIC0zLjU1NSwtMS4yNyAtMy41NTUsLTMuODExIHoiCiAgICAgICAgICAgICBpZD0icGF0aDIyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc0OSIKICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gMTQ4LjkyMywxMjYuODE2IHYgLTEwLjc0NyBjIDAsLTIuNDc5IDEuNDA1LC0zLjcxOSA0LjIxOCwtMy43MTkgMC43NzMsMCAxLjUwMywwLjEzIDIuMTg3LDAuMzkxIHYgMS40NjUgYyAtMC42NDQsLTAuMjYxIC0xLjM3NiwtMC4zOTEgLTIuMTk2LC0wLjM5MSAtMS42MDEsMCAtMi40LDAuNzI3IC0yLjQsMi4xNzggdiAwLjU3NSBoIDMuMTcyIHYgMS40NjQgaCAtMy4xNzIgdiA4Ljc4NSB6IgogICAgICAgICAgIGlkPSJwYXRoMjMiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSAxNTkuNTUzLDEyMS42OTIgYyAwLC0zLjQxNyAxLjYyNywtNS4xMjUgNC44ODEsLTUuMTI1IDMuMjUzLDAgNC44OCwxLjcwOCA0Ljg4LDUuMTI1IDAsMy40MSAtMS42MjcsNS4xMTUgLTQuODgsNS4xMTUgLTMuMjQxLDAgLTQuODY4LC0xLjcwNSAtNC44ODEsLTUuMTE1IHogbSA0Ljg4MSwzLjY2IGMgMi4wNSwwIDMuMDc0LC0xLjIzMiAzLjA3NCwtMy42OTkgMCwtMi40MTUgLTEuMDI0LC0zLjYyMiAtMy4wNzQsLTMuNjIyIC0yLjA1MSwwIC0zLjA3NSwxLjIwNyAtMy4wNzUsMy42MjIgMCwyLjQ2NiAxLjAyNSwzLjY5OSAzLjA3NSwzLjY5OSB6IgogICAgICAgICAgIGlkPSJwYXRoMjQiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSAxNzUuOTMzLDEyNi44MTYgdiAtMTAuMjUgaCAxLjIyIGwgMC4zMjIsMS4zMDkgYyAwLjg5NywtMC44NzIgMS45NzksLTEuMzA5IDMuMjQsLTEuMzA5IHYgMS41MDMgYyAtMS4yMjMsMCAtMi4yMTYsMC40MzQgLTIuOTc3LDEuMjk5IHYgNy40NDcgeiIKICAgICAgICAgICBpZD0icGF0aDI1IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gMTk1LjI3MSwxMjMuNzIyIGMgMCwtMi4xMDIgMS4zODYsLTMuMTUzIDQuMTU4LC0zLjE1MyAwLjg5MiwwIDEuNzgyLDAuMDY1IDIuNjc1LDAuMTk1IHYgLTAuOTY2IGMgMCwtMS4xNzggLTAuOTIxLC0xLjc2OCAtMi43NjQsLTEuNzY4IC0xLjA1NCwwIC0yLjEzNCwwLjE2MyAtMy4yNCwwLjQ4OCB2IC0xLjQ2NCBjIDEuMTA1LC0wLjMyNiAyLjE4NywtMC40ODggMy4yNCwtMC40ODggMy4wNDcsMCA0LjU2OCwxLjA2MiA0LjU2OCwzLjE4MyB2IDcuMDY2IGggLTEuMDE1IGwgLTAuNjI1LC0xLjAxNSBjIC0xLjAyMiwwLjY3NyAtMi4xMzYsMS4wMTUgLTMuMzM4LDEuMDE1IC0yLjQzOSwwLjAwMSAtMy42NTksLTEuMDMgLTMuNjU5LC0zLjA5MyB6IG0gNC4xNTgsLTEuNjg5IGMgLTEuNTY4LDAgLTIuMzUzLDAuNTUzIC0yLjM1MywxLjY1OSAwLDEuMTA3IDAuNjE4LDEuNjU5IDEuODU0LDEuNjU5IDEuMjUsMCAyLjMwNywtMC4zMzIgMy4xNzIsLTAuOTk2IHYgLTIuMTI4IGMgLTAuODksLTAuMTI4IC0xLjc4MSwtMC4xOTQgLTIuNjczLC0wLjE5NCB6IgogICAgICAgICAgIGlkPSJwYXRoMjYiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSAyMTkuOTc4LDEyNi4zMjggdiAtMS41NjMgYyAxLjIwNCwwLjM5IDIuNDIxLDAuNTg1IDMuNjUsMC41ODUgMS42MzQsMCAyLjQ1LC0wLjQ4OCAyLjQ1LC0xLjQ2NCAwLC0wLjkxMSAtMC41NjksLTEuMzY3IC0xLjcwOCwtMS4zNjcgaCAtMS40NjQgYyAtMi4yMTIsMCAtMy4zMTksLTEuMDA5IC0zLjMxOSwtMy4wMjUgMCwtMS45NTMgMS40MjIsLTIuOTMgNC4yNjcsLTIuOTMgMS4yMjQsMCAyLjQzNywwLjE2MyAzLjY0MSwwLjQ4OCB2IDEuNTYyIGMgLTEuMjA0LC0wLjM5IC0yLjQxNywtMC41ODUgLTMuNjQxLC0wLjU4NSAtMS43MDUsMCAtMi41NTgsMC40ODggLTIuNTU4LDEuNDY1IDAsMC45MSAwLjUzNywxLjM2NSAxLjYxLDEuMzY1IGggMS40NjQgYyAyLjM0MywwIDMuNTE1LDEuMDEgMy41MTUsMy4wMjYgMCwxLjk1MiAtMS40MiwyLjkyOCAtNC4yNTcsMi45MjggLTEuMjMsMC4wMDMgLTIuNDQ3LC0wLjE1OSAtMy42NSwtMC40ODUgeiIKICAgICAgICAgICBpZD0icGF0aDI3IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gMjQzLjMzNywxMTYuNTY3IHYgMTAuMjUgaCAtMS4yMzkgbCAtMC4zMTMsLTEuMzA4IGMgLTEuMjQzLDAuODcyIC0yLjQ5MiwxLjMwOCAtMy43NDgsMS4zMDggLTIuMzU1LDAgLTMuNTM0LC0xLjI3MSAtMy41MzQsLTMuODE2IHYgLTYuNDM0IGggMS44MDcgdiA2LjQ2MiBjIDAsMS41MjMgMC43NTUsMi4yODQgMi4yNjUsMi4yODQgMS4wMzUsMCAyLjAyMSwtMC40MzMgMi45NTgsLTEuMjk4IHYgLTcuNDQ4IHoiCiAgICAgICAgICAgaWQ9InBhdGgyOCIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDI1MC4zNDYsMTI2LjMyOCB2IC0xLjU2MyBjIDEuMjAzLDAuMzkgMi40MjEsMC41ODUgMy42NSwwLjU4NSAxLjYzMywwIDIuNDUsLTAuNDg4IDIuNDUsLTEuNDY0IDAsLTAuOTExIC0wLjU2OSwtMS4zNjcgLTEuNzA4LC0xLjM2NyBoIC0xLjQ2NCBjIC0yLjIxMiwwIC0zLjMxOSwtMS4wMDkgLTMuMzE5LC0zLjAyNSAwLC0xLjk1MyAxLjQyMiwtMi45MyA0LjI2NywtMi45MyAxLjIyNCwwIDIuNDM3LDAuMTYzIDMuNjQxLDAuNDg4IHYgMS41NjIgYyAtMS4yMDQsLTAuMzkgLTIuNDE3LC0wLjU4NSAtMy42NDEsLTAuNTg1IC0xLjcwNSwwIC0yLjU1OCwwLjQ4OCAtMi41NTgsMS40NjUgMCwwLjkxIDAuNTM3LDEuMzY1IDEuNjEsMS4zNjUgaCAxLjQ2NCBjIDIuMzQzLDAgMy41MTQsMS4wMSAzLjUxNCwzLjAyNiAwLDEuOTUyIC0xLjQxOSwyLjkyOCAtNC4yNTYsMi45MjggLTEuMjI5LDAuMDAzIC0yLjQ0NywtMC4xNTkgLTMuNjUsLTAuNDg1IHoiCiAgICAgICAgICAgaWQ9InBhdGgyOSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDI2NC44NzEsMTE0LjkwOCBoIDEuMTMyIGwgMC4zOTEsMS42NTggaCAyLjc3MSB2IDEuNDY0IGggLTIuNDg5IHYgNS44ODcgYyAwLDAuOTU3IDAuNDEzLDEuNDM1IDEuMjQsMS40MzUgaCAxLjI1IHYgMS40NjQgaCAtMS43MTggYyAtMS43MTgsMCAtMi41NzcsLTAuOTIxIC0yLjU3NywtMi43NjMgeiIKICAgICAgICAgICBpZD0icGF0aDMwIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gMjc1LjE1LDEyMy43MjIgYyAwLC0yLjEwMiAxLjM4NiwtMy4xNTMgNC4xNTgsLTMuMTUzIDAuODkyLDAgMS43ODIsMC4wNjUgMi42NzUsMC4xOTUgdiAtMC45NjYgYyAwLC0xLjE3OCAtMC45MjEsLTEuNzY4IC0yLjc2MywtMS43NjggLTEuMDU1LDAgLTIuMTM1LDAuMTYzIC0zLjI0MSwwLjQ4OCB2IC0xLjQ2NCBjIDEuMTA1LC0wLjMyNiAyLjE4NywtMC40ODggMy4yNDEsLTAuNDg4IDMuMDQ2LDAgNC41NjcsMS4wNjIgNC41NjcsMy4xODMgdiA3LjA2NiBoIC0xLjAxNSBsIC0wLjYyNSwtMS4wMTUgYyAtMS4wMjIsMC42NzcgLTIuMTM1LDEuMDE1IC0zLjMzOCwxLjAxNSAtMi40MzksMC4wMDEgLTMuNjU5LC0xLjAzIC0zLjY1OSwtMy4wOTMgeiBtIDQuMTU4LC0xLjY4OSBjIC0xLjU2OCwwIC0yLjM1MywwLjU1MyAtMi4zNTMsMS42NTkgMCwxLjEwNyAwLjYxOCwxLjY1OSAxLjg1NCwxLjY1OSAxLjI1LDAgMi4zMDcsLTAuMzMyIDMuMTcyLC0wLjk5NiB2IC0yLjEyOCBjIC0wLjg5LC0wLjEyOCAtMS43ODEsLTAuMTk0IC0yLjY3MywtMC4xOTQgeiIKICAgICAgICAgICBpZD0icGF0aDMxIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gMjkyLjg5NiwxMTIuODU3IHYgMS43MDggaCAtMS44MDcgdiAtMS43MDggeiBtIDAsMy43MSB2IDEwLjI1IGggLTEuODA3IHYgLTEwLjI1IHoiCiAgICAgICAgICAgaWQ9InBhdGgzMiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDMwMC4xOTgsMTI2LjgxNiB2IC0xMC4yNSBoIDEuMjIyIGwgMC4zMjEsMS4zMDkgYyAxLjA0NywtMC44NzIgMi4xOTksLTEuMzA5IDMuNDU1LC0xLjMwOSAyLjU1OSwwIDMuODM1LDEuMjcyIDMuODM1LDMuODE3IHYgNi40MzMgaCAtMS44MDUgdiAtNi40NjIgYyAwLC0xLjUyMiAtMC43NTgsLTIuMjg0IC0yLjI3NSwtMi4yODQgLTEuMDMzLDAgLTIuMDE4LDAuNDM0IC0yLjk0NiwxLjI5OSB2IDcuNDQ3IHoiCiAgICAgICAgICAgaWQ9InBhdGgzMyIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDMxNS42NSwxMjMuNzIyIGMgMCwtMi4xMDIgMS4zODcsLTMuMTUzIDQuMTU4LC0zLjE1MyAwLjg5MywwIDEuNzgzLDAuMDY1IDIuNjc2LDAuMTk1IHYgLTAuOTY2IGMgMCwtMS4xNzggLTAuOTIyLC0xLjc2OCAtMi43NjQsLTEuNzY4IC0xLjA1NiwwIC0yLjEzNSwwLjE2MyAtMy4yNCwwLjQ4OCB2IC0xLjQ2NCBjIDEuMTA1LC0wLjMyNiAyLjE4NiwtMC40ODggMy4yNCwtMC40ODggMy4wNDUsMCA0LjU2NywxLjA2MiA0LjU2NywzLjE4MyB2IDcuMDY2IGggLTEuMDE2IGwgLTAuNjI1LC0xLjAxNSBjIC0xLjAyMSwwLjY3NyAtMi4xMzMsMS4wMTUgLTMuMzM4LDEuMDE1IC0yLjQzNywwLjAwMSAtMy42NTgsLTEuMDMgLTMuNjU4LC0zLjA5MyB6IG0gNC4xNTksLTEuNjg5IGMgLTEuNTY4LDAgLTIuMzUzLDAuNTUzIC0yLjM1MywxLjY1OSAwLDEuMTA3IDAuNjE3LDEuNjU5IDEuODU0LDEuNjU5IDEuMjUsMCAyLjMwNywtMC4zMzIgMy4xNzQsLTAuOTk2IHYgLTIuMTI4IGMgLTAuODkxLC0wLjEyOCAtMS43ODMsLTAuMTk0IC0yLjY3NSwtMC4xOTQgeiIKICAgICAgICAgICBpZD0icGF0aDM0IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gMzMxLjM5NiwxMTIuODU3IGggMS44MDcgdiA0LjE5OCBjIDAuNzczLC0wLjMyNiAxLjYwNCwtMC40ODggMi40ODgsLTAuNDg4IDMuMjQsMCA0Ljg2MSwxLjY0MSA0Ljg2MSw0LjkyIDAsMy41NTQgLTEuNzAxLDUuMzMgLTUuMTA1LDUuMzMgLTEuNDcxLDAgLTIuODE5LC0wLjE0IC00LjA1MSwtMC40MiB6IG0gMS44MDcsMTIuMTczIGMgMC41OTMsMC4xODggMS4zMTIsMC4yODMgMi4xNTYsMC4yODMgMi4yNzcsMCAzLjQxNiwtMS4yOTggMy40MTYsLTMuODk1IDAsLTIuMTkzIC0xLjAzMSwtMy4yOSAtMy4wOTQsLTMuMjkgLTAuOTM4LDAgLTEuNzY0LDAuMTc2IC0yLjQ3OSwwLjUyNiB6IgogICAgICAgICAgIGlkPSJwYXRoMzUiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSAzNDkuMDc0LDExMi44NTcgdiAxMy45NTkgaCAtMS44MDcgdiAtMTMuOTU5IHoiCiAgICAgICAgICAgaWQ9InBhdGgzNiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDM2MC41MDUsMTE2LjU2NyBjIDIuOTE2LDAgNC4zNzUsMS40NDEgNC4zNzUsNC4zMjQgMCwwLjQxIC0wLjAyOSwwLjg1IC0wLjA4OSwxLjMxOCBoIC03LjE5NCBjIDAsMi4wOTYgMS4yMjMsMy4xNDMgMy42NywzLjE0MyAxLjE2NiwwIDIuMTk5LC0wLjEzIDMuMTA0LC0wLjM5IHYgMS40NjQgYyAtMC45MDUsMC4yNjEgLTIuMDA2LDAuMzkxIC0zLjMwMSwwLjM5MSAtMy41MiwwIC01LjI3OSwtMS43NDcgLTUuMjc5LC01LjI0MSAwLC0zLjM0IDEuNTcsLTUuMDA5IDQuNzE0LC01LjAwOSB6IG0gLTIuOTA5LDQuMTM5IGggNS41NDUgYyAtMC4wMzksLTEuNzk2IC0wLjkxOCwtMi42OTQgLTIuNjM3LC0yLjY5NCAtMS44MiwwIC0yLjc5LDAuODk4IC0yLjkwOCwyLjY5NCB6IgogICAgICAgICAgIGlkPSJwYXRoMzciCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSAzODkuMjMyLDEyNi4yMDIgYyAtMS4yNDIsMC40MDkgLTIuNzc1LDAuNjE0IC00LjU5NiwwLjYxNCAtMy4wNTQsMCAtNC41NzgsLTEuNzc1IC00LjU3OCwtNS4zMyAwLC0zLjI3OSAxLjYxOSwtNC45MiA0Ljg1OSwtNC45MiAwLjg4NywwIDEuNzIzLDAuMTYzIDIuNTEsMC40ODggdiAtNC4xOTggaCAxLjgwNSB6IG0gLTEuODA0LC03LjU0NiBjIC0wLjcyOSwtMC4zNTEgLTEuNTYzLC0wLjUyNiAtMi41LC0wLjUyNiAtMi4wNjMsMCAtMy4wOTQsMS4wOTcgLTMuMDk0LDMuMjkgMCwyLjU5NyAxLjAzLDMuODk1IDMuMDk0LDMuODk1IDAuOTM4LDAgMS43NzEsLTAuMTI3IDIuNSwtMC4zOCB6IgogICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSAzOTguMzQxLDExMi44NTcgdiAxLjcwOCBoIC0xLjgwNiB2IC0xLjcwOCB6IG0gMCwzLjcxIHYgMTAuMjUgaCAtMS44MDYgdiAtMTAuMjUgeiIKICAgICAgICAgICBpZD0icGF0aDM5IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gNDE0LjMwMiwxMjYuODE2IGMgMCwyLjQ3NCAtMS41NywzLjcwOSAtNC43MTMsMy43MDkgLTEuMjY1LDAgLTIuMzg0LC0wLjE2MyAtMy4zNTksLTAuNDg3IHYgLTEuNDY1IGMgMC45OTYsMC4zMjYgMi4xMjEsMC40ODggMy4zNzksMC40ODggMS45MjYsMCAyLjg4OSwtMC43NDkgMi44ODksLTIuMjQ1IHYgLTAuNDg3IGMgLTAuNzY4LDAuMzI1IC0xLjU5NCwwLjQ4NyAtMi40NzksMC40ODcgLTMuMjQsMCAtNC44NTksLTEuNzI4IC00Ljg1OSwtNS4xODMgMCwtMy4zNzcgMS43MDcsLTUuMDY2IDUuMTIzLC01LjA2NiAxLjM4NywwIDIuNzI4LDAuMTQxIDQuMDIxLDAuNDIgeiBtIC0xLjgwNiwtOC41MTEgYyAtMC42MTgsLTAuMTU2IC0xLjM4MywtMC4yMzQgLTIuMjk1LC0wLjIzNCAtMi4xOCwwIC0zLjI3LDEuMTgyIC0zLjI3LDMuNTQzIDAsMi40MjggMS4wMzEsMy42NDIgMy4wOTQsMy42NDIgMC45MzgsMCAxLjc2MiwtMC4xNzUgMi40NzEsLTAuNTI3IHoiCiAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDQyMy40MDgsMTEyLjg1NyB2IDEuNzA4IGggLTEuODA1IHYgLTEuNzA4IHogbSAwLDMuNzEgdiAxMC4yNSBoIC0xLjgwNSB2IC0xMC4yNSB6IgogICAgICAgICAgIGlkPSJwYXRoNDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSA0MzAuNzEyLDExNC45MDggaCAxLjEzMyBsIDAuMzkxLDEuNjU4IGggMi43NzEgdiAxLjQ2NCBoIC0yLjQ4OCB2IDUuODg3IGMgMCwwLjk1NyAwLjQxMiwxLjQzNSAxLjIzOCwxLjQzNSBoIDEuMjUgdiAxLjQ2NCBoIC0xLjcyIGMgLTEuNzE3LDAgLTIuNTc1LC0wLjkyMSAtMi41NzUsLTIuNzYzIHoiCiAgICAgICAgICAgaWQ9InBhdGg0MiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDQ0MC45OSwxMjMuNzIyIGMgMCwtMi4xMDIgMS4zODgsLTMuMTUzIDQuMTU4LC0zLjE1MyAwLjg5MywwIDEuNzgzLDAuMDY1IDIuNjc2LDAuMTk1IHYgLTAuOTY2IGMgMCwtMS4xNzggLTAuOTIyLC0xLjc2OCAtMi43NjQsLTEuNzY4IC0xLjA1NSwwIC0yLjEzNSwwLjE2MyAtMy4yNCwwLjQ4OCB2IC0xLjQ2NCBjIDEuMTA1LC0wLjMyNiAyLjE4NywtMC40ODggMy4yNCwtMC40ODggMy4wNDUsMCA0LjU2OCwxLjA2MiA0LjU2OCwzLjE4MyB2IDcuMDY2IGggLTEuMDE3IGwgLTAuNjI1LC0xLjAxNSBjIC0xLjAyMSwwLjY3NyAtMi4xMzMsMS4wMTUgLTMuMzM4LDEuMDE1IC0yLjQzNiwwLjAwMSAtMy42NTgsLTEuMDMgLTMuNjU4LC0zLjA5MyB6IG0gNC4xNTgsLTEuNjg5IGMgLTEuNTY4LDAgLTIuMzUyLDAuNTUzIC0yLjM1MiwxLjY1OSAwLDEuMTA3IDAuNjE2LDEuNjU5IDEuODU0LDEuNjU5IDEuMjUsMCAyLjMwNywtMC4zMzIgMy4xNzQsLTAuOTk2IHYgLTIuMTI4IGMgLTAuODkyLC0wLjEyOCAtMS43ODMsLTAuMTk0IC0yLjY3NiwtMC4xOTQgeiIKICAgICAgICAgICBpZD0icGF0aDQzIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gNDU4LjYzOSwxMTIuODU3IHYgMTMuOTU5IGggLTEuODA4IHYgLTEzLjk1OSB6IgogICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSA0NzMuNzc5LDExNi41NjcgaCAxLjgyNiBsIDEuODE0LDguMDM0IDIuNjY2LC04LjAzNCBoIDEuNjI5IGwgMi44NTIsOC4wMzQgMS42MzksLTguMDM0IGggMS45MTQgbCAtMi42NzQsMTAuMjUgaCAtMS42NDkgbCAtMi45MzgsLTcuNjYzIC0yLjc5Myw3LjY2MyBoIC0xLjY4OCB6IgogICAgICAgICAgIGlkPSJwYXRoNDUiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSA0OTMuNjE1LDEyMS42OTIgYyAwLC0zLjQxNyAxLjYyNSwtNS4xMjUgNC44NzksLTUuMTI1IDMuMjU0LDAgNC44ODEsMS43MDggNC44ODEsNS4xMjUgMCwzLjQxIC0xLjYyNyw1LjExNSAtNC44ODEsNS4xMTUgLTMuMjM5LDAgLTQuODY2LC0xLjcwNSAtNC44NzksLTUuMTE1IHogbSA0Ljg3OSwzLjY2IGMgMi4wNTIsMCAzLjA3NiwtMS4yMzIgMy4wNzYsLTMuNjk5IDAsLTIuNDE1IC0xLjAyNCwtMy42MjIgLTMuMDc2LC0zLjYyMiAtMi4wNDksMCAtMy4wNzMsMS4yMDcgLTMuMDczLDMuNjIyIDAsMi40NjYgMS4wMjQsMy42OTkgMy4wNzMsMy42OTkgeiIKICAgICAgICAgICBpZD0icGF0aDQ2IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gNTA5Ljk5NCwxMjYuODE2IHYgLTEwLjI1IGggMS4yMjIgbCAwLjMyMSwxLjMwOSBjIDAuODk4LC0wLjg3MiAxLjk3OSwtMS4zMDkgMy4yNCwtMS4zMDkgdiAxLjUwMyBjIC0xLjIyMywwIC0yLjIxNSwwLjQzNCAtMi45NzcsMS4yOTkgdiA3LjQ0NyB6IgogICAgICAgICAgIGlkPSJwYXRoNDciCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSA1MjIuNjY0LDExMi44NTcgdiAxMy45NTkgaCAtMS44MDUgdiAtMTMuOTU5IHoiCiAgICAgICAgICAgaWQ9InBhdGg0OCIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDUzOC41NTcsMTI2LjIwMiBjIC0xLjI0MiwwLjQwOSAtMi43NzUsMC42MTQgLTQuNTk5LDAuNjE0IC0zLjA1MywwIC00LjU3NywtMS43NzUgLTQuNTc3LC01LjMzIDAsLTMuMjc5IDEuNjIsLTQuOTIgNC44NiwtNC45MiAwLjg4NiwwIDEuNzIyLDAuMTYzIDIuNTA4LDAuNDg4IHYgLTQuMTk4IGggMS44MDggeiBtIC0xLjgwNywtNy41NDYgYyAtMC43MjksLTAuMzUxIC0xLjU2MSwtMC41MjYgLTIuNDk3LC0wLjUyNiAtMi4wNjMsMCAtMy4wOTUsMS4wOTcgLTMuMDk1LDMuMjkgMCwyLjU5NyAxLjAzMSwzLjg5NSAzLjA5NSwzLjg5NSAwLjkzOCwwIDEuNzcsLTAuMTI3IDIuNDk3LC0wLjM4IHoiCiAgICAgICAgICAgaWQ9InBhdGg0OSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K' /> + </a> + </td> + </tr> + <tr> + <td bgcolor='#ffffff' style='padding:20px 20px;text-align:left'> + <p>Dear NAME,</p> + <p>You are successfully registered for the following event: <i>EVENT</i></p> + <ul> + <li>Date: DATE</li> + <li>Time: TIME</li> + <li>Place: PLACE</li> + </ul> + <p>See you there,</p> + <p>TheAlternative</p> + </td> + </tr> + <tr> + <td bgcolor='#ffffff' style='color: #bbb;text-align:center;padding-top:1em;border-top: 1px dashed #bbb'> + TheAlternative, CAB E 14, Universitätstrasse 6, 8092 Zürich + </td> + </tr> + </table> + </div> + </body> + </html> + `, + reminderText: ` + <html> + <body> + <div> + <table border='0' cellpadding='5' cellspacing='0' width='100%' style='max-width:600px' align='center'> + <tr> + <td + align='center' + bgcolor='#ffffff' + style="padding: 40px 0 30px 0;border-bottom: 1px dashed #bbb"" + > + <a + href='https://thealternative.ethz.ch' + target='_blank' + style='text-decoration: none;' + > + <img alt='TheAlternative Logo' style='width: 40%;' src='data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMTI1LjYxMDk0bW0iCiAgIGhlaWdodD0iMTcuNzYzMzNtbSIKICAgdmlld0JveD0iMCAwIDEyNS42MTA5NCAxNy43NjMzMyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4zICgwZTE1MGVkNmM0LCAyMDIzLTA3LTIxKSIKICAgc29kaXBvZGk6ZG9jbmFtZT0ibG9nby5zdmciCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJuYW1lZHZpZXcxIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzAwMDAwMCIKICAgICBib3JkZXJvcGFjaXR5PSIwLjI1IgogICAgIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0idHJ1ZSIKICAgICBpbmtzY2FwZTpkZXNrY29sb3I9IiNkMWQxZDEiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOnpvb209IjEuODQ2OTQ5NCIKICAgICBpbmtzY2FwZTpjeD0iMjMwLjY1MDYxIgogICAgIGlua3NjYXBlOmN5PSItMzguMTcxMDUxIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTY4MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI5ODEiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJnMTkiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczEiIC8+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQyLjA2ODc1LC0xMzkuNykiPgogICAgPGcKICAgICAgIGlkPSJnNTAiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjI2NDU4MzMzLDAsMCwwLjI2NDU4MzMzLDI1LjE4NjQ4MSwxMjIuOTI4NTkpIj4KICAgICAgPGcKICAgICAgICAgaWQ9ImcxOSI+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzIiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICAgIGQ9Im0gMTY2LjYxNiw2My4zODkgdiA1LjkyOSBoIC0xMC41NjggdiAzMC45MzQgaCAtNi44MzEgViA2OS4zMTggaCAtMTAuNTY4IHYgLTUuOTI5IHoiCiAgICAgICAgICAgICBpZD0icGF0aDEiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMyIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIj4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgICAgZD0iTSAxNzAuODc0LDEwMC4yNSBWIDYzLjM4OSBoIDYuODMxIHYgMTMuMjUgYyAyLjEzMSwtMi4zMDIgNC44NTQsLTMuNDU0IDguMTcxLC0zLjQ1NCA2LjQxLDAgOS42MTUsMy4zMzQgOS42MTUsMTAuMDAyIHYgMTcuMDY0IEggMTg4LjY2IFYgODMuMTg2IGMgMCwtMi45OSAtMS40ODcsLTQuNDg0IC00LjQ1OSwtNC40ODQgLTIuMjE3LDAgLTQuMzgyLDAuODg1IC02LjQ5NiwyLjY1NCB2IDE4Ljg5NiB6IgogICAgICAgICAgICAgaWQ9InBhdGgyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzQiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICAgIGQ9Im0gMjE0LjQxNSw3My4xODQgYyA4LjIxNCwwIDEyLjMyMiw0LjE5MyAxMi4zMjIsMTIuNTggMCwxLjExNyAtMC4wNzgsMi4yMzQgLTAuMjMyLDMuMzUxIGggLTE3Ljk2NyBjIDAsMy44MTUgMi44MDEsNS43MjQgOC40MDQsNS43MjQgMi43MzEsMCA1LjQ2NCwtMC4yNTggOC4xOTcsLTAuNzczIHYgNS40MTMgYyAtMi4zOSwwLjUxNyAtNS4yOTMsMC43NzMgLTguNzEyLDAuNzczIC05LjgxMywwIC0xNC43MiwtNC42MTQgLTE0LjcyLC0xMy44NDIgLTAuMDAxLC04LjgxOCA0LjIzNSwtMTMuMjI2IDEyLjcwOCwtMTMuMjI2IHogbSAtNS44NzgsMTEuMTg4IGggMTEuNTQ4IHYgLTAuMjA2IGMgMCwtMy43NDYgLTEuODkxLC01LjYyIC01LjY3MSwtNS42MiAtMy42MDgsMCAtNS41NjcsMS45NDIgLTUuODc3LDUuODI2IHoiCiAgICAgICAgICAgICBpZD0icGF0aDMiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMTQiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2YyOGEyMDtmaWxsLW9wYWNpdHk6MSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2YxOGEyMSIKICAgICAgICAgICAgIGQ9Im0gMjM2LjcxMywxMDAuMzE2IGggLTcuMDExIGwgMTUuNjQ3LC0zNi44NjEgaCA3LjM0NiBsIDE1Ljk4MiwzNi44NjEgaCAtNy4zNDcgbCAtNC4yMDIsLTEwLjA1MyBoIC0xMi4yNDUgbCAyLjM0NywtNS45MjkgaCA3LjQyNCBsIC01LjgsLTEzLjg0MiB6IgogICAgICAgICAgICAgaWQ9InBhdGg0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2YyOGEyMDtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBmaWxsPSIjZjE4YTIxIgogICAgICAgICAgICAgZD0ibSAyODAuMzc4LDYzLjQ1NSB2IDM2Ljg2MSBoIC02LjgzMSBWIDYzLjQ1NSBaIgogICAgICAgICAgICAgaWQ9InBhdGg1IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6I2YyOGEyMDtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBmaWxsPSIjZjE4YTIxIgogICAgICAgICAgICAgZD0ibSAyODcuNDM5LDY4Ljg2OCBoIDUuMDUyIGwgMS4wMzEsNC4zODIgaCA2LjgwNSB2IDUuNDE0IGggLTYuMDU4IHYgMTIuNDQ5IGMgMCwyLjUyNiAxLjA5MSwzLjc5IDMuMjczLDMuNzkgaCAyLjc4NCB2IDUuNDEzIGggLTYuMDgzIGMgLTQuNTM3LDAgLTYuODA1LC0yLjQzMiAtNi44MDUsLTcuMjk1IFYgNjguODY4IFoiCiAgICAgICAgICAgICBpZD0icGF0aDYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZjI4YTIwO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGZpbGw9IiNmMThhMjEiCiAgICAgICAgICAgICBkPSJtIDMxNy4zOTEsNzMuMjUgYyA4LjIxMywwIDEyLjMyLDQuMTkyIDEyLjMyLDEyLjU4IDAsMS4xMTYgLTAuMDc2LDIuMjMzIC0wLjIzLDMuMzUxIGggLTE3Ljk2NyBjIDAsMy44MTUgMi44MDEsNS43MjMgOC40MDEsNS43MjMgMi43MzIsMCA1LjQ2NiwtMC4yNTggOC4xOTcsLTAuNzcyIHYgNS40MTMgYyAtMi4zODksMC41MTYgLTUuMjkzLDAuNzcyIC04LjcxMywwLjc3MiAtOS44MTMsMCAtMTQuNzE4LC00LjYxMyAtMTQuNzE4LC0xMy44NDIgMC4wMDEsLTguODE3IDQuMjM4LC0xMy4yMjUgMTIuNzEsLTEzLjIyNSB6IG0gLTUuODc3LDExLjE4OCBoIDExLjU0NyB2IC0wLjIwNiBjIDAsLTMuNzQ2IC0xLjg5MSwtNS42MiAtNS42NywtNS42MiAtMy42MSwwIC01LjU2OSwxLjk0MiAtNS44NzcsNS44MjYgeiIKICAgICAgICAgICAgIGlkPSJwYXRoNyIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmMjhhMjA7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2YxOGEyMSIKICAgICAgICAgICAgIGQ9Ik0gMzM1Ljg0NCwxMDAuMzE2IFYgNzMuMjUgaCA1LjI4NSBsIDAuODUsMy40NTQgYyAyLjM3MSwtMi4zMDMgNC44ODEsLTMuNDU0IDcuNTI3LC0zLjQ1NCB2IDUuNTE3IGMgLTIuNTQzLDAgLTQuODIsMS4wNTcgLTYuODMyLDMuMTcgdiAxOC4zNzkgeiIKICAgICAgICAgICAgIGlkPSJwYXRoOCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmMjhhMjA7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2YxOGEyMSIKICAgICAgICAgICAgIGQ9Ik0gMzU0LjM3OCwxMDAuMzE2IFYgNzMuMjUgaCA1LjI4MiBsIDAuODUzLDMuOTcgYyAyLjU5NCwtMi42NDYgNS41NTEsLTMuOTcgOC44NjcsLTMuOTcgNi40MDksMCA5LjYxNCwzLjMzNCA5LjYxNCwxMC4wMDIgdiAxNy4wNjMgaCAtNi44MzIgViA4My4yNTIgYyAwLC0yLjk5IC0xLjQ4NSwtNC40ODUgLTQuNDU5LC00LjQ4NSAtMi4yMTcsMCAtNC4zODMsMC44ODUgLTYuNDk2LDIuNjU1IHYgMTguODk1IHoiCiAgICAgICAgICAgICBpZD0icGF0aDkiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZjI4YTIwO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGZpbGw9IiNmMThhMjEiCiAgICAgICAgICAgICBkPSJtIDM4NS4xNTIsOTEuODg3IGMgMCwtNS4zNzggMy45MTgsLTguMDY4IDExLjc1NCwtOC4wNjggMS44MzgsMCAzLjY3OSwwLjE3MiA1LjUxNywwLjUxNyB2IC0yLjAzNyBjIDAsLTIuNDIzIC0xLjc0NCwtMy42MzQgLTUuMjMyLC0zLjYzNCAtMi45NTUsMCAtNi4yMzgsMC40MyAtOS44NDgsMS4yODkgViA3NC41NCBjIDMuNjA4LC0wLjg1OSA2Ljg5MywtMS4yODkgOS44NDgsLTEuMjg5IDguMDQzLDAgMTIuMDY0LDIuOTc0IDEyLjA2NCw4LjkxOSB2IDE4LjE0NiBoIC0zLjk3MiBsIC0yLjQyMiwtMi40MjMgYyAtMi4zNTQsMS42MTUgLTQuOTQ5LDIuNDIzIC03Ljc4NSwyLjQyMyAtNi42MTYsMCAtOS45MjQsLTIuODA5IC05LjkyNCwtOC40MjkgeiBtIDExLjc1NCwtMy40MjggYyAtMy4yODMsMCAtNC45MjQsMS4xMTcgLTQuOTI0LDMuMzUxIDAsMi40MDYgMS4zNzUsMy42MDkgNC4xMjUsMy42MDkgMi4yNjgsMCA0LjM3MywtMC43MDUgNi4zMTQsLTIuMTE0IHYgLTQuMzMxIGMgLTEuNzE4LC0wLjM0MyAtMy41NTYsLTAuNTE1IC01LjUxNSwtMC41MTUgeiIKICAgICAgICAgICAgIGlkPSJwYXRoMTAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZjI4YTIwO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGZpbGw9IiNmMThhMjEiCiAgICAgICAgICAgICBkPSJtIDQxNi4zMTQsNjguODY4IGggNS4wNTMgbCAxLjAzMSw0LjM4MiBoIDYuODA1IHYgNS40MTQgaCAtNi4wNTcgdiAxMi40NDkgYyAwLDIuNTI2IDEuMDksMy43OSAzLjI3MywzLjc5IGggMi43ODIgdiA1LjQxMyBoIC02LjA4NCBjIC00LjUzNywwIC02LjgwNSwtMi40MzIgLTYuODA1LC03LjI5NSB6IgogICAgICAgICAgICAgaWQ9InBhdGgxMSIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmMjhhMjA7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2YxOGEyMSIKICAgICAgICAgICAgIGQ9Im0gNDQxLjY3Nyw2My40NTUgdiA1LjQxNCBoIC02LjgzIHYgLTUuNDE0IHogbSAwLDkuNzk1IHYgMjcuMDY1IGggLTYuODMgViA3My4yNSBaIgogICAgICAgICAgICAgaWQ9InBhdGgxMiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmMjhhMjA7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZmlsbD0iI2YxOGEyMSIKICAgICAgICAgICAgIGQ9Im0gNDQ1LjkwMiw3My4yNSBoIDcuMjE3IGwgNi41NzQsMTguOTIxIDYuODMsLTE4LjkyMSBoIDcuMjE5IGwgLTExLjAwOCwyNy4wNjUgaCAtNi40OTYgeiIKICAgICAgICAgICAgIGlkPSJwYXRoMTMiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZjI4YTIwO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGZpbGw9IiNmMThhMjEiCiAgICAgICAgICAgICBkPSJtIDQ4OS4zODcsNzMuMjUgYyA4LjIxMywwIDEyLjMxOSw0LjE5MiAxMi4zMTksMTIuNTggMCwxLjExNiAtMC4wNzUsMi4yMzMgLTAuMjI5LDMuMzUxIEggNDgzLjUxIGMgMCwzLjgxNSAyLjgwMSw1LjcyMyA4LjQwMSw1LjcyMyAyLjczMiwwIDUuNDY2LC0wLjI1OCA4LjE5NywtMC43NzIgdiA1LjQxMyBjIC0yLjM4OSwwLjUxNiAtNS4yOTMsMC43NzIgLTguNzEzLDAuNzcyIC05LjgxMywwIC0xNC43MTksLTQuNjEzIC0xNC43MTksLTEzLjg0MiAwLjAwMiwtOC44MTcgNC4yMzgsLTEzLjIyNSAxMi43MTEsLTEzLjIyNSB6IG0gLTUuODc3LDExLjE4OCBoIDExLjU0NyB2IC0wLjIwNiBjIDAsLTMuNzQ2IC0xLjg5MiwtNS42MiAtNS42NywtNS42MiAtMy42MSwwIC01LjU2OSwxLjk0MiAtNS44NzcsNS44MjYgeiIKICAgICAgICAgICAgIGlkPSJwYXRoMTQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZjI4YTIwO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNDA1MDU2MSwwLDAsMC40MDUwNTYxLDUxMy43MjAxNiwxNTEuMDI2NjgpIgogICAgICAgICAgIGlkPSJnMTgiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSI+CiAgICAgICAgICA8ZwogICAgICAgICAgICAgaWQ9ImcxNyIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgICAgICBkPSJtIC0xMi4wMDMsLTEzMy4wMTQgdiA3LjgyMSBoIC04LjQ2IHYgLTcuODIxIHoiCiAgICAgICAgICAgICAgIGlkPSJwYXRoMTUiCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgICAgIGQ9Im0gMjIuNDcxLC0xMjYuMTUgYyAtMi43NjgsMC42MzYgLTUuNjM5LDAuOTU3IC04LjYxOSwwLjk1NyAtMTEuOTIyLDAgLTE3Ljg3NywtNS43OTggLTE3Ljg3NywtMTcuNCAwLC0xMC43NDggNS45NTUsLTE2LjEyMiAxNy44NzcsLTE2LjEyMiAyLjk4LDAgNS44NTQsMC4zMjEgOC42MTksMC45NiB2IDYuNzAyIGMgLTIuNzY4LC0wLjYzOSAtNS40MjcsLTAuOTU1IC03Ljk4LC0wLjk1NSAtNi43MDUsMCAtMTAuMDU2LDMuMTM5IC0xMC4wNTYsOS40MTUgMCw3LjEzMiAzLjM1MSwxMC42OTcgMTAuMDU2LDEwLjY5NyAyLjU1MywwIDUuMjEzLC0wLjMyMSA3Ljk4LC0wLjk2IHoiCiAgICAgICAgICAgICAgIGlkPSJwYXRoMTYiCiAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgICAgIGQ9Im0gMzAuNjA4LC0xMjUuMTkzIHYgLTQ1LjY1MSBoIDguNDYgdiAxNi40MDkgYyAyLjY0LC0yLjg1MiA2LjAxMywtNC4yNzkgMTAuMTIxLC00LjI3OSA3LjkzNywwIDExLjkwNSw0LjEzIDExLjkwNSwxMi4zODcgdiAyMS4xMzQgaCAtOC40NTggdiAtMjEuMTM0IGMgMCwtMy43MDMgLTEuODQyLC01LjU1NSAtNS41MjYsLTUuNTU1IC0yLjc0NCwwIC01LjQyNSwxLjA5NyAtOC4wNDMsMy4yODkgdiAyMy40MDEgaCAtOC40NTkgeiIKICAgICAgICAgICAgICAgaWQ9InBhdGgxNyIKICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9ImcyMyIKICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gNzUuMzU4LDYzLjM4OSBjIC02LjM5OSwwIC0xMS41NTEsNS4xNTIgLTExLjU1MSwxMS41NTEgdiA0MC4yODggYyAwLDYuMzk4IDUuMTUxLDExLjU1IDExLjU1MSwxMS41NSBoIDQwLjI4NyBjIDYuMzk4LDAgMTEuNTUsLTUuMTUxIDExLjU1LC0xMS41NSBWIDc0LjkzOSBjIDAsLTYuMzk4IC01LjE1MSwtMTEuNTUxIC0xMS41NSwtMTEuNTUxIHogbSAxLjE4MiwzLjgyMyBoIDM2LjMyNSBjIDUuODIxLDAgMTAuNTA3LDQuNjg2IDEwLjUwNywxMC41MDcgdiAzNi4zMjUgYyAwLDUuODIgLTQuNjg2LDEwLjUwNyAtMTAuNTA3LDEwLjUwNyBIIDc2LjU0IGMgLTUuODIyLDAgLTEwLjUwNywtNC42ODcgLTEwLjUwNywtMTAuNTA3IFYgNzcuNzIgYyAwLC01LjgyMiA0LjY4NSwtMTAuNTA4IDEwLjUwNywtMTAuNTA4IHoiCiAgICAgICAgICAgaWQ9InBhdGgxOSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9ImcyMiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIj4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgICAgZD0ibSA4NS42NDcsOTYuNjc4IGggLTMuNjYzIGwgOC4xNzQsLTE5LjI1NiBoIDMuODM3IGwgOC4zNSwxOS4yNTYgaCAtMy44MzggbCAtMi4xOTQsLTUuMjUxIGggLTYuMzk2IGwgMS4yMjYsLTMuMDk3IGggMy44NzggbCAtMy4wMywtNy4yMzEgeiIKICAgICAgICAgICAgIGlkPSJwYXRoMjAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgICBkPSJtIDEwNy45MzMsNzcuNDIyIHYgMTkuMjU2IGggLTMuNTY4IFYgNzcuNDIyIFoiCiAgICAgICAgICAgICBpZD0icGF0aDIxIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgICAgZD0ibSAxMTEuMDk3LDgwLjI1MSBoIDIuNjM5IGwgMC41MzksMi4yODkgaCAzLjU1NSB2IDIuODI4IGggLTMuMTY0IHYgNi41MDQgYyAwLDEuMzE4IDAuNTcsMS45NzkgMS43MSwxLjk3OSBoIDEuNDU0IHYgMi44MjggaCAtMy4xNzggYyAtMi4zNywwIC0zLjU1NSwtMS4yNyAtMy41NTUsLTMuODExIHoiCiAgICAgICAgICAgICBpZD0icGF0aDIyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc0OSIKICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gMTQ4LjkyMywxMjYuODE2IHYgLTEwLjc0NyBjIDAsLTIuNDc5IDEuNDA1LC0zLjcxOSA0LjIxOCwtMy43MTkgMC43NzMsMCAxLjUwMywwLjEzIDIuMTg3LDAuMzkxIHYgMS40NjUgYyAtMC42NDQsLTAuMjYxIC0xLjM3NiwtMC4zOTEgLTIuMTk2LC0wLjM5MSAtMS42MDEsMCAtMi40LDAuNzI3IC0yLjQsMi4xNzggdiAwLjU3NSBoIDMuMTcyIHYgMS40NjQgaCAtMy4xNzIgdiA4Ljc4NSB6IgogICAgICAgICAgIGlkPSJwYXRoMjMiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSAxNTkuNTUzLDEyMS42OTIgYyAwLC0zLjQxNyAxLjYyNywtNS4xMjUgNC44ODEsLTUuMTI1IDMuMjUzLDAgNC44OCwxLjcwOCA0Ljg4LDUuMTI1IDAsMy40MSAtMS42MjcsNS4xMTUgLTQuODgsNS4xMTUgLTMuMjQxLDAgLTQuODY4LC0xLjcwNSAtNC44ODEsLTUuMTE1IHogbSA0Ljg4MSwzLjY2IGMgMi4wNSwwIDMuMDc0LC0xLjIzMiAzLjA3NCwtMy42OTkgMCwtMi40MTUgLTEuMDI0LC0zLjYyMiAtMy4wNzQsLTMuNjIyIC0yLjA1MSwwIC0zLjA3NSwxLjIwNyAtMy4wNzUsMy42MjIgMCwyLjQ2NiAxLjAyNSwzLjY5OSAzLjA3NSwzLjY5OSB6IgogICAgICAgICAgIGlkPSJwYXRoMjQiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSAxNzUuOTMzLDEyNi44MTYgdiAtMTAuMjUgaCAxLjIyIGwgMC4zMjIsMS4zMDkgYyAwLjg5NywtMC44NzIgMS45NzksLTEuMzA5IDMuMjQsLTEuMzA5IHYgMS41MDMgYyAtMS4yMjMsMCAtMi4yMTYsMC40MzQgLTIuOTc3LDEuMjk5IHYgNy40NDcgeiIKICAgICAgICAgICBpZD0icGF0aDI1IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gMTk1LjI3MSwxMjMuNzIyIGMgMCwtMi4xMDIgMS4zODYsLTMuMTUzIDQuMTU4LC0zLjE1MyAwLjg5MiwwIDEuNzgyLDAuMDY1IDIuNjc1LDAuMTk1IHYgLTAuOTY2IGMgMCwtMS4xNzggLTAuOTIxLC0xLjc2OCAtMi43NjQsLTEuNzY4IC0xLjA1NCwwIC0yLjEzNCwwLjE2MyAtMy4yNCwwLjQ4OCB2IC0xLjQ2NCBjIDEuMTA1LC0wLjMyNiAyLjE4NywtMC40ODggMy4yNCwtMC40ODggMy4wNDcsMCA0LjU2OCwxLjA2MiA0LjU2OCwzLjE4MyB2IDcuMDY2IGggLTEuMDE1IGwgLTAuNjI1LC0xLjAxNSBjIC0xLjAyMiwwLjY3NyAtMi4xMzYsMS4wMTUgLTMuMzM4LDEuMDE1IC0yLjQzOSwwLjAwMSAtMy42NTksLTEuMDMgLTMuNjU5LC0zLjA5MyB6IG0gNC4xNTgsLTEuNjg5IGMgLTEuNTY4LDAgLTIuMzUzLDAuNTUzIC0yLjM1MywxLjY1OSAwLDEuMTA3IDAuNjE4LDEuNjU5IDEuODU0LDEuNjU5IDEuMjUsMCAyLjMwNywtMC4zMzIgMy4xNzIsLTAuOTk2IHYgLTIuMTI4IGMgLTAuODksLTAuMTI4IC0xLjc4MSwtMC4xOTQgLTIuNjczLC0wLjE5NCB6IgogICAgICAgICAgIGlkPSJwYXRoMjYiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSAyMTkuOTc4LDEyNi4zMjggdiAtMS41NjMgYyAxLjIwNCwwLjM5IDIuNDIxLDAuNTg1IDMuNjUsMC41ODUgMS42MzQsMCAyLjQ1LC0wLjQ4OCAyLjQ1LC0xLjQ2NCAwLC0wLjkxMSAtMC41NjksLTEuMzY3IC0xLjcwOCwtMS4zNjcgaCAtMS40NjQgYyAtMi4yMTIsMCAtMy4zMTksLTEuMDA5IC0zLjMxOSwtMy4wMjUgMCwtMS45NTMgMS40MjIsLTIuOTMgNC4yNjcsLTIuOTMgMS4yMjQsMCAyLjQzNywwLjE2MyAzLjY0MSwwLjQ4OCB2IDEuNTYyIGMgLTEuMjA0LC0wLjM5IC0yLjQxNywtMC41ODUgLTMuNjQxLC0wLjU4NSAtMS43MDUsMCAtMi41NTgsMC40ODggLTIuNTU4LDEuNDY1IDAsMC45MSAwLjUzNywxLjM2NSAxLjYxLDEuMzY1IGggMS40NjQgYyAyLjM0MywwIDMuNTE1LDEuMDEgMy41MTUsMy4wMjYgMCwxLjk1MiAtMS40MiwyLjkyOCAtNC4yNTcsMi45MjggLTEuMjMsMC4wMDMgLTIuNDQ3LC0wLjE1OSAtMy42NSwtMC40ODUgeiIKICAgICAgICAgICBpZD0icGF0aDI3IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gMjQzLjMzNywxMTYuNTY3IHYgMTAuMjUgaCAtMS4yMzkgbCAtMC4zMTMsLTEuMzA4IGMgLTEuMjQzLDAuODcyIC0yLjQ5MiwxLjMwOCAtMy43NDgsMS4zMDggLTIuMzU1LDAgLTMuNTM0LC0xLjI3MSAtMy41MzQsLTMuODE2IHYgLTYuNDM0IGggMS44MDcgdiA2LjQ2MiBjIDAsMS41MjMgMC43NTUsMi4yODQgMi4yNjUsMi4yODQgMS4wMzUsMCAyLjAyMSwtMC40MzMgMi45NTgsLTEuMjk4IHYgLTcuNDQ4IHoiCiAgICAgICAgICAgaWQ9InBhdGgyOCIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDI1MC4zNDYsMTI2LjMyOCB2IC0xLjU2MyBjIDEuMjAzLDAuMzkgMi40MjEsMC41ODUgMy42NSwwLjU4NSAxLjYzMywwIDIuNDUsLTAuNDg4IDIuNDUsLTEuNDY0IDAsLTAuOTExIC0wLjU2OSwtMS4zNjcgLTEuNzA4LC0xLjM2NyBoIC0xLjQ2NCBjIC0yLjIxMiwwIC0zLjMxOSwtMS4wMDkgLTMuMzE5LC0zLjAyNSAwLC0xLjk1MyAxLjQyMiwtMi45MyA0LjI2NywtMi45MyAxLjIyNCwwIDIuNDM3LDAuMTYzIDMuNjQxLDAuNDg4IHYgMS41NjIgYyAtMS4yMDQsLTAuMzkgLTIuNDE3LC0wLjU4NSAtMy42NDEsLTAuNTg1IC0xLjcwNSwwIC0yLjU1OCwwLjQ4OCAtMi41NTgsMS40NjUgMCwwLjkxIDAuNTM3LDEuMzY1IDEuNjEsMS4zNjUgaCAxLjQ2NCBjIDIuMzQzLDAgMy41MTQsMS4wMSAzLjUxNCwzLjAyNiAwLDEuOTUyIC0xLjQxOSwyLjkyOCAtNC4yNTYsMi45MjggLTEuMjI5LDAuMDAzIC0yLjQ0NywtMC4xNTkgLTMuNjUsLTAuNDg1IHoiCiAgICAgICAgICAgaWQ9InBhdGgyOSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDI2NC44NzEsMTE0LjkwOCBoIDEuMTMyIGwgMC4zOTEsMS42NTggaCAyLjc3MSB2IDEuNDY0IGggLTIuNDg5IHYgNS44ODcgYyAwLDAuOTU3IDAuNDEzLDEuNDM1IDEuMjQsMS40MzUgaCAxLjI1IHYgMS40NjQgaCAtMS43MTggYyAtMS43MTgsMCAtMi41NzcsLTAuOTIxIC0yLjU3NywtMi43NjMgeiIKICAgICAgICAgICBpZD0icGF0aDMwIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gMjc1LjE1LDEyMy43MjIgYyAwLC0yLjEwMiAxLjM4NiwtMy4xNTMgNC4xNTgsLTMuMTUzIDAuODkyLDAgMS43ODIsMC4wNjUgMi42NzUsMC4xOTUgdiAtMC45NjYgYyAwLC0xLjE3OCAtMC45MjEsLTEuNzY4IC0yLjc2MywtMS43NjggLTEuMDU1LDAgLTIuMTM1LDAuMTYzIC0zLjI0MSwwLjQ4OCB2IC0xLjQ2NCBjIDEuMTA1LC0wLjMyNiAyLjE4NywtMC40ODggMy4yNDEsLTAuNDg4IDMuMDQ2LDAgNC41NjcsMS4wNjIgNC41NjcsMy4xODMgdiA3LjA2NiBoIC0xLjAxNSBsIC0wLjYyNSwtMS4wMTUgYyAtMS4wMjIsMC42NzcgLTIuMTM1LDEuMDE1IC0zLjMzOCwxLjAxNSAtMi40MzksMC4wMDEgLTMuNjU5LC0xLjAzIC0zLjY1OSwtMy4wOTMgeiBtIDQuMTU4LC0xLjY4OSBjIC0xLjU2OCwwIC0yLjM1MywwLjU1MyAtMi4zNTMsMS42NTkgMCwxLjEwNyAwLjYxOCwxLjY1OSAxLjg1NCwxLjY1OSAxLjI1LDAgMi4zMDcsLTAuMzMyIDMuMTcyLC0wLjk5NiB2IC0yLjEyOCBjIC0wLjg5LC0wLjEyOCAtMS43ODEsLTAuMTk0IC0yLjY3MywtMC4xOTQgeiIKICAgICAgICAgICBpZD0icGF0aDMxIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gMjkyLjg5NiwxMTIuODU3IHYgMS43MDggaCAtMS44MDcgdiAtMS43MDggeiBtIDAsMy43MSB2IDEwLjI1IGggLTEuODA3IHYgLTEwLjI1IHoiCiAgICAgICAgICAgaWQ9InBhdGgzMiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDMwMC4xOTgsMTI2LjgxNiB2IC0xMC4yNSBoIDEuMjIyIGwgMC4zMjEsMS4zMDkgYyAxLjA0NywtMC44NzIgMi4xOTksLTEuMzA5IDMuNDU1LC0xLjMwOSAyLjU1OSwwIDMuODM1LDEuMjcyIDMuODM1LDMuODE3IHYgNi40MzMgaCAtMS44MDUgdiAtNi40NjIgYyAwLC0xLjUyMiAtMC43NTgsLTIuMjg0IC0yLjI3NSwtMi4yODQgLTEuMDMzLDAgLTIuMDE4LDAuNDM0IC0yLjk0NiwxLjI5OSB2IDcuNDQ3IHoiCiAgICAgICAgICAgaWQ9InBhdGgzMyIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDMxNS42NSwxMjMuNzIyIGMgMCwtMi4xMDIgMS4zODcsLTMuMTUzIDQuMTU4LC0zLjE1MyAwLjg5MywwIDEuNzgzLDAuMDY1IDIuNjc2LDAuMTk1IHYgLTAuOTY2IGMgMCwtMS4xNzggLTAuOTIyLC0xLjc2OCAtMi43NjQsLTEuNzY4IC0xLjA1NiwwIC0yLjEzNSwwLjE2MyAtMy4yNCwwLjQ4OCB2IC0xLjQ2NCBjIDEuMTA1LC0wLjMyNiAyLjE4NiwtMC40ODggMy4yNCwtMC40ODggMy4wNDUsMCA0LjU2NywxLjA2MiA0LjU2NywzLjE4MyB2IDcuMDY2IGggLTEuMDE2IGwgLTAuNjI1LC0xLjAxNSBjIC0xLjAyMSwwLjY3NyAtMi4xMzMsMS4wMTUgLTMuMzM4LDEuMDE1IC0yLjQzNywwLjAwMSAtMy42NTgsLTEuMDMgLTMuNjU4LC0zLjA5MyB6IG0gNC4xNTksLTEuNjg5IGMgLTEuNTY4LDAgLTIuMzUzLDAuNTUzIC0yLjM1MywxLjY1OSAwLDEuMTA3IDAuNjE3LDEuNjU5IDEuODU0LDEuNjU5IDEuMjUsMCAyLjMwNywtMC4zMzIgMy4xNzQsLTAuOTk2IHYgLTIuMTI4IGMgLTAuODkxLC0wLjEyOCAtMS43ODMsLTAuMTk0IC0yLjY3NSwtMC4xOTQgeiIKICAgICAgICAgICBpZD0icGF0aDM0IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gMzMxLjM5NiwxMTIuODU3IGggMS44MDcgdiA0LjE5OCBjIDAuNzczLC0wLjMyNiAxLjYwNCwtMC40ODggMi40ODgsLTAuNDg4IDMuMjQsMCA0Ljg2MSwxLjY0MSA0Ljg2MSw0LjkyIDAsMy41NTQgLTEuNzAxLDUuMzMgLTUuMTA1LDUuMzMgLTEuNDcxLDAgLTIuODE5LC0wLjE0IC00LjA1MSwtMC40MiB6IG0gMS44MDcsMTIuMTczIGMgMC41OTMsMC4xODggMS4zMTIsMC4yODMgMi4xNTYsMC4yODMgMi4yNzcsMCAzLjQxNiwtMS4yOTggMy40MTYsLTMuODk1IDAsLTIuMTkzIC0xLjAzMSwtMy4yOSAtMy4wOTQsLTMuMjkgLTAuOTM4LDAgLTEuNzY0LDAuMTc2IC0yLjQ3OSwwLjUyNiB6IgogICAgICAgICAgIGlkPSJwYXRoMzUiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSAzNDkuMDc0LDExMi44NTcgdiAxMy45NTkgaCAtMS44MDcgdiAtMTMuOTU5IHoiCiAgICAgICAgICAgaWQ9InBhdGgzNiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDM2MC41MDUsMTE2LjU2NyBjIDIuOTE2LDAgNC4zNzUsMS40NDEgNC4zNzUsNC4zMjQgMCwwLjQxIC0wLjAyOSwwLjg1IC0wLjA4OSwxLjMxOCBoIC03LjE5NCBjIDAsMi4wOTYgMS4yMjMsMy4xNDMgMy42NywzLjE0MyAxLjE2NiwwIDIuMTk5LC0wLjEzIDMuMTA0LC0wLjM5IHYgMS40NjQgYyAtMC45MDUsMC4yNjEgLTIuMDA2LDAuMzkxIC0zLjMwMSwwLjM5MSAtMy41MiwwIC01LjI3OSwtMS43NDcgLTUuMjc5LC01LjI0MSAwLC0zLjM0IDEuNTcsLTUuMDA5IDQuNzE0LC01LjAwOSB6IG0gLTIuOTA5LDQuMTM5IGggNS41NDUgYyAtMC4wMzksLTEuNzk2IC0wLjkxOCwtMi42OTQgLTIuNjM3LC0yLjY5NCAtMS44MiwwIC0yLjc5LDAuODk4IC0yLjkwOCwyLjY5NCB6IgogICAgICAgICAgIGlkPSJwYXRoMzciCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSAzODkuMjMyLDEyNi4yMDIgYyAtMS4yNDIsMC40MDkgLTIuNzc1LDAuNjE0IC00LjU5NiwwLjYxNCAtMy4wNTQsMCAtNC41NzgsLTEuNzc1IC00LjU3OCwtNS4zMyAwLC0zLjI3OSAxLjYxOSwtNC45MiA0Ljg1OSwtNC45MiAwLjg4NywwIDEuNzIzLDAuMTYzIDIuNTEsMC40ODggdiAtNC4xOTggaCAxLjgwNSB6IG0gLTEuODA0LC03LjU0NiBjIC0wLjcyOSwtMC4zNTEgLTEuNTYzLC0wLjUyNiAtMi41LC0wLjUyNiAtMi4wNjMsMCAtMy4wOTQsMS4wOTcgLTMuMDk0LDMuMjkgMCwyLjU5NyAxLjAzLDMuODk1IDMuMDk0LDMuODk1IDAuOTM4LDAgMS43NzEsLTAuMTI3IDIuNSwtMC4zOCB6IgogICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSAzOTguMzQxLDExMi44NTcgdiAxLjcwOCBoIC0xLjgwNiB2IC0xLjcwOCB6IG0gMCwzLjcxIHYgMTAuMjUgaCAtMS44MDYgdiAtMTAuMjUgeiIKICAgICAgICAgICBpZD0icGF0aDM5IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gNDE0LjMwMiwxMjYuODE2IGMgMCwyLjQ3NCAtMS41NywzLjcwOSAtNC43MTMsMy43MDkgLTEuMjY1LDAgLTIuMzg0LC0wLjE2MyAtMy4zNTksLTAuNDg3IHYgLTEuNDY1IGMgMC45OTYsMC4zMjYgMi4xMjEsMC40ODggMy4zNzksMC40ODggMS45MjYsMCAyLjg4OSwtMC43NDkgMi44ODksLTIuMjQ1IHYgLTAuNDg3IGMgLTAuNzY4LDAuMzI1IC0xLjU5NCwwLjQ4NyAtMi40NzksMC40ODcgLTMuMjQsMCAtNC44NTksLTEuNzI4IC00Ljg1OSwtNS4xODMgMCwtMy4zNzcgMS43MDcsLTUuMDY2IDUuMTIzLC01LjA2NiAxLjM4NywwIDIuNzI4LDAuMTQxIDQuMDIxLDAuNDIgeiBtIC0xLjgwNiwtOC41MTEgYyAtMC42MTgsLTAuMTU2IC0xLjM4MywtMC4yMzQgLTIuMjk1LC0wLjIzNCAtMi4xOCwwIC0zLjI3LDEuMTgyIC0zLjI3LDMuNTQzIDAsMi40MjggMS4wMzEsMy42NDIgMy4wOTQsMy42NDIgMC45MzgsMCAxLjc2MiwtMC4xNzUgMi40NzEsLTAuNTI3IHoiCiAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDQyMy40MDgsMTEyLjg1NyB2IDEuNzA4IGggLTEuODA1IHYgLTEuNzA4IHogbSAwLDMuNzEgdiAxMC4yNSBoIC0xLjgwNSB2IC0xMC4yNSB6IgogICAgICAgICAgIGlkPSJwYXRoNDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSA0MzAuNzEyLDExNC45MDggaCAxLjEzMyBsIDAuMzkxLDEuNjU4IGggMi43NzEgdiAxLjQ2NCBoIC0yLjQ4OCB2IDUuODg3IGMgMCwwLjk1NyAwLjQxMiwxLjQzNSAxLjIzOCwxLjQzNSBoIDEuMjUgdiAxLjQ2NCBoIC0xLjcyIGMgLTEuNzE3LDAgLTIuNTc1LC0wLjkyMSAtMi41NzUsLTIuNzYzIHoiCiAgICAgICAgICAgaWQ9InBhdGg0MiIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDQ0MC45OSwxMjMuNzIyIGMgMCwtMi4xMDIgMS4zODgsLTMuMTUzIDQuMTU4LC0zLjE1MyAwLjg5MywwIDEuNzgzLDAuMDY1IDIuNjc2LDAuMTk1IHYgLTAuOTY2IGMgMCwtMS4xNzggLTAuOTIyLC0xLjc2OCAtMi43NjQsLTEuNzY4IC0xLjA1NSwwIC0yLjEzNSwwLjE2MyAtMy4yNCwwLjQ4OCB2IC0xLjQ2NCBjIDEuMTA1LC0wLjMyNiAyLjE4NywtMC40ODggMy4yNCwtMC40ODggMy4wNDUsMCA0LjU2OCwxLjA2MiA0LjU2OCwzLjE4MyB2IDcuMDY2IGggLTEuMDE3IGwgLTAuNjI1LC0xLjAxNSBjIC0xLjAyMSwwLjY3NyAtMi4xMzMsMS4wMTUgLTMuMzM4LDEuMDE1IC0yLjQzNiwwLjAwMSAtMy42NTgsLTEuMDMgLTMuNjU4LC0zLjA5MyB6IG0gNC4xNTgsLTEuNjg5IGMgLTEuNTY4LDAgLTIuMzUyLDAuNTUzIC0yLjM1MiwxLjY1OSAwLDEuMTA3IDAuNjE2LDEuNjU5IDEuODU0LDEuNjU5IDEuMjUsMCAyLjMwNywtMC4zMzIgMy4xNzQsLTAuOTk2IHYgLTIuMTI4IGMgLTAuODkyLC0wLjEyOCAtMS43ODMsLTAuMTk0IC0yLjY3NiwtMC4xOTQgeiIKICAgICAgICAgICBpZD0icGF0aDQzIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gNDU4LjYzOSwxMTIuODU3IHYgMTMuOTU5IGggLTEuODA4IHYgLTEzLjk1OSB6IgogICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSA0NzMuNzc5LDExNi41NjcgaCAxLjgyNiBsIDEuODE0LDguMDM0IDIuNjY2LC04LjAzNCBoIDEuNjI5IGwgMi44NTIsOC4wMzQgMS42MzksLTguMDM0IGggMS45MTQgbCAtMi42NzQsMTAuMjUgaCAtMS42NDkgbCAtMi45MzgsLTcuNjYzIC0yLjc5Myw3LjY2MyBoIC0xLjY4OCB6IgogICAgICAgICAgIGlkPSJwYXRoNDUiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSA0OTMuNjE1LDEyMS42OTIgYyAwLC0zLjQxNyAxLjYyNSwtNS4xMjUgNC44NzksLTUuMTI1IDMuMjU0LDAgNC44ODEsMS43MDggNC44ODEsNS4xMjUgMCwzLjQxIC0xLjYyNyw1LjExNSAtNC44ODEsNS4xMTUgLTMuMjM5LDAgLTQuODY2LC0xLjcwNSAtNC44NzksLTUuMTE1IHogbSA0Ljg3OSwzLjY2IGMgMi4wNTIsMCAzLjA3NiwtMS4yMzIgMy4wNzYsLTMuNjk5IDAsLTIuNDE1IC0xLjAyNCwtMy42MjIgLTMuMDc2LC0zLjYyMiAtMi4wNDksMCAtMy4wNzMsMS4yMDcgLTMuMDczLDMuNjIyIDAsMi40NjYgMS4wMjQsMy42OTkgMy4wNzMsMy42OTkgeiIKICAgICAgICAgICBpZD0icGF0aDQ2IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNDQ0NzE7ZmlsbC1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBmaWxsPSIjZmZmZmZmIgogICAgICAgICAgIGQ9Im0gNTA5Ljk5NCwxMjYuODE2IHYgLTEwLjI1IGggMS4yMjIgbCAwLjMyMSwxLjMwOSBjIDAuODk4LC0wLjg3MiAxLjk3OSwtMS4zMDkgMy4yNCwtMS4zMDkgdiAxLjUwMyBjIC0xLjIyMywwIC0yLjIxNSwwLjQzNCAtMi45NzcsMS4yOTkgdiA3LjQ0NyB6IgogICAgICAgICAgIGlkPSJwYXRoNDciCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI0NDQ3MTtmaWxsLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgZD0ibSA1MjIuNjY0LDExMi44NTcgdiAxMy45NTkgaCAtMS44MDUgdiAtMTMuOTU5IHoiCiAgICAgICAgICAgaWQ9InBhdGg0OCIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZmlsbD0iI2ZmZmZmZiIKICAgICAgICAgICBkPSJtIDUzOC41NTcsMTI2LjIwMiBjIC0xLjI0MiwwLjQwOSAtMi43NzUsMC42MTQgLTQuNTk5LDAuNjE0IC0zLjA1MywwIC00LjU3NywtMS43NzUgLTQuNTc3LC01LjMzIDAsLTMuMjc5IDEuNjIsLTQuOTIgNC44NiwtNC45MiAwLjg4NiwwIDEuNzIyLDAuMTYzIDIuNTA4LDAuNDg4IHYgLTQuMTk4IGggMS44MDggeiBtIC0xLjgwNywtNy41NDYgYyAtMC43MjksLTAuMzUxIC0xLjU2MSwtMC41MjYgLTIuNDk3LC0wLjUyNiAtMi4wNjMsMCAtMy4wOTUsMS4wOTcgLTMuMDk1LDMuMjkgMCwyLjU5NyAxLjAzMSwzLjg5NSAzLjA5NSwzLjg5NSAwLjkzOCwwIDEuNzcsLTAuMTI3IDIuNDk3LC0wLjM4IHoiCiAgICAgICAgICAgaWQ9InBhdGg0OSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMjQ0NDcxO2ZpbGwtb3BhY2l0eToxIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K' /> + </a> + </td> + </tr> + <tr> + <td bgcolor='#ffffff' style='padding:20px 20px;text-align:left'> + <p>Dear NAME,</p> + <p>You registered for the following event: <i>EVENT</i></p> + <ul> + <li>Date: DATE</li> + <li>Time: TIME</li> + <li>Place: PLACE</li> + </ul> + <p>See you there,</p> + <p>TheAlternative</p> + </td> + </tr> + <tr> + <td bgcolor='#ffffff' style='color: #bbb;text-align:center;padding-top:1em;border-top: 1px dashed #bbb'> + TheAlternative, CAB E 14, Universitätstrasse 6, 8092 Zürich + </td> + </tr> + </table> + </div> + </body> + </html> + ` , }; export default config; diff --git a/utilities/dates.js b/utilities/dates.js index 36d8bc7f80f2714445471528364221405e01d82d..ae6e88b2ef6ae38cc069a47c4c6f2b11c3f5d691 100644 --- a/utilities/dates.js +++ b/utilities/dates.js @@ -15,10 +15,11 @@ export function formatDateFromDB(date, locale) { export function formatTimeFromDB(startTime, endTime) { const s = dayjs(startTime); const e = dayjs(endTime); - return s.format("HH:mm") + " — " + e.format("HH:mm"); + return s.format("HH:mm") + " – " + e.format("HH:mm"); } export function isInFuture(event) { - // TODO: implement logic - return true; + const now = new Date(); + now.setDate(now.getDate() - 1); + return event.date > now.toISOString(); } diff --git a/utilities/hasAccess.js b/utilities/hasAccess.js index 3437edcfde839bfebf7991ec0107bbcdedd43026..8fdf7ca4851b74b197501902d3e058dc999d2b9c 100644 --- a/utilities/hasAccess.js +++ b/utilities/hasAccess.js @@ -3,8 +3,7 @@ export default function hasAccess(session, admin) { const prod_role = "thealt_prod_website_website"; // this is just for development purposes - return true; - return session ? true : false; + // return session ? true : false; if (process.env.NODE_ENV && process.env.NODE_ENV === "development") return session ? true : false; diff --git a/utilities/mail.js b/utilities/mail.js new file mode 100644 index 0000000000000000000000000000000000000000..e3362740c6e5ffffcb57dbdd2b351b3f78e0e504 --- /dev/null +++ b/utilities/mail.js @@ -0,0 +1,23 @@ +import nodemailer from "nodemailer"; + +export async function sendMail(receiver, replyTo, html, subject) { + const transporter = nodemailer.createTransport({ + host: process.env.MAILER_HOST, + port: 587, + secure: false, // true for 465, false for other ports + auth: { + user: process.env.MAILER_USERNAME, + pass: process.env.MAILER_PASSWORD, + }, + }); + + await transporter.sendMail({ + from: process.env.MAILER_NAME, + to: receiver, + replyTo: replyTo, + subject: subject, + html: html, + }); + + return; +}