From 46fa42750fcce00793588d809b94088d42aef6c4 Mon Sep 17 00:00:00 2001
From: Bianca Widstam
Date: Fri, 28 Nov 2025 14:27:25 +0000
Subject: [PATCH] Merged in feat/BOOK-529-update-GLA-design-mystay (pull
request #3230)
Feat/BOOK-529 update GLA design mystay
* feat(BOOK-529): update gla design on my stay
* feat(BOOK-529): open gla modal if error
* feat(BOOK-529): add inline accordion to storybook
* feat(529): move errormessage below message
* feat(529): update infomodal
* feat(BOOK-529): update infomodal
* feat(BOOK-529): hide guarantee info for adding ancillaries if prepaid
* feat(BOOK-529): update width on info dialog
* feat(BOOK-529): fix alignment
* feat(BOOK-529): check if member price
* feat(BOOK-529): refactor msg
* feat(BOOK-529): refactor terms and conditions to own component
* feat(BOOK-529): clean up confirmation step
Approved-by: Christel Westerberg
---
.../confirmationStep.module.css | 24 +-
.../Steps/ConfirmationStep/index.tsx | 251 +++++++++---------
.../HotelReservation/MyStay/Modal/index.tsx | 16 +-
.../GuaranteePaymentFailed/index.tsx} | 50 ++--
.../GuaranteeLateArrival/Form/form.module.css | 13 +-
.../GuaranteeLateArrival/Form/index.tsx | 110 ++++----
.../GuaranteeLateArrival/Form/schema.ts | 10 +-
.../guaranteeDialog.module.css} | 1 +
.../GuaranteeDialog/index.tsx | 48 ++++
.../Actions/GuaranteeLateArrival/index.tsx | 44 +--
.../guaranteeInfoModal.module.css | 34 +++
.../GuaranteeInfoModal/index.tsx | 75 ++++++
.../GuaranteeInfo/guaranteeInfo.module.css | 8 +-
.../ReferenceCard/GuaranteeInfo/index.tsx | 39 +--
.../MyStay/ReferenceCard/index.tsx | 5 +-
.../ReferenceCard/referenceCard.module.css | 3 +-
.../BookingInformation/PriceDetails/index.tsx | 28 +-
.../Rooms/SingleRoom/RoomDetailsSidePeek.tsx | 12 +-
.../MyStay/Rooms/TotalPrice.tsx | 37 +--
.../MyStay/TermsAndConditions/index.tsx | 84 ++++++
.../termsAndConditions.module.css | 5 +
.../MyStay/utils/mapRoomDetails.ts | 2 +-
.../BookedRoomSidePeekContent/index.tsx | 34 ++-
apps/scandic-web/stores/my-stay/helpers.ts | 16 +-
apps/scandic-web/utils/getErrorMessage.ts | 6 +-
.../guaranteeDetails.module.css | 22 --
.../Payment/GuaranteeDetails/index.tsx | 68 -----
.../Accordion/Accordion.stories.tsx | 21 +-
.../AccordionItem/accordionItem.module.css | 13 +
.../Accordion/AccordionItem/index.tsx | 4 +
.../Accordion/AccordionItem/variants.ts | 1 +
.../lib/components/Accordion/variants.ts | 1 +
.../Form/PaymentOption/PaymentOption.tsx | 12 +-
.../Form/SelectPaymentMethod/index.tsx | 54 ++--
packages/design-system/lib/fonts.css | 2 +-
scripts/material-symbols-update.mts | 9 +-
shared/fonts/material-symbols/.auto-generated | 4 +-
.../material-symbols/rounded-1b8067b7.woff2 | Bin 35460 -> 0 bytes
.../material-symbols/rounded-3e9207ba.woff2 | Bin 0 -> 35684 bytes
39 files changed, 681 insertions(+), 485 deletions(-)
rename apps/scandic-web/{hooks/booking/useGuaranteePaymentFailedToast.ts => components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/GuaranteePaymentFailed/index.tsx} (58%)
rename apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/{guarantee.module.css => GuaranteeDialog/guaranteeDialog.module.css} (65%)
create mode 100644 apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/GuaranteeDialog/index.tsx
create mode 100644 apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/GuaranteeInfoModal/guaranteeInfoModal.module.css
create mode 100644 apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/GuaranteeInfo/GuaranteeInfoModal/index.tsx
create mode 100644 apps/scandic-web/components/HotelReservation/MyStay/TermsAndConditions/index.tsx
create mode 100644 apps/scandic-web/components/HotelReservation/MyStay/TermsAndConditions/termsAndConditions.module.css
delete mode 100644 packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/guaranteeDetails.module.css
delete mode 100644 packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/index.tsx
delete mode 100644 shared/fonts/material-symbols/rounded-1b8067b7.woff2
create mode 100644 shared/fonts/material-symbols/rounded-3e9207ba.woff2
diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/confirmationStep.module.css b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/confirmationStep.module.css
index 53f4a83d5..8d66a8e9c 100644
--- a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/confirmationStep.module.css
+++ b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/confirmationStep.module.css
@@ -4,12 +4,6 @@
gap: var(--Space-x2);
}
-.termsAndConditions {
- display: grid;
- gap: var(--Space-x2);
- color: var(--Text-Secondary);
-}
-
.totalPointsContainer {
display: flex;
justify-content: space-between;
@@ -17,9 +11,27 @@
padding: var(--Space-x1) var(--Space-x15);
border-radius: var(--Corner-radius-md);
}
+.guarantee {
+ display: flex;
+ flex-direction: column;
+ gap: var(--Space-x2);
+ background-color: var(--Surface-Secondary-Default);
+ border-radius: var(--Corner-radius-lg);
+ padding: var(--Space-x2);
+}
+
+.paymentInfo {
+ display: flex;
+ gap: var(--Space-x1);
+ align-items: flex-start;
+}
.totalPoints {
display: flex;
gap: var(--Space-x15);
align-items: center;
}
+
+.accordionItem {
+ border-radius: var(--Corner-radius-md);
+}
diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/index.tsx
index 6c6da2638..1c04bcc2d 100755
--- a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/index.tsx
+++ b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/ConfirmationStep/index.tsx
@@ -1,27 +1,23 @@
import { useWatch } from "react-hook-form"
import { useIntl } from "react-intl"
-import { AlertTypeEnum } from "@scandic-hotels/common/constants/alert"
import { PaymentMethodEnum } from "@scandic-hotels/common/constants/paymentMethod"
-import { bookingTermsAndConditionsRoutes } from "@scandic-hotels/common/constants/routes/bookingTermsAndConditionsRoutes"
-import { privacyPolicyRoutes } from "@scandic-hotels/common/constants/routes/privacyPolicyRoutes"
import { dt } from "@scandic-hotels/common/dt"
+import AccordionItem from "@scandic-hotels/design-system/Accordion/AccordionItem"
import { Alert } from "@scandic-hotels/design-system/Alert"
-import Checkbox from "@scandic-hotels/design-system/Form/Checkbox"
+import { Divider } from "@scandic-hotels/design-system/Divider"
import { PaymentOption } from "@scandic-hotels/design-system/Form/PaymentOption"
import { PaymentOptionsGroup } from "@scandic-hotels/design-system/Form/PaymentOptionsGroup"
import { SelectPaymentMethod } from "@scandic-hotels/design-system/Form/SelectPaymentMethod"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
-import { TextLink } from "@scandic-hotels/design-system/TextLink"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { useAddAncillaryStore } from "@/stores/my-stay/add-ancillary-flow"
+import TermsAndConditions from "@/components/HotelReservation/MyStay/TermsAndConditions"
import useLang from "@/hooks/useLang"
import { trackUpdatePaymentMethod } from "@/utils/tracking"
-import { ancillaryError } from "../../../schema"
-
import styles from "./confirmationStep.module.css"
import type { ConfirmationStepProps } from "@/types/components/myPages/myStay/ancillaries"
@@ -33,17 +29,20 @@ export default function ConfirmationStep({
}: ConfirmationStepProps) {
const intl = useIntl()
const lang = useLang()
- const { checkInDate, guaranteeInfo, selectedAncillary } =
+
+ const { checkInDate, guaranteeInfo, selectedAncillary, booking } =
useAddAncillaryStore((state) => ({
checkInDate: state.booking.checkInDate,
guaranteeInfo: state.booking.guaranteeInfo,
selectedAncillary: state.selectedAncillary,
+ booking: state.booking,
}))
const refundableDate = dt(checkInDate)
.subtract(1, "day")
.locale(lang)
.format("23:59, dddd, D MMMM YYYY")
+ const mustBeGuaranteed = !guaranteeInfo && booking.isGuaranteeable
const quantityWithCard = useWatch({ name: "quantityWithCard" })
const quantityWithPoints = useWatch({ name: "quantityWithPoints" })
const currentPoints = user?.membership?.currentPoints ?? 0
@@ -51,20 +50,22 @@ export default function ConfirmationStep({
quantityWithPoints && selectedAncillary?.points
? selectedAncillary.points * quantityWithPoints
: null
+
+ const accordionTitle = intl.formatMessage({
+ id: "myStay.guarantee.guaranteeInformation",
+ defaultMessage:
+ "By adding your card, you also guarantee your room booking for late arrival ",
+ })
+
+ const accordionContent = intl.formatMessage({
+ id: "myStay.guarantee.guaranteeInformation.content",
+ defaultMessage:
+ "The hotel will hold your booking, even if you arrive after 18:00. Your card will only be charged in the event of a no-show.",
+ })
+
return (
-
-
- {intl.formatMessage(
- {
- id: "addAncillary.confirmationStep.refundPolicy",
- defaultMessage:
- "All ancillaries are fully refundable until {date}. Time selection and special requests are also modifiable.",
- },
- { date: refundableDate }
- )}
-
-
+ {error &&
}
{!!quantityWithPoints && (
<>
@@ -107,118 +108,118 @@ export default function ConfirmationStep({
)}
{!!quantityWithCard && (
<>
-
-
-
- {intl.formatMessage({
- id: "addAncillary.confirmationStep.reserveWithCard",
- defaultMessage: "Reserve with Card",
- })}
-
-
-
-
-
+
+
{intl.formatMessage({
- id: "addAncillary.confirmationStep.paymentAtCheckInInfo",
- defaultMessage:
- "Payment will be made on check-in. The card will be only used to guarantee the ancillary in case of no-show.",
+ id: "addAncillary.confirmationStep.reserveWithCard",
+ defaultMessage: "Reserve with Card",
})}
+
+
+
+
+ {intl.formatMessage(
+ {
+ id: "addAncillary.confirmationStep.refundPolicy",
+ defaultMessage:
+ "All ancillaries are fully refundable until {date}. Time selection and special requests are also modifiable.",
+ },
+ { date: refundableDate }
+ )}
- {guaranteeInfo ? (
-
-
-
- ) : (
- <>
- {error ? (
-
- ) : (
-
+
+
+
+
+
+ {intl.formatMessage({
+ id: "myStay.ancillary.guarantee.headingText",
+ defaultMessage: "Payment will be made on check-in",
+ })}
+
+
+
+
+ {intl.formatMessage({
+ id: "myStay.ancillary.guarantee.infoText",
+ defaultMessage:
+ "The card is used to reserve your extras. You will be charged in case of no-show.",
+ })}
+
+
+
+
+ {guaranteeInfo ? (
+ <>
+
+
+
+ {intl.formatMessage({
+ id: "payment.savedCard",
+ defaultMessage: "Saved card",
+ })}
+
+
+
+
+
+ >
+ ) : (
+ <>
+
+
+
+
+ {intl.formatMessage({
+ id: "myStay.ancillary.guarantee.confirmationText",
+ defaultMessage:
+ "Confirm and provide your payment card details in the next step",
+ })}
+
+
+
+ {mustBeGuaranteed && (
+
+
+ {accordionContent}
+
+
+ )}
+ {savedCreditCards && }
+ ({
+ ...card,
+ cardType: card.cardType as PaymentMethodEnum,
+ }))}
+ onChange={(method) => {
+ trackUpdatePaymentMethod({ method })
+ }}
+ formName={"paymentMethod"}
/>
- )}
-
- ({
- ...card,
- cardType: card.cardType as PaymentMethodEnum,
- }))}
- onChange={(method) => {
- trackUpdatePaymentMethod({ method })
- }}
- formName={"paymentMethod"}
- />
- >
- )}
+ >
+ )}
+
>
)}
-
-
-
-
- {intl.formatMessage(
- {
- id: "addAncillary.confirmationStep.termsAndConditionsNotice",
- defaultMessage:
- "Yes, I accept the general Booking & Cancellation Terms , and understand that Scandic will process my personal data in accordance with Scandic's Privacy policy . There you can learn more about what data we process, your rights and where to turn if you have questions.",
- },
- {
- termsAndConditionsLink: (str) => (
-
- {str}
-
- ),
- privacyPolicyLink: (str) => (
-
- {str}
-
- ),
- }
- )}
-
-
-
-
-
- {intl.formatMessage({
- id: "booking.acceptBookingTerms",
- defaultMessage: "I accept the booking and cancellation terms",
- })}
-
-
-
-
+
)
}
diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Modal/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/Modal/index.tsx
index 82be1e27c..53584dc21 100644
--- a/apps/scandic-web/components/HotelReservation/MyStay/Modal/index.tsx
+++ b/apps/scandic-web/components/HotelReservation/MyStay/Modal/index.tsx
@@ -5,9 +5,21 @@ import ModalContent from "./ModalContent"
import styles from "./modal.module.css"
-export default function Modal({ children }: React.PropsWithChildren) {
+export default function Modal({
+ children,
+ isOpen,
+ onOpenChange,
+}: React.PropsWithChildren<{
+ isOpen?: boolean
+ onOpenChange?: (value: boolean) => void
+}>) {
return (
-
+
{children}
)
diff --git a/apps/scandic-web/hooks/booking/useGuaranteePaymentFailedToast.ts b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/GuaranteePaymentFailed/index.tsx
similarity index 58%
rename from apps/scandic-web/hooks/booking/useGuaranteePaymentFailedToast.ts
rename to apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/GuaranteePaymentFailed/index.tsx
index 45e4c3978..2f5fe3f63 100644
--- a/apps/scandic-web/hooks/booking/useGuaranteePaymentFailedToast.ts
+++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/GuaranteePaymentFailed/index.tsx
@@ -1,21 +1,26 @@
-"use client"
-
import { usePathname, useRouter, useSearchParams } from "next/navigation"
-import { useCallback, useEffect, useRef } from "react"
+import { useCallback, useEffect, useState } from "react"
import { useIntl } from "react-intl"
-import { toast } from "@scandic-hotels/design-system/Toast"
+import { AlertTypeEnum } from "@scandic-hotels/common/constants/alert"
import { BookingErrorCodeEnum } from "@scandic-hotels/trpc/enums/bookingErrorCode"
+import Modal from "@/components/HotelReservation/MyStay/Modal"
import { isAncillaryError } from "@/components/HotelReservation/MyStay/utils"
-export function useGuaranteePaymentFailedToast() {
- const hasRunOnce = useRef(false)
+import GuaranteeDialog from "../ManageStay/Actions/GuaranteeLateArrival/GuaranteeDialog"
+
+export default function GuaranteePaymentFailed() {
const intl = useIntl()
const searchParams = useSearchParams()
const pathname = usePathname()
const router = useRouter()
+ const [alert, setAlert] = useState<{
+ type: AlertTypeEnum
+ message: string
+ } | null>(null)
+
const getErrorMessage = useCallback(
(errorCode: string | null) => {
switch (errorCode) {
@@ -37,33 +42,36 @@ export function useGuaranteePaymentFailedToast() {
)
useEffect(() => {
- // To prevent multiple toasts in strict mode
- if (hasRunOnce.current) {
- return
- }
const errorCode = searchParams.get("errorCode")
if (!errorCode) {
return
}
- // Ancillary errors are handled in AddAncillaryFlowModal
if (isAncillaryError(searchParams)) {
- hasRunOnce.current = true
return
}
- const errorMessage = getErrorMessage(errorCode)
- const toastType =
+ const message = getErrorMessage(errorCode)
+ const type =
errorCode === BookingErrorCodeEnum.TransactionCancelled
- ? "warning"
- : "error"
+ ? AlertTypeEnum.Warning
+ : AlertTypeEnum.Alarm
- toast[toastType](errorMessage)
+ setAlert({ type, message })
- const queryParams = new URLSearchParams(searchParams.toString())
- queryParams.delete("errorCode")
+ const newParams = new URLSearchParams(searchParams.toString())
+ newParams.delete("errorCode")
- router.push(`${pathname}?${queryParams.toString()}`)
- hasRunOnce.current = true
+ router.replace(`${pathname}?${newParams.toString()}`)
}, [searchParams, pathname, router, getErrorMessage])
+
+ if (!alert) {
+ return null
+ }
+
+ return (
+ setAlert(null)}>
+
+
+ )
}
diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/form.module.css b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/form.module.css
index f1009d584..c07653c6b 100644
--- a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/form.module.css
+++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/form.module.css
@@ -13,13 +13,18 @@
gap: var(--Space-x3);
}
-.termsAndConditions {
- color: var(--Text-Secondary);
- display: grid;
+.guarantee {
+ display: flex;
+ flex-direction: column;
gap: var(--Space-x2);
+ background-color: var(--Surface-Secondary-Default);
+ border-radius: var(--Corner-radius-lg);
+ padding: var(--Space-x2);
}
-.termsAndConditions .checkbox span {
+.paymentInfo {
+ display: flex;
+ gap: var(--Space-x1);
align-items: flex-start;
}
diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/index.tsx
index 4416362ba..634c20b48 100644
--- a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/index.tsx
+++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/index.tsx
@@ -6,15 +6,13 @@ import { useIntl } from "react-intl"
import { writeGlaToSessionStorage } from "@scandic-hotels/booking-flow/components/EnterDetails/Payment/PaymentCallback/helpers"
import { PaymentMethodEnum } from "@scandic-hotels/common/constants/paymentMethod"
-import { bookingTermsAndConditionsRoutes } from "@scandic-hotels/common/constants/routes/bookingTermsAndConditionsRoutes"
import { guaranteeCallback } from "@scandic-hotels/common/constants/routes/hotelReservation"
-import { privacyPolicyRoutes } from "@scandic-hotels/common/constants/routes/privacyPolicyRoutes"
import { formatPrice } from "@scandic-hotels/common/utils/numberFormatting"
+import { Alert } from "@scandic-hotels/design-system/Alert"
import { Divider } from "@scandic-hotels/design-system/Divider"
-import Checkbox from "@scandic-hotels/design-system/Form/Checkbox"
import { SelectPaymentMethod } from "@scandic-hotels/design-system/Form/SelectPaymentMethod"
+import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { LoadingSpinner } from "@scandic-hotels/design-system/LoadingSpinner"
-import Link from "@scandic-hotels/design-system/OldDSLink"
import { toast } from "@scandic-hotels/design-system/Toast"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { trackGlaSaveCardAttempt } from "@scandic-hotels/tracking/payment"
@@ -23,6 +21,7 @@ import { isWebview } from "@/constants/routes/webviews"
import { env } from "@/env/client"
import { useMyStayStore } from "@/stores/my-stay"
+import TermsAndConditions from "@/components/HotelReservation/MyStay/TermsAndConditions"
import { useGuaranteeBooking } from "@/hooks/booking/useGuaranteeBooking"
import useLang from "@/hooks/useLang"
import { trackUpdatePaymentMethod } from "@/utils/tracking"
@@ -31,7 +30,12 @@ import { type GuaranteeFormData, paymentSchema } from "./schema"
import styles from "./form.module.css"
-export default function Form() {
+import type { AlertTypeEnum } from "@scandic-hotels/common/constants/alert"
+
+interface FormProps {
+ error?: { type: AlertTypeEnum; message: string }
+}
+export default function Form({ error }: FormProps) {
const intl = useIntl()
const lang = useLang()
const pathname = usePathname()
@@ -114,38 +118,6 @@ export default function Form() {
}
}
- const guaranteeMsg = intl.formatMessage(
- {
- id: "myStay.gla.termsAndConditionsMessage",
- defaultMessage:
- "I accept the terms for this stay and the general Booking & Cancellation Terms , and understand Scandic will process my personal data for this stay in accordance with Scandic's Privacy Policy .",
- },
- {
- termsAndConditionsLink: (str) => (
- e.stopPropagation()}
- >
- {str}
-
- ),
- privacyPolicyLink: (str) => (
- e.stopPropagation()}
- >
- {str}
-
- ),
- }
- )
-
return (
-
-
+ {totalPriceBooking ? (
+
+ ) : (
+
+ )}
diff --git a/apps/scandic-web/stores/my-stay/helpers.ts b/apps/scandic-web/stores/my-stay/helpers.ts
index d8188c0e3..e306b33a3 100644
--- a/apps/scandic-web/stores/my-stay/helpers.ts
+++ b/apps/scandic-web/stores/my-stay/helpers.ts
@@ -28,7 +28,7 @@ export function calculateTotalPrice(
}
// room.totalPrice is a negative value when
// its a vouchers booking (╯°□°)╯︵ ┻━┻
- if (room.totalPrice && !room.vouchers) {
+ if (room.totalPrice > 0) {
total.cash = total.cash + room.totalPrice
}
return total
@@ -42,13 +42,6 @@ export function calculateTotalPrice(
)
let totalPrice = ""
- if (totals.cheques) {
- totalPrice = `${totals.cheques} ${CurrencyEnum.CC}`
- }
- if (totals.points) {
- const appendTotalPrice = totalPrice ? `${totalPrice} + ` : ""
- totalPrice = `${appendTotalPrice}${totals.points} ${CurrencyEnum.POINTS}`
- }
if (totals.vouchers) {
const appendTotalPrice = totalPrice ? `${totalPrice} + ` : ""
totalPrice = `${appendTotalPrice}${totals.vouchers} ${intl.formatMessage(
@@ -62,6 +55,13 @@ export function calculateTotalPrice(
}
)}`
}
+ if (totals.cheques) {
+ totalPrice = `${totals.cheques} ${CurrencyEnum.CC}`
+ }
+ if (totals.points) {
+ const appendTotalPrice = totalPrice ? `${totalPrice} + ` : ""
+ totalPrice = `${appendTotalPrice}${totals.points} ${CurrencyEnum.POINTS}`
+ }
if (totals.cash) {
const appendTotalPrice = totalPrice ? `${totalPrice} + ` : ""
const cashPrice = formatPrice(intl, totals.cash, currency)
diff --git a/apps/scandic-web/utils/getErrorMessage.ts b/apps/scandic-web/utils/getErrorMessage.ts
index 010de0b38..f2aab01ff 100644
--- a/apps/scandic-web/utils/getErrorMessage.ts
+++ b/apps/scandic-web/utils/getErrorMessage.ts
@@ -9,6 +9,7 @@ import { signupErrors } from "@scandic-hotels/trpc/routers/user/schemas"
import { editProfileErrors } from "@/components/Forms/Edit/Profile/schema"
import { findMyBookingErrors } from "@/components/HotelReservation/FindMyBooking/schema"
import { ancillaryError } from "@/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/schema"
+import { paymentError } from "@/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/ManageStay/Actions/GuaranteeLateArrival/Form/schema"
import type { IntlShape } from "react-intl"
@@ -22,9 +23,10 @@ export function getErrorMessage(intl: IntlShape, errorCode?: string) {
defaultMessage: "You must select at least one quantity",
})
case ancillaryError.TERMS_NOT_ACCEPTED:
+ case paymentError.TERMS_REQUIRED:
return intl.formatMessage({
- id: "addAncillary.confirmationStep.termsAndConditionsNoticeError",
- defaultMessage: "You must accept the terms and conditions to proceed",
+ id: "common.mustAcceptTermsError",
+ defaultMessage: "You must accept the terms and conditions",
})
case findMyBookingErrors.BOOKING_NUMBER_INVALID:
return intl.formatMessage({
diff --git a/packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/guaranteeDetails.module.css b/packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/guaranteeDetails.module.css
deleted file mode 100644
index 4e8e6c7fe..000000000
--- a/packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/guaranteeDetails.module.css
+++ /dev/null
@@ -1,22 +0,0 @@
-.content {
- display: flex;
- flex-direction: column;
- gap: var(--Space-x1);
- padding-top: var(--Space-x2);
-}
-
-.content ol {
- margin: 0;
-}
-
-.summary {
- list-style: none;
- display: flex;
- align-items: center;
- gap: var(--Space-x05);
-}
-
-.summary::-webkit-details-marker,
-.summary::marker {
- display: none;
-}
diff --git a/packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/index.tsx b/packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/index.tsx
deleted file mode 100644
index ec2a5a739..000000000
--- a/packages/booking-flow/lib/components/EnterDetails/Payment/GuaranteeDetails/index.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import { useIntl } from "react-intl"
-
-import Body from "@scandic-hotels/design-system/Body"
-import Caption from "@scandic-hotels/design-system/Caption"
-import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
-
-import styles from "./guaranteeDetails.module.css"
-
-export default function GuaranteeDetails() {
- const intl = useIntl()
- return (
-
-
-
- {intl.formatMessage({
- id: "common.howItWorks",
- defaultMessage: "How it works",
- })}
-
-
-
-
-
- {intl.formatMessage({
- id: "enterDetails.payment.guaranteeInfoDescription",
- defaultMessage:
- "When guaranteeing your booking, we will hold the booking until 07:00 until the day after check-in. This will provide you as a guest with added flexibility for check-in times.",
- })}
-
-
- {intl.formatMessage({
- id: "enterDetails.payment.guaranteeInfoWhatToDo",
- defaultMessage: "What you have to do to guarantee booking:",
- })}
-
-
-
-
- {intl.formatMessage({
- id: "enterDetails.payment.guaranteeInfoCompleteBooking",
- defaultMessage: "Complete the booking",
- })}
-
-
-
-
- {intl.formatMessage({
- id: "enterDetails.payment.guaranteeInfoProvideCard",
- defaultMessage: "Provide a payment card in the next step",
- })}
-
-
-
-
- {intl.formatMessage({
- id: "enterDetails.payment.guaranteeInfoMandatoryNote",
- defaultMessage:
- "Please note that this is mandatory, and that your card will only be charged in the event of a no-show.",
- })}
-
-
-
- )
-}
diff --git a/packages/design-system/lib/components/Accordion/Accordion.stories.tsx b/packages/design-system/lib/components/Accordion/Accordion.stories.tsx
index e71d132b0..e07224cc5 100644
--- a/packages/design-system/lib/components/Accordion/Accordion.stories.tsx
+++ b/packages/design-system/lib/components/Accordion/Accordion.stories.tsx
@@ -12,7 +12,7 @@ const meta: Meta = {
argTypes: {
type: {
control: 'select',
- options: ['card', 'sidepeek'],
+ options: ['card', 'sidepeek', 'inline'],
},
},
}
@@ -137,3 +137,22 @@ export const WithSubtitle: Story = {
),
}
+
+export const Inline: Story = {
+ args: {
+ type: 'inline',
+ },
+ render: () => (
+
+
+
+
+ All rooms feature comfortable beds, modern amenities, and
+ complimentary Wi-Fi. Check-in is available from 3 PM and check-out
+ is at 12 PM.
+
+
+
+
+ ),
+}
diff --git a/packages/design-system/lib/components/Accordion/AccordionItem/accordionItem.module.css b/packages/design-system/lib/components/Accordion/AccordionItem/accordionItem.module.css
index fa52eb9bd..18cd315e6 100644
--- a/packages/design-system/lib/components/Accordion/AccordionItem/accordionItem.module.css
+++ b/packages/design-system/lib/components/Accordion/AccordionItem/accordionItem.module.css
@@ -18,6 +18,19 @@
}
}
+ &.inline {
+ list-style: none;
+ padding: var(--Space-x15);
+ background-color: var(--Surface-Primary-Default);
+ .content {
+ padding: var(--Space-x1) 0 0 0;
+ }
+
+ .summary:hover {
+ background-color: transparent;
+ }
+ }
+
.summary:hover {
background-color: var(--Surface-Primary-Hover);
}
diff --git a/packages/design-system/lib/components/Accordion/AccordionItem/index.tsx b/packages/design-system/lib/components/Accordion/AccordionItem/index.tsx
index 04a5e095d..1b2b7ab74 100644
--- a/packages/design-system/lib/components/Accordion/AccordionItem/index.tsx
+++ b/packages/design-system/lib/components/Accordion/AccordionItem/index.tsx
@@ -93,6 +93,10 @@ export default function AccordionItem({
{title}
+ ) : type === 'inline' ? (
+
+ {title}
+
) : (
{subtitle || showAsSubtitle ? (
diff --git a/packages/design-system/lib/components/Accordion/AccordionItem/variants.ts b/packages/design-system/lib/components/Accordion/AccordionItem/variants.ts
index 3bb4f384f..99b4d61c0 100644
--- a/packages/design-system/lib/components/Accordion/AccordionItem/variants.ts
+++ b/packages/design-system/lib/components/Accordion/AccordionItem/variants.ts
@@ -7,6 +7,7 @@ export const accordionItemVariants = cva(styles.accordionItem, {
type: {
card: styles.card,
sidepeek: styles.sidepeek,
+ inline: styles.inline,
},
},
defaultVariants: {
diff --git a/packages/design-system/lib/components/Accordion/variants.ts b/packages/design-system/lib/components/Accordion/variants.ts
index 129e2a61b..e8038284a 100644
--- a/packages/design-system/lib/components/Accordion/variants.ts
+++ b/packages/design-system/lib/components/Accordion/variants.ts
@@ -7,6 +7,7 @@ export const accordionVariants = cva(styles.accordion, {
type: {
card: styles.card,
sidepeek: styles.sidepeek,
+ inline: styles.inline,
},
},
defaultVariants: {
diff --git a/packages/design-system/lib/components/Form/PaymentOption/PaymentOption.tsx b/packages/design-system/lib/components/Form/PaymentOption/PaymentOption.tsx
index 63083018d..a1e524271 100644
--- a/packages/design-system/lib/components/Form/PaymentOption/PaymentOption.tsx
+++ b/packages/design-system/lib/components/Form/PaymentOption/PaymentOption.tsx
@@ -12,11 +12,13 @@ export type PaymentOptionProps = {
value: PaymentMethodEnum
label: string
cardNumber?: string
+ hideRadioButton?: boolean
}
export function PaymentOption({
value,
label,
cardNumber,
+ hideRadioButton = false,
}: PaymentOptionProps) {
return (
(
<>
-
+ {!hideRadioButton && (
+
+ )}
{label}
diff --git a/packages/design-system/lib/components/Form/SelectPaymentMethod/index.tsx b/packages/design-system/lib/components/Form/SelectPaymentMethod/index.tsx
index c8b2ca36e..8219bb014 100644
--- a/packages/design-system/lib/components/Form/SelectPaymentMethod/index.tsx
+++ b/packages/design-system/lib/components/Form/SelectPaymentMethod/index.tsx
@@ -31,12 +31,19 @@ export function SelectPaymentMethod({
formName,
}: SelectPaymentMethodProps) {
const intl = useIntl()
+ const hasSavedCards = paymentMethods.length > 0
+
+ if (!hasSavedCards) {
+ return null
+ }
+
const mySavedCardsLabel = paymentMethods.length
? intl.formatMessage({
id: 'payment.mySavedCards',
defaultMessage: 'My saved cards',
})
: undefined
+
const otherCardLabel = paymentMethods.length
? intl.formatMessage({
id: 'common.other',
@@ -44,8 +51,6 @@ export function SelectPaymentMethod({
})
: undefined
- const hasSavedCards = paymentMethods.length > 0
-
return (
- {hasSavedCards ? (
- <>
-
- {mySavedCardsLabel}
-
- {paymentMethods?.map((paymentMethods) => {
- const label =
- PAYMENT_METHOD_TITLES[paymentMethods.cardType] ||
- paymentMethods.alias ||
- paymentMethods.cardType
-
- return (
-
- )
- })}
-
- {otherCardLabel}
-
- >
- ) : null}
+
+ {mySavedCardsLabel}
+
+ {paymentMethods?.map((paymentMethods) => {
+ const label =
+ PAYMENT_METHOD_TITLES[paymentMethods.cardType] ||
+ paymentMethods.alias ||
+ paymentMethods.cardType
+ return (
+
+ )
+ })}
+
+ {otherCardLabel}
+
YKT}jeRB$I20FHDoED;C_gv9`Z;cp9tZU8XW3IR3(Bm;$R1Rw>4E(ai6
z7DjREfYd!{wR&hol2+^CjO47=L#C>#o)W^mw(V6w`01D5{`kw^{_(H>{O_NE<9e*~
zhJOGz-#?cI(dQ;Wf{fTgDwK(-ei5;HoceoGPywV8a)8{7oxXDqw(%qK!)hD@Coim87E#k#05AlucU*BrGinNJ32@C`BL%B!ucNgb+Zg#DKKo1{Fc?1QhSV
zJ5KQw6DxwHo`A8`OH@uQfc9{$5q!B){r_>(ztf~jJ#DH~#Q1fnSW;8!VWxR=r8D8c
zTyuU?nI~U-;_%G~GoOFlwBI^-SXf}4!0rw*B{cnv=0Hof6pmb`I
z(hWrIb~hS8b+Z8iAZX+~&yTerHHIsVfy^3z&IGCRF7-IC$u^zv!p-i2AUvOcn|`))
zNA~X5ZV0en062Y$CZ+WTv_sN*MEhqX{as@OOOo}$I0D-vS;rYe{AUSBvOn2>!L&KH
zLxdGWm2&%#%alpkCZ|tRbn!Pa-r0_H_f<;hLI^>Eh=@G=$8BhpiHUA0&2yXN#S_mD
zgAC%9VNC76BqmMQ-M!BAGL{1bq9zVhP(V;~{r@LU>pdklSJ@`HY&L8R1{16jZ7`zV
z{gUgU^0*Ki#-a1*z18+ULQ_i!H%@DPvi7*FsN&+r^C@Di``I&bne@A5t$
z@-d(BC13L$KkyU3;Me??-}6WQ!r%A@|KdOVPpCyv#g$ZAS#?!+^->@8(*O<9Pz~2e
zjn#Nf*G$dPJT1^7EzvTq&?>FbPVFTQMAF}pLKq;~2TnggF1y8WP56saYqGu4MZ47Ov^~As=BHw(D!Als!$EBAXgb|%2P=tmY?m3#N^AC
zr@Txu{D!x
zw>>7qNvKUtmDNgHo3i*L$s;9iQ)sHNTu75_=m)Z>d!new=T
zoGP-!dfcKsIkIG`!Fx=myFA0Ll)hBIYpo3hoavdYS<%mqDWa{79dRi}Ss
zWW>-RV~+JpUo8;{HZlSz1L@?W)R`MGLXj9xG5$749OY%E5Nk{m_CTDf!?aCpLr(
z0bg56^ad?DfyA0vDy0ze53@i{l^%kHX{01)?aGn{>ntTn9in0=t0MH)u4a;!e}q7x
zCP{gFTP2Mry__3}JDPl0(h%0jeG7}QOU9FF_TFwG=N&C=BdeOW7$e@1ebH31JarI^
z2kq}!*L1SHge|-?Sl2qTYGojI*3>(tdxmT!*K>7C_475i(B;M|20?*G*X^Xc8f9Zq
zP1U7_ec-Kb@%}@qL7LaNgY!57m%XfKA(I(SUknWH1#3)!6@$l8^&wtq$>G!!7RFdV
zaucZ_Eql66^g4B26}pp@jSgu%o($yFG}
zW{pjjWjnjcSq*AvG+Eo^7xsu^v!2QHC!>DE90PqfTYO5=wV0BWcsNebX=QK8gyVN8
zwanjoG=r6;r39Z17=$3~syk3n
zo=r@x*4w^Sjs}saIqAy0T%KBhMSEGhvzBxv*#Ke7szNs4GX$!|D$EKWh0&x2qgzyj
z1Dazh=E5e~Ak3oLgzw0>@La>V>0uW05DO+O1_Ogoxz?_9V;CR$MfQmp`b3ZD3LPU`
z8#Pk{W$+t5;yLc(D$e34LP~6BrI6f|A4*p>eDTVnYHU}WzEOkENhhoiY$PxBt2&UN
z5nCLC`iV^iYOtI5F8)4rs5V04@|-UoQ4MV3XyjOIqmy+Rfhm5hLtb57@IzGjW!y-O(0Zq3fE?uUaCv`{a3cbj^~;bt!W`*W{J&oi{Ej2H6=IPhx>9wg+Y`WpLbk};mp*JaR;xsxi*$k`|^w#9#z`R1v
zKdB>&!5C`8R1g0h#4ml-wbgGbG=JqM$)IJc3Y_Z|2|JMo!*)(bfH9v;7}xDkmJH8(
z^b(ggE2$L~*!zVW#MsVqW-^-ogE@ihEePZ*eKPMi*Nt^=*uu&f-??U|Yu3@omuWp*ZbZ3mkcTM?NQ#j_z9P
zW1^dD4{6COX5$HpNNd~h+FtPbBM-CCC;(y&V&FS_$FCdN?EQxDOM%LFc5}nvOLpplcPSH`C?UqRJ;Twg))%PNJ
zQf_)2saZDz!ObBdcmP(zf?^4Ak0iD?J_P=>mI|l|MdCNS#d&PRY>Y%6&rUKmY?kwo&Z6v(CZ1?KN1
z9Q-0c(+FuP;k>bI;AWPV6!1P0s?aaO3s4#b8ftDxgfL={z*tgDB?%-eoteSzb%V)-
zQm|pc4qpbDgw)9ylc7~T`W!5U)<|j#J!lOuin+;DT}q%d@mf*&u01k~@z7eY%X}6LHjwSgLtb#u63|S9utYS;GJme43P%lHjpvYL#<_-yenPr34YA&1{+%WYmde
zk;f2KZ3tPvHaq;nOHBfTjST^6YAU5-VP08CQIH~q1ds$;3ao@8XOO<|LB>-bte}*iSq`U8nZ9f503VaH
z{QP{(q9k}g@+$3Nf$^j=YCgv_)|b(`gsn-54a{y0<-Eg5_^aSk4l~_ykhwEPtRMp>
zw4yU^Hf!KId=co_c)&06N3dPuIKj52A$KG$3Vjfzqy11uPt8P&>w~4af%JBY-h2H~
zXdvYQa1pQ5a=2o0Fjt905=PkU2@Xx@qlG;H{&i6lT6S8NzfBEXsF
z>%}m5A)JrEe3IS*4h^teAzsJz-gq-K>%er122fN#N-$j9a{$^+#s7Tn*o}B(W1?9w
zH!&YKUp3!1KQUV@jV!G#?JS)w-7Nhr11%#gpDq7e{jIUq=GJc3Ue;08vDW?83)b7#
zyEe%dWDB*$+R|-1Y{zY9Z5M41Y_Dv;+uiJ*b}xINJ1STGzK;YL23kK|MN96p~f8a!>c}kIDP(~>ml$XjI<-OC}8STt;Hg$G#c6C1f
z9;DzaAM2lVUH`q@rMzZ&?Q+{sy@C(Fs(051*T>d3s2^B=p#Dhx
z&xX_3sj+M0x5lhSvsG?g+j_0FV*PpmW$cdwYp6}By-<6v_C@X6+Q5K^TAL4SGd;Uc
z{`fA%$)7)Lc1B@xqqV`zji7m*@ASpd`+wHh1J0du$xheqcIQqnwpPsbradI7
z?zF+QcRHk+-#>rK{7t4F@AgNsc-kwIJ9qhcmfl;C3GXhRA7vx`B)vABls=vwm7bAq
z`X9J^`oXJAho)|_Sz1oMP39(>#cPvyl568N#aEU@@dxqy@fPvX@!|2Pcujm65M31Q
z5^o+I8jk>?lcF7?NpU4w82$@Hn@1a{1>u?D={k20PkNtWXZUsal6o}!B%B?d0EC+X
z;ZEvZKuuLo-SEEE;?mdZS``ONf_qC-N|S;s{W-z1U`epXzsvu|zn*^p|B}D}{H6ZS
zfIr8-JGeDC8Sr=Tw^ba|gjX$B%gf~lazJk2?l+^V<-UcT$%&E7$P-ELncUbM&BpV+Q=Lp%zI&F!Mt!fq>$6;*i6R$bgI
z{uZ{_R=jQ9YTa+G5N86`7X07oa7$RP0@f?mll*jk3-9NT@D_i|qI^W#*=#5Cd~=@Z
zm`%FEoJFrOZ#Ao?LAz+hXc|8mD+;3um*#iLuLl7DfZPWFz;qjO6S)NtX9$-;F1m1W
za?-welyvd~_TPi-h54|uyB&-$ZZo_iJCWTmSxF|5DMQEe33@mRT2(UUyvG>c?HZ_v
zs|Fn+NkEjCYR|<;aEr{(fOiO3hFzuWF!Ho+1>gt08WXTBw*E5L5Di6aM|w$#>_m3J
z@Aw+G<9i%~Yw#4Fz&hNBi@|UO&cfNanheGnIFsy#4Y6C1ytefvq=KVR5YKlUHb6i&
zBpYJ`vJEcys^tYqm28h|F$W9rB|aiO-rUzNP*GkAtnNClUYi8uxOkuPf~zOdJab%<_3L5nI;XMSGYfXl
zHg`XI?LKF}z0>fJMV1nnKF1NDuAc)yIV`7A2Cii=VaP)s**ONJH0A0UJN#6Y#HhK(8w5
zVCcDJ{8-^)U`+b_x~6Gb2j!f0aPBiEXMNXWb&sDQ^U~
zZEoA1SHFirMU8Q-$heAZTScxA!WArEDCC8J9}JlPuu0J^x>-kV`vLF9G|}h5+&)iO
zlb9vM>QnVnN`){LJJVT>h}s-%)6DPwwNadmO*`*9pl=F)(N!4zkTk2sF13PK2*RYMSg?E$=gPT-U}3{f%+Ls3un
z0-bsZ_i3K$x?VgsHTjSs@-4|Z%B}iIcR+ZKFd^6sBw4F0dm2Y+)iQ3$azdv?^jjw_Ew7UGmEEq+Zf%#jGF0j1Y)S
zh>*dbAs3;9KDr41fb9H$wvUw{F+i3OY;Y40A=_w%c?X<%b&R@MMnvxf
zDj}9|XQwuyT?1W*PaJ_B0f+4XARc9x2pEHhm+j&Wet6mD4kB^~t+KSrQX-Iv5=;wp
zo$H;a;Kv1t<5V?}bE8`I6oINn5JJE!jPXjx;*9-}q(CoUf2JCsiU-b{!GZHcbq1vp
zur?61$!EYA^T97_Tr2+R>T^1cNT;dh`+>ilqy`XB4ZvUQ^y;Yfy6V*H$QYi%Gtee#
z#|(<#bZjH;G4?J!Jlc+Ln!dYb*1*4e$2UyB=9`S2J{`bO2#%`zPgS?J4sTZ~+W~S6
zxZDPS+O{AeiG-lJ+)8IdVC;M`ghgp9453sCp>+-4^u~UJF%2}_@LD9eX^N)jHG{()
z3J%{U%e0;^d7JD?7}_Mm5J^V7bjV9)^CbfS
zC^%nld1YQ&kHP@x8C;X6$F3*3(1orij*rFp-Uc~>NC3kT`qa=#>`bRRs48RcB;XtA
z`*FiYY+$Q=a7PGn@DLY_tykJyRN6=8G;+0B7&h8;ijt&CM~M!iDZQ!DMLI)Qk&={@
z@^iZjp4}d|$RJJzF_606K_qP5eMf~Flw8ia&|MCO4vFTXt7(K_Fj0DX@9vx8a9F;p
z+@ojNFQuqtUzPNmVLX3u{-vNi)#x)SF#3T-f;3gi&X4tJ{!LNSub6!<{4x4sZ19(g
zhp7}
zKJSj--%V5H^#?~G|E;9IF#Ay${e0%pdh+UC^{1IV9yz^9?hR(CJI(C-nP8m7&IIN!xYBz2k
zX5I0~ndDv%YqinDUQHowQRRIi{fbB`Ccbe-q^pglQO{8Sgm(wC-04lexp$|TJsf`t
z=6HI#k$>|Bv)Lv1;SC3~zum3w_|HON^fOVbh(LXoJL!dD9dRH}GtBGkf7soPe06B{
z$(j6R&*$&hMwjKXpQcK8{8zV7Y@Vjd^dn~T(`l*bL~#@N^ez@YDyhuNi(#%e4Xx(;Q~G=x!oh2zdjvu+dO
z54QL1QrxQHx!C1MVLLJh@DVJ(m@E>c)tOS7IkiknGISwrG?Fvto~}woNOU?%rc%6M
z)!5besG_dJ3@y|H4A{K%Rs)pf7$q)kiv#LOL3OLU!!={j`lI`rsz<+7z)s$}Nx
zE^8hAi)x1dZ7Mfjjg!_3=2ViRRf^}`swCRwM1J8lF<*{_TqC4fk%>f066wkEZfI?C
zq@grEYK69u9FHcKhmR%ObwbRh#H;sbz?jnwEQI0+vF;fkqMCh!kX60xG|gNYqfNx^
zhbEw=|EBP9_+A91h#^3`u5sVd(H4LP!14VL%{>6!!G?tpUXE%zLop|;WxLqnX`{2z
z=?gqPt9o#z6C81@#0`IJ$LHoA0N8cHQ%&m(12h+St4u8pJeG_~{;u0dYYzd`T1eZ;
z09ioVPBw`+5$C60Z98R#XBWbQt`lGOMz_7l{p+JBSrlW;&~GN80`ip8z|N?39i4!h
zl8O~4&664;I{}gJMi$Pq|3b`hBY>)EGOF(panGcO!CVM6EYJvu0A;4$2dJlNEu7tu
z3)KX81pK;TPz$2K!UJrHt*C?#QN^W)#M?p9o`|kTV~}_%sbXWKS0bt;?K`l#c{OMSQGe8L+AE$gAPD5A$
zIovayJ#%V`kj8eQ7jvyrjg^pTJ8`Z}azk-w&GWeZj8Pyz45Rr9d1Du%p?$Vwupnd#
zVl)Z*31rP)g7@HDy4T!a!;l{Hwl1sl-Ibx47B@#!r60Kjt
zab#f^iDoSe8%{DGDJ@bnY7YZ^PhCg*BV9w9hFH5J*lfmhCDnC7-yF>58|xKfCTH7n
zVX1P$QYJEGtOmmyFQ%x`qGA9UrWF@k?2q>y=-(6bTcmxHt>jYY-KI*X?Ku*MMa(e8
z$tI;b^oOjfjPwsX+z8%QJ`Ra!`fsN1c-UA?GJ#sljEl0JFx_OPvWo>{yEkRo#8lgw
z0ccsU6ky6qSD0Plkh2NP+I&E20U%achfhefP@$LqW44@lE+tkFaKGZD;~18l=jD23
zB|ZW?=cPF5tfKk;EApm3%o^(mX&c$YDpq?g2^hA@5iATx?Oc}*1SrL~Z{r=eSgMW0
zeM8m3Ndgz$Wct3^Dl06-5mH@wm#(jPTa^im&gsp;w{PAxQ%OP1P`NJW)&@Dq7j>75
zUO_>cEvc_Tkph!I1c`sflSB|B?Si&IgjR_!w=VJ7B&JBR1i8RrI-^rBdzR&*OfD{3
zTD|i<;?;wmWF4O{on}(uHAlQkm#CL)Xe^QZ((JxUxT=6!<1M~uOAkRpvv;c`
zH>@N9jNK^$IBklm1HwKstOh5Lq9?uX9m=Na@rud$!!q|pTO4LlpWX-Jgd%mt#aGnZ@1!Br@wN4oY8H)|EucdxYc@4)$Bybrm|*@)|#8$oT}7Z
zBj(CbeMOCnx$yrLYRlMIrKg`SSMg|Q$OID2fMxMv-QB-BP{YidjxaqDf
zS+gmqKZ7KzOxxE@PoiCy->a2`t;Mg-IJYF%?84k enb37a}e6k
z9YyqA0TIABWR*z=M9yKcXt^Aw8>XWAlEjEzM3xOe
zM0X5`q|ELn%9BZ9gIMe&6vA7Pib%61lFBYRiv}AVa+JcB38h-TEfW68PH>P{TaNeE
zC*SxaZ!Yz-*3)!ax`)k$0ZDh3mhQz)AW3+t-2R}AdOs`!8=K>;^$(MgjOco-t&{`P
zB)=^8)(7CxkrcM5I~W7qVF&803?T?;YLpx``zvgdC@fq7cL_IwgCB=)uj+uumqx-c
zTmD-6zFfbDkmen_s!+#ZnVDcL;XYK*kcJOB}Y4UOSw$n&j>w~vFncNNDY9wHO
z@V1v*n@n1@_#M6fZmjKaV4#PDA!p@7V5jfP%#z&R=LoqsBHrU)Z6%4=q;TSP>o
z+jdzDTwP{HWU2WS3J6-`qPQx9@;uGNpa*SZ(x4(4rz@Qo%gV3_SFxUxWR*=U80)=M
zSC(ljTx>mzoCnLE)22a07#DU118QQEBzX~ucHp0iw3d?OL4K>FrTNan?-wAb00dDW
z2y>6XHQtSIL=`~@Yr*7jZd-}!A^(3YE_cQM$`Ou|ZlhoGp}B)3Pj$PF_^4|J4f?oBcz#3IDFS8Jlur`rWO{ErTK1VT}g+DuV?cs%@qpO&wt{5HYP8J18
zx(d}2*d~(JoX}V>M&vf*O
z^9$zKxjXXxSkrB7^iM5ge3G8KYkQ4hNJ%o63m&XX=Up>#j!#ZN_7(fnY-Ez2n~1aO
zxkI&9YQv8vK5puQ6`dBf(es(@UuEBbpgbBAXSBcax8&*3=y4e3_#P5#w#M)5eUHa%)ByW+r*rZ(b2Y2@Tgns)Kzm+nmKl&XXeDHUPBYL
zeIB`C8kyNd4BIOCyJ)A*zaAok%#-4mAz8j!h(_Mw=1hOHT>9STz{g=2rZkSKoWmEH
z5~PK>-V3E|S>CC-4p;n;mOve|kR7~J5{?nogZ?gU`zw!Kt=6^rLO-L7a96%tsKpB;
zV}Z54WhGLa(NbF_iW@PWDA>uEsuI5$9#zk8R{fd~^UFTBo{(4kcVsyo{idU7zuySI
zvTDUz&p}U6#s+L1UBAY-T>d7nsQf3(@syB}e|4)T(%IUh0WR|l$+OLNZ;HoIh1LQv
zU{yv_&Ub|tyt6iX3HsFf3k>uN1}NvxU_;mGPEuaEoS(4mM30*D~wDLv;L0K(V!_rn?GQ4kA=
zxhUTl(r!hc!-zpAx;R^6h?I4hDH5S8iVG$#)LpO&0^;21B=cQpcbz4vauf7h1J3;_
z%Va0^!lTu?E8Dl?pDu)S2bZaQ2Whu^(^F`>#7SDMxLj_17noIxms*B}ey5S76_e57
z92u@~OpCp;+mvX}?u}G$^*rQ_-Rzp}1V>70yIlXWH;T|0EM2#gmFt*F?7D2%6VBGaiJMeFZQh|ex_y(
z?^wDS`}Lq;e+8O_k%4w8m-2@Gg^J7sWShPl}U^fI6dz@^-!uc`j9W$yVa>cE9F<-HrCbOC#
zw}}e(u0&a7iHPR68Yp
z4G#=S^dK>p#^!y2)&YgG%M03qBffCmZJaSWQuTha6C6lY)8nNZiMGF=F_b?9ntqYK
zIm^*;rkjQh2Y{7DmMS6!izJ8!y?{hiCm!?K!D
z?iY6#hU)EJdgRELMFw$U@(X2(l}sXCkC0DA++x{e83KrTNfwooAc4(nqpC_Ng_G2)
zisFOZ67f*=vS5FM0ar>^brvFw7Nk?ufx*j*!?l89h9@`c-BXTj_<>Dvq1(V+xYHq0>!GDql*4M-r2;51JF{#6%iT8?y6>}svm5CYAIElkptoHLWpz_
zR8Z6D0KB;#l6Mf#IRXF!+-=&gW)_p^i9I8`DB?AdJ2%6Ci{UHVynx)@GSJ6K_91`;
zFZr-ighfC#wsfRtj{Qo@zL1Q
zS02JNW>DP?;y7^p>M1d**aSosmb%vNP36IgV3LE;tC~M2RXjJb5beRDYbwQ_r@`W$
zJm`;(kp0r-2Xhn=1Y;ZJ;+QGCmC%YO*25F4qMevc`G@k43{hOE@LI4{3IS0G%xtpB
zeAcqA0S=8S=3HunR{}nr*FRN~S=(HoQZqguQRO*tf`|MH*2*3=K4iGqwC&xvW
zkuL!CY>CO~hmdV75rno^0fa}S9;K}*j%v$;aLhI#?%c9SD`_WgJS67hgLN9VPJ_O}
z-A&7A<=i=;Kh=T+noF>8)CRiQY1zDSLThD2V{7k4Lk{uMun{-@ywtV3-d5!XBRTa;
z;vDiae)HfSKoaoL2Z3rt-&AHvFymG`zFIy=uc2fvtfaEgeqi;Ac{ee`k=YavK4}HA
zPgIs{>)Y9g6teg{GmPfYE!`$&$k?(vfx1Sh_+^seuqcbjJW2~ZN^=l_%MgJ;F!cqa
zZ^;JO$v9lH=2o$-H;f{ZCB@0YMYfL6^^$XQ@hnUN9fxyuhl}H@&QJcSTL?iH1#4=_
zs5=5YGXqOJuoi&A1)(DclTa8LB&43**ccRP2p3=S5$ZKTMzOFxdi2jl*LQZ@TzUN!sD&0))mBW>}$
zAzyQt>q@u6lWxD4mwNlwOQg&Z?l{TS;9ZFn^tCd~@PJWSSIdfD_l{Xs!nRexfd{{^
zlD~hpomlaIXxq$;F!JDK935Kt(VYnJlb<7tzC2fa^GfxkArcx%Ldf()z~#20HV~m@
zm$^H95Nu7IH?zE)EGouL;z40bTm-
z)(}#ofP3VM`TYXj{9*{a$G63WOoxYi1GU>Dqb^C~sYoM-0H09dNPScph!BaJsyR
z^MnXk*T%6>pCyUn5iBA2Qok@_b$gi}<9?CLj59{5EcYMdoLRGvx)S#nnV}k-^gc^w
z;7=opo{gg6m;j5Uw_CHNR_YsMO#k=wJEN^9!_u4eYtP0z`pDNIH+{K%XiKn#7C)W{
z!}&2y=xzed7~#oCvt+NI^Z(yE_Ia5#sm81E%2K4E
z5rZ<1)Y}fV!PJ>G%=%KbxOKtVttMI)r)!(NiSQs@qO_J{`^kuhOuYPFVz=b5v6X>k
z8csR5wX1B4T!Qaa4Z1QgA$SE{(fa614@?P9nc-a7U&K?HV>rpeaArz+J}P)tZQKY-
z6zjxQ!yDzF`9jF&bqPb+_vp6Ac8bhxpV{^3H{NugQR^ra)_SYTNW4XaR%@zC#~D>F
zoU`2^8O#Gcm-r7W>V?Xn6R)*zt8K2++Z&U#gIM;n>KrcT|EXu~K*+WIh~wM_th$EU1H
z=iN0T;I5Ut?$NA+w0fa9fLziOedaPxbL&-(}*%
zNY7mWy^?&D1-?4JvPwuvXFd_}sX~~N9(P7PQM!&$aWEcFEVz03Sleh}VhI9l6k9ZB
z=R~NG;OQNxD#ljce9E=j1xOUx#^JAe=#}CW)Z0s226{*h!i_S7;Zzh)E136N(X+%P
zx9con_(D{eE()CVlt71$%2@9m!6`$HfK$h94Gg`F=lz=j(De<0^XgIGN0I+q+uz61
zW>jyEcQyx8>3VBEGnNNyjij@1LjcLEvFMG~eXns#T6jDV1Q*a{mco-mhv{F$g-aVr
zw(QNc9=zlG#9SLWV~Nj)RwbDa$FtNtTkgYSMKVa|dDGlSE}4JWD9~4vwXa+~Q#5+P
zx@S5ck2IglcDc{ChR@ugdi$E;(E;l?^7FtL^3MXPAnR8Q;+_j-W;aROUd_<7I
z>Ms%?pL~>wa|fj6NWv+*p`aYMcg!I}8+Cq5TtRq;OPT9eDZ
zix_E(gPjYRU5>`*Wl^@M%3CnH24;?FtI@9>+};F`!G&y31{Va-e^!hNn7MEaqyONV
za@>{FCP#h1uPi6&xDp@ALGyN-qqS`W5s^a1{eyVMMg_^YLr0h2bdGj$5Di$;^Fe|i
zE(n-*yfum~SNyP6%=>xf+b$B2~Ohz%$MRqgE@)8l8da!jP`z
zo*%crJPbu2b%?HB4c?87ZUFfsPG^AM`ucD;^XgKo2+1~DvTeolhE&4TvQ!|Ks9^mQ{jlY!
zY|7Xi{#OZbTkuOI8~Vsvc$D9IJtT8}pj{SE{Q8y~bK{3nPyJulwLy1T$B5TVLgnFQ
zmh)e+{#-lFmEss(tH5pcO*vGnCvLE+lJVQdt+LFA^qx=IHnX>k>my9c{LoOGrJ}bj
zw#7NSn43|ZZ5`>jFv}WuCob#eIlf?ywf&GzK~Db1gG}bp&yb7RZICG#xPav59@)oY
z4#VpDu~wiR!|Tp65nc6|E8BErMxZ@9t5JP&^5jXxI1_ID+sl>N*;|66#+jLlyR-7c
z6B84Gs!G`wyq8r+XM<*EHA6EqGx4e`v$M0o$Nm;HBQpYQ{gTU`%-B^!YsgiV8Vy|y
zIkf?eNO1cTM$^eOw7B{?;D->mq;rhmd^&XXs;(Dd~5G?Hj=G@A}N!GH$n
zZ_!m7`&wi#=HfX`w>+oz;3^?|x&!1$cA(iqc2p;d9SkUrR6q+TyyG)7xF_u#Ap6ey
zO(6Sbr~%M*n$?gKEYhTs{j|peF
zb5v>Vnt`0?|EA?MWQx5*a#&^>_(v|5V7anYs#
zKR5-F!RUY}c`0To;&=|{iUN@+Uqe|Hv|0^mDxgYrF;v8b{7OEadm*`)N9Ghl6;K7F
zC2Q$AvJP4et)@E6o`xq1CW06_nb6cwaV5DZC7X$BhuyNjfqvfRiQhto$2Vf`_b$S<*iDrDsPl7ADN)u0*eWZ
zJI}p8CSa}d=V@`9AKs-_6E?H4(Zn%*@x|KDqYtR69SPOd2|HA(gdNq@I}%h6x0;Q1
zO-yvXt==L5i<-d904poD@n@VN`HNmxkU=1*c4%?Hs9PTcoQ1BSswQZMKzg{jIcYm@
zZvI}#uPE#b9C{ntVoVzb83PaLqK;cxoh_`0PslB{j%Ois~uO_9%gojDK}
zot^dbJH`szOZZx`>L$~}i3984aaOlSmTq#)j5kv(-1$L6Ow|(cD6kr4MMZn`t>oBc
zmbZvg+WC8(M5gWS)q)=64e}q_?|!{#Z5N=sO2CgA?|(x7hRN$zDO~{oD~IyWy&sTh+h$k^QRdgdN}A`V+ug4RkKQ-pW4ti_NIlONRK%4@V)9I+-bZjj0EK0gnkcvUN#t_Y@S+_^h+IDAVnmDG+%-wCY$n!_L
zq7wQ&lSE>=M5kZ+YIl#mdEX~(1_J;Cu8
zod7}fGwk@QDo93w)m9|PG;`K8hGzzJf{zWgsul*jTXU3R{r~vURo8*SL$lbQP+W7S%K+o&RjAT3WJ~
zFU^oQF`F{v!nyv!JBS!@2CYsIB1V{@P5?NCG7&KXIkf_3M2ws$dekEko-Tgb>lxt@BhvW6
zlYZ%e#L3PN)BGl3e~n}~%KzF4d_#bPYTSnks8m4R;I{axm^;ti3@zQVWhu0I`mx2Y
z7Tq>@I(Z7T}WB`VN7K~Lw3_dehxYW}I7u6)>UuURg6QG*@D{`ysU&(gA
zl!d3oY(kuW>|a4hBo?b5O!a6WN?wm#zXgKU_DoHwzab{Vx?mfSgS)l>eVYrnO}|~o
z1@ik&aefF7$k~!CR|9hgVZlXM225K$2fpXN{7S<5mQI)|WWhg_RuYTVlWK-q%}|qH
zBdF3W_cqgEc-ZEBnjuZm8!KTQ<4#>C2-%Q06I4%9E9QNWJ21FT9VLQqyrzu;B4Zwy1st$1fBEH-|J7c81i0ngG0Y;s;^g1i@(GsiXe8~=Q2mw
zbKEyZ8qiotEPKj(7uUE*#c{o8PjRl?l)m~Yv@)gTMdyMpCLVBdI*=H2v7d(Pmart|PK@kCCo!222XG)aS2Ep^
z+b3ObsC9&lV_+}dFHGX_32
zi=&cP1qS!#WyWof%ggKy3|HU@<1YAY_qh-k
zEJh|FdmAJ3B$RiZ=+NSo9`P3B@*sk*3W@3Hr48c`lH71Vnw&x{#fVx#Uk8P
z+KR+D8&6m8WpOa5C~yfl|6h-KhW?EVZby!K@gvT}2qS*f#5EyIECu7;>imB_qre33
z=Mk7#e|U{&i09!oaUZj1*&jO{DF6whAOkN=V93)|LUV$E!HmO$*3n%k6hLVk8EK<{
z?++~N?k)@0RUI
z?NcSogXi&D2H_H|1|MaFMaSeD=HmV|3aYkS?XR9Ql*Nk7K{#MF4Z;s%{nJf0xEHx%
zu0`$x+<9&vT9&d0Y69f}Qu2vrPk2tUmiXne+~cWdA}{RExgobDOZClyMAn7r-0p
zUUq0)MB6i}aYXEhvVYYG&H!0}|qMOaICNNlMT_%AcU!iV|m~oQ8j60)!
z8l%Eyyl>1R=r|n}Sd4PcwFV5s*n3}OaVezjKURTZ7+!&r+lE8b*#0RS@8PE;7Fq<$
zX%*DD0}rU?!iU+G8j5VC_^5!-cp3l%4yYc15d`kt#QuHRau%D-RL5=4v>fxi-w9VVTXa^Y+;hX
z`pZG`*oyZVJ~(XXJ$QD2x3>KC@msABmjSnikOF2iG^US#O%Gu9zKqFHSY8fr=WPNE
z!}yY=TI6}v*<7^hxfY?I_5-LZwzxfQ5kp-E>@m%|Hk0`1C-eDdBY6tP?atVmAPa~k
z%^WKW*qY#4LCj39f8$!Aln~Mbg6*Y*wZcY!%5edLVw@CU+)V-#Y~$R?`ioku|3SpX
zx{2J11uTUO<3e>K`Erf26Pp>va{x;>b$NT6UeM_;Or@oxml(eDO?(+IM@vdgC+PI!
ztKN9)cSlOgd=~Kb($cc#f2?I|`$a=?Rf4X$_bJxid&7
zUgEpET@KK)y*zq-)p%)HNjVDoT|_vK34hURRjFGxwH9)Z>x@A`X3T63H7CUL12WkFpO9c)xXB@Re+d7G
zFmrqYoeYX_%D8J+NBagGS5t=LWi=cJmLFbCzkpG;iudCeJ2m)C4^6vvIWuZ*!Y3h{
zfeQvRu5`9qeKNUi+xH@BwVOOl%z6bjdR1I}RDO(?^Xu1>^MgpM?eo+6dD2
z47pieSXYzydTfY`H7QwKmHia
z5s&~$L8F>3Mbw_a%~uhOhpt|wd6bu`RdsWM@RH0
zULBIo1_T!<6a~QnY|7+N~%N9V0
zfaDL9GX;`>#1e~(NW+tq&b>bx#b}&|{Ue>DlBql6pJC3OILHg((NU1ETyD;ahChqw
zh2IQaNJf99k=)GDmT`wUUk6I=Ks;0eV55RRdBccQP|s|%ojcFf!a7*H-MFPJeC}41
zyG^>ix(aU@`_91_kNnU%Ay<528@2^@U+4>P@jM^k*1KZB?TV3g
z-)&%pTW{3OJuV}DZo5}Bpg!vs)dw-&L*;>6%o%RG{YG3X%C!%mCa%jU4))gHp`8~4D_^jaJow$SuD6M3-gp|KCFQWpXRDXc5+P+Vu2=QVa&MRIrT%RdB
z+C!uD9LRaa5X3-n7OA2Q-aK^+kIi)B$0ecL%k4?pS!e({oA$)bv!vJ_DrZ6rqe{xFS#|lH)$SKPASmeYuz0ll*g(0m`}j
zCvL!OP&YNH)h$h`%*vJ2Bt&WU(Yj;$y@tLJaZ+FrJryhJQInAv(DK+^t
z#Zjufx*!z|Jbsp$+;hsgV}WA1TpS@+=nT=xga_;J;2|X_Rq>}kr^8{mhf@9U#fwL3
zA}_YZJ6@@Rp3|F5>vP`#}?mo^~QX33od^$matDYy!+OR
z1Q4M!q?18hbXaUE)E9NgbQC+tmwu#*J4po>b@BSK>+i{{Tk(eHH9J)QdcSXW+72d5~{9UC^&)f=NQ4{*tLaqMx6$VLw1w;Hns5S$ZigDUvTbBtxEQ@@PR?x6HCwRFv@
zh+h6-Ris6WMKndQ8l-V|MQtQEHv;{Lx$Q?36NW!9+z3>vU%#Qc9?TqWNbi`dplL+{
zknY$urAlQ`sg&0+A{-JFH2v&`hV*Z{t@i&$pIH6`$cP(!>V8sn(z6PPeZ0^GUM$jHAc4yZc-+
zb-1Y|5sCW*;-?>=L?oVLSm^jsj6Vzqg#_SX_lWarLH&Xb*6L)258E)i2)
zAw;^td^C_H(GRu*H8iYdg^pdZi?OSbm?9aw6}!e>ff0-RLt}aze
zSWdv90aC|?XtZMn8dxsK`*zGwNmFx*rq3yQbJ#2al-FGS%M9htp!Mr(+BiS_udi7j
zv~z}%T}v(`*Lu8!jfwa;`yJz+8lG9~!2K*Cgo?M4LSjnLTe|(jVj`4omJ6+r#*Eaq*RO#pjC$BZ!o>
zmd>Bt8DF1-(I?;$sl$-hJ@+UW3l*D~s*hvRzlKfExe#fV=g=f04qyNSmKP4g;}ieq
zz~Ge8{rv>nVI3?Ar39uA4>W}^&9~`8Dh~7m=-AP+M8PO*)>i_tO6?*Qcab)Ci+da5
z)Ijx|yPd+P$KJCA$M-A%(2I`;b)hNcHNB#cYvBqXYD~aVQY0?+4y+&2?u^P4)|8H3
zX)bPWFJ4*{;_O@$vh?sKG>=@ZE=`Iby(9Lq$by7%C>j@;+M=tiDY@-pt|`&grnW@t
z{g4pKf-GxdASlM?EKn-<>dON0fmHl8fcNa^0GIrw=d~^g=sG)fNxJ|3(PM-U9##>wb`SBP`Zdm=zid02q9K?M^?`*1W5!Z7-f
zO@k)RX@P436&<0CMJky6YoAEhrpG+wRbqI==H#8@bCyB0?j6{oj_HXQ4df!zdV7+Gr}
zLVs0g{vgA3z{Fy?|6g8AAz5oCx-Uq{IAQm9SO|@wX>J_{+k3a$Ns70MMqci{<&rdD|W|(G0Ogk4X(er
zZiwiQRbs*-_nA^rA-<+f1}{0!h!W;W>R=k{zSpGf2KRLA!buUOlHq?x&O>I-@sOfCA)S$SD(z7edHiK!O+1qu#O=-
z0Z@ZT&~rfbJJbmT`8^jHpJ$`0=wLJ^yVSnb?3f@-d8kVGQ4ldB#^1qId&gq2-bE<^tAe$b*ol`l9Jaw9y>umZP*s
z(?$BH$VTZ(4Z{L~0GF^6ii%7D6agi`R8+K)jj2f%pJ>j)>4Yk{yb=A@Z;KI1SwwoBVcmpxuh?f9CCzzXPSL{EE#|2gxNPeA|ia?f6wu(
z560F$|L^OW_^8R$^`lQpL#7M#ceGdH%;2L8i;s^v^UI?%UP;kpvdfBu|Hbz{{F@z<
zogMS^^~|Pz5x=#YqF3@roXc-ixo&QGsyCN8Bq@JV!LKs9xVgC)w>UaP3H$_^uwPnO=5>5Y%v>gWh3yOYvJDkK}!Jhz^(xi
zA2W1=GAZ2+bwrNoPq+=G=DtMQF9rGZw2du#-q%O1h5DC8$aQ4cP+{|6VA4db@wp$^
zHfHBLBDl{h;CYG8ZGjzB;~C>KZ1zs|S;8=Q$)|kHVe(dGfq*C|P|91w%)URP9ucf%
z%ROQN?A>L6Rsz0iuyd=x9rd+@p6(xN@x5dX?(_VOe1rZ&H+WGAG%=0tOe8wfX<{lW
zlF3BEWtuaZZy%*OvrHqLxXJ%M#N~1r_0NQk%&)O$24l9?0|#2ev#=POl@=M+9dVtTU(E@F9QbCL{-73}8!mMY-%a?WJb!*ce@x12)#UvgE6k9;cRw
zm-u4s3)GScNjb`4%YP}cvUwUZeP*mZGZQ<9dhk4?AyAZh@CJtEfzB4yJret@V5i5z
z`n_{=1Y>4Ps0tr|kZ>di2}hs-JXB@LwYeVmyN0bbO7x$9J?qxLu3OLdjrs2jVA+hH
z1wL+Lf5L8i{8^x}Oz7rNaWo2L-y;lY)1Zj=*|)ORpP6x$5efysDJbsNN#`kC(7E^K
zIuCNQX+Grj9(!(f3fj>SYQ<1@Rn^{Z=kAH#TZ#gfW{84EuuDeERiVk-70IEVXd`KC
zZeiDjWZkAHm-Vi9A}(aWDd|)Uo5T7o3(>8!P)pcvX~BY7aF!7>8u-RJa~WRP9V%|Mo5?RsSEqh$k46{+*LD4=i7lH`%NETK^p
zkt?>lseuHfHB_IqMlI63J_-0xh0f9VDQ$o7@y+PVY)ZEw5A2^sXTDChohnVaAE6
z>jSg=1G7@s8z;UA7+xbD^BMqRi?pxKpaGU{sr%JyX}5*=RiJ0(edV+rVAigd`obVl
z0n>dK4o9oPRp^)p4*R=CiA5ML4BTcybg*;9s@uQ(iu_-TRfnR*6~#3`TD97X|C2B^
zOrv`FV7CLz>5#al)?6fWq+!v&jcuR(uZr@$Qsow#MFD~D*UI$1VvAT@Ao6?uVC@LK
zA7VLV_$;%?|JnP7q;ANLF3Nh&*Nem^X%(Wk_{m6lLKMlF1t>}Lk370bXjeY(X9hB)
zU&nOXL^lp``)p*D(G3vzjf;-zdHf9J^L+RMG2buHkJqqQ`kPcB5eR$*{Q7+H2fNs+
z?l!hR`j7B8^eFA?m*OjgydQbb6^07=j|&lYv2`}!q}?-4RCUtyWT$MW>B-3|(YO(5
zKLE9^@5Apkdt@yNx$jR~G{dRt>XK(Rt8VeTuS@lCO4H}-D_6)`_ME$P9NmY#3$U+8
ztr)Woyw0Kjgc>51m%=usC|31)v=ez)0I+VsJ>!D46hUzIx~*juYM_zA92A|Y7G&W#
zFuOnklwf~3BhF6jA6nq|je2fVrQEQ2jsF*9RNSlV9XnrU$3=ZXuJPY&khL|b=N8RI
zc_C@4*&fyGv=AOT`^nIpy~>J;y~;V7eRe!h`q;53AhGUXWpM!b8j-j-C9*n{hAAt^
zh`@G$^twW(i3uv4#L`e;4U?YWgD{_2sWh0%rrJx+cFe1_f@3qcrwD>%l^K`!~HzIFe?j2ptv|A7wDX&rPOh3}zi{mZPvM;*$2z85&Xd
zmGzce-8xYFe9Lq}t-%2ny}&N8>n#DntwUbc#eUWL{Qk?quh>s*$$
z;L_oCd=$GrpkzeCITh|y)o%C72kxFIFZk;yS88pR|J=<^!0YvRk46QZom)WQumJPq
z@p0KOP7{^-`G;1Y(n4-s@Gl^4VX4)}f|MijVRE@rF8KyrNv}4&(^G1y@zx&>vdvL*
z>qha3wL&40@%`2C@T=cv=!C-76E}))IUQN;jz4ZSUV0u@s&B0}sm*I_h0|lBqo>Cf
zuC9qvmp6>qSM?n7|
zKTpYkV$49vYM=axAg?|_d}K-gnCJWC6@vWv$q1$!B)`V%{c3gn(#rxl!7t}8nfg~&
z$avW+;N_Iv`rSdcJDj(k)mu1wIOtW}9_8%eSf172avC>3e^Ig||M*oVy)K=rsvnXR
zs5n**zRXUHj?PZ}5*#ZJRCv~KeTr8F);9S<*cN7oD)VpsKI9K%pFZ<%RR`0;hIM!Q
zTH-S){s=fswYk|>3tsJA!PbZN;8xh>Zxm^H>y-|Tg0xJ1pT4aBm|6VNY}SP=3T~Y3YQ*sbAfiNXWWQAY9Kf_#NG~VA>EhZHvPB
z&+*W)J9y|c&L5+LX&`~XG{B<*YrMwihW44b(>NZzZ)ncHZ|LM9L;HGjz7jB-W4gL}
zy1Mv1%UUj!acT6A-!I-{FkT$1xOjrjIBxp=_tATd-;@9cIomJYre>Pl1(~|g6*`XN
z^I%@96Em7lPhmQ~oD=gsI{iJS)96?g2}s3J?02rwm|oBs_e}a@m*{lvjnZgFCmCh1
zZmu8TAg?d_yYEc*zWvtW?mckN#0B~)NXly?)2F^0@22nivLHvAcUsz#-4hd|ml&hm
zdF}|~-sr`PyR#1+dPtM);N0^iGpt(;Z_4^i_w5wi7aAuQMkZ%2xgVG^mA`|>Gvr?l
zN}XDgoEa&MlZP%_120>)W}frAL_fvOzu9;Ouqq!<`kf9sox34-!|9;YlYWmYS)lRE
z&3yKhzVm|3f?L91-TO~>d}2##KbNePmzmKI8jc^&zx`a&C$>FF8#gBHDXB=SS8hz&
zvjjB)j8`v
zMQp+PAYf+~Bv_Asd6ki#z8n=Mq2Vn~n7yNY
z5%q&o@GSd;$GxZ2i{w(Z+G)oH_U-S;Cy1r1)z0>Ut8vxX%K{3`R`V(xQr!Y1b0d8nhW14O(K_TA4OZ)zYHE
zj22i2!xN!2+_q34{G{>krS2#yOpFT+O^hon+ClC0k5DK^%n5ez#+-lq0_%qK&?Chm
zuDMCEgZc+~&b+L2B%PO)=lnoFm=x=p8&Z5E=42Ijo?DfXnT#7R9m~jkt7T?fTsZht
zU(C!nqXq9RUn=>!Eic~=0N8#gwyi|4oC*6dfMHae!AD9vijJjZf10$CPS1xtL0
znQlm$g*ntX6ZX{FNY7{izNLWlwk*w)I|u(y2emOj!oHT%F=*L`vg{**EaBa)r9~wQ
z%r2Bxc#}yB1G7b{mX>v6m_Q&9JaZ{CD8Xmur5MEud4!0b_ZZ)|SZx?6znP{v*P<4U
zzej+h7J@+E`(o$n&sUp~1P9}XoF-e#0Ja@YfWmYkS2~`oZ~~r;3g<9$h~w6c4h}P#
zWbX44**{u6Z`=9yRWVI8vOk-5cDIo~%@KXtx6nrxL9KK1H%B$jT8p?Woo+yg_3d+-
z`W-uv*I)ri4C8z88{7yMT
zhx<@^5ORI*H#?Kb?nwp}@%%UA3HOHx|JLkB>g6Z9&pfjmHF56rmHS0Um;3eI;h0A4
zp3Nk?zt+?q8LdE){xz+*AEH2LSp21hRfUADm*RT(gwj_g78R|$_-^?+f`U;A!)q9X
z+?1WWckfKeCD`qR;VwG`p)FQw-0hdB=B$R{JjUvd~_?sOiIeXx-dSz@oM?|I&T)M<*St*>rt&G
zgyPH~d$8y+Mzjj8!Z4r_TKd|%&ue}sdlY`9s#}Mw;~r2Sc&r3vKJDr48Jxblk{y(o
z?wGC}l)BPFA;FhE+&GvV8~g9W>x{HB>FE%Zo}PB*I^*HLv9Za6A8ri3
z6f)4&)p+D^NM$gn6q`SMa8OLVND`4Q674_j@0Z6oJIBcT`+2LtdUapKfn(`i!Zis1
z28{UpmEL0UO7Hx57}$j;tmz6%v$em>(xi!C7%(Kt*t1ft_N-JHD`5Z_7HQI6W&zjD
zIk$<#-_*SUE5%FPvJh#d7s7k~uezQ{EL5n!ArfbD#)I-B{FoU-y}sUlUeX7OA|kQa
zgZ?;Gmn=bdO(WDY8^iER7Y{
zzbhzs!Aee1Dp@b`^WW8r4>$i}V9mc{@B8`PCoHLC9@$s6c&&0zLuBYw`fT>$GI2oz
zR>|NGWI}5F}bXFI6>I*TiVubUMFZSlPH!E~>U7M2Rhzt`%C9%J?OSlEizf%H)`T>RO*RfsaQ}6O
zPhw(+&+GdF9;e6PClbn;<3Ri0FQ`SLqid0Z_xD3K-*lb3d!$cXPyv4i%w4mBHA_>d
z4g05GdC0WVW<5CmZ{Oy*MlQ{BefyTl@p!1Hl_8(s++Rvb(L{zMyvo^V6!@sXJ1VNc
z`@KUEaO1pRxV%?9?(5=%TE>rULi=&EFN-3QrU`DcWRHC97ypdO?`A)|pMdoc{NLs9
z+HG5DB%U&D;GmLqpQSvQHlXB@Xj`|1*Ixdw{`r;Vc(UUo=yfRh75Q}^TD6=p|AJLR
zc-3;e>Q7>Q>)e`$6xOkQ`2$0FL-`*qpUOUbP{|s)`*5n_;SfuC5LhJ(dbTJ-=R+TV
zghH-%z3h{;rX-Tdi7ArSmwjEw)-Ayyvay$qm)3@B!?l;zHtze?@#%r$rb#4q89j$i
zm(x?<0r2J!UGe?xr%FZ2B(4#z_NP#k`hV?L?5$t+EpLkwkw}~$e^5t1}rd_Jmvp`AOAy-RhNn`pRm(|m&bANu4GRD8$&)}=OlfJ>uGjqu
zBy2fC=^rMWe3kVIMRgH@aZxmv-Z`}9n;(jGfOoy?{Uw!O9G_RKXq0r)r+
z=IxJ{#pG5>$<441-u&z9E>^~#h%YWa5wDCDe=yrzS!}i
zC{y-C8<@ZQzg)dq{w;BM2@BU&G+v9$igeJ+KnwKnYnU>ClH!#Gm!02&Y(b6PBUmiQ
zDgZuYCyu&69)ImLhG(tTXHq?mru4|5>hxJFu&;xRe*UM65fas^`Jo(>VeB_J0LlaG
zgA~=xuc_mlD`0F7OXa(gvKz!gEpUAM4LgOcMGPZ#Ex!17IR|f0g!`ae;jwsMioRIX
zc>hj1P6EHAa;jUpes77=A~#L0sG)#W3yJpbwViGClzZ9{Z1E|Mo`yb#}cyh>eVaxlz-F*kXTKOrfhxmdkUD3`YhOLF3y
ziAjEfBxWHqNf5rUM^@>)L+cL@k9S`4!LF+Ot_G^601TE0vgoL81F%jFlnH9)e)}2w
zI*etG1wRB#nVnXOhArrO!_(9oz?xs%z}
z$GM?Jnuf~hl6e{y&Y?H984{aLKRY4>L%pwFZoc|>`Jy6?R6hr1@=&4K%G46G6
z{6`(m4dLMp&Ng?yt7=!bX>tv3aMo#ZZU}b;s@8Yc22`i1m2XN2Oz(pMr=
zNF<`I%T0nVn3&!VNQ`ylXfy`DOu4qEzczC{n?2e}A4HF4knZG0Dbu@ktFr6}A;~2-
z#7Z)lp}uviju{t+2?^r;ObxmgA;n?$H)g6|-RdAP<1qHvh*!J6pE-B$*Ixt
zz5t7tS%WD7!Okapu}N9r+9kYJbMxG(3hUi;k0L;x|9VmJ54PXckoqCPr?tCof3>o=
zX=P8kA`I+ZPS|(pd52z$BML@6nyH5`lMPHChHIs>n>OkTTCXp9d>I9l9t`dy1nkai
z$_P!~_5Jqkie02tR7=B)*hM_14l!&9nFPa}FAW({k7Cw0Wk~iI-bLA1YDf3!Ez&}1
zyE#|VTz!IYw-4_~b|~}+5;T2w_~-zi#^9Nom9D__-`-vvgFF3yDrI8#e!0PNV$q!nKBksFlj&`#lt$Ft{<^O*QZAflM*2nIP?H6MS
zha(SPKXqdM;@Ls#LA(l!f$X+E*6NaYDcT9k(Kj|Qtq10H88H*ZaSJgCz#9UWgFd0D!u0l$uT=Ehqa{A%*h8GjM^=%F79;Hhy)V?d`T&v%;%H&C8be(tU&a~(Q;tbLVliU
ziDf(=JgD76l}f3WDGvbOWlymQQ0-GH8@inKfJ2LaVp9+i7qL&F*dG}eQDBRHhNLMJ
z3I!eM!{W@JE5YW;j5d7*V2$v>qs}CE2Ko%pYDF)1=M*|HHyO*5CT4~Sn*adc_9>Mz
zM;X?)*CmF6j)=nXbZ!S{I$#t1)5$q?d`-++_mxl*B{~VY%6%tjt%Q$|ofL`$R3=Ih7zKrW{N@yj%KntDJw?@J7wFrTQDsh9`stn*uaY}Kq%+B`n&SvJe)rc;OJs=F`Z5qn~UjS
z4o$4H7Lj8M;~_3YSQ?+E9LXv?%>cRbO`kDbi2fO~NuIobht|AQ$G=i%LVgQCD9;EWLQ%*hd8Tg^WTyd-
z(Sxeq8F)t3J2;@~pN6MZ{r#~LMOhtOrzn?5|0=78>lLLyDAx|mH(~n)GjX^eX1rg%
zNub=2Bd1gbCL~k`kmTSonzi3!9fwk#0;f=_*KziHuvq&%*KsJ-$#4p#Y8_{vCo{JE
zc=dL8`|+CcisMx~;ho1TzZ4`t!6rWjLOGmXpDkFmD=TZ(JZm;85l8x5t4x=UuJVsNuxvq{Qir6LGlA1~3hIP|xs!CEy
z*aXq)xUH^W5}F+2;}(_{K=^{lh3uIz@BmVdrSC!*`x9lL6pOQrJu}h~y)-
zw`stK%gAE@Mbg^3WIqz|UmjMG5ct3%6`r7B1-76cO6vLcT1dw>G~f{a!*x8TR89mM
zb_f6oOz^M*66`@cMsXD9={HWK7li13`V{gX<#7?xMf`iH~py9o1Z=v`gpu83@t4q;sF`>v(Fo{X0#sxcT_w=Rd|);RFVY#Y#-(=#sf4CL&EXP)B#Zr`qWm3n0R&qu
z2B(jmzENxU;qjyEx6XWR_&43CAJDa-Ow^x@VIY
zBeYlbRF-rG^+sZ;l4T7@JC|F^)Ya=2unziA$%f&(J6j6z~^w2-KF
zR@e&BX1Ck+;zNUxStg2{dzNlEGIL2*whF_}Z!qTi|mdY}C-_e-ApM#Ot6_&!I&M+Hd!sARrV(Ni{w?kq-tcP{5ws2(!
zgf@a%_z`I)%;l?tlG3;DDipR{{3HYhxOn^#W!uN5JeMFp&%Z7F`6-`5U4q=O@U~z>
zp-Exet>`XcoOzn`JJ5Pg9Hg2u!Uj?`b6UflbSuq6x@XlLRLmr6tgU#Sb9Up;C~*cpo0IplrGm911iEAKHd?@2qQ*M0tBh3x`_by*)P
zBnmSH`v>36I3Zq0OvH%h4)oVKE#@Uz#7H}H#RivAZvjoh?L%W>Z9pI58f>^QVwm?b
z8A+Of{jP`e7yKE2$nWw?{1~^n5?)4)s2iMxBGh4RZsul;#4!8@LogV&(1`WSHI#Z$
zcZyP9-9{2PAqUQ9=75tVvYkoqPQB3MS??91-!-{SqFdC_H*Ou;01S~GTGa6t9(w%0
zxA4yWm!Mv{_V|B&W5v^WUl5X4xf%!B7uqH{E_TjUwD?-i^N}}2-09tq&0{-DZ!Vfw
zWwS*vP(IdeotE5~`WdU*mb3W;59BO>YW~Gkoh=+5+r*MP=8dU?l#RKrhp(%`78)r^
zR8@l^Ch2F027{_b#}ucUlp?Dg+sqX7c&r7TN}iXi0FN^o>kAf#^+-y#MaK=3H2`CX
zqS6PaipqJpCF}(};*B^m=#$f5Zi4fWDMZ308%?Ds{))e%C>rClD^MweEU*F2dw-1+
z;Zk3k=BAdRi8N>H3+r@@#Kp(qE>&^kPsJ`+D%kCI3oM0QPykMGNUwHbvKZE`*ANpp
zp+Lrlons(d{rdQKZU{Se+=TD?fg!@;-ax
z8(7^hDX@O14g}5H*A?)<6-PnB$5|we00DNuS$GMhVpza~2P`*D>k|~LuL7~+;fqf$
z?fd^feAYGa6MX~y%=|fjO9|qYs)4^6G1%|dks)8de!aY%fK7ic4jNt0vnzcepUl`7U&w|u|#&z3@5MwoFEcI^ew&y<(Ycf*Q@#*ro3M?
zW%|hi>~{M^$&=-FyOo_jdQ+W}V|fLP!W!!1U=*)7#_!OjLNR&ikdas5MZeJIm~xd9
zN-Oz_=GknqO!#_nl<2WI${z8?vL^_R*fm)i+dK|~bCa&Euop&RD25zAJOo1zsu#BL
zh9N7#g)BqM&R#LmG@2t^gw7^NhYW=|HIa6^J<`e1SN;H!sw40!s`~Wy&YA08qE!6w
zc@rYaNTk5A;WRqXmaQ!mq^FFQ2uIb?K-U
zZw69;943mVc-&SJ1AC=ggeBYJC>{((q7~i6C&$xFZMJx3^|Qfn#h-v}Yoxi64tI7#
z6Fy_koEhQJ$WlQS9?Gg{%$q9T@46i@IUYK!cxyeco)8jL`pi_c
z_m}C3V8B>$4x2e3W?D(dz2)>Gyrh$>HIpRCtjfL*UK6jZ
ztXgQ~6%eJEXbOKj-$cD>yl@_(OppU7lx_I=gCYiqUn>`9{K;htl;I@7Uud~N6D~@}tN9R>)E0y<@Be#v|Dh^AJQBGX_cVr#)R7nRe7=V7;6wNT9?QMG6s1*RA!z#*78bURFj?dJ_OTWg
zTI1s5tmcTeg@ygJ@T{<~S9BE5B)XRjUu6(v6i5b?0hJfBttb$bJAf2K=wEwn#GkN0>AavS1fnh1+l!ZbL;0_ohJw+=hE_8?M4GSR)KFBw8tf
z#?c^Z&R?Y}gv430Ux`{Xo`WGsVaY)bQnAu(3!;HV%m)4P*9PzCNL_h
zWnI6g=brl2Z5g%LaVZV(%~=n?P8+?i4_5ZqcY2^pl~HvW+r4zCy0m(E<=RSirKzLB
zmUNHz90u-WaGPitDjj(vX?G|-NjLl|QAsh1HIedXD(C--1`;CZ!=~Se=6*0uN=(~#qElr~;zC}K-
z5>Sb&mK_5!US*ePx4Yf$!z8-j4J^?FYheZSaln2PeNU4TO*EN)fc*~WV}cd1R%yA?
zfnrwEswo??lTRJiZ;&8pgfxLy@sz#fLjAfcY%QPzC709!xZ2b&SO7!bHe2^SAsGe+ya4p1>YGf+1OEm=z4UYU%sw>TDXDKwjD)&JyNV^&QIM3xP)nqO|
z&Tr%oToG`5J2c`zMx->b;waKIXnnl0@;K>Ae%Q`C$c8h}sHBMHs;VZ7s;ZXn5b6g9
zCkw&B^<|LyfdaeXB<0PQNJq4St;0#!4GKsOtY?UZGDJ*Q6QK+x=|nTslUe8Y)B$cm
zHcC<~WWz0N!-#4)1=(^El}{aW(S~D@gMOv?RXi)eKFH8Dk)iH#+h~fII-2JA&G&dp
z!Hn59NQaHt+_!p(rFGS3CGTB+fwe=V4u&A-MihkP7S{~@K~=$D%nF(Jb3|=btsU|6
zyqS@;OP@$>k7uVw&CL8;il-lO{_130y~s>IQaqiN*}xDD>9D*UyoBYDj)s#^16S+^
zlB{J$j|9Gw$!tEb4STW-w!}zLvXRAtnTuSmsrm{&VwQzJ1X<$rnE;EvvWE4IlwPVyd3mHH;1O%4?&mp{kWSaahLka
z^Z8OhyirTVL(a}co;3wG4i+Qn9oXyQ+fPo?7+6Dd&?<>z)AYj%5F+~#I=CJq^)OfH(Z7b-4K6U{1{z!Yo5BeBF_xXu=b
zR0Hvx0%$&dYqFOM-N!eFf*ge{wpi(ghB^+cV~9TQz!e9uiv|J(5H)HS5cL&qB@7Qy1{wg>p!#S6US5gCqk?Jcc;;W)EG2KTG74QB1oUvF8
z=6hk9FLn*>fjPutYSva^&>8MyI?`viiwE06p7esZO2*;(@bx;s-%kDP#W79*jVRv
zy~>R`-iC4jMUr{kcoP^~XMrqO1@j>_;MXvq$}hI~F;lIuqD?#ZEwx@=zIf)$xzK(i
zr%s(ZepIACe0h@*OS9X*cRGZ|(p37D<~3Y!7v5Zr@8P{0@;0r`%*fev=@aSY!+OYo1&~_LA166;rk;o7n-u-!QNw6l
zZ9tcOo3l(bllnxGWD3-=a-P=UQPwaRlEIMK{=QnM7AsiHC|5^{d4%0eBbnw{c0AZ^
zu&pDk>Ne3nwtbVux+d+%mUPK!z9qM?Uy!$!_BJRPvK903Li?=&4F;t$pHAu0nn4DS
z=T=GWwvr^ZtzB}`FUtUAUlT5n8?{=KDM?diSYPlRe+(Zn>|&)+fybNvM@k
z=kLI9lL9|Dsi{AZ-RM|vqzK_GbTh(b9Q(I(w~^umwQIByt_Zd$)kv|hymHWvX`eJo
zMQD$Va%BOoHlmcdSQ^b+QZo27Dg3R`N@X%q&-&a%`^rI%hz)ys=mY*ZOKZN@=k^~;l%G6jOtc&5;0?M!jhGSiz^=3E*E8v(TmXN>ZxA*BNAO&(gQ5nJF$FYj-P1hQZnuv$_iWuX
z!qIJ-Y`dAJ&=mSfI8U9;uoyBSGf~@!)4ZVHZcJf2HMKi->{we4JPm_aB?lX;CJOov
zJ%{2iXh&I{>EHMpw#62};UzU7fj{Oqc`|q8c6IQ!aP!5%r>=Ru`ez|p?ZOYUK71J;
z+p|7i&GGF>uTJGF797aU$&3-2vxjq*ruL--`h`E>XZbGf?Ru6!pkF9Kle#qL@L4lP
zpcw~>A3jKukrGg=HBv%Nt@gu*mQj)<>Di^ImN%gm;DLo^ev@bOo5DhvWyZER0o%f?
zg}Ekrh8@o&K2kdfQz6qxEf)$n{GUJ3ubQU3xZ*STC)M(+=|_*x-hKxkp51@N@vZmM
z7oMU;jYg>YTv>Ae<=1UMNl0X)!LSo9xy*+K%cl=N@adQft?3@$`%cr@E-I{J$emDpKpXM>6U1h-`pgGrE3=j1J`h)!
z&n!0^!WIx6;z3;0Pac0H>sQ_q|MUEYwa3oh`6H#StbnJd+~R}vjMRCboH_Z_C@_-&
z98Yhq+g_HFBI@{^kK^tkCGp&BxK>+n?rwlxepitcp1XzOV_
zR;qm|H&o@%2wp&-R4wGRRZcDN#)AKewV{5(AJLR5
zY$b}|iXxS0D;=P>d3Xsj6t7Lf7A8oWji?KO_dXLIL7Ri7sbuo-Yyx`{|7;G3kichiA|79!%>{p~dNwx{F#K#Dc*5T-hGPffBKb3&iaY;o
z0s+`Qn*(y7VNM9$nmua7i)=9R3aE9C`S>}P>2|0ArCpoMI}Pc=y}L6
zd^knKUDYECJ}5^TG6lh#7YaAAAf%ykqn9HOZQTgep$O?H`QEVt;V3~BijlpU9GOXcj1RQ6JNr>FtncX|i-AOs=sfdk<=
zj{1q%bPtrE6m_=P7$C;$n!+4bpzx7nCCEV`KN&?J0^tE;P*AwZ1SfBY^+3-;1qo91
Qcggr}O&OHjDH#9&0Fv$o4E(ai6
z!AEh4fQGAGQ=(fMmQ0d7Z?9OHtp{ls;s*tsitxYD`t*l(h1o;z&EuJ
zr!^ZpU|E&rfb7VWBBi}20!$A%IiMq*mh~EYwWIOwTH-aFlE@I&0YM2sO(V5ZYdeqK
z0aafgG>zl@-#4|su4M0fud3U6ATR_5Y@V4%0dy8APIZ;6&cw1>wkC1b*)y5N{B-?x
z|B@g)VmtAG2|_T#4F|k#{t>{$yoB%|G2uag2MA#(k$?-D04A_~uY?d{%M2uO!hVm|
z5j#W+E!g6!(nKsG=thkg$7+)*ejI?iN!Lo~^#86uM7q@gLP}i-Y!X@$NnfD@ccG=B4Q!q
z8--mMGf+tC8^3|6Af-p4|ZUyij)tKsaDhiA}{L
zDjA_fRQ}#ns}zt~XU{krWYnCG!pkls-v7T__}#yI^cw(=4S*^FAXN*3(y2*`Hz2j!
z-Dm*6n+*^IK_g?w@%&f|avWD0gO%2qb0$cgcd5sDO}6QT7jAYJ1mXGo+w`-YJF<6I
zO9AG70pRp0nv~X?H=`Yr)+5?KBkBKdjNy~ugK-45N3xGIhWO7Ckl_=UHpg~|uwtlE
zZXa@)GAY~5>C+Tl{7sB^wjp3yb*t*E
z-dVg(FDUUuU=NkYT*zKpKo0Q|-+jKY-*34xL-;%avF$Z2+P@eg%U7=7PR_Tw19BMu
zwdVi-C-Um)BdvC9v{bD7UV7PE{MtYQu8*uZACvYnmmW-t3GVp66`CpIoV
z0U<5A>E$Rc=29-_O0MQQZr~p&f>!_}ebnyEROrv+N1C0eExTBSAGslCL3Ncu;l5Qb>)JN+2B^v=`;iM{cB
z?7Em4?J$<>Uwn`ExP-~%o8Ic77%C``NtBgLW*kGv@I>W#GzmjBl~rRHae8)FHMy$r
zAt@CU$|@&ptE{GM*=3GwPwg_{s7SAZ2&0H;87bA&P)$YpzHHSLsz)oxRR-JgR92bg
zr+X$b`LgAyAd?Kg;R7Dx3Qi$lKkHe@WDaBm_h2Y^Q8?U3^fy?9J;Zk3qF`&z>G3@I
zs;Wna6JMa&_Ne4ZsHL_lYSPZ8EdEULNXgq2+A1y=vLqYwKo+$<5%%CZGO8}^8^lUy+O;)Ah9NvN-2c=3l_+!(nGK?jg;i9Us={*lchANLsSeERfXQ!
z)lAazj}R!-B&qCftE>*v%ejHLqsfP54S`1HBP_zM=pfVVz1>32ds^B?R&{MLMywL7pz?eE^ubh5mJEvz%x&^oeeGLSoK>z&fwL$;FZxvHhc`RZHfdt+5VP+-wb
zI~ky!vbChP8d3uvSgTXI|A6Wt%{$!3B^-y%Zq_oNiR2lEfx*4c8Yr-0@K~xo#49X0
zoO{B;80!z-L@G$jL1q)ZPT5eE0VHLa0mq;#lkbtbfzZ}8#@3MUkP!`>VIsCna#u^s
z$juTPhI%@dGp*YH1*&A5u+urv&Fi-H!A-5{6qGRI5YRqKwOvk**3do&lwRjLo8ei9;#
zA;wvz!Z5aLY_lx7*i8;KsG;6ut;x^t5v7y0Ok@NZjU;9m=)2wGTau>5l%&k#;{=^n
zv6f6YZnr|NB-;uY;IC8cTjn_W_9R7?#rD>|Y!LrYoL5E2ti7ye?#>4@Mt$j1g3pE+
zgdiNCJEEYtn3$UA?cS85u_S6vx}qSLmlj|NFY7WE@YV(hyQ!v-4I4aybzcRnuu(Xa
z)L?XriZDR^u!^~1lWY)XQEkFc$e8dPL%-=^7V{z&OjvRT2Cj0A1L)5%KJ@b(8Zq>h
zp3-$XNu64+=^7=2-|z*m@BlY(0Vfb(vX$jRa#MaNT-EW#D@v-fU2*!L2A{J|SRb*G
zyp`8Wib;OLqEQBMTQFni|6!Y2q8MT!vnGFN>}{{i4Y#NWO5??eZ3U3Z2uIywcC+-
z+c}AW_cZtW?s5WyTDpP13@79yLDxwW`R>Bd6|_Hh_zWq0#cw!*jcj@*+zN
zQVAtsSNO0SS^Mabq7>Cd1~o!f*?kgm++ayuOB6f~&@tkjsJ6Www~U?0HcGSI3K`k>
zM#JE$`;m82raq3;tlJ8Ln?gq30ay(S3KC)-No=p*i=4EU5~w*9#&39w^Vo>l7>T$*
zAFPk6C=J_L5aj&zccPFyy{Ts(QiAkHJyoHrG^+f4guL1+B!8^?DvfA)B%GU*F0RC8a;4=h9(mp_D3hma0nGnZsVP
zvuq=q$`V*-R+HtYf5@Qwbez`Hbn;VAYE0!RH~zzSe8hcR#9?g3a?Hkfq{EB;7>fuV
z$$waoWA=S4yh%d%C4kfsERppPB}%@O
z2lSDctnG}XCJuYSesUFWL@CG|hl}t93Jrdxi5G~fJWGjeUBTvSZHZiQcf}hi
ztlb9{QOFbN*pLrxkjG=ZYVK7&z*N>MCE4p1g}k;RIp(=!+{ZyI#YhZ9d(`L1tB@bR
zDL6aP1kxbt!(?mbX9OwGdIX9Jkz`q71fc~mBpW<44Nxmq^gt~f5E_G
zoW*u5#AtZYy=1xy)v;J1{-GA6u!U$uQ%>nCg^&v|5r+FIAVV%&hFDWqEd!x#xWdCTA
zAbqE@x*%e3J1GOBR
zIDmFj^*>)UcB3Rbn5Z$WxprK;s@>O~Xu951Z>M+EyXigkLHZDVg#KCo-^ghcH(D7z
zjlRYxW2~{?xM18i?wYch$INdQH!GSu%;V-+^P>5{d}aO~hzi68vIKGm3IvLB#$}$B
z=i=3Q9bS*O;%#|n-h=nz{rC{>;R!s6r}GhfBA?Bd@!R|ff5YE%J=i$dJlHk(Ftc!G
z>r6NE-^~9-B~e#26pcl9kuFp*QcM+d#C)+(EEQ|SISKAWI4jBWTcfNE)=TS+^*)?6
zTr^xc+#=jH+#~$>dvUvmJ;|P9udr9yTkM_oE&GH0#r|d+_7B^&f3g2^ayYr1dd?8X
z=P1rBXMwZaS?6qWt~#$B!_Dsc-L39+cc**6ee8a6UHA8&cxcWanLlp+gaz{!epPR;
z_tjUgZ%{w5{y_ba`k#$_W2eThjo%uR8;cfK7GJygwZ#iptpZTN{y4CP+IqDYYVXy)
zsC`=-8;j8B=40E;&+fB7KD9La^9M{%%*}3%ZZK)%xowx6F!|!iUmUvsC$Bz!?$k>r
zUpxKI$uEvBoK~E7e^Q;i!Mu0cub$C8W4#%h%sra^M>1#LOOiXM{=7)f;itYq^~;Ed#>SC|YXrFgTXCH_915pNN#ir$qHvdJ%ka=>1PD(FcMjK!`ocNE|3J89xRIV2oE@BLb4GB=dkorx
zZ-ZC#qrqpvwBRHl*a8T4(eDF#ef>;}_pIlYzt-35#GmWmU*4d+o`1DB)nDk(_g8v%
zdEa=~%lF}3;@g0?!21>Orh9k$xBI68-VWZjhQpS?D^|hU?+q&TG!o;&gGF=oXKO
zrQ#iji;<>t`7ZW__Ds8IFJTMqsq7m2c6-#eSqJO0mRP@7jofOv%d@-W2m}BC-3I``
zW*54NZUNNk!llqfZ(Nj4y48=;&VIni9<prNr9PjJOHZZD*&X!GA0#}S_d1JK4g*J
zVNOO=u9`yDUc|1xq9r=0QE$=(hM{hFjM$+0n%Rp;Umz&3WohbErwvn{>BUmNSCYpS
z9L!0vkQ=Z-{50Ep_1EWswuy$4on`$OGb}LUnskB5vNs8rW!jWHEqSje(TYWQW0qk>
z3M?)f4QS9~W?0nPavq5tGup^pf`k_Of-dl?YR-)XOXAF&fR=QE#0FkzMC+;E;i+ZP
zPXzo?KQklf&}C-m5H^FO=ah6u3IcN@1nP4aAB0V(4p(;a|Pf)=Oy$Sz;;=h9~50@b^K$a0KNed7mTk3~}
zcbtVyoF+L&M7wDC@OvFc@6`&uG)%
z<;yFHV-n%&nna4V#DXP$$ZD=g8i);CTU%Jr>j3BAlP16u5U>{j+&{!R5ikZ1&v|!m
z@xybT@DWk?=r)zxR0@F{RN%P4x!|iO5QikmL)5lW2)pg{lz?d_pdl75#zbr63dWKG
z{rdWI%ot7FeaeYzVeHtk
z7!E*uz}!6AURl|<+G?%FC@>ak6#zP`lB6P%l9tLKoehG~Q*{li@`2XSXlNMR!neJ*
zX)|Vlg-hXpq;MSB55s=EZ$$CFYvela^98Sw*V5V}r8SaD1d}Kz=7}|p%bI)?srdQp
zLr0NLY|~u85so~HqAbgjL`xwS2Vqk*784x+J%elV^zhw`OD;Lj{0QsI!)@{)w!#QkJ#p
z0MQ;aBbncva4gV#ltwYx!(+W0HI0GPwD9cC*?siaD0E
zTE6{kXLD0G%8$W(KKK6Gv)T3W`@2P9y!_y(Rlkkm7nVP2`Ojw_?Po9T)y-+?jdTCT
zqzZ3s6~VOh?w6kF&b_*Q?;u6I7g8+tz8zzdV@N4uSaUoc~s!
zX5PV9qd9$*1Tlx*Oa|?G+&sXpk8^)gg*UL)8cqDw9MTpw-o}fsh@@iTn`cM5)@Yjb
z4E0a=^;=t&e`E43xH~Pq+v6|6T+dInt8d}0t*vYD!yDe(`a4*;KK`>-%YP*K$!7mDqR!kB)YF{Wee`z^-XRz)}d}X0H%{jbefd
zaS4vMg(5`vJZF?s+-)R$U$Kig%bZGTFC^v)h2MZ_%b-R*>6Af)KXJ{(q+P`6AYe{~
z$Yv={t*T