From f20d3762c2d3a5bc61c89aeb16525617020a00d0 Mon Sep 17 00:00:00 2001 From: lolistream <126906125+lolistream@users.noreply.github.com> Date: Tue, 24 Mar 2026 22:29:56 +0300 Subject: [PATCH 1/4] feat: conic-gradient and repeating-conic-gradient --- src/builder/background-image.ts | 19 +- src/builder/gradient/conic.ts | 357 ++++++++++++++++++ src/handler/expand.ts | 2 +- ...nic-gradient-at-top-left-corner-1-snap.png | Bin 0 -> 295 bytes ...c-gradient-checkerboard-pattern-1-snap.png | Bin 0 -> 320 bytes ...-gradient-on-non-square-element-1-snap.png | Bin 0 -> 583 bytes ...t-conic-gradient-smooth-rainbow-1-snap.png | Bin 0 -> 17610 bytes ...gradient-three-way-smooth-blend-1-snap.png | Bin 0 -> 19403 bytes ...adient-via-background-shorthand-1-snap.png | Bin 0 -> 19587 bytes ...conic-gradient-with-at-position-1-snap.png | Bin 0 -> 447 bytes ...t-conic-gradient-with-deg-stops-1-snap.png | Bin 0 -> 320 bytes ...-conic-gradient-with-from-angle-1-snap.png | Bin 0 -> 311 bytes ...with-from-angle-and-at-position-1-snap.png | Bin 0 -> 761 bytes ...dient-with-hard-stops-pie-chart-1-snap.png | Bin 0 -> 317 bytes ...gradient-with-rgba-transparency-1-snap.png | Bin 0 -> 322 bytes ...onic-gradient-with-single-color-1-snap.png | Bin 0 -> 309 bytes ...-conic-gradient-with-turn-units-1-snap.png | Bin 0 -> 311 bytes ...onic-gradient-with-uneven-stops-1-snap.png | Bin 0 -> 1117 bytes ...upport-repeating-conic-gradient-1-snap.png | Bin 0 -> 22501 bytes ...-conic-gradient-with-hard-stops-1-snap.png | Bin 0 -> 4713 bytes test/gradient.test.tsx | 323 ++++++++++++++++ 21 files changed, 699 insertions(+), 2 deletions(-) create mode 100644 src/builder/gradient/conic.ts create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-at-top-left-corner-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-checkerboard-pattern-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-on-non-square-element-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-smooth-rainbow-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-three-way-smooth-blend-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-via-background-shorthand-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-at-position-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-deg-stops-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-from-angle-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-from-angle-and-at-position-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-hard-stops-pie-chart-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-rgba-transparency-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-single-color-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-turn-units-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-uneven-stops-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-repeating-conic-gradient-1-snap.png create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-repeating-conic-gradient-with-hard-stops-1-snap.png diff --git a/src/builder/background-image.ts b/src/builder/background-image.ts index 66ce875d..6d05ecf4 100644 --- a/src/builder/background-image.ts +++ b/src/builder/background-image.ts @@ -4,6 +4,7 @@ import { buildXMLString } from '../utils.js' import { resolveImageData } from '../handler/image.js' import { buildLinearGradient } from './gradient/linear.js' import { buildRadialGradient } from './gradient/radial.js' +import { buildConicGradient } from './gradient/conic.js' import cssColorParse from 'parse-css-color' interface Background { @@ -147,7 +148,9 @@ export default async function backgroundImage( image.startsWith('linear-gradient(') || image.startsWith('repeating-linear-gradient(') || image.startsWith('radial-gradient(') || - image.startsWith('repeating-radial-gradient(') + image.startsWith('repeating-radial-gradient(') || + image.startsWith('conic-gradient(') || + image.startsWith('repeating-conic-gradient(') const dimensions = isKeywordSize && isGradient @@ -195,6 +198,20 @@ export default async function backgroundImage( ) } + if ( + image.startsWith('conic-gradient(') || + image.startsWith('repeating-conic-gradient(') + ) { + return buildConicGradient( + { id, width, height, repeatX, repeatY }, + image, + dimensions, + offsets, + inheritableStyle, + from + ) + } + if (image.startsWith('url(')) { const [src, imageWidth, imageHeight] = await resolveImageData( image.slice(4, -1) diff --git a/src/builder/gradient/conic.ts b/src/builder/gradient/conic.ts new file mode 100644 index 00000000..8a12c8da --- /dev/null +++ b/src/builder/gradient/conic.ts @@ -0,0 +1,357 @@ +import { parseConicGradient, ColorStop } from 'css-gradient-parser' +import { buildXMLString, lengthToNumber, calcDegree } from '../../utils.js' +import { normalizeStops } from './utils.js' +import cssColorParse from 'parse-css-color' + +interface NormalizedStop { + color: string + offset?: number +} + +const SEGMENT_COUNT = 360 + +const VALUE_RE = + /^-?\d+\.?\d*(%|px|em|rem|deg|rad|grad|turn|vw|vh|ch|vmin|vmax)?$/ + +function splitRespectingParens(s: string, sep: RegExp): string[] { + const result: string[] = [] + let depth = 0 + let start = 0 + + for (let i = 0; i <= s.length; i++) { + if (i < s.length) { + if (s[i] === '(') depth++ + else if (s[i] === ')') depth-- + } + + const isSep = i === s.length || (depth === 0 && sep.test(s[i])) + if (isSep) { + const part = s.slice(start, i).trim() + if (part) result.push(part) + start = i + 1 + } + } + return result +} + +function expandTwoPositionStops(input: string): string { + const match = input.match(/^((?:repeating-)?conic-gradient)\((.+)\)$/s) + if (!match) return input + + const [, prefix, content] = match + const segments = splitRespectingParens(content, /,/) + + const expanded: string[] = [] + for (const seg of segments) { + const tokens = splitRespectingParens(seg, /\s+/) + + if (tokens.some((t) => t === 'from' || t === 'at' || t === 'in')) { + expanded.push(seg) + continue + } + + if ( + tokens.length >= 3 && + VALUE_RE.test(tokens[tokens.length - 1]) && + VALUE_RE.test(tokens[tokens.length - 2]) + ) { + const color = tokens.slice(0, -2).join(' ') + expanded.push(`${color} ${tokens[tokens.length - 2]}`) + expanded.push(`${color} ${tokens[tokens.length - 1]}`) + } else { + expanded.push(seg) + } + } + + return `${prefix}(${expanded.join(', ')})` +} + +function hslToRgb(h: number, s: number, l: number): [number, number, number] { + s /= 100 + l /= 100 + const c = (1 - Math.abs(2 * l - 1)) * s + const x = c * (1 - Math.abs(((h / 60) % 2) - 1)) + const m = l - c / 2 + let r = 0, + g = 0, + b = 0 + + if (h < 60) { + r = c + g = x + b = 0 + } else if (h < 120) { + r = x + g = c + b = 0 + } else if (h < 180) { + r = 0 + g = c + b = x + } else if (h < 240) { + r = 0 + g = x + b = c + } else if (h < 300) { + r = x + g = 0 + b = c + } else { + r = c + g = 0 + b = x + } + + return [ + Math.round((r + m) * 255), + Math.round((g + m) * 255), + Math.round((b + m) * 255), + ] +} + +function parseToRGBA(color: string): [number, number, number, number] | null { + const parsed = cssColorParse(color) + if (!parsed) return null + + if (parsed.type === 'hsl') { + const [h, s, l] = parsed.values + const [r, g, b] = hslToRgb(h, s, l) + return [r, g, b, parsed.alpha] + } + + return [parsed.values[0], parsed.values[1], parsed.values[2], parsed.alpha] +} + +function formatRGBA(c: [number, number, number, number]): string { + if (c[3] === 1) return `rgb(${c[0]},${c[1]},${c[2]})` + return `rgba(${c[0]},${c[1]},${c[2]},${c[3]})` +} + +function interpolateColor(t: number, stops: NormalizedStop[]): string { + if (stops.length === 0) return 'transparent' + if (stops.length === 1) { + const c = parseToRGBA(stops[0].color) + return c ? formatRGBA(c) : stops[0].color + } + + let i = 0 + if (t <= stops[0].offset) i = 0 + else if (t >= stops[stops.length - 1].offset) i = stops.length - 2 + else { + while (i < stops.length - 1 && stops[i + 1].offset <= t) i++ + } + + if (i >= stops.length - 1) i = stops.length - 2 + + const s1 = stops[i] + const s2 = stops[i + 1] + const c1 = parseToRGBA(s1.color) + const c2 = parseToRGBA(s2.color) + if (!c1 || !c2) return s1.color + + if (s1.offset === s2.offset) return formatRGBA(c2) + + const localT = Math.max( + 0, + Math.min(1, (t - s1.offset) / (s2.offset - s1.offset)) + ) + + const r = Math.round(c1[0] + (c2[0] - c1[0]) * localT) + const g = Math.round(c1[1] + (c2[1] - c1[1]) * localT) + const b = Math.round(c1[2] + (c2[2] - c1[2]) * localT) + const a = c1[3] + (c2[3] - c1[3]) * localT + + if (a === 1) return `rgb(${r},${g},${b})` + return `rgba(${r},${g},${b},${a})` +} + +function resolvePositionPart( + v: string, + dim: number, + fontSize: number, + style: Record +): number { + switch (v) { + case 'left': + case 'top': + return 0 + case 'center': + return dim / 2 + case 'right': + case 'bottom': + return dim + default: + return lengthToNumber(v, fontSize, dim, style, true) ?? dim / 2 + } +} + +function resolvePosition( + position: string, + xDelta: number, + yDelta: number, + fontSize: number, + style: Record +): { cx: number; cy: number } { + if (!position || position === 'center') + return { cx: xDelta / 2, cy: yDelta / 2 } + + const parts = position.trim().split(/\s+/) + + if (parts.length === 1) { + const p = parts[0] + if (p === 'top' || p === 'bottom') + return { + cx: xDelta / 2, + cy: resolvePositionPart(p, yDelta, fontSize, style), + } + return { + cx: resolvePositionPart(p, xDelta, fontSize, style), + cy: yDelta / 2, + } + } + + return { + cx: resolvePositionPart(parts[0], xDelta, fontSize, style), + cy: resolvePositionPart(parts[1], yDelta, fontSize, style), + } +} + +function calcTotalLength(stops: ColorStop[], repeating: boolean): number { + if (!repeating) return 360 + const lastStop = stops.at(-1) + if (!lastStop?.offset) return 360 + if (lastStop.offset.unit === '%') return 360 + const deg = calcDegree(`${lastStop.offset.value}${lastStop.offset.unit}`) + return deg || 360 +} + +export function buildConicGradient( + { + id, + width, + height, + repeatX, + repeatY, + }: { + id: string + width: number + height: number + repeatX: boolean + repeatY: boolean + }, + image: string, + dimensions: number[], + offsets: number[], + inheritableStyle: Record, + from?: 'background' | 'mask' +) { + const parsed = parseConicGradient(expandTwoPositionStops(image)) + const [xDelta, yDelta] = dimensions + const fontSize = inheritableStyle.fontSize as number + + const startAngle = calcDegree(parsed.angle) || 0 + + const { cx, cy } = resolvePosition( + parsed.position, + xDelta, + yDelta, + fontSize, + inheritableStyle as Record + ) + + const totalLength = calcTotalLength(parsed.stops, parsed.repeating) + + const stops = normalizeStops( + totalLength, + parsed.stops, + inheritableStyle as Record, + parsed.repeating, + from + ) + + const radius = Math.max( + Math.sqrt(cx * cx + cy * cy), + Math.sqrt((xDelta - cx) ** 2 + cy ** 2), + Math.sqrt((xDelta - cx) ** 2 + (yDelta - cy) ** 2), + Math.sqrt(cx ** 2 + (yDelta - cy) ** 2) + ) + + const patternId = `satori_conic_pattern_${id}` + const clipId = `satori_conic_clip_${id}` + + const slices: string[] = [] + + const flushSlice = (startIdx: number, endIdx: number, color: string) => { + const a1 = startAngle + (startIdx / SEGMENT_COUNT) * 360 + const a2 = startAngle + (endIdx / SEGMENT_COUNT) * 360 + + if (endIdx - startIdx >= SEGMENT_COUNT) { + slices.push( + buildXMLString('circle', { + cx, + cy, + r: radius, + fill: color, + }) + ) + return + } + + const r1 = ((a1 - 90) * Math.PI) / 180 + const r2 = ((a2 - 90) * Math.PI) / 180 + const x1 = cx + radius * Math.cos(r1) + const y1 = cy + radius * Math.sin(r1) + const x2 = cx + radius * Math.cos(r2) + const y2 = cy + radius * Math.sin(r2) + const largeArc = a2 - a1 > 180 ? 1 : 0 + const d = `M${cx},${cy}L${x1},${y1}A${radius},${radius},0,${largeArc},1,${x2},${y2}Z` + + slices.push(buildXMLString('path', { d, fill: color })) + } + + let prevColor: string | null = null + let mergeStart = 0 + const cycleDeg = parsed.repeating ? totalLength : 360 + + for (let i = 0; i < SEGMENT_COUNT; i++) { + const angleDeg = (i / SEGMENT_COUNT) * 360 + const t = cycleDeg > 0 ? (angleDeg % cycleDeg) / cycleDeg : 0 + const color = interpolateColor(t, stops) + + if (color !== prevColor) { + if (prevColor !== null) { + flushSlice(mergeStart, i, prevColor) + } + mergeStart = i + prevColor = color + } + } + + if (prevColor !== null) { + flushSlice(mergeStart, SEGMENT_COUNT, prevColor) + } + + const defs = buildXMLString( + 'pattern', + { + id: patternId, + x: offsets[0] / width, + y: offsets[1] / height, + width: repeatX ? xDelta / width : '1', + height: repeatY ? yDelta / height : '1', + patternUnits: 'objectBoundingBox', + }, + buildXMLString( + 'clipPath', + { id: clipId }, + buildXMLString('rect', { + x: 0, + y: 0, + width: xDelta, + height: yDelta, + }) + ) + buildXMLString('g', { 'clip-path': `url(#${clipId})` }, slices.join('')) + ) + + return [patternId, defs] +} diff --git a/src/handler/expand.ts b/src/handler/expand.ts index cd3b42a3..9108858c 100644 --- a/src/handler/expand.ts +++ b/src/handler/expand.ts @@ -176,7 +176,7 @@ function handleSpecialCase( if (name === 'background') { value = value.toString().trim() if ( - /^(linear-gradient|radial-gradient|url|repeating-linear-gradient|repeating-radial-gradient)\(/.test( + /^(linear-gradient|radial-gradient|conic-gradient|url|repeating-linear-gradient|repeating-radial-gradient|repeating-conic-gradient)\(/.test( value ) ) { diff --git a/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-at-top-left-corner-1-snap.png b/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-at-top-left-corner-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..70d696a48e3d48d6694aedaa59d5ffb9a80913e2 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^DImt=`Ln`LHy=chDV8Fw&aDDy7 zmA%pjnDTc^OFAXB9O38`6jD}k^XQo%p=dbd1%CRuAD?@zyFDD}a|TaWKbLh*2~7ZV C$5*%j literal 0 HcmV?d00001 diff --git a/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-checkerboard-pattern-1-snap.png b/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-checkerboard-pattern-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..039dd31b3f84f381f955e6b1bfd8cb8072974a73 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^DImb^q zUnrc;9mOv4s`O7~e|qCg%kOnfM>vF(J$e)j>B9IEzlLK|N_f*1dRkhu_k4fV$Fy?+ Qz>s0^boFyt=akR{0F1+B0ssI2 literal 0 HcmV?d00001 diff --git a/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-on-non-square-element-1-snap.png b/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-on-non-square-element-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..39cccb3f328b185f492ea2269365206bd4fcef78 GIT binary patch literal 583 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 literal 0 HcmV?d00001 diff --git a/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-three-way-smooth-blend-1-snap.png b/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-three-way-smooth-blend-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..367dbbed157e36e8dc42474ebf625a694b1c2004 GIT binary patch literal 19403 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 BqwfF! literal 0 HcmV?d00001 diff --git a/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-deg-stops-1-snap.png b/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-deg-stops-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..1e97efc6615709ec675191f49229793716242146 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^DIm&V8C&};90zh zvzz?MtB&{2yql2d(W7YCc0@ubnI4QYyQRfN>1G?)XEhriADnx_R@1SI@dR@~k@fnk;_EvA8e1aFEMs1qWLzo999MfZIz& zTVvikc2({5eZTkloICN8-ltoo{GAj(Pmy=Cis1=`4vD4?#epF>GH?FUa&*}tVVhmb zp_E|n_A6!6t8e8z?Fy!+jumhOP2MBH=a^Lxz_UEjz5M>o{>S2%%+(TNfZW*Me|cZV zzrXqGZ0_xdxGj4pr(gE>Uou~5!Qmu}`lb|K{qL6@=D$f!Ke#U@X46F{Q%;57xO|0?q0D}T$TN5Bfp#BaJ2~s|%+*4N zJEc|5%bbb1Dsk>fbIREpXMP?jc*Q@-^r-Q3>BASfC#7?x>ACQvTQ#M0o{d={ajt~z zdEuARO;|J&GjCrrdlzk8 z>*hRR(xi2+t`jE7*>Bz&z5a2nH%HK=tBq^-R7kxqZ&6T{mAv`k`P_=>VvbrJmH&j6 zG|hOf4`nV|k{u|pWKjf2psN%p2WHwFv8d;Kql%7py# j-1Nft|Ld)$edT_faJg`=>7^6EB+cOI>gTe~DWM4fK~7JS literal 0 HcmV?d00001 diff --git a/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-hard-stops-pie-chart-1-snap.png b/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-hard-stops-pie-chart-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ba489d1d5fc94d838e9dc01b32e0cc6c4a58e5 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^DIm`CcYMKB5 literal 0 HcmV?d00001 diff --git a/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-rgba-transparency-1-snap.png b/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-rgba-transparency-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..f92f1d78d7f3c7b9b38dbc8fbe237f9449c82a20 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^DImFVdQ&MBb@0BE>tq5uE@ literal 0 HcmV?d00001 diff --git a/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-single-color-1-snap.png b/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-single-color-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e7daa328d150faec078e616e73a074a6eb482d GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^DIm`0rLn`LHz33>&V8C&};92|^ x2RHeXR~_%q-?_p-<=6xX=Oms^!(qt~6YV=bce}A^1uz^KJYD@<);T3K0RX8yWV!$V literal 0 HcmV?d00001 diff --git a/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-turn-units-1-snap.png b/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-turn-units-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..b9ce8da1a91825f01f4d8c799ca4e790ab73d393 GIT binary patch literal 311 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 A0{{R3 literal 0 HcmV?d00001 diff --git a/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-repeating-conic-gradient-with-hard-stops-1-snap.png b/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-repeating-conic-gradient-with-hard-stops-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..4d998d8f86c8b81bd8d4b123f62a264199ac564a GIT binary patch literal 4713 zcmV-v5|-_WP)BCyKmaA zZWJ1E+gJXJ;6{k`&2E;NIuXaFVQ{jEvqBxxF_Pu)R1{KV>GyjtXE^uFInO!gd7eQ` z`iZ$d_j2dC&pDrS&hK}A&(qk14exHmrlqKn-S}?ra_nBl!)$h8)xavewTOpVoI``J zdCbPqfg_li{aa!S9_w9)7fQ7;#535?*Eq+vZ013oQfA=z=rLT)qjOjBC7T9#Rhg6# zQs#HW44fD}ikbTRQtk608BftcQwZOqZYfnpP??dNE951t?O%%*7xOTiDl32wBZG$+ z6C&!C@)f3xOu|>4Jj~)TZ0UUg>z45_nOq^?#qQqSSf2G8Vjd2Re2jV7Z3KEIQP zS=@l({$X67-1rX1?<4c?D=BlGcbCl8az5i$j5M!v%2M zZxf!%I>!`z#g3cQ$-^kALJm;$ybRG|9~Sl9gndhSSeg_WB1wp-L&}$!Hq?PHk~5o} z)HGE{Zc2R{`iI`bt;yHyBUOe-79y%j$xVZEHgBmya+8IsX>N`TktIY_m69|4k25`; znV6oY3b_n_U^?AMI%k<>)+Sem$QB~1NNJ_P-@cMRo75@O@Fh2J9nmF&oy^x_`nln} zHF3kKK>mBo{=96OTSkT`B}7z_l9NK-gY7-rv3fZoqzFkpm&mzBm$EWMX(6Jl6s5t3 z@vYBO>RhSi_!J?jMN8GIeuw#2mPvD~$Pkr;h_X_0)@ODMUyF$e$tjn7f*bm~Fq|Ct z4OL}`2Aj(Ns!>)-YMm=3Gl~gG&Dd697c;?C(Q9(4Lx!kDh$tiFHtb=Jza$!DQ}zxq zA*p+sliVv^k+D}2b;%I52@z$aq@=+q<@lJ8lyZB{GHR$(hNxAD$d#f1pHk zq?AjP=H}L`>XsoITd=NY9sZeXX8MK1$d!_kV#X@8MM6?KF6A0*QqGx!2E?2A;Q(84 z?wm&HFLC!ko%e}zrNnOc#yX%#NKB^E+??C8v1`fYc|6v;9$OY^cCr=c&hfJ*+C_6W zdn6_ENg+qdT5RLpxJQCnP^=tZBqUaDF{DMK0E4%|J^|ovsG889xPk!&3f>^~?goOyjmmaJbjHRYAQl%6<^Hj9C3kfOORHi;V zR)>rynNqV4x)mq*HV9i$EX1Hq+}l`rs%S}x!3*k(NzniZrNKqz_>hoLxm}|*CC#lW zLrdZ-xW6NHv&mMZ2{CNI=DrPhx~pt_Ns&@Cazh0|b~<0%DJo1B%|t^L8Hy7O*ux7m zR~EJ+Pl(Vc-iAl^mW?kdQbMAya5Nt(xAqI8cYj~i;H=>J(Nf~At{CZCr z{4&o|jjoVTxjpvuVHp{kal3HmsUpd#uocyX7!+SN;V0cZ=eUjtQ6xn((3b}LGACC^ zC?hLMb8}^Ad14wqm>VaGU@PhqA}++2aIWoAB&D?%YCo56Z{Z5@?OA;1GUUp5qj|1! zaiR#eqFx~ejc)Felglt6DH80a!M-wzE5t3AXf%h?+#DHN@>r0)HZ;qs!d6U-5QE|i z1OKd)G&v;2cb~#7$J;`D<@V5hmsA-_V?*VRI%&+p(Y?OBzHYW)J@*#zGJi;lTjz2s zxV8|tleIbX)vMg^`OwT#S$sug&r%1wuySDR2GvfclRwAfqaR@LoKOL;Dq4P0%KSbl znrU_#>~^Lt#FgbsbKSr9VVA}EwsyFr550{05510iuR4NR&FdQzVxtlTFJ_RPhu`8m zUG~yY2PtJ3pA>u9(KXs-6kCX0F7YjQF&UasIpvO2w3NPvdxv*mH9o{m-R2r?yh2C)vxjWPfg|5NKqR61umbhry38r?)R}iZ7-K zz~4^&F@6db98dS*_DMg(6Wv_82JJZU5+3fqSaF~Vm$VQU#UE4N`6Ha3!oa_^^nq0yDafd;2R~x#>Aih#Gj4+DfXV^M_hhxoW_8B)z=*d zs=(xZV$1In1uuN`dK~;{C3gPLr?~EOe#Gc;_{u-WfBf+p?6`3{j{m=qiH7lF;2yj_ z`XFAOa~s~DvlV|ez_fVME$Bbhfm7(kvJTeV&fbk*F8W_gIdls?IP^H4yJ{tNeRGzq zOIgSjI5ou1K6Ec$o66n!SWy2E3;S5Y@4gQIJ;+S!EbqHd{V9Hozr#PC-iC)J?ZwUA z4E%%7;K{L|&Ru)|op}57gLrk$V(htegZiZ;WHQcCb|bOm&xx@oW&&m{}_Y&!9o7pQf5;_58%~PJF&8DhHzsz zdJ{ezxO@RS8Si7sPzSy|ybuFRney^Gi`C|b;DxfjS&D-8Jcw;%vV`QA-=)W8% z7py=}?{BbTnS?xwt-a4<{jw!^e`pUDa~55YBAAu+Jc4aEAIJ2<4rkeA=nlN|8DrJ- ziyeO^T!d{skQ%`opd6Z*H|;pTT-DMHd7!oTo$+T%+MEpKYyM8zLoeKjFG zL30Et4sePy9W6V88lxNWlR?&~mhw#-whVo5K7RMPW=D`9ib|QNU*paE)cbFKdMP*uk}(cmBAx z&luO3b{VbjnwVl@1`pYgb9@EZxy_iu!?y2=kQC0UW~{o$`fgcR$YhM%eS%fzYsxHd zNkX&?DGSMs12MGpd=J06R->J7$KlFQwly2SztV`~{g5FuBaIM^Sl$n5ex{E8Ha_NT zx{zIkqzKKb_1Ma6uC>%vh1b+vJrsW)$Is`cEN@;R{IHp)myH84lp)=RSGYfDj}tbo z452i4^Z8(`Yy1NmO)-Lv=WC1Om^o^e4kZUlgLybckrbi$vJ!7|zq7b0wl3`W^C-4- zn`^XTyIMlJxE^yEsu%}iG)7hKU^R9b-vsf=P_Vxmt;|Wd-?4=}jg5UzV)NL)-G!Y4 zZt#vt5xisAt1?X4_!2|2*~FiR@ltbEHhAxOZyj+UMh_du8OO%8mYWc6M;lC<%flva zr`tl@b7;hyG}tCZik7`CSUFdEU4Dq)HK*ZLBnNfX(gX+uE4`A*~eBPB&wOWsFZ&IUIaKLf_Shp2pHW4}+AIqGe2dQ#QV2 z3sIb4_QX*zuaj@HNs-aRJqz!dEaTxgOu3zhZTN(QW|P>8M|;;t_7-KO2xWCSWqw1l zkd$&qj1(EXq;YAkq2ZKEY{dT{L3t+r2UBlp^dhe}iv&Qp(~v#5&JKu_{z!GQ>KyNJz@{q+Ekd-BJ`^ zROWB+Fx-+7q%^*raGGo5mfKy5g!szwF6xk!G}xwYDWX;(`7*-yDQxsmg`Q62VUQvr zB2-4P(WckE?-HYKDYXeHBSV`_J$=Z-LSm__hzTi5nQhEdk33AKPARnrDI-I~(p*E) z=FSik(p9jjv{B}hng-j{C8beSNLd*<%LCVUz7`V`!hdJkWqdi_2MdEN`;Xrv#Hd3G zTUuU7SsDDE4lP*ewL$`ZlRFzU%NO>7~DQ2jI?vf%T^;{z7 z8eOVLDJ7(e3{?Z{rw?Nkl}l_=gv81yHe4phJ@uGFSt;2l#2X|916$92DvBrZjW z2$kb~3pogGd#U zvZt{rn+DtDNJ$b>hm11QKUOZWNfnY(MsdkmW<#V(i3+Jh27e~0US$(2x4WbY5wUW- zivoOZoy$jxltLl($S9XW=Kgk$kXYr|N0~PGh)D?w$?cF3N^^^D%ZAA9v>YL2+m?E} zH%5^ZuaL4A>?8E_VGQ5XiACfH;dhx%rD z`I=5jIo?OrG}y)`rA3>{ROAZDNvUmA=gPU=8^e_{CZui|J-knx^30Qu z)FPlwu8^Efr%TbZV`Z?VG$f>M89Z%vnrp)}ldpN?3K3;~NAT}zNrP>Slm-vptyf01 r5tLePcPS&J%uF;?Sph=OMc@Ach{O!;e(D-F00000NkvXXu0mjfGd~|I literal 0 HcmV?d00001 diff --git a/test/gradient.test.tsx b/test/gradient.test.tsx index 82bacc05..235f0914 100644 --- a/test/gradient.test.tsx +++ b/test/gradient.test.tsx @@ -656,4 +656,327 @@ describe('Gradient', () => { ) expect(toImage(svg, 100)).toMatchImageSnapshot() }) + + describe('conic-gradient', () => { + it('should support conic-gradient with hard stops (pie chart)', async () => { + const svg = await satori( +

, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient checkerboard pattern', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient with at position', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support repeating-conic-gradient', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient via background shorthand', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient with from angle', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient with from angle and at position', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient smooth rainbow', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient with single color', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient with rgba transparency', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient with deg stops', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient with turn units', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support repeating-conic-gradient with hard stops', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient at top left corner', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient with uneven stops', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient three-way smooth blend', async () => { + const svg = await satori( +
, + { + width: 100, + height: 100, + fonts, + } + ) + expect(toImage(svg, 100)).toMatchImageSnapshot() + }) + + it('should support conic-gradient on non-square element', async () => { + const svg = await satori( +
, + { + width: 200, + height: 100, + fonts, + } + ) + expect(toImage(svg, 200)).toMatchImageSnapshot() + }) + }) }) From 9d5c02e63475ddfb27a28a71bc64093f77679518 Mon Sep 17 00:00:00 2001 From: lolistream <126906125+lolistream@users.noreply.github.com> Date: Tue, 24 Mar 2026 22:48:19 +0300 Subject: [PATCH 2/4] conic-gradient --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e861a9ea..a88119ff 100644 --- a/README.md +++ b/README.md @@ -232,7 +232,7 @@ Satori uses the same Flexbox [layout engine](https://yogalayout.com) as React Na Background backgroundColorSupported, single value -backgroundImagelinear-gradient, repeating-linear-gradient, radial-gradient, repeating-radial-gradient, url, single value +backgroundImagelinear-gradient, repeating-linear-gradient, radial-gradient, repeating-radial-gradient, conic-gradient, repeating-conic-gradient, url, single value backgroundPositionSupport single value backgroundSizeSupport cover, contain, auto, and two-value sizes i.e. 10px 20%
Example backgroundClipborder-box, text From 31b862e4a584be97e46611a72fd9ef852df75e67 Mon Sep 17 00:00:00 2001 From: lolistream <126906125+lolistream@users.noreply.github.com> Date: Wed, 25 Mar 2026 09:45:01 +0300 Subject: [PATCH 3/4] Update src/builder/gradient/conic.ts Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com> --- src/builder/gradient/conic.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/builder/gradient/conic.ts b/src/builder/gradient/conic.ts index 8a12c8da..1cdd9395 100644 --- a/src/builder/gradient/conic.ts +++ b/src/builder/gradient/conic.ts @@ -210,9 +210,27 @@ function resolvePosition( } } + const yKeywords = new Set(['top', 'bottom']) + const xKeywords = new Set(['left', 'right']) + + let xVal = parts[0] + let yVal = parts[1] + + // CSS position syntax allows keywords in either order. When a y-axis + // keyword (top/bottom) appears first or an x-axis keyword (left/right) + // appears second, swap so that xVal holds the horizontal component and + // yVal holds the vertical component. + if ( + (yKeywords.has(parts[0]) && !yKeywords.has(parts[1])) || + (xKeywords.has(parts[1]) && !xKeywords.has(parts[0])) + ) { + xVal = parts[1] + yVal = parts[0] + } + return { - cx: resolvePositionPart(parts[0], xDelta, fontSize, style), - cy: resolvePositionPart(parts[1], yDelta, fontSize, style), + cx: resolvePositionPart(xVal, xDelta, fontSize, style), + cy: resolvePositionPart(yVal, yDelta, fontSize, style), } } From edc11e7dea225c4de0ce1df1eb9b862b7a22e759 Mon Sep 17 00:00:00 2001 From: lolistream <126906125+lolistream@users.noreply.github.com> Date: Tue, 31 Mar 2026 08:52:36 +0300 Subject: [PATCH 4/4] fix: support hints for conic gradient --- src/builder/gradient/conic.ts | 42 ++++++++++++++++-- ...-gradient-with-transition-hints-1-snap.png | Bin 0 -> 46244 bytes test/gradient.test.tsx | 19 ++++++++ 3 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-transition-hints-1-snap.png diff --git a/src/builder/gradient/conic.ts b/src/builder/gradient/conic.ts index 1cdd9395..e3e8c8e6 100644 --- a/src/builder/gradient/conic.ts +++ b/src/builder/gradient/conic.ts @@ -127,7 +127,11 @@ function formatRGBA(c: [number, number, number, number]): string { return `rgba(${c[0]},${c[1]},${c[2]},${c[3]})` } -function interpolateColor(t: number, stops: NormalizedStop[]): string { +function interpolateColor( + t: number, + stops: NormalizedStop[], + hints?: (number | undefined)[] +): string { if (stops.length === 0) return 'transparent' if (stops.length === 1) { const c = parseToRGBA(stops[0].color) @@ -151,11 +155,24 @@ function interpolateColor(t: number, stops: NormalizedStop[]): string { if (s1.offset === s2.offset) return formatRGBA(c2) - const localT = Math.max( + let localT = Math.max( 0, Math.min(1, (t - s1.offset) / (s2.offset - s1.offset)) ) + if (hints && hints[i] !== undefined) { + const range = s2.offset - s1.offset + const h = (hints[i] - s1.offset) / range + if (h <= 0) { + localT = localT > 0 ? 1 : 0 + } else if (h >= 1) { + localT = localT >= 1 ? 1 : 0 + } else { + const p = Math.log(0.5) / Math.log(h) + localT = Math.pow(localT, p) + } + } + const r = Math.round(c1[0] + (c2[0] - c1[0]) * localT) const g = Math.round(c1[1] + (c2[1] - c1[1]) * localT) const b = Math.round(c1[2] + (c2[2] - c1[2]) * localT) @@ -287,6 +304,25 @@ export function buildConicGradient( from ) + const hints: (number | undefined)[] = [] + const firstHasExplicitOffset = + parsed.stops[0]?.offset && parsed.stops[0].offset.value !== '0' + const idxOff = firstHasExplicitOffset ? 1 : 0 + for (let pi = 0; pi < parsed.stops.length; pi++) { + const hint = (parsed.stops[pi] as any).hint + if (hint) { + const hintDeg = + hint.unit === '%' + ? (Number(hint.value) / 100) * totalLength + : calcDegree(`${hint.value}${hint.unit}`) || 0 + const ni = pi + idxOff + if (ni < stops.length - 1) { + hints[ni] = hintDeg / totalLength + } + } + } + const hasHints = hints.some((h) => h !== undefined) + const radius = Math.max( Math.sqrt(cx * cx + cy * cy), Math.sqrt((xDelta - cx) ** 2 + cy ** 2), @@ -334,7 +370,7 @@ export function buildConicGradient( for (let i = 0; i < SEGMENT_COUNT; i++) { const angleDeg = (i / SEGMENT_COUNT) * 360 const t = cycleDeg > 0 ? (angleDeg % cycleDeg) / cycleDeg : 0 - const color = interpolateColor(t, stops) + const color = interpolateColor(t, stops, hasHints ? hints : undefined) if (color !== prevColor) { if (prevColor !== null) { diff --git a/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-transition-hints-1-snap.png b/test/__image_snapshots__/gradient-test-tsx-test-gradient-test-tsx-gradient-conic-gradient-should-support-conic-gradient-with-transition-hints-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..8e50f9f0660ed266ac630b7c8146325594dfe407 GIT binary patch literal 46244 zcmW(+cRX9~7jEs*8l`B(s$Dg!B(_qiy;`)2DvH*Ky~U`Sjaih~6m8Agd&j6v)m|a? zh!Ba0pYQLFd+&eubKdhl=Q-zj?{lLK^uV`i?$g}3apSh;b9JNZXa9c}6~*ERqcg43?^*Ro{$|w4^^nn@%tS~ld}#q zEH8C39ZB}>ONV!{*(>J_1HNS8+?V&4qaS)XiV25?9ZKS~%SOin+vyUZ&K-WK10O`p zI|eMP10aPdE(3dIC<0bmT;za7OCG&XGVI0*7+l>7lGvk#2}DkMtftiHBHSOV0>5UP zuiA~fv($Xa>W3weC*F`w|2kN~1db1M`Cxez=lvx*myvIh49^fJg+Gqo>%v;hN?BIh z|F>`^GyYMKk=rLu&?sTUKRa`^pKivB+bZc zD#RUgT6Gp*I45_<&1_qEql~CK^=vrEibovwA{6-9aX#=7m%Iv@jhnmQev^d_(=8`P zIk5qyWQtc7M7?6W(8 z0A{!V9W-rsZ-L4Jxz6`O!Xa~>0?pxpy{&4Q_log_IL1!v+By%R`b+B607p>wpL2szdTu*DTsFr+&(>BKk~XY=rN$l)LH2PA3T9)^wTm+ z8J*nQ5i~rjs&Ao7unMrn($l#;GH1NmofznC;CJ%b=Z2TZz_(ER2&N zpz(M8*EI0@C?T7dT>b!o{XnhR4mvB!{tA!)pv@zU^Lm-A;D3ED4;6r`)0n>Ghlg@x zsp~IKdKTA7_Fs5)N&t`K+j=e^EF1bKbj@De7&>2g_VhjAw~=?e+f>zsW}5F#?`+nC zBI&!p_{llF#C>kBnJpg%$D1kdPObyqiJY6)*cZD0oU>7I9*(J1-<%G=sSN7 z?)J?UCxFlTua=14Z)yXk3SfIwTL2gAQYdGqb$vRddb3a%A#xD)y@}JXoQm#Eyur~d zKL9G-Ey%FP;Y`QMWTdH0j5Kr$8N5dRx4?*xDNgKoA7dxuG~ zK@@sUlM@B708F=sire``PSp|YyTP3uPv z!xmnS4IfKHf)eW8U4_#iEs_WPtM)tFIjkhR68C(L3{UdMbV-;9BFcfU!9xStQ3SZv~`la3X#(i^=)D^f{py1f{1IDbEibD$lIiHw7H|_uq z?lLmdkHa45mM%Qzq^6TMp#J3gbz?X2q2K+8Gs#ke_;=?r%@nOuz2zGNFUPBp9x;-e z&4U=oXo6~e_@|Lf+J-h0{s!}a5-v)L;A*9S>%Hh(;fAS9Yto{Li{ZZ^eLc0m=Ya!6B=-HG;b!J>elHo3-NI?J(1u~iSzoT8UONSc`HO8pbt<) zYODZZZ*gYcWP0+G!5I`$D`UB>am6`~my@2)AP|*M>Bb>Vj?8LAttFnnNYl?#WVzwj zP!Xm~y!lyBeV&50rplB>_+S`W*?@yEHVqPZ=|(e;tJOXFwdKuY1<&GOaZI912G`lP z0VVRC0cCR?DqYD3t=AN!rjwNBQcC=%9$N7EkST}pto7tN6#k82clr@8CC7~V84y(D z>TcvZVOP*(3(}Icauk%_g*#PgD=@2@m-g9zh@E_$AxNL1y!nT|Hb9?}Pz`se2dj8vUzC5e{#bX=m54ad~R<~eU`{N(hG&7nikorLwCjB0?YucAd4y=}0#f^>5whw>qkfoA`|Zd1^qm$ZbCm)<)A0{?p{mCteMPo*&tx z$4iOyksEPa$pd!3U6kk$6LN4&s0Hjf^PV6{UPP+>G)jX&mNn0Thps=4gHgZG1&X)D`n9YqAQXD_Gbf2lR~nw&#|_1LG9& zqxyESx?u=xkkqniU~4!*&RVJku1|*ed(a8e3HDzzhVyoS#_l%`yM0U&^l0vSQfo>< z32sU=h9Q2ic7in)WidzloPH@GMNu$9^92MJDFcQ_}E)uTd(TY^CJzC1K!z} zv-Ks2jFD+-l(Qc7UkK)WHyW`-=bXopkmk^~G@V7iSe@3(O}U65auzJti*P(-H7}`u z4Eo@go{JGPD*CVRxFG3Y3w0X0Ca}@^^svYJ=BysDkI$C(IN`FKsJ05lt2r(JdgEOj zKL9T>;v0nvBVa-4-;=es5mMR&LED|~a-NXi?(S3Wad@*uUWL4F4tXw1gs?LZf|JCo zxb7(-KXk2J4hWjM_kh?~i#m_j;GXJlORSE|0ItGd7ToFy{OH)*0K|cAM&RRdZNntMj5oZCSn7+Fgv*l76vXydKm*ZA^S=dTk2X9k*a(_^Xw3I#xV8{!zhr&SOn zWQ~7Z@OVrjnJ+6msORB*fZ=aebk$%gdOQ`4EJy?(jgi2UD zwH;@jkw*?z_)dOl@fI(^egS8ETJP0!FHI~+d7JJlJ6;&M5~y938RsE_ZY6vI*|jua~(h({`N+z=iByJh%N z%&UO59zDp2ru{~Lmp(8oDz$B_u6Q*zq+0$vd(6wf*Ijg)0?}v>K2HfRV;)kcY?!eb zV9I$KJAhJgzx)9jYHSoUuVM$d7R-rGm_{ScQ4Z@t8VZerxZ>TU`klWPyl`Tj3~@u- zU3rY#5+9_}E?%3QYC+PCjQVxqenHB+A&AbQ{d}K~5wd?7_DEh+QA5-8p|UB~P|G{M zjJ7^Cep|B5)G2HYHc>@C;bK5GW|~aBbX^KRX_K4QKJnjRW&s?(DDNN}oz5Cyfs_Yh zR~U{zQK26@m(z!b|M}KB|Z@>j+f-v>+Vs;i#xF9`BOT z6Q2e-xbJj$K2`Nff{GZrVBDM1HLlifN=4J@DJB&Bd9^s^E7mK7u+ybJ3LH;S`^8Kj zNTWm8%0e71jpi$5y*3umod80J)34kH*eW-n)86_j9gJ$_CUO(Lh$wQ+||Ddlq~J7 zqHIR2WJP)eUuA~E`Ifv0d9%>(QT*_U_4yax2_U~2iN)u;n*zl_L$ISPOj5`E*74S< z_6Xnn{(bl`Yh&8Z8s)9=3?}E)FE>_gvCrmsnrQt21O1ik=P4ay(hPyL;2+&7JH{et z4%9@Ir{g1i;nzN~DXDm-sBM+mk;+C>AsQ1-ws^S1L7z~@^c=h@*2q@9jv}5>ZwJI#Ln;hdZGMap!*Ydc8uS|wLfPlc zV?L$wQnD>K?WESC(p>%%UMT{PLMXbNIg}M}g6i3!8Nqdv~q@M7g`Mjpsu8o<@>GGZR}R zQvLE7nUD-!M$V5bW(xzPE7C^R+^^?@&+{-ojxjsWiYTd9%7yU5hjQ;`?=60v!otcA zPXa|9jt{<196<<*&Fa)Om=HjabR=CUWk31#h-JzkIbK?dplPPkk{|cJt7)MrnC$oA zuYI-ZRkQC*wbBzH@Db_*r-o=TPKmVmGBjD?_fSg_gb51FSc$p8$eiq{X(HVy8WsHg zfY-L-bcqQuZ>KPgcNt5*nb%b|b-;pYENW|q40+&(Tc2`akM?O} z?x-tuU#PDhM^~+$EWQ7jmb*T&xMg%!tfa_sXk!x;auuN9^B+rc>#W5+*0*~vtQq=| zF3bjU_#EeRY(D1`wvLrh`a%QqNmgqS#ww23!||Zm!_+2tHa<{%x6Ke{zpS%{P!qt# zPWfg$VWe7$0DAWZ6;WsmMuv4I3IKxch*QuHto)jT_)2lE;RN`b$tg9&SzV-ZoEAk! zzOG9?4)O_q3Nj)3_qda(b?=m~v3=%@m>2<{@?{(JTIu*P>95}Ik0*I50pP{@UKdlC z1Wtr0;OD#|Fw+OH9j*VXaA!i)5qKW9UY@x*=K;gb1FR)AldiIUW`x>eu zKQ=!3W#*qI^BPu{C-qxiT>3s0Y^~F6ETPI(-Cn9ys4aDI)w)yPzhdl7E5>tsLP)E7 z41@8C>6MeZV$;hSa(>tGzLSXF-%uC@UP^~*=EQz|JlmgBz~#~L%y?w#uN};uboJAQ zpxc$Opzq&_UK$s2U#7g{;B{R(Vk^OTO15!EcgpowTgIF)@WELQ&3CEj~Kaw6e2+%*hwW&XFczAd2kSwAjrm4B7eRr#-Fk>-)`IWbK zbgnQf0x?6WpJ&CvATsV{?KE1uKku2lzH`l?F`b2r$$^ia^R2R#LQ&(3^1xmYURkxh zlSf&n5tmvF;mJVccHPcI_=R5(1Vhv;1T?abesRG$ol6_5CH_vW86QC42P{Pb^K?7PG2blfZ#23pC$zA+9S39az> z^f~#?Psi+qs5rE7^^p^aTJxdsQCv7})TTXJdE;&T5impDpb!gM^cn1gKHnp+Iy|Z= z*lSBX&RZT|DrzD|A@~|U(FfOri=mW)?zMAw=B%~j&!0G$lJ$H=6n#t%glT}UsJBvf zVDqY6RV6(mC1nAoBS8}XDIK14Btqcuv3%bP$D%-yX%!H7{VmQ_6LgG(z6#?lUPkQ) zet&i1tzT6$h->oh2XSsMIiOE6X9jh9+^<#hOs9< z#r0tJP!+b{O;(#WW``5xsv=_Gs>32xnj!6w>EdIBmn%@rI6 zo~G!2lzr(uKOnQbS8QU5w`P%=YI|wjXjPYbk+DL-nw{(G7_iAg=*i4hvn$GMT;E_G zXVh}RBVWuodfjI4-b9$mZ7Q6lZ~w7fQo92MTDrpto)oj>L_&?cUl#H3|7 zTZC91Lpxq7OHw$K%Q3-A?(^XJ)ArXYsu?mfXVNfMtSV+48%mP^|pqy~5G{@`ZGuG&gTzt$x%;R1E6DdVY=HRw_Aj2F1n00S%0BR#U7a@Lz*r?&O{K); z&j0cpLY?J7{8(KKw;S0XEkpq}-+pb3n2=s-`2w_f=pjz8-QkO){U4*47#4Z1y?dyAp%4 z$5-pd+luq)ztioQdKP<(7Z|pQ25C?4w#T0Sypg=&o}F!b$f&bib=Q656{utgH@71M zEVsxE91vDdG>=(liadKh1HB*n=n#ms<1=gjJO}=v;r2BQ!-qZ@o^(nj#gNa(r)+#N-nc`Dm=thIOiC>Qv`-kt{wv^oU z3MLy%gNR%(s7-j~enB{#_f4J=YcUu;8%HHyMl0u|@(;D7WeAqx0O+3fvmQ1|gV4mwc2IlNX7PR)O1~3zoxqtjijD|}Q=cDspH5F5@ z0w(i_?ay}OwPy<6a8}VUfW>G4Hi~J*9%RCiBRDc~dwo;R_>`f4&#G(;Jro1TbpJ;G z;Cyx0=T7T7j7d++~CVZU7Z-B9bYfhP_>Z zpKVVlZ0dp$ORsvF@N4`y>ZwS6`*)V6RCC0GIPu#gg9uk}pUY}VYFsg+1MWLv>Bblo zb83(pikX*o1ONUuK|Pi8-23R7pQAeyH+5ZsgZz@E(rSfQw3nkQfa5j3L@sP@fP z-#br@FPdOyXzs_)ox(GtIK|JW5OsI1Psh&7GBk;xrsn5F@sO~XPg zFG#svedSi}mEqCCC}z3-e?gO*thwHaT;{f%gZ+I6_n;0>P2RrmJoztX>m=xm`sJsJ z&nLlYtN15Bx#E%Vz{Q9Rs2L-*5d)q#N1$6e zn1A0k%=LECnIj#SWfFGZtj>L*3j0SxM!&f$E8trWdYHIc!W*?PCCDfpsFMJZU_6CS zerD?oX{4ZGOh)}9*TRjb$VM|LdMB(zdxKg_*CDU*Uu_cGg6j32n^2Q%Gy2g#p{Hz3 z8IxX2eOnHTCKi|k(LCbck@=}$tM;AJVLf2#J$t$-=20lq+YoKd2)b=UySqJH8{PxZ zYf^x(q+H4BZMY=hu*e(~JbM{()_Bm!jC#h*@ZLbBzkoK{7tU`+rhabK^uFE=w>i;S z@kru9RQ6A1N=9bgJq6iXTz0p-Nom8T`vRYSslc*F(k}kXTiorZS_}+cnU8x%D~?Jq zQ&=B2mc8s7tIY+&YJMCv-$hJ<dwYd-9cqZP347#O(UmN*MIkbfo(1v^^Qncg_^Pr zq=uN#nBOJxvp84q179b3c*-dH;v=pR*c3XAWBis#Kf_BN$u)&T?pN=(eLEE-}eFJ zx~qx_A_-Qdhw~IdnBknMQY#9y>7L|HedNVgCVOgh$93c7Cyn&m(>bk&!?PECd1YOf z8GsXG_)d^_F~%U-S6AN1%>%pba#dVa+%JJx@D zoE&3{&j#u3uw4w|`~i7ZQYX5z9Ant$)zl+a4FA#nEtAXTjV-Ii;9dNQ&vH}ZlHY|t z{!6B7VdhL$>{5gG{_Rq{fF)F32IOKfY9&%G*Z^-dwoX0%0+1RWGiLG($t?_vp-5e$@zxuX*Q+Tq12|)573) zv)WTH4f|oypXVzG$`np+=GCnK59#V}`|-%t=`yZ<>D6-Mr3vv%PD|p_<|fSWIOPL+ z(@VdkP-%riwEN;&xKX5lOd>`AY+BN>S(L-N&M|cnEc~3?52B7|%pH$LnsQ#h5!_KI z&VMnE)Yf)+Um^ zm;aof7N@Prc`XkwUp>8v9zkv=p0yjyTL};bDX35nN5_NCR@p5LVARbH3fNNA_6=A3 z+?_XmGerlAkx|-3oW5{y-N;Ma-qSQ=qXo<<(P?Pva&@m*Hz{ zZ58geUoz+0umz3pGMDO;u1NGQA66PEyBM7q$dJ_qLF(??x^835UXPuyv_Z|4YJ`kE0Ks|8+&>$hsC5&n)%%@Lnk_KOZIU zee82f{xdN8=cgY7>IPK567m4zGmLMld*huyw+BRop2fiuDJI#?T4tgwzzDJJ!E-I8 zsVDmHlCqfN^2kww%6%W>4tN%?Bx)k+IIm2;aXk3P$2+#FUQHS#${)bfbX_oRx+}9! zT?Y?BoR=TNxSq^hBosqWuh7jCEMmr>{r!X>XpP60%8jYb+FvErYM!u}@MBoZ$NRed z?GiO|$6pkG1}jOSOtI$k!8U+nn}x&sLxy^~gm^KoS+-wDH|yH_sMFELk;wBaVQ>?2 z9`-yn=#PNpgWD%3DEQeomGl;26?i+KBKQEb`IIQ& zdwHv%ma!=<+Pxa!)&T6|^8J0k|C!}U;_YJ>IE!&hV4%>v+U1CtT_ER4pX;S_i1!0r z?}}=Oo2w^h_xeGn&C+(Pcft;tB3eA$xSfQ}_t|KL-8NjDzmkPuS9?85h?BlLj+_-6 z@Cbas>m1x`%}jFXGZeD zX&1QK&BkKGU9R$3GZ*R6`!~^q42K3r@IzIMM)3P@u8**znSr_q(xYD$zSD4!-EC}n z#gMzrI_+{NQ?rMjv|k8p0NJZKqXJ&qCQWkLv zvu=^U$Gqz^z^F4#Kla695H}FLd|86&q~n8{KjC0k<**VF z{e$Kw-K>>+AyBM0-i?b=RCcaseN+Izzx;$}>=9^^{h~&Ie8PRimoMuchEHEcZeA+VH2H15@sU9 zyv_C=cuG>FF;w(b{yfVsjBeK7yER%61JB%AHXbz`ivlt;9wwZ$_MHp8@V+Tenm^*Q z+nZqct8Pw1v6oc zxAf8zVksU1hpNr%Cr0aFeMh-y*?v~qDO5niM~R91bFV1UcDrq>+n#M+(eDeUVsh+{ zJENVqt8Nn@lN%Tm9J~32urR-XlAMH@rDxb@Z{g8N0AbO7|e@rCQ2&Bj$-4O{x!X^Rg)zPHx@qdhjKS?wyaDf`{xlB6IHF zvpAnFOAP^(F{!HTM&#WAIYT=3a1IvWg)?>eU+dYlUx)vWOa0F2?7EG83f>*kIcRH! z5{mewG76Sx2h*7YK2ECT@wG3a*qjZ!*c9BcDV`>jTuF5>#QjJp?s*uZDy z6=U(BC^luH9tk0O^#jigUwVHXHLh`VLgjZUyMAlU(iRTeg-x}%kwkZ2DQ{%fZ=Z4$ zuj>O|8|Vs*?oljx%fD-kx;pl{4Xm*v`uYC0c)zcR_YZQuB*=1nB1R?Crg{#cqB|se zy=g<={<7pO_gcl@(QoY^W4)`@kq{orMGNrypfE+UPo8GM#O3ug;c!og4XP{Yo$C9D zgI={-+l?&bWv0W3g?F43rz7FHmVzj){BQ80X3DUipW!Sez1-iHlpC3(ZS!|9o;|74 zXD04BkxE-|kR9p6Py(INm>ypMgU83;GUq7m}+t~27CiTpV+t#POQh5)V? zQQ-Un!O4|I!R;D-_HXXPT26a+No3zFWh%OBM*h}eE4ZmtyfcyR2_d5ZI>2@n{94xP zNbaW-0buM=4rup9>Kxt^D;{b|&R*8w?kOl8@V}%`BDNC`no3r%Gvxs!8`0A}BNGjK z%R<}!K||kmOKq4bbzMDxHzP)lYsbl-Pvc^mq3V=!83yCEWq)#yjh}S{MCB3$vY^}| zQwW?)u#_!YHllN zQ`^$M0!a6T$mQdp{qQGYU_Qq`b*^jJ1fI%Z zL|X8=(0c-WnN94gjU+(@|0GyMk;8~!UEg(LU_qeBGjwafZw0^f6Mg!&k|ilnJ^15c z3#Rwgz%r{ss1z6DttTNu!L4psmF9=sVTXD8gL4Tp=ROu(lHYT)o_i-iFRqQ<%SHd% zF)y#|-m3iU`pFSrXZYHOm}OdKKlHrWitBJ$Mpx9*-041ic8++Nppd^ zxOi}ohp0E>P@{j_BVf(?r7|jBwj9Bgt2gR8=hni>Nd8et$*t#uRwY&SY0kue@=Fw7 z@nkfXPfqlbHL@rvYw$hO&3tn^x3$>An79=;#F!E$_QUOc&kaQu_Eq)bYd^xX$82Nd zs@>7XwO*3|O|D9{F&7(P7nUJQ?Q=+_8yC0L;QH^!J##xVAU9$sM&G7j) zj^^R^P=jC9h&>JTZFb;Vt8~ai_cb3LbFM_<*-QEUc0OCZ=f{!X*OS)7l{uZecSb`@ zIn(@CY^G>iWE*;P(>4(-{q(nk5oYHHIEI&EE3|zvFE9}}&Z|QmGr3(`i<_scs+`IZEP0Ypk0M6Mh9UHxKN`BUR1fPHhMpjI|@SE({ z#`>SAHR}Azl=W+U+wrl!vX+fRx5a7-#YKG|0bgr56u!y}CQp4i4f`}8V_lA{+XySF3efp0TT!-db{FwY0|FFy9kk8l2;8J+E8BuM#Q5e6RwV>ggv)bBP3zj?l?nKQ2&tA*p z*XM5ZHm;k7hU+^3t;bdsgAV>k9#P&*nJ{iy7WU|+BHpR={B@qj&V6g;f?ezJpZ_41 zc(2peD(KDqjwq1REWeIUldVwlP-j`#An%HWTaS4ERpkJVrB%shD}L*jADM<+FSE$1 zvOyhK8fwViq;BIAT0^{Vn1J-#%=9HP6Dy9cy_w%0NkEcbnhJZMz%Qe7iSE`N9*RKas6xs`xFF)#s_KWq z7UDX4ovT1xY`nH2uu;`&rI9CI*=_9fwtwKmcGBwg%ihbLty_SRpaZtkuMeBUf^dzY6G%1MiFkKn(3Qf=hmuDj1 zZn0!hRh|!RA3Q)0Mxw1ya+_2M@@V>+T@rygMZP1cUie=N6$WG^zE!=wEbx;{_ApAq zVbEpl!mw1$*wp0G!Dnw$?eb2ma(UuOHnI6kajX7=5n;{bpR8;|{q1b!S0QFqfzT{6 z($yL2;GCzt{7_~fu&7O1Q(Q^xwgCWSLQnW&crQ2hL{4CJr;eo4mg-Zm>??^)`LhV7 z2M38>lj(Y61F=nn7aV@p3xVRzpOROzG+IFMS5~>xedT@KL`iXi)q49VizS_VTSDUG z#as`Qpf(YS-3xBtDBUL&Y5s8*IMQ}iQQg7MoF26ET%f^QqoTmTH2B8=E$k?;!SMUr~#;%@3 zo`vbpiUTt{^7_pF_^@Z$fBrrD!=A9bF9z14mkRcZ96aVbyh#*$`)|6G`~1S@l}B#N z8fh4>Ij~<+_M8OPhvQMYX_B2A6!PBkH5HBbcl!VxCgze%e2hn68m6RkBT7C&x$7t8 z^X-2zL$Bk`X#XqQ$K8-ebloO6iG4a-$~d)1PpjoB?ViC)iL!2o-BxTgU9Ckcgfa&m zGYKu!aC`a<#KGp4vv$GcYP}iebTQ2BBSk*9H4Wa%rB-XF{Cd^w7_$H)*I{OI=OIky{|^rO&sxeglE z7sqzK!>(HG)Rr|=6fkC3U$9>g82{XSeXy^F$S|6wG>!AXKONkj<+a0M$~ktQyJCY9 zCM?i7$P}?S1mOvnh~Nh0+$~Z8mL*z$Czu^MOI>AALF&`J*P@D>%F4FO+BLh43JPqZ z37-1&w}riHr>Gj7^z7=ZCW^B@0X}?-^zk7fQ-dnJo0^AjDI(XTp+;;yNvi6>*BXwG z3x;zai?$9Hz#2c*(PIlN`*(Q5^r^gvQu$f>T{*Lj_C&>(l|^z7sqb&dX`IGk!7VY% zD>r4n{T`qew*J=`t*BPFhI+=-+&!oEd4Yhi70<5-IrI6A=x{JG5}#Wmw@K!7KQH*0 zjmeD&Ur}@Z3ynLoKLY2zxf3|g7{d!v@|)V=rKm<2owue*4p`CN$e+}A-yBnSz>*m& zSTy}SxN@dnS#aVLssMfac%G+F?4>&6_m95aWk^gl()SjJ@_y#KUYLbi0G9sHuh8rr zLKxAzrIr;Ns7lTGv;D0jI>KE6c%Dvv@DbIjbs}kbLQbOYL|ch@ysd8t3mUo2H&}n1 zEu`Fcm3xo!k4;WwN=e)ASNq#(Tpt2TM-qj+nPN?7-P3&4vfU2Ibl*PXG#A+4=es>? zu0VoxC5q+END>CFwNd4o(E*qvO^(fs?USJ{Bx7OYlm0CMGww$PI+w*7J$`u>J*?nL8rsFl@&7#k1ukrB-q ztw77PzQZA+OAWpO3} zmG49gX9w6Ou@Vlf?6Osl9PGsg8P5V9E;>4M&=ErfxE<;hmN{<|Zs_cwm~r z+SLIH!YSXI=Dtz$HFlfTR+7Ztc$1s;?`pGQpOJ6aXB6m4JTNMLpGLdp@uL{;+wrb; zcXiU;b|P;oCTR^r)%!@Y)_u9hd#Op%gf9Rv_UHmR|D%?%W;$IJYHV-44ZM`nHY5N6ZgqO&-$HA$>jJ#5kK_ z%9Rx5+I{Ygrn^mE@L4#+1#wjlQo03lO{=M!t9;xulDc ze*}h5JM?BWMNrk5Fv#6LQyB=@=+tp0^a@ zoQrsIYmf?>eJ<@=!J<{#kOwrcE$*B9$rZj}TQA}k#8l>gfpa=vro^Rx5~8i!6xlHD zC8@c?7RE2|vGNHjpfP1vF=8^FOditsDsln5V(~2DO+~nJSgb0 z$ENa7VdCX2NtkVN-$;lF%QxUsk$68|!id1gcNI!dR%tFD)^!e!ZHdGXcu!r0X!Yvo zDLs0gGBM+XIpw>A47f3xk^XICedz$hAAjlt2ld$tKmXPU@rCkTMOYlD;h1qBohzy8 zD2+}mHV>$Yv9_lCyT-V`%DKxH6Ev5!1lI}4198>nhi~(P;wtbCuPQ0}{YtM8n+Ljb z-ws`f^63Hk1D2vHz!F$+|9f^Wy{|4rph3Yqt9<|OQz1WJURxR?NrOvm1OewW_jbk+X z+6+)z3B&*r=;JxZ-)~oBfNK$EuNt5JC2i{AL-@8o4ahJ)K|TFkMf_ChtA4>T=XHA6 z5C<*lW{2;~Tz_@T9}YlY89=LSdg5~e3U}8=4F}GjXPN0-ncaAeJ8|AFQo;LtS!Kye zor69<<9`14a|$u2`YKfJc%vkZ!!2Vosu1d6^U7YT0Hz=X2+u$*YcH!$1>r5x#v2ti zrJ-Htww|SL(U6Wc9%vMbWaz@d)du$f6jpQ|#MoS6Gk)!Mnwx&RI^}zKT*g%s|F+Ze zz)`usrAp2Q=JJzveP>hnP~wxG)}h@tM3JPBP2=D7~j%xWDsV#Ovg5oNg0$ z@sbE{nL3dk@f&`3O7?9;e*gHKwT^zIl0mpInO80d%wL2S95`P#z#v*8HQWs;L`Hx3 zAylk(GX3lnzpQ$t=ub2!5%$Di><~?VY>mUWkv>Cqie>u!?XEhb$Luk~{6)f92afi? zbzF@$14wd`js@HrmYqwE3Et6*-Zx{6HsN$Q(y^<+MsfFymK$T01Wx3 zTN99U4@gb7O`;EId?&>ra$hw`i8r2C20DVIJs`LaK~X2EGDwJJoe{CLE{&0U3(9?; zSaT)_*l#ad&Ur7}ObLRK`nm=fpOa@20?^TMP<8N+xf^5^^}G6ZZN>8(&cVtXo1^Z8 zEAiCjz8B#=>#ti5XnViO5mMv91H&<5wh8xCZy_!67frko?pG4^OgFpEBKrbVzhJk| zUYcD0;tAtjvfokC8i*ZIS$8ynO+J-NY5xiein$S^AP4hFdZyaM^ys{;SWOrlR89Nu z80ficr8>W8VKQgAa>~`(1PXHNpsL0sD5c$B{64Qqq$MFcW~Jc$WI*~xd(MJH$SvMT zxxe;j$IpWPUx*@Nmj#0-Y|xSICkJF~aAYh!?p+7xoH$=31>xEH^Frrowait11(nSO zQ>#7?n81@C?=K^(+lw$_i!AsUNkyae^BSez{G81xEhUt+J-#`un+FIVZER8&yre|Z zrV?B|#S>XH+_o)wW06>~e($-Nuaza%%sw?W0%}vn;Z@r(w`%offs&l_s;7f+B&Hxj)zy zp7l=g1QX?T+r~Ey=EWgU;J|iQI{o%x`DST`6j5z1P%lTnrdeOvPPCRWTX2W#!-ekq z$J>qgii~O|r2AeqcVJZTit&z7smFq**!*d4Ax`{sbuX}D$-K}kHkneCrYP&p%A2gZ z193+SU-M6Kl*oPBbWAMy^F1mPrN*2OfsdYW^%@>N-n(6sM^bT1DwP8BcHqrQIw-)($v%R`gUIkw|e9HEj`KQ}Rk8?f(K1>kMmCsWaUykDqa)VV61YLW5T*|&pCLc=AjN2k!-i;tx z5GI_$uBy%vrtx4Q#k~e^4HD6?2w6eHA4kK5exB*?x;Au8M=HDtZ{|9DGrNGJ+2!;d zPv^>Aq!A!!0z|6F@+HNCU|e0GoN5&P9ikaPzR1O{#_Twk%!y`8E!$nC%#~xcz_GaL zkK>2$MV(rH;Zp)32?X_mpajbu(vPtO&hZqQe4!~nmfV-Sf&b%Zs~kYj5Ac4Er}T+d zaCLx$^G5`GE{x#>rNF?Ke9x-#OSIJy?p)BXZ)zPgSzsR zP5OZeh)EpDG)Z&Yw=q4Cm90PN9b40To-yGhP>$z57%&yahl7gU-K zworp+@Xh1f06qa0k7*r|Qd%H^$pm%EoF_%PzN_BTJ;uy=X2qYXU$W0hDt)avIHNb| z2;YCN-`^(UzvIx3Lirz9zHep({NxFUcr)F^A8Sj0Ntte?zZqvs@lSsoF#RL>LlgV9 z>V)r>ij;kk`}bwv$NWt=I$3V&9*2l@eMF%CJ(=Iq=reZuL>s!M6SVt2TGSv>_nbH= z_FHPNNd!a*kW1+_S!FE*{GbF#1i=^h?}%iH2MpP_9W^G>dT*r;I*l#w{l=0Qujn)^pI(SMx0zIqn#+jM}JIdcd^K8C(6YYB< zKH|6!rT-gkmgXZgR)6>wVz* z{-p)Y-GkGIqfR((`Ay4m-&jgdNdGJgE}t2hpBVE)<4bm&BeK+Wff6qv*U_)wOc1^x z@5n{3ps%zdJAI_?07JRFTLv7l%0g#x%Kd!>tqYcSv?GgzlvcjJki}nV0dxyy`d<1W zddTjee?IdUe&@e34k$;exOneeW_}@1a7kGM9PbDLbuQg?z$WbgX@~{-VTx5@8^y^Z zFcM=o_bGlz-z~oJB|O0BbQwIpZ9$JY9nX^EmAZ!+4PP;yx`l#cN1D_1Or0`k%E`** zLdnqb_wav;mz*`8Om{C6+ubAQJVXCz!r?gHpG)CjDXq}I=KLp|_PzNPMIc8nn@etiCWB2UykQPy|- z%Ix}-keU0=b(_K|k)b;h87Y0Ny?lN|huHDoL=zOv*K}o{Yz%gV=mQ<=7x+K4o5X$O z13~k(AaJY-{z%h>H0<)3w&rd(P|%*}=YqXL7tWk7aFl%R#+aG|W%El)ztH7{^6TXqnu#h>Ut(ZQf8(>eaGJoTHO zq#c6e8w5i&A1NL9?1H13*c0hPtBP?|NA5uODm(i!!f?Qx%)KBBf+4~{O)*e7$+`4x zM)|hsjFR(02d6pJokMwMTvOwEjQ3ISp$QK6m7HSCHDKZ$Le8I)^^vj_J^kG#rz0!> z7bz~fO<9SfEqUSm&EL{noZa6trepFouK`kdW2Mi3OW{p2o{@i@4LHO4J-qHQ%}V)U zvdq)r(ANP8e}~gsxj2ba2GNLu8o~&Zh6299y7I9+=nLS%o&2WV;KdFXhvO@nN|Ha?=8~Xc`fnp1v8w3qI7(#uVD^pdfLmwCnU@}m4pl%^K%tmV^{}SI$ zAFAdYo)I=O@Sk%A;#)&>U=U9A2=8%@)h4fRn*6sq-L%u+AUM)Qd3~x%)6hj-PGM-1 zYSPLsQUYa0jtQ>2hh1Yqw#hL@t1G9uNXhCSyV0mkIf_|n%aJYmpW*jdmqsR*oO!~e z?k%hN2Z#sqkF!9PJ`zlClJm#p{Rb4h?AsU<3KnZ2g9fy5)OF9g*(8QK_6|GY{4d%XM4XYUi@lFKIeo8W&$&!3S$ zjdmOwJBP}SJ$4I)_k5JoO!~}Z{)bYJUDHayd@0DkSLU?MF{h2bqWlrr2ip8S{bO^s zZaf~&%~9iM#Ua1JQ-UK241MWWjj>!2BySV)t@>kSPRFrR{+7%~ctf{`>WY2nJl7g6 z2hBSiL<^L@B7NI#Vi8D3$?Kbz7igWfgAA?{4a_{}905SN-gofg~ zyFm*)OHT4seTl#!)KPB#quL(YS7*s5`kCSVM4=l<1wA5YjNnYE2l))N_4u|0Ct5IK z?YC*>2zTdR(irs zR^1`=6grypyqv6?KjJX|k@ib8O^bugw0WxVSEQ*^c57>F?2W8PgqIJj@eEJmV|0+zp~{Bqnfwk91lb{ONBrqUM2 zC{UV%$Ri)3vsuZ%pNcMtE%HT9P3W4?1#okdJpGh%@Y?AFLdEvQ9*+giPUBN#v={}; zD+LIHaQgih?g9?0J_6^E6CR+9P};M4IKARt;5o+ zdCs{7$NI!Q;J!BgHMK4qv*VVw-;)vY{PXCSvug96l0`J#YFymO31^MtjRkF)xat_e&XvCgLf9Rh{%RNQ9$|+yaS0IEwxg4bo_N0~rd7;fF zcw(nPU8qBZ#<7UuN|yRbOE_0VH_OBTrT3W;V>R7RHLDv zOUSa4dgmb@^#aq;qe&M`^ zU*t&fH^b~;h4&qwOENxEcOY*yFJt?VjSq583$pN}I4<2YFP?Dau-A9WZ#h!kB=0?K zzs)>GU&q=kwK++~t{tC>9djHc!J{r73Vd5=n;?l@M1T2+E-}uyXMM|7$MPvTe$w^h zS{I96q~=wSoN@5m*q)+) z-=u5@Sr>=avTftc-=x2j>IHh51_2_!#4F+G^7=fH|2t?6XEc7hMM^8QFU$bhcC6go zYf_2;xYX}$x@oVS@ky^MzKIXkp_AP!&r>E(-}IRgJxvL3{6=8}tN@q@61=L)IM3zd zXTiQjiJ&}Fr4Mc6-jgRm7rg0X{VnB7J&qNbWfw_y6T*(jdLaE+iZ7kz(6MQMGP?fQ ziaVM)5JdDgcS(J|OZS+Y1wW9FMFTyhL;A68iUsJx9G{X2C2*iQ@s(ub)X^WmP;!^maIr5quK~h=DESq((z%LVaAW0%aY} z68R-V7URm#(a&V%!8N!AGF}*tR4cS!|df$t*ds;MiUTl_}2Pvoy6lyReJ-Z zq+XhtBl@Zf=ctc+Pw>UFdvh0c(KbDm5547^_q1IpKg0iwvu2Iow3~ctS5dE~%D*QS zIBeSFYjioKK%Ci2P^cRRN%%^6p=dny$5RgFE{x}WM?D%wu=GbRqS8!$DxE8xXd_5c z)IW0Uk~DYpWsGG$m->1O?KstOnnz^Dn4)f3pp0JP}}J!931?`FH-tgUG1b3zKJcUth?DqDANk9G*~t z(J6d2bUaJJhnWFC)9?N^WbV6!2k0Ycn6ewt78rEytF+50FXRsy!|v4X3P8ppF&Z@< zOKWgs?YbR;Gsrt`*ikCa6VwBA2JYT@}oZ%bL7NfO8=ZJ z^tO9)dhOeLNnUbFMH7dPM-sb{fE5(v&OI{b1nJMKs{!G>j>lvcIl&uxNB)}C@sNGK z&Ov8$^y}ojgXJwj6|!S&@xM->Zi?|FV|Zc=#>nB~iCEZz9XM_YiY`c!W0>H&uiU** zG=JtKF7LfAaR+h48yvaRg&p)~S0C>tY$R~%B|d(B>^pjd9R!Cvjt<%Jvpfopvg5_r z<$E7mk|$dhvd8MR=>uiM8~2n50!Kvkhom2%Bh$|%o{aYHQgELCQtTjmph0YNqo1T5 zLI*2@z0mkn@r59ZGo{01XUX!~98&xs?M0cOolAIt@^i|c$?n1(!(=`z#svnog0JuL zff4{n1@xv%aqP#^QkTc?IvBIk74fq}b?!D_R%d)((jhSLX!pn_UiQ9Kig?C0L3Ei* z&oo-7w>n2alvVbpxHz8OB&}m-4W6Z@-{23vnH_dY?kuNtTi+*m7qL<+YuC^x-HtqG zWLFOcQhtcvxm^2jn#2*^seHauPSU6Piu6;(dl4jL#62jU-Uu9JmvHjFigzT1er1p( zdc;Cf94eenKk+^!j#?#H&ZP55)d$RxNA|I67P|4`6BORJ=(b+s?PPXT$1d$u$NeNt zQ%dZeE|6keEBal~NB)I@qB_-kNz)uCDd$>FZ8>&}`cNe7A&GIAzjjv{2Z)s$acQDH z+z1$h^6Hy!G&)s$A#}p=(qRf`ukGF<_gHxcxNz>rvr0;}Y>O%()0M@7K zjWr!5PNaRvqJP{K=%tKzu52Y+m+>gaBylV&W3)}_Qu!klpO*khd5OjmTpV-0&`yAJ z4DSlGvBRWQit{_$Wqq)-<5xQJc}UI)-dTcdC($NW{)&3kx~JXu#&d>V#xCUth2Il0 zHf19+?>H7dqW>{^*sKo{4*oX!fhKe+yTWbvl0^6KNI6Pq+PAw+!BQVb%8!g)((gX8 zK-^=exWwNwF2RImeDt>Ku(MSiPh9R#f{yn>-=`_;@sdDMd|&xk3D^_?L#-!^% z-9aen+5hfO(hh-V$)e=t6U7$;ugNUD+O0TE8JwEEpy)h!H7JS=k?kn@Wn2!m2em$o zuih?VaPg-0HV3t`p|zk#nS5E*c9-hNWulP^pE5nlghW0Jc1zX{KyEo^l^syN)ITwK z{qDgX7LGyhG%3Gll@#cXS0f9UID{A4#pwz@f8&a_$S_iK(E?VhD_6bX5;i$NfzD3CF6zR590A%zXsQ$L=NCti3FZK6)O< z%l*>K5=`-vAIABY|JvX9tO~vou_a+n-N3HKATZ<|8P@l;>pR{C16rA|Q$%r$ z(w?(h6_u{S%-E+XP=kXL$(lHnFiwGfVseWfG58W3Cdg-alrrHPJ+xUW7rUsN%b&^0 z=aScU!O(U0AWOv)EBiszqhCYUM}w^Irt7=$4P*-86VGtzRMSpCNXWC5F&r{Ji($Z%E8NqiKZMd6! zCNoW(*Re}B`pU60#?!9QW3G-}1c3Ir$inh z!N4dF)Ysq`Ao2a}71d5cW~e8AGqs z{50796z#B`vkU&JBp*A`MSGFw~t)>ryQXKvPCbYG))m43TSQM zTXbnOF&277pqVpvX!FMYS*{oP8Z;>#YI{KTfg?H2Nf+8(4UarGrUU?S$e&Sdu@`b=Ij>El>YnZaC)O}^c# z4!Q&0n9NGcX~rni1eu z#=4=c=us~5^8K+(y(3b2;TXE=D_zLfzRiL9Lv0R})a48LQ~7{$@b+c%G~n;^@`VscSs>w^rho|-C|6#<1JQ>z&gNx+J5Ya4hOxa!Mod~dl6}|50J4Bw zpQ6q4)^3zJ1O3Y2dp^jVTT=1??dFWsw^h&CQ_+D8b?Z`xFZw=_QNRAqSYkpH1$+~~ zytF z4p2_R@?*T83BZr^caZD=Vu{lsU3-n)uwf z1h?&i&L(AXn5497a!gPOA}jq+=MpewQstk?-&PmSzU1sDCVgSj9mO2KQu7VL&(u$| zP6PUxrQ|78O7G-&Go4Icajpom^0@cY(!bq6IUI%#={xCDyb+k3X??0JKnmi=M^b#~ z8tJ#%7M*kENHJERmtC_s@?%ATk?)tszwpu^NuIK`FBAir4#pZf%oWerX-2oHv7wiH zNXQ8EkAvkSI6Ng|yV{Okj*09fAN6<>-fCxk&U}A@CuA-0y@&lk{>KIiR*TGEwu8vN z6oi}DTnAAC<;55900qt&ihft@3gp|j%*l9IULmr)k1yGFK~*J5E#zI;LQOtp1e|aOo(8x9mh_R9Wly8 zT6ue!>{Ta4oAO}cE%e)p+67PSASOKQAXOiHmw2Y~=VTot+~YLycd4!mkm%zvdfhd$ zxj}QRnzMBrv+m)GfYG)*i6Xi=kgnvUc9Dr^|4sZjyzkH_t#7L@^ThEvT)Nax^dGB# z9G~dm=o5}#R{#3Q8*lV|WsvxKK*q=VjXJ}qmv^!j>QB`zQIE{8OFFLTXM-iu5i0iJ zi=ay3$Y0|-QSLACkvDF;3>y}n=0dYm`J}PFTHmeu-PgX>72a{6_S_>X$e)qrLb79tge{T*3nsxJLnoD@NUqdKrJDuP{I@r{-ak($Qq=1z^BH=~@TM zi0zY@nrEy#vZb%gNaXbGqbv#3dd}E6KmhN`xABj64-UDI5bb!yPE8zXI41sZ%wuv3 z^iQ4u3*>Bv072nfQ83wMq)UQMbQVq#^h@-q$y^%8341L~`cqYo4ji|YiB9);Ok0B1 z9YVhx0`1f|7Rq3x;Q&!?)~9GopZCPZEoqG7iLWoc7x_+cno{C4-b3W{u+cZ2%1cE2 zu{g$`D2=0%BUiC+I9$w8{OfF7Xeepo6Dj@FXw_cKz(?0Ldn@ z+$&NTfj%6-qdbj5_zU1n{(?(5xt!kCYXX(7M%jJBsKww>UU8~#rEk-#90yQ)7+i4* zS@{Tv^0PE1)WDl`3%SYx^~Jel3u?LUM8+A0c_Mq@qb|?!o~c->+w30reDIZHSd^V2 zqmR6@TO4S&#B0(}a-PwBn!qk_POszOFUWS3>hSol4iF@5jVl5q2^j67o@}~Dpmaf5 zCYGbbIM&)sLPu3a&v(gQ$saf>MZ53O6bt=5887Ghh2vhHG#^aZPC4WS|EK6lpL06X zm7T&_*@B)sLE?^cKds}5m&d{gR(MCHYClq3#3h0vdrugVduWLxAgUTGT`)@#ej3Iy8L?os&iwb(uIk)bAzSA}jzaNI$u za>}^t1fZML=3!Sxm~pmgd9F+#JtfT zy*ODqEh$~e@*XQc=Ku|TrsOTiJJn{DQ&~9373g-5?8wDI$u4@t@yRY9&FBGS&WSmb zb-`zIM=Nd2M{(qRL4uECcR^xalm$cCc>-mu$^zc~F!Z8trav7@0BO_lLgu{naj-(a zo8S|??J-UsyY4#hNK zAo*k20=%5C9&G~nSH>4kQuq<bYpRNqUs>vxZU^2*0f=4p$1q^CZfEXgyn zF`VNnvgA!p>4VYpcZty8QC7!xNkEl$)z&2s+F7Ls0TOf%1Z3~1lN5W`V^te48pU16 zj)FIb9&F+sf>%{>nn+j594jx7pOJMN?L9QMaO~mC^gF})*rQ)NQ2GL2l#33X6X7Gf z@kFndL6G2Y(nU)B3f%_@{)glqDTn-HRR!quSogt!Bsj{W;9L6JK5}6*FA?nelV3_h zH+}cK5qKTF$fx7orrIk4quXf$OZ9Ilcls!^MbjL}r~Fs`+TZvm8ecT+fH1Ep+m~Mi zyc~+EoJ4UiDi4kq@Dw-_Oj3G?^+c(_q+12o&i9d)fsa7;LhpsnP@J$o9z+v zFIOD3Kzk0?Pj2wUgxB^tu|svJw6%L^=NOr8TWyaOR*rnP8pkWN=tCMSeVL2^2kvB+ zc0Z^qPpA^0(P4d}KWQC%$%A$$3bQUi@Gj8e=d6eb=Z_#P!BP4nyG?7Ev#yNzfL+g} z-;w)`b{vtMW__ydN}B_pmDS|SypH2r`QJl$kCL8fbD+GmY9DbvJ3#cs`4G*Ae)Q*& zu*LDhspAxxlE!NxquYI@N&`U=L2~M7w`ioL9J;j7-<-@d*(Lptq6hjul$=QMmg7}t z)0B-VzQ_pM#_C^olbSC-t`hm-B|iLXbL^5QcM}-;zjXxEqHF>j-YVC#RC3wR)S zUvdc#P+(4h6WN!^W7POLp;oy-{N6bEzff@GJkx%f25`1M@9G2FJj!%kpUDD7?*VdwUEm%=mUkb~PQ7B;1x#dVQ&w^05X2eLK>aL1@Z*~%&|Y8&knTYM$eaB5 zpWa6hM6eVaBBhzKqHwf2YOBAZ1AW{>JiVew`;xL8Q|2j$UcnbXq}bfn?${@((_eFt zlK}M2Mg3uv+1s1t=8L8&0dSH)`?*KIcZ}&y6LVRDpm!{J0g>}(beX0=NBfaMLXXft zj!I9mOFMbTp`Y@UE_M~UuHOny-#-qvYvlVFLS6*%5_iy({G9L;N2U3x z!G~}ABA-ftsNjT^3GF3_RqzFu@PGh%wa2%dEiqP#A8ls%fSrWG_t8!nYtATVs3YW< z@Tdp6KbGGF$JV=!03Ni;AJG0h4GgW1mGUjwqJuK0ZFS$>Jyx6pFAedN9S-G%U_RE) z1c#&QkAq?l%-QQq8f~pg^({8OA|Fj(5g;4j@fCN$ae$z)ec6F@$-&5$Kg%VJfQf$T zNe?!R0Ck*b4)Aaomgab9Un`%GwP<${bwsE1P_LKL+xU)rp5Sq`s=7OBol6{z>U;>o zdDGV6(_iyxb^Ia|jYGdmkdQ;4DyJaM{^c@%OOSAQ@{0TtIMHu+j2dE@Q#w-LK1|5L z8*@3_O@^2F#O}slk6oD!ke1pMJxWk`6ntuzzad(ijpt9ga<_5Jq}92>TE9p z$D8{qN)-qW19&8NoKqe-bq9Kk=^WTVPUPe>XEyl*80?5&IgC;I@F}Q9-Hc1Q%9P^Y z+C5BYcR7zhtLOVtpE;r=#=X+6qXkdxi+;9wX#A^s;?t%~QV(t7EB*z}l}mdz34K64 zCyz2)pD5rdeQ@^T7{OcQa*%V}5xne>pR>=K=w+tA8UWRg34qDrDa*u{jWg#!fV3V+29b1yuA3dY*-5^1qD@K4X$nNVQb_2n<4nLUF z@eIvl+43m3j-_4o(L1<<>^K%*tzSDtuVaATgXSpu2@jq!_9rgN`U+q zjm!%{$ys{Y(aWyE7*>nXK=(r+2#yDM%K!?(*&4HwtvY*N00tP1p*QmBW%sEQ#Aw=& zFY%Q&cvK9GI5)v(vIS%cj%vt&`rZLd+LCbvZCy1>zQF1#02q26)G)BV$cc6qlGGfi zFOc_Lk$tpn(~7Qshlb!^K`FPWw2h3ejxFdGfmQ>OZuOYe{pd+JczGA$!7u&ke1JAX znUFU+W=7Q#g>?dSLdyX7;lQw__jH7q_Fe2w}X^AtN zvziWqq&WWiOm>lj&VJI5@%D42KY_3obTLPz&iqX7bNrCE@5rT%e%j!X*RJ193cm)y zA9^pP(SIOzt?R?T0DQ;tx)u}d*{=lcUBc7s>Aga;@)GwIXx z3c&057w4 z*a13c2K{Wxb`M{d3^q+I$XMz7BKp?WSn>z-I#8u90xNcv%?>0#H!-ce-Q!h2JKvFR zP-qDL6=>)3SSQVVE+v7d)=`Z4S{6GMR}j zq%-Ad0)eqIZugF`QT%{ol#>g4e@8-R18>>UZ{Y78uyvz|Ld~lnuPBlpADc>R3ew*x@VsdraGcZs9Ni28=!hZAH;Z`z0NZjJK30 zCKU0xGUv=z+$yV;Q+Z4rT~B4PTA@?AW-RZRV3Sd3R{w5?*&tKYmp*a{404v_R6h2| z@fY567{8fDnT+V;T$6zgrJZ1nz@TeuL%K%YLp+z#X~HWH9H+=~L;`u2)c8XW(Qi4n zUE=HP7k^2_)3W$u^e=Ndy2L{{cJ%?mAS()ps%Y?H zP-IR}@P*(P!+k^K-p^rx0WzaBLFi48D}HpLkVLWZO-2ej#(ZiBqo)4xeC zMk_F;8ADG~f!(0|K6sgg0?uH^XudZAXWDWy`sTEf9_VwX&nY^Y>DZ@5{Rv)~ME7|( zwK8&*t6i(B9lK6afqZ=FGXf*UnO|D$t&N4I@ts|^O(r%vG+iI`;y{^QA~3UYM+#_d z9X;wrJucv-Pw7l~nm|yl^!|B{--%D%@haVp1pwa?%ZX1Mwd_ipA4NfG^{sjm8Via% z9n!k!5YVnZy^@mK(*Yk{Ul=425O$|n*o=`K1hX+!M?dpXU+z(zlXtKy^pAse5sT&i z-GtoXCBE(;3_D9NyMzZEyH_V3x|ea~ zy26^YJmZklR1i*Ie}cC_FqovLa^I0PO+ZEo5dBLxHYG2|T)iI}q%&Dqq!!gQV z2Ykz??VnA}ojMaQXg2(GsAC|D{R(Y`7Gtmoq>BL`kkJN#bVZBL>GFxZev9*eD1S>a zWOi@at-5t*QO7~ujaplxEVMt>cCMc@gn}OtB<~iUs$&Oz#O}5Znq8y3aX-)|?p&SI z&!v5T11xh&N9uyd_{*OkIzg9>psDQ@^-=6_mj8FZ^Itw-xMPJEg5%udI0O{qycDH_ zCLPIc_-k-Hk~{tr1;_q(9gi7z&s`*(uo@wdb6P2PlUxw;H~k5Mt=)r+8QHfvNRdNE z7~1hCR;0WV2nWdMgTCY);c6a&U;RV!{i{66iCVsAyGuaKS z3TXA6!4)q6137b=L0|Zy-JPa&=vt1|rItHnh8?yGkTuhGng-C`O3@o2%ABhhmyGCp zeOETn%O{(|<@+T_b6&B>0pd#4f%g4a@%5;EucxU+t@FYz=ZE-9e~2@(reyRw1hRs! zD*}W=6x|#_1R;iS(3y0aVnW*mf{b&?F{Xt+PUQtl{m~QcI9wU0AS0vPGh&Q^5_n4) z0a4PYXaX#s%U`mOe4(HC5O1zidGzaXul^u!%>^E-yN5G)=vjDxqeh!H00u!~JjRud z$e?riA;;q!cHY_*^5*g$I?s`!K5X1Mx%|lCd!TDuFZMa5SQPi}CNB&SjG^eOJ-+Q> zLI%bOgdBrBlBG-@8E*&!8`Wti7=Gd4z}rto0h)o=m7@chF~(vTGQv=!-NPytvhOyG zrKmd3^+%^FI~QY`0BN>TBNd>NTMe#YH;Fu_HfbnDmIBA$7a(|Y^N@2`#jUbrleLi@ zA8pv>8|_cobQw;HtggF<O zZ`6xscMqQ(n9y*2dRSV4UX7~b)tI$r2$ymw^- zrO&{`s;n|5=uA;IF{&en)k;2O7GCY=@@KLICQV(H6JyIM{zs+m8_GSd3XmuxXm@FB zQ*EMrqN;#X)!<0!SzE8KRu5xBi!p`cl=0&?&SH1EH)Z_z=K5w|Z^t=`H0WVtD6&@a z2R_l)TOrGP2&-;+OngiEvy{>_0UkDrdJg6|g;b#5{+HG;t<3)|sX!@?|1N5v4-)ec z3u!-2^2}}FmCq0LZ8x{ip|+t^b%+i+n~^h>dF*M&j&pa=C+FM*2LfZRZ{aWU$cc&DX^$3;F>?9< zL(dudOtuGO&kcG^iyb57wyh^l96t>vSb3?;P{GGpjFSw?6%b3H~Kl1k48PO{v&^A4vjT}V|`bfpmXH)*@V-zvVu0Z zz?`wYV5~MFYxELPnV;aVDSv6{^rTl@?r&*df(5OBZfst8>pg~U=7GHn4NHgNaZ0}a z5?18hOUSJG0nZ58SmH}v@I`j+`(zX#8qYC=!G|5c5LTZB0~CV}kyEPlTz(wJn$)q zu~`|d{8gU*=D6QAuC83(b7&trZ)}Fnu}IqdE`4EujO44I z*{yGL$RouOFGiB<*8no_4VNNcyUHfZ?mBIwi9B1hmDue#ZY9_>qj zc-Ns%`QY_kL1*UVhKa=Hrg1)^APU^TnZ|eJw!V4CR z=0F;Fj1KuT@~3vym9}52KcVNm;ouZ6m*(ov0gE7?rMQ@QgdE(^N+1IB?6}{iQ zI7k#1^on+Sg9Nvov_FO|jsK|4Z{D3m+bfP-;AoZ~2#~*SY(E0FHUocKE;`r%ox@Nl zy~~IT20xYG3kohMJFbtPeHsKDo^FyyFd+TJ!28K;kr`|(6YmP|E!m#8($avoyL$w3 zO0gP#Zi1!>IDzBV=Ks8BTlDZ^&k^G_kXXqa(+b#2g9+i&AJeNHC z%+!B^FYbF^%L@*RR};rBcLy|eMYn*XRtW|UHqu$(Jh7-AD3&rsieu~7Tn`pJWv7EE zhm&pxNsObsA5mP$pGpOsF}3<`z*jMl9lYkV{t}ivT{d%pWsd1gb_YKyKw8JYE899( z1p``<>MqpsY$>_{#TJwq)oZWKx~CbGAc&P>yB`DN5EPC<_Q1cwe@k}EZ`JCI&>{Nj z`lrj>+4_v!mEwUbUbqiegV>m0CyfGCq!ppRCE&1#QafX}xy=NbAm zwV?M>a_O@-Kmz&=zL5RB?3oW*9}ILTDV|LBdYS;Ot4EJ9l@)b`exPze)?vw4pf_Ef z-J?yu&t9i&xYYJ2Xs8eDEZ*MRq3k9If%2BUk*SyTc3#Y@@*TD=R`{GI6$H-xg_FtYI(??%b&^0*L#SpVClw8*S21JcCX_uD}MVYO7Scs zMUDoG+&Uck41Jo(OYJX-)v-2bj!W9FKeo$8P#mZaEOUL!ZXW8c8_=FDtIPsHW4`a8 z%X=c(?l1wgjyD40iN)zazC+Mzkm!SdTAPKK>!BhRrSbCmJPv1w%VJiVN zK61T0K&&)6w@Pdp^=N-@TuwrPI+(pE3U1X$n_+O|P;k%V+yKSr`a6>yf!rDTGz~yT zIL8y&1D_sbEK_%k>~^fquy>dZ`b4 zgafSP52Qg`CJrnc`FLy``kf1!@1%te_?yBXu(PsN^EDoh&&k-Jj-v#OMXmglaMw0g z^ckM1@!+j~5}x0AK!(k$KUpm$y^vdawqa7$>$*bHn2PT{2x5nKZW#mKF zX3~ar1$H;IOE&sx8rYHU^yx3vGx|NB8h2V@yx=6KY=GVrx&{m5Kb2FRiyShR>W`$59~xf? z7;WP{2s>5&fTPwqyTxBj%Na(&Ux@UZnqbmc1v8^hN4o1pEMgIebk$0xtyW)4q3`S1r zv;)}-6T3w-iHCUa&eHSCu0S{pkSH2HqCGE<5ln!<3=4PuXPpK4mkJ;UceuG3vJ#R@}gKq@iT|sRe;R2pQdf-kWd+h&o6!f7|`*87F}lr z+2D7ABj*_fr)dui+^$k5e+Vnp9Q{mo1bUk!h8iIHL@Rx&4+oFj&hD|%BZ8?04*r$T zh2S_<#FIEf+YWy&{4F@D;OuqPFFD1LmR5EPOI^_e^mjCC?>NS&?nJhrlnboPz5`OU zjUC8dM%g=-Rg?4Qbebk8ZCiWciLr)raK@4bVmt@ZfG0c6CXenjNah)%+FE!6I$R zF)&V14c+0YcO3!zb4s4cjzIRvupQ9xuSfiuAtZsStKC7{DPsz}jZ+5ja+v(3i7z_J z8*>=Bp3!~K;@J>?)dZ?QwAd{SpE~Q*>b$~#1=*s() z>{h2bz6AQ*=vr6zV;^}A*5*0SdDG=fAf)nZ#DZ%kou-PV_9xN;bxU^~m^n^VQcHWUdZSOwE2k~tCV7wEFzXu#` zHbEkfE*MIF1U3@zZ66jt$JV>X6Ee+Nde{dD##P$><)#)4vRU;hmUk5!fh&P`$-{nv zzn7U20&EhpdU`-#y+a0+XV|C7SFwqeH+4{F?9&AJt_%=*J*HRm6UT+o+!&9KMZpU0 zQ|k0Xhw7MluqvX@(5DI7HkCg9(UYJZ? zePCojTjAXV4X4C2WnimWOz;MHm%iWQLA`>2h^|x|K-3FOIS)JUzWKFOr?6HfM=yffJr zdF5hxAhUs>;Bd*2;3TKClI`pDxuEl@to)Y4fRG=-Qk|&WOWMBB zW8B5|bm;T+>UkWqJTk6hgc-i6k9srI^0Zj$t<^=}b`iR=NsJ@U)J?k!ySyh|>RUda z0y;0qJx#_a0H&z}Kk>kapH%$?{{}Vfi{21jfQh#sUhh8s!0T{^HgvY=Kpm!OFY@*ADh%~EP^`)miuO45&0J5H89p}TuwUKsBw zvg}3|vIco$YI%%#uHBhzr5nF&K%mFnhE1Aqbb8VQJ+P!hm)9;AdHB!CYA@>OKEBOK z9C@23%F=2#sBhWhjv*+d$7lug=ymPj_*R`9Zx%r0b#emXOVGai_%T5e$LDtZTd?B{ zF7G=5QiJ1>TxCcU+!${!2;AYxIzrnC1d1_28+cn#H`n)>><;w7i8hnd;i@+1_&dic zy2N6;yL*(nNb`LwaT!BPD@NC*rNs(eji$tjngf|0^qVp2H1+Vfv`kzxm;W&B^3!kK z>QZ@S3e?TieWcTHqCP-seq)1;lQ(Ufx*{9WsPSARl~p zqX%Pth_CMxhC#v(f(eZtc9Uoq|8Ej{nG-gfvFVg<^Q4Tw!!pN9%IpQ5MXzCNv;t!+ zZDo6CAE%IG{N>n%w80>7=)n)`d<}7BkOcpp7m5LW8jA&D6d*;B{z=tKUjPP*pjQo! zP-xEp0^|%FW(;*R2AZaA(AQ(tW4RGb6j_5wZ5@X3IoN;>XmhkP6V})DdV0d6ROF-0 zQ*lQ581u%_3TmGwy@T;&WxPx6{2SCkp||7BK0~ORshdUxXS0&mzUWHFjT{cROw}>T zLXh{>(yMG32Er&1x&KPD1KE(h;N+*W0YMOdZYa;!o(c-YmAV7;fV$dGfUdoVx6^={V}8Cq4z7cBb8w?mG)6UAD%_pUSEp^76t__7r)89~mS-M&*$TlKQ*p ziX*6-^#MZBQ0hpw1c%7paqw*v<7|vtkYh0Wf+Od-0iMb3plu_k?=5I2Xu~kO(2ntU z>vB1Yg+HLU^ga4rd@}V_$E2Q9q*K`*>V0oOZ#>~RbjkT5 z^2j~VeOKsx1Z`*ZnMOs;*TsR;%{l&=Y=>122QT`Je$X(DMh#ffu--h^ouzU?=SR)@G%mOL7^Ky{WZ(;%R4A9X?Aq$vf-G2&D~iL9ZHi`Bu5(zA zN?SfEa=|R)X%6HoCXK=MpFO)c=Q zluJ9nTWEHXx|^tr`3c$p&Aa+L$8)SuK+n0w(-D_lhXDe4uWw{d9XqqR7F5Q2Wt*CB z17M6ILmEtis{SOf($2dQJIH@dU!dSGQ*h{~pX_ar+pma2pwIL-O)Ww`2W8A%oylL3 zaS(Mwy|sxWkz8}&t3a{WMZ3BDnQRZM-$Eds%Jv{3-pYS%MIAYAK%Xm4aUffOcLe-1 z&OMEany-#YkDYPrJ9fr$9K=3HD!S#8@AVWE=~!AIZy_lTAwVob8$LRZ#=T(AQ~WDD z;rOLZ0Y4C|r*Z|xG$V5=H#4?rq*-~h$l1lb8%bNb1iH8E`kU(y?*{ewwdp5NX)&+H z@sc3f^uL2aki-HSep+lY3X&2ajI>~Y%KQSDtiIzR7)Sf9K}1K6N6nToIxvRdi7jnl z^cLEgz=GX6+bHJ=Lyth-ig9DrDs7_7FbDY2n**c~I2OZgUCtQ_Z>;!p_Bcaobt#4` zVDLRh$k=VhxfS4zDOJKAXm@@jbnxh%|&;*Y&*pc7}@s-WtBvqtBJGs2yAI`Yk<&C zUptdOQ$N-Bs!924a$4SS=9=%o3H4FV_vEDShV|O{t{{_5tK*ToHKsxE41V+^FiD|9 z9GB$MI^Jm<$W-L5T|`;i(@5={VSBqq^x0k5^Gca4cMiv}W+=;1&SHhv10rAQiarIo zdmLPK4A8^w(LUKKK_cCPoyk3=j?=haDMgWRLiYa8b%fK} zPdA39<9^-KN^+20M4PrRGE6|?)PiQ?NO(7I&oR+G&eeLFj!f}9(*Id|LWCMjyTHq+v zA1yJusBU&_b@!V7{a1fkXR{{cjvYI5OpY&CK=(x|f#hCM^fqsGha{(ftk|JL=Qj8@ z=-;vv)Z3^-j1m7d4N-$6g&4ekh=ypKXimU^q5!4rclfD=RILA_EIPDb=e1ezJ zHsj1?V)ICcZJvO>TUs;74`8CZ$=ANd)05qn9A* zb`MTBr=vdmcO!9}+CFM6?O;(SP(AT#oxcN`z^?Th2+~&Hy^nuk*zN^E;tm=+Qn5n` zk}Cs*aTge`5HkMZ!vKDhvE>K@Xtz?oe|G@wXX>YE57f;W_)K;OCV|tYW1j-$g-Nl3 z<-PhFbaf={@RfG*oFiU9)rplaVAKWPB7;0U#c*2~{{(LVCv|3iPXI=s&UVK2(f~1m z(QnjoB=UREsh{W$>gnK#S$)*o_ZRdua9nl6IqFvS0&0i9QpD#r?)2gi_#_!+A4uh<62i@rEA zhqY2G_A&#x(28^5<4jutg2BB;5J;6mMh}xruDSs#EoAKOSlafEEx zN9Mv}aVlG2rC$YaE@^XMmnf;Kf}rbXP_~nm-6Jp9fo)@vi!r;ip<|&}z?<)_U#!64tyaf?xq$XhJ8WP?8WWB4=OwgW^b3l*ob zBh*H_!9kG~!|rw94iw%iGoUUE^~k3vy$$`ALCcO%+r<;De4to>wqUeVle4!!2AMZj znW(qg_VxOxPHHTQ2R^cbcKDc-!{9lU?SZzVn|5S02kfY?@@SOo;t)M5tsXVWkk|JR zXgS(Ql}?PS2mYNtIqTfG&#J@c(J#Gi@!K^vc2;Lh8#~cGY+B|K-!ipFodBIHuW`{m zY&gR^O&!$l+eM^w3jgp3mu=|DHucDb%Z^k6!$MO~`VJ^}Z`lQqzS}!Q2lWee+cbeu zpKO(UK^@Nk!yu8bcMbUw*oMESJEH(8M%d~!5Sbd}t$G@d7xyB&K z)LEq`oSN=+tZ1Bing%eYCB6u#nTeh%)4keVUR~`gpg)UFzoT%}R&GE*=E0GJ?(>wJ zjZFlQv9WQaY#BZyRaJn0rr&AWfZfXcwew{+DEheQvpZeM&MW2Otox5z;bUcNd?}SN z4Z#N;#p+mlpczM{b++6_<>`Xw>L7^#DFfv^$|D$@f$a|tb=ol26;K~-_d0l>))$0= zJ7ADG4B5m{k_++E~1eOBZ}PSplAzi#sbyh4!V|Mai@^}mZ@ zr!k$vu=|4}=b1rI(+f~1)g)g5gSC=vR;v*lcdU}fay!s&rQLz-1|}J;I26a2rY&ew z>gjE@*~pEuag>XoarU|>&(Y6h3mDF2u3vRqjDx6$-GL6q-N;%kOMZ;3t^=MKo@p9_ zzC}jV?FPsa?L>A2bRWBx-C|p2y_@tlE5Rf!uyD*d*O_dAzKnHa3juWAjQP9rGSR~^ z$Ev@v4cRmFY1)9DYTr_NGzavX)9(yrnaNNEb;sV+jnKVir_b(On6LeI&UuDDO;Gde zY1+n1f<%D)=Z$m+jJ;s&Q`r%mLl?H}9r_5A;o#GBCGsMt=2T`c7?QCzN)AztQJtlr zlueYuDFtGnBRHZMi&dJkc(%U| zM;OWJVC=pt@XYW`(-6i)_Kyval}}ko^}ihQ=wrb-dR^5UPjQHVfEm~tuf8|DTR(bI zWi_XfT5N)Eso%aYF#bR!u8Lmq?j$VO z%MX~d8NH@y3j)|ZrL=Qgqx1Hi1@yZW9Utl6vg50Bz6Cbe-CeXZ;PPZkQPzC6`62M_4U(MzxhgoS;Mj^rN{>)^_Wy)# z2a{uPCVvmKU#Z(ROb>$?J8Ll%V;hiCV5gn_W_YIC3oJn=YZftBQt12ECp*F2ixQ=yXjLf$J4GVzeCU^fe26mxooI`oj51sYVPRanr>U#{lbG&CNXVR(iPTNY`I4dV9jxDB zyW`ycS?|w40#ecONYCV|T0XM$jxmTSqPPH8ZYh z0(0d~8F~zW=F)zLE=8{%=owuu9{;Z7EyP?2TI1kUg-D% zJR>7+L&qXA46q;SIczn|Hpn&+@kA^iC{}PH@~o6mSFkf!lV(iCSr~F~Ij?OBf8?9? zcooQlNe`&s1?S^XqlpVJ=!_pu^=B1##OfVsgQzpkzO6ROV<*rl`5Y&BIgmCpW1XfJ zRqoi9=C9?os^i5oM?Ui@K-UkME$|y>?;z&5&j*w@HV9}xru`f6R48w6Z+v`5yna99o_kzNVYg^kh*g&n10O-%bBalC% z!!!-?3cJUIfg62pk57LL=!jr!>ie;oKr)BU8|6A_L)0TdU1dhVpYdl;WSY|NF399i z16_*a8pjZ5AxGshaT;xA^q8g=R!#w^egI=!rr?zttJItf1EiFjO}Q*c;g}VUQDkoP z(8ty>i_>(@1=<@&DKE)Ak+uP`aaQG-x@j6D|k%Es6KOG-^Vhx^Nn%w&KbSe!{m+1 z9T?vcp*Y6~Ii;24KpROZ??SNWfwLRCv1}Z(01eNN3XnkCA03(lx-X?C$^~S!&R2nV zE;;ilm?*PTU)Eqjhavwmb?5(r(PjNy+jvB)k4+oEvt|1YPdj%}pJ(`{35~1(nf<$w z=!N`rEZc*exd1zpb?hROGs}*^PIj7I-yHKBXWH0hhzJrp$bZ(z@4(;}6xiFaLpC4- zl-qUC4hF&jhKAh&M|ND<8AJz$qDMEF7FIjm3XnZ@Ev!@vlNP(goRQ9uDso=sCLBoM z431U-leCf?_!KDDK-$5cpWp>FpS&`$2Um{!RRV-V==)gZQeOhZLN&N2>0@qgHe+gG z%(CIFWpoF!8|c%(N}t-UB;$HOkAB-ex12ub znf6mW{a;NCY&(!L8M}s6!|0pGv^_X;rWg5a;)o;FPtkLPR|^nqrX^$u5SgX2w1qKP zRHkVQbv|O@uyV4gm6sz9#$N2Q8PoO{w;uQEW~`g`^OT!2*$#t%2wCgFouUVxrsb)~ z>lLK=r)b^+X2ilE6IV3 zN!sX!moA&}kYU31$mg`2b0jl>-&h-ujTzdiC@ngqEuhnX(_X*ITVsTbsB)P~VCb`? zEy$+BG;M+GqBEK94@DQUH|@~3%2j9C0`;Z6Yylh3^?xSYVf3RXfgDFKPAr{q^l4I- zKap-gu0`Qgt_RsmvQMP$f%V~xe4)uLyYbR#ZY-gLU1sN(s{;L7_TWukNXm|2;pk+H z!Pj%^>vWEQ*?Igs3J@K4dhhz1;~s10v>&>DB~iwzc2MBbH~tVt>KdPyT&T$ z>KJ^%_^0v(9K!gVl^MhCG3uADR;|<-kYU~-DFv~SPj8%zYY@kQO}c%?TJxIT~>0&VOZfvfc9D1{#N zCP-?s_f1rxj{;;bIFxTF46ha-gqO)4=umW0Q&7vJ0N6g;^MSF=)U)}9$9sr5nP;*+ z%m*jdj-#rxgP9+xstwf9ZA8;b+*3Br-(e(^f7e~bc%TmuLeFJ(8V^xAdCAMbfDSo99q>M=-=3%u7;Yy3g4XQ@ z^jJv_e0IPH`nKio*;chPkqpOyq<#N*P0FypEI672nH`{48C!6EKW|*9iO6@eP%M-8X&8FWKirb_6zB20c=?ij;G296~#~*NN|dXGF6@(0{W^tDmbs zlkLFKHv9o&of~WLEb*R5*(0wweLqgvXVX4F$tXut*%)ge{zg_mhuRub(JKOA-%)Ex zuc#-B9)mIT;QZd3+@aS<|3KYgS|7ld+dwJ-LZO9xt$YD=%&|8s(mojI49_%O0e!`U zT=~u;z!)pvTlGP!$0qqx`5ovxcDG|$sQf+!Rd+#=GkVk01GR25E^_9|XR=#}z*&#l zb}+6MjnA+=MsDjnyp*qHXpW8I$&P?N8t)Kv5m+_IlosaNdyxOre@5u8pluMW!;#^3po4*f?#IjIs1JRnX#hrA zSP@TUMV1shBj6hhk6Wv+|tJod`xpT>xPY0{|hCh(eBt4Cc1(~O^ zJ@70gC+xek6Zmvkk$oT?0n-e5`Y~GFR`{k;Dqn39cRabYD zK0gHd-24v5TtE+ZkkJn|&b=tCN30jYphec^+`JD(xI2tb5xy4!$R+T~`c_6@XjG`X z0Rt`MPvv(oY#V$G+4Hq^Ri;a(uU-d67&%N}#6QN|WSvRJV4o}?!%m!|q-5^3m-fCl z(AQq{d@Vzp^qA0*1MTQ&^63zc8Yvw(EZv5-n6u%TYzF}`p0fz9hP`DA*mJ(shS;#t zrhj8DI{_Lx?JN`<+5m!Us83+Pr)|Jv+j8%y^D?-XK+Ip!cV7S!FPPi6?9#nIiV~=H zVxMgYs_YmhSK7QZKy*my!crPs1*`5{hi9@^f-Hlp(YX%{HD{=i42D{C&aVARa^SNA z1J-}}or4|6L0d>pb+FR^sJ(VpyfQfjc~jcn+XI390$vctl>y?+%6Q98Tqn7@Sv6HdT=2Uis+{!ct zGPl6Cf~55E(g3lVoMSkay%H2M@ns-a0?(XtoXPG5!>nj~AiITj_i*gd$Br>N7;MW| z9U~2pjlp+Zpyv!S(m|a`4a2v{&c9pjJK*)b3vw4J97^BPsd7ov7SP#g+d226@2h3t zkOHDkTA-G9Z64#-bSgt9!Mbs>9=+@q^cve%*-pPH12xz%9s3k0FH?Id?m*6*oHJQ- zQG>wc*HLI7yP`ifb)e@=n`r{FSLR83CysVOji58$kgcCV5M6oH+SrE0QAC;0Xr{Y@BQh2DD;07p$v!Ot^FZcr{?OMYnsXH{gwf3}Iph z6I=tzry}PSBh>Qt@yY~PY5H=2EKXbvyM=zTcA$+u;#gx0fLYPY0{(cx9#gOn=if zfXn)-8O!eba$zq2;~iPSu+h5(+K!F&Sx}BwbdR>t?_9rUvh=LBkZpag=oo$O^DR%? zd{>_MQIzg6@CaBIcur+^5P@}NfV`;T5R@=cW5?b`CsL=7d`_29TUZ)nsqc_eo@p~p5OTDM`aW<_2W>2hdxB^S!?)}nAdU6! z5P@J98rq}B-TUi>n!LWI2}h$t^O>Oii7{&pONu@+X5B74U<1|WY$*8^F3j~};! zm2m||9KASr8XJ-BrOu~9Am^?29q8bGv2U#Lvss<)e*EkUxakMhEtoXYlK?@k(IA@@)?2M7UWcZM>A$UlN~|Z z*lqT|MBEOLU}mTnzNZKfxYF6at*yta$TBetJg2f-Xq}g19{so?Z^te9L3;~Q0sCfi8b|jM*yeMuKMvor(>Hecai0abd*W4O_1F!N zG7%#~?FHpc?w*bYAZw22O!i9T5(v2{-@ybfUTOC*cuBx2xqCS`QRJjkx}F>OXcFx&O$IckKU?8KU zNJ;yp_9wEn&-Ul!&}YUtO~6KTHae5t#?nq#+Jaq*Bt9b>I7Yw;zz*AXh+YG?KCa46@+#t{7d!SVZ>=8Rk zos1oDeq$N%Za~f~#=s_JwKHLYY#fXotX__Qo8zXobl5+>T1US~e|&)GCtixyMT1Vu zZC-U%{s#M>&Zj8|P?%a&&&W3cj%uoEQ4+O>f^6JXN>!*LArQZ}!; z)9;*qB|n6R1~W3J35?6wue5v57w7|oQX1`df+6s2jx8?$V^I2PKK0?efw92`3YzG$ z63Xrc86_y_#34407cfw(L3}FR8N5;b$m8E-i zu5}w5(@}Z<_-Y+Fk?s$WoiTLKc1G?roXF~Wf|T%&PbPBjjS;V9V3Sa^5{cH4Y1UK6JwmF-b!b=%&CI0e*-X7_lt?FfOZCJ*-iifsVBfOFBeJmQ^^JxzPS&UV#w z>{IYUUgKA12f@Q3loxDvng$@x_b#loOKnbMq4Maf%4_DI!>y_z3jX)L{N9fsq`MOM*Q&=y2rqr4AP9rS&!?_=2! z*kSI-b|$OPUCc}SF$9mgI}spz|2FS72p$>uDlim-?igSM&d<5WM$ct{Oc2Ui_45mk zadcVf<3Luvp0m>cWGy78K2cctKJe*bGW4aN7WhYwJ4W11)}!`4*o2;~O{z?~T{(XJ z`rZKV4DU4UfpJxP2afR$(_pY7Li!MHz$3jzfq8WM9G(hF64%K33ci?CinC48j z$NpnhTA-cE4lyHdnn1cze;{idy9*zhc`Efi(3X-DA9)L6|K7v=wu{9uuOtvF5A5wH z;P_W;A{%lS`fb~fq5VRD{GS{77Xl+g77UHK1CwA<2S(QeID=P1bkP5f1LK>cwerT;$KOFalhf(h_!OG)jr;77Tb>ShXLzS+ z5A<8*1kV)#!VdjJZ^N7wkYh3OW_?fKM%@n0XA2gHs~vZMbGyy4bO>$RxhXcTE4KhU zH!ovewshY)l^bDV$7$clmwvS?{SIaDmn9pW$jT4ijg&r{Gudr8LiuhN2fLaVh21=k z@oE853^`u$x1m2l^x}6O0kTYd9YBY+t^djjyfUaOWmMjR;5GUEicz6`Zrgiu;a#ZETGGxV8uSn3>pV+5=-zm!^0)YF!vw{fgnYkueXUo%Z4UyC9pLOnUJA0s&I% z;&NYiSWaZos1DU3>XN!N09$A`mbvF~Zz9h)tAllLS>NHaT66I5o!DU~C?5F=2K}BY zjKFplyE=CR^g$-&{8cyoFY%tpf)htSHvY4DHxiF@y?Ctcx6r?3hpT@S<>djA7dk(c zc_9pXc9kP_FsMb^Cu=ZKSMs!&sAr^7Z-6FqE7*!2oh)yXcYpVMB{}fv5qy#nUk6T9 z9d!@%W#Oo+vj8c^CTlN@OTX)JzXM&j(f1oXR|H7ZS#_sr4@@|n;vq$()e*LJqtlX3 zC$bw9nbF?{oNWJ*YHRT+<7pqscF?C|PXq{PV@#)VWabr_2eKOo9OF5a8-d)uokdT; zwd1k7Soup{V9$-S=xAIs$FXUuV7IZ4bSPs;tz37GwC}?Hq5#oorIBdd?>s%qo#Dmr zJOU<|ljH;09+c;t)YJz<=&u>oZ^LAr<2}|V-t`VIdHV45AsnNdm=+9Y6&>rT&+3R* zfX?*WKYlAKT{2y2fLHn5N;XFAXY7n^th58{4aA+ty&9v9?F&0UdJ-^aD|2z6zo9NOeNWRC@R+|H87uTclaf{I z$q3%gKf^wO$U_{n)3FcruRdyd^xN+oY=*Bpx>vj;Kw?t2jI{@hf^UD6cF_3@&ophL z(5s;gc#+zO-Ul-Je&qWVqXT`d0__CsIbJc~ocvK6jW}8De-8#*_b#$eK)?EmN4!_t ztJaMJ#0qA0-*K`6$MdH+ImaHYd_8hi*}HT#s}N=xe6kGy$8;H*?Ph8@e%9Tj5>$I`IkY z@2g_Te>*<-zeyBRlK$nOHl zj<Ar3gMDxN z0FlDcLCOKL?S0OXe2;B#FgEE=Bh4$NDNMQk%a|~knT=EEfv@-1vGynid{pjYv7k+nWlS=(oFw zv)Oie3b2>$%)(V_H^u<6J!e0zim=rxFAd2P`<$1iK^Po`{`$5&f*`9(en>h4o(E+k zvO?A)Op>Uu@VpwHJ@CwUrT`Kk;n{%=^spr-%Zgx?+5(p0`eObS`Gz^21Q!gQJI)63 z*b}CZ@bZac!;OwgZvp;e(UDOSaYVkRm_IZK?2Dnn#!uF)L8j0tNJYoT`nk;Lo!q2z z2XosTnIH3*3UGsMR%d~-m07nuj++%+iNj&5v9(LUEe55F?+fUUX7$htw z;}Zr3aPqI-c|;h0(34*A(;4ZHawPgD(HCT#yC|G1vLM^D1w+EB|1~jlW)C4SqLWyLuT-#!hzw|Vbr_7tFubs%P9 zk&AQ#yNtE*iNH_pb3)w1S^!(YBMZbvJaXcXAb%!*VprioFAkMoLmGQkV|JHz@8sZX%HYkVb$@D9eTD%Od&(=PhVen zhVpldS80$~Se=!ifd_a&N{)Sk0<*HVw^@1~#z!Qhe{V|srHD8w=+6tXfpb z=ttWiX)G7P5r2XvUkg9QhRu$P(=@h$F0puCkUO|TuEn*7F@I~YL9UzH>HX6ax&mDx z=^F5`De { expect(toImage(svg, 100)).toMatchImageSnapshot() }) + it('should support conic-gradient with transition hints', async () => { + const svg = await satori( +
, + { + width: 200, + height: 200, + fonts, + } + ) + expect(toImage(svg, 200)).toMatchImageSnapshot() + }) + it('should support conic-gradient on non-square element', async () => { const svg = await satori(