From ea948784d33f8810736a1d9f0605a4c7c2afa104 Mon Sep 17 00:00:00 2001 From: Shaun Struwig <41984034+Blargian@users.noreply.github.com> Date: Sat, 27 Jun 2026 17:11:42 +0200 Subject: [PATCH 1/2] Make featured cards code-drawn and restyle quickstart back-link Featured quickstart/KB cards previously baked their title into a PNG, which showed untranslated in localized builds. Replace the PNG banners with a code-drawn card (flat #FAFF69 background, decorative bars, inline ClickHouse wordmark) that renders the real title text, so translations apply automatically. Drop the now-unused `image` field from the featured data. Also fix a localization parse error: a KB article description was wrapped in stray curly quotes, which the loc bot straightened into `""..."",` (invalid JS) across es/ko/pt-BR/zh kb-data. Fixed at the source frontmatter and regenerated; collapsed the doubled quotes in the translated copies. Replace the "All quickstarts" back-link Badge + relocation customization (quickstart-back-link.js) with a simple muted text link (arrow icon + label) styled to match the homepage links. Removes the script, its docs.json registration, and its README entry. Co-Authored-By: Claude Opus 4.8 (1M context) --- _site/customizations/README.mdx | 1 - _site/customizations/quickstart-back-link.js | 82 ------------------- _site/scripts/update_quickstarts.py | 5 +- docs.json | 3 - .../connect-your-iceberg-catalog.mdx | 6 +- .../create-your-first-materialized-view.mdx | 4 +- .../create-your-first-mergetree-table.mdx | 6 +- .../create-your-first-projection.mdx | 4 +- .../create-your-first-service-on-cloud.mdx | 4 +- get-started/quickstarts/home.mdx | 15 +--- .../insert-data-using-clickhouse-client.mdx | 4 +- .../obtain-your-cloud-connection-details.mdx | 4 +- .../quickstarts/working-with-the-map-type.mdx | 34 ++++---- resources/support-center/home.mdx | 15 +--- ...ting-geojason-with-nested-object-array.mdx | 2 +- snippets/components/KBExplorer/KBExplorer.jsx | 41 +++++++--- snippets/components/KBExplorer/kb-data.jsx | 62 +++++++------- .../QuickStartsGrid/QuickStartsGrid.jsx | 41 +++++++--- snippets/es/components/KBExplorer/kb-data.jsx | 2 +- snippets/ko/components/KBExplorer/kb-data.jsx | 2 +- .../pt-BR/components/KBExplorer/kb-data.jsx | 2 +- snippets/zh/components/KBExplorer/kb-data.jsx | 2 +- 22 files changed, 135 insertions(+), 206 deletions(-) delete mode 100644 _site/customizations/quickstart-back-link.js diff --git a/_site/customizations/README.mdx b/_site/customizations/README.mdx index 522de0b5b..12b8302e0 100644 --- a/_site/customizations/README.mdx +++ b/_site/customizations/README.mdx @@ -15,7 +15,6 @@ See Mintlify's docs on [custom scripts](https://www.mintlify.com/docs/customize/ - `navbar-cta.js` — adds the "Get started" CTA to the navbar. - `clickhouse-sql-lexer-wasm.js` — exposes ClickHouse's SQL lexer (`src/Parsers/Lexer.cpp` compiled to WebAssembly) as a base64 global. Snapshot from ClickHouse `programs/server/play.html`; re-extract if the upstream lexer/keyword list changes. - `clickhouse-sql-highlight.js` — re-highlights `language="sql"` code blocks using the WASM lexer (ClickHouse-native colors, matching play.html / clickhouse-client) in place of Shiki. Must load after `clickhouse-sql-lexer-wasm.js`. Other languages are left as Shiki rendered them. -- `quickstart-back-link.js` — on quickstart pages, relocates the autogenerated "All quickstarts" badge from the top of the body into the header above the title (breadcrumb position). To wire a new script up, add a `{ "src": "/_site/customizations/.js" }` entry to the top-level `scripts` array in `docs.json`. \ No newline at end of file diff --git a/_site/customizations/quickstart-back-link.js b/_site/customizations/quickstart-back-link.js deleted file mode 100644 index 031ed19f7..000000000 --- a/_site/customizations/quickstart-back-link.js +++ /dev/null @@ -1,82 +0,0 @@ -(function () { - 'use strict'; - - // On quickstart pages, move the autogenerated "All quickstarts" back-link - // badge from the top of the MDX body into the page header, above the title - // (where breadcrumbs would normally render). - // - // The original anchor is React-owned, so it is hidden in place and a clone - // is inserted into the header — moving the node itself would crash React - // when it unmounts the page. - - var CLONE_ID = 'qs-back-eyebrow'; - var QS_PATH = /^(?:\/docs)?(?:\/(?:es|ja|ko|pt-BR|ru|zh))?\/get-started\/quickstarts\/([^/]+)$/; - - function apply() { - var clone = document.getElementById(CLONE_ID); - var match = window.location.pathname.replace(/\/+$/, '').match(QS_PATH); - var header = document.getElementById('header'); - var content = document.getElementById('content'); - - if (!match || match[1] === 'home' || !header || !content) { - if (clone) clone.remove(); - return; - } - - // Only the top badge is a direct child of #content; the "All quickstarts" - // link at the bottom of the page is nested in a wrapper div. - var src = content.querySelector(':scope > a[href$="/get-started/quickstarts/home"]'); - if (!src) { - if (clone) clone.remove(); - return; - } - - if (src.style.display !== 'none') { - src.style.display = 'none'; - src.setAttribute('aria-hidden', 'true'); - } - - // Build the locale- and basePath-aware destination. - var base = window.location.pathname.startsWith('/docs') ? '/docs' : ''; - var localeMatch = window.location.pathname.match(/^(?:\/docs)?\/([a-z]{2}(?:-[A-Z]{2})?)(?:\/|$)/); - var locale = localeMatch ? '/' + localeMatch[1] : ''; - var dest = base + locale + '/get-started/quickstarts/home'; - - // Already in place — compare against the rewritten dest, not the source href. - if (clone && header.contains(clone) && clone.getAttribute('href') === dest) { - return; - } - if (clone) clone.remove(); - - clone = src.cloneNode(true); - clone.id = CLONE_ID; - clone.style.display = 'block'; - clone.style.width = 'fit-content'; - clone.style.marginBottom = '0.75rem'; - clone.removeAttribute('aria-hidden'); - - clone.setAttribute('href', dest); - clone.addEventListener('click', function (e) { - e.preventDefault(); - window.location.href = dest; - }); - - header.insertBefore(clone, header.firstChild); - } - - function init() { - apply(); - // Re-apply across SPA navigations / React re-renders. apply() is - // idempotent, so observer feedback loops settle immediately. - new MutationObserver(apply).observe(document.documentElement, { - childList: true, - subtree: true, - }); - } - - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', init); - } else { - init(); - } -})(); \ No newline at end of file diff --git a/_site/scripts/update_quickstarts.py b/_site/scripts/update_quickstarts.py index 9fd7c79ac..d76c01219 100755 --- a/_site/scripts/update_quickstarts.py +++ b/_site/scripts/update_quickstarts.py @@ -138,8 +138,9 @@ def generate_badges(use_cases: List[str], products: List[str]) -> str: Returns: Badge components as a string """ - # First line: link badge - first_line = 'All quickstarts' + # First line: muted text back-link (arrow icon + label), styled to match the + # homepage links (e.g. "Read the quickstart" / "Set up docs MCP server"). + first_line = 'All quickstarts' # Second line: all other badges second_line_badges = [] diff --git a/docs.json b/docs.json index 5fb2e002d..b170c715a 100644 --- a/docs.json +++ b/docs.json @@ -55288,9 +55288,6 @@ }, { "src": "/_site/customizations/clickhouse-sql-highlight.js" - }, - { - "src": "/_site/customizations/quickstart-back-link.js" } ], "styling": { diff --git a/get-started/quickstarts/connect-your-iceberg-catalog.mdx b/get-started/quickstarts/connect-your-iceberg-catalog.mdx index 028a9f09b..15cb9e3a1 100644 --- a/get-started/quickstarts/connect-your-iceberg-catalog.mdx +++ b/get-started/quickstarts/connect-your-iceberg-catalog.mdx @@ -11,7 +11,7 @@ import CloudPrerequisites from '/get-started/quickstarts/_prerequisites/cloud_pr import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx' {/* AUTOGENERATED_START */} -All quickstarts +All quickstarts
Data Warehousing Cloud @@ -47,7 +47,7 @@ By the end, you'll have ClickHouse Cloud connected to your Iceberg catalog and b In this step, you will connect to your Data Lake Catalog in ClickHouse Cloud. 1. Open your ClickHouse Cloud service. - 2. Navigate to **Data Sources → Connect to your Data Lake Catalog**. + 2. Navigate to **Data Sources → Connect to your Data Lake Catalog**. 3. Select your data catalog in dropdown. 4. Fill out the form with your credential and connection information. For Unity Catalog, enter in: @@ -93,5 +93,5 @@ Be mindful of your quotes. ClickHouse doesn't support three part namespaces, you
-All quickstarts +All quickstarts
diff --git a/get-started/quickstarts/create-your-first-materialized-view.mdx b/get-started/quickstarts/create-your-first-materialized-view.mdx index 3558ce56d..1cb60fead 100644 --- a/get-started/quickstarts/create-your-first-materialized-view.mdx +++ b/get-started/quickstarts/create-your-first-materialized-view.mdx @@ -10,7 +10,7 @@ import CloudPrerequisites from '/get-started/quickstarts/_prerequisites/cloud_pr import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx' {/* AUTOGENERATED_START */} -All quickstarts +All quickstarts
Real-Time Analytics Data Warehousing @@ -211,5 +211,5 @@ Or go deeper with the reference documentation: diff --git a/get-started/quickstarts/create-your-first-mergetree-table.mdx b/get-started/quickstarts/create-your-first-mergetree-table.mdx index 4e771c356..0b8b6acba 100644 --- a/get-started/quickstarts/create-your-first-mergetree-table.mdx +++ b/get-started/quickstarts/create-your-first-mergetree-table.mdx @@ -10,7 +10,7 @@ import CloudPrerequisites from '/get-started/quickstarts/_prerequisites/cloud_pr import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx' {/* AUTOGENERATED_START */} -All quickstarts +All quickstarts
Real-Time Analytics Data Warehousing @@ -184,7 +184,7 @@ By the end, you'll understand why the MergeTree engine is the foundation of almo Each row represents one active data part. Notice: - **`partition`** - the `YYYYMM` value derived from your `PARTITION BY` expression. Each month's data is isolated. - - **`name`** - the part name encodes the partition, the block number range, and the merge level (e.g. `199501_1_4_2` would mean partition `199501`, blocks 1–4, merged twice). + - **`name`** - the part name encodes the partition, the block number range, and the merge level (e.g. `199501_1_4_2` would mean partition `199501`, blocks 1–4, merged twice). - **`marks`** - the number of index granules. Each granule covers 8,192 rows by default, and the primary key index stores one entry per granule. This sparse index is what stays in memory and enables fast data skipping. - **`bytes_on_disk`** - ClickHouse compresses each part column by column using LZ4 by default. Compare this to the raw size to appreciate the compression ratio. @@ -273,5 +273,5 @@ Or go deeper with the reference documentation: \ No newline at end of file diff --git a/get-started/quickstarts/create-your-first-projection.mdx b/get-started/quickstarts/create-your-first-projection.mdx index 9e34c0f1c..434510e2d 100644 --- a/get-started/quickstarts/create-your-first-projection.mdx +++ b/get-started/quickstarts/create-your-first-projection.mdx @@ -10,7 +10,7 @@ import CloudPrerequisites from '/get-started/quickstarts/_prerequisites/cloud_pr import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx' {/* AUTOGENERATED_START */} -All quickstarts +All quickstarts
Real-Time Analytics Data Warehousing @@ -224,5 +224,5 @@ Or go deeper with the reference documentation: diff --git a/get-started/quickstarts/create-your-first-service-on-cloud.mdx b/get-started/quickstarts/create-your-first-service-on-cloud.mdx index 810870907..222080748 100644 --- a/get-started/quickstarts/create-your-first-service-on-cloud.mdx +++ b/get-started/quickstarts/create-your-first-service-on-cloud.mdx @@ -9,7 +9,7 @@ description: 'Create a ClickHouse Cloud service, explore the SQL console, and lo import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx' {/* AUTOGENERATED_START */} -All quickstarts +All quickstarts
Real-Time Analytics Data Warehousing @@ -154,5 +154,5 @@ Check out the following quickstarts next: \ No newline at end of file diff --git a/get-started/quickstarts/home.mdx b/get-started/quickstarts/home.mdx index f3dffb9ff..f79157482 100644 --- a/get-started/quickstarts/home.mdx +++ b/get-started/quickstarts/home.mdx @@ -10,18 +10,9 @@ import { QuickStartsGrid } from '/snippets/components/QuickStartsGrid/QuickStart {/* Featured quickstarts - each has a quickstart ID and a banner image (the title is rendered into the image) */} export const featuredQuickstarts = [ - { - id: 'create-your-first-service-on-cloud', - image: '/images/quickstarts/featured-quickstart-1.png' - }, - { - id: 'insert-data-using-clickhouse-client', - image: '/images/quickstarts/featured-quickstart-2.png' - }, - { - id: 'obtain-your-cloud-connection-details', - image: '/images/quickstarts/featured-quickstart-3.png' - } + { id: 'create-your-first-service-on-cloud' }, + { id: 'insert-data-using-clickhouse-client' }, + { id: 'obtain-your-cloud-connection-details' } ]; {/* Define quickstarts data */} diff --git a/get-started/quickstarts/insert-data-using-clickhouse-client.mdx b/get-started/quickstarts/insert-data-using-clickhouse-client.mdx index dd3231ca0..d73a4f2be 100644 --- a/get-started/quickstarts/insert-data-using-clickhouse-client.mdx +++ b/get-started/quickstarts/insert-data-using-clickhouse-client.mdx @@ -9,7 +9,7 @@ description: 'Learn how to use clickhouse-client to insert data from local CSV a import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx' {/* AUTOGENERATED_START */} -All quickstarts +All quickstarts
Real-Time Analytics Data Warehousing @@ -184,5 +184,5 @@ Or go deeper with the reference documentation: \ No newline at end of file diff --git a/get-started/quickstarts/obtain-your-cloud-connection-details.mdx b/get-started/quickstarts/obtain-your-cloud-connection-details.mdx index ba74cf3ab..d8df0f861 100644 --- a/get-started/quickstarts/obtain-your-cloud-connection-details.mdx +++ b/get-started/quickstarts/obtain-your-cloud-connection-details.mdx @@ -10,7 +10,7 @@ import CloudPrerequisites from '/get-started/quickstarts/_prerequisites/cloud_pr import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx' {/* AUTOGENERATED_START */} -All quickstarts +All quickstarts
Real-Time Analytics Data Warehousing @@ -116,5 +116,5 @@ Or go deeper with the reference documentation: \ No newline at end of file diff --git a/get-started/quickstarts/working-with-the-map-type.mdx b/get-started/quickstarts/working-with-the-map-type.mdx index 679050dc4..a7195ae18 100644 --- a/get-started/quickstarts/working-with-the-map-type.mdx +++ b/get-started/quickstarts/working-with-the-map-type.mdx @@ -9,7 +9,7 @@ description: 'Learn how to use the Map type in ClickHouse to store, query, and a import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx' {/* AUTOGENERATED_START */} -All quickstarts +All quickstarts
Observability Cloud @@ -21,7 +21,7 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ - **clickhouse-local** installed on your machine. See the [clickhouse-local setup guide](/concepts/features/tools-and-utilities/clickhouse-local) to get started. ## What you'll build {#what-youll-build} -In OpenTelemetry, every trace span carries a set of **resource attributes** — key-value metadata describing the entity that produced the telemetry (service name, host, cloud region, Kubernetes pod, etc.). The set of keys varies between services and environments, making this a natural fit for ClickHouse's `Map` type: the keys are dynamic and application-specific, but any given row typically has only a handful of them. +In OpenTelemetry, every trace span carries a set of **resource attributes** — key-value metadata describing the entity that produced the telemetry (service name, host, cloud region, Kubernetes pod, etc.). The set of keys varies between services and environments, making this a natural fit for ClickHouse's `Map` type: the keys are dynamic and application-specific, but any given row typically has only a handful of them. In this quickstart you'll use `clickhouse-local` to load real OTel trace data from a CSV file into a table with `Map(LowCardinality(String), String)` columns, and learn how to query, filter, aggregate, and optimise map data. @@ -102,7 +102,7 @@ In this quickstart you'll use `clickhouse-local` to load real OTel trace data fr ### Query the data - **Access a specific key** — use bracket syntax to pull a value out of the map. If the key doesn't exist on a given row, you get the default for the value type (empty string for `String`): + **Access a specific key** — use bracket syntax to pull a value out of the map. If the key doesn't exist on a given row, you get the default for the value type (empty string for `String`): ```sql SELECT @@ -115,7 +115,7 @@ In this quickstart you'll use `clickhouse-local` to load real OTel trace data fr LIMIT 10; ``` - **Filter by a map value** — find all spans from a specific service name: + **Filter by a map value** — find all spans from a specific service name: ```sql SELECT @@ -128,7 +128,7 @@ In this quickstart you'll use `clickhouse-local` to load real OTel trace data fr LIMIT 10; ``` - **Check whether a key exists** — not every span has Kubernetes metadata. Use `mapContains` to find which ones do: + **Check whether a key exists** — not every span has Kubernetes metadata. Use `mapContains` to find which ones do: ```sql SELECT @@ -139,7 +139,7 @@ In this quickstart you'll use `clickhouse-local` to load real OTel trace data fr LIMIT 10; ``` - **Inspect all keys present across the dataset** — useful for understanding what instrumentation is producing: + **Inspect all keys present across the dataset** — useful for understanding what instrumentation is producing: ```sql SELECT DISTINCT arrayJoin(mapKeys(ResourceAttributes)) AS key @@ -147,7 +147,7 @@ In this quickstart you'll use `clickhouse-local` to load real OTel trace data fr ORDER BY key; ``` - **Explode a map into rows with ARRAY JOIN** — turn each key-value pair into its own row, handy for building attribute inventories or feeding dashboards: + **Explode a map into rows with ARRAY JOIN** — turn each key-value pair into its own row, handy for building attribute inventories or feeding dashboards: ```sql SELECT @@ -162,7 +162,7 @@ In this quickstart you'll use `clickhouse-local` to load real OTel trace data fr LIMIT 20; ``` - **Filter maps with mapFilter** — extract only the Kubernetes-related attributes from each span: + **Filter maps with mapFilter** — extract only the Kubernetes-related attributes from each span: ```sql SELECT @@ -173,7 +173,7 @@ In this quickstart you'll use `clickhouse-local` to load real OTel trace data fr LIMIT 10; ``` - **Find error spans and their resource context** — combine regular column filters with map access: + **Find error spans and their resource context** — combine regular column filters with map access: ```sql SELECT @@ -192,7 +192,7 @@ In this quickstart you'll use `clickhouse-local` to load real OTel trace data fr ### Aggregate across maps with the -Map combinator - ClickHouse's `-Map` aggregate combinator lets you apply any aggregate function to a `Map` column and have it operate on each key independently. The result is itself a `Map` — one entry per key, with the aggregated value. This is especially powerful for OTel metrics, where counters or gauges are stored as map values. + ClickHouse's `-Map` aggregate combinator lets you apply any aggregate function to a `Map` column and have it operate on each key independently. The result is itself a `Map` — one entry per key, with the aggregated value. This is especially powerful for OTel metrics, where counters or gauges are stored as map values. To demonstrate, create a small metrics table where each row records HTTP status code counts as a `Map(String, UInt64)`: @@ -236,7 +236,7 @@ In this quickstart you'll use `clickhouse-local` to load real OTel trace data fr GROUP BY ServiceName; ``` - You can also combine it with other combinators. For example, `sumMapIf` lets you conditionally aggregate — here, only summing the minute windows where the service already had errors: + You can also combine it with other combinators. For example, `sumMapIf` lets you conditionally aggregate — here, only summing the minute windows where the service already had errors: ```sql SELECT @@ -246,13 +246,13 @@ In this quickstart you'll use `clickhouse-local` to load real OTel trace data fr GROUP BY ServiceName; ``` - **Why this matters for OTel:** When your OTel Collector writes per-minute status code breakdowns into ClickHouse, `sumMap` lets you roll them up to hourly or daily totals in a single query — no `ARRAY JOIN`, no unpivoting, no knowing the full set of keys in advance. Any key that appears in any row is automatically included in the result. + **Why this matters for OTel:** When your OTel Collector writes per-minute status code breakdowns into ClickHouse, `sumMap` lets you roll them up to hourly or daily totals in a single query — no `ARRAY JOIN`, no unpivoting, no knowing the full set of keys in advance. Any key that appears in any row is automatically included in the result. ### Optimise for frequently queried keys - If you find yourself constantly filtering on the same map key — `host.name` is a common one — you can extract it into a materialized column. This avoids the linear scan through the map on every query: + If you find yourself constantly filtering on the same map key — `host.name` is a common one — you can extract it into a materialized column. This avoids the linear scan through the map on every query: ```sql ALTER TABLE otel_traces @@ -272,11 +272,11 @@ In this quickstart you'll use `clickhouse-local` to load real OTel trace data fr ## Key takeaways {#key-takeaways} -- **`Map(LowCardinality(String), String)`** is the idiomatic type for OTel attributes — flexible enough to handle varying key sets, and `LowCardinality` keeps the key storage efficient. -- **Bracket syntax** (`map['key']`) is the most common way to access values, but remember it scans linearly — fine for maps with tens of keys, not ideal for hundreds. +- **`Map(LowCardinality(String), String)`** is the idiomatic type for OTel attributes — flexible enough to handle varying key sets, and `LowCardinality` keeps the key storage efficient. +- **Bracket syntax** (`map['key']`) is the most common way to access values, but remember it scans linearly — fine for maps with tens of keys, not ideal for hundreds. - **Materialized columns** are the escape hatch: when a map key becomes a hot filter target, promote it to a real column for indexed, columnar access. - **`mapContains`, `mapKeys`, `mapValues`, `mapFilter`** and `ARRAY JOIN` give you a rich toolkit for exploring and transforming map data without leaving SQL. -- **The `-Map` aggregate combinator** (`sumMap`, `avgMap`, `maxMap`, etc.) aggregates each key independently across rows — ideal for rolling up OTel metric counters without needing to know the key set in advance. It composes with other combinators too (e.g. `sumMapIf`). +- **The `-Map` aggregate combinator** (`sumMap`, `avgMap`, `maxMap`, etc.) aggregates each key independently across rows — ideal for rolling up OTel metric counters without needing to know the key set in advance. It composes with other combinators too (e.g. `sumMapIf`). ## Next steps {#next-steps} Check out the following quickstarts next: @@ -292,5 +292,5 @@ Or go deeper with the reference documentation: \ No newline at end of file diff --git a/resources/support-center/home.mdx b/resources/support-center/home.mdx index ef1b59a51..8c99efc7d 100644 --- a/resources/support-center/home.mdx +++ b/resources/support-center/home.mdx @@ -13,18 +13,9 @@ import { kbIndex } from '/snippets/components/KBExplorer/kb-data.jsx' {/* Featured articles - each has an article ID (relative path under knowledge-base, no extension) and a banner image (the article title is rendered into the image) */} export const featuredArticles = [ - { - id: 'cloud-services/aws-privatelink-setup-for-clickpipes', - image: '/images/knowledgebase-featured-articles/kb-01.png' - }, - { - id: 'tables-schema/schema-migration-tools', - image: '/images/knowledgebase-featured-articles/kb-02.png' - }, - { - id: 'data-management/read-consistency', - image: '/images/knowledgebase-featured-articles/kb-03.png' - } + { id: 'cloud-services/aws-privatelink-setup-for-clickpipes' }, + { id: 'tables-schema/schema-migration-tools' }, + { id: 'data-management/read-consistency' } ];
diff --git a/resources/support-center/knowledge-base/data-import-export/importing-geojason-with-nested-object-array.mdx b/resources/support-center/knowledge-base/data-import-export/importing-geojason-with-nested-object-array.mdx index 8d18221cd..c5bc369c8 100644 --- a/resources/support-center/knowledge-base/data-import-export/importing-geojason-with-nested-object-array.mdx +++ b/resources/support-center/knowledge-base/data-import-export/importing-geojason-with-nested-object-array.mdx @@ -1,6 +1,6 @@ --- title: Importing GeoJSON with a deeply nested object array -description: “Importing GeoJSON with a deeply nested object array“ +description: Importing GeoJSON with a deeply nested object array date: 2024-12-18 tags: ['Data Formats'] keywords: ['GeoJSON'] diff --git a/snippets/components/KBExplorer/KBExplorer.jsx b/snippets/components/KBExplorer/KBExplorer.jsx index e06276ddc..836e81ea4 100644 --- a/snippets/components/KBExplorer/KBExplorer.jsx +++ b/snippets/components/KBExplorer/KBExplorer.jsx @@ -127,20 +127,20 @@ export const KBExplorer = ({ index, featured = [] }) => { window.location.assign(withBase(href)); }; - // Featured articles, in the order listed in `featured`. Each keeps its banner - // image; the href falls back to the conventional KB path if the index hasn't - // loaded yet so the cards are clickable immediately. + // Featured articles, in the order listed in `featured`. The banner art is + // drawn in code from the title (see below), so no per-locale image is needed. + // The href falls back to the conventional KB path if the index hasn't loaded + // yet so the cards are clickable immediately. const featuredArticles = featured .map(f => { const article = data.articles.find(a => a.id === f.id); return { id: f.id, - image: f.image, href: (article && article.href) || `/resources/support-center/knowledge-base/${f.id}`, title: (article && article.title) || '', }; }) - .filter(f => f.image); + .filter(f => f.title); // Expandable filter component const Expandable = ({ label, options, selectedOptions, onToggle, isOpen, setIsOpen }) => { @@ -218,14 +218,29 @@ export const KBExplorer = ({ index, featured = [] }) => { onClick={(e) => handleCardClick(e, article.href)} className="group block rounded-xl overflow-hidden border border-gray-200 dark:border-white/10 transition-all hover:border-black dark:hover:border-[#FAFF69] hover:shadow-md" > - {/* Rendered as a background image (not ) so Mintlify's - click-to-zoom doesn't hijack the link navigation. */} -
+ {/* Banner art is drawn in code from the title so it + translates automatically — no per-locale PNG needed. */} +
+ {/* Decorative bar-chart motif, purely visual. */} + + + {article.title} + + {/* ClickHouse wordmark, inlined so it inherits currentColor. */} + +
))}
diff --git a/snippets/components/KBExplorer/kb-data.jsx b/snippets/components/KBExplorer/kb-data.jsx index 178f9ce7a..cce8367ce 100644 --- a/snippets/components/KBExplorer/kb-data.jsx +++ b/snippets/components/KBExplorer/kb-data.jsx @@ -46,7 +46,7 @@ export const kbIndex = { "articles": [ { "id": "integrations/python-clickhouse-connect-example", - "title": "A Python client working example for connecting to ClickHouse Cloud Service", + "title": "A Python client working example for connecting to ClickHouse Cloud service", "description": "Learn how to connect to ClickHouse Cloud Service using Python with a step-by-step example using the clickhouse-connect driver.", "href": "/resources/support-center/knowledge-base/integrations/python-clickhouse-connect-example", "category": "Integrations & client libraries", @@ -56,7 +56,7 @@ export const kbIndex = { }, { "id": "configuration-settings/about-quotas-and-query-complexity", - "title": "About Quotas and Query complexity", + "title": "About quotas and query complexity", "description": "Quotas and Query Complexity are powerful ways to limit and restrict what users can do in ClickHouse. This KB article shows examples on how to apply these two different approaches.", "href": "/resources/support-center/knowledge-base/configuration-settings/about-quotas-and-query-complexity", "category": "Configuration & settings", @@ -87,7 +87,7 @@ export const kbIndex = { }, { "id": "configuration-settings/alter-user-settings-exception", - "title": "Alter User Settings Exception", + "title": "Alter user settings exception", "description": "Handing the an exception thrown when altering user settings", "href": "/resources/support-center/knowledge-base/configuration-settings/alter-user-settings-exception", "category": "Configuration & settings", @@ -348,7 +348,7 @@ export const kbIndex = { }, { "id": "cloud-services/execute-system-queries-in-cloud", - "title": "Execute SYSTEM Statements on All Nodes in ClickHouse Cloud", + "title": "Execute SYSTEM statements on all nodes in ClickHouse Cloud", "description": "Learn how to use `ON CLUSTER` and `clusterAllReplicas` to execute SYSTEM statements and queries across all nodes in a ClickHouse Cloud service.", "href": "/resources/support-center/knowledge-base/cloud-services/execute-system-queries-in-cloud", "category": "Cloud", @@ -368,7 +368,7 @@ export const kbIndex = { }, { "id": "troubleshooting/fix-developer-verification-error-in-macos", - "title": "Fix the Developer Verification Error in MacOS", + "title": "Fix the developer verification error in macOS", "description": "Learn how to resolve the MacOS developer verification error when running ClickHouse commands, using either System Settings or the terminal.", "href": "/resources/support-center/knowledge-base/troubleshooting/fix-developer-verification-error-in-macos", "category": "Troubleshooting & errors", @@ -389,7 +389,7 @@ export const kbIndex = { }, { "id": "data-import-export/kafka-clickhouse-json", - "title": "How can I use the new JSON Data Type with Kafka?", + "title": "How can I use the new JSON data type with Kafka?", "description": "Learn how to load JSON messages from Apache Kafka directly into a single JSON column in ClickHouse using the Kafka table engine and JSON data type.", "href": "/resources/support-center/knowledge-base/data-import-export/kafka-clickhouse-json", "category": "Data import & export", @@ -400,7 +400,7 @@ export const kbIndex = { }, { "id": "cloud-services/change-billing-email", - "title": "How do I change my Billing Contact in ClickHouse Cloud?", + "title": "How do I change my billing contact in ClickHouse Cloud?", "description": "Let's learn how to change your billing address in ClickHouse Cloud.", "href": "/resources/support-center/knowledge-base/cloud-services/change-billing-email", "category": "Cloud", @@ -420,7 +420,7 @@ export const kbIndex = { }, { "id": "data-import-export/parquet-to-csv-json", - "title": "How do I convert Files from Parquet to CSV or JSON?", + "title": "How do I convert files from Parquet to CSV or JSON?", "description": "Learn how to use ClickHouse's `clickhouse-local` tool to easily convert Parquet files to CSV or JSON formats.", "href": "/resources/support-center/knowledge-base/data-import-export/parquet-to-csv-json", "category": "Data import & export", @@ -431,7 +431,7 @@ export const kbIndex = { }, { "id": "data-import-export/mysql-to-parquet-csv-json", - "title": "How do I export MySQL Data to Parquet, CSV, or JSON Using ClickHouse", + "title": "How do I export MySQL data to Parquet, CSV, or JSON using ClickHouse", "description": "Learn how to use the `clickhouse-local` tool to export MySQL data into formats like Parquet, CSV, or JSON quickly and efficiently.", "href": "/resources/support-center/knowledge-base/data-import-export/mysql-to-parquet-csv-json", "category": "Data import & export", @@ -453,7 +453,7 @@ export const kbIndex = { }, { "id": "setup-installation/install-clickhouse-windows10", - "title": "How do I Install ClickHouse on Windows 10?", + "title": "How do I install ClickHouse on Windows 10?", "description": "Learn how to install and test ClickHouse on Windows 10 using WSL 2. Includes setup, troubleshooting, and running a test environment.", "href": "/resources/support-center/knowledge-base/setup-installation/install-clickhouse-windows10", "category": "Setup & installation", @@ -473,7 +473,7 @@ export const kbIndex = { }, { "id": "cloud-services/ingest-failures-23-9-release", - "title": "How do I resolve Ingest Failures After ClickHouse 23.9 Release?", + "title": "How do I resolve ingest failures after ClickHouse 23.9 release?", "description": "Learn how to resolve ingest failures caused by stricter grant checking introduced in ClickHouse 23.9 for tables using `async_inserts`. Update grants to fix errors.", "href": "/resources/support-center/knowledge-base/cloud-services/ingest-failures-23-9-release", "category": "Cloud", @@ -567,7 +567,7 @@ export const kbIndex = { }, { "id": "cloud-services/how-to-check-my-clickhouse-cloud-sevice-state", - "title": "How to Check Your ClickHouse Cloud Service State", + "title": "How to check your ClickHouse Cloud service state", "description": "Learn how to use the ClickHouse Cloud API to check if your service is stopped, idle, or running without waking it up.", "href": "/resources/support-center/knowledge-base/cloud-services/how-to-check-my-clickhouse-cloud-sevice-state", "category": "Cloud", @@ -577,7 +577,7 @@ export const kbIndex = { }, { "id": "configuration-settings/configure-a-user-setting", - "title": "How to Configure Settings for a User in ClickHouse", + "title": "How to configure settings for a user in ClickHouse", "description": "Learn how to define settings in ClickHouse for individual queries, client sessions, or specific users using `SET` and `ALTER USER` commands.", "href": "/resources/support-center/knowledge-base/configuration-settings/configure-a-user-setting", "category": "Configuration & settings", @@ -597,7 +597,7 @@ export const kbIndex = { }, { "id": "cloud-services/how-to-connect-to-ch-cloud-using-ssh-keys", - "title": "How to connect to ClickHouse using SSH Keys", + "title": "How to connect to ClickHouse using SSH keys", "description": "How to connect to ClickHouse and ClickHouse Cloud using SSH Keys", "href": "/resources/support-center/knowledge-base/cloud-services/how-to-connect-to-ch-cloud-using-ssh-keys", "category": "Cloud", @@ -628,7 +628,7 @@ export const kbIndex = { }, { "id": "setup-installation/enabling-ssl-with-lets-encrypt", - "title": "How to Enable SSL with Let's Encrypt on a Single ClickHouse Server", + "title": "How to enable SSL with Let's Encrypt on a single ClickHouse server", "description": "Learn how to set up SSL for a single ClickHouse server using Let's Encrypt, including certificate issuance, configuration, and validation.", "href": "/resources/support-center/knowledge-base/setup-installation/enabling-ssl-with-lets-encrypt", "category": "Setup & installation", @@ -638,7 +638,7 @@ export const kbIndex = { }, { "id": "data-import-export/file-export", - "title": "How to Export Data from ClickHouse to a File", + "title": "How to export data from ClickHouse to a file", "description": "Learn various methods to export data from ClickHouse, including `INTO OUTFILE`, the File table engine, and command-line redirection.", "href": "/resources/support-center/knowledge-base/data-import-export/file-export", "category": "Data import & export", @@ -659,7 +659,7 @@ export const kbIndex = { }, { "id": "monitoring-debugging/generate-har-file", - "title": "How to Generate a HAR file for support", + "title": "How to generate a HAR file for support", "description": "A HAR (HTTP Archive) file captures the network activity in your browser. It can help our support team diagnose slow page loads, failed requests, or other network issues.", "href": "/resources/support-center/knowledge-base/monitoring-debugging/generate-har-file", "category": "Monitoring & debugging", @@ -679,7 +679,7 @@ export const kbIndex = { }, { "id": "performance-optimization/find-expensive-queries", - "title": "How to Identify the Most Expensive Queries in ClickHouse", + "title": "How to identify the most expensive queries in ClickHouse", "description": "Learn how to use the `query_log` table in ClickHouse to identify the most memory and CPU-intensive queries across distributed nodes.", "href": "/resources/support-center/knowledge-base/performance-optimization/find-expensive-queries", "category": "Performance & optimization", @@ -689,7 +689,7 @@ export const kbIndex = { }, { "id": "configuration-settings/ignoring-incorrect-settings", - "title": "How to Ignore Incorrect Settings in ClickHouse", + "title": "How to ignore incorrect settings in ClickHouse", "description": "Learn how to use the `skip_check_for_incorrect_settings` option to allow ClickHouse to start even when user-level settings are specified incorrectly.", "href": "/resources/support-center/knowledge-base/configuration-settings/ignoring-incorrect-settings", "category": "Configuration & settings", @@ -707,7 +707,7 @@ export const kbIndex = { }, { "id": "setup-installation/how-to-increase-thread-pool-size", - "title": "How to Increase the Number of Threads in ClickHouse", + "title": "How to increase the number of threads in ClickHouse", "description": "Learn how to configure the Global Thread pool in ClickHouse by adjusting settings like `max_thread_pool_size`, `thread_pool_queue_size`, and `max_thread_pool_free_size`.", "href": "/resources/support-center/knowledge-base/setup-installation/how-to-increase-thread-pool-size", "category": "Setup & installation", @@ -717,7 +717,7 @@ export const kbIndex = { }, { "id": "data-import-export/kafka-to-clickhouse-setup", - "title": "How to Ingest Data from Kafka into ClickHouse", + "title": "How to ingest data from Kafka into ClickHouse", "description": "Learn how to ingest data from a Kafka topic into ClickHouse using the Kafka table engine, materialized views, and MergeTree tables.", "href": "/resources/support-center/knowledge-base/data-import-export/kafka-to-clickhouse-setup", "category": "Data import & export", @@ -827,7 +827,7 @@ export const kbIndex = { }, { "id": "monitoring-debugging/check-query-cache-in-use", - "title": "How to Verify Query Cache Usage in ClickHouse", + "title": "How to verify query cache usage in ClickHouse", "description": "Learn how to check if query cache is being utilized in ClickHouse using `clickhouse-client` trace logs or SQL commands.", "href": "/resources/support-center/knowledge-base/monitoring-debugging/check-query-cache-in-use", "category": "Monitoring & debugging", @@ -869,7 +869,7 @@ export const kbIndex = { { "id": "data-import-export/importing-geojason-with-nested-object-array", "title": "Importing GeoJSON with a deeply nested object array", - "description": "“Importing GeoJSON with a deeply nested object array“", + "description": "Importing GeoJSON with a deeply nested object array", "href": "/resources/support-center/knowledge-base/data-import-export/importing-geojason-with-nested-object-array", "category": "Data import & export", "tags": [ @@ -878,7 +878,7 @@ export const kbIndex = { }, { "id": "performance-optimization/improve-map-performance", - "title": "Improving Map Lookup Performance in ClickHouse", + "title": "Improving Map lookup performance in ClickHouse", "description": "Learn how to optimize Map column lookups in ClickHouse for better query performance by materializing specific keys as standalone columns.", "href": "/resources/support-center/knowledge-base/performance-optimization/improve-map-performance", "category": "Performance & optimization", @@ -1008,7 +1008,7 @@ export const kbIndex = { }, { "id": "data-import-export/cannot-append-data-to-parquet-format", - "title": "Resolving \"Cannot Append Data in Parquet Format\" Error in ClickHouse", + "title": "Resolving \"Cannot Append Data in Parquet Format\" error in ClickHouse", "description": "Are you getting the error \"Cannot append data in format Parquet to file\" error in ClickHouse? Let's take a look at how to resolve it.", "href": "/resources/support-center/knowledge-base/data-import-export/cannot-append-data-to-parquet-format", "category": "Data import & export", @@ -1019,7 +1019,7 @@ export const kbIndex = { }, { "id": "troubleshooting/exception-too-many-parts", - "title": "Resolving \"Too Many Parts\" Error in ClickHouse", + "title": "Resolving \"Too Many Parts\" error in ClickHouse", "description": "Learn how to address the \"Too many parts\" error in ClickHouse by optimizing insert rates, configuring MergeTree settings, and managing partitions effectively.", "href": "/resources/support-center/knowledge-base/troubleshooting/exception-too-many-parts", "category": "Troubleshooting & errors", @@ -1122,7 +1122,7 @@ export const kbIndex = { }, { "id": "general-faqs/use-clickhouse-for-log-analytics", - "title": "Using ClickHouse for Log Analytics", + "title": "Using ClickHouse for log analytics", "description": "ClickHouse is popular for logs and metrics analysis because of the real-time analytics capabilities provided. Ready to find out more?", "href": "/resources/support-center/knowledge-base/general-faqs/use-clickhouse-for-log-analytics", "category": "General & FAQs", @@ -1132,7 +1132,7 @@ export const kbIndex = { }, { "id": "queries-sql/filtered-aggregates", - "title": "Using Filtered Aggregates in ClickHouse", + "title": "Using filtered aggregates in ClickHouse", "description": "Learn how to use filtered aggregates in ClickHouse with `-If` and `-Distinct` aggregate combinators to simplify query syntax and enhance analytics.", "href": "/resources/support-center/knowledge-base/queries-sql/filtered-aggregates", "category": "Queries & SQL", @@ -1175,10 +1175,12 @@ export const kbIndex = { { "id": "general-faqs/columnar-database", "title": "What is a columnar database?", - "description": "This page describes what a columnar database is", + "description": "A columnar database stores the data of each column independently. This allows reading data from disk only for those columns that are used in any given query.", "href": "/resources/support-center/knowledge-base/general-faqs/columnar-database", "category": "General & FAQs", - "tags": [] + "tags": [ + "Core Data Concepts" + ] }, { "id": "general-faqs/olap", diff --git a/snippets/components/QuickStartsGrid/QuickStartsGrid.jsx b/snippets/components/QuickStartsGrid/QuickStartsGrid.jsx index b31b7cbe9..7dc34e2cf 100644 --- a/snippets/components/QuickStartsGrid/QuickStartsGrid.jsx +++ b/snippets/components/QuickStartsGrid/QuickStartsGrid.jsx @@ -140,20 +140,20 @@ export const QuickStartsGrid = ({ quickStartsData = [], featured = [] }) => { window.location.assign(withBase(href)); }; - // Featured quickstarts, in the order listed in `featured`. Each keeps its banner - // image; the href falls back to the conventional quickstart path if the data - // hasn't loaded yet so the cards are clickable immediately. + // Featured quickstarts, in the order listed in `featured`. The banner art is + // drawn in code from the title (see below), so no per-locale image is needed. + // The href falls back to the conventional quickstart path if the data hasn't + // loaded yet so the cards are clickable immediately. const featuredQuickStarts = featured .map(f => { const qs = data.find(q => q.id === f.id); return { id: f.id, - image: f.image, href: (qs && qs.href) || `/get-started/quickstarts/${f.id}`, title: (qs && qs.title) || '', }; }) - .filter(f => f.image); + .filter(f => f.title); // Always-visible filter group (not collapsible) const FilterGroup = ({ label, options, selectedOptions, onToggle }) => { @@ -209,14 +209,29 @@ export const QuickStartsGrid = ({ quickStartsData = [], featured = [] }) => { onClick={(e) => handleCardClick(e, quickStart.href)} className="group block rounded-xl overflow-hidden border border-gray-200 dark:border-white/10 transition-all hover:border-black dark:hover:border-[#FAFF69] hover:shadow-md" > - {/* Rendered as a background image (not ) so Mintlify's - click-to-zoom doesn't hijack the link navigation. */} -
+ {/* Banner art is drawn in code from the title so it + translates automatically — no per-locale PNG needed. */} +
+ {/* Decorative bar-chart motif, purely visual. */} + + + {quickStart.title} + + {/* ClickHouse wordmark, inlined so it inherits currentColor. */} + +
))}
diff --git a/snippets/es/components/KBExplorer/kb-data.jsx b/snippets/es/components/KBExplorer/kb-data.jsx index 0301db091..bae6dee54 100644 --- a/snippets/es/components/KBExplorer/kb-data.jsx +++ b/snippets/es/components/KBExplorer/kb-data.jsx @@ -706,7 +706,7 @@ export const kbIndex = { { id: "data-import-export/importing-geojason-with-nested-object-array", title: "Importación de GeoJSON con un array de objetos profundamente anidado", - description: ""Importación de GeoJSON con un array de objetos profundamente anidado"", + description: "Importación de GeoJSON con un array de objetos profundamente anidado", href: "/resources/support-center/knowledge-base/data-import-export/importing-geojason-with-nested-object-array", category: "Importación y exportación de datos", tags: ["Data Formats"] diff --git a/snippets/ko/components/KBExplorer/kb-data.jsx b/snippets/ko/components/KBExplorer/kb-data.jsx index d38cad3e0..86d266b89 100644 --- a/snippets/ko/components/KBExplorer/kb-data.jsx +++ b/snippets/ko/components/KBExplorer/kb-data.jsx @@ -706,7 +706,7 @@ export const kbIndex = { { id: "data-import-export/importing-geojason-with-nested-object-array", title: "깊게 중첩된 객체 배열이 포함된 GeoJSON 가져오기", - description: ""깊게 중첩된 객체 배열이 포함된 GeoJSON 가져오기"", + description: "깊게 중첩된 객체 배열이 포함된 GeoJSON 가져오기", href: "/resources/support-center/knowledge-base/data-import-export/importing-geojason-with-nested-object-array", category: "데이터 가져오기 & 내보내기", tags: ["Data Formats"] diff --git a/snippets/pt-BR/components/KBExplorer/kb-data.jsx b/snippets/pt-BR/components/KBExplorer/kb-data.jsx index 156ff4626..b9c0e73f8 100644 --- a/snippets/pt-BR/components/KBExplorer/kb-data.jsx +++ b/snippets/pt-BR/components/KBExplorer/kb-data.jsx @@ -706,7 +706,7 @@ export const kbIndex = { { id: "data-import-export/importing-geojason-with-nested-object-array", title: "Importando GeoJSON com um array de objetos profundamente aninhado", - description: ""Importando GeoJSON com um array de objetos profundamente aninhado"", + description: "Importando GeoJSON com um array de objetos profundamente aninhado", href: "/resources/support-center/knowledge-base/data-import-export/importing-geojason-with-nested-object-array", category: "Importação & exportação de dados", tags: ["Data Formats"] diff --git a/snippets/zh/components/KBExplorer/kb-data.jsx b/snippets/zh/components/KBExplorer/kb-data.jsx index b097b1838..1c250a3b2 100644 --- a/snippets/zh/components/KBExplorer/kb-data.jsx +++ b/snippets/zh/components/KBExplorer/kb-data.jsx @@ -706,7 +706,7 @@ export const kbIndex = { { id: "data-import-export/importing-geojason-with-nested-object-array", title: "导入包含深层嵌套对象数组的 GeoJSON", - description: ""导入包含深层嵌套对象数组的 GeoJSON"", + description: "导入包含深层嵌套对象数组的 GeoJSON", href: "/resources/support-center/knowledge-base/data-import-export/importing-geojason-with-nested-object-array", category: "数据导入与导出", tags: ["数据格式"] From 175ae9f23910069430ce2924a17595e17f60183f Mon Sep 17 00:00:00 2001 From: Shaun Struwig <41984034+Blargian@users.noreply.github.com> Date: Sat, 27 Jun 2026 17:36:11 +0200 Subject: [PATCH 2/2] Remove orphaned featured-card PNGs The quickstart and KB featured cards are now drawn in code from the page title, so the baked-in banner images are no longer referenced. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../knowledgebase-featured-articles/kb-01.png | Bin 13675 -> 0 bytes .../knowledgebase-featured-articles/kb-02.png | Bin 10034 -> 0 bytes .../knowledgebase-featured-articles/kb-03.png | Bin 12277 -> 0 bytes images/quickstarts/featured-quickstart-1.png | Bin 12564 -> 0 bytes images/quickstarts/featured-quickstart-2.png | Bin 12140 -> 0 bytes images/quickstarts/featured-quickstart-3.png | Bin 9390 -> 0 bytes 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/knowledgebase-featured-articles/kb-01.png delete mode 100644 images/knowledgebase-featured-articles/kb-02.png delete mode 100644 images/knowledgebase-featured-articles/kb-03.png delete mode 100644 images/quickstarts/featured-quickstart-1.png delete mode 100644 images/quickstarts/featured-quickstart-2.png delete mode 100644 images/quickstarts/featured-quickstart-3.png diff --git a/images/knowledgebase-featured-articles/kb-01.png b/images/knowledgebase-featured-articles/kb-01.png deleted file mode 100644 index 464e4770df27732f5f036590429e71cc6d371e76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13675 zcmcJ02UJu~lP@_940#9=L?w?TB?l2il#HZHo*}3t$siz61_VTqq#!|}0s{;=NEikM z$p|v!BuN;Oc&grVY9jdE;x4XKl?hvJ?qfSG`PDMaKKy&}z zod*O2Bq#y`qFf4Me2JV3**2a@>1i3N9iKa_Y}ob;n9eL%Lzr1qRC$Gk*qxkjnweb> z2$W}KB`85@H8knR#NHa2uuRXoyR~P3@cS{p(*Pv_!OgAvcWxU#9bdziQxaUJR=aHr z89042OnK+_Jx>$65T>jV{3!q8Z}#2S>)Xd*QQ{)IU`8u4R%l421Bw7a`W{d0|8FuE zJ(wVWNC<|A34$kjz~4mTf0e=aC!hlTAsFe|EmnXKYnU|NX(SnxHcUb zTFgviMU0|q^SnZH@`qtgqMgB5U;S1Ak9gAWqyOts`}HQgi!el)`JXQsbqXGblvbkW z`6z;mgvS#N6NFwQyks)XzY-Nl4EQTuwEsu?FZ-}T|It(rAOroQ>AxJ}qIs>Bdqxf_ zr1wARLdpt7{7C|T6uMCAAHpyAKZH|bH(87wXww3MV|1ygv2n~PVZ_h(kQfO7hQbf* z@8TWJ>ukYj&Qge?#?F|ur$1QzfP$Cn3NDV>3qhan0r{!p1rZ&BmU3Ukow4ysjch!K zJy&ukR^7EW6^l%ftPGYnPfrUUj(W>-E(A@EY{mLnq(xSjxx7*G=55S;s6b^>EgP8D zCbx+D!UjcDueWxs+~F1(emY+z&n3yC8@uvYNq+QT#bR3f;CE~OlXQ&y$-_@L0Sc0V z+m8+@u56u&etKubH}@(&;ro=N$Jua~S^%!IwT3(KCPd+PFcKITxCRS_Q6osxFlmUr z$8Z;*ylX^LTC{*OmBw*xFKd!Q)Qw7xPO2PK^_bi7X%UKA!T_j5SqVWSnacw**7WFK zyX(Dv%>zqlbJ``-mVlGLQI8Fw-%wsB^=?7!5+kZN5H}H$ASa43UFuM@beZ=MN3BJn z7QNK3=ZG%=Dfewm!_4h2`DtEg9O;fS+!PAEkl&2D;*6xMRB5l;6d8U*F9L~)LbXW& z0CizGqof=8ktl`mL`A<6UN9~LBXRhAAcpa}MD(v%-w%B@@7@Q~Gwhdd(OYphcWr&g z5ZU_?o+`jo1(Bw}j5)moN!Y;8vKON-%8-jbae-@(;WX@5%39582^CN%R##*!6%2xf zB2B2ebCpy2uE=ZfF-qS3EG+5BSnIMA`Z)(>4(x|J_BxVYRj5V1HN`7CEeL%cHqb3L zQd)W1(1Zm^MtpvF)lRDzwZP=(ZpN{Fi&q!ki-*@+`hISRzgh17>G3Extn|ipQ@d^S zazOIxE)=gC9@NWt3^dmd4EDbYxI5v5;zbg)q%|}g#NF`&8QD5rOKd(3_>wmmk6Ji< zR*9<6sHG4tzF9YNibyuhMC=LS!8^Rn*(P8oC0_Ub(@co2P2#Q<#|fDclM@D}bEaU$ z$&*tfZqlD>cU{prSUC`y$k&sWwWd#u-8VCPkRI5LXg9^v;^OZNhOw@X?GjB9N@0gQ@ZeGFp8xmn4D<&i-TsrGS5U)`&R4WfM7H$HJi z?#&PwpO{hRDP@0ej7hhoL!Hz{gNs|zhQiR8du&9)_1VdU*ro7X1_Lfeju-4(rewxE zhjMRsQa6N9`%ekFONpI$>v#ncIfTNxZA9o6T}iM@%c{v8@F{ix5FQ^%ORQqPVaRXIEgp|r)A#(cFSYAn2`h1D-&eKJd+zf2p6jlf>R`-pck%X;taY+hj z>d1QsRt~g)0O8+O0UX$pP=q3;Ogp(DVN@?f1NCl>LA!dnUW5R0tR&~mMpK_njVAK# z{#js#QZ=NUCPNI#YPvnPeWTWD>9~68OZ#k2ED;fo-fm=kt7!S zWeN?_H}gMkDT0e-@9w(;2c(dFisd54s^5|G{3Simwm#mz`RvcwGMo)ypd>`(Boer! z#lQabQv5In1jf8@P|N{Q+ds4*4%NONLP zo22Cm;}6!H^C_YqleOc1Tax5qFY^q*!n!ovp=#p8%HK(0Y_I4E({yD@8;1`FNDUd( z=Wjm2o*z3s`D(F%BGc96{h3IJs;OmQmzsR6Ztmzl>lx#g^X$jZEMno5pq~8qXEMkD z;_mJ~MFB4-PmpH!;KM%VGciRuo#xWuCDhAD7EEMaQUWEf&GkOyKK~h>otXjCr3WBL z>by+L1yl~3(*U&}3B;nl_V9&m3}LB_{S(PlS3=`et-JUAE*402D_}*~)-Ty8Q`;}m z3L1?VBGYfp^Z-UhzNx|Y)L{0`j*zDNRKHA?+bWc_2qAs%+hSKFA{Tu_sFwLo(NWWJ z7=~Ed&J!6v3g@*Uhl4t&IxrBL!42Vx^mc+7ajfzo6=LZ$qi z#{HR51geg&sgN17M21nmfm2MMqKYMF?KPjJt{H*5Jtpd735`QQ9mVeN_Bb71HyE1z zCW}-PHkbeD4)~I$B+0TReK30KG{E#&*V=R-lo<7yD0*9-Kh5kES5|OuXqv2Mw@aUz ziIP^?F<+a2f9on5+|8YBwSc;Eiycl6Ff*`|*i%pE=7{BUiYy?|8Vbf!`1O5>xLZQH zp)T99w0Rvj?J_Qk^CUj0Sorx=vKPKmWMim9ZY*1qyr+nJecu;IC*+xPjELbdUNjFN zgxUX86UzOns?R#O9{FH?ak`Y;IQ8*D#P&Su34ZlIxwFZb))^SPRIhWA|LyLgz)#~- zSsT9(-M;Pu2IR&ch^59GZ*`4Y5SQ~$?IKz~YHQ3dl(_+{GODm_3f4TUr&QIfvUF+V zdF8J4N)f~PnHaoWDrjTBOoZsBvh`|W*1^uaaJ9L;$2QpR{IEn8C@><2ELiT>A9A@m zYSQc8@dYT%neaZk*wW!E)1J$^@pdHuNAc}%c>_sLYhi^H4VDmWw z3A~7Lgw441qMmee%R*Zm^&T|0Q5f*gnYx6QZOTC#7=R-)*rHle=8Hiefoi0`EGoxP zv~3=>0YWZBU|d^6q+{wDN9#AdcTS3FUS00y3rpWk1PiapCGBoLRAII|Oego7hQAKT z4{B;#T}cyxOIy8nzEpKcfC^h6#>;sELh5WFavC+wR?A10)iWFht`Ak2c&N@*wM830 zPuS+v;)*!0qdW17T(ojLPin)Mzm(7q()o$T1eqQBz`o!uDg^jas50F{pZOFi{~YGQ z@pCUh^DMn>TkQGqP1Ks98Et8ZwNBD+1lZ|(j1}_3*yPvhp!m8ZDpO=`9wo9$zv{S6 z9E6a2sJ<5_GY~bfafX2-cHU?f$^u8&fLn!euoi#B#Ky*%=* z@$BzP+g&p>$lcGVC$!Ke^%p_pMLmyC1|&%5vsSq66`&z1eO{Zv=lA7kk#f-_V`KOB zzeq=OYA)U@ut5HWDPCLObXl+<s#8idg;<{X1 zu*Kxfk(*`2*!@MX`8yn!1AtcTjLtT*Yo~aO$gs73nog}O-dU_Rew=NNtJ>0f+Oyzl zJTA;YYt#cFPsDYUIOW-7SG!B#I;xZ$5@g{MM&l;6YZ_^k?fjnm75perP(va`M7|vC z;d-9YMg{vs3NxA;bK;KlHh`@!*mXWG*I1ns2}f_?o+(9mE26eW4Ceg9Q%~2AYuYNd zRw6keC8)1$Z0kWkKzWo|zCi5Wf)R1b=I=`1U=Hkh2x7>r_WApwudhWh0teIE9#VfGCwq(f)V3N7*=@BQv^(Ublnl!PkJWBFSvD7vaw zJ~guI1mI3MsoxKZQWnmjQMlh$m;G(HDA%Sf>1Kg1f;heSsZdHf6|`bf=+&MnEv^7P ze&6;^5~r^5l8>`LfwQ+Y)5J0EPFHx$Henyl4k!T<^VI^< zwq3WKWva~D+b#lE^7!i7^JOb>z0GBVS2H^12-Q`=R?TiiW;KqnFl~#|F!Sk~(cj;5MtPOs#p2D-ReH+#c}E*nBacr+%Q&z6MPe|hUpQTZz~Rc_6$_T2ux@e= z2rHN8l_S#q6@7VkKaP4wgR*BSp=xWi*yY}SUsB^Ct=MV)s@Y+LMN~VtiR-5@=Y8*$T-w&DWue*UbYnrEkqJ1O9P( zn~Vtz9?=cAMn)7V0*~U`%)-XsXoDBzi9pw}e6QJazVkPPj}SVIeP51wb){?VVFONl zSL)kP4xv*a$MK(qUBZv`%q}IdVJ2ThsH=TvM@MpCAMCzzfU%QFbGhxzHS5$t+YeG=ZHUPbM4@nEw&Y(nVOxAb}CnDX60 zx8_iCD+Wg6=cDo?ydCl)1o zwcsOYc8Xp^QD>)8Wa-pQjm_#wV{Wi;!t@P$C$7$`rBN77pl0a)p{I}>5`S-PDPttj z=8c@?SaaO-43`A=)pIQGB$O{$3=U3iT$b5X5imeNjysDq8;2(m3D}{#9y}jRbJgo5 z2V}n6?j$|2}GlF+ODAfu$;dsQ4BZ+og;9;{-$R}!-sl*+O2*l#`>SfT{QR@eAf#gfvC{~ z|71*R-|+VWCN<~IjP(%g-kBDAq(q>!!>lNgOBw%IQnit%f~2By8lqigf57U}nxO-XezSvfsc zNZwjhj^;hPmPsfckt?X6kijM0h$WxFJPuj?$M?ydqnU6JiF^l4v?+(QiyE@|DLvgJX&3rhn|}l69|9G zNqgX{{L@oQ@L`Lm-38$CyK&$9eSvMC2*IylVLh)#hs+1mHBM>m2X$$+jB=Itg*YL$ z023!xJ+#`P{9&RCb4j&Qbc4>dCa)j3F=q`g{Lq0$_JSkDv_rvejfNk=%Vr&Wr1{@f zarrit4|LvG*>eK^O}D^EI8&v=21KnPmGW-*Y+j?Ez!3aY4p!19yWFe#^oC$o-a|wSe0Z>`(|^|YSFUz7W)njEq2Na zIhk~td-UV*CTf6N4caiWs@?Wu!iq@MUsx-04;Lb7^|ti>bmN=wqcm5~uHzUvX<`#==QzZTp?|(r4FC=BIYAp|oEU){yNmCj-yc;Kd~kEP_ft!~ zqVegy7YubqV~w5H@w*;N3gdlFRPg?;xFs|1sqkgk;KWfR75bo~3adf+O@JMp9M82YAJ zFM0Un#Kod;FNDP*Gg=QzpUh-KSQlqMrvSnOQ>eD+ZrMiBpXD)Zl-+XFo)DNh@%W8L6-GILBrKfHApHb38{QcJfh`;<;HvVA9iI-q)1xpek( zt8=gF4J$t@9_5r$g6ZebnYR`^L zE~A2(ftXC0XpPwTbiyc65ZP8it{S{W!*k z@571&Z=xzW`cWIRB;r?s34v^>_;+ULuK6a0El#Vk@cMfdDn1WfCebU@z|e+OTjY@- zj9357(#N>>h&0TTUl;4rTJ{TeJ|Sw)&ctIx3k(hUEKmG<&i9)%;n~^8#{t4B#!Y`3Z@%C#wwFH9nQovHg~IsyzjB3IDkH2vi$3o>KN=ty@l z$Z+tzxT2#w__Hh9cdH~0H~CJqt;6}rkA7(b>IaxtRm>q?>1>zd-*J?PnJ$`DmsQWx zySVtQdXPa=-+9xK7_%LtiI5X1l2e6!nmfixiBs%FYvYtSr3`}Zuhywec52rOUHIRM zM^-T6vGNY-^l#98ZE!byYmed=Q@W_?y=&;JhmE(p%b@Dh2vDJ&6FEO+S|K@dz`Y2> zrGc>Dwg%1(iepSo3XH}= z?M1cb?!e$}?@ua~O_%{AaIC?8M{c{|6Ip?@Hq69j`wu9|?~x&kI5pVyf`FXzL#gtM z%RpQ%AqV&c`?FX5E>nszDYvZ|pGNr<_=anSC|j&7nQ+YnbM>S`IDr~z2~bB@ze$K> z`129(z?VI|Po0z>fxFWfqo|<6q>68_unEy(SIY}nhj*34YKG35S#l|l-c*aaM^N8p z`UZ9!%~P)?%O@*RMGwpnMiyU(IZIKtdeOOT7FuaqWpu1rDJuPVzise1;)eAAI zDmyVZ-)|?P&D6|E62`xiq%UPMwu$n|zVq8&(z;KcLL3oH4SY>RejbHUDDb! zg(3Xe^9R=z9Gkx|*Ubxr?!_C_?MlE%59`k=-W>YFXkv`+9oM6``w2lOm5B4_bSIG< zDYC=IP*fwAvB}*-&el~@%}BM#d^zY#+uW{1baV*O6ddlndK|x1Y8E3fb_q_#?HdrQzmu!2so;@nmbO`aJ>d2L|% zSXe@as!dfmS>;e$5h=xJGg6=agvhW#6$Cg&94dL6=|QGmw?W*HN5u_TSYoStOhqqe zNRkK6L0usQCm&Wx)f<)>cNqExHT9~OS86CYDrnvxJRX= zRPCp4Us_tu80AUOi$kkWhv$`D8DY7VwRuNhi5l7{Em5rY+Ko@;23qkgD}Ep9$bCXa zFV`PB&J72!cnFHe#wtFtv&jE8;S{#Jy>I<%ycGM4`lD9<0$uunk3NxQsbbB$jW={d zhRm=zoq>VIkx+z*%~WaW>^sMf7+5EDGpp*N{ig+CbeK7PUud<=5K*9Sjr$^WZj&^n zIo`>!6wWL#8K>Ca^`4kRxsw0OQa~Lap+d>vJ*AT7mVH@)RQp1gWCaU97C@r9U~Xp! zjY+J%dZ*X^)&2f9kFIT=w>zFJAqYq})c>2f+}nIa!@I_2`CNN0Y#F(+Ym9KrC%+y@ zR~Se0DwFErVM@B=rT3a8(jTM}$)C$^&?_J}UQEiZ%ah;5!9E||z4dd53iUGYZp!K* zcZiWl`>~B@){j8}LCq7kudXIl{PkcYpFm*oM^J4r7eq0lZ}slGH~uYwx8JVlz>IeI zxGRKd%tmEK8te#9N+ZIr^`q|JBdoaX7=~+VYJbC8=~Cbpw|!QnS@Ox7L&7#B-*7fd z-Im|Jk@GED`ZCI=Lbm+}p*S}w_G9xCXBF2suv)Um`fr|VvN}{2PWJ&MzN~|xh$mvV zzcoKwCpJUY?r+i0{QfN*ig4Ofq|49GTQXiBR42tSp}eVI_3Sor$ESS}=qh>e!=tlL z>ayPH90QWzXbwKCbGcxEejhH|tK%b3X zh=msYE5k{r=%Ahgs-XTol$6+y_1nIk@Il*g2|6vmDL`ZW*3DAKmPgEeb6&}9GKQ_E zsOT<&WHq19LGKek>Kso?;D^uiI*uc9V*WCV%^w>jLXV>(^E%TG{J;RnZIKB8%ROP3 zigWMyW=#csW*jr#+16O_1!H7c-!0Ec8nO zHE;*6Cs?IGap8>?+>G5rgrAnTHUTb56DKy! z0@CD=H4$^QYdvjSL@-2RdZ%o6Q1>GeY&)T!?aJAeZSc{6*atM`zIy5enxTA}S%z?0 zNVc&wXyIKJCGwV;O=ta`IyG-r1Ij*mmRU_BZ=qJ%Wfh&BEuL0Qfp$RUt9!EtR-#08 z{Z=jSWT_y_dRqJLVR;p}$SpEdGMQs`*;=I0>v5KG=R~hgH$j>KxbG8Pmtpp4vzlg) ztPG3CtApe1-hL8nKcftiTbKlUP_*5ejW^P&SdivbfQt*!} z|L+3+P0ZJCkGFHFkR6n7*y7xJpaXnMd|kk<5L8e$`+WrOlSbrB>A#c zY5dJ|qBU{SPm+=7!o4x+YR=j^_G%G}lGWD>HCkR%)EW!tto*BI>1lZef()HySc}iAHP1DnSo)2Yu1Wa1^pUKc-E1zmMydZt43BO zYuh!l3#=XyIGuL=F79kJ03x+xA|1LmNwGYj=TYky3fv+=%2`?clI}Y#-kKs+9!}M+ zSw+hgE*FPN8iK@{fYd#e6V+@V!MoiQ$e9h4@qzjhkGnL&wvZJ$*<4%t^6(Pv)LRMJ z`qKw;;=qgdtKtvB(Onza%*t$2#{Du@gxDX`H-*sb5LU*!2Lm@bZl!LPEG?4Fi0x%< ztgU4XltQOe7TryMcwVXbi3$=$-6amw!~W>e30gh9d#EbPD(8Jepo%$`Fw}b~sX$e6 z%8Lp~|B{gal##96`@S@|FC95%H$*TV?Oag~es6{xyH9j5d$D-^(d-$7_2s9R{D2ar zMx+f_f>B#)6BV>6Qw~)`{_F}$tlp=I2>I+ImDRdUufC6?7|k`Uk_!)>0MHmr%6rx3 z!LON^IA*v@Xxl`A@0Lgfja)IJfFh5c5&~?1S7SM;(9sZ22Yuek&;Nz;aOVqrE<6{Pcc*LaRsX>9?%mmX0QQ?ePj z8@HmdY|hd14qJ>K#0h%R0+NJUB67$h4q%^J;>#{mwWOAXn>OAL3MC1f6)@eB{_POQ zaA@_-9u}*i=t2u5qN^LB5%&FhNz@el!p38@ha17HejnP7V;yMr<9bwWT(?>0#eaB! z<9|&dGLifzqgtXQDHHTvvZC$joYJ5=HD+KV)f7`ANwcu2YW5~P!KUU@1nG18Zi`4c z(n>)_MK3^$V?8!ZtFRUu?QxlqNYjGCYSN9tv#g8&f*rb!4`>C%AUaCo2L=csY1+Y* zK*F-QNXnW8KN)J9O23Z8+nw3QJLTtv)$_>;*uCtXUqiSikif+ zj2z@guw^u6MVAw(xM{oxaNzRq>b&g`c6q5)Urcjx`@O%>*9-K8qbqj4WT4h?A=PW6 z&-wVIUxDaACZR^p>&1d85tq?5jnzDvc5;wJvZ-QLdR!C8V(=awzH0tydzaE85Cw8^ z6uESa zXsR~+7T#Qqnwr75GxFWMjC$4?e6~1CvMs9D<@A;?R40);x8=F4U5zbb{qd@3R)svh3S}!zT^a+c*j;7prlvefZsXJr&MQhF%i9AWKtRJHX`|SonA*91c3q09b z!)b_VyTY}WttG7$yD!OjHy(l!M^j$Cs%B~R%y%c$D9V)3vj^v4U&^X-Sx;QTI zUR=^GLD0dkYJ8@J0_t8UB!J+V194!rZR33cWuO;ZNr@9s>lf#o!}XJ;L@C0Kw)FZa z3-I4{cpuOBPt%QJ0fR$B;+}m zuArC%(JEyomuWTKQ`xJZ$R13VUIcUPFAP-s4O$k${kU-44! zwg)Wr4E9{1O{`7r>)P8LnOH5t1PVD**WF_jj|Yhj4Te{NC) zkUL-XeK>ByR?M3Eia&(pUmc*;hQYU-NMNUNP4c5IOl0o`94`}^E2GcPD~Eb7=SRqV zyqDqAXX-V4S0K66YO(7`1=SAJvt6mJRdw;xF^@h2bz>NiIWpSF{UT~(OP$)Q2O{Yd z#wCFJ6s_^t{M;Z+GH|^Dy^;~Yn$l(^d!-6R;`BiV_rxqh(lE?uXoIC7%TtCPIqq4& z0S+_TNdMIZL+l&G9sgM5I+(J$g;_fEPqni)1;VPW)7KA+WGas}P##>H_N5PekCl+e zp3TSgUK6{$h}PrD+<;3|ek;XIVC@FxoML+@v{g=|@8+&9iz>p66?wzs5~2ef2*E#;0&k4y6RW$PJ}I*@Bk2q zQ5XWj3s9uM@Y-K+1Of(!Q$p~0ND2(k?cqEC0E8i6lqvXjcy0<%K=4&O0KV$iPSw2i zhB*rq6ccRKC%drbqu5%3BETnQ6nT2!)lKa zFYdIB-m+GFyF>ARr{rIX>U8pxwh}e-1Iv_<%Rm?@9)}P-4440=VWbp)it%`b{wc;6 zq`-bfX2{X~`Jwc7uuC`vjT118iZH@6NhI8;jolc}{w}y+e-&J?|F&TfoTiu^iz@ox zOZXp#as=9nA|#QH|1XsNuZH?dd;BCW=KnuV_rH?xKLGfb_H9CI=@SY00(5G(!|-jBjiTUTf*|%7tTk3jzUk6vb-?8!R#*$> z(O>RSAoj>9i}i;e)95pQN;Ed=_JS6r)v;1$qs|QBMpQ9$R5(!vhyYYY0LphksA4Gb zWigbv8A?z!HlMWa&3CibVQqW`u9hE4Eq-_NC7*OzAhRvhVk#VygE~78C%v^GmH$2Y z=WNV3CD+W7iH5B48>*X0ZiC3Z9o}f`TC_L@YT_(A*>iR09daHY8wTd z4d1&E{e};EQ=itW81%ed6G7tnR(L~&X&JE<$@WOSD+Mo#eC4l^D(?YT~_7Z8rI!5m+icpEYd-hd)=%Vr%ZxDHdpNe}6Y zPF{HLxV0+{7?_4*{OvGBj2jd=MNezpA=tMM9A~ND-?!QOMBfokiW|aCgp+3F7HQN* ziGTQB-!z3`{}}k4(qY6t#B5EgC$sCyf;(mL-Pcdu4PvA*n2M6Q-;b?U^?}@v?cb&- zKwm4sE=}+5@5DZF36&)KmJGB!vAguO10Jp*0yp|J3%+dWW7aesDH*Nv;)P=^Qy0$9 z!A%&cKpSflX*feA3`ENC6p>1ydgc={=z{uU;v;#H#i-T69aT&iOEI0}o~k1lqhgrs zwnObySfEs{?HX-dKOYo#qwl&ae}^=tB50*p4wcv9{hlqxm56?OH(WB>@-Q9M!^w4Pqiwsh z)HN~76v5o%9jSD57x*R9QKu$#`Ii%8xEMSYW%f)9kP?~e$k_Nm4tshPy3oYfIPAv{ z#j&0QE}OJ`7SA<^wRjn>AP?tx#t(OaFQ=n4YF1@*GP~|dgPdMJM4RfEz)Q>l$rSe$ z3uxN)J4SOipel#dxJ&&gvGng%Od6Um4#rWK^l>Qgw{U2BYzg5WLXt zUH|-=jQ~tYkHsqzsDu>k(28Ib_2bA5dzYWV~@M!U&T`+QaH%Rnd`U|OU zFYkk+dmWkUj-u)Kkc_5r?L?)NP7{cYhdS0yA3a)z0`D79y0yQFPVv7gB~OLi(+%*g z$`zm{&@;UGfJ9>jzvT<6y>7BgpDaD>yU*8J;PdS5q!$HjW5n#csjB4(@Qn?MYHP68 z5^Fy-Tw8vN_mQz_)dueOuN#&xKRomjg=^b<#EH&}%MM>k$936)j9)E73g)xER_xzQ zFH&?#AZ-bXOrCJ*HK;>4q<0+1BNdbG^R!Rg)Kvu3kv}M@hsaf|f4`9zYa{W|d zzs(!hD!031J~T-Q8HF>qN$mN5_LWE4=w27F^$+^-Ge5KDoC&Fr=U$4b*Z%5P*gYJ1 z94o2ky}&9zwH~;}P9FRc7HPEOZffw-VQRdRwZ;WUe$u~fuQTChS>qz(UpqV>h*K?d z?OkRXl1p0Tj{IR(U{M44xG%UL>ELH>qt(5XCqD}3^yph${)n0XHlLR@QqPpfy>wQv zab({daGJc1q8-jsxBq&e7s81@2Cb{w@MkUZ{0i`#6GDMyA;&SOyjYxtsC*oG6hYUQ zZ^uL8TOR^zBEe16)sm9nG@lReTr;^01kZ2ZRYnnzfastEtweOtKY2X4$m0nK=pxVX wS1}#_7V#en4r#Vqew_yYi+@Y{?}};92twZ!Y)#Juz%QEJSJSyussao9Kb>`7!p2O^jo7kQ(8E{*#|8NP~j*n{Of*qGY)V^6MRN_`SE)M@g{8}}i9 zvTcMz0zh~G5DjoPNYrS|zr$DkU#SWIom#P}!#?Vc;e4U==N~}?wG?{sVz@EX9h?2* zF%WAoSCK3*x%g@bfdk>jQzFb}BufBa&+O*Ovkfp$Ix#~GmhupB3}eU(iab?P_Da-*^J$tEWfo?{_=u> z-9E5O%`H>pp^gi)QP)u=&fwDtpv`&K+Osnfw6Ub@J7@i8!20^e!$h4EJak64=c@MQ zbZ(RiDz123{?jT4cBiQEIiTUd+Nir}FE8n^JahUvvra;21Gw7*;bfOc=hHw+P{>^z zSQl|8U~6U{YINrz7i~)#s~!(-3`}B}A+T^QaY~MsvWIbncD-!yU|N25 zn20qn@UYQGf-)8n7Rj8^O|;AY4b zB5(4$;kZ&bT`#6dj|rdmT2j}JR8IVCUjE$O+}(pC0{c>{Fc359msYx|KuoIO$hwnZ z=7^M^ePXd#oBAvL(mOEhuWUY&S>};yN28%gOD#2S98<{H`F`iN#-B?42R_n8Gpp`L zbNaoG*nPyJ{dwOJO>ZXQak_Jhr11WUcipd?fcBuA%l*8dSfv)zI}WZBuNIUdKeyg) z(<%QeO!$;uELw!ldJ3Z%`mOCbbwjI)wbcNK(X72YEXDEVtFIJgchwDp^;tf#@!SXz zZd-nmNXWbttB0oGOfL%`ynn)Ds?9=^?8ez=5mvs>ey9i~`^-OIq)C{T@aCR_>VK&w+js;dD-Z$qRo(&4O;B9|*p5|S#XD{L$=IJ;vs2|}GvFa3!j*MWX< zk5pNdRh&eh_<0UOwLObe|DNS{FC?G7p$UnFzYyt+16PWaF6`rwHCODkFTc`x7c8xF z3GPSn8Y+k@Q+g!|?`ZY-JASQtaj>`gP3uZ#?jCyQJLFQwU+vGYib?tH=_A$@ovdji zyH_TcVF}AzBlpjm8UZ3H29H~M%O|yU-4(YM(SL0oNF?T29~F~*ky=6`Q*0nNjtCeAa?4^ocU;wMp9qKAikd*B> zlOSOw#D;YnO!&k+Siei!=!zkbv5`x>Ad^?N4@pkbHK2!&=(afV@z^^Uuwgg#t1&g2 zt#kp>o$QHt@EM`*&61Kwi&8>Mny!iyS7hyy)tB$O6IU7@7Q}6;-TS~pTEN_PIo>Z4 zu=}3NFY%QiIZRpGl@oj144r0_{N7$lR>xQqTI|Lu!nxwBzY#FW9N3o^2ZIAOf(Q99 z!UK{}T5T;&`r`=fd{7U4O}%8?BOQNRWk0sEvL(D>@^QcvUhE99PAJ{p%9&w${#;!S z_>ulRT28_<3)%MKF)1UJmNHcS^F(s4MjtU+l$*3b;upL;GMK^Ne^eM+9LqrkC83!M ztJ3sTrmxkSeR@_yHOInlTTlu?q4|5wVvlRBEm_=MD?j7wcyZG`&w9TeWRjs23Jjf@ zXTy%4qSkxNrb>+a*aFXkZEHyjeghee3*{Qndf8x|%dsk+5nb;Q+mb7>mu)=D0Pa)3U=BZsOt4Q(m}}Q zgbiu8j(&N^RKfe#o}xtE#*{RIHO}tsPWe^Y+cfNP_WjN_PQncS8XHy=n6Zx!LQ}p* zv2VnIAKT0CO+}}%UQw+*lA(U6MwpuunLu0?%h~8Wf&KWX>T6nG%&vL4C)#}T5-p=GjY;y>-B~*~>~a?92FF)y zlZ(U!)*otb4h-|*<~Uq=CZ;tme%xqhC&%0)CfXjLgdKM02=Mrhi+e{<98;4b3TUSl zt!8xB^AYZVF@xbpogH}Cv&1n@3Wua=ORLdo+MXdf;M-?MCPaDZC0Zo>MIhnBGs+GL zj0)Q=#BGL-f(J1x4_MZP-Xb=!HJT5%}2suV^Nb1c(_v8z&L z{YE_+b8-*EA4v`iUTh3MKsll4X~HIZvt_*D5N1TRpn}Q|uTc+L$|~kFQTZZAHP5RJ zqQD$=C4(sNy1EVkK0npS*CD38KDXdZKq|V29+e_$(}Io?;@BR&cLCfFe;B$}9i|JI zPM=eXpix$~(*9Ch7FnvcYf<9#0+8VxqLwaq!62MVp1o`bFZ`&y#y#|_+hQAmayA4z^C zY9c{ywJF||BL(4jX@UrYX@H75H#qX~&Aa6R~IWO(uJr$5SU0cc*I^ z>r1DI+MJ9~vD~0bV-4AcFA<(8&Xj=aA7{c263XM`zQ^cJ+6v(2tm^ygaZr7trTFJ1 zSJWwBy3SqxWZhc^bZ;C@p(?aCJt@=y4pLME=oWKk@ro_{g9pUufoi+O_mTWta_EyfR6-{Fw&2b4qa}C}3$BUOUFTWpbzBY2qpYXT>|sg}O~BO`zEn6!-N1QQ{8rC(F|jl|vFEzI&_ zBI#%nE*jJYuB~_PzhdY`uJQ@WWu4@0P1jG^bRfvg#P_nhhNSeX9ia4Njh#b>so7X} zZ|E3)%}>8AL|;c@!~D^C!@(xsHb3b4%bc#RvlS#&iqIHDWwrQc^3lFMv-0eO7VT!* zkHpyzlL@zIt&Op6?AJx?_aID=+0%V3>4K&BIpRl`46HRelmF)!nynyFWgJ!@?dt*Xja^VJRR`e@EoE=jlcD>=N)@?lI1 z>Fmum-p^hHPV>;jw$j(PSEc8FyqO#eX!tfQH0JeeA(Ef29K5-z_I+74l#SZEF^o&j zH{<(&)#c>KO2A#y{rT6Skkb&4s9KpNkCf)qP=On@{$RP{rRcGbe^TNC5t_|Ksn?yB z%VbpWZD+}5h`dM@>LAzHW`~N|+>NdmJWzRMSy-JDXP~lOSK1%lKFy~HO(&|BvpA2-3JAall0cz$6+P7ZNskYrNNL|tUbxItnD~o>J_ULzAM<9Y(7IbamH}uVw zCj8)Yfco+=Ia%g@xUQm!n>KXDFd>vNM3x8$7aK=}7laoP0qy=BkKi$BI}Si477-zY zQpO;lR>=DR6dZAyrUf9r^BOhoKtNlT0|6zW1su^T4k>^qw6bifD)+_f+bYY=)68X2}8#l0u3;HRI z)H~0{Uh^3@kz%?%M@?fFnWzt|iEIo-zhHcrxk$_LAL-{#ISIF>7>drM^>BTEeRQUY z)Ep2DKHKw7l>4I|z{b$zquW_lq^q6RN|{Y_#I2t>4X`B$(fK|ws4GrvvV*AAb&e^& z)7?`K`sY|h32eG^b~4b+9GaXhC^jp;<^BKla{Zj^%u| zizA0jQvpAe_8oB3gW#~du2+$B?`~ol=hqlVZWLT7{MltMbeBAB8Df1~+|h5SuML5Q zmN_{&@RLK8>bl-Q{V&M@LliL@zBifCI@jBcNBq^rF<j0V5u8_aqc>0A<>H5`=@3r2Kt*+B78kZK< zt=P>Ua+AV6SMWbuq^5p}#PZOGkB9Mw&8Z5xy6f4H_Y5FyeH~CS50GutupX;kTBp~~ zM;F;#AKw{h-0TaVdx$Nele!jkIcL5l&cMfHc*b$j-n*$A`f-C-ORb$5>dPeXg-Qjr zY2%oco=aKA^qiRiY4C?y;-%MmTt;_09!Bro^ET8I9$_i9l9(_tp}*3wj8p;vYufUz$yN95#v}|yx=#U)V`L} zPV4G~p=>>Fd7ycH%HEdV5ptI_>&BX1OcZcWe>O!d zM-S!@Z-Bp=QY?b^A= zyD?U7>0|Gs1?D3h^Z{~7sNFSTXaBLx*egOyfd~$NqVJH^@;RWqZ)aseAR$TESsxhI z&n@vOwbnlmZM-ZgiswnOygJfBbT+bWP&`Zvcv&WCr$As?KT|zj;Jq<9xJR@GO_?Y) zpCI9+F9v794n9Kl0Ljz3+FB{JKIk_-GHDb0O{Wm1pI+;JbQV_+sNL=)NfyJo=XF`WtDf zm=E7wqc`6_wbZ&=^T@~$C_Th?ywE49eFdHHGuDplts(AyZ!7QFV=H`>+4>5$%r%Sq z2`w)OB(%WSE8-QosaNkK2^WraMuW%KZzPz?mhW=nGE#`SKV7y})2j>Z19gYdt3NE% z1=G4peGjXnuU@{{ZUl_ATEBSqrAmkO)|ZPunxlQM2BD#z|_s!Dq*q$9M2j{C89H2Yted{wq8C3cZ#Bwv-Ua{1axsjr{)7P0lH*g zzjLtqNYX*|gB0k1zOU3}$<{VG0vWQH>a{3JRX_F^%zND^=@L6*Q|=R0G-3YotPd?{ zSdPGb_LYw9yLm5y93M?--8))29DB%&H;wobiA{xXhqjHU`a-Yc#=d*I08r7m{)C<_ z78f4INp4e;rA!?&+Sl_6<%G_w(D~E}o#LE~xH_WOG06Z1Npnx9xdI`fNaKN>B~6{s z(m0^wpT8Q7E)MY4n9I=^#$NT{Am4mG4pj;FT&bmOpE-Apd^<~{mvW6)>U9Byy|E6v ziskKSL-;Q~^Bh+h_7ONEmeCFB5%&c*ZAP>QST+wMgjF-Xe4M`q1*5Xw!LC2Lao5 z3861qfV=lkk1~kD5y~R?7U^1Zr}l?|!pGEyBBm!*VA)awj#sLG&vqAxv36d1-%Cr` zDN+$joLKKs7zz4j0VuV%1irE3{15__GVAeMMhmw>WRn^kqoE_Fv+0uH(`HJZI{nlk z<|QlW>^AO}{d{6bKwo4-yF4A(%O<INK7|9{a&gOQD8f6wckqjPs*!Smk zObHp7vkOH>`7NL3-xepLS$*^fGqEnf;pH#Gk#$CY?LE0{|FdsVG=Aft<^f9GcT(BW zr(C;TpV&aVW#c^iL;INoZqgxo0v9e{yIRXFHwKztriwFDb$8w)KN?Jxcf>o`eV2%r zHv-P=R^Tn)v_xWK#LHR@@ZE{vt=s^7E+;p%8%7<(3 zG`Yx7Of?Q$$10tq{i#Uy?rF!w#o%|%>CTR`bvs*E?Rff{dRMG*)>v z+O)0ZtCX?~Mr4lVC-vzhvueKEb?ig3jUgMuPf}z(onNxI(M9YY|Kph#Z@)Z9%I)4= z^X)rt3iw5`_|ao+&3gxLY8htdzM)yPRZn~Lf<+fbD`W^QWvKznk3f?eFZ$Q-1zg(z zb@tqS-N!~w0#bZr^QGG1eX9QYIJ;qwwOY?=r<-GT$dY%b{}ivjt**W)A1x&#jlWow zkK|UwaJg4I%brE zj3R#ty)NqY^OeV>tslN=0V%g!R9V4ELW|>V=@a6V%ih}R11YsKiCr`y6{EH+ds3o* zdiovBll{xKO}hTPbmp8y$FG6X_4ef1OG#DCrKe6<+BCCwZV2eGWIQ`j{ir7qv~Ven z%+shBrJoT!p8nCOlK(DLOFa&r!OTa7XaS|JtFHpg)#A0Yl#IQf5!y>aR|?a+!)O|5 zlV6YPOZ4uQ!Qy63U}Z*+7x^eavUi^xkt$AmzzsbmcM*NTk{;{oG&zu6TX?F+8kyRViBX8U|Q+-{}COILHq34cbA;Z@mwk4+`pJs2Y{JhW! z-*;FV1TXOYV#g?)rR_kt09)3a3B~*fScV}IAzg!jH56jo@$~k^9RaBU4B|8-#o%fR zX)pxT%!Kep@}S^e(co`~ZRrHN{#I9rS8zo^z&h=>VuH03Z3nCnpTV+<7lk;I&P`yt z{acA`ORoPn#GwR_wmICE zz7WSSUE7oJZ(iHr;ViaQGyM>@^P5dR)^2wDq^V?<>xX!ZR=@aCKlUG0zLU(@uPi`WHyrA@fBMd!c4 zon5xe6)d0%QD$RJtpP!tG7x3TiCb=5BbW-(qfMiffgb#Cy9aN*{S13VEjJd(Q#i;% z6zcE3f9!u^K{mB!JFW}3iyQ`MQf6ttZMe&CyWk)1e@2Ff<6`_q!b!((4-eZ>zJ$M_ zaMHQRHK05Njtd76`(wj#|F-{z2HCT*|3HO%tPwWAg5S8I4_&}8peOowY&flrKQ^55 z-?sAKq|os_c(^lz29NV^Fvy1J``i9IO_zU>L66(~{zp!B{Yi71&i^uP(#n_fZ=CnD zKLU#+tc=$6}mkgO{u5|b<7HgI6_c__7K3#0lyHz zz#M@IPqU-#U_()NoCeuYh(A7|#Z7yIRT7S3!^N)bpSwmF8EsC`k zy@DFDo;-EdM0w*SzQxB$?7jhk{OHVZ?;`i1!&_Zow{pQxjiae@TT%2kTBD zEz|iTK9UGmS4k{dK?J zcDvL!QiTd#Xkg5=ar*6NO=SAq_Y3xme$vU*R;;R%T#+*$jB#Y|;hZkq4LX7Lp zgUGg9K4XbhM}a4{PTA@n8e*-ylsf0e>vpmQz5#5c!nQ9s$VM;yu)6BLPAxoT`aXf@$0&Xu2QE;BAkz3w9VjUaZcq=1 zlPNN)WR)e)1|)Qy1t0X@H;l?OyXh-jEEJ%)BU^y7k`N5k4JC&laUJHhwlnfCy}O3U zIIj%1)nD8gS-OOZ)2TY7RXj^bUoi6N{g=0WC%zGv_ft&wiWd27_2c)=Bs>_Hr?N{& zvV?RK9bOOh$8XLPmFsrnbWM9IRTj`Mc9ml@XRm;7yIF?hr}Ya6cLl^e*%xhS<+9ok z0qcfqU#Ls&LypjQD8A`fLRc090TsPMU}^Fc#Vw(Jm+Sh`#F2}@ zSn|G$V_`?K(=o5r0f}JRY-vHyMm?t_v&MQ0F>nli6Od+Nd8N2In>aPFUv%Sgj#tmwJ3*X-$5HuDNL8q zCF5^CyV}XmhYk@qO}^K#4^_#Pn#yJiK@|q+s<{&zoB#gVkuf*#$$Pqi(_~{Y5mT+ zc(uq{O`;gjj_vvf{o;d4-(omB{hs$l5BfxA)5*A#Q!V-=?@4QUXyZqU)$hb}F{T#x zs72tnYbW9~bj73S{MverxCb5Qc&MBrUWr2YH@L9EA40_tVetD2&xGfKE;3LDOe9no znV^b`U_}5Csk)l79s$8+ zECIpAY@$oxh>Y8nP4FdpPt!o<@XTrN*zwPf-O{S<)U5T$4~y=vCRMdMxgXSDq3?t| zx#i?63Yfs}+~MTsXMoYr($Nvz$`EBHAP^2#S5`E5G`2F_LQKGR^|GS)vy<1ZkUO{k zh+cAHi?@Y<82-iYmcDxK!>+C;R%L;mT?Ao-4|^KH&Oopj(`6H_zmF93eeiiJUJNL&-rM5VuIw8x&g%V!@~%#AV4CT9G~^F zgRH0!M-2QXnqRD;VG?J8Tp)<}mT;5F;E!@HPM|L`Y`jTq3;D+f*wk zc@1ZstVH0Iuzl)LKklS{hf8c%<>o|j6GHY0e0=KIo;!KM<45Z>j)5DF0MOV|3#7Ew z;i9;d194Zl9oTlRquND~DOfnzGy(h~ZuofXAuGzzjjW4uc%8=R`RQFw40%|6T)ZN$ zRfah&TA@Fl)=$?1Wl5j|1oRd2z*(~;ktVo+W^9nt%$C@8>W@2XFI(jn{f_l71nd2{ zFa1o6{^Szc-jn$@>rcnj!ACn@2E^`V=}f9U+O$T8ZzwbEikJls3a^ESwDo*onYc6F z^V%5_g76MHUMWP8N+RqDNuJWG9EkvSMK z$Hbgf>T7ilL8u*9Qtdk>EJx<%=}gWe(BFW6Gt$lOiG9dq3c5xuc>StZkUjv@aDOtT&2ke zdH+#jf$M?>DnRE&IStm<;PS5U$q99~Ny_wb>nNx02#r2%Xd!`!>P@^I!(>gVS}zmvb<4ED10`{JvQ4DjqCgz@_`6pLLka0(Jn?m;0@{Qy!XqH6^>kz zljXyxQUaQw-YkVNmn(2q^GaB{ugu%G1eso=Xs&#@S`>Rh?TUw{3*`h9m&h#`g?&Yc z{j;s!m6zpRlc?!KLVWN$k{Gc*%7^qByLS#p5JOavz2WB%mlb~5%{uqU1PJrJy6(HL zE&J2opxN_9k@Lm-xM}ET`a;2(eb>9!f(aEXSO8fR96CE&?MbJ1?J|6&TVF4l zE*)5OpUXWVJZ6{aK6&t0#WNLA+zm&r*B#fHK9Sbx>W?Tn-)Sq;|CK#77U?ms?jWTO zH0(6yBx^XlFDIL5rvEh%K$|td%lH0=5HFHZ-!_o7Tk`c$_s-cuCe}(>-aiG$Vv{Q? z8;%O!VMq3pvvI=}Ms!Rww+tvoou-zawiLt{O2$b@?A1Tq2;uSvhDb6Ypr$(6S3ePi{uw&{|n5Pb3{Z;%l?oD(BVjbRr#WkjjfiOMyVD)+DJMNKYR+phLy z_4{3?;F&=zD48#c&Y9pItxV>88^VJwp+b{xis{<%Sci<2lW(ZQB}prj!sjAtTv8dk zOFI~BF;nTASKlN-`}7gqNbw@!8te*r-kR%U8H29D$Qd7r1DTqFV3+7)EeS>3@M7?L z9*k{=$KL!k=Bq?d;$MTOYWa`*Cp;)oub0gLUD8qTd{c2s4W?xv$ErH;SKDkOSL8`&1O{K>O zph*!>1Ex4I4--j$ABbr^W-`oW%0>=YSy+%2zI`rQ`s3YCrS8hDdcog?A}&M8??_yV zt#cx?jtOcMf-l5+Bo1CT`L@*3d$V-YAZg42v5c&hdq41;4Ww_K9G%CwJNxuUr-m$*RNSfl<%dCjiu($brC`e_(%aoZ7Js|!5qnTCX7pW-yC2-=mQ)gyI%nj~Fs4%ci2+>a$Un2TOiWw;go`+Kj%O=PLO8O(@9`7&tU zCtSG1vwJM6$~E-@Q_qyrJ2nQGU?O=R9$O={K7_?LnF8CCp9CTYg+n(6QSA(jN%CeX zt)8(&xI4H*1eK93Yixb4ukCJNa5`yhwJ`AnwVu=wo2sl1F#cEoDZQ3`b0^;nHhjpH zIq4998weh{fnn?o)kuzk^LHDSMi{jah?vw2-K@DN%udsPW^si$>H_m zZU~oVrxMBE&YOP8GSdah+^OSrY)I>m(=vs=Mhpoe?7R)OogsI0`Xmvm%!-B@> zwY>L!5;^g*S$Jh6lw`cP*o;j<{gbmL1zNgLx6-<1-+VgRpbfg`LDF^2|0(L5v!HYy zU7HV0nYmR`39*t(<*PRwj6SYI3jXv1IXk0s2poIU{#Cs4VaOC!{Wb@ZD9i(xF>av# zLqUTDdN=+hlQ>f4VT_UGBZ`HsDRT5?Ox5dhy+@_@gE@5{YdNOB(dCO;&wUOJ_I>r) zg-I{_+>OiOqH=_i$BS;1%06RpfoQp^w!jkS?_pS{JL?ZGZ*wyhxxklAbo`?1Pz%+l zO7+bRt#3`@VVAeM4u*+OjAGPggfk{&5K6{zAcJeM`~KQoQZu%) zT8MNOCkzo6!E+wJo?QP^>7m6~Xp$Xyuog`Stsl*I**=|hi+8JT$dpb?zV$(=`nQ5& zgGs1^muEijN?q3GT|VxdF5GqDh4 zlq^LwWOLFPcZ}UQn^_((lg~3&%`M>#{De#IFLXLX28wcSKzV}3h z|Ac8b(9&A<39aAsmDm@vRoSY-dfV=#lZCyOi3?L!6(dn0^3w#M!DuIr^p57_^UH^J zSdpR4sUCS>_qs&cuRMy5FN7~hgZ*Q;70ai8mLoswg@9DtPkk&tFHrT2cklRGh zjY*Oh7#QMM|LltQyB^f&QIlR)lSX|np_cOHD@l#%Jvy~FN7^GK`Af@hiIU0}J>c&R zdW($_{&AzsZEIQ0d5gUHWzwXhWe|P!qyvTmV^+0$EKGtwM02>*(Y*d2iJ}}zEZ<^J zLQ8CHWf=$L{ptp{>@9zJJ|3BLUdN5hLnCQ@C2IxChckfIg9{57fwh3GDk>o`yX>`Z~{HA}kD~Z*=IxB{ySF794yqr7UE{#>fjqfP zIYBf(Ws}E9f6nh|9%^pyl1B(P<6qMwy0RD(_VWJInMH3b{w^gS?o0L8p0}bh%26;l z)_9JGan%($c3>QCH?Y4d00r+iML+>{&s3oP0D`is8ZafsA6Y2w(CJtJHw}QX3=}WC zbNGs&TtOwg!md=AT%T@eENk}L#YwQzpm$!I{%R04F6|W*15{T_eUL@0;akx3O*bhI zyt(&r4qbAId02bqd3V><*`J&u)^gB^%I&zECe|oR^ro5n%y({oGio%VvfSvw9rqJQ z6)A;DPk}AJNFGw((u$3|;Y111U%wkGQsh|On2VHM*1`{2Wtg`Qp~5R?3+w)p5Hgip zYcRxFaKo48l~f=oxJT&+D_j0x|J6mC!DQh$X;h&USs-(SN35Ll53i*f(4fL z;ca}R;#K*8n_AwF4S}Y_0g|Gk>**w2hN+Hgqb+StX}s|FjKfh~xUqv%xi>`7eoGoS_iY`g8muI+uxbQ3SPAc~1m-}G!N;lE?`_;j-!Hs5uyOUGYN|d8<~>t8zSjpa?u&j3Q@D@5iuVEXZzF4bo4fLk0TzmZGp_ zRkF0hZ0&WwY1L4bH7T-jge8PX!wpURF_hN_V%@LWj{f&YNX z`2ttXpasLY#)$wAv#>vs{nAe39}8k`FRYjYh7dbU@r#bYNS%!{~!L8HnlcG9rmP2fvzBrPY(n}apMAWXC) zPaD!If_&(=*I;6+lrrb0v>yL#@^Sfw%d)PXX03>{PVeB3Yo0cJ(Xi0xT5U+*A)hc2 zA{&3!GK4Tj8mrZhvl!FL%OXoi-t2P*&KLaIzC9WvBD5>O<89p>Uk_gy8ZkeU@Yk1_ z)SYhnbaPSL?v$|wI1*!im5fa`FSMh2U{U+<)sC63>#0x_u7J;#-LFoxThZ3fExdP@ zDP<`+ei${RH*&{$`{NZ*jg4CD^Ow9Fd5FAJB(Q_^n??Jtih6=hyXrt|j@@63(|oR& zTw0dIlgFXianxao9OZqxsbhyrj1ZwZ>Z73`U%o0`X43NE zsG`3POIa?i8;VzpA#kv53RmN^W@3Fcc9^`UGLRmzazd{ zHlP0VfMCGeAbZcqMV@LnS$2UON7qZ<~H<(kAK%Tf)G^gOj*;6IW1HTuSIC?-{& z1H;QiNrSg-QIug%4D)op{ZVk2c`+0)84HYfnF~egpDKhzcXe4e=P< zNOZV^s3HEZUFm|R3YtqY`EUbkkb*6D-EXO-uH>`_rVh`;fIhlIF635Mp}5rP(hqdU z*nHdVH?hNfjLFQCX`0hXFZO1%OC%9q5Dj%TiJ$3^g8yjF_d;Nm$6{t3l&Eu z(=8e+oogk}S(z>I{QxF8bH=V>BdHiG8(zhw=vQ$(fU$33*C`GIMNLk1_f0c z9{a^>c#TFLZ;7XA>QJf3UJ8C*>w8*mmZXBr*)lmjy1^uE;ds_W%kpM6V^>!0rgPkB zD0ZO1Siq^e4m+zecs=DBQ+!Eh12UL~QgC_pBWaZoMkJO1&pIMJX`e6uBh9pJe(+aO z!`d?a*ROR4!X<*T*6MMRuN1V~7R6Viu=^()u0_li0Lrqo{D@o(x${Md;l#Di86Do< ztiFu*<$Evg{_Y0v6)*!cnBcWvT<}VTPXGDhZo*f=3m;d@a>yg@Qck23HzzmBH4f)O z#;SWW=w$lmh3yw(&(o1=qUe=}Flre9X7s&pp&ODX1b3L>^JJ<@7A!8*e14gd8^Ur;`;%iLU$lbOu+4tx!Ie zL6*iRY4`8Ed>=s_23}Y@%`dS(mSo_ogOtO8ufyZqN1}v8ok4ge$nGq0ChTng)MIR;U;E8uB+Cwm zB529h^N_5a>*rf}h!B19=6n!A$dMSI-cD|7bzw8*@1mdbv-QHy~P5Q0;yP$OCrrpWgg%=u_E{ts z(k^jEDcDDzOoV&n*0@-?4S+R60Eeqb20~=2ub1M6!tE|G=lD^fhxv>OI;JEi*3YQ$ zVpt%Gj%Ss-$hB&MyKVE~kCIG=UAB0?@~V0Q^=uGqQVj^weO8yiLOC%~gH_)9E{SSC zy!E{PZoblq(#ReBttX8uQ?k6pR%wdp<-2kUK!mI0X;oXxS6^+JgzN!Q86{3xs}U9& zfLUklD^oKaxEDVzs@cz_$YeM^3VZGM7q6E^LwcT3Etb?UM4knv9TAx4>mo=Ap13}8 z^zJ)shS%)`l94M%4@)%G!_~I+0C%-6qOx{{^3$p-{PuiE!cr5Hdd}ItdtONC(V&LL z35{QQR&QHv()DsQ+8A$-)ugcE`Q#yXdD-hXH7_TDTv7M98jaJ-NHIWeki!7Rh$BJ5 zv!9i`KXA2aN#R_=Tyym@OY(gT{)%4d(E%&ddbZ!*e61?;Rd;OMwrpGaTmcD7RK&Bc zj=P!EC^V6`;hki+q?%}HVV>)de^+kOF_S1dPdtmEm8FYZ)AW5&!^6zPvXoTpypnL7 zRvnpeeE&&l>wZq4NNA%ApZI2*^gxM>>q>VWSOnEx@()lTs-KPC4!?^>VS?KXTZ@@A z<*^BI9!!JmCh))D#Hh(wG(*koUB|l2d0OCH@bbQ8!P#3&mF56hbifzs@9gxreoYDw z-*qsps`FF<+{wc{xID(M;)NPdi55z+PtoBlIGt5z7VdKxUwqX)|4SvyL<@NDd@9SF zee@0y>&D|b62a}D1#Eu$71cI(UHdP)Cq`83?(Iq2X}g#MA!^yG6ljLGk4V%~`GzUc zZ%0%OCXX=;ryo^Q>5eVo+Bc$!5gs~U&wLoJ{iOheq|sC*orEtpTslO#71h3xuAHi` z%G5>TLfqwQu`x8gd9$H3mU|b~&H@Y1r4!g}xiNn~27k80!gI;q%~y(uguV#3yR*=L zmlj?3)2P%Q7f~GJEshj~3lD~g6n1s}>8J~t|JEo_Sq$xpU@u{6;Vb`|0A6Y#@31io zWsCiqZM_4pdEqkxW+XZku)-Mpur8gO|ijeHm`K_LqyB1CT)Gmm1v2{5F}z4#$2=N0+{|6d(}& zbu3>m3;koc#W906hJ}kRLj0HI?jt=-XRo4=o&Gl|wQ`NFs`j@Ss6n~7WF9vYyL7|6 z@+;Aay-hf|Bs~}PUv^IHuM_7yyn@mDIHMD)r?6A1b+8feL>QKy1#!Y0Kj*3a9h7pT(UV2Gn39P@p*2 z;D01-Agqn&iPeS9K0aG{OeSYL`w|v7f_E}g(DKsfil@y<`xOP3 z|L();=f(ooi*kDC{zCCrHpT|hM1aqg{?6nGaoErH zq{{#3sdx)jN9#rRaY>JUGW_tf($WgWX1XF}2dTgVr8w92&It^8*V8I1UPwRDtmn_} zKK9w{w7?!&v5O#U!B6f%v|<>N2z{atv}`lXv&{p@EC;6K#TP%Ov4(1;ul=-Pz#m+q z%on$z1z39rF`{MhOsZ_ihs)rw=|`AMW(_UwxA#4E%xlinmSa|s%F6EHrB_V?xYV|n zY#8JF9CT1{X+V5%0*YgbY2~!-wx8IiN0AZ~-cLj6RYbHDZgZ z&$RJ7ho*|0E1C^hI%hEi$VMG&uN7ZL?@RHvcR(e$Z1KB^N}6ZN(ttrWCzp}tdD-@R zY06@oqC|iC>I}|v@?@|vRGzs#)+kYwXQg(xT%%CTV(7*)J~Fc4c2dBMYeOtR z&+;mWep@ZN1ZB9SYM}`P%*nmgeiB&v5y=u6%dI*QdwWGEX^gKFtpHjoUT}LnxOcz1 zg-N>RGjEB0+O>UAJgR~eG-%?-H0JlgnO7_@26;1y-4GVT1BSr}ME@Edw2O*zL})0_-;AHUHL- z4Osqir(VRHMS!Ay@W*~s`zLmX{g)@^3${TPAe+?RQR1|c5$5LaynMYvJ-i_T@pz4V z&kNe(Ara`mlszN?z>!Czsu;mS+;r0SM1(_~ImNIl7XVJ zL2h5*{QjZ^_Mw+|+a}5*0x&Zf8$|Yp#3%yAD zEDmdY?H>Ba_3J4KQumkxiLygl04MB^4FFO^C!P6C(seFwAvc%gLCe}l}V5d z0n0dCnkU{FkdcFx{o&T*P-(b!uo9p#=VSrIj{p$j@P#)4cchk#G(rEY1_)@z_d8b0 zg%{#Hy<4qlhUwrjV3=IeV1AVJmA`62&ne7)On2YZreIa_(Ja1zrFXCL#m>%2F-e#A zsN66sz>P^BCArasvq=&_6EhgA>1EZ8f*?Q zPJEuOXJKd_71gZl!IAJS=sCN{J-0*zk*3OKR+?&PzsT4Znhy_TzzfWdU+$hq@gM)M z=@o47LABsHYl_{pJ!e*0w3D7Syg|hzNQI2b=xtgLf22<1Kv9K>q|Wi$kBIv7%{2Sj zJdHVYw(f&@ZcZ1PKfewrE5ErP;w8HY32&#eovM9vEpz0ypXy{xX=(o@r63Qsqp#(c z7sAC8qEoO3j-)Z?MwGZnV`~*itdb`yh?2V>;`3z>fx(F*H-hfstNkytvY1!gq^QE0 zrEZu=EKOeZ2;6M0oY2XDlZ8tQ<3*QE9iS-Yf+KN8<{cTbgb#xbdeV~Fr`i8mo+yL( zf_eQnQ8)gaO8G_YIp#RC3H)h`*Hh<8Q9-6)_+|#ieLKrQ&vxK_s(LZ^7PM;zaXKDh zx~%!h^Sp-0NIhYUzzxuhG;+e_4^+T&eAxfTO0hf#oz-w)BKm^#_t;HQQZQ0Tz)rH0 zx+RoAyI^k5w@zvn>da_hCFTm$o0!yq++ja zvT1LrQo!nY&1ukUQ&nm7-yfmjW1BZOTNcxHtm!D$b?|Y|B&V271-6N0xW#hG`ZPsr zTzDY8h9BOz>3Xndm2Aq1q~{r_=CL$qaV|O@fn0>)kDLf*)GH4XFlkKtCym%n^ZF0^ zY@%ojLDFV!OiFM;1D6A5)wq$INh`|dr(W7EgKY7uRVE1i!el<#w@DFroGmB=jiTI~ zKBum?8Yg62cRiXYENjIb!jnCtCg}omT}+F(oEA!>4|IxJ_*B+vUp*fJ<1 zzYe}Gp2uYWF)#y<^?$6M|L>sfzfp|;|3aozF2TOc$}a2i&KVt^nJ285{#orm{}S-` z2ZCWrUy4g0O3>}Cp}U1KAfG6Q8?)$8nhTvA}>sZvH7|RhL8&t z(3p^t!$S$5SX00WE<*`gH~<17Sj)xRSORc(CjrXdZ9k{{LO*AGBkmDdSbw9Z zl;g|AmcvfsuHx>L`$N;+ziuL9`Eu2(JT>#btqNzq;eqFODIa;_C~34J5vig^6IA=Z^Q zcxX}c{iXz6C=#?&FC;bUa0}tL!DQx zTV8;itc;nA7*Dh zY-S z<^R5oeNvK!y>FUQOxxXS769W3s7~=SUEYtnit3> zyrvrd29wrKXv4^^W=BN3VDiMOH_u+2nDLg-}cJy){B3x(qC7C|7fDN#@$qnz&zWWbtg@% ztiOzK4Q}l!x87kdPSZM5#CGYE4Nr(0CvM-MfIkVWW1I;Z(6VIF2HY|+S{vVGI3`(?&@=OguTk7@Az+tG+$Ny#2j9Hht@~g$Z)~W4Pg$8_$MrrFO*4@Sa41{|`|5 zQ$73nFk-o}UatBRVz02%KytlXF~{A#IQr_0b?T}@`oXnt%#M5W4e}3UruwF9-IOlwux=6moU&F53dE zJht~uSr5?A+gN!%z&I$6kPRrQB`c)1YQID@tZzO^^u+oC!MU&fKX=#wyl1{h@J}~Q y1maS`yJ!M7fS~E=F)ZYS^GAtTm>V3zq*RHa`7GO(EkOYu`7ZA diff --git a/images/quickstarts/featured-quickstart-1.png b/images/quickstarts/featured-quickstart-1.png deleted file mode 100644 index 4ae5bfb6e512d7bf89a8963b1d61095ee59011e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12564 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 diff --git a/images/quickstarts/featured-quickstart-3.png b/images/quickstarts/featured-quickstart-3.png deleted file mode 100644 index 24c325c0533b1c91c6f27991ea9367fa9835803b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9390 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 H!D9axdgw(Q