From c7877fe42a83c2a611ae30cd74f0a1c880951b7c Mon Sep 17 00:00:00 2001 From: Teakowa Date: Mon, 28 Sep 2026 02:20:27 +0800 Subject: [PATCH] feat: publish search and share metadata for both locales Prerender Open Graph, X, and QQ share tags with a per-locale PNG card, and describe the site in JSON-LD without ratings or a price. The sitemap lists both language URLs with the same alternates as the HTML. --- README.md | 17 ++- scripts/share-cards/render.swift | 149 ++++++++++++++++++++++++ scripts/verify-build.mjs | 75 +++++++++++- src/app.html | 2 + src/lib/content/en.ts | 4 +- src/lib/content/types.ts | 4 + src/lib/content/zh-CN.ts | 4 +- src/lib/seo.ts | 90 ++++++++++++++ src/routes/[[lang=locale]]/+page.svelte | 38 ++++-- src/routes/sitemap.xml/+server.ts | 36 ++++++ static/apple-touch-icon.png | Bin 0 -> 1485 bytes static/favicon-32.png | Bin 0 -> 332 bytes static/og-en.png | Bin 0 -> 32286 bytes static/og-zh-CN.png | Bin 0 -> 33685 bytes static/robots.txt | 2 + svelte.config.js | 2 +- 16 files changed, 404 insertions(+), 19 deletions(-) create mode 100644 scripts/share-cards/render.swift create mode 100644 src/lib/seo.ts create mode 100644 src/routes/sitemap.xml/+server.ts create mode 100644 static/apple-touch-icon.png create mode 100644 static/favicon-32.png create mode 100644 static/og-en.png create mode 100644 static/og-zh-CN.png diff --git a/README.md b/README.md index 5d42a1d..5961b67 100644 --- a/README.md +++ b/README.md @@ -54,9 +54,20 @@ browser-language redirect; readers switch from the header language menu. 规则, 动作, 值, 服务器负载) and puts a space between CJK text and Latin words. - Long Chinese headings may use `\u200b` to mark where they are allowed to wrap; headings otherwise break only at spaces and punctuation. -- To add a locale: add it to `src/lib/locales.ts`, add a content file, and add - the path to `prerender.entries` in `svelte.config.js` and to - `scripts/verify-build.mjs`. +- To add a locale: add it to `src/lib/locales.ts`, add a content file, add the + path to `prerender.entries` in `svelte.config.js`, add its share-image file + in `src/lib/seo.ts`, regenerate the PNGs with + `swift scripts/share-cards/render.swift` on macOS, and extend + `scripts/verify-build.mjs`. The sitemap is generated from the locale list. + +Search and share metadata is prerendered from each locale's `meta` block. +Title and description match the visible hero. The share card is a PNG because +WeChat, QQ, and X do not unfurl SVG. Open Graph covers WeChat, Weibo, DingTalk, +Feishu, Zhihu, Discord, Slack, and Telegram. X also gets Twitter Card tags. +QQ and Qzone get `itemprop` name, description, and image. There is no review +or price structured data: the site publishes neither, and invented ratings are +spam. Submitting the sitemap in Google Search Console and 百度搜索资源平台 is a +manual step after deploy. ## Stack diff --git a/scripts/share-cards/render.swift b/scripts/share-cards/render.swift new file mode 100644 index 0000000..a1d9824 --- /dev/null +++ b/scripts/share-cards/render.swift @@ -0,0 +1,149 @@ +import AppKit +import Foundation + +let root = URL(fileURLWithPath: #filePath) + .deletingLastPathComponent() + .deletingLastPathComponent() + .deletingLastPathComponent() +let staticDir = root.appendingPathComponent("static") + +let ink = NSColor(srgbRed: 0x10 / 255, green: 0x10 / 255, blue: 0x0e / 255, alpha: 1) +let paper = NSColor(srgbRed: 0xf7 / 255, green: 0xf7 / 255, blue: 0xf5 / 255, alpha: 1) +let muted = NSColor(srgbRed: 0xc2 / 255, green: 0xc2 / 255, blue: 0xbc / 255, alpha: 1) +let accent = NSColor(srgbRed: 0xf9 / 255, green: 0x73 / 255, blue: 0x16 / 255, alpha: 1) + +func png(width: Int, height: Int, _ draw: () -> Void) -> Data { + guard + let rep = NSBitmapImageRep( + bitmapDataPlanes: nil, + pixelsWide: width, + pixelsHigh: height, + bitsPerSample: 8, + samplesPerPixel: 4, + hasAlpha: true, + isPlanar: false, + colorSpaceName: .deviceRGB, + bytesPerRow: 0, + bitsPerPixel: 0 + ) + else { + fputs("could not allocate bitmap\n", stderr) + exit(1) + } + rep.size = NSSize(width: width, height: height) + guard let context = NSGraphicsContext(bitmapImageRep: rep) else { + fputs("could not make graphics context\n", stderr) + exit(1) + } + NSGraphicsContext.saveGraphicsState() + NSGraphicsContext.current = context + draw() + NSGraphicsContext.restoreGraphicsState() + guard let data = rep.representation(using: .png, properties: [:]) else { + fputs("could not encode png\n", stderr) + exit(1) + } + return data +} + +func write(_ name: String, _ data: Data) { + let url = staticDir.appendingPathComponent(name) + do { + try data.write(to: url) + } catch { + fputs("write \(name) failed: \(error)\n", stderr) + exit(1) + } +} + +func drawMark(in rect: CGRect) { + let scale = rect.width / 32 + let stroke = 2.5 * scale + let outer = NSBezierPath(rect: rect.insetBy(dx: stroke / 2, dy: stroke / 2)) + outer.lineWidth = stroke + paper.setStroke() + outer.stroke() + let inner = 10 * scale + accent.setFill() + NSRect(x: rect.midX - inner / 2, y: rect.midY - inner / 2, width: inner, height: inner).fill() +} + +func drawText(_ text: String, size: CGFloat, weight: NSFont.Weight, color: NSColor, kern: CGFloat, center: CGPoint) { + let font = NSFont.systemFont(ofSize: size, weight: weight) + let attributed = NSAttributedString( + string: text, + attributes: [ + .font: font, + .foregroundColor: color, + .kern: kern + ] + ) + let bounds = attributed.size() + attributed.draw( + in: NSRect( + x: center.x - bounds.width / 2, + y: center.y - bounds.height / 2, + width: bounds.width, + height: bounds.height + ) + ) +} + +func card(file: String, subtitle: String, subtitleSize: CGFloat) { + let data = png(width: 1200, height: 630) { + ink.setFill() + NSRect(x: 0, y: 0, width: 1200, height: 630).fill() + let mark: CGFloat = 72 + let titleSize: CGFloat = 76 + let titleHeight = NSFont.systemFont(ofSize: titleSize, weight: .semibold).ascender + - NSFont.systemFont(ofSize: titleSize, weight: .semibold).descender + let subHeight = NSFont.systemFont(ofSize: subtitleSize, weight: .medium).ascender + - NSFont.systemFont(ofSize: subtitleSize, weight: .medium).descender + let gapAfterMark: CGFloat = 28 + let gapAfterTitle: CGFloat = 18 + let total = mark + gapAfterMark + titleHeight + gapAfterTitle + subHeight + let bottom = (630 - total) / 2 + drawText( + subtitle, + size: subtitleSize, + weight: .medium, + color: muted, + kern: 0, + center: CGPoint(x: 600, y: bottom + subHeight / 2) + ) + drawText( + "WrightKit", + size: titleSize, + weight: .semibold, + color: paper, + kern: -1.6, + center: CGPoint(x: 600, y: bottom + subHeight + gapAfterTitle + titleHeight / 2) + ) + drawMark( + in: CGRect( + x: 600 - mark / 2, + y: bottom + subHeight + gapAfterTitle + titleHeight + gapAfterMark, + width: mark, + height: mark + ) + ) + } + write(file, data) +} + +card(file: "og-en.png", subtitle: "Overwatch Workshop tooling", subtitleSize: 32) +card(file: "og-zh-CN.png", subtitle: "守望先锋地图工坊开发工具", subtitleSize: 36) + +let icon = png(width: 180, height: 180) { + ink.setFill() + NSRect(x: 0, y: 0, width: 180, height: 180).fill() + drawMark(in: CGRect(x: 34, y: 34, width: 112, height: 112)) +} +write("apple-touch-icon.png", icon) + +let favicon = png(width: 32, height: 32) { + ink.setFill() + NSRect(x: 0, y: 0, width: 32, height: 32).fill() + drawMark(in: CGRect(x: 3, y: 3, width: 26, height: 26)) +} +write("favicon-32.png", favicon) diff --git a/scripts/verify-build.mjs b/scripts/verify-build.mjs index a41bdb2..828e4e0 100644 --- a/scripts/verify-build.mjs +++ b/scripts/verify-build.mjs @@ -46,8 +46,20 @@ for (const installer of installers) { // metadata, and commands and captured CLI output must stay untranslated. const SITE_URL = 'https://wrightkit.dev'; const pages = [ - { file: 'index.html', lang: 'en', canonical: `${SITE_URL}/` }, - { file: 'zh-CN.html', lang: 'zh-CN', canonical: `${SITE_URL}/zh-CN` } + { + file: 'index.html', + lang: 'en', + canonical: `${SITE_URL}/`, + image: `${SITE_URL}/og-en.png`, + imageAlt: 'WrightKit, tooling for Overwatch Workshop development' + }, + { + file: 'zh-CN.html', + lang: 'zh-CN', + canonical: `${SITE_URL}/zh-CN`, + image: `${SITE_URL}/og-zh-CN.png`, + imageAlt: 'WrightKit,守望先锋地图工坊开发工具' + } ]; const literals = [ 'curl -fsSL https://wrightkit.dev/install.sh | bash', @@ -69,6 +81,18 @@ for (const page of pages) { ` ``, + `"@type":"WebPage"`, + `"url":"${page.canonical}"`, ...literals ]; for (const snippet of expected) { @@ -79,4 +103,49 @@ for (const page of pages) { } } -console.log(`[verify-build] OK: installers and ${pages.length} localized pages verified.`); +function pngSize(path) { + const bytes = readFileSync(path); + const png = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]); + if (bytes.length < 24 || !bytes.subarray(0, 8).equals(png) || bytes.toString('ascii', 12, 16) !== 'IHDR') { + return null; + } + return { width: bytes.readUInt32BE(16), height: bytes.readUInt32BE(20) }; +} + +const images = [ + { file: 'og-en.png', width: 1200, height: 630 }, + { file: 'og-zh-CN.png', width: 1200, height: 630 }, + { file: 'apple-touch-icon.png', width: 180, height: 180 }, + { file: 'favicon-32.png', width: 32, height: 32 } +]; + +for (const image of images) { + const path = resolve(ROOT_DIR, 'build', image.file); + const size = existsSync(path) ? pngSize(path) : null; + if (!size || size.width !== image.width || size.height !== image.height) { + console.error( + `[verify-build] Error: build/${image.file} must be a ${image.width}×${image.height} PNG.` + ); + process.exit(1); + } +} + +const sitemap = readFileSync(resolve(ROOT_DIR, 'build/sitemap.xml'), 'utf8'); +for (const page of pages) { + if (!sitemap.includes(`${page.canonical}`)) { + console.error(`[verify-build] Error: sitemap.xml is missing ${page.canonical}`); + process.exit(1); + } +} +if (!sitemap.includes('hreflang="x-default"')) { + console.error('[verify-build] Error: sitemap.xml is missing x-default.'); + process.exit(1); +} + +const robots = readFileSync(resolve(ROOT_DIR, 'build/robots.txt'), 'utf8'); +if (!robots.includes(`Sitemap: ${SITE_URL}/sitemap.xml`)) { + console.error('[verify-build] Error: robots.txt is missing the sitemap URL.'); + process.exit(1); +} + +console.log(`[verify-build] OK: installers, ${pages.length} localized pages, share images, and sitemap verified.`); diff --git a/src/app.html b/src/app.html index 5a3b3ff..5d94b9d 100644 --- a/src/app.html +++ b/src/app.html @@ -24,6 +24,8 @@ + + %sveltekit.head% diff --git a/src/lib/content/en.ts b/src/lib/content/en.ts index 01ca9cd..aa30d79 100644 --- a/src/lib/content/en.ts +++ b/src/lib/content/en.ts @@ -5,7 +5,9 @@ const en: Messages = { meta: { title: 'WrightKit: Tooling for Overwatch Workshop development', description: - 'Stop guessing where the server-load risks are. Wright statically analyzes Overwatch Workshop and OverPy code and points every problem to a line.' + 'Stop guessing where the server-load risks are. Wright statically analyzes Overwatch Workshop and OverPy code and points every problem to a line.', + imageAlt: 'WrightKit, tooling for Overwatch Workshop development', + keywords: 'Overwatch Workshop, OverPy, Wright, WrightKit, Workshop lint, server load' }, ui: { skipToContent: 'Skip to content', diff --git a/src/lib/content/types.ts b/src/lib/content/types.ts index 0bc9d21..b132df0 100644 --- a/src/lib/content/types.ts +++ b/src/lib/content/types.ts @@ -31,6 +31,10 @@ export interface Messages { meta: { title: string; description: string; + /** Alt text for the 1200×630 share image. */ + imageAlt: string; + /** Terms that already appear on the page. Used by engines that still read meta keywords. */ + keywords: string; }; ui: { skipToContent: string; diff --git a/src/lib/content/zh-CN.ts b/src/lib/content/zh-CN.ts index 1d7aec7..a4a5ec8 100644 --- a/src/lib/content/zh-CN.ts +++ b/src/lib/content/zh-CN.ts @@ -12,7 +12,9 @@ const zhCN: Messages = { meta: { title: 'WrightKit:守望先锋地图工坊开发工具', description: - '服务器负载的隐患在哪,不用再靠猜。Wright 静态分析守望先锋地图工坊和 OverPy 代码,把每个问题指到具体一行。' + '服务器负载的隐患在哪,不用再靠猜。Wright 静态分析守望先锋地图工坊和 OverPy 代码,把每个问题指到具体一行。', + imageAlt: 'WrightKit,守望先锋地图工坊开发工具', + keywords: '守望先锋, 地图工坊, OverPy, Wright, WrightKit, 服务器负载' }, ui: { skipToContent: '跳到正文', diff --git a/src/lib/seo.ts b/src/lib/seo.ts new file mode 100644 index 0000000..e34cff1 --- /dev/null +++ b/src/lib/seo.ts @@ -0,0 +1,90 @@ +import { site } from './site'; +import { localeInfo, localePath, type Locale } from './locales'; + +/** Share-card image. PNG, not SVG: WeChat, QQ, and X do not unfurl SVG. */ +export const shareImage = { + width: 1200, + height: 630, + type: 'image/png', + file: { + en: 'og-en.png', + 'zh-CN': 'og-zh-CN.png' + } as const satisfies Record +}; + +export function pageUrl(locale: Locale): string { + return new URL(localePath(locale), site.url).href; +} + +export function shareImageUrl(locale: Locale): string { + return new URL(`/${shareImage.file[locale]}`, site.url).href; +} + +/** + * Entity data for the page that is actually rendered. No ratings and no price: + * the site has neither, and Google treats invented review markup as spam. + * Localized text stays on WebPage so the two locales do not disagree about one node. + */ +export function structuredData(locale: Locale, page: { title: string; description: string }) { + const canonical = pageUrl(locale); + const organization = `${site.url}/#organization`; + const website = `${site.url}/#website`; + const software = `${site.url}/#wright`; + + return { + '@context': 'https://schema.org', + '@graph': [ + { + '@type': 'Organization', + '@id': organization, + name: site.name, + url: pageUrl('en'), + logo: { + '@type': 'ImageObject', + url: new URL('/apple-touch-icon.png', site.url).href, + width: 180, + height: 180 + }, + sameAs: [site.org] + }, + { + '@type': 'WebSite', + '@id': website, + url: pageUrl('en'), + name: site.name, + publisher: { '@id': organization }, + inLanguage: ['en', 'zh-CN'] + }, + { + '@type': 'WebPage', + '@id': `${canonical}#webpage`, + url: canonical, + name: page.title, + description: page.description, + inLanguage: localeInfo[locale].tag, + isPartOf: { '@id': website }, + primaryImageOfPage: { + '@type': 'ImageObject', + url: shareImageUrl(locale), + width: shareImage.width, + height: shareImage.height + }, + about: { '@id': software } + }, + { + '@type': 'SoftwareSourceCode', + '@id': software, + name: 'Wright', + codeRepository: site.github, + license: 'https://www.gnu.org/licenses/agpl-3.0.html', + programmingLanguage: 'Rust', + runtimePlatform: 'macOS, Linux, Windows', + author: { '@id': organization } + } + ] + }; +} + +export function structuredDataJson(locale: Locale, page: { title: string; description: string }): string { + return JSON.stringify(structuredData(locale, page)).replaceAll('<', '\\u003c'); +} diff --git a/src/routes/[[lang=locale]]/+page.svelte b/src/routes/[[lang=locale]]/+page.svelte index a99c0cf..b6dd0d5 100644 --- a/src/routes/[[lang=locale]]/+page.svelte +++ b/src/routes/[[lang=locale]]/+page.svelte @@ -7,35 +7,53 @@ import LanguagesSection from '$lib/components/LanguagesSection.svelte'; import InstallSection from '$lib/components/InstallSection.svelte'; import { site } from '$lib/site'; - import { defaultLocale, localeInfo, localePath, locales, type Locale } from '$lib/locales'; + import { defaultLocale, localeInfo, locales } from '$lib/locales'; import { currentLocale, currentMessages } from '$lib/content'; + import { pageUrl, shareImage, shareImageUrl, structuredDataJson } from '$lib/seo'; const locale = $derived(currentLocale()); const t = $derived(currentMessages()); - - function absoluteUrl(target: Locale) { - return new URL(localePath(target), site.url).href; - } + const image = $derived(shareImageUrl(locale)); + const ld = $derived( + structuredDataJson(locale, { title: t.meta.title, description: t.meta.description }) + ); {t.meta.title} - + + + + {#each locales as alternate (alternate)} - + {/each} - + - + {#each locales.filter((l) => l !== locale) as alternate (alternate)} {/each} - + + + + + + + + + + + + + + + {@html ``} diff --git a/src/routes/sitemap.xml/+server.ts b/src/routes/sitemap.xml/+server.ts new file mode 100644 index 0000000..c1d67d6 --- /dev/null +++ b/src/routes/sitemap.xml/+server.ts @@ -0,0 +1,36 @@ +import { defaultLocale, localeInfo, locales } from '$lib/locales'; +import { pageUrl } from '$lib/seo'; + +export const prerender = true; + +/** Both homepages, with the same alternates the HTML `hreflang` links declare. */ +export function GET() { + const alternates = [ + ...locales.map( + (locale) => + ` ` + ), + ` ` + ].join('\n'); + + const urls = locales + .map( + (locale) => ` + ${pageUrl(locale)} +${alternates} + ` + ) + .join('\n'); + + const body = ` + +${urls} + +`; + + return new Response(body, { + headers: { + 'content-type': 'application/xml; charset=utf-8' + } + }); +} diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cf53f926ccaf2d34567c58f19127cd920c6394ca GIT binary patch literal 1485 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⁡o+%HkM5iB|Wtx3kFlutvUC5RRrvow(_t@c=o_F%W-tYemE56?ie(N6-0i9JdVq#j;GY!0% z8)bc9V-e$WfoYSoF^?*Skh9;XzjfeZ7nUT!4t8*JXqb92 z2)u0q9$O$rfS$quE%oadrye^fC@UN|m9Y}E>I>Cj8sY*8Q%9o%DOg6M1C}Y^NozEB zpyis;!U{b=97YQ(lp-1wKBIL9dUZ2el_RytMyqmMEyU556>1}Gw4sY$-HbMLF&b&3 z{SK5~6)*>lb^}q15rxriAbNl_jP}aWa}CGnAPLfF064*Di2vaCRMGh~dFo0f&^_&* Lu6{1-oD!M6yOszd2a*oAE~pt(jO%G9T(=nn;Yi3cP;MSBjE+FsYpm)T9J@L zUjhG^z(4TQ6tZ8RkQb&L`SqI24Z7HqVkAjIB2RMn_DxL>(nSpA$OWy+8)HW<{mH8L z@fgaGiiWD2oRs#a{88o)&z>D8`@q4HMny&u0Xy@6p8nvh<{Phw3~m(c?N{$vRKpwj zeS+XpQ8gAZSkPggv`+AKcem(BkXTRHb=o!R^t8)p%9Ef) z{?RJ?8yiy6T!Yi$9kl-#4=NK+ihquUlK}hEsDh54*vh;2|x45zhv$2 zg!Ess_7i~r%b5SJ3jBXgwg`Ag^$YtX3a)&;b=nm#aPsj%w4vJ|sh#n}&jc6{0HhwK z#}9F5e$46-!K=*|oKNnE8vG{TCbQ)H7cWS9>slz?C*@>@Xpt$s7%cN{muXOF?d0ZNjHrBIdfmnlR4Axhgelch*00LWb<+L^0FCv zdOh#KuhlUCX3e$zeiiMH4@^?XwT+)-xQuFZQl#zL2_{A6`&;0jmi*@jjI{&5Av0j~V}oBwOZ;A$>x8EyAVJjUM}8;#D$6f)X!t1HzR zykC;{J9b=Wq^Y-Fn&AEk5!g}cuM7=W8>%n;UP3SK)YJWS@tHgPpHb2l$mW9yy&V4t ztmim@eEsil{`Zf;=OQhQkYAAqPG*x|X(5T9O_j>&@m;hVDgNVUBAitWh@DP!PnyGc zm@NhU_4b7(47oi1*(ISb8KOdd_>oM@-#H-5q zJ3l_T&fu|-S02ae{^r-Sr4%3Kzqq)#+T;D-Tb3UHbs5(^n(CYXxMB%i+1i1F)9)P8;PYctJy zfjyMZW-9)(U%$63&8#iB(!nZ+;`;U7Uz)ND3Jm_hX(aQde_Sa8S1iMmM}GpP-#LT4 z%1E9hXW`{HYPw%{`PGu7KDbicthW3Qs9`7s(#htnMT&o1Nd$GMzQKvi?f*3JV*v!@ zgGe)vzvveDk1HJj!_EIYJ^xP6|6#kwMAy>Y_~+&cP-XmPTio8gvpUgp4bA`7$m9F- zjb;A>DZ?k9j?R@17%gn*_Z$eGS;=)9d|Jf`RhdH88vBPyOJ(NnKFjJ1f% zvKmPC-5T7Oj&~5t>-j=Cli=JzZ#J5}QU1A2q%#4bXPu=TEx_iFpUdo-{PGq(ylSrK zrJZ9xLU9-yTOvTv38T2B1BC#SCr7WS#Jq7Eaco8~`hpPMeVi}%%_yk*BV3C$cQDI- z(PD#--ezbS`>ZxzcU%0H;W{MYvA;W$2}Y-SipPD_({jjXyDYAMGA;15Y=u^7n2cWotx{Tn|K5TC;b1-a zK$^wv+e3i`^SqV4Wq&yw$SClfOb5U9_&Lx&o`K|uq`tL#gdfS#iJP5L`xK=@^p8G} zFVzy3R2bvT!X&!0bMoV|>~oYqzdWtBkXx*pW6fh>wW&j5(+{`2ms3#dg|<NJ9P8)p zIB1PKmei+5JA4?LO&&uGvk9XG1$TBzvT#}aV=v-rv&d#z9hokUJY9C<{b}=g{TyXD zLDm<);nFTTP-2~L941t~SQI-HRAYETpyYl=6)!FKvDd6Jl6z~>bt=MytFRy+XXE{~ z=$>~x8eW>)xm)bWz{5m&G6*F3Q^%@9pbR8$M9y({=akgq*CHu+pnM*aH5WI7$er=i zD|a}s(UIm~OiTPbWwz5=P@?CiDrb_=F0ocU8R=yMJg-(QTcwOiyh zIv1@rF^lJ1d(>+^4u0L?e@ZnXX2IMHM-D~DhTW0R9L^xxZz?aa~$$tb@l$>a;g+S$1|k93w-0du#eD#}NgMjEL;Gmbm>toEA}m$MN)8S9s4NuJ z`B{tKbd?e*o5$Sd_YeMa1>R~xQ3%#AHjUB9W%MzB3w1u@6&w)QR3QBMc8Jz z#B_|ym&?)b#1{O#v=@rL-Tl#!p*)Gr*Dr>Lz+~;x${JdT(ejA-oQ82UZQ0v{?B3*B zio&9;T_~zlfx(1Dv#fOLJ}a9^^3E7A_D6j$Rh8S@aQXh6QA~P?BtSVp&1d|KRRL-% zd!%oJki5T<=>kHOc-|RGnH+&2%^wgW5U^2E?l!^09p-tqMRNUPfk>g(nR-3n%{~o& znMJ!VLo@pJm6sK0Y_6iUbPS`Q$l%f;F_YHJ>YW=C!c7(|%qNI&W%ZhUA2`S|FmDpz z(PJT1ylG#%J6+N#OL$ak)@g0Q%W#NK>YpBK2@o|YVS*H(09D#oB-(8h)>_&Ij*X^Q zvj%hDE85*YmB*m1`@ZY@3xe5~hx{@%AOJG=Te-0>oXovrAxA%zm6^ml%^qx{l$4T- zmU#K0AU{?uzyoG}$u4{n2Ung%4qIg=4t3;B!`naPoH~qt=WdXS6jF3(qYwA&MKWP# zv$e@D0^ZD|h}>gcHp~m{i#h7dC_}{?2gLQvDTIE0uS!oRXsuUa#rmUC%6h(>X~QcQ z5S%j<7!9v$%wRnxLQ5vXq_%eL;*duH!1P*DhmRdhW$m zCAlhU*qJfg7T(0=w+*AH{miM$P@rRT9a76}BWw)ECKbjiCcPsVVD}q?9kI)F8g&sGxr=lyReuWFsAdff&*J#AA6xEDMXMpnk(kKRf&n9M zyEs{2uj=+3HIq9>-LSsf8?l`}SDe|xq}N(p8X0sRG5l@>)jh77rWsdxm)6mLcZ%Op`Zc z+<_027lV;?U<{pD8kl8$JcJpCVua1Q$3ujY6vJ5!Yr>y|CaA8iPrg;lSjex=k2zV_ z`9#9Oq_|xSM#<*$WZGzd$-NGindqiBjpzLdn0J9z*ouvrrGMEKaE+QzS7BL<^}*@d*u5op{iOYLAzvO0 znBqn+(42lST-bXNsdPNk>oVO#B@(`qAn1);?@~kC$_YkOj2oGL4Djj52gz{J)xV-RnXx%)mH#t_aFI4quK4<}Y3)arr zis?9;ZZ5gqF9_7DbWdS3E}OXm67Bv41yrB5zJS8B1?{OWCANFva{C_P*6Z!!#&KX> zdMy@UgtteW8QlfSzM0O|tareKZ*jwd)|F?(ad>uw<(xO@ zZ)V$-W5jT%?a?{Varer7@VodgrjsoZQ_lDaG%4kU`zI+Zj@3uyGZtgq2F;^4HVgb^ z_NK+_cskVM#O(Cup7dGv3+GE_nWhe|N0{64#kCSe@jf80n=^$!zMiy9)h&9h#pyfL zX_xl#l%E^kI>7coWcdDe_vVkd!%p?6Juu4E%E(2+q9nI&AAiqV&UL<*UgT|DR7}tr z^lA|z*SD?8rD)LA65y*xr=ap=@zOTgDPt7rXefBHaYjG1zp|EHpFDuE}l)!84 zBiYjBb+t-k!WK!sgkkKGE1Ri>e%lCyD>TT*s@~sb7qVz+y!Ms?(6aMs0TdpAMu{T(X#xyMEp z1lVi`BjS#8C3%=S-Zg1ox``pq>(s^h;d_!ZbR`D|=mH|avJ_$Q7z^;V%f_v94rq}l z7PXPLb$gJj3Dxe5tDsL8mx#Y}^;-#KD>+FKjc1gYcf+_2yg*-oZTkG&L5ZAzG)kDI zXF|_;wVo`3oB#lwy=PPmb(CwC0iyi$J^*TJt3BC|ta5r45$wa&%eC>QgO7|`gZc7f zWcOFYx6^}UlbK=r92H%>$=cP7!O|wo4mFO|nVVUDlQjC4iLUrwMcfxOf3Zs3)rWuJ zmcoYiTXkw9Yl%}rmP_mJU$VyKSIuX)ZEF3b&TD|;MjZ%u--06Hx!VD`B9TQMPg<|p z@IKRtpxOg~%GxVaIQ|MO5=W)`=nD(O-7;g(si=$rTi2_RA*apZ&h4Th5;+tfPSeta zG%Nu~^i}>kHnm-si4jdf`N0+p_S~7|od)^qGGli3g`X(qS~$bod=hm#nC>qAtVpC( z10+^uBaNYkLd(Vjb{i5t^vTQ?>e7Ba8&O=BbEi!7IQ1)t2n3g>i}FRNNFpwk@xlXb z;L$2#)kgh3x7&wiaY(9Z77$DJWY@Ecs z?pf&wWsvDRMP|rCEb(K3rbB|z0Gop?ZNJEm2X6Z`=rgenw|d+He!E?Dxy~52>floIO-b>>+5oKUQsJAYX0V> ztuXQ4dr8s~p#UWcfW;!vT%*G{|MKm)=j*Awh*`O{EQMD3`X@VSsD90b?SJ zzYjXYwdH}};EuU`hl%>S_bJY+!vk~<60Zj}SGDW-r@&TOSB^qQKynzOkB+)yeW&(TFI&hegr&E5i|WECawP9taw6OnNoD|@QUSQd zwo;K?2dZ(EVBCfo2*avN1-gp5$4&OYu2WvsfO7=w0p9kYGG}R9cZum!VF0hATEsj5 z=M35{ES3 zOX5EF&)Btnyd|IyWwy`(<(HIbvZ$Ns7Wb~l&(Q~@A&WJdN;s zAPBonE#2H>{gmTTY=#=svQsiWKYLc+wrlMuN&33!i@uj~#P8h}f^udS@S0F$V$qOw zPN{~WArvFPQyqcyzb9W^4r@OY+G7ZP`!Dn~j}bQWfowz*^yK*FGpz{994#xc;v9G~ z?=Y^Dq#p#5IKYeV4-%jHB?DHeE)v)p(#&6;=sqf;arL8%Q9?1mR_PwF36p3*bQrL= zcbb?T9@TE7-F@5L>9nj|R7e$S{U=Y*_ zWWNg1j|v*ouWJ_iBB+jY&?`q>=qbb9NqqsFO}|?){9*cj4G;(BlDwCA?6!8--`qNN zmv-ZPE}g>yIzg>5LaT~}`OHML9KWq}+qShB*KM3$~oVDe;=se-C6G9`i z_nVj40KCF~QS*!BsK`3R0HkCX9uVgfC+71HM=Si0#iGxShfgV@$@SZ5g4237N5{{8 zL2}Az71KG4hFlIVy^LVYuf@-oR(snTgNQ1#wdtmGiCDY0HSF!}RnUR1A{QhJ0HnaS zAfJ{?A(9XxR9i7HvpwAaVq>{@W_k=V%5~7J-v^GGZ=p#lX}g9_OAV8>rt%)^{;{y? z<&RUDP^aaWK`A@M>?lY1eT2G0Qx60SBVmGr8yi$_MB_>|9W1oX%~oHO>3-1F=Qw>I z5qo#9(g&hT1-PcC4p6F#&3F7vE&eDes`uk3fK>~--uqzzvhU2Cb#_31J}s9p*K3~; zpjEZn>A%0;NPL)Xm;7sOLnXjY-Ks-nd{!yoP8tj8bM17ajw}lpQ5h$ScI{i#og;b; zd}LJN>nk8Gc9Li#ZcjuFEQK$_EolrL8yS3S4am=M3iX-1tF2WKitMxGSv`xk7ZhHw zM>d{anAUf3IBd)01wBoD+{Kredyoz+e>Q+WAj#`ys@JFVp#{-+a|Q>rH_&oy)Ut;1 z-9x=Tm1Ms?&MXX@0kfNp!7Sha>&qXQ+1hFV3e?q}EO=9a)-AyG^zZ|9`+eDZbr<}% z1}zD_9jW26Lz(N}V0W{8{*; z2znR=9}G3+8`ZoFpj$7mu4A8;j#g6l1c465A2FU;lne4+RJ?1Qr6Ci1ds0%0vtHy| zy3u}tm+xZ+@?3XSl<(g8m7D=TE93r4i|P2%WFVHQ;PUgog*g&umE_{ar;fnUKnP3T z8gcH-?d$t_+(Qx^!pJ#7ahDNV0zmyJx*}DOuuFfepHbH&AcMtTjF9bOija&78s`jf z1rraC?1{#|nGzZ87mvC8Oy~0pY8%fl9&aD{9~~GvmQb>&`}VkRsqH(Byf2rX{ke^- z3jyEAs9vh#gAl3RraORocLAugS-9}Ch#x=%YjDclcH=dasb1)sbf?{&3!r3uJQ&hy z{^urQt559BL5ruO}3~chLuZi>39NO zM#$m8m0YADMagV^s!bsOWyIT8WsSbi_ARKzTUP{H3Nh|5yNZG827aB#d-VlJ+HrZJWyhZ+6Rk78#51pT@tI$%BO7Kb}@vJ z*PP2nmy&qS__?3)>LQ3&EZ6Q=9jX(zINt!qG#<>C0fZhYg%qq=*-4-Z=sHsLX z3eB9Uz^*$8qE329V`Lqpu@ABYzAcg;JB163I7tB6CTmzR6W1nrf)93I2#qQz=~jkk zXZ5I&0o_&=eO_BwY5_P;&_0bZ5$+H}q_XAx8G$Up0(70Om=lGb;^YT;M7n!KVD_~v zFVvC@apm*eYBO7b`^Tl)JEoZVA>^JJ2Oh6iZfmETDDz)J{TqD zy}7$s+?fHv*!dCZBp0w>ElPJxJIj1KQx!v%3Al3O;hA=Bt~Oc1qE*8y+R6%yN7r8<)3fb<|zGC06HMao%+b170H-*0Xc`UX$;=RCTy zE7@L8R(B0jn_$NJe)~Jka;jkJUD00Y#~~d@5^(w+kQ}ElrDVncMDFfrQz&zEjW${&_9Z(c%*ew}`zAl^%F3 z=0OBtZ4_4&EUYK9g31MesQU~#p#^#lB~z&C(Gqc;Ga8b$dvI)kURNr=V1-ec*R$0DQRSa9l@~`TK6!Z?O_i?WWe`;?K*l{Xih@#EeL+O#35aLKRu?zW z!P3sC-niH(v3jMRs#|)c9+Yg6lwg-It>cA}jkIetwY-Hot5A5r@R3xbvC{ zhhY4wJV+!*$a4-|E3>izF*p&&@rE+{Tp{!UuTXEi`71{pr0^BR<`evY=s_R7N8KB$ zz&@GwR+Z`FwDaH+s5%Yj_$iof$2@09h7`Giq1l4B0N*5+S=eg_%%O#mB1JxAsQ7Jwd@;%z*D(pD&2B&);e)qz{IGx-cS9v9 zzq)cDEndZe6laCsnA;n5OJaTv_xAlVhuU#o|v;VsX{1+8*^5!8U^w`&LzA>fQDAwj=Aw zEtv7&^Z7NL?8y2-A^{l~_roRPNe9_Hx&cFt%z_Ekto%{6-XSH@*RE~_xLmBW9%>)I zz=NRacnqX$ND0DsN7ud^b@TFcw(R^4gzBE#dE50W9hcW7w<MFLA$C);YZR(?xj;D!%!0TtP=RMPoVIe!VoQxM z@j1mJMm01dNRB7(N}*6R2ZY(X!YfgId^UB2VbKMdA3>d5($M7aWOh@l%FrBV#=&7X zpVp@wZ{V-uFD?}OW)ipoyt&lYSc-Mi)fb;Y5#?eY=(kmApEe%_<)NwxI+s>C9hY-X zIwaO#O=eS5c!eQZ*@iSfFSHlZhDpglcAk>>@seCpm7R>MxI@yW$FI4lKDXGCNtFIm z99pnCx9j`bK9Eqv1wbman^NLSUOWNqfWrU`BZX1v(`6mr4W!Jpk%Q zrZdm~>KxUEI$$`_PgH*ro)_9CAnmI`+q6JZ7?f~9nifj`@|G*}`B}Y>=6~!cG6t~& zRc8xndNuC>3*nfA=DNqPzXkB?rg%Yv9w@|g z&vvDHv(yBiSO$gWXF4b*Qm$X7#34{NvF?P~{g^^_B{F~lmfswG6Lw?#)y6P(UrdRq z>bF152(XhS7Jc_0uCFSiu_zs*yTi7{_o~L8ouI%OneBdeY-Wjubm>z=qK2;yX8{2C z)DvyjhHW`dC3n$|$o-hwua#sy8Ta@EFDG0xSJng7^X`@JpD7nDmH;#^0Wl;KCj7|GdP)69z@VAE9uUE)lmS&J>_DN~3bok}gUTJlMlPbd{eC^MkI{@Sb28r@2FAOj*0EJR>yRAgssSfg8{Q#wBD6WlUUQ~)3e ztBu*N=gEydK+=sewXH(6$!r@~;YtSt_mgA+4?0?4+09o_qvtvd<44~9zU|fJvbQO& zjVr$im1O(G_5010f9iaVU8S{Y(e@Y-dmr3w)irV799d^1UfxiY+9foJ$(e%%pQhTJ9RrvPx`|YnM%24UB7Chz)64o)m{2 zEFbLUvlXoQX_We(%PSkQc0Hndg8!<&{aEkiz3ly+5V?7Z?AL5^wIdsV@kYL&W;PnN-?(fM=Cc|ytiuvkKMatmeyPLz z=ZXybDTevy3O#`I&|~P1F?6kQ;#@+~*97kgGuvE+jdW(pp>QTf*H~P8h37!Qfwk9W zYs*xmlW1fj+!2lpmbXW&0RpJ0MMyq?^C+ZnCcSiPosRdv4ww-gE}?s&3Ru+c0azb& zuM=w$csc{My|3Ce4z|EuP|Jo(;!1kZGY!tha8}=qt~Co{$H5ro%S;F+RycqK%uk`l zrE)_M1%S9~V*7Ko*`$O3 z7V4&McF)A02TK)uTmI=_acBD6KuB)td|`4K0#GA|Onmj_9vR^8}6B{F(8bXTfJ_fQf zf7@;EjFQ33&cbtx-TYJ~TSIJjC@&N)r?~Kt!E`yntRD-A?oj`f z>`K7u^UI!Wj~5a~wZmeQ^T>3&lDn5Zh^nAu6QUIz5^E7PwNGHjn=?Rzx??q^|k3iVrsn0bR(FP5+4`6lB_FL81`BpBdW+0O0G3 zdSJeY*cx_N7VDUWZ@$w|ovkeXl=PC-iyLrt+C~%YEM@-FKtxg%utUfxh3XX&Wom); zcSQ?!+{~E&2ywU5pVm01wKq$~`F0l|Q$280b z!4~5c55WREi(Dq4!(o3d=03E-`qt?is1BxfvoF4~oXaux^_Lj>!gY{_CDRT3x>qLn zz~g%Gs9j<&y7dT4O*K%6drnFDAV;b}DX@&Co;Nw+t&p&OanbFoHANdIO=RxNUbs0Q zWA52&i*j*mfH_cl?oV**ceTSY6iTg zc_l~1IdFf9zhH;+qnK{rM~Bi))9S78k9YWug(`_WnF+coRM?NWp*@>iVL?#n|3jx$4_1=I8)dpfzYE>Q@T;5#yrb8akO%xTQ12g5nfeN?t8}kD zcix(seCxd*PLWr2!)a35s+pxuGavENU%WMO^{|#832_b1m-jLc3u<-bWmv!Jk}p@7 zHy`J}tIlZ-ppfFA^|FHl>!dpII-kD%F4E#5t2AB+WYCGpp|E=2nE0Zp@Zv;@^+weEkgJz$!sJ5>DFadh-T z9Uyl+bVtScHnlfOnRB!4{8K|^HQT&3s{ISg%*489|I**)h1D1$-I_iRJE+}*36yGL zfK!?IZY6+NpSyW7iPvS;+eEBp66+GIkJti-=>zoB2j+742?EHSC1;e(^02)4|^b! z@3WIBw+Baye}Zf(Q+VLwh-C4{*(}dE&4-H(+ofK6;FsV%>dBZU(y^n3vEV2l09vlb zDGCMo!fOuQ%6xgcR3?e{w?|&G`CUr%oQAuGZ_acKS};H88&Q(OM`Yt#LudV~FGueA z@1mtPZsgJD&O4?Qa*i6Ecd&Rp^=eZY*WK&oD*4dZAKMJ-YtG)otJQ^Ttp^%?buq#c zZi}r`zWTOE&s}eyAZhpYj$!Gm8gX_E#YNhNu2JJ^3EluuW(*PakacHT0oBJG!}Kaa zy`Oagutbo}q#Q{20X4@Hp8OTA!E@hn*zO=Z-oTd~FYC2os@2|Po9_i12eq>^8vNxp zTBZnf9P{iI)tUl(qrArp1gu<1_LtU4}v>F~aM zU-)G^phw=U+#Q4up9w(5U;D2Kss8{N$JiOZ9-&zGh^k#}eEl0?*b5%W?3bK~XNE>2;QoA7eAjHz!x0AVa1U z@iwbSny~0R=Z%%(M*%BCR5cnqLH#r;XoS;a8<=RK!^;WjV%z;7d%raugcsAHi-2ct z+cfHqx=g3EvpBVpLL=1gS~6Ol>Jw3>gN#j!-I`X=N?cVi`_tmqv~AvpFNVpcdcgiG2^U< zaR?kJ4i@|Htr8??KIK%%J6JSEN%e;a2_FIYIyGg>Wb3{7K=91|vVUDRPJ{C?|I&k1ALIp3CM?7$Pl>i<-k}6?|k7d1-28 z+~$|fAL=BbfEucbnlayFMSmQ(1m;Xt5M#B4pKbz3ESeagHMn)!Z)LBw9f1Y3=Fh+M z$=Ue&b6D2hN3-hEkVRct8kr1dI(0e_A;{qR;bys7Eu?kZAHW$U5F!^f)3i;6FD<6e z-y*7FlK?|(E&n>4wmU@;=aa=Ud_{{eb)P?(MJ#t;z59+l_)7@OGXo(fRAZhPT)ar| zMb&PB%0d5v^UJjcU5>raY^;55jHVWuKV(6?M#_x;?zZK^&>>9Ar+bw)2S@aqSI)J% zodve$7YH4%j**f6B%Jw?GVHIHaLZj00+L)kHPy)$#em2`^y6j+|vQLJ~>2{QI z>Upm1Q7K_ytM$(GNHuKpX=U=@D9Bpe-P36@Aukl9Nra7M@p@*OIx}>2G8>;yWIc`Ofm|?G>m}$)gkA z(3gJs4utqVvzxZjRL^Jo(_6gAGiVvy*pK||bnCfLX|W5_)MU0aS8cM}&>Rol4pft9 zBtDAR=11(w0PZ!XkHuTqZLVzz`FmPO9uQBUhZA?Eg#0Dyh|?Xj2LrWb&RR*xw`#Jb zG%>aBpG=}Gkz#kW2-Q`9!_QxP&0MY*cWnwsU&p9MKYCxU`kkmB<%B>?sPYuELaJ)b z#j8oHisnF@%#x%Z4iPAO+*kYUm4Wv*W?Mcyy$X4$^a0!(SDJGQ_`uU#fR>?!i;obq zev8?j9;NgSdhCFoJxs4H+ZYi zg_|WG5ND1TTb3;$>$<{X9%|?xEEXSV63wJKc0rXU5macROyQFsAN1YKZ}pK+-#VD_ z*X9)z1!a$-szf)ulU4C|OS{p;&!-4R;c~gmNkr@sTA!>0T6%xo=FTQ&f9}TNzpU3y z6-YRh$*+L*K#fLoPf$BXY|m{CFW&($`d)B(X5$UpYMj^sN?kb_-#gO{x7@26uV`jN z(k29-w};qL)lwDnakLDUyFbrBPj7)C;F)@1N|*lJc+$A!gE$mVk=Rp);;%*TbZZ$Z zzf1$O)U(g=jppxYFAYCVJuND;7h*h8`!%`oc&?$YjI_N;XNEzs)?>)Ib6Jx`&l`7|KG0H2D&E!yEKxCuq4oQ(wNlpt z*)H_-FT;s~T8JG?P^uNRpaSS&EU+nn z6NQKuYb{oBHrrT#|BEKuqjWWZ#$@Q4FMiWf)(S~Ro^+n?&1zf@mtK4Pu&Fz>(cr=J zFR(elPx7!o5rB$pfD0t}!)+`*;8V~~fMQU2j6LwFLn)zk7 z*%!eXi~Iec1<_+$v2)M>3u*2A=XqGY>Yt~@y^NnF7fPtPZBXXG^?k19Uh6AtdT54&L=v4^v(nqMJ3W}E z8EaQ|vwcJ75xiQm1IT6IZsip;A6o1CSKV(pgHs+PQVjF8n z^4+&r7$VUJ6&`xzLY%aI#0J_u$U79}{fs-39p%r6+x+OPG#sAObiWq~qy7{SQvHy@>?!=hg*W$_nqdNF7bti>T4 z4k#|~tt|mP{=-AUl(InWV&P{-^nqZXcBqeI=ri{R;$(4Aq;=rLSWa0`7{*>S5NYP1 z(tM~oqymN~XSRZ|`;E>6yHVdUHQC)qeQvf5*D6}oi{YLhu~6mq{BuXV9cC*`W^0yr07#ja z`%WnKULh+O)|JDZJiwI^Y{UB@WzlQVrep%><+mLBHK$(Z#k7k8{<(SMvQs2DYpl}~ zU0dQ?MO@?4;1@?t$1McQrME@}yzQ>FC+41PY1q4$;9>lEm|tKf^mtDOs;AHhbp*yQ zoMG*bxExnnC#6NbVaoZ;658wP7~8{Ky76 zt#;|v+rVP1_1wr#W%;{7+))kde5VT>YTp3$4Dq)efUz1g)4vvP?h~X8fvW_@p2h*W zgTHna>16e2q$f&eKhGs3R+cYN$MFw-#u4*qOvo3^1nxDnEwFt~t~s{}D-C%q2=t^! z8)-)g3G_5prKt1gy_Qx?UxVz@Kp)O38Juv=h#fsm(SO2g>&AOiCA$?%ZUoK`XCsx_ z>iudk4r$=>{`sgkpB2#vII6b0X_bg6H{KTX?s*hX`4Mo2Nxo+Z4pnp0BSJEQn{sGN z{#ZK@;kH5b=L4qaFvgLRQ3GEKQ}+!J??}n=$j8Hb0X!|QAkSYrT?feLjmDy!V`sw9 z?@~YZxz4kM*XZE*ONUKE!nH+vIx0J5hxeT-fh|O;U8IxXPpsRWj-LazTf{-uJjH(X zDzMC^+m+`fC2oKt*ze~B{sjJ0|8Nb?hrXBi9JFdzL+1_59~{hOCiCz|d&w1O=ZKAa z5LfH^^(J~KzBs7k920&{e|H3S+3Af8n8fsU(u3F7f&!m($?y?ip;iVbC?7cPE&?G= zeW%>Ez)232Ahuj)-%~P1!<5EsV$HJyb^HOR4sp0Gko;y{NEp3#giSXmJ31ZP_wD@M zkqPR29AfCwl38)8NKY|aql7)VI}3f` zzR24+kls?EW6sgQj93Clnl{V9j9fwfki8`*nIiJKh#!aUIsXkq&nfJ%)dwYv2f+ws z{uJ0E9JDavqaMZ0bbpnfaCmI1$-$_HLn&ceHT^5YvDs&> ze+^x665*!5P4gyXM+u9C%@9XpMMNw+jK(bYq`$06i-1w8+mm)yoLN|xb_hKf0TraU zoePQmXT5xeoC)EfNn8lZW(E_{Ls)P%FZlHBq=UpBSO!%0Pd zwhucTdu>kX_f8Z7e{U2n>YPqkje3t@sH7+Nn8f_Y)S23rPN|)PrB{O@pscILXrOT8 zh9FJs#)#v#-1X1u=x@oqdbay4%#S;nOd2a4YF39aO+?=TKNc8*f6k(&F}GY7e;(ap zs+P)ZzvCt%P_vMns_uWVhwXk*8Td zfs@Q!ERrq<@uMXr%pv=U;K*}vxzE)PlU^j0;MCf{M%vw&GUSINy*Rli1WITw@E5w?&JG`px6L# z3UA@7ul~Fu|GLb^S2-3*-<7@Sv{y;ok}PLPnPR zMU3_E+y7Op(uBF;n84`|Dss)=&PPK;=6D9ytN)ey>85dZ@k{mG;}wAbGGh3 ztMdR@qn&n`=+WtBl>$D{frb+BjblL+$$Y zCZ*U*mMu%>($_*;A#uGNcck#Mu9$O5By>7P7wl;77}%+h1Sz zk8C)Z@-6VO`mjZO-te21MrXi=Ru)P7N8S#p^2@zWrt169D6u`XpoQsfh#4HHyL$7_ z;t=Wr(_==9J*D6Ju{6HTZdSua-Y73*=4}2`MzmLIBlgjv^Ywg%6h@eNLFM$2z0e1b zD1 zYj%B?y*q0}lKl7UT+uFs(+y6oxt%P_@0;ddcJ3Q@B60B+T{44L8nYRhv&E^uRD4yzRBrQ`lzwm~P2#*cO+rnvk;C8VjapW5t71aw3xsC7lb&o?3|4 zY2Rk%oUUUD2Heq=vSnO8bmXwQrmmfH%GbYU5HAmb4wMOx&F${=Nmt)#YR9i7FZ~c! zr}@~WsbQ|z$_zmEmf%xTjA>01<3#s#!QxX*w}_kV&M8nHAmaz;vK|KJvW5o|FO6f# z)g}&xYjbdfaob&8qOE#*hdjB~&o{+r`Gjd#wmIe2sdkwyTK!hAka}w8Z>5kd|GPb) zL>}bjo0=0N?lMP~m-)pmugq~tZZd(lWcMv2*}khP)=~7dzM-BG=1e&XH*5qwMVA=n zNLtWHWBd#N!NDvU8*CSHk=)ehI05nG0O}qH(<|3w%a4poK&Ja1JT2v z^PkP-KEpWS!~v%C-1g<9j-u8~S{!&(l*_C2S@hETbw^NKvZi08Gm7x#5{uInOb&lC z>EKZ7EaPdMcz80#)eNymjqofT{hTK-iFRN2Y0>Q`Ba}SG+f+9~&;_Blv;o`6=mf|Q zYTTU=TJV$lL7gJ{M(hUFnJkhxh7)&s3OdBG#+6_Jbn!-Q>x-&}>tjp$3(c>MF3v8h zNMGXlW@ZB6^nhGQWtV+2KaQUhVp|5$Zmo7ui$T%IEZt;S8gi*gRLuw%)5F>ak^$$r zrQ=3$tu)^>WicTVvk*6tnd;gRq}%VGIxJ`$hywL|U=5Kh-;a_pRAl z;Y$ZfhdABuV3P!81)%*@N@j_w>v=hBL=v?K=T-FW^ev>e!f4%ACh>(&HpzrD0Z)?j zP5RLivTxqk2YT|wuQ?-NR#?MtB=!0dFf5x$!S$N+j5Ej%cU|b&7LNOpJ`@)>jbhr# z429T!$H{s?kBzJm#Auvmw-_W7)y~%MkYgVvq60Yt63vLL#Exq$Z1bG4m?zf` zz$02=lG~34zw>ZA$bNi3(3qEOtEX1}5(su&bm?r#9|u6Pb2)}q4~N?Wq;<*3Gc?J} zsE(1~6k%^BIn;1UTg*1jRBg?Bqu~TD;fNa2q>^1yo}-0)LI*k_@-()b&I2MMGo~gs zl+-gx$=f0)dkh+)2|Zucsf_bUq_}Xv(~OMrj3GT;KGU8{w#4xp5Ag(e=_2Z8HvxM_ z_vrF{lDM8|zyT6a@bmtrLqOnyYWmu?JZ7*xa+~D=>~W{&EiRg`1erz2u<#WzsH2+d zr;vSuKlp$_6?O*ws6EX-G!fOY!Igx&<7gd`B*S6D2JBw#HFW5yIWZw9im{~@aXR%i=+_lw42SW3q4WwaSox@BBP8yLXozsb3* zTA+=9IEydS0Jh-ndM}MwB<-so*6FtD384wOlR1Nqb)ulm(MKHOZC|Fu%{O{09+4j> z3YeJkuAX{3(ZJ8we;_XhhTr}MWXGtKN)^mt#M0A^)quP76Smvh&p4{<(Cz{&NZDB9 zK7N+AbSgl@Ve9}tpR2b30hj@AJln=;`sQW0nEY=aRm|9 zA9b^^wT0DZ>OhVx2pFea+uzL-VSK1_s>AO84(0#+%+h~7vICN~GeslzFr?-fZLYU0 z0`FxQ!SaV?4enG4{ufau-BiWrl|aLp9PR)Bx`hg#Wx-w%-e!~fXWq??bzNkYQsrf* zu%>p~!J00J3&vp<61Jt#rWXBoQh>6NCu zcMO~WXERy&$;5#cbtN=6{p-MHt@eQN-5W6$XalQ^hTCH}a~u7|hi#JW@qz^d6lJU` zQZ$%3O!NXW-AEpOB<(u(XORp!zNj&!kLNlwLrEUt&yPEsSaHi8G%@8p*9=?p+vDWL z>g-L!S=3Oln3mnIv4kC3=$9XOHe)|efg5ypeAgyxivh$zCObr&mET!@9WC;Kj&<*f#J>UrS>k7>nt4Av`9|b!q5I6WiY=UU@iT{e!N$47zlzg_tUrtpjs5m&_W;U4Wn#*Su0 zhXp;*Cs|Fu7(RFrPR%f%XLvLlw_b=y{^ogjSYjUra6Q2EPMUcJl9 znW;~MzAxLcFiw;x;fe$jkH#d_5OR&Kc*4+`t}ggZMvwg7jF z6Je{@{KqYJhrs$CA3FZ|#}?pjuYK0ar0)F^7r@2z_q>l)hCO?}Xx?YO=ZO61^skO7w&QPGtJn@j zbo?2Eis(>8$NQ9~$Q_E@@ga2r5g|n?|4SvIhz><`D568rcl@opQ1l%ig5u9V=6@`A z5DeD6UbAMc@Y}