From 63055c36f300cc863646e8f8397954bf2d3a7536 Mon Sep 17 00:00:00 2001 From: isaaclombardssw Date: Wed, 5 Aug 2026 12:46:48 +1000 Subject: [PATCH 01/16] feat: generate per-rule Open Graph images - closes #2698 Rules pages emitted zero og:/twitter: meta tags, so shared links had no preview. This was a regression from the Gatsby migration: the old src/components/head/head.js set the full tag set with a default image, and nothing replaced it when it was deleted in 3c0fd0b. Adds Next metadata (metadataBase, openGraph, twitter) plus opengraph-image.tsx routes that render a card per rule with the author photos pulled from SSW.People.Profiles, reusing the slug convention already in AuthorsCard. Co-Authored-By: Claude Opus 5 (1M context) --- app/[filename]/opengraph-image.tsx | 32 +++++ app/[filename]/page.tsx | 31 +++-- app/layout.tsx | 24 +++- app/opengraph-image.tsx | 13 ++ components/AuthorsCard.tsx | 24 +--- components/og/card.tsx | 203 +++++++++++++++++++++++++++++ lib/authorImage.ts | 30 +++++ public/og-polygon.png | Bin 0 -> 116238 bytes scripts/og-verify.mjs | 82 ++++++++++++ 9 files changed, 404 insertions(+), 35 deletions(-) create mode 100644 app/[filename]/opengraph-image.tsx create mode 100644 app/opengraph-image.tsx create mode 100644 components/og/card.tsx create mode 100644 lib/authorImage.ts create mode 100644 public/og-polygon.png create mode 100644 scripts/og-verify.mjs diff --git a/app/[filename]/opengraph-image.tsx b/app/[filename]/opengraph-image.tsx new file mode 100644 index 000000000..e4afbc969 --- /dev/null +++ b/app/[filename]/opengraph-image.tsx @@ -0,0 +1,32 @@ +import { ImageResponse } from "next/og"; +import { OG_CONTENT_TYPE, OG_SIZE, OgCard } from "@/components/og/card"; +import { siteTitle } from "@/site-config"; +import client from "@/tina/__generated__/client"; + +export const size = OG_SIZE; +export const contentType = OG_CONTENT_TYPE; +export const alt = "SSW Rules"; + +// Cards only change when a rule's title or author list changes +export const revalidate = 60 * 60 * 24; + +export default async function OpengraphImage({ params }: { params: Promise<{ filename: string }> }) { + const { filename } = await params; + + let title = siteTitle; + let authors: { title?: string | null; url?: string | null }[] = []; + + try { + const rule = await client.queries.ruleDataBasic({ relativePath: `${filename}/rule.mdx` }); + if (rule?.data?.rule?.title) { + title = rule.data.rule.title; + authors = (rule.data.rule.authors ?? []).filter(Boolean) as typeof authors; + } + } catch { + // This route also serves category pages. Resolving a category title needs the + // paginated topCategoryWithIndexQuery walk that page.tsx does, which is too heavy + // per-image - categories fall back to the site-title card for now. + } + + return new ImageResponse(await OgCard({ title, authors }), size); +} diff --git a/app/[filename]/page.tsx b/app/[filename]/page.tsx index c114d2347..759078fae 100644 --- a/app/[filename]/page.tsx +++ b/app/[filename]/page.tsx @@ -338,15 +338,21 @@ export async function generateMetadata({ params }: { params: Promise<{ filename: const category = await getCategoryData(filename); if (category?.data?.category && category.data.category.__typename === "CategoryCategory") { const categoryData = category.data.category as any; + const title = `${categoryData.title} | SSW.Rules`; + const url = `${siteUrl}/${filename}`; const metadata: any = { - title: `${categoryData.title} | SSW.Rules`, - alternates: { - canonical: `${siteUrl}/${filename}`, - }, + title, + alternates: { canonical: url }, + // No `images` here on purpose - opengraph-image.tsx supplies it, and setting + // it explicitly would override the generated card. + openGraph: { title, url, type: "website" }, + twitter: { card: "summary_large_image", title }, }; if (categoryData.seoDescription) { metadata.description = categoryData.seoDescription; + metadata.openGraph.description = categoryData.seoDescription; + metadata.twitter.description = categoryData.seoDescription; } return metadata; @@ -354,15 +360,20 @@ export async function generateMetadata({ params }: { params: Promise<{ filename: const rule = await getRuleData(filename); if (rule?.data?.rule?.title) { + const title = `${rule.data.rule.title} | SSW.Rules`; + const url = `${siteUrl}/${filename}`; + const description = rule.data.rule.seoDescription || extractBodyPreview(rule.data.rule.body) || undefined; + const metadata: any = { - title: `${rule.data.rule.title} | SSW.Rules`, - alternates: { - canonical: `${siteUrl}/${filename}`, - }, + title, + description, + alternates: { canonical: url }, + // No `images` here on purpose - opengraph-image.tsx supplies it, and setting + // it explicitly would override the generated card. + openGraph: { title, description, url, type: "article" }, + twitter: { card: "summary_large_image", title, description }, }; - metadata.description = rule.data.rule.seoDescription || extractBodyPreview(rule.data.rule.body) || undefined; - if (rule.data.rule.isArchived) { metadata.robots = { index: false, follow: true }; } diff --git a/app/layout.tsx b/app/layout.tsx index caa097c9a..f39d01ada 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -8,6 +8,7 @@ import "@/styles.css"; import UserClientProvider from "@/components/auth/UserClientProvider"; import AppInsightsProvider from "@/components/providers/AppInsightsProvider"; import { TailwindIndicator } from "@/components/ui/breakpoint-indicator"; +import { homepageTitle, siteDescription, siteTitle, siteUrl, social } from "@/site-config"; const fontSans = FontSans({ subsets: ["latin"], @@ -25,10 +26,27 @@ const lato = Lato({ weight: "400", }); +const defaultTitle = `${siteTitle} | ${homepageTitle}`; + export const metadata: Metadata = { - title: "SSW.Rules | Secret Ingredients to Quality Software (Open Source on GitHub)", - description: - "Secret Ingredients to Quality Software | SSW Rules provides best practices for developing secure, reliable, and efficient .NET, Azure, CRM, Angular, React, Dynamics, and AI applications. Learn more today!", + // Lets Next resolve the opengraph-image.tsx routes to absolute URLs, which social + // scrapers require. Without it og:image is emitted as a relative path and ignored. + metadataBase: new URL(siteUrl), + title: defaultTitle, + description: siteDescription, + openGraph: { + title: defaultTitle, + description: siteDescription, + url: siteUrl, + siteName: siteTitle, + type: "website", + locale: "en_AU", + }, + twitter: { + card: "summary_large_image", + site: `@${social.twitter}`, + creator: `@${social.twitter}`, + }, }; const jsonLd = [ diff --git a/app/opengraph-image.tsx b/app/opengraph-image.tsx new file mode 100644 index 000000000..9f08f1874 --- /dev/null +++ b/app/opengraph-image.tsx @@ -0,0 +1,13 @@ +import { ImageResponse } from "next/og"; +import { OG_CONTENT_TYPE, OG_SIZE, OgCard } from "@/components/og/card"; +import { homepageTitle } from "@/site-config"; + +export const size = OG_SIZE; +export const contentType = OG_CONTENT_TYPE; +export const alt = "SSW Rules"; + +// Default card for every page without one of its own - home, search, latest-rules, +// archived, user, orphaned. Inherited automatically by Next's metadata resolution. +export default async function OpengraphImage() { + return new ImageResponse(await OgCard({ title: homepageTitle }), size); +} diff --git a/components/AuthorsCard.tsx b/components/AuthorsCard.tsx index 30e7688bd..1d04b6cbd 100644 --- a/components/AuthorsCard.tsx +++ b/components/AuthorsCard.tsx @@ -4,6 +4,7 @@ import Image from "next/image"; import { useCallback, useEffect, useMemo, useState } from "react"; import { tinaField } from "tinacms/dist/react"; import { Card } from "@/components/ui/card"; +import { githubAvatarUrl, profileImageUrl } from "@/lib/authorImage"; interface Author { title?: string; @@ -28,28 +29,7 @@ export default function AuthorsCard({ authors }: AuthorsCardProps) { if (img?.includes("http")) return img; - if (url?.includes("ssw.com.au/people")) { - // Extract the part after '/people/' - const match = url.match(/people\/([^/?#]+)/); - const slug = match ? match[1] : null; - - if (slug) { - // Capitalize each word - const formattedTitle = slug - .split("-") - .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) - .join("-"); - - return `https://raw.githubusercontent.com/SSWConsulting/SSW.People.Profiles/main/${formattedTitle}/Images/${formattedTitle}-Profile.jpg`; - } - } - - if (url?.includes("github.com/")) { - const gitHubUsername = url.split("github.com/").pop(); - return `https://avatars.githubusercontent.com/${gitHubUsername}`; - } - - return placeholderImg; + return profileImageUrl(url) ?? githubAvatarUrl(url) ?? placeholderImg; }, [placeholderImg] ); diff --git a/components/og/card.tsx b/components/og/card.tsx new file mode 100644 index 000000000..fe495bb84 --- /dev/null +++ b/components/og/card.tsx @@ -0,0 +1,203 @@ +import { readFile } from "node:fs/promises"; +import path from "node:path"; +import { profileImageUrl } from "@/lib/authorImage"; + +export const OG_SIZE = { width: 1200, height: 630 }; +export const OG_CONTENT_TYPE = "image/png"; + +const MAX_FACES = 2; // 78% of rules have <= 2 authors; the rest get a "+N more" +const OVERLAP = 16; +const AVATAR = 96; + +export interface OgAuthor { + title?: string | null; + url?: string | null; +} + +const publicFile = (relative: string) => path.join(process.cwd(), "public", relative); + +const dataUri = (buffer: Buffer, mime: string) => `data:${mime};base64,${buffer.toString("base64")}`; + +/** + * SSW's polygon background, inverted offline so it reads light. + * + * Fading the near-black brand asset (SSW.Website public/images/polygonBackground.png) + * into a light card crushes its facet contrast proportionally - at 0.15 opacity only + * 7 RGB levels survived, which is invisible. Inverting it once instead keeps 53 levels: + * + * magick polygonBackground.png -resize 1200x630^ -gravity center -extent 1200x630 \ + * -negate -normalize -sigmoidal-contrast 3,50% +level 79%,99.5% public/og-polygon.png + */ +const loadPolygon = async () => dataUri(await readFile(publicFile("og-polygon.png")), "image/png"); + +/** + * Detects the real image type from magic bytes rather than trusting the response header. + * + * 5 of the 203 profile photos in SSW.People.Profiles are PNGs saved with a .jpg + * extension (Chris-Briggs, Florent-Dezettre, Eli-Kent, Igor-Goldobin, Stanley-Sidik). + * raw.githubusercontent serves those as `content-type: image/jpeg` based on the + * extension, and Satori throws "Invalid JPEG" if it believes the header - which would + * fail the whole card for any rule those five authored. + */ +const sniffImageType = (buffer: Buffer): string | null => { + if (buffer.length < 12) return null; + if (buffer[0] === 0xff && buffer[1] === 0xd8 && buffer[2] === 0xff) return "image/jpeg"; + if (buffer.subarray(0, 8).equals(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]))) return "image/png"; + if (buffer.subarray(0, 3).toString("ascii") === "GIF") return "image/gif"; + if (buffer.subarray(0, 4).toString("ascii") === "RIFF" && buffer.subarray(8, 12).toString("ascii") === "WEBP") return "image/webp"; + return null; +}; + +/** + * Author photos are fetched here rather than handed to Satori as URLs, so a missing or + * unreadable profile falls back to the placeholder instead of failing the whole image. + * 13 of the 216 author URLs in the content have no profile photo (alumni, or non-person + * URLs like /people/alumni). + */ +const loadAvatar = async (author: OgAuthor): Promise => { + const url = profileImageUrl(author.url ?? undefined); + + if (url) { + try { + const res = await fetch(url, { next: { revalidate: 60 * 60 * 24 } }); + if (res.ok) { + const buffer = Buffer.from(await res.arrayBuffer()); + const type = sniffImageType(buffer); + if (type) return dataUri(buffer, type); + } + } catch { + // fall through to the placeholder + } + } + + return dataUri(await readFile(publicFile("uploads/ssw-employee-profile-placeholder-sketch.jpg")), "image/jpeg"); +}; + +const Avatar = ({ src, index, total }: { src: string; index: number; total: number }) => ( +
+ +
+
+); + +/** + * Builds the shared Open Graph card. Callers pass already-resolved data so this stays + * synchronous-ish and testable; use `resolveOgCard` to gather the images first. + */ +export async function OgCard({ title, authors = [] }: { title: string; authors?: OgAuthor[] }) { + const shown = authors.filter((a) => a?.title).slice(0, MAX_FACES); + const extra = authors.length - shown.length; + + const [polygon, avatars] = await Promise.all([loadPolygon(), Promise.all(shown.map(loadAvatar))]); + + // Author names are content data and can be long - the longest real pair is 52 chars. + // Clamp them rather than trusting them to fit. + const names = shown.map((a) => (a.title ?? "").trim()).join(", "); + + return ( +
+ + + {/* The title sat on 56 levels of facet noise, which fights the letterforms whatever + the contrast ratio. This flattens the top third; the geometry stays intact below. */} +
+ {/* Kept separate from the scrim above - interpolating a white stop straight into a + black one produces a grey haze mid-transition. */} +
+ +
+
SSW.RULES
+ {/* Longest real title is 107 chars - clamp so it can't push the byline off-card */} +
{title}
+
+ + {shown.length > 0 ? ( +
+
+ {avatars.map((src, i) => ( + + ))} +
+
+ {names} +
+ {/* `extra && ...` would render a literal "0" when there are no extra authors. + The label is one interpolated string, not `+{extra} more` - JSX would split + that into three text nodes, and Satori rejects multi-child divs that are + not explicitly display:flex. */} + {extra > 0 ?
{`+${extra} more`}
: null} +
+ ) : ( + // 235 rules (and every category page) have no authors +
ssw.com.au/rules
+ )} +
+ ); +} diff --git a/lib/authorImage.ts b/lib/authorImage.ts new file mode 100644 index 000000000..400265cd7 --- /dev/null +++ b/lib/authorImage.ts @@ -0,0 +1,30 @@ +/** + * Derives an SSW People profile photo URL from an author's profile link. + * + * Profile images live in SSW.People.Profiles under a Title-Cased directory name, e.g. + * https://www.ssw.com.au/people/adam-cogan + * -> .../main/Adam-Cogan/Images/Adam-Cogan-Profile.jpg + * + * Shared by the authors card and the Open Graph image route so the convention only + * lives in one place. + */ +const PROFILES_REPO = "https://raw.githubusercontent.com/SSWConsulting/SSW.People.Profiles/main"; + +export const profileImageUrl = (peopleUrl?: string): string | null => { + const slug = peopleUrl?.match(/people\/([^/?#]+)/)?.[1]; + if (!slug) return null; + + const dir = slug + .split("-") + .filter(Boolean) + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join("-"); + + return `${PROFILES_REPO}/${dir}/Images/${dir}-Profile.jpg`; +}; + +export const githubAvatarUrl = (url?: string): string | null => { + if (!url?.includes("github.com/")) return null; + const username = url.split("github.com/").pop(); + return username ? `https://avatars.githubusercontent.com/${username}` : null; +}; diff --git a/public/og-polygon.png b/public/og-polygon.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c768900099a7a865ac2e635ae36c8cdd959000 GIT binary patch literal 116238 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 literal 0 HcmV?d00001 diff --git a/scripts/og-verify.mjs b/scripts/og-verify.mjs new file mode 100644 index 000000000..854c33503 --- /dev/null +++ b/scripts/og-verify.mjs @@ -0,0 +1,82 @@ +/** + * Renders components/og/card.tsx directly, bypassing Tina, so the Open Graph card can be + * eyeballed without running the whole site. Covers the cases that actually broke during + * development: multiple authors, no authors, over-long content, and unreadable photos. + * + * node scripts/og-verify.mjs [outDir] (default: ./og-preview) + */ +import { execFileSync } from "node:child_process"; +import { mkdir, rm, writeFile } from "node:fs/promises"; +import path from "node:path"; +import { ImageResponse } from "next/og.js"; + +const outDir = process.argv[2] ?? "og-preview"; +const build = path.join("scripts", ".og-card.build.mjs"); + +// card.tsx is TSX and imports via "@/" - bundle it before importing +execFileSync( + "./node_modules/.bin/esbuild", + [ + "components/og/card.tsx", + "--bundle", + "--format=esm", + "--platform=node", + "--jsx=automatic", + "--external:react", + "--external:react/jsx-runtime", + `--outfile=${build}`, + "--log-level=error", + ], + { stdio: "inherit" } +); + +const { OgCard, OG_SIZE } = await import(`../${build}`); + +const P = (title, slug) => ({ title, url: `https://www.ssw.com.au/people/${slug}` }); + +const cases = { + "1-single-author": { + title: "Do you know when to change the email subject (or appointment subject)?", + authors: [P("Adam Cogan", "adam-cogan")], + }, + // Igor's photo is a PNG named .jpg - regression case for the content-type sniffing + "2-many-authors": { + title: "Do you use the best tools for database schema changes?", + authors: [ + P("Adam Cogan", "adam-cogan"), + P("Igor Goldobin", "igor-goldobin"), + P("Adam Stephensen", "adam-stephensen"), + P("Thiago Passos", "thiago-passos"), + P("Brendan Richards", "brendan-richards"), + ], + }, + // 235 rules and every category page have no authors + "3-no-authors": { title: "Do you know the rules to better unit tests?", authors: [] }, + // Longest real title (107 chars, with emoji) + longest real name pair (52 chars) + "4-longest-content": { + title: "Do you create a Sprint Forecast email 📩? (aka Functionality to be developed per Sprint Planning)", + authors: [ + P("Christian Morford-Waite", "christian-morford-waite"), + P("Sebastien Boissiere", "sebastien-boissiere"), + P("Kosta Madorsky", "kosta-madorsky"), + P("Camilla Rosa Silva", "camilla-rosa-silva"), + P("Jerwin Parker Roberto", "jerwin-parker-roberto"), + ], + }, + // Neither author has a profile photo - must fall back, not fail the image + "5-missing-photos": { + title: "Do you have a rule authored by someone with no profile photo?", + authors: [P("Toby Goodman", "toby-goodman"), P("Ryan Tee", "ryan-tee")], + }, +}; + +await mkdir(outDir, { recursive: true }); + +for (const [name, rule] of Object.entries(cases)) { + const res = new ImageResponse(await OgCard(rule), OG_SIZE); + const file = path.join(outDir, `${name}.png`); + await writeFile(file, Buffer.from(await res.arrayBuffer())); + console.log(`wrote ${file}`); +} + +await rm(build, { force: true }); From bda6c0f3f8f82037c52e7723a69ded10a9dbdd6e Mon Sep 17 00:00:00 2001 From: isaaclombardssw Date: Wed, 5 Aug 2026 12:56:08 +1000 Subject: [PATCH 02/16] fix: add explicit og:title to every page Seven pages set only `title` in generateMetadata, so they inherited the layout's generic openGraph block - every one of them shared as "SSW.Rules | Secret Ingredients..." regardless of what the page actually was. Next does not derive og:title from `title`. Routes them all through lib/pageMetadata.ts, which builds title, description, canonical, openGraph and twitter together so the three cannot drift apart. It deliberately never sets openGraph.images: Next merges the opengraph-image.tsx card only when the page's openGraph has no `images` key (resolve-metadata.js:117). Co-Authored-By: Claude Opus 5 (1M context) --- app/(home)/categories/page.tsx | 26 +++++++--------- app/(home)/page.tsx | 8 ++--- app/[filename]/page.tsx | 55 +++++++++------------------------- app/archived/page.tsx | 9 ++---- app/latest-rules/page.tsx | 8 ++--- app/orphaned/page.tsx | 9 ++---- app/search/page.tsx | 8 ++--- app/user/page.tsx | 8 ++--- lib/pageMetadata.ts | 36 ++++++++++++++++++++++ 9 files changed, 72 insertions(+), 95 deletions(-) create mode 100644 lib/pageMetadata.ts diff --git a/app/(home)/categories/page.tsx b/app/(home)/categories/page.tsx index 1c04a82fc..d5a34f463 100644 --- a/app/(home)/categories/page.tsx +++ b/app/(home)/categories/page.tsx @@ -2,6 +2,7 @@ import Link from "next/link"; import TinaHomepageWrapper from "@/app/(home)/TinaHomepageWrapper"; import CategoryActionButtons from "@/components/CategoryActionButtons"; import { Card } from "@/components/ui/card"; +import { pageMetadata } from "@/lib/pageMetadata"; import { fetchCategoryRuleCounts, fetchHomepageData, fetchLatestRules, fetchRuleCount } from "@/lib/services/rules"; import { siteUrl } from "@/site-config"; import client from "@/tina/__generated__/client"; @@ -47,16 +48,14 @@ export default async function CategoriesPage() {
    - {topCategory.index - ?.filter(isVisibleCategory) - ?.map((item: any, subIndex: number) => ( -
  1. -
    - {item.category.title} - {categoryRuleCounts[item.category._sys.filename] || 0} -
    -
  2. - ))} + {topCategory.index?.filter(isVisibleCategory)?.map((item: any, subIndex: number) => ( +
  3. +
    + {item.category.title} + {categoryRuleCounts[item.category._sys.filename] || 0} +
    +
  4. + ))}
))} @@ -67,10 +66,5 @@ export default async function CategoriesPage() { } export async function generateMetadata() { - return { - title: "SSW.Rules | Categories", - alternates: { - canonical: `${siteUrl}/categories`, - }, - }; + return pageMetadata({ title: "SSW.Rules | Categories", path: "categories" }); } diff --git a/app/(home)/page.tsx b/app/(home)/page.tsx index 6c83db4fc..b0d5e5cc4 100644 --- a/app/(home)/page.tsx +++ b/app/(home)/page.tsx @@ -1,5 +1,6 @@ import { redirect } from "next/navigation"; import { TinaActivityWrapper } from "@/app/(home)/TinaActivityWrapper"; +import { pageMetadata } from "@/lib/pageMetadata"; import { fetchDiscussionData } from "@/lib/services/github/discussions.service"; import { fetchActivityLatestRules, fetchHomepageData, fetchRuleCount } from "@/lib/services/rules"; import { siteUrl } from "@/site-config"; @@ -31,10 +32,5 @@ export default async function Home() { } export async function generateMetadata() { - return { - title: "SSW.Rules | Secret Ingredients for Quality Software (Open Source on GitHub)", - alternates: { - canonical: `${siteUrl}/`, - }, - }; + return pageMetadata({ title: "SSW.Rules | Secret Ingredients for Quality Software (Open Source on GitHub)" }); } diff --git a/app/[filename]/page.tsx b/app/[filename]/page.tsx index 759078fae..6dc1b018d 100644 --- a/app/[filename]/page.tsx +++ b/app/[filename]/page.tsx @@ -2,7 +2,7 @@ import React from "react"; import categoryTitleIndex from "@/category-uri-title-map.json"; import { Section } from "@/components/layout/section"; import { extractBodyPreview } from "@/lib/bodyUtils"; -import { siteUrl } from "@/site-config"; +import { pageMetadata } from "@/lib/pageMetadata"; import client from "@/tina/__generated__/client"; import { CategoryWithRulesQueryDocument } from "@/tina/__generated__/types"; import ClientFallbackPage from "./ClientFallbackPage"; @@ -338,53 +338,26 @@ export async function generateMetadata({ params }: { params: Promise<{ filename: const category = await getCategoryData(filename); if (category?.data?.category && category.data.category.__typename === "CategoryCategory") { const categoryData = category.data.category as any; - const title = `${categoryData.title} | SSW.Rules`; - const url = `${siteUrl}/${filename}`; - const metadata: any = { - title, - alternates: { canonical: url }, - // No `images` here on purpose - opengraph-image.tsx supplies it, and setting - // it explicitly would override the generated card. - openGraph: { title, url, type: "website" }, - twitter: { card: "summary_large_image", title }, - }; - - if (categoryData.seoDescription) { - metadata.description = categoryData.seoDescription; - metadata.openGraph.description = categoryData.seoDescription; - metadata.twitter.description = categoryData.seoDescription; - } - - return metadata; + return pageMetadata({ + title: `${categoryData.title} | SSW.Rules`, + description: categoryData.seoDescription || undefined, + path: filename, + }); } const rule = await getRuleData(filename); if (rule?.data?.rule?.title) { - const title = `${rule.data.rule.title} | SSW.Rules`; - const url = `${siteUrl}/${filename}`; - const description = rule.data.rule.seoDescription || extractBodyPreview(rule.data.rule.body) || undefined; - - const metadata: any = { - title, - description, - alternates: { canonical: url }, - // No `images` here on purpose - opengraph-image.tsx supplies it, and setting - // it explicitly would override the generated card. - openGraph: { title, description, url, type: "article" }, - twitter: { card: "summary_large_image", title, description }, - }; - - if (rule.data.rule.isArchived) { - metadata.robots = { index: false, follow: true }; - } - - return metadata; + return pageMetadata({ + title: `${rule.data.rule.title} | SSW.Rules`, + description: rule.data.rule.seoDescription || extractBodyPreview(rule.data.rule.body) || undefined, + path: filename, + type: "article", + robots: rule.data.rule.isArchived ? { index: false, follow: true } : undefined, + }); } } catch (error) { console.error("Error generating metadata:", error); } - return { - title: "SSW.Rules", - }; + return pageMetadata({ title: "SSW.Rules", path: filename }); } diff --git a/app/archived/page.tsx b/app/archived/page.tsx index 24a0c382d..bb55fc428 100644 --- a/app/archived/page.tsx +++ b/app/archived/page.tsx @@ -1,6 +1,7 @@ import React from "react"; import Breadcrumbs from "@/components/Breadcrumbs"; import { Section } from "@/components/layout/section"; +import { pageMetadata } from "@/lib/pageMetadata"; import { fetchAllArchivedRules, fetchHomepageData, fetchLatestRules } from "@/lib/services/rules"; import { siteUrl } from "@/site-config"; import ArchivedClientPage from "./client-page"; @@ -21,11 +22,5 @@ export default async function ArchivedPage() { } export async function generateMetadata() { - return { - title: "Archived Rules | SSW Rules", - description: "Rules that have been archived", - alternates: { - canonical: `${siteUrl}/archived`, - }, - }; + return pageMetadata({ title: "Archived Rules | SSW Rules", description: "Rules that have been archived", path: "archived" }); } diff --git a/app/latest-rules/page.tsx b/app/latest-rules/page.tsx index 4d3aac732..073453b8b 100644 --- a/app/latest-rules/page.tsx +++ b/app/latest-rules/page.tsx @@ -1,4 +1,5 @@ import { Section } from "@/components/layout/section"; +import { pageMetadata } from "@/lib/pageMetadata"; import { fetchLatestRules, fetchRuleCount } from "@/lib/services/rules"; import { siteUrl } from "@/site-config"; import LatestRuleClientPage from "./client-page"; @@ -39,10 +40,5 @@ export default async function LatestRulePage({ searchParams }: LatestRulePagePro } export async function generateMetadata() { - return { - title: "Latest Rules | SSW.Rules", - alternates: { - canonical: `${siteUrl}/latest-rules`, - }, - }; + return pageMetadata({ title: "Latest Rules | SSW.Rules", path: "latest-rules" }); } diff --git a/app/orphaned/page.tsx b/app/orphaned/page.tsx index 3da8685fe..b1c60d03c 100644 --- a/app/orphaned/page.tsx +++ b/app/orphaned/page.tsx @@ -1,6 +1,7 @@ import React from "react"; import Breadcrumbs from "@/components/Breadcrumbs"; import { Section } from "@/components/layout/section"; +import { pageMetadata } from "@/lib/pageMetadata"; import { OrphanedRulesData } from "@/models/OrphanedRule"; import { Rule } from "@/models/Rule"; import orphanedRulesData from "@/orphaned_rules.json"; @@ -54,11 +55,5 @@ export default async function OrphanedPage() { } export async function generateMetadata() { - return { - title: "Orphaned Rules | SSW Rules", - description: "Rules that have no parent category", - alternates: { - canonical: `${siteUrl}/orphaned`, - }, - }; + return pageMetadata({ title: "Orphaned Rules | SSW Rules", description: "Rules that have no parent category", path: "orphaned" }); } diff --git a/app/search/page.tsx b/app/search/page.tsx index 17fcf7871..8e294ce9c 100644 --- a/app/search/page.tsx +++ b/app/search/page.tsx @@ -1,5 +1,6 @@ import { Suspense } from "react"; import { Section } from "@/components/layout/section"; +import { pageMetadata } from "@/lib/pageMetadata"; import { fetchLatestRules, fetchRuleCount } from "@/lib/services/rules"; import { siteUrl } from "@/site-config"; import RulesSearchClientPage from "./client-page"; @@ -19,10 +20,5 @@ export default async function RulesSearchPage() { } export async function generateMetadata() { - return { - title: "SSW.Rules | Secret Ingredients for Quality Software (Open Source on GitHub)", - alternates: { - canonical: `${siteUrl}/search`, - }, - }; + return pageMetadata({ title: "SSW.Rules | Secret Ingredients for Quality Software (Open Source on GitHub)", path: "search" }); } diff --git a/app/user/page.tsx b/app/user/page.tsx index b17631cc6..c9b28dcdd 100644 --- a/app/user/page.tsx +++ b/app/user/page.tsx @@ -1,5 +1,6 @@ import { Suspense } from "react"; import { Section } from "@/components/layout/section"; +import { pageMetadata } from "@/lib/pageMetadata"; import { siteUrl } from "@/site-config"; import UserRulesClientPage from "./client-page"; @@ -16,10 +17,5 @@ export default async function UserRulesPage() { } export async function generateMetadata() { - return { - title: "Profile | SSW.Rules", - alternates: { - canonical: `${siteUrl}/user`, - }, - }; + return pageMetadata({ title: "Profile | SSW.Rules", path: "user" }); } diff --git a/lib/pageMetadata.ts b/lib/pageMetadata.ts new file mode 100644 index 000000000..9f7abccd8 --- /dev/null +++ b/lib/pageMetadata.ts @@ -0,0 +1,36 @@ +import type { Metadata } from "next"; +import { siteUrl } from "@/site-config"; + +interface PageMetadataOptions { + title: string; + description?: string; + /** Path below the site root, e.g. "latest-rules". Omit for the home page. */ + path?: string; + /** "article" for individual rules, "website" for everything else. */ + type?: "website" | "article"; + robots?: Metadata["robots"]; +} + +/** + * Builds a page's metadata with matching og: and twitter: tags. + * + * Next does NOT derive og:title from `title`, and a page that sets only `title` + * silently inherits the layout's generic openGraph block - so every page shared as + * "SSW.Rules | Secret Ingredients..." regardless of what it actually was. Routing + * every page through here keeps the three in sync. + * + * Deliberately never sets openGraph.images: the opengraph-image.tsx routes supply the + * card, and setting images here would override the generated one. + */ +export function pageMetadata({ title, description, path = "", type = "website", robots }: PageMetadataOptions): Metadata { + const url = path ? `${siteUrl}/${path}` : `${siteUrl}/`; + + return { + title, + description, + alternates: { canonical: url }, + openGraph: { title, description, url, type }, + twitter: { card: "summary_large_image", title, description }, + ...(robots ? { robots } : {}), + }; +} From e314752ecfeba199580053fe9f0cc88e5b79d453 Mon Sep 17 00:00:00 2001 From: isaaclombardssw Date: Wed, 5 Aug 2026 12:58:32 +1000 Subject: [PATCH 03/16] fix: use the real category title on category Open Graph cards Categories are served by the [filename] route, so they hit the same image handler as rules. The rule query throws for them, which previously left every category sharing an identical "SSW.Rules" card. mainCategoryQuery returns every top and child category with its title and filename in one un-paginated call, so the title resolves without the topCategoryWithIndexQuery pagination walk that page.tsx needs for a full relativePath. Co-Authored-By: Claude Opus 5 (1M context) --- app/[filename]/opengraph-image.tsx | 33 +++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/app/[filename]/opengraph-image.tsx b/app/[filename]/opengraph-image.tsx index e4afbc969..bd9516c38 100644 --- a/app/[filename]/opengraph-image.tsx +++ b/app/[filename]/opengraph-image.tsx @@ -10,6 +10,30 @@ export const alt = "SSW Rules"; // Cards only change when a rule's title or author list changes export const revalidate = 60 * 60 * 24; +/** + * Looks up a category title by filename. + * + * mainCategoryQuery returns every top category and child category with its title and + * filename in a single un-paginated call, so this avoids the topCategoryWithIndexQuery + * pagination walk that page.tsx has to do to resolve a full relativePath. + */ +const categoryTitle = async (filename: string): Promise => { + const res = await client.queries.mainCategoryQuery(); + const topCategories = (res?.data?.category as any)?.index ?? []; + + for (const entry of topCategories) { + const top = entry?.top_category; + if (!top) continue; + if (top._sys?.filename === filename) return top.title ?? null; + + for (const child of top.index ?? []) { + if (child?.category?._sys?.filename === filename) return child.category.title ?? null; + } + } + + return null; +}; + export default async function OpengraphImage({ params }: { params: Promise<{ filename: string }> }) { const { filename } = await params; @@ -23,9 +47,12 @@ export default async function OpengraphImage({ params }: { params: Promise<{ fil authors = (rule.data.rule.authors ?? []).filter(Boolean) as typeof authors; } } catch { - // This route also serves category pages. Resolving a category title needs the - // paginated topCategoryWithIndexQuery walk that page.tsx does, which is too heavy - // per-image - categories fall back to the site-title card for now. + // This route serves category pages too - they have a title but no authors + try { + title = (await categoryTitle(filename)) ?? siteTitle; + } catch { + // Fall back to the site title rather than failing the image + } } return new ImageResponse(await OgCard({ title, authors }), size); From a1cba99604fc8eedabb7646fa356864a1b2a7d4d Mon Sep 17 00:00:00 2001 From: isaaclombardssw Date: Wed, 5 Aug 2026 13:02:11 +1000 Subject: [PATCH 04/16] feat: give category and home Open Graph cards more weight than rules Categories and the home page sit above individual rules but read lighter than them, because they have no author row to fill the bottom of the card. They now get a hub treatment: a larger title (their titles are shorter - the longest category is 62 chars against 107 for a rule) and the rule count in place of the byline. Counts come from the existing cached fetchCategoryRuleCounts and fetchRuleCount helpers. Co-Authored-By: Claude Opus 5 (1M context) --- app/[filename]/opengraph-image.tsx | 8 ++++++-- app/opengraph-image.tsx | 10 +++++++++- components/og/card.tsx | 15 ++++++++++++--- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/app/[filename]/opengraph-image.tsx b/app/[filename]/opengraph-image.tsx index bd9516c38..adefb65e1 100644 --- a/app/[filename]/opengraph-image.tsx +++ b/app/[filename]/opengraph-image.tsx @@ -1,5 +1,6 @@ import { ImageResponse } from "next/og"; import { OG_CONTENT_TYPE, OG_SIZE, OgCard } from "@/components/og/card"; +import { fetchCategoryRuleCounts } from "@/lib/services/rules"; import { siteTitle } from "@/site-config"; import client from "@/tina/__generated__/client"; @@ -39,6 +40,7 @@ export default async function OpengraphImage({ params }: { params: Promise<{ fil let title = siteTitle; let authors: { title?: string | null; url?: string | null }[] = []; + let ruleCount: number | undefined; try { const rule = await client.queries.ruleDataBasic({ relativePath: `${filename}/rule.mdx` }); @@ -47,13 +49,15 @@ export default async function OpengraphImage({ params }: { params: Promise<{ fil authors = (rule.data.rule.authors ?? []).filter(Boolean) as typeof authors; } } catch { - // This route serves category pages too - they have a title but no authors + // This route serves category pages too. They have no authors, so they get the + // hub treatment instead - bigger title, and the rule count carrying the weight. try { title = (await categoryTitle(filename)) ?? siteTitle; + ruleCount = (await fetchCategoryRuleCounts())[filename] ?? 0; } catch { // Fall back to the site title rather than failing the image } } - return new ImageResponse(await OgCard({ title, authors }), size); + return new ImageResponse(await OgCard({ title, authors, ruleCount }), size); } diff --git a/app/opengraph-image.tsx b/app/opengraph-image.tsx index 9f08f1874..e9ed3004f 100644 --- a/app/opengraph-image.tsx +++ b/app/opengraph-image.tsx @@ -1,5 +1,6 @@ import { ImageResponse } from "next/og"; import { OG_CONTENT_TYPE, OG_SIZE, OgCard } from "@/components/og/card"; +import { fetchRuleCount } from "@/lib/services/rules"; import { homepageTitle } from "@/site-config"; export const size = OG_SIZE; @@ -9,5 +10,12 @@ export const alt = "SSW Rules"; // Default card for every page without one of its own - home, search, latest-rules, // archived, user, orphaned. Inherited automatically by Next's metadata resolution. export default async function OpengraphImage() { - return new ImageResponse(await OgCard({ title: homepageTitle }), size); + let ruleCount = 0; + try { + ruleCount = await fetchRuleCount(); + } catch { + // A count of 0 still renders; better than failing the image + } + + return new ImageResponse(await OgCard({ title: homepageTitle, ruleCount }), size); } diff --git a/components/og/card.tsx b/components/og/card.tsx index fe495bb84..a1902819d 100644 --- a/components/og/card.tsx +++ b/components/og/card.tsx @@ -111,7 +111,11 @@ const Avatar = ({ src, index, total }: { src: string; index: number; total: numb * Builds the shared Open Graph card. Callers pass already-resolved data so this stays * synchronous-ish and testable; use `resolveOgCard` to gather the images first. */ -export async function OgCard({ title, authors = [] }: { title: string; authors?: OgAuthor[] }) { +export async function OgCard({ title, authors = [], ruleCount }: { title: string; authors?: OgAuthor[]; ruleCount?: number }) { + // Categories and the home page sit above individual rules, so they get a heavier + // treatment: a larger title (their titles are shorter - longest category is 62 chars + // against 107 for a rule) and the rule count in place of the author byline. + const isHub = ruleCount !== undefined; const shown = authors.filter((a) => a?.title).slice(0, MAX_FACES); const extra = authors.length - shown.length; @@ -165,7 +169,7 @@ export async function OgCard({ title, authors = [] }: { title: string; authors?:
SSW.RULES
{/* Longest real title is 107 chars - clamp so it can't push the byline off-card */} -
{title}
+
{title}
{shown.length > 0 ? ( @@ -194,8 +198,13 @@ export async function OgCard({ title, authors = [] }: { title: string; authors?: not explicitly display:flex. */} {extra > 0 ?
{`+${extra} more`}
: null}
+ ) : isHub ? ( +
+
{ruleCount.toLocaleString("en-AU")}
+
{ruleCount === 1 ? "rule" : "rules"}
+
) : ( - // 235 rules (and every category page) have no authors + // 235 rules have no authors at all
ssw.com.au/rules
)}
From e189a904713a3429e264cc2baf1edd84e7e7399f Mon Sep 17 00:00:00 2001 From: isaaclombardssw Date: Wed, 5 Aug 2026 13:57:49 +1000 Subject: [PATCH 05/16] fix: align the rule count and its label on a shared baseline Satori's `alignItems: "baseline"` aligns line boxes rather than text baselines, so "rules" sat 7px below the digits. Pins both to lineHeight 1 with flex-end and offsets the label by the descender difference between the two font sizes. Verified by measuring glyph baselines in the rendered PNG: digits and label now both land on row 559. Co-Authored-By: Claude Opus 5 (1M context) --- components/og/card.tsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/components/og/card.tsx b/components/og/card.tsx index a1902819d..0acb827f3 100644 --- a/components/og/card.tsx +++ b/components/og/card.tsx @@ -9,6 +9,16 @@ const MAX_FACES = 2; // 78% of rules have <= 2 authors; the rest get a "+N more" const OVERLAP = 16; const AVATAR = 96; +const COUNT_SIZE = 56; +const COUNT_LABEL_SIZE = 30; +/** + * Satori's `alignItems: "baseline"` aligns line boxes, not text baselines, so the + * smaller label lands low against the count. With `lineHeight: 1` on both and + * flex-end, the remaining gap is the descender difference between the two sizes. + * Measured from a render, not guessed - scripts/og-verify.mjs regenerates the case. + */ +const COUNT_LABEL_NUDGE = Math.round((COUNT_SIZE - COUNT_LABEL_SIZE) * 0.115); + export interface OgAuthor { title?: string | null; url?: string | null; @@ -199,9 +209,9 @@ export async function OgCard({ title, authors = [], ruleCount }: { title: string {extra > 0 ?
{`+${extra} more`}
: null}
) : isHub ? ( -
-
{ruleCount.toLocaleString("en-AU")}
-
{ruleCount === 1 ? "rule" : "rules"}
+
+
{ruleCount.toLocaleString("en-AU")}
+
{ruleCount === 1 ? "rule" : "rules"}
) : ( // 235 rules have no authors at all From f4fdb79303cf627473efd8cddb6e5f3f4729e7a8 Mon Sep 17 00:00:00 2001 From: isaaclombardssw Date: Wed, 5 Aug 2026 15:24:06 +1000 Subject: [PATCH 06/16] feat: rework the card footer to the designers' layout - Contributors are summarised as "N contributors" with a "+N" disc closing the avatar row, instead of listing names (which needed clamping for long ones) - The left slot is left empty when a page has no authors, rather than falling back to the site URL - Site-wide rule total and the URL now sit bottom-right on every card - Drops the large red per-category count, now redundant against that total Hub pages are flagged explicitly with isHub rather than inferred from having a count, so the 235 authorless rules keep the rule-sized title. Co-Authored-By: Claude Opus 5 (1M context) --- app/[filename]/opengraph-image.tsx | 19 +++-- app/opengraph-image.tsx | 8 +- components/og/card.tsx | 124 +++++++++++++++-------------- scripts/og-verify.mjs | 11 ++- 4 files changed, 93 insertions(+), 69 deletions(-) diff --git a/app/[filename]/opengraph-image.tsx b/app/[filename]/opengraph-image.tsx index adefb65e1..cac8fffff 100644 --- a/app/[filename]/opengraph-image.tsx +++ b/app/[filename]/opengraph-image.tsx @@ -1,6 +1,6 @@ import { ImageResponse } from "next/og"; import { OG_CONTENT_TYPE, OG_SIZE, OgCard } from "@/components/og/card"; -import { fetchCategoryRuleCounts } from "@/lib/services/rules"; +import { fetchRuleCount } from "@/lib/services/rules"; import { siteTitle } from "@/site-config"; import client from "@/tina/__generated__/client"; @@ -40,7 +40,14 @@ export default async function OpengraphImage({ params }: { params: Promise<{ fil let title = siteTitle; let authors: { title?: string | null; url?: string | null }[] = []; - let ruleCount: number | undefined; + let isHub = false; + + let totalRules: number | undefined; + try { + totalRules = await fetchRuleCount(); + } catch { + // The card still renders without the total; better than failing the image + } try { const rule = await client.queries.ruleDataBasic({ relativePath: `${filename}/rule.mdx` }); @@ -49,15 +56,15 @@ export default async function OpengraphImage({ params }: { params: Promise<{ fil authors = (rule.data.rule.authors ?? []).filter(Boolean) as typeof authors; } } catch { - // This route serves category pages too. They have no authors, so they get the - // hub treatment instead - bigger title, and the rule count carrying the weight. + // This route serves category pages too. They sit above individual rules, so they + // get the hub treatment - larger title, and no contributor row. try { title = (await categoryTitle(filename)) ?? siteTitle; - ruleCount = (await fetchCategoryRuleCounts())[filename] ?? 0; + isHub = true; } catch { // Fall back to the site title rather than failing the image } } - return new ImageResponse(await OgCard({ title, authors, ruleCount }), size); + return new ImageResponse(await OgCard({ title, authors, totalRules, isHub }), size); } diff --git a/app/opengraph-image.tsx b/app/opengraph-image.tsx index e9ed3004f..2a9ee29ac 100644 --- a/app/opengraph-image.tsx +++ b/app/opengraph-image.tsx @@ -10,12 +10,12 @@ export const alt = "SSW Rules"; // Default card for every page without one of its own - home, search, latest-rules, // archived, user, orphaned. Inherited automatically by Next's metadata resolution. export default async function OpengraphImage() { - let ruleCount = 0; + let totalRules: number | undefined; try { - ruleCount = await fetchRuleCount(); + totalRules = await fetchRuleCount(); } catch { - // A count of 0 still renders; better than failing the image + // The card still renders without the total; better than failing the image } - return new ImageResponse(await OgCard({ title: homepageTitle, ruleCount }), size); + return new ImageResponse(await OgCard({ title: homepageTitle, totalRules, isHub: true }), size); } diff --git a/components/og/card.tsx b/components/og/card.tsx index 0acb827f3..44f6318f1 100644 --- a/components/og/card.tsx +++ b/components/og/card.tsx @@ -5,19 +5,10 @@ import { profileImageUrl } from "@/lib/authorImage"; export const OG_SIZE = { width: 1200, height: 630 }; export const OG_CONTENT_TYPE = "image/png"; -const MAX_FACES = 2; // 78% of rules have <= 2 authors; the rest get a "+N more" +const MAX_FACES = 2; // 78% of rules have <= 2 authors; the rest are summarised by the chip const OVERLAP = 16; -const AVATAR = 96; - -const COUNT_SIZE = 56; -const COUNT_LABEL_SIZE = 30; -/** - * Satori's `alignItems: "baseline"` aligns line boxes, not text baselines, so the - * smaller label lands low against the count. With `lineHeight: 1` on both and - * flex-end, the remaining gap is the descender difference between the two sizes. - * Measured from a render, not guessed - scripts/og-verify.mjs regenerates the case. - */ -const COUNT_LABEL_NUDGE = Math.round((COUNT_SIZE - COUNT_LABEL_SIZE) * 0.115); +const AVATAR = 72; +const FOOTER_SIZE = 26; export interface OgAuthor { title?: string | null; @@ -118,22 +109,48 @@ const Avatar = ({ src, index, total }: { src: string; index: number; total: numb ); /** - * Builds the shared Open Graph card. Callers pass already-resolved data so this stays - * synchronous-ish and testable; use `resolveOgCard` to gather the images first. + * Closes the avatar row with a "+3" disc when there are more contributors than faces. + * Always last in the row, so unlike the photos it never needs a hole masked out of it. */ -export async function OgCard({ title, authors = [], ruleCount }: { title: string; authors?: OgAuthor[]; ruleCount?: number }) { - // Categories and the home page sit above individual rules, so they get a heavier - // treatment: a larger title (their titles are shorter - longest category is 62 chars - // against 107 for a rule) and the rule count in place of the author byline. - const isHub = ruleCount !== undefined; - const shown = authors.filter((a) => a?.title).slice(0, MAX_FACES); - const extra = authors.length - shown.length; +const ExtraChip = ({ count }: { count: number }) => ( +
+ {`+${count}`} +
+); - const [polygon, avatars] = await Promise.all([loadPolygon(), Promise.all(shown.map(loadAvatar))]); +interface OgCardProps { + title: string; + authors?: OgAuthor[]; + /** Site-wide rule total, shown bottom-right on every card. */ + totalRules?: number; + /** Categories and the home page sit above individual rules and get a larger title. */ + isHub?: boolean; +} - // Author names are content data and can be long - the longest real pair is 52 chars. - // Clamp them rather than trusting them to fit. - const names = shown.map((a) => (a.title ?? "").trim()).join(", "); +export async function OgCard({ title, authors = [], totalRules, isHub = false }: OgCardProps) { + const named = authors.filter((a) => a?.title); + const authorCount = named.length; + const shown = named.slice(0, MAX_FACES); + const extra = authorCount - shown.length; + // The chip counts as a face for masking, so the avatar behind it gets a hole cut + const faceCount = shown.length + (extra > 0 ? 1 : 0); + + const [polygon, avatars] = await Promise.all([loadPolygon(), Promise.all(shown.map(loadAvatar))]); return (
{title}
- {shown.length > 0 ? ( -
-
- {avatars.map((src, i) => ( - - ))} -
-
- {names} +
+ {/* Left: contributors. Deliberately empty when a page has no authors - categories, + the home page, and the 235 rules with no author list. */} + {shown.length > 0 ? ( +
+
+ {avatars.map((src, i) => ( + + ))} + {extra > 0 ? : null} +
+
+ {`${authorCount} ${authorCount === 1 ? "contributor" : "contributors"}`} +
- {/* `extra && ...` would render a literal "0" when there are no extra authors. - The label is one interpolated string, not `+{extra} more` - JSX would split - that into three text nodes, and Satori rejects multi-child divs that are - not explicitly display:flex. */} - {extra > 0 ?
{`+${extra} more`}
: null} + ) : ( +
+ )} + + {/* Right: site-wide totals, on every card */} +
+ {totalRules ?
{`${totalRules.toLocaleString("en-AU")} rules`}
: null} + {totalRules ?
|
: null} +
ssw.com.au/rules
- ) : isHub ? ( -
-
{ruleCount.toLocaleString("en-AU")}
-
{ruleCount === 1 ? "rule" : "rules"}
-
- ) : ( - // 235 rules have no authors at all -
ssw.com.au/rules
- )} +
); } diff --git a/scripts/og-verify.mjs b/scripts/og-verify.mjs index 854c33503..a3872864c 100644 --- a/scripts/og-verify.mjs +++ b/scripts/og-verify.mjs @@ -34,10 +34,13 @@ const { OgCard, OG_SIZE } = await import(`../${build}`); const P = (title, slug) => ({ title, url: `https://www.ssw.com.au/people/${slug}` }); +const TOTAL = 3802; // stand-in for fetchRuleCount() + const cases = { "1-single-author": { title: "Do you know when to change the email subject (or appointment subject)?", authors: [P("Adam Cogan", "adam-cogan")], + totalRules: TOTAL, }, // Igor's photo is a PNG named .jpg - regression case for the content-type sniffing "2-many-authors": { @@ -49,9 +52,10 @@ const cases = { P("Thiago Passos", "thiago-passos"), P("Brendan Richards", "brendan-richards"), ], + totalRules: TOTAL, }, // 235 rules and every category page have no authors - "3-no-authors": { title: "Do you know the rules to better unit tests?", authors: [] }, + "3-no-authors": { title: "Do you know the rules to better unit tests?", authors: [], totalRules: TOTAL }, // Longest real title (107 chars, with emoji) + longest real name pair (52 chars) "4-longest-content": { title: "Do you create a Sprint Forecast email 📩? (aka Functionality to be developed per Sprint Planning)", @@ -62,12 +66,17 @@ const cases = { P("Camilla Rosa Silva", "camilla-rosa-silva"), P("Jerwin Parker Roberto", "jerwin-parker-roberto"), ], + totalRules: TOTAL, }, // Neither author has a profile photo - must fall back, not fail the image "5-missing-photos": { title: "Do you have a rule authored by someone with no profile photo?", authors: [P("Toby Goodman", "toby-goodman"), P("Ryan Tee", "ryan-tee")], + totalRules: TOTAL, }, + "6-homepage": { title: "Secret Ingredients to Quality Software (Open Source on GitHub)", totalRules: TOTAL, isHub: true }, + "7-category": { title: "Rules to Better Interfaces (Forms)", totalRules: TOTAL, isHub: true }, + "8-category-longest": { title: "Rules to Better User Acceptance Tests (UAT) for Bug Management", totalRules: TOTAL, isHub: true }, }; await mkdir(outDir, { recursive: true }); From f42c14fea635368e5b2ec8e4326b35bbd124b3e6 Mon Sep 17 00:00:00 2001 From: isaaclombardssw Date: Wed, 5 Aug 2026 15:28:20 +1000 Subject: [PATCH 07/16] fix: drop the SEO suffix from the homepage Open Graph card The card used site-config's homepageTitle, which carries "(Open Source on GitHub)" for search results. That reads as clutter on a social card and pushed the title onto three lines. The page keeps the full version. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- app/opengraph-image.tsx | 10 ++++++++-- scripts/og-verify.mjs | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/opengraph-image.tsx b/app/opengraph-image.tsx index 2a9ee29ac..a2ff98ce6 100644 --- a/app/opengraph-image.tsx +++ b/app/opengraph-image.tsx @@ -1,12 +1,18 @@ import { ImageResponse } from "next/og"; import { OG_CONTENT_TYPE, OG_SIZE, OgCard } from "@/components/og/card"; import { fetchRuleCount } from "@/lib/services/rules"; -import { homepageTitle } from "@/site-config"; export const size = OG_SIZE; export const contentType = OG_CONTENT_TYPE; export const alt = "SSW Rules"; +/** + * Shorter than `homepageTitle` in site-config, which carries an SEO suffix + * ("... (Open Source on GitHub)") that reads as clutter on a social card. + * The page <title> still uses the full version. + */ +const OG_TITLE = "Secret Ingredients to Quality Software"; + // Default card for every page without one of its own - home, search, latest-rules, // archived, user, orphaned. Inherited automatically by Next's metadata resolution. export default async function OpengraphImage() { @@ -17,5 +23,5 @@ export default async function OpengraphImage() { // The card still renders without the total; better than failing the image } - return new ImageResponse(await OgCard({ title: homepageTitle, totalRules, isHub: true }), size); + return new ImageResponse(await OgCard({ title: OG_TITLE, totalRules, isHub: true }), size); } diff --git a/scripts/og-verify.mjs b/scripts/og-verify.mjs index a3872864c..ff9699af7 100644 --- a/scripts/og-verify.mjs +++ b/scripts/og-verify.mjs @@ -74,7 +74,7 @@ const cases = { authors: [P("Toby Goodman", "toby-goodman"), P("Ryan Tee", "ryan-tee")], totalRules: TOTAL, }, - "6-homepage": { title: "Secret Ingredients to Quality Software (Open Source on GitHub)", totalRules: TOTAL, isHub: true }, + "6-homepage": { title: "Secret Ingredients to Quality Software", totalRules: TOTAL, isHub: true }, "7-category": { title: "Rules to Better Interfaces (Forms)", totalRules: TOTAL, isHub: true }, "8-category-longest": { title: "Rules to Better User Acceptance Tests (UAT) for Bug Management", totalRules: TOTAL, isHub: true }, }; From 707c82cf24189fbd63210547164bca7144cfd54c Mon Sep 17 00:00:00 2001 From: isaaclombardssw <isaaclombard@ssw.com.au> Date: Wed, 5 Aug 2026 16:06:20 +1000 Subject: [PATCH 08/16] fix: address review findings on the Open Graph work Blocking: - metadataBase used siteUrl (".../rules"), but Next joins basePath into the image path AND joins metadataBase.pathname on top, so every og:image resolved to /rules/rules/<slug>/opengraph-image and 404d in production. Dev hid it by substituting a localhost base. Now uses parentSiteUrl (origin only). Material: - Page-level openGraph/twitter replace the layout's rather than merging, so siteName, locale and the Twitter handles were emitted on no page at all. They are set in pageMetadata now. - The Tina webhook never purged /<slug>/opengraph-image, leaving stale cards for up to 24h after an edit. - Rule vs category was dispatched by catching an exception, so a transient Tina failure shipped a hub card titled "SSW.Rules" for a real rule. resolveOgTarget dispatches on the result and returns an explicit "unknown". - mainCategoryQuery ran uncached on every category card; now unstable_cache'd on the existing category-rule-data tag. - Unknown filenames rendered a card, an unbounded cache key and Satori render per junk path. They now notFound(). - No tests covered the new pure logic; adds unit tests for authorImage and sniffImageType, the two functions that broke during development. - Brand colours were scattered hex; named at the top of the card with a note that Satori cannot reach the ssw-* tokens. Also: restores the GitHub avatar fallback and the ssw.com.au host guard the AuthorsCard extraction dropped, moves IO out of the card into lib/og/images.ts, renames OgCard to buildOgCard (Satori cannot render async components), drops seven dead siteUrl imports, and declares esbuild with a verify:og script. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- .gitignore | 3 + __tests__/lib/authorImage.test.ts | 35 +++++ __tests__/lib/ogImages.test.ts | 29 ++++ app/(home)/categories/page.tsx | 1 - app/(home)/page.tsx | 1 - app/[filename]/opengraph-image.tsx | 70 ++------- app/api/revalidate/route.ts | 4 + app/archived/page.tsx | 1 - app/latest-rules/page.tsx | 1 - app/layout.tsx | 9 +- app/opengraph-image.tsx | 19 +-- app/orphaned/page.tsx | 1 - app/search/page.tsx | 1 - app/user/page.tsx | 1 - components/og/card.tsx | 230 ----------------------------- lib/authorImage.ts | 6 +- lib/og/card.tsx | 165 +++++++++++++++++++++ lib/og/images.ts | 64 ++++++++ lib/og/target.ts | 62 ++++++++ lib/pageMetadata.ts | 17 +-- package.json | 4 +- scripts/og-verify.mjs | 31 ++-- 22 files changed, 418 insertions(+), 337 deletions(-) create mode 100644 __tests__/lib/authorImage.test.ts create mode 100644 __tests__/lib/ogImages.test.ts delete mode 100644 components/og/card.tsx create mode 100644 lib/og/card.tsx create mode 100644 lib/og/images.ts create mode 100644 lib/og/target.ts diff --git a/.gitignore b/.gitignore index 8d228cc01..1d9fd3605 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,6 @@ redirects.json # Generated at build-time (used by SSW.People) public/people-latest-rules.json + +# OG card preview output (scripts/og-verify.mjs) +og-preview/ diff --git a/__tests__/lib/authorImage.test.ts b/__tests__/lib/authorImage.test.ts new file mode 100644 index 000000000..8aa5ddecb --- /dev/null +++ b/__tests__/lib/authorImage.test.ts @@ -0,0 +1,35 @@ +import { githubAvatarUrl, profileImageUrl } from "@/lib/authorImage"; + +describe("profileImageUrl", () => { + it("title-cases the slug into a profile path", () => { + expect(profileImageUrl("https://www.ssw.com.au/people/adam-cogan")).toBe( + "https://raw.githubusercontent.com/SSWConsulting/SSW.People.Profiles/main/Adam-Cogan/Images/Adam-Cogan-Profile.jpg" + ); + expect(profileImageUrl("https://www.ssw.com.au/people/camilla-rosa-silva")).toContain("/Camilla-Rosa-Silva/Images/Camilla-Rosa-Silva-Profile.jpg"); + }); + + it("ignores trailing slashes, query strings and fragments", () => { + const expected = profileImageUrl("https://www.ssw.com.au/people/adam-cogan"); + expect(profileImageUrl("https://www.ssw.com.au/people/adam-cogan/")).toBe(expected); + expect(profileImageUrl("https://www.ssw.com.au/people/adam-cogan?utm=x")).toBe(expected); + expect(profileImageUrl("https://www.ssw.com.au/people/adam-cogan#bio")).toBe(expected); + }); + + it("only claims ssw.com.au people URLs", () => { + expect(profileImageUrl("https://github.com/some-people/repo")).toBeNull(); + expect(profileImageUrl("https://example.com/people/adam-cogan")).toBeNull(); + expect(profileImageUrl(undefined)).toBeNull(); + expect(profileImageUrl("")).toBeNull(); + }); +}); + +describe("githubAvatarUrl", () => { + it("builds an avatar URL from a github profile link", () => { + expect(githubAvatarUrl("https://github.com/octocat")).toBe("https://avatars.githubusercontent.com/octocat"); + }); + + it("returns null for anything else", () => { + expect(githubAvatarUrl("https://www.ssw.com.au/people/adam-cogan")).toBeNull(); + expect(githubAvatarUrl(undefined)).toBeNull(); + }); +}); diff --git a/__tests__/lib/ogImages.test.ts b/__tests__/lib/ogImages.test.ts new file mode 100644 index 000000000..5ee7fc2bf --- /dev/null +++ b/__tests__/lib/ogImages.test.ts @@ -0,0 +1,29 @@ +import { sniffImageType } from "@/lib/og/images"; + +const pad = (header: number[]) => Buffer.concat([Buffer.from(header), Buffer.alloc(16)]); + +describe("sniffImageType", () => { + it("identifies formats from magic bytes, not the file extension", () => { + expect(sniffImageType(pad([0xff, 0xd8, 0xff, 0xe0]))).toBe("image/jpeg"); + expect(sniffImageType(pad([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]))).toBe("image/png"); + expect(sniffImageType(pad([0x47, 0x49, 0x46, 0x38, 0x39, 0x61]))).toBe("image/gif"); + }); + + it("identifies webp, which needs both the RIFF and WEBP markers", () => { + const webp = Buffer.concat([Buffer.from("RIFF"), Buffer.alloc(4), Buffer.from("WEBP"), Buffer.alloc(8)]); + expect(sniffImageType(webp)).toBe("image/webp"); + const riffOnly = Buffer.concat([Buffer.from("RIFF"), Buffer.alloc(4), Buffer.from("AVI "), Buffer.alloc(8)]); + expect(sniffImageType(riffOnly)).toBeNull(); + }); + + // The case this exists for: profile photos served as image/jpeg that are really PNGs + it("reports PNG bytes as PNG regardless of a .jpg name or jpeg content-type", () => { + expect(sniffImageType(pad([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]))).not.toBe("image/jpeg"); + }); + + it("returns null for unrecognised or truncated input", () => { + expect(sniffImageType(Buffer.from("<!DOCTYPE html><html>"))).toBeNull(); + expect(sniffImageType(Buffer.from([0xff, 0xd8]))).toBeNull(); + expect(sniffImageType(Buffer.alloc(0))).toBeNull(); + }); +}); diff --git a/app/(home)/categories/page.tsx b/app/(home)/categories/page.tsx index d5a34f463..c0ca21479 100644 --- a/app/(home)/categories/page.tsx +++ b/app/(home)/categories/page.tsx @@ -4,7 +4,6 @@ import CategoryActionButtons from "@/components/CategoryActionButtons"; import { Card } from "@/components/ui/card"; import { pageMetadata } from "@/lib/pageMetadata"; import { fetchCategoryRuleCounts, fetchHomepageData, fetchLatestRules, fetchRuleCount } from "@/lib/services/rules"; -import { siteUrl } from "@/site-config"; import client from "@/tina/__generated__/client"; export const revalidate = 21600; // 6 hours diff --git a/app/(home)/page.tsx b/app/(home)/page.tsx index b0d5e5cc4..22eb9efd8 100644 --- a/app/(home)/page.tsx +++ b/app/(home)/page.tsx @@ -3,7 +3,6 @@ import { TinaActivityWrapper } from "@/app/(home)/TinaActivityWrapper"; import { pageMetadata } from "@/lib/pageMetadata"; import { fetchDiscussionData } from "@/lib/services/github/discussions.service"; import { fetchActivityLatestRules, fetchHomepageData, fetchRuleCount } from "@/lib/services/rules"; -import { siteUrl } from "@/site-config"; export const revalidate = 21600; // 6 hours diff --git a/app/[filename]/opengraph-image.tsx b/app/[filename]/opengraph-image.tsx index cac8fffff..08049fe90 100644 --- a/app/[filename]/opengraph-image.tsx +++ b/app/[filename]/opengraph-image.tsx @@ -1,70 +1,30 @@ +import { notFound } from "next/navigation"; import { ImageResponse } from "next/og"; -import { OG_CONTENT_TYPE, OG_SIZE, OgCard } from "@/components/og/card"; +import { buildOgCard, OG_CONTENT_TYPE, OG_SIZE } from "@/lib/og/card"; +import { resolveOgTarget } from "@/lib/og/target"; import { fetchRuleCount } from "@/lib/services/rules"; -import { siteTitle } from "@/site-config"; -import client from "@/tina/__generated__/client"; export const size = OG_SIZE; export const contentType = OG_CONTENT_TYPE; export const alt = "SSW Rules"; -// Cards only change when a rule's title or author list changes export const revalidate = 60 * 60 * 24; -/** - * Looks up a category title by filename. - * - * mainCategoryQuery returns every top category and child category with its title and - * filename in a single un-paginated call, so this avoids the topCategoryWithIndexQuery - * pagination walk that page.tsx has to do to resolve a full relativePath. - */ -const categoryTitle = async (filename: string): Promise<string | null> => { - const res = await client.queries.mainCategoryQuery(); - const topCategories = (res?.data?.category as any)?.index ?? []; - - for (const entry of topCategories) { - const top = entry?.top_category; - if (!top) continue; - if (top._sys?.filename === filename) return top.title ?? null; - - for (const child of top.index ?? []) { - if (child?.category?._sys?.filename === filename) return child.category.title ?? null; - } - } - - return null; -}; - export default async function OpengraphImage({ params }: { params: Promise<{ filename: string }> }) { const { filename } = await params; - let title = siteTitle; - let authors: { title?: string | null; url?: string | null }[] = []; - let isHub = false; - - let totalRules: number | undefined; - try { - totalRules = await fetchRuleCount(); - } catch { - // The card still renders without the total; better than failing the image - } + const [target, totalRules] = await Promise.all([resolveOgTarget(filename), fetchRuleCount()]); - try { - const rule = await client.queries.ruleDataBasic({ relativePath: `${filename}/rule.mdx` }); - if (rule?.data?.rule?.title) { - title = rule.data.rule.title; - authors = (rule.data.rule.authors ?? []).filter(Boolean) as typeof authors; - } - } catch { - // This route serves category pages too. They sit above individual rules, so they - // get the hub treatment - larger title, and no contributor row. - try { - title = (await categoryTitle(filename)) ?? siteTitle; - isHub = true; - } catch { - // Fall back to the site title rather than failing the image - } - } + // Without this, any junk path renders a card - an unbounded cache key and Satori render + if (target.kind === "unknown") notFound(); - return new ImageResponse(await OgCard({ title, authors, totalRules, isHub }), size); + return new ImageResponse( + await buildOgCard({ + title: target.title, + authors: target.kind === "rule" ? target.authors : [], + totalRules, + isHub: target.kind === "category", + }), + size + ); } diff --git a/app/api/revalidate/route.ts b/app/api/revalidate/route.ts index 7ab7bf489..c035a8f9b 100644 --- a/app/api/revalidate/route.ts +++ b/app/api/revalidate/route.ts @@ -36,6 +36,9 @@ export async function POST(req: Request) { const slug = changedPath.replace("public/uploads/rules/", "").replace("/rule.mdx", "").replace(/\/+$/, ""); if (slug) { routesToRevalidate.add(`/${slug}`); + // Separate route from the page, so it needs purging explicitly or the card + // keeps a stale title / author list until its 24h revalidate expires + routesToRevalidate.add(`/${slug}/opengraph-image`); } // If change type is add then we also need to revalidate the /api/rules route if (eventType === TINA_CONTENT_CHANGE_TYPE.Added) { @@ -58,6 +61,7 @@ export async function POST(req: Request) { .pop(); if (filename) { routesToRevalidate.add(`/${filename}`); + routesToRevalidate.add(`/${filename}/opengraph-image`); } } // If change type is add then we also need to revalidate the /api/categories route diff --git a/app/archived/page.tsx b/app/archived/page.tsx index bb55fc428..d9d853fd9 100644 --- a/app/archived/page.tsx +++ b/app/archived/page.tsx @@ -3,7 +3,6 @@ import Breadcrumbs from "@/components/Breadcrumbs"; import { Section } from "@/components/layout/section"; import { pageMetadata } from "@/lib/pageMetadata"; import { fetchAllArchivedRules, fetchHomepageData, fetchLatestRules } from "@/lib/services/rules"; -import { siteUrl } from "@/site-config"; import ArchivedClientPage from "./client-page"; export const revalidate = 300; diff --git a/app/latest-rules/page.tsx b/app/latest-rules/page.tsx index 073453b8b..cc103f93b 100644 --- a/app/latest-rules/page.tsx +++ b/app/latest-rules/page.tsx @@ -1,7 +1,6 @@ import { Section } from "@/components/layout/section"; import { pageMetadata } from "@/lib/pageMetadata"; import { fetchLatestRules, fetchRuleCount } from "@/lib/services/rules"; -import { siteUrl } from "@/site-config"; import LatestRuleClientPage from "./client-page"; export const revalidate = 300; diff --git a/app/layout.tsx b/app/layout.tsx index f39d01ada..56feff5cf 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -8,7 +8,7 @@ import "@/styles.css"; import UserClientProvider from "@/components/auth/UserClientProvider"; import AppInsightsProvider from "@/components/providers/AppInsightsProvider"; import { TailwindIndicator } from "@/components/ui/breakpoint-indicator"; -import { homepageTitle, siteDescription, siteTitle, siteUrl, social } from "@/site-config"; +import { homepageTitle, parentSiteUrl, siteDescription, siteTitle, siteUrl, social } from "@/site-config"; const fontSans = FontSans({ subsets: ["latin"], @@ -29,9 +29,10 @@ const lato = Lato({ const defaultTitle = `${siteTitle} | ${homepageTitle}`; export const metadata: Metadata = { - // Lets Next resolve the opengraph-image.tsx routes to absolute URLs, which social - // scrapers require. Without it og:image is emitted as a relative path and ignored. - metadataBase: new URL(siteUrl), + // Origin only, NOT siteUrl - that ends in /rules and Next joins basePath into the + // image path as well, giving /rules/rules/<slug>/opengraph-image and a 404. Dev + // hides it by substituting a localhost base. + metadataBase: new URL(parentSiteUrl), title: defaultTitle, description: siteDescription, openGraph: { diff --git a/app/opengraph-image.tsx b/app/opengraph-image.tsx index a2ff98ce6..f1376673b 100644 --- a/app/opengraph-image.tsx +++ b/app/opengraph-image.tsx @@ -1,27 +1,18 @@ import { ImageResponse } from "next/og"; -import { OG_CONTENT_TYPE, OG_SIZE, OgCard } from "@/components/og/card"; +import { buildOgCard, OG_CONTENT_TYPE, OG_SIZE } from "@/lib/og/card"; import { fetchRuleCount } from "@/lib/services/rules"; export const size = OG_SIZE; export const contentType = OG_CONTENT_TYPE; export const alt = "SSW Rules"; -/** - * Shorter than `homepageTitle` in site-config, which carries an SEO suffix - * ("... (Open Source on GitHub)") that reads as clutter on a social card. - * The page <title> still uses the full version. - */ +export const revalidate = 60 * 60 * 24; + +// Shorter than site-config's homepageTitle, which carries an SEO suffix const OG_TITLE = "Secret Ingredients to Quality Software"; // Default card for every page without one of its own - home, search, latest-rules, // archived, user, orphaned. Inherited automatically by Next's metadata resolution. export default async function OpengraphImage() { - let totalRules: number | undefined; - try { - totalRules = await fetchRuleCount(); - } catch { - // The card still renders without the total; better than failing the image - } - - return new ImageResponse(await OgCard({ title: OG_TITLE, totalRules, isHub: true }), size); + return new ImageResponse(await buildOgCard({ title: OG_TITLE, totalRules: await fetchRuleCount(), isHub: true }), size); } diff --git a/app/orphaned/page.tsx b/app/orphaned/page.tsx index b1c60d03c..a2d5399f4 100644 --- a/app/orphaned/page.tsx +++ b/app/orphaned/page.tsx @@ -5,7 +5,6 @@ import { pageMetadata } from "@/lib/pageMetadata"; import { OrphanedRulesData } from "@/models/OrphanedRule"; import { Rule } from "@/models/Rule"; import orphanedRulesData from "@/orphaned_rules.json"; -import { siteUrl } from "@/site-config"; import client from "@/tina/__generated__/client"; import OrphanedClientPage from "./client-page"; diff --git a/app/search/page.tsx b/app/search/page.tsx index 8e294ce9c..e0551407b 100644 --- a/app/search/page.tsx +++ b/app/search/page.tsx @@ -2,7 +2,6 @@ import { Suspense } from "react"; import { Section } from "@/components/layout/section"; import { pageMetadata } from "@/lib/pageMetadata"; import { fetchLatestRules, fetchRuleCount } from "@/lib/services/rules"; -import { siteUrl } from "@/site-config"; import RulesSearchClientPage from "./client-page"; export const revalidate = 300; diff --git a/app/user/page.tsx b/app/user/page.tsx index c9b28dcdd..c4590c01c 100644 --- a/app/user/page.tsx +++ b/app/user/page.tsx @@ -1,7 +1,6 @@ import { Suspense } from "react"; import { Section } from "@/components/layout/section"; import { pageMetadata } from "@/lib/pageMetadata"; -import { siteUrl } from "@/site-config"; import UserRulesClientPage from "./client-page"; export const revalidate = 300; diff --git a/components/og/card.tsx b/components/og/card.tsx deleted file mode 100644 index 44f6318f1..000000000 --- a/components/og/card.tsx +++ /dev/null @@ -1,230 +0,0 @@ -import { readFile } from "node:fs/promises"; -import path from "node:path"; -import { profileImageUrl } from "@/lib/authorImage"; - -export const OG_SIZE = { width: 1200, height: 630 }; -export const OG_CONTENT_TYPE = "image/png"; - -const MAX_FACES = 2; // 78% of rules have <= 2 authors; the rest are summarised by the chip -const OVERLAP = 16; -const AVATAR = 72; -const FOOTER_SIZE = 26; - -export interface OgAuthor { - title?: string | null; - url?: string | null; -} - -const publicFile = (relative: string) => path.join(process.cwd(), "public", relative); - -const dataUri = (buffer: Buffer, mime: string) => `data:${mime};base64,${buffer.toString("base64")}`; - -/** - * SSW's polygon background, inverted offline so it reads light. - * - * Fading the near-black brand asset (SSW.Website public/images/polygonBackground.png) - * into a light card crushes its facet contrast proportionally - at 0.15 opacity only - * 7 RGB levels survived, which is invisible. Inverting it once instead keeps 53 levels: - * - * magick polygonBackground.png -resize 1200x630^ -gravity center -extent 1200x630 \ - * -negate -normalize -sigmoidal-contrast 3,50% +level 79%,99.5% public/og-polygon.png - */ -const loadPolygon = async () => dataUri(await readFile(publicFile("og-polygon.png")), "image/png"); - -/** - * Detects the real image type from magic bytes rather than trusting the response header. - * - * 5 of the 203 profile photos in SSW.People.Profiles are PNGs saved with a .jpg - * extension (Chris-Briggs, Florent-Dezettre, Eli-Kent, Igor-Goldobin, Stanley-Sidik). - * raw.githubusercontent serves those as `content-type: image/jpeg` based on the - * extension, and Satori throws "Invalid JPEG" if it believes the header - which would - * fail the whole card for any rule those five authored. - */ -const sniffImageType = (buffer: Buffer): string | null => { - if (buffer.length < 12) return null; - if (buffer[0] === 0xff && buffer[1] === 0xd8 && buffer[2] === 0xff) return "image/jpeg"; - if (buffer.subarray(0, 8).equals(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]))) return "image/png"; - if (buffer.subarray(0, 3).toString("ascii") === "GIF") return "image/gif"; - if (buffer.subarray(0, 4).toString("ascii") === "RIFF" && buffer.subarray(8, 12).toString("ascii") === "WEBP") return "image/webp"; - return null; -}; - -/** - * Author photos are fetched here rather than handed to Satori as URLs, so a missing or - * unreadable profile falls back to the placeholder instead of failing the whole image. - * 13 of the 216 author URLs in the content have no profile photo (alumni, or non-person - * URLs like /people/alumni). - */ -const loadAvatar = async (author: OgAuthor): Promise<string> => { - const url = profileImageUrl(author.url ?? undefined); - - if (url) { - try { - const res = await fetch(url, { next: { revalidate: 60 * 60 * 24 } }); - if (res.ok) { - const buffer = Buffer.from(await res.arrayBuffer()); - const type = sniffImageType(buffer); - if (type) return dataUri(buffer, type); - } - } catch { - // fall through to the placeholder - } - } - - return dataUri(await readFile(publicFile("uploads/ssw-employee-profile-placeholder-sketch.jpg")), "image/jpeg"); -}; - -const Avatar = ({ src, index, total }: { src: string; index: number; total: number }) => ( - <div - style={{ - display: "flex", - position: "relative", - width: AVATAR, - height: AVATAR, - flexShrink: 0, - marginLeft: index === 0 ? 0 : -OVERLAP, - borderRadius: AVATAR, - // Overlapping faces need separating. A white ring only works on a white background, - // so the photo behind has a hole masked out of it and the polygon shows through. - ...(index < total - 1 - ? { - maskImage: `radial-gradient(circle ${AVATAR / 2 + 4}px at ${AVATAR - OVERLAP + AVATAR / 2}px ${AVATAR / 2}px, transparent 99%, #000 100%)`, - } - : {}), - }} - > - <img src={src} width={AVATAR} height={AVATAR} style={{ borderRadius: AVATAR, objectFit: "cover" }} alt="" /> - <div - style={{ - position: "absolute", - top: 0, - left: 0, - width: AVATAR, - height: AVATAR, - borderRadius: AVATAR, - background: "rgba(20,20,25,0.18)", - }} - /> - </div> -); - -/** - * Closes the avatar row with a "+3" disc when there are more contributors than faces. - * Always last in the row, so unlike the photos it never needs a hole masked out of it. - */ -const ExtraChip = ({ count }: { count: number }) => ( - <div - style={{ - display: "flex", - alignItems: "center", - justifyContent: "center", - width: AVATAR, - height: AVATAR, - flexShrink: 0, - marginLeft: -OVERLAP, - borderRadius: AVATAR, - background: "#fff", - fontSize: 24, - fontWeight: 600, - color: "#555", - }} - > - {`+${count}`} - </div> -); - -interface OgCardProps { - title: string; - authors?: OgAuthor[]; - /** Site-wide rule total, shown bottom-right on every card. */ - totalRules?: number; - /** Categories and the home page sit above individual rules and get a larger title. */ - isHub?: boolean; -} - -export async function OgCard({ title, authors = [], totalRules, isHub = false }: OgCardProps) { - const named = authors.filter((a) => a?.title); - const authorCount = named.length; - const shown = named.slice(0, MAX_FACES); - const extra = authorCount - shown.length; - // The chip counts as a face for masking, so the avatar behind it gets a hole cut - const faceCount = shown.length + (extra > 0 ? 1 : 0); - - const [polygon, avatars] = await Promise.all([loadPolygon(), Promise.all(shown.map(loadAvatar))]); - - return ( - <div - style={{ - width: "100%", - height: "100%", - display: "flex", - flexDirection: "column", - justifyContent: "space-between", - background: "#fff", - padding: 64, - fontFamily: "sans-serif", - position: "relative", - }} - > - <img src={polygon} width={OG_SIZE.width} height={OG_SIZE.height} alt="" style={{ position: "absolute", top: 0, left: 0, objectFit: "cover" }} /> - - {/* The title sat on 56 levels of facet noise, which fights the letterforms whatever - the contrast ratio. This flattens the top third; the geometry stays intact below. */} - <div - style={{ - position: "absolute", - top: 0, - left: 0, - width: OG_SIZE.width, - height: OG_SIZE.height, - backgroundImage: "linear-gradient(to bottom, rgba(255,255,255,0.82) 0%, rgba(255,255,255,0.78) 38%, rgba(255,255,255,0) 62%)", - }} - /> - {/* Kept separate from the scrim above - interpolating a white stop straight into a - black one produces a grey haze mid-transition. */} - <div - style={{ - position: "absolute", - top: 0, - left: 0, - width: OG_SIZE.width, - height: OG_SIZE.height, - backgroundImage: "linear-gradient(to bottom, rgba(0,0,0,0) 55%, rgba(0,0,0,0.10) 100%)", - }} - /> - - <div style={{ display: "flex", flexDirection: "column" }}> - <div style={{ fontSize: 28, color: "#cc4141", letterSpacing: 2, marginBottom: 24 }}>SSW.RULES</div> - {/* Longest real title is 107 chars - clamp so it can't push the byline off-card */} - <div style={{ fontSize: isHub ? 72 : 54, fontWeight: 700, color: "#111", lineHeight: 1.15, display: "block", lineClamp: 3 }}>{title}</div> - </div> - - <div style={{ display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%" }}> - {/* Left: contributors. Deliberately empty when a page has no authors - categories, - the home page, and the 235 rules with no author list. */} - {shown.length > 0 ? ( - <div style={{ display: "flex", alignItems: "center" }}> - <div style={{ display: "flex", flexShrink: 0 }}> - {avatars.map((src, i) => ( - <Avatar key={shown[i].url ?? i} src={src} index={i} total={faceCount} /> - ))} - {extra > 0 ? <ExtraChip count={extra} /> : null} - </div> - <div style={{ fontSize: FOOTER_SIZE, color: "#555", marginLeft: 22, flexShrink: 0 }}> - {`${authorCount} ${authorCount === 1 ? "contributor" : "contributors"}`} - </div> - </div> - ) : ( - <div style={{ display: "flex" }} /> - )} - - {/* Right: site-wide totals, on every card */} - <div style={{ display: "flex", alignItems: "center", flexShrink: 0 }}> - {totalRules ? <div style={{ fontSize: FOOTER_SIZE, color: "#888" }}>{`${totalRules.toLocaleString("en-AU")} rules`}</div> : null} - {totalRules ? <div style={{ fontSize: FOOTER_SIZE, color: "#c4c4c4", marginLeft: 20, marginRight: 20 }}>|</div> : null} - <div style={{ fontSize: FOOTER_SIZE, color: "#666" }}>ssw.com.au/rules</div> - </div> - </div> - </div> - ); -} diff --git a/lib/authorImage.ts b/lib/authorImage.ts index 400265cd7..dd57dfad9 100644 --- a/lib/authorImage.ts +++ b/lib/authorImage.ts @@ -11,7 +11,11 @@ const PROFILES_REPO = "https://raw.githubusercontent.com/SSWConsulting/SSW.People.Profiles/main"; export const profileImageUrl = (peopleUrl?: string): string | null => { - const slug = peopleUrl?.match(/people\/([^/?#]+)/)?.[1]; + // Host-scoped on purpose: a bare /people/ match would also claim URLs like + // github.com/some-people/x, which belong to the GitHub avatar fallback. + if (!peopleUrl?.includes("ssw.com.au/people")) return null; + + const slug = peopleUrl.match(/people\/([^/?#]+)/)?.[1]; if (!slug) return null; const dir = slug diff --git a/lib/og/card.tsx b/lib/og/card.tsx new file mode 100644 index 000000000..ff52c50b7 --- /dev/null +++ b/lib/og/card.tsx @@ -0,0 +1,165 @@ +import { loadAvatar, loadPolygon } from "@/lib/og/images"; +import type { OgAuthor } from "@/lib/og/target"; + +export const OG_SIZE = { width: 1200, height: 630 }; +export const OG_CONTENT_TYPE = "image/png"; + +const MAX_FACES = 2; +const OVERLAP = 16; +const AVATAR = 72; +const FOOTER_SIZE = 26; + +// Satori renders standalone - no CSS runtime, no Tailwind, no access to styles.css. +// These mirror the ssw-* tokens by value; keep them in step. +const SSW_RED = "#cc4141"; +const INK = "#111111"; +const INK_MUTED = "#555555"; +const INK_FAINT = "#888888"; +const RULE_LINE = "#c4c4c4"; +const SURFACE = "#ffffff"; + +const ExtraChip = ({ count }: { count: number }) => ( + <div + style={{ + display: "flex", + alignItems: "center", + justifyContent: "center", + width: AVATAR, + height: AVATAR, + flexShrink: 0, + marginLeft: -OVERLAP, + borderRadius: AVATAR, + background: SURFACE, + fontSize: 24, + fontWeight: 600, + color: INK_MUTED, + }} + > + {`+${count}`} + </div> +); + +const Avatar = ({ src, index, total }: { src: string; index: number; total: number }) => ( + <div + style={{ + display: "flex", + position: "relative", + width: AVATAR, + height: AVATAR, + flexShrink: 0, + marginLeft: index === 0 ? 0 : -OVERLAP, + borderRadius: AVATAR, + // A white separator ring only works on a white background, so the photo behind + // has a hole masked out of it and the polygon shows through the gap instead. + ...(index < total - 1 + ? { + maskImage: `radial-gradient(circle ${AVATAR / 2 + 4}px at ${AVATAR - OVERLAP + AVATAR / 2}px ${AVATAR / 2}px, transparent 99%, #000 100%)`, + } + : {}), + }} + > + <img src={src} width={AVATAR} height={AVATAR} style={{ borderRadius: AVATAR, objectFit: "cover" }} alt="" /> + <div + style={{ + position: "absolute", + top: 0, + left: 0, + width: AVATAR, + height: AVATAR, + borderRadius: AVATAR, + background: "rgba(20,20,25,0.18)", + }} + /> + </div> +); + +interface OgCardOptions { + title: string; + authors?: OgAuthor[]; + totalRules?: number; + /** Categories and the home page get a larger title than individual rules. */ + isHub?: boolean; +} + +/** Not a component: Satori cannot render async ones, so call sites await this. */ +export async function buildOgCard({ title, authors = [], totalRules, isHub = false }: OgCardOptions) { + const named = authors.filter((a) => a?.title); + const authorCount = named.length; + const shown = named.slice(0, MAX_FACES); + const extra = authorCount - shown.length; + // The chip counts as a face for masking, so the avatar behind it gets a hole cut + const faceCount = shown.length + (extra > 0 ? 1 : 0); + + const [polygon, avatars] = await Promise.all([loadPolygon(), Promise.all(shown.map(loadAvatar))]); + + return ( + <div + style={{ + width: "100%", + height: "100%", + display: "flex", + flexDirection: "column", + justifyContent: "space-between", + background: SURFACE, + padding: 64, + fontFamily: "sans-serif", + position: "relative", + }} + > + <img src={polygon} width={OG_SIZE.width} height={OG_SIZE.height} alt="" style={{ position: "absolute", top: 0, left: 0, objectFit: "cover" }} /> + + {/* Flattens the polygon behind the title, whose facet edges fight the letterforms + at any contrast ratio. Separate from the scrim below because interpolating a + white stop into a black one produces a grey haze mid-transition. */} + <div + style={{ + position: "absolute", + top: 0, + left: 0, + width: OG_SIZE.width, + height: OG_SIZE.height, + backgroundImage: "linear-gradient(to bottom, rgba(255,255,255,0.82) 0%, rgba(255,255,255,0.78) 38%, rgba(255,255,255,0) 62%)", + }} + /> + <div + style={{ + position: "absolute", + top: 0, + left: 0, + width: OG_SIZE.width, + height: OG_SIZE.height, + backgroundImage: "linear-gradient(to bottom, rgba(0,0,0,0) 55%, rgba(0,0,0,0.10) 100%)", + }} + /> + + <div style={{ display: "flex", flexDirection: "column" }}> + <div style={{ fontSize: 28, color: SSW_RED, letterSpacing: 2, marginBottom: 24 }}>SSW.RULES</div> + <div style={{ fontSize: isHub ? 72 : 54, fontWeight: 700, color: INK, lineHeight: 1.15, display: "block", lineClamp: 3 }}>{title}</div> + </div> + + <div style={{ display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%" }}> + {shown.length > 0 ? ( + <div style={{ display: "flex", alignItems: "center" }}> + <div style={{ display: "flex", flexShrink: 0 }}> + {avatars.map((src, i) => ( + <Avatar key={shown[i].url ?? i} src={src} index={i} total={faceCount} /> + ))} + {extra > 0 ? <ExtraChip count={extra} /> : null} + </div> + <div style={{ fontSize: FOOTER_SIZE, color: INK_MUTED, marginLeft: 22, flexShrink: 0 }}> + {`${authorCount} ${authorCount === 1 ? "contributor" : "contributors"}`} + </div> + </div> + ) : ( + <div style={{ display: "flex" }} /> + )} + + <div style={{ display: "flex", alignItems: "center", flexShrink: 0 }}> + {totalRules ? <div style={{ fontSize: FOOTER_SIZE, color: INK_FAINT }}>{`${totalRules.toLocaleString("en-AU")} rules`}</div> : null} + {totalRules ? <div style={{ fontSize: FOOTER_SIZE, color: RULE_LINE, marginLeft: 20, marginRight: 20 }}>|</div> : null} + <div style={{ fontSize: FOOTER_SIZE, color: "#666666" }}>ssw.com.au/rules</div> + </div> + </div> + </div> + ); +} diff --git a/lib/og/images.ts b/lib/og/images.ts new file mode 100644 index 000000000..c1ec95d8b --- /dev/null +++ b/lib/og/images.ts @@ -0,0 +1,64 @@ +import { readFile } from "node:fs/promises"; +import path from "node:path"; +import { githubAvatarUrl, profileImageUrl } from "@/lib/authorImage"; +import type { OgAuthor } from "@/lib/og/target"; + +const publicFile = (relative: string) => path.join(process.cwd(), "public", relative); + +export const dataUri = (buffer: Buffer, mime: string) => `data:${mime};base64,${buffer.toString("base64")}`; + +/** + * Detects the image type from magic bytes rather than the response header. + * + * Several profile photos in SSW.People.Profiles are PNGs saved with a .jpg extension. + * raw.githubusercontent serves them as image/jpeg from the extension, and Satori throws + * "Invalid JPEG" if you believe it. Returns null for anything unrecognised so callers + * fall back rather than hand Satori bytes it cannot decode. + */ +export function sniffImageType(buffer: Buffer): string | null { + if (buffer.length < 12) return null; + if (buffer[0] === 0xff && buffer[1] === 0xd8 && buffer[2] === 0xff) return "image/jpeg"; + if (buffer.subarray(0, 8).equals(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]))) return "image/png"; + if (buffer.subarray(0, 3).toString("ascii") === "GIF") return "image/gif"; + if (buffer.subarray(0, 4).toString("ascii") === "RIFF" && buffer.subarray(8, 12).toString("ascii") === "WEBP") return "image/webp"; + return null; +} + +/** + * SSW's polygon background, inverted offline so it reads light. Fading the near-black + * brand asset down instead crushes its facet contrast to nothing. Regenerate with: + * + * magick polygonBackground.png -resize 1200x630^ -gravity center -extent 1200x630 \ + * -negate -normalize -sigmoidal-contrast 3,50% +level 79%,99.5% public/og-polygon.png + */ +let polygonCache: string | undefined; +export const loadPolygon = async (): Promise<string> => { + polygonCache ??= dataUri(await readFile(publicFile("og-polygon.png")), "image/png"); + return polygonCache; +}; + +let placeholderCache: string | undefined; +const loadPlaceholder = async (): Promise<string> => { + placeholderCache ??= dataUri(await readFile(publicFile("uploads/ssw-employee-profile-placeholder-sketch.jpg")), "image/jpeg"); + return placeholderCache; +}; + +/** Fetched rather than handed to Satori as a URL so one bad photo degrades to the placeholder. */ +export const loadAvatar = async (author: OgAuthor): Promise<string> => { + const url = profileImageUrl(author.url ?? undefined) ?? githubAvatarUrl(author.url ?? undefined); + + if (url) { + try { + const res = await fetch(url, { next: { revalidate: 60 * 60 * 24 } }); + if (res.ok) { + const buffer = Buffer.from(await res.arrayBuffer()); + const type = sniffImageType(buffer); + if (type) return dataUri(buffer, type); + } + } catch { + // fall through to the placeholder + } + } + + return loadPlaceholder(); +}; diff --git a/lib/og/target.ts b/lib/og/target.ts new file mode 100644 index 000000000..6962d1970 --- /dev/null +++ b/lib/og/target.ts @@ -0,0 +1,62 @@ +import { unstable_cache } from "next/cache"; +import client from "@/tina/__generated__/client"; + +export interface OgAuthor { + title?: string | null; + url?: string | null; +} + +export type OgTarget = { kind: "rule"; title: string; authors: OgAuthor[] } | { kind: "category"; title: string } | { kind: "unknown" }; + +/** + * Category titles keyed by URL filename. mainCategoryQuery returns every category in + * one un-paginated call, avoiding the pagination walk page.tsx needs for a full + * relativePath. Top categories are skipped - they live at <dir>/index.mdx so their + * filename is always "index" and never matches a URL segment. + */ +const getCategoryTitles = unstable_cache( + async (): Promise<Record<string, string>> => { + const res = await client.queries.mainCategoryQuery(); + const titles: Record<string, string> = {}; + + for (const entry of (res?.data?.category as any)?.index ?? []) { + for (const child of entry?.top_category?.index ?? []) { + const filename = child?.category?._sys?.filename; + if (filename && child.category.title) titles[filename] = child.category.title; + } + } + + return titles; + }, + ["og-category-titles"], + { tags: ["category-rule-data"] } +); + +/** + * Dispatches on the result, not on a thrown query: Tina throws identically for "no such + * record" and "network is down", so treating a throw as "must be a category" would ship + * a hub card titled "SSW.Rules" for a real rule and cache it for a day. + */ +export async function resolveOgTarget(filename: string): Promise<OgTarget> { + try { + const rule = await client.queries.ruleDataBasic({ relativePath: `${filename}/rule.mdx` }); + if (rule?.data?.rule?.title) { + return { + kind: "rule", + title: rule.data.rule.title, + authors: (rule.data.rule.authors ?? []).filter(Boolean) as OgAuthor[], + }; + } + } catch { + // Not a rule, or Tina is unwell. Either way the category lookup decides next. + } + + try { + const title = (await getCategoryTitles())[filename]; + if (title) return { kind: "category", title }; + } catch { + // Categories failed too - treat as unknown rather than guessing at a card + } + + return { kind: "unknown" }; +} diff --git a/lib/pageMetadata.ts b/lib/pageMetadata.ts index 9f7abccd8..90a08d767 100644 --- a/lib/pageMetadata.ts +++ b/lib/pageMetadata.ts @@ -1,5 +1,5 @@ import type { Metadata } from "next"; -import { siteUrl } from "@/site-config"; +import { siteTitle, siteUrl, social } from "@/site-config"; interface PageMetadataOptions { title: string; @@ -14,13 +14,10 @@ interface PageMetadataOptions { /** * Builds a page's metadata with matching og: and twitter: tags. * - * Next does NOT derive og:title from `title`, and a page that sets only `title` - * silently inherits the layout's generic openGraph block - so every page shared as - * "SSW.Rules | Secret Ingredients..." regardless of what it actually was. Routing - * every page through here keeps the three in sync. - * - * Deliberately never sets openGraph.images: the opengraph-image.tsx routes supply the - * card, and setting images here would override the generated one. + * Next does not derive og:title from `title`, and does not deep-merge: a page setting + * `openGraph` replaces the layout's wholesale, so siteName/locale/handles are repeated + * here rather than inherited. Never sets openGraph.images - the opengraph-image routes + * supply the card, and Next only merges it when openGraph has no `images` key. */ export function pageMetadata({ title, description, path = "", type = "website", robots }: PageMetadataOptions): Metadata { const url = path ? `${siteUrl}/${path}` : `${siteUrl}/`; @@ -29,8 +26,8 @@ export function pageMetadata({ title, description, path = "", type = "website", title, description, alternates: { canonical: url }, - openGraph: { title, description, url, type }, - twitter: { card: "summary_large_image", title, description }, + openGraph: { title, description, url, type, siteName: siteTitle, locale: "en_AU" }, + twitter: { card: "summary_large_image", title, description, site: `@${social.twitter}`, creator: `@${social.twitter}` }, ...(robots ? { robots } : {}), }; } diff --git a/package.json b/package.json index 72ed8203c..01137e31f 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "dev:build": "next build", "prepare:content": "cross-env node ./scripts/prepare-content.js", "crawl-sitemap": "node ./scripts/crawl-sitemap.js", - "test": "jest" + "test": "jest", + "verify:og": "node ./scripts/og-verify.mjs" }, "devDependencies": { "@biomejs/biome": "^2.4.14", @@ -31,6 +32,7 @@ "@types/styled-components": "^5.1.36", "autoprefixer": "^10.5.0", "cross-env": "^10.1.0", + "esbuild": "^0.25.0", "jest": "^30.3.0", "jest-environment-jsdom": "^30.3.0", "postcss": "^8.5.14", diff --git a/scripts/og-verify.mjs b/scripts/og-verify.mjs index ff9699af7..e34f2db54 100644 --- a/scripts/og-verify.mjs +++ b/scripts/og-verify.mjs @@ -1,9 +1,8 @@ /** - * Renders components/og/card.tsx directly, bypassing Tina, so the Open Graph card can be - * eyeballed without running the whole site. Covers the cases that actually broke during - * development: multiple authors, no authors, over-long content, and unreadable photos. + * Renders the Open Graph card to PNGs so it can be eyeballed without running the site. + * Unit tests cover the pure logic; this is the visual check. * - * node scripts/og-verify.mjs [outDir] (default: ./og-preview) + * pnpm verify:og [outDir] (default: ./og-preview) */ import { execFileSync } from "node:child_process"; import { mkdir, rm, writeFile } from "node:fs/promises"; @@ -15,9 +14,9 @@ const build = path.join("scripts", ".og-card.build.mjs"); // card.tsx is TSX and imports via "@/" - bundle it before importing execFileSync( - "./node_modules/.bin/esbuild", + "esbuild", [ - "components/og/card.tsx", + "lib/og/card.tsx", "--bundle", "--format=esm", "--platform=node", @@ -27,10 +26,10 @@ execFileSync( `--outfile=${build}`, "--log-level=error", ], - { stdio: "inherit" } + { stdio: "inherit", preferLocal: true, shell: false, env: { ...process.env, PATH: `./node_modules/.bin:${process.env.PATH}` } } ); -const { OgCard, OG_SIZE } = await import(`../${build}`); +const { buildOgCard, OG_SIZE } = await import(`../${build}`); const P = (title, slug) => ({ title, url: `https://www.ssw.com.au/people/${slug}` }); @@ -81,11 +80,13 @@ const cases = { await mkdir(outDir, { recursive: true }); -for (const [name, rule] of Object.entries(cases)) { - const res = new ImageResponse(await OgCard(rule), OG_SIZE); - const file = path.join(outDir, `${name}.png`); - await writeFile(file, Buffer.from(await res.arrayBuffer())); - console.log(`wrote ${file}`); +try { + for (const [name, rule] of Object.entries(cases)) { + const res = new ImageResponse(await buildOgCard(rule), OG_SIZE); + const file = path.join(outDir, `${name}.png`); + await writeFile(file, Buffer.from(await res.arrayBuffer())); + console.log(`wrote ${file}`); + } +} finally { + await rm(build, { force: true }); } - -await rm(build, { force: true }); From 21673c8523005994b77aad1c18d7d5bccb473b86 Mon Sep 17 00:00:00 2001 From: isaaclombardssw <isaaclombard@ssw.com.au> Date: Wed, 5 Aug 2026 16:52:43 +1000 Subject: [PATCH 09/16] fix: address round 2 review findings Blocking: - esbuild was added to package.json without updating pnpm-lock.yaml, so the Dockerfile and CI (both `pnpm install --frozen-lockfile`) would fail with ERR_PNPM_OUTDATED_LOCKFILE. Two reviewers independently suggested the dep was avoidable, and it was: jest already transforms TSX with the @/ mapper, so the preview is now an opt-in jest test and the dependency is gone entirely. The lockfile is untouched by this PR again. Material: - The category cache was tagged only `category-rule-data`, which the webhook never fires, so with no TTL it was effectively cached for a year. Tagged with `rule-count` as well and given a 24h revalidate. - A Tina outage collapsed to `unknown` and 404d a real rule's card. `unavailable` is now distinct from `unknown`, and only a genuine miss 404s. - The image route 404d on filenames where page.tsx still serves a 200. Those now render the generic card - a plain preview beats a broken one. - The avatar fetch had no timeout, so a slow GitHub could stall past a crawler deadline and yield no preview at all. Bounded to 3s. - Colour constants claimed to mirror the ssw-* tokens but did not; INK was #111111 against --color-ssw-black #333333. They are the real token values now. - resolveOgTarget, which decides 404-vs-card, had no tests. It and buildOgCard now do: 35 passing. - Dispatch order now matches page.tsx (category first) so the card and the page cannot disagree about what a filename is. Also: cards render in Nunito rather than Satori's default sans, one canonical `tagline` in site-config replaces four spellings of the homepage title, the layout reuses pageMetadata instead of restating it, and authorImageUrl replaces the resolve chain that was spelled out in both callers. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- __tests__/lib/ogCard.preview.test.tsx | 65 ++++++++++++++++++ __tests__/lib/ogCard.test.tsx | 77 +++++++++++++++++++++ __tests__/lib/ogTarget.test.ts | 67 +++++++++++++++++++ app/(home)/page.tsx | 3 +- app/[filename]/opengraph-image.tsx | 12 ++-- app/layout.tsx | 19 +----- app/opengraph-image.tsx | 7 +- app/search/page.tsx | 3 +- components/AuthorsCard.tsx | 4 +- lib/authorImage.ts | 18 ++--- lib/og/card.tsx | 24 +++---- lib/og/fonts/Nunito-Bold.ttf | Bin 0 -> 125464 bytes lib/og/fonts/Nunito-Regular.ttf | Bin 0 -> 125528 bytes lib/og/images.ts | 39 +++++++---- lib/og/target.ts | 43 ++++++++---- package.json | 3 +- scripts/og-verify.mjs | 92 -------------------------- site-config.ts | 16 +++-- 18 files changed, 315 insertions(+), 177 deletions(-) create mode 100644 __tests__/lib/ogCard.preview.test.tsx create mode 100644 __tests__/lib/ogCard.test.tsx create mode 100644 __tests__/lib/ogTarget.test.ts create mode 100644 lib/og/fonts/Nunito-Bold.ttf create mode 100644 lib/og/fonts/Nunito-Regular.ttf delete mode 100644 scripts/og-verify.mjs diff --git a/__tests__/lib/ogCard.preview.test.tsx b/__tests__/lib/ogCard.preview.test.tsx new file mode 100644 index 000000000..f34f424a7 --- /dev/null +++ b/__tests__/lib/ogCard.preview.test.tsx @@ -0,0 +1,65 @@ +/** + * @jest-environment node + * + * Renders the real cards to PNGs so they can be eyeballed. Hits the network for author + * photos, so it is opt-in and skipped by default: + * + * pnpm verify:og -> ./og-preview + * OG_PREVIEW_DIR=~/tmp pnpm verify:og + */ +import { mkdir, writeFile } from "node:fs/promises"; +import path from "node:path"; +import { ImageResponse } from "next/og"; +import { buildOgCard, OG_SIZE } from "@/lib/og/card"; +import { loadFonts } from "@/lib/og/images"; + +const outDir = process.env.OG_PREVIEW_DIR; +const P = (title: string, slug: string) => ({ title, url: `https://www.ssw.com.au/people/${slug}` }); +const TOTAL = 3802; + +const cases: Record<string, Parameters<typeof buildOgCard>[0]> = { + "1-single-author": { + title: "Do you know when to change the email subject (or appointment subject)?", + authors: [P("Adam Cogan", "adam-cogan")], + totalRules: TOTAL, + }, + // Igor's photo is a PNG named .jpg - regression case for the magic-byte sniffing + "2-many-authors": { + title: "Do you use the best tools for database schema changes?", + authors: [ + P("Adam Cogan", "adam-cogan"), + P("Igor Goldobin", "igor-goldobin"), + P("Adam Stephensen", "adam-stephensen"), + P("Thiago Passos", "thiago-passos"), + P("Brendan Richards", "brendan-richards"), + ], + totalRules: TOTAL, + }, + "3-no-authors": { title: "Do you know the rules to better unit tests?", authors: [], totalRules: TOTAL }, + "4-longest-content": { + title: "Do you create a Sprint Forecast email 📩? (aka Functionality to be developed per Sprint Planning)", + authors: [P("Christian Morford-Waite", "christian-morford-waite"), P("Sebastien Boissiere", "sebastien-boissiere"), P("Kosta Madorsky", "kosta-madorsky")], + totalRules: TOTAL, + }, + // Neither author has a profile photo - must fall back, not fail the image + "5-missing-photos": { + title: "Do you have a rule authored by someone with no profile photo?", + authors: [P("Toby Goodman", "toby-goodman"), P("Ryan Tee", "ryan-tee")], + totalRules: TOTAL, + }, + "6-homepage": { title: "Secret Ingredients to Quality Software", totalRules: TOTAL, isHub: true }, + "7-category": { title: "Rules to Better Interfaces (Forms)", totalRules: TOTAL, isHub: true }, + "8-category-longest": { title: "Rules to Better User Acceptance Tests (UAT) for Bug Management", totalRules: TOTAL, isHub: true }, +}; + +(outDir ? describe : describe.skip)("OG card preview", () => { + jest.setTimeout(60_000); + + it.each(Object.keys(cases))("renders %s", async (name) => { + await mkdir(outDir as string, { recursive: true }); + const res = new ImageResponse(await buildOgCard(cases[name]), { ...OG_SIZE, fonts: await loadFonts() }); + const png = Buffer.from(await res.arrayBuffer()); + expect(png.subarray(0, 8)).toEqual(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])); + await writeFile(path.join(outDir as string, `${name}.png`), png); + }); +}); diff --git a/__tests__/lib/ogCard.test.tsx b/__tests__/lib/ogCard.test.tsx new file mode 100644 index 000000000..f79e703c3 --- /dev/null +++ b/__tests__/lib/ogCard.test.tsx @@ -0,0 +1,77 @@ +/** + * @jest-environment node + */ +import { buildOgCard } from "@/lib/og/card"; + +jest.mock("@/lib/og/images", () => ({ + loadPolygon: jest.fn(async () => "data:image/png;base64,POLYGON"), + loadAvatar: jest.fn(async (author: { url?: string }) => `data:image/jpeg;base64,${author.url}`), +})); + +/** Flattens the element tree to the text nodes Satori would draw. */ +const texts = (node: any): string[] => { + if (node == null || typeof node === "boolean") return []; + if (typeof node === "string" || typeof node === "number") return [String(node)]; + if (Array.isArray(node)) return node.flatMap(texts); + return texts(node.props?.children); +}; + +const find = (node: any, predicate: (n: any) => boolean): any[] => { + if (node == null || typeof node !== "object") return []; + if (Array.isArray(node)) return node.flatMap((n) => find(n, predicate)); + const self = predicate(node) ? [node] : []; + return [...self, ...find(node.props?.children, predicate)]; +}; + +// Avatar and ExtraChip are component elements, so their output is not in the tree - +// assert on the props they were handed instead. +const componentsNamed = (node: any, name: string) => find(node, (n) => typeof n.type === "function" && n.type.name === name); + +const author = (title: string) => ({ title, url: `https://www.ssw.com.au/people/${title.toLowerCase().replace(/ /g, "-")}` }); + +describe("buildOgCard", () => { + it("summarises contributors rather than listing names", async () => { + const card = await buildOgCard({ title: "A rule", authors: [author("Adam Cogan"), author("Igor Goldobin"), author("Kosta Madorsky")] }); + expect(texts(card)).toContain("3 contributors"); + expect(texts(card)).not.toContain("Adam Cogan"); + }); + + it("singularises a lone contributor", async () => { + const card = await buildOgCard({ title: "A rule", authors: [author("Adam Cogan")] }); + expect(texts(card)).toContain("1 contributor"); + }); + + it("caps faces at two and puts the remainder in a chip", async () => { + const card = await buildOgCard({ title: "A rule", authors: [author("A B"), author("C D"), author("E F"), author("G H")] }); + expect(componentsNamed(card, "Avatar")).toHaveLength(2); + expect(componentsNamed(card, "ExtraChip")[0]?.props.count).toBe(2); + expect(texts(card)).toContain("4 contributors"); + }); + + // Regression: `extra && <div/>` rendered a literal "0" on single-author cards + it("renders no chip when every contributor has a face", async () => { + const card = await buildOgCard({ title: "A rule", authors: [author("A B"), author("C D")] }); + expect(componentsNamed(card, "ExtraChip")).toHaveLength(0); + expect(texts(card)).toContain("2 contributors"); + }); + + it("leaves the byline empty rather than falling back to the site URL", async () => { + const card = await buildOgCard({ title: "A category", authors: [] }); + expect(texts(card)).not.toContain("0 contributors"); + expect(componentsNamed(card, "Avatar")).toHaveLength(0); + }); + + it("always shows the site URL, and the rule total only when given", async () => { + expect(texts(await buildOgCard({ title: "x", totalRules: 3802 }))).toEqual(expect.arrayContaining(["3,802 rules", "ssw.com.au/rules"])); + expect(texts(await buildOgCard({ title: "x" }))).toContain("ssw.com.au/rules"); + expect(texts(await buildOgCard({ title: "x" })).join(" ")).not.toContain("rules |"); + }); + + it("gives hub pages a larger title than rules", async () => { + const titleSize = async (isHub: boolean) => { + const card = await buildOgCard({ title: "T", isHub }); + return find(card, (n) => n.props?.style?.lineClamp === 3)[0]?.props?.style?.fontSize; + }; + expect(await titleSize(true)).toBeGreaterThan(await titleSize(false)); + }); +}); diff --git a/__tests__/lib/ogTarget.test.ts b/__tests__/lib/ogTarget.test.ts new file mode 100644 index 000000000..1b21eafd4 --- /dev/null +++ b/__tests__/lib/ogTarget.test.ts @@ -0,0 +1,67 @@ +/** + * @jest-environment node + */ +import { resolveOgTarget } from "@/lib/og/target"; +import client from "@/tina/__generated__/client"; + +jest.mock("next/cache", () => ({ unstable_cache: (fn: unknown) => fn })); +jest.mock("@/tina/__generated__/client", () => ({ __esModule: true, default: { queries: { mainCategoryQuery: jest.fn(), ruleDataBasic: jest.fn() } } })); + +const queries = (client as any).queries; + +const categories = (...filenames: string[]) => ({ + data: { category: { index: [{ top_category: { index: filenames.map((f) => ({ category: { _sys: { filename: f }, title: `Title of ${f}` } })) } }] } }, +}); + +const rule = (title: string, authors: { title: string; url: string }[] = []) => ({ data: { rule: { title, authors } } }); + +beforeEach(() => jest.resetAllMocks()); + +describe("resolveOgTarget", () => { + it("resolves a rule with its authors", async () => { + queries.mainCategoryQuery.mockResolvedValue(categories("some-category")); + queries.ruleDataBasic.mockResolvedValue(rule("Do you do the thing?", [{ title: "Adam Cogan", url: "x" }])); + + await expect(resolveOgTarget("do-the-thing")).resolves.toEqual({ + kind: "rule", + title: "Do you do the thing?", + authors: [{ title: "Adam Cogan", url: "x" }], + }); + }); + + it("resolves a category without querying for a rule", async () => { + queries.mainCategoryQuery.mockResolvedValue(categories("rules-to-better-x")); + + await expect(resolveOgTarget("rules-to-better-x")).resolves.toEqual({ kind: "category", title: "Title of rules-to-better-x" }); + expect(queries.ruleDataBasic).not.toHaveBeenCalled(); + }); + + it("reports a genuine miss as unknown", async () => { + queries.mainCategoryQuery.mockResolvedValue(categories("other")); + queries.ruleDataBasic.mockRejectedValue(new Error("Unable to find record")); + + await expect(resolveOgTarget("no-such-page")).resolves.toEqual({ kind: "unknown" }); + }); + + // The distinction that matters: an outage must not 404 a real rule's card + it("reports an outage as unavailable, not unknown", async () => { + queries.mainCategoryQuery.mockRejectedValue(new Error("ECONNREFUSED")); + queries.ruleDataBasic.mockRejectedValue(new Error("ECONNREFUSED")); + + await expect(resolveOgTarget("a-real-rule")).resolves.toEqual({ kind: "unavailable" }); + }); + + it("still returns the rule when only the category lookup is down", async () => { + queries.mainCategoryQuery.mockRejectedValue(new Error("ECONNREFUSED")); + queries.ruleDataBasic.mockResolvedValue(rule("A rule")); + + await expect(resolveOgTarget("a-real-rule")).resolves.toMatchObject({ kind: "rule", title: "A rule" }); + }); + + it("treats a rule with no title as not a rule", async () => { + queries.mainCategoryQuery.mockResolvedValue(categories("other")); + queries.ruleDataBasic.mockResolvedValue({ data: { rule: {} } }); + + await expect(resolveOgTarget("untitled")).resolves.toEqual({ kind: "unknown" }); + }); +}); diff --git a/app/(home)/page.tsx b/app/(home)/page.tsx index 22eb9efd8..7954f232d 100644 --- a/app/(home)/page.tsx +++ b/app/(home)/page.tsx @@ -3,6 +3,7 @@ import { TinaActivityWrapper } from "@/app/(home)/TinaActivityWrapper"; import { pageMetadata } from "@/lib/pageMetadata"; import { fetchDiscussionData } from "@/lib/services/github/discussions.service"; import { fetchActivityLatestRules, fetchHomepageData, fetchRuleCount } from "@/lib/services/rules"; +import { homepageTitle, siteTitle } from "@/site-config"; export const revalidate = 21600; // 6 hours @@ -31,5 +32,5 @@ export default async function Home() { } export async function generateMetadata() { - return pageMetadata({ title: "SSW.Rules | Secret Ingredients for Quality Software (Open Source on GitHub)" }); + return pageMetadata({ title: `${siteTitle} | ${homepageTitle}` }); } diff --git a/app/[filename]/opengraph-image.tsx b/app/[filename]/opengraph-image.tsx index 08049fe90..56ab669d4 100644 --- a/app/[filename]/opengraph-image.tsx +++ b/app/[filename]/opengraph-image.tsx @@ -1,8 +1,10 @@ import { notFound } from "next/navigation"; import { ImageResponse } from "next/og"; import { buildOgCard, OG_CONTENT_TYPE, OG_SIZE } from "@/lib/og/card"; +import { loadFonts } from "@/lib/og/images"; import { resolveOgTarget } from "@/lib/og/target"; import { fetchRuleCount } from "@/lib/services/rules"; +import { tagline } from "@/site-config"; export const size = OG_SIZE; export const contentType = OG_CONTENT_TYPE; @@ -15,16 +17,18 @@ export default async function OpengraphImage({ params }: { params: Promise<{ fil const [target, totalRules] = await Promise.all([resolveOgTarget(filename), fetchRuleCount()]); - // Without this, any junk path renders a card - an unbounded cache key and Satori render + // Only a genuine miss 404s. A failed lookup falls through to the generic card below, + // because page.tsx still serves these paths and a broken og:image is worse than a + // plain one. if (target.kind === "unknown") notFound(); return new ImageResponse( await buildOgCard({ - title: target.title, + title: target.kind === "unavailable" ? tagline : target.title, authors: target.kind === "rule" ? target.authors : [], totalRules, - isHub: target.kind === "category", + isHub: target.kind !== "rule", }), - size + { ...size, fonts: await loadFonts() } ); } diff --git a/app/layout.tsx b/app/layout.tsx index 56feff5cf..4085c482c 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -8,7 +8,8 @@ import "@/styles.css"; import UserClientProvider from "@/components/auth/UserClientProvider"; import AppInsightsProvider from "@/components/providers/AppInsightsProvider"; import { TailwindIndicator } from "@/components/ui/breakpoint-indicator"; -import { homepageTitle, parentSiteUrl, siteDescription, siteTitle, siteUrl, social } from "@/site-config"; +import { pageMetadata } from "@/lib/pageMetadata"; +import { homepageTitle, parentSiteUrl, siteDescription, siteTitle } from "@/site-config"; const fontSans = FontSans({ subsets: ["latin"], @@ -29,25 +30,11 @@ const lato = Lato({ const defaultTitle = `${siteTitle} | ${homepageTitle}`; export const metadata: Metadata = { + ...pageMetadata({ title: defaultTitle, description: siteDescription }), // Origin only, NOT siteUrl - that ends in /rules and Next joins basePath into the // image path as well, giving /rules/rules/<slug>/opengraph-image and a 404. Dev // hides it by substituting a localhost base. metadataBase: new URL(parentSiteUrl), - title: defaultTitle, - description: siteDescription, - openGraph: { - title: defaultTitle, - description: siteDescription, - url: siteUrl, - siteName: siteTitle, - type: "website", - locale: "en_AU", - }, - twitter: { - card: "summary_large_image", - site: `@${social.twitter}`, - creator: `@${social.twitter}`, - }, }; const jsonLd = [ diff --git a/app/opengraph-image.tsx b/app/opengraph-image.tsx index f1376673b..a8397276d 100644 --- a/app/opengraph-image.tsx +++ b/app/opengraph-image.tsx @@ -1,6 +1,8 @@ import { ImageResponse } from "next/og"; import { buildOgCard, OG_CONTENT_TYPE, OG_SIZE } from "@/lib/og/card"; +import { loadFonts } from "@/lib/og/images"; import { fetchRuleCount } from "@/lib/services/rules"; +import { tagline } from "@/site-config"; export const size = OG_SIZE; export const contentType = OG_CONTENT_TYPE; @@ -8,11 +10,8 @@ export const alt = "SSW Rules"; export const revalidate = 60 * 60 * 24; -// Shorter than site-config's homepageTitle, which carries an SEO suffix -const OG_TITLE = "Secret Ingredients to Quality Software"; - // Default card for every page without one of its own - home, search, latest-rules, // archived, user, orphaned. Inherited automatically by Next's metadata resolution. export default async function OpengraphImage() { - return new ImageResponse(await buildOgCard({ title: OG_TITLE, totalRules: await fetchRuleCount(), isHub: true }), size); + return new ImageResponse(await buildOgCard({ title: tagline, totalRules: await fetchRuleCount(), isHub: true }), { ...size, fonts: await loadFonts() }); } diff --git a/app/search/page.tsx b/app/search/page.tsx index e0551407b..daceac9e0 100644 --- a/app/search/page.tsx +++ b/app/search/page.tsx @@ -2,6 +2,7 @@ import { Suspense } from "react"; import { Section } from "@/components/layout/section"; import { pageMetadata } from "@/lib/pageMetadata"; import { fetchLatestRules, fetchRuleCount } from "@/lib/services/rules"; +import { homepageTitle, siteTitle } from "@/site-config"; import RulesSearchClientPage from "./client-page"; export const revalidate = 300; @@ -19,5 +20,5 @@ export default async function RulesSearchPage() { } export async function generateMetadata() { - return pageMetadata({ title: "SSW.Rules | Secret Ingredients for Quality Software (Open Source on GitHub)", path: "search" }); + return pageMetadata({ title: `${siteTitle} | ${homepageTitle}`, path: "search" }); } diff --git a/components/AuthorsCard.tsx b/components/AuthorsCard.tsx index 1d04b6cbd..e05b5ca08 100644 --- a/components/AuthorsCard.tsx +++ b/components/AuthorsCard.tsx @@ -4,7 +4,7 @@ import Image from "next/image"; import { useCallback, useEffect, useMemo, useState } from "react"; import { tinaField } from "tinacms/dist/react"; import { Card } from "@/components/ui/card"; -import { githubAvatarUrl, profileImageUrl } from "@/lib/authorImage"; +import { authorImageUrl } from "@/lib/authorImage"; interface Author { title?: string; @@ -29,7 +29,7 @@ export default function AuthorsCard({ authors }: AuthorsCardProps) { if (img?.includes("http")) return img; - return profileImageUrl(url) ?? githubAvatarUrl(url) ?? placeholderImg; + return authorImageUrl(url) ?? placeholderImg; }, [placeholderImg] ); diff --git a/lib/authorImage.ts b/lib/authorImage.ts index dd57dfad9..7f8f8e437 100644 --- a/lib/authorImage.ts +++ b/lib/authorImage.ts @@ -1,16 +1,13 @@ /** - * Derives an SSW People profile photo URL from an author's profile link. + * Resolves an author's profile link to a photo URL. * - * Profile images live in SSW.People.Profiles under a Title-Cased directory name, e.g. - * https://www.ssw.com.au/people/adam-cogan - * -> .../main/Adam-Cogan/Images/Adam-Cogan-Profile.jpg - * - * Shared by the authors card and the Open Graph image route so the convention only - * lives in one place. + * SSW People profile images live in SSW.People.Profiles under a Title-Cased directory: + * https://www.ssw.com.au/people/adam-cogan + * -> .../main/Adam-Cogan/Images/Adam-Cogan-Profile.jpg */ const PROFILES_REPO = "https://raw.githubusercontent.com/SSWConsulting/SSW.People.Profiles/main"; -export const profileImageUrl = (peopleUrl?: string): string | null => { +export const profileImageUrl = (peopleUrl?: string | null): string | null => { // Host-scoped on purpose: a bare /people/ match would also claim URLs like // github.com/some-people/x, which belong to the GitHub avatar fallback. if (!peopleUrl?.includes("ssw.com.au/people")) return null; @@ -27,8 +24,11 @@ export const profileImageUrl = (peopleUrl?: string): string | null => { return `${PROFILES_REPO}/${dir}/Images/${dir}-Profile.jpg`; }; -export const githubAvatarUrl = (url?: string): string | null => { +export const githubAvatarUrl = (url?: string | null): string | null => { if (!url?.includes("github.com/")) return null; const username = url.split("github.com/").pop(); return username ? `https://avatars.githubusercontent.com/${username}` : null; }; + +/** The full resolution chain, so callers do not each re-spell the precedence. */ +export const authorImageUrl = (url?: string | null): string | null => profileImageUrl(url) ?? githubAvatarUrl(url); diff --git a/lib/og/card.tsx b/lib/og/card.tsx index ff52c50b7..3f9ed6f1e 100644 --- a/lib/og/card.tsx +++ b/lib/og/card.tsx @@ -9,12 +9,12 @@ const OVERLAP = 16; const AVATAR = 72; const FOOTER_SIZE = 26; -// Satori renders standalone - no CSS runtime, no Tailwind, no access to styles.css. -// These mirror the ssw-* tokens by value; keep them in step. -const SSW_RED = "#cc4141"; -const INK = "#111111"; -const INK_MUTED = "#555555"; -const INK_FAINT = "#888888"; +// Satori renders standalone - no CSS runtime, no Tailwind, no access to styles.css - +// so the ssw-* classes cannot be used here. These are those tokens by value; keep them +// in step with styles.css. +const SSW_RED = "#cc4141"; // --color-ssw-red +const SSW_BLACK = "#333333"; // --color-ssw-black +const SSW_GRAY = "#797979"; // --color-ssw-gray const RULE_LINE = "#c4c4c4"; const SURFACE = "#ffffff"; @@ -32,7 +32,7 @@ const ExtraChip = ({ count }: { count: number }) => ( background: SURFACE, fontSize: 24, fontWeight: 600, - color: INK_MUTED, + color: SSW_GRAY, }} > {`+${count}`} @@ -102,7 +102,7 @@ export async function buildOgCard({ title, authors = [], totalRules, isHub = fal justifyContent: "space-between", background: SURFACE, padding: 64, - fontFamily: "sans-serif", + fontFamily: "Nunito, sans-serif", position: "relative", }} > @@ -134,7 +134,7 @@ export async function buildOgCard({ title, authors = [], totalRules, isHub = fal <div style={{ display: "flex", flexDirection: "column" }}> <div style={{ fontSize: 28, color: SSW_RED, letterSpacing: 2, marginBottom: 24 }}>SSW.RULES</div> - <div style={{ fontSize: isHub ? 72 : 54, fontWeight: 700, color: INK, lineHeight: 1.15, display: "block", lineClamp: 3 }}>{title}</div> + <div style={{ fontSize: isHub ? 72 : 54, fontWeight: 700, color: SSW_BLACK, lineHeight: 1.15, display: "block", lineClamp: 3 }}>{title}</div> </div> <div style={{ display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%" }}> @@ -146,7 +146,7 @@ export async function buildOgCard({ title, authors = [], totalRules, isHub = fal ))} {extra > 0 ? <ExtraChip count={extra} /> : null} </div> - <div style={{ fontSize: FOOTER_SIZE, color: INK_MUTED, marginLeft: 22, flexShrink: 0 }}> + <div style={{ fontSize: FOOTER_SIZE, color: SSW_GRAY, marginLeft: 22, flexShrink: 0 }}> {`${authorCount} ${authorCount === 1 ? "contributor" : "contributors"}`} </div> </div> @@ -155,9 +155,9 @@ export async function buildOgCard({ title, authors = [], totalRules, isHub = fal )} <div style={{ display: "flex", alignItems: "center", flexShrink: 0 }}> - {totalRules ? <div style={{ fontSize: FOOTER_SIZE, color: INK_FAINT }}>{`${totalRules.toLocaleString("en-AU")} rules`}</div> : null} + {totalRules ? <div style={{ fontSize: FOOTER_SIZE, color: SSW_GRAY }}>{`${totalRules.toLocaleString("en-AU")} rules`}</div> : null} {totalRules ? <div style={{ fontSize: FOOTER_SIZE, color: RULE_LINE, marginLeft: 20, marginRight: 20 }}>|</div> : null} - <div style={{ fontSize: FOOTER_SIZE, color: "#666666" }}>ssw.com.au/rules</div> + <div style={{ fontSize: FOOTER_SIZE, color: SSW_GRAY }}>ssw.com.au/rules</div> </div> </div> </div> diff --git a/lib/og/fonts/Nunito-Bold.ttf b/lib/og/fonts/Nunito-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..063f39a76a495691d71ce52bd1ad65576b804a90 GIT binary patch literal 125464 zcmd3P2Vhji*8h~vrU40r5+K=Z3WOF&Hk(RKr3dMR9zuZ7f+189kS6x7*boaAY>1s_ zLwzdhvlm1~1PdynSP(_o|L@Gq-Mt$U#qWLZ`@an{bMBclXJ*dKoS8Xunaen1EE=AJ zvHry+rBD5_lO9GfCfxnc7&dbEf=!PwHU>oNTJ|3~y70)nmID}b)-e|59X7IuXZ`dU zd5rOoKrnUWsDe?SA9ytt&ztaETsf~|LCn)9J2TdLKVuQwW>zd*0DLs!TOtgbId|EN z)tTFFV{C6r#-kmxsw$?(-OxD(@lz3>Jqw7iH0KX^?uF-+S@Y_aKIEynnz6(S!DjN@ zn#zh36CazvShG99E_+_Z(glvL>}}A;f!;m8VqR6+*(1M3U65Y1UQn~JZrHS0`xwhO z40bIS)K)E+<-Bk`=$n8(^fB&Rzuj>W9vS!fSQJ9$Xve0pP*%f2=*jkT5EWzc$CEcP z7Bb-E?<ao_=~<74Ia(=<ye_`?%A5zMMD_ZaNqLC4eAs5|yA<y8Y|TR2uS0q|5<u%@ zg0T1z_b~O;Qu!%NESWj0jtWs-S234Ud`q;NL@0QoNki!<aj19#fkTW#7=pT=FUH|{ zunzfT7RQr_&iZX(!gmI954N7mhLx4DEsUKIx_*u<-p$SUH5AW36T1+&kuzgW*ws`5 zM>ybH*ggYu;NLQ^KrLQ2uw>oXW&=A|YqrtAA*>ynZ(t|z;|$!4WwRs=qgqW6qw+%C zo3IE2hX(jV3K1yB2(;EbRsoI!SslW;teRD_v8)Q=Og0NRa&>G0TgdWR5Bx1ed@W)Z z0K1TNhpR@a?%-346g}85R?3F3GPVdjt3gx4(pVw<xokRyMir<iMGa!zEEDOnSvvCs z(YyWhf%u-F7zS6u2x^G8m4`jH2>C2v%T#%FZQRH!on<gDavz1dRUx#eaI-T&UBhN0 zrV^!hvjXHsQlR=R#B--pBr;Rga~9~Pp+1$MoCi6~L|6lVE;!8qG+)W92f{$<G1}1w z1yW&H0z9C4aV$nX_0zBUHwZCy_!tv<Ksx|%8@RU21>cQc!jXPB{E^6;Be%!l|AT!2 z{}B5g{!#o1_5%+CrwERb%A508`0aQ*_;DEjoV$27{9IlDzlayXFQHudI6e;kcwPs8 zF~1M~cK!<dfANpuf5MRqKg18g|C%30nZM)T0Y1uqg#RmsCl^9Ag&!qQC(&B8hTl$L z^oow6BmB;yGklNm!1szQ`1v9qelO7%eyJD=f0!tTKT%ACKSfN1UnS<ipD$|QFA^)@ zuN3FOzd&3F|8j9T{Hw*)@HdI;;NK!{fxlI3g@2zwEyQ-Q9sVQY5%`aZf53lM?1uk} zco+U2u?PN#;v@K<h)>`j5U8oVS>6eqbhmsE{=;%F{Ey_XOgfy7P#V`5+1%0G(HwqD z(q@iWM_b6BT9~OeZUQJoabb!}7`VK^n#;GqD;d0gR;}rjFUj5VW%-KymwXMWF&*$Q z{uq<Rr9(!sLzT;F=d$f{E9&M$r=8Ej3&xkY*`A_;QEs-lXaxK{gA2yPA3AJ^n@uYl zQj8uxV%Sh%Fy)XxVz3)ynL%rZs{SX@$3j>n^hAAJL<6|+25_MU=LA0iT|@kuuwG0Q zjvU}-DMbTDyJ;q?mt$B1oSeX6c2%^*jr+MZt*n?^$F@~g&Rf7XEC15z^K0g@^Jmmn zRI=4`t7lfQ<(TE>vO49@SN<&JPgDLx<&T-aXkINwIq^oB;D;%nv>|7tn>l7P@*|ax zaS6B$e92m{7|5KSo5ROk0h|+3Bso&4^%KR%vi2c6Lfj#4$9;}6N15z|9y(hL;3xUB z{2~0U;Zyklp3gh-0hkHiz~7zFo4NR-_NFp%Xp>xU*G~f4st<H!AJvzl;kQ=vAN4Ms zf?;0JPZkb+kKeCw)FzyC0sl_SMsNO7e5Gj-?@)PBew3bO(I(6Z%_C64ui+0QN{%t< zFIOMmF;y<XI_jAPav>c=CB^au9Jn|pe1IueXcxrmxK<P=nbcC|GD4-$wRQU5z!R7D zoLYi^AYUhBPrMI{pAA1<-e#D)t0CRbX^aBy41KbdM!BM*8ntF&&>1ttOfgG*im`l9 ze1_OCeoVwG>RNGaPztW3Ysp@huNhKsnXR}v0Yi?)XABySPo-z&)9g#VL8r?G+zm5x zEHpey2VE&R^cf)1mkL752+R?r>q%2<Xbc<22lBzdYEA;_9qbYIG{2iaq-Y;vPw~6> zgMJEH5m7sGv{@kks{z+xo=;cl<506`79qc2LVhj3g#Uy54F3D_bNG8eYf*fnDE2Fg zj}^tfdK9<e`5*FD_|M5(;BS{V!+*fW<4#3!hoZP$QEXKds3|nxW6*d9Z6!U45*}s; z*dF#8d!B7$m$H>8`D`{7>xN!xZPOAIVG`0pdB21ImV~@eYKfjfG2i0ph(zB-45W(~ z%IPaVbN~?aJ8&QPq4xkCfz;9K<vRq+x8VnP?!wb{`3(HK<+Jb~@aOgvo}QLZsF){J z3~}D+haLq)z0e_d_@Vm&J#BKkmtc7h{0BhQ4E*nt56DO4<B;mpsKL8(kNi{~LOUHn zyy*q}Hr82wE<clB$}i+T`LWzDKLPFA@*U8>2f6H#AIQCs?5Fa8Jc!g^A^kV<u>2M^ z`%Zo@kD|qYlt0Oz<uUn-JT8A#vy|1>1uurC@xalXMS7+sdKL9_T>`E3^fO@`pwKfK zS2G$%yS|8V^16J}ngu~2QNq2z(rg)+6|H_fk#*&R`1t=otpp3j7#fI-%4wvjnU~t} zL5u(@XN)RmM>Sh_RyxhWE=G^bMsFhBMS2Z0rK-E2dI0(!kEBJvCoRh7`spkkN3(tX zIsQe=@g$KHl~XFx5YKU-Y>B)`j>KKa7v*j!%~wDPC8=n<h^0~xJ?16VN4BGvJc#l? zf)S+q%5(C0`A@7QkT>dE4(e8z;U=n;>N<?08!)>(#GYZVvX8JP{0Xd@@K~P0(|Iq< zLZhJRpWrX?cldshB?`n@;sxoD(K1eUlDV>2o*|dX^W;^K-o420CkJyxJNh~XJH|RH z9W{<sjtd;uIPP#f=y=-kisOC9LC1HF6Ct4?F(C;dT|;t0ib95kObEF#<e$!_&bH1D z&J1U7=RoIZ=UV4m&VA0WoyS6>LfeO?hGvHL4ILahHncLdCiJY(b3?BPy(#qW(9c4@ z4{IHk6gDwzR@jEH%fmK@Z3}xO?Afr_!uE!J5%xoPdU&t!`QgjMH-ujvzBznb_#@%Z zhQAiRHzGD-V8rN%iimj;%OcK;xGLi2h<hU*kN9WAn-L#Jd=>F?B#&$w86TMz**kJ* z<fO>z$VHLoL|znmZRFO-2O@Vx{wwl>$j>8>Hpyr*p~-no-e}sQsjF$1rrAvko0c^l z-*iUP$C^Ih^o^z;H9geyr)I2KlV-8aQkr?2o!{)fW;>g`(Cn>d`<i{->{wJvRC-je zr~y%<qNYa8janMDF6z>#Em7N}o{4%RYJb$>sN>O&=;-LU=uXkz=zh`jqPIss5&cs1 zJJI`_CpJH$`NZb4n%6a7-TcDlo0`AVe1G%9&5yU})WX}MUyC6v#<iH+Vrh%#TD;!k z!xmq*_$5ZhM8&j^NsY;j=^HaFW<t!&n1wN`VlIfeCg#?d`(yqQ^J2`~E&H_`(sEqO z=`BBMd8k$AR*PCa*y`z4ue5r<)t9Y)Y~^d+ul4P%ceDv_)2dBHn|W={Zu4ZD-EH1& z^J$x-ZT^T2k8K;<AvPnnckIB}(Xkb=^J169u8+Me_Qu$|Vjqs(75lHYP1?3>>ux)t z?R{-`wtb=PTW$BX{krY3cGc~!Z}(}tZ`=LaKBRr~_WA8cwx8U-x_w>yRqfAje^vV} z?eA{?Nc&ywUv2+>Tw+|exT$gL;x3JQKJJaUkK&uh=f{`C509S|Umd?F{+#%W;;)VW zEdF~}lB>Hb-&N`w;hOB4?ON<w<GR@OFW1S0h=kS&NeSH(`XmfW7?Ut9VSd8$gbfLo zCu~mGmheczvk7k{97y=VE!-{KE_WAqw!6?><{t09$$hu`QTKE1*WDi`_Deh`@!2Gq zl%CWpX+YAbq^U`Bla?l}OL{%&!=x{heoXQuM<%yPPEPKT+%tJ_@}0?FB>#|nG9@CV zbxKl7_mupUxhYFi)}>sUazo0UDG#MQlk#fHo(`=$Bz5TCA-_XuhY=kncbMH_afdY> z-tTa*!*?A{bWH6yuj8_g>pNc7@y3oHrbec=Nli}ek=ir0f9lB8i&C#m-J1G9>b}&k zQ;&5Lotkx;-f2mvi#vVV>Dx}fcJAG|y7QTxw{*U<^NXF|?tH9EQkPL(Ztn7Nm(RN# z?ea(0%C0-Re&6-?ZeiUPcH7bIscuKR{hG$p!qa-B<)rmZ>z}qXZC%>Iv~Rj6bRX7z zRre>lAMVk*$EY6bdc2$-k=`PGa{9LP9qCV{zmVa`7?5#6#z&sEo`s&XJUcQwWNyrS z$J@cX!n@1+dscc@W!5X%t+I==hh&e--kQBXCoyME&gPtbxqWj7=Z?&sl6!ydk9l45 zX6J3o`!zo#zj=P!{0{kP`FZ&z`NQ*X%)cxD;rw0szxE92*}P|b&(1xwdKUB?+Vk3; zhkE|hYf!I^y)Nywsn@%`6ML8UzP9(xz3=V)aPKF3@9zC>?~nU*=rg6yias0rZ0qx0 zUuWOJeb4QCN#E=H-qEi~zX|;=>34m<I|`x;$_mC8Tv+f*!SO;?*r713FspEM;iSUq z!gmTkDr!>Ht7uNq?M3etoh;5To?U!T@z=#al=LduP;zm}btSiyY%4iZ+N1QG(x>~! z^-t+PzW=KOIu58E@ch8m1IG`%YT%0lPYkLUv~AD_gF^<F48COW3qu@31`Qc8<cc9b z3^_T}Ikd&l@}buceY-5WtgP(Dvb)M2E_<?UciEd|AD4Yq_Vciw!}<>!Ic&<XtB2h( z?7m?;hrKZDtzr9yeSJpG8EenD<c$5p+Ye73-gS89@N0&@J|b#F)`;FCN=6JFQ9hz- z#04XsAK7l?=#f{Ad}`#kqq>b+H)`i-=jhR+SB`#TOv0G5G0Vq1G**ty8GH8Fr^kLa zuIspY;}(xwHE!d$%f?+d?$&YljC*+8Q{!G7cW~TK<ss#*%U$Ii%e$9nm-i_zEiWq{ zQ$D$TMtM#7((-f4&o95C{D$(a<@c38TK-G}e+S2hjBh`_@A#_m*N(qy{5uoagrO5Q zO}KBu%M;xbubTM4#D7gZIPt_JIjQ}m%t?bMRZf~SY3-zYC%r$}J$csT3ny=%{LbY4 zlMhcmJ|%ui;gqr|<ENZGWy_R%rtF>?Gqrr`dlkbgmQQ2Ts;7NWnO-@ua!KXd%Ihk3 zRUVq2J$>Hvr>eSCt*iQQ#-tf9&div3-K^+YBW68RomqWO^%t{?W?wY>=$za+*UULE zchKBTb6=mAIPd&<AI<w=evkQs=P#Lm$^2*M|5nqXW_HbGHILW)ydYyi&4TyOY<6bX zGe?|x&zUD`(`wh&-c|cr?RyL5!afTxUieGh`nm_}epr;TX#Jv(7Pnq}#^Re6f4`*N zlHw)ROKw^6!IJNmwpr>~I&|rhrMEAAa_NC(q091@%~*EXvX_?g<s+A0zx>nX$IePS ztNg6>XFYb-mn&jc<gOU8V&;kqS3I!d+p}ArU2yi8v*(_D?%6k={leM4mDwwYtgKsk z$;xdj-&rMBwO`e5)$&yjtqxf|YW1?!_pIJ?PMdSaoOACQzNXun$~D)n`DShA+GT4m zS^L7;AJ)0n4PUo<-978xT=(sI=lZ1egVtB9zh?dY>;Jj_#D?}8QZ}S*$llOrL;nqD zY^d6>dc%1eZrgD0hDSC$z2T(|Z*JJT!FO)Tx#{QTo;&s2jpyEY?v8W!Zlv`dtwU(n z#;`7-wGM@j2-uLh0}r8Ut=<&2tvt4pd-zIz4nLn?!Y}7H!z%O;e+?^$FZnlE9kmw; zqLWAynIcDw6k|m>Y%))Xr^Tz{W2`Ki$SB!DwwEbbUv!rlG7GDWE9I^7F8PFf#?j7^ z?8tW%Ii_HBF~_mUvDM+jS|UEAb4U+YxGT!l#ue{Mbailbb@g!NxO%z<x<<MtxT;+> zuCrY0U6;77a9!it?E2Lm>5g`{a<_xVPjYv3r@J%V`R-!(2=@Z_GWU7zo87m$?{MGc zzR$hG{jhtd`^m(Z#MX&Pi5(NWCy69yQdCllq*h7ol3Yn$F&|7#s_O7^>Q~2oCj@L5 z^lQr8*iq%PE!^vu!WMo%e~>>9DSXbqf+g%XNTH+XBGPSAcw9UsUJ!e*ymLYd%^`(k z+0jTL$0h~lXzxgI^mG(Era5LiY8~f0?hJ_zX%~_b(%lv2YT|0?igUSLDXuP<5wkHT z7P^MG#$#5T>ssnsjal(>C50{SP)MPLJJucNb}K1(+<8U{b?()W!maMxA%(l$54az4 zKjwZSND3j4LUTx=tzQb$A%#Pb0xbS0cPn%kvYg|0a`VYsPd?87sh?oI`H~>tAUK?G zC^-4#lP6y|x$ord`q}soV_kX=+sbZZH?bSpb?jQ-NMDJspRc>GD`S6r1<oZw^ndH& zpz8pgZLouxR<eVU2Wt-YIN0vM3kNd}+=;)754^(IfwvC4Z&BcBB>s9IIP*aMr`I#~ z>G^Oqa7#X&^XY(3yD;|gdmk1>lsn0Sf**OXq24B5vN*_5a*P}&$73MPl?&k4!tKCn z-N=gQuyTJ&J|kbnjtwU)jsIZ(Q-jXY#W58<VLJN4mXNZLQ6b|)riaW3nH4fWq%LG} z$kLGIAuB>whO7=*6LM+D=8!ERkAyrC@@&YfAxMuc+pEr%IEPy2Jl}b-^YVsrbFLw* zbG37Wb0bmNX`JgQt#%qu+^nBWl^!`-=E?bTvmB3_m&j6#=k@5*y=9urmpx><yb$|` z3#3<)wZnyxlZvr3kPU*>dJL=`v#{f;V~g22=mod4JJ|iOUO&q|V0+moY(M)(4wOCR zAbEu>c90c2imcb%4cl2ySgNtx;S;fcspfNFpT3q~&u`$jK^r~B-{5cZ_xSt#fb1_T z<p6mZv`wa*BhQxe<T-M>oQUI~N&H(mTwX5w$jOeTa;m&Uwv+80Qr;jZ$ZSV5*_I!X zBcQJ$WmB02T_|9WY7g6ATUbewSwEa3WV7C|PmE*ZvD@m*R<TRi8nzC7`2u+^`txq~ z9Q!AGk$uXxLN|o4AK3})yacT9O?gY+gD3J1yc-|M2lJtP7;nq#_&UCXFXLD8)p8^B z>NEUt?986xd-!#HFKYt}zGOeKSRT$2c?;How`LuA8<xalSQp+7yXf|;h<liaC$T;} zjg|5&mdTUZP~L|P=DpZ3-j9{>zHAil&qiRMUj^HKC9M4Ad<dJ)$Fj+M5Kew(@(HY( zPv%qDT#j=gUdiV1X{?4%XAAi(wiG+w<-CS1<Ma7Ewwf<u*Yb<mTE3KB!!KmF@=fec zek0q)Z(?`x&1^g0${yz1*hBm-wu9dRd)0&NNxp+U!5?7n^Vith{AKn$-^t$N|6*_Q zm)N@;J5>HQJHS6+2iakMkR9Qlvv2ul>@vQAy~3YmU-Er8f$6~$*c^5ypTU-}vw1D7 zw!iU0HiY-)lh_UXGS-eqvUuK%ZRS_tycX6x9?E+0uB?z}unD}3P2;24`Fs`I#4loZ z^DXRNehYhnKgr(WyV)cBZrIo!Vl7~(^s)>2IqVjk<z2+ru&?-jM~tHdEd0@qR@ljh zIKmul$o3D*e``mCgF7M}QH~}K2kb=;V1G_loX23(xf}Me$FXC7g#X4*h-CgF=Eruh zJi0JH#EQ1UEhIMoO+`!08Q<gV<OhD7|H^;of52Mo!}&=woSrln(V~Tj5p8gW(n`dM zM3E%sh`C}OPC@E$2C`Hv6U(u4Ux`!83&cg@LUFOUL|lP+_cEM;+$c7S#bSxLNz{mI za58eOxK3Ozt`t{^8^kKHLYyZq6)9qi=pb&!jCG4h6}Jj5&K4EoV=+za<3EW7u$9*G zU&KPp>$kyXx)t-<?V_u=Lv#~&Vy3@KbQjx14{^815ck6VdLQQg`*EVP9TtTLM7G$0 zIq*S|D;^Sg;$fWeJc1LR$3$=OxacGLihqcHSRWLKCq*IV$0Dp0ip4XcMC=kfaR&6P z=r5iV1H|)Up!la4g!yx@cu@=yFNvXIw<r@Y<AmrHaRycw!^OYE2=N-$9IuN};terc zyeY<rx3B_v8>hSP@Snw*Sc|+X#*6pF1o1x3l=g^8;sY^R?8V8_hhnPu2($G)qNjLN zRN~}ky4cTBcq`ToXJp;Ei<NLME9RLji>I(Na8@=N*87pXgiYdSumv1vn|vl)#Ama! z_yV?qpNUn{LaY$3VmI@v+4cNVb{)Tj-NSEY_wifVqx>HB7{8Z2z;9;{@;lk%I9+>& zKf-qLN7)|!I(rA_Z2S1T>_h$*`<TDOKI0#<?{MB0!yT*@cj9#7cdSClW{T5y%tB4r zADAkBh861<tkjOf68tMpD2}ndygMu4>8wA`W;whg%j2C`KJUzW@-8fwr?Lt@icR4o z*u{J;yOghI>-lnaE?>bm^0V1_d?nk!&tjMJbJ>;rJa!d7pIyx_U{~;s>?Qs*dztTI zukz>EYnb_8=P$4~_>1gc{CV~TP6t2dur={d*w_41tn@m{&a#8-A`4_+*-sYAVX!I< zmP2Kk93rdaOqnCkl#67ITp;V@D!E+N%7t>aTq#$`#d3)}3oD~d@;bReu94TvizU5w z@DuZhL#*w8(8bz$%TIlOki)s*P+5wV&z&s0QTH1g8Zv+l6~Fnu6M(HyUWRmdcDw`J z=>M#f%~3uN^4O2C5hp`XmkijwDKrlA$WWZ94yBN{^Suvu6mF*p0YlF!=R1P1qoMf- za4O*Y_%z=S<ixe$Lk?xY%14E&JX9v*FsB;W_pzMLhLID8A)hkf5!QFG`3K>sj{gnL z;f9PaMA<GuT}kfu0sb?$g!K@o>-K`zJoLN9+yOQ~{HNS**2GcHlIuIMg{8s*-l9=A zr(WD7(ARh9W7N+?GVA((<zxlxN)GS$6p-V4(0?0oi0>#$;3yo2^6OANJ3PR-{(~-o zB?~N1$zi=E#6;xvXKo<sGtl>iP$9wEVP?pJE6~pO0S@2~!R>}Ss2$Fe6^-w6gl&K$ znvVguMffC_zLzW~V!_kqu#PMUa%=RnC{&?~_w{`u=dmJkR(Vjyg8^8VQ4R@|SH<;1 zUH=Q5yaMGg{e;>cGhTts^#Ys**B7og-{{+ibKQ=o>%>Liwc7XVpE*&)`us;-6l*0% zv$*<BBtbVdV=WtXJz0!B4*QbM^_?J{CD89qqHQbDfA5A9ST&8rO1uK;Y2LmWG?+_8 zk9w}0#losER3@-y_Bm1>V+rCc*4{oRNGH<XYTWlY9iusf<}uR2CxIuOO!GA9&Z|%- zIJpSVq`w|xS+X1En(lBDKu7c_lUxs%>ifenk3~5sJ?UvZ*LT1iM|0v)n&0F!(6mAP zcGg$U0RKb2&u|)@AX{Kg!fCR@Y0CQ`X!gME^&OU-v4)`e@P4?iaD!16;yu=P%&$wg zvsAeQhNjP17L^fhDBz*;Ih+u~Q5lphNJbH;Gu1Z%G%uk(t1y3>HIZ7YV2$CQA1(Qv zg>oGRJ)DZ8^1`7U9V{8CkmLhd;N7cOB`=cMS<EX)&X6z731Xk`IQsHX8RdIb#<M7z z*HOM9s-37_)Ls;3V69fh(nKy+p}Xt3Pkp~*y!S`_+lg+VF%Iv6v=w125qht`-z^8+ z!?@AN?_R)D;fVJngfrLxtdP_A2fmXc4tc|2t(GRzQHDM&6Yq=lm&i*_1})Kd1{{WP zneQYlH7(@XDBCg6b2x^Tc2n#coBF=y&3&(<jlPvwMWZfWG0yjmSPmOlK69zOdn2D} zQ{D-nSwM8Yuf!^pV<q5U;m(449A!IT%4dzSq2TwS&xbl@iYahoF`v(cy9)gujyGWg zlq~X*ej(~i^(CHEpH~o)Y~f@LLXuq?>q5>iKbl7@8IqhVhx%DEQX%+}EI6%kNnYuo z4TTOQInQ8evJ&l$I*TggIo0<vl|{8>Q<N3$MD<c3<d3(DQlK-F&@bbm!}^LjXyb8e z-kpvx8;<7FBsiLfAy14kJ->G5D_C2&TsW73TOv$`OMr93#ljKIY0<H#d<*3>ELUEt z+-avfUH*8VQvFbVhBsUpJC3~xa0+j1f{1$`?gPYm><)7BKV!Ei;G!vBG-1QBql!nG zRG#Pii5#m&Kiq--NbV=!ad`-1Zyf7Ip~kT$u!l^C>xSK0GMoc;o7r#<;>rIJa8?=k z5$p($z($mSFahB+STFntoih$&{&Ku$@(9}MJ(h?5oPxJ9lVuO|19CfA2zG^up!HH3 z?uI>yTsdokv=b<lE1Ab}2K2``)Mp$UVM1#?m4WAGa4q0E!BP81!co8J0!KJ{w!5Zy zruYyzhlz_tcmQrV+&Z{)IN~+P!1PS6GaU6Z>zTsd#u1zkM?8uD1h{r^RK8p|>ZeY) z!EoL1u1>d*eykf{FRa^RZ4NK~`{vmkJr9BF35TAc++>7L!%;W`?lZXa;Bdx5KVP+R zGZDgq?1Np_cP?BXIO1nHN^f_Y@J!ZrO7o=QMfp&^usi#%g<Awi@sutdj(GKgYp84$ zz#oRAvfX6(5uH^(N=q=|X2DV3mMkcaV5{tjfUR;<I1J8Sb}CyM9PzNqPR~iO{{M~; z=M27nrVNy>8{E&(&(raC+;qMS*1TnGDr|)n=*v@K7Z?q<&%jefG~%CU(?uz(z?;a^ zVUe5$Ys_@K*FOhzk5d0t{rD%mC-WoT#D5Fn56BG}(9gG>#c3$m$NzO;EQRfcHCN(v zEQC9GDD1N@@^DypBVpxj3j5<USgWI9U2M)<@EH6*j!NE&-3Kd6YuIkvu#T|U_)wBq zSbk~u+#VLjI3AC8u@hk5PK2GaiYM`8yr<Iv)|QSum3QKuc^B9*Uxw8<4ffFPupy`O z44lPf;v6aq7U(YQIM3!ec#}I1?`(F3jl37EqJ5wf`odDv57wCiSZfMlFD-(_rWkK| zm-7CwVx{3NsqV1<_JA#V2&~a%ut%T4hw~A5A1@v2whX)_G@6g$WAR3KIo=1Kz-I7? z&|YuA;`%08i(!MW;L~6&p2?^4Drlj%`Aj|wcKO+`%+KZXU@xxW3;3D57B;cVcpbZ+ zFM`E>3EPhU1@JA#QWjqd%lC4A7GJ^7hTSQfui~p=^*RSO^EG@eEaU6>257Y$zLB4Y zbH@w#g|Ob{!cKNE?8cX{S+K9Y$1j7`{0i95ui{tpYxpLd2wbPm1a9P;VUx~-<!cL0 zD{q1QttZ|o{048+{ey4ixAQyrop_gW8*IP5VVC=Y-^=fV#eO?0hAsR7z60la5Alcj zBe2cQ!P&y&d?)`0Eb~voM*bA+V6$PV--S1OpM$;pdA$9<1=_m=_OMcRk~7%OU&Py0 zSogpd_A=-E75*yTpMQ-FfX(oAI;Vi$@Gbr}&JEwC6ARec_rU&rCg00H<R9^m`98d7 zzn_1~51^0JsmZVWGn_DffwR^_{3}@Y@&5$)Vg4<8{1Em&tHT@ki~09#iLxaB2z%sD z{AYfQ|H6-Bb@nU&4QBu+$hwU40J1M*+QH(S_L>LT86pIl)G0zmm<SgUB2qNLm|2ST z{s^{AM6t7Ag>J6w&@DwPwgR^3HrNv`hYh<OY}#?grtMbN>10@xJ22Rj+1aoscfwlh z0XC8y!JCDnVLR>$yKx$9#yzmk7z3NJhkY(G+3)m!0AMZ7!AkKwHWs$xeAr@p!A=Y- zF&oEL!cJVkR%4HO4%QW`U?nbreYiht!vkR#9t@lCP*Em^!4^DRj9}$#JS@SZU<Dq- zCa{U@FxFN(VFxaU{dWRvzmvpdHVJF4FJbqs5Yu4soz9+NyRgE!k!=?GZDD$^*s`<N zhy}18*NTOLEbe4ax2*0fU@Kn<OZsYYj#wksigjYW*dWdo8(~=|d;Ep4$df((Qdr|J zhgF^|?^nYTzsXqQZ%`Kcn_z*z8P@k(VPW42>-rtAtltHz`rWWd-wTWS{jjD#089FV zu%bT<3;Lt5pg#@^`9EMge-d`{r(rYS1#9_pu$2E3R`M5NA>R$__$#oC{|i>}*I^NV z6V~vz#XGQpzX$vG9@xJ3(*JXSoqr$f-TSS#qv>60yx(|8d?mgX-{6hwZ^aSuo%miH z6+eg{#ZTgAyy5+eI4*t_zljs#ckzcfDSSB9=2A$BGyV{qZ->e-87?Dmde#KzXU%Zl z9gP$37BWV*l&xfI*+$07wshi#Hx1*ZOD0ISOq5ADSx$kixT8$PiCt&djJwKiG7aa6 zbds2X)5c7kBxcEM*o<>=?wF6$!Cp9P?4vBp1+Xm_;hjY~h3t=0zkxV891I&XS(?e_ zJRIkFBXL4I8Yh)waY|c`Gs_8bqMRfr%PBYktYFuxcl=x7J?S<q7Iu(!IPr^<({P43 z9hT}DuvO2J)v!&^!RhWioO+VY`b=f7uEXB)37pUU%#JCm^-{byxg56Z6*zNT39I&M zoI9?OYvnqej&6|W%8fV`Js;<y7s`v|#dt^d5_u_3DKD2-;Dj-X#WNSX8*8^)@#ga_ zI7d7e)_y161??-ZWYO{}wu3z=ua?)yO{@@S0ZrIsoJ00u{qW}WKXIo1Fy0h@l-<R) zv8UM6I0uMex65mBW*N>lvJLD4{J)V4*;-iCuV+)(A+|=|z@C*i;sp05woYzgPqI+F z?Rg9P1#e~CCb!Dl<sI@)yq~cRXIb~id)a!NYTYllv#W8=wF7U{He=th@7ZI_jq}e$ zmcXuJSF$VE9r*ubx3L2G5WAe+K<}&4`99k!A7z_xI`IN~T)n@#6X#@4$R}|g{xnX+ zcgbgQTBhD+#oMsf|ATpz{wECHpnXHW*}%KbAL6~@kMS<_Cvv}e>-jUhOZ)}ikUovK zpXG1zg#2CpAx}yl-fZO#;gAjo&i3eBFAOJp5jfRr;%Mq<hO@nBoc*=H86f_5kE1o- z6#j@6v5Rm@y$9!jvFua)Z=Vm@$5`j@#sBHpk2hJ`JK`Mi4woar;dUfCk{rp-f@!r? zi>pEx&9BZVDJaolVYUg=P3SS9m%{XnqGJ7Apq`Pg$UK{L1-a(AK+${B6`ypE$BH+6 z3l!gUPr4_xU|vOKZO#19f|{8%^Q-1W6x3GFpIK44sIDrsphSl%>)Z^@Iz2bCsIt1Y za?!jQbE}p{6iu(GtEjB3nqQ}K%qa3Yiz_R@5J7ECg~Dc(q^okKXXL7K;aSxe^~rLU zC^0xoR3cq!kEun5sa>IwPLZiak*P(Ikxr48jwjt4Q4&;~jFLjbs?ZWhc4&#Iuo8TR zVVU6#EzttdwJfv>T<YwvN*38aP-$ILk0+vkz1%$MjsepuYBdW_LF9noG#MoxuNXMU zIndwoXaQ3|k5xw_p(2Gxd_m|yQ{aKRfX;z+)pMs;MGgvPo}Q7Z>H?wWIESc)a}Egz zH6ydoF$BfcW%HAo+%rwCUfnM;iVB=%nnjt7g*Qv5_9}U2lz6QS3k^P3mdu~&9OkcH zMoF=0s$!E-v1zhm!=hNT@R$zb@tAhXw3^s-fufR-VY6y#=j)7$O>s*sZicGZ2(cu+ z>9ARg(2Z*s&6``XNL3o5ED0TEZ~H8hI!oo1j?ol3Y~kFBg|qy<9#u4)y}HACJVnkC zS}-GQg2^(q$S|eOGPTICawu_*v@y*#mCw$O99gdsJsCz&*@jiNVUca{c_off=wi-M zw(K=cx+lYkCEFA_yTm!#-xi2A*_K#gcF5>}OiN4#r6%JNOU8y-NlDYur^*!LXS7|W zIR&AkbvF$eO^U=hT6I?4Y&p5ku}Tb)V*}L=A3MFes<vuj^+M;^nY9&*t0Kz-kvd(j zY1UG&vs{r7Iz6K>Q%9E?>1P^ImF7Cft8601*BhUCp6G!pX3C)M^gjUcKO!Rs24H7} zUs~u4rJ8$TjtPzavvMs|g8`$>6t2Jwjsi<Xn{)+vI(>l}B<O{T4^*-hZ}=9d+8{nN zw8BWV!l>kmfJ&~Y^7o^3PnHotdR}B@KxPq@{#rYy`+Es=t|}N(nT*p_1yO-)XO*hA zv&u%DVX9GR#86~X6`A4|nY@d%7(D4&5mo+tjl@jN3$2>xgjU)6N`_&Xkri4Mq<gJ` zs`TleJk_okpQX;3s)Ug<1GS~B(lb1n5i{%M?$L72D9Lin3g~20l#J5IS;0J@o3otN z{`N;Zn9_Sn!>d(i!GD(3^(r#zuE>-xy)d-e)T`R4=xTqjPxoZzM9vP*3suocGct3U z%$ZqRRW*NZ#r)~jmCm`Ub)9ql4FRoQ<d}=9>8vxA$k1k{aG9nk-c09wl{9jG1zp!r zTeDzRm2<w0jn>srXqFDQI9UoVPgY^L*7zj=-EEq>*ko30n!MPsDAp`IR>$%f;bvN0 z#B`ye(vX^fo+&m(F0r^7s$$d8N-~<(oT_KgS!?Wl$Lji7Rx1}q)|{fd4QH?J=pIk8 z6aPOL3ma#xO)z>mKs%aJXPH`LnDS+nIv4uKTt-Q@seE=$<idKb>d7#I$~LUB4U6nN zM;+<xI$O3n4%r%U<e9;cZ3>-T>RjY+i}VaVUxM6ZUt)zhA&UaC)!hmM#T1~#lC@!4 zQrdLUsj{VUXqRmcQW+h-Na^rJ{@$EXl9T6LqI=qsK=s3y_;vUat;3fEB6ZKrHO*U^ z<y>ah;btx>HGL`5h^#cvxm;xvvAo{6&dZFNSyej^<7L|1h280Yf=5>?$|<ugo$j35 zec{4%Ph@ofrPPF1&(G;z-PQ=TX7TE_PWM9hk~;C`=@o(3%q(7`fxLODv`A-#suhsV z&>P+E)vHR-=~{X9q>g7j?7e2hc=d7^c)ecmnpKcjcM9Ou;6$j}520R#cr$d5_Igad zM%Q^gram5153|hndQ5pero4LYN%!h)0YWwRBecqA@i+OKk?l3BGq2W-sJB&aOAb~( zro8ETX7;8VIq1bM(&;hg)r(%_Yx2W(M9JSQXuR2me~!WD82)*NZ=NZ4o}tS#<;^p4 zDlqaf+a0goHl=4-^3dC*bZ>!4ueVcpHt7pZ`a+X`p~+uw)6%_qcY#o+&$8rcb`M^? zaY^^;4GTi8t-N~j#Iuo`o?P*4<gaHKJR3RcRdl*nubvT_a+uY#SFf&tH}xnsa?tDH zbZ?2Nhh8t^*`zNqa@1=-;7$4xlfJ~rL9YqZy`@GDr6zr;k$<U4S8CFg>U3FVyk(hj zmSy^RmesFw4ZU9Ap<Oh;EKf<49)}(^q;YkGeooI0e$LAcel92oem3#AbV8>$@p#t# zOz$$%y?Vw%XzHi6P`X#oGSCO6-Hev<=2?2ev|px?N2Yl;I|{FvoxEnd<u%i{H`B;1 z)3kS%Y3E!sF7$Q``5XD@X&&XXo(+AbX`f6pe!Qlgy{5coJLmP9@@5%&y@5;j>cs#; zGd|6R&g(Vh^IGMz_?!H_rkq~W?pYR{^=!$($i-{QYxYTAGv|7<Og?7L^_pFl*UZ>n zy+cd)n#t0eZSu`A^~o{$=*bi9WXh3e=<-ayd8YgYMlNQp?bT~`^gF{xuhlXBO?thS z$FoUaXwvIF0LHyZr}qeWHu;+sZ<eKJ3r#unVjAPx@Y4niJR3P_0|%asT#Af5i;Ud$ zUIXLYltZt`@NCLqR%BkiVgugPquAuH*H{?mCcR#R;n}1wG5x?SPrZ8mfOwO>#FSgF zFQ5-hJCvIArKbL+Cf`z%u2iSXGV^YhnQybqJeOt7Z@GqEFBZ@)nqQWu)aZlE;PIVR zUmxTJ#}^a^Kj-QAfIiUimOjYL^M;J9o;j~VX@^YH8!`)v!k1Uo)^w*kX2M`2(?H!4 zjftq6g$2CAh0my2RBNE>#fENS^-_h3SO{z1d<|Ar<4Q73IKSF3)Opa2G%61TP#y%B zJP6czXo&Jqbd-mp(|IUR=b;Ey9t2UnU~y7f0-@>!2$j}Ds9F=D>Wv6ht0Gjh1VYt2 z5USpZP_>RHJx6PubkqCO&1{*jM+xE$KRsIUZ209EemRC;PM#<l;V2tDWQZ=OUNyjm zsYU@pJu1@mtd3`szg|sva`Y^QFt7E3s@m$B>136JX<@qR1h^GRHEVi7am0-3nTvpj zsYmCeSJl{>tD2PNmX<o_RnMoL!osS`n)%ZeRYpc;c-6u>Z1w7@ER3m1VOG=1nz=Re z=b?AhRn#tXOs|<g(^0ahwnp>U67i(#^#g2r#g4hvwW^x|X{x6e4T#KkE~r`vJ|?Yc zC9Ok1ZfdR99w1jb9ihgXO$hemx>d1b2&<a6pl%sB>T2jkipOIXXX%Amku=$6rf0)t z*x+;<oM(eG4GdF-pPpcgo?wff;LJ$1k*TbiH?4A6v<=4UePI<93PibvX)a)^5Cp5f zgD}U$=MXMj?I4I@xLW!XWa2Z3*6=JexT5aZB^aEZ;WN{VtT-FJYE3*Bn79JK8R2U4 zW6J>*O3#h)W2e+F0mWOT_8LyuS@>&6uq7&jGn&q-shLwTt!6R$+PrC|oLXaM8jYE0 zR#2H4g-x&@npQQpW=Vk9EN3&#@-x#+JDFxVm1&mQnP!=jX_hIOW;v3XncKuPf@+ay z^FU>*kMJslA<wbLs)kXBX8zXEkA4B!$yGZkgke@_k5w&ZkM-DNRcEV@2r8=TcJ(Rp z><o+Su|=q=u8b*6wmp`{MS6WiP<BL-S)U>(y8?Tx>Q@TU%-@ad@v4U@M65qP(9P;o z1~rL(FfFKhot<2Dz4{1UlNLdpP|+A!l-eFLG_j7!(2Zgqbo=Rt%q&})OuJ+=b5%@) z>S9E;EYe@a?lnzy&(p167j6;NMF(g|Wpp3bOhsiB;_3>&4)Iv_IJ0W<m|c{|?8ZEn z9nv}rGV_(ktjauQx8^acEl-gi7Kjhj21M$C;bjh-q;|)f2>LF*mg+9PmgX)#2fZPL z{~s<9&@Di6PF3xEmNKuRb`Fc1H)q}){0~xkuZZr)qmXEb68}NB%YE_~ZihQWw@~37 zK#p8+Ne|vX8H4a@U|o0<<<I{5;Ow{YKja}Rz=`3FS^N*&Kfgst-8@D2Na<Uo=ng5| zKxN$;g?Cz5=l%ah?pc)Ozr&q+?^FG|9j&&dRxd@Ha@-8p1gG;&{C{X8yer3XgOon| zrW+ugjCI00b`3b(_~t(&C(01jpKu2pUkZ)_dEl;Kgh%N<KfK50WFqmm#GlZ^(7*7u zFv`Kd5xba3ai-91U%=wcA;NwKEZ$vAJ@#MYcq;BMY{0S9Jt*UUhr@ki>W;DC+dW^B zui)KTYM)ef4_aruukbV8og*!v?g;F7W%3N>?9dEv&z2{TVl25Vc>v;Aa$zHIeVSf| z-i~h!{=ejD&x^`qmD7&@yRf}p_O#jHkGEQt+;B^SA4bPcb{Tvu;1&jM(g=JyH1@O@ zoym%2(r=nG`ANSe+we(01!(Mef|HH}=q=dJC+QGq4kUe~sNOpb_;l#&)4XB$+wqOT zr&|V#=jqVfX&TGdj<?gl44FKyC6@FQ;KvNS1MoctzWp>{qTlit^w)vrN}@@+IEmnm z242$$eg*K0lW+%!_0w?D>;V36!#18lX$e35e}O;VuudAM%bPU924glzDm8e5`x$se zQht(`;H2(w`3BoPX?6ggWTR1VCr$rv;ggVCoXL&g)&`CS9ARK+*al(HB%W-5#*Vl1 zvE%JLZ8XWTiN_OvNIVSAUnDm<4Y)r2ev{UYZwzjXe`EB7xA-@bHgPX#-qB@9e9Z<E z{-p-+b{ZS}x9e^zvnqonLmR$Po_3l>;KXOqB2SpMw)Nq}M}Xh1@rm0|$J<ODHv_-P z;4g0kCYlQypgA4<2BckW(k{2br-T19nz}}K+VKXaQJOfP=o4qz;lybT;}y+B8+`+C z;+VuU5(gy~E2=*K226Z%|AJ3rd7Vz$zgsqYUUs-KK6V-p<k^iRg0Lf;n;?Yk{wCZK z^vz7#Fz7U|fyLj1DXr4I;P*Gvx_@WPeN5-;{{A#zqW@acYhTYz?$3bV=iWm&_gjs? z^=V!;^mcq>@c$)GdtOu?tDJWH--Ye<vZs9k{GZX1bnmpmB<F_={yxBW8u*q*;M1Y8 zr@g^_wfj==I^Vs{T_0X)!y6cwtEmKvUghOps-6|k{~=tTPp#o&$2SI_PQH}Z;(0ps zcACcWoeQ3KHc;Ogx_y*PrrO}~pdY25-DNiXfd3`9(A~?OjXctE11`ZS26ox-cGyNk zC2+^OTd1&!4R-z;a3g$F9?azRZ}3m}jj@EEh#SHq0oYv#_>jiCT{f8T2Q)t6qX0hP zy@WRsu*U%A`GluzupLkEV}|D6!S6sW_n0yee7k|SK+b48`XyXvgSXh=`gpW2{Z65` z@LOzY3AXTdK367OoUk!r4Y;gGSbQ3Aefk9^tsUPO+!+7H=m~G}Kb^F8n$t;Zr#~I| z&&p}Z@JebC`X$UxSgaup+hlt>e5NDSWSu@?9N-ZK9s;<u0k|LV`3CQ81SXp94bYqp z9&3t(B$GDI2A>Z8&uCgV!qbko;Aq?e?jU;H2Y#Bc>$s+O{Schi!V@10b{%$o;o9%o zt5Ur4zXTJ{*ZzX%OQ_Malq<p~Y%t*;X#j7hvBRfR=F_R8od)|S*EUmz+pwlAHt^=Z z32y?Q%T3w~0dFwy>c0t7+U5Vlv~@^3-=v*&8ZgmM)AZWcbCzo&Y<-sfHU%)|82Y)! znD7k1g97mB*!NsUu8L0|=;~uSeNwaz$q#}Z0lX{Mf?Xb0w*Z`E#w%gSmZg757rQ!Q zFRb?9xHuX5#IpG$$D-Wr3{}2GpE!&5(bg{rZfRk0S8+2x9Oe=hj6Q;Pw)Vor-?Gid z|IS#vRmT-5gR!9n*}I_sEIU=8%!yyPZ1S;}IWY|M(0$<iy&cx2iMQ=kG@NA1H%R`r z_Kp9{*4Ej8(=|7Ho5t@$zR#On_SoRJG>-iES8Z)-Yr7;H9REU~UF`J@;1j=ye<mQe z_?<TXjlmCDG_J7t`z#o3Vr#n~+ek;mxiwvot#vl)W!k7Q`8S4-zY}G?CH@BD8h^Fs z4d~MN^KI}tU{=O2RW!AYz;i8n#Ls}6s-NS>+wgXHlnq~I!SMs)3vF<(`0V)f_%7g< z67PbKK1#oMl*iJ^@h$M&#Nh3)Q{xcJ;(oK>xS!&VSTJL8hu{wA=Y)O%JV9|E#l5G( zHv({cFN-Gb<)Av+%41O=)${Hf;+|4G9*f(d@p1Rq;uRcsd)$_|j}+B)@pc*7+9mEv z)WWn;+{NI$QF9?VSnU$G#>RPt4PI=67l3}MevY@x-v-Ccw#nR9-#GL!{fm1!!E3=N z%XIKG@^2KLY|%sh<185I>}@mxyoQ(@N&)vXa6Vwu7LCcgF?^i8oc|8oJy7O28_YQS zP13pkZ|Yos1MW%YxC@BRZ+9q|^5nP~gz)Q#hPP5a-JHdFs!HV(I{<H1@UPle^tY?D zw=3AC@EdT$Eoa~2WSFxJ<nx2R<M7jPpAct{iy`n2Dts8uHaYH@{aI1cI|p|YH~i0Y z@=qwv4qYncw_-1WzLkPwac?chjVM&+n-yi0f;|fMC^(gJ#LY%jyHw>*(|F})QfYZ} z+<nV&FADMLt}xvdtk1}OxH$v0R+wZJyIk?1qdbl~SC9%{c%qVTB|hwXMY&tWwo|@K zVV;waKOe08GUaC|e}nS9%0Hp}mD*SGsUuk6-W#ON#l5^7_fiv_p<<s?z6Uh}X9W-C z_}(S%-6fh0xIquT!jDuu$0^K6h4Cu?gz{r47PnVV2Ysx<)RE7ARBssksA~5k@nk=$ zx?D$i9;T#moysdr;ae!Ug@W%^v3DytT;anNoTSnws@NojPgM9sgU5H!_$L~#{H;0` zw|jH8S+<A&g(}rUJcM9H6QfGI88@eK_LGYJLzVd_ie-Ng2ew+_4=Vg>g+Hh`<NhGz zn5JNSNdRzH1@Bex2MSK4{>j~{gl<)Gx57+NG;ZZjP?T=vcT_YT75tb=^_Zf0j4<pO zRgzVbWPY9+DbG+W`$E-Xm6CrGm9~jWOFE0QwW{Q6HLUoo(tH$tmBQSnVpoyRI}(51 zQE}*~#@!AYcf6yb`AFr`QTaVoX?rLRY8>G%7Ha*U6z88*N#d0sr?@Rt{JSf-lNvjB zD9)sBxag;NrYS#8agI~;af$<dUxD+R6#ga+D}0RN)<)r<Rrna?w^6bADmG8mC|}|8 z6#p!R$x`reg+GH}kw$pjZAazNC8<)e(-mc{;#RBDDs6*%;fb=hj#Yk+qRCM-IeZ4n zoTE4tDSU~-7by(x9!KmXg`cSKlN5fU!Y@<sG6k0@xQt-jGebF!QTPoi?Ru3~={>$) z;WsM$d1}l)uhP<NiZAM_*u^S#u}VcVC%(F?@DD2dg9`JY!ekQ$w->DiO}4`4DEtsb zNi!MeLkPp(C2s6J!mxK0<|38$B86A;1#YpR*ozd0HH7DD6`!@ZTM)3~wnoKnQuxah z%_fDvOyRpJxQBvqYZy|Ur{DpKet@F?LE#5zU&WrKV$Y&j_N;1=vsCO^Dt4nvh5OII zZKJ}JE4W<2hg9q#g*l`!ixjs-gcr{!JnlS0+C_+^x1scRT<OcnZ5VwyIUeuw4QE|& zFHt2cV^#PD#T2#_-%mbMeLwj@+>G))Zug)sCm&K@PWGv9PlV8ylX1TnzMRaP(U+5P z%NM?!jN7^J<z(E&g)b*#-oclX0pZKZxM2%lPR8w6_;NCCqr#VyagP+foQzwc@a1IO z0EKTR;}$4<GZ|m3z&DfmJ9Hlt|44+0P`(fMFg4|$()W}37r1Y!H9th(Pv&3I_mlCK z7QUa%zo+jf^P_Zk690j|oQ(VW@#SQG95*4A<9;W6IT<%O;mgUm%?V#l#`gs9<z#$C z0AEhV{Y`XlQ3CEPT8mqo=+>enb!$<Iy0xeyZY#PRcQ@f%%E$@dQpU|qx8N@g_Y-Z! z?M?WWGH!6fx0G>fKE9=ldz|nsWt0ZrQpPP#_?9y6ZNj&daXS;;F*Jz2qAZ5c%_?Fz zeJxpxq^~85QFNb*7){@y#0^cO(O|3pYaB;e1YaKHr0v;(o6JJ^e7IRCGgc)3C5~1{ zx?B?xlBQs!ag<!)(`doSIHoYrgTUZ>+rWST|31TLanyU0Z7;rIN#F0xK^(rRJ9s7D z78HFhrMK8h;`)A#yD!gB>Hoia_%gBj(cOiA{_`CTj`zJAc-FA*h>unatUjf}(Hd6$ ze8+vXu3<jHv{Wd+N4GoD&ngw5<NDcmL`9sI7f7wXORaJ;d>Z6JCBYru=I2ixiuO|X zO<FNJ^nC@assTOIlL`;$(C+(wv_Jg^;ZFZS-lxl&_5r8&YkPWRn#%VFWb7k2AWdpZ z-!b1Gz7xKaD&~ahOANGVvHCwy`TL%Vqc6AP7vL92;inAq<3bgbh<nXW`=|SwB5z7Q zmD2ZX<H=RL>G@PMLm5hMC!gBy31f{DKXrJ6wISJ2-?oih^^CkQ3ZI5k<H2{-w?mcT zc|9KeB`^h{XWt99@~csc(N4VYguBLyqnvz?!qIwC{cv|a{am;e^pu}9c20?C5aD~? zj`kh+YmH^6Zw$8T`ggebdr4zV8^E91j+*Gye3c9Xy}{@Z{e8Fw82|r7H89#5FV5*m z?Nn(r#IJE#*hXGZLaUX7km{kq7^6?2WAuE1+o{d`0o!8zA2^V<I7Jp1A2gEd&v3^S z#!qcV;FrE%>hndOmL@ng%EI_d2I|}4{3D&lojtuZzoAYRS2e#`i~=E*$Tq(jYM+_k z{HX&8{si*923}@mVR5j?sTD15zC9N9|2DLj$@j25Z@P0j@WUK}n*2Mzzpi0me3-s= z1UeZr0HkyR8k**iAGN&d_j09&ZR<CCJk6hhAEozw2N%Ff6|3?I&}m5Jc`r*gtGlN$ zODGvB4gVDj@oo3LLX=qbwNUy!gl^8R|3fNTE%|#q_`QuZANU?t8a)wlYL=vQJ|9X* zBc=uRnEIDQ0s4x^JlleX<`hM3^>9P0<fGOA0U6uaC@?Ui2FIK_Z!2#89Q-}lCVz`V z<GJ}MY^g}f*0}SXq)}t>CTh|}TJKq{Tc11PZ7Xss2OV0P%=d{NjW*8EAcjWkI>w@C zX7?RN+v?s&bNU<L@P_X-YB~D(p7Y&+C)=p?y^TIfBbpqoFG!2fN|`jk4JysM;6Sk$ zS-#zt9`fzgBTH)v-)DM6s+xu<YQLma#>xvwz>-%W?o>$2DM(tnUZ2>cP%l}4T9pK` zR%j;-Pz7OWb!yGp7#~4B3*R5{(~|B!U}<bM#%XjO(NYIwFCRvaUt(4}`56I7rcr}j zU4+zSZLD@AJuA-2U8ULyJoax!UeNbwi*SljKgbLvIBv-vPkMf{;sYU#bpL3tKfmc7 zq}Dhnht4gqYeWvzcSt`R^_`Cu{>O^ufN!M=uMKDldbWOwn_XYi{4GsSr{1Pg6SW#u zSjh%-y^pMUjCJ+xQelv%sL_%}BBo98OuG0aWMQojz?bv{<gc_T#Rq;3^b+0wj;LOu zZ3u?kYL|fgOhlUizW}6KlGfl#k~X~6`>cJDzvQRzRf$lKw{7!V0XR}mR2mbZO-JDg zZGyHjng%n{VHSb>NsBl5t6w%n<kF<1WfVk~aV-;QjQT&6gW>}@=n)hJnfrk67)+18 zK$v8`$Ft(>{oKMKq&}@{>7RjAEUo9%PsgeeEEJ-Ji3kdU+uK-mgvpc29{kg7sri|D zGmrU7b}*%X6xq?LZLAh1Eo=0F>N^dl(5caC7_t5y=C@o}ywR5a)uV+&sMoJ8l&pTV ztsDG0#76t4pc+keAn}(Gn1D9?)3m1_X{~epS`->Y?=z`(S}&`4<tXHFOwS*_uk=WU zBvsjh`z)kZuUBd*7_92IR{6lQ9<5z|7L^qS+QP!vLwjqOayKv+S}6j&>}`Y^2k8d? znEu^LXF?fB9~?va5u-f^{to~8534}bvnig{eh4xLjC4_Y)m*Oxdi@s|VV%g9fSGTX zTK`f1vh@PA4LwC!?Wg4j?c@nA7d@%6H6)Y3_|>u2ShMxL05_DD;sfod`)3GbMfgCu z14%Hu*dG9g+gr;YXRnvv{^8q*lG{p6`!@TJR!e3Tw9L2DW?KQBZ)2ltUjH0t=XEL! z?R^ZZueIQG`Khs|U;>iUbAstj;Bg?B7P{P~TY}^C6XFB&P(a#-R7(W@DKQQ4Y6urB zM_9K=#t}jM{>Qve$<MFDPKgOdp!ZlKP_Kfm=)ej@W2{x8O^V9?XVC{j()WSYsOd@J z0Zf4M??Vmt;#1g|S^E_HzlW$di{knQ8$WGbZfbJYbCN9@U;yU|l0|S!Q4b&&;ip$? z5lFFDFgxps)`gHbw2$w3-wS51g1(Qw90CpY8qq;&QQFRFtesY36(SwY(1CKel>Yk| zW1CV_x&3jNKR#AZQGT4#A*i=q8j3ISB|S>Bnwqz%C+OZlW0QIv`jT2-VFvTjyo6YP zPKE^n)8hhTqovWguV`)oN)6E*V$<+CUE2orGnI{ct2z}Tu4-R-6#KwWuxfk)YxK7% z7IOiu(s%i#=P#vi4|LTZR13tlM4A(7c2K<mwFDidG5gCm&{h`4zZ)Q11%3sJcZ9ik zKvyKhHt*<Fnl*3uWuaQmHV4==nC78<YQtPV!pu}gMyIyhXi$#TJ2gP1CS7ZP`u`!| zyV;)5FH0M;;r6r<oCf%B^6<CpDOvetZu+P-|DHmq5T`f)Hk_8Qf!zGM)IT4pGQz$= zJqz{<`e6)P^LMz${9XT)_GnxZlppPED75V))!OY(QepkBXJ=El`h6ASC}8yq)L%pD zd<$)>PR4ZJ!M@gXs!TLi>&^alTFXWRs_m-G_Q-!54x9o7TWJ59ai9i7>)$7sgl44w zH5;vQ1LrelC1>@N`V1NxFIHZ#ASgachc~njRm_YG11)Bi_^@j47WH!sUYqK<fweR< zXAp5ixFCWCAIR#bd$ZEoYVK)}FbMf)J;qLGX4KtQYf(F)-$LVCCy+El0)sC!!CHv< z15k)sr3+v%W*hh^*_kq94pik1tVNkQ+YQXQb{0{pzGjVX?{jFoQ`*Fyus&=oO$Ke} zRG;#H^O^dewF1?ANed{9UQ=l#%~Hw!IVrG~3KWGjkJdi+8O>#IMCSqrOFvPYXz94r zYN8WM3$XfY$l67#kzwgzI#c$S4C?~w83(L>MXjr-X|1Jx_3e|`5hxw5R&?0G8Y<mm z)cG`|qWGItlh&pdp+6+qS)-jo3swYH{r%JdK#xRF8yeb)1!Af6dZgFW+gge(sgHtQ zmrqF~xK#t3>|9m(Og+?y(tB$V`}Loh&vYugzQ*XXm(S4Yd;)Z)_OQkUN}$JMfTn&L z^GqX97+B?mm1rX}M|lHtmu0ilNrT3qzr;aUBCKB;ofvqO0wbBEOKqw4u+*nu6C$h7 zCo1g`vUvh$*{kZUJ`@jQEd_n3vBJMgrBS2JFB^r?Jrp^rpY9FHes3`Tz^t47&%uE2 z18_IJU6uG3Yb*rQ;R(_R>Q(+x6c|sSIHAv={W4T+%u|jz>p4ZPCNH~AI3@ejLIgNB zvJ>-jvFk0Y?EUz^3E2CZsrhl;%j|v4Vj4J~Z>%TzDg7FVFnZKmaSeoijp5HVLd%?1 zI%d~K>(66wuW8+3UloEQ*Ico_!`q3$t!K{<HhyraUm}!`dV{|dK`CfdhEmTUtku_8 zC^RcsdyEbxJoau!;dbgCSg#CL`7nx5K04oNaLoXX{<NBFX-@b5?0N-x2BlQI0xPjQ z{fVeXk|kn&^_s$^nSS1~q4fbyZi45gh`<`t&(Q*?mj*@;VLMSC{=I`mr^6uIVLhp6 ziQ6oMNYd~M#PAHHSGqe$A1e}zm!+MoXGHowRTL3^t#5b+0vmT~Po<9$l5{N{O?Y+Q zk8n>QrGeVuJpTZ_p`g<u{3N)wkV@-Fl3_>x$)XzfSlcOipa<v{1Bt)CsSE<ECuQ~3 z76qJ3gU*`E$=0?Dj>e6)d)$o@;Ys}jy^}^ZY;6O8M%VUd6AikSHd}9l_GiopFQ^`R z0Cm0FcdtoWFE~X%7|lj_AI@0yk4gxPZQM29HddO`4+GlDN@J~_kt<n^(3bR5?;Kcr zIrM8fp;!G`wJ&P<wZBxb?PH9;fF7VNW`{9eZ6j6n2;JkTPA$#q&)D`+Tg(vX9a?^5 z)!7~>kt)d!^697A_gw>1`&u%?PKVmJkzWKj`fTm{3(9M?y-s4aDV0y1XDPHAN0|Fz zwW0P6aMwLfX}2F$>FJ#XTC=ErtlICWe+~&#atduo|LMMHYw0NS*34&We2~oiBh^1k zH}%U;kBcws=_pl9weFx*i`LJNqI`P&q{q}Bs1J=_@Q23MBSMW|Qz8{bwN`*%tAPvc z@K3-lN7|N7D+A@D_Z9wR{2G=f2p<2YELPkJb%v~UOSpbt6eqf>-5XlRSQZhK4EDp| zd;(8ublO&mpw{&^Z%zd$Er=wBl2PARbBlSVmEa$kKlDl)5>ox(sI3((1_*=Y2^u9! z*e*$nLR!J`rj4zAyVeeBeQ#r_K(!)OJuW!Ll=OhDU359IBWmEMbFfFK5o||Tu)qIV zh`$U?@1gaxwzQI@bYE(TK7^hGd9*bpjnLZt6b-4?!qCU2u4*qw?<7!*5HG#DjKI#_ zFAcPho}&~`-{nRoy8{JAE<y8eAm)D?vg^UW%bRu>X2zubEq-JhM<DS|9ds<92-HJs ziH6Tt%`8ImAS8YQ=Mp6KQ-3X?^-le@RrBR~6(Q{@k-MI+PfepRRBF=(D)hHVBlLcB zh~LiOM-gD9w|MGEst+Kg1ravdb2YWyr%`9|qJCrXx6?EToBf-L!>nNatn?O7jmN5; z)?3XC)hXo*^jM3JtyCwpz9!A6xoUkApd<)wN*X#)k}MS;0zF70z&bxrNKor{aXd<I z6V6K4z^*D-FBt|1EKQBNDcxbM77%5%Lx7m*p>ciRS}6ZM#zNE!%{v38Z<&?ksXB`I z(uzsbh1r={{ZjRIim+C^jg$`*=1fa*F>R!zM||tosU_yxwnm3Vk!1kC#D>n_RLp<Y zt6#QLa{DW3pOPR5QGcBn_<tKgWb_bdp>Pu?mE1`_T0a}KqV%sA@MZ|@8yY>=S3BId z@qgjWkF0jkJbMuC0)*WFo{j<b!I{;c)&Bl8q>0Qb7VCs$T^`lGgH8Vesg+)>dEW*? z_wBb;*h}Sf#9kBR>O(55Aqm3X`7j(kJ&#=ljl5()Pa}q&Iw7VL{A*O10=1`nkp@3H zyT;BE`E*jNl*4APL-U*NW1VdFQ}k$)&ZF{t8*hkF-nM<0;-y%_vqrh~92^FfCpgOg zG}sS~_d^ZyEoJjTVd;}VI$N^;9#FLuiqn{``-_sIk7yl@5UUZ3TSKX!ji?`<Y$%R! z*!^H6AS8_z&{!HWqsz)m(KX76VjKSHRZzom{~OrTks{U4KZDTf<}+K)jp{Q<Pt9kL zktGZJ`_Ev3QAnfCzjw89wcdaJ%Dz7Mv$hIK`+xd?TId<=v~#ukgkIlS$uRoWn&1Cy zr2N<1Rr@GOQd&z&f7P-Uolaq`YOJ!UQeZB%w6IkwTS&T(-nsnI%&fHARy!^~O{gED z9jEC9dUi%#)4=_3(Ei+C2V1&RL8SXn{{CwIwIpRPgC$G!d4C(4c56UWn;a~8_!*h= z8NJu?V*y~-6X*pdhv4&>0JUIwupjGHP;-Pa_<m9}zSgvWjbgQI1)IlKvLDz|9?rwr zx46OKOLl~R!~fvB1y?sNgyP19Pt=VI`*Gt!6#rZ_7tL|+LX3#vU*g7uR=9nkjflhT z3kf0-w=X1%RNS~gcQE`Sx{7q%xZuGZ3@1g7$i*EF`M7(;A^M5}5hjZ87b!|a8SY>h zF2>>}hw);Ph{vrA({S&?bll6(LCh4jB30ChB_dNS6K8|VYH=R!bGQIEFO=f$h3mv9 zaf8?_MvE=@8;5%sZpHl$bQ8k_u}wUHTOJ-1kAv5f;ziu@up4(REEZqm?@BCf!o^iG zRwjy@WSYzscgcL&Q#>qt%M$UZ>@Nq3XXIcxMm#6W<plA%oFu1<w`8@f7JKCl@&@rC ztfsJbL!wUf;O6jSaCe3i`pJcu1pH+(H>{wNrQ%i%f!>`4On25F@BsWtHV}V;4Z_>x z5;ty)0Xz=(Z3s4l&17BKEVPbbb!;{KbJ(q*xefO&33faFB)fy%2l#&6%h8nW#Gk<J z9J?^?o@IMrcm06v!|vb{{N=L!>}%{@zG2_7_PDv@C@6oxUy^F?B(!%kz)?J!IdG3h z4(<iX<$0_X&*%9pnfK&{z!dR;h#kZSu~0skj{{uJ$Fp=kflmfJg--!~D(-r4@M=C6 z@O-`q{$jofX|Lti0=|x4huG`+^}yV~Zw2NyejkhC_w)OK-_9RpG5j(9It#;{AMdhA z{vLmi4dd_gPXQm`U!Xi+qF)OBHNM%D%n$R!NcAm0!ZPTd5Y~|&=f~MV^w~dHTl6jm zixcRz_;OH$h=3m{B3Wznv8F7ZdN4~B(IT3;&}-WOA1h)(-%hk+{Y87x9`tb{j(O3W z6W9RZ7H-fai6k}%Jv$jN?ic}0sz_zo)XR}$8t&g|je9;kz-Nj~z_@jU<>0oDY~+<A za)8MddC0Lq6d<o+Q4F|L3}78`|HojY8Y;@bXSf&%c$650+((PCDD5~g4wMtbMDUp` zCL`?>F$FYJ#Z=@zT}%gNrkIJev&1amt3@^7*<v=}Ibsg$B<6~_Y_OOo7P1hGqB=GN zH=HbC5g1F$SUa&?tO9<uSj`f|Ibsc9+<Ai7bz(i>4Ppb}bH%yLP4}O$78rFGu+HK_ zaUrhCzerpTnk&Q=h`mx=2@Y3@tAN41D6C9eBd$T(O=1(v64&BZujVvX5qrJ30q~9D zM!=iJW;RsZB(?y98&p7ltGE@pVDzGFw~ISKbEmiyv3H5Pkjpl44>0$N`#^cWxF4A9 z;sMa_z-?`vG0q<Z<{|Mg%JztO6sdNKo$#L!PaxHk;z^Y7De*MmXT&q0*@gQ)LU1b! zR`uea;zjV>EnY^xuZUNH|Ce|jm^Z{5DF2({ZRGNfcn7K874ISTeX$2Q?iG8%^FwHY z2;AiI5okUZA0x+o;uFy97yA+WsW<@mpg0K5pNY>v`MLNU@E76>z|cgjR7S`M))zXc zJByV)WI9We88QQ~M|xOqnJF__AL*4|Rv@!v7Aut5GKWRWT$#)Ap|kQ?vFs^(vYyaf zMZg!!Vx%pRC9In)m8Gl;bXkAk2gm_{2g-rK50Zlb50*nfIaHp(I>_O2IO{G)$PuiE z94SWv9wkQs9xcbP6llP5CgpfJp5@62asuloC(4Pe2s&{x@KfXzRwAd$sjQc*kkde4 zDW@|*x)MHgCB6W*S>A*ljDWTwjY<D6xjFn8=%i5m-=BD_1zgaWJ(b2xfX2i<Z?xOO z{}JsBoyl1b{Iz1~(4HYmdvc{c2P*C9R@zf4?J1S^OojHW#{OkC{$kl2{H3zFnDJtv zQy0Ro!>vY=Ex}(Z?lxKhcqR0#gr2<xdEJV?5NO-mz<n$J1}mM*mCkLebZ)fLxqX$+ zO@z*U8E@6S!rnl6--P~+RQk8G(!WEL{%x-GZx^M1Q<eV3Y>W9eT<Kq@(!T=ww+(c0 zERThDYs=e0TDVh*_2KP#95C@bo{h)NN-n?&JOMh<jXSQKJO^4^*tGUY=<5OCJWy%v z!F&SfCqhSOLPuAyc6=Ic!5PgfaT{AZJ_EN)IrvQI?sm}KXChTCZU}Smh0x&P(BRjA z^CswVC-nGrfJuXoQ5w9x(%>zW1|Ov~cpQJ0zsR~N4c<g)@Jgk@o7gmXU#u*?L0$n3 zUZ^y9F8?0i*qeg;o{q8<{sTV-E&mJug=H(v-i-gsPhh_Jo&U~SD=nXbwFzg<u$~am ztx`xfS!w(jtW&~SvC{kTO7E8_y`Q1<ejcq{kP0go_*l8HG|T~Q;gj~CsI-5)(*7|@ z`%hBZKO1Y2L>8m8f3`>wDWLBlIv`(~31ZYt&|l32DOm5&Owe6)2mc<T2TR5sQ0ahi z7ZtQQ%?%}LZWutTA>i{xKJ<7`(Gzel(Hk^<ML%$$d7>GukKmVx68NQ}Kg$&Z#6XrV zXwHZcLvRyaYc+GEh~fW_y7vx@tSbA*=iW(XCX-C>Gk5Nko6Mw5%B1&XlTETETe7{u zvIQ1|rB~_5f?f1gUo5EDctKX`3L+rY6%d72q_|Q93%H^b7Zi5#`#k5|d*@CzLHYjm z{=}1Ho;`EU^E~G{Pdn#67dFGkY(}fNQQU}m$!7G3Tf{9GlWc}h+zOj9As!<h1N^s% z+rTBVA5M5#J59$hD^ks@NSs-bYGy^^%!=fh6>*3si6@zAP$%m&*d($gE@n$I%$C%^ zmYi?0!9%+M@QYzfY|NH8U`sxRzb}VHaWIS0#4O4<vnU~EQF@t0vB9Ez8sGhl_!;#7 ztoT{{{W<Y-`1>mHDpNC6-NN5rfQ@NpHfAfcF-^?IIGA;@!4v$NDbK8ngIO0Fd4=dt z*2TfBONd#Q8rYKSG5!tW4WQ)*uq&wkiHdv<s@`R4V%BAxS(gy(%5C`9+hJF1RL=|J z{|MH_CEg+43HwcU#Ra=^5B~LDSQi(wE;eReT(B+=p#Ov7L+JT1Y>b21m>OndY_KuE z0)(tf2-f8(jPM&+7nxa?Uh!G+Sztmo#>Q;SHfCc&%*Hgs#ypSjz5q*OW0uAROY;)G z`+L|M8?!ex%-%FHdsD;gO%t;>o5=Gu*~#<8PqI1<%<2p<tJA=&&Prx=rkT}Q$E?nJ zW_A3`>MUbcX9Kf3%bC^jGpp0UtWFoRH(ku$_?f-wVwR?XS(*-JX@;4l8DW-Ym|2<; zW@*})r4g8=nPQg4%xsLnY|JRLF)NsjX=gUZ%xugkboL`ubIY{VvB%Nx$U7R1|5d%t zKUKY={`Y*<^Hsmb-<irY?6*|>y`sr>qV;iWOVuluJ>?IUi&d|b4O36^h30ec-){Ev z9DLqvuE)<L*=zA__TL}HN!r76|0g`d;bweSc(UZb$Ao)?+t`15p+|2MKEwV41e9zw zO(Q1z9_+?Trr(=hHoao{18RT%33c~gHN6Jw0BZm%kU?d=Ug-EG!ct*MSSBnNRtPJF zX<?PHT3CZxd+ShX4_-QabZC9({O!UHVJGxGbUk$Z9^ne%O5x+eCxlN5Uq@ZsU!lt0 zlfwTBzZRZ?&VELCR(MYMt#ANU`JP8rz88g;ptlb~FTW+cE&M|`1l_jLYy}@6J&>Aq zNXQu09x)SJ>2hHm>Z@%qtw5BpL^#eg0*`+X)?<Td2Oy}tYTk)_D1G+hv)5!6|26X~ zvuoy%*^83{!E8qkR1kkYbEhecD5P1q36a9hu#C5mburZnPoO=C_P=PqMtchFH;5^o z#_wm)o<(~O?YC$L(0+&ZJlYFrFQUDK_8P|h3w#Q*adcBwaG4y4g&e{t+8EkGv~jcv zv`Mr@XiLzRqD`SKLtBov0&OMQG}<b()o5$b)}pOLTaUI0Z8O>yw4>0rq8)>_4Q)Hx z4z!(U$D$pFwhQemXg@?dh&ay-Z!QEcE(Gr_gty_go2ty+Gw%cH0Mr2}?i3iHW<bq= zn&E}1eN9#1XbLoEz|jminh|bAyAADjw0&qlLVFE;{$fg*`>_&b^b>Q8V6+j8HiFT1 zn*8SD5N!&qM+>;7fNKi4rhsb-xTb(>3b>|#YYMogfNKi4rhsb-xTb(>3b>|#YYMog zfNKi4rhsb-xTb(>3b>|#YYMogfNKi4rhsb-xTb(>3b>|#YYMogfNKi4rhsb-xTb(> zh!pXT*>+PGJmownh=76!D2SM+&=7H%m!qwKED{CdpkN#njDv!4P%sV(#zDb2C>RF? z<Dg(16pVv{aZoT03dTXfI4Bqg1>>M#92AU$f^kqV4hqIW!8j-w2L<DxU>p>TgMx8T zFb)dFLBTjE7zYL8pkN#njDv!4P%sV(#zDb2D6oTqeo(Lk6f6M+OF%&$6y!lc9u(vm z1r)`*K!FPsxIlpm6u3Zv3lz9OfeRG4K!FPsxIlpm6u3Zv3lz9OfeRG4K!FPsxIlpm z6u3Zv3lz9OfeRG4K!FPsxIlpm6u3Zv3lz9OfeRG4K!FPsxIh8odo<jr1qBXJAb|qd z1+>Lzb5W231vyZV0|hxykOKudP>=%!IZ%)T1vyZV0|hxykOKudP>=%!IZ%)T1vyZV z0|hxykOKudP>=%!IZ%)T1vyZV0|hxykOKudP>=%!IZ%)T1vyZV0|hxykOKudP>=%! z9(4_BK|w7js09T%tU(TIki#0}O!bhW|GWEO9J*l=Z82gS(sTc3rG;T<f+UzA2_{H_ z36fxfB$yxxCP;z_l3;=)m>>xzNP-EHV1gu=APFW_mQ9cZ6C}X|NiabYOppW<B*6qp zFhLSbkOUJX!30S#K@xb4((U-Y18pbTv1rGk?Lzws+7Hp_rV;6iJh00HyF9Q%ZCkW) zv<b9Hv_)u3(3YY>%7I-T*yVv;9@ym}r+HwP2X=X2mj`xvV3!AWd0>|Zc6nfz2X=X2 zmj`xv$Y~yOng@1yV3!AWd0>|Zc6nfz2X=X2mxr9%Ag5i}X*sNR4y&D;bEnxrfejSc zK!FVu*g$~|6xcw44HVcwfejScK!FVu*g$~|6xcw44HVcwfejScK!FVu*g$~|6xcw4 z4HVcwfejScK!FVu*g$~|6xcw44HVcwfejScK!FVu*g$~|6xdV>WKfU?1$j`AKVqlR z8vLJ?Ur+!)+2jQUHc(vXINg066xp>d%rTuh4o@9GL}amZ#$pg;lz5-3nWfdUE? zP@upUbHRUeqm81Cp)EukN1H&KL|cTm1Z^qW6xuSh<!CF=R-#R#twLLkwgzo2+B&rL zXq(VBqisPu3T-ReF=*S+wxjJpgBJoR@<WRJkRm^%$PX#<LyG*W6h%ORZgETvz*q*x zGBB2bu?&o5U@QY;85qmJSO&&2FqVO_42)%9ECXX17|Xy|2F5ZlmVvPhjAdXf17jH& z%fMI$#xgLLfw2sXWne4=V;LCBz*q*xGBB2bu?&o5U@QY;85oxXTZ5Mc46EU3De$r& zQSg_^N<*VTdf+c1_ta<l3EJIg_n_U2_EWU`(4NJa&vR(MMLU4@JGAG~USN4O`nKkM z(~YsaW*#&B1nq9Ld(iGh`zhLeXfMwE!t@f_@6ldHdj;(eXn#ce6WX8AUPXHijZQsk zO*u3XcNvxn_ann<Mt;u}@}xX9DNiade6Db<&{+8OZRRuI|770mp_}KCnRmq}#h;s^ z$o-i@=}e|e=<ICE2SY;8Vo}nWY&MkYvRW*HIh(SYSBK*kyI^zFghMqBp`y|vg``B) zNM~VV=deQ(%0CqqmPI~o3)Y0hMe#@^e)vbBOduwGSy8?mkBWnZTa!s)3b#JktmZq# z3?eQ(0bzay883P!m&5n!@RyD7GPe%@gAQ-TsgTw`Yu-<Aj5pu+UeUh?s>^Kpcz-H^ zSL*OT8sX-BI{c*)_>Xk>0VBMuIL`Arobc897xA6%d%x4aNB9c*JTI2O9Xk94Biz8> zw@Toj*84wM0{^@Ye@ce~Ut~?Rbz=P0*QvOEPwV}Gr}-AW|C=T78+7>FCGb;p`0E6R zREB2;%;k{EJU#Vap3Zc%cXov`x-dd6jdE&5I?*3&%XfBl27?w|Sj8K<h7yuscUm<8 zjfUe^yHKHvuhrv-xRYV4%jWf$SGnA&!jHKGKhWKh><Tz-0T<gFr{>Y}SzMi9|)Q z+z|;`EN1bav*h~EIz4|j(peVP;jbFu=I`k6*Es!jGunJR_HVPPgYC+8wkuQlV8Cxt zQeD369Dk-uw`!*puM$qLOaz4oqp?`DaJJmjAWX79AD8-@ggE>2KyziPzHnj7wyL<W z{ecRhDLiQl)%eA=K6f-6iKPqwRHBhcR4M$WhJH7HC6oTHFCg|7?noe>#N8~0DU&ow z-N}E(Z?g%0A!_;GX9_Z{WNO12dfGeNpjn6pYX|$KWU*)+?HNVs(Ehk8r6{StFW%L) zczE&jMW;S^+t~2%*lpilFfy{>+e%98NhyufJ;Uo=uF8#*M;&)eM@MJ-F>U#L8_h`* zdod?+#HLP@DMfQCX-fbTk}At|K#bbJxevxb$flHNOG{<Q>kU;Mf1EHeFEZ&|v)dkY zx<ZxSwVUTbOE7iL96~PkQRrooWQg*hNcuGxbc)$b2KZSZyj*%^kxB0tcYl3#%f`#5 zyH2Qu3`S~#iOHIYZTbARiOk|uPzl?rytOCWH+=i#RhJ*#CPf`JO4#i5dwX}USbj>c z&+jk?Q;H*=z&>Sjv(-t0IizQ=WO|mvNuP1}OFDdjaMj_D3RkH80oTXLni>3v@kp=n z@eb(Yfp#<L6%K!j;Mm_J9S>op+&F<U%0|HN6iFxsMJ5$Y81BFMzSg5ZzG2UWgPR8A z^Uk}FOToVD*Ic%-`Gmy4mcjGS1Em<Tyw8jb3T&(i?JweA@Y`yBsjQkPpqi{SBQT+V zx0>I<xe-|$h6&T`9R8B<(GTuF(_Avne(Dd3@ITyBxDV%Obsr#kv*;@kwc~aO@{y#L z$XE%{4Evc)CD=U9u_vm^?l%h>H-z7d|6)|{GyfI81x9r}uuT@ZuW6LP>_6Bd2s<OO zSfucz5RT%1g+B{T^qDUODT@0^JN$xvs64G_($d0aeFom0#_M`!tvUSV5;#dChrgu3 zX9n<g4_Y%0f7A%q$02FN_*m1@@kko^_YP>^!$PfMR++<}*Wg&wdS;agPF9(ZXZ&8h z;d{T+zK8MpnN{ZFy=Z{fmyuQG@E44517F@Mfs<9{{hus>)9&H$r!+X>Yv2pRcMiTk zt@Q_<^~@^sao#L}lU3&Mw@ct;l{x%%BfKo6!{3+({&x+I^}`#0^!|?tZyMx)tR5f# zHR=zkB&~D+nzE5JWfN2Yv~?iW#kC{Z3DTBUOOpsgPd+O2xKk89x8~AyjRC(HEy(HS zEel6BwRE4jynRDMPzjbheECZzcVD})W&L^f&TSu`4h460tU05%@3hs^r}X+mmF3}7 zvNA5OzxGs8rEF)wA5LRuM48=XHf#2VNCo_#O~6VCTi9NBL8xMT<82$Z!w75#w!_cp z$D3m+O;>{^+#jA_`;+Tp?SP3Ql0g_*EOKMMdFHoPw{F?9ru)>qr_vTo`7_H}79ZPo z))}?a*~o61^}CUn$Jcn8ef_m3uikTXTP#_bOoc6#L4V&VD?fU%+u8F}G#CoUB5ws{ zt2+Q0As%1N_ReB;&s@dUgu`hMa`;Pv5l(xF!w+ci!a)&q>F`HzPEC89k3%xc`#+`i zXY-Owaro;5Crt!?-vLiAQRFw#pCV4+4-fnuu%!b$w|qL0N+l90;Un~uTH%XHo01Tx zlIe8v;6eI%_*N`T;?SXlLOR(3FRBq^cOdqn*rvl1QqqjYR(1FQf*SqLwmc?LlrH0( zzEnr*JBf5=x-}Xa4W%)uSNM#VeoK=8t!n@t>B5%~)|^oI5|9yo?P?B%Gb;$06&dY! zb1>p9)Ddb255jM{dN<eIbwoKhvXZUDFNDkZ?jVjZZN%XRgiBR;b4maG)Sq+E^b1hw zDB&Q8Q2ABl5pjpl{4P$$e-7(_%p4-bV{y+xg$p^RpBUWy484O3w)5$kcZE?VGaUZ1 z3dhr#0@s@yen5r)7`ImcW*Fx!L;pH6={es2Nh7>0sKfu4!%a&u&g0B`;QgP{;mxLB zGR|@Mes!GJ(f=2Qd7oDMX8<oS{m1*isrKh|k^bZGw^jH7&^2TxS>^E82@XzYX9i5~ zfNwRN(}+m|@aM>_<&ugmTN;Oay=y2QwN;R;dK{s&G15SUA$JDKZ4oz@-@~^C6Bc_N z45%Jgfb)BS$%!mJ;F!F|F`0Q2@E|Y=0uu|1j-U|@m{_b$QZf{j8*?;wZvBW=NJe~d zTq$jB67El?Qpv*5(E8RgT3s6JG$wDzxx$JbFg?YnrJZ>;=D=2Bdxw)5Xyf?-ixpR2 z5N%<1W(B1vZK9BHC;jnAxu<XdZ;uR!aVZ@46`mED7%ro!XN08NE!TPqFZ323@i)f( zJ|SCpJE4#TgI2+u;QTIz%Ol7IF&W2p&f>0^x9G1B%T>+%nM9h%6w<MHJO+g@LbDux zO^Qb2G$ypbDNNc=pfOFyiW|AK)0j+J7+jNf<{M=h4jlel-0)$$1GoVP;Kt#P&^zvE ze2$wA?-$N6)w6k<OZxBE`p=ArGvX82eQX?Ig9zKe`fn=f|2XeY&pnsG-$m}p3~5{r zx=03Ujq4NgDL!T!HO=X1GxI!-xebf-aY;@}k$BZR$#<%xh$P43k{o=}9`yOb6~7M0 zZAnSo5Ks6*g)ZUeAzvbX`1?{aDG9$UT;g$i+``3$7AZ-%E}v<pxk2+8#8Y@ox8gU~ z=HCELCE7d$`Ox<WlNW|cJducmLT=%rXd)h$rEn<bE?gRsZAn>Nh5h0$xP)ip$z=TS zbyCvn7v3mjWi~g~vrJ^`d6v4KI2U02dlz?!DJQ|;h;{H=hm&RF@Ru|=))Tnu@JBQ_ z<o+8>>+t?h>G0-~{`+<K2xg`AWc{(88a|s!`aiDsr}4@A;p4wXaK^h4>QC`Wxh0e7 zBqyh%BP0;B$OdvAmM~LzF(}!~eeR~FaN#2ntY!&IkG@;<#9{%Vytb*gO>`0ej^OPD z$Kg;$)IBc`t(?J6VIEdC4@3~8^GH?r__0^7ZrO0b)N%jKevNEu{m8cA&8;WeH-39J zc~Kj#-Mwnh*0$aKr!7C{V|}NtIC~GR0`u+I>RiGk#u$knV77(BUp7RJ2bfmkaAQPy zfcfGa{=DA5SuFM^AO1=<&wSteo&G)eoXm&k<Gok{Cm)`}UogTAbi7ppC)>vRKUo6* zqYnS|Jn-M>aL~d0Dn1UQV-Eg3t@j81%(n6VZ<fF(^?7H6U$EU!x(-=0gJTCjBV4Zj zJMmHbUh&`e3wu8B`%mlNH{w(L{+lKLPSQ{K7XQ6a^6#{ZIX%yn&_lMG!{07}ldb0P z*Nt!%t8n-m^T7YE!v{+E{+RHfO7DKa|EZ7vPvPT5xGo1-GlMfeLhkhS(&)6BU(@Fy zc_Uwk<8{yoH~&?K|D^<8l%Ky6oOUeo4gV1D!*jEUmMGIjX{9406%|s`hC~?4k_y*R zj^PvQ#mHO%{o%ju+BL9wKtA`5|3P}CsWh@bLHMgYxOwn=Bs`G8ftEZK^Lr_SqxlEq z2ayYnA3iOi2QM_8c;k!<FFfOxWb&G^@$s>1$Y~!>rq0;4>&(aD4xc&D*N2B4Y0Sgo z>9F#YGt|e#kO9NEU50U$gq*yMM!qeX{3eb3O*2LwOQw?1AsT#DLiraT+YJ5F!D36N zDQRkgjzjhh>10HdUC6~{i+Q;@G@kfnrzM)nI2Jma)7zW7qc6{+08b58N35>E$)Qj- zRj16a4OQ-40PazyQm2$tX;DC8Fci{`Ux4DA{Omb#sv=c45L$vKCStL)W2d(@b96HK zwS^NC3%{mv_~acUN9A3$4WA6uMnd5qr$aA--Iw(AboZ!s@d75n-&Zv<&gFGD*-H+8 z3Fm4I4toilb@(GVYb*Ar9n1T_rS(Ua!q|U*Nq^eOy#L#J|4k+RAE*AXi_M4}*CK+3 z7e<x|Yc?n%d&=d2mT>NjDmcjV1H+B$mnFQ;@<7tpxUF;fWZU5Gqqo#9+BwjFVuQQV z5=;eZmNqsmP+EFV+I~!S(Xn<%%wLsGMJ!d(a7VpT>j?ReUe>yzHzCI>lZjwiRlpl< zPF6Qmg#sIwv@GkE!83*<<0bAXFfD*P6B-=eN(T4V3H~h3JastBI&%0+MtE65@Be!p zK0rLs;g8}BwKxt%=X{(4T7RsSvHv3_{V6)<{h!kMW37z+_v`%uXTA{iC##BiK?nOD z^H~nzNs&i!zmV3ZbZHcFTHyDo8y0!^q9dbbZ*UGE<LCyNjt5)UBt4ZDU(6lvl)L*z z$0vjFsK2*scw%hrI&$tOKfZ1G=|iJ^`9-yzJM95qr7VZ66>djQYg-4>j^WOHTgQs& z!nqV=3s<f?tG{VY-{5ACr@VQpZFoZq>Z0MKf@!QE!<9}37<#IPq!32vN~9i$#&J?< zp`Q=1kVT3|=%fT^nXj<uSsMpDyo>ST9UdQWI9pQ=e@TZA(7by8M>ROs$OwN#gJUg> z@clY`QwjWWf@2LPu|K{7zfmT-kTuhNZMH@9Phj$Ci%wpeA!e>ywQ6lDA*V(^X3s1+ zWwCHvDw#|bzH&7FCmhTEzIxl9QOGYFo5?k@<xH+mV{*sgbneRGFXOodl1C0FdF1c| zC2-Oa9R5}boV+Fue^Q4x6HPjNzYYhj27I0_f#0I{f3pZTS21sfkAFxU(C`FY!zXKI z@Dlo(4c{yNy8(|mzi+??|E}Rv{C+83<Q))R#eXjp@h+kBxe_?(PEOC;C2;bBIQ;bz z_+NDR-*osu34b3GZqWFGdFlL;kMn1}Kk;3|m%JIndNXf^_diH*$Yd4v+TD=JFxLwL zq8T!3T5uY)3J}MgF{QHbUZp)5jK}SNZ8%sd$AWPifl{_eL|h!n1S65dzZEm#NH7yQ zye|^L$O@vrZj4;ZM>c0l2G(b=>QOKL5EjN#_9rS6H8Hv3w%VWA<#1TC?^AwMAxD#P z<^S4~u~^c+H*}LdVT(%Q@?>KqcK9_h5Q|2o!w1D+G}@Rvd=q^V{$6m!=!An|!Q|&T zzAr@BaUD+b&*2A3;3Vf9{$vT9<dDOkCOD|ff`8}oSP;Hdrpp%qp^VayqUOG><_@3g zBj9lXi)CjdS?>PBbMCTa*q?CUR(GpA5r`zqJkPxXP}G<3+|zisJ86s61%%cvp*mO> z^9A31H|UGjg$f6{3cn20#r#2`tnhvi4?GK~jr6X#0T{r$gJwtObPfcNDHS>rsn{D1 zvmEoMT(?TMx#eIqF1Y>{wJAxVWlC7(t&95ug+kC5s|^<RP8EJNN_=9YGyc8E`6u9< zTZa?>IQ&2focPD#PnN*Ro^kk7I=q>%*Wp_3W%j&JQ-77(+wuHiW)`*Z!;~&|UQ1Rg zn@Q6Fgt<s}nH=*5eU81cPX${CGPOCo+irDOf;sQcz<`v{%o$J-@V@hCqAuW1Ieis^ z5R4XHnkqaorqfG$g5&?Djz751GLRhpdI_BNA&0-F;-7{4yaN7YoaM(don1nJ#RUAg z8@aj;)y$m`NmN#PgbNGbkdXTku3;YwmkOuQN59e#5-oMeo5lR;#?aySYDws6UD)_+ zz4)o>Gk8k52q#}rJ#8(4)4Fi@QyLt$4S4GC{kRWL<4`p5Su>vKF|EaVWO*(Qv$D)I z)60L;`yG+F#`-nP91{K@yhTwF?H9Nm@H+x(#sUrq5-BW!VMSsEX<N3H*eMG+0Ud2l z@%J68n!7JNA>TT<IMGy>YLgq=<D)gcxZCY(TBA&EX_6%=VYAi^+Uv#}JBOsns(3V2 zpXgLh&o??f6*eSatUh<+hVj4C(L{^VCV?u36`pg?;F&|Ro;TwOL!y?!#W!{M9Y(l$ zNQZw*hd1N7f2}`xVLmqAeBZlP{~owv?$XEmb_u*khkvI8F6i)mC2)%lzr6?-(|C4Y zqwl*q9Qc~G{zZHZ-xK~~_}=&Q?;R2=%}x4v-!H;3UJ>8xO5oZ&R`Y{KxcHbp&J88- z$94E#9S(ejw{$q;ueMHx^}9*$559_r_5Kf(!2hPhA1Z;<F6VM^FTt7A4xqZjTPEC} zCLIgGv_f`C93hq;LWqwzcMxvu8mdi;HY-VN?Y|T4fG?Dsbu^(21$_3Pi{$v<$$Lz) z*{j2bV+&ov%^{uQJB^$$FVNvXHo`^nJ2;2#(m8a<JOmCQN%<e|>ySd*8*v4tB5-_X z<>$t94JZgz(ACLr*?`5_HjCw8@4A-mi%!fn)5fn)=i|A&VdF2{<ddSucC}6SB3E5_ zT&QqG+cMc6d2&f~B#wZx%;i-!WmlaW4!L)fXoh5W^~pxfkZ;eor-wH6h+g-kD>s;| z8P8i+O*`CGW`A6+3<egCk1XaAXC5Mn6CA3>_$Gdfc)QLaJjF^rKC(TKm24LgM|N3F ztTUR~#U{(FbnT|WEw0LBoN~W%s>;22U}S4&=P}!Bx)WpF^us>b9$7?6OPo$5lZnFn zt^I?iE?;)~;L+6+9V?bA6CKM}>KHr<oeYaP2L^svM@kU~0{;Oj+m5PFdp+fjikij` z!bo^x!|_rmEQx~9-2Ab*@WKrjX#QV7LbyMOO*89uRq<+|dbvuOI&Dx{a8z$<D($vg ze3B>FgexzKcVZ-v3wdJRvPxHKv3=-_Wqn&l6mP&T#RKIP4o4u{n_0Z3%28nn#H9+q zm!zD{%~s2!t`_dV>2T;#fy4LV333h}AY66$qei$s4&7%#e`YVV?}0|rr|NjO>)!)h zgg#T@d)fCy!V6DUtJ0$H8~ER)=P)>2fKOAB+&?^g41{BNV3WI!`>DnAK2+Qfq zmY+J<-zt=mupHh?g0oC+FA)|<3t^A|1|25k3m`3Anc>C;HfJUqA~W3C#cp)cK?gE5 zp)9|<Y3-tf0B**Wpe4i>?H=quVPVsvygeo??eJX{OgS9kqsu%Qf7okFL~~2i$&Ut8 z&dSj8vX)ULJ-W3o+Z`Y2%XG;j_P$*U$Byll`dZdrP%SL5S4k;*gVW};SQAOF#h&sD z-GC+R)z0jWGe*Wwo~qrN8mt?fO!e0dPx93iKTp0SDg)4}+$Ij=w+J8o5T3)PJF56x z!e#v?hw*L!&y1=mkRv%?D02P_2z!D*@1zCj+8M(CnrI#Du1#~S!&gFqK&Wd~2-%QT zUG#S$OiQv<&KsA6QPE5?p;NJ6Ko(S8DazomeO*cgS1tO+o)>k4&=@xM{IYYIVOJNL zGzr=YO~cjA3cgo1mEik0;mcQ}EJ-)p*lJ{PvkkTZtFq6$1i!gHcpv(p!6<hu$@BrX zK*+B;XJqK)iS|`}r04GyBJNmQroJyRWz_Tb!PAy4J#8dCys5|Qn{+h|rm_>Q*6Ec+ zEw1kU_t{=fGQ4g!?A7<lhZ8vb4kO%5x`M-vx}w;>s1r)RM>>Ij&!7`<stun^g@0F{ zr&)NP=@9BqJ{i|BhVS9ui{Ja6{=Gw@n|v~Lyzdv`=ntPvg<n?!FXHu}5l%jt+W&?U zIO(vYiPn+nFfOmCI6=CS!x_GF@b{*Yap04w{U0cS!zWYW50${-ld14~jd1e8Rrvk$ z!0*%H10{GqCY-Lxsqj8|H0n5aQGdv%0(<pO$Y;GSpX`pCj61=GD8+ci4fzYp<j&4W zNEj*n$uC6Ovh_XjsU;EafH;{0a?Z%$N%r28r${byL#ga!i*?lshX>w;Ox^_qcgg7^ z;GTJA0cttDDq0Zh(r#j(N&4tB?IP3L3`-GrLM{~_*6$XOt3jz;QfOUFQ(LU$bp~)( zS5s`?l2c8%9U7jl-nA|558Et0m$Rqcy^~;TY^j8>DuSzMsq}HjRhV%wEd>OjEZ<h+ z4u^t~!i~dB7cCHDZ0{nvBp<_&>hFNB1}t;~uc=mOC3C5*sOj8U=W~?%Bv<2dX>_#0 zb#(uNZJmjpm92wYoc0tvp$k8nh2zspKko69g%8?nLC47O#<qch-HW<53@Zcq$OQ9- zE;{=hp{{zgY2otf1x*W8%>*pjPVQqoyF+MJR~&G*lR11}37mEWhu?05<0gm(f4Brr zJA(J$TLLGE<?wq6u5xWNxVF%=YBtxpaNkW`I1;W|EL3Po=^70#8|v%Wg$EjD^K*NH z&w<puOIa_~b-OK7o>0iMy;2ly&MgBY+q)9ID_aLt)|y3IhW@!f7&>!nO?Pr(cTG=n z;vQenj*BK%n-8m95psKiF}t_wocuuFu94PNgXw{M3*Gc6T;P?R>7d6QvQJJ3lj;6! z-{Mq%ZT}+dn-OFPDq(F)ZzFj$XH#{Dd6W-N|03@1I)hvK`j%$Mls4qLMj(Z%mwULQ zt8v5Fn`C?r_OvhT`Ry=H2>z(f0S_0JP(2~wLQi~Bg&oInA24fUDBL_L(S*{Cu-sQ2 ziGlFvP@u78B9=(RCR*_4)kmU&ojEd7NAzN~`H9Ofgbb51#s@lOP~k6?z>zsq;Rkeh zbICaS2@a|0z*|{<j$11ZJb%xr)rG;#Wrl5Rm5<4UlFcgBnT)kMDV$7?XcVqWR*S2Z z1YLBb+m^IK|1{l$IzotC829w?v@uG)OWFtD5TeXhE(T5(^UW6lI`b@`HEe%z=p79D zXF!9@esSpS4El4-`Kkf>AcMY)zA<KNc;6d}Q1c)-#GyYRsA&)*+{b)q4&BS39W%|u z9rVSs&cJLx8{rQ`p#k5USl<w!f2VAKI_?9kFQ<a+4j=a+2K^l{ON+FJIrQF(Xe}bR zSNJN{qQ=z9d8cLqwBU|i2G*ii{)CfpjXv8ol$OnQ=COO-{*qW;R@V*J4O6`VSB2!& zmM@g5sH!o>?Pj;WnplOqf$0ddUmVlB2-BJUGb6Zb`UIYbOafE#;whP?N1@1(`V7KT z9+WD}eC}Lb3jS-|ssR-jTuX{V`<FE|3U@LkJ3TyIZ!Xto$4;bq?ngB$q@w4XW!A`Z zj!3eEaUfx&dpBYot>)WJm*F?lCc-<=Ch1aHZR43izt!5IpTFbqT@_&QyM7s|QSaV+ zy=FNirTlxvqC)xXUVku_@!iq>xGx(C2KQY%%q9F?;T^VHH?#Tm-C8(E^8+sqe?+J% z;sv@(wOn8xye#u0mL!9F9&z{T*@z`loCAl1L2zL9?&m2Ivgxqze_pkkG+DOV=CnHP z{*XOrKYFw9EL*f(Q==e=zIa4}&EvFUM9L8hTS1G({0!S2$Xw7oDiqNZs_C%a;D8bS zi0P-Qemf+5%Fw@`G9gS?G?(<>ulFB8jWOK5W3yUOb!Uk6muEH!+YRG9&imt?Nu~Jw z%JgxJE|^Afn=%J0+Fc?Mfh<3DnNQ)f9E@&sE`iaB$CH)*)xCX7T~7bz{_aK9B>Odu zt=+`PnugYHePI^K`QGl{jseXM{k6M&;lR^mk@#Q3z-tuuEP)lccRYA%h1Y%ueyi3H z*v^s@j%_iq&2rwVH6+B2u!dYj#v(_UAjWZ6T&C?l!sfo2Ta=lX$x51Srfive<{T&m zi-3RE`%@&t`|r~%5YD+P84Vo%hz4iYmi!zJ->bu6u?+p0#bV=+;La(nH0zIhme9=% zzNw`D<N7${F^~t&$G?l<jCVuSpLyU04aSpKesY*py{j%hbC4{;craF3?svB|kRvgq zt~6(8-MV{4Hym2gnr#vqxI3Y3Kb5zI=Z2>nNY_(lB#PPplbe>wrKccOwYf+ARg#72 z+cK)at?xT(R52#%zz;S9Teq{+bxSfnF*viU9DavjfHNJ*;kO&$4J;z$@bBvIW|8Yu zf>R`!#Bb<U`mN7TktF}#_e$UtNpkr2OW+hqa`<&6aMIlz{-6=gtUHI_V1%2UdjA{e zf&Wm4gAOKVd>lrHj(>$d&P{rMtQ@oRy#E6RcpWPBX?Xq&wFopm)amPxH8VK)bhG}w zX0iCa;=dd5nCtsSeCl+3ir+8Ai{zj1E&ls^`uw2Bu<o}S;Ual1oX&?z;N-h-_`OCr zi<mk5{(0c{>F|LPzCT9%!j1OK%zp4U#dZd^3eOs{Y%aUURhkimapI4F2XU8RzI`%a zPsHq%LKA*fR@w(oM@o0DO>?%V+%0>>GEW(P@s$H6Y~?-=%#15W5}<L^YQ9USh&V}} zCFj81CGda_|49kFD5>`loa+YjDbNi)ril{z`H2S0?tefM3z~}#G)nm-NQ+M%P)0U( zPwtYW@CjoJw<D2Icv$eV1Xq`|XtH>au_3$i%t%7oHFkue8S3pA>)*X}o~+l%K;NiQ z2Z552nK3aBO4xaYAsWzCDt{t7+Xg?wR}yZLOM?)-(zRufGNM~Y1~$8^QeV|k`bjb& zHj@LgOl}+G2NeUYFC~(K$8cPsVF3STHU@gc_(2#TNsw}U00w5Hj&W4-?gwI!0S`hN z4<OBk_?tTw^QSPL0R!Bd26#$%a5K(t;6$W;V`RchtpgBf<l+b0<Yk1-;U{J>fqS`E z2>(EZUt>f@(JN9oaBz7F$8WhLks`mv?wlSAL_{$b3l0nx9mt{nL5moPMiOSxGSu_S zL<%|*QK)bQ+aX_r<YI@QQX;p-1ScPW!}qE1et3JpM2A0Ox|sFPv2jSp^ZpO2{fB0n zOZx9u`wyW1$C+;8{U74}XP$?*XB_`=>JM8Fn<qSkHOMm#81qT(?Dj7*Ad~{Z0fhE2 zKEf=1bJX&7!`6)3VfMt_wd3iQ=0sx0;7G?&1C3MFu1bqH=1KHKTbrf$j*-#R?B1X~ z7V}$dK36IhidcMAqa7{d8K2)4jo}$Dw=*pTq;g-?aOa{`+`<SCG46dw<=$b<VgSAr z+~DwAOh!0ymBaUyz>EEVq{9b@YQ6uXl-1McC2sR^ZrA!_b&UNVG4^M%G4H=u>yOnj z_TR7f2VCzD&wynUk<+E`G0*D|p6+_oG%`C+1rHi)LyJMtB==g?;|A`Fv3P_X<zcCy zGc3Yw4I66QRmk$WQxmb8`nt~L!&ONs8pvjbN6F>B{QQA+O>!m>uBhu-Jkqk>9z+U? zj`DmiSqdfG;RUUM+Qw+4CJ;+59WQJozgzgiM=wtgHYojyKNhG8Bs{^%&X$Q<#H0U& z9PL4Ec7FPbtxRqrB}CN}n&F0eNdP6JM%LB0QwFr1kUD|>I-$PV6SY^l9Ue!$y>ZRZ zQ<N6nL|b?hr9vNXX|V``C+bgF%B)y5ZEmdEO-x!2n{LB<jx;z$Rvi95-3npw0m4;> zKguJnnSWxHjqpb_IMHUF(EC4Wx(4qVrtzCg`tR5KZ^9ldj{i8pvATosY(+hG1&??F zi03V|PafuA)A84v11qu=6V*56hw1k~Jn0OqvFA39zL`uUl5e-?7xo;WzY2SX=|HQq z7ZS|oK>gPYi-X8Ar?5IITqKF7_{eI$!w5HvI(%OV+^WNGp9lV+5sr$%+W0r<@MfY} zhwlfRcG_$_Z_@jNM`A(m{{X@9AN4;SZw!EZ!CKD2J6uBRXy>_h>wG*6%C4@c)Zby? zBuN$H<ZlwO@-m+iuk-u+R#X)}rLt7R^>n6<?q|Fso^p6I;RIYce7}&^X*2dG+VpXl zKg#<PZACbFO&tE70WO-0Yj7*z#kKsq&ZCD);J51VdyR0jUx)vc;P`J4)d#8}kNqZ7 z4de|wb`HL3`EQ(MlvEJn`@74E?+8~yE_-K5>+Cx-PP%Y|>oy;QoRSFZj6Xns753nk zOhrkyt-D3NW1~w;Sf}7lBW2>NI{YppoO#?_+V3Vf{tLi59tOo>u3xnqo5fqVbQjhd zsj2!#MR_6?k}9u|KUo=%1fv%FwUsrnRl=#kOehd9{7{&d0->5<;WM!)#+8s8>A|@5 z+=|W~SHE-{v>I>S79!P^S5;W$2%b?qH*|q577R+(j|R@OCw$>(S;gn<HIYb-{j#2m z?bWtOOgJrE6U5ZF3TuM?K%j7gup;IMsPGvovLI|Kd=IFAR}2>>txu@ZdIOU(4kz2j z;kT<dni-r$iyVG~5pEdgCW3?3=9%||L!cEm9%(0bb-|)=AE9{j){q@+Lm;v}7#BR( z{<l|*2SW+RIgRH!<zPq>ykEW+AUuTaytMujhg=@14esx|D_9$Gd%p4&k2_i$ytDh^ zKyB3R`ObIT9-7-fGsf00rq4Z_)r`Y;2c`0gv3(U5bqzmJ2_9n&-*U)5LAkXrw+r7b zUB<&tNq*uT8=ukqw8}dh;~j?+?>PK+!2oBx<M10w;FP)H@Vz>`nef-)`%z(Uu6b{w z{-D<f4|xZ?v+B9%)o$HlC$dYo77NjBAN^5<CCO#?R9F3QQ)|+V@U2p+^ZcSJ@sn^i z@I?dp-fEObLir0ZnJv^Cc)+w2$Nd2vckrHN<~jV{5;$ou4!=vqy$%HI7hWabx(#wd zH*UGkU<Ib=#w{-=akMXDt8fbDgP{mcaBG87h0R%b_g^iMkWW_J!a^)vDD0EduEM?) z%0yt5*vM>^e$Q9Q^cLeHhm#k`;ronm=5=xSUJVZW4Gi`E`w0%NPr=sw|Kgb)@L~kd z%E!$W$obJJM21d?P@i_AX@+x#Dr0~mL?fnq5bGg_ZiqEKTHc-|>B*BgymuIpA<nk( zj)*7l<Q-0#S$}om<~ZG^Thp2&iYJ5w!{Nra^yBVhkC8*M3X9hn?r3of0U1-tsfPt? zx~3+r)YMSIS3UaPxyx=wrZ655#Ik(8#;qg^UrtuzNNpJoz{NHC2?!_`u}as2rVQPX zMs@YAc()Vnr4F2EJjSx1$bJI8f$>7Xn>qelXoqjzVlt^mFzo&_w`#`g&*Wmm>QR!I z=<ZM~mMii@t5&qP=4vAn?ldOT?rg{tuvWRFZQ<s@1i~26-6;HbXKizBqd(vY`>Mme zQq*cIuR;u2X^pklev!VAzynAk-XwLkunc&(=*a<K!n}GmAG~(tCRFd<AG|p?Sywli z%T3hPP2|$Gwdr(Sop5z#VRQ3XP0d(y^TNzfb7NyuE|+T}y45<Bq6O<s^Gx9f)t3vI zlEs=3>LvG-=8of3n@y<j8dm4AM_%uK@YIX+!g9q5RzKafbH@qCwsmymF`GI%W&=@d z&%BEo4D__CE@9eS5D$99H7OhulcZSTckH3Dg~_z`$QX?ViDQ)}sQwYW(`VS-C0;Ed zfw%Mo4Wn`|kB+lZ0zn;F?up6iWa01H(7StO=}Sq4J&;DDtYWyu`6w(jp{Pkmke%&g z#D7Y1-iT@Mws<0bqb!|{hh_&<grDwB#IKP+v|tJY>y_*oRYr43$fJ#|F`AxG{SgX{ zP<)ds^5RnZd?}&*7SvqmAAFL>5MW2%!l5zYz5s6`xsUGc(|r$Id+9`gN2|u=#7c~S zlp5&?ko@xNy%yp7z7C(?FF2xJm*no~KWcr=7%EmUD$k{7_zDk2R@6`KUXtzJc~5z{ zB_c;%WoGlD@ijX)xm>6@0@BsBy3^sVUVQSBwJT1+h7(QBnN`ri_u+(vdp$r1Hv!lc z9nM;h%2u|CP@c$_@(>p$q<H_>(w;6n{qd2M(y~6D=$7QeudWrAy;lcbU(@IBdFFd( z&<XnCJ6q)VHCW2iPwy3c!at7s+{3EmQEe{^?PTpUd-4LGAv>itz37P;4revPz|q9a zJLadc|Hc?cDNto;o+c63c5uJkjE86O99Fg%xLQ#!L>8^)EZ)c#(w~YZQiS*A<Y?Py zczI<_Hc{c2PHrB~U*|MOt22%}!t0ZAJh>rqhqI<SYIa_iZy4(eOgkzP*_z7b;nDmk zE&3a|w(CQ_vQTa0y3s}U8a(-uiQ1fj!tXq9CR3^8n;t<yeZy!bSeU7?WCk0ri`0h7 ze4*>x8{c5k5rYmK2Q34Je1UpV3ONEzYqKrRe1ww9U>3E;q(x|1bV0MvVGXAJ(cTfI zdqNo=yC5n_(GwSpB!*fW)>Q{m0gKbya`xcbQ+t*SEt>BCs6CaaO3|~vF26n8Qj>3u zM#9mS)<jbz;IAsjb@|G8ymg&chjQ?!HdRMZ{f;#4L&I~J3NM&bG$d_!`0X->-)W_~ zCn4c{mlSe`98|p{Sh(CBvDrLfx44R3h{+0X_&v^;_waRepGA1K;NmxrNuzuNZ$Zom z1tt~OQ|4LKG^_@S3V)hqr0L1}X>$eM1lD942QQI%hGWa_26+e>Wo~pyz^yQOaDZ99 zkY_e%gTm<*e`b|Zu_|lU)0RjvyhBHj6kAXuR~F7$cudHK;;KQrx4*Hm-)j%LT~)Tw zF<1C}f-4a`t16Zdo+85LqWj)xRuO;O+wO~$msfd6YCKit<q=<dFXQ+-;>RE#wMG3& z*L2!+k;c8^Qju0mVx3l$+mVe)gV=6nDwb6#Dv?h6;svF`$#{*~X=jQeTZ3m%o0{~d zYvwJy>xe2dkWRxbBD&9PwJ<ggnpq-*)F-sNxIK}2Kb#wF2sU}#m7!!y(haq7LP|-| z^ZU}LHhpIIwCt`3h8o?$;msGV`8-n_ce6@KYV{xJi8J(-r)pvrswM{PSe*|%F>Wzk z!muKVxdm8-io8;>VER=xHkkf*m>!P^7rx3^F{({T2&qp%GkZo)C|mH3Hf=7d8fqb1 zjLebxq%}U@#pd>7?klh};1STN4q~dg9|&~>lUB!y!rPAWB+BPGo(<iOtZFC$hxw_B zxGj{8e63cvIhYNHgN3gOJA6_w8$Eoxmuft*8E8L<@ByJEuSe~0I#cSLc>!_qpWst> z;eH%jj}DT1cqNE0n8QaI0CuyBoid^P8#G^*3dON>W3a6)gnhv3kwWEk33nyZ$>_2F zwW4v&N0&vDR0u8^J^l;Ja%<0<iYAj=V@lmvKGw3PL)j5iYRB?Y^Xe`o2KS&lJ$c2} zMW;^HrrSu0+tL$P95Z?9R9(6|nf{LOa4_07)i%1RIT(z#PvsYG$^}7{`V=Vm_yXf& z2l#j*_=r<~cAhX-Qlm>fye9E##Iu=e>Nj1yfEIM^nrb}eLHI(ro^`kvT(<pqy1cc0 z$7YvXDATIvac^e@t1OjN=b=XlwP91*AFBBipNDz-E0-BzCyh^T#Z9tw7F?@QHtH*) z#C~57-{QM$-(qQA0v#A1vD1-5>vO>P!*ff?IN5L%e<}dY8d{s;?iBYbR+TNp_^{lJ zPjlk0PoffHDRW5i_c1_mB0g!+O`303BJ5f?P23l|g;U06W_wG$2&Yd7s+f7bSc>m6 zGEPbD<L=n(d4SaE<dbP$@6Yk(Mjm%+ydyu1^5VsU%EUJ;#=T2U?78UFdw)2FD#}09 z*mkga)2Qm}Vvj&G;FO<_362?7<j7Ge0MZ1&Z&By?7MtT+SJ50-i4BxVhm_4RS>XX_ z5mv2{RU$-;gL46#7Tt%86|^N=Cf%x&BA-o^fWpRKry_69rIdS?egu@=^TW}Rkx`<| zOLZEQ)b9<niO|J|$|f;>E#0i+<8y6%ggQQQGI2{vc{9{BnsdpqN_SOIRnJ>f%50{3 zKeh3*Cr?ZEGKVWv?=7n8Qe432vg5$#8md2Ih*R}impTf>16J{}MvGrmyTwai^6B48 zDX4!bR`R7KgJGzH$yZoO9YiI}-D*su)=_~r`61ILWFanx^~Bj2Y2_oHoU-6nu;%CE zsT`o9Jvt}o1*$*N<gc<tssrhXy3wOM%W8yfa;ypuXUaOaj@B)%38Vw%PH)5Uda>$+ zBb^GBIsCr%9TUkIt{=)%yE^<KXL+Prsp4@*4e&Zm$IEbL*Vz@KC8W^C+Jr|WEk~4s z_4ORzK$Tw7fttm2qg%VonZm<_kkDOI-nMx`?GhzW9kDrl&8Kvoc=dG4#!Kz8RHal$ z%AFy9$F3<EUS2FYv7<fUca&i+M?&66#mrC{mf3q$mt+=pEwge|{c^5qmQ+uXYU5c< z#}c2(8shnh`_!|eBkGQ@aE68BEYc~)J+rHk#8%gDzIXvFPICR4YTQm|K7v-9<W8q+ z<gy*>DWI9&xyj){Xv6dc-s<)ec$q>adA7<~(mV#O6li04HfH-uZw`oG-u%fm_K#68 zMf>^k$~B+ZwDZ4KHm^Nz$>92?V~@g*<LpzP-U<oRW$&mf7jL-sWMY`H`Wy7t5Y}`D zc);o%shSb;1wWDpCNRZpWpSd$T_bZFMJ~u*h}AG%;f!2$f+LfWtd5D`U|m`~{i5!Z zrv3&M_x{(vzHnj!ta#BL4&5L2SfjP!OY7=gCvO`)DvuZo&XRD+%P4q+x3FU+7MSzE z0s$Uy_<(3rRYI!tE5?XZT;^}_`F&<bghiYKTQ;Z>r?GI17IPjqU(Bf&l|j^5vq+CR zXI{ag-47kX_{20ZLuHnyg3OIV%A!Q!A4n;eg(I!sNzoGysaNpl1NTs(<KCM{L*4|> z?q`u;Q||^c#T$A<q2^Qcga=6q#f?vZH=T4|qOFj&K+IRdPGpfUmW@p2Y}eY{)&)%_ zyqic3b`FJB@R)IRXu;<GdhrFfD8<F5xFot?FxU5Q9t*DKq2h|rQ0HJWB|cHuj5U0t zDX+$hKWG}QmJ2=w<rjPf8P8w*Aes%E5gO*35E=?!JCsfveOz&xX*5(FF~=b73BJAt zCv#9#A6kJYPKO{RrAH1nd`B9X?up2i)^H%1s|nm@FDXDGe0FqAW0~knB*W&iL|;o` zBdbJ`m|0bp#%wE8evx0vDvD`a>_f)hnjd0*Rf_kn@l@NVSR9Sj{7^yoF-^Vkq>NO< zjlG`0cUdU?;Un?=?K}-6nqtT<Q4DS~QRGO5iSF!VDJrBoT+A-;92-~7++uxDINl@0 zPm9-l_?Z00Wc<b(<H>J-=+IpC%YF$e+UHv<)v1{kJ8DZJeo2bE8`LG)tf|D(DDs$& z5zhB3{6)TtbB2-{cgbITN4yhwX_;vC$Q;=j+TI3iN|Q5)QIs@tJ6H+TGw5jwg(@m< zan#gA%AD7=H7x83s$uO4NKr7>)YQWa2E*sAbMukNxmF<>a8{tm4rO1e2b-=_w^)0V z{i1ySOiIu}XC4HGx8j}b$iW<uD`z+|9x<1;7<ZRq3oP$Tq_$Ho@Kh(+66dL5RP5S* zN%BEwrW&uVxOJ#utW(36vPbI(R{<9zg5jpc6fP}p3I~Icb7Mj-=&Xq0RPZ0o4CRu9 z5!3MR;C8^HR8@~;Rjctei<w90F2R>bT|<85^NCdHsveOWh)ZxYQ_0tixvL|x16<<F z5;VCMgODC)J{|p`Nt<5fTo<%gSdJEsooaTu$5#wN60aNWEw6e0y<*Ome0hpL_=#HS zJeoB_WT+#f`<2Mq3asWCtxri^^;e3iY^}07i*pbm-bcAE)mDHg${}dfvD|`A6=FnW zo{>@jRXoLDph)ynUI9J?&o$gsqy`?Uc_UVH37bXrQ1g_3!dZfnPV@KvAT7mT7h-&q zN-)SCU|^Xoe#eWsIKmaX{(EK1hV!SaRTa^Q;EOtJLF?e^`qr%zz3cnsmU>hvYCnE? zBp>vn^ovIt%}idrt*hmzv9Y6Cdv@-zum9Fb>#jVyRS@NnH)I#e2X{}cJ+lw$x@+O6 z+~2fhXPeDttBfWkYo)zu-FZtFo-i<Q!osPKu7yBSmEBeJb`|JSL?cFBI+ybe--jpM z)Vc+ilG?2JPu>ipDawEQf*9K0hk(;gtYp%-lC+A&69h#|bqi2~O)2GW+9|LMIPQ3$ zXIq?X&FNYI#!fwc+Zl^r+e<#PT15)J@QW-{q<z-v7yV1<p7}F&OBPs=-@{`O6ea)$ zSyt8xf6QC{N|&#XOL14VR^rM(Um>h_h9<d&z6{AWUg>JSYFPW4x&0Gn-orV-*YE~$ zoW8OZGX|;pj?zPW6(jQwBt;IUly4BHgu97T*PyT-wid~KDZippAs~iXf@E*69RD_) zQvs)ZtHfV{ABYrLeiq?b$#p6{%cHS?R*ap{2nXj#`LNv<W1CR$&7JyDl?Xcx;u!E; z6R-Bs(E)FrSshFhLUOx^O$gUmxgkJ+Sj-Jj@+rC~B{c=Z;nip3x=|vvbWs{sN>P?d z^odmbvks@=IRnP%3~$-U#cDok%a-!WJ%H`8ADNeW7x~`V&w$PyKtUI&%B>hTty@z) znP9n97Ail>Vy5Fs_iR6Qqr+2pkDWTudD@>j?`zmqL|nMi^%_}a?fmoz-iu{?22e*7 z@`(++|GGAd7BF!P&f*%6vz|_#4&faMkK#$BQLgv0JY&h(?Ds?eAs!es;}FaY(@O6H zD~Zm{(1VEFsqBq-+*#KjB?g;^*Vd0zM^Ok|Nd(2#O&2a(c;fQ5h)WI^f^M<*l<8)? zEhQZ&bNgG)*fDxco8S~4k2h_!ulf2(^-WVPp@DeN?y+X1#+8>HmCuZA+|?D1R_2zU z)a?&fl}D6xWh^e9*mwG>eB0X7=$4)nZ*Kzy$i^a;KsNR<@oKjFVV#T-G(W3irx@?E ze%A}{;kR}ws8xKO6{qoXxFqkI6*c-DIMs%G|9xNH@Ar#{(VRFH9B5cQe7<H-FHUMl zR)Oi0d%AEcSXLfR#N6yuuyb@>{X5JSF+b@bimhu0R1MaJ7i{XH!$HdMPn#XkndD^{ z&r;xz&6(*ZL9vRD@&l7vTl+j&|M(b=OVm@5b6v6dPXHd5vgDh=dmLu(PN@MN7P^B% zk7ClBQjFZueGFpETask<`x_f)I~a}Y?-8TbvS_Yv61tA`FwS2vja#soZ`z#3&S)s5 z`-9yYtN5aU@Yxgh9#cv)y}Cu)9qKDxzSqmCC7npwZ|Fp(iD96S!2dTnaGq)XX)K<U zw)M`T8B>Wo*{^HjiQYfXtr+i0u;eSfZ(-VeG3KWj!no>f`lYuLJ)z%<3o!F(H4kcR zsKtR<@tq5J1B3cXhC>eaN`_fdApG3;@`WQ_&~OjQ0`?q#b0$teuul90gr5s>IGq!7 z_>*`$g?dIqZy1DSMkX2GryCFTv=`O$<m=UUIH~7ICW~p3^<$sSpGKuVe8%2>Qn--8 z*|{^l+eP4e`AOQ#7?+*lGB|R*tUve%ToUYT_dZh_TTNq@4;e6axJwm+N~;+1yaU_e zEsM@?^g1npl)r9cJC1ba(XM6Qpv~_5ec={nbie73+A2NI$9k5Y&`syL@v3w(gc~c7 zaEqekf*vX9`cr~@d0(Q&^K!Cz{ovU4cH#p&Sw$sP^#t|xl9N@Uub|SwPh3@gfNz(m z@IClVCr_yJ4lQmr1?arShfN|Bv#fLE+b$8kg+udH78g3VZY}(D{)*zjTgQXtLTFup z2jDE5O8ghG&W!)?Jptz@W}s6&F?*d(%yc;Q=O<}TmcZ$>lf$1=;p|L`jqg^+hqsP# zC=%&r@SqBR0Ke&0$s%^EqzmyRPr{Sd(%l!@)CSj6zsaNfps;P1gkqxLk5qQ#+NH$Y zS5A7j$K{4~qx%Gyfv6~yH#H>UZ_K`eGGl_j<y)|^*$lk0GZXA>H{^kGyx5Zn*{r&~ z=W{|~jUkZ2lTuxIx!+%x2uH7=I;#dJG$0$Rv0k4|Ex*+gibSQdirSR7L%EYGuFm6! zzS6!*8CeZ(YA1mib`oec|4W!ctxv(!4k_CNDeGsuh@AFL_D&)-<N<Pq=UP~96~=)l zR*m`m#YdgrU$d}vXi5KBYwD*KrBUt!w<T)UH!d0<S#Tm{&@UJrS-z@cLxVr%r-c3m z_O_!2TPAZhmuvlS&$`wsJTH+<hRUjffv)D(7J6?$OTMc!5Uwl>CR0`M6mWInE+3tX z<FuYxD{ijlvzcVAeupw4c)Lks?)^~HSYt5fc2`7-hvZG`@2012{UY9PB5t80n3Zw2 zEf{L>6i;9de{8{uEcmBZ|A)5w9+OVBiZDJu2dTu3K>Wbz`TtAa^~sd7GZbyz!}G3t z@aM7jeu%s)=^LD-<DMBLPdgPNe;V;?mWmJ{r%1QgDc9pe(zmnCN*9umea*788=PGB zdWHTjbG6eJSDbmtp7GMF7OW1dJK?ZNinArqH$Db;o4<5nd}q|(8L0MJ{7dX&8D793 z?)aPFZuTp_^1!4uwv67zAj~{g^etEg2IgC+=_!Lt!8R@h{uYZQiT*&2UWlf?qK#ax z!WVO@Yf)C$Bz}g%oRT-S6`okI5?8HBI#%IX0R5DNX@q&NPH3LD_)8Yk%z1~RB*QSz zRSGTF!1a}g_x?d5aIX@d=X>{<nh!+<B}9ZwvRF)y&saZvj^U{T<V#^ExV?K+t#I23 zc<Gx}Kgs&%@$}6>+<~^3-n3GVAcq~D5`Trv3hs5m&tZWdtGUD;*u$lSfTA7QunU#y zjY>Kz5gJjpvG2^amqx40%cHSR<;N6{y>(gpz|oxpyO-B?p&(usRq^b@7j0Rz{qmK8 zq}3ORD3(-J+tPez!&tWO#3fUw4j!$HwJut&ENGfq0qZpZq`bK2{9)hYdpTWLdSqyM z^-%lB=+;eNyQ;3Cq3)_Ht7~hkuT09qNpe!|scRatI?EQc4=tWbr&8%DJR*hEy<nQa z3EF*_(=&TVD7b^WM^06zXHb|pw%?Xc2q&abd^8*>+%iJkXWyi|)8cMsb#6BOomm}% z-zjc0-n7(jz>!8&hrOR1g6i}S)qzLIlh~53rojoTvlvz~$BN}BSPa5<D+bZT@`Z@x z?~#*0linP#-<_4>u}?_Sb`Nd>Z%<c8!oc@ouPmJ{N!V%c1Gi^EExZKU|4i~VGpG%% zo%TQrd|giFL(ym`U!5+HX8zfB`m`M=pHKDwzQp-)9?Vkc{1ML0C1M2QQ_hLqkVCeN zpE6Rgq=gFlOomby7U7~`(r0$Mao?>r-#bS4nzdOyp`(ZUmStn3H`*$~vSf8uch)xb zcP{K{iYEB7M8cuy9UXm*n<nzzn?^~tqcdlTYk)~LMG%Zux>L!}Q4ju94sxv$@OR<0 zHNbI2B;MP-I4V1<({H4!dsj$uM>JNrdgvElk9;B?JFhpYEZsh~FkKDYF7J)U&+CrI zrl-3P3fak_vq&mvPnl_t2}ydQj(=vi%JCUK(M<w)ufdV)&QL$VZy-2UK7zBc6rKsu zZV<tM>SvcYS%N}_y@f{BMXC+j5*bJwlod1KII$*L1X{mfBH|dWs;-V%tNOh)4YAO< z&OlOeUf4$u!u4I?tWE};=Z0eq8E;>eHHMS%QAZ>Z%%^ab{PXrm=*)o28d3tsCmX`% z+G~AE)Nc1(cR3{;F2BxKX^$$tZ`Yc`4awsJN(e8cIWrWoe?E~SN>b1^FM$)}eQ8HH z{J!n%3zeV|ch*=;sahlc%I^2uwr0F;!6W;V%WH-^>$4k3{HB!J<^g3vGMsW&1sad; z*mm4t`{4LlcAvK*77tqNE>{9ibw?ndafD(Hr`?fE+x^}}BTNGfcaGu^jqQ6e06qg% zV5bN89`%)Wh8vU!xh_HSR*uEu(RV77k}u+j$FR%ZMG1c=?o^(KH=)G~j|z*NQD;0< zxEyzaC84vh&&i%4f;JEX;v>)!=P@nuKWc4B24~uX!*5b+WKPVShSTdu5bu)&@YpZF zHjd^TYPkplsx0V-%Rl$+$(%(>Mk}qku$&~M<FkmVk`$@3@YLXDpS9BE3RQSIYBC+} ziV$9VZuM<G&g&DM@!-e0pik<Fs5wafZe=DVx_bD<NpBMW^YV+6IBFtJzr#2U8%Fz3 z&!j+ZaTj<Fv4z&92UsT{n+Rl_XUAd<H6_By9~eJpP9Y3ibRonpV{<buBXYzpyIDXC z2%KEN$qDU%)u;GgGyYTxQN1=vf(Tbb_@$iuibv_rLcA?bc-meYc7D2=wui91XW{PY zZd7Cs;my9z`o5*DE16>WA~pb*uw(Tn*@$l3C8y&cJYT7f&es(;6YvMTf6RAbG+q_; z`66D+7rtQiM7(jNbEEO_XUlzFpSS#TVab+|g!6*3+u^Tz|9$*Gb+kQF0>I4M6&|nc z?ZR`CX4jyJ-#Fs!R%$X;O&_phJ(b_jkU}8FKa(Kh&cmZ6$vu1MXJHSq`t!7}Rn3)R z8tyD;E>33<yqxE@C%x>3*->E>Y{T$RvEe_Waf<j@xS2iaKZ$3wdf3QUYr0eTHT&$L znPv*GUcbdmepQliE(zn6;;+)hG=G&-=XJ&-!l|87^gK4p@>clBuz-C07{)IHPb|XI zY<%{a-o!wkAszoCxF8*7=<G3b1Ri=b-Zg|=1<L^G^$gi6hO~NydU-y0rL>52U|m|% zFqq;sCo-hT$#MEN>g&2E+d8M4o2NV5CtY^pd!=hpTj#2#rs=Nyq^B}@XS_btUN1F- zLk+^pcta>$AD8Mw`JbedPq%gsoj$efw875S_sGM2ueB4Ud8SSu>TG>FnHJp2Wamm0 z((de>RPbl#go3}Pm(#j+;%P&AV$&l0hOJv0xcLq~t9yWFw+zX43fg!c7_1e34CT=y zpL7Bt+uk2*^bNs6<HZ|iIUL8IFqwe=Juuu;<@m}1JUsHLB;AaJ4<l~G_(_$6>@<UW z^`15@d9NB_u_huFzKFXdkdL3!4>G);kYcOgzMa8D@Frme`;8MY>3o<Jj1M#aPd>ik z9$|54eGWJt@DLMHT)s~Kk%Uh;Yh-PPPsvG+y?GHvFFA{ujlDjFN`~1Vkq&=v_FVJQ zqRn_#uTB$q7R0RlRtfjdG*;=8krNs43r!K}49>BqXi<{#nR7A><g5a}M8>ZQj6K(V zPDricJ}0<EYjDXi+gsKRT(Y~ly}fz2#;%V{FV8Qjo35*`%aX?q>vo?yCOBnS2i1!- zjLH<P%0d5JQwaBvA5WC<l`%|pSW`%NKp(WsATK6vfF@vfIg59fxMz3d)W4CF+sMEE zmYlqJ+cpq&@k!0?Z7nBZrbXmBCgmLlvcM}Zys#A*KSOuf+KQg+tO=O@##%T<{r2RJ zKss3N@+H!)>hyc*YR<#Exe*aA=Dfr!JYX=q16vj_d$F0#O}H?7GQxO^^+Hx_3wT@d z-ad9yL)GCrorDHyavceyM&|_I3$-q+;Z)Dk?wrj@`BR@C-pHorI$n5;Y2NQJT>-CF zcpablS@K**$Shw9F~Ys|(zE2&<!27pEZjEOuvWqgYrIisv_IZ5TwNZ2mI9V%<CYbp zQh&?|i)VLB8|*`;FQ;PoL7!cU`cTfqtqj)DF;pnJXsO$6EB8fXl|H2T=!xD#!v6v% zp35+1bq%Fx=e)c5tHuqohKrP2kTuKCMkFcntSr`yHmk@~y5s8_SDZOiJ$AG`<hA21 zHH1uhv?WT&Bw7|IDmHd+c;M7!eMgU0gKzz)&-p7nF=-JNv3eS>u^OD@<u7Iy<^~hX zl+OHeX2kSs)^7vr_gCyAFD#Bl7(+i=`$J}mBK}|QQdW%Z8m?FsPq57-udW<9c7a;d zEz`x{!?4iawsi#7oHi9{?ma^rn&+tR20Yql{vo`EeV}MJN)a*Y;Rq~YTL7X*j*aTj z=vOI)n<TkCo^!V1mQd8{NVvLX|JuzBs|SCK{eAC8KGNFK0#D|wWO!}JWshY7?a@r- z(g{3{nUo7xN(sUIwYut>df5EG%q$gs;0*2r9T`#b{YNOwb!)LCx;z_6MzhO{1Yvzs z=Ym0*9)NCMB9WexZbu#6tDT`OeZ45(J9eWLL1xVA$aH1?q}SJ*vySdxhBgn9Hk!eY zjlhxJwl2{|r8^aBoA^|sYoVHUQB<>wG~WgE;PwTx_3kQ)wZD<VYxBNAe=RnsD$yiE zQsP*lZuPy0WHXErBN&6NG3RAUHA+-3Q?gi5jyT7v6eUt#)fH(PXzKI+mqQGNh3oM+ zx%0n#{Z0KXk<KbhSW&9RoDmsOVnV#CZ~zKr4?@M0=zg~1-&EfgR({}?eLmU!10~ef zu*qK?u5kEILTCs_Qixt(U2X6qk<EIX`Q$O|fu)dnnfVLZl5zy>nJ|!r|I?L9XSBNN zn-vy07K)>;#0k-f;b;maq67YDjq@y2mxxhyi5gyALLBb1h~cn1<SZ+%#e=QU7<5Nu z<{a}n=+>30Z^G|Wstn=kw1kWQHttp(0E;;-MJj?W**?spXo%N`h`^_+V{s{Zr5s&v zb9+waq4b9f!#~lMh@Tz>3q{1=XR-L(W`fCN8IY3Olpih>FN7mIV$ly1kAET-`ShnF zv5P-MSWZ6UIpPwmi*^&_h;^AWdeoRN2Bk<Pt{PMhRz(xRLE2HYze@wjsrnS>@zE}i z_oQH?k}JYFqRA^;RbCQa?}#KXeY0X%^*RdWVCINrwHN0Yqpa2je@MK*sU#8EBJGmP zxQl6*WY7@^`2)dLRuGM2G>L00lf_I+tRap}ix%WMj>3(X;7SV2gqc@?BfW`5!;!>z zPQCa68KW!ZR4er26xWNlKreo2;zE`pIxl35!a0A*k(i|z|4~FWQcp=ChAQVWi{Rc7 zDJI6bI?Dwx95ttE{zR6+f1|}j#)_fi(^$vQ;UPJ9=Pp*!_)eXfqrq}hDjM9o7mo)X zbi06@Cz3PfLg_h5qobuKTg7&sZGDEalO$R!W;W(rKVdYhd&syJzN%$k$)gkBz^t=w zOtMrSHw=^=W+)g%=9%jBvy^?kmd$7g&d*l!(THx<@SI0o$1;m;pv<EUOWUXPx@0S- z=qa9Wr5N2vjxa%?GnSc$>({HKfP<9h+z)MylX-B^;1NPc!{DfoG$Mvn&kXb{hNvk{ zdi;pnlH=<y9IYAM((Ot+1Ab9Vc>E!&oL7A7*7h#TDza3and%QV2mF##^m$|XSkH0G za&?PZTNl^mmhZ9;p0T2L^8&>znk8Q-fDCM~uD52@I;p3D{+H{HS*<YZQp94bi1)1S zYFSiYzo?~aO?R9$We%E>@(lmMT}k$!rtvs4MT*h&pS<TuQ;7fmbx)M(IE!UEwAh)+ zCvF&%KcVG2G_5C$^Cc{%K1x?mO@U~K09ZS%_D@8W{t{CQK}6*r#FsWX^#eoQAJlG& zS?o8WCgx{^PnXvGDV+8BA@ay+-1leiDySg+g`$S)P#sL**(0ztQ)pL2>R7e6bUxG> z+Pf+m>(~{-tXolCCoc=1pEdPqk!ZM8+REl{hxO>d{B*9a?P{den6%AbUP<GlXp$nH z2udhjNF|g)L0R;E`^#Pdg_dN;xy3?Dcjb|bAsf9b?Dl*E)s!OH;LrPh9ITDHJYW5) z$Hi(b{h^VY4%8S!ME@{w%BnaO?{xB_8QAf9V6S2#UWH`Hd2(`lB;F~E#iAWMULjLv zNFyL<MOLe|@LN48B1<3b!V0uuwh7Eex5YFL(0xj#-gxYdjcCa1=)`-O5Xnd6c#N`i z>KwVAYjo{~e3BT(-29eJ=`BveMW4Rp7N-hEy_@GC1?>T;ArO?$K9dOU=}N#@#zOfZ z9+OSr(CNHNhv1)V4u>WKCmhFePQyc;qH_x%TO5^+Ym%u{vheW{_~Vm$JT=PV*GceY z8*C$gGELL>?8c>9n?}pB=s|<dnH=9<S}ATIroLyx$eLHQNTKANAHUP|CA(=UUIZP} zWm>@2CZpc8Y;RXN;P=zY&=D1@I07?}DvhLl>bnK4*_3em@-s%utCDSfc#07BACeY} zZDiL1^_5bOm0PC9ilufp_2K<eHQlLli{P+#A2(4}(~~e;k*W&&&E;k}TCrez7k|%G z`Pf+T{Zc{<FP%#E)|Hd5?wsi$>~V_0tH3=bpfWq>v*{u5)grvgGOFzKik)_x1D~EU zs@LE*S*69I2h`6#7evy6$)?e*<A+&#)s-`YDG!bX6RE0!J`@5`UAhZh)k(key!Q6# z9yvO;*H#fp#Mrr@Z@9O_q4QT&Myq|_Zi{s+YYTO68Y666IAhre8(F+l$xm2VCWk-h zX*>lWNwA8FdWw>o`#_*7f>RXZVadcihXXg`u!M1BgyrWmkOn&Y>V)_60UiiqMq#t| zii=YBqi&V@N{aIO#wU(+Kj?)QY`)XPo!Fh^@fc2(n4dw~L0<uFLvpH{id2`*I-A}( z9G`1BrO-(%&#dVr=mG66r9mkebP`J<K`?}4B2rw+x{uIFNx91};gEZiBzrHOLnmF8 zNO`u?c{k+lH1Q5l-C0VtN3{w3%ta-C*69qV|B~X_nc)xyM>4ZcX{r*lmOoNFjydwg z=KJ6bb`QIcLFW(bJ_hX;1a3MUStAvGLlJHs$1cJ~X1k4@HM8>zeun%%>e+HVd@~d4 z*Twp=&+M!jpXsdG^iMVq->rC0n#gzS4YXS^KRdalH`0jbvR!-w>VB1jo9Y|ANQ=UI zhnI(k@{D1meu<Jy8<l(}9<qGLtNq(+y^gZ~uevt@m!vH3N4u(euimO_?e6O8z5Ddp z*Y30LbIvShhS>*ZU^a$z92h_lL<R)JNL&Cl3K9hsqkub#gvEUe5tk>LYjP8A5+#XI z<KHEsFz4Lg`&D(Hp5YAW&Hd*-cb++2RbN+s-}`Ov{=F|UU|JhHHmqO2unyL&$aj~2 zok$LFXQ|0RF#7qnv2}+AC$D@8!E@6V?6{IVF*-D&Wure#gWSoPLiFqDt{r3ZM`{Ek zv!7B7J;$#4`Bu9s#SwJMA9BiRta5A&$ZAFQc2Hzy>p?ljN`lTE7Wfuk7J#3g8?r*4 zm6bDOO1O;Ma^|@2*KXTJP&-fnI?{PKP@tUYG8xqGc1HYP*i6_Ks!ug7RG;Typ~Cxi zIq4N`%hf}z<$||a{%NP2*?L(0Z+6;MSv^dD&&uy|%5TM$PA{)#ej>w|>89r-qgbS0 zB9))*I?0$gGDkFTXv&#myzeRv$y7BXTFM9`=b7nVI+NGiaOtoeNy<2lP+VX8EH7(n z5*c1b>WXFFL`tqZZP%5n$+hH-JytSP+tKGC++Bn3Bw0upC2{=FDZchAad~VVa#tDY zfTU&9N$Wu8&0z8nI+I1yG<7{4zOLgsSh{tSkH70gM{)aS1vPJZ{Z>-xF1-ePUb0R7 z`siv*O@!F|%i((l*Hy+h+cWzDvn`gHb&b3xjg^N0FGU6acdRdrBynWOwxp7@WLptm z$z{^czr=}`U$X!ohoM8W-Dh`55h0$Ivy=I;TBW#|REOtO+H2FLv$BbND594R1-H)C zrri<WRCnh@E>2;=5iC3s&cSH`BMX$8$w#80NUkWxWt$q#FkAR3l!*DlKu%*8ar+1k zO)R8SFSo5hhwiav25q}|t_Xh_n8jOZ5%<=S^WLyqv#sOu)Oj<uar_YI5!(s#yv1<T zdl-&_m!vR_dG&JNrDwdsbgIw}-iH-Q8u59481Hvbw6Rt{f(o5ZVYBP2xA-tRwpbZP z%vC4G7XLN!8A~Jdy+6}c&mj1HN101UyopRWE6Q!Uod_V53cAZ79N7rBiQ$Ny!nh?T zK(cDZkQHFv(QK$3w~*1HUGVuQ>;wTGx37;9JxGH-xn5|bHpb5SD|n`oT^^(Tl5A6I z!>OlL3E=fLhP$b7U^k}>HOp;vo2_rKjrCt6vXAu_1?Rip;dO`$cO*&s^vLP{4vo#r zS8bkmEzgHmu9rI#lhaTX5CyjV>yoRp*2ERfn^s4=H<AwgjV<nWCp29(uCclL-?_eu ztZ!bjreK9Q8cwW{2N*VU<aj)Pj6LU8CP)L?q+?HWKp|}HO)z;Mxr`Ytc$&l6QmirP zW%#ebFEk7rDcLgX2v;}IugjXZzzIP8!qKjz_6xC;8q|KFr#qH^^L_54KbY+2GfAWW z<Ub9L^R?w*xy=0+je8z;iwV>Pnu65|-zFJSu&swDo;Non)8<C4%pg!WVq`>7`rYqz zPcFy3iwyhApL|wA(X-rH^z?{U>e9GvZ4mfIN;vpvn#<qQ+S>Hx@4-JL0e5>2KH4sU zhkrIiVX{FGif*DBgfPU;_1Qu<@HNxefahd~S)r_9o(UR=Il;Drlub`vbIIQKUby+j z{R3Tx&w7eXb>EYd5nn9SJ!%dfoSQu~WR7(!u`KLn$y9#qLzf<U^QMk%S8Z6l?ns5= zQJS$-42qm!dB?eZ3x@{=4lneaySo%KRfBv3rm&j@>;f#&*1gO`(*{%MgdVpYFDe7r z+c((u;g%@w?$El9;y~2r=d)~Ml8eBvD4P4<+kPw48GX1mn#zA7lf~YH_alFiy%*3b z81A}5%NmC(ZQ0mamNZ5bu@vfqi}PksOK^jR3CqHdQz_G!>FD-H5wfqnJiDWEJ!k0t zg1?gA{DHj`VwXbef3Y^iNA+^LZ{OrMkA8H0%E0>S01wiI8De=5ZE8SFCrwRjv{J6~ zhFfvM?Zho(SMHpjnVFxPoee(u@oVni{<%+F{efMVoVe|_>#n=)wi7hxN3de6kiRmk zb56W1?Q3+8>Xw||+)F2}k59f`&glqBbGy<espf@LhNvz{?mx~E5os_d?g&YG^5pjr z1)I2MaLs%t;B_K3v2?5s3OzL(4hG5BSjlh5rsL8#yW6J5^YevxM)!;Hj-$1ui)*QR z=M!9+&ZnkLDI5Pm?^$jAgR&m7z4oo{v!~j(Ztwm|o;8lvDd%+>t&`>N6mFA&(BMLv z3dWZ}Wcv_$Iji>S4g^4i6JvF$t#dpxH$82p)8=5gW=)KiW-9TV<`2mo7uPpjT!*~7 ze(U6wLDLN95t32VWTQ9V-)ANgW}-XS-7D!hWB^grBu=z_U2iZHI<Po-E|?J>JN|io zJ?6r4_{avQRJUU?HfMrlUPLk!hTxu=|1C}gX<QtcNR#=#H2(GF_osgf#rl?{87pVF zx2R}t`66;b-jc~Z&kZksD37s0raPXZ%iw&|8e>E5lufbPS=+f*PbIE@=(28vsnl~y zX{n=qJUc&@9Zv_$SR#ot#2d&}V)?~fa`(X8`Sr=Gkjo;JLnI{;nweU0c%7Q`N0U0Y zm`c+=|Gx_5kqhS5T>`TM*^B>+@4=jvohYk7L(JI?n5A(z1c`iK>QvrDLEOTg>!+(* zu2}5c*9H?kLImf>t<kO3kbhun-^Bjf*d<HFx@Fai#abp)3+}l0^1Xk0us@XwW;41+ zRARMPZQC@kp)z{m?EKM*3$tV8%4jY(S}BiV|0CYI9a-1*R4XHlHfiI4DD5%w;rR2z zy5$XV-OEp~gI%|z@}c1JkHmr>)<k}|6SxkjQOn6E|4D-r8s(9qd7vmT9S(=bc)J!J zkL~V8c+l2e4$fp%HO_Tzzj~^=zI%G}_+=Y6T{d2rYG2qhb@lee_3IZGHf&gE8@A@g z#()QU_D=P0?)9pX1GD41y1I6acW&(UE5Sn>r}p+7!Ir0gb#5Zjo9(UFd;5klCsn{$ zY|IJpUW?oYjl)2MZ%_kZ3MTV7{%g%S`Ax^Ur_P0MaBJWAf!f%m^Jl-7CM(}MB`tGt zZ0n}}jg`@hW)PZS`=7I!;*RBLPO@2=lN_K+z$@*1?qS4m1`Z=yU@sV3_G0A8F(o{; zbdKIJQQmwueM(8mpDWO3-gE3&ZQD@l=&Nem>#0phxm4OX8_N%sHm<{rgX`w@a}N=1 z9AL`xfgzwrBF8p*WcZP2-o+irT;0B1%}4#}jz}^Zk%MiWy4tR2zwZu->3pci9~70y z@()mgdLgGHO7=sf)wO9Y)n_}p+toAVOLGszXa{FMS4l-e7bMhlS}Mlk>4-m`oX>Sm z7c#|zccJlw5;H=VCfn6SN(=;pDI{f*tXe5ISvo&pw@D+l8*Rdw%bvwr?G)*oQG6Dl zmV7i=Cv6e{ARJuySY<vL4@4|gscN}$KGR8om9m*UBApf`H4B(h^ZB_gL*<^~>VgMx zLbGN-3<e-$#5F~MD5fL=eld{B0J!mi>aaiLuJ@GdY0RUt@*;O7=J6%i&mL$NV2=ix zVLwd55a%^gZ`RF-c((_5B&o!7J*Ff#8aKI-#33n1lCgjEC(Y#FtBQf>n~C@R#pBp< zl+*kLjQn4a{P)sPXd*r`eA<lFY64|Y*{4eD5|S^RiYeWRd|NRul_EaHABnVmMbUNT zZHm;DE{zx4)>GH5q!<tpm^YgVh+cm<_IR7BsM>*OG&|njJp+c3$GK8kyAQ!j2f8h` zcG-YqRzT3n2G+!N==mum{^=d(^zI%pM-|BvF(UE2gj}7zY<FUGu{__CDVD5Ex$HT1 zWa0c;I2^PRqA%#5ok?if_~Hmo*RLyOD3W`&i1El`+-W>C1_7NMw5>#T_sLu04KnOD z?|BGo?8j<K^uOJoaK|$$*PrV^?h7SiMVEgVivgDz=*<P_O#*%__UK|oIhf3;&0a>W zSghVyaA2LDTG~6<QR>~ju&}$Q+%dFosoc>~F1NRrv*l7QS1NmEhpQw0fWKB6nwS_W z)o?pf9iCkW&w7jg9?gLKfE@uMu<-)z+{V~qJe%v?L0SNBE%xcX_OK?x@j|R`#P7{_ zB}Uhm*LCgK+q<WPam`qzk|!J%)5(xO=%1lsl@>=jri!n+VBL}0k7!)!4{}0+Q<2y8 zYrKyqmOhD+VJ^w-=f8@Q-#R50N)ED;=baMz)oxY-EgSol!fD)<te)RHB?Y{55GTNV zJWejNcQULks`*8yB#U3!@0@f>47_szt9jWep|)&zR;UC#?o}&4<u>x)r_9(D7V!?; z2V4^df;heC334Fjrs59zCDE^BB>wfds+L4OTluN*LHw>__Y654gLJCb<>Q~{A#poz z+_vT$zvr<vX}nN}{RZoKOC76kFl-MA4I@f*0&2`Mo-v+ycJL~mF`BGKhV$@jYb+fs zgJ+B+zIU(zo-vMic6KD5F^YJ0b_bp@hIn??IG!<rcqW``w~z6oXEqD}znXE^->&>S zcN6r9I1^2$iG?9Ztw2FO0dgyMRFpkeT<%dtG2lLSnL8-EVME)ja@!&yk6RU&KeznZ zFjRq@>xZc2X1f-hqTs+LOiovjTD{(%(T|V0gQBRqk6+<dWw#pUHgfCn=m|xZKdvr+ zIxM1&{*@P8Uw6IDB{s03jW%vTwuOA5Qt`Csvejxf$Mh2YD>t!s(KwErqD9b88-?0G z^1daU*7%4L@f14R@`biQ;%LkhOG}A<C11^Ft392@Kpl93waNV)ZQ5KNQ9*|J1)H^F z_YDXNr$fRWXwT-V)m#=ZQC)xub*aEQXMn1;)|Wuo=2X81q}+!a4Pli5X4ui*hW*h+ zns~ZG7N$Jbpd*bwL6Tr{VjUbCCIg)!WNwG9bjDRyc}pmliY39~)VS05(}u>KD0Ov} zmT%UK?=**;dN<E{$7;n;+u99Gu?DX-#s=GCRVoWm7szpqGX)%Tv*+%Kt`fIT$G_zV zN?p9x=nO&2V-G#SQ)F~VBY>9BvaMKPd<e;+O>W5Rqo5_H^x|1rjUr`XLhS8qo5^Vf z%^Opzm-b8@7>Xl=Oi2<r6*JBj&|fFiOno?Gl=AUhS(U?rmd!^}>GqBNnR-2IcDI9+ zez&E^v6WfwuP~ow$48hz17r?ILJAS4_aM^~a3npo4#YoC?H_6z%oZhqSK_i7$)$5f zZ%279rxkTiOlv>CN|{6oZEa6g7P~t(btF40QY3DuMn4M`kSWFEA-A5*hmaG<pk+^x z(Jpa)3G=Xvc8NV&&TKlJ{1R3p?Gm`tbMQ|*n|qvl9Ne+1<mhbhHj^nhZ{PO*p6!FZ zJNo;!pWU;yzkAyN{`YO|#qZMGx!i~OuaO^}Or8%q_(61D*GU&j`<f+~(t#y>6+D7H zsZ{E8=$DRwlPdj0+#8;bU#**_ezi0m_Qs`rushlv%*W%N@U+zY!V{Ns_@XD6<1Q5Q z^5LYH15=^#zU28zJ}Ac2g9p`^DCU(z2_H|%wm5I{u$&XcsCwv-if-|c^PlJYu-eaZ z?O=EV&=%~z!cKU~JzGXT-+(=V0Noi2c#)iP&xGH4y?}nm1NFiQU2-Se*GE+`q3!AF z${b>M$BU*Xp{TOQIFYn(lGX&iF>t`pe#g*{7cDov<4&GPxf6>wRB!N``kVZLcvw*a zKMDqMl>>i@kP60iH`C|Mfq)d2wcw8ectuwIcTwT%Z`Tyg{aw)JU$1<gTgU&BXftpg z`bb+4#QAJ*GLsa&|LRSF>GY;$DVA3FZ^>~khCEWI{mx0M0S+@?{-=NSh7wi^KNL|x zntw(yV_aN5Ie>t25`Om+PIKMJJxD7}ZrR~O&PwA}w=svP4u8j8!%Y%w&Z@MRW#Muy zoz}h&u|@s6w5pjV5~mTRbl&H^0`xOz>v`96@crp)`Mslf$V$2{ai5ViO?pm?#Z)yG zg9JtI3%@wy`@%;~dmrsR$D3=te}vV4=V|Z%arM8nKd#WqXSjbu&uFgfv2*$}$l7}g zwYQ1-LVd!HI|5uY3j3mg_iY0YRw?$E9oe55CVn_sHwLR>DHjVGnP@Dl1!K9=2M+)6 z@{M=BWd>qd$(+9awKFrXeeH}{iUd$+C+g&#I=w_AZFMcSFm|ww1>Pc-^3h<zipDZ} zFqSWh6T^vt55xn}qDd7sDvKZbJ8A`W7FL$HTc9}tW`O31+;Ykl1~0&6npbDqneYM> zSr{UG!(3Brfr|5&>t?zP^|f41PmM0>X+tR>@<|7dX(koi8fpCzvtIsE6-ii3MM-gd zsqIUnQz_hP+7~i|S$AeI^94<#0>W`_Kt%DH0g*G(K*$72jZPOZ2uWd$0+Q(%EOzIy zy~)y87}hKsgwABL(+0uP7ArN=Dv^X!vZh8KS+jMsR{2s}i3gOj$#JDBpaeXZ0-pVV z$KfZ)F`_Xh4Q1;4v`j{O8yPAV7wPj6OB2F4Zj2tCTx{u=3#X$R^-wjfF+$14GpHq# z+TtR8zD>6*oq@?eMm41M7k{M@J8W|$;1>Q{oD$<YZsKl7J!N4N*0m3xUuHaSKld5# zcK*vKKZ}*0)hz!U%D;wk9GJ%YTdADj;XdQ~I^G97Kwntmn1+hIHf-Yms&HBrB1+Wl zaBfNdW0E_{ShrjoShwB|V*sjUs_Ap6>1(Vew!UAH2ju=bX4fR6rkukBqHlHA688l6 z4ZsQ-0$6vrzRmhJfbvIK`A$~8lgiOD-go^B<#Av;B6;P(I@UjymCuK*`iztdZV88% z#GE9D#ab;G+~EtvUZ+&m>v7oEU)HX?O0A$4)b9E>rxv2J4cbbl@x9({I38cG2g5Q* z=caIYb1=WdUs12RQY-uY0qJ_RO?_P~0N97PcVV27eNEWSVBGEc7K0Jxt|w6*Vb~im z5)TLfz24WxQ#=^-jFO4rY)pcCS5kW{(=O-K$26GPDDKfLKLw5q{MhP_s>{suN6XNM zzBbo1bS8{=GUZHNfI4tVvrHvc=??DE_i2`;U783fm+poUPLpDtJ+Mjb)6;4FRq8pR z;T^+InIH=7ecU}!TD8*fIfqe@uJ#W~^c-70G`6#YsC?BW@t5#}z>mFb%-LuSfRy(m zmH~KM8uuPv8R#Dx!Yy3}3wc$=nBwyBaMV3~H)6~@Ip$G3lTS(B@I51*Xyo4RNW|0Y z@rRs?36A5DR|n&dM5B+ygRg!h8V(-Y7>%xXZ}NwZIak0^TiJ)`Y831B9KwPKF=;Cu z8D9ldQ>okPbH_?ws59=H);Tj!k)p4u9A(U-ZKpr=+%Nas!S`J?IeqN|N3Qwg;l4ei z6LWkfac*tv+4Vz{L-Qdi;Oo+LPhJp`$y}eg`7MW!y?^hn_gpf2v?HF0dE(u-Tnz<j zduMq(-~GVERqs1|!3VFIKJPEC*mL8$x$)rqx+8lwTsb>5Q0qu0z8Fi18Ef#s<axI) z?)%Ucm*2N5V}*UmY&h4(_4Mqh_4ajc9vFhCEx1OY3w{_qrwldN5sU($@AbORrdc+k zL-<V{I(k|qm>F>F6&)dNX<#a_#zFl9c1yP@o6G{|YkGx|Ca!DKWn*$_D4&maR(j7K z+kViRt#c2i!axS@Bpg5lkDgb#12UY6O=&XS`I@obO&Q^t!F0Y|p50dL3|UDmCao>l zyK5vrHqeD7)Ol8W|5E!7D8?o&>oeNWL@tp?r+Rj6$Yc)6<%A^7^wiETm9pRWNJ^#4 z?5XjIYC+CbOx`G$^*rgwim)~ofr+s>(BmPAs0z(3_13mBl7l=~*7WIvLqmsVewxm9 zYx>nsK$7}!?Z6a7kxcr<pCK$X|6eDAIJ&@tiq7J!#nTwYeXLH9(1tG*t&R%fNTP+7 zQ3YyQHGojscV?0G)om&+*ookE%K1jWF0&=b`3CnR|GNkI->uF0e4m-^IMF|m>gfo^ z)zORQ2KP0-+)&8&rSRpzxbx-3e_8E2maK#_Qmn0?-NdA)z_O-Ns@ETlD+m(PDUaxb z6Q!Q5W?t&gk8bZ$@wKUX12Oh>hqC(hKyGA57w^vu==~ux?3OBOc0gmdu{PU-irJlI zXu~(Q?kDOZc~H^Pz|ks}<jCS3?y_HN84`P6K@cGc#LK;V^R4IC>*wFPdGoD@>-EF8 zZk|299Y^Dj&(0pl5&0d*cOJR=>LclCGZGY{MpS8&ho`59<%$+hh5WJ9OtAH*RMk+= z&MRhTuh@ajK-Zl;`>#22{*}>~KS4)KMR9&|axo|dLS`lizS&J)TFoA<x6g<*aKzeu zs^ppfq`i9zb@UC`jO`a73d-^XNrjmQ3a{9=YH!*+vAAjDoR+CXw4jxgG*8-RDdRD2 zQy%{|y>jo)>*r=u*1F-*2{G9@m$p>tJS{4|zW*0y#)78+@A7b}a3%i@%-1By1?>n2 z(>2l#JG+8xCC;{2l~u>}hP{j(R^k3dPloldri(YLuNQ$Q;OLczANNJYV9a+szWlLN zdMB|+T!KD#ra3ifa9dzUjmrP<4{|h-T>eyl(s=gqU?32D{MmlXgv%I)4+Cf{{{%@| zaE^`pGmav2zhaipr|kTmT?^IfLRX=)6R{V&xIe2dbat+*w&8QJZLzml=<O{OL4pv^ z4)pc&Ov^&jkwaf?@|xrocO_$0+>E*!#$(xPTkbK#co}NFePzz|ZPbQ{g+y~5cUnog z!}eKtGMf?n<dg8?^Hb>4cIaa4w-dH(M%*p1k*Wyzar43X@swQ$_o{5>S*qjNsgwT) zZs}mov&6B6T<_#IqiwL$w7Z;hB5)>RRodn!Ah?feiMgJHHrJyWb8wlTduKx9Mv$a^ z2@gwcvbOy79$Fpy;Ia07jCZB!$xqq?;*gwWLdFaqvSorw*BX0PfX;`I7l{qr;{4{w zK*)%P&MM7y4o~T|9@9#N^jO@AxuxXvgvTo&@~UbC&sw-t9|-YMGPITBdN#CAOqVz9 z9?reFRPl<4CYKMZ8uw?OfV+E3WhhVQHXA(!OF=z_FCvW<<!`aCr}P+3iHxaHn?1L? zuj{P)jWJkiQ`CD~hT-0-tS+&UfSyiR0)JYeoC&LZ0^xu{4$KL#HgkUke}It&LF978 zw*dJw%@<zazHs0j7Y@}fy6e0v?%r1oo_wQ6aJRi~%eL!!1L1bB*InIneEBcApL&A% zv(GM!-Z&KS3?DwRuyD&o6Vpd;nG1R!_DP=JzW&|-ULCc#%e_xTLe*-teJBur(hE$5 zh<@%7%vA;!s0oT)zq<AiPq?`V*(T;Fz6|Yl8Znz+M`{h55|UhHo2VF?vi*VHguq4# zSmn4IlaxKuG<5KDHzzFq7Fkv0=M?<Asx`5$o{P8T^?bbQ&szKr_+Tr`QSOJ7Tk_<G z&1_uZ{?~HF%5uCSBaJHl-gim@UbUL;>{i+=q~Il)=MDUrFi!Z1C^icNPJ9aDf7|<n zf?b_TQtj19YCJG3bn=qhr>2uTub(Y1UNDs;)rD$KO&DRXs9REEyga_Gy?xs_JWyk4 zE#Ql&<I{NI`n0xB_3ypsqRl7H9r7xBN%wJ%%0*38%w$v{6pxR*YV*=DWIGYvNWL7B zp>R>p(O_QYu&3X^d-zM7_?T<K+)DFKKS*YSJfo)Nsr>`#`sN;)K+aUQWul@Ne$(n; zA~#T!H_Ye*2|ObGS9)6|M*ttPf^(P7_3oJI@MVt@z(>-G0-p`l6AVSPw&C3T?odSZ zYF0WB*SXX_8(JFS8b){zTQktP*(;&WWCP;ID+qIN%EOt4+a?ipn^drhD)exXtoVj} z<&Lpq8}+Q9hP8xO_a(<<*?Gu?gNbm&8&K1dIa(e=M3HUdZS{ndQ3Kvc`p9Tl4_awK ziQsq1fH5RXRd?e0RN}9SUAJsM{Pw*e?X}@(O5YRb{Ql6jbo)BP6BWS-YaUUS>}iU} zM7NU8hLS~|iyjL{P3;2Jn~eGImS8O5;l1(i&^+?sh8HmkgyGmAK;{@^atY&qb>KCS zHJ^`d5y&Qr&zrAQ>|Udvuz=E@DPzl%e4zD-VqHrlw7MvY=}_I;(AKuz8VY5_P^hl! zhCVEcK}$q=wQZwS7t{Y)o+_25%H?T%hD1vo$t+ddmog)w84^Roh#{=kL!21OgoZPl zs?|-|5xf(`7tk3Di`;c>b8XeRwzjz{ZfF&jF|T#Z>xRb80WWzfbISNj>?5$J&E15# zUY%aTYj`AtV6V!WX6oyXmf{h&npMqx)BTfarMq(JzP+OtFDRrCR68yzMT34Vr>58U zPjBcPI(BgH=mm2!mM3-xpH;<NK7l0PX`?-*<r02f*}pV)-moXSlk|!^V_Y^J%A^$` zB&j3a`D(~e_iY?KXUM1Sg|bm_^{rgU?*e`6$4T}rY`r$H7UD30&0-jBwKEQKYn*u< zg09sun>Z>wNH8sE?)Q`XdVBXy)wj#xi<MMLxz#MDQU$$E_t^sS{E71Rugaz=b5~K( zm-GFp@d5e>PQQBd(iKy+;rAe7m(jP7%H>iEeTFP2m*c5SCbg*4hwn%rm>2#1XJMhX zbt{4~ZQFubLfn0RBk=YvHcMsOv!3v>4@+-VPJfB-REwnURVY~~%@R0F>y(svZ`kna zO_BJ5oJ`6yabAee(%q5~+4SlS-TO*We?ZMh+Nf2T?hxfaA@JU=^SpK!-Q5}$JEkj{ zp;X*b{k};4KydQ9-6nOw$c!R~9&XZmuAMZq;jATdVJVhdS4$-0@ua4YCF69Hs4e88 z@en7c;7grBUnvjAAfzuaT|}L14`kL?qEF70<kaR(vs38W17<NfP0&y1md0H~dWYp7 zb6$4+{d*O-jr^rq^q0&dWr9rRzN@EAO|zazYg+nJD(bkzECGf#?22COiiO6mVDi}+ zcL3YS#NGIs%Zo8*B%Rn>0zU9WTV}7{nPeNFc&IJn3ux(>HBlbl-rl}_JT;rKw$qu1 z+qHBgQrT9C6S6*-B<ga}J$rpNaoMYJa4yPP@HJG4wrsg<G!(5pV<MDAT6-a4cw&m% zJP4Fc-fRB_U(csq=h|xqi@s&0G;ebh<I+wg;cc4UFp@1Rr+J%$o}<CW*@Tm;%pT}h zlim(BX(nD(xgz*AHJMboWK~ZF`+9QYg}9}7#c22O(S3&!Szjk@h-<9Nz2Bmn<$q~2 z^pSdLv4Dt;zCa|ousv9u?@kS;RhkOv{0Ln%HItSsOOk^g&4kZkdSNy{mec5~$dNc* z46P%XDJvRWEiEf3n^D4RB34liIG}E?B1)R;?0bjHQ3sf}HfhM3Zq7px!x--)klWFH zsiHnf8+lTv9nSx4C=ru0{@CLW6Z8*$F7C_7F)Q*tzJL|QiBW<j%86#NXuim$q=;5h zUyxYg^F|q(1I{>!#Rb^NZ+r|hv$^37MhDzh0c^c>1g#ci%klxUT?~HJ-p-A^a1N=N zrwn6Wh2TDK7>l$M77Zi~>fT?BhyC!5OikoQhr_ok>9lgg4eXP1lO{Q%>1p*rouE}O zWk8q5XAjp5UCd<=I$M%Ph6Wj4nx|Jzq;(BmHynBT@|2%-n)QS>E3y7H=!aVF7z+kj z#peBe%`3^c4T=J+^c|duFvql9G^CxaHg8HMc&00~Ttw8~>0Hk4X@}Eq{``w2EB=XK z7DTWR>MOmbdG}SbD4Ft+sZh`=hIXuTuAeD&>M1LePVL)Ekhfud^a66nia;8@7W!rh zV8&@B06<c%I0q~wonjm--ixeUqP}NRP8vosKDnos$RZ7}(p_c+a;aNI0-4;MTW-5} z#&7IPq*94}2F}~wwgpLPQGV`K69LcikExtXc><GH?L&EE&29lq4qx874q8?R8%|_! zXsqK^tiHN5oJb-_Qv}G7{@2_<()0$iam}QSQt;Dx%fwe3>8p)q<BG3};-~XzFy&u~ z)6uH<#rEa#9EjWU6!$rjF28unS5MJb+!vNNSXtteXzy(X24@l>lQ0^ak5OI-4=tn! z3S`=B@@gXM4`*^+1XEWob9~`~5g}2hr@A4GT(GVeo}h_}8BO-&M={3SWdz}knOxtY zjcK~I)}P=1@mzsB5V895-NOk7nk|54jB#z4(xz3ViL4#4TA%{gwmPoB31<Sa3Fwx~ z6Y0$aXKxrzF1>WOlr)Ynoepr8pq!_VK4ha@ROl|M59krPQ5L370p5Xr0nqo5?-Qek z&9Q9U&_VzzU<?=lZDIvBsElzbd?b^%A#K3>@y$o;!xwM7@>&A)+Fa(q)coA^0gUKb zP53xIlN;PWHL<s!fqNE4^^Lv5!^{#B#tbh3Dy&q}36uVE)#e5|)9{n_kv_{tybirC z)K8gx!ncHeNde~Nz5{W_e|<PzFb>o1c=zIZpS1iWfym9t{)L(Q+3mCR`KO_L*{!p+ zyQp!aM>m;WGwJi9?u<XIg&tFrVhVe6sBTer%-&wQu-o`pg^hV}djCMM(0RLBB|QOQ z<auCZ$nA}@FsESTmqo))&m8Qluai?Ld7TcdJ8*GM5`z$Pt?4YV?wg5h+}MI|UjRl` zjMNDrS}Q>e5+71xBSSYCh9W1vW#d?A-!RrYFxDDD$@I~ujp(YF?m)sJzty8`sD4hL zk7k$uef5cU&7F<mSiU@0;IC*r5e{;rwOwcpbkmlk9fUsAxSrN{6Pq`%I|OMoUwfmP z4vF#=+mv)DC|~hOI>y2M3!NYN<TmFU`$8$N?lk6t;Y=<tys^!`KG8@We4|s)_~Jb* z3l`xQ%ApSJu@2Fyu@9OzKHK)y%yQGbft1?V9lqub&^$}$_E^Dfj?p-E`^$9M*`I}L zv7Qh{D|-YbCdtB{@(7=VOy<t^FVP!TphA}c(+y$n+`@TYf8pCSmTbR_{v5}C5+{Gn zC*zV7KlvOVG7@I$=cCORzFjEr#gqRh!~6z%G=m<&H-e3Nqf1Q;rJ_ru$<P}r*H*Tr zWy{mp-$X#B<hXvmXJC}#LU^T9}3NmxSUp(Cqb--LjyN16a>zmqB{Svh%9jVCM0 zZ*h#y>B^BgS{eWB`V#jV+YhN^Z)wJUa9uBPL=s%vR-WMf{BPh5LEgdSy@FiIwr8o( z`rDTK$NXkm_XoHMTn(Rp#Hn@pap$Ip<k?DA=D$VPjC}G~!>0_k!WIvxTj4YFH*5IJ z{G07F^V}JHW*}{3`8M95Qw7w!=D;@?l*V!asp2{{<9^jJ)cbL8OTV9R*Zq1np?#1B z?0pnri^bjhpq9X>^|*e;SGi3u^>aCwYT)jpU;m1JNPl>Lqid3n@-8}oP^UqIase}s zx5(v;te(J=z_<6r3I-p$^BrL!Y^1|)e|xN$5Ttk98Foi>Gkn*U7@sK6w`oMNqi^{{ zp1w5=ynh!Y<X%?+y-hXdr*6-KgFae)23u$AJO=T53F7b5PEMvN)-<~|d+?n`F?W08 zjyQr|*ByKt_i?lbowMUx<g`ZXeO0b&X=C~DYJ1$C#t?lSHz0KyovP?{MbV2M@;--T zLW9-VH>)?yVQO`=H>UA_`4UOZ?@R5cHg4|uBwfB=bqX(~F21e%NxJ+~S1jVj*~D3D z_c%dum<p284Ba1hAgQ{#`4TUYX9CSytzJ?~OpD?ns_eT+O2zm{jC*8xDHcIu7>T<B zVcLd#el3;oJv#ZQFJS_h2jwn37ev1XQCqKFTM4n%A-I*8zoBQyLxKSJ%jM(vId=!u ziqwEh+#^yLwGMqm?$I;B2T`r*RGZTLZ1i0iC)uVTbuj2uBLN7qrlU#%(NXj|lX4Vs zS0#!2#PU{2iX`JU!B{@DIw5yJEovH`H%<JB$4Kd-_ZA<>mE~Xl8I214*|Xl#E_&j0 zh2=kGeSya4)amDbwtTsUf83o6faR^+CkTM${WKNad#U|9Zt+_XR(!Vrf|TL;lZiKZ z3{w|xZ#GP;joM8yE%z(#=2KNYw72i0Eqq_g-hOVi-?t<*MlP?QQ=9gkmbj&*?FrX0 zKFxg(9>Ih(VJBjmKIj49@L^+c#{^J=<jE9GukZ$UccNA<wMV6FRJ06#P@60o!=+qT zOv<4k;TN^3;w!$v4aF5D8qy^po{@?rNr9t^<~)4k%wJ(GPPo2{{#-^L&cKWReOSNy zvaR*HZsoJwClFo3p0@@c$+RilFX2vnH=B!h=*F!H?ExBhLw}|RaE{`a8UA%_2R3|_ z*-2~w&62eqwdCMK0ZZ$MKP1YTm=^fN#3uvlt;GaFgvr(A%M!(y#(i-4T#e4QxL1D8 z@8s{n$;@t+|C&u7)ArgbHcTZc4ruE@ej#fh*VO3hwzjasY1(-~7>vcq?%}SjubQrI z%}<F5#Vt-&`?|LsohWa}`8mHal9@a*TKwGDk%^4C{CmBh4-3&mWNZ1d>ER2vc5BME z2uIJQOD0Dz+|sGU_HsKT(cyy=-P?B84o!A!N-uw0gb`5yclbJfkb43Yw?a~_jnf&= zz}6i$Ia6&ghm2aC*_@!vL9}^W{p0mn{HJD@^3$D}IU_NXnOiF0b|zuWC1cq%bko_G zmCtiX<5WmH1+Uw)p?7^-uA?J&&LVE|9Ub{?(Sn5}+TFQacTYCgjg;C}f$3xR!8h?F zIBd{YNHHL3<eVruel*wz5UeGP<vj^A=+oj|?O~(;tl@+iz(Z$82oF!m&{=T2R!;G; z-o+lH`FQdd^hg{E{56;#)6^;#&rY<nIb-6{s;Y-k9R>u`#WV8?h$|bV?R1#);M|7X z+~H}YP|i+vAEJ_La|K@{n8-vkV;!0Pe7sPK#$pz5Z8DV}_~51Muinvh)>{uQUVAXl z4!Wj|SVE5!ckJs~I^3J8?HpNr!;qRy#0<EIBEA<sHi6@dP<8^y94+4Ug%ZUMD4gA! zjDIU&8HN>jCZ6hDzLDGaQGU3OA23waIQgx<;c3JUc#ir#41bj@cy=INk`Nne(uUH4 z6x-LBd1Su1D3i;k&En7VPh``Ai|oNCT?mzC@qc%+oX)~p?L;BKc^C3!<y_vCb^HdL zePNz36``qx03%AV`9MwSkO7yjD>qJ_L(0o_(DEJCz7gs+6aF9i%a4z9?`Vfj&@hbU zcM6%_jQQeI8D{<31el|L^ojmA*_Q1!PW1cuOv{P>zWLKn^nWaq$EbHgC)$BkSa#$a zP$YXp7rOaMIS=$k)Ry*3tK&v<YinG7{pC~niJkq^d*v8EeEytIf>VetMfBi~o6hbo z&L18|7V3Czq*NM#rXo0TY+-QEbYZBr`)J*ZfHf-O)(AXTyYTJ%w_LZY^MKYqR%{#1 zVyAV?mJl<kbLBs9BI*Z>PpSgOb-;ryyt7TDY1nC<o@$nO+3z+4v3cA<?uuZVj&&^; zckXZBI?O(de7vnlAAE9+LVsNJshK!`Q#|C;GSc$fk%af);8n=PJGe7F+BG+Aj&{vY zFW=TuY>qXG;aN#N@+hbDXou^NE#=rk^-Fu=`G29u?!#+z=A`Hh!<8aC)%J%ELvYRh z&HlFrhfcruf@@qx^bqV^52R2SbC^;Zgo|ygij1i4o$d0c{r*n}(;D4y0lItdd*Az= z4(>flQs(Z}m5${ja#C5oKvQ4C9p{cO-+?nWd-#g$L17C1laRmQ!3O!U4l$y^eBcHs zw_?*Z#v{+{hNuvU$e!R}d;1`A8%E$H>F=5sMKH?#fdCc|ALc8wHCgBQpk$THmK5YU zT`tzF8$)nsj+`q6V9@}!|3h1^zzL2RJ3ukBC;ZaZ16^~Q=fgbI)B)tK*OF&yeM=N3 z`G9n8L=OwAt=G|aD67ugcL)qMhxkFc!3L<Ywbld&gCPfzlsbrGJ8_>Bh{WCQKr~)b zI{UT!8DP8C%Zo8zNC}5To_E7{O!9c$W?C-d4D`xw%+bTb2xcGJmbKx;E^jc78grki z(abSQUS>`s-q9TrQp-l;fpCAR+!qeSqY)g}-2RP7)Eyiur8+Be)bMzua3toT=dLn6 zyCuHTQ;>AG#~YS)9XT~UZe1$$ypL02rLv}pVKKyUvedYzQ6;`s6ox^szzYKF11^Rs zq0eJeSRpr9yAYD<Hl*G324|uLEt=E<GeM7HhPHn^V8~woBo2s6yvTP$T1`X`X_8Nh z9s-Z!4)61XgpeM+EEe#|sfgXC>u+AZ&6Y*9W}EkH6X7tF3{3jHvax2H7e!Js{IxHO z>LI~t^VdQ*`U$!64E<zt(lDEyx^&hA;{I?F=4|9-a+XanDq-35CCh691jAr3tl`Kp zTQZ@z+v7GfN(HPFt(g>CGctKw38zm&zK4H><+3-H5kq5AS&O9%aWo*r^zh!dywX}} z3kOn>1tsc>h8KcbG`Ml+8P^GiI7SuMBZx8xoOY%)y;kn9Kw>9fIYUmcl`)*}{fcle z)d`Kn8n_Hh$hw2NKNO8=!T5M*=Xe}DH7W*@2l(el?L=b|g?p8dXv~lY$1svd_-(Fx zaax9*1a)*0wn5F-NU-|@#BijunZHl79I9D<8$D7au*MZp4v!$i^1Z?&yv+>K(aJ5` zpjDURXqH*M6)~y${e1xoST*tur}FnXjqwivpBj<9QV@r&W8VV*1clz}A6nec*In-y zA`ShGqor|_8)s_sT6mi%zo3sFoZjG96e%vtaY=a#^qbTeLO9r0aDgkI$4JfMtgpys z)X|73-V9hu#G2x_QG7A7fYJJFg^cEk-d+Q)Rajor7}=M?Ky6>hTP_p%5J|*o+3MYg z5P&F?32gEQlP2H$X35h0qWsQSGUBFR{RqE$kNvCG+2}!%7}38Ju#j$B<a;A-M2&c- zEc&$!`S+~63BS5eSYq?&5`f%D<3^KNX;~4<)?fy)V?q}M(=akv2<wjJ!S8-&9MxE{ zH&dMtGzX7g`7=K4dK3{BLy*f>R|c##cFlxB>ESZ3ZbaNA4;}3D|A0M|=^^On2g5<1 z61`iAM@{)1_Ps2}QV2Q5;s5Vl+aX0@W@rU74^C8^4#(P6S%`bM-^Zf2wd?9_#B;A) zg8sb=u;8aS#7k;K);kA{>u(JNjZ|RUwm`}V2G)lPx?T+NyJAV8=@Tb_os+R!L42?U zsU`z8A*YVL$4NO2DuBM&{n87e^{tgHhKjtA&~9n1>lUa-G3FQXS=ZedbD1PV!WUE* z&UnC~%C4(*?Db-F5okOSJa4~f#J&E-NJ(ofpKMIMP}HO1;lpB77cW#}Pd8_QTiFYo z^dV@4(Inbf3xP!Vp7|=yz{ez2@b|)d-X~}=DK2>1=lM!?u~SKKI4aqNe>i8!C6vy^ zDxkla&$~_ty6tOBHDkFG57FSyZ4v=7yFg)u3dNCJZlstl7Sm>_#OHIv`9eLLg|c!u zH&QlHW}0Qx`bMmoFAB53b_E+=r&bIKt;m;Do~KIk@oZ#WI2Gr^8zOjWG?LB?<#M%5 z&_5j#<b*hxv~ok4p`yvY2eRT;CK0dUOOW^QfQWO*XGp@&Dz8EM4W=x>TKPaU=5|YF zTPjh`W@R<w=A{^lJZ4WZQO;%Ks^#G&ejNr%t>)p9qNFwABjR$ZR>Tw3bhM2@!-}9` zDrUTcI3H@&9<|k0TR9v@JI(NBD-L~mvL(cE06RyBnxR#oC%$wBs&!{8cBOmFfeqs% zVC?(@AZ)?-FAtSldLYO!KVsIZJo12@0i@T5_^=*5hbVx}QQPnk#_s|=r{Go3D~#VN zu3diNl_-4^37?r0<bdNZc71^V6k#2~cBE#G)7MuN`M3DvFD}Jp=olHD8V8+{*QQgg zJG*sWSK&Q{PSFgG6OAHTbxkXcqK&>vd#2DD^cAO$5ztCg)>y6oy$g^oEGy9O_p3?1 z-l+VtZHPPQ$GNo#>?K$WHceZ*-j<nPt#>=4?)?GFQgA?SwO+E;MD|e(6*GpN_ikX1 zD-dY}{4{U}sUp^5DM>ZujVqFdp8MknbL{aTb7zO%Kcc5~na@YUS{lI(!XaMpc)}4C z_`g&@O5TJVB25z_si$3+HYpH8uT74faBbsZ2Bb8b^pxBYL%)X}GD%OF9{9m`z^N*( z+#OYX!EnnxVUNAo%OB$ZlQ1j89+aw7gFN6PiOLaCZi&f)uR7n;GvDqN;!;c#e0}+R zuU}BH{u7FQ0HYPbqTVO@Zr41&!p?fK)n2oyOY`t3mn#I~P{$!cNiZnniv_+LC;vLz zrH~stCxWaXRvPC)h(><I^$dTMor|mtvC~C1L$bJNmb73!X>Q;?(j|wqoCdG{nH|)t z&#&~jW>+4j6>euNvwz`mJm0k$9t-ivR*tNUx$a$g6mNnslJ*V!&MR_}UnQmivFVXE z(Y{ifPb~k`HMjEQnNPPS(ODsAcQ#ACUw+Z<Yay&=;K`FOp!-zQ-76EWYazds8AO-{ zn0c7s-?F?Qydl#UL%UdBoZK!UeXknD`b?UV;*0uyqQ}j1;#@czGJ@6q*)My%9$gQ4 z-EJiM4dI+Q=XQsJOG~2L4aFJGKX5Boquq7z34=1$=0WS^FLlbf54Aou+>NlFv8;hM z;)(|xd+y7_z3uDeb{{#~CwblzPQYLcNgk_frRw_7%D1UT%!AGMV|AS(3Qz8eQ2eb} znCNz)$L|5%j(H-x{&r$m1=03|LuM{##=|_9P={e)2mV^w=la0P12nt7HSpI14*J5I zy|9{n7i*`9>Fi`G_u~W%H`k*Zyxghk_)oR&cKzJ-F!ztZK8U15Hb6T_$X+?C`9ku) z+Lzzq96;I<Z?iA>)%eOcU0(qnAXpeKft4JL&o#kJDkyT@xQIAb?4j7eZiEcB;<V<3 zIOL7D*lUjXzCUEm3Gs%+(zr6oW!ZJFTl-@qmojjh&)>)BSNQ2x5(_?9xFO7k6A?zY z%;<MsLRTTV2vJak=hmhO_NuY>&mTY$sKI+*UUC7KF(ceXqsuU?vp3m3&gBHPxseIW zw?K9p^=O4_70Wjymo;FZ^>7IO532Ck>5@zT!7wjd8F5R%r>6zs6663EebQBtq(rD{ z<)`@7efF<fC6|FvTK5IE;JAVe1CbEsq-5kO$tUV*G9*B9`Hk!SZg}3&PH`w7!$R0d z;0}N~!8i^(!pdf<3kTLw7Z(=pZ?MUK9)_MI`f52K8del_zK{PEbT0%y;r5n#TI<XP z6KcRW4xbIh9hwaquq4k0;4;gH1W(u_>XFw<q7Pw4jx!D6brM7wkUoZ$pK%?4<N}6} zR<ON<iF8Q{0Mhvw&po5aA21S$<Okr94H^5_u0IzZC5fX63l>U4^|Ui&p-&qi4?sp( zF9MZ>c43%!sFf~IWm&xdnkGJcn8xZD{|ndOxW$*#W3?~~YpQcj(J2Ys8hWgk=#+lJ zi7($~%K)$0<|(?fHQPK*cea}cK5|oR>H!)vdl_KJ>@oY_q$zsgbWPE&GcdS~nfSFE zd7%C$G;M1R*_kzMwBmjVEc@9r$+%i6vLWa*(xIKZ*nV0cDe=FQl?xFJREQit9Dx-# zdZB{l%CB6Eo%C*Z<`0x{3y^U=aYNjHK-A+N|3Zt5`>U6eaW_Io_F3U$j*NRMtz?JI zL0@JLNTk@02l?PczA%nUoK*g?gZ%UBrj;be2O|Dzp-}Zl0z8*grq==bJ*f9VcMO>2 z<tzy;Tjos4^HX*C&#!Gsc&RS`4{5z+^PH*mQ|%aMX#I3M#%}ceVeH%gPc-z;uce{C z?`8IrJyU+n)c>H}W9^ZAS-Z#0*bgU!fBS!?HTl(<wI;uEeZg(~@miC4rZrjLsx|pl zrj~=AB;cP4@p4j}OjyvN3^r9Xphr3Ir_Tx>WVR4T{%+Npkp7~fHF+`?N8I^7v$wOV zBr_g&JWK_1{bnBu5?L5y1ddar;R&cnQc5J;@(>1fCw<9_(3kw|e_UU3@(gQjZG8z~ zWSk`QC9Rx`?-jHYm0*fA;bfWR!_U8henL3GG~>iy!qWKdGr&hU*B&$CGyiw$OIBIG zm(!P=C6ryC5{?rWYU@jEDdKkMN;nlCh{<RxOh{uQDBzF(V{QKUkJp$8N<*o!w#I~b zUbhY|j5H=KINafQ9Z|Nj5Ec|G9qc1L$+=B4f^ft3Xj*}y<QxPg77jOB!ss(z8uhNF ziD|*rtGx6!+a3a`LJ{Bq)u`&SkbtVsq3E+vgF&(dpL>PysXszv;*$e0)#DDtq%NZm zk-s#B|4ld?*Q6*UY1r4i;gAZ4gM3;`%4$4-DdJbUfS(RGIA6JCR9dx2*|S18D{T5F zz(XYN*#kUbnt>UgPc{V4F$CiCiPCE$y66cWr-z_)U6_<f=)*?DuKg@>YB?GcCW6}v zlZM75!oL$lSvoK?b1>E**W-o!xCnBM@VW_QW^QgqN${M%L9P9$_es>dPWbxEYE1lc zL~LqIiu`Y(G3jcLF~+e~W5U1Q^=)B2MUj-DF(D(lBRF{%7YiLSdG_We_}6#Iay1KW zwB9*K(I;2BxSH#G+&eJq4H?97Cw)KIc!QfGs}fhEj2F5=+J9~(@A`@BSze=G*fO*2 z==wG}t3qbx&a$t+p~Lf*_(jn}7yNGd#g%VxZp8S7zb&|$Zg_ohwvZF$Ip2qXOH_~8 zRpflhuAphL`{myy(}XoL@lE60mwPvpW;GLE8eg77{L2-U%e#Kcy_U&pwmfZb(Wi)6 z=5FZHbS`fwiqWYUczYTe^N&Ge4!vDNcYP+@e}6<0f}?GE5r-HR(=CAcLcws=DAJKe z(<8`Gmn+i9IB<VLjYJ6dI}c&zH|OF-X5nedN!XGQlbDG|QG_@IB{3Gg8aAG*BeX;I zyT0#wKbNDPIM~9DYH=L};QM7&Rlcvp<4QTM;N4EF$1nb2H0(0~J22OsY%3IG&GLFA z>PKL<Cs8ftslXiv4U^;bNupusWXl8V$I5T`*TZ{YJw;GM<Q-Drw5+N^u2av)3hgo+ z%FW_TJOBE5PEgwr<<->M=BpGx64qLdthJN_4X$Z+iR)ismGpt<eSno5MusQ@RzIKc z36~wu`5;Pklz4?tzK(u#2tEuqLl^23KJ9v%{f6FnD=Ybo>$lA3Z5Mwrcb~1@mRqz# zuLGh!*{a><T>psQzSFicA{9ha&gQBuX2uZT7x6UBj1)QhAhMpm6}B@UWDC1Rf<bev zl`YujuTQga#xkomPSkUluW%oOjN%hM$N8NR$#Vx`jq(9^{WB{$#Lsg-#!B@Gk8=g* zor}4Tpm#pu^PHEJ97fio8OUHh;c3@5?RQWz2tA%p_-ogHvN1Udd-E>^|Cx1@-#lG6 z$uEZ7aOH?1CJS_v8R#avScKX~`EG9V<@CBQ{6TtM^ncAbcqn(`^dQpcAqM*$7$+X_ zzoDc<Y+InRdW|e-*h5fFLYIj9e<-xK!%H$6fdf=H5>@z)z(}Dm67WRBk&w@8M5Bh+ z7s6M-Jvh%%K~!~CALq5}BQK%~tJ|)RGg>N>P&wb>#;;qeih5WRsPB8rKjHE#UnTCq z)`SqzRh8e%YMY`g|3p*X*iL`+Cclx(3#GN+<Ttjwc?bVnju)5@#+my3kHu!6!x1SY z^DhL48-0d5Py(u8pFbM3vCuF1=eY~)`ry{gM(^~Vb9$kpy(lTMa3l-@8&ZU?28N4; U;Q;kK>h>fe5oFUw+TGay4SQ3<WdHyG literal 0 HcmV?d00001 diff --git a/lib/og/fonts/Nunito-Regular.ttf b/lib/og/fonts/Nunito-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6401d72772b1346b3ed06ba9c9ff5a10bffa1872 GIT binary patch literal 125528 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 literal 0 HcmV?d00001 diff --git a/lib/og/images.ts b/lib/og/images.ts index c1ec95d8b..6b146dcd0 100644 --- a/lib/og/images.ts +++ b/lib/og/images.ts @@ -1,11 +1,11 @@ import { readFile } from "node:fs/promises"; import path from "node:path"; -import { githubAvatarUrl, profileImageUrl } from "@/lib/authorImage"; +import { authorImageUrl } from "@/lib/authorImage"; import type { OgAuthor } from "@/lib/og/target"; const publicFile = (relative: string) => path.join(process.cwd(), "public", relative); -export const dataUri = (buffer: Buffer, mime: string) => `data:${mime};base64,${buffer.toString("base64")}`; +const dataUri = (buffer: Buffer, mime: string) => `data:${mime};base64,${buffer.toString("base64")}`; /** * Detects the image type from magic bytes rather than the response header. @@ -31,25 +31,22 @@ export function sniffImageType(buffer: Buffer): string | null { * magick polygonBackground.png -resize 1200x630^ -gravity center -extent 1200x630 \ * -negate -normalize -sigmoidal-contrast 3,50% +level 79%,99.5% public/og-polygon.png */ -let polygonCache: string | undefined; -export const loadPolygon = async (): Promise<string> => { - polygonCache ??= dataUri(await readFile(publicFile("og-polygon.png")), "image/png"); - return polygonCache; +const cachedFile = (relative: string, mime: string) => { + let cache: string | undefined; + return async (): Promise<string> => (cache ??= dataUri(await readFile(publicFile(relative)), mime)); }; -let placeholderCache: string | undefined; -const loadPlaceholder = async (): Promise<string> => { - placeholderCache ??= dataUri(await readFile(publicFile("uploads/ssw-employee-profile-placeholder-sketch.jpg")), "image/jpeg"); - return placeholderCache; -}; +export const loadPolygon = cachedFile("og-polygon.png", "image/png"); +const loadPlaceholder = cachedFile("uploads/ssw-employee-profile-placeholder-sketch.jpg", "image/jpeg"); /** Fetched rather than handed to Satori as a URL so one bad photo degrades to the placeholder. */ export const loadAvatar = async (author: OgAuthor): Promise<string> => { - const url = profileImageUrl(author.url ?? undefined) ?? githubAvatarUrl(author.url ?? undefined); + const url = authorImageUrl(author.url); if (url) { try { - const res = await fetch(url, { next: { revalidate: 60 * 60 * 24 } }); + // Bounded: a slow GitHub must not stall the render past a crawler deadline + const res = await fetch(url, { next: { revalidate: 60 * 60 * 24 }, signal: AbortSignal.timeout(3000) }); if (res.ok) { const buffer = Buffer.from(await res.arrayBuffer()); const type = sniffImageType(buffer); @@ -62,3 +59,19 @@ export const loadAvatar = async (author: OgAuthor): Promise<string> => { return loadPlaceholder(); }; + +/** + * Nunito, vendored as TTF because Satori cannot read WOFF2 and next/font's copies are + * build artifacts with unstable paths. Without these the cards render in Satori's + * default sans, which is not the site's typeface. + */ +const loadFont = (file: string) => readFile(path.join(process.cwd(), "lib/og/fonts", file)); + +let fontCache: { name: string; data: Buffer; weight: 400 | 700; style: "normal" }[] | undefined; +export const loadFonts = async () => { + fontCache ??= [ + { name: "Nunito", data: await loadFont("Nunito-Regular.ttf"), weight: 400 as const, style: "normal" as const }, + { name: "Nunito", data: await loadFont("Nunito-Bold.ttf"), weight: 700 as const, style: "normal" as const }, + ]; + return fontCache; +}; diff --git a/lib/og/target.ts b/lib/og/target.ts index 6962d1970..b7d6de68a 100644 --- a/lib/og/target.ts +++ b/lib/og/target.ts @@ -6,13 +6,22 @@ export interface OgAuthor { url?: string | null; } -export type OgTarget = { kind: "rule"; title: string; authors: OgAuthor[] } | { kind: "category"; title: string } | { kind: "unknown" }; +export type OgTarget = + | { kind: "rule"; title: string; authors: OgAuthor[] } + | { kind: "category"; title: string } + /** Genuinely no such filename. */ + | { kind: "unknown" } + /** Lookup failed - render the generic card rather than 404 a page that still serves. */ + | { kind: "unavailable" }; /** * Category titles keyed by URL filename. mainCategoryQuery returns every category in * one un-paginated call, avoiding the pagination walk page.tsx needs for a full * relativePath. Top categories are skipped - they live at <dir>/index.mdx so their * filename is always "index" and never matches a URL segment. + * + * Tagged with rule-count as well as category-rule-data because the Tina webhook only + * fires the former; tagging solely on the latter would leave this cached for a year. */ const getCategoryTitles = unstable_cache( async (): Promise<Record<string, string>> => { @@ -29,15 +38,27 @@ const getCategoryTitles = unstable_cache( return titles; }, ["og-category-titles"], - { tags: ["category-rule-data"] } + { tags: ["category-rule-data", "rule-count"], revalidate: 60 * 60 * 24 } ); /** - * Dispatches on the result, not on a thrown query: Tina throws identically for "no such - * record" and "network is down", so treating a throw as "must be a category" would ship - * a hub card titled "SSW.Rules" for a real rule and cache it for a day. + * Resolves a URL segment to a rule, a category, or neither. + * + * Category first, matching page.tsx's precedence, so the card and the page can never + * disagree about what a filename is. "unavailable" is kept distinct from "unknown": + * Tina throws identically for "no such record" and "network is down", and collapsing + * the two would 404 a real rule's card for the duration of an outage. */ export async function resolveOgTarget(filename: string): Promise<OgTarget> { + let lookupFailed = false; + + try { + const title = (await getCategoryTitles())[filename]; + if (title) return { kind: "category", title }; + } catch { + lookupFailed = true; + } + try { const rule = await client.queries.ruleDataBasic({ relativePath: `${filename}/rule.mdx` }); if (rule?.data?.rule?.title) { @@ -48,15 +69,9 @@ export async function resolveOgTarget(filename: string): Promise<OgTarget> { }; } } catch { - // Not a rule, or Tina is unwell. Either way the category lookup decides next. - } - - try { - const title = (await getCategoryTitles())[filename]; - if (title) return { kind: "category", title }; - } catch { - // Categories failed too - treat as unknown rather than guessing at a card + // Tina throws for a missing record, so this alone does not mean the lookup failed. + // Only treat it as an outage if the category lookup above failed too. } - return { kind: "unknown" }; + return lookupFailed ? { kind: "unavailable" } : { kind: "unknown" }; } diff --git a/package.json b/package.json index 01137e31f..6a726d99b 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "prepare:content": "cross-env node ./scripts/prepare-content.js", "crawl-sitemap": "node ./scripts/crawl-sitemap.js", "test": "jest", - "verify:og": "node ./scripts/og-verify.mjs" + "verify:og": "NODE_OPTIONS=--experimental-vm-modules OG_PREVIEW_DIR=${OG_PREVIEW_DIR:-og-preview} jest ogCard.preview" }, "devDependencies": { "@biomejs/biome": "^2.4.14", @@ -32,7 +32,6 @@ "@types/styled-components": "^5.1.36", "autoprefixer": "^10.5.0", "cross-env": "^10.1.0", - "esbuild": "^0.25.0", "jest": "^30.3.0", "jest-environment-jsdom": "^30.3.0", "postcss": "^8.5.14", diff --git a/scripts/og-verify.mjs b/scripts/og-verify.mjs deleted file mode 100644 index e34f2db54..000000000 --- a/scripts/og-verify.mjs +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Renders the Open Graph card to PNGs so it can be eyeballed without running the site. - * Unit tests cover the pure logic; this is the visual check. - * - * pnpm verify:og [outDir] (default: ./og-preview) - */ -import { execFileSync } from "node:child_process"; -import { mkdir, rm, writeFile } from "node:fs/promises"; -import path from "node:path"; -import { ImageResponse } from "next/og.js"; - -const outDir = process.argv[2] ?? "og-preview"; -const build = path.join("scripts", ".og-card.build.mjs"); - -// card.tsx is TSX and imports via "@/" - bundle it before importing -execFileSync( - "esbuild", - [ - "lib/og/card.tsx", - "--bundle", - "--format=esm", - "--platform=node", - "--jsx=automatic", - "--external:react", - "--external:react/jsx-runtime", - `--outfile=${build}`, - "--log-level=error", - ], - { stdio: "inherit", preferLocal: true, shell: false, env: { ...process.env, PATH: `./node_modules/.bin:${process.env.PATH}` } } -); - -const { buildOgCard, OG_SIZE } = await import(`../${build}`); - -const P = (title, slug) => ({ title, url: `https://www.ssw.com.au/people/${slug}` }); - -const TOTAL = 3802; // stand-in for fetchRuleCount() - -const cases = { - "1-single-author": { - title: "Do you know when to change the email subject (or appointment subject)?", - authors: [P("Adam Cogan", "adam-cogan")], - totalRules: TOTAL, - }, - // Igor's photo is a PNG named .jpg - regression case for the content-type sniffing - "2-many-authors": { - title: "Do you use the best tools for database schema changes?", - authors: [ - P("Adam Cogan", "adam-cogan"), - P("Igor Goldobin", "igor-goldobin"), - P("Adam Stephensen", "adam-stephensen"), - P("Thiago Passos", "thiago-passos"), - P("Brendan Richards", "brendan-richards"), - ], - totalRules: TOTAL, - }, - // 235 rules and every category page have no authors - "3-no-authors": { title: "Do you know the rules to better unit tests?", authors: [], totalRules: TOTAL }, - // Longest real title (107 chars, with emoji) + longest real name pair (52 chars) - "4-longest-content": { - title: "Do you create a Sprint Forecast email 📩? (aka Functionality to be developed per Sprint Planning)", - authors: [ - P("Christian Morford-Waite", "christian-morford-waite"), - P("Sebastien Boissiere", "sebastien-boissiere"), - P("Kosta Madorsky", "kosta-madorsky"), - P("Camilla Rosa Silva", "camilla-rosa-silva"), - P("Jerwin Parker Roberto", "jerwin-parker-roberto"), - ], - totalRules: TOTAL, - }, - // Neither author has a profile photo - must fall back, not fail the image - "5-missing-photos": { - title: "Do you have a rule authored by someone with no profile photo?", - authors: [P("Toby Goodman", "toby-goodman"), P("Ryan Tee", "ryan-tee")], - totalRules: TOTAL, - }, - "6-homepage": { title: "Secret Ingredients to Quality Software", totalRules: TOTAL, isHub: true }, - "7-category": { title: "Rules to Better Interfaces (Forms)", totalRules: TOTAL, isHub: true }, - "8-category-longest": { title: "Rules to Better User Acceptance Tests (UAT) for Bug Management", totalRules: TOTAL, isHub: true }, -}; - -await mkdir(outDir, { recursive: true }); - -try { - for (const [name, rule] of Object.entries(cases)) { - const res = new ImageResponse(await buildOgCard(rule), OG_SIZE); - const file = path.join(outDir, `${name}.png`); - await writeFile(file, Buffer.from(await res.arrayBuffer())); - console.log(`wrote ${file}`); - } -} finally { - await rm(build, { force: true }); -} diff --git a/site-config.ts b/site-config.ts index 5753a96e6..e2f417053 100644 --- a/site-config.ts +++ b/site-config.ts @@ -1,9 +1,9 @@ const titles = { - '/latest-rules/': `Latest Rules`, - '/user/': `User Rules`, - '/orphaned/': `Orphaned Rules`, - '/archived/': `Archived Rules`, - '/profile/': `Profile`, + "/latest-rules/": `Latest Rules`, + "/user/": `User Rules`, + "/orphaned/": `Orphaned Rules`, + "/archived/": `Archived Rules`, + "/profile/": `Profile`, }; export const siteTitle = `SSW.Rules`; @@ -21,7 +21,8 @@ export const social = { }; export const parentSiteUrl = `https://www.ssw.com.au`; export const breadcrumbDefault = `SSW Rules`; -export const homepageTitle = `Secret Ingredients to Quality Software (Open Source on GitHub)`; +export const tagline = `Secret Ingredients to Quality Software`; +export const homepageTitle = `${tagline} (Open Source on GitHub)`; export const trailingSlash = `never`; export { titles }; @@ -38,9 +39,10 @@ const config = { social, parentSiteUrl, breadcrumbDefault, + tagline, homepageTitle, trailingSlash, titles, }; -export default config; \ No newline at end of file +export default config; From b3fe63e26f84cb3b6f5c193ebe05d44ba29bb378 Mon Sep 17 00:00:00 2001 From: isaaclombardssw <isaaclombard@ssw.com.au> Date: Wed, 5 Aug 2026 17:08:07 +1000 Subject: [PATCH 10/16] fix: address round 3 review findings Material: - Cards inherited ImageResponse's default `public, immutable, max-age=31536000`. The image URL's ?hash comes from the source file, not the rule content, so it never changes on an edit - the proxy and every scraper would have held a stale card for a year, somewhere revalidatePath cannot reach. Both routes now go through ogImageResponse, which sets s-maxage with stale-while-revalidate. - The round 2 outage guard never fired: getCategoryTitles is cached for 24h, so a warm cache does not throw, lookupFailed stayed false, and a real rule's card 404d during a Tina outage anyway. The unknown/unavailable split is gone - anything unresolved renders the generic card, which is also what page.tsx does for those paths. Deletes a state and the reason for the two-try/catch dance. - The vendored Nunito TTFs shipped without their license. OFL 1.1 requires it to accompany each copy; lib/og/fonts/OFL.txt added. Also: the webhook now fires the category-rule-data tag so a renamed category does not re-render from a stale title map, verify:og uses cross-env like the repo's other env-setting scripts, and the .gitignore comment no longer points at a script that was deleted. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- .gitignore | 2 +- __tests__/lib/ogCard.preview.test.tsx | 8 +-- __tests__/lib/ogTarget.test.ts | 12 ++-- app/[filename]/opengraph-image.tsx | 17 ++--- app/api/revalidate/route.ts | 2 + app/opengraph-image.tsx | 5 +- lib/og/fonts/OFL.txt | 93 +++++++++++++++++++++++++++ lib/og/response.ts | 20 ++++++ lib/og/target.ts | 31 ++++----- package.json | 2 +- 10 files changed, 145 insertions(+), 47 deletions(-) create mode 100644 lib/og/fonts/OFL.txt create mode 100644 lib/og/response.ts diff --git a/.gitignore b/.gitignore index 1d9fd3605..c48e090b9 100644 --- a/.gitignore +++ b/.gitignore @@ -48,5 +48,5 @@ redirects.json # Generated at build-time (used by SSW.People) public/people-latest-rules.json -# OG card preview output (scripts/og-verify.mjs) +# OG card preview output (pnpm verify:og) og-preview/ diff --git a/__tests__/lib/ogCard.preview.test.tsx b/__tests__/lib/ogCard.preview.test.tsx index f34f424a7..6c2899bad 100644 --- a/__tests__/lib/ogCard.preview.test.tsx +++ b/__tests__/lib/ogCard.preview.test.tsx @@ -9,9 +9,9 @@ */ import { mkdir, writeFile } from "node:fs/promises"; import path from "node:path"; -import { ImageResponse } from "next/og"; -import { buildOgCard, OG_SIZE } from "@/lib/og/card"; -import { loadFonts } from "@/lib/og/images"; + +import { buildOgCard } from "@/lib/og/card"; +import { ogImageResponse } from "@/lib/og/response"; const outDir = process.env.OG_PREVIEW_DIR; const P = (title: string, slug: string) => ({ title, url: `https://www.ssw.com.au/people/${slug}` }); @@ -57,7 +57,7 @@ const cases: Record<string, Parameters<typeof buildOgCard>[0]> = { it.each(Object.keys(cases))("renders %s", async (name) => { await mkdir(outDir as string, { recursive: true }); - const res = new ImageResponse(await buildOgCard(cases[name]), { ...OG_SIZE, fonts: await loadFonts() }); + const res = await ogImageResponse(await buildOgCard(cases[name])); const png = Buffer.from(await res.arrayBuffer()); expect(png.subarray(0, 8)).toEqual(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])); await writeFile(path.join(outDir as string, `${name}.png`), png); diff --git a/__tests__/lib/ogTarget.test.ts b/__tests__/lib/ogTarget.test.ts index 1b21eafd4..8502a6b07 100644 --- a/__tests__/lib/ogTarget.test.ts +++ b/__tests__/lib/ogTarget.test.ts @@ -36,19 +36,19 @@ describe("resolveOgTarget", () => { expect(queries.ruleDataBasic).not.toHaveBeenCalled(); }); - it("reports a genuine miss as unknown", async () => { + it("falls back to the generic card on a genuine miss", async () => { queries.mainCategoryQuery.mockResolvedValue(categories("other")); queries.ruleDataBasic.mockRejectedValue(new Error("Unable to find record")); - await expect(resolveOgTarget("no-such-page")).resolves.toEqual({ kind: "unknown" }); + await expect(resolveOgTarget("no-such-page")).resolves.toEqual({ kind: "generic" }); }); - // The distinction that matters: an outage must not 404 a real rule's card - it("reports an outage as unavailable, not unknown", async () => { + // page.tsx serves unresolved filenames, so a card must never be worse than plain + it("falls back to the generic card during an outage rather than failing", async () => { queries.mainCategoryQuery.mockRejectedValue(new Error("ECONNREFUSED")); queries.ruleDataBasic.mockRejectedValue(new Error("ECONNREFUSED")); - await expect(resolveOgTarget("a-real-rule")).resolves.toEqual({ kind: "unavailable" }); + await expect(resolveOgTarget("a-real-rule")).resolves.toEqual({ kind: "generic" }); }); it("still returns the rule when only the category lookup is down", async () => { @@ -62,6 +62,6 @@ describe("resolveOgTarget", () => { queries.mainCategoryQuery.mockResolvedValue(categories("other")); queries.ruleDataBasic.mockResolvedValue({ data: { rule: {} } }); - await expect(resolveOgTarget("untitled")).resolves.toEqual({ kind: "unknown" }); + await expect(resolveOgTarget("untitled")).resolves.toEqual({ kind: "generic" }); }); }); diff --git a/app/[filename]/opengraph-image.tsx b/app/[filename]/opengraph-image.tsx index 56ab669d4..408ba8c07 100644 --- a/app/[filename]/opengraph-image.tsx +++ b/app/[filename]/opengraph-image.tsx @@ -1,7 +1,5 @@ -import { notFound } from "next/navigation"; -import { ImageResponse } from "next/og"; import { buildOgCard, OG_CONTENT_TYPE, OG_SIZE } from "@/lib/og/card"; -import { loadFonts } from "@/lib/og/images"; +import { ogImageResponse } from "@/lib/og/response"; import { resolveOgTarget } from "@/lib/og/target"; import { fetchRuleCount } from "@/lib/services/rules"; import { tagline } from "@/site-config"; @@ -14,21 +12,14 @@ export const revalidate = 60 * 60 * 24; export default async function OpengraphImage({ params }: { params: Promise<{ filename: string }> }) { const { filename } = await params; - const [target, totalRules] = await Promise.all([resolveOgTarget(filename), fetchRuleCount()]); - // Only a genuine miss 404s. A failed lookup falls through to the generic card below, - // because page.tsx still serves these paths and a broken og:image is worse than a - // plain one. - if (target.kind === "unknown") notFound(); - - return new ImageResponse( + return ogImageResponse( await buildOgCard({ - title: target.kind === "unavailable" ? tagline : target.title, + title: target.kind === "generic" ? tagline : target.title, authors: target.kind === "rule" ? target.authors : [], totalRules, isHub: target.kind !== "rule", - }), - { ...size, fonts: await loadFonts() } + }) ); } diff --git a/app/api/revalidate/route.ts b/app/api/revalidate/route.ts index c035a8f9b..d3c5d651f 100644 --- a/app/api/revalidate/route.ts +++ b/app/api/revalidate/route.ts @@ -79,6 +79,8 @@ export async function POST(req: Request) { // Revalidate rule-count tag if any rule was added if (shouldRevalidateRuleCount) { revalidateTag("rule-count", { expire: 0 }); + // Category titles feed the OG cards and are cached under this tag + revalidateTag("category-rule-data", { expire: 0 }); } for (const route of routesToRevalidate) { diff --git a/app/opengraph-image.tsx b/app/opengraph-image.tsx index a8397276d..d1975f4d1 100644 --- a/app/opengraph-image.tsx +++ b/app/opengraph-image.tsx @@ -1,6 +1,5 @@ -import { ImageResponse } from "next/og"; import { buildOgCard, OG_CONTENT_TYPE, OG_SIZE } from "@/lib/og/card"; -import { loadFonts } from "@/lib/og/images"; +import { ogImageResponse } from "@/lib/og/response"; import { fetchRuleCount } from "@/lib/services/rules"; import { tagline } from "@/site-config"; @@ -13,5 +12,5 @@ export const revalidate = 60 * 60 * 24; // Default card for every page without one of its own - home, search, latest-rules, // archived, user, orphaned. Inherited automatically by Next's metadata resolution. export default async function OpengraphImage() { - return new ImageResponse(await buildOgCard({ title: tagline, totalRules: await fetchRuleCount(), isHub: true }), { ...size, fonts: await loadFonts() }); + return ogImageResponse(await buildOgCard({ title: tagline, totalRules: await fetchRuleCount(), isHub: true })); } diff --git a/lib/og/fonts/OFL.txt b/lib/og/fonts/OFL.txt new file mode 100644 index 000000000..c8210f08c --- /dev/null +++ b/lib/og/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2014 The Nunito Project Authors (https://github.com/googlefonts/nunito) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/lib/og/response.ts b/lib/og/response.ts new file mode 100644 index 000000000..187336721 --- /dev/null +++ b/lib/og/response.ts @@ -0,0 +1,20 @@ +import { ImageResponse } from "next/og"; +import { OG_SIZE } from "@/lib/og/card"; +import { loadFonts } from "@/lib/og/images"; + +/** + * ImageResponse defaults to `public, immutable, no-transform, max-age=31536000` + * (next/dist/server/og/image-response.js). The image URL's ?hash is derived from the + * source file, not the rule content, so it never changes when a title or author list + * does - an immutable year would leave the proxy and every scraper holding a stale + * card that the webhook's revalidatePath cannot reach. + */ +const CACHE_CONTROL = "public, max-age=0, s-maxage=86400, stale-while-revalidate=604800"; + +export async function ogImageResponse(element: React.ReactElement) { + return new ImageResponse(element, { + ...OG_SIZE, + fonts: await loadFonts(), + headers: { "cache-control": CACHE_CONTROL }, + }); +} diff --git a/lib/og/target.ts b/lib/og/target.ts index b7d6de68a..2a31c9547 100644 --- a/lib/og/target.ts +++ b/lib/og/target.ts @@ -6,13 +6,7 @@ export interface OgAuthor { url?: string | null; } -export type OgTarget = - | { kind: "rule"; title: string; authors: OgAuthor[] } - | { kind: "category"; title: string } - /** Genuinely no such filename. */ - | { kind: "unknown" } - /** Lookup failed - render the generic card rather than 404 a page that still serves. */ - | { kind: "unavailable" }; +export type OgTarget = { kind: "rule"; title: string; authors: OgAuthor[] } | { kind: "category"; title: string } | { kind: "generic" }; /** * Category titles keyed by URL filename. mainCategoryQuery returns every category in @@ -21,7 +15,7 @@ export type OgTarget = * filename is always "index" and never matches a URL segment. * * Tagged with rule-count as well as category-rule-data because the Tina webhook only - * fires the former; tagging solely on the latter would leave this cached for a year. + * fires the former. */ const getCategoryTitles = unstable_cache( async (): Promise<Record<string, string>> => { @@ -42,21 +36,21 @@ const getCategoryTitles = unstable_cache( ); /** - * Resolves a URL segment to a rule, a category, or neither. + * Resolves a URL segment to a rule, a category, or neither. Category first, matching + * page.tsx's precedence, so the card and the page cannot disagree about what a + * filename is. * - * Category first, matching page.tsx's precedence, so the card and the page can never - * disagree about what a filename is. "unavailable" is kept distinct from "unknown": - * Tina throws identically for "no such record" and "network is down", and collapsing - * the two would 404 a real rule's card for the duration of an outage. + * Anything unresolved returns "generic" rather than 404ing. page.tsx serves every + * unresolved filename via ClientFallbackPage, so a 404 here would mean a live page + * with a broken og:image - and a Tina outage is indistinguishable from a genuine miss + * anyway, because the category map is cached and will not throw when it is warm. */ export async function resolveOgTarget(filename: string): Promise<OgTarget> { - let lookupFailed = false; - try { const title = (await getCategoryTitles())[filename]; if (title) return { kind: "category", title }; } catch { - lookupFailed = true; + // Fall through - the rule lookup may still succeed } try { @@ -69,9 +63,8 @@ export async function resolveOgTarget(filename: string): Promise<OgTarget> { }; } } catch { - // Tina throws for a missing record, so this alone does not mean the lookup failed. - // Only treat it as an outage if the category lookup above failed too. + // Tina throws for a missing record as well as for an outage } - return lookupFailed ? { kind: "unavailable" } : { kind: "unknown" }; + return { kind: "generic" }; } diff --git a/package.json b/package.json index 6a726d99b..166f0df39 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "prepare:content": "cross-env node ./scripts/prepare-content.js", "crawl-sitemap": "node ./scripts/crawl-sitemap.js", "test": "jest", - "verify:og": "NODE_OPTIONS=--experimental-vm-modules OG_PREVIEW_DIR=${OG_PREVIEW_DIR:-og-preview} jest ogCard.preview" + "verify:og": "cross-env NODE_OPTIONS=--experimental-vm-modules OG_PREVIEW_DIR=og-preview jest ogCard.preview" }, "devDependencies": { "@biomejs/biome": "^2.4.14", From 9b0bb46bbb9f5789712458f607190ce67a0c644d Mon Sep 17 00:00:00 2001 From: isaaclombardssw <isaaclombard@ssw.com.au> Date: Wed, 5 Aug 2026 17:30:35 +1000 Subject: [PATCH 11/16] fix: address round 4 review findings - The category-title purge added in round 3 sat inside the rule-count branch, which only fires when a rule is ADDED, so a category rename never busted it and the image-path purge re-rendered from the stale 24h map. Moved to the categories branch behind its own flag, which also purges the root card (it carries the site-wide rule total). - That same line passed `{ expire: 0 }`, which is not in revalidateTag's signature. It added a fifth tsc error that my own `grep -v app/api/revalidate` filter had been hiding since round 1. Back to the 4 pre-existing. - The Satori render had no guard. ImageResponse fetches emoji glyphs from a CDN mid-render with no timeout of its own, so one blip 500d the route; it now falls back to a plain card. Rule titles carrying emoji are common. - Lookup and avatar failures were silent, so a Tina or GitHub outage produced generic cards site-wide with no signal. They log now, as page.tsx does. - outputFileTracingIncludes pins the OG fonts into the standalone bundle rather than relying on the tracer inferring a runtime-built path. - The "+N" chip asked for weight 600 with only 400/700 registered, so Satori was silently snapping it. Cosmetic-only changes from this round were dropped deliberately - every prior round's regressions came from churn beyond the findings. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- app/api/revalidate/route.ts | 11 +++++++++-- lib/og/card.tsx | 2 +- lib/og/images.ts | 4 ++-- lib/og/response.ts | 20 +++++++++++++------- lib/og/target.ts | 10 ++++++---- next.config.ts | 13 ++++++++----- 6 files changed, 39 insertions(+), 21 deletions(-) diff --git a/app/api/revalidate/route.ts b/app/api/revalidate/route.ts index d3c5d651f..0bf6a2417 100644 --- a/app/api/revalidate/route.ts +++ b/app/api/revalidate/route.ts @@ -25,6 +25,7 @@ export async function POST(req: Request) { } const routesToRevalidate = new Set<string>(); + let shouldRevalidateCategoryTitles = false; let shouldRevalidateLatestRules = false; let shouldRevalidateRuleCount = false; @@ -53,6 +54,8 @@ export async function POST(req: Request) { if (changedPath.startsWith("categories/")) { const rel = changedPath.replace("categories/", ""); routesToRevalidate.add("/"); + // Card titles come from a cached map, so purging the image path is not enough + shouldRevalidateCategoryTitles = true; // Ignore main/top index files like categories/index.mdx or categories/<top>/index.mdx if (!rel.endsWith("/index.mdx") && rel.endsWith(".mdx")) { const filename = rel @@ -79,8 +82,12 @@ export async function POST(req: Request) { // Revalidate rule-count tag if any rule was added if (shouldRevalidateRuleCount) { revalidateTag("rule-count", { expire: 0 }); - // Category titles feed the OG cards and are cached under this tag - revalidateTag("category-rule-data", { expire: 0 }); + } + + if (shouldRevalidateCategoryTitles) { + revalidateTag("category-rule-data"); + // The root card carries the site-wide rule total + revalidatePath("/opengraph-image"); } for (const route of routesToRevalidate) { diff --git a/lib/og/card.tsx b/lib/og/card.tsx index 3f9ed6f1e..c2d2097de 100644 --- a/lib/og/card.tsx +++ b/lib/og/card.tsx @@ -31,7 +31,7 @@ const ExtraChip = ({ count }: { count: number }) => ( borderRadius: AVATAR, background: SURFACE, fontSize: 24, - fontWeight: 600, + fontWeight: 700, color: SSW_GRAY, }} > diff --git a/lib/og/images.ts b/lib/og/images.ts index 6b146dcd0..cc20e2435 100644 --- a/lib/og/images.ts +++ b/lib/og/images.ts @@ -52,8 +52,8 @@ export const loadAvatar = async (author: OgAuthor): Promise<string> => { const type = sniffImageType(buffer); if (type) return dataUri(buffer, type); } - } catch { - // fall through to the placeholder + } catch (error) { + console.warn(`[og] avatar fetch failed for ${url}:`, error); } } diff --git a/lib/og/response.ts b/lib/og/response.ts index 187336721..5839b774b 100644 --- a/lib/og/response.ts +++ b/lib/og/response.ts @@ -1,6 +1,7 @@ import { ImageResponse } from "next/og"; -import { OG_SIZE } from "@/lib/og/card"; +import { buildOgCard, OG_SIZE } from "@/lib/og/card"; import { loadFonts } from "@/lib/og/images"; +import { tagline } from "@/site-config"; /** * ImageResponse defaults to `public, immutable, no-transform, max-age=31536000` @@ -11,10 +12,15 @@ import { loadFonts } from "@/lib/og/images"; */ const CACHE_CONTROL = "public, max-age=0, s-maxage=86400, stale-while-revalidate=604800"; -export async function ogImageResponse(element: React.ReactElement) { - return new ImageResponse(element, { - ...OG_SIZE, - fonts: await loadFonts(), - headers: { "cache-control": CACHE_CONTROL }, - }); +export async function ogImageResponse(element: React.ReactElement, fallbackTitle?: string) { + const render = async (el: React.ReactElement) => new ImageResponse(el, { ...OG_SIZE, fonts: await loadFonts(), headers: { "cache-control": CACHE_CONTROL } }); + + try { + return await render(element); + } catch (error) { + // Satori fetches emoji glyphs from a CDN mid-render with no timeout of its own, so + // a blip there would otherwise 500 the route. A plain card beats no card. + console.error("[og] render failed, falling back to the generic card:", error); + return render(await buildOgCard({ title: fallbackTitle ?? tagline, isHub: true })); + } } diff --git a/lib/og/target.ts b/lib/og/target.ts index 2a31c9547..a3f0b2120 100644 --- a/lib/og/target.ts +++ b/lib/og/target.ts @@ -49,8 +49,8 @@ export async function resolveOgTarget(filename: string): Promise<OgTarget> { try { const title = (await getCategoryTitles())[filename]; if (title) return { kind: "category", title }; - } catch { - // Fall through - the rule lookup may still succeed + } catch (error) { + console.warn(`[og] category lookup failed for "${filename}":`, error); } try { @@ -62,8 +62,10 @@ export async function resolveOgTarget(filename: string): Promise<OgTarget> { authors: (rule.data.rule.authors ?? []).filter(Boolean) as OgAuthor[], }; } - } catch { - // Tina throws for a missing record as well as for an outage + } catch (error) { + // Tina throws for a missing record as well as for an outage, so this is only worth + // a debug line - a genuine miss is normal traffic. + console.debug(`[og] no rule for "${filename}":`, error); } return { kind: "generic" }; diff --git a/next.config.ts b/next.config.ts index 0b6188704..74d8b9abe 100644 --- a/next.config.ts +++ b/next.config.ts @@ -8,6 +8,13 @@ const basePath = normalizedBasePath ? `/${normalizedBasePath}` : ""; const nextConfig: NextConfig = { output: "standalone", // Required for the Docker setup + + // The OG fonts are read with a runtime-built path, which the file tracer cannot infer. + // Without this they would be missing from the standalone bundle and every card 500s. + outputFileTracingIncludes: { + "/opengraph-image": ["./lib/og/fonts/**"], + "/[filename]/opengraph-image": ["./lib/og/fonts/**"], + }, basePath: basePath, assetPrefix: basePath, env: { @@ -20,11 +27,7 @@ const nextConfig: NextConfig = { // Exclude Application Insights from server-side bundling to avoid dynamic require issues // This tells Next.js to use the Node.js runtime version instead of bundling it - serverExternalPackages: [ - 'applicationinsights', - 'diagnostic-channel', - 'diagnostic-channel-publishers', - ], + serverExternalPackages: ["applicationinsights", "diagnostic-channel", "diagnostic-channel-publishers"], images: { remotePatterns: [ From b1069b634e9a8e3f16466d00b420d24d733d834a Mon Sep 17 00:00:00 2001 From: isaaclombardssw <isaaclombard@ssw.com.au> Date: Thu, 6 Aug 2026 09:43:31 +1000 Subject: [PATCH 12/16] fix: address Chloe's review - build break and three metadata bugs Build break (thanks @Aibono1225 - caught by /deploy): - revalidateTag takes (tag, profile) on Next 16; I dropped the second argument last round to match a signature my local node_modules reported. Restored. Root cause worth recording: my node_modules was Next 15.5.15 while package.json and the lockfile are on 16.2.4 - stale since main was last pulled. Every local typecheck this branch has had was against the wrong Next, which is why the "4 pre-existing revalidate errors" I kept dismissing appeared to exist. With the correct version the repo has zero, and this line was the only real error. - pageMetadata returned `description: undefined` when a page did not supply one. Next's merge iterates the source's own keys and assigns `metadata[key] ?? null`, so that nulled the layout's description instead of inheriting it - the home page, search, latest-rules, user and categories were shipping without a description or og:description. It now defaults to siteDescription. - The try/catch around ImageResponse caught nothing. The constructor returns a 200 immediately and renders while the body streams, so a Satori failure landed after the catch had returned. The render is now buffered inside the try, which is what surfaces it. Also drops the custom s-maxage: Next 16 already defaults to must-revalidate, and a long edge cache outlives the webhook's purge. - The root layout no longer passes its canonical down. Spreading pageMetadata gave every page without its own - /preview, not-found, error - a canonical pointing at the home page, which reads as duplicate content. Adds __tests__/lib/pageMetadata.test.ts covering the description and canonical behaviour so both stay locked in. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- __tests__/lib/pageMetadata.test.ts | 41 ++++++++++++++++++++++++++++++ app/api/revalidate/route.ts | 2 +- app/layout.tsx | 6 ++++- lib/og/response.ts | 37 +++++++++++++++++---------- lib/pageMetadata.ts | 8 ++++-- 5 files changed, 77 insertions(+), 17 deletions(-) create mode 100644 __tests__/lib/pageMetadata.test.ts diff --git a/__tests__/lib/pageMetadata.test.ts b/__tests__/lib/pageMetadata.test.ts new file mode 100644 index 000000000..f934a2b36 --- /dev/null +++ b/__tests__/lib/pageMetadata.test.ts @@ -0,0 +1,41 @@ +import { pageMetadata } from "@/lib/pageMetadata"; +import { siteDescription, siteUrl } from "@/site-config"; + +describe("pageMetadata", () => { + // Next's merge iterates the source's own keys and assigns `metadata[key] ?? null`, + // so an explicit `description: undefined` NULLS the layout's rather than inheriting. + it("always emits a description, never undefined", () => { + const meta = pageMetadata({ title: "Search" }); + expect(meta.description).toBe(siteDescription); + expect(meta.openGraph?.description).toBe(siteDescription); + expect(meta.twitter?.description).toBe(siteDescription); + }); + + it("prefers a supplied description", () => { + const meta = pageMetadata({ title: "A rule", description: "Specific." }); + expect(meta.description).toBe("Specific."); + expect(meta.openGraph?.description).toBe("Specific."); + }); + + it("keeps og:title and twitter:title in step with the page title", () => { + const meta = pageMetadata({ title: "Latest Rules | SSW.Rules", path: "latest-rules" }); + expect(meta.openGraph?.title).toBe("Latest Rules | SSW.Rules"); + expect(meta.twitter?.title).toBe("Latest Rules | SSW.Rules"); + }); + + it("builds the canonical from the path, and the site root without one", () => { + expect(pageMetadata({ title: "x", path: "archived" }).alternates?.canonical).toBe(`${siteUrl}/archived`); + expect(pageMetadata({ title: "x" }).alternates?.canonical).toBe(`${siteUrl}/`); + }); + + // The opengraph-image routes supply the card; Next only merges it in when the + // page's own openGraph has no `images` key. + it("never sets openGraph.images", () => { + expect(pageMetadata({ title: "x" }).openGraph).not.toHaveProperty("images"); + }); + + it("only sets robots when asked", () => { + expect(pageMetadata({ title: "x" })).not.toHaveProperty("robots"); + expect(pageMetadata({ title: "x", robots: { index: false } }).robots).toEqual({ index: false }); + }); +}); diff --git a/app/api/revalidate/route.ts b/app/api/revalidate/route.ts index 0bf6a2417..eefcd28fe 100644 --- a/app/api/revalidate/route.ts +++ b/app/api/revalidate/route.ts @@ -85,7 +85,7 @@ export async function POST(req: Request) { } if (shouldRevalidateCategoryTitles) { - revalidateTag("category-rule-data"); + revalidateTag("category-rule-data", { expire: 0 }); // The root card carries the site-wide rule total revalidatePath("/opengraph-image"); } diff --git a/app/layout.tsx b/app/layout.tsx index 4085c482c..17956192e 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -29,8 +29,12 @@ const lato = Lato({ const defaultTitle = `${siteTitle} | ${homepageTitle}`; +// Canonical is dropped on purpose - every page sets its own via pageMetadata, and a +// page without one (e.g. /preview, not-found) should not inherit the home page's. +const { alternates: _pageCanonical, ...siteDefaults } = pageMetadata({ title: defaultTitle, description: siteDescription }); + export const metadata: Metadata = { - ...pageMetadata({ title: defaultTitle, description: siteDescription }), + ...siteDefaults, // Origin only, NOT siteUrl - that ends in /rules and Next joins basePath into the // image path as well, giving /rules/rules/<slug>/opengraph-image and a 404. Dev // hides it by substituting a localhost base. diff --git a/lib/og/response.ts b/lib/og/response.ts index 5839b774b..ca6df4048 100644 --- a/lib/og/response.ts +++ b/lib/og/response.ts @@ -1,26 +1,37 @@ import { ImageResponse } from "next/og"; -import { buildOgCard, OG_SIZE } from "@/lib/og/card"; +import { buildOgCard, OG_CONTENT_TYPE, OG_SIZE } from "@/lib/og/card"; import { loadFonts } from "@/lib/og/images"; import { tagline } from "@/site-config"; +// Matches what ImageResponse sets by default, since returning a plain Response below +// means its headers no longer apply. Deliberately not a long s-maxage: the Tina webhook +// can purge Next's cache but not the CDN's, so anything cached at the edge outlives it. +const CACHE_CONTROL = "public, max-age=0, must-revalidate"; + /** - * ImageResponse defaults to `public, immutable, no-transform, max-age=31536000` - * (next/dist/server/og/image-response.js). The image URL's ?hash is derived from the - * source file, not the rule content, so it never changes when a title or author list - * does - an immutable year would leave the proxy and every scraper holding a stale - * card that the webhook's revalidatePath cannot reach. + * Renders a card, falling back to the generic one if Satori fails. + * + * The buffering is load-bearing. `new ImageResponse(...)` returns a 200 immediately and + * renders while the body streams, so a try/catch around the constructor alone catches + * nothing - awaiting the buffer is what surfaces a render failure. Satori also fetches + * emoji glyphs from a CDN mid-render with no timeout of its own, and rule titles carry + * emoji often enough for that to matter. */ -const CACHE_CONTROL = "public, max-age=0, s-maxage=86400, stale-while-revalidate=604800"; - export async function ogImageResponse(element: React.ReactElement, fallbackTitle?: string) { - const render = async (el: React.ReactElement) => new ImageResponse(el, { ...OG_SIZE, fonts: await loadFonts(), headers: { "cache-control": CACHE_CONTROL } }); + const render = async (el: React.ReactElement) => { + const res = new ImageResponse(el, { ...OG_SIZE, fonts: await loadFonts() }); + return Buffer.from(await res.arrayBuffer()); + }; + let png: Buffer; try { - return await render(element); + png = await render(element); } catch (error) { - // Satori fetches emoji glyphs from a CDN mid-render with no timeout of its own, so - // a blip there would otherwise 500 the route. A plain card beats no card. console.error("[og] render failed, falling back to the generic card:", error); - return render(await buildOgCard({ title: fallbackTitle ?? tagline, isHub: true })); + png = await render(await buildOgCard({ title: fallbackTitle ?? tagline, isHub: true })); } + + return new Response(new Uint8Array(png), { + headers: { "content-type": OG_CONTENT_TYPE, "cache-control": CACHE_CONTROL }, + }); } diff --git a/lib/pageMetadata.ts b/lib/pageMetadata.ts index 90a08d767..22f1eac1b 100644 --- a/lib/pageMetadata.ts +++ b/lib/pageMetadata.ts @@ -1,5 +1,5 @@ import type { Metadata } from "next"; -import { siteTitle, siteUrl, social } from "@/site-config"; +import { siteDescription, siteTitle, siteUrl, social } from "@/site-config"; interface PageMetadataOptions { title: string; @@ -18,8 +18,12 @@ interface PageMetadataOptions { * `openGraph` replaces the layout's wholesale, so siteName/locale/handles are repeated * here rather than inherited. Never sets openGraph.images - the opengraph-image routes * supply the card, and Next only merges it when openGraph has no `images` key. + * + * `description` defaults rather than being left undefined: Next's merge iterates the + * source's own keys and assigns `metadata[key] ?? null`, so passing an explicit + * undefined would null out the layout's description instead of inheriting it. */ -export function pageMetadata({ title, description, path = "", type = "website", robots }: PageMetadataOptions): Metadata { +export function pageMetadata({ title, description = siteDescription, path = "", type = "website", robots }: PageMetadataOptions): Metadata { const url = path ? `${siteUrl}/${path}` : `${siteUrl}/`; return { From 4cc06f403d5ce8fe9d5761ee6e485c0b1aa1396f Mon Sep 17 00:00:00 2001 From: isaaclombardssw <isaaclombard@ssw.com.au> Date: Thu, 6 Aug 2026 10:36:57 +1000 Subject: [PATCH 13/16] fix: drop the vendored fonts and the bold that never rendered @vercel/og bundles only a regular weight, so `fontWeight: 700` has been silently ignored on every version of this card - including the one attached to the PR. Verified by rendering the same text at 400 and 700 and getting byte-identical PNGs. The look everyone preferred is regular weight in the bundled default, so the vendored fonts were buying nothing. Removes lib/og/fonts (2 TTFs + OFL.txt), loadFonts, the fonts option, and the outputFileTracingIncludes that existed only to carry them. That also retires the OFL redistribution obligation and the standalone font-tracing risk. The fontWeight declarations go too rather than staying as no-ops: if a future Next bundled a bold face they would take effect and change the design without anyone touching the card. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- lib/og/card.tsx | 9 ++-- lib/og/fonts/Nunito-Bold.ttf | Bin 125464 -> 0 bytes lib/og/fonts/Nunito-Regular.ttf | Bin 125528 -> 0 bytes lib/og/fonts/OFL.txt | 93 -------------------------------- lib/og/images.ts | 16 ------ lib/og/response.ts | 3 +- next.config.ts | 7 --- 7 files changed, 7 insertions(+), 121 deletions(-) delete mode 100644 lib/og/fonts/Nunito-Bold.ttf delete mode 100644 lib/og/fonts/Nunito-Regular.ttf delete mode 100644 lib/og/fonts/OFL.txt diff --git a/lib/og/card.tsx b/lib/og/card.tsx index c2d2097de..679f89b8f 100644 --- a/lib/og/card.tsx +++ b/lib/og/card.tsx @@ -31,7 +31,7 @@ const ExtraChip = ({ count }: { count: number }) => ( borderRadius: AVATAR, background: SURFACE, fontSize: 24, - fontWeight: 700, + color: SSW_GRAY, }} > @@ -102,7 +102,10 @@ export async function buildOgCard({ title, authors = [], totalRules, isHub = fal justifyContent: "space-between", background: SURFACE, padding: 64, - fontFamily: "Nunito, sans-serif", + // @vercel/og bundles only a regular weight, so fontWeight is deliberately not set + // anywhere on this card - asking for 700 renders identically and would silently + // change the design if a future Next shipped a bold face. + fontFamily: "sans-serif", position: "relative", }} > @@ -134,7 +137,7 @@ export async function buildOgCard({ title, authors = [], totalRules, isHub = fal <div style={{ display: "flex", flexDirection: "column" }}> <div style={{ fontSize: 28, color: SSW_RED, letterSpacing: 2, marginBottom: 24 }}>SSW.RULES</div> - <div style={{ fontSize: isHub ? 72 : 54, fontWeight: 700, color: SSW_BLACK, lineHeight: 1.15, display: "block", lineClamp: 3 }}>{title}</div> + <div style={{ fontSize: isHub ? 72 : 54, color: SSW_BLACK, lineHeight: 1.15, display: "block", lineClamp: 3 }}>{title}</div> </div> <div style={{ display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%" }}> diff --git a/lib/og/fonts/Nunito-Bold.ttf b/lib/og/fonts/Nunito-Bold.ttf deleted file mode 100644 index 063f39a76a495691d71ce52bd1ad65576b804a90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125464 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 U;Q;kK>h>fe5oFUw+TGay4SQ3<WdHyG diff --git a/lib/og/fonts/Nunito-Regular.ttf b/lib/og/fonts/Nunito-Regular.ttf deleted file mode 100644 index 6401d72772b1346b3ed06ba9c9ff5a10bffa1872..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125528 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 diff --git a/lib/og/fonts/OFL.txt b/lib/og/fonts/OFL.txt deleted file mode 100644 index c8210f08c..000000000 --- a/lib/og/fonts/OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2014 The Nunito Project Authors (https://github.com/googlefonts/nunito) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/lib/og/images.ts b/lib/og/images.ts index cc20e2435..c1067af80 100644 --- a/lib/og/images.ts +++ b/lib/og/images.ts @@ -59,19 +59,3 @@ export const loadAvatar = async (author: OgAuthor): Promise<string> => { return loadPlaceholder(); }; - -/** - * Nunito, vendored as TTF because Satori cannot read WOFF2 and next/font's copies are - * build artifacts with unstable paths. Without these the cards render in Satori's - * default sans, which is not the site's typeface. - */ -const loadFont = (file: string) => readFile(path.join(process.cwd(), "lib/og/fonts", file)); - -let fontCache: { name: string; data: Buffer; weight: 400 | 700; style: "normal" }[] | undefined; -export const loadFonts = async () => { - fontCache ??= [ - { name: "Nunito", data: await loadFont("Nunito-Regular.ttf"), weight: 400 as const, style: "normal" as const }, - { name: "Nunito", data: await loadFont("Nunito-Bold.ttf"), weight: 700 as const, style: "normal" as const }, - ]; - return fontCache; -}; diff --git a/lib/og/response.ts b/lib/og/response.ts index ca6df4048..d30db601b 100644 --- a/lib/og/response.ts +++ b/lib/og/response.ts @@ -1,6 +1,5 @@ import { ImageResponse } from "next/og"; import { buildOgCard, OG_CONTENT_TYPE, OG_SIZE } from "@/lib/og/card"; -import { loadFonts } from "@/lib/og/images"; import { tagline } from "@/site-config"; // Matches what ImageResponse sets by default, since returning a plain Response below @@ -19,7 +18,7 @@ const CACHE_CONTROL = "public, max-age=0, must-revalidate"; */ export async function ogImageResponse(element: React.ReactElement, fallbackTitle?: string) { const render = async (el: React.ReactElement) => { - const res = new ImageResponse(el, { ...OG_SIZE, fonts: await loadFonts() }); + const res = new ImageResponse(el, OG_SIZE); return Buffer.from(await res.arrayBuffer()); }; diff --git a/next.config.ts b/next.config.ts index 74d8b9abe..97c5f24b3 100644 --- a/next.config.ts +++ b/next.config.ts @@ -8,13 +8,6 @@ const basePath = normalizedBasePath ? `/${normalizedBasePath}` : ""; const nextConfig: NextConfig = { output: "standalone", // Required for the Docker setup - - // The OG fonts are read with a runtime-built path, which the file tracer cannot infer. - // Without this they would be missing from the standalone bundle and every card 500s. - outputFileTracingIncludes: { - "/opengraph-image": ["./lib/og/fonts/**"], - "/[filename]/opengraph-image": ["./lib/og/fonts/**"], - }, basePath: basePath, assetPrefix: basePath, env: { From 31d41859511b9f111e65f5f3fe365a86ab855b4b Mon Sep 17 00:00:00 2001 From: isaaclombardssw <isaaclombard@ssw.com.au> Date: Thu, 6 Aug 2026 10:51:20 +1000 Subject: [PATCH 14/16] fix: make the OG routes' revalidate a literal so the build passes `export const revalidate = 60 * 60 * 24` fails the production build with "Invalid segment configuration export detected". Next extracts segment config statically from the AST (extractExportedConstValue) and cannot evaluate an expression, so the value is reported unsupported and the build exits. Only `revalidate` is affected - `size`, `contentType` and `alt` are metadata exports, not segment config, so importing them is fine. Every other revalidate in the repo is already a plain literal; these two were the exception. Caught by the pr-deploy run, which got past the TypeScript stage for the first time and reached page-data collection. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- app/[filename]/opengraph-image.tsx | 4 +++- app/opengraph-image.tsx | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/[filename]/opengraph-image.tsx b/app/[filename]/opengraph-image.tsx index 408ba8c07..3b04456c9 100644 --- a/app/[filename]/opengraph-image.tsx +++ b/app/[filename]/opengraph-image.tsx @@ -8,7 +8,9 @@ export const size = OG_SIZE; export const contentType = OG_CONTENT_TYPE; export const alt = "SSW Rules"; -export const revalidate = 60 * 60 * 24; +// Must be a literal - Next statically extracts segment config from the AST and fails +// the build on an expression it cannot evaluate. +export const revalidate = 86400; // 24 hours export default async function OpengraphImage({ params }: { params: Promise<{ filename: string }> }) { const { filename } = await params; diff --git a/app/opengraph-image.tsx b/app/opengraph-image.tsx index d1975f4d1..41e27a217 100644 --- a/app/opengraph-image.tsx +++ b/app/opengraph-image.tsx @@ -7,7 +7,9 @@ export const size = OG_SIZE; export const contentType = OG_CONTENT_TYPE; export const alt = "SSW Rules"; -export const revalidate = 60 * 60 * 24; +// Must be a literal - Next statically extracts segment config from the AST and fails +// the build on an expression it cannot evaluate. +export const revalidate = 86400; // 24 hours // Default card for every page without one of its own - home, search, latest-rules, // archived, user, orphaned. Inherited automatically by Next's metadata resolution. From 62c883b7691b5db44a715cb8b390f38ecd74ad88 Mon Sep 17 00:00:00 2001 From: isaaclombardssw <isaaclombard@ssw.com.au> Date: Thu, 6 Aug 2026 11:18:17 +1000 Subject: [PATCH 15/16] fix: metadataBase must include the /rules basePath after all Reverts the round 1 change. The og:image on the deployed preview came out as https://www.ssw.com.au/reply-done/opengraph-image - no /rules - while the card actually serves from /rules/reply-done/opengraph-image, so every og:image would have 404d in production. Next emits the image path WITHOUT basePath and resolveUrl joins metadataBase.pathname onto it, so the base has to carry /rules. The original code was right. Why it was changed: the analysis behind that round 1 finding was done against Next 15.5.15, which was what node_modules held while package.json and CI were on 16.2.4. Four reviewers independently "confirmed" it, all reading the same stale copy. Only a real deployment settled it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- app/layout.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/layout.tsx b/app/layout.tsx index 17956192e..284343c52 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -9,7 +9,7 @@ import UserClientProvider from "@/components/auth/UserClientProvider"; import AppInsightsProvider from "@/components/providers/AppInsightsProvider"; import { TailwindIndicator } from "@/components/ui/breakpoint-indicator"; import { pageMetadata } from "@/lib/pageMetadata"; -import { homepageTitle, parentSiteUrl, siteDescription, siteTitle } from "@/site-config"; +import { homepageTitle, siteDescription, siteTitle, siteUrl } from "@/site-config"; const fontSans = FontSans({ subsets: ["latin"], @@ -35,10 +35,12 @@ const { alternates: _pageCanonical, ...siteDefaults } = pageMetadata({ title: de export const metadata: Metadata = { ...siteDefaults, - // Origin only, NOT siteUrl - that ends in /rules and Next joins basePath into the - // image path as well, giving /rules/rules/<slug>/opengraph-image and a 404. Dev - // hides it by substituting a localhost base. - metadataBase: new URL(parentSiteUrl), + // Must include the /rules basePath. Next emits the image path WITHOUT basePath + // (e.g. /reply-done/opengraph-image) and resolveUrl joins metadataBase.pathname onto + // it, so an origin-only base drops /rules and the og:image 404s. Verified on a + // pr-deploy slot: with the origin it emitted www.ssw.com.au/reply-done/opengraph-image + // while the card actually lives at /rules/reply-done/opengraph-image. + metadataBase: new URL(siteUrl), }; const jsonLd = [ From ebdcd0c29d87952e5c3e66c9fdbf934c7ed1707b Mon Sep 17 00:00:00 2001 From: isaaclombardssw <isaaclombard@ssw.com.au> Date: Thu, 6 Aug 2026 11:46:05 +1000 Subject: [PATCH 16/16] fix: give every route segment an Open Graph card, not just rules The deployed preview showed og:image on rules and categories only. Home, search, latest-rules, archived, categories-index and user emitted none - despite /rules/opengraph-image itself returning a valid PNG. Next's metadata image files apply to the segment they sit in and are not inherited by nested segments, so app/opengraph-image.tsx was covering the root and nothing else. Rules worked only because their file sits in app/[filename]/ beside the page. Adds a thin opengraph-image.tsx per segment re-exporting a shared lib/og/siteCard. `revalidate` is redeclared as a literal in each rather than re-exported, because segment config is extracted statically from the AST. Caught by the deploy - no local check could see it, since it depends on how Next assembles metadata across segments at build time. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --- app/(home)/categories/opengraph-image.tsx | 4 ++++ app/(home)/opengraph-image.tsx | 4 ++++ app/archived/opengraph-image.tsx | 4 ++++ app/latest-rules/opengraph-image.tsx | 4 ++++ app/opengraph-image.tsx | 18 ++---------------- app/orphaned/opengraph-image.tsx | 4 ++++ app/preview/opengraph-image.tsx | 4 ++++ app/search/opengraph-image.tsx | 4 ++++ app/user/opengraph-image.tsx | 4 ++++ lib/og/siteCard.tsx | 20 ++++++++++++++++++++ 10 files changed, 54 insertions(+), 16 deletions(-) create mode 100644 app/(home)/categories/opengraph-image.tsx create mode 100644 app/(home)/opengraph-image.tsx create mode 100644 app/archived/opengraph-image.tsx create mode 100644 app/latest-rules/opengraph-image.tsx create mode 100644 app/orphaned/opengraph-image.tsx create mode 100644 app/preview/opengraph-image.tsx create mode 100644 app/search/opengraph-image.tsx create mode 100644 app/user/opengraph-image.tsx create mode 100644 lib/og/siteCard.tsx diff --git a/app/(home)/categories/opengraph-image.tsx b/app/(home)/categories/opengraph-image.tsx new file mode 100644 index 000000000..d02a7f402 --- /dev/null +++ b/app/(home)/categories/opengraph-image.tsx @@ -0,0 +1,4 @@ +export { alt, contentType, default, size } from "@/lib/og/siteCard"; + +// Literal, not an expression - Next extracts segment config statically from the AST +export const revalidate = 86400; // 24 hours diff --git a/app/(home)/opengraph-image.tsx b/app/(home)/opengraph-image.tsx new file mode 100644 index 000000000..d02a7f402 --- /dev/null +++ b/app/(home)/opengraph-image.tsx @@ -0,0 +1,4 @@ +export { alt, contentType, default, size } from "@/lib/og/siteCard"; + +// Literal, not an expression - Next extracts segment config statically from the AST +export const revalidate = 86400; // 24 hours diff --git a/app/archived/opengraph-image.tsx b/app/archived/opengraph-image.tsx new file mode 100644 index 000000000..d02a7f402 --- /dev/null +++ b/app/archived/opengraph-image.tsx @@ -0,0 +1,4 @@ +export { alt, contentType, default, size } from "@/lib/og/siteCard"; + +// Literal, not an expression - Next extracts segment config statically from the AST +export const revalidate = 86400; // 24 hours diff --git a/app/latest-rules/opengraph-image.tsx b/app/latest-rules/opengraph-image.tsx new file mode 100644 index 000000000..d02a7f402 --- /dev/null +++ b/app/latest-rules/opengraph-image.tsx @@ -0,0 +1,4 @@ +export { alt, contentType, default, size } from "@/lib/og/siteCard"; + +// Literal, not an expression - Next extracts segment config statically from the AST +export const revalidate = 86400; // 24 hours diff --git a/app/opengraph-image.tsx b/app/opengraph-image.tsx index 41e27a217..d02a7f402 100644 --- a/app/opengraph-image.tsx +++ b/app/opengraph-image.tsx @@ -1,18 +1,4 @@ -import { buildOgCard, OG_CONTENT_TYPE, OG_SIZE } from "@/lib/og/card"; -import { ogImageResponse } from "@/lib/og/response"; -import { fetchRuleCount } from "@/lib/services/rules"; -import { tagline } from "@/site-config"; +export { alt, contentType, default, size } from "@/lib/og/siteCard"; -export const size = OG_SIZE; -export const contentType = OG_CONTENT_TYPE; -export const alt = "SSW Rules"; - -// Must be a literal - Next statically extracts segment config from the AST and fails -// the build on an expression it cannot evaluate. +// Literal, not an expression - Next extracts segment config statically from the AST export const revalidate = 86400; // 24 hours - -// Default card for every page without one of its own - home, search, latest-rules, -// archived, user, orphaned. Inherited automatically by Next's metadata resolution. -export default async function OpengraphImage() { - return ogImageResponse(await buildOgCard({ title: tagline, totalRules: await fetchRuleCount(), isHub: true })); -} diff --git a/app/orphaned/opengraph-image.tsx b/app/orphaned/opengraph-image.tsx new file mode 100644 index 000000000..d02a7f402 --- /dev/null +++ b/app/orphaned/opengraph-image.tsx @@ -0,0 +1,4 @@ +export { alt, contentType, default, size } from "@/lib/og/siteCard"; + +// Literal, not an expression - Next extracts segment config statically from the AST +export const revalidate = 86400; // 24 hours diff --git a/app/preview/opengraph-image.tsx b/app/preview/opengraph-image.tsx new file mode 100644 index 000000000..d02a7f402 --- /dev/null +++ b/app/preview/opengraph-image.tsx @@ -0,0 +1,4 @@ +export { alt, contentType, default, size } from "@/lib/og/siteCard"; + +// Literal, not an expression - Next extracts segment config statically from the AST +export const revalidate = 86400; // 24 hours diff --git a/app/search/opengraph-image.tsx b/app/search/opengraph-image.tsx new file mode 100644 index 000000000..d02a7f402 --- /dev/null +++ b/app/search/opengraph-image.tsx @@ -0,0 +1,4 @@ +export { alt, contentType, default, size } from "@/lib/og/siteCard"; + +// Literal, not an expression - Next extracts segment config statically from the AST +export const revalidate = 86400; // 24 hours diff --git a/app/user/opengraph-image.tsx b/app/user/opengraph-image.tsx new file mode 100644 index 000000000..d02a7f402 --- /dev/null +++ b/app/user/opengraph-image.tsx @@ -0,0 +1,4 @@ +export { alt, contentType, default, size } from "@/lib/og/siteCard"; + +// Literal, not an expression - Next extracts segment config statically from the AST +export const revalidate = 86400; // 24 hours diff --git a/lib/og/siteCard.tsx b/lib/og/siteCard.tsx new file mode 100644 index 000000000..af8c1576f --- /dev/null +++ b/lib/og/siteCard.tsx @@ -0,0 +1,20 @@ +import { buildOgCard, OG_CONTENT_TYPE, OG_SIZE } from "@/lib/og/card"; +import { ogImageResponse } from "@/lib/og/response"; +import { fetchRuleCount } from "@/lib/services/rules"; +import { tagline } from "@/site-config"; + +/** + * The generic card, shared by every segment that does not build its own. + * + * Next's metadata image files apply to the segment they sit in and are NOT inherited + * by nested segments, so a single app/opengraph-image.tsx covers only the root - every + * other route needs its own file re-exporting this one. Verified on a deployed slot: + * with only the root file, every page except rules and categories emitted no og:image. + */ +export const size = OG_SIZE; +export const contentType = OG_CONTENT_TYPE; +export const alt = "SSW Rules"; + +export default async function siteOgImage() { + return ogImageResponse(await buildOgCard({ title: tagline, totalRules: await fetchRuleCount(), isHub: true })); +}