From 7e0c071eee690910a04493aff0e6e539975188e0 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Mon, 27 Nov 2023 23:07:40 +0000 Subject: [PATCH 1/8] Changed to Number of users --- src/components/UserCard.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/UserCard.tsx b/src/components/UserCard.tsx index d1cb6209..7d89e8e7 100644 --- a/src/components/UserCard.tsx +++ b/src/components/UserCard.tsx @@ -177,11 +177,11 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers}: defaultValue={companyName} /> setUserAmount(e ? parseInt(e) : undefined)} - placeholder="Enter amount of users" + placeholder="Enter number of users" defaultValue={userAmount} /> Date: Mon, 27 Nov 2023 23:09:37 +0000 Subject: [PATCH 2/8] Solved an oopsie --- src/components/UserCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/UserCard.tsx b/src/components/UserCard.tsx index 7d89e8e7..e6f33ebe 100644 --- a/src/components/UserCard.tsx +++ b/src/components/UserCard.tsx @@ -190,7 +190,7 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers}: name="monthlyDuration" onChange={(e) => setMonthlyDuration(e ? parseInt(e) : undefined)} placeholder="Enter monthly duration" - defaultValue={userAmount} + defaultValue={monthlyDuration} />
From c90234cefc6192e9cecaca609aed39389b959066 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Tue, 28 Nov 2023 08:21:00 +0000 Subject: [PATCH 3/8] Changed from employment to position for Corporate accounts --- .../DemographicInformationInput.tsx | 51 ++++++++------ src/components/UserCard.tsx | 61 ++++++++++------- src/interfaces/user.ts | 14 +++- src/pages/(admin)/Lists/UserList.tsx | 20 +++--- src/pages/profile.tsx | 68 ++++++++++++------- 5 files changed, 134 insertions(+), 80 deletions(-) diff --git a/src/components/DemographicInformationInput.tsx b/src/components/DemographicInformationInput.tsx index dcbe16bf..222dc546 100644 --- a/src/components/DemographicInformationInput.tsx +++ b/src/components/DemographicInformationInput.tsx @@ -21,6 +21,7 @@ export default function DemographicInformationInput({user, mutateUser}: Props) { const [phone, setPhone] = useState(); const [gender, setGender] = useState(); const [employment, setEmployment] = useState(); + const [position, setPosition] = useState(); const [isLoading, setIsLoading] = useState(false); const [companyName, setCompanyName] = useState(); @@ -36,7 +37,8 @@ export default function DemographicInformationInput({user, mutateUser}: Props) { country, phone: `+${countryCodes.findOne("countryCode" as any, country!).countryCallingCode}${phone}`, gender, - employment, + employment: user.type === "corporate" ? undefined : employment, + position: user.type === "corporate" ? position : undefined, }, agentInformation: user.type === "agent" ? {companyName, commercialRegistration} : undefined, }) @@ -116,25 +118,32 @@ export default function DemographicInformationInput({user, mutateUser}: Props) {
-
- - - {EMPLOYMENT_STATUS.map(({status, label}) => ( - - {({checked}) => ( - - {label} - - )} - - ))} - -
+ {user.type === "corporate" && ( + + )} + {user.type !== "corporate" && ( +
+ + + {EMPLOYMENT_STATUS.map(({status, label}) => ( + + {({checked}) => ( + + {label} + + )} + + ))} + +
+ )}
@@ -147,7 +156,7 @@ export default function DemographicInformationInput({user, mutateUser}: Props) { !country || !phone || !gender || - !employment || + (user.type === "corporate" ? !position : !employment) || (user.type === "agent" ? !companyName || !commercialRegistration : false) }> {!isLoading && "Save information"} diff --git a/src/components/UserCard.tsx b/src/components/UserCard.tsx index e6f33ebe..931fe24a 100644 --- a/src/components/UserCard.tsx +++ b/src/components/UserCard.tsx @@ -42,6 +42,7 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers}: const [type, setType] = useState(user.type); const [status, setStatus] = useState(user.status); const [referralAgentLabel, setReferralAgentLabel] = useState(); + const [position, setPosition] = useState(user.type === "corporate" ? user.demographicInformation?.position : undefined); const [referralAgent, setReferralAgent] = useState(user.type === "corporate" ? user.corporateInformation?.referralAgent : undefined); const [companyName, setCompanyName] = useState( @@ -292,29 +293,43 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers}:
-
- - - {EMPLOYMENT_STATUS.map(({status, label}) => ( - - {({checked}) => ( - - {label} - - )} - - ))} - -
+ {user.type !== "corporate" && ( +
+ + + {EMPLOYMENT_STATUS.map(({status, label}) => ( + + {({checked}) => ( + + {label} + + )} + + ))} + +
+ )} + {user.type === "corporate" && ( + + )}
diff --git a/src/interfaces/user.ts b/src/interfaces/user.ts index 3e223fca..5594f273 100644 --- a/src/interfaces/user.ts +++ b/src/interfaces/user.ts @@ -14,7 +14,6 @@ export interface BasicUser { type: Type; bio: string; isVerified: boolean; - demographicInformation?: DemographicInformation; subscriptionExpirationDate?: null | Date; registrationDate?: Date; status: "active" | "disabled" | "paymentDue"; @@ -22,28 +21,34 @@ export interface BasicUser { export interface StudentUser extends BasicUser { type: "student"; + demographicInformation?: DemographicInformation; } export interface TeacherUser extends BasicUser { type: "teacher"; + demographicInformation?: DemographicInformation; } export interface CorporateUser extends BasicUser { type: "corporate"; corporateInformation: CorporateInformation; + demographicInformation?: DemographicCorporateInformation; } export interface AgentUser extends BasicUser { type: "agent"; agentInformation: AgentInformation; + demographicInformation?: DemographicInformation; } export interface AdminUser extends BasicUser { type: "admin"; + demographicInformation?: DemographicInformation; } export interface DeveloperUser extends BasicUser { type: "developer"; + demographicInformation?: DemographicInformation; } export interface CorporateInformation { @@ -73,6 +78,13 @@ export interface DemographicInformation { employment: EmploymentStatus; } +export interface DemographicCorporateInformation { + country: string; + phone: string; + gender: Gender; + position: string; +} + export type Gender = "male" | "female" | "other"; export type EmploymentStatus = "employed" | "student" | "self-employed" | "unemployed" | "retired" | "other"; export const EMPLOYMENT_STATUS: {status: EmploymentStatus; label: string}[] = [ diff --git a/src/pages/(admin)/Lists/UserList.tsx b/src/pages/(admin)/Lists/UserList.tsx index 790fc686..7ed40bee 100644 --- a/src/pages/(admin)/Lists/UserList.tsx +++ b/src/pages/(admin)/Lists/UserList.tsx @@ -242,14 +242,15 @@ export default function UserList({user, filter}: {user: User; filter?: (user: Us cell: (info) => info.getValue() || "Not available", enableSorting: true, }), - columnHelper.accessor("demographicInformation.employment", { + columnHelper.accessor((x) => (x.type === "corporate" ? x.demographicInformation?.position : x.demographicInformation?.employment), { + id: "employment", header: ( ) as any, - cell: (info) => capitalize(info.getValue()) || "Not available", + cell: (info) => (info.row.original.type === "corporate" ? info.getValue() : capitalize(info.getValue())) || "Not available", enableSorting: true, }), columnHelper.accessor("demographicInformation.gender", { @@ -419,13 +420,14 @@ export default function UserList({user, filter}: {user: User; filter?: (user: Us } if (sorter === "employment" || sorter === reverseString("employment")) { - if (!a.demographicInformation?.employment && b.demographicInformation?.employment) return sorter === "employment" ? -1 : 1; - if (a.demographicInformation?.employment && !b.demographicInformation?.employment) return sorter === "employment" ? 1 : -1; - if (!a.demographicInformation?.employment && !b.demographicInformation?.employment) return 0; + const aSortingItem = a.type === "corporate" ? a.demographicInformation?.position : a.demographicInformation?.employment; + const bSortingItem = b.type === "corporate" ? b.demographicInformation?.position : b.demographicInformation?.employment; - return sorter === "employment" - ? a.demographicInformation!.employment.localeCompare(b.demographicInformation!.employment) - : b.demographicInformation!.employment.localeCompare(a.demographicInformation!.employment); + if (!aSortingItem && bSortingItem) return sorter === "employment" ? -1 : 1; + if (aSortingItem && !bSortingItem) return sorter === "employment" ? 1 : -1; + if (!aSortingItem && !bSortingItem) return 0; + + return sorter === "employment" ? aSortingItem!.localeCompare(bSortingItem!) : bSortingItem!.localeCompare(aSortingItem!); } if (sorter === "gender" || sorter === reverseString("gender")) { diff --git a/src/pages/profile.tsx b/src/pages/profile.tsx index c41248d9..b9aa8289 100644 --- a/src/pages/profile.tsx +++ b/src/pages/profile.tsx @@ -63,6 +63,7 @@ export default function Home() { const [phone, setPhone] = useState(); const [gender, setGender] = useState(); const [employment, setEmployment] = useState(); + const [position, setPosition] = useState(); const profilePictureInput = useRef(null); @@ -86,7 +87,8 @@ export default function Home() { setCountry(user.demographicInformation?.country); setPhone(user.demographicInformation?.phone); setGender(user.demographicInformation?.gender); - setEmployment(user.demographicInformation?.employment); + setEmployment(user.type === "corporate" ? undefined : user.demographicInformation?.employment); + setPosition(user.type === "corporate" ? user.demographicInformation?.position : undefined); } }, [user]); @@ -135,7 +137,8 @@ export default function Home() { demographicInformation: { phone, country, - employment, + employment: user?.type === "corporate" ? undefined : employment, + position: user?.type === "corporate" ? position : undefined, gender, }, }); @@ -247,30 +250,43 @@ export default function Home() { />
-
- - - {EMPLOYMENT_STATUS.map(({status, label}) => ( - - {({checked}) => ( - - {label} - - )} - - ))} - -
+ {user.type === "corporate" && ( + + )} + {user.type !== "corporate" && ( +
+ + + {EMPLOYMENT_STATUS.map(({status, label}) => ( + + {({checked}) => ( + + {label} + + )} + + ))} + +
+ )}
From 1f0e5f4a08b157280a503094b97c7954f8630fed Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Wed, 29 Nov 2023 17:19:47 +0000 Subject: [PATCH 4/8] Added the ability to generate Listening exams as well --- package.json | 2 + public/audio/check.mp3 | Bin 0 -> 86411 bytes .../(generation)/ListeningGeneration.tsx | 141 +++++++++++++++--- .../api/exam/[module]/generate/[endpoint].ts | 34 ++++- src/utils/sound.ts | 9 ++ yarn.lock | 10 ++ 6 files changed, 171 insertions(+), 25 deletions(-) create mode 100644 public/audio/check.mp3 create mode 100644 src/utils/sound.ts diff --git a/package.json b/package.json index 0b92e7ff..b8266c65 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "formidable": "^3.5.0", "formidable-serverless": "^1.1.1", "framer-motion": "^9.0.2", + "howler": "^2.2.4", "iron-session": "^6.3.1", "lodash": "^4.17.21", "moment": "^2.29.4", @@ -73,6 +74,7 @@ }, "devDependencies": { "@types/formidable": "^3.4.0", + "@types/howler": "^2.2.11", "@types/lodash": "^4.14.191", "@types/nodemailer": "^6.4.11", "@types/nodemailer-express-handlebars": "^4.0.3", diff --git a/public/audio/check.mp3 b/public/audio/check.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..dde3b8afa9dbd09cbff1d89fab7d1bd26fc3cf5f GIT binary patch literal 86411 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 z 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 setPart(result.data)) + .get(`/api/exam/listening/generate/listening_section_${index}${topic || types ? `?${url.toString()}` : ""}`) + .then((result) => { + checkSound(); + setPart(result.data); + }) .catch((error) => { console.log(error); toast.error("Something went wrong!"); @@ -67,16 +74,44 @@ const PartTab = ({part, types, index, setPart}: {part?: ListeningPart; types: st ))}
+ {typeof part.text === "string" && {part.text.replaceAll("\n\n", " ")}} + {typeof part.text !== "string" && ( +
+ {part.text.conversation.map((x, index) => ( + + {x.name}: + {x.text.replaceAll("\n\n", " ")} + + ))} +
+ )}
)} ); }; +interface ListeningPart { + exercises: Exercise[]; + text: + | { + conversation: { + gender: string; + name: string; + text: string; + voice: string; + }[]; + } + | string; +} + const ListeningGeneration = () => { const [part1, setPart1] = useState(); const [part2, setPart2] = useState(); const [part3, setPart3] = useState(); + const [part4, setPart4] = useState(); + const [isLoading, setIsLoading] = useState(false); + const [resultingExam, setResultingExam] = useState(); const [types, setTypes] = useState([]); const availableTypes = [ @@ -86,8 +121,47 @@ const ListeningGeneration = () => { {type: "writeBlanks", label: "Write the Blanks"}, ]; + const router = useRouter(); + + const setExams = useExamStore((state) => state.setExams); + const setSelectedModules = useExamStore((state) => state.setSelectedModules); + const toggleType = (type: string) => setTypes((prev) => (prev.includes(type) ? [...prev.filter((x) => x !== type)] : [...prev, type])); + const submitExam = () => { + if (!part1 || !part2 || !part3 || !part4) return toast.error("Please generate all for sections!"); + + setIsLoading(true); + + axios + .post(`/api/exam/listening/generate/listening`, {parts: [part1, part2, part3, part4]}) + .then((result) => { + checkSound(); + setResultingExam(result.data); + }) + .catch((error) => { + console.log(error); + toast.error("Something went wrong!"); + }) + .finally(() => setIsLoading(false)); + }; + + const loadExam = async (examId: string) => { + const exam = await getExamById("listening", examId.trim()); + if (!exam) { + toast.error("Unknown Exam ID! Please make sure you selected the right module and entered the right exam ID", { + toastId: "invalid-exam-id", + }); + + return; + } + + setExams([exam]); + setSelectedModules(["listening"]); + + router.push("/exercises"); + }; + return ( <>
@@ -121,7 +195,7 @@ const ListeningGeneration = () => { selected ? "bg-white shadow" : "text-blue-100 hover:bg-white/[0.12] hover:text-ielts-listening", ) }> - Passage 1 + Section 1 @@ -132,7 +206,7 @@ const ListeningGeneration = () => { selected ? "bg-white shadow" : "text-blue-100 hover:bg-white/[0.12] hover:text-ielts-listening", ) }> - Passage 2 + Section 2 @@ -143,7 +217,18 @@ const ListeningGeneration = () => { selected ? "bg-white shadow" : "text-blue-100 hover:bg-white/[0.12] hover:text-ielts-listening", ) }> - Passage 3 + Section 3 + + + clsx( + "w-full rounded-lg py-2.5 text-sm font-medium leading-5 text-ielts-listening/70", + "ring-white ring-opacity-60 ring-offset-2 ring-offset-ielts-listening focus:outline-none focus:ring-2", + "transition duration-300 ease-in-out", + selected ? "bg-white shadow" : "text-blue-100 hover:bg-white/[0.12] hover:text-ielts-listening", + ) + }> + Section 4 @@ -151,22 +236,44 @@ const ListeningGeneration = () => { {part: part1, setPart: setPart1}, {part: part2, setPart: setPart2}, {part: part3, setPart: setPart3}, + {part: part4, setPart: setPart4}, ].map(({part, setPart}, index) => ( ))} - +
+ {resultingExam && ( + + )} + +
); }; diff --git a/src/pages/api/exam/[module]/generate/[endpoint].ts b/src/pages/api/exam/[module]/generate/[endpoint].ts index 1a6b4118..a84a3933 100644 --- a/src/pages/api/exam/[module]/generate/[endpoint].ts +++ b/src/pages/api/exam/[module]/generate/[endpoint].ts @@ -15,15 +15,15 @@ const db = getFirestore(app); export default withIronSessionApiRoute(handler, sessionOptions); async function handler(req: NextApiRequest, res: NextApiResponse) { - if (!req.session.user) { - res.status(401).json({ok: false}); - return; - } + if (req.method === "GET") return get(req, res); + if (req.method === "POST") return post(req, res); - if (req.session.user.type !== "developer") { - res.status(403).json({ok: false}); - return; - } + return res.status(404).json({ok: false}); +} + +async function get(req: NextApiRequest, res: NextApiResponse) { + if (!req.session.user) return res.status(401).json({ok: false}); + if (req.session.user.type !== "developer") return res.status(403).json({ok: false}); const {endpoint, topic, exercises} = req.query as {module: Module; endpoint: string; topic?: string; exercises?: string[]}; const url = `${process.env.BACKEND_URL}/${endpoint}`; @@ -34,3 +34,21 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { res.status(200).json(result.data); } + +async function post(req: NextApiRequest, res: NextApiResponse) { + if (!req.session.user) return res.status(401).json({ok: false}); + if (req.session.user.type !== "developer") return res.status(403).json({ok: false}); + + const {endpoint, topic, exercises} = req.query as {module: Module; endpoint: string; topic?: string; exercises?: string[]}; + const url = `${process.env.BACKEND_URL}/${endpoint}`; + + const result = await axios.post( + `${url}${topic && exercises ? `?topic=${topic.toLowerCase()}&exercises=${exercises.join("&exercises=")}` : ""}`, + req.body, + { + headers: {Authorization: `Bearer ${process.env.BACKEND_JWT}`}, + }, + ); + + res.status(200).json(result.data); +} diff --git a/src/utils/sound.ts b/src/utils/sound.ts new file mode 100644 index 00000000..dcaae082 --- /dev/null +++ b/src/utils/sound.ts @@ -0,0 +1,9 @@ +import {Howl, Howler} from "howler"; + +export const checkSound = () => { + const sound = new Howl({ + src: ["audio/check.mp3"], + }); + + sound.play(); +}; diff --git a/yarn.lock b/yarn.lock index 4d9d4192..6b4aa13c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1144,6 +1144,11 @@ "@types/minimatch" "^5.1.2" "@types/node" "*" +"@types/howler@^2.2.11": + version "2.2.11" + resolved "https://registry.yarnpkg.com/@types/howler/-/howler-2.2.11.tgz#a75c4ab5666aee5fcfbd5de15d35dbaaa3d3f070" + integrity sha512-7aBoUL6RbSIrqKnpEgfa1wSNUBK06mn08siP2QI0zYk7MXfEJAaORc4tohamQYqCqVESoDyRWSdQn2BOKWj2Qw== + "@types/http-assert@*": version "1.5.3" resolved "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz" @@ -3149,6 +3154,11 @@ hoist-non-react-statics@^3.3.1: dependencies: react-is "^16.7.0" +howler@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/howler/-/howler-2.2.4.tgz#bd3df4a4f68a0118a51e4bd84a2bfc2e93e6e5a1" + integrity sha512-iARIBPgcQrwtEr+tALF+rapJ8qSc+Set2GJQl7xT1MQzWaVkFebdJhR3alVlSiUf5U7nAANKuj3aWpwerocD5w== + http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" From a3864eb7d3bde9ed253c192f73a34232027ddb40 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Wed, 29 Nov 2023 20:26:48 +0000 Subject: [PATCH 5/8] Added sound effects to the exam generation --- public/audio/sent.mp3 | Bin 0 -> 84049 bytes src/pages/(generation)/LevelGeneration.tsx | 3 +++ src/pages/(generation)/ListeningGeneration.tsx | 13 ++++++++++--- src/pages/(generation)/ReadingGeneration.tsx | 7 ++++++- src/pages/(generation)/WritingGeneration.tsx | 7 ++++++- src/utils/sound.ts | 5 +++-- 6 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 public/audio/sent.mp3 diff --git a/public/audio/sent.mp3 b/public/audio/sent.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..49bfa573d5408064f29672540c9cf818445b884b GIT binary patch literal 84049 zcmeFZ2Ut_hwl}^50Ro2JLQzU+3MhdjR3Y>hdXb{id#{2bgx(T5NRtkNpdcV37J3zs zE={FKv7o_%K`CE+&-ILoRXh^YM2G z_Hgue`OA|*fJcxY+Q%P>FgG*PBv)V{C#*xLD@y*XjMQ0#l$5Hmt~vmygUI(id>q_d z&UyN~xREc8=Z{waCOs`(EdWF=)FJ->$EyHVGt9#k01OO(GvrDT0F>wf{Cf9a&vTO# z08o~J07~*F=-0h6ia$z0m@>*g@<8jaipO05GX!V_VJJa@00lFMk{NW|2k?=fqyqg$ zzbgGA5CtWeikb#OOLu}?;XV^U0ivX&08>&?fyrHiu9M3FFf$d4078|T)x?2DFn~=u zIps=E{s=DS@ZQbqWme%`i585Ag z^z`=i4-5_sk4#O^%+9@-UszmSTYs~$xwZZF-R|cvU%%~rC++|E#TQvBe_@OK_wVw> zOy-LM45kFr{Nf8lapf1|%wQ@31T~AQ35`PltDtl=giS58{9ZRLT*j2h?ie^p$03AV z72f^D+HaiwpD`Bm@8ayQjQtB=OMp5+@f%T6P*74)Qc_Y;Q;~@pLj8*%bdcYO?stOz zMhw4*@vn4DZUjVb0}KY!kbjv@(4JuWr|I}5S-IGb7Xc_Gh^$PM%zz4TI6>UJc`KdK z!>TQbvAK8BoU#49xYJKr{bQh1F6z^wMHKxpF!ZqM7(kQ(8n+1*F04?Y~Oc$Frpu-;GldQheNgvj+Py~K=m^}v#*i(XH#3&ct zD^dWlU#T%q#mi{1vZu7!uUB^WQJo&sv?e5TYch8} zQH$3Gr%CH;^b2R=vqlD#CA}TI=`%&^x?XKb%=0974N~r2SZhp=M3Sa{t}*uc*j#e5 z?(7N|QWEl%x;M}n0ymj7r{Y?n`%(yq|9Er^#ArDk!M60i9nH>kehp~cVCk&yBni2y ztfmDw+U;B-gO)Zoa427qA_i1Ey?A&>#gmWjXt(?HaNyR41{@ zYO>9K@BA4*Z`r-JxVces%Z>gUemKO-KV^5AheliLjdasWj668NZus>9Tj`#r-9pRS zQdm)Uo|oSW9~bfl8qs&lg)pvLIJ##J{uJkrKAGCyH-_P>QX%S=E*|-v40DNcea?3o zS@=59=lizw5VhzuoCduxu5Swk^L=>+0D_KDUS1?MlFu$p-)p*vkctQ`qRWfhEwCtUrrG#qxje9-hu8hAh>zw7`WVW3~aa9vZt>Z?Q^31etauE1~dzS z{$ z^BuA`G9Cjf7gg^ z<7vvi`Vmjjo;n%B?vvN81L!gE{=$aa4mnSy{h;&yBa-etT4C-D zu%Mki+;wbJuP|_({pYo)Zarjr^zO?8QIbFib=~^hr5my<5_288LJ43dQ`_ntzR}u+ zFY;zQQ8Fb0y9`g(#sa_hm54koGMf#d<@QP~O7svZ)RuR>;;4^M$_hv2Tzs^jdlFzX z(FE8JFC7EjaKteH4XVC+40yh?`yuz@bF$s+>jM@UKH{Llg~q+RTak*6b-(P8Oh zgWU&v5sB8s!29EMD_(gsgbL^TW0hxzC)p@(SS;~>RAUG7*bmAte1B^<%y_`|XwSLr z@aB<D0Kq?%kv?CLFie)fsLIzh^`m)Iwz-RxE|7jfoke~7Ji@q#Ca*51L z-LL#a@ zk>OOr(wotu_M8iz0b4ITdacB_c9UmNnQijGWA*LhLz#=MF+UcKK6U%Y=saI*pa-I8 z7N2I;xhqtEOs?;md$1VM=oi3>M+Oe`UxI}SM1!xs_!xD-oW8#CvhDs_`oi?Z(nF3t znTEHT^9L=1ZHoC9gg)=?``!isZFtCdq%#?Y?j11PCt3W|*IzeaVT9|D2)-c*{0Cdo zP}(;wEnU~sip9mPgHumW9hN>leer;WG`sRCrR}M!l46}|fLzk*n^vcdmm0T}xcJ?S zNbEpVAkxBC@tN&UxpO;0EZqtcneE#{>-ymMfj)bW{Ar&kLrIhPBT4%890P3cxczWX&w6aTO(Glbdpsyt9eaF3 zk`=RqKWO%Gk??1axf{5`xAn2-=nM8S*?ci7(f3NdVhzs|5!>DlY-p%rQhmcbggTr& zxJ2?Ok8mQntr^81iQ&;jYvS^f&ga)%xza3-0bkJ*f~=D{yu25P@7Go6-k+k}4Sle3 zGg3v=Y{Ji1;%xTMmc=2*j7VseG0mRAPgvvxc}Z{W{II|JDQS9)=e-Vh?}aph2hV0C z{hM91)VR#6x`TRjp3ZJW5ltJTGb20>a}Tsp)s2g&*VK)BJE@G1sS58sybO`-n16Qv z+HlKMr!-jzDV-dyQ%C%yrIjaNM}1I_#J*iK4ro?P)n*#ye7c|IEV?LQH|aBb|H(#c z+ZBj#iZi0)RJ@gaEXkOL2)CPMJYYGu_Wl5Km|xV*U0icXy^9+^ryk@N+Vb!i(2bs7 z|M>~&sqzTcxLLn$gfr^-lv*N93TeZX@XUVlhI@p02)5l^*Hu~Zq-4AkSxH7MPNi!i zsk`g_M-&;3ulufwF1D0B;NWC#z#Ouy*#L)hWQBiva4vN~rFnaIl)1DmjK{RCStUyu{!raqDFsAx$A9EJ$lP>TKJmWv(gJ`!cipl>qT~WJEEo?r*bt> zcHk9#=J%7FmpN6#_646lAedkMJaIm9d;+A&X8hOmZ*8zU|6fyh=AWD)JV$ibjscN# zyRvVqqTaq5f4cu)F$cbGc4qOB&bY-?68&~^*HY^PEnoMA&M6eT8-{+0Q$HuK5*g+k zbo4FCcJ|;&RJU8_oA*e*pKRVyU)zpw%AVxW2_fYf(M2x2rbj_GAP+d3t(wmBzT^08 zQ~T*4uyMm~em06ZsyUIozSC@AXlKkGLy?tBvuzs?hRGmwdobZYVICzANM z%4(A@dEvttDDFSIOnVG~4+js>Mm=NmgM0OED&Iay0#Pn$(bFzbR8OTQqgHu#T_3K# z`eE^{|JF=5Tr27;_tDpSk{#*oF(BNy#(9WWcyN?EjN!XyM^rzw8{R$F{{(ytJllAh z?ys^Fd->eaOyjmqXE7s5&@yV(>p?0PwCEG!!uBAI)+rKU$RX)z! zk`0vg53{-Cmd7U39{lu)kdNzs`igVrtngP8hSI?I$3S{~W4^L%1ja8V3KrqE%M+Zy z$o!u3`$RIsCHwaFa6$Yr&>nYg)$SG_QS%dM_|8GZu3cKSd>e5yc`w3#Hy}#M75;Wa z_1p%AZ(82J?(qwv%lak%un@A@Dq7}xP0x=J&6Ia@ z0l3h-3zoW^8<|{sO})U~+Gn3>K5UR*v6iGr6knq+?Yrr9>B(+MU6uZp$L@1FTbpj_ zwl}#I)LP+AUGoD5Wd}=?R4%}eD|^C+r8o9`4oj5IuZSnjqUy^+B&}lPJ3B01RpDed z1gqpf!fBp_e?MT0S|@aN^DWr*rBe;Z+U}BVIQzHVL61hCXn!d^Lu-)tUL5|F#hd2N z_4jteHxAgg_DWOtaHNkBimR#FqH#)eLibu+9|I!2 zFMK;ke)m|C-Vw!N;aR0?b^RN52bh`ahiYa{hbcov?#z#h^;$Yg-t#wZF0E|!?0BtT z=s(90AweAK-%9d>Ke!+#DE3@>q!+$Hpj5niCfjc5drX8tWf*1m57FoYMZWABceKCN zlIVAb2Y9Vmq6Gy`1*NjmsKVO0dg3tGw%c+lswQm9^nUXh(6ZzX?`3^{<>=Kk^f7QZ zcK7H){Wt9+x)-~B2Zo1L+BoE}(inX8$-QP8p-Q{uovfV~HRxzI3CQZ2@A8Xo6_7H= zs{>Ecvz22YKF_vmm!q1hbv%wbWxmZRY6JFK(&NQB6k^yx8tonF}oZapo8xM*t_FGLtL?)ohL zbD}Y!)7xm?Z8d$ztqffrm|79GHXzv%*}}4t`~J-(v17oR_B_K04Z}Ap9Xgg2L%qsk(VjQ)){Y6W2NTE+k4GuY7CiGt=F=pTDTIl=!3LgHG0o=q{f2juf^&_J)f+}%*d$ac-H?@0krbLnTnRn@3?Wpq+36p(f{y~m zE7$Cpk0yRB(+o`+zvVXLU0EKbTpoJN;FRha!rw58=#M;mpiJaUdMZL%(j;A9J>hhv z;r)ZtKE5{}s8~83h{Z~L2(zHd$I$ACGk_2OUK4Ti z75{MIOmLovVn&A68~2yw@a*Cjzf?QO0p)II*Y{(9F;e&~!t)1;$feDvW3N_)W9{&rCUt2Ee^=OGj%)cjOR`s1jf+!g?e#+>T@ z-IJo(cz(csZT)%5Q-%Yeh4?yVGjHS=7~~|>jD@qZxqHuvc+6VyCS-3I1)odP(*9g& zx5T%j`4bt&w^vWPq|)ohr7M}4;{52|(+9?GEsv9=tDWBGy`Mo3i$AI{4eG`Wv6LuLAE>RwZVFj_#ft?j+s**ZGZ~ zlYhRz|9cXsm+5;Y@bnbVY}(Mcq}xi}(dzexyWi~kj)BjTzxKgok8tD|g z{W_vy<`?4Y%&+d^8yx81{cDN(lm3*zpAz_gTLQ;FSNL_U}$Faprf zF)*;OvvcwC^9zZJil03zjh2@`kHKi@=;#}nnp)b}Tyk)5cK7!73knLodNndSK0X{{vaW6*Kb+!d%SxCGyUWCpPzq9;7xMKn0)pPe_Rymg|CiX|lR@e1W>wLSr{Iv^U7F%Mcn z#y!Lf_k><{<=^dSIGJ$XpXFwaNthn*dH*C>4;%m6ek>rS*y~NDBjbq0l+^}c`b}0c z2XtW5M5K%mKgCH#PH|4tc#Bg|ELP4Tkpf^75K;5*fuls|G@?g&&1xPxq&v!WbxR_} z2op`#GHJ-AQ_@>K{WMgus?;D6s08pJ$@N)=@fm1_J%2$in~5=f#!Rj>4Om!9n<_a! zh#D7;CSGZA*O@4n(m6rhRSos`ALt$j#-aHcfU}D62IBJQBz6cBk6~t~;zLjZHGS^* z?m%y?5^8tK0aHr{&6w)4taWa2nN0iSUQ-q%D=P<*S6C{OAK~usFp-i9GntD>h=#I( z#hA?Lfdp6+B#SvSmdjqAb+-n}ZDXCUKnXXvIfN=BvN2FC14w=96Hhok0ze}u1(>)jX^hf2zU{COX$1mzLG zyESdTu4;hUw4DR${uc)WL3IQrrKu}=qtZi_Mj$_PwN8?U643;w<<76ut-4e6xx5U{ ziY(BXm%7-b7eTC6s%&7!pc?;TcC3p8;c%*PZQk^`U6YpJ zyrPA}yXz*>jkwkDyR?X55DsRly2w45ARpx9X9re33-p|swJpkwh1p3AgVv7q*F#RT zGD4A5>Xw($3F)77!?IFS@-@5TC1tUkF=*5lq}?=@OW^w-bxXw{yJd zsqn?Nx6YyFW9}Z>JvEzKX`vM&!(dN_fn_DX04FPeX*#|D z8MT*(qSGnQb2I@+59&DPtp|~g zBGe6|Ay zWbdxieK$iJJ(zR0Hj?PXDjF;3Su1d1{pTQ}xzhNmqDL%MwA@!#14%@kdIBBNMO`6A zwwp5df$TTtn)TXOiZO6{g#3>E)wd5vi}%Cq@8uctmSr|QEcj8-M#cMzt3M}Niy_uZ z*nHO3;A87bPujrfl%A^apstdmzQ|^w-^UubSg1ilij4zRB6D0&OwGF^&$A*W&LQSn zP(3d?ZFwe+R0VXln*ne0d5>~ub@l+|6QJ4Y06V!*vopo=Jrrfbr6Wa)`8(ljj|$p7 zlC4km5r-G*21|JN2?{3_hFeMss#Tv;a*fng4dq-fnz9M8(ryhJ`4>=-zMyV!Bts<-fXJmgGaAI*jCmSDE#>-W=9a+jZ5WOL~3d}ge2zjae`6Sq1% z#g1m*Y_;WkKNe)B|iu2 zSFpXCmuv<@Piu6;2^|K^~73%lJg zV>g<@I|`mICK?kY#OA2SJ)HZP@hteUjL{AIXDd(*^D$wpz{Oszw0Kx=rh0EWuL<11 z)L9y7GW5(Nl^Tv1=n(U0aIGEj#3UHN{5;}L4`ORP#RtT)TxKgzyY_TB2Ws(JQfw#) zs!J=%_O^%ta!9A^r=)RaDX}tYs{OHH>L|x`T^-p>komN`fpm<_rK`xG3bl1xJktLQ zS1Kwoi0zb2Td#qbjM_?Xcx0&ItA<~o@Z+zb@Yw)`@v}Yqdq_ca5;+TcQY5!DgiWy` z-bu43PB@JZe3%=cZ%+E^J5Vz=RkmA05c~S^<9Kz|fDOZlKhX?3OnO((5H>IF8-^Bn zb;fNmF&gW)Ij|ZLYNi!e=pQC}dC|#xkbNl3P@N&sq&=ul%ZvKTeStGtW9A`K>I*g1 zN>@w=ssaP9h=z_ky{BQug=X|hZn;Q>rfzB?Lz5C+=X};gJdkdi)bVG1hh4?meA%eQ zwHyU|km^&40)-rtR3Wgnx~6)T$r3#QTILoi9;ws$MLdM03y@E#^r}iDt`v7fzQzIK zNOh@NxpjddW>_^XJ^_@&cs_WNQk5nxxe;>GmPxv*FNNT-vi5PTVRQk2zDF(@;w7PF zRxgU6OvpJl`VD+v7xvrNXX|(+{@L_VsiyIAe5?Hngg$M8j;9w^i+JFg zn^TSD0hpTZB&=0+=uF{=Npu#Moa!t;#OAqu*s8MuFMtr!Z3+%HX?k|LR{>A83|4UP zP8OrUNm<8A2|$dH11-#MC`ya~s4+Rl8eeff19p2Cnw*kdAg!Z-9bzNo7(uDT3y8QXL2m_67}axg#?5!T74D!$EE|h`vHRZQpE>K65Cpr2R z#$<7kv?d>BfL&j6e*;I8E4e#&<;nR&yUoz^ulr;j34$_7t>MX;8bP)&``AH%8Y2XD zz(#zD>tlcO)j&EaJs*yoPzt~C#%Hy#JK-jzbdC#4ucbD>0^!2+Cp@&g9~!i+0;+6r*;}PV!-fOY;M|cshG<(`jSrKvw|@C@kn= zPPZ897bx6LCr1>2#TjXv?y%#$te^gFDTr9LTFw@~BT0_B^Ea^y;fG;#^)lVqfN41m zZe}6OIY94xqmdK8vA)`V{vyaAh|nG<&RxaI%LlmjrZA;AZR^{I4g`r0!MNI!lekD_ zS46mhbu(z_dW1SKt!HBLg6G3seDe6@_2z4AQDi&4FYEKI_!&VWbF!mHrX##y2e9D}aK{yL(ZG0Qn ziD2BLEz2m|BU2=8%B)2dMv>n;;G|UxpJPiygF2X-779Px6_~{^37fC+Q;7Ync?-B{ zCCFPM%9$IiiXoXX`PUM3H=7azMU$upHb<#!M^EFgjMApbk2m$s(}oeD`(-2E!|rom z1Jt?snO)VoGt&!w%b0a*nwW#mAasC+0u!1@2eGrpS7_u_S-DdR-?JDB*bkdeNlgn~ z!-e1i2pR?tz*PBn>7H6xoglZ{TF$9)@uU}sU1o+2%ROm|IkTDBEl>!d&k3YpXx~&C zzz({bWL^Mdiuze2Js`|PrAm)%wsktG6EVnPdl_3q9!HaAZMefDA$Qus>;V=J^WAt~ zr_n;yF0oY@RXul?NKSc!ma8QUseWR>3KmrJkUwYT3Z<#lC?hh(z{Y`MazG2bkF#9r+lJZ%Mjk$)mlPR`(~Q#jMO-sQ~_`N5b_?V?rzRju>7 zg9$+k#hecG1Ybw{Yu=u4E}Ko4GY&=l)NfT6!$Ol_{30Jb`iMT_yxjv6(K%;4RtvAY z?mWzmp%(F6EV2+8+wWJlC3ZOJw9hEXHyh{^Ln=?XFAJd==~2DL?NEtD1|^oXuQ=;2 zDJEo#+UWLztca=|l#A80`1Jx>!l0wwd6EOA%V5*e_F?u800{91WSykd7Pyxt&4%>m z;}J^~-0hGnbVUviD*L@D8b}yYO|%StT^xMtWcW0nLqayZ zIIN$WBiNOnt3Od}b;jSHhFi!Lm3%WRxScz;i$X+bzjwgzb)oELKLjW6z%pdBm;>&G zPo{)4^_)eU;wO9Qa)v0RGVyBaO=askU^Ks_gHf?-;%(*`fQ{Sg>b14vlQr~omtoAV zPfu^9c(0{82}A6&d4;K?{U0_BzLCJkR-%&THPBkPTgkSCZ?ywgr|da|q?M+tWrK{M z{=YzBl+pNiQ0U!3VZ0Q`8xFs1K8SL*&gM3351~WYrF;!eWLKKcy%6zs*5P&CFnc=U@dPCk6Z$lPswLvhq9lg|t-s$I?~8%u-FQ7KHn#;{Ypu=lN-%H!JRgc_ zT;Pi%@oAU(W@h+Qpxeo!Sg{0JWB}hyv0JBU?`qliK`!yiB?|A}lK`7LXmjl+Y;->; zb|0XoLMM;SW*ho1JT-1%YM4hUFkxeZj3dB0OOkTw;dqR5Mj;3g7U{4q@eO7v1ng_6T>_%b zgPgbrH}g*?DS7npUZp;~_Y9ntAZT4z9OT5qMh#}Uh14^Ix8#DKu_B$Yt1>3o34~k< zHp2v>t~RkN{M#Mq(-69NCfwTN z2jVt=bsw0>|M4SYfR#`lHZp5~hfeX~w{_+h$Jj8lX2V#*K2wi{feYJsIl;bc=F*su z(94z4{`Tb@idxq+ONcX44KC{fvgLXdUQx}<+y(T_&tfseWkzU7pW?;7$uSAi3pQvb za%~37HouZV2nn7xz~1j;XY;@g=%9VyyV}hAbyIuZ_N{acZ1!-f8HPF!xOS9)6=dV! zr~sLOAcTc%Agik{0%!@amYRvhASvz^r|5u!=gkemNi)e~E^$2<2;D2)1qN|5+W5nC zqy=SrNqEh9hsX0SH%r+G4BafsN_5;UQww~%shr}r?g}pRqS9KNa$Xx4 zowpE0w*^s!$j-8YZO|aNT{!Zalkr68uRt7zXNR{SI- zqNJ&aR<}`~7Fp<7m&sT3-U=X1Lx5YNB9}c!2mB%KJ0cNkZnYw6O};ufb5??hOwzhH z2sOv_menB<@io@iQCJr}l?i5|Ynn10bLSm=H97{oWCKH8U%6Ublr2-&H$s>7T3Dd6 zdav3enpurR5lE+CL)1)*JuM17S-b9uIZ;^r$OBi-D$%?A3lx5)`~MCKq#brmKU;Ey z;V+=j**XJy;xiPS;oKlH@h+|st{{^n!)8W3Oz%^0X5kj0;B!7k_hno(OjB#r6|;uL zTVL!-KxU0euiwg;eWc9syd+jMX*WS_CE?-^dm-xAR<4t-5)hBTffNougUvR}py32w znEktfGho*fHNqJ8jZJ4y`9yqfFN{#(=I9e7>kIyquZK zG4n+h3_)90$=#ZNkL$)Gn6Y)fKoNy%RYCqj_`TX63fHkj{R8d3oYds3#McIf-LAD?s_ueR%6Q1Zx5;=^M=QPt1-bLk7nf zX4-R<9L%$fnOGc{6S(wTv}?rPT)8Ep1Z5aQF|A+sm1n~USeKX;ICrTE6g1@TW|Yg{ zDlhP~N`t)08^!a_ED@{@MpwqH^Pl$_EHr5ux~bQURs;)T0x=`%lIBu^Uz8#c6Ed9f zGMljoR+%8PQwAVOUiakuQdloWYE=H~SRY5)ad&`{bPJnRyKZr1Kdg{t zwJO3+-cXFGXJBI*7a2vkzt$mS@eUdu>sS>j>q>1dIVx6*Kp|CBY$d)x3bhh1lf)&RXWy|o^oPPfX(vlBGL){3!O?Xx3ey3WIMF+`D9Fdst^Dkfh+*BndFPXm{I zeFwDOwTg>*m%B;Xc!+oP%Y@O&wN;*^t^WlIhw0=M;Wzi;&_`I#&td!zPk3b(CxB9y1MAv0-gQaHw(FGA6FF&KP)UQj4^2yxDt^hqP zFI=p0PBJmBE& zai|dFsg-Z5F0_`fyHl*_(O6QH65f)R@5$9F!b6c+&c#h!t>)$iIgk%=W~tr~^yIXzqChyv;fs#=7Aodd5ixUJjvGII-wADyFJwSSuNMDz~ zm`8t8V|p5UK4*Smbf$g z1Y)4ENY`zh0+X_`Rr?-|3w=n>cw7l*@uaBWiYqj~Y*Tl*Iw>%K`$fWR<~^*(^2sX+ z1JN&V?zx3-TMBixPlH5?wr){y_4S0d7IHJ+EansdR0TLwCc%PxB}t8(sinx%6LxA10JUA4w# zgh#I?TSQ+p1rN0V0)o{Q0J^7j1i@v}VrdHStg`6_r1qFVi-E@UIr*`%W;30tH<#pc z#+Q2|yXKnYj4Wj8pc8lHKM?j~L;WY4 zP;b(>DbHFhmmyM~3!3+XPe{Qp&{i-wXtdVk+Y^c$T-dP~R*2H5id5X_ePf+oblCJ` zMK^}zN}JmGyK?qRN=t{f@(_ow>lc54!Up3XF@-(?*?qX$^#>@tLgunR@x_ImXelH) zbVIpQ!ZRm$nmry>6^qdA<=tSD2e21wG7u~8s!Xgbh_7Wnl z8GaPhZOv{>1Hq2IF0SpZE?6z+r~dpjytQy^nOP@KMcL*rr?AqpE5q4Fvgo8(CKI%& z4DKuvJP)K7Xg1fn~A?J z@$7jTzx{+EHaveUO?8#}cBqqn!edYLS)a@SBMzUlgZ>vok`tmtyzXG6&Ai-X-t{U6 zDNI$`R3M@J6~jX@MJy)e&tgOf3*e=hu|VVJHuUZd^G0LWfM-kw!5M3ugidVFMFtBT zk&zI|>ngUEW2jU-3Zvp2i?IJVIi{A;T|Txvzj}gx;~+j`GfVf?*mWgKt7(Yp%;rmo zli#MPy_Y5p$C_i)W}rI-N!pxM*;{I3I+`8j3_tCMtTM*KjXhDJ)AE9lCRCf5mc3Nf zw4sdbw3(c{w7W@trG|!-1%k`@(^K1j7byJ4B8LCBJnbxV0Zaf=AuKC<2Pf6qC{pN9 zMG*Y3ssR0>!0?2|Wwui8FJc_EGhHi)WqScPASQ@zgp*Q;?lf1I%mrNvUhp{z0MgZ* zCk4BM<1@Pt#<#;4rVsoQ{HpkZr+T_OX2>@MexNFZ6=z8gxYfR@bS`25L<1I^K zlK`c1TxKd4ou0y__WXBoS!_&aQwT-0swAe-d_Ogn%2*BXxCkMJIsUS>!~IMhTgb>o zf8*SYxHH>r{P)^oQnWMAF~DpErFe5<*Y4?QHPeP8@ETVAt=A~VRM)0>sGE)Pmr@pO z$p;!W0{^=EpgAVoP?p}HB3v^uuu9Y>ANX))jzrRCc7W zul0$$@SyRIG4%kS(q>l%=t57aT_!mNko8_J*AC%23+L8-q~An@Pf+2!d^^!Zn* zCP_?3PvNn0v8IS>j*NbHL3ozGrR!ILH0}@l*mqA<8E!;t-)yJMR^pUCqiDlS?W@4v zz5sDlA6QqA!R;0?n#DZ3Nn4EO!o`}Z7)n<&RCU*$+V4-|igh$O4gDGY{N{~(3NBF~ z7JWymU%7yZ*RKnN-K*A2BSuRV--d81QL!6;ftj*~u^LiFP>RHQmuarj6(f0WacAYN zMJaOsi3$IG5XIE|%If**MaW8@Jhx^O_C!yxLEmWX?b+x^&dowzSFpb>gF!Y3$%DV` z-$^ecam+#N6$l`#5(Ow?wd~^{jsenk!>|X{>Hg`7@_w33sza81n)BNXl!9Dv8u_Ce z@&lyk>>p_qVa&1p{>s$++vd0WBY50wcRw!5inf^(S*_>uPPFRf z{ADQUrrZDSJur@LN}d1Yi}?#C2u~yPe2QJ?k--!g=I)D5&YTn^N!l4Dl;aI)jR%SH ziq2=_%G9AD014tCg_rAFK0Bfgz1nk1!gHOdPPKZsOO47O1+B5_rRCD`&;D#_H{q0V z6)d%NR+CtKLO?3#VfsC2!Xpl8U)9+J+={|T;I=z$`AJwbVfUhCg%)gGZHb8?3jpCp z23a;)HXTK(gl^L%xeSF?aV42o2A2)sL!u36q*-W3^W#7c-H-yRV)axyy^IiTC8}Iz zz&_4gYEo_xa=!*q(^{6v6|@rgu%`|vP@7XAEw|Q7CsD4`a&~>`A<#)&>px~ zQCNf_5Y?qruc4)$j6bU(v?dLOW#^v?Iz6U|yci+8s@aWR&m| z#yAMgsjmDehMJyL4ww(D>4X}EP`J8ttPg*PYEZ#E6YE(@jh<}@f!h7zx5acROh{*H zCl(FCdtCmY6eyQvG$RexG5NlZgP|*j7&n2A$?Yr$Zz~AIwM`SjpnD;X&O3t&!_DH0 zqmjuqj+sw^0m!LbHrt6>>JI7!%=%<;HvmR-*avKy)HJ&~ik(T|9~^fXbu|?llrypjaS&%1 zq(-6LM*JXAI_41G?jFNbe^2#VE!}`{j;2V)djmR9>3QkCZI_hY^DHL5Op~5M6*H!( zR*yNNj}TO&LKLsyu^%$X8_ygLmqgTq{b)`%z%_AJ&w!#N`|K=`D09$+d)jJ@PJFO# z;&x%GiH+EhdnZf0Tpwg59{&pzO#Zt0aQed@iVOQb>(W4yvD!qRY&J zlVIvPy+T>A(XZxmLrD`bei>$UnBzG9wq{4xS)zS(PkauQl@n8e{khpN)i@2V9+nJ+ zXgtfq6L;P2IwUwtcmf%lEI8$jS3Sa|Q-zgxWe2BnI*3c;&^ zCZI7sS@wle0^_t+zQbxXCj!EGR2bSrs+!L97`WmyeXfV?MX1Ad5NPv&z zZM7dFw?XfqLQMNi+1ndTQ&&rv$`8tg;ok|9J^?(v$(ENiTOV=@c3d>-MxWFrz7^KV zBtJFzRcJ7yn*mN5;}z5Qec@SB+PpMXES2XHG#cd<*p zL`_B_Jb^h-wY-8wO~1*G$qAyH-2AwmFbDd2UT5lqh~C;&cujKqdCmL&dhtU$oF+fQ zXr;d1rstpK*3|iW^Yp5)P_2Ier{IxfMNgHKX1}pfBJ-wwa!R!{ygHsqExzuubE+rS znJ@$S!8am={$f7&&PT~ZNX>e{b5ExD6b{qH6H``G3*w0B8b zWo%kx4vH!*1 zdqy>#uK(U?ga8SKY7&Bm7J>qXG!jG&#ZU}LRSpAOsI*aV z)Cs+qAYHHxO~5t->daQRd-h@W`R_Szo;S}~&pGQ^>zp@PD_L2|$}h?1{@&O1{a!cI z?P?Qm$b`8Uu%|LjT|KsfZBx<~0;0S8nDNBpFDU#UodEb>^x==^ZghEByF@r0bx@pw zB^tK(MZwLG{c66jK|ftbLx7VPq@L|3{FafIeXH1*eG~$d8eDe*a1A-_`A1kAKN=3c z$QTH^T(fC3wq>}xtlMl@ZH7BRM+@An9abqSEsBAk!Sq13iFUA zo-SMJ2c6P44nl2wEb--xqrmi9+y0W0;<_**y#o5WDc3HmK@$`9$}1eP(iLzjuQ_*r zUZIVqwvqDz=MmQe7uP}S!RE_{uDFX^NG;6`nR(I};zwiQ3ZZFM5(Hrnu2eX0{tcLG z6bN5c@{r)?@#iwr9;kc46G@qbFv5X0O|@U{u#V9Wl|zzIy=4&*&^A7b z**lg6^M=Q>SGYQ6oEYaDnM~(Y3mvS9meo|WT*2ez)1QsM|Q6NC%=knh1|PY9sp zEMTWWR^#Q4UFj8=x9g2{yYp=4x25 z$CtvCy%K4tfPUO7c!8UU=@s-_>dM=fhS5OjO_lFR`Y^?jVlkL&Bkb!1h*anv2~FK9 zi$69dLAk;OKp~`n-qbgwUe7kbq2Hql#N8&?2>GA{#QwBhLRHO$1;_7fT!1EUL&RPl z9Ca&LHe^FrC}OWl3SGNlpPz7$%>@EjLI~t4Nkhfz+RNp?pz!~+&i&uV{^zd1PSQ~B zK8Sz{Y|?bxOliq+MBzmMM-};flgYL$c_PvwSjRD-(a!)X_>5pCV$*9*UEL+Z#X$s) zs=y`4gnlmt31$YV$VX1u!GSOYGYT>Zx6^h;2B``mYCw)3hJj0qFoGcMpi3NHgeiE@ z5kjm&3}1Jn>-Wm_fO4ZOa6=(>mtY3AL`O-KEfg*Ry4bBDBv?zDQa@=6Ce(#+3f71) z@Ne&u|6fW$kG+QbAKM2!x~t5gD$LapQeYz5Om;q5&Gm8sc3VPl+54J5vV%c%L@$=4 znOi$x?*YLDfwoXBW0sH9g~7<)4Qt56W9!vcUD1SI`sPL`c|88D4qyfD9j&e!{e&Rx~sV>y66& z%Dt=JV^R$o&|KhE5gVciQSLojiui&k)Ff80SVfH_{;K&7==NYefMruUq}-=+T3T57 z8~PW6RRmOpGNvnco+{a>Um)ls!{l$$xfP?8@Cvo6ofXm8+em>PVo_B)$uXK0V;on) zmxakV`F3iu(TsC53%zO`HTk%SBle5V8}^EldCG^9(ST`Sg(p}@GiTf&T?5ffyp$GZ z3Xq&B^^^Kml~jyYa7morY#q{W>SbGV>JB>tH4MsX?5uRWQe6F{TwKv7Z9*@D)QAX5 zsqJ-J6Iwgaha;w|?P=`fx37cNI>LdA)#C2HuL0X9(SlUeN5MVaP za-HO5P!Lv5a8Ut-V3SILcpBvJ$TlQiSwN&bKx z^b(Y8qSD=UIY~r_QmZo2wE$Leu0Yz0r*Y6;E3qAMKLB#h}IAd4r+PVg038?OR^$cm$zJ8QzT73*25U%`F zDP-*UPoa^^ekJFj{!?h&ju@2I+~jvF9MqI1AcDi=Rys6ETlHRS_EPpeU@B@Dtc^UC zc`P@3mmu27FHxxO_9ogwk~x5Ws^Og@9}zta&o&dpsjud&rE3Oblk^a>{WvGD%ayHx zlL{9ENNYfm1L`24J#DeSbw>o5_o(7Hd~Qd= zU`>@MXHR%Ps2gpJml4$h^HAZiY-o9z2r|I(K-E!A^quV59edl*f;xFhufo6w;BV%< z?ZBvLg^n-+Z}wb4cjJgMP-8RRO!yX9iURHf-o)^#pi*_fHB-yNhLHf~uapxyO-}5s z2KXTGv>;IDejMa5!anY>8t|Py{glr=0XJQ@8aiYC3?^2`|NWlN?Ehvc@b#sQcTkmq z)0)`x6K_Xbv?_ZxiO=mJ6KJImT{AAMWUZ<-#f)_?a5?7ucj^)J*l{y5SQdv?JcQI= z=)DS;JzGx={Au2?YVnH4!T6aukNKFs_Y&gB{Jhx0?-^Kfe||*It=Ho~ym#`*QN)|z z5xxAXiA6jch+26pA+blxG|yEjCh{%6y;W1B6s!z+29|6;MKSPl25xnKBXb-fA3E+Z z(RgB$zp=K634grS6`auGBx!8(inSiXo>z~hl$xlN*b=8n%{J=b>QmG`I*>Hlw(qEi zLjIT*PE7@yGi-BwPoJkGtdvBP&N$(Kw0QyNORHvuftJX!N)ULp747!At=K?^QLJmY zr>1^iNl2x%=8Bngv;E$|+}*$qCBxEtWLYkLJu{7jHcM2R9(yP@;RACL-TJ2@MJ94` z)MMoN$WA43e*6hs9~(HKI0nC2uR@I8BZu}srjy?!q2d`dlhg~^F}49B?-#e0cN|}E(U(jh; zxwjn{sj#kiTiA5H@~QVVns7j~YBS;Ddqln-a`d?;3b1H$__*Z$=9;y_d*rp7#7;4( zBQX?AoJ82ad!5U!&R!q$RC|}nS#-|-5JMP`h2cBI5p8P|q)^LD^s09abDyfNO(P=$s#pTB2ErShWZCw2mx^wi6Xql7yN&C^cW zys|w_J4*Jz=ZL!i+RLM9#kNoA)3!g;pHQD^6unf3HsT5=pq!S3dkK9Z9U1@_r!(iB zsQHX=`^OZu4jHN&!m&CXa?9lhn!QXc2k0}LIpVu+dFn6p6HcflJnS+U#wUb(oi>e! zMIs}eLvZo6&}vF)I&$*DV_3XUU2GK>@`U}rbu%d0MhwxvUo1)I$yK1q1yuByl+#0$( z^Pdyv3XJ3Rrvuab=4~%rz7M`8|FmIeFNx*sG=Z6%;JdblZbBhABVSUXqV??`<%vND3@6uT02kGpG{C~;H&eyMToStA2YgC z^8o#}_ofWB;9ZfA+FZ)Wma0u&t~Gd5Q{9Din^ed!YQpjwC>q1e5sA^|!q#q#yZ3`1 zF~QuL3XHo@rYZ$RbO20I^5YVO*T@NpS-`vkF2qh2v)z)Xv-|}on7v4`GeF*lh+iGu z;bGx7Ay$4V8O~zM?$2kjTMaM5^cA@DsbY_a=QB0Rg8K?RcJDx6n%rdwqiOjy)P1e# zR+wUKRaMFLzT0;4!_yw7lw;c`YfutbY$z}u`GY|AS_(tw z0UN8(Qit{d0}QuOhKUqr-`+tj`}Sa{NERB-Iu#Lb4h<1UhI<`&g1;UC&}_B;Sw{l> z6AJ&jjQg*e!tWkbdUVjP|AK<~Ys#$NgV=1!z;R8W>EeKLv28j?o;wt^c(~~Fx;ae2 z+b5e9HCP@x_nZ?+1|(Icx(FFVl@(4kwLg`sPhP=PEpqQkD@=?sN2GgtTU09v=N@{Z zgIsN56oHyJ;57AnD_c2(T zmZWp)5=kY=F>u#aYJdMBGUSMMV_Jj2KTG{9BFyxZ4Szai2c;hDaheig;%G}v6rIJ< zGwSvpS68C?7#*3F%q4kGIcTf$7P>ZPqO@XbsqP19y|5Nh3FF?;!IA|k7eR{1Fk zA46qm9RoX>QGp+efmCM`Eq?$DGcnpM#E^{c-z!fGEN#FPed*1Ye()~pEPpDLfrKsN zSjD7nmY&>d=o>zIaV>QsI&RG;H4+bP^GOU}^k^=qL{mgs-rR%7q$#4a;skZ=WFNPhH}=-tZJO{KC*`kZ1cHbOh+u!ym zb^4z0^&_k+qRb$IRcO(FDMYO*dp_RbRxs*>R*8BwBeF5wz|W|7Ck9Y+R}*wZ`4aB@ zIW|o`NX-4nV^M$eBJ@hpstV}|i`s(pVDwTvabvzT;~wIqcw`pwg&4(Dx;b3oCQt9S zAa3<9YZF4Lv}v9x(QG-~iSE9?!2#t~e=VJis$mu_6@8F4yQa@9cq=E~J=qDz)z7$& zY)Ww5W4RIsz+)9Sa`i>9M;B#68@|aNy)}GYqGJDuugH!cPZyU5e{@!~;vQEaTnXDV z5du;t!aP-G1_vcxpP!p5y9N}!iaYTBA~w7Gg{Gt$`8+_8-2Fn}(G)s&HRCquExs|) zm`-;GV{~X&iof$DGm6h@P{LO*3epdqk^4!-AMe|fIV-^eS~eLGPD`A&te~uM)fRqg ztWdA%>Zu@T6_C)($+Y^)XvV;9%*V;fU6o6Lbcfb1=>|9Z4yK)%tyo~P3M9XMa*r9Q zLKL8srxbq-^r0kMD0xx-Q`{qg;}BrHxU8kjFJnKkU-cXKYi z8mvjeY1}$$K6IGV&e`OJ2xvml!C|`gG{%yK>Qu3$uJ@k+(dMSZfs`C*^7gLXwBOYJ zfUP&a&XZ4HBSu*arBN9_EI%eX3jwUVy5NJ9e?wu%f1vOif(nQZg8mOE%q(q3A7Guy zyJ=UP>P(@;%1)F%{nI`rj4;0rzApjZpUY8b5EtjgC#(K3WgBn{eS! z$NXs-G>{Y%!!nLabX{|9i@udM$Df}Xk=& z`mT-e`1pC}ksQh3Mm_tvp~qs$$kY5%f%0g+CT{$(r=4Z4?&C;J%j|`6G!g2=NUpwVm_z0Fb(L!ll%tDMwLACIjZ!2|gUo@ZUrU zjO?GhK1#j+L@xeHT(-=2Ah3L5=Uk|!npjF{XS3A4B#BD0&FmjKPbW@O1pA{_Qg<1; zQJ;2RdqD0;Vn)#Z@iFNTB~g^yxPLe#7wny2TQU99A+l5F-+UPhNiH7bNRvxVw7xow zH?5RhbqP$u*sHZIR6YGtUu@8?HFnZ~>yT}3kWqMF6Xfo3pz9+~8H^n&M6`Ilolsyo zlNik$FWkVu5f4x2mm`l_c}?MV%lt*WsW|3n=7znUF+bYeahx*3U2UxMiNVVXdF)ek zJa>6oV>k7>Q#wXhg_Kf!Jy6xEytk(E0A`Z7g)X%*OcQGLrWIFwul8d}*~VbLW`kJi zG?tNh6B+B6j^lfNi20R&42sjE{z(3AKf#)8#;XW6wjfTEy#pC59J#Mv&Njdz4YlqX z2)AmCuF_u;GLPo=PZ@88=8^H-Fazz3)0z4-1sabAttwV*xJGot8&yY$J2 zKWaqLN>==jk}`_@!lgX ztSM7|%~~=&@m5ux)=%9}oJq3(j>6M9NwEcg zjMKruY{Hy^B5ZAHMI!o9I_kb*{ZM|v+=1~1v>UnJ zO8tZoFAj>v4Hp+yfkvv7vd9T@T@0_#p_0$>M9mwgQ#yHEW85{8$w$&@l5??p5J|MT z)}I|uo)>+8$p+?>=)kb>Ed-i++p6kV2a(3N5>5V=Np07;8ASB2J6S}6IK?^G%97&0 z-#;o0=zknXbeoVZb=<>rk6v#p7e!`% zb!g_h5k%*eltvOue=+v<@WHCcrZjM8#Zg9Mv91key;Ij?KX+2SroG=_k5NuWhR=%& zH$U_Yg*x~hvMsC2M%a;7%6HiMiu^Qa9V?Dn^xwdjIW%V-Z%6$qD#hf~AzEi0|18ya zB|KT(sUk+0?@^Jr7??i5h1aC_zkpvtjT$Q$-2v2ysKlph=@a zsxc`Y%6KKAIS-hzEz0}n+3js(eD)+NY~bfBh<|p;=aqroODC17BhT2%<%lVz(jwxS z-{Db7Q^At^xP0-2L)tz>7xuLp;OBK3RC9na1y1&$l<))xY$-gJgDn#L9f8i84l|`g z$-Gdi^GBCsHmW*Ke#GDV{d`FkU|I_GZvU=I6dUOv(o^G#t7D3gVc#Cr3W$8>JDx=& z0}^%=n*TCxnAP|)8Ud}Hi*?V;|0R;ms;>&aftTYF7qbBIv9*g){SSb)p(ber+K2XA z{UR7`HR(HhH4EE9lgyK}THg#JZHZh=p$sIsB~zR}N_?mpNp{twzxVr`rp&BForK&* z>wLDMk2H9YAcMj1s}u`Bh=wdr;65*?_^xu*2&V-Aygc!zQ26IxO!%bK3pgFr$owxR zyrJrHAHu z*sZ5>;A zaBP}Q9}?B<-9*OvEEN$|X_$*SJ=K*xktMs(8n35|D*xe%ey22%v;Y>b!UGgbN0rEe zpL24t2zdIVAZ6FLM=)g@hr2lwn7A{+7q=`5^&#F#(l#T7nFPn%UKe^zGh8SYWUdM6Oy?o0dcWYV z0^7a4o&?H*3x>VKTl3h@F=Cb%KY9t@k{`Ds!%YW=&~|p(=D|)=UYmGkl37kZ6bd=% zh9PaxNgq#}*9kgFBW?+FytK(n1@a*;+39b;zxk`w_&?WvYiY4D0&>X-buNzNGbR@M z$%9D;eQA!JXh$20$oPmY#|h*`oOL?xMQ*QA>$z=S35G$KEj0d)HNp81Xo!FnbuscS zG#}0Zv(ktWH-_AUx&3RzgAuSbv2_SEGjuEpj?d7pbD0|-?*{kp@nyr#MFih+T! zyd0C=lV7u~POsFXvbo|N(n;xnmDC&El8(8)ZV=!)O&EEy$k-H1!65s$7W7C-?o!>_ zKP);L!*-M>Wnm|Oib)VvaMlhvj0!;8yAmIAv-2Ax2%3miI(}?+uC*wRIU9}bc6L)d z;N5E)>5dSFUe7z%&4;E&`(xd&yN~LLb_Fbs*(M=I>)@et$7!!6U%0;Eq#VUD4xnO^ zHEy&$I!Z-KXZ^7>cu{>IbhOHJef!*2PrLM&F7y%hV!|}^meI`u!{<7oliM*a$vouR zeqGP7&XST|ZOWE-^!}vS*?}Lo7;_^tA7|Pa?S{YK$KR7)&yRl?JB07PD&R3rk9_{yyaK5$62EKLNVB^leBr4%VcYpVF~(w;A6Ha;(KICgFmHx1a`(W- zxQR(sx5AUAfw-ho44HDb_sjID4B~*DY{`4jSR3!O-B+(PHrk9U;&LjVm;)n~=VRRr z!-wSOlw&c>YKyG+Z5u(9s^M||r_t{2Xgw^(Jh>;k>8x)>m?|Iv-x>1G3i$y;^7p)7 z%$#}q1Qm0-1_fSkIM+Z=AwYHaOW;V8+m@@1bS#j4^dk8TZo^&WnB81R+${RAhrG7;}F>=NQ#=y|aSWo~{lAY5sYnhG+Or@A#6RGiX6h+Obhmq=x zNf9X`(D56)06*;i$js9W3xV)ojcBziAL=tNpi!cA&DZVDF*gjB_^;00VV!wZ?LQn1 z)Gl7}d!IqQtXbRNHlecl;sw=YJcU!5`M1dawD4kV`5L&eKAsnLRcrBimK{-|aoTg~ ze{1u>=+k(Wqt>(bhthUN3q1ZbngWg8Os+LDcK}K$d>$Glxt42LJ-LXR% z?c_u3zs67$>BP zV6Lwj(4oC~q>vM$Mk(0buBX{Gc>;Zmx9&6o?V$BJ8EF1UWsMV8E)dm`Pl8Y+&S{Y8 zt}>=T)ndUD9jmbx_G?5E~#lbd13v-^Y{RY>UloI9i_DE8KN$}raC7eajm zjqpl14b^SGu}A;XSy1`R@F60!Tv*r*Qx$|vqlz03UwkmkZ@zA}I0;xg>O zt$avQI7;yvaVfR9q8iff=?uOFdlLqIuCY#Cdt8@PESUJ2o|7|s)wJ<$;muo#M=F=E z9|z`+pVrj-VvF#U$e>9Te!uD2z84lKQ)Cx-KLkI&r=CK+{@C01ZotS<0D)2eIFbBa zQ|}V-!}vt!4dPq^8M%Y*o7(z*#s=l_wqWwQUSU-qL~-V5wW_(592}AF%GQ}mopyqH z+WzubNUns91le?slfiwPODCZtuQlqPAyIw=MDtLQ)}TXO~Td_(_0 ztEQQ+g?P#sF_&6geG+=fZQeCuz)*qr`BK${`S$8K{gdFpxR%Kn?lqMd;E^t>P5){` zwS~|XD<;2`zdB4WW{338*>CNzX8?ALL;5`%_Xa*`_)8}If8-}%v?>FVR~&H6BAN4v zz{6mVe|#kp6Pio-*#K?X zDM9xO(uM>z-9#?J942df%kQ=+Fy(7v9EZMgH_{WY8>$VHyl>u$dRg&l?c&0v(6^Jl_A{g7vBdXk>$7HZts>0{7cmV&QF4s|eCI%7Qk>s3mZFXz ziMYsxcm_%{eMO4;-P!i0haK74d9Z!)n-AB^rB6b#P_iB+%Er0f<=_u#O)%LH$?Q}iQehg1t>tn=8 zzKM>&79P@x@aO$FKY2PaOn?V9!q0>2kV_*pYt1UrgKuw-+XZ>lC)LNi+{ci3kjdFI z&l{=h;-!KN-1|ntXbC6+S`ELx54g~ky1x5<*42a+ar_G`G4r1`4|Ai?m4l6+yHkAu z*^`Y_9{j>`Z=_^LMNwdbb%pUl4Y8uHxs6)B%&3;3Ex6?+7`3h1a@3cE!W@W6M!zyf z@Muh2mD>AAOzD2KAdwWz2O(JW$x7wc%;XLws(wU`J<&R@tsq{Mt2&8Fa`Q0`7KMgV z(kIis>NG`hE> z5);LhcNy&GcC{JqxPBzC<5#^B{YSS^cz;M-!w-iNuMIxYM#U7}N3>6#n1s9RvX2 zSXU+9sGeN4H>bi8V>GJFkxmzu?GrsddU{eK3d`*HLsy_*O1J%Jd5QYbq$HFYkaWb3 zzRo)mNe(cH!;%*|?YxaY*t&^8LfBW@s0f}y`(Tpk38i6yk)8DwDO&f8tD>aW9Sjm) z-@RH9lT%z}P^8syTUuFoR~2i}eT@E6AZf{;-tUX%z`gl&^sffYL%FyH`tk~>xz1Q;3?2HHsXVHi4P_V3_ zq=t?zEB)y!0$>x!^Og$<(>CTb)3(t+M;tCG`|eFehMB`4j7 zzUXTkX=r@2!xhh%dFimwXUKehYFgE`FJ|B5RUc%P9q{QL>bFPv;NJbi+dKAhRzi*i zCtBCbwpfD`R;#^4PJ<`OZ%nP0Ueh_D2R9Q$BwV9hL{{nZ{YKm1y7su*z}nfgy~Y;3 zapC76834wC*m`I#TMMKI1O`gAxy3uM>dl!3nb8HuL zT9y0RPU|`{$xMa4%cilJ>764^jvW^SSH2oe=AEeg033&Tp&B_Hd^MM%!!$LfxA2gQ zN=M?7BBbCk)WN$UZk*{Mj!%q*%A1Gn!wRJq=FVP}(Pc~iBNZ!yE4W5z`__Y7Q6&{` zSTWN2GOny#nEB61`LT#cl}V~L-NvW|lVdm|)B&TL0m&&9uZKpKnv0;9B9E2tlt;_* z@b8vN)6W!K^*2gzQE^L8HbpM|Xp^J-$jlvTM1i)hSQ45h%;_Q7hH8c6^n58tZVX_) z!z<1e(_%~w;-PVbq~fE1DGcsRq*P?2c7T-Y>0#uMIsaN_9fC}|VmOGqk!3kjQoJYL zOe^0t9_6RD zd7Oe1u&@Tlep*E^k*ue#d_O!1ALk<5*`H%g9!ZLW(vPnkIKnXfsCgXzj(nGQ+>O5O z3-`3^bfO=o%RAFzNqu$aLWn8FXWYo;iz$=so@IInx96i_h%neQBM&BEVOFdnUeA~O;~3%TtcNvSM?1!4rBtXr^!%4_1a!GP)Ed9$7b;nMo*HkH8JCuli#Pss zI)XK_7KUs5^l(o}yctXI75W=Jm3Np-$9IDAsIut;*<_#2;0t6klPd?+nN`Th%lj+5 z9d5Lt#A^3Vr5Z~EIhB5+UZ2;?MsyJG2$N+>y8Ok@@YYXjIv(H0KbLqMiys+Lo-2`G zk%&i>GNqh286vispAAw8QMR#Xc<^r}FNz%VhrUKcN6T+_x<`^%>XMjxIkrYRu@U4H z9my$GtE!H3(hf{&d)Ic-U#ssY^hLL(JLrL&8b}4aO^>pIQm_awM-lGn6Mdc*^^dD1 zGXlVexXjGE^pKWt%PG!)IsITrjN?3ibuBtu6+c55N)WA;I)?YMI^l2zb)cAg%D{lM zn)1)@Z@YGb{)EE6#DC3QdQYWBUjXc@ei`S%GtUQ-=W43>qkvu}R3#u2c#EGbH>@2t z9Ic38cFhFbxP-kJy!?xvd(cws4$e!msk#JCv`Evr5^*!c)gc8E9?KQpG5>8L?8t9! zx3VvxPr5DVSUA^guOYYUA?3!poFrt@8^7*F(=F_xY~Q)Y#TeD3Og10Zr`T!bhsyJf zH5`ruWXm7bsIA}->ZWp3a?|(R&r=)zXZ&uLg&b}a0Yl!lFU7onpnL8`M6{Os%(>j! zw4fV_H{Cy_9{u#tT^Hw+eE(>QkFTD!pT(KdH-O2X*MAs}$DuHKpoejF`;&2~8G4s~ z?zu9KBcbW=17m`#K%l`d%f%NB{su}9109}+Cj~63HF)Pe&2SAUjA}|VewSk%1_!cB zalpn@hpSjMG%?K&-lftbYdfW5$lY>SGcb}mq43$7DCb`K45V_YEoZ>ag;7uXJ76YW zpJpR>XlIUdUJ2$KcX80D;Q!9G2(nenglEv5{C)>a1-g9?)c`l+Mzaih&ljnKMT=hRD3DR4v~~Np6h5HlirGS-uPyx zmDbZ3c^hV?XNVMpVPlxl@MBNa9@%p!IIj`pd<1>a#}qIYFhv|GnDfT%_AXIsE0@F( z@TCl)=VId8k9;@2`_c?RC1&m1T5F>l{tG|#cZiWN(3VSlWb;fT|CA#Wp(3#vxE2uj zk-p-(lDdM_2*}UY1x07Ych+gBU%c^QzAj2r&zOf{5M%?jFIB{@PHGub=&6~;#U?=u z7`8`lljn0~u$G#g1Wi$MD=t-6&p4W{`Q02FLis|D zB&sALD7uf}Ifb$fVTbeVX_o>SQ$&N@Z|c|DXXAu$039HHXF6oP)s=|`rJV?j2<~eE zjqJnqlouV;Zc`Wdr(uy{mq^;b>z z)n0TT(EFxd1CP!;c~Z83xB0cdwkwGE_l{Ii%l2%Q_$7`sH_*Gj6}bUuB?(lf-rWpb zLJ7yLCLp4rvu@7*Om*gQFf-Tvo3l+J$S-g)xnvCCiv%g0_5jreA0PX$Dg;HrfML>1 zG0-xb<)z&gflPd^vQPE{0H9*cUY<4e9vGSgmQ*}?9-7Gjp;Vly{BPEYdLnIK;zt#x zh^GRfK#+C4gI0;5WuXcmr*h47>4{!I8eEOc26m+3+|o>wy!uYOWgl6N-sy^{742DT zJXse2`e5xHQFs!~29gRKIaB4Mp#B_)5GcI;?pxgmTkJM2^>L|V1#tng-%LxW=3ZQ0r+JBUQ>(T&Hcm6| zb9|Vv)g(QAm-&7*wS8Ac`)fXLu=OleZ?MNqZCJNydM#c5@aFj5DxLHIrdTYXOU)T3 zQGqsBW``UfNShsJ(#vR>%gCTv^FDtU#I6X7*}So{QGQlvJL26Mk}3OaW6wx~_paeQ z@2^K*9yC{t0=kx7>@j<_6}sVOMq3VEin&AZ5xX6}@bTjFz(QoZnpf8EA2>BEbM4mm zD|1C8J&9Qf+gS_$hO{##Oz{xCJt!n$FxEQk3-hFoH?m`Xtj?6b)Qg_VPjT4mzws?4 z(gS84{#D9_NBA!>ulqlUv$rLo(&e^OkF4@kcV*R(%8uSPGm(4xyIyzc2!x;ZEK&12 zH{NwhZ{4xbt~)jG zrXprsNa6G=6{N!xpi}YE%-;-mKme=XWAk0tj5h()2z89Cz_Bx{&++r;ZXpLEO*s=!?avl1GR#Qa?g&@>Ar5nKx8U>6V!V!E9YKwDa!$=O{>hE`rRr+SnVpKXu4==7{xr=PK~=L zjQQV9^c*crvU(+c$Mt>?Dv;Ve{wRf^_yPV|!TBYxI{~^GM#*MkHJ?B3gmvx&zc0M_ zlVnqs^S51hjdu87TdTZU8aE58H(J>XLe=}eOx`5D3zA2GP6eAd7IgIy1=`quX*+^I z!ZoYiUG^+Y;GH2Z;~{>shW?{k(>0YVAf~zEj(JjkEk4dl-us{V*C-c)5-7gP4@44G3>vgdCWv|~uInNWc&m;z%^jeO$Rq8$M zDfqFCw)^#2s)5qT{Dar84m&;x&r#mpUn#%0Jq_`MG=y>b+6sYP0xX~64k>j-p#cQS zR2>nl%qu2QMjOa2o^d+03J`3}n8Z{eYHHCY^fSg@Ho_Z`iYModREZ%)qK)S$he0oU zmDf3i4sB%Tzs)OP9A(32bq{N`ni69jvjGRH*nwQFTN;y-b=@q-|i- zFt+|rJ$Jc0ZP5fD!>Ph(qYrnrSMZU?ujdKrsSc{k%EyUk4yrFa3i(o&teqymWVrq1 zuIZH;(#YXC!@Fb_@0}m>Kbr+P%noET=y;Q9q))w z*B`u+S^0pW|54Ih*xFvV(N|SB==3`+Rg3oR`*qS746Isth3~|j!>Yq@urwN)aAE{? zO5pvJgB)B5*ihXCQs4WjTh(T_?m78)`6tToA2Wl?8UxR=AF99a{aXofp5O!%U6K3q zXIj40F1qTz4vSeIQPy;c)yP z>S;y~BJODjGHq^Xe0%S8oaMLxu^8=TMc+T%?gQtg*)3(oE?wep&uA+1qaRH%oj=^5 z90>dQb^O}uSoidaeD>fADmS}@NdJ2?Nfm)k2RKXaO>ag__8zJ`Jh@MJWvfJMD)K`5 zkzJX_?vaH!PDO>h;0OVR1|PA1Q86VW5+S*~3VPcffQ;u<1gQEG3TEjr3!bAW@cibl zmQO}c@52~Y=NL%1h5a?;Yg_jp5L$ZrF6j8umj3}8Jlg2DYO-x^68QFM`ck_ZFQ;8} z)LIkD$QmQZY%H>}dx{&>&K;@Ju`tBGUinn4ipu&y514=Caocfe^Y1nTS+={D*9PLi zaNO&SoIb}GqHD3lWN%eB=SJaP%1|DIpw}1Bmc_WSY$T3jry~=JK5l-9KJ*0tp{dVm z$KY>M+ziW~89ryJ9pvF-bc^ZF`}f4u|EwabGDm4nEB)}o0{l&wBsks1uRqDVZ)|0( zU=PCIy-oo23rV_}1&Om}2rNh<*PM$z;yie|!Ue|K*TO>R>^;#e_W~@2s0rFdo2PaZ zwqgX}SMQ$sXiq4?fsRRPq{vf1R410RLo<_<+>oRPJO4wX9ZPFiPebE_@IzVl4?055 zzOj@CDTMaUovbsEdtHS?o#*urO|NNaO}#%c^?ahrH*iY(o`2bww`Fxk%MM)g3_GCU zr@OT3G5u86Bng-LQ@Dw{o^NG-TS2tPK$7RtJ@;I67cPVxZ3>`e3!zxZ?E{tH-MxXG zUAKF&@S=IHVa5gD@M5W(YPN8B$S|_H&~@o@=I5lYy8%WOUdvy((~HIgnnblJ&jSc(d6XLLRYJ`t1Ayr8~dWy_gJUBav5sYiri33 zkwvKG-j-(TEuHi+;Rv_~Js}nS+~3x5Ed{ygdZ>mnfX| zwMpZz#_-iqAzCg=jX%^YF1MwA*qhIL(`7u8oqm7wH(eLAPBU@6FDjcaUUcSsZe`-C zu-&Oo`%!M7sbuDt!_$TE?|cz_|I!_Poof-VeC=lr_PV!QVvpRM&p%L&l^Q@obw1R1 zIb&S3D~D;;fE;EyFf3reMRU8hhJqteO=ozodE=a6-|y(wMqho89Tla2YO%pOLteP1 z|919R&n6&U?wy&y%^Emn_||td&L`Ai)@h~+En)^~N!9_KwVn>9iQk!Ns=Qetq*@+I zqJwVrc2tMAX|Ek0tA z@B7I275YRu8LjZba7T}{-zeU*Q{&nF+2@6$2OE6p{978n1HQdM52n}co-Y0N%QbG2 z;^wci8bdD;yWv?^Uh1u5*vY6LkGTGRQhwR5>$`tM-Mk(p0D!y0*D}*e&N>YRvm$Ra z9zgORsm8E)`S?qh3?Clb?o6(Q5b}qJ+Tk@iERbesZ<u!#@g`HY_nmF%|%5U<_b zuoVP+2MjnOeB{Y#x|Y0sh-2R!8?TzL$3^KC%~t{3q$Q+!451iXDxdwX`%gn7Lp3`% zgmokJVhR$zE35*{7^E!w(y9lO2*ESAN%YNQoTHa6StOdqu0 zxz@agYt>TkyYBUUzT@vB340gTZgAI+rD|lc9!*yg@{@NF98>>UZ<^P&+`s?)xq~+y zcS0wpngWCNKb~a1YX zT3S5RAP?qPY&y)-O7qoGUr}|M&M3fVb;%ZvsNabAl#AhrxlnH;z}7!vPsnI5!kNHG z%bwY2k`2DW6ll}itoKs<9<2#ocK2;qO>Ny$ZN94)Mhrcuu_yz}=%WeiHwys&0y&xz zS4Ft)L%UZ>xxvU+SzH2+A%;pp%yY4;;y&;=5E7qR-o43le~Y(x?{Ch3{2788S80~tJmI>I8bxK z65jOc`{J!^C^uOw#`kaRWhMEm)qa>vT zbTRWWpj}e4`a5Gq{78g7kPQeZp9y&aQYsg`0M2~4AlnTGA-84J2+IshN@KRv@SVK71am{1TOp_xrFRjGEERNHx zrIF&@J=q)_nWgpF)XB9sI|)WMEHa)$*~1ffYuz)@MNTn9I8+lu zaJ@hk%0(3}Wk7Qw`b*0;^(*oKka}Z{@<7+a5KrWT)qU#6>qW9so05MR(R*fJ!{&Co z+g~i#Rz|3RsG~-A zr*xyF0-_(fyQEZFL{U)e`tkk!3HR%H&UMbY&vn0#Az5ppvArv~*fgiGKmW?Omf$N5 z`)yn?^Wkpmk*R0;?88|vq~}ClsWtnH%?$4`F{xW=DV-8UsC;#!c5uVnqTJbGN#IiO zhkB@={?!Oowy@>K(>GTh>}3C73+$VSDHjb#ESx`GYg~>h)?_YFGEvr0VzF8R@3ex~ z0FNJ(Jd-N8-=5+DY;=P3dfyjjrOS^LED`KnLCu_BI=(;?f(h|`RGG4*D<=#JM;8pWue=qjso)uA}l`dhPYd{`ll~; zZ3)1~al(thM1Z)wm#8t{;8x+oP^f_ZM5 zr2pMAiSlKvt=mpppz`HHB=OjcQl6$g%^lu0qp61(y8OD9m($zjrdZq`Dx6wE)8f!O?>IZ%(oHKd;Hh zXk(}}yd0aJEjRK&{pfZ+f+P}Y8A+OefH{Pivg$7FF=DY8G{$>8-qCF!_n5l3Ij8r@ z*%=A0XAD+Lw4ki}vbEiC(GmblsVw*s#?-E<>SwvyXME@pq>YiWa9rzxRdrGh4+jokMS!Wpyk&~?5Sa)4+236=msGVH`y&yJi0OZ3rLIyrh zuuc?Y5o@&v2hklbOO3KGlFELPWiRFolUq{imgZGNK#OV&9SpE)XOyB!zO% zR?a>#%V3mOteRkvPKeXxML8@6G9zv!&@kDNJfHFa>5WU>@OfrHpOlukr?!H@6VC!a zLlL$#{H^pyKG#B?)P^o3e_~w;<1un^36-MlItFMq*ZrJm`s-*iM61xBhwAg?R0?)@ zX30OioH4K(Cv>c*wx~_ch*GbYXQ|Ai8_J>bN={C5X6f0V2)cL7L^yTZHJ;EMN z^qs#^AV)6gQp(2-xnT{kNj?ga6*9k3CPtvgzE-K(cI9Gkb#pa9hL#(nc%Tt%^9#<|L z(DJ!==otd+()1&{F(Nczx*TaLEUisBi05Y-y+DwFb!&j=G*DWO`5cmnw>sMY{8u6) zBW3LVGpt@=#Iv$otD43kQ9Yb7Y{VTzLcQ7H9e7~g<7J?wYCYrUqW~%dF%6VQ<)saM zHyuKD`a4S!m^Fw%4ctQ&Msqwbqc}m}AKRt8GNCYsA9h z>G7TDEq&n&<}B=@+3Xa0Kxzz^VRw{R0SX}1H(Ftu^Lx{pMFlX)5i`cZ7W%@**s6Hp z!jLG9nv4+!1qxfBup{dQLs#8Xqz~_Mzc2zj$d-fA~D{C=HMwAhD1JWdS(4fX}M$axgFWzuY{3j&ZpiZYeqo)45 zu$rI#PZ>5m^$#aotm9_l=jEri%gA5JM)+^TWHD#F)@V3NCEYMF#CUxs`t~Hgez5b9zajCo zFL9^Ydc-44k)2FgM@f9WCDbv()j;>fH*}t>!Whm}2{Ye@xH-!G0rtde6J{|T*6&PoMx2xnQ5Ab58IN_G@e#UWR2PY4*r^7wb#oPC z2@*(F3{$Y2ThVkA7N-ga2VuwAYC1Uce|uV+a8+G$H;bgjiApf!7puAo%4{NohYZ7UEeNiSHW}8tZ1h7ar5b{ZJXGfHJ4aAgAq^2X&BufV2N1~@+P^1}dFtt`{_da5l%KG^x0U1)wrYN;3Y)DBm*=&R%wlf&nJa!9aN-d1{;NYV5iI*)2Jl{Ka$zeYS) zve3I;W9{!l^zT#ZB-c*a2mK|CI5Z3eXcP9H&fcWF8(N76hb7|L8K97K?2Q;AXT)o5 z3t+t&)GgaXa{*`@2{f5w9M@gW)P{+KIBBB51^{S7jYy6D@R7FAU+gFI)BMrb-Ctzg zef*32=_+nCS;s5=uTs!pfR4Hv2!{=7Al|Lgg2Qb1Jrbnh`)>#TJ*?1}_CPm?!xvKF zi|I3J%-du3;!)YGjPmg-WqLVrb>Z>#>2>bjC*uh4Jd{TEV)S`>xPB@j+Vz4n`_g~g zKir)tiW8DAQhvo%nAh<;2}Vhe)?zK*PNsc6mP{a-ItDdG;WnK-55Kkh*E(FU^SnNq zJyeqOM(Tmryg2z`V#$8SaN$kwr@KWRD{hFo>))P=kL)GhwEm!51~C8w)1iY}(bp#7 z61S9mwa1U-FXSh8!d0U;L-M_Ex>V3~hm*PKRQjS~b4-pg^8h&3d6{fDK`Vyw;s&F# z(xCupZgzmdAWCxv?E=@IUQWr0pS(v>tT67luE5U}rLOk;n?4A@lt|oTiA0{%Sqt8A z?x@U9^jy)4lV$Er15yHe-YW1`E0v18Q4r7$`4V@sbRF-qulKaiOUpOF`cewfjk>B1le<`Hf2Y>6TVxiF$Gwx7a`leWH^^PdY+~=Py1bIBzD)mX zkQ0`3d3o|~Cfy6)<;S5Pe82EQpiQVnt28%_`E{dd=Yt13s8Zubs`adl0Du`i?)gm7;yqrnOFY2e zi+jgs>D=cV*q1G1*oywtx9fof@g6F2OSSlpq(bbutZkrX3NqA^7~ROCsPFc^2de)% z_P;h3gm+Oy1;66gHrW0r3X%X@fa~--J2%RYCgp(u*&70}cO~KbCxdJF%ADRy`2XOf z*=ebJJUx5Q%*FlTibtKJ$EKp!wa~3mPL?A#RL}yld`U@ewCYa ztdHA1(Ejp50L{Z)(SX_GzL`3-{oRm-7Nz#buestQ7$5}roM22`X7f`de#`pro4UUo zLokb);)>g?8Tni7_;sdnZpPM+%2(T)EJ0ck>8Llq-tc&0KynkzK=jn2h)yiQs2$p2 z!A%^3J6x+bhaO)g5-kF7-GVNp%(Z96UB*%wfVVB1n&o|G$7~me+~!e-Hx5ugjqrY1@gpU~D;lGmj#s>meBGTk=?^SON{&RUh+ z^n@t}++wA30Sma8=M1#~jEer!=P`1(hoa*&m{d&9`qQrrdN|OYa9ZfL1Ba?uoEK63 z`f_@VVZ!kf{kT9s!|n?tPXrY!b%U)P*IGM+yv-OQRX%W6lKj|;@X5Vg!%r$)P@JaS zkUg;=V{@>3dJp8=X;}b`{!i|r#~_*5Q{vG){Uyh|RIXIIk?hw&P#w)rxt`WmUTrEZ z{a_=exU;}<`i2-YvQr*vzlU&7deSXeFoLdSlK(sW2PiwReA?veP0kPe{} z7WE<<1#f@v)G47OTjobTI}|#=;!RCPwbB9ii_ZSof@7;t?}OYF2>7^OA*QQRt%!l^ zuQ%5XUuZ)$fjW0B=|>Y6qtn)vA&(9gm>kI{W&DT^71%2TP-z-Wu2a zkQ|C;@x|o3|NiMz6-~udI-tIuihit`dSmG1*)2OIJV(ux+sq?RYCc`v(YD38{VC$B0GG*iFi7PA!bi1ko!a%F6fAC zZ8NS(hWbe%X@}dQDVBk=6OZ=y0cR`nMf9z|O0A=pXh)Z<+xYV<20rLh@`c);Jm7JX zlDsBr_E=>7Ew0*M(-;{y`H*5(_iYEF+CInEs-4cL3BxvM%zk-t>+Gpx6rU&uykKck z*wK~lH&H8AgG(t|;e=f9L=a=Fi`G%qnjLU=(4oC-`U6h7c$tkFba3EJ?f zpq80nJor_l5b0Va7z1@=SK*op^=NV*plX+gv(Yiqze=PA8->RDNTCIJIfZJNBGZ{@ z9GH~%Dp;=g!`P$FWx5mM`h-H*_d5M*bDtcfA*dVXtDTyk{&kQMU8`A9fKPAgD6ifs z7Oz?M9om@*7n#itN`V`jJ+ggzzlmq$XXVZN0`#Zdku#+ht%R0U(bjFYbYVYN#+RHG zBYV{BUp2wDWh?S~3E3MANqN+`N17Gh@s3ZU9$sg{l{u?-1ug)f7@SY>s%ejcX(@3OxdutGvu%A;h#`!AM{58FO=~`Ooc_;~~D9v}Qs??Z#7) z>Zjp_qK`|sErHm}!c)m^0t?xYdsYK)&xG^W2$2LAtj(Rh-A{J^owSK!%K5dm)TIUA z0%j^Q7wGi9S&7hTwtDcZ;j{P_S*823XEL9E(V-hoOl0Dy`WX-WQC#~_35 zu5xjo3}#D#vciE*^bbcS6y%Wwi&3jK~X~Uc=p+i(_^aYstv1`ubrSruLiuuC#cr_+qnEKKpyn*Za_!em+X@Cb-UQj zE2Wz~nU|07uR5F`&1L^>Nxg2a!Wy#AWT2Am`uu119c2Il%-9Bi7`w#iCj!lDEP#`` z?$ifY_&%YDa0mAq3>cA73U!efiP7)+`wX#r?>V2M*~}teQOB3>6@H)>b_y63?ysmM zHxOhn-#au8VChQZCp zZxXu=&!iPO_}Ng8^@UiuN5E}uRdHV&T73f5b@W+s+tweoWHO_Eo++!FI6qXEPKz^| z{z2@S=qCSpN*15adOXU&`Y3gty>1|8e{jY4TK6{o`8`{aN9Jh{O|@lA7R7Ya*IZxB zFeYP~45R*=AL)6h0Vs9jJ_Ccb(`RCs9}qR*_Xh7t6_rV7q>1JOv?O>z-)9Ahj5KCm zs5f`nA%kHVEuB{a6WIaOPYx=;fw5CUd>Pa%7AU=Vz!GDHq}xG*JOMo;C&9URCy>t| zBv*ufjI*ZxO12H|)7cPiiRS`1x?3hGeLE#YE8Z~J+3#(%H|+g2kJ>DmN$5LAyKC}S zDicKu#Je81mRJPwC4S+zom7;ePt*8`E;U)r?t> z>F{KBL;c>=yEE#!bDVl5DyF1zyEdHa%6*`qk{;@gsuq6;@J>kr$j6iVlDn|3vd(kf zVJbzDV#q+dXxWi>1c05fP^Mqy_n+os%tIbdEW%%!R^+%Cb`Tx=bRm~qXqo&2)%zVU6#8yK1 z*8*xggW#{~;Y5MPaYOppSRGsdZ?gv^CaS0^-v*d~|5P64n%P}Aj1@U)xG|hl{o7P? zyl500aNG1x+5f@{q#Vyx7{xT<>;QxE=2`$&rY_SN_p??$kJ4}6Za2g0wZ5+t^)h_bINqGxXqgzh)o8BudG74FeV0&17772mp%9*M z^EHhx(|q*=Ejy2<)0~&Ob1A09|0W=YcJT?%r}X)S$j$KIEMj8$1tmW_lOL3cQnYPM zL$|?SYw?T;ChUNNDP$($!0@Q|h zFGhJ+!zevE8H%oM74nP?2@F;MPWf>VN-vHWS;Y!&`DF!;Twx4T6QcVQ5-dr-+OMWp z_mR&AiG(6texGvKW@YuJbGkqM{5@!C#YS)}Y-Y}6v|KaMRB*P?`r+ZJ??sWz4>YX# zr=}BQ!`|CHc(}T1prNFa#h!W7CrCYK#w7dD#k(dGNqHAhms-Yq!dAb$xKE@jxo&dD zWkCIXnwNISPFQQR;;(Yk2mcd=kEvdTu4Fem_pNVJ2KoV}m-w&8Nx?4`4k25y{Zr2l z^^2A=yCk<VWYOm7v1DONa;rBgmJI4ea0Wn)z zEM(z}zRg^^?;6vlW;pB)tpx6sa`RPLS_r;)gniJPd(-3jX#A4HhnKG341@Xw1C!wg z!4ic;e{UUwq)1V1l>}|$L~eRkxQvh-EO`~IA?A~#38c2@XTJw1wWJ{H>HC*b3}eMD zcFNGx*qBw7NoL4wUZF2R^cbk&XC5lKup@oT9Btc_gWtJX6g46lgZ;#-IpGt3$gIyb z4H|KeX?DJi9FL}+U8bQQ!BBWeu#<=KW!R!~1kd%1@zsBb8la+b+#@EU#`n{y`%lEK z=)0ZGOKU$^w&Q1hY;h2+l=3#Kf8-8aboq^Tzuon8tq)e>ASc+EsL@3fGM+HMik5@#x_!HmDo9#-YBoX+Qc91~cuQElC0Pbk&TMPvU5VM#kSPYW30QA^c%lNc5r_KD>|%o}Ps4A6 zu*e3XJ_oY_%0kmSUgU8wn;z6_NaHl}8{^hSX+q>uryk-ZqfJYCRj2srbdj@bhgMr~ z#`naYDEs}`y?C@U6J(ccH`32YB*QjJAFh(a-4Y^%rPSytyGJ6;6 zcO##6AKYy@o``lz@U7$XeA<61-xI8?0KpCuc5q9TU=~lv?`+`Ex`3=T-iL z)G3Rht1R-=xXLP`QMi-xwi*}B$;jPXBJ7IkINBVl$-Ul{UQlAVq{?+uw_DOasKC?1 z)1;PC?&WclUAgf8SHXOZyM5*|sTJlP2uwC01+DFq zwZ7=Pj|&dn6o^|^vOMu7P`T3$A|nn}6Xr6IpAY9%!PsBQ27@59zJXhYf8gaAj!)qc zd1niE-^wbb-j=WX1F9a`n zq^~>+h)gc*#N(aUDl0FxkqZKp>ZN7}-R>1ksmjZn5#LnPnE_2Ew0Bi3SOD@e6fm(x zd2&%+hq@gNj{-<=x;Q=8caHXb*b37Jn|Q%m`z;5`>^2S(ovD_R1Z9r)++mkxCI2Kk z_rRzVpYk0=4eARABjm8k89(DzDYO0a`^CO;O+ConGgG7SfLpE?%+AtXZ>0(9od437 z4)+%g4s#XP`D)D5Ouf)z1<;2)^wmM}qVLHt#@xW4*O=Wyc3jlM1mWHtPgUjg4cOLl zEGB-K*WlhnE(h(XBOc{)JQH;;v0wkas+Rpu272S)v2L-Wf}hCRfb28Ei^>Kn^;{Z+ z>2&>-2g!A2?%E6SCdlkJBZ*}$Fi#6-2qPq(tIwYLi1CJL;9AB@#&j;4OPhxF8{96S z2%tq{1X_R%V#bsWqFTbXZw?F>d?b_w)rZpdtkBLQFB~(vy2mKCEJGP{>?r;0(SRY1 zCLyB2(!4WVf)kT)S+C?Rc7c~qYX)~pZS>MEs{PE&Y$Trf%F%qR-RYL2v-p*zCSPm0 z(|eBP(4~tu#UqB_nB?V4=BJkznT-m54yp=Se?CP#478AIux?(z+;Q?;`Q4nmL{YaWsI#p>9;9b0!(w)Raw+QIfG~SrGE0D> zD!E@%OKLp@?Tqi5>#uSXPa=~WP)`CPP-BLhufPXXL_k5b1$&1uFlXwmL5^#C zWmB!3UHP|=Q1<3o`CUNFcenlj0+zFt<3hhf@*g8SV_AJkOI67q(9tW(v#zj_c|j)e z$${Q2KAm13h7EDN&e%+Naji!8$Fm83pO%`@WE^?)c z(C>~2=_|4@nhv~bMz)P(+y^sk`#0KxMHpFbWXmSW&?sxXqlE?V5-{93>f0t1LX? zBL&S(su2#7oEl7)t9CZ1C=_DC;;Blkg11lM`PF{@Cp;;I@&2pwg2oFLT^T)(ER%O< z8-uq|*~^v9evoPr>iTtCKFfX1JY@wZFX_oBfy92>d85szKNc0%Ld0Q&T?UZ zkG=aA9Tdmc1%fxr&iPO; z*t2!kBQE{ni?VB}H(i@tDA4y}V;%XS{RI9C zWZgRSMnEjk|9lYG^n?2y!}xt^>$uZPV)2@t3&^3n?GKUh?p(q?kw(aUiTI9`Y=!1& zBUQUY_m4dbu0IoBOR5D+ExFrB+R9$`y8hR?$%}iNii*2?vEY!GG>?9C(JVTkTjAAbD@H=x zHq+KFz5?1=Cax{0{tDecR3qdaNd;eEy~I4>?(%p`n|=U7>d>lq%8=Utdv4}La<)zg z5Ozy{hHU0xES*NKoiCDo>OPw_%Xu@k;{84PEzb*@QQ}p1kX0H-n?sZ=a|wll9Bg6y zP=aGc%=$foB==_04m(@J6|3RM1^sg(Y*>W4F*7d%Gf-V(>FrKPJ>Sq~jI#4@K!6iJg(-#9bhPEdNBp%A#TI!3VvGuV`ay!=q2vbFgtw9=ty^BGAGf!M~U* zgm$mwZkxt_j?z|P{-2@o=LNlES0hRLyTsp324Uwu1%dtqsq;!<3DzoNKJ~0e_N#q- zq~wy7t`+Z=w-D6PyT8I7Bp)0n#7`lF2%>R?NNon6wG=W1Uc@ufa$5J{HanD>=0jvo z#MM!PcDMhmI`Yle=KqN=T+^=Z{uHi~LH+| zk=ZxGq{J<%8Bktc#xd$1T6nnQnJt(L_lWhWD?HE>Bloze58)e5!6aobx` zT|8lP$sPIj`9Z;RCOUt?^C-+R89 ztK*4VedANV7M~kd{45uXMGo-ZMp&BLxOYkwC87q*;t{)3H?xJaD{XbCUg&aOw#T;E z!*R3J=r6vYi036P!bXZbv`M_aBU{qYp|rn{g8(vujxnR^ z_`J;c&|KZy?p{iZ{13-6PQR(u`(@^g!*P=3ron%2EdCX>|3pxH@{TFrF!nrKGR4Ww zK{R-g8j<9TUGz+uh1)Qvjsd9!%y> z2=&g;@;Pf0iAid9I}c!bf&mS!ZCplPy6_@bSgt*yCcGg(D5xZZ3*jBdMGMq+fsYnXc%mTSGaacTg z{Gh>xn;_k=T5JHKymG1?G6?D_c3ewv21jztH2Im-j*aiUM7&YEKvxY9lzyW+FWpLR zYEZVQ6t%BWyJBnj<>fJu^q0T<%pjs)!CJ?zfp;LHa>=8$&|WNo>12M+`t)_VjBc{< z7pp+5-E|&T59R+|DV#yRJ#jUvw7+xmhivb0-aQDw&ut1WU!#`@B9Xn%x_JM4e|k5q z;flm<_7rb`(T?j?Ky!Y^L8P5)R7IANK43Zs!U>6IQRk%`$PpM)`%jKU@oR&se$-;* z9P23Fo2}>#blue}e{BTS`T|DUgzqg;>ELuq063_nJH7>L^Bt#IW&@6Rq}nS9z)vjL zR}Dg_Brc}+9(DJ56Wi!VhwF|T$_C9V3e3)~Tb3i+!hu{Cz{KPt?plpC)Q*(w%y>21 z*_;Oo*89fI;vv6~IsJDsTSF|@0@==~U&V$cs_V zX8+mmv!edsxQ`lW5s*o^Z21DB_%4{8O-Y$f-EDPnh~pj=#a2)rDFiTtN1Um!lEk9S zfG|Pcb1+PAW^1?9NH$YssifwA3}9s}s8b&fBZcM>7JV8W7|kb7vC48>%u7Xc^-(VF zGA(t%Qn>7k-0M-VyOVG9CWjT(=lCK+E|z>>Q-M*XyVGyVJ3O_lF{;0*Qc82BJ{B~} z`U4Itu3rYFzq+9W4}R`7De2We8_zsugk@`0Jcj8hVfmVizRKWy5k-E%hHdw6zU161 zr`Y}{CwxuRC}_&+F=vhD#>?)1v%{$?um5>;r~*8v&Vd>X5VM%n}B?%n&Xq7FMr_y-lxOU*oxY+7=2lNs93)7g7>0snOyg* zuO_~|k5(gv1Bz2|t`qcw(MB~5wsg7ZE&QYlR96CJaE9REAQ6mV1}J_*Yi@Gqx>NlZ zXGdr#)0TBs1~2A=qsE0>48l_)qetI4wddS9kd8QAR%a;-WRRjPGdiv8Bu`{(MXMx7 zuwF!DYg{a`Q*h=%_O)hyk+ZXiYY9SAkb(6&4Q<6NV~x#=%rL_`3agTiaKWw#`8Ob?m*OJ8y!9z_mwuRjJPLmm|M>iMq!ll9@DoGT(0V+o^yL2P&gSwBfJ zq3hGsU=kC#$4WtBtS=!Wrk)Wu=@yJScL?&Rlr%C*@dc~NO-KRs>&6D(#4aKv{Hg3# z8zMQ-NW!ACE@Av0%SG*hivI1ufyhRDT^}HQ*~nV0gPMtnC3zXgTRmK5JkDew9bHav zKI0lKzjZkwLoMxbviaTSTLu!!)AGr{fK|HIX=cUbBK~P+s;@+gFGg86=6N$`h@8X2jtA7SwCXN@iB8{ zPt%0sEhSUd|B1q{IBz%C3Fh!Sl;4eS&$|czYje`3VRh zBOb+|JrWIJpIWHLuQrX)(OqDf5&cE*1y3GTUX4rs8bt(zOlo~LBjUVUFt0SE3aSB~ zEAeyHW+DX(+))Q4N}0vCLc(}iB9J6JI}mLbNClgL2fL6cbu%f(F_Hs`0ih*CopGSk zj*5!JhVxgs=|q{O>TVW*Iilicx?hA#xizMD#vG1GZ&;?CP8dyj>9Yo5AxF3wUIGm2 zYSa>!wG*UVE3u=T`la%u*`##UQ#pNTDX8PO%w(tLqW}{{{R_q@Rer=5vIoFe%w&Gc zi_gR%T0DnC{kn#G)cP=zmwrmr>r?-|K&2~ZNg^(7<`?Bdf8uBG&8nd7~(*YdbQ73Tn4l;IM#+PseYOe;YNC|GLe-FHW++iCs9t(mi$R( zRM5VF$#ZOe-o3kVI7{3DSFz-CpWuEs;b7)%>yt2+j|ZL(j0*2sCW}DlW zXWxAz{jYp7bm4Lz+!L%ud=8oLZ10GfCMzkP#cK}}qpU`C7B3WQfGXiRB&wFc`5Fp( zfFZLA!(bJ-!W#vpE_n~38C{xy#i05$byN=fz<7+ay|8zsD?Ta%&utOVL_*+$Oc63; z18Ci<={OV^#`bk6&)0`&%Q$#@asP3&4Mxvs!fx;q8c_}vJ75IiQcmO1u6BCS7LEo3 zEw==R__m6<>Gv*o6zW2E+}CC5i9|;owmor((HbYt;UQM6)z;yvbcRb;-Avx-0O>G} zckh3qa0>ChfqfLkF};YWmU9WE?N&xT*)9mboFES zgPzLjze|qjtXVm{+tu=r*X0A_ohIu`w#h44)^+c#C&)M4dXI1B{b~Ym<)LdM4KNtb z$go5pOMwW@n-$2$9f;=$qjG!SW$edC!sd44ix*v#}C?R$* z9f)BPp`fH`TqOPUibg(lGtht3L3?NL&o34uyaSGB-6SSPOoqEeETy1ZLv$)xUxDdU zS?_fV#caK!uI(T_wjJl2`U;cs1qlHb@}(PM69Yl1myNBjgeBJHg*NHYYdqC%o7B3x z>Dw(b5{kXIGv_l2)VI|PEVJc#a%stlQEIX_mdvd+DvHs~;p(^xXBQ8Fs;ATmAo#11 z33Bl2gb6&Ap3LD+54n*R)mpUfVg```wj({F3m=!sRbD+Opl=QZfMP)@@Tko60|bdE zr<%_UXky|=k4-FE6k+l%Wz&d=9p#}*W{)`Z+s zvc|jI++Dy`(W59ktcl_W1Fv){AGNF0v>dm86B@J+xzgGDQTyepM0AJwYKL48uOUPy zy~N>zYPjq8Q3u`OBi+=nZFC^Q;W8o6M|!x^F1L;|qWRQU=+CT5RpvzeI|-SL?}VUB ziJzHyqV!5i^k&rF5fCW#5)Vy12@HTPlu-#kKnHXtns4_BYu+L#wwo|3jtr*USGc6* zBdkbg$)>6>=Eja=l10bQw{R7j)#?0*yg?q@EFnNHB$?~$LL*1zd`j}=YkrWd#gkcX zctw|282%%G%|iD>@HoVa^zSMWQPlGS*bdHwTarB30G%PqaDH_l}MQ*~5`ey=YswH%e| z?!SVC#REpx$nVYOBv|6qUwI}+`p-Z$%k`Kt(CtF_z5)z~K7wG++RlI8P&vFg=aoyq znZTl)$li$o0H9#k#r6P&#}n@B0cwzLU}i7~Z?MEW2-l$Ti2A$(l$jY`ZS+o$b#;N4 zbSs`9Wgf-7til#??aN-*>3E%isbQTD2IG$|^aUza=1jq(6}YdUw3D^SIcB*6^{oC< z+AVKfEK7x?6C2|)z~=HS(cpbS5mpi2n(=`cUeDg%cedQ(BXEuIA`eTxnq-d875@{3 zpEUh)=W)sKh}&qgfkS}l4c_uNS!0*1XeazZXKmY-YPaTFRb#_y^WRA_GWv4&-XGmi zb;uZHEqfGxANTWANp2{H_Q8Cpy{fgVRAld&K)I-jr{QuM1;Awe=v)Yr39(?Plp83H zRUwdSIL^)ecq<*l4#^?pnFM31LNVE+JJF%u1+0;uKcF9oo(&gqs5X25n3 zmW4-;tNUW;Dm7G@l@#cxHf1fA=43ndR&Nc-ol3{B*F8S&Q@@9n29F_wuvY?)u>FhF z*WZVJ121jztT*LesEK)_prY|$+NOdg;^j`5OO4P~PI&y}!qoBmc4}U!++ykaZ_Th5xckAvwLB9OzjwteNHq7?E)+fKNE=vxA|Xz3;wRD4{A&vB z$_46zbTTg3j;63yJC7r=0G@IdzEOR(XT^lK?P?d4P8LDCD)rHP)0h3TD9sAObXT>M zBnL->m0Wi5vg}t?uvy*H^j7S)(+$oe<!`4#qNm5iX|K3PrXihg$V*itLQ z9QS`q2q~fhX+;+6?b9wq#~|w1%O|o%Pcj6kn;kS$#t|v7oF#udA2G(8i(JiGQuTlD zT(uFZHvLugM~8;k7~u_l3NJJoeWuQNMJhr4)ABIOi2Hi@jwzkX4YqXkMDf7Uu=0ba zH`ju4I={W2&KH&ZWCQwoc~Q1wC}AztH^>FP9kYKYP)e?Rp7aC@nt!G4R*p`~mYk)dE$*4p*_{ z7{GrFHe*|{5rYLP%QKQCSgD?XAAO2mMTzukGs!q%7^(7!1sd0K_}|tYrZ_9s*V~S+Sr>n{<}$mw$N%!x}xm5;cyE&V1ANVc~}^h>!b9 zOuu@Fz{vIq$UxrLtVFX+i2*$*9gj8WblJHrnMiMNMsq>sNa2R6J2}h_#4K6qr$zrK z3V&%nQm(qu;lqOLP0FVMriFanu_DqgIYxyo9)w;wp9rK|&a}hIyQhaqx2jYSH~+)yZ6A${7Qr?7rUlFd$xd3)mDJS?7z}*2tkV09RSq zH}-Y-IOfG)CB>li#H6v97f#;oN^k4BUhK~CJnr?`OX9wDbxfj!VlB_T?@cPq|l+rM}M zSEd`}z5VX8gQF3LVpEvjXJ*bzBvl(q>cS-!i5d^7V7Z=T{`XTgNg{Iqrhxo%fZ4gj z7KQaFqj9h}3ky03JMk-&&9f#XG((K3RmR+aP4Ouben|@&nXKJ4q&3wSx)NoqTqmRJ zt0!7fCXr7M=f=y=1P81Wz}Eo4IiprQe{yv0(@nS&-6W= zGJ8(Z_v1KDTW&UT^%+KMmH*+Ga9`UsB+km718jSSBHvB7=ELVZFu# zSMZ9~u4xi12ZXmnUt<$dquXwi|*S=Ig>_qC$(j3hT;> zZ(1B7HX`mO7RZ|upfLx!ilQPBF)DG6ME!JwQn(4oCf5~Hf!A4-i(E9uSeHjMRH)0^ zt+Q4vBCW<&)w!_iepnUu@;Xv^)%J-YbUt%0B6B!4_#k91E4}^8K*}j>Jmr zRwKRyMKf$~b|M4{Fk7ZEdIZl)8XcsgN06f~(V=155^@OW zfEOEAbaE~akYh?Sg*jmgBu0BbE;H9pDVSxcj zQuz&ia?H1lLvq~SMcz@C1V3L(qSqK*Q`iu;_k_>bOY80l-MyB(?J~ayzpK3z&SjQg z>04Khw0&jrqwmq~Xh{!D33w&PAxZraSm?9ftqSS)trGzWeS;SjRfU%Jpe&VZN0EI& zS~^X?k6Md^OdmV${R{0Wew@o6eqCDn?e&#ngT)8Rah`doKO_KikF(DRiRQ^brS1~) zgc4Xm=+A+*y=dGPkvfY6#C!7Yajp7}iDKMc4n;+kUE@%g?Py+l1U!o~wTumyziNje z!?ZDAcexGdke#69|8aC4{%pQo7>|gE2oi$CYC`OlpjOq25wkIi(kAw*8Xf409eWd_ zwfCl!R$IGvQ?yl8wW?^fbPsJ_zxVkM?$75w*K^K&&hUrJE`~O8K^bc|B{Wp&>j|{j|~7lt)kMirY5$ z6I6U3$i+kW;u9y5jH27stX)XI2H~fCx|eW8{RXxM?>I?Uw2F#3bM<%6X%v;JhApv; z^@#xh;_9GGF#DFbDnr`jqI1Al;hLFIyx3T#4vLxOMXg9r8^dZc`g*n11W>$<4z*}*e67x zS_NYON1Z|wr$B4%IKm-@cAAlAltrAfQxJz!YE5twyf;ZeyvC!-=+m#pZawjwspHe-*-07u|#it_eWRn)7W8bXgfJjs4IN}nikwVL$ZfM^(cO_ z+WbCj<@OtA@dPOcT@kgs2n07Anxp`{oyNeZlv0Q4Er49&;Ed-4Z3kjn6=igDf($m|lt~Pyf&l6MgP}JU-B3B*~FOR$VD5CyNrS zjaltg%Kqs6T!{aagin`(#(n}RPH2=_FAQ|(a~oJHxK?(;IqMtnd07KGUA8&wAR#!|!8JOh z{9=&Qqxa(%PaSFrw%qiqnGiUw>`JPqu_^kapKWM#NkMY86}z0y5o(N-iRXCu7BmJB z^IjKq@jwS!v{sQrl(5z=PxatuGab8(cH4_1I+89_T6MBra%?qqMMTnMXfkdh-!SlO zvocD%cK}->gLeU;m}JC79|?YZ7}w|-dni-NnO_bU+N=X&-AsDNt<%g5vdLNoLzK~JF+&?ZX z_08>Ek1_fnaY5ufTR^n#G^D-bum(LW zBK9Qr9cVJh9h3M(-bkADDs@rms?46E$F7Ksx5#QCy?C_GK0&izIrcu)4w~med zIxnqAU)P83WH+kAT*ZD!~{ajDd@!+HJy$=5%NZj0Z7Kr%DXzx`wbZ zKjv0*LEsUSn+8JP2Kheb(K_A&d%a4{MaA>nYPmBi=Ex22w8AD!vSGt#QBH<~O7$Y- z0Mz*L=r>iL$+DgjFWmPhF56|>EHn&xhHo{`yV)}vt#U0*U3MF7LUq@w6gOFqRMYSO|7+gJ?rmm?>wfH&S4?k z`o_9HVq>+edBDZ?@r!$Ijnf}}T%+I2W()Y8x-`2b005N8r^yw;5j0-jq@t$>*rFUZ zBMSRQl&g*rQ6!MCVMwGK#$?AbB0uMI@m`wttPI9SLVTe@k?&x`0}9xDi`oM%%#lHg zfvM8nhs8r7;nk!<#2sx_MDZ~Ecr$u}Ehg#pWfg0F4W&zb63TtLBwH1?A>o&N4vj>` z;BYKC&mAf7FkbGji1Yh=mkDf&+Tw_mY=jr4qgfeav?_h~^)%nx(7iK}14(+%T`R|b zunzPOpS*Pa#L859)1wyfM?>eI*90H{MlcymwLv507D7P2;K`6tGvn&OFmu`6tAjG} z&Ay~D$zrPK)~r4c1}B5BtTI5db2A33I0#1*0WMtAV;r3DG(tQ^+m_u?a$wbGq$o0t zVwNcq*~k7I8cXrwa;D%LDQAoj4LC!tn>j|}l1RlHjk^}>nAdXALSU{8qhP8Fir+`~ z>%a!pE{2@@)~%tEUykifl+UFq1f6YXXzbDp^1kBjw5E+774}7#OYBV*K(o)9&1fh@Q2|=g}tj`z>O~0MC^%s zhQh|XG(c*G=Md_EvU}eB6=*wDWq-UGr(}3yp#J$bPAD5-S&5M2WzwUP8_eMk0!;hCrExl~5PlB70 zc=n?t?fiX>jt8{`srWST*USz(lk=Nwf2%z%fc~KVEV`iTcx~sM`Px&_(VQhuld|5T zuEiMx@`}iRvrF&6eg~drR<7Rrhe3;fE+{o0i%J$%rs|l$I;4&=gxL3%vj_+x+p8>c385uN~>#{~we~xb-Oj{glVV(5b z2K?-?`ui}l#Je7KSn(#hYabBCEm);DX$i>?eXf~EBCdC~P`f&I#4KA!+Q<`b2BS?< z{PA#vOfAo^%l!Ds)X<7x)L4#)442p$WRsPNtwN&5h4=F3LU11JFQwf?YDl@Qq8V{0 zz6LMGA8D_}A7ReIbGEXzy7W;!tNT)v!}hjHcV+=WS|VO=AD_}$glj|AwM0S!9|gsJ zIytpdgU%*zhCZ?y3HQ2GBc-qVzMA@Pw%Jm$vBLQN#p6AH#{ZoO1aG`_t(%5&D?dm* zT>P|Ze!7*p(Du*uFjbH;a1Or2BDK7rBzyXwu zpSLM-9-TXUeEJUuC87z&vMd|_+6pW*Jsq9eng5uN2-7L9zNTC^QWPXr;4sr0{&?lD zRaP(0ZpkBpP_FY8PrHIlq3m7P!uhjrKXDrRMgYo__s;&vzt#11fuZs*a!udjne5L> z(G1^v|0x3iU5#q&_0V`aV(wu?A0n_@3Q9saTt%)MO;j`7Fqnl|1UK8(q>|52;_v9k zM`<-1md00oj$I30zDAK4-l{TE+XU$f*al@=T5Fc&@-92o6Ko4;|eEK{6l< zXQVkiZRI86(=cCCRdLwxc=_04;-R61_nPk^jI6lMSeO~{s8jx_j$bV)70eH$#5Liux+!)7|>h>mO)@mmmuVtlAGAfNw&h0E3(+wQ+ZkC{=)7ZDgtlH@W^4WGdrK42{Ft9?3TypZ~qEl-WP=n3LpFnzzS-I87 zJ^zBe21>g^<;va9V~|IcHQiC>Mv_9h&5dIt%RgL?-Fb1YN9Lv5=#>urbIyVAt8f>M zslX5@NPzIkty!&0qaxzNsQ0ITZ*WhjOxPdKY}@tLV*#RkiEr*-xOQ&iZp!2CFZTPI zT@#?^StBLiE=a#PR_cC`@GE&#ELK?lT9yo0d)^JgQRA8+1~LTiUXm0`PGYktloST} z^Oo@WRocDBUX$)yrof3NWkqJXKtcRuCRpr!8G!Uu~s z#iqUc>q8#BlrSx0oqKk2H{p%H);nXo`;iHsct;Nae789_J5%iK2w^srIu9iaz2pl| zfqm}t)!RK&^aN7Htwg!_U-UOmasZ4~xJq_7>1@xf!r^A9ksyV-0Kq_Eu zOpsde+;hGtbPFYiLdWx)rXj7P>0B6%Au03$+ml4IxY(?CaS&7tY#b`v7nz z!=fQMrdX+?PM6yUon9VhR3(Ald75v6dPNc)nB?SDYF|vvxET3V3h>m|x7pV=Oh8py z9H(I~z|N<|9E$O}h-D8gQUH*NX2e6uM3l%CSpUf5HR*Al)$*#IqG5S>vx8AW;-b~XIe!9ML zp=1(yoK~7fB8BI?+|d^{SUT91KmSJi=Lm$zq2eD z_N7$zY`21UzaNL%SVVQ9gU#QT_4__|=x%*w!yA{gEny?8={}FW!6v=sSx;!I1NrfD z85ai?q&SU;9PY<_{H~L9HV6R{Z6MWlr5jq$Onh4!nZRMjR;T)k$=|y(6t=bNP9)viV>*aUAno+Z@Pm3nQMt zpjfncMs#7mtiq)_cj#mj_WI?4mGp|g(6Zlcd#%`wmbX%y&YylF3@(JyXW9zsJ8#Qa ztYVc%tf6#{rL~+a06<$C7Qlwd69AnS7uMXL*X3r%px`^SdSGe#Q*B1*te`1i`Zalt z$NB-%GPFF^gz`nr0RedM&Qiuk##6Cd+8UKsl>u7ri3T=zCiGyqSnO6g1Q~$4iFWKM z*Qtf>=?R1zG_0;@MY)msUT>^~N>_3%*{CrZ)113rPu%rUS@<)oBEj-@+ zdeO$!ao-i=poH%bbfc?SvX3T^XsS0NMecMCE#>=>H@lpxgO;+t#Hk0Jef0f=-#J?` z<#aW<&C;#1@6Yok4>^E)X2W`xJv%KgSl<@j`E2?Xd9Z?RHDntO9K}B_ZrCg_kgm4^ zkx{pw=aM5}hGI5^(17fm?4tUj!nimdfSj*LzvnY*PU6{Jyo}noCx=w*wDt63m_KRQ z+%V3JU+K{Z&3Ki9$xlHm=v@mEnYYpA!Ps6(0dQx;#{_3NX^}N4-kOG<68L~s-K5L9$#PqXH1hIDPl>Wyi@9UVndC*1dRnXd z?GWwPn8eO^`kw*-Qsaf5`Yki*zhY1kL+6qsb}qF4*=*2pf&${<9iIoZxT{KPD?;3? z1Zwk_Z2VML3^g`RSXVmkrcDke;N)3pKRznC%#9?2_ANs|KciT~>Qax3Su9|r7v`vR zf&x)HQFN)21|7G9*V*XUhMX?c4uGrrS#p|=^}LCVqY{&5a{gV1$%$wx(9E_L1Xj1g z;)u5V8cuPX5DpaBs@Tv-o~^7obsXmX);+sZp08(UghwX2K2ruw8;AuW;e(hbI642$ z(H;C4f2boiXgZveWJ{$oM~I+=;Px$jB{=Htw!(`sE=x*pUzIsIM9h*YZ1FP`7c1c` zj6f5(v5PY12cugzY?*I8k9YT<8gxN_6OV_dOC9ZMmStPebJ$I+8P0i||4UL>ozLb| z)_X66(V*S{@EqZ=C?$}e8d8l zUb!smix5cn{&iGPST63`9d5!-zn?o_XGzvm%ucU#zoIgmuiQPFWoK@O&a#07JM0MP zL_TAqST=kk&i!Jt)rfXgKEj1yISHTUEjFfMQEeToWA@urqCubk#jQiHF15YYib`$nn zWJ9rt=V%cN6E6#k$)f3msAvNMrsUYeEeKSc2)zvimp2!i~BIm{M%1C$Q|{f_9L;ki4n zJ#1r}N!3c0^rzR%3Zw)(l=`VfKBEOdJ6S!oJ+s&XH6y6_o>HwHSjB&=JL-AN%8{Wp zB+T~Y`69OoaRboD6K)=C&2dlVUb;*Mq-y|8(+C6Upe-| z!622@^PpS(c!}iQ*5&Shl$-mvg6}_JW$*Q@9HHX@peHF=zMH(%RSMA&S8@6e(K@I0{H+N+16j5tIft@if|K1>g$-M#QVHR(493d1^arO7jpP$v7a9i z*UgZFx07}FE2UGuaRV<6sP{UfGTzs?ue+xK*?f2T@03{UGKExE8fx%ZOMhQ~R`RJ<%H&A$1=^C!+)~>L5}hx8^`Hqi#7a zJM6rz*94j!#8W-*4tQF-sNthY%9aNnu(Nq@k%DxP4s2&i8nRM^D$v)QB%ukeO0TdO z4lJS{AHJ{n!{m+)j-oE+?BO(+X6}`#S9`s7c)an>t%Zb4Den_%f2v|Xhc?=D7b?Gt zekSuOP-G?SR@yto&mYR=rZz~iVuO5&@D4#0za4JJ=>XHxU7XL`H!K$P`VPI^y!Ag( z_zw0j_ZU%+o|63gf%Nu*YQ|CXfuHB?!SJGL)!Y7u@}>W5#(LF13M?A@esXj5N3&9g z=P`kfcUOJBM$s2D{xOmoj@?*Ve=_~^B9jh?p#aojU~MMN{#R^Ann+O&qMD9A70{V3 zBKb6nol%i3XVH1D1khK=C@!*FdrEN_KllO2fl9&;hT1U>p#u=d+WH^q7IPk0676`Z zLOhQkr?C$ENao6Q#6El>*1 z4gyr$k|W&vEc%y}u6qUm0F}NJUr%5xcHWX(ix^?5dfa|EKnqw+&xg6=r_atT<3|>gT@MK9TbUpM)I4M2xPcI?LZS&pZg%^QD+E8NX)uB2mh>?xy)e!% zF)tL6Y!>)XoXq|C!Q$QNpt|(08Wq>E?e1>;mK!NIjF{quUM<f!0@<}Qm9H5Zb9ZP{A`h|NVs!#ob{OGvvjCPZyM7~HXid_# zbhwYtJKqfKi_`Ansm4rUH<%e#wFk!0(soewr}HjZ-0CTya_)LbNejBV&ImrWk9vvq zYYZk=;G-@zwwz(W$_shuihp;6@V@!}5$@C#o?_v{WQuWkGkliv@;m#4Bp9*|biWHMmP6sT>c%tqj|{v9AgxZ>y| z=%_R+DbK|YmF_2PN9YV{>YE4Nnx40i6c=4ZOrBOdKdH9qs0m67UXK)0vek&K%i<|;U|EQ^BamkfLNB<`ZJBfZz z&W`v#JM3p zjwg4$gEejmnz|xsKMaX*V;JC3!0z+K?5Ks;i5&t=Q@*q@bsxE z#Ru{Z*M!_&Q7^zm+A}|A+6@;cdA?@-wQl?SWTMEy^>k<>m#NG-))M53*scNM#^CH7 zOOGdyZhn5p+F-HTo&}!zeMkeeV4tD^8Y8P11n8-0TwvC0hA&jZdN+x%55gQ$I{VTE z6Q85Sdh7UNCiFEOK}S9Ni9#7S;Q}8n5rW(taN095-sCdfsXV{BNB~UYDiOKRjAm4Z z(u=BNzf1GKHeP?`NHJUh3~(>|TY}b3Y1c!(oU`T7w2IF@1KAalX_>Y@ZtO2(?!GxF zX8fck2r9>P60OG#Hf9mCwgxd&*msVqa?Cj1Ba1ww#vSop?N%qwf;>p{ZV|qRiUbY;dj$u%;4Ac5(oP( zFP`~Bxo*>Wp8r5+z=Dp%^aLm|H|+?kJ8B)Z$!su{A4=X}r&1FB`G2h|5{qaD$PvwC zGz8S-VeZ+h$T9B*JVaV)ZpYamv%)nf8Skj)bTLWR8WQOwz`^;{pTkIXwKMInvM7nP zotopLN{QLOl2K{MJi+&sA%XDvW2Iy1T1ljb1_-gUpx4i^1|YdpHPny=M1uCo5sU0?L*Y&a+VrlHt? zwPf&VrFLVIdGpNK`>g-I&xtoVJS&gRcl1?00w$x_c|>|l zEL)s!3Ggy3ad+7VoX8*t*hnJg1q2C{xL-yHuhjTP{@K?uG7gwcy)CFD9 z_iFJ1IqA`;#_*aCZnWu3n(hMDZKJnzZ7!?#*%nqu?korNm}CI~|B1o|*!SPrF{`Mn z%#EOz$`@d1REw*y*0*04OxwH!XCC}?A7mp9ueD=z@%X>Be-j)W9+-{;ugsq+L()SzFJUnCv>VesciMcWdLKz-4H(8U7 z6Sot4IxF~g8|;6}Yo$A|SU+Aox$xpcJBY%orba+b55y9=uxU&85Oc7IBU2}B*`EpD z9{?cWX>$wslC>_+L=jc=PirVe6FaQu48$=)3G(BH7PK6Wnd+^Sa7xt}&P)kM9R_40 z)(J+mj<8Bpv56%gL;g$-2S2|2v*FixJly+4IxvYxmJCs%iQR)5>8)(Wku`nssL^bV zNY`N_6dmwT((pW6nd%Qf-xH1AJVf)@xxV3E56iEX$4O@y>3&1RO5_yUGEU5Ez{Lin zY<(s93s+-;ifP&lowZKcYPHpF@_vwne+h7rC%va!_FDj8h<&u2YBUhAll*hG^-T-$Ft{?J8nQ(V>Eo@-%oR zq(QN>L~E{4$xX_IbXr46l$Z3Cs!|e8Oa+EH5;!OpS3b`Kxf=Q`nQHNH}O!&lq#5G_K!>vSR(&oc>ti zB5_77M&A0kN{dK?(%$2hD_gSeeZLH5Nov3R!m7qdM-riF20^6q(}20W$!Q^8K-~0I zl!T@TLqbh}z<>u>dor`j5x#ol;;1bz&48tpi}1{Rf~UE!^-#avqe@S<*ji?Jb~KAyQ2r1u~oPY}l@RN3%bj_YL6Fw|P1sUbd@<7`gd+t$XC z&DHAg*K8)hj#&HS>V*z(&qzchTkc(qYA!TKB^LXbSXQ)kir0Phdz=2=^^U~Q&&1p) z7iWv1j#b8O^@^95`CWj?$xTEdhYd~D0~1%ik&4+U7O9e)sAji}f8ZKAI7ascG?F%o@+TWi^huF!S%`#%`^piL}g)kAzV zP`x4C0!}f!p_v$H;vlhVzc+ZCKIhyenn*f{5TkV;Z7s#1GTn(LqlS?h^``8{eO{=- z9B%y9wdUCO4;%Hm=$_zgY5Y|9^Nj)nW&%II7dpUx*~77ZcqCh(!$)~r0IS`WDb5`c z1x^aPW~Mj?_082GEq;qk!-nyCk`GSk9;-WUdVuy>?4oeY-WG?*p?bxrm^ri|PC08y7TXhvbW>D6ukljf|8jW=s zCc+nD1atDIV6_WB9{srOA58{qKXGxaU#lb}`r{aP1F0<5w@+*5`raq^r|?Ca)wm~} zd-M9_zbo$>ls>UO9pwzH*Y15yJrvHe6)jsi=gUXB!0(-4A%o^%EW@EP=nh`W*rFUG zYzQxB<}(PV8AA{ZcM}StA>V4tDTvXl7l^=QWsMlIVYqDMZHAj;J`@tMy#;JTlNd_Yt0%%BDz@>^z zD_?%)9LOLbLNq%wRY!|S9{&^p1f-qi!y9JNG`wjq(_=VGB1#r+`%q{N&4WPu3M!sh zc~kC9;^v_RxKeaI}SvbvTYtCvWPQi^GSK>dzm&R#h1jnEq{uJPy{og{+ay z@t>K{JrI^m8^UxJ)qxETS((l3CE6yGfiU=*F~Di4uCXL4P2mZPH7MUZ180+~YSSDq z$v3?-=l3J?g+Meav z@!a5>9H@(WVcoxSVtjcF;%G8(2sSEv!Yo#Vp{;k}Ye30xt(h3AREA2yBvW?M0A}uS zCP$;thFJVM<~ba6FCrhLO!X#Z5^@MsA!QJNW2Kx_^8yjChgwzaE0x~ZUNk51Rc764 z?zu12c@bMhVDx9jTDu^3jhC;A!(zWi$(pB-GQG5Hld2F3fz?@1(Hcrc=8jxzRkv;m z*LHcDe}mn|h_;#^jvmJlZ2ma=5Ut$DV@DLrE zALMvz&-d*AegEq?tLfs+Rhu?Zg#Nd>lTH`_@NQayj0i+(*e(I^6K;aMy!mo*_~gGm zVF;;xZ3V1$M)EL?zE>}*D()RAleXCG*GewfJ1O{kAlArn9B?JC;?O3_=HuFvpT}w4 zZ;|FNVyuhXi9BBrDnU)TJj0PU8kFSX+|SAcw?XX z8})q15h`(ul!#PP zpsjhjH?X^T@fuoi5)#D*8$}aJ!cgn+l8ExpK7O<&9WlzfJd^)r;nc}CfI3zrLTsz`{yN$FyxBni;aPCT6Z?P`yB^Rkvh)UpjtVfH}iO`eOm? z5L?m8{EezTxMX8%ZKEFgSTS>6tW7%u^z(k%@PfBMY#_FQf5ejRHq=~pMP#9B493Y2f4%7kwU@k+9I+7da?58nZ zIxs1vo>bV7OWYI)bgl|~J`W(BG%%5lrfRY>+#{dEL4~DzWM}@o&Qo?$tbHw3N zURxGOKD5&``Dc2+b$4UrpRtePT3M4GU&_taf{?)|*5SRw_8)KkyAzx|rlZmokuwH| zmw8g|yHL;KU!cTf=5@=GSO2*D()zdeG2lyB0dMs4Z*Ctp&93|jA(|K1^*&dB?yE?8 z%gdWk{+|@&PhYE_%D0Zk93d;UjYGUi;GC7n>$NQ~n+ytI3uWzz-AqS}ssSJByYHAt z7>5r63&NmI`ra{@%t<11^6H*%vfD-Yrwu;*+`w(|H<`LBOXqafRyL+bN1bb|N~EOx zQr3O46}ElaApeUdD)TMEHYz?r#Ix{Ou;5+oaSrBzN5)-&$kfxqBRb9zP0vebbCw$A zYa8E%K)v%g1#3??4$Bp(wPyYJK*$npwnWH+j8rSxX7sgH zAFn&0n$pY*;su~a(nLD{8DEz#dHUI^IGkWDH?8!-7zG+xg zGla4qkYt1z*6wJBp}FFy=rK{7Yz5J)yyge-Qy-PEO<21``xFaDe-N)6G*X2r*}|jC zCzTB3#Z$UKB)nmfoUi4oml-$d`#1?Z*UKFiSca0gbvp@?CX6Un(?+w=9G^LXMc6L7 z*%x+iuN?c`n7v(mXQh0NOl>``xwH$iQ*$B|vew5&*`lS^2i5KE;GRkal`#ayi}zW} z5Ix0@TSsn3Xn(q3g&E`i#`!p-m!nsHM+KCh_ULL@x_atw&ZH9y1qc^= zFX)^*M(;+v41=&+AF?g@^yIS5MWSJw@oOiOCbTk@e4kCM>_65-Y+vU7M&S6TbpKqx zSq0Qe4x0~-Y}8KyPZQibe&^WQr-7$o^a?)QZC~T%p3=WW=(_YA9~ao`ZB|M21#;OK}2%;J`On z^^{w<)cSMZ4($Bu>kD0}fzl^0=OsOLMsi`*x~)_ErLMd3;3wYEtN&Nh&M#IX-k{ z9V2S37FwJqv@Lwv>#vLB=ameoj>H6Xs*nJOBg1sBgl+mC72isDBJ?ubI~3x!V+>A z1XFgyN=Kd7V(^+2$m#=9#95;o`X(^$VRx3slX!e+4pl|6IsnK^?Z2R&JLc)%Y$BZ8 zIk3>8%b$t&X1pK%yOVR&(Y8*^4)HOn;Iow)B)L0$kc&L9kVe_`zTZ9*{PO+e8d+EC?oejcI42Ycej8O84B1-J6NZjioialuwQ?aL@U`|;uT0~o8LBw#dQUMLYPa3fq8YaMmT;LRM>do=GQc12w z9~iVqK>{EP0bt=lacxVBf+iw(yKnYvqAH(z(11WZaknsyM^N7WIcFFrgc4v*N z8~r2vthFa_v3(!lhu`s^l%5x?m=>$jnEN@v83#$5t|o}Z#Kila5M^Y+z0@q|DTyv- zjFEB-2O|wuHC~MituQ@=WXEd1FDfqKp#{JeM@VNjMI_zDDU+2XdJ#En%+1qM2~P&T zq=POCQbK)tT_ksL$e|}Hz2Q^o;#=;%uS@?3LEbec82@s{lC%&&#U;VEq=UrM+!b0d zNw`H>7A6UR6-kYO9^ng119K6)R6X9#r86RYwa-L$NHsc17Qf)ujEqruxPZE;V_x)r zM@gT7&DRugx&p4~x-4h^6*~2>$w}ej)e6&zgui?A?Qyv{>kWqxt}AEMs#?i`rt9Pe zJ)04o$g^K9hf=_4>_xMs_Gw@)8OfMw#w^_Yh0Phxhj=JW1!Wf{UwaV;> zYE40ZZZ9{SK+IB)h~I#^_yTS?!qc$Pu0DI!pXkW00J2w?^if(JGsQx3RR^!ebg&r# z(x~wZS!u}?L$N&wez5^ErFm_P2R^-5Bt^ph0-ooVHDWs&Lp6KY0K=~3)057k7 zbLMi&gRwAmxize>p%^#4McrgE=l%Gw$oeb;*&YgxBNwDx;Z`F>g&5_nO$$*kaX)Pi zRy_XSE7DT?qOM1^^(?4e zLlr~)syo4ied?j+&~UKP@d5`S9JgM!e+-Y!njWOl=SiX@*jE~?iK56%`mfd{N98C1 zMSfTtI?4n{o=Rgn0U+UFO(P=E;tN@{PQoZi(>z>o=@ujgUJ%a?QE3n7?rnb=&n`$A zQfIpQH6=Kn@;mrZO+}Jtd?TC5eMK)G1o*JMNU5{>gdbhnAcSnIbLDIJu*W=RS6+aR z+@eD*vl@F$)@`laHm3Mm%#FVLw%`Zg1Pw=AYGUBzHmbH>*&4;>+A4V z%E^Yol;dMJ<(AT#J&Yx%Y~uiMH5rXijg{nitt1{`6u$frf+q0mjRSI>9;ZhVzsY&) zY^6k>{7#B&@LgEZ50Yyn8T?v{_si>x?qP8L zWx!)D-d9*Xp9Cp4kJ4|~+F-Gp={g9Xr^nOUtw_^?jOOhRC(Bq!=*ab~4j|?!mqI{+ z(9IP|irr5^% zXHHtFKVbb1xw+eaYu|~9Yd79*LeoLT(?-d494Rp*S)_L4Ni$EEP{YR(Ik(MR_^HWb z7Yj_B1IlBTK@MJt>@VZ2g)jgG0YUb!z92ozVk{1imCR+DG5iyl)_25C&s02QQoRQY z@=XwUZBrimuQGHJ%+%4!aUvd5HFTz`iOn!v5f~Q)s!970B76~Yscx-5z}u&PESd+Dvh1UdobrFHq$YrA7XPa zUt=!qU7Nnb4VmiSq#$p*%aJ?1{Y0MS$&!MWX@oA;6i(Nd4}{ts>npDY7xg2?jkTJ_$ua$5+Gj0~8_^ ze9u;!CkB!Bb%&*sJT5i_O=|wDoQ$c_h9DD2CfA7JlB;I=MHW3No|r|K^2RqBwD#2$ z<9Z~qS;rp8%AuwxZLShyJHu;4%GBr)G2z!JMbWlJfqCeH=QC=3rpWb)=7jU~Nebf{ za`5NS0kGnNJIF1KCBs(j-`V)I)pWvnpQSJQ+%`5pU%xf-AZBLBB`ug&?&@81P4i^U z|3x9zpWyMZsd$R~4Th?@pc;L9=kj0PAO+$>eC6A_bqvRpUiFig*3^csssp=s|9C-n z#efZ)L~*lL%l4=F5B|yF@N%0@w zL-zwYEajs>P3+W*_ez>OI6Ece%My$&yqi+YT5hs-$;HU$0&(a{cv;HMCqJhEoo_YF zr4^OQ=#JBiW^C7T${w+P53^X@DCVmvzE7-=u7BuM98E3n-6;c|@W-r=Y*%hw z=RMDFdtWWyan))Gtr)!LF?|3aquE@RPc}Zq(@W$I08Ut-fwQOun1E?P@HZjfj@RO; zX!#q=iNLYCTG!@)$hBEwydqdHFqVnK_4dkv%#hFd<^9?MbFSR>tcOKA%1!c|wPm|= zjEm_toA)6<0uVKn&&L*Zs}}bUwz$ZA$*91K10kBv5`_=CO>esAH@0HC-sa*a>YO;~nY!7x ze&VWYi<06MQ5uS(mF76crTwp1Ua8Q1y-m-B_|wzf@Po;Qimn1;UlJ63ynjOBYuk5c z?PL4<0FOV%&oT1`OH)=3=$+wV_yqD&zqU8UHvvoXi9?Pq&+6c&_?vXHDga>YM4Yn@ zMrlePk6rj+aD-2(W>8V%H2y%$o`;3I_T$_D@UhpYrTzyVNaWXc*T{8K>$VP8xBB}b z%^6}q1il*p7F?Eu#D{f(P@)qR$5LAOM7(VC{s{CzXvU<61`1Nt8U?hiIx1`SUio1o zt0{O*svAR3W#;A8;D>%n{B3)~HS;b(jZiDZg$K~j5=P6N86#D~T`(WAdzM9n5Ydqp zE4}FHcxx`(z5XS#b+;gDE8j^-2A0VVt8AtJ3kqAj6wPx_bczQz0Z6>*&uE|7}0H;m#nM#wSU4IoOb2vTF0S>W;$ModK z!%>|@>V+`=?1U6Xku853tcbsZ2RUuxq8tJOOiX2`ozuX6boGI1G{gh z1chIdDh=XXMLRx~*pDvebv$Mt-lyusEh&5k39ZbV)d>ID&xz4BvD@wX+?*UUAEZ81 z6vBJ!*_Xt{wu?&>jwsK&=k^e`r$(~xnJ>pht;@b*u>jfuf~GJmOg3=XifLtVT&QA^{0r@M9!6EjoT0potBnj2heB-&WGWn1HQb#EO>% za!i$<6p{gPkXT+NGtv(8^Osr8E=kon9eXXQ<|lVuZsLeqeAx!vs`TO>JNkqg5%oRL z!o}9gxx)p+ZpQPjH;3MXyb5fo?6PWRUF=%@6FHWkP;40h)wLPV)|eYO(77n0F_-6L z#;>=iGPO%+ueQ%ZT+~iF@=8Zan);UA9&~x$QR`~-F3O?kx8hxn$pcZ_nx`qDkM>0b zuT=9Uo8g*@pJxM|$4mPryFzcPtE*M<@Dy7v3@RVek}gq(u%*K(0C2#w2Sf=m{z?+hx!$GX)xRkY)f?V=}qS0hkB!EE8o#EinZFu74SYF>Ch75Uuwn z2B844I4PoHiA;Y$2c^Li9?%vcna@22$r?J+cfn3=@*i;G8Sk(8&-5L<{eAjKC&xaV zJ=!JF_Cp^6G|dm%1ZeLx@a82gu`(plU90JeHw3r>sY1qH+%*V*8NYr*&s&GOeo}V6 z*I&&s_UCxRW3ByG{YgpwTX%AE=PQ3@X5S^4yd=G=eK-Eaz3t9edT)U8obzPe%SEFG zSya?u)J(Klx)IZ)lm>@dg%wPd} zD$026Bm;@YVbeQW4pV|cU}fP5 z(LVEH3kVDDX8)J_n|~WXuN*Sufz)fp*VD^y-Pvmkl;D(wl;jj(a}>x0D|}ae(4{QQ zdrzUN4P*#+W0Le&E zEH$R%drf7Uv?zM56QXMgEU+#Mxp6Ghsca|$d;zUM(S@!#DHr};Tm5=L%q)e2I z&4LjHzHfXP0~jhU{#<(@WgOwn(j;=Fn#Z?FZdU7zSS#ArqwXo_mbO%6@jWt3m&$6g zK?QEL4>%Zikcd|#fhg6X$>|LX$xW$9&SjM}{Hg~mtKVbnfobEh`q!i1J6&e0gHAmV z3e=kVSm&139+7aB?>sa$w=_9W9{_6p0-u|mt(6Txy{*a&j?W-Jv$jhSS!>Eoq*0(hoYAccTE>76i_)ZqW#FAIWRXqc7- zh+Re@T?8d@hk|xI>|*dkPGDg-}M=zr|mUi0yy$DG)79z0nsFkx^#1#U5; z^jK$q>~*;pwxlOElg~?C3eS?l|9EiYlqB|Z6Xe=Q$5NTNL`jiCalU^;g4&I0(>4OD zR?Y97$NYo2hxe^1}~d1&CTComtJg0r?B9PWb_M6y}W=$;%pu@Tl^L2M&I zy#wcX+vTNBV-##@aU}brLxEsM&pa?D&YZ}vdnl_^lK#{O2-LEQk2f`Ob~phb)C2gV z#4Q0Ginz_JDj@BSQ`^O}$%pr|us_%I8TData&^PBwEOX~%8z8D50lSn7=$dmwVKK^ z&9%~Z#<958oN0{OL^WrX#T-823^$7=!_}P&re&H=5-rv~sHmowDyGPe=Hi<51@KWx z6IOF$2E(+W2thcT1dLBQk#afu@xP$(g_q*wbMk)li2Tk-!NpMFq9eX(zeX3nn^bEo zdNp*f6%@tvU&@~G0A3low&KCEg#sPr< zUg_+X#5>Yu1*;$*UKx16<{in(LME}$SU(oc0Yb6P&`M9uUOMfrw5ZOd`w%rgQXvJU zk2{JavziDvmmHAdbvl->n)ekgu1e8sUf_+WhX|q?Mp6&IOlAedsTK9`gHzf~!T1MF zkFTbGcXP`iWo*O@j*a$-gVt`myr-XUwEw3k^!3>Ky~=k!Up)tNW{r!U-+GrtExY|i zMTO0b6)qQOzV^@l{;uXC$WK-!!yxwS!ChHH+)k)EegC8r+fF`y^^o!|fgD_Jqdwk4T$Y&&*1Uu*v#hxKaryJsw)Zjk@jsuxE;k6Df~|E~MQ(%H9DBXDB*j;dtgB%}~Ci zi>D+oZ2T*?epOwK7%LMY``~T;>5tw;+D(z<+M%=Ev58|L%{3LeIwx-4b0B)SBTEPD zwxS$z34{v`Vid}Y%ceSuXeA)A)BV`Nj-%dRu@^itjn3VNton`{S=~J(RpNvk=zE+N zK5B8kCzM8Lbi~L{9pf@g%LLA5NX4TH-~tW2hq*fo=$%=z1%m;3CyMc#??q)^1;lVN zHKoB(3~@M);?;AfsVGoe0FDrq$r$`~)PMqFCy9az@JM74nP*(bPLQCb$EcGY-aS(Q zJS`H|Xt&-IcO4^kY3CDq<(&vQ|EVjntEI{ z!DanIz9=DpPpoT17L!z{t~KJ+IiR%{sgS%&E8XAYwaUsufAzKHZ;?;m|I2kE!8qqv zMfYLvQBorNEXw+_;F@dMabkV?&v#dDUd7Xrea(>ef0L~he`FJCORv4T$g3pz+9?|? zlmh^;CjlVCKtJ9*=E1}R9ON$#VsaGTPneLb4u(cC#o)S=UWncb-Xn5gg7E@*Kucas z#{~PGw^caf{d=aLaSa~Z6P-vtza8Yv@)1-OC}j1>{$TK`3)t(W>@pAc$bnOcg(+pJ zs<(`Le8Z8WV&}?Eg$*~mu-uT-aeD)@Nxt&m1ba3v(T$0Op)h#dxW%jp@3jQ}t&16_ zhVipnvRcn7qaXOghP-Y%wwEzfzBM$x+^9gg&0h|)&{Wd?%H!eYb`13S+YzjRGkBQ|mh(XvQ`1Qa(rjD34rSu=C|$f1N31hXpxV=oEqp-MVZnu)j97zISJcl$e} zCJRJLBM;++eAUkT4oK-qXP>@D>FCKN86B=*!3ahD3ELU&pzf;rM|DsC`Ax2@OztFk z_hj;CB9znjzZZKFBTx8r2|Wo2>_*ji-y7{#+L}yy8mgjg`6=}D5$Dp^A5Jm4A4&~; zozUao|MgGlfO-qVJ$OC*GvJ-&O&ycK*Gfy4`j-sdcEAkV}E8JNged<9rlTiZSegw69IsK^T)%c1o;nln$atCi`xOr|oj z)7BKGZ2==e#0%+GTn2|l*U0T@Turbat)1iMaPh#L<3m3fNhu!UVP<$ALC?3KLXIy8 z2L>vESSmKXO!Wy}lemTy-oVScNPre>dr{XTD3z68DL4bT57p^-@9Si#L;0w!cdoD; zYd0MC#LQG@y0maWSY_m5o~Po%vAh{|C7w6!vUcamZ}T$O2f&)MSGkw*V!@AJkve2w z{QWU;%D(fE%|^-Gu>2$Sv95X?02WVJHnXV;doN2=gwv^NNYB`QkGEdtyjR78Vym;5 zK15(N7wH;!48SOK5uqpN)j?wHl^sJsAyG8y(k@NSRDTPNfr5YY zd#1n`E`BgqXg+Fy|3fBMFD@8^wmKVErWM0bT>P1WqoAi1ShnzCbPk}vN*WZpzcmrb z0Q#U$+z}Bn5*MAA9o{8>lIy>J{+(LBR<5We=Tl{&vm|?JJVwvqL(#9Tp>nU9z{$0i zZt!{+*?s@{TN*0$uF=KhrDm9i%fSD&AZ~?hUpRL@yWd#siyDZNGRRgrI8v_MIL`5#r^I-4F>~=0W zdhdtkxk(~*fRd1Ju0juMi8Vx?QG2lz=3Wtoa)*z10mcC5yu4v)^?UjP)_Bl7^C<_EMmC zb#M=9Y5R#0b@^jeS93?l#(#zn2^3+^?z>Sp!ncEJNukgK-lfMP)a~q zf;QR5vzqMWppCtcx68iV#)j(F$FQIjuZfj|X4T9;pXE>(t8|4V{~Y%L6&_1W6-dNM zQ-_DN^um%9Q;*KJju=XRs*eL#or|m+$0A}ubx{2UL|@NUnQztOM-=r7aCJplikzh# zqau7|-@9M&Ht{o57kt~8#CskS_z}cq_7!k=liE^973vud$2JF?af>G6jXcsO_>Z*5 zL7U4emO4r?3V!vI*SVG4(2TQ^iu!+4(DitC4($EplZdBwdw<3yXv!h;qxA^sMl}FyL<$ey^<%K(HnvbV&uXA3q2{F z8kvUWc2}=Je4h)51fk8=F1bvfP!IR0cAt2G4LKa5G(>@}pZUA}xNkBza3yBJ;oivS zKSt^gmLFK(h%CQ^4?xv3n`t3LRdLYL;E|8JbK!MszNGC4O{e-Td&&dd5;^zTbz|wM zZKS25*-i ze0x>lc~y#w@(K$I%Xu>$Q&+vv$9u<;Q+y_0AHNa(%vV%8{1VC#UPXG}BLI)7$o_1F z-KCx`pUhfw3uv4jx}Cp_E3fms-6El;3E9L7acNo=RID$1SLXNKM zhy>j^Z3e^?DU(ih_lH`2Zf{r1xhI?3X!}q2T=Q*5u^D_xr|Ova_6@z(y6h@Wp;WaU zbK3mYL@_DksLWlzwxRb}^5LWyCGOH{%wTh`)i`$weDd?{yxfm*1qHsU-;i`J`s$>U z_DYBcdC|RP%T9vk-nN09Enm4<_EKvYq)TK&w7I_l1Y@O=1T!FIwL7c#d9HsRCPi7f zx^~A(cX@fy@A08Zsj-f-c0vm3hLTC|$m6o6GLK zjVakJcWtq9)iDHuv(D_dRD&!{$~hBAU%*3lXjPLXXJ_lxPc$D9&iU+NpS^ADv~AAN zRf$V86GaiH49*nL4|Eyf|ANA|q*Zk36IA?<_?SR82W{U*l@>s#*Pc^D2 zanN&;lMIJsRYhyEb-2VM`j^XG+ewDfp|s!)zMgTW@v!@8)txHR9ZX zt}}N-rq9W~ED6#FI9ldFv;>5x?kP9U3qwhk`!vgr*Mby1?2$cY+!?aS1R5mVXD<(?3{M72Ca9@Y93IaZfV#oz|)JsZHL-3i1VSoL+^SKL}} zxRstk!+;p>r)(B+@tbMzOH18q0ma*v!EWS-KwT^ALT%=puet^pqm0Wliw2O+OMUkq z$k!Ilzh7?X<76{Ie8peN!xFO7t~i}-iU27TW>wMJ$w7{ewvK_lnkJ1ZN9*%AlLtD& zJdbe0^$E2|GA)m&$cQQk;-nK@(ZghfS8TBaJ5Py6M|)?)b;KaXMN}Bo`c$L-h?J#q z#ihr7C}8A~s%Nju8X4$PJpdDHNX%rOWR*5 z*VLmXxD{DxM|)cc&hs+>aHTwRkZ8H*#Qjb&P_ke;oucNB=uK6sF@-^6MEr^zB*NUQ zIFj1RRg@IVCWgkQzg=cfd-`$fu%bBukf=LrgbP$f>$i1k`~-QNYi-CCpL91sddh(4 zjK)1A_(5tVcz!z7D=Js8Hj~TUp2-p)wRYoK(fWp<4i~ zQ4gYX%AuWZXW8$}B$ib?`i}{HE(PJQNN#!FSJ6n)lc+DU3du)H+tCQIfHfd*T9ObA z@JU7v!A#N%C*wrCO|;S1I(tphS+)c!G`YTfdH3|{5yj>60tQ!JmX2-fDlw*9 z;|pSo7=G^Fo}Tpw_Fu36-^Ksi|1}Rd7+V~?{{P18LnA`S@+Q6^m&3h+|C@9Fv#tIA E0G)NIga7~l literal 0 HcmV?d00001 diff --git a/src/pages/(generation)/LevelGeneration.tsx b/src/pages/(generation)/LevelGeneration.tsx index 52e81c5a..1b02373d 100644 --- a/src/pages/(generation)/LevelGeneration.tsx +++ b/src/pages/(generation)/LevelGeneration.tsx @@ -1,6 +1,7 @@ import {LevelExam, MultipleChoiceExercise} from "@/interfaces/exam"; import useExamStore from "@/stores/examStore"; import {getExamById} from "@/utils/exams"; +import {playSound} from "@/utils/sound"; import {Tab} from "@headlessui/react"; import axios from "axios"; import clsx from "clsx"; @@ -18,6 +19,7 @@ const TaskTab = ({exam, setExam}: {exam?: LevelExam; setExam: (exam: LevelExam) axios .get(`/api/exam/level/generate/level`) .then((result) => { + playSound("check"); console.log(result.data); setExam(result.data); }) @@ -135,6 +137,7 @@ const LevelGeneration = () => { axios .post(`/api/exam/level`, exam) .then((result) => { + playSound("sent"); console.log(`Generated Exam ID: ${result.data.id}`); toast.success("This new exam has been generated successfully! Check the ID in our browser's console."); setResultingExam(result.data); diff --git a/src/pages/(generation)/ListeningGeneration.tsx b/src/pages/(generation)/ListeningGeneration.tsx index 88a990c6..12b09205 100644 --- a/src/pages/(generation)/ListeningGeneration.tsx +++ b/src/pages/(generation)/ListeningGeneration.tsx @@ -2,7 +2,7 @@ import Input from "@/components/Low/Input"; import {Exercise, ListeningExam} from "@/interfaces/exam"; import useExamStore from "@/stores/examStore"; import {getExamById} from "@/utils/exams"; -import {checkSound} from "@/utils/sound"; +import {playSound} from "@/utils/sound"; import {convertCamelCaseToReadable} from "@/utils/string"; import {Tab} from "@headlessui/react"; import axios from "axios"; @@ -26,7 +26,7 @@ const PartTab = ({part, types, index, setPart}: {part?: ListeningPart; types: st axios .get(`/api/exam/listening/generate/listening_section_${index}${topic || types ? `?${url.toString()}` : ""}`) .then((result) => { - checkSound(); + playSound("check"); setPart(result.data); }) .catch((error) => { @@ -136,8 +136,15 @@ const ListeningGeneration = () => { axios .post(`/api/exam/listening/generate/listening`, {parts: [part1, part2, part3, part4]}) .then((result) => { - checkSound(); + playSound("sent"); + console.log(`Generated Exam ID: ${result.data.id}`); + toast.success("This new exam has been generated successfully! Check the ID in our browser's console."); setResultingExam(result.data); + + setPart1(undefined); + setPart2(undefined); + setPart3(undefined); + setTypes([]); }) .catch((error) => { console.log(error); diff --git a/src/pages/(generation)/ReadingGeneration.tsx b/src/pages/(generation)/ReadingGeneration.tsx index fd293a79..cbc49d15 100644 --- a/src/pages/(generation)/ReadingGeneration.tsx +++ b/src/pages/(generation)/ReadingGeneration.tsx @@ -2,6 +2,7 @@ import Input from "@/components/Low/Input"; import {ReadingExam, ReadingPart} from "@/interfaces/exam"; import useExamStore from "@/stores/examStore"; import {getExamById} from "@/utils/exams"; +import {playSound} from "@/utils/sound"; import {convertCamelCaseToReadable} from "@/utils/string"; import {Tab} from "@headlessui/react"; import axios from "axios"; @@ -25,7 +26,10 @@ const PartTab = ({part, types, index, setPart}: {part?: ReadingPart; types: stri setIsLoading(true); axios .get(`/api/exam/reading/generate/reading_passage_${index}${topic || types ? `?${url.toString()}` : ""}`) - .then((result) => setPart(result.data)) + .then((result) => { + playSound("check"); + setPart(result.data); + }) .catch((error) => { console.log(error); toast.error("Something went wrong!"); @@ -136,6 +140,7 @@ const ReadingGeneration = () => { axios .post(`/api/exam/reading`, exam) .then((result) => { + playSound("sent"); console.log(`Generated Exam ID: ${result.data.id}`); toast.success("This new exam has been generated successfully! Check the ID in our browser's console."); setResultingExam(result.data); diff --git a/src/pages/(generation)/WritingGeneration.tsx b/src/pages/(generation)/WritingGeneration.tsx index e528bd9e..18e5ae2b 100644 --- a/src/pages/(generation)/WritingGeneration.tsx +++ b/src/pages/(generation)/WritingGeneration.tsx @@ -2,6 +2,7 @@ import Input from "@/components/Low/Input"; import {WritingExam} from "@/interfaces/exam"; import useExamStore from "@/stores/examStore"; import {getExamById} from "@/utils/exams"; +import {playSound} from "@/utils/sound"; import {Tab} from "@headlessui/react"; import axios from "axios"; import clsx from "clsx"; @@ -18,7 +19,10 @@ const TaskTab = ({task, index, setTask}: {task?: string; index: number; setTask: setIsLoading(true); axios .get(`/api/exam/writing/generate/writing_task${index}_general`) - .then((result) => setTask(result.data.question)) + .then((result) => { + playSound("check"); + setTask(result.data.question); + }) .catch((error) => { console.log(error); toast.error("Something went wrong!"); @@ -132,6 +136,7 @@ const WritingGeneration = () => { .post(`/api/exam/writing`, exam) .then((result) => { console.log(`Generated Exam ID: ${result.data.id}`); + playSound("sent"); toast.success("This new exam has been generated successfully! Check the ID in our browser's console."); setResultingExam(result.data); diff --git a/src/utils/sound.ts b/src/utils/sound.ts index dcaae082..d4bc5a84 100644 --- a/src/utils/sound.ts +++ b/src/utils/sound.ts @@ -1,8 +1,9 @@ import {Howl, Howler} from "howler"; -export const checkSound = () => { +export type Sound = "check" | "sent"; +export const playSound = (path: Sound) => { const sound = new Howl({ - src: ["audio/check.mp3"], + src: [`audio/${path}.mp3`], }); sound.play(); From 58b4883236a2a48a910e49cf9d27d15dfbc0178a Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Wed, 29 Nov 2023 20:52:08 +0000 Subject: [PATCH 6/8] Updated the types of exercises for the Listening Generation --- src/pages/(generation)/ListeningGeneration.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/(generation)/ListeningGeneration.tsx b/src/pages/(generation)/ListeningGeneration.tsx index 12b09205..143d7223 100644 --- a/src/pages/(generation)/ListeningGeneration.tsx +++ b/src/pages/(generation)/ListeningGeneration.tsx @@ -115,10 +115,10 @@ const ListeningGeneration = () => { const [types, setTypes] = useState([]); const availableTypes = [ - {type: "fillBlanks", label: "Fill the Blanks"}, {type: "multipleChoice", label: "Multiple Choice"}, - {type: "trueFalse", label: "True or False"}, - {type: "writeBlanks", label: "Write the Blanks"}, + {type: "writeBlanksQuestions", label: "Write the Blanks: Questions"}, + {type: "writeBlanksFill", label: "Write the Blanks: Fill"}, + {type: "writeBlanksForm", label: "Write the Blanks: Form"}, ]; const router = useRouter(); From 1746db37520d5c682466c309ca3508eb36ad7430 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Thu, 30 Nov 2023 10:36:15 +0000 Subject: [PATCH 7/8] Disabled Diagnostics test for all users except students --- src/pages/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index bc6d44af..0e19d918 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -68,7 +68,7 @@ export default function Home({envVariables}: {envVariables: {[key: string]: stri useEffect(() => { if (user) { setShowDemographicInput(!user.demographicInformation); - setShowDiagnostics(user.isFirstLogin); + setShowDiagnostics(user.isFirstLogin && user.type === "student"); } }, [user]); From 96fe83de14af856c2e0d7967eaeec23259444a36 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Thu, 30 Nov 2023 15:50:24 +0000 Subject: [PATCH 8/8] Added the Speaking generation to the project, still WIP --- src/pages/(generation)/SpeakingGeneration.tsx | 234 ++++++++++++++++++ src/pages/generation.tsx | 2 + 2 files changed, 236 insertions(+) create mode 100644 src/pages/(generation)/SpeakingGeneration.tsx diff --git a/src/pages/(generation)/SpeakingGeneration.tsx b/src/pages/(generation)/SpeakingGeneration.tsx new file mode 100644 index 00000000..3a10cb48 --- /dev/null +++ b/src/pages/(generation)/SpeakingGeneration.tsx @@ -0,0 +1,234 @@ +import Input from "@/components/Low/Input"; +import {Exercise, SpeakingExam} from "@/interfaces/exam"; +import useExamStore from "@/stores/examStore"; +import {getExamById} from "@/utils/exams"; +import {playSound} from "@/utils/sound"; +import {convertCamelCaseToReadable} from "@/utils/string"; +import {Tab} from "@headlessui/react"; +import axios from "axios"; +import clsx from "clsx"; +import {useRouter} from "next/router"; +import {useState} from "react"; +import {BsArrowRepeat} from "react-icons/bs"; +import {toast} from "react-toastify"; + +const PartTab = ({part, index, setPart}: {part?: SpeakingPart; index: number; setPart: (part?: SpeakingPart) => void}) => { + const [isLoading, setIsLoading] = useState(false); + + const generate = () => { + setPart(undefined); + setIsLoading(true); + axios + .get(`/api/exam/speaking/generate/speaking_task_${index}`) + .then((result) => { + playSound("check"); + setPart(result.data); + }) + .catch((error) => { + console.log(error); + toast.error("Something went wrong!"); + }) + .finally(() => setIsLoading(false)); + }; + + return ( + +
+ +
+ {isLoading && ( +
+ + Generating... +
+ )} + {part && ( +
+

{part.topic}

+ {part.question && {part.question}} + {part.questions && ( +
+ {part.questions.map((question, index) => ( + + - {question} + + ))} +
+ )} + {part.prompts && ( +
+ You should talk about the following things: + {part.prompts.map((prompt, index) => ( + + - {prompt} + + ))} +
+ )} +
+ )} +
+ ); +}; + +interface SpeakingPart { + prompts?: string[]; + question?: string; + questions?: string[]; + topic: string; +} + +const SpeakingGeneration = () => { + const [part1, setPart1] = useState(); + const [part2, setPart2] = useState(); + const [part3, setPart3] = useState(); + const [isLoading, setIsLoading] = useState(false); + const [resultingExam, setResultingExam] = useState(); + + const router = useRouter(); + + const setExams = useExamStore((state) => state.setExams); + const setSelectedModules = useExamStore((state) => state.setSelectedModules); + + const submitExam = () => { + if (!part1 || !part2 || !part3) return toast.error("Please generate all for tasks!"); + + setIsLoading(true); + + axios + .post(`/api/exam/speaking/generate/speaking`, {exercises: [part1, part2, part3]}) + .then((result) => { + playSound("sent"); + console.log(`Generated Exam ID: ${result.data.id}`); + toast.success("This new exam has been generated successfully! Check the ID in our browser's console."); + setResultingExam(result.data); + + setPart1(undefined); + setPart2(undefined); + setPart3(undefined); + }) + .catch((error) => { + console.log(error); + toast.error("Something went wrong!"); + }) + .finally(() => setIsLoading(false)); + }; + + const loadExam = async (examId: string) => { + const exam = await getExamById("speaking", examId.trim()); + if (!exam) { + toast.error("Unknown Exam ID! Please make sure you selected the right module and entered the right exam ID", { + toastId: "invalid-exam-id", + }); + + return; + } + + setExams([exam]); + setSelectedModules(["speaking"]); + + router.push("/exercises"); + }; + + return ( + <> + + + + clsx( + "w-full rounded-lg py-2.5 text-sm font-medium leading-5 text-ielts-speaking/70", + "ring-white ring-opacity-60 ring-offset-2 ring-offset-ielts-speaking focus:outline-none focus:ring-2", + "transition duration-300 ease-in-out", + selected ? "bg-white shadow" : "text-blue-100 hover:bg-white/[0.12] hover:text-ielts-speaking", + ) + }> + Task 1 + + + clsx( + "w-full rounded-lg py-2.5 text-sm font-medium leading-5 text-ielts-speaking/70", + "ring-white ring-opacity-60 ring-offset-2 ring-offset-ielts-speaking focus:outline-none focus:ring-2", + "transition duration-300 ease-in-out", + selected ? "bg-white shadow" : "text-blue-100 hover:bg-white/[0.12] hover:text-ielts-speaking", + ) + }> + Task 2 + + + clsx( + "w-full rounded-lg py-2.5 text-sm font-medium leading-5 text-ielts-speaking/70", + "ring-white ring-opacity-60 ring-offset-2 ring-offset-ielts-speaking focus:outline-none focus:ring-2", + "transition duration-300 ease-in-out", + selected ? "bg-white shadow" : "text-blue-100 hover:bg-white/[0.12] hover:text-ielts-speaking", + ) + }> + Task 3 + + + + {[ + {part: part1, setPart: setPart1}, + {part: part2, setPart: setPart2}, + {part: part3, setPart: setPart3}, + ].map(({part, setPart}, index) => ( + + ))} + + +
+ {resultingExam && ( + + )} + +
+ + ); +}; + +export default SpeakingGeneration; diff --git a/src/pages/generation.tsx b/src/pages/generation.tsx index 62828726..cd905767 100644 --- a/src/pages/generation.tsx +++ b/src/pages/generation.tsx @@ -20,6 +20,7 @@ import ReadingGeneration from "./(generation)/ReadingGeneration"; import ListeningGeneration from "./(generation)/ListeningGeneration"; import WritingGeneration from "./(generation)/WritingGeneration"; import LevelGeneration from "./(generation)/LevelGeneration"; +import SpeakingGeneration from "./(generation)/SpeakingGeneration"; export const getServerSideProps = withIronSessionSsr(({req, res}) => { const user = req.session.user; @@ -115,6 +116,7 @@ export default function Generation() { {module === "reading" && } {module === "listening" && } {module === "writing" && } + {module === "speaking" && } {module === "level" && } )}