From eb9d163840ac2438192f71a58e06ca567d3cc4ff Mon Sep 17 00:00:00 2001 From: James Maes Date: Mon, 12 Oct 2026 16:35:25 -0500 Subject: [PATCH 1/2] feat: CMS qbit skeleton with feature flags and the CORE feature Phase 1 of the qbit-cms spec (QRun-IO/qqq#1083), first slice. - CmsQBitProducer builds everything from CmsQBitConfig (no package scan): validation, namespaces for a second install, and a collision check against names already on the instance. - CmsFeature flags with dependencies; CORE implemented, the others rejected until they ship. - CORE tables as standard QQQ tables (site, domain, redirect, redirect type, page, page type, page section, page section type, snippet, menu, menu item): prefixed names equal to the SQL names, snake_case columns, possible-value sources, child lists and associations, permission rules, field audit when the host has QQQ audit tables. - The CMS app with one home per area (Sites, Pages, Navigation): real data read as the user (PermissionEnforcement.ENFORCE), honest empty states, readable at any width in light and dark mode. - CmsRole bundles, CmsSecurity.applySessionPermissions, openReads. - A prefix-parameterized Liquibase changelog (1.0.0 baseline, kof22 column types, generic reference data, feature gating, halt on a foreign table with a CMS name) and generated reference DDL. - Startup schema check (FAIL_FAST, DEGRADED, SKIP). - Checkstyle wired into verify; 22 tests incl. Testcontainers PostgreSQL. Co-Authored-By: Claude Opus 5.5 --- AGENTS.md | 9 + CHANGELOG.md | 11 +- CLAUDE.md | 9 + README.md | 96 +- checkstyle/license.txt | 8 +- docs/ddl/postgres.sql | 372 ++++++ pom.xml | 49 + .../com/kingsrook/qbits/cms/CmsFeature.java | 154 +++ .../kingsrook/qbits/cms/CmsQBitConfig.java | 485 +++++++- .../kingsrook/qbits/cms/CmsQBitProducer.java | 179 ++- .../com/kingsrook/qbits/cms/CmsRuntime.java | 96 ++ .../kingsrook/qbits/cms/CmsSchemaCheck.java | 146 +++ .../kingsrook/qbits/cms/CmsStartupMode.java | 34 + .../com/kingsrook/qbits/cms/CmsTables.java | 159 +++ .../qbits/cms/core/model/CmsDomain.java | 366 ++++++ .../qbits/cms/core/model/CmsMenu.java | 365 ++++++ .../qbits/cms/core/model/CmsMenuItem.java | 604 ++++++++++ .../qbits/cms/core/model/CmsPage.java | 638 +++++++++++ .../qbits/cms/core/model/CmsPageSection.java | 366 ++++++ .../cms/core/model/CmsPageSectionType.java | 332 ++++++ .../qbits/cms/core/model/CmsPageType.java | 331 ++++++ .../qbits/cms/core/model/CmsRedirect.java | 604 ++++++++++ .../cms/core/model/CmsRedirectMatchType.java | 69 ++ .../qbits/cms/core/model/CmsRedirectType.java | 366 ++++++ .../qbits/cms/core/model/CmsSite.java | 264 +++++ .../qbits/cms/core/model/CmsSnippet.java | 399 +++++++ .../qbits/cms/home/CmsHomeRenderer.java | 345 ++++++ .../com/kingsrook/qbits/cms/home/CmsHtml.java | 188 +++ .../qbits/cms/metadata/CmsAppBuilder.java | 123 ++ .../qbits/cms/metadata/CmsAreas.java | 110 ++ .../qbits/cms/metadata/CmsTableBuilder.java | 256 +++++ .../cms/metadata/CmsTableDefinition.java | 204 ++++ .../CmsOpenReadsPermissionChecker.java | 93 ++ .../kingsrook/qbits/cms/security/CmsRole.java | 42 + .../qbits/cms/security/CmsSecurity.java | 167 +++ .../db/changelog/qbit-cms.changelog.yaml | 1004 +++++++++++++++++ .../kingsrook/qbits/cms/CmsEntitiesTest.java | 105 ++ .../kingsrook/qbits/cms/CmsFeatureTest.java | 50 + .../kingsrook/qbits/cms/CmsInstallTest.java | 262 +++++ .../qbits/cms/CmsPostgresInstallTest.java | 136 +++ .../qbits/cms/CmsQBitProducerTest.java | 193 +++- .../kingsrook/qbits/cms/CmsSecurityTest.java | 169 +++ .../kingsrook/qbits/cms/CmsTestSupport.java | 116 ++ .../qbits/cms/home/CmsHomeRendererTest.java | 183 +++ 44 files changed, 10206 insertions(+), 51 deletions(-) create mode 100644 docs/ddl/postgres.sql create mode 100644 src/main/java/com/kingsrook/qbits/cms/CmsFeature.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/CmsRuntime.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/CmsSchemaCheck.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/CmsStartupMode.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/CmsTables.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/core/model/CmsDomain.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/core/model/CmsMenu.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/core/model/CmsMenuItem.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/core/model/CmsPage.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/core/model/CmsPageSection.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/core/model/CmsPageSectionType.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/core/model/CmsPageType.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/core/model/CmsRedirect.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/core/model/CmsRedirectMatchType.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/core/model/CmsRedirectType.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/core/model/CmsSite.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/core/model/CmsSnippet.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/home/CmsHomeRenderer.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/home/CmsHtml.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/metadata/CmsAppBuilder.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/metadata/CmsAreas.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableBuilder.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableDefinition.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/security/CmsOpenReadsPermissionChecker.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/security/CmsRole.java create mode 100644 src/main/java/com/kingsrook/qbits/cms/security/CmsSecurity.java create mode 100644 src/main/resources/qbit-cms/db/changelog/qbit-cms.changelog.yaml create mode 100644 src/test/java/com/kingsrook/qbits/cms/CmsEntitiesTest.java create mode 100644 src/test/java/com/kingsrook/qbits/cms/CmsFeatureTest.java create mode 100644 src/test/java/com/kingsrook/qbits/cms/CmsInstallTest.java create mode 100644 src/test/java/com/kingsrook/qbits/cms/CmsPostgresInstallTest.java create mode 100644 src/test/java/com/kingsrook/qbits/cms/CmsSecurityTest.java create mode 100644 src/test/java/com/kingsrook/qbits/cms/CmsTestSupport.java create mode 100644 src/test/java/com/kingsrook/qbits/cms/home/CmsHomeRendererTest.java diff --git a/AGENTS.md b/AGENTS.md index b7be374..b6442ca 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -18,6 +18,15 @@ This file provides guidance to Codex when working with code in this repository. **Entry point:** `CmsQBitProducer implements QBitMetaDataProducer` in `com.kingsrook.qbits.cms`. The producer builds every table, possible-value source, app and widget itself (no package scanning); `CmsFeature` flags switch feature areas on and off. The schema is a prefix-parameterized Liquibase changelog the host includes and runs (`src/main/resources/qbit-cms/db/changelog/`); the qbit never runs DDL. +Packages: + +- `CmsQBitConfig`, `CmsFeature`, `CmsTables` (logical names and table definitions), `CmsRuntime`, `CmsSchemaCheck` (startup check), `CmsStartupMode`. +- `core/model`: CORE entities. Their `TABLE_NAME` and possible-value source names are logical; the builder adds the prefix. +- `metadata`: `CmsTableBuilder` (tables, possible values, joins, child lists, associations, permission rules), `CmsAppBuilder` and `CmsAreas` (apps and homes). +- `home`: `CmsHomeRenderer` and `CmsHtml` (one renderer for every home; reads run with `PermissionEnforcement.ENFORCE`). +- `security`: `CmsRole`, `CmsSecurity`, `CmsOpenReadsPermissionChecker`. +- Schema: `src/main/resources/qbit-cms/db/changelog/qbit-cms.changelog.yaml`. Its changesets are append-only once released, and `docs/ddl/postgres.sql` is generated from it. + ## Naming (owner rule) - Tables are lowercase snake_case prefixed with the full qbit name: `cms_`. The QQQ table name and the backend (SQL) name are identical; possible-value sources take the table name. diff --git a/CHANGELOG.md b/CHANGELOG.md index 85da23a..77c5944 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,4 +5,13 @@ All notable changes to this project are documented here. The format follows Keep ## [Unreleased] ### Added -- Repository scaffold: `CmsQBitConfig` and `CmsQBitProducer` (table prefix `cms_`, permissions `cms.*`), build, CI and repository standard files. +- Repository scaffold: build, CI and repository standard files. +- `CmsQBitProducer` and `CmsQBitConfig`: table prefix `cms_`, name prefix `cms`, permission base `cms`, namespaces for a second install, validation, and a collision check against names already on the instance. +- `CmsFeature` flags with dependencies. `CORE` is implemented; the other features are rejected until they ship. +- CORE tables as standard QQQ tables: site, domain, redirect, redirect type, page, page type, page section, page section type, snippet, menu and menu item. Each comes with a possible-value source, child lists on parent records, associations (`page.sections`, `menu.items`) and field audit when the host has QQQ audit tables. +- The CMS app with one home per area (Sites, Pages, Navigation). The homes show only real data read as the user and are readable at any width. +- Permissions: per-table rules, `CmsRole` bundles, `CmsSecurity.applySessionPermissions`, and `openReads`. +- Startup schema check (`startupMode` `FAIL_FAST`, `DEGRADED`, `SKIP`). + +### Schema changes +- `1.0.0` baseline: a prefix-parameterized Liquibase changelog (`qbit-cms/db/changelog/qbit-cms.changelog.yaml`, logical path `qbit-cms/changelog`). It creates the CORE tables with the kof22 column types, adds their foreign keys and indexes, and seeds generic reference data. Feature sections are gated by `cms.features`, and a name collision halts the install. Reference DDL is in `docs/ddl/postgres.sql`. diff --git a/CLAUDE.md b/CLAUDE.md index 768c2c2..cb26803 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -18,6 +18,15 @@ This file provides guidance to Claude Code when working with code in this reposi **Entry point:** `CmsQBitProducer implements QBitMetaDataProducer` in `com.kingsrook.qbits.cms`. The producer builds every table, possible-value source, app and widget itself (no package scanning); `CmsFeature` flags switch feature areas on and off. The schema is a prefix-parameterized Liquibase changelog the host includes and runs (`src/main/resources/qbit-cms/db/changelog/`); the qbit never runs DDL. +Packages: + +- `CmsQBitConfig`, `CmsFeature`, `CmsTables` (logical names and table definitions), `CmsRuntime`, `CmsSchemaCheck` (startup check), `CmsStartupMode`. +- `core/model`: CORE entities. Their `TABLE_NAME` and possible-value source names are logical; the builder adds the prefix. +- `metadata`: `CmsTableBuilder` (tables, possible values, joins, child lists, associations, permission rules), `CmsAppBuilder` and `CmsAreas` (apps and homes). +- `home`: `CmsHomeRenderer` and `CmsHtml` (one renderer for every home; reads run with `PermissionEnforcement.ENFORCE`). +- `security`: `CmsRole`, `CmsSecurity`, `CmsOpenReadsPermissionChecker`. +- Schema: `src/main/resources/qbit-cms/db/changelog/qbit-cms.changelog.yaml`. Its changesets are append-only once released, and `docs/ddl/postgres.sql` is generated from it. + ## Naming (owner rule) - Tables are lowercase snake_case prefixed with the full qbit name: `cms_`. The QQQ table name and the backend (SQL) name are identical; possible-value sources take the table name. diff --git a/README.md b/README.md index 5b381ed..309d5e7 100644 --- a/README.md +++ b/README.md @@ -5,27 +5,101 @@ > QQQ QBit: a headless CMS (sites, pages, menus, blog, media, projects, photos and publishing) as standard QQQ tables. -**Status:** design approved: [QRun-IO/qqq#1083](https://github.com/QRun-IO/qqq/pull/1083) (see [docs/DESIGN.md](docs/DESIGN.md)); implementation in progress. Nothing is published yet. +**Status:** design approved in [QRun-IO/qqq#1083](https://github.com/QRun-IO/qqq/pull/1083) (see [docs/DESIGN.md](docs/DESIGN.md)). The CORE feature is implemented; MEDIA, BLOG, PROJECTS, PHOTOS, PUBLISHING and STREAM are next. Nothing is published yet. + +The CMS is extracted from the kof22 website, which runs it in production. Its data lives in ordinary QQQ tables in your own database, secured by QQQ permissions. It brings an admin app with one home per area, and a schema you run with your own Liquibase. ## Requirements - Java 21. -- QQQ 4.1 (built against `4.1.0-RC.4`) with an RDBMS backend (PostgreSQL in production, H2 for tests). +- QQQ 4.1 (built against `4.1.0-RC.4`) with an RDBMS backend: PostgreSQL 14+ in production, H2 for tests. - QQQ Next UI 1.0 (`1.0.0-RC.14` or later). Material is not supported. +- Liquibase in your migration pipeline (or the reference DDL in `docs/ddl/postgres.sql`). ## Install -Not yet published. Once released, add `com.kingsrook.qbits:qbit-cms` and produce the qbit into your `QInstance`: +1. **Add the dependency** `com.kingsrook.qbits:qbit-cms` (once released). +2. **Run the schema.** Put the qbit jar on your Liquibase classpath and include its changelog. Set its properties *before* the include (the first definition wins): -```java -new CmsQBitProducer() - .withQBitConfig(new CmsQBitConfig().withBackendName("rdbms")) - .produce(qInstance); -``` + ```yaml + databaseChangeLog: + - property: { name: cms.tablePrefix, value: cms_ } # must equal CmsQBitConfig.tableNamePrefix + - property: { name: cms.features, value: CORE } # the features you install + - include: { file: qbit-cms/db/changelog/qbit-cms.changelog.yaml } + ``` -## Naming + The changelog never touches a table it did not create. If a table with one of its names already exists, it halts with a message telling you to choose another prefix. It seeds only generic reference data (redirect, page and section types); set `cms.seedReferenceData` to `false` to skip that. +3. **Produce the qbit** after your backends (and the parent app, if any) are on the instance: -Tables are `cms_` (lowercase snake_case, backend name equal to the table name). Permissions are `cms..` and `cms.`. + ```java + new CmsQBitProducer() + .withQBitConfig(new CmsQBitConfig() + .withBackendName("rdbms") + .withRole("cms-admins", CmsRole.ADMIN) + .withRole("cms-editors", CmsRole.EDITOR)) + .produce(qInstance); + ``` + +4. **Grant permissions** from your authentication customizer: `CmsSecurity.applySessionPermissions(session, userGroups, config)`. + +At startup the producer checks that the changelog ran for every enabled feature and that the tables exist. `startupMode` `FAIL_FAST` (the default) refuses to start and lists what is missing. `DEGRADED` starts and shows the problem on the CMS home. `SKIP` does not check (unit tests without a database). + +## Configuration reference (`CmsQBitConfig`) + +| Setting | Default | Meaning | +|---|---|---| +| `backendName` | required | The RDBMS backend for every CMS table | +| `tableNamePrefix` | `cms_` | Table name prefix (QQQ and SQL names are equal); must equal the changelog's `cms.tablePrefix` | +| `namePrefix` | `cms` | Prefix of app and widget names (`cmsPages`, `cmsPagesHome`) | +| `permissionBaseName` | `cms` | Base of qbit-wide permissions (`cms.admin`, `cms.publish`) | +| `features` | every available feature | `CmsFeature` set; `CORE` is required, and a feature this version does not implement yet is rejected | +| `appName`, `appLabel`, `parentAppName` | `cms`, `CMS`, none | The top app and where it nests in your app tree | +| `openReads` | `false` | When true, reading CMS tables needs no permission (writes always do) | +| `startupMode` | `FAIL_FAST` | `FAIL_FAST`, `DEGRADED` or `SKIP` (see above) | +| `roleMapping` | empty | Identity-provider group name to `CmsRole` | + +A namespace (`withNamespace("siteTwo")`) fills in all three prefixes for a second install in the same instance (`site_two_page`, `siteTwoPages`, `site_two.admin`). + +## Features + +| Feature | Tables | Status | +|---|---|---| +| `CORE` | site, domain, redirect, redirect type, page, page type, page section, page section type, snippet, menu, menu item | available | +| `MEDIA` | media, media type, storage SPI (`qbit-object-storage` for S3) | next | +| `BLOG` | blog, blog type, post, tags, authors, post media, versions | next | +| `PROJECTS`, `PHOTOS`, `PUBLISHING`, `STREAM`, `DATA_HEALTH_RULES` | see the design | planned | + +## The admin + +The qbit adds one app (`CMS`) with a home, and one sub-app per area, each with its own home: + +- **Sites:** sites (domains are a list on each site) and redirects; Settings has redirect types. +- **Pages:** pages (sections and child pages are lists on each page) and snippets; Settings has page types and page section types. +- **Navigation:** menus (items are a list on each menu). + +The nav shows only main tables and reference data; child tables are edited on their parents' records. Each home shows only real data read as the current user: counts, drafts, inactive rows and recently changed records, readable at any width in light and dark mode. The qbit never sets the instance's home app. + +## Permissions + +Every CMS table has QQQ permission rules. The table permissions are `
.read`, `.insert`, `.edit` and `.delete` (for example `cms_page.edit`). The qbit-wide permissions are `cms.admin` and `cms.publish`. + +| Role | Grants | +|---|---| +| `ADMIN` | everything, including reference data, `cms.admin` and `cms.publish` | +| `EDITOR` | read everything; write content tables | +| `PUBLISHER` | `EDITOR` plus `cms.publish` | +| `DRAFTER` | read everything; insert and edit content (no deletes, no publishing) | +| `VIEWER` | read everything | + +The qbit is built for QQQ core permission enforcement (`qInstance.setEnforcePermissionsInCoreActions(true)`, the default from QQQ 4.2). + +## Operational tables + +All CMS data is in normal, visible QQQ tables. Nothing is hidden and there is no side store. The schema is in `docs/ddl/postgres.sql` (generated from the changelog). + +## Upgrading + +Read the CHANGELOG's "Schema changes" before deploying. Run your migrations before the new app version. Released changesets never change; new versions only append changesets. ## Adopting in another app @@ -37,7 +111,7 @@ Follow the QQQ [adoption checklist](https://github.com/QRun-IO/qqq/blob/develop/ ./mvnw verify ``` -Always use the Maven wrapper (Maven 3.9.11); Maven 3.10 cannot read the parent POM. +Always use the Maven wrapper (Maven 3.9.11); Maven 3.10 cannot read the parent POM. The PostgreSQL tests use Testcontainers and are skipped when Docker is not available. ## License diff --git a/checkstyle/license.txt b/checkstyle/license.txt index 92332b5..4cbecc1 100644 --- a/checkstyle/license.txt +++ b/checkstyle/license.txt @@ -1,15 +1,11 @@ /* - * QQQ - Low-code Application Framework for Engineers. - * Copyright (C) 2021-2025. Kingsrook, LLC - * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States - * contact@kingsrook.com - * https://github.com/Kingsrook/ + * Copyright 2026 Kingsrook, LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * https://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/docs/ddl/postgres.sql b/docs/ddl/postgres.sql new file mode 100644 index 0000000..b88b71f --- /dev/null +++ b/docs/ddl/postgres.sql @@ -0,0 +1,372 @@ +-- qbit-cms reference DDL (PostgreSQL), generated from the qbit's Liquibase changelog +-- (src/main/resources/qbit-cms/db/changelog/qbit-cms.changelog.yaml) with cms.tablePrefix=cms_ and every feature on. +-- For hosts that do not run Liquibase. The changelog is the source of truth; regenerate on schema changes. + + + +CREATE TABLE public.cms_domain ( + id bigint NOT NULL, + name character varying(40) NOT NULL, + short_name character varying(20) NOT NULL, + description character varying(255), + fqdn character varying(255) NOT NULL, + is_primary boolean NOT NULL, + site_id bigint NOT NULL, + create_date timestamp without time zone NOT NULL, + modify_date timestamp without time zone NOT NULL +); + +ALTER TABLE public.cms_domain ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.cms_domain_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + +CREATE TABLE public.cms_menu ( + id bigint NOT NULL, + name character varying(100) NOT NULL, + slug character varying(100) NOT NULL, + description character varying(255), + site_id bigint NOT NULL, + menu_type character varying(50) NOT NULL, + is_active boolean, + create_date timestamp without time zone NOT NULL, + modify_date timestamp without time zone NOT NULL +); + +ALTER TABLE public.cms_menu ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.cms_menu_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + +CREATE TABLE public.cms_menu_item ( + id bigint NOT NULL, + menu_id bigint NOT NULL, + parent_id bigint, + name character varying(100) NOT NULL, + slug character varying(100) NOT NULL, + item_type character varying(50) NOT NULL, + link_url character varying(500), + route_path character varying(200), + target character varying(20), + icon character varying(100), + description character varying(255), + display_order integer, + is_active boolean, + css_classes character varying(200), + create_date timestamp without time zone NOT NULL, + modify_date timestamp without time zone NOT NULL +); + +ALTER TABLE public.cms_menu_item ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.cms_menu_item_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + +CREATE TABLE public.cms_page ( + id bigint NOT NULL, + name character varying(100) NOT NULL, + slug character varying(100) NOT NULL, + title character varying(200) NOT NULL, + content text, + page_type_id bigint NOT NULL, + template character varying(50), + is_published boolean NOT NULL, + publish_date timestamp without time zone, + sort_order integer NOT NULL, + parent_page_id bigint, + site_id bigint NOT NULL, + meta_description character varying(500), + meta_keywords character varying(255), + og_image character varying(255), + create_date timestamp without time zone NOT NULL, + modify_date timestamp without time zone NOT NULL +); + +ALTER TABLE public.cms_page ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.cms_page_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + +CREATE TABLE public.cms_page_section ( + id bigint NOT NULL, + name character varying(100) NOT NULL, + css_class_name character varying(255), + section_type_id bigint NOT NULL, + content text, + sort_order integer NOT NULL, + page_id bigint NOT NULL, + create_date timestamp without time zone NOT NULL, + modify_date timestamp without time zone NOT NULL +); + +ALTER TABLE public.cms_page_section ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.cms_page_section_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + +CREATE TABLE public.cms_page_section_type ( + id bigint NOT NULL, + name character varying(100) NOT NULL, + code character varying(50) NOT NULL, + description character varying(255), + is_active boolean NOT NULL, + sort_order integer NOT NULL, + create_date timestamp without time zone NOT NULL, + modify_date timestamp without time zone NOT NULL +); + +ALTER TABLE public.cms_page_section_type ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.cms_page_section_type_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + +CREATE TABLE public.cms_page_type ( + id bigint NOT NULL, + name character varying(100) NOT NULL, + code character varying(50) NOT NULL, + description character varying(255), + is_active boolean NOT NULL, + sort_order integer NOT NULL, + create_date timestamp without time zone NOT NULL, + modify_date timestamp without time zone NOT NULL +); + +ALTER TABLE public.cms_page_type ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.cms_page_type_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + +CREATE TABLE public.cms_redirect ( + id bigint NOT NULL, + name character varying(100) NOT NULL, + description character varying(500), + source_path character varying(500) NOT NULL, + target_path character varying(500) NOT NULL, + redirect_type_id bigint NOT NULL, + match_type character varying(20) NOT NULL, + is_active boolean NOT NULL, + priority integer NOT NULL, + preserve_query_params boolean NOT NULL, + hit_count bigint NOT NULL, + last_hit_date timestamp without time zone, + expiry_date timestamp without time zone, + site_id bigint NOT NULL, + create_date timestamp without time zone NOT NULL, + modify_date timestamp without time zone NOT NULL +); + +ALTER TABLE public.cms_redirect ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.cms_redirect_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + +CREATE TABLE public.cms_redirect_type ( + id bigint NOT NULL, + name character varying(100) NOT NULL, + code character varying(50) NOT NULL, + description character varying(500), + http_status_code integer NOT NULL, + is_active boolean NOT NULL, + sort_order integer NOT NULL, + create_date timestamp without time zone NOT NULL, + modify_date timestamp without time zone NOT NULL +); + +ALTER TABLE public.cms_redirect_type ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.cms_redirect_type_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + +CREATE TABLE public.cms_site ( + id bigint NOT NULL, + name character varying(40) NOT NULL, + short_name character varying(20) NOT NULL, + description character varying(255), + create_date timestamp without time zone NOT NULL, + modify_date timestamp without time zone NOT NULL +); + +ALTER TABLE public.cms_site ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.cms_site_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + +CREATE TABLE public.cms_snippet ( + id bigint NOT NULL, + name character varying(100) NOT NULL, + short_name character varying(50) NOT NULL, + content text, + css_class_name character varying(255), + is_active boolean NOT NULL, + sort_order integer NOT NULL, + site_id bigint NOT NULL, + create_date timestamp without time zone NOT NULL, + modify_date timestamp without time zone NOT NULL +); + +ALTER TABLE public.cms_snippet ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.cms_snippet_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + +ALTER TABLE ONLY public.cms_domain + ADD CONSTRAINT pk_cms_domain PRIMARY KEY (id); + +ALTER TABLE ONLY public.cms_menu + ADD CONSTRAINT pk_cms_menu PRIMARY KEY (id); + +ALTER TABLE ONLY public.cms_menu_item + ADD CONSTRAINT pk_cms_menu_item PRIMARY KEY (id); + +ALTER TABLE ONLY public.cms_page + ADD CONSTRAINT pk_cms_page PRIMARY KEY (id); + +ALTER TABLE ONLY public.cms_page_section + ADD CONSTRAINT pk_cms_page_section PRIMARY KEY (id); + +ALTER TABLE ONLY public.cms_page_section_type + ADD CONSTRAINT pk_cms_page_section_type PRIMARY KEY (id); + +ALTER TABLE ONLY public.cms_page_type + ADD CONSTRAINT pk_cms_page_type PRIMARY KEY (id); + +ALTER TABLE ONLY public.cms_redirect + ADD CONSTRAINT pk_cms_redirect PRIMARY KEY (id); + +ALTER TABLE ONLY public.cms_redirect_type + ADD CONSTRAINT pk_cms_redirect_type PRIMARY KEY (id); + +ALTER TABLE ONLY public.cms_site + ADD CONSTRAINT pk_cms_site PRIMARY KEY (id); + +ALTER TABLE ONLY public.cms_snippet + ADD CONSTRAINT pk_cms_snippet PRIMARY KEY (id); + +ALTER TABLE ONLY public.cms_domain + ADD CONSTRAINT uq_cms_domain_fqdn UNIQUE (fqdn); + +ALTER TABLE ONLY public.cms_domain + ADD CONSTRAINT uq_cms_domain_name UNIQUE (name); + +ALTER TABLE ONLY public.cms_domain + ADD CONSTRAINT uq_cms_domain_short_name UNIQUE (short_name); + +ALTER TABLE ONLY public.cms_menu + ADD CONSTRAINT uq_cms_menu_slug_site_id UNIQUE (slug, site_id); + +ALTER TABLE ONLY public.cms_page_section_type + ADD CONSTRAINT uq_cms_page_section_type_code UNIQUE (code); + +ALTER TABLE ONLY public.cms_page_section_type + ADD CONSTRAINT uq_cms_page_section_type_name UNIQUE (name); + +ALTER TABLE ONLY public.cms_page + ADD CONSTRAINT uq_cms_page_slug_parent_page_id UNIQUE (slug, parent_page_id); + +ALTER TABLE ONLY public.cms_page + ADD CONSTRAINT uq_cms_page_slug_site_id UNIQUE (slug, site_id); + +ALTER TABLE ONLY public.cms_page_type + ADD CONSTRAINT uq_cms_page_type_code UNIQUE (code); + +ALTER TABLE ONLY public.cms_page_type + ADD CONSTRAINT uq_cms_page_type_name UNIQUE (name); + +ALTER TABLE ONLY public.cms_redirect_type + ADD CONSTRAINT uq_cms_redirect_type_code UNIQUE (code); + +ALTER TABLE ONLY public.cms_site + ADD CONSTRAINT uq_cms_site_name UNIQUE (name); + +ALTER TABLE ONLY public.cms_snippet + ADD CONSTRAINT uq_cms_snippet_short_name_site_id UNIQUE (short_name, site_id); + +CREATE INDEX idx_cms_menu_item_menu_id ON public.cms_menu_item USING btree (menu_id); + +CREATE INDEX idx_cms_page_section_page_id ON public.cms_page_section USING btree (page_id); + +CREATE INDEX idx_cms_page_site_id_is_published ON public.cms_page USING btree (site_id, is_published); + +CREATE INDEX idx_cms_redirect_site_id_source_path ON public.cms_redirect USING btree (site_id, source_path); + +ALTER TABLE ONLY public.cms_domain + ADD CONSTRAINT fk_cms_domain_site_id FOREIGN KEY (site_id) REFERENCES public.cms_site(id); + +ALTER TABLE ONLY public.cms_menu_item + ADD CONSTRAINT fk_cms_menu_item_menu_id FOREIGN KEY (menu_id) REFERENCES public.cms_menu(id); + +ALTER TABLE ONLY public.cms_menu_item + ADD CONSTRAINT fk_cms_menu_item_parent_id FOREIGN KEY (parent_id) REFERENCES public.cms_menu_item(id); + +ALTER TABLE ONLY public.cms_menu + ADD CONSTRAINT fk_cms_menu_site_id FOREIGN KEY (site_id) REFERENCES public.cms_site(id); + +ALTER TABLE ONLY public.cms_page + ADD CONSTRAINT fk_cms_page_page_type_id FOREIGN KEY (page_type_id) REFERENCES public.cms_page_type(id); + +ALTER TABLE ONLY public.cms_page + ADD CONSTRAINT fk_cms_page_parent_page_id FOREIGN KEY (parent_page_id) REFERENCES public.cms_page(id); + +ALTER TABLE ONLY public.cms_page_section + ADD CONSTRAINT fk_cms_page_section_page_id FOREIGN KEY (page_id) REFERENCES public.cms_page(id); + +ALTER TABLE ONLY public.cms_page_section + ADD CONSTRAINT fk_cms_page_section_section_type_id FOREIGN KEY (section_type_id) REFERENCES public.cms_page_section_type(id); + +ALTER TABLE ONLY public.cms_page + ADD CONSTRAINT fk_cms_page_site_id FOREIGN KEY (site_id) REFERENCES public.cms_site(id); + +ALTER TABLE ONLY public.cms_redirect + ADD CONSTRAINT fk_cms_redirect_redirect_type_id FOREIGN KEY (redirect_type_id) REFERENCES public.cms_redirect_type(id); + +ALTER TABLE ONLY public.cms_redirect + ADD CONSTRAINT fk_cms_redirect_site_id FOREIGN KEY (site_id) REFERENCES public.cms_site(id); + +ALTER TABLE ONLY public.cms_snippet + ADD CONSTRAINT fk_cms_snippet_site_id FOREIGN KEY (site_id) REFERENCES public.cms_site(id); + + diff --git a/pom.xml b/pom.xml index 9e2bb12..3b025a4 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,7 @@ 210.8.154.33.0 + 1.21.4 @@ -94,6 +95,23 @@ 2.2.220 test + + com.kingsrook.qqq + qqq-backend-module-postgres + test + + + org.testcontainers + postgresql + ${testcontainers.version} + test + + + org.testcontainers + junit-jupiter + ${testcontainers.version} + test + org.liquibase liquibase-core @@ -104,6 +122,37 @@ + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.3.1 + + + com.puppycrawl.tools + checkstyle + 10.12.6 + + + + checkstyle/config.xml + checkstyle/license.txt + UTF-8 + true + false + true + warning + false + + + + validate + validate + + check + + + + org.jacoco jacoco-maven-plugin diff --git a/src/main/java/com/kingsrook/qbits/cms/CmsFeature.java b/src/main/java/com/kingsrook/qbits/cms/CmsFeature.java new file mode 100644 index 0000000..8313d2b --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/CmsFeature.java @@ -0,0 +1,154 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms; + + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; +import java.util.Set; + + +/******************************************************************************* + ** The feature areas of the CMS (spec section 2.3). A host turns features on + ** and off in CmsQBitConfig.features; a feature that is off produces no meta + ** data, and its changesets are skipped by the cms.features changelog + ** property. + ** + ** CORE is always on. A feature that is not built yet (available = false) is + ** rejected by validation, so a host never believes it installed something + ** that is not there. + *******************************************************************************/ +public enum CmsFeature +{ + /** Sites, domains, redirects, pages, page sections, snippets, menus. */ + CORE(true), + + /** The media library, media types and the storage SPI. */ + MEDIA(false), + + /** Blogs, posts, tags, authors, post media and versions. */ + BLOG(false, MEDIA), + + /** Projects, project categories and project updates. */ + PROJECTS(false, MEDIA), + + /** Photo albums, folders, photos and photo tags. */ + PHOTOS(false, MEDIA), + + /** Publishing processes, publications and receipts. */ + PUBLISHING(false), + + /** The public content stream across content kinds. */ + STREAM(false, BLOG), + + /** CMS Data Health rules, for hosts with a Data Health framework (D10). */ + DATA_HEALTH_RULES(false); + + private final boolean available; + private final List requires; + + + + /******************************************************************************* + ** Constructor. + ** + ** @param available whether this version of the qbit implements the feature + ** @param requires features this one needs + *******************************************************************************/ + CmsFeature(boolean available, CmsFeature... requires) + { + this.available = available; + this.requires = List.of(requires); + } + + + + /******************************************************************************* + ** Whether this version of the qbit implements the feature. + *******************************************************************************/ + public boolean isAvailable() + { + return (available); + } + + + + /******************************************************************************* + ** The features this one needs (beyond CORE, which is always on). + *******************************************************************************/ + public List getRequires() + { + return (requires); + } + + + + /******************************************************************************* + ** Every feature this version implements: the default feature set. + *******************************************************************************/ + public static Set allAvailable() + { + EnumSet rs = EnumSet.noneOf(CmsFeature.class); + for(CmsFeature feature : values()) + { + if(feature.available) + { + rs.add(feature); + } + } + return (rs); + } + + + + /******************************************************************************* + ** Validation messages for a feature set: unknown-in-this-version features, + ** missing dependencies, and PUBLISHING without BLOG or PROJECTS. + ** + ** @param features the requested features + ** @return the problems (empty when valid) + *******************************************************************************/ + public static List validate(Set features) + { + List errors = new ArrayList<>(); + if(features == null || !features.contains(CORE)) + { + errors.add("features must include CORE"); + return (errors); + } + for(CmsFeature feature : features) + { + if(!feature.available) + { + errors.add("feature " + feature + " is not available in this version of qbit-cms"); + } + for(CmsFeature required : feature.requires) + { + if(!features.contains(required)) + { + errors.add("feature " + feature + " requires " + required); + } + } + } + if(features.contains(PUBLISHING) && !features.contains(BLOG) && !features.contains(PROJECTS)) + { + errors.add("feature PUBLISHING requires BLOG or PROJECTS"); + } + return (errors); + } +} diff --git a/src/main/java/com/kingsrook/qbits/cms/CmsQBitConfig.java b/src/main/java/com/kingsrook/qbits/cms/CmsQBitConfig.java index ee17300..be549ad 100644 --- a/src/main/java/com/kingsrook/qbits/cms/CmsQBitConfig.java +++ b/src/main/java/com/kingsrook/qbits/cms/CmsQBitConfig.java @@ -17,34 +17,86 @@ package com.kingsrook.qbits.cms; +import java.util.EnumSet; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Pattern; +import com.kingsrook.qbits.cms.security.CmsRole; +import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.metadata.qbits.QBitConfig; import com.kingsrook.qqq.backend.core.utils.StringUtils; +import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData; /******************************************************************************* - ** Host-facing configuration for the CMS QBit. + ** Host-facing configuration for the CMS QBit (spec section 2.4). ** - ** Tables are named cms_ (lowercase snake_case, backend name equal - ** to the table name); permissions are cms.. + ** Tables are named tableNamePrefix + lowercase snake_case (cms_page by + ** default); the QQQ table name equals the backend (SQL) table name, and the + ** prefix must equal the cms.tablePrefix property the host gives the + ** changelog. Apps and widgets are named namePrefix + CamelCase (cmsPages). + ** Table permissions are the table name plus .read, .insert, .edit or .delete + ** (cms_page.edit); qbit-wide permissions are permissionBaseName + .action + ** (cms.admin). *******************************************************************************/ public class CmsQBitConfig implements QBitConfig { - public static final String TABLE_NAME_PREFIX = "cms_"; - public static final String PERMISSION_BASE_NAME = "cms"; + public static final String DEFAULT_TABLE_NAME_PREFIX = "cms_"; + public static final String DEFAULT_NAME_PREFIX = "cms"; + public static final String DEFAULT_PERMISSION_BASE = "cms"; + public static final String DEFAULT_APP_LABEL = "CMS"; + public static final String CHANGELOG = "qbit-cms/db/changelog/qbit-cms.changelog.yaml"; + public static final String CHANGELOG_LOGICAL_FILE_PATH = "qbit-cms/changelog"; - private String backendName; + private static final Pattern TABLE_PREFIX = Pattern.compile("^[a-z][a-z0-9_]{0,20}_$"); + private static final Pattern NAME_PREFIX = Pattern.compile("^[a-z][a-zA-Z0-9]{0,20}$"); + + private String backendName; + private String tableNamePrefix = DEFAULT_TABLE_NAME_PREFIX; + private String namePrefix = DEFAULT_NAME_PREFIX; + private String permissionBaseName = DEFAULT_PERMISSION_BASE; + private Set features = CmsFeature.allAvailable(); + private String appName; + private String appLabel = DEFAULT_APP_LABEL; + private String parentAppName; + private Boolean openReads = false; + private CmsStartupMode startupMode = CmsStartupMode.FAIL_FAST; + private Map roleMapping = new LinkedHashMap<>(); + + private CmsRuntime runtime; /******************************************************************************* - ** The backend must be named. + ** Validate against the instance: an RDBMS backend, well-formed prefixes, + ** a consistent feature set, and a parent app that exists. *******************************************************************************/ @Override public void validate(QInstance qInstance, List errors) { - assertCondition(StringUtils.hasContent(backendName), "backendName is required for the CMS QBit", errors); + if(assertCondition(StringUtils.hasContent(backendName), "backendName is required for the CMS QBit", errors)) + { + QBackendMetaData backend = qInstance.getBackend(backendName); + if(assertCondition(backend != null, "backendName " + backendName + " is not a backend on this instance", errors)) + { + assertCondition(backend instanceof RDBMSBackendMetaData, "backend " + backendName + " must be an RDBMS backend (the CMS uses SQL joins and views)", errors); + } + } + assertCondition(tableNamePrefix != null && TABLE_PREFIX.matcher(tableNamePrefix).matches(), + "tableNamePrefix must be lowercase letters, digits and underscores, ending in _ (for example cms_): " + tableNamePrefix, errors); + assertCondition(namePrefix != null && NAME_PREFIX.matcher(namePrefix).matches(), + "namePrefix must start with a lowercase letter and be letters and digits (for example cms): " + namePrefix, errors); + assertCondition(StringUtils.hasContent(permissionBaseName), "permissionBaseName is required", errors); + errors.addAll(CmsFeature.validate(features)); + if(StringUtils.hasContent(parentAppName)) + { + assertCondition(qInstance.getApp(parentAppName) != null, "parentAppName " + parentAppName + " is not an app on this instance (define it before producing the CMS)", errors); + } + assertCondition(roleMapping != null, "roleMapping may be empty but not null", errors); + assertCondition(startupMode != null, "startupMode is required", errors); } @@ -60,6 +112,78 @@ public class CmsQBitConfig implements QBitConfig + /******************************************************************************* + ** The physical (and QQQ) table name of a logical table name. + ** + ** @param logicalTableName e.g. "page" + ** @return e.g. "cms_page" + *******************************************************************************/ + public String applyPrefix(String logicalTableName) + { + return (tableNamePrefix + logicalTableName); + } + + + + /******************************************************************************* + ** A prefixed app, widget or process name. + ** + ** @param suffix e.g. "Pages" or "PagesHome" + ** @return e.g. "cmsPages" + *******************************************************************************/ + public String name(String suffix) + { + return (namePrefix + suffix); + } + + + + /******************************************************************************* + ** The name of the CMS top app (appName, else the name prefix). + *******************************************************************************/ + public String getEffectiveAppName() + { + return (StringUtils.hasContent(appName) ? appName : namePrefix); + } + + + + /******************************************************************************* + ** A qbit-wide permission name. + ** + ** @param action e.g. "admin" + ** @return e.g. "cms.admin" + *******************************************************************************/ + public String permission(String action) + { + return (permissionBaseName + "." + action); + } + + + + /******************************************************************************* + ** Whether a feature is on. + *******************************************************************************/ + public boolean hasFeature(CmsFeature feature) + { + return (features != null && features.contains(feature)); + } + + + + /******************************************************************************* + ** Description for logs (the config holds no secrets yet). + *******************************************************************************/ + @Override + public String toString() + { + return ("CmsQBitConfig{backendName=" + backendName + ", tableNamePrefix=" + tableNamePrefix + ", namePrefix=" + namePrefix + + ", features=" + features + ", app=" + getEffectiveAppName() + ", parentAppName=" + parentAppName + ", openReads=" + openReads + + ", startupMode=" + startupMode + ", roleMapping=" + roleMapping + "}"); + } + + + /******************************************************************************* ** Getter for backendName *******************************************************************************/ @@ -89,4 +213,349 @@ public class CmsQBitConfig implements QBitConfig return (this); } + + + /******************************************************************************* + ** Getter for tableNamePrefix + *******************************************************************************/ + public String getTableNamePrefix() + { + return (this.tableNamePrefix); + } + + + + /******************************************************************************* + ** Setter for tableNamePrefix + *******************************************************************************/ + public void setTableNamePrefix(String tableNamePrefix) + { + this.tableNamePrefix = tableNamePrefix; + } + + + + /******************************************************************************* + ** Fluent setter for tableNamePrefix + *******************************************************************************/ + public CmsQBitConfig withTableNamePrefix(String tableNamePrefix) + { + this.tableNamePrefix = tableNamePrefix; + return (this); + } + + + + /******************************************************************************* + ** Getter for namePrefix + *******************************************************************************/ + public String getNamePrefix() + { + return (this.namePrefix); + } + + + + /******************************************************************************* + ** Setter for namePrefix + *******************************************************************************/ + public void setNamePrefix(String namePrefix) + { + this.namePrefix = namePrefix; + } + + + + /******************************************************************************* + ** Fluent setter for namePrefix + *******************************************************************************/ + public CmsQBitConfig withNamePrefix(String namePrefix) + { + this.namePrefix = namePrefix; + return (this); + } + + + + /******************************************************************************* + ** Getter for permissionBaseName + *******************************************************************************/ + public String getPermissionBaseName() + { + return (this.permissionBaseName); + } + + + + /******************************************************************************* + ** Setter for permissionBaseName + *******************************************************************************/ + public void setPermissionBaseName(String permissionBaseName) + { + this.permissionBaseName = permissionBaseName; + } + + + + /******************************************************************************* + ** Fluent setter for permissionBaseName + *******************************************************************************/ + public CmsQBitConfig withPermissionBaseName(String permissionBaseName) + { + this.permissionBaseName = permissionBaseName; + return (this); + } + + + + /******************************************************************************* + ** Getter for features + *******************************************************************************/ + public Set getFeatures() + { + return (this.features); + } + + + + /******************************************************************************* + ** Setter for features + *******************************************************************************/ + public void setFeatures(Set features) + { + this.features = features == null || features.isEmpty() ? EnumSet.noneOf(CmsFeature.class) : EnumSet.copyOf(features); + } + + + + /******************************************************************************* + ** Fluent setter for features + *******************************************************************************/ + public CmsQBitConfig withFeatures(Set features) + { + setFeatures(features); + return (this); + } + + + + /******************************************************************************* + ** Getter for appName + *******************************************************************************/ + public String getAppName() + { + return (this.appName); + } + + + + /******************************************************************************* + ** Setter for appName + *******************************************************************************/ + public void setAppName(String appName) + { + this.appName = appName; + } + + + + /******************************************************************************* + ** Fluent setter for appName + *******************************************************************************/ + public CmsQBitConfig withAppName(String appName) + { + this.appName = appName; + return (this); + } + + + + /******************************************************************************* + ** Getter for appLabel + *******************************************************************************/ + public String getAppLabel() + { + return (this.appLabel); + } + + + + /******************************************************************************* + ** Setter for appLabel + *******************************************************************************/ + public void setAppLabel(String appLabel) + { + this.appLabel = appLabel; + } + + + + /******************************************************************************* + ** Fluent setter for appLabel + *******************************************************************************/ + public CmsQBitConfig withAppLabel(String appLabel) + { + this.appLabel = appLabel; + return (this); + } + + + + /******************************************************************************* + ** Getter for parentAppName + *******************************************************************************/ + public String getParentAppName() + { + return (this.parentAppName); + } + + + + /******************************************************************************* + ** Setter for parentAppName + *******************************************************************************/ + public void setParentAppName(String parentAppName) + { + this.parentAppName = parentAppName; + } + + + + /******************************************************************************* + ** Fluent setter for parentAppName + *******************************************************************************/ + public CmsQBitConfig withParentAppName(String parentAppName) + { + this.parentAppName = parentAppName; + return (this); + } + + + + /******************************************************************************* + ** Getter for openReads + *******************************************************************************/ + public Boolean getOpenReads() + { + return (this.openReads); + } + + + + /******************************************************************************* + ** Setter for openReads + *******************************************************************************/ + public void setOpenReads(Boolean openReads) + { + this.openReads = openReads; + } + + + + /******************************************************************************* + ** Fluent setter for openReads: when true, reading CMS tables needs no + ** permission (writes always do). + *******************************************************************************/ + public CmsQBitConfig withOpenReads(Boolean openReads) + { + this.openReads = openReads; + return (this); + } + + + + /******************************************************************************* + ** Getter for startupMode + *******************************************************************************/ + public CmsStartupMode getStartupMode() + { + return (this.startupMode); + } + + + + /******************************************************************************* + ** Setter for startupMode + *******************************************************************************/ + public void setStartupMode(CmsStartupMode startupMode) + { + this.startupMode = startupMode; + } + + + + /******************************************************************************* + ** Fluent setter for startupMode + *******************************************************************************/ + public CmsQBitConfig withStartupMode(CmsStartupMode startupMode) + { + this.startupMode = startupMode; + return (this); + } + + + + /******************************************************************************* + ** Getter for roleMapping + *******************************************************************************/ + public Map getRoleMapping() + { + return (this.roleMapping); + } + + + + /******************************************************************************* + ** Setter for roleMapping + *******************************************************************************/ + public void setRoleMapping(Map roleMapping) + { + this.roleMapping = roleMapping; + } + + + + /******************************************************************************* + ** Fluent setter for roleMapping: identity-provider group name to CMS role. + *******************************************************************************/ + public CmsQBitConfig withRoleMapping(Map roleMapping) + { + this.roleMapping = roleMapping; + return (this); + } + + + + /******************************************************************************* + ** The install's runtime state, set when the qbit is produced. + *******************************************************************************/ + public CmsRuntime getRuntime() + { + return (this.runtime); + } + + + + /******************************************************************************* + ** Setter for runtime (the producer sets it). + *******************************************************************************/ + public void setRuntime(CmsRuntime runtime) + { + this.runtime = runtime; + } + + + + /******************************************************************************* + ** Fluent adder for one roleMapping entry. + *******************************************************************************/ + public CmsQBitConfig withRole(String groupName, CmsRole role) + { + if(this.roleMapping == null) + { + this.roleMapping = new LinkedHashMap<>(); + } + this.roleMapping.put(groupName, role); + return (this); + } } diff --git a/src/main/java/com/kingsrook/qbits/cms/CmsQBitProducer.java b/src/main/java/com/kingsrook/qbits/cms/CmsQBitProducer.java index 0fab015..e247e66 100644 --- a/src/main/java/com/kingsrook/qbits/cms/CmsQBitProducer.java +++ b/src/main/java/com/kingsrook/qbits/cms/CmsQBitProducer.java @@ -17,22 +17,57 @@ package com.kingsrook.qbits.cms; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import com.kingsrook.qbits.cms.metadata.CmsAppBuilder; +import com.kingsrook.qbits.cms.metadata.CmsTableBuilder; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.logging.QLogger; +import com.kingsrook.qqq.backend.core.model.metadata.MetaDataProducerMultiOutput; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.core.model.metadata.dashboard.QWidgetMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.joins.QJoinMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.layout.QAppMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.possiblevalues.QPossibleValueSource; import com.kingsrook.qqq.backend.core.model.metadata.qbits.QBitMetaData; import com.kingsrook.qqq.backend.core.model.metadata.qbits.QBitMetaDataProducer; +import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; +import com.kingsrook.qqq.backend.core.utils.StringUtils; +import static com.kingsrook.qqq.backend.core.logging.LogUtils.logPair; /******************************************************************************* - ** Produces the CMS QBit. Component producers in this package are found by - ** package scanning. + ** Produces the CMS QBit: standard QQQ tables for the enabled features, their + ** possible-value sources, joins and child lists, the CMS app with one home + ** per area, and permission rules on everything (spec QRun-IO/qqq#1083). + ** + **
+ ** new CmsQBitProducer()
+ **    .withQBitConfig(new CmsQBitConfig()
+ **       .withBackendName("rdbms")
+ **       .withRole("cms-admins", CmsRole.ADMIN))
+ **    .produce(qInstance);
+ ** 
+ ** + ** The database comes from the qbit's Liquibase changelog + ** (CmsQBitConfig.CHANGELOG), which the host includes and runs; its + ** cms.tablePrefix property must equal the config's tableNamePrefix. At + ** startup the producer checks that the changelog ran (startupMode). + ** + ** The producer builds everything itself instead of scanning for component + ** producers, so the output depends only on the config. *******************************************************************************/ public class CmsQBitProducer implements QBitMetaDataProducer { + private static final QLogger LOG = QLogger.getLogger(CmsQBitProducer.class); + public static final String GROUP_ID = "com.kingsrook.qbits"; public static final String ARTIFACT_ID = "qbit-cms"; public static final String VERSION = "0.1.0"; private CmsQBitConfig qBitConfig; - private String namespace; + private String namespace; @@ -59,7 +94,9 @@ public class CmsQBitProducer implements QBitMetaDataProducer /******************************************************************************* - ** Fluent setter for the namespace. + ** Fluent setter for the namespace. A second install in one instance needs + ** its own namespace; the namespace becomes the table prefix, name prefix + ** and permission base unless the config sets them. *******************************************************************************/ public CmsQBitProducer withNamespace(String namespace) { @@ -100,4 +137,138 @@ public class CmsQBitProducer implements QBitMetaDataProducer return (qBitConfig != null); } + + + /******************************************************************************* + ** Validate, build and add everything to the instance, then check the + ** schema. Returns an empty output, so a host that also adds the output to + ** the instance adds nothing twice. + *******************************************************************************/ + @Override + public MetaDataProducerMultiOutput produce(QInstance qInstance) throws QException + { + if(qBitConfig == null) + { + throw (new QException("CMS QBit configuration validation failed: no config was supplied (call withQBitConfig)")); + } + applyNamespace(); + + List errors = new ArrayList<>(); + qBitConfig.validate(qInstance, errors); + if(!errors.isEmpty()) + { + throw (new QException("CMS QBit configuration validation failed: " + String.join("; ", errors))); + } + + CmsTableBuilder.Built tables = new CmsTableBuilder(qBitConfig).build(qInstance); + CmsAppBuilder.Built apps = new CmsAppBuilder(qBitConfig).build(); + MetaDataProducerMultiOutput output = new MetaDataProducerMultiOutput(); + tables.tables().values().forEach(output::add); + tables.possibleValueSources().forEach(output::add); + tables.joins().forEach(output::add); + tables.widgets().forEach(output::add); + apps.widgets().forEach(output::add); + apps.apps().forEach(output::add); + + List collisions = collisions(qInstance, output); + if(!collisions.isEmpty()) + { + throw (new QException("CMS QBit names collide with names already on the instance (set a different tableNamePrefix and namePrefix, or a namespace): " + + String.join(", ", collisions))); + } + + QBitMetaData qBitMetaData = getQBitMetaData(); + qInstance.addQBit(qBitMetaData); + for(QTableMetaData table : output.getEach(QTableMetaData.class)) + { + if(qBitConfig.getTableMetaDataCustomizer() != null) + { + qBitConfig.getTableMetaDataCustomizer().customizeMetaData(qInstance, table); + } + table.setSourceQBitName(qBitMetaData.getName()); + } + output.addSelfToInstance(qInstance); + + if(StringUtils.hasContent(qBitConfig.getParentAppName())) + { + qInstance.getApp(qBitConfig.getParentAppName()).withChild(qInstance.getApp(qBitConfig.getEffectiveAppName())); + } + + postProduceActions(output, qInstance); + return (new MetaDataProducerMultiOutput()); + } + + + + /******************************************************************************* + ** Check the schema per the startup mode and set the runtime. + *******************************************************************************/ + @Override + public void postProduceActions(MetaDataProducerMultiOutput output, QInstance qInstance) throws QException + { + List problems = qBitConfig.getStartupMode() == CmsStartupMode.SKIP ? List.of() : CmsSchemaCheck.check(qInstance, qBitConfig); + if(!problems.isEmpty() && qBitConfig.getStartupMode() == CmsStartupMode.FAIL_FAST) + { + throw (new QException("The CMS database is not up to date (startupMode FAIL_FAST): " + String.join(" ", problems))); + } + if(!problems.isEmpty()) + { + LOG.warn("The CMS database is not up to date; starting degraded", logPair("problems", problems)); + } + qBitConfig.setRuntime(new CmsRuntime(qBitConfig, problems)); + + LOG.info("CMS QBit produced", logPair("version", VERSION), logPair("backendName", qBitConfig.getBackendName()), + logPair("tablePrefix", qBitConfig.getTableNamePrefix()), logPair("features", qBitConfig.getFeatures()), + logPair("app", qBitConfig.getEffectiveAppName()), logPair("startupMode", qBitConfig.getStartupMode())); + } + + + + /******************************************************************************* + ** A namespace fills in prefixes the config leaves at their defaults. + *******************************************************************************/ + private void applyNamespace() + { + if(!StringUtils.hasContent(namespace)) + { + return; + } + String snake = namespace.replaceAll("([a-z0-9])([A-Z])", "$1_$2").toLowerCase(Locale.ROOT).replaceAll("[^a-z0-9_]", "_"); + if(CmsQBitConfig.DEFAULT_TABLE_NAME_PREFIX.equals(qBitConfig.getTableNamePrefix())) + { + qBitConfig.setTableNamePrefix(snake.endsWith("_") ? snake : snake + "_"); + } + if(CmsQBitConfig.DEFAULT_NAME_PREFIX.equals(qBitConfig.getNamePrefix())) + { + StringBuilder camel = new StringBuilder(); + for(String part : snake.split("_")) + { + if(!part.isEmpty()) + { + camel.append(camel.isEmpty() ? part : Character.toUpperCase(part.charAt(0)) + part.substring(1)); + } + } + qBitConfig.setNamePrefix(camel.toString()); + } + if(CmsQBitConfig.DEFAULT_PERMISSION_BASE.equals(qBitConfig.getPermissionBaseName())) + { + qBitConfig.setPermissionBaseName(snake.replaceAll("_+$", "")); + } + } + + + + /******************************************************************************* + ** Names the qbit would add that the instance already has. + *******************************************************************************/ + static List collisions(QInstance qInstance, MetaDataProducerMultiOutput output) + { + List rs = new ArrayList<>(); + output.getEach(QTableMetaData.class).stream().filter(t -> qInstance.getTable(t.getName()) != null).forEach(t -> rs.add("table " + t.getName())); + output.getEach(QPossibleValueSource.class).stream().filter(p -> qInstance.getPossibleValueSource(p.getName()) != null).forEach(p -> rs.add("possible-value source " + p.getName())); + output.getEach(QJoinMetaData.class).stream().filter(j -> qInstance.getJoin(j.getName()) != null).forEach(j -> rs.add("join " + j.getName())); + output.getEach(QWidgetMetaData.class).stream().filter(w -> qInstance.getWidget(w.getName()) != null).forEach(w -> rs.add("widget " + w.getName())); + output.getEach(QAppMetaData.class).stream().filter(a -> qInstance.getApp(a.getName()) != null).forEach(a -> rs.add("app " + a.getName())); + return (rs); + } } diff --git a/src/main/java/com/kingsrook/qbits/cms/CmsRuntime.java b/src/main/java/com/kingsrook/qbits/cms/CmsRuntime.java new file mode 100644 index 0000000..3f6933f --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/CmsRuntime.java @@ -0,0 +1,96 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms; + + +import java.util.List; +import java.util.Optional; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.core.model.metadata.qbits.QBitMetaData; + + +/******************************************************************************* + ** Runtime state of one CMS install: its config and the result of the startup + ** schema check. Code that runs per request (widget renderers, processes) + ** finds it by the install's name prefix, so two installs in one instance + ** (two namespaces) stay apart. + *******************************************************************************/ +public class CmsRuntime +{ + private final CmsQBitConfig config; + private final List schemaProblems; + + + + /******************************************************************************* + ** Constructor. + ** + ** @param config the install's config + ** @param schemaProblems what the startup schema check found (empty when fine + ** or not checked) + *******************************************************************************/ + public CmsRuntime(CmsQBitConfig config, List schemaProblems) + { + this.config = config; + this.schemaProblems = List.copyOf(schemaProblems); + } + + + + /******************************************************************************* + ** The config of the CMS install with a name prefix on an instance. + ** + ** @param qInstance the instance + ** @param namePrefix the install's name prefix (CmsQBitConfig.namePrefix) + ** @return the config, if installed + *******************************************************************************/ + public static Optional findConfig(QInstance qInstance, String namePrefix) + { + if(qInstance == null || qInstance.getQBits() == null) + { + return (Optional.empty()); + } + for(QBitMetaData qBit : qInstance.getQBits().values()) + { + if(qBit.getConfig() instanceof CmsQBitConfig config && config.getNamePrefix().equals(namePrefix)) + { + return (Optional.of(config)); + } + } + return (Optional.empty()); + } + + + + /******************************************************************************* + ** Getter for config + *******************************************************************************/ + public CmsQBitConfig getConfig() + { + return (config); + } + + + + /******************************************************************************* + ** Getter for schemaProblems + *******************************************************************************/ + public List getSchemaProblems() + { + return (schemaProblems); + } +} diff --git a/src/main/java/com/kingsrook/qbits/cms/CmsSchemaCheck.java b/src/main/java/com/kingsrook/qbits/cms/CmsSchemaCheck.java new file mode 100644 index 0000000..10253a3 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/CmsSchemaCheck.java @@ -0,0 +1,146 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms; + + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Set; +import com.kingsrook.qbits.cms.metadata.CmsTableDefinition; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager; +import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData; + + +/******************************************************************************* + ** The startup schema check, the "install doctor" (spec section 3.4): the + ** qbit's changelog has run for every enabled feature (its create changesets + ** are recorded in DATABASECHANGELOG under the qbit's logical file path) and + ** every enabled table exists. The qbit never creates or alters anything; it + ** only reports, and the startup mode decides whether that stops the app. + *******************************************************************************/ +public final class CmsSchemaCheck +{ + /** The baseline version of the changesets that create the tables. */ + static final String BASELINE = "1.0.0"; + + + + /******************************************************************************* + ** Not instantiable. + *******************************************************************************/ + private CmsSchemaCheck() + { + } + + + + /******************************************************************************* + ** The problems with the database behind a config (empty when it is fine). + ** + ** @param qInstance the instance (for the backend) + ** @param config the CMS config + ** @return one message per problem + *******************************************************************************/ + public static List check(QInstance qInstance, CmsQBitConfig config) + { + List problems = new ArrayList<>(); + try(Connection connection = ConnectionManager.getConnection((RDBMSBackendMetaData) qInstance.getBackend(config.getBackendName()))) + { + Set recorded = recordedChangesets(connection); + if(recorded == null) + { + problems.add("The qbit-cms changelog has not been run: there is no DATABASECHANGELOG table. Include " + + CmsQBitConfig.CHANGELOG + " in your Liquibase changelog and run your migrations."); + return (problems); + } + + for(CmsTableDefinition definition : CmsTables.definitions(config)) + { + String table = config.applyPrefix(definition.logicalName()); + if(!recorded.contains(BASELINE + "-create-" + definition.logicalName())) + { + problems.add("Changeset " + BASELINE + "-create-" + definition.logicalName() + " (" + table + ") has not run: run your migrations with " + + "cms.tablePrefix=" + config.getTableNamePrefix() + " and the " + definition.feature() + " feature in cms.features."); + } + else if(!tableExists(connection, table)) + { + problems.add("Table " + table + " is missing although its changeset is recorded."); + } + } + } + catch(SQLException e) + { + problems.add("Could not check the CMS schema: " + e.getMessage()); + } + return (problems); + } + + + + /******************************************************************************* + ** The qbit's recorded changeset ids, or null when Liquibase has never run. + *******************************************************************************/ + static Set recordedChangesets(Connection connection) throws SQLException + { + if(!tableExists(connection, "databasechangelog")) + { + return (null); + } + Set ids = new HashSet<>(); + try(PreparedStatement statement = connection.prepareStatement("SELECT ID FROM DATABASECHANGELOG WHERE FILENAME = ?")) + { + statement.setString(1, CmsQBitConfig.CHANGELOG_LOGICAL_FILE_PATH); + try(ResultSet resultSet = statement.executeQuery()) + { + while(resultSet.next()) + { + ids.add(resultSet.getString(1)); + } + } + } + return (ids); + } + + + + /******************************************************************************* + ** Whether a table (or view) exists, in any case the database folds names to. + *******************************************************************************/ + static boolean tableExists(Connection connection, String name) throws SQLException + { + DatabaseMetaData metaData = connection.getMetaData(); + for(String candidate : List.of(name, name.toUpperCase(Locale.ROOT), name.toLowerCase(Locale.ROOT))) + { + try(ResultSet resultSet = metaData.getTables(connection.getCatalog(), null, candidate, new String[] { "TABLE", "VIEW" })) + { + if(resultSet.next()) + { + return (true); + } + } + } + return (false); + } +} diff --git a/src/main/java/com/kingsrook/qbits/cms/CmsStartupMode.java b/src/main/java/com/kingsrook/qbits/cms/CmsStartupMode.java new file mode 100644 index 0000000..2fd604b --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/CmsStartupMode.java @@ -0,0 +1,34 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms; + + +/******************************************************************************* + ** What the qbit does when its startup schema check finds the database + ** behind the code (spec section 3.4, the "install doctor"). + *******************************************************************************/ +public enum CmsStartupMode +{ + /** Refuse to start, listing what is missing (the production default). */ + FAIL_FAST, + + /** Start, log the problems and show them on the CMS home. */ + DEGRADED, + + /** Do not check (unit tests that build meta data without a database). */ + SKIP +} diff --git a/src/main/java/com/kingsrook/qbits/cms/CmsTables.java b/src/main/java/com/kingsrook/qbits/cms/CmsTables.java new file mode 100644 index 0000000..29004ae --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/CmsTables.java @@ -0,0 +1,159 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms; + + +import java.util.List; +import java.util.Optional; +import com.kingsrook.qbits.cms.core.model.CmsDomain; +import com.kingsrook.qbits.cms.core.model.CmsMenu; +import com.kingsrook.qbits.cms.core.model.CmsMenuItem; +import com.kingsrook.qbits.cms.core.model.CmsPage; +import com.kingsrook.qbits.cms.core.model.CmsPageSection; +import com.kingsrook.qbits.cms.core.model.CmsPageSectionType; +import com.kingsrook.qbits.cms.core.model.CmsPageType; +import com.kingsrook.qbits.cms.core.model.CmsRedirect; +import com.kingsrook.qbits.cms.core.model.CmsRedirectType; +import com.kingsrook.qbits.cms.core.model.CmsSite; +import com.kingsrook.qbits.cms.core.model.CmsSnippet; +import com.kingsrook.qbits.cms.metadata.CmsTableDefinition; +import com.kingsrook.qbits.cms.metadata.CmsTableDefinition.Kind; +import com.kingsrook.qqq.backend.core.model.metadata.tables.Tier; + + +/******************************************************************************* + ** The CMS tables: logical names (the physical name is the configured prefix + ** plus the logical name, CmsQBitConfig.applyPrefix) and their definitions. + ** Java code names CMS tables only through these constants and the config, so + ** a host can choose any prefix (spec section 2.4). + *******************************************************************************/ +public final class CmsTables +{ + public static final String SITE = CmsSite.TABLE_NAME; + public static final String DOMAIN = CmsDomain.TABLE_NAME; + public static final String REDIRECT = CmsRedirect.TABLE_NAME; + public static final String REDIRECT_TYPE = CmsRedirectType.TABLE_NAME; + public static final String PAGE = CmsPage.TABLE_NAME; + public static final String PAGE_TYPE = CmsPageType.TABLE_NAME; + public static final String PAGE_SECTION = CmsPageSection.TABLE_NAME; + public static final String PAGE_SECTION_TYPE = CmsPageSectionType.TABLE_NAME; + public static final String SNIPPET = CmsSnippet.TABLE_NAME; + public static final String MENU = CmsMenu.TABLE_NAME; + public static final String MENU_ITEM = CmsMenuItem.TABLE_NAME; + + private static final List DEFINITIONS = List.of( + CmsTableDefinition.builder(SITE, CmsSite.class, CmsFeature.CORE, "Site", "language", Kind.MAIN) + .recordLabel("name") + .section("site", "Site", "language", Tier.T1, "id", "name", "shortName", "description") + .child(DOMAIN, "siteId", "Domains", null, "name") + .unique("name") + .build(), + CmsTableDefinition.builder(DOMAIN, CmsDomain.class, CmsFeature.CORE, "Domain", "dns", Kind.CHILD) + .recordLabel("fqdn") + .section("domain", "Domain", "dns", Tier.T1, "id", "fqdn", "siteId", "isPrimary", "name", "shortName", "description") + .unique("shortName").unique("name").unique("fqdn") + .build(), + CmsTableDefinition.builder(REDIRECT, CmsRedirect.class, CmsFeature.CORE, "Redirect", "open_in_new", Kind.MAIN) + .section("redirect", "Redirect", "open_in_new", Tier.T1, "id", "name", "sourcePath", "targetPath", "redirectTypeId", "siteId", "description") + .section("matching", "Matching", "tune", Tier.T2, "matchType", "priority", "preserveQueryParams", "isActive", "expiryDate") + .section("usage", "Usage", "query_stats", Tier.T2, "hitCount", "lastHitDate") + .build(), + CmsTableDefinition.builder(REDIRECT_TYPE, CmsRedirectType.class, CmsFeature.CORE, "Redirect Type", "alt_route", Kind.REFERENCE) + .section("redirectType", "Redirect Type", "alt_route", Tier.T1, "id", "name", "code", "httpStatusCode", "isActive", "sortOrder", "description") + .unique("code") + .build(), + CmsTableDefinition.builder(PAGE, CmsPage.class, CmsFeature.CORE, "Page", "description", Kind.MAIN) + .recordLabel("title") + .section("page", "Page", "description", Tier.T1, "id", "title", "name", "slug", "siteId", "pageTypeId", "template", "isPublished", "publishDate") + .section("content", "Content", "notes", Tier.T2, "content") + .section("structure", "Structure", "account_tree", Tier.T2, "parentPageId", "sortOrder") + .section("seo", "SEO", "travel_explore", Tier.T2, "metaDescription", "metaKeywords", "ogImage") + .child(PAGE_SECTION, "pageId", "Sections", "sections", "sortOrder") + .child(PAGE, "parentPageId", "Child Pages", null, "sortOrder") + .unique("slug", "siteId").unique("slug", "parentPageId") + .text("content") + .build(), + CmsTableDefinition.builder(PAGE_TYPE, CmsPageType.class, CmsFeature.CORE, "Page Type", "layers", Kind.REFERENCE) + .section("pageType", "Page Type", "layers", Tier.T1, "id", "name", "code", "isActive", "sortOrder", "description") + .unique("name").unique("code") + .build(), + CmsTableDefinition.builder(PAGE_SECTION, CmsPageSection.class, CmsFeature.CORE, "Page Section", "view_agenda", Kind.CHILD) + .section("pageSection", "Page Section", "view_agenda", Tier.T1, "id", "name", "pageId", "sectionTypeId", "sortOrder", "cssClassName") + .section("content", "Content", "notes", Tier.T2, "content") + .text("content") + .build(), + CmsTableDefinition.builder(PAGE_SECTION_TYPE, CmsPageSectionType.class, CmsFeature.CORE, "Page Section Type", "category", Kind.REFERENCE) + .section("pageSectionType", "Page Section Type", "category", Tier.T1, "id", "name", "code", "isActive", "sortOrder", "description") + .unique("code").unique("name") + .build(), + CmsTableDefinition.builder(SNIPPET, CmsSnippet.class, CmsFeature.CORE, "Snippet", "code", Kind.MAIN) + .section("snippet", "Snippet", "code", Tier.T1, "id", "name", "shortName", "siteId", "isActive", "sortOrder", "cssClassName") + .section("content", "Content", "notes", Tier.T2, "content") + .unique("shortName", "siteId") + .text("content") + .build(), + CmsTableDefinition.builder(MENU, CmsMenu.class, CmsFeature.CORE, "Menu", "menu", Kind.MAIN) + .section("menu", "Menu", "menu", Tier.T1, "id", "name", "slug", "menuType", "siteId", "isActive", "description") + .child(MENU_ITEM, "menuId", "Items", "items", "displayOrder") + .unique("slug", "siteId") + .build(), + CmsTableDefinition.builder(MENU_ITEM, CmsMenuItem.class, CmsFeature.CORE, "Menu Item", "link", Kind.CHILD) + .section("menuItem", "Menu Item", "link", Tier.T1, "id", "name", "slug", "menuId", "parentId", "itemType", "displayOrder", "isActive") + .section("target", "Link", "open_in_new", Tier.T2, "linkUrl", "routePath", "target") + .section("display", "Display", "palette", Tier.T2, "icon", "cssClasses", "description") + .child(MENU_ITEM, "parentId", "Child Items", null, "displayOrder") + .build()); + + + + /******************************************************************************* + ** Not instantiable. + *******************************************************************************/ + private CmsTables() + { + } + + + + /******************************************************************************* + ** Every table definition, in a stable order. + *******************************************************************************/ + public static List definitions() + { + return (DEFINITIONS); + } + + + + /******************************************************************************* + ** The definitions of the features a config turns on. + *******************************************************************************/ + public static List definitions(CmsQBitConfig config) + { + return (DEFINITIONS.stream().filter(d -> config.hasFeature(d.feature())).toList()); + } + + + + /******************************************************************************* + ** One definition by logical name. + *******************************************************************************/ + public static Optional definition(String logicalName) + { + return (DEFINITIONS.stream().filter(d -> d.logicalName().equals(logicalName)).findFirst()); + } +} diff --git a/src/main/java/com/kingsrook/qbits/cms/core/model/CmsDomain.java b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsDomain.java new file mode 100644 index 0000000..82f402a --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsDomain.java @@ -0,0 +1,366 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.core.model; + + +import java.time.Instant; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.data.QField; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueBehavior; +import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior; + + +/******************************************************************************* + ** A host name (fully qualified domain name) of a site; one per site is + ** primary. + ** + ** The physical table name is the configured prefix plus TABLE_NAME (for + ** example cms_domain); possible-value source names on the fields are + ** logical and get the same prefix when the table is built. + *******************************************************************************/ +public class CmsDomain extends QRecordEntity +{ + public static final String TABLE_NAME = "domain"; + + @QField(isEditable = false, isPrimaryKey = true) + private Long id; + + @QField(isRequired = true, maxLength = 40, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String name; + + @QField(isRequired = true, maxLength = 20, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String shortName; + + @QField(maxLength = 255, valueTooLongBehavior = ValueTooLongBehavior.TRUNCATE, gridColumns = 12) + private String description; + + @QField(isRequired = true, maxLength = 255, valueTooLongBehavior = ValueTooLongBehavior.ERROR, label = "FQDN") + private String fqdn; + + @QField(isRequired = true, defaultValue = "false") + private Boolean isPrimary; + + @QField(isRequired = true, possibleValueSourceName = "site", label = "Site") + private Long siteId; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.CREATE_DATE) + private Instant createDate; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.MODIFY_DATE) + private Instant modifyDate; + + + + /******************************************************************************* + ** Default constructor + *******************************************************************************/ + public CmsDomain() + { + } + + + + /******************************************************************************* + ** Constructor that takes a QRecord + *******************************************************************************/ + public CmsDomain(QRecord record) throws QException + { + populateFromQRecord(record); + } + + + + /******************************************************************************* + ** Getter for id + *******************************************************************************/ + public Long getId() + { + return (this.id); + } + + + + /******************************************************************************* + ** Setter for id + *******************************************************************************/ + public void setId(Long id) + { + this.id = id; + } + + + + /******************************************************************************* + ** Fluent setter for id + *******************************************************************************/ + public CmsDomain withId(Long id) + { + this.id = id; + return (this); + } + + + + /******************************************************************************* + ** Getter for name + *******************************************************************************/ + public String getName() + { + return (this.name); + } + + + + /******************************************************************************* + ** Setter for name + *******************************************************************************/ + public void setName(String name) + { + this.name = name; + } + + + + /******************************************************************************* + ** Fluent setter for name + *******************************************************************************/ + public CmsDomain withName(String name) + { + this.name = name; + return (this); + } + + + + /******************************************************************************* + ** Getter for shortName + *******************************************************************************/ + public String getShortName() + { + return (this.shortName); + } + + + + /******************************************************************************* + ** Setter for shortName + *******************************************************************************/ + public void setShortName(String shortName) + { + this.shortName = shortName; + } + + + + /******************************************************************************* + ** Fluent setter for shortName + *******************************************************************************/ + public CmsDomain withShortName(String shortName) + { + this.shortName = shortName; + return (this); + } + + + + /******************************************************************************* + ** Getter for description + *******************************************************************************/ + public String getDescription() + { + return (this.description); + } + + + + /******************************************************************************* + ** Setter for description + *******************************************************************************/ + public void setDescription(String description) + { + this.description = description; + } + + + + /******************************************************************************* + ** Fluent setter for description + *******************************************************************************/ + public CmsDomain withDescription(String description) + { + this.description = description; + return (this); + } + + + + /******************************************************************************* + ** Getter for fqdn + *******************************************************************************/ + public String getFqdn() + { + return (this.fqdn); + } + + + + /******************************************************************************* + ** Setter for fqdn + *******************************************************************************/ + public void setFqdn(String fqdn) + { + this.fqdn = fqdn; + } + + + + /******************************************************************************* + ** Fluent setter for fqdn + *******************************************************************************/ + public CmsDomain withFqdn(String fqdn) + { + this.fqdn = fqdn; + return (this); + } + + + + /******************************************************************************* + ** Getter for isPrimary + *******************************************************************************/ + public Boolean getIsPrimary() + { + return (this.isPrimary); + } + + + + /******************************************************************************* + ** Setter for isPrimary + *******************************************************************************/ + public void setIsPrimary(Boolean isPrimary) + { + this.isPrimary = isPrimary; + } + + + + /******************************************************************************* + ** Fluent setter for isPrimary + *******************************************************************************/ + public CmsDomain withIsPrimary(Boolean isPrimary) + { + this.isPrimary = isPrimary; + return (this); + } + + + + /******************************************************************************* + ** Getter for siteId + *******************************************************************************/ + public Long getSiteId() + { + return (this.siteId); + } + + + + /******************************************************************************* + ** Setter for siteId + *******************************************************************************/ + public void setSiteId(Long siteId) + { + this.siteId = siteId; + } + + + + /******************************************************************************* + ** Fluent setter for siteId + *******************************************************************************/ + public CmsDomain withSiteId(Long siteId) + { + this.siteId = siteId; + return (this); + } + + + + /******************************************************************************* + ** Getter for createDate + *******************************************************************************/ + public Instant getCreateDate() + { + return (this.createDate); + } + + + + /******************************************************************************* + ** Setter for createDate + *******************************************************************************/ + public void setCreateDate(Instant createDate) + { + this.createDate = createDate; + } + + + + /******************************************************************************* + ** Fluent setter for createDate + *******************************************************************************/ + public CmsDomain withCreateDate(Instant createDate) + { + this.createDate = createDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for modifyDate + *******************************************************************************/ + public Instant getModifyDate() + { + return (this.modifyDate); + } + + + + /******************************************************************************* + ** Setter for modifyDate + *******************************************************************************/ + public void setModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + } + + + + /******************************************************************************* + ** Fluent setter for modifyDate + *******************************************************************************/ + public CmsDomain withModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + return (this); + } + +} diff --git a/src/main/java/com/kingsrook/qbits/cms/core/model/CmsMenu.java b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsMenu.java new file mode 100644 index 0000000..54c56ed --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsMenu.java @@ -0,0 +1,365 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.core.model; + + +import java.time.Instant; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.data.QField; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueBehavior; +import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior; + + +/******************************************************************************* + ** A navigation menu of a site (for example the header or footer menu). + ** + ** The physical table name is the configured prefix plus TABLE_NAME (for + ** example cms_menu); possible-value source names on the fields are + ** logical and get the same prefix when the table is built. + *******************************************************************************/ +public class CmsMenu extends QRecordEntity +{ + public static final String TABLE_NAME = "menu"; + + @QField(isEditable = false, isPrimaryKey = true) + private Long id; + + @QField(isRequired = true, maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String name; + + @QField(isRequired = true, maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String slug; + + @QField(maxLength = 255, valueTooLongBehavior = ValueTooLongBehavior.ERROR, gridColumns = 12) + private String description; + + @QField(isRequired = true, possibleValueSourceName = "site", label = "Site") + private Long siteId; + + @QField(isRequired = true, maxLength = 50, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String menuType; + + @QField(isRequired = true, defaultValue = "true") + private Boolean isActive; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.CREATE_DATE) + private Instant createDate; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.MODIFY_DATE) + private Instant modifyDate; + + + + /******************************************************************************* + ** Default constructor + *******************************************************************************/ + public CmsMenu() + { + } + + + + /******************************************************************************* + ** Constructor that takes a QRecord + *******************************************************************************/ + public CmsMenu(QRecord record) throws QException + { + populateFromQRecord(record); + } + + + + /******************************************************************************* + ** Getter for id + *******************************************************************************/ + public Long getId() + { + return (this.id); + } + + + + /******************************************************************************* + ** Setter for id + *******************************************************************************/ + public void setId(Long id) + { + this.id = id; + } + + + + /******************************************************************************* + ** Fluent setter for id + *******************************************************************************/ + public CmsMenu withId(Long id) + { + this.id = id; + return (this); + } + + + + /******************************************************************************* + ** Getter for name + *******************************************************************************/ + public String getName() + { + return (this.name); + } + + + + /******************************************************************************* + ** Setter for name + *******************************************************************************/ + public void setName(String name) + { + this.name = name; + } + + + + /******************************************************************************* + ** Fluent setter for name + *******************************************************************************/ + public CmsMenu withName(String name) + { + this.name = name; + return (this); + } + + + + /******************************************************************************* + ** Getter for slug + *******************************************************************************/ + public String getSlug() + { + return (this.slug); + } + + + + /******************************************************************************* + ** Setter for slug + *******************************************************************************/ + public void setSlug(String slug) + { + this.slug = slug; + } + + + + /******************************************************************************* + ** Fluent setter for slug + *******************************************************************************/ + public CmsMenu withSlug(String slug) + { + this.slug = slug; + return (this); + } + + + + /******************************************************************************* + ** Getter for description + *******************************************************************************/ + public String getDescription() + { + return (this.description); + } + + + + /******************************************************************************* + ** Setter for description + *******************************************************************************/ + public void setDescription(String description) + { + this.description = description; + } + + + + /******************************************************************************* + ** Fluent setter for description + *******************************************************************************/ + public CmsMenu withDescription(String description) + { + this.description = description; + return (this); + } + + + + /******************************************************************************* + ** Getter for siteId + *******************************************************************************/ + public Long getSiteId() + { + return (this.siteId); + } + + + + /******************************************************************************* + ** Setter for siteId + *******************************************************************************/ + public void setSiteId(Long siteId) + { + this.siteId = siteId; + } + + + + /******************************************************************************* + ** Fluent setter for siteId + *******************************************************************************/ + public CmsMenu withSiteId(Long siteId) + { + this.siteId = siteId; + return (this); + } + + + + /******************************************************************************* + ** Getter for menuType + *******************************************************************************/ + public String getMenuType() + { + return (this.menuType); + } + + + + /******************************************************************************* + ** Setter for menuType + *******************************************************************************/ + public void setMenuType(String menuType) + { + this.menuType = menuType; + } + + + + /******************************************************************************* + ** Fluent setter for menuType + *******************************************************************************/ + public CmsMenu withMenuType(String menuType) + { + this.menuType = menuType; + return (this); + } + + + + /******************************************************************************* + ** Getter for isActive + *******************************************************************************/ + public Boolean getIsActive() + { + return (this.isActive); + } + + + + /******************************************************************************* + ** Setter for isActive + *******************************************************************************/ + public void setIsActive(Boolean isActive) + { + this.isActive = isActive; + } + + + + /******************************************************************************* + ** Fluent setter for isActive + *******************************************************************************/ + public CmsMenu withIsActive(Boolean isActive) + { + this.isActive = isActive; + return (this); + } + + + + /******************************************************************************* + ** Getter for createDate + *******************************************************************************/ + public Instant getCreateDate() + { + return (this.createDate); + } + + + + /******************************************************************************* + ** Setter for createDate + *******************************************************************************/ + public void setCreateDate(Instant createDate) + { + this.createDate = createDate; + } + + + + /******************************************************************************* + ** Fluent setter for createDate + *******************************************************************************/ + public CmsMenu withCreateDate(Instant createDate) + { + this.createDate = createDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for modifyDate + *******************************************************************************/ + public Instant getModifyDate() + { + return (this.modifyDate); + } + + + + /******************************************************************************* + ** Setter for modifyDate + *******************************************************************************/ + public void setModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + } + + + + /******************************************************************************* + ** Fluent setter for modifyDate + *******************************************************************************/ + public CmsMenu withModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + return (this); + } + +} diff --git a/src/main/java/com/kingsrook/qbits/cms/core/model/CmsMenuItem.java b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsMenuItem.java new file mode 100644 index 0000000..c2b61f4 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsMenuItem.java @@ -0,0 +1,604 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.core.model; + + +import java.time.Instant; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.data.QField; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueBehavior; +import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior; + + +/******************************************************************************* + ** One entry of a menu: a link or route, ordered, optionally nested under a + ** parent item. + ** + ** The physical table name is the configured prefix plus TABLE_NAME (for + ** example cms_menu_item); possible-value source names on the fields are + ** logical and get the same prefix when the table is built. + *******************************************************************************/ +public class CmsMenuItem extends QRecordEntity +{ + public static final String TABLE_NAME = "menu_item"; + + @QField(isEditable = false, isPrimaryKey = true) + private Long id; + + @QField(isRequired = true, possibleValueSourceName = "menu", label = "Menu") + private Long menuId; + + @QField(possibleValueSourceName = "menu_item", label = "Parent Item") + private Long parentId; + + @QField(isRequired = true, maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String name; + + @QField(isRequired = true, maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String slug; + + @QField(isRequired = true, maxLength = 50, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String itemType; + + @QField(maxLength = 500, valueTooLongBehavior = ValueTooLongBehavior.ERROR, label = "Link URL", gridColumns = 12) + private String linkUrl; + + @QField(maxLength = 200, valueTooLongBehavior = ValueTooLongBehavior.ERROR, gridColumns = 12) + private String routePath; + + @QField(maxLength = 20, valueTooLongBehavior = ValueTooLongBehavior.ERROR, defaultValue = "_self") + private String target; + + @QField(maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String icon; + + @QField(maxLength = 255, valueTooLongBehavior = ValueTooLongBehavior.ERROR, gridColumns = 12) + private String description; + + @QField(isRequired = true, defaultValue = "0") + private Integer displayOrder; + + @QField(isRequired = true, defaultValue = "true") + private Boolean isActive; + + @QField(maxLength = 200, valueTooLongBehavior = ValueTooLongBehavior.ERROR, label = "CSS Classes") + private String cssClasses; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.CREATE_DATE) + private Instant createDate; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.MODIFY_DATE) + private Instant modifyDate; + + + + /******************************************************************************* + ** Default constructor + *******************************************************************************/ + public CmsMenuItem() + { + } + + + + /******************************************************************************* + ** Constructor that takes a QRecord + *******************************************************************************/ + public CmsMenuItem(QRecord record) throws QException + { + populateFromQRecord(record); + } + + + + /******************************************************************************* + ** Getter for id + *******************************************************************************/ + public Long getId() + { + return (this.id); + } + + + + /******************************************************************************* + ** Setter for id + *******************************************************************************/ + public void setId(Long id) + { + this.id = id; + } + + + + /******************************************************************************* + ** Fluent setter for id + *******************************************************************************/ + public CmsMenuItem withId(Long id) + { + this.id = id; + return (this); + } + + + + /******************************************************************************* + ** Getter for menuId + *******************************************************************************/ + public Long getMenuId() + { + return (this.menuId); + } + + + + /******************************************************************************* + ** Setter for menuId + *******************************************************************************/ + public void setMenuId(Long menuId) + { + this.menuId = menuId; + } + + + + /******************************************************************************* + ** Fluent setter for menuId + *******************************************************************************/ + public CmsMenuItem withMenuId(Long menuId) + { + this.menuId = menuId; + return (this); + } + + + + /******************************************************************************* + ** Getter for parentId + *******************************************************************************/ + public Long getParentId() + { + return (this.parentId); + } + + + + /******************************************************************************* + ** Setter for parentId + *******************************************************************************/ + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + + + /******************************************************************************* + ** Fluent setter for parentId + *******************************************************************************/ + public CmsMenuItem withParentId(Long parentId) + { + this.parentId = parentId; + return (this); + } + + + + /******************************************************************************* + ** Getter for name + *******************************************************************************/ + public String getName() + { + return (this.name); + } + + + + /******************************************************************************* + ** Setter for name + *******************************************************************************/ + public void setName(String name) + { + this.name = name; + } + + + + /******************************************************************************* + ** Fluent setter for name + *******************************************************************************/ + public CmsMenuItem withName(String name) + { + this.name = name; + return (this); + } + + + + /******************************************************************************* + ** Getter for slug + *******************************************************************************/ + public String getSlug() + { + return (this.slug); + } + + + + /******************************************************************************* + ** Setter for slug + *******************************************************************************/ + public void setSlug(String slug) + { + this.slug = slug; + } + + + + /******************************************************************************* + ** Fluent setter for slug + *******************************************************************************/ + public CmsMenuItem withSlug(String slug) + { + this.slug = slug; + return (this); + } + + + + /******************************************************************************* + ** Getter for itemType + *******************************************************************************/ + public String getItemType() + { + return (this.itemType); + } + + + + /******************************************************************************* + ** Setter for itemType + *******************************************************************************/ + public void setItemType(String itemType) + { + this.itemType = itemType; + } + + + + /******************************************************************************* + ** Fluent setter for itemType + *******************************************************************************/ + public CmsMenuItem withItemType(String itemType) + { + this.itemType = itemType; + return (this); + } + + + + /******************************************************************************* + ** Getter for linkUrl + *******************************************************************************/ + public String getLinkUrl() + { + return (this.linkUrl); + } + + + + /******************************************************************************* + ** Setter for linkUrl + *******************************************************************************/ + public void setLinkUrl(String linkUrl) + { + this.linkUrl = linkUrl; + } + + + + /******************************************************************************* + ** Fluent setter for linkUrl + *******************************************************************************/ + public CmsMenuItem withLinkUrl(String linkUrl) + { + this.linkUrl = linkUrl; + return (this); + } + + + + /******************************************************************************* + ** Getter for routePath + *******************************************************************************/ + public String getRoutePath() + { + return (this.routePath); + } + + + + /******************************************************************************* + ** Setter for routePath + *******************************************************************************/ + public void setRoutePath(String routePath) + { + this.routePath = routePath; + } + + + + /******************************************************************************* + ** Fluent setter for routePath + *******************************************************************************/ + public CmsMenuItem withRoutePath(String routePath) + { + this.routePath = routePath; + return (this); + } + + + + /******************************************************************************* + ** Getter for target + *******************************************************************************/ + public String getTarget() + { + return (this.target); + } + + + + /******************************************************************************* + ** Setter for target + *******************************************************************************/ + public void setTarget(String target) + { + this.target = target; + } + + + + /******************************************************************************* + ** Fluent setter for target + *******************************************************************************/ + public CmsMenuItem withTarget(String target) + { + this.target = target; + return (this); + } + + + + /******************************************************************************* + ** Getter for icon + *******************************************************************************/ + public String getIcon() + { + return (this.icon); + } + + + + /******************************************************************************* + ** Setter for icon + *******************************************************************************/ + public void setIcon(String icon) + { + this.icon = icon; + } + + + + /******************************************************************************* + ** Fluent setter for icon + *******************************************************************************/ + public CmsMenuItem withIcon(String icon) + { + this.icon = icon; + return (this); + } + + + + /******************************************************************************* + ** Getter for description + *******************************************************************************/ + public String getDescription() + { + return (this.description); + } + + + + /******************************************************************************* + ** Setter for description + *******************************************************************************/ + public void setDescription(String description) + { + this.description = description; + } + + + + /******************************************************************************* + ** Fluent setter for description + *******************************************************************************/ + public CmsMenuItem withDescription(String description) + { + this.description = description; + return (this); + } + + + + /******************************************************************************* + ** Getter for displayOrder + *******************************************************************************/ + public Integer getDisplayOrder() + { + return (this.displayOrder); + } + + + + /******************************************************************************* + ** Setter for displayOrder + *******************************************************************************/ + public void setDisplayOrder(Integer displayOrder) + { + this.displayOrder = displayOrder; + } + + + + /******************************************************************************* + ** Fluent setter for displayOrder + *******************************************************************************/ + public CmsMenuItem withDisplayOrder(Integer displayOrder) + { + this.displayOrder = displayOrder; + return (this); + } + + + + /******************************************************************************* + ** Getter for isActive + *******************************************************************************/ + public Boolean getIsActive() + { + return (this.isActive); + } + + + + /******************************************************************************* + ** Setter for isActive + *******************************************************************************/ + public void setIsActive(Boolean isActive) + { + this.isActive = isActive; + } + + + + /******************************************************************************* + ** Fluent setter for isActive + *******************************************************************************/ + public CmsMenuItem withIsActive(Boolean isActive) + { + this.isActive = isActive; + return (this); + } + + + + /******************************************************************************* + ** Getter for cssClasses + *******************************************************************************/ + public String getCssClasses() + { + return (this.cssClasses); + } + + + + /******************************************************************************* + ** Setter for cssClasses + *******************************************************************************/ + public void setCssClasses(String cssClasses) + { + this.cssClasses = cssClasses; + } + + + + /******************************************************************************* + ** Fluent setter for cssClasses + *******************************************************************************/ + public CmsMenuItem withCssClasses(String cssClasses) + { + this.cssClasses = cssClasses; + return (this); + } + + + + /******************************************************************************* + ** Getter for createDate + *******************************************************************************/ + public Instant getCreateDate() + { + return (this.createDate); + } + + + + /******************************************************************************* + ** Setter for createDate + *******************************************************************************/ + public void setCreateDate(Instant createDate) + { + this.createDate = createDate; + } + + + + /******************************************************************************* + ** Fluent setter for createDate + *******************************************************************************/ + public CmsMenuItem withCreateDate(Instant createDate) + { + this.createDate = createDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for modifyDate + *******************************************************************************/ + public Instant getModifyDate() + { + return (this.modifyDate); + } + + + + /******************************************************************************* + ** Setter for modifyDate + *******************************************************************************/ + public void setModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + } + + + + /******************************************************************************* + ** Fluent setter for modifyDate + *******************************************************************************/ + public CmsMenuItem withModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + return (this); + } + +} diff --git a/src/main/java/com/kingsrook/qbits/cms/core/model/CmsPage.java b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsPage.java new file mode 100644 index 0000000..ede5458 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsPage.java @@ -0,0 +1,638 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.core.model; + + +import java.time.Instant; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.data.QField; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueBehavior; +import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior; + + +/******************************************************************************* + ** A page of a site, made of ordered page sections; pages nest under a parent + ** page. + ** + ** The physical table name is the configured prefix plus TABLE_NAME (for + ** example cms_page); possible-value source names on the fields are + ** logical and get the same prefix when the table is built. + *******************************************************************************/ +public class CmsPage extends QRecordEntity +{ + public static final String TABLE_NAME = "page"; + + @QField(isEditable = false, isPrimaryKey = true) + private Long id; + + @QField(isRequired = true, maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String name; + + @QField(isRequired = true, maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String slug; + + @QField(isRequired = true, maxLength = 200, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String title; + + @QField(gridColumns = 12) + private String content; + + @QField(isRequired = true, possibleValueSourceName = "page_type", label = "Page Type") + private Long pageTypeId; + + @QField(maxLength = 50, valueTooLongBehavior = ValueTooLongBehavior.ERROR, defaultValue = "default") + private String template; + + @QField(isRequired = true, defaultValue = "false") + private Boolean isPublished; + + @QField() + private Instant publishDate; + + @QField(isRequired = true, defaultValue = "0") + private Integer sortOrder; + + @QField(possibleValueSourceName = "page", label = "Parent Page") + private Long parentPageId; + + @QField(isRequired = true, possibleValueSourceName = "site", label = "Site") + private Long siteId; + + @QField(maxLength = 500, valueTooLongBehavior = ValueTooLongBehavior.TRUNCATE, gridColumns = 12) + private String metaDescription; + + @QField(maxLength = 255, valueTooLongBehavior = ValueTooLongBehavior.TRUNCATE, gridColumns = 12) + private String metaKeywords; + + @QField(maxLength = 255, valueTooLongBehavior = ValueTooLongBehavior.TRUNCATE, label = "Open Graph Image", gridColumns = 12) + private String ogImage; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.CREATE_DATE) + private Instant createDate; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.MODIFY_DATE) + private Instant modifyDate; + + + + /******************************************************************************* + ** Default constructor + *******************************************************************************/ + public CmsPage() + { + } + + + + /******************************************************************************* + ** Constructor that takes a QRecord + *******************************************************************************/ + public CmsPage(QRecord record) throws QException + { + populateFromQRecord(record); + } + + + + /******************************************************************************* + ** Getter for id + *******************************************************************************/ + public Long getId() + { + return (this.id); + } + + + + /******************************************************************************* + ** Setter for id + *******************************************************************************/ + public void setId(Long id) + { + this.id = id; + } + + + + /******************************************************************************* + ** Fluent setter for id + *******************************************************************************/ + public CmsPage withId(Long id) + { + this.id = id; + return (this); + } + + + + /******************************************************************************* + ** Getter for name + *******************************************************************************/ + public String getName() + { + return (this.name); + } + + + + /******************************************************************************* + ** Setter for name + *******************************************************************************/ + public void setName(String name) + { + this.name = name; + } + + + + /******************************************************************************* + ** Fluent setter for name + *******************************************************************************/ + public CmsPage withName(String name) + { + this.name = name; + return (this); + } + + + + /******************************************************************************* + ** Getter for slug + *******************************************************************************/ + public String getSlug() + { + return (this.slug); + } + + + + /******************************************************************************* + ** Setter for slug + *******************************************************************************/ + public void setSlug(String slug) + { + this.slug = slug; + } + + + + /******************************************************************************* + ** Fluent setter for slug + *******************************************************************************/ + public CmsPage withSlug(String slug) + { + this.slug = slug; + return (this); + } + + + + /******************************************************************************* + ** Getter for title + *******************************************************************************/ + public String getTitle() + { + return (this.title); + } + + + + /******************************************************************************* + ** Setter for title + *******************************************************************************/ + public void setTitle(String title) + { + this.title = title; + } + + + + /******************************************************************************* + ** Fluent setter for title + *******************************************************************************/ + public CmsPage withTitle(String title) + { + this.title = title; + return (this); + } + + + + /******************************************************************************* + ** Getter for content + *******************************************************************************/ + public String getContent() + { + return (this.content); + } + + + + /******************************************************************************* + ** Setter for content + *******************************************************************************/ + public void setContent(String content) + { + this.content = content; + } + + + + /******************************************************************************* + ** Fluent setter for content + *******************************************************************************/ + public CmsPage withContent(String content) + { + this.content = content; + return (this); + } + + + + /******************************************************************************* + ** Getter for pageTypeId + *******************************************************************************/ + public Long getPageTypeId() + { + return (this.pageTypeId); + } + + + + /******************************************************************************* + ** Setter for pageTypeId + *******************************************************************************/ + public void setPageTypeId(Long pageTypeId) + { + this.pageTypeId = pageTypeId; + } + + + + /******************************************************************************* + ** Fluent setter for pageTypeId + *******************************************************************************/ + public CmsPage withPageTypeId(Long pageTypeId) + { + this.pageTypeId = pageTypeId; + return (this); + } + + + + /******************************************************************************* + ** Getter for template + *******************************************************************************/ + public String getTemplate() + { + return (this.template); + } + + + + /******************************************************************************* + ** Setter for template + *******************************************************************************/ + public void setTemplate(String template) + { + this.template = template; + } + + + + /******************************************************************************* + ** Fluent setter for template + *******************************************************************************/ + public CmsPage withTemplate(String template) + { + this.template = template; + return (this); + } + + + + /******************************************************************************* + ** Getter for isPublished + *******************************************************************************/ + public Boolean getIsPublished() + { + return (this.isPublished); + } + + + + /******************************************************************************* + ** Setter for isPublished + *******************************************************************************/ + public void setIsPublished(Boolean isPublished) + { + this.isPublished = isPublished; + } + + + + /******************************************************************************* + ** Fluent setter for isPublished + *******************************************************************************/ + public CmsPage withIsPublished(Boolean isPublished) + { + this.isPublished = isPublished; + return (this); + } + + + + /******************************************************************************* + ** Getter for publishDate + *******************************************************************************/ + public Instant getPublishDate() + { + return (this.publishDate); + } + + + + /******************************************************************************* + ** Setter for publishDate + *******************************************************************************/ + public void setPublishDate(Instant publishDate) + { + this.publishDate = publishDate; + } + + + + /******************************************************************************* + ** Fluent setter for publishDate + *******************************************************************************/ + public CmsPage withPublishDate(Instant publishDate) + { + this.publishDate = publishDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for sortOrder + *******************************************************************************/ + public Integer getSortOrder() + { + return (this.sortOrder); + } + + + + /******************************************************************************* + ** Setter for sortOrder + *******************************************************************************/ + public void setSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + } + + + + /******************************************************************************* + ** Fluent setter for sortOrder + *******************************************************************************/ + public CmsPage withSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + return (this); + } + + + + /******************************************************************************* + ** Getter for parentPageId + *******************************************************************************/ + public Long getParentPageId() + { + return (this.parentPageId); + } + + + + /******************************************************************************* + ** Setter for parentPageId + *******************************************************************************/ + public void setParentPageId(Long parentPageId) + { + this.parentPageId = parentPageId; + } + + + + /******************************************************************************* + ** Fluent setter for parentPageId + *******************************************************************************/ + public CmsPage withParentPageId(Long parentPageId) + { + this.parentPageId = parentPageId; + return (this); + } + + + + /******************************************************************************* + ** Getter for siteId + *******************************************************************************/ + public Long getSiteId() + { + return (this.siteId); + } + + + + /******************************************************************************* + ** Setter for siteId + *******************************************************************************/ + public void setSiteId(Long siteId) + { + this.siteId = siteId; + } + + + + /******************************************************************************* + ** Fluent setter for siteId + *******************************************************************************/ + public CmsPage withSiteId(Long siteId) + { + this.siteId = siteId; + return (this); + } + + + + /******************************************************************************* + ** Getter for metaDescription + *******************************************************************************/ + public String getMetaDescription() + { + return (this.metaDescription); + } + + + + /******************************************************************************* + ** Setter for metaDescription + *******************************************************************************/ + public void setMetaDescription(String metaDescription) + { + this.metaDescription = metaDescription; + } + + + + /******************************************************************************* + ** Fluent setter for metaDescription + *******************************************************************************/ + public CmsPage withMetaDescription(String metaDescription) + { + this.metaDescription = metaDescription; + return (this); + } + + + + /******************************************************************************* + ** Getter for metaKeywords + *******************************************************************************/ + public String getMetaKeywords() + { + return (this.metaKeywords); + } + + + + /******************************************************************************* + ** Setter for metaKeywords + *******************************************************************************/ + public void setMetaKeywords(String metaKeywords) + { + this.metaKeywords = metaKeywords; + } + + + + /******************************************************************************* + ** Fluent setter for metaKeywords + *******************************************************************************/ + public CmsPage withMetaKeywords(String metaKeywords) + { + this.metaKeywords = metaKeywords; + return (this); + } + + + + /******************************************************************************* + ** Getter for ogImage + *******************************************************************************/ + public String getOgImage() + { + return (this.ogImage); + } + + + + /******************************************************************************* + ** Setter for ogImage + *******************************************************************************/ + public void setOgImage(String ogImage) + { + this.ogImage = ogImage; + } + + + + /******************************************************************************* + ** Fluent setter for ogImage + *******************************************************************************/ + public CmsPage withOgImage(String ogImage) + { + this.ogImage = ogImage; + return (this); + } + + + + /******************************************************************************* + ** Getter for createDate + *******************************************************************************/ + public Instant getCreateDate() + { + return (this.createDate); + } + + + + /******************************************************************************* + ** Setter for createDate + *******************************************************************************/ + public void setCreateDate(Instant createDate) + { + this.createDate = createDate; + } + + + + /******************************************************************************* + ** Fluent setter for createDate + *******************************************************************************/ + public CmsPage withCreateDate(Instant createDate) + { + this.createDate = createDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for modifyDate + *******************************************************************************/ + public Instant getModifyDate() + { + return (this.modifyDate); + } + + + + /******************************************************************************* + ** Setter for modifyDate + *******************************************************************************/ + public void setModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + } + + + + /******************************************************************************* + ** Fluent setter for modifyDate + *******************************************************************************/ + public CmsPage withModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + return (this); + } + +} diff --git a/src/main/java/com/kingsrook/qbits/cms/core/model/CmsPageSection.java b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsPageSection.java new file mode 100644 index 0000000..710d6bb --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsPageSection.java @@ -0,0 +1,366 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.core.model; + + +import java.time.Instant; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.data.QField; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueBehavior; +import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior; + + +/******************************************************************************* + ** One ordered section of a page; its content is interpreted by its section + ** type. + ** + ** The physical table name is the configured prefix plus TABLE_NAME (for + ** example cms_page_section); possible-value source names on the fields are + ** logical and get the same prefix when the table is built. + *******************************************************************************/ +public class CmsPageSection extends QRecordEntity +{ + public static final String TABLE_NAME = "page_section"; + + @QField(isEditable = false, isPrimaryKey = true) + private Long id; + + @QField(isRequired = true, maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String name; + + @QField(maxLength = 255, valueTooLongBehavior = ValueTooLongBehavior.ERROR, label = "CSS Class Name") + private String cssClassName; + + @QField(isRequired = true, possibleValueSourceName = "page_section_type", label = "Section Type") + private Long sectionTypeId; + + @QField(gridColumns = 12) + private String content; + + @QField(isRequired = true, defaultValue = "0") + private Integer sortOrder; + + @QField(isRequired = true, possibleValueSourceName = "page", label = "Page") + private Long pageId; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.CREATE_DATE) + private Instant createDate; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.MODIFY_DATE) + private Instant modifyDate; + + + + /******************************************************************************* + ** Default constructor + *******************************************************************************/ + public CmsPageSection() + { + } + + + + /******************************************************************************* + ** Constructor that takes a QRecord + *******************************************************************************/ + public CmsPageSection(QRecord record) throws QException + { + populateFromQRecord(record); + } + + + + /******************************************************************************* + ** Getter for id + *******************************************************************************/ + public Long getId() + { + return (this.id); + } + + + + /******************************************************************************* + ** Setter for id + *******************************************************************************/ + public void setId(Long id) + { + this.id = id; + } + + + + /******************************************************************************* + ** Fluent setter for id + *******************************************************************************/ + public CmsPageSection withId(Long id) + { + this.id = id; + return (this); + } + + + + /******************************************************************************* + ** Getter for name + *******************************************************************************/ + public String getName() + { + return (this.name); + } + + + + /******************************************************************************* + ** Setter for name + *******************************************************************************/ + public void setName(String name) + { + this.name = name; + } + + + + /******************************************************************************* + ** Fluent setter for name + *******************************************************************************/ + public CmsPageSection withName(String name) + { + this.name = name; + return (this); + } + + + + /******************************************************************************* + ** Getter for cssClassName + *******************************************************************************/ + public String getCssClassName() + { + return (this.cssClassName); + } + + + + /******************************************************************************* + ** Setter for cssClassName + *******************************************************************************/ + public void setCssClassName(String cssClassName) + { + this.cssClassName = cssClassName; + } + + + + /******************************************************************************* + ** Fluent setter for cssClassName + *******************************************************************************/ + public CmsPageSection withCssClassName(String cssClassName) + { + this.cssClassName = cssClassName; + return (this); + } + + + + /******************************************************************************* + ** Getter for sectionTypeId + *******************************************************************************/ + public Long getSectionTypeId() + { + return (this.sectionTypeId); + } + + + + /******************************************************************************* + ** Setter for sectionTypeId + *******************************************************************************/ + public void setSectionTypeId(Long sectionTypeId) + { + this.sectionTypeId = sectionTypeId; + } + + + + /******************************************************************************* + ** Fluent setter for sectionTypeId + *******************************************************************************/ + public CmsPageSection withSectionTypeId(Long sectionTypeId) + { + this.sectionTypeId = sectionTypeId; + return (this); + } + + + + /******************************************************************************* + ** Getter for content + *******************************************************************************/ + public String getContent() + { + return (this.content); + } + + + + /******************************************************************************* + ** Setter for content + *******************************************************************************/ + public void setContent(String content) + { + this.content = content; + } + + + + /******************************************************************************* + ** Fluent setter for content + *******************************************************************************/ + public CmsPageSection withContent(String content) + { + this.content = content; + return (this); + } + + + + /******************************************************************************* + ** Getter for sortOrder + *******************************************************************************/ + public Integer getSortOrder() + { + return (this.sortOrder); + } + + + + /******************************************************************************* + ** Setter for sortOrder + *******************************************************************************/ + public void setSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + } + + + + /******************************************************************************* + ** Fluent setter for sortOrder + *******************************************************************************/ + public CmsPageSection withSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + return (this); + } + + + + /******************************************************************************* + ** Getter for pageId + *******************************************************************************/ + public Long getPageId() + { + return (this.pageId); + } + + + + /******************************************************************************* + ** Setter for pageId + *******************************************************************************/ + public void setPageId(Long pageId) + { + this.pageId = pageId; + } + + + + /******************************************************************************* + ** Fluent setter for pageId + *******************************************************************************/ + public CmsPageSection withPageId(Long pageId) + { + this.pageId = pageId; + return (this); + } + + + + /******************************************************************************* + ** Getter for createDate + *******************************************************************************/ + public Instant getCreateDate() + { + return (this.createDate); + } + + + + /******************************************************************************* + ** Setter for createDate + *******************************************************************************/ + public void setCreateDate(Instant createDate) + { + this.createDate = createDate; + } + + + + /******************************************************************************* + ** Fluent setter for createDate + *******************************************************************************/ + public CmsPageSection withCreateDate(Instant createDate) + { + this.createDate = createDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for modifyDate + *******************************************************************************/ + public Instant getModifyDate() + { + return (this.modifyDate); + } + + + + /******************************************************************************* + ** Setter for modifyDate + *******************************************************************************/ + public void setModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + } + + + + /******************************************************************************* + ** Fluent setter for modifyDate + *******************************************************************************/ + public CmsPageSection withModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + return (this); + } + +} diff --git a/src/main/java/com/kingsrook/qbits/cms/core/model/CmsPageSectionType.java b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsPageSectionType.java new file mode 100644 index 0000000..d332bc1 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsPageSectionType.java @@ -0,0 +1,332 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.core.model; + + +import java.time.Instant; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.data.QField; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueBehavior; +import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior; + + +/******************************************************************************* + ** A kind of page section (reference data); the frontend renders a section by + ** its type code. + ** + ** The physical table name is the configured prefix plus TABLE_NAME (for + ** example cms_page_section_type); possible-value source names on the fields are + ** logical and get the same prefix when the table is built. + *******************************************************************************/ +public class CmsPageSectionType extends QRecordEntity +{ + public static final String TABLE_NAME = "page_section_type"; + + @QField(isEditable = false, isPrimaryKey = true) + private Long id; + + @QField(isRequired = true, maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String name; + + @QField(isRequired = true, maxLength = 50, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String code; + + @QField(maxLength = 255, valueTooLongBehavior = ValueTooLongBehavior.ERROR, gridColumns = 12) + private String description; + + @QField(isRequired = true, defaultValue = "true") + private Boolean isActive; + + @QField(isRequired = true, defaultValue = "0") + private Integer sortOrder; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.CREATE_DATE) + private Instant createDate; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.MODIFY_DATE) + private Instant modifyDate; + + + + /******************************************************************************* + ** Default constructor + *******************************************************************************/ + public CmsPageSectionType() + { + } + + + + /******************************************************************************* + ** Constructor that takes a QRecord + *******************************************************************************/ + public CmsPageSectionType(QRecord record) throws QException + { + populateFromQRecord(record); + } + + + + /******************************************************************************* + ** Getter for id + *******************************************************************************/ + public Long getId() + { + return (this.id); + } + + + + /******************************************************************************* + ** Setter for id + *******************************************************************************/ + public void setId(Long id) + { + this.id = id; + } + + + + /******************************************************************************* + ** Fluent setter for id + *******************************************************************************/ + public CmsPageSectionType withId(Long id) + { + this.id = id; + return (this); + } + + + + /******************************************************************************* + ** Getter for name + *******************************************************************************/ + public String getName() + { + return (this.name); + } + + + + /******************************************************************************* + ** Setter for name + *******************************************************************************/ + public void setName(String name) + { + this.name = name; + } + + + + /******************************************************************************* + ** Fluent setter for name + *******************************************************************************/ + public CmsPageSectionType withName(String name) + { + this.name = name; + return (this); + } + + + + /******************************************************************************* + ** Getter for code + *******************************************************************************/ + public String getCode() + { + return (this.code); + } + + + + /******************************************************************************* + ** Setter for code + *******************************************************************************/ + public void setCode(String code) + { + this.code = code; + } + + + + /******************************************************************************* + ** Fluent setter for code + *******************************************************************************/ + public CmsPageSectionType withCode(String code) + { + this.code = code; + return (this); + } + + + + /******************************************************************************* + ** Getter for description + *******************************************************************************/ + public String getDescription() + { + return (this.description); + } + + + + /******************************************************************************* + ** Setter for description + *******************************************************************************/ + public void setDescription(String description) + { + this.description = description; + } + + + + /******************************************************************************* + ** Fluent setter for description + *******************************************************************************/ + public CmsPageSectionType withDescription(String description) + { + this.description = description; + return (this); + } + + + + /******************************************************************************* + ** Getter for isActive + *******************************************************************************/ + public Boolean getIsActive() + { + return (this.isActive); + } + + + + /******************************************************************************* + ** Setter for isActive + *******************************************************************************/ + public void setIsActive(Boolean isActive) + { + this.isActive = isActive; + } + + + + /******************************************************************************* + ** Fluent setter for isActive + *******************************************************************************/ + public CmsPageSectionType withIsActive(Boolean isActive) + { + this.isActive = isActive; + return (this); + } + + + + /******************************************************************************* + ** Getter for sortOrder + *******************************************************************************/ + public Integer getSortOrder() + { + return (this.sortOrder); + } + + + + /******************************************************************************* + ** Setter for sortOrder + *******************************************************************************/ + public void setSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + } + + + + /******************************************************************************* + ** Fluent setter for sortOrder + *******************************************************************************/ + public CmsPageSectionType withSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + return (this); + } + + + + /******************************************************************************* + ** Getter for createDate + *******************************************************************************/ + public Instant getCreateDate() + { + return (this.createDate); + } + + + + /******************************************************************************* + ** Setter for createDate + *******************************************************************************/ + public void setCreateDate(Instant createDate) + { + this.createDate = createDate; + } + + + + /******************************************************************************* + ** Fluent setter for createDate + *******************************************************************************/ + public CmsPageSectionType withCreateDate(Instant createDate) + { + this.createDate = createDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for modifyDate + *******************************************************************************/ + public Instant getModifyDate() + { + return (this.modifyDate); + } + + + + /******************************************************************************* + ** Setter for modifyDate + *******************************************************************************/ + public void setModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + } + + + + /******************************************************************************* + ** Fluent setter for modifyDate + *******************************************************************************/ + public CmsPageSectionType withModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + return (this); + } + +} diff --git a/src/main/java/com/kingsrook/qbits/cms/core/model/CmsPageType.java b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsPageType.java new file mode 100644 index 0000000..7da5aae --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsPageType.java @@ -0,0 +1,331 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.core.model; + + +import java.time.Instant; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.data.QField; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueBehavior; +import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior; + + +/******************************************************************************* + ** A kind of page (reference data). + ** + ** The physical table name is the configured prefix plus TABLE_NAME (for + ** example cms_page_type); possible-value source names on the fields are + ** logical and get the same prefix when the table is built. + *******************************************************************************/ +public class CmsPageType extends QRecordEntity +{ + public static final String TABLE_NAME = "page_type"; + + @QField(isEditable = false, isPrimaryKey = true) + private Long id; + + @QField(isRequired = true, maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String name; + + @QField(isRequired = true, maxLength = 50, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String code; + + @QField(maxLength = 255, valueTooLongBehavior = ValueTooLongBehavior.ERROR, gridColumns = 12) + private String description; + + @QField(isRequired = true, defaultValue = "true") + private Boolean isActive; + + @QField(isRequired = true, defaultValue = "0") + private Integer sortOrder; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.CREATE_DATE) + private Instant createDate; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.MODIFY_DATE) + private Instant modifyDate; + + + + /******************************************************************************* + ** Default constructor + *******************************************************************************/ + public CmsPageType() + { + } + + + + /******************************************************************************* + ** Constructor that takes a QRecord + *******************************************************************************/ + public CmsPageType(QRecord record) throws QException + { + populateFromQRecord(record); + } + + + + /******************************************************************************* + ** Getter for id + *******************************************************************************/ + public Long getId() + { + return (this.id); + } + + + + /******************************************************************************* + ** Setter for id + *******************************************************************************/ + public void setId(Long id) + { + this.id = id; + } + + + + /******************************************************************************* + ** Fluent setter for id + *******************************************************************************/ + public CmsPageType withId(Long id) + { + this.id = id; + return (this); + } + + + + /******************************************************************************* + ** Getter for name + *******************************************************************************/ + public String getName() + { + return (this.name); + } + + + + /******************************************************************************* + ** Setter for name + *******************************************************************************/ + public void setName(String name) + { + this.name = name; + } + + + + /******************************************************************************* + ** Fluent setter for name + *******************************************************************************/ + public CmsPageType withName(String name) + { + this.name = name; + return (this); + } + + + + /******************************************************************************* + ** Getter for code + *******************************************************************************/ + public String getCode() + { + return (this.code); + } + + + + /******************************************************************************* + ** Setter for code + *******************************************************************************/ + public void setCode(String code) + { + this.code = code; + } + + + + /******************************************************************************* + ** Fluent setter for code + *******************************************************************************/ + public CmsPageType withCode(String code) + { + this.code = code; + return (this); + } + + + + /******************************************************************************* + ** Getter for description + *******************************************************************************/ + public String getDescription() + { + return (this.description); + } + + + + /******************************************************************************* + ** Setter for description + *******************************************************************************/ + public void setDescription(String description) + { + this.description = description; + } + + + + /******************************************************************************* + ** Fluent setter for description + *******************************************************************************/ + public CmsPageType withDescription(String description) + { + this.description = description; + return (this); + } + + + + /******************************************************************************* + ** Getter for isActive + *******************************************************************************/ + public Boolean getIsActive() + { + return (this.isActive); + } + + + + /******************************************************************************* + ** Setter for isActive + *******************************************************************************/ + public void setIsActive(Boolean isActive) + { + this.isActive = isActive; + } + + + + /******************************************************************************* + ** Fluent setter for isActive + *******************************************************************************/ + public CmsPageType withIsActive(Boolean isActive) + { + this.isActive = isActive; + return (this); + } + + + + /******************************************************************************* + ** Getter for sortOrder + *******************************************************************************/ + public Integer getSortOrder() + { + return (this.sortOrder); + } + + + + /******************************************************************************* + ** Setter for sortOrder + *******************************************************************************/ + public void setSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + } + + + + /******************************************************************************* + ** Fluent setter for sortOrder + *******************************************************************************/ + public CmsPageType withSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + return (this); + } + + + + /******************************************************************************* + ** Getter for createDate + *******************************************************************************/ + public Instant getCreateDate() + { + return (this.createDate); + } + + + + /******************************************************************************* + ** Setter for createDate + *******************************************************************************/ + public void setCreateDate(Instant createDate) + { + this.createDate = createDate; + } + + + + /******************************************************************************* + ** Fluent setter for createDate + *******************************************************************************/ + public CmsPageType withCreateDate(Instant createDate) + { + this.createDate = createDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for modifyDate + *******************************************************************************/ + public Instant getModifyDate() + { + return (this.modifyDate); + } + + + + /******************************************************************************* + ** Setter for modifyDate + *******************************************************************************/ + public void setModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + } + + + + /******************************************************************************* + ** Fluent setter for modifyDate + *******************************************************************************/ + public CmsPageType withModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + return (this); + } + +} diff --git a/src/main/java/com/kingsrook/qbits/cms/core/model/CmsRedirect.java b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsRedirect.java new file mode 100644 index 0000000..2ee64a8 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsRedirect.java @@ -0,0 +1,604 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.core.model; + + +import java.time.Instant; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.data.QField; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueBehavior; +import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior; + + +/******************************************************************************* + ** A public URL redirect: requests matching the source path go to the target + ** path. + ** + ** The physical table name is the configured prefix plus TABLE_NAME (for + ** example cms_redirect); possible-value source names on the fields are + ** logical and get the same prefix when the table is built. + *******************************************************************************/ +public class CmsRedirect extends QRecordEntity +{ + public static final String TABLE_NAME = "redirect"; + + @QField(isEditable = false, isPrimaryKey = true) + private Long id; + + @QField(isRequired = true, maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String name; + + @QField(maxLength = 500, valueTooLongBehavior = ValueTooLongBehavior.TRUNCATE) + private String description; + + @QField(isRequired = true, maxLength = 500, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String sourcePath; + + @QField(isRequired = true, maxLength = 500, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String targetPath; + + @QField(isRequired = true, possibleValueSourceName = "redirect_type", label = "Redirect Type") + private Long redirectTypeId; + + @QField(isRequired = true, maxLength = 20, valueTooLongBehavior = ValueTooLongBehavior.ERROR, defaultValue = "EXACT") + private String matchType; + + @QField(isRequired = true, defaultValue = "true") + private Boolean isActive; + + @QField(isRequired = true, defaultValue = "0") + private Integer priority; + + @QField(isRequired = true, defaultValue = "true") + private Boolean preserveQueryParams; + + @QField(isEditable = false, defaultValue = "0") + private Long hitCount; + + @QField(isEditable = false) + private Instant lastHitDate; + + @QField() + private Instant expiryDate; + + @QField(isRequired = true, possibleValueSourceName = "site", label = "Site") + private Long siteId; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.CREATE_DATE) + private Instant createDate; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.MODIFY_DATE) + private Instant modifyDate; + + + + /******************************************************************************* + ** Default constructor + *******************************************************************************/ + public CmsRedirect() + { + } + + + + /******************************************************************************* + ** Constructor that takes a QRecord + *******************************************************************************/ + public CmsRedirect(QRecord record) throws QException + { + populateFromQRecord(record); + } + + + + /******************************************************************************* + ** Getter for id + *******************************************************************************/ + public Long getId() + { + return (this.id); + } + + + + /******************************************************************************* + ** Setter for id + *******************************************************************************/ + public void setId(Long id) + { + this.id = id; + } + + + + /******************************************************************************* + ** Fluent setter for id + *******************************************************************************/ + public CmsRedirect withId(Long id) + { + this.id = id; + return (this); + } + + + + /******************************************************************************* + ** Getter for name + *******************************************************************************/ + public String getName() + { + return (this.name); + } + + + + /******************************************************************************* + ** Setter for name + *******************************************************************************/ + public void setName(String name) + { + this.name = name; + } + + + + /******************************************************************************* + ** Fluent setter for name + *******************************************************************************/ + public CmsRedirect withName(String name) + { + this.name = name; + return (this); + } + + + + /******************************************************************************* + ** Getter for description + *******************************************************************************/ + public String getDescription() + { + return (this.description); + } + + + + /******************************************************************************* + ** Setter for description + *******************************************************************************/ + public void setDescription(String description) + { + this.description = description; + } + + + + /******************************************************************************* + ** Fluent setter for description + *******************************************************************************/ + public CmsRedirect withDescription(String description) + { + this.description = description; + return (this); + } + + + + /******************************************************************************* + ** Getter for sourcePath + *******************************************************************************/ + public String getSourcePath() + { + return (this.sourcePath); + } + + + + /******************************************************************************* + ** Setter for sourcePath + *******************************************************************************/ + public void setSourcePath(String sourcePath) + { + this.sourcePath = sourcePath; + } + + + + /******************************************************************************* + ** Fluent setter for sourcePath + *******************************************************************************/ + public CmsRedirect withSourcePath(String sourcePath) + { + this.sourcePath = sourcePath; + return (this); + } + + + + /******************************************************************************* + ** Getter for targetPath + *******************************************************************************/ + public String getTargetPath() + { + return (this.targetPath); + } + + + + /******************************************************************************* + ** Setter for targetPath + *******************************************************************************/ + public void setTargetPath(String targetPath) + { + this.targetPath = targetPath; + } + + + + /******************************************************************************* + ** Fluent setter for targetPath + *******************************************************************************/ + public CmsRedirect withTargetPath(String targetPath) + { + this.targetPath = targetPath; + return (this); + } + + + + /******************************************************************************* + ** Getter for redirectTypeId + *******************************************************************************/ + public Long getRedirectTypeId() + { + return (this.redirectTypeId); + } + + + + /******************************************************************************* + ** Setter for redirectTypeId + *******************************************************************************/ + public void setRedirectTypeId(Long redirectTypeId) + { + this.redirectTypeId = redirectTypeId; + } + + + + /******************************************************************************* + ** Fluent setter for redirectTypeId + *******************************************************************************/ + public CmsRedirect withRedirectTypeId(Long redirectTypeId) + { + this.redirectTypeId = redirectTypeId; + return (this); + } + + + + /******************************************************************************* + ** Getter for matchType + *******************************************************************************/ + public String getMatchType() + { + return (this.matchType); + } + + + + /******************************************************************************* + ** Setter for matchType + *******************************************************************************/ + public void setMatchType(String matchType) + { + this.matchType = matchType; + } + + + + /******************************************************************************* + ** Fluent setter for matchType + *******************************************************************************/ + public CmsRedirect withMatchType(String matchType) + { + this.matchType = matchType; + return (this); + } + + + + /******************************************************************************* + ** Getter for isActive + *******************************************************************************/ + public Boolean getIsActive() + { + return (this.isActive); + } + + + + /******************************************************************************* + ** Setter for isActive + *******************************************************************************/ + public void setIsActive(Boolean isActive) + { + this.isActive = isActive; + } + + + + /******************************************************************************* + ** Fluent setter for isActive + *******************************************************************************/ + public CmsRedirect withIsActive(Boolean isActive) + { + this.isActive = isActive; + return (this); + } + + + + /******************************************************************************* + ** Getter for priority + *******************************************************************************/ + public Integer getPriority() + { + return (this.priority); + } + + + + /******************************************************************************* + ** Setter for priority + *******************************************************************************/ + public void setPriority(Integer priority) + { + this.priority = priority; + } + + + + /******************************************************************************* + ** Fluent setter for priority + *******************************************************************************/ + public CmsRedirect withPriority(Integer priority) + { + this.priority = priority; + return (this); + } + + + + /******************************************************************************* + ** Getter for preserveQueryParams + *******************************************************************************/ + public Boolean getPreserveQueryParams() + { + return (this.preserveQueryParams); + } + + + + /******************************************************************************* + ** Setter for preserveQueryParams + *******************************************************************************/ + public void setPreserveQueryParams(Boolean preserveQueryParams) + { + this.preserveQueryParams = preserveQueryParams; + } + + + + /******************************************************************************* + ** Fluent setter for preserveQueryParams + *******************************************************************************/ + public CmsRedirect withPreserveQueryParams(Boolean preserveQueryParams) + { + this.preserveQueryParams = preserveQueryParams; + return (this); + } + + + + /******************************************************************************* + ** Getter for hitCount + *******************************************************************************/ + public Long getHitCount() + { + return (this.hitCount); + } + + + + /******************************************************************************* + ** Setter for hitCount + *******************************************************************************/ + public void setHitCount(Long hitCount) + { + this.hitCount = hitCount; + } + + + + /******************************************************************************* + ** Fluent setter for hitCount + *******************************************************************************/ + public CmsRedirect withHitCount(Long hitCount) + { + this.hitCount = hitCount; + return (this); + } + + + + /******************************************************************************* + ** Getter for lastHitDate + *******************************************************************************/ + public Instant getLastHitDate() + { + return (this.lastHitDate); + } + + + + /******************************************************************************* + ** Setter for lastHitDate + *******************************************************************************/ + public void setLastHitDate(Instant lastHitDate) + { + this.lastHitDate = lastHitDate; + } + + + + /******************************************************************************* + ** Fluent setter for lastHitDate + *******************************************************************************/ + public CmsRedirect withLastHitDate(Instant lastHitDate) + { + this.lastHitDate = lastHitDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for expiryDate + *******************************************************************************/ + public Instant getExpiryDate() + { + return (this.expiryDate); + } + + + + /******************************************************************************* + ** Setter for expiryDate + *******************************************************************************/ + public void setExpiryDate(Instant expiryDate) + { + this.expiryDate = expiryDate; + } + + + + /******************************************************************************* + ** Fluent setter for expiryDate + *******************************************************************************/ + public CmsRedirect withExpiryDate(Instant expiryDate) + { + this.expiryDate = expiryDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for siteId + *******************************************************************************/ + public Long getSiteId() + { + return (this.siteId); + } + + + + /******************************************************************************* + ** Setter for siteId + *******************************************************************************/ + public void setSiteId(Long siteId) + { + this.siteId = siteId; + } + + + + /******************************************************************************* + ** Fluent setter for siteId + *******************************************************************************/ + public CmsRedirect withSiteId(Long siteId) + { + this.siteId = siteId; + return (this); + } + + + + /******************************************************************************* + ** Getter for createDate + *******************************************************************************/ + public Instant getCreateDate() + { + return (this.createDate); + } + + + + /******************************************************************************* + ** Setter for createDate + *******************************************************************************/ + public void setCreateDate(Instant createDate) + { + this.createDate = createDate; + } + + + + /******************************************************************************* + ** Fluent setter for createDate + *******************************************************************************/ + public CmsRedirect withCreateDate(Instant createDate) + { + this.createDate = createDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for modifyDate + *******************************************************************************/ + public Instant getModifyDate() + { + return (this.modifyDate); + } + + + + /******************************************************************************* + ** Setter for modifyDate + *******************************************************************************/ + public void setModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + } + + + + /******************************************************************************* + ** Fluent setter for modifyDate + *******************************************************************************/ + public CmsRedirect withModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + return (this); + } + +} diff --git a/src/main/java/com/kingsrook/qbits/cms/core/model/CmsRedirectMatchType.java b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsRedirectMatchType.java new file mode 100644 index 0000000..e0df691 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsRedirectMatchType.java @@ -0,0 +1,69 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.core.model; + + +import com.kingsrook.qqq.backend.core.model.metadata.possiblevalues.PossibleValueEnum; + + +/******************************************************************************* + ** How a redirect's source path matches a request path. Its possible-value + ** source is named after the redirect table (cms_redirect_match_type). + *******************************************************************************/ +public enum CmsRedirectMatchType implements PossibleValueEnum +{ + EXACT("Exact path"), + PREFIX("Path prefix"), + REGEX("Regular expression"); + + /** The logical possible-value source name (the prefix is added). */ + public static final String NAME = "redirect_match_type"; + + private final String label; + + + + /******************************************************************************* + ** Constructor. + *******************************************************************************/ + CmsRedirectMatchType(String label) + { + this.label = label; + } + + + + /******************************************************************************* + ** The stored value. + *******************************************************************************/ + @Override + public String getPossibleValueId() + { + return (name()); + } + + + + /******************************************************************************* + ** The label. + *******************************************************************************/ + @Override + public String getPossibleValueLabel() + { + return (label); + } +} diff --git a/src/main/java/com/kingsrook/qbits/cms/core/model/CmsRedirectType.java b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsRedirectType.java new file mode 100644 index 0000000..9f1f564 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsRedirectType.java @@ -0,0 +1,366 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.core.model; + + +import java.time.Instant; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.data.QField; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueBehavior; +import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior; + + +/******************************************************************************* + ** A kind of redirect and its HTTP status (reference data, for example 301 and + ** 302). + ** + ** The physical table name is the configured prefix plus TABLE_NAME (for + ** example cms_redirect_type); possible-value source names on the fields are + ** logical and get the same prefix when the table is built. + *******************************************************************************/ +public class CmsRedirectType extends QRecordEntity +{ + public static final String TABLE_NAME = "redirect_type"; + + @QField(isEditable = false, isPrimaryKey = true) + private Long id; + + @QField(isRequired = true, maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String name; + + @QField(isRequired = true, maxLength = 50, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String code; + + @QField(maxLength = 500, valueTooLongBehavior = ValueTooLongBehavior.TRUNCATE) + private String description; + + @QField(isRequired = true, label = "HTTP Status Code") + private Integer httpStatusCode; + + @QField(isRequired = true, defaultValue = "true") + private Boolean isActive; + + @QField(isRequired = true, defaultValue = "0") + private Integer sortOrder; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.CREATE_DATE) + private Instant createDate; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.MODIFY_DATE) + private Instant modifyDate; + + + + /******************************************************************************* + ** Default constructor + *******************************************************************************/ + public CmsRedirectType() + { + } + + + + /******************************************************************************* + ** Constructor that takes a QRecord + *******************************************************************************/ + public CmsRedirectType(QRecord record) throws QException + { + populateFromQRecord(record); + } + + + + /******************************************************************************* + ** Getter for id + *******************************************************************************/ + public Long getId() + { + return (this.id); + } + + + + /******************************************************************************* + ** Setter for id + *******************************************************************************/ + public void setId(Long id) + { + this.id = id; + } + + + + /******************************************************************************* + ** Fluent setter for id + *******************************************************************************/ + public CmsRedirectType withId(Long id) + { + this.id = id; + return (this); + } + + + + /******************************************************************************* + ** Getter for name + *******************************************************************************/ + public String getName() + { + return (this.name); + } + + + + /******************************************************************************* + ** Setter for name + *******************************************************************************/ + public void setName(String name) + { + this.name = name; + } + + + + /******************************************************************************* + ** Fluent setter for name + *******************************************************************************/ + public CmsRedirectType withName(String name) + { + this.name = name; + return (this); + } + + + + /******************************************************************************* + ** Getter for code + *******************************************************************************/ + public String getCode() + { + return (this.code); + } + + + + /******************************************************************************* + ** Setter for code + *******************************************************************************/ + public void setCode(String code) + { + this.code = code; + } + + + + /******************************************************************************* + ** Fluent setter for code + *******************************************************************************/ + public CmsRedirectType withCode(String code) + { + this.code = code; + return (this); + } + + + + /******************************************************************************* + ** Getter for description + *******************************************************************************/ + public String getDescription() + { + return (this.description); + } + + + + /******************************************************************************* + ** Setter for description + *******************************************************************************/ + public void setDescription(String description) + { + this.description = description; + } + + + + /******************************************************************************* + ** Fluent setter for description + *******************************************************************************/ + public CmsRedirectType withDescription(String description) + { + this.description = description; + return (this); + } + + + + /******************************************************************************* + ** Getter for httpStatusCode + *******************************************************************************/ + public Integer getHttpStatusCode() + { + return (this.httpStatusCode); + } + + + + /******************************************************************************* + ** Setter for httpStatusCode + *******************************************************************************/ + public void setHttpStatusCode(Integer httpStatusCode) + { + this.httpStatusCode = httpStatusCode; + } + + + + /******************************************************************************* + ** Fluent setter for httpStatusCode + *******************************************************************************/ + public CmsRedirectType withHttpStatusCode(Integer httpStatusCode) + { + this.httpStatusCode = httpStatusCode; + return (this); + } + + + + /******************************************************************************* + ** Getter for isActive + *******************************************************************************/ + public Boolean getIsActive() + { + return (this.isActive); + } + + + + /******************************************************************************* + ** Setter for isActive + *******************************************************************************/ + public void setIsActive(Boolean isActive) + { + this.isActive = isActive; + } + + + + /******************************************************************************* + ** Fluent setter for isActive + *******************************************************************************/ + public CmsRedirectType withIsActive(Boolean isActive) + { + this.isActive = isActive; + return (this); + } + + + + /******************************************************************************* + ** Getter for sortOrder + *******************************************************************************/ + public Integer getSortOrder() + { + return (this.sortOrder); + } + + + + /******************************************************************************* + ** Setter for sortOrder + *******************************************************************************/ + public void setSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + } + + + + /******************************************************************************* + ** Fluent setter for sortOrder + *******************************************************************************/ + public CmsRedirectType withSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + return (this); + } + + + + /******************************************************************************* + ** Getter for createDate + *******************************************************************************/ + public Instant getCreateDate() + { + return (this.createDate); + } + + + + /******************************************************************************* + ** Setter for createDate + *******************************************************************************/ + public void setCreateDate(Instant createDate) + { + this.createDate = createDate; + } + + + + /******************************************************************************* + ** Fluent setter for createDate + *******************************************************************************/ + public CmsRedirectType withCreateDate(Instant createDate) + { + this.createDate = createDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for modifyDate + *******************************************************************************/ + public Instant getModifyDate() + { + return (this.modifyDate); + } + + + + /******************************************************************************* + ** Setter for modifyDate + *******************************************************************************/ + public void setModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + } + + + + /******************************************************************************* + ** Fluent setter for modifyDate + *******************************************************************************/ + public CmsRedirectType withModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + return (this); + } + +} diff --git a/src/main/java/com/kingsrook/qbits/cms/core/model/CmsSite.java b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsSite.java new file mode 100644 index 0000000..dab599f --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsSite.java @@ -0,0 +1,264 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.core.model; + + +import java.time.Instant; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.data.QField; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueBehavior; +import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior; + + +/******************************************************************************* + ** A website served by the CMS. Every page, menu, redirect and snippet belongs + ** to one site. + ** + ** The physical table name is the configured prefix plus TABLE_NAME (for + ** example cms_site); possible-value source names on the fields are + ** logical and get the same prefix when the table is built. + *******************************************************************************/ +public class CmsSite extends QRecordEntity +{ + public static final String TABLE_NAME = "site"; + + @QField(isEditable = false, isPrimaryKey = true) + private Long id; + + @QField(isRequired = true, maxLength = 40, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String name; + + @QField(isRequired = true, maxLength = 20, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String shortName; + + @QField(maxLength = 255, valueTooLongBehavior = ValueTooLongBehavior.TRUNCATE, gridColumns = 12) + private String description; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.CREATE_DATE) + private Instant createDate; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.MODIFY_DATE) + private Instant modifyDate; + + + + /******************************************************************************* + ** Default constructor + *******************************************************************************/ + public CmsSite() + { + } + + + + /******************************************************************************* + ** Constructor that takes a QRecord + *******************************************************************************/ + public CmsSite(QRecord record) throws QException + { + populateFromQRecord(record); + } + + + + /******************************************************************************* + ** Getter for id + *******************************************************************************/ + public Long getId() + { + return (this.id); + } + + + + /******************************************************************************* + ** Setter for id + *******************************************************************************/ + public void setId(Long id) + { + this.id = id; + } + + + + /******************************************************************************* + ** Fluent setter for id + *******************************************************************************/ + public CmsSite withId(Long id) + { + this.id = id; + return (this); + } + + + + /******************************************************************************* + ** Getter for name + *******************************************************************************/ + public String getName() + { + return (this.name); + } + + + + /******************************************************************************* + ** Setter for name + *******************************************************************************/ + public void setName(String name) + { + this.name = name; + } + + + + /******************************************************************************* + ** Fluent setter for name + *******************************************************************************/ + public CmsSite withName(String name) + { + this.name = name; + return (this); + } + + + + /******************************************************************************* + ** Getter for shortName + *******************************************************************************/ + public String getShortName() + { + return (this.shortName); + } + + + + /******************************************************************************* + ** Setter for shortName + *******************************************************************************/ + public void setShortName(String shortName) + { + this.shortName = shortName; + } + + + + /******************************************************************************* + ** Fluent setter for shortName + *******************************************************************************/ + public CmsSite withShortName(String shortName) + { + this.shortName = shortName; + return (this); + } + + + + /******************************************************************************* + ** Getter for description + *******************************************************************************/ + public String getDescription() + { + return (this.description); + } + + + + /******************************************************************************* + ** Setter for description + *******************************************************************************/ + public void setDescription(String description) + { + this.description = description; + } + + + + /******************************************************************************* + ** Fluent setter for description + *******************************************************************************/ + public CmsSite withDescription(String description) + { + this.description = description; + return (this); + } + + + + /******************************************************************************* + ** Getter for createDate + *******************************************************************************/ + public Instant getCreateDate() + { + return (this.createDate); + } + + + + /******************************************************************************* + ** Setter for createDate + *******************************************************************************/ + public void setCreateDate(Instant createDate) + { + this.createDate = createDate; + } + + + + /******************************************************************************* + ** Fluent setter for createDate + *******************************************************************************/ + public CmsSite withCreateDate(Instant createDate) + { + this.createDate = createDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for modifyDate + *******************************************************************************/ + public Instant getModifyDate() + { + return (this.modifyDate); + } + + + + /******************************************************************************* + ** Setter for modifyDate + *******************************************************************************/ + public void setModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + } + + + + /******************************************************************************* + ** Fluent setter for modifyDate + *******************************************************************************/ + public CmsSite withModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + return (this); + } + +} diff --git a/src/main/java/com/kingsrook/qbits/cms/core/model/CmsSnippet.java b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsSnippet.java new file mode 100644 index 0000000..5a88d11 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/core/model/CmsSnippet.java @@ -0,0 +1,399 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.core.model; + + +import java.time.Instant; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.data.QField; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.fields.DynamicDefaultValueBehavior; +import com.kingsrook.qqq.backend.core.model.metadata.fields.ValueTooLongBehavior; + + +/******************************************************************************* + ** A reusable block of content of a site, referenced by its short name. + ** + ** The physical table name is the configured prefix plus TABLE_NAME (for + ** example cms_snippet); possible-value source names on the fields are + ** logical and get the same prefix when the table is built. + *******************************************************************************/ +public class CmsSnippet extends QRecordEntity +{ + public static final String TABLE_NAME = "snippet"; + + @QField(isEditable = false, isPrimaryKey = true) + private Long id; + + @QField(isRequired = true, maxLength = 100, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String name; + + @QField(isRequired = true, maxLength = 50, valueTooLongBehavior = ValueTooLongBehavior.ERROR) + private String shortName; + + @QField(gridColumns = 12) + private String content; + + @QField(maxLength = 255, valueTooLongBehavior = ValueTooLongBehavior.ERROR, label = "CSS Class Name") + private String cssClassName; + + @QField(isRequired = true, defaultValue = "true") + private Boolean isActive; + + @QField(isRequired = true, defaultValue = "0") + private Integer sortOrder; + + @QField(isRequired = true, possibleValueSourceName = "site", label = "Site") + private Long siteId; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.CREATE_DATE) + private Instant createDate; + + @QField(isEditable = false, dynamicDefaultValueBehavior = DynamicDefaultValueBehavior.MODIFY_DATE) + private Instant modifyDate; + + + + /******************************************************************************* + ** Default constructor + *******************************************************************************/ + public CmsSnippet() + { + } + + + + /******************************************************************************* + ** Constructor that takes a QRecord + *******************************************************************************/ + public CmsSnippet(QRecord record) throws QException + { + populateFromQRecord(record); + } + + + + /******************************************************************************* + ** Getter for id + *******************************************************************************/ + public Long getId() + { + return (this.id); + } + + + + /******************************************************************************* + ** Setter for id + *******************************************************************************/ + public void setId(Long id) + { + this.id = id; + } + + + + /******************************************************************************* + ** Fluent setter for id + *******************************************************************************/ + public CmsSnippet withId(Long id) + { + this.id = id; + return (this); + } + + + + /******************************************************************************* + ** Getter for name + *******************************************************************************/ + public String getName() + { + return (this.name); + } + + + + /******************************************************************************* + ** Setter for name + *******************************************************************************/ + public void setName(String name) + { + this.name = name; + } + + + + /******************************************************************************* + ** Fluent setter for name + *******************************************************************************/ + public CmsSnippet withName(String name) + { + this.name = name; + return (this); + } + + + + /******************************************************************************* + ** Getter for shortName + *******************************************************************************/ + public String getShortName() + { + return (this.shortName); + } + + + + /******************************************************************************* + ** Setter for shortName + *******************************************************************************/ + public void setShortName(String shortName) + { + this.shortName = shortName; + } + + + + /******************************************************************************* + ** Fluent setter for shortName + *******************************************************************************/ + public CmsSnippet withShortName(String shortName) + { + this.shortName = shortName; + return (this); + } + + + + /******************************************************************************* + ** Getter for content + *******************************************************************************/ + public String getContent() + { + return (this.content); + } + + + + /******************************************************************************* + ** Setter for content + *******************************************************************************/ + public void setContent(String content) + { + this.content = content; + } + + + + /******************************************************************************* + ** Fluent setter for content + *******************************************************************************/ + public CmsSnippet withContent(String content) + { + this.content = content; + return (this); + } + + + + /******************************************************************************* + ** Getter for cssClassName + *******************************************************************************/ + public String getCssClassName() + { + return (this.cssClassName); + } + + + + /******************************************************************************* + ** Setter for cssClassName + *******************************************************************************/ + public void setCssClassName(String cssClassName) + { + this.cssClassName = cssClassName; + } + + + + /******************************************************************************* + ** Fluent setter for cssClassName + *******************************************************************************/ + public CmsSnippet withCssClassName(String cssClassName) + { + this.cssClassName = cssClassName; + return (this); + } + + + + /******************************************************************************* + ** Getter for isActive + *******************************************************************************/ + public Boolean getIsActive() + { + return (this.isActive); + } + + + + /******************************************************************************* + ** Setter for isActive + *******************************************************************************/ + public void setIsActive(Boolean isActive) + { + this.isActive = isActive; + } + + + + /******************************************************************************* + ** Fluent setter for isActive + *******************************************************************************/ + public CmsSnippet withIsActive(Boolean isActive) + { + this.isActive = isActive; + return (this); + } + + + + /******************************************************************************* + ** Getter for sortOrder + *******************************************************************************/ + public Integer getSortOrder() + { + return (this.sortOrder); + } + + + + /******************************************************************************* + ** Setter for sortOrder + *******************************************************************************/ + public void setSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + } + + + + /******************************************************************************* + ** Fluent setter for sortOrder + *******************************************************************************/ + public CmsSnippet withSortOrder(Integer sortOrder) + { + this.sortOrder = sortOrder; + return (this); + } + + + + /******************************************************************************* + ** Getter for siteId + *******************************************************************************/ + public Long getSiteId() + { + return (this.siteId); + } + + + + /******************************************************************************* + ** Setter for siteId + *******************************************************************************/ + public void setSiteId(Long siteId) + { + this.siteId = siteId; + } + + + + /******************************************************************************* + ** Fluent setter for siteId + *******************************************************************************/ + public CmsSnippet withSiteId(Long siteId) + { + this.siteId = siteId; + return (this); + } + + + + /******************************************************************************* + ** Getter for createDate + *******************************************************************************/ + public Instant getCreateDate() + { + return (this.createDate); + } + + + + /******************************************************************************* + ** Setter for createDate + *******************************************************************************/ + public void setCreateDate(Instant createDate) + { + this.createDate = createDate; + } + + + + /******************************************************************************* + ** Fluent setter for createDate + *******************************************************************************/ + public CmsSnippet withCreateDate(Instant createDate) + { + this.createDate = createDate; + return (this); + } + + + + /******************************************************************************* + ** Getter for modifyDate + *******************************************************************************/ + public Instant getModifyDate() + { + return (this.modifyDate); + } + + + + /******************************************************************************* + ** Setter for modifyDate + *******************************************************************************/ + public void setModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + } + + + + /******************************************************************************* + ** Fluent setter for modifyDate + *******************************************************************************/ + public CmsSnippet withModifyDate(Instant modifyDate) + { + this.modifyDate = modifyDate; + return (this); + } + +} diff --git a/src/main/java/com/kingsrook/qbits/cms/home/CmsHomeRenderer.java b/src/main/java/com/kingsrook/qbits/cms/home/CmsHomeRenderer.java new file mode 100644 index 0000000..5a69e3a --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/home/CmsHomeRenderer.java @@ -0,0 +1,345 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.home; + + +import java.io.Serializable; +import java.time.Instant; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Optional; +import com.kingsrook.qbits.cms.CmsQBitConfig; +import com.kingsrook.qbits.cms.CmsRuntime; +import com.kingsrook.qbits.cms.CmsTables; +import com.kingsrook.qbits.cms.metadata.CmsAreas; +import com.kingsrook.qbits.cms.metadata.CmsTableDefinition; +import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.AbstractWidgetRenderer; +import com.kingsrook.qqq.backend.core.actions.permissions.PermissionEnforcement; +import com.kingsrook.qqq.backend.core.actions.tables.CountAction; +import com.kingsrook.qqq.backend.core.actions.tables.QueryAction; +import com.kingsrook.qqq.backend.core.context.QContext; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.exceptions.QPermissionDeniedException; +import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterCriteria; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterOrderBy; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryInput; +import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetInput; +import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetOutput; +import com.kingsrook.qqq.backend.core.model.dashboard.widgets.RawHTML; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.metadata.dashboard.QWidgetMetaDataInterface; +import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; + + +/******************************************************************************* + ** The CMS homes. One renderer serves the top app's home and every area's + ** home; the widget's default values say which (namePrefix and area). Each + ** home owns its data and shows only real data read as the current user, so + ** a table the user may not read is left out instead of shown as zero: + ** + ** - the top home: one card per area with its main tables' counts (and draft + ** pages), linking to the area; no per-record lists, so nothing duplicates + ** an area home; + ** Reads always run with PermissionEnforcement.ENFORCE: a widget renders + ** inside a trusted scope, and these counts must still be the user's own. + ** + ** - an area home: a tile per main table (count, drafts or inactive rows), + ** the area's recently changed records, and its settings tables. + *******************************************************************************/ +public class CmsHomeRenderer extends AbstractWidgetRenderer +{ + public static final String KEY_NAME_PREFIX = "namePrefix"; + public static final String KEY_AREA = "area"; + + static final int RECENT_ROWS = 8; + + private static final DateTimeFormatter DATE = DateTimeFormatter.ofPattern("MMM d, yyyy", Locale.US).withZone(ZoneOffset.UTC); + + + + /******************************************************************************* + ** Render the home named by the widget's default values. + *******************************************************************************/ + @Override + public RenderWidgetOutput render(RenderWidgetInput input) throws QException + { + QWidgetMetaDataInterface widget = input.getWidgetMetaData(); + Map defaults = widget.getDefaultValues(); + String prefix = defaults == null ? null : (String) defaults.get(KEY_NAME_PREFIX); + String areaKey = defaults == null ? null : (String) defaults.get(KEY_AREA); + Optional config = CmsRuntime.findConfig(QContext.getQInstance(), prefix); + if(config.isEmpty()) + { + throw (new QException("No CMS install with name prefix " + prefix)); + } + + StringBuilder html = new StringBuilder(); + CmsRuntime runtime = config.get().getRuntime(); + if(runtime != null && !runtime.getSchemaProblems().isEmpty()) + { + html.append(CmsHtml.warning("The CMS database is not up to date, so some screens may fail: " + + CmsHtml.escape(String.join(" ", runtime.getSchemaProblems())))); + } + + Optional area = areaKey == null ? Optional.empty() : CmsAreas.area(areaKey); + html.append(area.isPresent() ? renderArea(config.get(), area.get()) : renderTop(config.get())); + return (new RenderWidgetOutput(new RawHTML(widget.getLabel(), html.toString()))); + } + + + + /******************************************************************************* + ** The top home: a card per area. + *******************************************************************************/ + String renderTop(CmsQBitConfig config) throws QException + { + List tiles = new ArrayList<>(); + for(CmsAreas.Area area : CmsAreas.areas(config)) + { + List notes = new ArrayList<>(); + long total = 0; + boolean any = false; + for(String logical : area.mainTables()) + { + Long count = count(config.applyPrefix(logical), null); + if(count != null) + { + any = true; + total += count; + notes.add(CmsHtml.link(tablePath(config, logical), plural(count, label(logical))) + draftNote(config, logical)); + } + } + if(any) + { + tiles.add(new CmsHtml.Tile(area.label(), String.valueOf(total), "/app/" + area.appName(config), notes)); + } + } + if(tiles.isEmpty()) + { + return (CmsHtml.empty("You do not have access to any CMS area.")); + } + return (CmsHtml.tiles(tiles)); + } + + + + /******************************************************************************* + ** An area home. + *******************************************************************************/ + String renderArea(CmsQBitConfig config, CmsAreas.Area area) throws QException + { + StringBuilder html = new StringBuilder(); + List tiles = new ArrayList<>(); + List recent = new ArrayList<>(); + for(String logical : area.mainTables()) + { + String table = config.applyPrefix(logical); + Long count = count(table, null); + if(count == null) + { + continue; + } + List notes = new ArrayList<>(); + String draft = draftNote(config, logical); + if(!draft.isEmpty()) + { + notes.add(draft.substring(2)); + } + else if(hasField(table, "isActive")) + { + Long inactive = count(table, new QQueryFilter(new QFilterCriteria("isActive", QCriteriaOperator.EQUALS, false))); + if(inactive != null && inactive > 0) + { + notes.add(CmsHtml.muted(inactive + " inactive")); + } + } + notes.add(CmsHtml.link(tablePath(config, logical) + "/create", "New " + label(logical).toLowerCase(Locale.ROOT))); + tiles.add(new CmsHtml.Tile(pluralLabel(logical), String.valueOf(count), tablePath(config, logical), notes)); + recent.addAll(recent(table)); + } + if(tiles.isEmpty()) + { + return (CmsHtml.empty("You do not have access to " + CmsHtml.escape(area.label()) + ".")); + } + html.append(CmsHtml.tiles(tiles)); + + html.append(CmsHtml.heading("Recently changed")); + recent.sort(Comparator.comparing((QRecord r) -> r.getValueInstant("modifyDate"), Comparator.nullsLast(Comparator.reverseOrder()))); + if(recent.isEmpty()) + { + html.append(CmsHtml.empty("Nothing yet. Records you create appear here.")); + } + else + { + List rows = new ArrayList<>(); + for(QRecord record : recent.subList(0, Math.min(RECENT_ROWS, recent.size()))) + { + String table = record.getTableName(); + String logical = table.substring(config.getTableNamePrefix().length()); + String title = record.getRecordLabel() != null ? record.getRecordLabel() : label(logical) + " " + record.getValue("id"); + Instant when = record.getValueInstant("modifyDate"); + rows.add(new CmsHtml.Row(title, tablePath(config, logical) + "/" + record.getValue("id"), label(logical) + (when == null ? "" : " ยท " + DATE.format(when)))); + } + html.append(CmsHtml.rows(rows)); + } + + List settings = new ArrayList<>(); + for(String logical : area.settingsTables()) + { + Long count = count(config.applyPrefix(logical), null); + if(count != null) + { + settings.add(CmsHtml.link(tablePath(config, logical), plural(count, label(logical)))); + } + } + if(!settings.isEmpty()) + { + html.append(CmsHtml.heading("Settings")); + html.append("
"); + settings.forEach(s -> html.append("").append(s).append("")); + html.append("
"); + } + return (html.toString()); + } + + + + /******************************************************************************* + ** ", N drafts" for a table with an isPublished field (empty otherwise). + *******************************************************************************/ + private String draftNote(CmsQBitConfig config, String logical) throws QException + { + String table = config.applyPrefix(logical); + if(!hasField(table, "isPublished")) + { + return (""); + } + Long drafts = count(table, new QQueryFilter(new QFilterCriteria("isPublished", QCriteriaOperator.EQUALS, false))); + return (drafts == null || drafts == 0 ? "" : ", " + CmsHtml.muted(drafts + (drafts == 1 ? " draft" : " drafts"))); + } + + + + /******************************************************************************* + ** The most recently changed records of a table, read as the current user. + *******************************************************************************/ + private List recent(String table) throws QException + { + try + { + QueryInput queryInput = new QueryInput(table) + .withFilter(new QQueryFilter().withOrderBy(new QFilterOrderBy("modifyDate", false)).withLimit(RECENT_ROWS)) + .withShouldGenerateDisplayValues(true); + queryInput.setPermissionEnforcement(PermissionEnforcement.ENFORCE); + return (new QueryAction().execute(queryInput).getRecords()); + } + catch(QPermissionDeniedException e) + { + return (List.of()); + } + } + + + + /******************************************************************************* + ** A count read as the current user, or null when the user may not read it. + *******************************************************************************/ + private Long count(String table, QQueryFilter filter) throws QException + { + try + { + CountInput countInput = new CountInput(table).withFilter(filter); + countInput.setPermissionEnforcement(PermissionEnforcement.ENFORCE); + Integer count = new CountAction().execute(countInput).getCount(); + return (count == null ? 0L : count.longValue()); + } + catch(QPermissionDeniedException e) + { + return (null); + } + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static boolean hasField(String table, String field) + { + QTableMetaData tableMetaData = QContext.getQInstance().getTable(table); + return (tableMetaData != null && tableMetaData.getFields().containsKey(field)); + } + + + + /******************************************************************************* + ** The admin path of a table (Next routes tables at /app/name). + *******************************************************************************/ + static String tablePath(CmsQBitConfig config, String logical) + { + return ("/app/" + config.applyPrefix(logical)); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static String label(String logical) + { + return (CmsTables.definition(logical).map(CmsTableDefinition::label).orElse(logical)); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static String pluralLabel(String logical) + { + return (pluralize(label(logical))); + } + + + + /******************************************************************************* + ** "1 page" / "3 pages". + *******************************************************************************/ + static String plural(long count, String label) + { + String lower = label.toLowerCase(Locale.ROOT); + return (count + " " + (count == 1 ? lower : pluralize(lower))); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + static String pluralize(String word) + { + return (word.endsWith("y") && !word.endsWith("ay") ? word.substring(0, word.length() - 1) + "ies" : word + "s"); + } +} diff --git a/src/main/java/com/kingsrook/qbits/cms/home/CmsHtml.java b/src/main/java/com/kingsrook/qbits/cms/home/CmsHtml.java new file mode 100644 index 0000000..3733470 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/home/CmsHtml.java @@ -0,0 +1,188 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.home; + + +import java.util.List; + + +/******************************************************************************* + ** Small HTML building blocks for the CMS homes, readable at every width and + ** in light and dark mode: text inherits the surrounding color, borders and + ** fills are translucent, grids wrap to one column on a phone, long words + ** break instead of scrolling sideways. + *******************************************************************************/ +public final class CmsHtml +{ + static final String MUTED = "opacity:.72"; + static final String WRAP = "overflow-wrap:anywhere;min-width:0"; + static final String CARD = "box-sizing:border-box;min-width:0;padding:14px 16px;border-radius:10px;border:1px solid rgba(127,127,127,.28);background:rgba(127,127,127,.06)"; + + /******************************************************************************* + ** A tile: label, big number, optional notes; the number links to href. + ** + ** @param label the label + ** @param value the value text + ** @param href the link (may be null) + ** @param notes secondary lines (already HTML) + *******************************************************************************/ + public record Tile(String label, String value, String href, List notes) + { + } + + + + /******************************************************************************* + ** A list row: a linked title and a muted detail. + ** + ** @param title the title + ** @param href the link (may be null) + ** @param detail the detail + *******************************************************************************/ + public record Row(String title, String href, String detail) + { + } + + + + /******************************************************************************* + ** Not instantiable. + *******************************************************************************/ + private CmsHtml() + { + } + + + + /******************************************************************************* + ** HTML-escape text. + *******************************************************************************/ + public static String escape(String text) + { + if(text == null) + { + return (""); + } + StringBuilder rs = new StringBuilder(text.length()); + for(char c : text.toCharArray()) + { + switch(c) + { + case '<' -> rs.append("<"); + case '>' -> rs.append(">"); + case '&' -> rs.append("&"); + case '"' -> rs.append("""); + case '\'' -> rs.append("'"); + default -> rs.append(c); + } + } + return (rs.toString()); + } + + + + /******************************************************************************* + ** A link that inherits the text color. + *******************************************************************************/ + public static String link(String href, String text) + { + return ("" + escape(text) + ""); + } + + + + /******************************************************************************* + ** Muted text (already HTML). + *******************************************************************************/ + public static String muted(String html) + { + return ("" + html + ""); + } + + + + /******************************************************************************* + ** A heading inside a widget. + *******************************************************************************/ + public static String heading(String text) + { + return ("
" + escape(text) + "
"); + } + + + + /******************************************************************************* + ** A responsive grid of tiles (one column on a phone). + *******************************************************************************/ + public static String tiles(List tiles) + { + StringBuilder html = new StringBuilder("
"); + for(Tile tile : tiles) + { + html.append("
"); + html.append("
").append(escape(tile.label())).append("
"); + String value = tile.href() == null ? escape(tile.value()) + : "" + escape(tile.value()) + ""; + html.append("
").append(value).append("
"); + for(String note : tile.notes()) + { + html.append("
").append(note).append("
"); + } + html.append("
"); + } + return (html.append("
").toString()); + } + + + + /******************************************************************************* + ** A plain list of rows, each wrapping as needed. + *******************************************************************************/ + public static String rows(List rows) + { + StringBuilder html = new StringBuilder("
    "); + for(Row row : rows) + { + html.append("
  • "); + html.append("").append(row.href() == null ? escape(row.title()) : link(row.href(), row.title())).append(""); + html.append("").append(escape(row.detail())).append(""); + html.append("
  • "); + } + return (html.append("
").toString()); + } + + + + /******************************************************************************* + ** An honest empty state. + *******************************************************************************/ + public static String empty(String messageHtml) + { + return ("
" + messageHtml + "
"); + } + + + + /******************************************************************************* + ** A warning banner (amber left border, readable in both modes). + *******************************************************************************/ + public static String warning(String messageHtml) + { + return ("
" + messageHtml + "
"); + } +} diff --git a/src/main/java/com/kingsrook/qbits/cms/metadata/CmsAppBuilder.java b/src/main/java/com/kingsrook/qbits/cms/metadata/CmsAppBuilder.java new file mode 100644 index 0000000..1d77d54 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/metadata/CmsAppBuilder.java @@ -0,0 +1,123 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.metadata; + + +import java.util.ArrayList; +import java.util.List; +import com.kingsrook.qbits.cms.CmsQBitConfig; +import com.kingsrook.qbits.cms.home.CmsHomeRenderer; +import com.kingsrook.qqq.backend.core.model.dashboard.widgets.WidgetType; +import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; +import com.kingsrook.qqq.backend.core.model.metadata.dashboard.QWidgetMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.layout.QAppMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.layout.QAppSection; +import com.kingsrook.qqq.backend.core.model.metadata.layout.QIcon; + + +/******************************************************************************* + ** Builds the CMS app tree: one top app with its home, and one sub-app per + ** area with its own home. The nav of an area lists its main tables and a + ** Settings section of reference tables; processes are never in the nav. + ** The qbit never sets the instance's home app (the host owns its landing + ** page). + *******************************************************************************/ +public class CmsAppBuilder +{ + private final CmsQBitConfig config; + + + + /******************************************************************************* + ** Constructor. + *******************************************************************************/ + public CmsAppBuilder(CmsQBitConfig config) + { + this.config = config; + } + + + + /******************************************************************************* + ** The result: the apps (top first) and their home widgets. + *******************************************************************************/ + public record Built(List apps, List widgets) + { + } + + + + /******************************************************************************* + ** Build the apps and homes. + *******************************************************************************/ + public Built build() + { + List apps = new ArrayList<>(); + List widgets = new ArrayList<>(); + + String topHome = CmsAreas.topHomeWidgetName(config); + QAppMetaData top = new QAppMetaData() + .withName(config.getEffectiveAppName()) + .withLabel(config.getAppLabel()) + .withIcon(new QIcon("web")) + .withWidgets(List.of(topHome)); + apps.add(top); + widgets.add(homeWidget(topHome, config.getAppLabel(), null)); + + for(CmsAreas.Area area : CmsAreas.areas(config)) + { + QAppMetaData sub = new QAppMetaData() + .withName(area.appName(config)) + .withLabel(area.label()) + .withIcon(new QIcon(area.icon())) + .withWidgets(List.of(area.homeWidgetName(config))) + .withSection(new QAppSection().withName(area.appName(config)).withLabel(area.label()).withIcon(new QIcon(area.icon())) + .withTables(area.mainTables().stream().map(config::applyPrefix).toList())); + if(!area.settingsTables().isEmpty()) + { + sub.withSection(new QAppSection().withName(area.appName(config) + "Settings").withLabel("Settings").withIcon(new QIcon("settings")) + .withTables(area.settingsTables().stream().map(config::applyPrefix).toList())); + } + top.withChild(sub); + apps.add(sub); + widgets.add(homeWidget(area.homeWidgetName(config), area.label(), area.key())); + } + return (new Built(apps, widgets)); + } + + + + /******************************************************************************* + ** A home widget (full width; one renderer, told which home by its defaults). + *******************************************************************************/ + private QWidgetMetaData homeWidget(String name, String label, String areaKey) + { + QWidgetMetaData widget = new QWidgetMetaData() + .withName(name) + .withLabel(label) + .withType(WidgetType.HTML.getType()) + .withCodeReference(new QCodeReference(CmsHomeRenderer.class)) + .withGridColumns(12) + .withIsCard(true) + .withDefaultValue(CmsHomeRenderer.KEY_NAME_PREFIX, config.getNamePrefix()); + if(areaKey != null) + { + widget.withDefaultValue(CmsHomeRenderer.KEY_AREA, areaKey); + } + return (widget); + } +} diff --git a/src/main/java/com/kingsrook/qbits/cms/metadata/CmsAreas.java b/src/main/java/com/kingsrook/qbits/cms/metadata/CmsAreas.java new file mode 100644 index 0000000..440fecb --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/metadata/CmsAreas.java @@ -0,0 +1,110 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.metadata; + + +import java.util.List; +import java.util.Optional; +import com.kingsrook.qbits.cms.CmsFeature; +import com.kingsrook.qbits.cms.CmsQBitConfig; +import com.kingsrook.qbits.cms.CmsTables; + + +/******************************************************************************* + ** The CMS areas: one sub-app each, with its own home. An area lists only its + ** main tables in the nav, plus a Settings section for reference data; child + ** tables are edited on their parents' records (owner rule). + *******************************************************************************/ +public final class CmsAreas +{ + /******************************************************************************* + ** One area. + ** + ** @param key the name suffix (sub-app cmsSites, home cmsSitesHome) + ** @param label the label + ** @param icon a Material icon name + ** @param feature the feature that owns the area + ** @param mainTables logical names of the tables in the nav + ** @param settingsTables logical names of the reference tables + *******************************************************************************/ + public record Area(String key, String label, String icon, CmsFeature feature, List mainTables, List settingsTables) + { + /******************************************************************************* + ** The sub-app name. + *******************************************************************************/ + public String appName(CmsQBitConfig config) + { + return (config.name(key)); + } + + + + /******************************************************************************* + ** The home widget name. + *******************************************************************************/ + public String homeWidgetName(CmsQBitConfig config) + { + return (config.name(key + "Home")); + } + } + + + + private static final List AREAS = List.of( + new Area("Sites", "Sites", "language", CmsFeature.CORE, List.of(CmsTables.SITE, CmsTables.REDIRECT), List.of(CmsTables.REDIRECT_TYPE)), + new Area("Pages", "Pages", "description", CmsFeature.CORE, List.of(CmsTables.PAGE, CmsTables.SNIPPET), List.of(CmsTables.PAGE_TYPE, CmsTables.PAGE_SECTION_TYPE)), + new Area("Navigation", "Navigation", "menu", CmsFeature.CORE, List.of(CmsTables.MENU), List.of())); + + + + /******************************************************************************* + ** Not instantiable. + *******************************************************************************/ + private CmsAreas() + { + } + + + + /******************************************************************************* + ** The areas of the config's features. + *******************************************************************************/ + public static List areas(CmsQBitConfig config) + { + return (AREAS.stream().filter(a -> config.hasFeature(a.feature())).toList()); + } + + + + /******************************************************************************* + ** One area by key. + *******************************************************************************/ + public static Optional area(String key) + { + return (AREAS.stream().filter(a -> a.key().equals(key)).findFirst()); + } + + + + /******************************************************************************* + ** The top app's home widget name. + *******************************************************************************/ + public static String topHomeWidgetName(CmsQBitConfig config) + { + return (config.name("Home")); + } +} diff --git a/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableBuilder.java b/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableBuilder.java new file mode 100644 index 0000000..b2cb333 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableBuilder.java @@ -0,0 +1,256 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.metadata; + + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import com.kingsrook.qbits.cms.CmsQBitConfig; +import com.kingsrook.qbits.cms.CmsTables; +import com.kingsrook.qbits.cms.core.model.CmsRedirectMatchType; +import com.kingsrook.qbits.cms.security.CmsOpenReadsPermissionChecker; +import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.ChildRecordListRenderer; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.instances.QInstanceEnricher; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterOrderBy; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.core.model.metadata.audits.AuditLevel; +import com.kingsrook.qqq.backend.core.model.metadata.audits.QAuditRules; +import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; +import com.kingsrook.qqq.backend.core.model.metadata.dashboard.QWidgetMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType; +import com.kingsrook.qqq.backend.core.model.metadata.joins.JoinOn; +import com.kingsrook.qqq.backend.core.model.metadata.joins.JoinType; +import com.kingsrook.qqq.backend.core.model.metadata.joins.QJoinMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.layout.QIcon; +import com.kingsrook.qqq.backend.core.model.metadata.permissions.PermissionLevel; +import com.kingsrook.qqq.backend.core.model.metadata.permissions.QPermissionRules; +import com.kingsrook.qqq.backend.core.model.metadata.possiblevalues.QPossibleValueSource; +import com.kingsrook.qqq.backend.core.model.metadata.tables.Association; +import com.kingsrook.qqq.backend.core.model.metadata.tables.ExposedJoin; +import com.kingsrook.qqq.backend.core.model.metadata.tables.QFieldSection; +import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.tables.Tier; +import com.kingsrook.qqq.backend.core.model.metadata.tables.UniqueKey; +import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSTableBackendDetails; + + +/******************************************************************************* + ** Builds the CMS tables of a config: one standard QQQ table per definition + ** (fields from the entity, prefixed names, snake_case columns), a + ** possible-value source per table, joins and child-record lists for child + ** tables, associations, permission rules and field audit. + ** + ** Every table is a normal, visible QQQ table (owner rule): reference tables + ** and child tables are left out of the nav, not hidden. + *******************************************************************************/ +public class CmsTableBuilder +{ + /** The QQQ audit table; field audit is applied only when the host has it. */ + static final String AUDIT_TABLE = "audit"; + + private final CmsQBitConfig config; + + + + /******************************************************************************* + ** Constructor. + *******************************************************************************/ + public CmsTableBuilder(CmsQBitConfig config) + { + this.config = config; + } + + + + /******************************************************************************* + ** The result of a build. + ** + ** @param tables the tables, by physical name + ** @param possibleValueSources the possible-value sources + ** @param joins the joins + ** @param widgets the child-record list widgets + *******************************************************************************/ + public record Built(Map tables, List possibleValueSources, List joins, + List widgets) + { + } + + + + /******************************************************************************* + ** Build every table of the config's features. + *******************************************************************************/ + public Built build(QInstance qInstance) throws QException + { + List definitions = CmsTables.definitions(config); + Set logicals = definitions.stream().map(CmsTableDefinition::logicalName).collect(Collectors.toSet()); + Map tables = new LinkedHashMap<>(); + List pvs = new ArrayList<>(); + List joins = new ArrayList<>(); + List widgets = new ArrayList<>(); + boolean audit = qInstance.getTable(AUDIT_TABLE) != null; + + for(CmsTableDefinition definition : definitions) + { + tables.put(config.applyPrefix(definition.logicalName()), buildTable(definition, logicals, audit)); + pvs.add(QPossibleValueSource.newForTable(config.applyPrefix(definition.logicalName()))); + } + if(logicals.contains(CmsTables.REDIRECT)) + { + pvs.add(QPossibleValueSource.newForEnum(config.applyPrefix(CmsRedirectMatchType.NAME), CmsRedirectMatchType.values())); + } + + for(CmsTableDefinition definition : definitions) + { + QTableMetaData parent = tables.get(config.applyPrefix(definition.logicalName())); + for(CmsTableDefinition.Child child : definition.children()) + { + if(logicals.contains(child.childLogicalName())) + { + addChild(parent, definition, child, joins, widgets); + } + } + } + return (new Built(tables, pvs, joins, widgets)); + } + + + + /******************************************************************************* + ** One table. + *******************************************************************************/ + QTableMetaData buildTable(CmsTableDefinition definition, Set logicals, boolean audit) throws QException + { + String name = config.applyPrefix(definition.logicalName()); + QTableMetaData table = new QTableMetaData() + .withName(name) + .withLabel(definition.label()) + .withIcon(new QIcon(definition.icon())) + .withBackendName(config.getBackendName()) + .withBackendDetails(new RDBMSTableBackendDetails().withTableName(name)) + .withPrimaryKeyField("id") + .withFieldsFromEntity(definition.entityClass()) + .withRecordLabelFormat(String.join(" ", definition.recordLabelFields().stream().map(f -> "%s").toList())) + .withRecordLabelFields(definition.recordLabelFields()) + .withPermissionRules(permissionRules()); + + for(QFieldMetaData field : table.getFields().values()) + { + String pvsName = field.getPossibleValueSourceName(); + if(pvsName != null && logicals.contains(pvsName)) + { + field.setPossibleValueSourceName(config.applyPrefix(pvsName)); + } + else if(pvsName != null) + { + ////////////////////////////////////////////////////////////////// + // a reference to a table of a feature that is off: no lookup // + ////////////////////////////////////////////////////////////////// + field.setPossibleValueSourceName(null); + } + if(definition.textFields().contains(field.getName())) + { + field.setType(QFieldType.TEXT); + } + } + if(CmsTables.REDIRECT.equals(definition.logicalName())) + { + table.getField("matchType").setPossibleValueSourceName(config.applyPrefix(CmsRedirectMatchType.NAME)); + } + QInstanceEnricher.setInferredFieldBackendNames(table); + + for(List uniqueKey : definition.uniqueKeys()) + { + table.withUniqueKey(new UniqueKey(uniqueKey)); + } + for(CmsTableDefinition.Section section : definition.sections()) + { + table.addSection(new QFieldSection(section.name(), section.label(), new QIcon(section.icon()), section.tier(), section.fields())); + } + table.addSection(new QFieldSection("dates", "Dates", new QIcon("calendar_month"), Tier.T3, List.of("createDate", "modifyDate"))); + + if(audit) + { + table.withAuditRules(new QAuditRules().withAuditLevel(AuditLevel.FIELD)); + } + return (table); + } + + + + /******************************************************************************* + ** Permission rules for every CMS table: the table name plus .read, .insert, + ** .edit and .delete; with openReads, reads need nothing. + *******************************************************************************/ + QPermissionRules permissionRules() + { + QPermissionRules rules = new QPermissionRules().withLevel(PermissionLevel.READ_INSERT_EDIT_DELETE_PERMISSIONS); + if(Boolean.TRUE.equals(config.getOpenReads())) + { + rules.withCustomPermissionChecker(new QCodeReference(CmsOpenReadsPermissionChecker.class)); + } + return (rules); + } + + + + /******************************************************************************* + ** A child table: a join, a child-record list on the parent's screen, an + ** exposed join (reports and filters) and, when named, an association. + *******************************************************************************/ + private void addChild(QTableMetaData parent, CmsTableDefinition parentDefinition, CmsTableDefinition.Child child, List joins, + List widgets) + { + String childTable = config.applyPrefix(child.childLogicalName()); + String joinName = parent.getName() + "_" + childTable + "_" + child.joinField(); + + QJoinMetaData join = new QJoinMetaData() + .withName(joinName) + .withLeftTable(parent.getName()) + .withRightTable(childTable) + .withType(JoinType.ONE_TO_MANY) + .withJoinOn(new JoinOn("id", child.joinField())) + .withOrderBy(new QFilterOrderBy(child.orderBy())); + joins.add(join); + + QWidgetMetaData widget = ChildRecordListRenderer.widgetMetaDataBuilder(join) + .withName(joinName) + .withLabel(child.label()) + .withMaxRows(50) + .withCanAddChildRecord(true) + .withDefaultValuesForNewChildRecordsFromParentFields(Map.of(child.joinField(), "id")) + .getWidgetMetaData(); + widgets.add(widget); + + String icon = CmsTables.definition(child.childLogicalName()).map(CmsTableDefinition::icon).orElse(parentDefinition.icon()); + parent.addSection(new QFieldSection(joinName, child.label(), new QIcon(icon), Tier.T2, List.of()).withWidgetName(joinName)); + if(!childTable.equals(parent.getName())) + { + parent.withExposedJoin(new ExposedJoin().withLabel(child.label()).withJoinPath(List.of(joinName)).withJoinTable(childTable)); + } + if(child.associationName() != null) + { + parent.withAssociation(new Association().withName(child.associationName()).withAssociatedTableName(childTable).withJoinName(joinName)); + } + } +} diff --git a/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableDefinition.java b/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableDefinition.java new file mode 100644 index 0000000..91b9899 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableDefinition.java @@ -0,0 +1,204 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.metadata; + + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import com.kingsrook.qbits.cms.CmsFeature; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import com.kingsrook.qqq.backend.core.model.metadata.tables.Tier; + + +/******************************************************************************* + ** Everything the builder needs to know about one CMS table beyond its + ** entity: label, icon, record label, screen sections, child tables, unique + ** keys and which fields hold long text. + ** + ** @param logicalName the unprefixed table name, e.g. "page" + ** @param entityClass the entity whose fields the table has + ** @param feature the feature that owns the table + ** @param label the table label + ** @param icon a Material icon name + ** @param kind main table, child table or reference data + ** @param recordLabelFields fields of the record label (joined by spaces) + ** @param sections screen sections (the system dates section is added) + ** @param children child tables shown as lists on this table's records + ** @param uniqueKeys unique keys (field names) + ** @param textFields fields stored as TEXT (long, unbounded content) + *******************************************************************************/ +public record CmsTableDefinition(String logicalName, Class entityClass, CmsFeature feature, String label, String icon, + Kind kind, List recordLabelFields, List
sections, List children, + List> uniqueKeys, Set textFields) +{ + /******************************************************************************* + ** How a table appears in the admin. + *******************************************************************************/ + public enum Kind + { + /** In the nav of its area; has its own home counts. */ + MAIN, + + /** Not in the nav: edited as a child list on its parent's record. */ + CHILD, + + /** Reference data in the area's Settings section; admin-editable only. */ + REFERENCE + } + + + + /******************************************************************************* + ** A screen section. + ** + ** @param name the section name + ** @param label the section label + ** @param icon a Material icon name + ** @param tier T1 (primary) or T2 + ** @param fields the fields, in order + *******************************************************************************/ + public record Section(String name, String label, String icon, Tier tier, List fields) + { + } + + + + /******************************************************************************* + ** A child table shown as a list on this table's records. + ** + ** @param childLogicalName the child's logical table name + ** @param joinField the child's field holding this table's id + ** @param label the list label + ** @param associationName the association name (API and nested writes), or null + ** @param orderBy the child field to order by + *******************************************************************************/ + public record Child(String childLogicalName, String joinField, String label, String associationName, String orderBy) + { + } + + + + /******************************************************************************* + ** Start a definition. + *******************************************************************************/ + public static Builder builder(String logicalName, Class entityClass, CmsFeature feature, String label, String icon, Kind kind) + { + return (new Builder(logicalName, entityClass, feature, label, icon, kind)); + } + + + + /******************************************************************************* + ** Fluent builder for a definition. + *******************************************************************************/ + public static final class Builder + { + private final String logicalName; + private final Class entityClass; + private final CmsFeature feature; + private final String label; + private final String icon; + private final Kind kind; + private List recordLabelFields = List.of("name"); + private final List
sections = new ArrayList<>(); + private final List children = new ArrayList<>(); + private final List> uniqueKeys = new ArrayList<>(); + private Set textFields = Set.of(); + + + + /******************************************************************************* + ** Constructor. + *******************************************************************************/ + private Builder(String logicalName, Class entityClass, CmsFeature feature, String label, String icon, Kind kind) + { + this.logicalName = logicalName; + this.entityClass = entityClass; + this.feature = feature; + this.label = label; + this.icon = icon; + this.kind = kind; + } + + + + /******************************************************************************* + ** The record label fields. + *******************************************************************************/ + public Builder recordLabel(String... fields) + { + this.recordLabelFields = List.of(fields); + return (this); + } + + + + /******************************************************************************* + ** A screen section. + *******************************************************************************/ + public Builder section(String name, String label, String icon, Tier tier, String... fields) + { + this.sections.add(new Section(name, label, icon, tier, List.of(fields))); + return (this); + } + + + + /******************************************************************************* + ** A child list. + *******************************************************************************/ + public Builder child(String childLogicalName, String joinField, String label, String associationName, String orderBy) + { + this.children.add(new Child(childLogicalName, joinField, label, associationName, orderBy)); + return (this); + } + + + + /******************************************************************************* + ** A unique key. + *******************************************************************************/ + public Builder unique(String... fields) + { + this.uniqueKeys.add(List.of(fields)); + return (this); + } + + + + /******************************************************************************* + ** Fields stored as TEXT. + *******************************************************************************/ + public Builder text(String... fields) + { + this.textFields = Set.of(fields); + return (this); + } + + + + /******************************************************************************* + ** The definition. + *******************************************************************************/ + public CmsTableDefinition build() + { + return (new CmsTableDefinition(logicalName, entityClass, feature, label, icon, kind, recordLabelFields, List.copyOf(sections), List.copyOf(children), + List.copyOf(uniqueKeys), textFields)); + } + } +} diff --git a/src/main/java/com/kingsrook/qbits/cms/security/CmsOpenReadsPermissionChecker.java b/src/main/java/com/kingsrook/qbits/cms/security/CmsOpenReadsPermissionChecker.java new file mode 100644 index 0000000..d37114d --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/security/CmsOpenReadsPermissionChecker.java @@ -0,0 +1,93 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.security; + + +import java.util.ArrayList; +import java.util.List; +import com.kingsrook.qqq.backend.core.actions.permissions.CustomPermissionChecker; +import com.kingsrook.qqq.backend.core.context.QContext; +import com.kingsrook.qqq.backend.core.exceptions.QPermissionDeniedException; +import com.kingsrook.qqq.backend.core.model.actions.AbstractActionInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.replace.ReplaceInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput; +import com.kingsrook.qqq.backend.core.model.metadata.permissions.MetaDataWithPermissionRules; +import com.kingsrook.qqq.backend.core.model.session.QSession; + + +/******************************************************************************* + ** Table permissions when CmsQBitConfig.openReads is on: reading needs no + ** permission; an insert, update, delete or replace needs the table's + ** .insert, .edit or .delete permission (the same names as the standard + ** READ_INSERT_EDIT_DELETE rules, so roles grant the same names either way). + ** + ** Only write inputs count as writes. Other permission questions (table meta + ** data, which pass a plain table input) are answered as reads. + *******************************************************************************/ +public class CmsOpenReadsPermissionChecker implements CustomPermissionChecker +{ + + /******************************************************************************* + ** Throw if the current session may not perform the write the input describes. + *******************************************************************************/ + @Override + public void checkPermissionsThrowing(AbstractActionInput actionInput, MetaDataWithPermissionRules metaDataWithPermissionRules) throws QPermissionDeniedException + { + QSession session = QContext.getQSession(); + for(String suffix : requiredWriteSuffixes(actionInput)) + { + if(session == null || !session.hasPermission(metaDataWithPermissionRules.getName() + "." + suffix)) + { + throw (new QPermissionDeniedException("Permission denied.")); + } + } + } + + + + /******************************************************************************* + ** The write permission suffixes an input requires (empty for reads). + *******************************************************************************/ + static List requiredWriteSuffixes(AbstractActionInput actionInput) + { + List rs = new ArrayList<>(); + if(actionInput instanceof InsertInput) + { + rs.add("insert"); + } + else if(actionInput instanceof UpdateInput) + { + rs.add("edit"); + } + else if(actionInput instanceof DeleteInput) + { + rs.add("delete"); + } + else if(actionInput instanceof ReplaceInput replaceInput) + { + rs.add("insert"); + rs.add("edit"); + if(Boolean.TRUE.equals(replaceInput.getPerformDeletes())) + { + rs.add("delete"); + } + } + return (rs); + } +} diff --git a/src/main/java/com/kingsrook/qbits/cms/security/CmsRole.java b/src/main/java/com/kingsrook/qbits/cms/security/CmsRole.java new file mode 100644 index 0000000..d129a05 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/security/CmsRole.java @@ -0,0 +1,42 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.security; + + +/******************************************************************************* + ** The CMS role bundles (spec section 6.2). A host maps its identity + ** provider's groups to roles in CmsQBitConfig.roleMapping, and + ** CmsSecurity.applySessionPermissions turns a user's groups into the + ** permissions of their roles. + *******************************************************************************/ +public enum CmsRole +{ + /** Everything, including reference data (types) and the admin permission. */ + ADMIN, + + /** Read and write content; read reference data. No publishing. */ + EDITOR, + + /** EDITOR plus publishing. */ + PUBLISHER, + + /** Read content, create and edit drafts; no deletes, no publishing. */ + DRAFTER, + + /** Read everything. */ + VIEWER +} diff --git a/src/main/java/com/kingsrook/qbits/cms/security/CmsSecurity.java b/src/main/java/com/kingsrook/qbits/cms/security/CmsSecurity.java new file mode 100644 index 0000000..75cea55 --- /dev/null +++ b/src/main/java/com/kingsrook/qbits/cms/security/CmsSecurity.java @@ -0,0 +1,167 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.security; + + +import java.util.Collection; +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; +import java.util.TreeSet; +import com.kingsrook.qbits.cms.CmsQBitConfig; +import com.kingsrook.qbits.cms.CmsTables; +import com.kingsrook.qbits.cms.metadata.CmsTableDefinition; +import com.kingsrook.qqq.backend.core.model.session.QSession; + + +/******************************************************************************* + ** Turns identity-provider groups into CMS permissions (spec section 6.2). + ** The host calls applySessionPermissions from its authentication customizer, + ** the same integration point other qbits use; the qbit never talks to the + ** identity provider itself. + ** + ** Permission names: each table's .read, .insert, .edit and .delete + ** (cms_page.edit), plus permissionBaseName.admin and .publish. + *******************************************************************************/ +public final class CmsSecurity +{ + public static final String ADMIN = "admin"; + public static final String PUBLISH = "publish"; + + + + /******************************************************************************* + ** Not instantiable. + *******************************************************************************/ + private CmsSecurity() + { + } + + + + /******************************************************************************* + ** The roles a user's groups map to. + ** + ** @param config the CMS config (its roleMapping) + ** @param groups the user's identity-provider groups + ** @return the roles + *******************************************************************************/ + public static Set rolesFor(CmsQBitConfig config, Collection groups) + { + Set roles = EnumSet.noneOf(CmsRole.class); + if(groups != null && config.getRoleMapping() != null) + { + for(String group : groups) + { + CmsRole role = config.getRoleMapping().get(group); + if(role != null) + { + roles.add(role); + } + } + } + return (roles); + } + + + + /******************************************************************************* + ** The permission names of a set of roles. + ** + ** @param config the CMS config + ** @param roles the roles + ** @return the permission names, sorted + *******************************************************************************/ + public static Set permissionsFor(CmsQBitConfig config, Set roles) + { + Set rs = new TreeSet<>(); + for(CmsTableDefinition definition : CmsTables.definitions(config)) + { + String table = config.applyPrefix(definition.logicalName()); + boolean reference = definition.kind() == CmsTableDefinition.Kind.REFERENCE; + for(CmsRole role : roles) + { + rs.add(table + ".read"); + switch(role) + { + case ADMIN -> addWrites(rs, table, true); + case EDITOR, PUBLISHER -> + { + if(!reference) + { + addWrites(rs, table, true); + } + } + case DRAFTER -> + { + if(!reference) + { + addWrites(rs, table, false); + } + } + default -> + { + ////////////////////////// + // VIEWER: read only // + ////////////////////////// + } + } + } + } + if(roles.contains(CmsRole.ADMIN)) + { + rs.add(config.permission(ADMIN)); + rs.add(config.permission(PUBLISH)); + } + if(roles.contains(CmsRole.PUBLISHER)) + { + rs.add(config.permission(PUBLISH)); + } + return (rs); + } + + + + /******************************************************************************* + ** Add the permissions of a user's groups to a session. + ** + ** @param session the session + ** @param groups the user's identity-provider groups + ** @param config the CMS config + *******************************************************************************/ + public static void applySessionPermissions(QSession session, Collection groups, CmsQBitConfig config) + { + Set permissions = new HashSet<>(session.getPermissions() == null ? Set.of() : session.getPermissions()); + permissions.addAll(permissionsFor(config, rolesFor(config, groups))); + session.setPermissions(permissions); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static void addWrites(Set rs, String table, boolean delete) + { + rs.add(table + ".insert"); + rs.add(table + ".edit"); + if(delete) + { + rs.add(table + ".delete"); + } + } +} diff --git a/src/main/resources/qbit-cms/db/changelog/qbit-cms.changelog.yaml b/src/main/resources/qbit-cms/db/changelog/qbit-cms.changelog.yaml new file mode 100644 index 0000000..909765b --- /dev/null +++ b/src/main/resources/qbit-cms/db/changelog/qbit-cms.changelog.yaml @@ -0,0 +1,1004 @@ +# qbit-cms schema, version 1.0.0 baseline. +# +# The host includes this file from the qbit jar and runs it with its own +# Liquibase (the qbit never runs DDL). Properties the host may set before the +# include (the first definition wins): +# cms.tablePrefix table name prefix, must equal CmsQBitConfig.tableNamePrefix (default cms_) +# cms.features comma-separated CmsFeature names to install (default: all) +# cms.seedReferenceData insert the generic redirect, page and section types (default true) +# Changesets are only ever appended; released changesets never change. +databaseChangeLog: + - property: { name: cms.tablePrefix, value: cms_ } + - property: { name: cms.features, value: "CORE,MEDIA,BLOG,PROJECTS,PHOTOS,PUBLISHING,STREAM" } + - property: { name: cms.seedReferenceData, value: "true" } + + # Halt when a table with a qbit-cms name exists but was not created by this + # changelog (a name collision): choose another cms.tablePrefix. + - changeSet: + id: 1.0.0-guard-existing-tables + author: qbit-cms + logicalFilePath: qbit-cms/changelog + runAlways: true + preConditions: + - onFail: HALT + - onFailMessage: "A table named ${cms.tablePrefix} exists but was not created by qbit-cms; set a different cms.tablePrefix" + - sqlCheck: + expectedResult: 0 + sql: >- + SELECT COUNT(*) FROM (VALUES ('site'), ('domain'), ('redirect_type'), ('redirect'), ('page_type'), ('page'), ('page_section_type'), ('page_section'), ('snippet'), ('menu'), ('menu_item')) AS v(n) + WHERE EXISTS (SELECT 1 FROM information_schema.tables t WHERE LOWER(t.table_name) = LOWER(CONCAT('${cms.tablePrefix}', v.n))) + AND NOT EXISTS (SELECT 1 FROM DATABASECHANGELOG c WHERE c.FILENAME = 'qbit-cms/changelog' AND c.ID = CONCAT('1.0.0-create-', v.n)) + changes: + - sql: + sql: SELECT 1 + + - changeSet: + id: 1.0.0-create-site + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 THEN 1 ELSE 0 END + changes: + - createTable: + tableName: ${cms.tablePrefix}site + columns: + - column: + name: id + type: BIGINT + autoIncrement: true + constraints: { primaryKey: true, primaryKeyName: "pk_${cms.tablePrefix}site", nullable: false } + - column: + name: name + type: VARCHAR(40) + constraints: { nullable: false } + - column: + name: short_name + type: VARCHAR(20) + constraints: { nullable: false } + - column: + name: description + type: VARCHAR(255) + - column: + name: create_date + type: TIMESTAMP + constraints: { nullable: false } + - column: + name: modify_date + type: TIMESTAMP + constraints: { nullable: false } + - addUniqueConstraint: + tableName: ${cms.tablePrefix}site + columnNames: name + constraintName: uq_${cms.tablePrefix}site_name + + - changeSet: + id: 1.0.0-create-domain + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 THEN 1 ELSE 0 END + changes: + - createTable: + tableName: ${cms.tablePrefix}domain + columns: + - column: + name: id + type: BIGINT + autoIncrement: true + constraints: { primaryKey: true, primaryKeyName: "pk_${cms.tablePrefix}domain", nullable: false } + - column: + name: name + type: VARCHAR(40) + constraints: { nullable: false } + - column: + name: short_name + type: VARCHAR(20) + constraints: { nullable: false } + - column: + name: description + type: VARCHAR(255) + - column: + name: fqdn + type: VARCHAR(255) + constraints: { nullable: false } + - column: + name: is_primary + type: BOOLEAN + constraints: { nullable: false } + - column: + name: site_id + type: BIGINT + constraints: { nullable: false } + - column: + name: create_date + type: TIMESTAMP + constraints: { nullable: false } + - column: + name: modify_date + type: TIMESTAMP + constraints: { nullable: false } + - addUniqueConstraint: + tableName: ${cms.tablePrefix}domain + columnNames: short_name + constraintName: uq_${cms.tablePrefix}domain_short_name + - addUniqueConstraint: + tableName: ${cms.tablePrefix}domain + columnNames: name + constraintName: uq_${cms.tablePrefix}domain_name + - addUniqueConstraint: + tableName: ${cms.tablePrefix}domain + columnNames: fqdn + constraintName: uq_${cms.tablePrefix}domain_fqdn + + - changeSet: + id: 1.0.0-create-redirect_type + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 THEN 1 ELSE 0 END + changes: + - createTable: + tableName: ${cms.tablePrefix}redirect_type + columns: + - column: + name: id + type: BIGINT + autoIncrement: true + constraints: { primaryKey: true, primaryKeyName: "pk_${cms.tablePrefix}redirect_type", nullable: false } + - column: + name: name + type: VARCHAR(100) + constraints: { nullable: false } + - column: + name: code + type: VARCHAR(50) + constraints: { nullable: false } + - column: + name: description + type: VARCHAR(500) + - column: + name: http_status_code + type: INT + constraints: { nullable: false } + - column: + name: is_active + type: BOOLEAN + constraints: { nullable: false } + - column: + name: sort_order + type: INT + constraints: { nullable: false } + - column: + name: create_date + type: TIMESTAMP + constraints: { nullable: false } + - column: + name: modify_date + type: TIMESTAMP + constraints: { nullable: false } + - addUniqueConstraint: + tableName: ${cms.tablePrefix}redirect_type + columnNames: code + constraintName: uq_${cms.tablePrefix}redirect_type_code + + - changeSet: + id: 1.0.0-create-redirect + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 THEN 1 ELSE 0 END + changes: + - createTable: + tableName: ${cms.tablePrefix}redirect + columns: + - column: + name: id + type: BIGINT + autoIncrement: true + constraints: { primaryKey: true, primaryKeyName: "pk_${cms.tablePrefix}redirect", nullable: false } + - column: + name: name + type: VARCHAR(100) + constraints: { nullable: false } + - column: + name: description + type: VARCHAR(500) + - column: + name: source_path + type: VARCHAR(500) + constraints: { nullable: false } + - column: + name: target_path + type: VARCHAR(500) + constraints: { nullable: false } + - column: + name: redirect_type_id + type: BIGINT + constraints: { nullable: false } + - column: + name: match_type + type: VARCHAR(20) + constraints: { nullable: false } + - column: + name: is_active + type: BOOLEAN + constraints: { nullable: false } + - column: + name: priority + type: INT + constraints: { nullable: false } + - column: + name: preserve_query_params + type: BOOLEAN + constraints: { nullable: false } + - column: + name: hit_count + type: BIGINT + constraints: { nullable: false } + - column: + name: last_hit_date + type: TIMESTAMP + - column: + name: expiry_date + type: TIMESTAMP + - column: + name: site_id + type: BIGINT + constraints: { nullable: false } + - column: + name: create_date + type: TIMESTAMP + constraints: { nullable: false } + - column: + name: modify_date + type: TIMESTAMP + constraints: { nullable: false } + + - changeSet: + id: 1.0.0-create-page_type + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 THEN 1 ELSE 0 END + changes: + - createTable: + tableName: ${cms.tablePrefix}page_type + columns: + - column: + name: id + type: BIGINT + autoIncrement: true + constraints: { primaryKey: true, primaryKeyName: "pk_${cms.tablePrefix}page_type", nullable: false } + - column: + name: name + type: VARCHAR(100) + constraints: { nullable: false } + - column: + name: code + type: VARCHAR(50) + constraints: { nullable: false } + - column: + name: description + type: VARCHAR(255) + - column: + name: is_active + type: BOOLEAN + constraints: { nullable: false } + - column: + name: sort_order + type: INT + constraints: { nullable: false } + - column: + name: create_date + type: TIMESTAMP + constraints: { nullable: false } + - column: + name: modify_date + type: TIMESTAMP + constraints: { nullable: false } + - addUniqueConstraint: + tableName: ${cms.tablePrefix}page_type + columnNames: name + constraintName: uq_${cms.tablePrefix}page_type_name + - addUniqueConstraint: + tableName: ${cms.tablePrefix}page_type + columnNames: code + constraintName: uq_${cms.tablePrefix}page_type_code + + - changeSet: + id: 1.0.0-create-page + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 THEN 1 ELSE 0 END + changes: + - createTable: + tableName: ${cms.tablePrefix}page + columns: + - column: + name: id + type: BIGINT + autoIncrement: true + constraints: { primaryKey: true, primaryKeyName: "pk_${cms.tablePrefix}page", nullable: false } + - column: + name: name + type: VARCHAR(100) + constraints: { nullable: false } + - column: + name: slug + type: VARCHAR(100) + constraints: { nullable: false } + - column: + name: title + type: VARCHAR(200) + constraints: { nullable: false } + - column: + name: content + type: TEXT + - column: + name: page_type_id + type: BIGINT + constraints: { nullable: false } + - column: + name: template + type: VARCHAR(50) + - column: + name: is_published + type: BOOLEAN + constraints: { nullable: false } + - column: + name: publish_date + type: TIMESTAMP + - column: + name: sort_order + type: INT + constraints: { nullable: false } + - column: + name: parent_page_id + type: BIGINT + - column: + name: site_id + type: BIGINT + constraints: { nullable: false } + - column: + name: meta_description + type: VARCHAR(500) + - column: + name: meta_keywords + type: VARCHAR(255) + - column: + name: og_image + type: VARCHAR(255) + - column: + name: create_date + type: TIMESTAMP + constraints: { nullable: false } + - column: + name: modify_date + type: TIMESTAMP + constraints: { nullable: false } + - addUniqueConstraint: + tableName: ${cms.tablePrefix}page + columnNames: slug, site_id + constraintName: uq_${cms.tablePrefix}page_slug_site_id + - addUniqueConstraint: + tableName: ${cms.tablePrefix}page + columnNames: slug, parent_page_id + constraintName: uq_${cms.tablePrefix}page_slug_parent_page_id + + - changeSet: + id: 1.0.0-create-page_section_type + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 THEN 1 ELSE 0 END + changes: + - createTable: + tableName: ${cms.tablePrefix}page_section_type + columns: + - column: + name: id + type: BIGINT + autoIncrement: true + constraints: { primaryKey: true, primaryKeyName: "pk_${cms.tablePrefix}page_section_type", nullable: false } + - column: + name: name + type: VARCHAR(100) + constraints: { nullable: false } + - column: + name: code + type: VARCHAR(50) + constraints: { nullable: false } + - column: + name: description + type: VARCHAR(255) + - column: + name: is_active + type: BOOLEAN + constraints: { nullable: false } + - column: + name: sort_order + type: INT + constraints: { nullable: false } + - column: + name: create_date + type: TIMESTAMP + constraints: { nullable: false } + - column: + name: modify_date + type: TIMESTAMP + constraints: { nullable: false } + - addUniqueConstraint: + tableName: ${cms.tablePrefix}page_section_type + columnNames: code + constraintName: uq_${cms.tablePrefix}page_section_type_code + - addUniqueConstraint: + tableName: ${cms.tablePrefix}page_section_type + columnNames: name + constraintName: uq_${cms.tablePrefix}page_section_type_name + + - changeSet: + id: 1.0.0-create-page_section + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 THEN 1 ELSE 0 END + changes: + - createTable: + tableName: ${cms.tablePrefix}page_section + columns: + - column: + name: id + type: BIGINT + autoIncrement: true + constraints: { primaryKey: true, primaryKeyName: "pk_${cms.tablePrefix}page_section", nullable: false } + - column: + name: name + type: VARCHAR(100) + constraints: { nullable: false } + - column: + name: css_class_name + type: VARCHAR(255) + - column: + name: section_type_id + type: BIGINT + constraints: { nullable: false } + - column: + name: content + type: TEXT + - column: + name: sort_order + type: INT + constraints: { nullable: false } + - column: + name: page_id + type: BIGINT + constraints: { nullable: false } + - column: + name: create_date + type: TIMESTAMP + constraints: { nullable: false } + - column: + name: modify_date + type: TIMESTAMP + constraints: { nullable: false } + + - changeSet: + id: 1.0.0-create-snippet + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 THEN 1 ELSE 0 END + changes: + - createTable: + tableName: ${cms.tablePrefix}snippet + columns: + - column: + name: id + type: BIGINT + autoIncrement: true + constraints: { primaryKey: true, primaryKeyName: "pk_${cms.tablePrefix}snippet", nullable: false } + - column: + name: name + type: VARCHAR(100) + constraints: { nullable: false } + - column: + name: short_name + type: VARCHAR(50) + constraints: { nullable: false } + - column: + name: content + type: TEXT + - column: + name: css_class_name + type: VARCHAR(255) + - column: + name: is_active + type: BOOLEAN + constraints: { nullable: false } + - column: + name: sort_order + type: INT + constraints: { nullable: false } + - column: + name: site_id + type: BIGINT + constraints: { nullable: false } + - column: + name: create_date + type: TIMESTAMP + constraints: { nullable: false } + - column: + name: modify_date + type: TIMESTAMP + constraints: { nullable: false } + - addUniqueConstraint: + tableName: ${cms.tablePrefix}snippet + columnNames: short_name, site_id + constraintName: uq_${cms.tablePrefix}snippet_short_name_site_id + + - changeSet: + id: 1.0.0-create-menu + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 THEN 1 ELSE 0 END + changes: + - createTable: + tableName: ${cms.tablePrefix}menu + columns: + - column: + name: id + type: BIGINT + autoIncrement: true + constraints: { primaryKey: true, primaryKeyName: "pk_${cms.tablePrefix}menu", nullable: false } + - column: + name: name + type: VARCHAR(100) + constraints: { nullable: false } + - column: + name: slug + type: VARCHAR(100) + constraints: { nullable: false } + - column: + name: description + type: VARCHAR(255) + - column: + name: site_id + type: BIGINT + constraints: { nullable: false } + - column: + name: menu_type + type: VARCHAR(50) + constraints: { nullable: false } + - column: + name: is_active + type: BOOLEAN + - column: + name: create_date + type: TIMESTAMP + constraints: { nullable: false } + - column: + name: modify_date + type: TIMESTAMP + constraints: { nullable: false } + - addUniqueConstraint: + tableName: ${cms.tablePrefix}menu + columnNames: slug, site_id + constraintName: uq_${cms.tablePrefix}menu_slug_site_id + + - changeSet: + id: 1.0.0-create-menu_item + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 THEN 1 ELSE 0 END + changes: + - createTable: + tableName: ${cms.tablePrefix}menu_item + columns: + - column: + name: id + type: BIGINT + autoIncrement: true + constraints: { primaryKey: true, primaryKeyName: "pk_${cms.tablePrefix}menu_item", nullable: false } + - column: + name: menu_id + type: BIGINT + constraints: { nullable: false } + - column: + name: parent_id + type: BIGINT + - column: + name: name + type: VARCHAR(100) + constraints: { nullable: false } + - column: + name: slug + type: VARCHAR(100) + constraints: { nullable: false } + - column: + name: item_type + type: VARCHAR(50) + constraints: { nullable: false } + - column: + name: link_url + type: VARCHAR(500) + - column: + name: route_path + type: VARCHAR(200) + - column: + name: target + type: VARCHAR(20) + - column: + name: icon + type: VARCHAR(100) + - column: + name: description + type: VARCHAR(255) + - column: + name: display_order + type: INT + - column: + name: is_active + type: BOOLEAN + - column: + name: css_classes + type: VARCHAR(200) + - column: + name: create_date + type: TIMESTAMP + constraints: { nullable: false } + - column: + name: modify_date + type: TIMESTAMP + constraints: { nullable: false } + + - changeSet: + id: 1.0.0-constraints-core + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 THEN 1 ELSE 0 END + changes: + - addForeignKeyConstraint: + baseTableName: ${cms.tablePrefix}domain + baseColumnNames: site_id + referencedTableName: ${cms.tablePrefix}site + referencedColumnNames: id + constraintName: fk_${cms.tablePrefix}domain_site_id + - addForeignKeyConstraint: + baseTableName: ${cms.tablePrefix}redirect + baseColumnNames: redirect_type_id + referencedTableName: ${cms.tablePrefix}redirect_type + referencedColumnNames: id + constraintName: fk_${cms.tablePrefix}redirect_redirect_type_id + - addForeignKeyConstraint: + baseTableName: ${cms.tablePrefix}redirect + baseColumnNames: site_id + referencedTableName: ${cms.tablePrefix}site + referencedColumnNames: id + constraintName: fk_${cms.tablePrefix}redirect_site_id + - createIndex: + tableName: ${cms.tablePrefix}redirect + indexName: idx_${cms.tablePrefix}redirect_site_id_source_path + columns: + - column: { name: site_id } + - column: { name: source_path } + - addForeignKeyConstraint: + baseTableName: ${cms.tablePrefix}page + baseColumnNames: page_type_id + referencedTableName: ${cms.tablePrefix}page_type + referencedColumnNames: id + constraintName: fk_${cms.tablePrefix}page_page_type_id + - addForeignKeyConstraint: + baseTableName: ${cms.tablePrefix}page + baseColumnNames: parent_page_id + referencedTableName: ${cms.tablePrefix}page + referencedColumnNames: id + constraintName: fk_${cms.tablePrefix}page_parent_page_id + - addForeignKeyConstraint: + baseTableName: ${cms.tablePrefix}page + baseColumnNames: site_id + referencedTableName: ${cms.tablePrefix}site + referencedColumnNames: id + constraintName: fk_${cms.tablePrefix}page_site_id + - createIndex: + tableName: ${cms.tablePrefix}page + indexName: idx_${cms.tablePrefix}page_site_id_is_published + columns: + - column: { name: site_id } + - column: { name: is_published } + - addForeignKeyConstraint: + baseTableName: ${cms.tablePrefix}page_section + baseColumnNames: page_id + referencedTableName: ${cms.tablePrefix}page + referencedColumnNames: id + constraintName: fk_${cms.tablePrefix}page_section_page_id + - addForeignKeyConstraint: + baseTableName: ${cms.tablePrefix}page_section + baseColumnNames: section_type_id + referencedTableName: ${cms.tablePrefix}page_section_type + referencedColumnNames: id + constraintName: fk_${cms.tablePrefix}page_section_section_type_id + - createIndex: + tableName: ${cms.tablePrefix}page_section + indexName: idx_${cms.tablePrefix}page_section_page_id + columns: + - column: { name: page_id } + - addForeignKeyConstraint: + baseTableName: ${cms.tablePrefix}snippet + baseColumnNames: site_id + referencedTableName: ${cms.tablePrefix}site + referencedColumnNames: id + constraintName: fk_${cms.tablePrefix}snippet_site_id + - addForeignKeyConstraint: + baseTableName: ${cms.tablePrefix}menu + baseColumnNames: site_id + referencedTableName: ${cms.tablePrefix}site + referencedColumnNames: id + constraintName: fk_${cms.tablePrefix}menu_site_id + - addForeignKeyConstraint: + baseTableName: ${cms.tablePrefix}menu_item + baseColumnNames: menu_id + referencedTableName: ${cms.tablePrefix}menu + referencedColumnNames: id + constraintName: fk_${cms.tablePrefix}menu_item_menu_id + - addForeignKeyConstraint: + baseTableName: ${cms.tablePrefix}menu_item + baseColumnNames: parent_id + referencedTableName: ${cms.tablePrefix}menu_item + referencedColumnNames: id + constraintName: fk_${cms.tablePrefix}menu_item_parent_id + - createIndex: + tableName: ${cms.tablePrefix}menu_item + indexName: idx_${cms.tablePrefix}menu_item_menu_id + columns: + - column: { name: menu_id } + + # Generic reference data (never content); off with cms.seedReferenceData=false. + - changeSet: + id: 1.0.0-seed-redirect_type + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 AND LOWER('${cms.seedReferenceData}') = 'true' THEN 1 ELSE 0 END + changes: + - insert: + tableName: ${cms.tablePrefix}redirect_type + columns: + - column: { name: name, value: "Permanent Redirect" } + - column: { name: code, value: "PERMANENT" } + - column: { name: description, value: "301 Moved Permanently - Use for permanent URL changes" } + - column: { name: http_status_code, valueNumeric: 301 } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 1 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}redirect_type + columns: + - column: { name: name, value: "Temporary Redirect" } + - column: { name: code, value: "TEMPORARY" } + - column: { name: description, value: "302 Found - Use for temporary URL changes" } + - column: { name: http_status_code, valueNumeric: 302 } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 2 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}redirect_type + columns: + - column: { name: name, value: "Permanent Redirect (Alternative)" } + - column: { name: code, value: "PERMANENT_ALT" } + - column: { name: description, value: "308 Permanent Redirect - Preserves HTTP method" } + - column: { name: http_status_code, valueNumeric: 308 } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 3 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}redirect_type + columns: + - column: { name: name, value: "Temporary Redirect (Alternative)" } + - column: { name: code, value: "TEMPORARY_ALT" } + - column: { name: description, value: "307 Temporary Redirect - Preserves HTTP method" } + - column: { name: http_status_code, valueNumeric: 307 } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 4 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + + # Generic reference data (never content); off with cms.seedReferenceData=false. + - changeSet: + id: 1.0.0-seed-page_type + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 AND LOWER('${cms.seedReferenceData}') = 'true' THEN 1 ELSE 0 END + changes: + - insert: + tableName: ${cms.tablePrefix}page_type + columns: + - column: { name: name, value: "Static Page" } + - column: { name: code, value: "STATIC" } + - column: { name: description, value: "A standard static page" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 1 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}page_type + columns: + - column: { name: name, value: "Dynamic Page" } + - column: { name: code, value: "DYNAMIC" } + - column: { name: description, value: "A page with dynamic content" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 2 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}page_type + columns: + - column: { name: name, value: "Landing Page" } + - column: { name: code, value: "LANDING" } + - column: { name: description, value: "A marketing or landing page" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 3 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}page_type + columns: + - column: { name: name, value: "Custom Page" } + - column: { name: code, value: "CUSTOM" } + - column: { name: description, value: "A custom page type" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 4 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + + # Generic reference data (never content); off with cms.seedReferenceData=false. + - changeSet: + id: 1.0.0-seed-page_section_type + author: qbit-cms + logicalFilePath: qbit-cms/changelog + preConditions: + - onFail: CONTINUE + - sqlCheck: + expectedResult: 1 + sql: SELECT CASE WHEN POSITION(',CORE,' IN CONCAT(',', REPLACE('${cms.features}', ' ', ''), ',')) > 0 AND LOWER('${cms.seedReferenceData}') = 'true' THEN 1 ELSE 0 END + changes: + - insert: + tableName: ${cms.tablePrefix}page_section_type + columns: + - column: { name: name, value: "Text Content" } + - column: { name: code, value: "TEXT" } + - column: { name: description, value: "General text content section for displaying formatted text" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 1 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}page_section_type + columns: + - column: { name: name, value: "Hero Section" } + - column: { name: code, value: "HERO" } + - column: { name: description, value: "Hero section typically used for page headers and banners" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 2 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}page_section_type + columns: + - column: { name: name, value: "Gallery" } + - column: { name: code, value: "GALLERY" } + - column: { name: description, value: "Displays images or media in a gallery format" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 5 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}page_section_type + columns: + - column: { name: name, value: "Contact Form" } + - column: { name: code, value: "CONTACT_FORM" } + - column: { name: description, value: "Displays a contact form" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 6 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}page_section_type + columns: + - column: { name: name, value: "Blog List" } + - column: { name: code, value: "BLOG_LIST" } + - column: { name: description, value: "Displays blog posts in a list format" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 7 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}page_section_type + columns: + - column: { name: name, value: "Markdown Content" } + - column: { name: code, value: "MARKDOWN" } + - column: { name: description, value: "Displays markdown-formatted content" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 9 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}page_section_type + columns: + - column: { name: name, value: "Featured Posts" } + - column: { name: code, value: "FEATURED_POSTS" } + - column: { name: description, value: "Displays latest featured blog posts in a grid" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 10 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}page_section_type + columns: + - column: { name: name, value: "Social Links" } + - column: { name: code, value: "SOCIAL_LINKS" } + - column: { name: description, value: "Displays social media links with icons" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 11 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + - insert: + tableName: ${cms.tablePrefix}page_section_type + columns: + - column: { name: name, value: "Image Carousel" } + - column: { name: code, value: "IMAGE_CAROUSEL" } + - column: { name: description, value: "Displays images in a rotating carousel" } + - column: { name: is_active, valueBoolean: true } + - column: { name: sort_order, valueNumeric: 12 } + - column: { name: create_date, valueComputed: CURRENT_TIMESTAMP } + - column: { name: modify_date, valueComputed: CURRENT_TIMESTAMP } + diff --git a/src/test/java/com/kingsrook/qbits/cms/CmsEntitiesTest.java b/src/test/java/com/kingsrook/qbits/cms/CmsEntitiesTest.java new file mode 100644 index 0000000..1b2325e --- /dev/null +++ b/src/test/java/com/kingsrook/qbits/cms/CmsEntitiesTest.java @@ -0,0 +1,105 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms; + + +import java.io.Serializable; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.time.Instant; +import com.kingsrook.qbits.cms.metadata.CmsTableDefinition; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; + + +/******************************************************************************* + ** Every CMS entity round-trips through QRecord with its getters, setters and + ** fluent setters, and every definition's sections name real fields. + *******************************************************************************/ +class CmsEntitiesTest +{ + + /******************************************************************************* + ** Round trip each entity. + *******************************************************************************/ + @Test + void testEntitiesRoundTrip() throws Exception + { + for(CmsTableDefinition definition : CmsTables.definitions()) + { + Class entityClass = definition.entityClass(); + QRecordEntity entity = entityClass.getConstructor().newInstance(); + QRecord record = new QRecord(); + for(Field field : entityClass.getDeclaredFields()) + { + if(Modifier.isStatic(field.getModifiers())) + { + continue; + } + String name = field.getName(); + String cap = Character.toUpperCase(name.charAt(0)) + name.substring(1); + Serializable value = sample(field.getType()); + Method setter = entityClass.getMethod("set" + cap, field.getType()); + Method getter = entityClass.getMethod("get" + cap); + Method wither = entityClass.getMethod("with" + cap, field.getType()); + setter.invoke(entity, value); + assertThat(getter.invoke(entity)).as(entityClass.getSimpleName() + "." + name).isEqualTo(value); + assertThat(wither.invoke(entity, value)).isSameAs(entity); + record.setValue(name, value); + } + QRecordEntity copy = entityClass.getConstructor(QRecord.class).newInstance(record); + assertThat(copy.toQRecord().getValues()).as(entityClass.getSimpleName()).isEqualTo(entity.toQRecord().getValues()); + + for(CmsTableDefinition.Section section : definition.sections()) + { + for(String fieldName : section.fields()) + { + assertThat(entityClass.getDeclaredField(fieldName)).as(definition.logicalName() + " section field " + fieldName).isNotNull(); + } + } + } + } + + + + /******************************************************************************* + ** A sample value of a field type. + *******************************************************************************/ + private static Serializable sample(Class type) + { + if(type == Long.class) + { + return (7L); + } + if(type == Integer.class) + { + return (3); + } + if(type == Boolean.class) + { + return (true); + } + if(type == Instant.class) + { + return (Instant.parse("2026-10-12T00:00:00Z")); + } + return ("value"); + } +} diff --git a/src/test/java/com/kingsrook/qbits/cms/CmsFeatureTest.java b/src/test/java/com/kingsrook/qbits/cms/CmsFeatureTest.java new file mode 100644 index 0000000..4ca8bbf --- /dev/null +++ b/src/test/java/com/kingsrook/qbits/cms/CmsFeatureTest.java @@ -0,0 +1,50 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms; + + +import java.util.EnumSet; +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; + + +/******************************************************************************* + ** CmsFeature flags and their dependencies. + *******************************************************************************/ +class CmsFeatureTest +{ + + /******************************************************************************* + ** The default set is what this version implements; dependencies hold. + *******************************************************************************/ + @Test + void testFeatures() + { + assertThat(CmsFeature.allAvailable()).containsExactly(CmsFeature.CORE); + assertThat(CmsFeature.validate(CmsFeature.allAvailable())).isEmpty(); + assertThat(CmsFeature.validate(null)).containsExactly("features must include CORE"); + assertThat(CmsFeature.BLOG.getRequires()).containsExactly(CmsFeature.MEDIA); + assertThat(CmsFeature.CORE.isAvailable()).isTrue(); + + assertThat(CmsFeature.validate(EnumSet.of(CmsFeature.CORE, CmsFeature.BLOG))) + .contains("feature BLOG requires MEDIA", "feature BLOG is not available in this version of qbit-cms"); + assertThat(CmsFeature.validate(EnumSet.of(CmsFeature.CORE, CmsFeature.PUBLISHING))) + .contains("feature PUBLISHING requires BLOG or PROJECTS"); + assertThat(CmsFeature.validate(EnumSet.of(CmsFeature.CORE, CmsFeature.MEDIA, CmsFeature.BLOG, CmsFeature.STREAM, CmsFeature.PUBLISHING))) + .noneMatch(e -> e.contains("requires")); + } +} diff --git a/src/test/java/com/kingsrook/qbits/cms/CmsInstallTest.java b/src/test/java/com/kingsrook/qbits/cms/CmsInstallTest.java new file mode 100644 index 0000000..bcbf94b --- /dev/null +++ b/src/test/java/com/kingsrook/qbits/cms/CmsInstallTest.java @@ -0,0 +1,262 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms; + + +import java.sql.Connection; +import java.sql.Statement; +import java.util.List; +import java.util.Map; +import java.util.Set; +import com.kingsrook.qbits.cms.security.CmsRole; +import com.kingsrook.qbits.cms.security.CmsSecurity; +import com.kingsrook.qqq.backend.core.actions.tables.CountAction; +import com.kingsrook.qqq.backend.core.actions.tables.GetAction; +import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; +import com.kingsrook.qqq.backend.core.actions.tables.QueryAction; +import com.kingsrook.qqq.backend.core.context.QContext; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.instances.QInstanceValidator; +import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.get.GetInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterCriteria; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryInput; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager; +import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + + +/******************************************************************************* + ** Installing the qbit into a blank QQQ instance on H2: the host runs the + ** changelog, produces the qbit (FAIL_FAST schema check), and the CMS tables + ** work as ordinary QQQ tables. + *******************************************************************************/ +class CmsInstallTest +{ + + /******************************************************************************* + ** + *******************************************************************************/ + @AfterEach + void afterEach() + { + QContext.clear(); + } + + + + /******************************************************************************* + ** Fresh install: schema check passes, generic reference data is seeded, + ** and content round-trips, including children through associations. + *******************************************************************************/ + @Test + void testFreshInstall() throws Exception + { + RDBMSBackendMetaData backend = CmsTestSupport.h2Backend(); + CmsTestSupport.migrate(backend, Map.of()); + + QInstance qInstance = CmsTestSupport.blankInstance(backend); + CmsQBitConfig config = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND); + new CmsQBitProducer().withQBitConfig(config).produce(qInstance); + new QInstanceValidator().validate(qInstance); + assertThat(config.getRuntime().getSchemaProblems()).isEmpty(); + + CmsTestSupport.session(qInstance, CmsSecurity.permissionsFor(config, Set.of(CmsRole.ADMIN))); + assertThat(count("cms_redirect_type")).isEqualTo(4); + assertThat(count("cms_page_type")).isEqualTo(4); + assertThat(count("cms_page_section_type")).isEqualTo(9); + + Integer siteId = insert("cms_site", new QRecord().withValue("name", "Example").withValue("shortName", "example")); + insert("cms_domain", new QRecord().withValue("name", "www").withValue("shortName", "www").withValue("fqdn", "www.example.com") + .withValue("isPrimary", true).withValue("siteId", siteId)); + Integer pageTypeId = idOf("cms_page_type", "code", "STATIC"); + Integer sectionTypeId = idOf("cms_page_section_type", "code", "MARKDOWN"); + + QRecord page = new QRecord().withValue("name", "About").withValue("slug", "about").withValue("title", "About us") + .withValue("pageTypeId", pageTypeId).withValue("siteId", siteId).withValue("content", "x".repeat(5000)) + .withAssociatedRecord("sections", new QRecord().withValue("name", "Intro").withValue("sectionTypeId", sectionTypeId).withValue("sortOrder", 1) + .withValue("content", "{\"content\": \"# Hello\"}")) + .withAssociatedRecord("sections", new QRecord().withValue("name", "Body").withValue("sectionTypeId", sectionTypeId).withValue("sortOrder", 2)); + Integer pageId = insert("cms_page", page); + + QRecord stored = new GetAction().execute(new GetInput("cms_page").withPrimaryKey(pageId).withIncludeAssociations(true)).getRecord(); + assertThat(stored.getValueString("content")).hasSize(5000); + assertThat(stored.getValueBoolean("isPublished")).isFalse(); + assertThat(stored.getValue("createDate")).isNotNull(); + assertThat(stored.getAssociatedRecords().get("sections")).hasSize(2); + + Integer menuId = insert("cms_menu", new QRecord().withValue("name", "Header").withValue("slug", "header").withValue("menuType", "HEADER").withValue("siteId", siteId) + .withAssociatedRecord("items", new QRecord().withValue("name", "About").withValue("slug", "about").withValue("itemType", "PAGE").withValue("routePath", "/about"))); + assertThat(count("cms_menu_item")).isEqualTo(1); + assertThat(menuId).isNotNull(); + } + + + + /******************************************************************************* + ** A host can choose any prefix; the changelog property and the config agree. + *******************************************************************************/ + @Test + void testCustomPrefix() throws Exception + { + RDBMSBackendMetaData backend = CmsTestSupport.h2Backend(); + CmsTestSupport.migrate(backend, Map.of("cms.tablePrefix", "acme_cms_")); + + QInstance qInstance = CmsTestSupport.blankInstance(backend); + CmsQBitConfig config = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND).withTableNamePrefix("acme_cms_"); + new CmsQBitProducer().withQBitConfig(config).produce(qInstance); + assertThat(qInstance.getTable("acme_cms_page")).isNotNull(); + assertThat(qInstance.getTable("cms_page")).isNull(); + + CmsTestSupport.session(qInstance, CmsSecurity.permissionsFor(config, Set.of(CmsRole.ADMIN))); + assertThat(count("acme_cms_redirect_type")).isEqualTo(4); + } + + + + /******************************************************************************* + ** Running the changelog again changes nothing (the guard runs every time + ** and passes for tables this changelog created). + *******************************************************************************/ + @Test + void testRerunIsNoop() throws Exception + { + RDBMSBackendMetaData backend = CmsTestSupport.h2Backend(); + CmsTestSupport.migrate(backend, Map.of()); + CmsTestSupport.migrate(backend, Map.of()); + + QInstance qInstance = CmsTestSupport.blankInstance(backend); + CmsQBitConfig config = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND); + new CmsQBitProducer().withQBitConfig(config).produce(qInstance); + CmsTestSupport.session(qInstance, CmsSecurity.permissionsFor(config, Set.of(CmsRole.ADMIN))); + assertThat(count("cms_redirect_type")).isEqualTo(4); + } + + + + /******************************************************************************* + ** An existing table with a qbit name halts the install; nothing is + ** overwritten. + *******************************************************************************/ + @Test + void testExistingTableHalts() throws Exception + { + RDBMSBackendMetaData backend = CmsTestSupport.h2Backend(); + try(Connection connection = ConnectionManager.getConnection(backend); Statement statement = connection.createStatement()) + { + statement.execute("CREATE TABLE cms_page (id INT PRIMARY KEY, title VARCHAR(10))"); + statement.execute("INSERT INTO cms_page VALUES (1, 'theirs')"); + } + assertThatThrownBy(() -> CmsTestSupport.migrate(backend, Map.of())).hasStackTraceContaining("was not created by qbit-cms"); + + try(Connection connection = ConnectionManager.getConnection(backend); Statement statement = connection.createStatement()) + { + var resultSet = statement.executeQuery("SELECT title FROM cms_page WHERE id = 1"); + assertThat(resultSet.next()).isTrue(); + assertThat(resultSet.getString(1)).isEqualTo("theirs"); + } + } + + + + /******************************************************************************* + ** Reference data is optional. + *******************************************************************************/ + @Test + void testSeedOff() throws Exception + { + RDBMSBackendMetaData backend = CmsTestSupport.h2Backend(); + CmsTestSupport.migrate(backend, Map.of("cms.seedReferenceData", "false")); + + QInstance qInstance = CmsTestSupport.blankInstance(backend); + CmsQBitConfig config = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND); + new CmsQBitProducer().withQBitConfig(config).produce(qInstance); + CmsTestSupport.session(qInstance, CmsSecurity.permissionsFor(config, Set.of(CmsRole.ADMIN))); + assertThat(count("cms_redirect_type")).isZero(); + } + + + + /******************************************************************************* + ** Without the changelog, FAIL_FAST refuses to start and names the problem; + ** DEGRADED starts and records it. + *******************************************************************************/ + @Test + void testSchemaCheck() throws Exception + { + RDBMSBackendMetaData backend = CmsTestSupport.h2Backend(); + + CmsQBitConfig failFast = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND); + assertThatThrownBy(() -> new CmsQBitProducer().withQBitConfig(failFast).produce(CmsTestSupport.blankInstance(backend))) + .isInstanceOf(QException.class) + .hasMessageContaining("not up to date") + .hasMessageContaining("DATABASECHANGELOG"); + + CmsQBitConfig degraded = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND).withStartupMode(CmsStartupMode.DEGRADED); + new CmsQBitProducer().withQBitConfig(degraded).produce(CmsTestSupport.blankInstance(backend)); + assertThat(degraded.getRuntime().getSchemaProblems()).isNotEmpty(); + + //////////////////////////////////////////////////////////////// + // changelog run without CORE (cms.features): tables missing // + //////////////////////////////////////////////////////////////// + CmsTestSupport.migrate(backend, Map.of("cms.features", "MEDIA")); + CmsQBitConfig partial = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND).withStartupMode(CmsStartupMode.DEGRADED); + new CmsQBitProducer().withQBitConfig(partial).produce(CmsTestSupport.blankInstance(backend)); + assertThat(partial.getRuntime().getSchemaProblems()).anyMatch(p -> p.contains("1.0.0-create-page") && p.contains("CORE")); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static Integer insert(String table, QRecord record) throws QException + { + List records = new InsertAction().execute(new InsertInput(table).withRecord(record)).getRecords(); + assertThat(records.get(0).getErrors()).as(table).isEmpty(); + return (records.get(0).getValueInteger("id")); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static int count(String table) throws QException + { + return (new CountAction().execute(new CountInput(table)).getCount()); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static Integer idOf(String table, String field, String value) throws QException + { + List records = new QueryAction().execute(new QueryInput(table).withFilter(new QQueryFilter(new QFilterCriteria(field, QCriteriaOperator.EQUALS, value)))).getRecords(); + return (records.get(0).getValueInteger("id")); + } +} diff --git a/src/test/java/com/kingsrook/qbits/cms/CmsPostgresInstallTest.java b/src/test/java/com/kingsrook/qbits/cms/CmsPostgresInstallTest.java new file mode 100644 index 0000000..0d813e9 --- /dev/null +++ b/src/test/java/com/kingsrook/qbits/cms/CmsPostgresInstallTest.java @@ -0,0 +1,136 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms; + + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import com.kingsrook.qbits.cms.security.CmsRole; +import com.kingsrook.qbits.cms.security.CmsSecurity; +import com.kingsrook.qqq.backend.core.actions.tables.GetAction; +import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; +import com.kingsrook.qqq.backend.core.context.QContext; +import com.kingsrook.qqq.backend.core.model.actions.tables.get.GetInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.module.postgres.model.metadata.PostgreSQLBackendMetaData; +import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.PostgreSQLContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import static org.assertj.core.api.Assertions.assertThat; + + +/******************************************************************************* + ** The install on PostgreSQL (the production database): the changelog creates + ** the kof22-shaped schema (identity ids, the same column types and + ** nullability), the schema check passes, and QQQ reads and writes it. + ** Skipped when Docker is not available. + *******************************************************************************/ +@Testcontainers(disabledWithoutDocker = true) +class CmsPostgresInstallTest +{ + @Container + private static final PostgreSQLContainer POSTGRES = new PostgreSQLContainer<>("postgres:17-alpine"); + + + + /******************************************************************************* + ** + *******************************************************************************/ + @AfterEach + void afterEach() + { + QContext.clear(); + } + + + + /******************************************************************************* + ** Fresh install on PostgreSQL with the default prefix. + *******************************************************************************/ + @Test + void testInstallOnPostgres() throws Exception + { + ConnectionManager.resetConnectionProviders(); + PostgreSQLBackendMetaData backend = new PostgreSQLBackendMetaData() + .withName(CmsTestSupport.BACKEND) + .withHostName(POSTGRES.getHost()) + .withPort(POSTGRES.getFirstMappedPort()) + .withDatabaseName(POSTGRES.getDatabaseName()) + .withUsername(POSTGRES.getUsername()) + .withPassword(POSTGRES.getPassword()); + CmsTestSupport.migrate(backend, Map.of()); + + QInstance qInstance = CmsTestSupport.blankInstance(backend); + CmsQBitConfig config = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND); + new CmsQBitProducer().withQBitConfig(config).produce(qInstance); + assertThat(config.getRuntime().getSchemaProblems()).isEmpty(); + + try(Connection connection = ConnectionManager.getConnection(backend); Statement statement = connection.createStatement()) + { + assertThat(columns(statement, "cms_page")).contains( + "id bigint NO", "slug character varying(100) NO", "title character varying(200) NO", "content text YES", "is_published boolean NO", + "publish_date timestamp without time zone YES", "parent_page_id bigint YES", "create_date timestamp without time zone NO"); + try(ResultSet resultSet = statement.executeQuery("SELECT pg_get_serial_sequence('cms_page', 'id'), " + + "(SELECT COUNT(*) FROM information_schema.table_constraints WHERE table_name = 'cms_page' AND constraint_type = 'FOREIGN KEY')")) + { + assertThat(resultSet.next()).isTrue(); + assertThat(resultSet.getString(1)).isEqualTo("public.cms_page_id_seq"); + assertThat(resultSet.getInt(2)).isEqualTo(3); + } + } + + CmsTestSupport.session(qInstance, CmsSecurity.permissionsFor(config, Set.of(CmsRole.ADMIN))); + Integer siteId = new InsertAction().execute(new InsertInput("cms_site").withRecord(new QRecord().withValue("name", "Example").withValue("shortName", "ex"))) + .getRecords().get(0).getValueInteger("id"); + Integer pageId = new InsertAction().execute(new InsertInput("cms_page").withRecord(new QRecord().withValue("name", "Home").withValue("slug", "home") + .withValue("title", "Home").withValue("pageTypeId", 1).withValue("siteId", siteId) + .withAssociatedRecord("sections", new QRecord().withValue("name", "Hero").withValue("sectionTypeId", 2).withValue("content", "{}")))).getRecords().get(0).getValueInteger("id"); + QRecord page = new GetAction().execute(new GetInput("cms_page").withPrimaryKey(pageId).withIncludeAssociations(true)).getRecord(); + assertThat(page.getAssociatedRecords().get("sections")).hasSize(1); + assertThat(page.getValue("createDate")).isNotNull(); + } + + + + /******************************************************************************* + ** "name type nullable" for each column of a table. + *******************************************************************************/ + private static List columns(Statement statement, String table) throws Exception + { + List rs = new ArrayList<>(); + try(ResultSet resultSet = statement.executeQuery("SELECT column_name, data_type, character_maximum_length, is_nullable FROM information_schema.columns " + + "WHERE table_name = '" + table + "' ORDER BY ordinal_position")) + { + while(resultSet.next()) + { + Object length = resultSet.getObject(3); + rs.add(resultSet.getString(1) + " " + resultSet.getString(2) + (length == null ? "" : "(" + length + ")") + " " + resultSet.getString(4)); + } + } + return (rs); + } +} diff --git a/src/test/java/com/kingsrook/qbits/cms/CmsQBitProducerTest.java b/src/test/java/com/kingsrook/qbits/cms/CmsQBitProducerTest.java index f794582..59f783e 100644 --- a/src/test/java/com/kingsrook/qbits/cms/CmsQBitProducerTest.java +++ b/src/test/java/com/kingsrook/qbits/cms/CmsQBitProducerTest.java @@ -17,66 +17,217 @@ package com.kingsrook.qbits.cms; +import java.util.EnumSet; +import java.util.List; +import java.util.Set; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.instances.QInstanceValidator; +import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; -import com.kingsrook.qqq.backend.core.model.metadata.qbits.QBitConfigValidationException; +import com.kingsrook.qqq.backend.core.model.metadata.layout.QAppMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.layout.QAppSection; +import com.kingsrook.qqq.backend.core.model.metadata.permissions.PermissionLevel; +import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; +import com.kingsrook.qqq.backend.core.modules.backend.implementations.memory.MemoryBackendModule; +import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSTableBackendDetails; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; /******************************************************************************* - ** Unit test for CmsQBitProducer + ** CmsQBitProducer: what it produces, validation, namespaces and collisions + ** (no database: startupMode SKIP). *******************************************************************************/ class CmsQBitProducerTest { + private static final List CORE_TABLES = List.of("cms_site", "cms_domain", "cms_redirect", "cms_redirect_type", "cms_page", "cms_page_type", + "cms_page_section", "cms_page_section_type", "cms_snippet", "cms_menu", "cms_menu_item"); + + /******************************************************************************* - ** A configured qbit registers itself in the instance. + ** The CORE feature: eleven standard tables named per the owner rule, a + ** possible-value source each, child lists, apps with homes, and a valid + ** instance. *******************************************************************************/ @Test - void testProduce() throws Exception + void testProduceCore() throws Exception { - QInstance qInstance = new QInstance(); - CmsQBitConfig config = new CmsQBitConfig().withBackendName("rdbms"); - CmsQBitProducer producer = new CmsQBitProducer().withQBitConfig(config).withNamespace("cms"); - + QInstance qInstance = CmsTestSupport.blankInstance(CmsTestSupport.h2Backend()); + CmsQBitConfig config = config(); + CmsQBitProducer producer = new CmsQBitProducer().withQBitConfig(config); assertThat(producer.isEnabled()).isTrue(); assertThat(producer.getQBitConfig()).isSameAs(config); - assertThat(producer.getNamespace()).isEqualTo("cms"); - assertThat(config.getDefaultBackendNameForTables()).isEqualTo("rdbms"); + assertThat(producer.produce(qInstance).getEach(QTableMetaData.class)).isEmpty(); + new QInstanceValidator().validate(qInstance); - producer.produce(qInstance); assertThat(qInstance.getQBits()).hasSize(1); assertThat(qInstance.getQBits().values().iterator().next().getArtifactId()).isEqualTo("qbit-cms"); + for(String name : CORE_TABLES) + { + QTableMetaData table = qInstance.getTable(name); + assertThat(table).as(name).isNotNull(); + assertThat(name).matches("^cms_[a-z][a-z_]*$"); + assertThat(((RDBMSTableBackendDetails) table.getBackendDetails()).getTableName()).isEqualTo(name); + assertThat(table.getBackendName()).isEqualTo(CmsTestSupport.BACKEND); + assertThat(table.getPermissionRules().getLevel()).isEqualTo(PermissionLevel.READ_INSERT_EDIT_DELETE_PERMISSIONS); + assertThat(table.getIsHidden()).as(name + " is visible").isFalse(); + assertThat(table.getField("createDate").getBackendName()).isEqualTo("create_date"); + assertThat(qInstance.getPossibleValueSource(name)).as(name + " PVS").isNotNull(); + } + assertThat(qInstance.getTable("cms_page").getField("pageTypeId").getBackendName()).isEqualTo("page_type_id"); + assertThat(qInstance.getTable("cms_page").getField("siteId").getPossibleValueSourceName()).isEqualTo("cms_site"); + assertThat(qInstance.getTable("cms_redirect").getField("matchType").getPossibleValueSourceName()).isEqualTo("cms_redirect_match_type"); + assertThat(qInstance.getTable("cms_page").getAssociations()).extracting("name").contains("sections"); + assertThat(qInstance.getTable("cms_menu").getAssociations()).extracting("name").contains("items"); + + QAppMetaData top = qInstance.getApp("cms"); + assertThat(top.getLabel()).isEqualTo("CMS"); + assertThat(top.getWidgets()).containsExactly("cmsHome"); + assertThat(top.getChildren()).extracting("name").containsExactly("cmsSites", "cmsPages", "cmsNavigation"); + assertThat(qInstance.getApp("cmsPages").getWidgets()).containsExactly("cmsPagesHome"); + assertThat(qInstance.getWidget("cmsPagesHome")).isNotNull(); + + ///////////////////////////////////////////////////////////////////// + // the nav lists main and reference tables only, never a child // + // table, and no processes // + ///////////////////////////////////////////////////////////////////// + List navTables = qInstance.getApps().values().stream().filter(a -> a.getSections() != null) + .flatMap(a -> a.getSections().stream()).flatMap(s -> s.getTables() == null ? java.util.stream.Stream.empty() : s.getTables().stream()).toList(); + assertThat(navTables).containsExactlyInAnyOrder("cms_site", "cms_redirect", "cms_redirect_type", "cms_page", "cms_snippet", "cms_page_type", + "cms_page_section_type", "cms_menu"); + for(QAppMetaData app : qInstance.getApps().values()) + { + for(QAppSection section : app.getSections() == null ? List.of() : app.getSections()) + { + assertThat(section.getProcesses()).as(app.getName()).isNullOrEmpty(); + } + } + assertThat(qInstance.getTable("cms_page").getSections()).extracting("name").contains("cms_page_cms_page_section_pageId"); } /******************************************************************************* - ** Without a config the producer is disabled; without a backend it fails. + ** Validation lists every problem. *******************************************************************************/ @Test - void testDisabledAndInvalid() + void testValidation() { assertThat(new CmsQBitProducer().isEnabled()).isFalse(); + assertThatThrownBy(() -> new CmsQBitProducer().produce(new QInstance())).hasMessageContaining("no config"); - CmsQBitConfig config = new CmsQBitConfig(); - config.setBackendName(null); - assertThat(config.getBackendName()).isNull(); - assertThatThrownBy(() -> new CmsQBitProducer().withQBitConfig(config).produce(new QInstance())) - .isInstanceOf(QBitConfigValidationException.class); + QInstance qInstance = CmsTestSupport.blankInstance(CmsTestSupport.h2Backend()); + qInstance.addBackend(new QBackendMetaData().withName("memory").withBackendType(MemoryBackendModule.class)); + assertThatThrownBy(() -> produce(qInstance, new CmsQBitConfig())).hasMessageContaining("backendName is required"); + assertThatThrownBy(() -> produce(qInstance, config().withBackendName("nope"))).hasMessageContaining("not a backend"); + assertThatThrownBy(() -> produce(qInstance, config().withBackendName("memory"))).hasMessageContaining("must be an RDBMS backend"); + assertThatThrownBy(() -> produce(qInstance, config().withTableNamePrefix("CMS"))).hasMessageContaining("tableNamePrefix"); + assertThatThrownBy(() -> produce(qInstance, config().withNamePrefix("9x"))).hasMessageContaining("namePrefix"); + assertThatThrownBy(() -> produce(qInstance, config().withPermissionBaseName(""))).hasMessageContaining("permissionBaseName"); + assertThatThrownBy(() -> produce(qInstance, config().withParentAppName("content"))).hasMessageContaining("parentAppName content"); + assertThatThrownBy(() -> produce(qInstance, config().withFeatures(EnumSet.of(CmsFeature.CORE, CmsFeature.MEDIA)))).hasMessageContaining("MEDIA is not available"); + assertThatThrownBy(() -> produce(qInstance, config().withFeatures(Set.of()))).hasMessageContaining("must include CORE"); + assertThatThrownBy(() -> produce(qInstance, config().withRoleMapping(null))).hasMessageContaining("roleMapping"); + assertThatThrownBy(() -> produce(qInstance, config().withStartupMode(null))).hasMessageContaining("startupMode"); + assertThat(qInstance.getQBits()).isNullOrEmpty(); } /******************************************************************************* - ** Names follow the owner rule: lowercase snake_case with the full qbit name. + ** A second install needs a namespace, which becomes its prefixes. + *******************************************************************************/ + @Test + void testNamespaceAndCollisions() throws Exception + { + QInstance qInstance = CmsTestSupport.blankInstance(CmsTestSupport.h2Backend()); + produce(qInstance, config()); + + assertThatThrownBy(() -> produce(qInstance, config())) + .isInstanceOf(QException.class) + .hasMessageContaining("collide") + .hasMessageContaining("table cms_site"); + + CmsQBitConfig second = config(); + new CmsQBitProducer().withQBitConfig(second).withNamespace("siteTwo").produce(qInstance); + assertThat(second.getTableNamePrefix()).isEqualTo("site_two_"); + assertThat(second.getNamePrefix()).isEqualTo("siteTwo"); + assertThat(second.getPermissionBaseName()).isEqualTo("site_two"); + assertThat(qInstance.getTable("site_two_page")).isNotNull(); + assertThat(qInstance.getApp("siteTwo")).isNotNull(); + assertThat(qInstance.getApp("siteTwoPages")).isNotNull(); + assertThat(qInstance.getQBits()).hasSize(2); + assertThat(CmsRuntime.findConfig(qInstance, "siteTwo")).containsSame(second); + new QInstanceValidator().validate(qInstance); + } + + + + /******************************************************************************* + ** The host can nest the CMS under one of its apps. + *******************************************************************************/ + @Test + void testParentApp() throws Exception + { + QInstance qInstance = CmsTestSupport.blankInstance(CmsTestSupport.h2Backend()); + qInstance.addApp(new QAppMetaData().withName("content").withLabel("Content")); + produce(qInstance, config().withParentAppName("content").withAppName("cmsApp").withAppLabel("Website")); + assertThat(qInstance.getApp("content").getChildren()).extracting("name").containsExactly("cmsApp"); + assertThat(qInstance.getApp("cmsApp").getLabel()).isEqualTo("Website"); + new QInstanceValidator().validate(qInstance); + } + + + + /******************************************************************************* + ** With openReads, tables keep their rule names and get the open-reads + ** checker. + *******************************************************************************/ + @Test + void testOpenReadsRules() throws Exception + { + QInstance qInstance = CmsTestSupport.blankInstance(CmsTestSupport.h2Backend()); + produce(qInstance, config().withOpenReads(true)); + assertThat(qInstance.getTable("cms_page").getPermissionRules().getCustomPermissionChecker()).isNotNull(); + } + + + + /******************************************************************************* + ** Naming constants follow the owner rule. *******************************************************************************/ @Test void testNaming() { - assertThat(CmsQBitConfig.TABLE_NAME_PREFIX).isEqualTo("cms_").matches("^[a-z][a-z0-9_]*_$"); - assertThat(CmsQBitConfig.PERMISSION_BASE_NAME).isEqualTo("cms"); + CmsQBitConfig config = config(); + assertThat(CmsQBitConfig.DEFAULT_TABLE_NAME_PREFIX).isEqualTo("cms_").matches("^[a-z][a-z0-9_]*_$"); + assertThat(config.applyPrefix("page")).isEqualTo("cms_page"); + assertThat(config.name("Pages")).isEqualTo("cmsPages"); + assertThat(config.permission("admin")).isEqualTo("cms.admin"); + assertThat(config.getEffectiveAppName()).isEqualTo("cms"); + assertThat(config.toString()).contains("tableNamePrefix=cms_"); + assertThat(config.getDefaultBackendNameForTables()).isEqualTo(CmsTestSupport.BACKEND); } + + + /******************************************************************************* + ** + *******************************************************************************/ + private static CmsQBitConfig config() + { + return (new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND).withStartupMode(CmsStartupMode.SKIP)); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static void produce(QInstance qInstance, CmsQBitConfig config) throws QException + { + new CmsQBitProducer().withQBitConfig(config).produce(qInstance); + } } diff --git a/src/test/java/com/kingsrook/qbits/cms/CmsSecurityTest.java b/src/test/java/com/kingsrook/qbits/cms/CmsSecurityTest.java new file mode 100644 index 0000000..551e325 --- /dev/null +++ b/src/test/java/com/kingsrook/qbits/cms/CmsSecurityTest.java @@ -0,0 +1,169 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms; + + +import java.util.List; +import java.util.Map; +import java.util.Set; +import com.kingsrook.qbits.cms.security.CmsRole; +import com.kingsrook.qbits.cms.security.CmsSecurity; +import com.kingsrook.qqq.backend.core.actions.tables.DeleteAction; +import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; +import com.kingsrook.qqq.backend.core.actions.tables.QueryAction; +import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction; +import com.kingsrook.qqq.backend.core.context.QContext; +import com.kingsrook.qqq.backend.core.exceptions.QPermissionDeniedException; +import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.core.model.session.QSession; +import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + + +/******************************************************************************* + ** Roles, permissions and their enforcement (spec section 6) with QQQ core + ** permission enforcement on, as QQQ 4.2 will default. + *******************************************************************************/ +class CmsSecurityTest +{ + + /******************************************************************************* + ** + *******************************************************************************/ + @AfterEach + void afterEach() + { + QContext.clear(); + } + + + + /******************************************************************************* + ** Role bundles. + *******************************************************************************/ + @Test + void testRolePermissions() + { + CmsQBitConfig config = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND) + .withRole("cms-admins", CmsRole.ADMIN).withRole("writers", CmsRole.EDITOR).withRole("readers", CmsRole.VIEWER); + + assertThat(CmsSecurity.rolesFor(config, List.of("writers", "unknown"))).containsExactly(CmsRole.EDITOR); + assertThat(CmsSecurity.rolesFor(config, null)).isEmpty(); + + Set admin = CmsSecurity.permissionsFor(config, Set.of(CmsRole.ADMIN)); + assertThat(admin).contains("cms_page.read", "cms_page.delete", "cms_page_type.edit", "cms.admin", "cms.publish"); + + Set editor = CmsSecurity.permissionsFor(config, Set.of(CmsRole.EDITOR)); + assertThat(editor).contains("cms_page.insert", "cms_page.edit", "cms_page.delete", "cms_page_type.read") + .doesNotContain("cms_page_type.edit", "cms.publish", "cms.admin"); + + assertThat(CmsSecurity.permissionsFor(config, Set.of(CmsRole.PUBLISHER))).contains("cms.publish").doesNotContain("cms.admin"); + + Set drafter = CmsSecurity.permissionsFor(config, Set.of(CmsRole.DRAFTER)); + assertThat(drafter).contains("cms_page.insert", "cms_page.edit").doesNotContain("cms_page.delete", "cms.publish"); + + Set viewer = CmsSecurity.permissionsFor(config, Set.of(CmsRole.VIEWER)); + assertThat(viewer).allMatch(p -> p.endsWith(".read")).contains("cms_menu_item.read"); + + QSession session = new QSession().withPermission("host.thing"); + CmsSecurity.applySessionPermissions(session, List.of("readers"), config); + assertThat(session.getPermissions()).contains("host.thing", "cms_page.read").doesNotContain("cms_page.insert"); + } + + + + /******************************************************************************* + ** Enforced: a viewer reads but cannot write; an editor writes content but + ** not reference data; a session without CMS permissions cannot read. + *******************************************************************************/ + @Test + void testEnforcement() throws Exception + { + CmsQBitConfig config = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND); + QInstance qInstance = install(config); + + CmsTestSupport.session(qInstance, CmsSecurity.permissionsFor(config, Set.of(CmsRole.VIEWER))); + assertThat(new QueryAction().execute(new QueryInput("cms_redirect_type")).getRecords()).hasSize(4); + assertThatThrownBy(() -> insertSite("viewer")).isInstanceOf(QPermissionDeniedException.class); + + CmsTestSupport.session(qInstance, CmsSecurity.permissionsFor(config, Set.of(CmsRole.EDITOR))); + Integer siteId = insertSite("editor"); + assertThat(siteId).isNotNull(); + assertThatThrownBy(() -> new UpdateAction().execute(new UpdateInput("cms_page_type").withRecord(new QRecord().withValue("id", 1).withValue("name", "X")))) + .isInstanceOf(QPermissionDeniedException.class); + + CmsTestSupport.session(qInstance, CmsSecurity.permissionsFor(config, Set.of(CmsRole.DRAFTER))); + assertThatThrownBy(() -> new DeleteAction().execute(new DeleteInput("cms_site").withPrimaryKey(siteId))).isInstanceOf(QPermissionDeniedException.class); + + CmsTestSupport.session(qInstance, Set.of()); + assertThatThrownBy(() -> new QueryAction().execute(new QueryInput("cms_page"))).isInstanceOf(QPermissionDeniedException.class); + } + + + + /******************************************************************************* + ** openReads: anyone reads, writes still need the table permission. + *******************************************************************************/ + @Test + void testOpenReads() throws Exception + { + CmsQBitConfig config = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND).withOpenReads(true); + QInstance qInstance = install(config); + + CmsTestSupport.session(qInstance, Set.of()); + assertThat(new QueryAction().execute(new QueryInput("cms_redirect_type")).getRecords()).hasSize(4); + assertThatThrownBy(() -> insertSite("anonymous")).isInstanceOf(QPermissionDeniedException.class); + + CmsTestSupport.session(qInstance, Set.of("cms_site.insert")); + assertThat(insertSite("writer")).isNotNull(); + assertThatThrownBy(() -> new DeleteAction().execute(new DeleteInput("cms_site").withPrimaryKey(1))).isInstanceOf(QPermissionDeniedException.class); + } + + + + /******************************************************************************* + ** A migrated, enforced install. + *******************************************************************************/ + private static QInstance install(CmsQBitConfig config) throws Exception + { + RDBMSBackendMetaData backend = CmsTestSupport.h2Backend(); + CmsTestSupport.migrate(backend, Map.of()); + QInstance qInstance = CmsTestSupport.blankInstance(backend); + qInstance.setEnforcePermissionsInCoreActions(true); + new CmsQBitProducer().withQBitConfig(config).produce(qInstance); + return (qInstance); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static Integer insertSite(String name) throws Exception + { + return (new InsertAction().execute(new InsertInput("cms_site").withRecord(new QRecord().withValue("name", name).withValue("shortName", name))) + .getRecords().get(0).getValueInteger("id")); + } +} diff --git a/src/test/java/com/kingsrook/qbits/cms/CmsTestSupport.java b/src/test/java/com/kingsrook/qbits/cms/CmsTestSupport.java new file mode 100644 index 0000000..8af0751 --- /dev/null +++ b/src/test/java/com/kingsrook/qbits/cms/CmsTestSupport.java @@ -0,0 +1,116 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms; + + +import java.sql.Connection; +import java.util.Collection; +import java.util.Map; +import java.util.UUID; +import com.kingsrook.qqq.backend.core.context.QContext; +import com.kingsrook.qqq.backend.core.model.metadata.QAuthenticationType; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.core.model.metadata.authentication.QAuthenticationMetaData; +import com.kingsrook.qqq.backend.core.model.session.QSession; +import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager; +import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData; +import liquibase.Contexts; +import liquibase.LabelExpression; +import liquibase.Liquibase; +import liquibase.database.Database; +import liquibase.database.DatabaseFactory; +import liquibase.database.jvm.JdbcConnection; +import liquibase.resource.ClassLoaderResourceAccessor; + + +/******************************************************************************* + ** Test fixtures: a blank QQQ instance on a fresh in-memory H2 database (the + ** "any running QQQ system" a host starts from), the qbit's changelog run the + ** way a host runs it, and sessions with chosen permissions. + *******************************************************************************/ +public final class CmsTestSupport +{ + public static final String BACKEND = "rdbms"; + + + + /******************************************************************************* + ** Not instantiable. + *******************************************************************************/ + private CmsTestSupport() + { + } + + + + /******************************************************************************* + ** A fresh H2 backend (its own database). QQQ caches connection providers + ** by backend name, so the cache is reset first. + *******************************************************************************/ + public static RDBMSBackendMetaData h2Backend() + { + ConnectionManager.resetConnectionProviders(); + return (new RDBMSBackendMetaData() + .withName(BACKEND) + .withVendor("h2") + .withHostName("mem") + .withDatabaseName("cms_" + UUID.randomUUID().toString().replace("-", "")) + .withUsername("sa")); + } + + + + /******************************************************************************* + ** A blank instance with one RDBMS backend and mock authentication. + *******************************************************************************/ + public static QInstance blankInstance(RDBMSBackendMetaData backend) + { + QInstance qInstance = new QInstance(); + qInstance.addBackend(backend); + qInstance.withInstanceDefaultAuthentication(new QAuthenticationMetaData().withName("mock").withType(QAuthenticationType.MOCK)); + return (qInstance); + } + + + + /******************************************************************************* + ** Run the qbit's changelog against a backend, as a host's Liquibase would, + ** with the given changelog properties. + *******************************************************************************/ + public static void migrate(RDBMSBackendMetaData backend, Map properties) throws Exception + { + Connection connection = ConnectionManager.getConnection(backend); + Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection)); + try(Liquibase liquibase = new Liquibase(CmsQBitConfig.CHANGELOG, new ClassLoaderResourceAccessor(), database)) + { + properties.forEach(liquibase::setChangeLogParameter); + liquibase.update(new Contexts(), new LabelExpression()); + } + } + + + + /******************************************************************************* + ** Start a context on an instance with a session holding these permissions. + *******************************************************************************/ + public static QSession session(QInstance qInstance, Collection permissions) throws Exception + { + QSession session = new QSession().withPermissions(permissions); + QContext.init(qInstance, session); + return (session); + } +} diff --git a/src/test/java/com/kingsrook/qbits/cms/home/CmsHomeRendererTest.java b/src/test/java/com/kingsrook/qbits/cms/home/CmsHomeRendererTest.java new file mode 100644 index 0000000..68d6242 --- /dev/null +++ b/src/test/java/com/kingsrook/qbits/cms/home/CmsHomeRendererTest.java @@ -0,0 +1,183 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.home; + + +import java.util.Map; +import java.util.Set; +import com.kingsrook.qbits.cms.CmsQBitConfig; +import com.kingsrook.qbits.cms.CmsQBitProducer; +import com.kingsrook.qbits.cms.CmsStartupMode; +import com.kingsrook.qbits.cms.CmsTestSupport; +import com.kingsrook.qbits.cms.security.CmsRole; +import com.kingsrook.qbits.cms.security.CmsSecurity; +import com.kingsrook.qqq.backend.core.actions.dashboard.RenderWidgetAction; +import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; +import com.kingsrook.qqq.backend.core.context.QContext; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; +import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetInput; +import com.kingsrook.qqq.backend.core.model.dashboard.widgets.RawHTML; +import com.kingsrook.qqq.backend.core.model.data.QRecord; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.core.model.metadata.dashboard.QWidgetMetaData; +import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + + +/******************************************************************************* + ** The CMS homes render real data read as the user, honest empty states, and + ** leave out what the user may not read. + *******************************************************************************/ +class CmsHomeRendererTest +{ + + /******************************************************************************* + ** + *******************************************************************************/ + @AfterEach + void afterEach() + { + QContext.clear(); + } + + + + /******************************************************************************* + ** Empty install: area homes say so honestly; settings show seeded types. + *******************************************************************************/ + @Test + void testEmptyInstall() throws Exception + { + CmsQBitConfig config = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND); + QInstance qInstance = install(config); + CmsTestSupport.session(qInstance, CmsSecurity.permissionsFor(config, Set.of(CmsRole.ADMIN))); + + String top = render(qInstance, "cmsHome"); + assertThat(top).contains("Sites", "Pages", "Navigation", "/app/cmsPages", "0 pages"); + + String sites = render(qInstance, "cmsSitesHome"); + assertThat(sites).contains("Nothing yet", "4 redirect types", "/app/cms_redirect_type", "New site"); + } + + + + /******************************************************************************* + ** With content: counts, drafts, inactive rows and recently changed records. + *******************************************************************************/ + @Test + void testWithContent() throws Exception + { + CmsQBitConfig config = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND); + QInstance qInstance = install(config); + CmsTestSupport.session(qInstance, CmsSecurity.permissionsFor(config, Set.of(CmsRole.ADMIN))); + + Integer siteId = insert("cms_site", new QRecord().withValue("name", "Example").withValue("shortName", "ex")); + insert("cms_page", new QRecord().withValue("name", "Home").withValue("slug", "home").withValue("title", "Welcome ") + .withValue("pageTypeId", 1).withValue("siteId", siteId).withValue("isPublished", true)); + insert("cms_page", new QRecord().withValue("name", "Draft").withValue("slug", "draft").withValue("title", "Work in progress") + .withValue("pageTypeId", 1).withValue("siteId", siteId)); + insert("cms_snippet", new QRecord().withValue("name", "Footer").withValue("shortName", "footer").withValue("siteId", siteId).withValue("isActive", false)); + + String top = render(qInstance, "cmsHome"); + assertThat(top).contains("2 pages", "1 draft", "1 site"); + + String pages = render(qInstance, "cmsPagesHome"); + assertThat(pages).contains("Welcome <home>", "Work in progress", "/app/cms_page/", "1 inactive", "Recently changed", "4 page types"); + assertThat(pages).doesNotContain("Welcome "); + } + + + + /******************************************************************************* + ** A user who may read nothing sees that, not zeros; DEGRADED shows the + ** schema problem. + *******************************************************************************/ + @Test + void testNoAccessAndDegraded() throws Exception + { + CmsQBitConfig config = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND); + QInstance qInstance = install(config); + CmsTestSupport.session(qInstance, Set.of()); + assertThat(render(qInstance, "cmsHome")).contains("do not have access"); + assertThat(render(qInstance, "cmsNavigationHome")).contains("do not have access to Navigation"); + + RDBMSBackendMetaData backend = CmsTestSupport.h2Backend(); + QInstance unmigrated = CmsTestSupport.blankInstance(backend); + CmsQBitConfig degraded = new CmsQBitConfig().withBackendName(CmsTestSupport.BACKEND).withStartupMode(CmsStartupMode.DEGRADED); + new CmsQBitProducer().withQBitConfig(degraded).produce(unmigrated); + CmsTestSupport.session(unmigrated, Set.of()); + assertThat(render(unmigrated, "cmsHome")).contains("not up to date"); + + QWidgetMetaData orphan = new QWidgetMetaData().withName("x").withDefaultValue(CmsHomeRenderer.KEY_NAME_PREFIX, "nope"); + assertThatThrownBy(() -> new CmsHomeRenderer().render(new RenderWidgetInput().withWidgetMetaData(orphan))).hasMessageContaining("No CMS install"); + } + + + + /******************************************************************************* + ** Pluralizing labels. + *******************************************************************************/ + @Test + void testPlural() + { + assertThat(CmsHomeRenderer.plural(1, "Page")).isEqualTo("1 page"); + assertThat(CmsHomeRenderer.plural(2, "Page Type")).isEqualTo("2 page types"); + assertThat(CmsHomeRenderer.pluralize("category")).isEqualTo("categories"); + assertThat(CmsHtml.escape(null)).isEmpty(); + assertThat(CmsHtml.escape("&\"")).isEqualTo("<a href='x'>&""); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static QInstance install(CmsQBitConfig config) throws Exception + { + RDBMSBackendMetaData backend = CmsTestSupport.h2Backend(); + CmsTestSupport.migrate(backend, Map.of()); + QInstance qInstance = CmsTestSupport.blankInstance(backend); + qInstance.setEnforcePermissionsInCoreActions(true); + new CmsQBitProducer().withQBitConfig(config).produce(qInstance); + return (qInstance); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static String render(QInstance qInstance, String widgetName) throws QException + { + RawHTML html = (RawHTML) new RenderWidgetAction().execute(new RenderWidgetInput().withWidgetMetaData(qInstance.getWidget(widgetName))).getWidgetData(); + return (html.getHtml()); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static Integer insert(String table, QRecord record) throws QException + { + return (new InsertAction().execute(new InsertInput(table).withRecord(record)).getRecords().get(0).getValueInteger("id")); + } +} -- 2.54.0 From 242b2696fbdb728e0749e02251f90620e710fcff Mon Sep 17 00:00:00 2001 From: James Maes Date: Mon, 12 Oct 2026 16:45:43 -0500 Subject: [PATCH 2/2] fix: child lists serialize, plural table labels, area homes without duplicate counts - CmsRuntime no longer points back at its config; the config's runtime is @JsonIgnore. Tables carry their source qbit config to the frontend, and the cycle broke every child-record list (Sections, Items, Domains). - Table labels are plural, as in kof22 (Pages, Page Section Types). - Area homes show what needs attention (unpublished, inactive), the create actions the user may run, and recent changes. Next's app page already lists each table with its count, so the homes no longer repeat them. - A test-scope demo server (CmsDemoServer) and screenshots of the homes and record screens at 390 and 1440 px, light and dark, from kof22's real CORE content. Co-Authored-By: Claude Opus 5.5 --- docs/screenshots/core/home-dark-1440.png | Bin 0 -> 40401 bytes docs/screenshots/core/home-dark-390.png | Bin 0 -> 23853 bytes docs/screenshots/core/home-light-1440.png | Bin 0 -> 40583 bytes docs/screenshots/core/home-light-390.png | Bin 0 -> 23825 bytes .../core/menu-record-dark-1440.png | Bin 0 -> 84074 bytes .../screenshots/core/menu-record-dark-390.png | Bin 0 -> 36288 bytes .../core/menu-record-light-1440.png | Bin 0 -> 83544 bytes .../core/menu-record-light-390.png | Bin 0 -> 35947 bytes .../core/page-record-dark-1440.png | Bin 0 -> 85952 bytes .../screenshots/core/page-record-dark-390.png | Bin 0 -> 30322 bytes .../core/page-record-light-1440.png | Bin 0 -> 86940 bytes .../core/page-record-light-390.png | Bin 0 -> 29729 bytes .../screenshots/core/pages-home-dark-1440.png | Bin 0 -> 67442 bytes docs/screenshots/core/pages-home-dark-390.png | Bin 0 -> 32775 bytes .../core/pages-home-light-1440.png | Bin 0 -> 67720 bytes .../screenshots/core/pages-home-light-390.png | Bin 0 -> 32986 bytes .../screenshots/core/sites-home-dark-1440.png | Bin 0 -> 58483 bytes docs/screenshots/core/sites-home-dark-390.png | Bin 0 -> 35017 bytes .../core/sites-home-light-1440.png | Bin 0 -> 58812 bytes .../screenshots/core/sites-home-light-390.png | Bin 0 -> 34896 bytes pom.xml | 12 ++ .../kingsrook/qbits/cms/CmsQBitConfig.java | 5 +- .../kingsrook/qbits/cms/CmsQBitProducer.java | 2 +- .../com/kingsrook/qbits/cms/CmsRuntime.java | 21 +--- .../qbits/cms/home/CmsHomeRenderer.java | 118 +++++++++--------- .../qbits/cms/metadata/CmsTableBuilder.java | 2 +- .../cms/metadata/CmsTableDefinition.java | 25 +++- .../kingsrook/qbits/cms/CmsChildListTest.java | 88 +++++++++++++ .../qbits/cms/CmsQBitProducerTest.java | 1 + .../qbits/cms/demo/CmsDemoServer.java | 93 ++++++++++++++ .../qbits/cms/home/CmsHomeRendererTest.java | 13 +- 31 files changed, 295 insertions(+), 85 deletions(-) create mode 100644 docs/screenshots/core/home-dark-1440.png create mode 100644 docs/screenshots/core/home-dark-390.png create mode 100644 docs/screenshots/core/home-light-1440.png create mode 100644 docs/screenshots/core/home-light-390.png create mode 100644 docs/screenshots/core/menu-record-dark-1440.png create mode 100644 docs/screenshots/core/menu-record-dark-390.png create mode 100644 docs/screenshots/core/menu-record-light-1440.png create mode 100644 docs/screenshots/core/menu-record-light-390.png create mode 100644 docs/screenshots/core/page-record-dark-1440.png create mode 100644 docs/screenshots/core/page-record-dark-390.png create mode 100644 docs/screenshots/core/page-record-light-1440.png create mode 100644 docs/screenshots/core/page-record-light-390.png create mode 100644 docs/screenshots/core/pages-home-dark-1440.png create mode 100644 docs/screenshots/core/pages-home-dark-390.png create mode 100644 docs/screenshots/core/pages-home-light-1440.png create mode 100644 docs/screenshots/core/pages-home-light-390.png create mode 100644 docs/screenshots/core/sites-home-dark-1440.png create mode 100644 docs/screenshots/core/sites-home-dark-390.png create mode 100644 docs/screenshots/core/sites-home-light-1440.png create mode 100644 docs/screenshots/core/sites-home-light-390.png create mode 100644 src/test/java/com/kingsrook/qbits/cms/CmsChildListTest.java create mode 100644 src/test/java/com/kingsrook/qbits/cms/demo/CmsDemoServer.java diff --git a/docs/screenshots/core/home-dark-1440.png b/docs/screenshots/core/home-dark-1440.png new file mode 100644 index 0000000000000000000000000000000000000000..46b7816add5fdd2334d21278bc3d1f0befd54416 GIT binary patch literal 40401 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 m|9`k;rw7m#Y@l8eGXv9%Rq1jcb7BI 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/core/home-light-1440.png b/docs/screenshots/core/home-light-1440.png new file mode 100644 index 0000000000000000000000000000000000000000..49eb9d499518a531e97052edabcd5eabc68a3a18 GIT binary patch literal 40583 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 GKKCEq*jQ)) literal 0 HcmV?d00001 diff --git a/docs/screenshots/core/home-light-390.png b/docs/screenshots/core/home-light-390.png new file mode 100644 index 0000000000000000000000000000000000000000..e0169a13fe9677d01e78cc59de549d6c9a77e654 GIT binary patch literal 23825 zcmd43WmH_>n(n)R07(cTKyXWNCwTBAxO@7?>{ zbGvu1XqQ1s|4FCYDxR{Uv0KoYJ0K%`A@USDa z)o_0R;2j_?^i|0v`EUtELs_{6`P6Yaop-a~{L_|+e@;$ppp&4*yTM6`jPWY;NuGkO zKuu{P34(qpD)zx%4XiqT$qFS0jD&A)HxfB)9|!&LUk*sRzD&M;OhbP8GSH^Y@ono# zKt}Vm+K!IQL9cg7^Yy%5v(_j8+c-xfon7U8lFE`0t(GX0S2Ti{A?Ko9 z#u4$o=<&EQDvnWeWMrfyKR=!9>guYcMXT8jip%ZrM~qw#J4dMy1X7ro7>SD`@cJI` z_6h;%l8EbEEhxJ>Q}D}k8gtU=#qFD)U&c-@mZ{0f2Wg%)Cp}>v?(U5vDSQo1 zM^ec4_SR#O!NC$tWg}%x=X!CBsYBoLS>~Hu?}wARTUwUU_%=(X_A9~mm6diH8p(OG zX`9>Av{+FLLKu&97E92r$gnvn4o>o^7}PI03zY0e zRg!il3#yn}A2=;}pC7=_P;Ec+79q{m#uFJ2=oDwwi^ zySqWbYaLF&%b42Zuvkuw)4tgbZSBjBEt_bkrB^-W-$FNR-=C7?<6V?OPV;_}^?trj zMkQERDVhIlyFN5I>3La{THRJ{UeA{Q>NWoPB?PWYQh31o>4JeMyTuLmG1l&&yaQP> zDal&y42w#HQ$nqNX|9yz#-qePYLB1J2g~yFOUMQb>;ef zC@b)I-h~;#ED1ivA~J#2-wY~rii zUJL*J{y5*tlWhb?xAE1`OT6Qq$2v~WThxd}>v+n(`S(_{(9|mSGN*&++n$ZJq)I7k z{#qKl;?}+9W!a=<6l_sUlKX3KVd1W;ql2Q0J|TMS*4yo>>lJM!Rn^PuRwjK0eS9q? zG!_$F;g!Jwt0X7u6-HxcXHnd!iC{9NEZfSEk zd-mx3+*`fRsTFbDa?*M~9X$1XcQ5c%Z*v@K)uJVRSG<0a_k8MRr>ZZ_XqouFYLoZE zg~g)(A+m-3;ARcnJ%C@9w$k)GZw_fLa*DaHrI>PoF8a1d)y6oW-RnTbWOIkOJ?f_2 z+x7S#9Z;kfOVn_NxU_9oDM}_cQqCzQ8u`oDR_B(#G+^WVZdE!EURaiW%0In6=~nm2&DYT2o^qG*d8-g6j;cymKFw-1V^_+gc4d2_#b-1cT3#D9 z<!TeCay zH%0&wNiOq;3@#(?Z)DZ-Sx-XG1JBpqY0q~>AHhFg ziQB>VSJKwZA(hj6N0kd(N~j4>*55UrHU<&Iv3kHIO3cl?PTAVd+MUnJR;4+HhSyKU z0wZa<%S@acGp<`bU z0(wO~3CUOZb<{8Kes_AJOO>SO?_zs8+uNHqB?JVl9afuKOntjdOECRpm^hq4|4CRO zWhpk@)Q(n_`l&D?p3y|7hbtG8Y9y7{bvq-#!z>kaGCjOAl#sSpoThmMCj?ol)4dto zo5*QL7l~se?lE%3jvzlsUFP7rTMCj)P?27!Iy*wkJKkA3G&7PJee&d~z;-j3FK!vI zFn#D5ccNr?$R|L|KYSVVrZh+ z#jR0YP0ck;)NLe{`FD+g7Kyfkf}6leixU*BEWn?Axn~IySFsVdH<@7F8OAFbPE`KM z$Xg)@vi8Doci%=fR=e?M%E_2;h4%39ya4;|Qa<8+07Yo^EW4$S5CSR{l_ zA0Ig9=MXvlM6VjKxe<-mz7jqvueR$}w@5I(yZb$k*2}r(djK_5-HS$6`smRg^uu^m zdw=>`i}iKo*r|>an{InvRCv>PR{L`rU#}EOSi)&Bw{3e ziSI>5!eJwUA{eFuhEo@ES9X!nh%?T%`JTOy-g+c=9JKxHj1Fa+8>P=q5e4b$xvzdY zajyXr@K{4@?Bz+Cs8@)1&FACcQVWYa-NVstL=Vl`SLg_MEIpJ|zcpAqxVKlYq*byR zfHyY#AF2JKjj!oHwu(Y{Zg#V- z)m>KE;ZqG+PMJG7Kl)E5R`@|XU#l1x@UCKIGVMAU$ zcX>sIHt0-2&iHt$Xw)PU)Uwj-d22S^Rn8pd(Kl74onUPeMOBl6)KWuwTiqb)nRn8{ z(d<^Xaz2!H;7&uow(tqbG83jmL?e!qc&?YSv!hA89}2c59qv3Jx!z9)+6z}F0)*&i zwU!I~mQE!~#shO~u1cO;kC6EO{gtR72Ew7Io&L!VPz3->ERGXy@ zCuik93YxE^Dkkab-S^MXd%VVU`C^=_uRr7Q{8#|fUt2TUOffMr(Bq}SmDU~bD8JzI z@8Tb|$&}9g&mPY|tQo8}xlei=_tw=sp&Y0vQZvRX0m2()9D-$9UTg%yg59$Ga|$Px zwW1NkJa(JZmaUf)7YwcE>ET5xV9zklZw7{2sx_1iNk{ZD@M8{_X^+WVC*pGcX`x0ott|QMZX7D+ z3|{qC{*m}RHe0WaVa~k7(g_QSKys7Ta6)k+X41fFAgmj<8s&kSmJh%L-qo(uekSX@ z6k7p_d~y7|pIvsrqfc?&aW?ur-YDFfHfNb@3JuH6?lKAI!8uQw`@hBD%lY49c6a9( z_9S5v5)ztJ7AWicD)?@9?~2wnHr8C}83d98t1naK;QvoprvJN16H1OzZ2Qa76@&jjaVRjMyFj@$x5$1#&EDbN)q(yAqb@MUuf`2} zZ9S@$D^s8|O!d7P+{e{~g5cxS*MU%*c3n*$5h&8SEr%ii4;07zF3MJr{3UMsJC!}@ z+-^VoCX8n!+ju)R5sj;^(fNecO>d|%gFn=;SH{I?&zgOC3<`ZFOlE4m_mdI5emam* z4ntt_0NwWg;Sr#E*3&zD?x9E?p{8af0X5VQ-iLd;uRVNlMgoTQBq0kqrWMw2+zdRr zCj6*QHqmM5sBg9w>av3GR$`LkZ7Nbbslv(gRs95ZJ6mti5JtA{)3};i zB4M?wKxpJhARvw{aApub} zP+F9i!O3ex1Ro>w6tVNjuBPR+)RNL8I+^~`sq=eT>l7K|YX$+`<&?dTwKz}J&POkM zdCCR|xBPlrFSayK6dK&?z;6WA3~?KWy&JDn;uNkEjU(>_rt_@GHE;Juo&w{&kyL~e zhWfL5S5=;OP+)^mIeU{Bje=*DIH~eD;BYaY-WAYbSZrD4tYZ1)z zp=Gk1HvoMv66xN0`>*}4bDiEvMc7-?2q zxq-%l@6R_;Hi(>#*@g^o#%7O>mObNHYy(^;uR4m_S!%$koc&bCcbPT=gU%u$LNOK2 zPx;Ms-(rdGR^-rNqcF)GIVpVUblQAS=F7UDGX!ri^i&2G}8%$n7dT3;M zp*_K5I7Kp#bQiLRq02To`;GxmkIlFMTgdMn5aChSvzQ7rWv)viBQ-Ys>beClr>2Ej zyCvo-FJg#QqWE+n%-Y|g7-G~_hqSWnzPMXT!1-N!ar2YcWmK^(VlU?t^rpv6`~3dk z;1LgCi-6UmUMexsc`$YbPRqsmqxUb5^$f+qZ;6f6fe%wb&fC7(8BA}ChBx`wH%2L! zXJ`a~{Qe2!MQ#VxdJSIaPkM&~^t&>W0K>fFN0-j!$;)J41^Y7!#}nEURtt^It{%G{ zW1%igl4kv;F)?m0p{yV_gDr1L0(Vfh^iV}1E@3NK&%{#GDF z9~rpE^GL@GlyfM_=1<}me%j@6w9Jsxv8Ku@UBYiSSQBIUjs7@3NEhwoq<~|Lj0Dtd z8QH4kC`^rOQDTQkw|CL^f+Ce-ME55aVvb8koLF8V06&E4BehizH+85Y#pshHutUfd zi3_MB253E-7x94EhQmep-f(OgiV*2zIr4FOC&Qfi&fx^OFFdQq`%3Z!x#8CB;QiPj z*j36(w1zCNddz{NUnx?wQ4+MY%9D=?zf~zgCVe8t_cRpDX{ckRbq;pvmp2R^eXatzTV#wYX#4d(e)Gm%WP%@iE8knYx>Uq~8oBQd zo3~Z^vBB_@?Ef9kYlHIAXIMewiR^JkQl->r56``CrZKL`9p(%t&Q2oIu!Da6^h5ge z1k)E5e-sMlpKe>M6(S%tc>x5T0=FBomyc&HPmsJOJIW)RpFST!iP<+DPs$bYDsIY)U>o9ywTdMh=(<2)H=U z9oq+E#OTfx+!r6+{3$P<3y}&OW>;0K21+4~J+i zHz!3z>5KMIl#&)~&ieN2E|lVe@?~viv%;kk?5|v8Vk?c3CM=U$)mRMbmQu(D9+NQ5 z*mdJL!@O+8xuX*Jf2kX!(b4DvM_nU)LBEALRp>Rx<}OD3xRR3z^Mzn!Vm8iYb7tjz zE;?br=iuz7C3%0|eN5XAx+86OBs621jIEhs+<%m~JS-e3w}_TwyEf04Uv~>%M6xaj zr1K^=aoOK0zDZ9hC|08MzTgWRG24#p7frM1?{C(f|6V}h2Hip9Zwxcnu6~t z4}T5!hPwA&S&TR(^OkH+V%Va|-rTi;J`x9K|JEHHNQo zdf6cet_oQencsC3d>>b4aP86;U>lSq=5|@|B@vjf*%{*dF^`(YF&8;bew~Am6gBIk z7KP7iuQNmDGVY%iE_72KBFTT}4_AdC8SDA5KS>S2NjYh4Y#%?7$)DOMM!RKUw8a#6 zBHNL1(x-S8MS5+#WPWGdS9QiuZ`i(zYOHozb=r`Jr8;nBXl#~zaeaD~eL_JiMf=tL zL!{UX_^(W^5w%%QcQbvj9JPk&s23X!2C43^p=ZY(bzS4a079I#n%#Cch4{(a*s{x4 zgc!SI`nPcrT7QNm7Fn8Q(yx=*%)cylfPd3FNaZgrr8!tF#m6MwzldPgnsc~p+w<7w zFq(hIgQRm$$nA7`!qDnLLFd)GoB+`(xt)kG9(km*ic2aQ44v<-@0iK~@#Ru^bLyB6 z`6~BLL{J@NAh2-W`iLX&9$W1Z^E0@t4MCixEeKHKFWcjjmBne?Cro?Cvt)OX2eY&Z zcDsOiWYK_dIz4Qw;Ae}o$_SbaUfxAEeCe-i!@#f13$ir3(Yxf z^q@9tovg2S)U}Uaa)iyCpPzF(ABXb7n;=Y%@6HIIO5`6fTiLu9XY&^7mlo7O0xW$S zlA@w89r=1twMYw^nl$ntx=%0D!{mv+K$a)r@JL*O$hlFzm<|K!!(80l3djZ?s}vxs zl@&MtW$Y01Y3Z~3@ zkh6jRPUyD~l6?tPG%6G51={e{ZY>ROMRA7i*BeaT#}3X|?>|i&8$GB)e%c=xpF}fh z5%2c^Z4#>X-+BBJFPQw|W`ZL8ld0z_8&(<^Sf|&Mv%HTehS~wr%!9=qDEbCA1*2`|P_AQg^ z*bN?*Gl>Yb_GcFg@ZWpTEv=BRDXBuLiUs6v61~=7>g(?LhRL;&dM8eB~$8 zow=`=0SO&>D-eWII;&69YRg-RzFAoOaBcI*R?$qXGd-hh@A(z6o0{xy%SC8Y6^o40 z3YYgLQYcfu#kI=h?c|P$Ssl+O;MTy|w25Hb9dg>A{X$F{-9|HadB4r4yS3olZ1$Ot z6Y}ZtQdfbm4F1ax@b=Gz`Wv1ZlC3n^`eiZ2TDW$L8Bqs`QZ3wexYLfrqHM3MEfgbJ zHN*LWyqEhpSLY+H%EpV|R#J=N`K$+Ua^phD*lEK#68-HoDe1Mse-Z%5FJcC;8Egt> z4jj2t6bk6+RBqks!P^6UeY@jX$Ot~jYv)^oPft(9^_6z73Ax1#SrX)^-@klOjA#=< z@Zb5u|C21ZtB16Jjp5i@whv+R+~-dnArdg%Bl10leBf|$H*lAUMfnX-91HURECPJ4 z8$1W=-n4pv&Q`GiNFnZRxReo~gK1&P*grM8@Dt959ULTP=RvJAz!PMu-7V~32f(&tR>vd?LMa8!pLK5L)@ zZEytPZRO9fZbBPVYa$`d#-yM5~cSidwmh^px!jhbVFoCMqUvm_O)xVU@95`_2 zD5!leJ%`#E5647Cj%SI&?s>G1t--j*$451L!>#w99sUd$uw=+lzk8{QvP#SetOjDq zT0=gBREO{G<_87}umUFb-wDNEcZ0SD-54c2%*nuo z!NxkzvoQaH#IOhnm8k=@BrEqC^U01RQ+jSZ1fhT(6jeB!;c=C-7%Km z(@^`K?d!N#aD2LY$eM!FkZzX95>y}LT*-v>y0ce7Nw|{zweW{VFjADR{!SMYmVXRV zcyG6>2zlCN645)zN)@2!7jgvurMb9HVqm06!Cqy#wPhz-sZ1xSfj_q)``pzib0ucz za2{E0b$-^3g#I0drPl1`O)xGtpTJn%5f)2DoGvP*eh#*=)jM2yXQH}X#u^lW^1BAb z?Tw?csk0N7X)E|Ctfl=_3^X<6p7oyI_i62U>`_YpnHcl^JNq57QkK@l7 z{O-3EYpD_Vi$3Y5fzhXD+pw!!dGq(?2aKFvkR=r4a?@sD&j04 z0!B-ag`Sv?D)E##=BVxamb_+@8C;HOEtW3C;!{+(J%+8|o)_T+F@$Qy!{QrMLh*SG zri=v{%=jWUfVAF}GDt;8V{#-NsMk%}kLxKTf31;(kELfd6t5k9rfbQL=HJ!hPdL9Y zD>_C^pD3cc9kGj*(!ke2WmBRzY*DXkA|leQ@U_c#TeSPdIQkvgaJKvpsoV;#DHGf} zxJ4A~21J0~0R@mFp?6qtf(d=d#8W4buB*C>4a29fvir~4V}8YnVFU@Om&C$-Ny;h} zCHiyrGfu3swpN8U24?A!C2}&~_WiXI_ZzU>xx>ikc0PXk-;d1A&BesV?nB*RD}Eri zrnvYk$1gp|TBQB$?LS4poYu<*z?gq~OSM~%H#a8>6seGa z5xS`43%5EN8%dwY8@7`)e&oq{faBMqoBg^38p$Qv3O3Jd>MqJ>^u zWT}z&;1T1%Y%=*$gJag(!qGzQ-bwhnMv2w$l-$`|4_?0h&IX(UDs!i~GpWD++M z62^p4U4-kpe_h!9T5(_e5Be=PhyC#A=vGan@+~o$c#gu>_O`;CgkyClN5}4Ua)2Rk z%1k;W>OBsQBsr*5v(c`O82GQ08=_?062dEmVQPF*$P_!nY3E22?d8opFasQ%OmYM1M z*Tl(eMIR!C<9)|AIxI_mrVu}75}PIpAXL$jMh2$sfIcGrxAD$*&mU^K6Ta6@nq~6@ zmu?S3{II1tp?YO+|1Xh}K|J(c76pXOgyyIZ=u}&5Z@bry1tBcCUy*#B{x!FrJW;^Sy;QHpG*rZRkcp7XnNr+8%JxmGyPluHu_u*YRwuv)mbn=hZv&r9DPCk_!t^zGF+ip|L@cvD`$i54c<7V>{yT{1e>M#MdqtRhhfjS0K`RXmeDl)f zyOjlHoB#pK83~WHl?7mm&# zJhZ-sh=rTu{QVha71j&boBP6nE*_4CDCJ7Ud{k5ySQ=JC@Y(iBU&axQe{!YFt+DC_ zco9I0hRRwacT;<@SQ~-wRqU=7hW1ke9zAej*B|LA_xs1>ij>{gn2B=hD!qdV@d7?= zS~Ztb=xLwe)W!N}ak9W4m^q%(D$0JCbluqYwk>gc&UnSM?Aaa!*XB1xOh)tEC(twe z*?}sY5SeMIQ7==Y2Uz`T?i`sN7($3{pW!z1m{99%<$-7WqAlnOOPr!$eB*dC(!6Z~ z)fTgnEF8EQPbC$1<-LP$DqMsgb}VQ?9;7vNr1);k zHYMwu>PUb_=lsIIG+F-EU0U%I*+z753$CYZR|#exh6k)0b9jSY>6Ov_*uwz}KV=nh zE?Z`Lj@wbxEqSL!^4r6W0fjTglZ!BA=B*iX_{MSWa&qPTtLwkWd7X3d&O5AYomJ z{#+fZ4xWBb!0#PS480#Q5VW`z>WWtZqvEp<+>9R9IR=Ofvyfcg+G{v4ZD1?w_Ge`d zE31yx{TZq%3gw$zIk{$|mwPqFUF_kuz+~1^FZYU2CFV0~n8h-9Fz*` zoxki%6wIcgdk%9Ew(Lo+!sKPTk=4kafX>HhLh1EkUntWs5vN*NT9NhylWrF9eTvom)UStSV` zz?#AEiCn1-2xFAyR9ID=1t2=~&_4wd=dWDb%NlalvZSo9UMKYFk@A~=aQftnP|jP_ z^0MudzeH3kd4w)1|B1;Y3O(tUR8uP*+)cdPU`oV(gwQho_#*N&0jl07Qnc5fJV4q? z77k^&khQ?03RAeR=TqBgA$;{5fx+|_Hls{;g9by^2&&P4GsskyyLqB$fh zIQ}fIGOVy79PmVFZ!{k9&ic&oUP zg@5-Dr^ga@kbo=d3oRCV1%y>@)ArXDZg$PVMfNo6pmMg0OlrLH>5;QnJrox%`61{P z5u{rX9L4W{6VG~oOfUzV*^<_3<{HBsf#-uBbk;^g+_7#7Yx>25zL}424#cN#JOuSS z+pB|_?gN^lu`M4|%}iAz&qwoDfy5Dim6*%(3uC+lM{LIfEFxpA3zNnCM(q-BED58& zMl59%`H|2o$z@4IrTshH@6|rZqpX;Zr3TXpAL9hJ<8D!~nc(V}YMKfS#^#x*jy(!8 z4C~G5S=3sQ@Nq#S^!AQ_TvtUlsvDZdWPlAkLf=bc0BCC=!vH&LdKeUx6(wEUS5RSEePf)WOHPb*U zH@17ralUzkMqqqq%M%w5KqveXHFsJFVtcgs{A~DTD^z#;e!p4Z{8*Vf>>-n6fetN@ z&BDKnw($EZ2fZoA2hQ3+3HIdsi{QYwK|yam3pI|nz7VD)&@O_?17k1gW$Z)+i{x@g z-UjYz?>G?qNVmfTB>*j-Q>Hjkft^{N*^dr;iAHkYjvNAu7GJ}RY1>~jh5z5rlz&Jx zrbu#(pel6+1RoAj&4|CNKm%**G9}nbSj811A^dl*0O~imyzYRZJbCsn|K=XRU^)hd zsRJm?K)iG831X1{2McHbfiV6q9zlM72w_In%T4`2Iw}?xR#3OzznzeyzP!51{r0Mp z(}zQFDU6%Qk?*fFgqknDWT~N{MKm?>W@CIINT~i^$+%+|&{NbHO ztJhM0e*uhUz5&#cr9pC@LatpuL^rIO$#HOS@Ta%8w~dUAAwl9iWL}JkK)Duvm_Kb6 zOr{41zb;VP-`Nobi-ofCGOkfZiZwVMh;-I2)LKJUh`Q_5mokM@03SSe?8n5D*$T4Z zKXT;EjAxC7*^`06lt{o4(y{ITi=LI%>pED=lCqML622)LJ`CTI!E!!H^Vx-k3vj3b z(f>txS(d5~_xFRl#Q}90SbHfp70o~R?v@Q7a7?p}?ds&@XAseMsv zwbWp@^*Yw35qTi1qoadSv%#h@9>vEpojlW`!FI!6t8B;Y)rauhTGOW3xVV{md*e-X z*wBWHv_6^2bxfIE6AEJtlgQga-o?SnQ2O!q=BAKlgsoqk7%dYMOv}X!z?9 z6?7p29b}hBH(Q;&vyWW0UQSS1(`70E#vhs`&W}4Z~jT zIBzy(I4oWB7gGE}Q4<@Tj09+hmluTZ^Oln;&D$1lXf&gaJ>aKIE}S%3YoMv+6Az-9 zBvpz}ZZ-oVosIEp3@{l#IST7nxEo4daGeo#9^L-C8PO&nX?5`}0PS;{j6tJ}FN(DI z*jM+|=l-;KE%&d+n4?;|h8(d`p$rPRcYD|z`zRKzk22SeZJF=9)q|1N@G?xso%Nlg zeO}JxSr@}E1H5JyPM#{H?t?ZS$LZjr={(psFY!Vn&oH%X0eXt_S{ALAd^0TTwu5gBq#nq*c@=D(5 z;S87QPS`7JXu-ut&CQg9`$HJ1=SXF-MsrDI@A$C{9g$I~zb2_yO01tUo2YijK>|=K z6Mhq#-Z+^Jh>A8MC0$=gEApOg)1*d7i55(#IqqwyUcbjaoz}FMox$SF&t|dQp)F0P(}?0LOP?og7Y3v!BW z(rR;50%Z(;GN)lpMteHkl)d<4ht@Jz*?#B`DDtnCW{@&_PXfD-5&D1Sqe2OCC0`hk zDy4hYdE8dEwhEY+7AM08yj4h$qI~}v5gry)EpB{Ivp*~PbO`VA?ld`*mYp$(O>;L; z2;Rg!Fq@Vw?!7=LOx?pQ+doA`|JmlMik}1$(YJg3wsfttNnX|I=|e7E?Mxr2^{$F- z{gw=1zCEZ~bi$fIFt>C_X^LMp*7bahr;PaSv%y|_7}@DBc7RUr2%)y)vcc6s^y@hf zx-A#%ngHn`ire2pyG0Xztu)#R-v|v=5QBTFzgv%ui6%LL1JI%ewy**HMNjKApukD9oTU;bX@nAM$nN? zufM3m?;~LaQ?ttk>msLYOcBJto}9y}z+kO?rjrZ}OZkW&Z1?m9c44P~;lH^a`NwzS zS7X13PFhyGfVSXSG4d^v+ul07fa9*njny1?6{+ZrbxVLwALXCe9-XjaevpJhR_{_j z*^EyP!8)arC?T9G4P6BJ*4ge%l;ki^X_lUI8LFKD3~dzifGV9!d6XPOk{rIhIe*zU zujWX;MSk+w>?T@mp6fBQWa%cHXBE*l1p>Zz6p|H)W#|AplEvI02}z|lfJG3jDz2(` z_gBOIN1k3r`j>hrr-{VpY@;^MfejT0SgcTFJO#@bgy-oy1#7XW6tl{N{5@j-3OZnK z39(d@z-0a}#m#gP$1NFyYnBhw=)Z9XsRebmCTB~nF4e@2xCd`a|8hgfRNV-nK~EQuv=L8E2M;emt9Egl|DW9>l&{@jx2 zgU6F<0o#W}#_}40-72VP(Cd3X)WJSD)$l2Sj9)!!e=|}R*4uhD z0o#3O$|slmX~UcB+ECZNw8x3lq-IjkO!jzw*f;vCO?6lx!CbG07OhLzR1#lEzv2j52;zg_&<=~=|q&I$~Tp;bMbfU~~ zCbnscAq@Ic8hElGq2j6h5UUv2t8oTf#VGW~^=Ic2>M$6!i;-pq55RVj`db4>-*Oa` z%z;Y$R2%M2(v@!c^g%2HiF!lSzOE*ZS2<8PQ9}%$=*K4H66O8Jl&8L|y z4Zq94byFb#1j0nTJb6CcJdUmvsul$pL25S2;&%uMC=@BBnN3Z*v29wE_Iq7}of$xz zg2_OgLcwGq-64-dI-_+vM$k+8&(N%y1Dc4!IKr8|1SK<3$g)Dv>}5(%60CxUeJ@fh zV0SPYzR@gEp!p5oiCJjcXEXS`b%E zyL<~uN4m35>JYQ0j*Q>q0aW97YAf**IOvH*C`+JY2I!*AszpA$6C)=LQnhe-;vjBA)%jheo}!*5 zZ(e0q{k?2Pl6?K`70WcYIt9pqThrE*i$b2NHylu90WqLi76nRf2Ii>ZfxfnQ~lEGm*JA2z2ixPvi zUs-2~Ng-sgq@}GoN?&}>(nvlwlss`X_m(Vl2AF@ff9UWwoSPp^7$OW3$;!Ggj~|7( z1#T`!*mPVgoVXB>~xcj-lDLk?_PUw+{cB3kjSEh82BhYkLZ1N%?o-2Y;S zf(@Q{@5;$kiFd8lBNa*cW~VCP_od z?CV!VOG9Nl=nBanuCm5&G^8Te%wMvyQTjz=B{r%;=DSN0d=Z?>c6xT6aT0VAp=r1J zjW}gGii>9u27mqX#2TW@yWbJi6Qr`rT#n7y+uk~S@E*MaSL3_6)UC`_*gG^FMB!VE z*2NbQ`vL`z5t5S`)C_9xAy*B#wcmp0e> zn&3#Wbc$w*N#NrD^muwgCF5Of)}zB|csDYmwHVnA_~1MUO?30Ust@IAy1VrrNxr>K zDf2{Ub5f)vCn_6fvxSBi(wt0W4Q{;2nF?HOmp1w1yjNL43v%VhZ?ZX95iM^Z;|E;I z>k^jvlio@CvCZ|B!&OHRj5Kyz_Q}qAU7q~x9P0IuaC$=$&%)hTM9xRS-W*yHfW!2* zrsyo!AAd8C(dC>Ao2`MfTf<8oBV|$lYv&y+u!_i}JaNVsfC?Vo5Jk(smpJ*<$sR>- z>n>q9mGKlJu)^JNDfUgztYM&F^hR31B4z)_0Us*+=`IQPEEN^|N9Lbe1K0S3_4}7K zkt1&amyfVLI|&qyCN14FiuHAOCmn^jYLpujI!M`(84hKXtiOo&njz0~Q5fSrU2(g#cwfx#a}R7925o~;S?BU2fcfB*(7WUtCs&FMB&Nvhag*H#{B79bcu6W` zij**j$=}-RszoGs?*GDc`)+1J3PhKj->}I4&hZAwdyuV2#YW<(l+SS0-a`mOzK+m^)z`HXXG{_eduA0@2oN!fx5 zG^viAreRC33ANA7tx_1h9IEhJeI;=Ahkv5=pTl+tcRLBFSp*41i z8v_O5RcCwc3z+_M-snpO;1HYsD;BdMz(*fuaLiDXnlpsTj0u(9?zPyN9ny-&u9{f|qh8Xi`Po2uR?z0IiFvZBXKp9m$@ z?uJ+|u6JPm@$*4=cGiw^!b~-*_U>t5gl;PJmNA9r^I#fxyw;;+U~|SWSLYn(>teht z?uW#Z$7A2ZeiCo1_SJq#km@dSQLTkqvseE+wTiV1NyZcv>e5Y`FzItI)psl&m$~LJ z!q?uAS1YTjgz|#k?pL$v^&(bSV^q4|(1V$1LRuKsC@&MLf?-5#m}E-UGH^^B829 zfL<12RaPY_W&+4QLf#E-Y5?SW|N=&+_8tmu8#QZrueSK6BL zQjN4>A7e}ijpx}jAU15SmjmZ|5Jzz~NOs>icJyvRe8V-`DPf}rbnQ%@1i8N!Egrks zYt3eb8*Kw6REB4j-AjrvshUAo-I+?($rMt>EcyDI%8BF~`dLCQ2D3{A*B+jh#w<$9 z78VO=%T(v=oFPGF^cw(QuUi>o*m9*g)wiXE0=p1xf;xgDspXB}=qW0dOmP|(El(qt znawkvva&1|50$K}bEkhmQeIvZ(ft~P0>>~)AQbgvZSQ_Eb8Ewp;?;t}FbC9{u9&y2lU{ z@5;T>OSCcqS1oRIVsoO#ba~;JFbmYj`q0VHYcvw- zRv{a$pJqxz*~Ixi;y1iWpyMb7^b9NSIfGf5FPgpOxFck)8oM`Z={Q9=mp9X>)yVwL z!CdC`!fkj8;lS(}1P8YGFX#jMGEp;mIi8x2)x3YSY)I;joO9O?_`ppQoTH)h5s?I6 z{9qX3p)ts`(Bz&ID|hK@gczODVFd35gvV5?K%pDnEs5j}PMXHouoE(nLacvNgVDj7 z^;?oBqvuLIdE|J-*}k?$_3^p7!>nFL!h1@JgZ>I#D~g5h^gQZc3bKZtb(bnhBo0-l zr*lFS8Fyknjizd`AOT?&$6|@^3}ynRJT+@LS zl!&Wkr(^2)cLpnyvVU#LK4=3K$SdZF3@;{M>{d+`nEOvBtQxiGFDFfFy0RGw&4$xc zqG*BLCFAuKCh7d{1$bN>4u7Ze@lu0%l>_oxW?P@ZUr`v*epFgQRW~ud_`$kWDbwCt zD`~Yel#P@Y*V|dW|Epj1{#vksTTi(nqVW`xAOkBFe%m;)u?J}Mw&NyHrl*bA5Wm&k z*R?|$!$Xb~^}^hVMsEAMywW)7FfQkdeWfjXEi;5s{6t)v;Yl8%?U-JNhhu*Lo(!&M za?Iw+y8R)6(?gKzz<<3J{^MDZ`RVb8Ypug`{Gkso{A%))iZ~^n+I;=Ls27BX-juDa2PjutgUt7-OLO)Iy41Jd8V)p-_%i^kU zWs|$cEn~VTJdCiWiXt7JA_f3z&bxEpyZ>dr%G&q75M00gdsjzl>tAPSbdOz=-xwMU5j2`<5es?6KWj4x`e!g?nfYwu|obCKHa% zfEPxsC^Wb9P<*=-fKwmuXe;3d=x{vT9-Ige)Ti>bz2*owhy9?dko_aq@+_f}9PN9c z08}BeP?*WCo60@%wvS=r;?GrebtE84sVvebsOOnU{op~rd6F5L;sTJ-U@_7F?Wcyk zlC^D^ELs^IjwDBqy&7GP)t|!!*;S`_zJ4B(s_V%z-1keCSJ&CV+lin^86;1A{i7NF zvVH+x@U_drdkU6Z7hqw^7?k|9XmmKqFS#gZL!xTELS_gqaC`xiCh~NNDyfw}1 zXjbg!M1ngs_s~kt09AVi?_!#uSSrJBw1P_nN&Y+xWyV<{vDBTe{f> zTD$(2P}r0W3Kj+uWn{05xWf|Zz7cloj4#gzW|VdhQD!TV{M+%0I-`l!Y5T_m4Ib2Z zuocSnrpzoU=QgM~WYj|^KIH76yQ}*F)-4)yL>jntviQS&L$%YF8#MNLg`F@5JR~uf zyp_|u>&DI+f^!-S6?vek!BedTac?hE7!$q%Po_32Y~o5tk?LI1@@Bb53GR*m&@h6d zS-5lkgrcx+@p{GEf!i_2OY^CtY7Qx5=`^B_-KEI>pL5Q+Rg`o#2u$ zt;vvETIY!KxK%Gs&T>F|{-GdDSIgEL&`Oyla+oD`zpO_n0+|^_?@#R=ecHBZOr=tr z1KWXsd>R%dhc+6rPaveDmU68Q7MaB8$v&Sqj}kmXxY?DT1~q;}oJGflm+~JN-;&s) zU=g2AtcdMk-oZI+%(~bgwfO*5WEFkgAC7E%FZ4^kMUh;j&xoFk#xOKDZxsKGr+2O;K z(j;T?CgINW`yI-^-ho+pgjh6Onm`rvt34it zfdtPW9RkmeP!!lR^jjoW(WY4L^}xctQJUcDN40mktkvA-^rj9{m3*o_XQ<>ypGRoo z$y8KK-i@a#P1Q;WTDs_B*QLG;7Bf@`%8PpKgjM-(=q=~)Ufj-#pD<>3wzENZD-LUD z_IU=jxsg*^JVD1phAI=bhmrM9esa8Kcf;4ATODI5pikFej~JOyjx?OCEO`@LYFx?n z9$)BP9MhD2)-KBiW0Al#A z$|3IYTci)dU8r&Wr>Ad27$N7>bnIC!!7h&_kktE83ag%hvjy>s))az&F%iF%m`wH3 zu;HujMjMHi%aZE4R#p>_C5C`{=D+cNB_6)1W7TTB5RsYF!MOEULoBaSXuAOB`fa>c((H?K4_27yENUhl zQnF5ZTuwST%sED;lfLp!ydHB9h#5Z>HuSPOn99mBH8LDMSp4Xnl)M50-3Y(f9jM44 z+h{2nn>|(zbiJK$;;avmz-zEK7v1mtY1=vfF1jbXc<~e+gYH)hjk@s?MrJX{SdMe} zyc+uQA#Gu4z%~oxEUE`hsgcs0phjFnIy;?zih!E22WgJUSw#6bWH}D8^Q{w7&d}tTNlIg16QlgqP{<2` zXk8z1pR>7Ft`^)8K6wt(<=Mt#_@u{Y>1(XJ`}RpXY7#4ixV_JdpU=|oFuTiwYb0($ zXaZs{+&~F`=s5Njx$IcRy8MkAYTf;h^1^Vg$LXrIA|tB@%xn1`4$1u2OiIc;4Mg%;gy{-wGw=43~V)CIGEPxE<+j<(o# zvwlufiS29i(t5reUiFOOS(IdbjUM*J@ZP4<68mWh^R!PGjdwI)rkXpr%pI!Yv|TRJ zfD^O5SUL&yhF=+*^93li-#m8c5N2cg(~6}NGR_x)v+`r56)xIS%Osm-ikUHNm;B)$ zmc)1^kO`xx^G#3}B@J2I)p>HrzwtvL-<7GJF}ecSQvm|n9+H+nj0b9Ay2S{aziJn( z^DvAf78qS`-p!|s?d%f~o|Z$)z2PRG4-`bgXppdKjhX!M=g#CeL9f_Wycz07A>fE? zM9;ua02tckFKZ_~gNJnvB=LWt45e}x&aK8CtAHHU;^FZMS!>?|vx4W28u)v>H8&0R+%S)#>{N`8Ic#JBMz;?oAsu^MT15Jzcr) z^R;?W?7%@KukkT(IFCeQ3?xIo$ zizXO{O1E76*6a-gegG-&<-Rl$SyW)=Z~u=5Ti3!5GpkcYWNF(((Lei%fCX4QFyOuq zR_yW+_Vp*E!-uO1k1HxQ6=xHi zNXi+p^&jp?8V$9|&qO(elqr2Y=4#zcP}32UOnO5iTa?L~6=UUgCPI>Iv5FwOt}5-GwQcxCU=Wry{Ow5OPy2bIDivJfcHZy< z=}j6KaD0OY7v2)=9`gmSZ{$58X-8U^HQ!%0l6<1ZpOL~VT-h2B zz>IF71#8LZvWYH(K#Fv{E zbCQ-r^U>>Tp2+@RrehC!izyO!Dg~BAEDMT_Yol3-GD~C_)t;Q4>s|3u5Ylp(wlU-= z(&faC*+!nF83(zqLD9lk^TLxNVLtv!*%6+}Cary;yDTnJXyZ_I&eu+Yv|J0ge3w=K z%IN1_QlSXV_0nh85nwgSP1N*MN=sVAv~N=MD$99Y?cB&iEy^2>BsTm)2@irM`_+V4 z_@pbL+hKV(HoQ#-*VUFVUv4Z=#MAE&UGthew2CO=K>v)_>)FJnU0!QOv2No7=$*5nX89BeN4^dyJ>GGR`ZdO32x` z_I#6chf?|3iC~-&#hD=A8W9&*?RT1^g89NLwI+4c!OppFmp&?nQbT_Gz*-m@5>9Q3 z_);q4#36xnciPF084?8X1aKGJpY9kxXD{b?f&XM|!^(O*8!i4BIs^4h*ROi(yzp~E zxu4(l85a-qgZZl@kKHz>F)`b0)WCuH+MLq|uYt)5;Zu!`w9hUz0@S5`JqOjdY}#43 z_FOj@r5#E?R8S;VzVDyFXegBRFhij;sW#Az-B7he1M|$`DSAqOY^~zvN6P2-BokIA z-XVd1+%s&Wu)pamY&%@M{>R(XQwV((6>FOBjS{&&IHO41A}+b-K2Fi(EnK@ zMOndKX*waf#Ubo8%|C-BW@LHwuxlk&KjF1>Axh2os!6k>Ap*1KY4)_U=B874;WmUP zhApG^*}a#Lr9>ZBOZZz#@)UfmqvsYCkUU@iqal67#k_oo%t@I|=dhG~XJE3@J((htP#Tu?9Cd@;B(Uh>IyFHY zkSh+Q!|!M+zG-ckvgxtzxJ{Y4Ac=3bYMvPO2s&>4bXW4xscO9NZq(>gDLV3Z3QZ}< zlkB-R+zAygA+cKAx^tesL%NQ+&U`8icg7GP0;DHK`)RhX+k3gWzZ{5n$@&UJ)T?DI z!7^eNl?!Ov#yqpOE7Ypms*fp7%JNX07UcQp$yw?MW5dex@3^L7V`_mEAuAWE+hE3M zsY`$^; zE}-K9YBclT#0%)(yxM>2(|=b^<=PR1#<^?lrSBJpVA)^XzSw?f% zmocEW*ZIU3^V*5Jyl6N?ECP^jsxm)5fBE1(ghtG=fkBK};`{LXF$7VJqz$UYt;G~o zV+IW5DO*aFot@mdxY}vEL6b_r>W#mq=NB=vI&n)Jow_H`E&w+A$%R4+DzW7vk0$rf zafpy_=VwWU!}}a&+nZ=)i!zR~&?Di4>-?s_`;)gFKCMQlL}1podjVZLP*zsc!8HWk z5+PT2cI84AxRXlAtJgm+#SquBX)L>e9R6u3H%!ysl}#4lsXDl|>&H`Af@3^L*5%uB zq+c1vOGI*ELd0*dY$l2rY~N*i(^urA-UejiCP??+tTQvMP@=hBo+cxUGWSdlXfr)n z*XKn8Vx@jiyfw+>os~n=KE4^d38fLhbPQMpA|O5r=nFf*dj2R=#oG=b+PCN34jCUD14!$->z&RvNqXCC0f59CrBH-?0rd}Xe_W7VV8`d? zV<8T1;qU3GFdHsGT!{QXN)ViR(fuDUgZ-6awTpO~^nT)ha=n8yfWEU8#^fJ5y13Ek zd+*slwviH3$-^YZ&E{^sj4%-3S)RZgUv-A6QR8o9}xwJf-9FWA6wZv z=orR!$jYAx?`Fc-JDwa`M;VnR!Xf+a2_Iw%Vc!bX5=URTGV$RGRLwHFynlhll(^^^ z=-b6U=soncEKvv`Ga?1a2%`U+6a7zX_)kRtL(K_Z|)o?xTdbup%7Xn>0AM*FWFFzdV^`eDwF1SWwwD>2T@Yw-}QSq*GIr&%>|k5fHc7&=lHUpYh8p^G1!6u}eb3bZA}J7v`%f zTAWxLmnxcqGT7(`UdxEEio8=mKu_la3%(Hsav}YOoVe{6)|I{jo<3_$Z#S<%ToAWm ztt0JDj@Kk`sATwBx#J$S?_LaeDWCZ{Uj18xW3qkA^$z0+o==tYQ*3>o4yGO z@6s}^o-Ca5*&gj&Twz^C`sM*cbl>A|ZU6dr)W)$qT7k5kZaG4wsHN}ouAmz#pXDY? z+`r!h2S??YZT_wo7}I|`BazB-cCY3nqwv@)h4A<9cZ}}-6MeHkq1(3gqL+Hzs69VC z<@-KgU5aU{(MAvMTUc(|bH6eZQG-Vzt?hMBp9rlP!(_78`T6hIrM0qfaI8V%?YI{A z_k#*(B9lHj9GGjU1(6*4`}b&Bam015jXozNXlQCI%*;rUv#V5Bvm>NIWOuOWHeP85 zNC=~jPUxRmZAE$fXAe3lDG@zX(t>92ctu3vT2QpJ=t0F#J z1f&PAP_#*n@Ep+Ks%2|+HvmvFcYjt}mcOp__4ZrtsH$+LVr+FO75?M+dR|^nPi%z@ zd+VmS=;&$_k$2Z$7Ky;>2`z(@YufuigWqVXH+xXxSSzOaTUZtbA8${{hrIZ_<=LQy zd5qZIiRG_3qvV$qO;>OM3%};<>qFoiS0P2nhHFurBwF|Fzxn zR@K?%WE0(&fx014Y~?!wk?UtcynhEQ3WD2uxoquDn*!%3;niGKby<@SA@@VV|8ENI zvWklGX6#D)!8r;QXC>g8M&IjCoz+%WW(x@0e31X*l{?Ydg$H1DC@hdf|2KsAzMV9z z&{BVaTcV($t*LhS6nuw9|%r|kKT~{Z}5a(iHK4MTgx6$*)!?o@m0=$wECLp(= zK~(+A&~U$u_^lAdfxoU*NJt29D2ab@WMpwML{?Q*HCwmQd4JP9Us=+9<~5Ej+$Eli z3*%iP10!SNKb`p|6%ry%#t#0B{>kw>O>uF4{<^)JV*XD@E&a6T!?|<{3h5v6N=go! zedU%jE7XE<$3T2|R|=jYe+xsus?ywAe90=BiIBp6(GU~Qy3TeU=5 z#AX#diRNtH3#l;IzWwIILT`NC7iqNTPaB6hob&|#YcnfF4$$Q0B#L3pKJ+*5CXZQJ zA{Y!!UU#Wd<2|t1@31r6-`7`E zSZL{DK7z~6Vtd@gec67dC#TyKF>1VbYuC;Sl=XRnO^Jnd>DJqWFJn(n1B#1o#li`s znqsmb+|Gyb+zvqc52>xDa#(vJ&DgddSeC9_D*K&f#E#b>cJS~}cz78i0gb0wZ-m-W z;?dUX3u0Yf*RuQc)SJrLLvDjLRn^yF1W)L-6#sOns$888B|u9{O9(Img<3BE=)Lu{ zjNJ7$5$WD#-pG|s21DHVuKWB32HwM?7R)!`-B~BK)W6+RO++^}r8F|yxY$|8WS|(A zP{N$ZSEA(M=3Z`cD_qLv>uPUL$-&=RKR>y7wB3{EoZ6K3t&1czLnx2fTrT zg3aW{=QRP((^Wy!;iM^9&OCvqI%6P+-)SIg&AYQCTZgha`(^3Tinh_^Ahw+D!8`PY zJQxAjxjn9G5&FteA)G!{iN)_Oq9g`EI*&)U5Ug_d{D~nasn>LqN{R}gj&P(6Whc7_ zwPIwadZ+bbV#S1_916+%<3VDZT3hLq$2^gXo`$)2T88Kjpl|in&?uT5stZRzbdu*)ZRJiO4Xyd<+2hT9s@L_N z81cuIawAj5%Ma_v`;yP0;jOct=pTK}+L&jZYz2_HLY^8`X_xY%b!3X3E|st9wGPwH zau|6nSf(XmIRr-0abYAW>9Gt zhJ3ny@qs$}8rySwQr;u%y5pyIGNI@%XmN0ig`ys-u8f|bWi*h<@f2%4_D`duEzoy? z$n{UD`q1P-oZWiNmgw*i`PMl(m}~0nlTwhXP0>xoaMq#%UvN)7*$kgPLj9t=Ga*|; zzZ)9K=la8Z^Wnt=4~;mbW99ie7_3gl!=iY?&syx_Zc1O@`5GnolYoMf&ZG5YTmqec z4}s(Pn8;w97{9}58z*_U2;n@=$_g}x?!;cJkm{Tz>ikG6H>O)TSB&`Lf~*$1+g#y| z&tax4b!gD2EUQ2M51O3Yqu84xEdi>TQy<6Qm|u@@>a3fWilrPj7PND}li9yZ*n_xN z@Hh!?__#8rIQIV`w?P0G82(zIT=7Z03_;QU;*KreHi=GIiBHb+qy)JwwebLePBvFU z?zrjtlI1k-yvG<*V-+KP-2M~r|$oiZj8R??$YR6X;Nmoi^@5Zzh~o2lA!kWJwd zz6|+dHSxaD;Y2w3>u9G%!GH`DmgRB$342QFpcgSTzZkq&?=`dBp2FlrMNm)>zvf*< z`37EaG=A(#aW9#N@IGaQ9F=d=#Ky*Ddq~5iL6EP>Hl?xA!_Ka}y!>poTo42Ty+qub zWI5I_hn@9YX~-sf*F~v7r8p`+*XY{QW5uV1?NNw{35gh`*m$rz?S^H~#Gt;Ap=mtw$BC!g>0s^F%`R)E&Ly`RxJm*yg5Fo~9R zhT&uU*=b(kie8CwDFr?BkJ0fT-4eSr&K_uS;)%HZJ?a+y1iCKUYF?cacS*I!JWz1Z zyy2_lLhX%u4$W&bZ9Mcqnj*ye(9Lc=1r`6#*qcU*?xjOLst($v58?f!)*?YL!>9RQ?oc{|;r5Q)xyaI4RfN zz8R3TF1DU5JQamz?)?@&P`%D}-A3a#2v+1@Sg~mss;RElYj8C2JDpzBLz$eKvS6fP z#PPvt_Gs@6AH!}5omX*h&01Cd$7{gvbWq038T*X;tkH0Mp;v9l7 zQTr}7XrvEt5fl{*yUnmmDS7jX0DMmjh2EFcM*FM(ahSM$g>0JD>{EbRNOf6u&4|{G zfXl%DL{^pD{mQBMdj&o4~zdw{$SJ%6Q*E#kcfHEIx;`0&?#!9XmqV;~Phw%dvwV_jwk#*x{*zrEhgo)c zv%N*x7;?>~9sqw@Ow99#*N}wy_}S#|dAzGyxu@6z&XFY>l9Th&P<+i(#E^44lJTM{ zvT>)Bjn{|bCOvjC4Pzm36AqvGHnW9BggHFRwe~o zAKeRCLj?=g!}W-o-HS5g@cV}>ZA=tYW7+g$o|T`rGJ`yt+n0gyCr^Dq>x1xX@1{WR9JLBei;Y&K3A72YED>Iao=k)05FOS97SgeJftWQ)TmFCmYu>ZrkO zpA3>-l9s;IAUQ`R%4d3d?(`}Mkq2d-$EI8Yr7{pooGYGZAK3trB;<&YAUOCqLN@-oD@TI7 zk&{?y+0xpqVV!TMd&>DttbegynwtJ(mq+23<1p1We(i0Ah1V82ntpT3uI{Rio;JUwwL=ywuoALucG# zG%gf}1s?SkVo*x<7gm%~b9Op7GdA$8W)B!N&#VkzZ|uJ8y7g>PUzEc3_W-Oi;qGU- z(KVv4C^FxFx0d}`-dykzxz|5OUjV(iV?)bULc~BcI)U6|U9w@QBPU(A_1E(`=fk^+ zZs9dzq;O-$+_PVqA14At1huO1CFQcQ5T!5P6P?~O-UPzL1#rxdBWa_2%|BW$^10CU zTaTHw{_$~J8f{O2M~#12-Pv!7MlE4=5a*lgkBx3xHHDaUYur&B=Woi@P0J9QvED}97${U` zadt%PlB`}G)?y?=c=DlR!V-=8F;nQ(=25gjE^nph@lc_Rd)ntUA=#FjPtkNt5&;=7 zQOTa-QGKV$48X`jmqWZeriuXG3AJq0T+p8w>xLwFEBjV2y<|r!{O+W?^J0=CtTsUh zV~V9!J(ZHu*&WvKPlc(sY4XJGssdCPKOywnEHYI-ev^vcQn-ztQP1H6qXu2Z0#Wxz z)+{Q`FIfX;vFTa7PZLebXWq`8F0GRjHU6!d!cN!W_!CP0vuOsA5iZh)1)l7%RNj~5 z4ArQTn*|c%7?lqZQ8{=_P@(w*Nz~Xa^AVY;_byMI@yYx{rn@5S5PEg;78@ecS7o$M zL0RGu7elp;*zJ9Rj%&*XIW+I->3NNW(qzxA;gM4zq;x0U8-mO2K9rYO`@Rav zxY_AI^_#E2l6-XFB?1pp4t>v3hU&sL7Byl~b#3iIwQnZUy`aIY{b2|jW<`<|eTg!u zm08$u#bhf6<4Bf2vplpo>%vqv^_efT18CKiAY$Z}C8nZVpF~-G^)BNk*&2AuBW07# zj{ko5dd!CZe&1E|UHMhQ_2eBTg+~-aW1L88!ugK-27?e;T(o`mG`~^v9^;PPQ`jXh zo+&QH;xa*qy1)lwqSei!g4}P!A1;u0ho&7d55^Z`K+h{(wi@WYV4=CD&a2I9n`TN0adTr61N=^0p?iKAXN!}M`yA|SGhe1rWJ5#hO-cH(nh=Q-~EN5nqz*_3lL4zxv9^HxhcC#>Qz&dSL(i#dDY z8Sug5#h3+^l8<~c#wONs^J5U?uB3%8sqccIL?7|ABl41OsZvVaWv}xE-YZ*TM>dG_&LZ^(cAuSQTH zS-HM@=3#r7>s?e}{$6pSn-~glR`?FRx-k&A3@PSIwi*D{E_smmGhm=|=14E7lA~y9 zqiPOMMt$LD$XHy7&-nnIHfUJmi{9V9E7Sd4;o zzXR<3@D^3ovg?m`fKIIGW0ekNH6#qIdfrAkz_7fbKu6WIC_a={Zz6uauJ`GAJ|G*wIBtDq9vCVF={D;hmGV|vK zn?nJQnmg?V%^v!UQpGmx76v79db%I9u6kRS6whoFIMP&)fjp)sVck7>1=}f!Mfe4n zN6omWI9d&mzN-8p@(u@}d0ja2Kx(P^bLJ4HNUJbCmSZHaA~Q&XjCa6plw&Gn`KIz6 z>+2#3lb)**EXI58mheOwbKS;JCMDMQz%Y~Vel@z^MY>j5FBG0ue{?-s3x7SsfOJIm!#q(4 ztNu@gP|(dyVPev3l@mp6@W7u&qYXbpO{mQLbUShu`P1UmYQ1;(Jd@Ben=EnAz%FN5 zCRDS_k$S`RAZDFiqxNT2q@Cl_-*Jx6rr5CMO8&?NS{i^34WF|xQLC(cIoTq>^TlhJ@06|3B*yl7or_Si*qa(K{F!^$V~JlWg7LlK9tAA z#Dpes0C4&2H)pFY&9izJTfAll3x5G-a2P16>RK{4+K7$}CObNkTDV|tu>Aa)dEJZs zsY!)Q(cxqsT3Xu1ii)VqG9nZ%hW@S*3@0y}n%>WVT$m)qkKaJ*iYP7NXKj8rKpXj_ z$#&&|=lFPqqzoeL-fhl4n^TTZ!rbwf>-KAyzjo8(4}Y`U$i!HQhLY9Ge7YMq-HDlp zrPeR3^rcnH9sMK0iI-1|p&Nle1Xv^=;jQXS;utv@KZSYSLdM2hSwIsA5F<{jAEc3= zjBBnbcIMo|-=}xeJbh_35Gs7{V)FKyIN9(eE01?3?~u;%52-K7DvELZeel!d$6$~wn`krIb}TXe z6i{K+Uh`?Oe$7B)LB-3K4p*e&rr_@6bZEI5_SyUz4$K1xY01y3PL_fuY@CI3b^vFl zrwMtU4w4sK7Iuv%$IMq_`lEM-lcOUe=hn^g0d_mXIyNT(KYGF>9x@dI0aRvekDScq zV{kYdJxCL~Wv9-l%hJxawyS5Z+n+wss`8E<4*-Ec-ju-R=HxXb0^ukn!}WZkH_p2V zMD>$JQA4gq;lFipOgI5->LxaYl5@?OOvcL(W1v^C?vSRAS>9JWJx98cdOxd7nU4)4vj;sXk8KKN{>wfQ!F2|mv;(_yh&Z+Q)g>YJ*EN&m5 zVRDfyjxD@{1E#1og~<`USV z=H<+~Gpr|G7cV}4XdLqt4@r=Lu=MxOodLb&mP%S3_s-*)Gfe}AvjS)v7UWUgc1P3g z>!o>CZ5;`?SdHCPRIakKh>B{YOhO@%l0U!SK+7$vfb-stTB7 zTqo(((_q}s2FOfI7Qy|svg(b?Td%gB>HN!-VSAZp-?3J;Qef8AWpUI+7r$Xtv_;gbtavquZHQh*8L1OnD<*@zvWAQvb5jjTr-p`l) zui?J6b{Uoz6&=~&I2Ss9ZD!?d>nYgf8EUF0mjeZl!&hg`RKrUPYZqPiq*9Z6xH5R#S$#vJ^pWWGRq?&6Qs@PVH@VmRa`vH2={t3oA%6e^GMlc?J z;^ee*o!lspEGmH~v{$-5$7oMs#81TOFS%lyms$j)-FC{SJ9+n?Wa zaCH5?$;*#&HltsZs-a+WoCqwAS?h zU;z_;X1>4N3)0d@&|gR(CQr5{{c?2^6GXl$A`9DH^n+Kg_pG}cK*B&gQZdA#1a_sl zelr;vXt`0VZgawXdp2M1nB8iI$lCSwwRDxs&hZhC3%6C6zkhOOCTVzYri1qbb534f z{3Rd(RHWNnQFh9a*lq7<|F9mcbIH8t)Qn*}`qnfA7J#1f5zManWki***D#;Z&;a^)txsi^*0!Ui8PCd|OiM%CwSLb34lALowl?$KV6#Uu{!j4$ch*(2 zz~cUrnITH8^2v$w^{Rnh{(a$|mtHn}c!l)he_wtk_R6BXIz3wEn5Wxs#JCqjbaXEy z;lMlIwg#5tDu$&(w>tr_58Gv6d&N!V?V1VZtH0c>FA_X`%=|2u9oH@{R>L3Y_WTE1 z;f7bqPvj(pr6vv`fhaF;8tUNO`$kTwp#8)5y~r^P6#_fI)h_(fKuEhl1T;ALn5pj~ z0rdPcRl`MbW2Bfizy8zCw>^4r>xJnAaC?-`5x|ccys-H#*1L%TErD-&PXUCslflm< z?n0^%xqn*2rRkx8vAI7uvU6~d!x6S^KmZ>ILK^VX#$di1%h(y5`@xuR|2Ditwy)P# zR<$zVZkrzd)yYf(SG;N;x|i6sXb9)knRbk5=GcIWlFx7Q{{JJ-y{1&QURZ4&51hcP zf&xWtt>7`0G{5rldE}f0rN-R17>MR2Aot>QZ{;QXI9~OECXCjNYN2 z%q+>xvf<&5Hq_PUBZi~F&mwPwEqS6Y-}LJ>9-RBUu=7U$KZ!`%zEo*nmybPR&kaxu zyS}R8ZoqQ{-0`l{x1?EZG0_C_|vqGd*Z+5runSK zE;q`+5s9-cp?!Lg`1=s9?KC~`AAQw7m~L+4Yc2$C{!DV5H4@svY#+subER=l6Ne|I0R%2<3tU| z*KIGoC5|dT0Uzz~u<6y3=shxt%fCErrh-R}5cFRp*1L8b&qmJO2y?c5Ne~t~7TJ_w z<%t5#-vLIG$fa^rOZO605xXc$JK8h<0P^*V#_d&<98f1H&z0#3V_ej89a7v&*zS;q=`xyb+KyO4DF~ zaUqjoRJfb(u>KF4%c~Lf@|z9^o|T2vbc=nGA*%8VyX|+;(^eAi^(tL6!s#mqqlUEM zQPIT2UdeF2N47b>_jZY!`1rkPN7@z|{;Z5mO*J1#MQl;v$_5#!A{m?49h=X#BgOd# zpoTAgXQxwbt*lW|K_2`-e7ar~zy3uwQWjy}%Qht;3aj5vUeIDO|CJ0R6bS~4 z-k+shtXnkRW*V2+x7=0~Y>RJbl4(LMs$_F6pbmfId(|&@&{v2KBb12socP&OfmKYI zf`fx&`iP2#+Ax7t{X9MjTp2*#|A!}nYV*ynk!u|3x8V;?Qj=AEwl+L?e1|*?Skm!Q zGxE&W?=XzJ2!pQT(bhKzuv)%Y1hd>SIj8QDN^@70c6o^Ysg>*d(N}mP0uIrubWcE~ z9+BWprm8|tVD2E@U1QI(l~PXe<=))$3jEcS7SQ>SO!$n%RT=WOS?6~YMun~GcufG_|7uRY&PSB3q{k!1w*N3Dm-Qg_!&0Y8IcN4u* z+gW)iYk-;Xlr_!)C3i;+3;aj_x3Rx0Wr34bk^k04H4$z1&vf!bLv70L*PkYAlXNh%GE2mwbGZmTIO_Z4CcZAXCM=E2a~)M1o?6r zzb$*6vhuX-cJ(!&rFFJSOJ&uZ#ip0Bqm%9x++k?&rpQ-nehRyJ2{y5 zMDKM%-NR4UcZipYN~r9%9mlh96nXw%wN(&z_cr<0V9Yg^~1on8%{$=yDB= zR7*39HK*DFWq>5lc?Bdr;JVGTLMz0YiFIJxH zt79n1(F+UwNqTePMMH<;wad$Ff0mU#?A-G+*Nm0KAeJ~N&><{-myh~9TSDsCr0aN& zDEF|?AC%!Kue)I8Q@!)u{@P-CUH!GCU8_8nsrb z*-@@KtZgZZ0WG#Ge|txQ41ov@2AlJ6@p@%0IdSl5f)@+$`3hUQo{QW=q`W1=%Q0r3K#0BlY`ZqYZb<{M`v$*OjZg&Zjn??6k#sbm>`^6P2G^wz^Sg*J~)aZgVd zveY3(vF_?b$CLdad1hepmhg8hCqB^&7y=Q2%kkUH)<;7a=7=b7%l`eY&eHC0e?+vO z{Veg0o!dVusDmyZVY>UiTw`D` zShRS~$VSxpM?&;`m>r*SI??gd#2*UHGlE(^!3ev*i`KWDvcTgH#Qbyu&(lc6-Wd-s zx`ngLb25NFE?PYui~U@J8fR<0dsT84liiAL4y%F*(bs(XTE`UTejV(>2$N^ei~6!a zkf-8uc>-n+(O1S&6ntU~n0+1UL=_qH?}&Km^q;e^(g)McqQI}g(?$5CU#dGogtp*K zf?tmGi;7G}Kei)6b?Uwrk@KFMs>S{KH5BCOE;YKw16odG^92$dIT?+) zqOz&RA0+rR7b}>TYLB=O5{gI3vW3brAB@mJ2~f0fUcDcgqwIsYeMzV8gv^$rW>d|_Bndc~N8Ka%J^z?` z+Tx}r$KdG(WR*?ZJF6ooc}9&=kpblhzG5!SdsvG~){D&==Fon;y32YPy{0-hzC}n) zo0CROkMh8^YxRVFkn*6gi@GOk|8qJ;I^duvMOO18_WE<}1x|ZHfImWJXNRQ}%R1}N ziHA1`L{zn)Z7wFF2Q|$L_aIv~B6wh?s5C z;v^WbmUW`xW!F<=)t3xr34e@l0)o%Yw|j}8F3D-}Ub&N!%}6<<7|JVuvmtW54;c(YN~0zK{trLI+(Tq;5ymkxl*5<`@I%G_iX_h9gxx8Mqhr$ z$LG;#E|ON3{P(b!7GOt5XZFe53X)%GhhbN-<>ZX&e2T;U_8mi(6x zzB@}9nUAk_EnlF(t#yyAUS&14De;2;l8{SYo#|CLCOSSH|NpKWxQ8x)PY zWXr$eO8oyOJum+H##mlK)Mrp>X=zzdNV92=%dAcJDbC0W2s9aD#S9Kw&{-Oo_k(Va zQtGPc$Zp!7e>vEcnz8#I2Vdd^cUP1V=v!G8s8ti~A3*L;F(jNsU|!z=%7(QyMB=GZ zPEK$3kT&h}mB0H)OAnd5ex;$cFw(i}+EXdoBbIBruhIorS_V{b=rzcWZJBoN=$(zg zE*5lTlFpBFp1q|2!xm>vPCm%?)f@P%N={&Eq!is0@nzln$M2i~*bHhZ$X#o`?E1V< zr!<6(lI&!sx)hW(k+V@#5|ngo0cBMrc$mMzbS5VGH#iX6CnxQFp>09$%Y_w{G&D+z zuD+buV#DE4MWnPFme*^OawHzmozl=ZFM;-!x+Z@>*Ob-3(NEbqIpdQJCd&rITs&mV?hywD4&*>Q-Tqk?#__(@|&X zI7CdDkvCa>H|dt#)|S-Fmsy_ugD-regg`W2KFf_RV#`yaA7wZu4VDF46Q-vmc3%f( z4Rjd7JrZfDkb{i892^ej=PkyGB@Qg0^hH|8Tz6-fC;a)!hUVs8a;UGvh?u@Uh$Mji zlpbp0V#nntISG5XWvg2q^PiuM*)>LEO$=}3-X?yEiF@ zLj1UfcL6fVWrqm#O~`4|)_WZ=8s3^E8CV%hW`0DO$pfp*TFG|)%%@J>3(Ku(C_$0< z2T}O;Y-$0N@EM>TVEg(;DpKB&BP)V7pZG>NIV>pXJ~sCC?r>qDR&lPrvGJmwCG)7w z9&o#O`Q)VcC0OF)hNVrX&>RVE^YDMOU0=`BZ<2ODM9|M{N2B1^(u}4k=blVw;mcs> z0w-lYoa>Q)k@yZUzxEtOBjE*WavC+ztfEQmza6nWR}HAd4=Q;38LcGptgNkHyF>v5 ztN`XTx}@El+RZRNi+&)88{B|s+H;F0uZ;eAipNNBoP4>*Vz&GjPe>EUVD9pL^?J&Q zbCb^fAb6=;|9f;`pRuFf(6a~0#><@(8_NS_daG)(ku}@<10BF!)BG-eHnG6jai)z8 zVHkBM#of?g*l&H8i|eWu(SCyjtJ!;L+;(Yoe*T_f4$>!&Vhe=;{veo?)h5SI_0pN; zbA5Yzh;Mow*n#h2UIfo{R9=W%3<4U3)Y?x3wy)cU($gId(OWe{fXp^t@Hg3)`X0)= zDho?(Z`qb@N)WA|D8e8=AEdz3PBHvp1uH}D61Mm<9Pa+VwtQcvL&f?VC}~3y$Sjk` zfVuh`VCgQtH`|bP-rL$w()|||sT^M62h@;95Qr9)TxcIws zY>t2J)%gQu;wRSv3j|FV!%9siCi|g#0)Hz0OPG{0ac~rus)giyiL2BA(AF_8HB*m= zru1>`9~|tNWBT%E98l1JkOl6%4UjJ`yeV|#NlGYw+B`FTZLMmMojRt4g}c?u67!c# z_i9Gjomx}7HJ;)960u{n4tH=?KRrw6_39wy)Sms>ScfQtYdUJ?|71D3_nUcSv8$^h zprLFV?`){Phka_Ry1HR6F*gu=U(&)XJCP;tc~>PB3-k;|sc~_8Iq#h9-Vs zk1jUMMrwj^Kq7o{HA3=$j*hA5^(AEaz(12VEP2>{(x>kE;^Mb1z&^7K41Uj;Bm;S_ zdR`ZQ*UG}qUsCOb{fY37+|qAE+=G}=)A@@&lUd%^xTy&wH=k^bPGbw;(u4#@sH`;f zmY_tzNd@=SV>f>NVKaD4>IMs~IYM5(YIZ`9)s40p6$2rzJUEtK2Ma(Rk#sse?0C8M zPjuWV3-x{kw2Fzk%#y-Hd2|%uF4_2eE{Zn ze_^xgqMv2(gMX1*cAR&=SyS_fK)3)ro9hCCT-^NSEE|Rd|l)RZs=_AF9U%pVpXf?h_7rdhVbC z{|0;cSl#58NbzmaCwW~HCS`5)Ns6X$#;rSIna%i*nu0>PI2j3?rXx%NJ*caz6-+_% z(`-9fiA5p+Osv^d?`pZZf!Va!BW;(-O18c(l`S)Kw`FxVpLP~Sd!JBaOwGtZ`9zvi zcNQP0X}6qhlfi!*3wQY*rMGX$^IN8$uE$!MHYu_cPl8=v3_XY7vwEn9`N9Auy2sC~ zlXsbV@wkuhd!$4RC=b(d*GKhE^S-ZYJX@-P6^GvW;-0B5zP*fJ>wJ8=t~DKkLc!4; z@M{P7D=Zu=?v@v#Vq#)jLjwZ?&yO}@nhCFNMpu#szr;OTKaVcle}zb2uLYzYFV+XZ z(}$c+m|F^18$_Nab|*dbhUtuaNkJQJpYmgnsz@FMFJ{O2kE}7P> zrJmsEJ)Nv~|MZSs{Y-#_bWiO4rzB1ihf!D8y*1{Nx+)xg7aa(k_Ts8|7hw4ktf5a_ zmvJhm7kUB>JN?A(KG&rSiAks6S=fv$QhAs<2=$!Z^;rA(tWB-2^O%l2Bt+VUzSy~& zP+hIEPAp;hd{$x4LQ2}*Gc7u&C1$)yvo#dX?>;hJgXv#$cNdoSoRgcYsr50Q+meWN zSyD=|gu=vFo3a`7a$PCa>nX52a;(J*Nm5EGnt@U(d)%PYbKxx)N#=0#rz{mCWzRhU zK{+vYT~jG5$vQDm$Vi9Uo576h=1tNNl2Pl!co9iSmw6Hkw2fV`{zOU1WS+*hgS68>{L3Z8y7UX;^C6a3Iwp%OgwjT6X z1ovODSdeA>*u?Z$)+P4J>`!Q?P4!4A+1u-=U1u-SPD-(LJ=t~%XFF-@FnKz7u66cK z3vLG6TPvJhRT7ul)cW}kHmPwG>ksz@V zQfzv_^fmSogw9?$>?Wr#q3JQXE zbImVG(OkfUjM%vvjKeD0$@Y8SZ&AicS^?k_y*w+M1QcAnyhdaP3uZGi4Q6QJBQY$U zMjX0w_f{y&_1||73>qKtzC1^63Y{0~WSbu_IULwYRnp;%{v8)n5As;{zA3vyy{w6b z1@k5HOO%ShV8K}7@oKJobMxEv`6W7LX}Q7vz$R>oP;qI!7>c-XZhh_H_1|9PP3(qy zL@U{;AP@7P-2IPAq%_08Wu_IUYsAs4e%6!4Pr4G4@$5TmFPELnw`datYQ%fdk^?D3M0#RJO|D=4ER8Scc8CRT9+2^;pOwfklKCICJQ5}Chm-5S zs`ApwLCuUr{AvkPdueO2(Z07<7cJw~0`ho=ebx%I;+nBoV$`&?4NsWwQU#5547Cb5 z01~LCJp8G%T2aeRR~Gv_sV7Cn;H<1muaUr))3jp1~5TEdv+aW|yX zqGDA8MB2%$2C3mZtxdxR`9liJ^{=u} zO}>xFv0kvp91Vt0QS9mp;+oZDuj_Y)<9E2li;X8>YJX`w;;x@3?4U89Fd2=i`>j)G zYi-k3OtGGg)@Jrxgcu<23qZ5Ud5dZ4_qEc@alHL$edUq$l}|bMU;uk6w9@{Rp!PO7 zo|<*#qh9-m!3x+R*rbJ&-E?cKF=}{XUf(1wciI7*l{zaZj&B5%dupAPi$%4Z6#EVK zKl$o6KJM#4tms7)*9~8bpB^b@jdD7KQQCK;YY;@k}#+k9JPbzI$zM4u& z2CIP4rAW-tMwh3fq8v(#g7@1DFgSm~Y{sSC-kL2c$hs%5LeE|`MLF;&S?VPcp>ZeV z;S*HnjY){|5l%+t=3BBr4mZMUF(38Y2zTIjDe-7`C6q+n@%YfHPkWmqqf=ML!>4r~ zbF@_tgO_I6mPXf^?6-37RqOI{T$?yZUl$q-KAjBqC-hS{MJj1pN;d z5TnNLrExai>_VcGQQgIQihYE=BXc$>NgITbAz))v`U8BQkb|EvafY{JIW-Vi$!K&%g*|ZO9kfqe;R%f*r7p5~H%f@r;rej2wc>;K2Z;obuuo%L4!+Oxz0}p! z6#+^p7uQwAozsCHv>!^Y!~8UrH;dIR6@zgDNn67o+Exd!#x8%=`~;52I2PQg3n<*a z#M_yA;?Lq@rPz0sWk$a({a~rS*}VCfim4QX!)dot2$f~AS2GlqG@NAF@{Vn4eb&y{ zPmcIpdoUFkG*{rHyF!$hr|!tG4Luu3E?t%|rJfO}Esd^LMMNbcvvnqMhhu-4jDdq& zxVSFahYLcx{k9gN2ietGjPG<|j-7SCS<16^2iEvJycxeRq+6zHt!C4RXoYH(n-46T zR_(L?0g+Quk|l8sPEu{&4{O!aO-eOK3o7Zlr#uYDjQZDtG!N%)v2j)gXkyV)n&YGn z{00Y8TQabFC$aRnn_NaT+(lVu_yzR5u%7C`__>GXx}6;+vrOYA?+)|?2yUkg8K;QH z1uK_fjsu%G^TpkQBjr?yEd-{h&+U_pwvZy+q-V)f4@RzQG^0Zs?W^r^v*v z2g>)STL!P7oZOX1}rPrCJD&h360eC-OA9p5m4f+#?+!|M8DjD~Yr;MN~pqm&2zIQgaLw*qFd zy<;OQTPkHXm=tj z#db;U1Urs>TAN^Hs;QCz;lh~33}n*0xpbtdV$rY>xwCPAvdr|_m0XLXdc8}WTdMct zGJNSL3v7f|mezD?By>H`8}zHRVzGEucfF-yL;2MK*yiEdHqRFkwTu-nm)>@S^plt! z_#+9^hjQNI!;K&>szrQH&gsGTd0?7`y0*Y}{RT;*y zC@B%g+6|TUFMcca`nO2Hc^7hZZi2ice$Q>2*5tKSQK`f=7m>l z4?wcO4a@dM#(G9KZIwZ@NrMjra$ZVPahos56$J*N7yyy%_NV~yVRKYQo`Z}z1mRrv z{Lnx6ep{eE@2`RSc06?I#2m~{b}ArybXC&@QLD&kXSW|MKsS2)s61la9c8Fly+Z%d z+w=Lp0kRVb!P3_kjg+|SksTl2|BQ|w-jQ$s*dJ5Ct>~HU(mKlpWGah`6-`ayQ1oQ8 zZ#t64TRWBzAyhwkW)F+9HmdJ|qoz78)TU?bMk8Jb-+xbucu&^mg08NzvaUL$+?P`c zo=LnvD$QiV%3ixu5kGAEJ%pSsOmOFSVLyanDr;;w^4K`?5f!}%> zt!lw5+JalalZOT5iJLo{wcnF4N2xc!w!r9NUcOLyY%uRfQb2Wk@fNaRh<87>ep^aN zScdEgW1`quE8?f+fuEtINgSRaQ&%x-Eq$g9nY@Nr|LWd8*QoLu?)mQjcR`#8bzx53 zwTen0oxUEe-o?&^ADweRozr3HnH!uj%_0*mAL*%wo1` zJ3n!@NjMysSj(Pq*)A>4I+bq|O}p%_U5fVO9UfjQO_Qffe&5Mzwa*+Hy3@*6s`ET^gZRiK# zc;*{YkPnij8E=Soes4lGi>%p*aVI5T#C5qQjvidOpxYIVd8{SGxo zKes(JeRaXz*{jE0J`dkw*>tZ0$zd`vMd=KgQga{6m^yfU)A$A6+LU;W7?suanSopa zSG~HU^WN5$_-({kW|x-t!+V=SFRLis8QMse#LmRSgqra2_7Os2FXyn!1Lr)hPg4DRCBoS5C z1-F8ty<>k@ScCB_RkElXLLc1us9hgh$s+>{F4qZ*WSxyO%WsXO4%V=j^F*!Ja z)F#!A2=RQvkpeBNJsq_jBPWmlT2 z6jqng46#4=30xm(M?fA27Yp+pEndSPH5UTM`JOv;*pLXPxST{1aN_=KaQrle&q;~y zUjGn0y_EcLZzDcy$7Vayf@7RqoBfcj(Wb2GbKiXMSmo)cu%oBB(99gJvw9XAc-W7k z8lJ1xfDl^Q>U6bXM|~2N%^qVR&9`-{WB~reEuoDVBINBmo@S9O|L3dVPX(7wRu}Mhd*4ZC z-4+h=$PE(a@Y&VNR!qEZx9yMnz)wCLIb%DlF!@u zn8z`qH@U{KmOow%fc3~fR|qU*?hyH#Ty7XI^LRw}v03iwlG^&xf7iYhKIT*QHMt4h zM8+9I_TSlj_K03ko%;qMz#eM!eF|NV0+YP-gD+WTYkn2tK>zSr({zvIVInCv=SRsU zgdX#%g@ggZ1%}U-t1VxCj{4xn<*0kPFYT<&*7v37=&iRMkY_*#-8nj_o&WZEhdH$tW73Xvnf1x=M&++a(y{s^J{XV3(e+z;F z@sh_PPO)y@)#oVuaYb7l1mn_ct_UQO1CNE9HY@bieU1c3?3N9~yz6dC$2CE5K+GSqP7ivkViYvu-w5R8~gURnFC7 zpBWw9{u8U{5?e~``?ckr6F%Q89D2AhU*YMuH+C5KrnN%r+}8StbJ|lmHa<@$#rLcJ zVz(%N-1VenmC6< zk!Grlr5jDJ$@LSV&5F%+d#-+>$e)qCU*@|gE%L!XnOoLC^o}PS*x&LFX0pTkppoEn z<2-$;jcu77-n4rDJjd5WxEl%(cM+I= zo15$V_+R_il~c;4H1@dykR;SBPf9EEJ9cYTDfiPmF+{`5t&vMdd=?1=$jgroP?4@~;CMD%{ky1LR$=>Spw953t=fIaD2$7L|b3$hFHxcprGP{kWZg=w~#YWAgN`ibD z8!Q`Vv92>I)4ID+q;6SlsvF+~8=T`B<33Hpg&vuV%yPUKw2ZeJY3Mj_J~=swc1K|z zCaHec_wd0rG*t4t8Z=3BGuvsW*^`E2Qpd~wN}%oDe$)7w_p6c^tj-99Hh69bWsptN z6q}`!rNv{Z*-c$2Mp27bWd@Ua(&k*Vw0n3Azc5>VU&)>)KW0D*>T-MYJKTN$@ejHR z!~eko&L3tqj(9kbo}Coi^WD1s2@5iYe}Or@v&q-#BLxq?Mt)O@^neNir3IAI+zz4& z?epr=)FzlK%62O>1WHixX#o)7l9 ztDl^yhEoc7%l3qNRz}iM++BAE-S!d?uxdxG;AP)tY=vWjI*Y~g-&OoRk>-~{lLN)Q z$H0*C*U_U(9tC&O0I>LbugSaJWJ4P^RjPP!K_FhssAe3gzkmu20|Ol$)w4{1XD@=l zb3$@YlZuupxV@~|wNAM<-Ala`O!|0#n;!*30rF1XIkS(cT_QG=v41D-x}mxef}G=Q z@X>)O`WXe==TkB?c!2D%ofHA9j|aGBQRy2zsl26;FIcKUo@)on7X$x~!@y86plmX>F^w^`yCYpdsXXnJ}uwmLI#A)3|G^$g}-?t-{}jnsWp0` zuv*=iXYx?(`_K0c{TL#;^rGu?$|+FWC-aP{qAC&_E>&i6iE zm$_+mEFYLjsdWyOR9mQxPj$PnU3Mb9)?<|XvZkCua!m)3&zf3fR$;2DG&elCo(p@; z7(&AGd<9<|`j8Rob$ncPTHhlwcldoM{~@|#Q->-=-MlQdec_H~;R+*|vbi1tC;*an z6)LJej@R{M$Ntovd3AN6!{p`pN^EB0e`i0VX@ zzxDlTy*9ammA0PC{U4i6oz5t(wafKTR%b*01cTX{Fo^_Lx9c=%@+%pc@*wZ545GRn z$V=S%My`+HqUwFkRn$Zt$4i%;^Opx%g{1nnysvYXKKI##RC9M&judk>j~7cJ3M<(! zckWg0obj>VjV_^(kuje>FzObx>TqsVL?EOazOB{r{E)`cxoYVPAot?cAvTv>%in`g z$Tq7<+YDA~urFTCtQ_O3;obL)p*tHqUN!INl84Q&$dc0;2d`;kvT+$ZGZzA9=b2z} zm155>0l4~W8WL`snERsm#=AqrnHj2QzCpVOCz3ARW2=DBLgLxGkf_S|n%_!!$VomS z6YrAeT7`J}7W@PzQtwl$TR9%bP7SMOn;Ju!02Lm#af3-%~Fud5Ew3I!k^ z0FIVf-_Vfj4z{)~+X<(l!vg<+!Mu25>0hE|ax1g4vQ}4DSJHHCY^i)36)(KDkM}E! z>XCf(+gdB`b;5@MtIjv3dpj1=hsCx{V%^KrQg;8g3GX4-=}0o#TK~CtCZqb#Cdh5$ zX8p@wAl-^}GjP*TeIUp|5b?bArM6Ha_&UX$e#wR}_su0no~b%{cU z@)_(clE5>*57hc(iL){U0LbM~lX81})?5&D%zL}pT@cac7We1NGLG}#QO!M0;-)#X z!(=!Y$B_@zt4I3v6ARTVxZ~tOUrx@(td8tSOY%536OcD!c$}gq-pQL@*~VLZaYTrN zGk-0&QdT@QRW8#tPtE==Q{6zZ2k4w!L$1a(U#2nOm)xgWSsO8K+0h# zJ#kZ&b$BFX7re4iEQ70rkrQ~6RsV1`T#DSrDzQhASZ9bS)z#Hiw6*0$xgH%^^XgRr znq4Trox9L<%zr!;HH-VECt%=ts@{BHXJnb0Sw;ujUFiqujV0BY2{o|ci;fAq>WkCT zoJaOeGy)s}ORb2}zJ)GGl%p1Ky-B{Rs~e}vn*)3XZCYb%Bbj4Uwoku(7qZXdrc1!QAF% zc{zQgr}_Qa)8$b(NDl?E{&(@xe^QcI-omE;`kjAE7V3uOwEO(=ZMI z!=&l=1#`2Z{jU!Zsr~Nm)<{Tdd*0u4?V_&<{0m5UEt^B!NaJ*thKn11>Ik*ur?3tb-%u(aH( z08|xk&@L`>;}5y*clL4n21vS+yrP~RME`F#q1eN5)2l)UYfiTy+&WD@{r1#bu_NE>sd~y}Ov~I=Mk* zyvG&57wTS{&;rXD*vXDGJDhgxVc!0=_K&N3>@1OZ;idTDYth-aySsFWv$;<;9({2K z<$P98;119Zx)voIIhSq=i9O5Cs52`gLel)8FJ)S0UZX+I0 zqK2^h+^{Gqq2*nhUaE9L-lb;Y2?_#nD$u6<4*_K-fprEyX?AA3IBEOaR~vp8nNAO_ z&gU_V+7hIu=69Z(Vq!zkQbgRxgDH~xOo&Ip$K4A?{)+~S?2U&J&+(wbLgLAk08pFf zMN(`mcq(@t>geW%3U=V+#4ak*$6GHLoXer7_;D6@KAsGkd*pOLx|;QfxFqMw9fa*bvEzd{@m zW(PDUbMsq&tF=+?372DnY6FG zqSzK#LL>7vRED=xXRfKi)X-irrO1EXdj_>3LY5=ULzWt#a&^@|>;Jk_@=Kajdx&!{ znwSua&n9@|kCFM_UU#?X_CVAn8lI3fR7OcDCP3sd7bGqn4ejz1yuX6*L(ZV~MSUiH z?*~Qw;)|62lF|%!y47c-3i4PMWfRlN@+W%iX4TA3O!l@3?T@Vob`_hc!38g-UyvGT zkAM$0KD~K&Ny0Xp?tcE_Y?yPC#N3QFBoEDE9{ElB#;qXunOD$(rscA_A#*;yv_h1` zM+{72R?d0`++&X~=&gF@rlw+0S=UB9i0Z#llGDL(ExsW-|I zY@k_q@qVf2_gLQDZ|=J21{Gvr7}MerpHGh4P;s5UR7puysd#HluPZ-0628445Jgk~+Y5lPQ3^`+$5SSIE99aKjVc)!5kR=hv%; zfL3HAF?h`&KziSOYuVk0T}~l&Gp4`i?hVPwi;y*3RD!5;Y-Yyf;PV+FH=6^n&jB@XRcLL!eU=Bvct-ytul{-|V)z1;zyK?G zHJ!y#0EOpZ+q4k;auT8e0A53}dhueS|?MAD2b5&KeOWdEk?hJg2lM{w}M5{*J zkc(YP^ghKDEbR2MRBBqXf;+L1$Z~-A~W4I))p{htj z1)#T5_*OPGeWHVS^|B@^Gj|9rsGrjayImA(TE4++qRlt~whCo`{q~&nbi6F7%LmLT z!CCxlPP%wjeD%5^HS<{%pbqZ~RlCDW|8al2Zj)>_beXKlb!EL(d%Ru|3@=dXidJ5VwEypugx2t;vaV z4*Ma&;uR;%+q}En$H}aOLET@JkdQEwzS;E33;eq~@E!fy=dvoC+C?J3k^7K;norg> zG1Mjg%TikFN4Ec@f{_Qu8&AznU5!-bMzEFJ~wgRP$rYs zl*QMKTAf~IEnQ}^1F60xAaH~!+wJ8s_rJlHbr>3M9F|G7iJ|Fh13M(y`BAP0X-5%7 zEHJ$3s0SG}t}i|*&E_h<&uB+RsHV_no0C^Sdi( z8Of>t=-lsU3A!t>waK~EQl%7PzO8F4_If>KNV!m7Nfn9nQ@;O48kaBh{#e?s=LAVT zf)lra!Sjq7EXD>2Q}A1eiDT&>1B8y3AIyyZ4;BE39$T11+Am)mAYp#OZZ}4~{?E*C z17(RT^3kYsvtdeRv>sF34-Y5qhiMNZUeK)>2Ugm=+dTvd&J$$+#*!=PNv9 zMzUL{=r}cuq12S|Tdc9#`J0Nv71pesdl{^DC#L1^m80QI2PpJn;_%umU|-a8{#KUR zx&mzd9EGkI(E!VhIQtBWhR155Sn{jiETuXoFLWSobaB(Paw>5k-|rr3gD+m~!O1W6JfF7Ho>sc2U`!3R4}BVn(0p1-ah#?IOxay$${8 z8Gi!^1>sUMQq!3eml10n4}_8>=p;!JqdU;&j5{5@JEQX7xugSXD(ZC}?+hNG#Cc(P z3D0+7?kUO1Qi{xx9g$8HF5%Z1h({ZD<55V&>PZ6}k;WL@u7Ny|D^(;N2bn$G7nG5J zT28hR^lKyD6oN}<5acpZb?yldcu;wMA zNB&C=B{R;mIg+&L=tn!Fdg&A_CA&3?+kKJ7X}6BNMrL`#Ai799yY!{gX1sh_qL%KH zo~uO1KqI`F4j6N8%=3^qJtn12w@jes1OeZy+_Ahoqm`|+*PHu}S+xkj0A5Ck_hMYR zYoXBww>c;&Wb_jfA|8<>0jGsplf_aiq@m^aVoibe%1^6;m4hg4a0ExsR}%9~pSH@O zciWW*pW3qxXRku+m0gfWb}Wq)(o5tC_oVdJ2;x5Nxex8Kzl7Z69YeVJRL!dUl++P| zM)cfi}NE5E0JDTPjHC<>X?m-EoQvW0EOsvpgOZi7CtJg86+>v7#co&MnaKaA}r%;of+x##VvP->)(!$m!+=bdk&C2 zS9-9@clUSWQCpnuACBdb?}Bw(Zu^wxaDs6{uw138Bp^gXP|{qV$J}ty{l?o{bvMzn zBU5O6K48b=lO!9FDermL$n9aIolZpUkhGCM<=Qc`sR3%a)fn>Dqr7=RT3?8U-RUy#Mb zq12dYK8mcu54B|qbukwS*3~yig;RM0ft56H%>LiRPvP1WaY^^{DTD%7PHb0B2AuTK zUB@U7KtkAle`V~X?F-bakRo)QCLmw9&T@Zk6rb{(?X8IOx-(VF-k|?~awivr=LjO% zv7=_Lu5-{3A#>+Q9$TjLUZZ**Th!!-?1_qG@T07m6aIa(frj)WCCq*qGkvcN_QleG zk|cm;5Y5f(C@CNG=BYCWSZO7{0?X0TOMn+pb~aTL{1^)Ey^+Y)zf70LlX2*7l?m$f zW^zYMbAt1oSipM>f!;rTQlFaJcwtFrD3Z6p+mb=Wp@))ctXb8qG7Q{_q>=d)ZoA+G zhdpVh0+`C0cjoxCU4_>yzn}g*ZCdXM`uFeuBuxiMY4)=yEXTP9)ra=Sw(^H$0Olw% z2xRh4pH++}tSx*wCWDqAl7m1F{Dn9G0OxX0=&uUx8-zE}>#`0;np!fZwwk3SPAI3Y zzxu*kwMqAWtZsA|U6Az8Hfj19?8JKiS@N%N@Q#;WMMMt^!|oc+%jmT~JEiJ0+noWY z52SEsX{P=et_wXb@TNLlX%kxfBuLqo=jjU@t5GOrM&$wbxN2ix_xmW#nauq#VIn`A zLk9EVluyj(;Yu-R&TiMRFwreMo`Zo0dh(y8#=*6vLCw(B$ezUt(^z%5cOThi{0|f| zv2wGsQII_zk4oBr{Uto6;CQ_ag-mo-Xk+CQ3NCSv345hT1@T;;A9~p%zfOeU=ohnq#H>}RYNWLdaaV&NM^pv zn`gy3fEg^z^ztTe3^UE<{CMxJZ#$EdfiCy(-{!$$S%y0?3M|zJf6{$Pw(ZA-LYI7s z5CBX1EC$q=fh-dwXU9+8>8&-ZusipI)ON=*?pi9x=f{SX?iK4#M|?Fo*#SaV2gKBG zMv%QdYUNtrdRvfV`Qv4~T^ezd<3XYeHFdKUmn|D23iJ>rh6cpSm*~?4W+T8QoPdj6 zVsgu|+RTS|GDq)VUQ4>{(UbPZn3r1myi7rk~a zy1PDeBnMRT{OFU?ST@#Y+MXZA_o6t6WR(3k_h*Z#t+S$Gtor-=Mf+3p5#sEb=GC(K z#kZS6{qe?Elk!}CU;@G2;0vo=ZEhh!Nb#y(w{LBt`$0`neQGbOX7M@lB2-@JB+AgW zt_d?_B^%PAXU*%gypi!X6_>TYmBVPm0=s}Pgk1_aKhGfIPiN_m4pGX<(dN;SARD~H7N$12L_R#%!`l}ckl|aKsQPPN15D8AxYJYFF)zT69 z^@!uTkMSwLqH3jSEFKataaDNlq{g$U$G4@q*Q>)cP zF68|;5}S1yKSdq!4V-Wkv~|_2f}js{V$+R&m~MT-{Mog06sqDBP~WArC3L>Yslu3x&fL zN~jTng)zRwx*z&Wzs0|9j`8EY8Z2xPW+GmBbPPi2jDCcXU-@JhPpo$}`to2t`M698 z0l%lBD_*iEN=99R5y|PjfmnMa6{N95twt<+8pRU}!7gbT?(!>YYac-w*6v$3d(B7} z0{dI9SQ1fpY(X-l0&&yLDVB-nsdzjkKSxpbk8;rJlFSQ=NeEf5hXx(dFp_wkg}Kxo z^$pF7FgwB!p*~A5p01Os1{5_itIJK3H> zJy0dLauD&(1SBG51D460W!LZX>I(f4;ef#zpWS`Yt(Nalv)bdC`TRCE_mQA*4y73bwgnO33_PoJqX8HaB`uD6CO zWRd@L#fhwp9k~CvGMrL@N+gHKz!u~oh~8!qVbUDsnmA|_#0~q#d&{_~Y`0znDmxjd zR+U|0-{D)*Sd!PzLZB3nG&T3UUvac~L#Y_DXJW2LL{WDP(&qOC>a{qsWlhr{3Nync zNEc}--k=+2gWif&^RtBubiyG}n^ry(Vwv|FYt6tx= zOgmO)B^!#$mVKr}r?B!_lHnZ*q$yCJy3(QAFft{(N(zL&qY-zrxez44W|Kf%+oC24me<>zulot>mx*&+Ca2MfKT+xka44&B4CNvYHi=AD?4-Wp zD_N*whDNWEWxrK1R7?I@jT{lyEVn&fePduQ?N$&@W{wUQ_FomBfbUKDbf;_4ZeyfT z$umE+EwNM)kMUGxE8y6P#ZNROFmoV% z(Ai-0Rp4XOdN_Ua z%72yh4mzSJCELCYJ%x$6vl8>|c+tU^KR0k7`qkxK@o^ts8V5&q>%_}_6v&5q^?z-iM9_6 zmWiNECux&fyY6>a==qdK+02gPcFAdFR;rxO6bc}or(gTs41L?lo$7*kW+T?w7Za^@ zoZeQ?oS_po$MOjRQ>DO9fXMKy?TbSv$QAT|uz#KqepNp%3eb4XL!Bv@x==!%o~b96$Urw)D+EKW1B4V*c*v-+i zc&}Ibj08zI7{mU4;jp`%o;^K~o8c}c=-Dyf|Jj7K+U#GOJ1i^bZGZQ|?X-X4wW6!O zZ>GHY?76NPoXh9;$`=t`7B4P=z*}a<)Yvyz}!Ko}Szh5#dibDO732AoVQOndjAE@N=U%*;X@k z*ZHCXYOwf+H6Q{Od%qL1>zm;ce zdkWqMx2GS&&-@v%a4?<`i(&#GMZjsiGq0Jmx?MpTQX`V8IsR#Ck zPck#vFJnnECHvQ!EXXle-VO>IdR(ue@y%$M-KAaQ!vD;w#yJ^{oI{jxM-cJeefyO< zy1Tc(@e$~4PO{dt*EavI6Gik`5dAhj*nihnL-R_N*+QP*46w0a8lY`XzKg0#ezqK zYH{<&h+})mzPQU1INpIAN8InJY^MgGtW1DVeoSv4;GN2(OF%~b_YAb+51&}u@Z-N8 z%10iTSGe_g`1K97U}mIRN|N2Av$fj8dF}1DNe(eobe8wr4(n`eYyfzXE+jSZFA010 ztPuQfk?uq8oQU3SUWe zqff$2u0$kd{IWNX#Qy2TCqs7No9hZQiyV12^0oUOSQ0SU+R9>tvm-j9YS*)k4QjN; zXS8Svg_2ESCbYg``(F`G%Rr&|-z}O>XERDd6m67vou8Ej9+aQ+~< zMT{ZT-Mha@O>MB4RTm)3E#s-UmD-2VEK5d_!XaK;il)H*JwsOU4%Ff;-fIC@(rKb{ zpKl-9^is9$!`n~K@Shv<+U)rO2)*v?@k{vTTl^LZAReL^?JXx$@n`qu1}CuVi){+ ze^~A;q?L9aU$}Q8RWl3!vb$Tt9CV#Dw|*+R9rn2qu5;dazf!GD{`yFqn1nxQVa7UxP4&u__4;j7Wfp zXY?qkl{gvaU1E19ILtOZrR^VCRO;nmk167g-}^CrsU)h>YYINHyX{BwxacpN2nY%W zqh5j>DKP)HZ}}`o5{CB`@ULepjU2Zt=~ia0EM}L*E#=2oN7n8X=nH&{88cXr5PEM> zjqFs!uG+VY-Zwwp8<%169Z60SjW}F7XlZxQn%Sa>mp|Fg7~C;R-!O9#W|H^bN#z) zgr*#ls?!;wk8NseD;U1TKtbgNm)H4CK@0eQG-T{l>OJ0F30~RYC_(XwPg&EbC@_rZ z*bTxz8y^bu_k_^wee6GxxQrqpiyy8w?21iKm;Udd&vc3bKvagIskzy~t~4Hqyf@|^c{^v&X>wV4t zClZyzxbAGACpe-bsGijER9z4JTy(Jr+iib6j4!{J^WW|JTQoS}C5hf!9=?D#L~=th z=`pk_C{#9hzW;WqWY91fbT4Saz{)AWd5ba{@G5ijV+I`4aaF-go6z(FxDulbBBjfyUfGu0)K$k&2>20z3} z!EBJ|Xgu{)tSBb@VefxsUlHD?l>ingiP%VC*CIAseC{j9=?9ZX%JV+_(&Qc98(z>O zYN^tBj2rK`0!#(3_uOC&%cn1d-5{3SWkM+Rz3JI61$r(!WYzI7d&o00GcLgWT)SLD^~5kGK|!OO4`01{{vb5%zZ>lt zmR9tHfduZ@SY;WV>uksm%z6=U`0l)RDs-+0)b0+j#S|5fez37SL(LhXMI zh5|5)|JVMncm4kwBLy_sMvM+mF5G3T&ToAJQo-@AHU~=95A@gi<4X5cE5#k0Ov2Rm zgsf^~Kk}2+aTn}YWc53;h#QOzt)&g!_E3nL6J5SdWTRhLXLGD_BLfEyc=(6nyw~?x znVSoI=x_!5IYv-62+B#fypcE|dt<635pWz@sL#7A)jx|uRz*T~9A>0b>tOfw{JED| zy9dP5?Pr_AYp}zyxPYEG7Y)fY$H*_^e`T)^u%6HcWp8pJ5KW!CD0*!+p0xudlOpxM zG2g!ghIzoF^HD?S^Xj_|_c*KOp4rERRYJ`s;x7dDCAh54f76=+KUa(R&sIK5;i7Qd zpw$4ioh1)czHG|0o#&Hs?6Vue!HHU)V1X;2>4C#@Wu4z#n&!WGn-;H@)v>3Ro=LrS z6!itju(ghtI8S_5hJ*J6(#+ArU)s%NsLPF0Vomy%w{gC|(BqiQQ^pPpzPHIXlB*Wq zo_{}b&n@&(-zXM$Gsauo8L=VDwznyqx<#q>Q3}GDavRYZI@c1ltU2G@U%b>~Ws@De zr?m|6Z7^I6#_u3b?kVjx7e*6d(9m>il|9(Kj{c~j%N}2 zzIspbG#|M<6#+jeNra1aN*q$FjpN^JpTwsY(U-v3)N6Y2wVp(inM!kO&-3Zdg%y+U7@uX=4_v zOM!(+7hif&i8?e6|E&hRuEmEf-I2=;kY!g%E{8of(I+AEy&1bsoW@nppoP3&rn|`f z1=Kc)$D~6|1kEnGy${3B`(@imXh@nhFu5CU_!>g2)LmF2LQ^r#(~hQ`ZpghMO)@%; zZ=ALD1PPiCmIztDXO-36#_$H!taQv`TQicsn{TNJS_pPi`k|??A5(>fzoYUc-OrlXq zi2;lgGvX4@*WD7GN$vSDg=wcGZ}kp0T}eNKCnrZQc8X3$KVkETj4i^{K z^#?`0(@Ps+miC!556Bz@+g+;xRf3c?f?$6+CnG#TNA5D-lO>HPx*pq{Lbsjhq+m<= zT(E9*t2N4Vz25)A3%)2hAg+-(n~n)xT)BnFc-3l2*f%r;wFU|*0(2;~)gFR|gqACm zqJx$!+T*OZhaROdrEI@TvxYQIY!1WBc*A|c6(8XeGTZxGHV%~5mDJ%^ldAPa5rVXe z^UKa&wU)Jc2`kzz;^?vtR*xD699GLEsflxmoz1p|TPKYM+l2jjl2?3-{_x_?;+&hP z&s2y=myC)ej?DuLsr&X^4tdCH< zcTX;dmu{g{t$79_G8dH<4I_W$OB1l%?*!DZaIhSpW~YB_%!tT|uYM1o2p>x*MJ@Ie zyaO>sA>Z&F`Zv5R?iAvs7v^vw%)JG?INRCo3mbEF!#a-+#=^`pEpgO2Dqn2dOj4KK zgqahKQGSj@mD8EzvHVWK^iYD#D5|qmQ^;*FqdBL!7KjpW1b|<*?@3Mn#lvf}UFjtZ zF{`eS{IhC1uT7)MREO&OhvhwgM(WJ%lZ#1qU7<&=sYsXjam)~|Gd>Q7SI<2@TcNGj za!!>u&S9xvi&qCPb04zhGlqNby&iGe9{FrYKmI}|{0b@3q%O{!(x3=G)S{%VE7ES1 zgP79gj{s-;aFg``+4sYD-#M(1X9Qgy4I*?Q$n~^9qI3je)bML|BkEe~w9tNCt={#P z{<@PR+LBNAFbOr|D%iB>8{#;3id_A^1Ya&@T0T2&)vkfu?7be#W{)wmSwu{w<53mI zbVR=$al93Qc$(YWX);EK#lM6xZ}3s{$0`w$e;OchB!tKDfOjn^7kez)pHaZQ1pj2jtK zqyY$X!3Pn!4jr-alMQ@B6V}^-!>cQXrv9~EOr^1 zlsw9RRG5kn=`xi%l%y$}67!_&VlU5o(h+p9K#)_U-s{*=&QH2fQeUVayLajiIH4wFE>3gF=v65nd7l$ z&~~FC^6C&~#eQjn6OTC}*Q@6JcE0Ukq&(jWgWNp2P%9}>alS0AiiI6pcY~&Bqoe~C z{*n{1eiqlIa*K%kh0nGV0YO*8OhKV&1Yy(Nz)HQ#t6N21KpTsIAyGD3!)@F*6|9-= zxp1kr_H-)+ARvu`TRY)##3trIF*90nn3?BJm8KLySbva%j*smq45e^Po=U1#*3*5) zzl*X{0)2JozT;{x>J{IZ)ztec)-w$^o%q{8f%}5SxRvGy^0oh2V+K4d6AaG6&(_c> zu^`BbEfW&|#p}On1fKbRoi!tobu!>H^V-487lu)lp4Wwlb5&=u_Dv*sGPHVc=3fgj zB0lbPB5L3Z3$)(606aE~`K*%a;D@`Yx>e)us&k~ZsrCCy(u40fs0&o^vL&f*kpCKo z_(M@@GcIn+UYo2|c#av3vKg-%`gHqE?%@uyH1@9H_(AW*+Lj$f@0=fini-gROw+BH z-yd#AZ2jE{P4-@Wx={4LzY4yi6B}UFjZGkpt0c+VlDeh>osR}HU-ic$ATA7fX#F;2 zTA<;sH)@b}KNC6I+^#Zwi2C*Ni|#6UbwwaqXR19-T9TF-F;Le6IK$7rd?g8`qT2$D zbl@O%qXGJDe?6aE<(KhbgZUoS?5=cWZgYbj6Y)XeE)FX(`H^Krb{{FG54fo4Y|zcz zs{-isH=7_17kQqo3(i;*TRP`SDc^Xr>pva%4{4O&b6;4EG_OpWrzmO@^7il7syk4F z?w78{l>}O?+C)5Hooj<-$YH$~X>*yr4~?#+!e{od+G-`U#W4@#rn3xALdtZ*HLWVG zvFmJz*HJyBD+Vzpg~w%L`5eB*{1aiQGUJ$IJIC>jZ^al-!lBe&V??u)>w+uA0rhSG z7Gne30b*3}r$Z0b|B}HedbA-Lx-OzcPVa+q%>8QJ^qZ!uyC}ns5}&Vk$knW*KU!Bj zV*i?y_Tazx_Ne1@K+*k`TeNM(yTvq1`W1<}!n>jf5@WF>8TuN3A zzk=U8%38O=eif=4i!m_jtIy1-x2pWjnVI1E33%H)H4z)wHA`)j>B-IACrW?7%FTAx zIk?)};t+5DFLJis<5>iu(r%drE>)4mEIvHa=et#QTq0E2bNhZ38;sYZkyEBFVwsWa zwbS7`9^vd0$!_e{@c`};>QGr)N2ElQ11$cdrfeNdr1Imvd$3+CTb9JeI%PdPL9I_M zU|!(8@7EGFU-()~eTWon21~Re#mHoULPAATQ}Lu&n0HyfKF`I_XP$_3ftKQ?5x*D} zn`=p7pm5dN|1mZe;ZtP{V&?uBsY$WUZ`?;u(T-MnCuaj%)eSU?^UiBZtF8if}0*k;q;0Bb?8~c={Kvqybpp+n<3zk zEa)yR^>$1qDJiexL2r7n#$J{Ju2&R#iRRsb*!*90(A^Pq4L5BN#gWjh1){~-Yavyj z)c8kbY-zPn6>C#w`gGeLpa-XdtY@Ip&>8K-@400tLc)GVV`b+;7ZkpAeqdA{B<8zo z*TesZxwj08tLef;AtZr>00Dwq0>Le~OM(Rmkc8kCJh;0I3GTt&g9mp{(BSSeID^|@ zGtA7{ebJ(aH}rFj_9sPZ~=##YWqB*U!7O+ z-(w<#Eitc#Wc&e-Q)!6;zQ?K{rj2;5bI8k6#3L|0{wp^Adgab<694!Bqmi~_nmi*~ z_Jq%?EQKp)D6?&2j<~xIJf&uil8E{b@|1o2d=>I-$udu9gXSu$Q#3Jtn+kr^L80*P zP0*lZydS<|k^m6E-v*_?8+%pt?+lF@{Pp?x``>?eH2t^Ze{r!x=nJ5}&VB07K;4;t zdy(q?`YMf4%jY5S{P>@*+&}Ls{xbZ#lUN!*F#V8db7+3R9c^>eTW@cC{_~OOiAgNC zmQ3bP?uPo+qMvM$&$s{W_?%1@2bW>_GX({n*07VofRPiHANg?8Tq~Lp#plgx$yh@6 zn|(#vB-)LCJB*P^{(3!$Q=gw?v5InF(|sh#`sK`YoycPIscuHKmU?DB9vNoZ@Ydm();a4B>BG zppbSQ%fT9mNTD4Mt`oKuAt5#_yIo(Kt~gOWY|D}CpF6pKA9ExNHXhaFOVhcl z)T5pllWB<75HB>-<&mlK)GsRMn0WUvuKJ8^LJopCH!>o_Qd&_2DIR72I~c#$*;kqQ zA0Ht;D5s{KD-E+LhG9bpa{sRp0t6Fk?6&1U+YJwHp3N>Kp*cSpCV{{U+66OfXV;hz zx(VSx{&%CArYPkjq68zL>QE2SD}twz0y%MiUA?+wu#t{ULo>?n)tDzd)wM%?s<8`&r@=w~ODa>{eXp&c}Ja-cP^B53trKouP#M!w}hACI|;h1!w z&6+Hlu)oc`fLQ(9JRU*#u@!@w45!eC6+1KLr)UsR?4v_LQU zam_GJH+b$Mv0mRf?QP=9>grXz0Ju;GhYG|20Bg-c=S z{?Gq%$SdB21S3LKC;o6LXK4@yuD4p?(SDsts7P>01S_eVOLkFGrUKrU|{aOLpmv^3Yey?K&w^}{8G=GEWCcLxm#U(XXP*!6#4;bZgd{Mp5QZI)71zky4^8g9$zxV3N-_)Y!RquHK zH*mC7^gtucmc5D<6P3%&HrWzX*Sl2F_1}pmijL{-IOu(^&h0W+BkPRY)xs4mC45wF zFT~C^2l-K#44_+ebAhir7SjF%yH^JBZ4Mc?S2itj>AXbp&+3$IXGLqPzRi($T)2hH zJ*-Jt5OTR-yjnuR{|(&$oa(+ZumGjmifs=*=T!~PZ|abxbYZ`WLpan&k>uDim{^?+ z*Ay5>?x`S|#LcameM?SZ9cft$y2YBk)D+!9o<-~N4ZEtoOMNtapbbw`E4fEro$IH+ z4}c13HlZfl_XtH;?>)q9qqqmbfXPd9b^wD#!+Sop3h^`M0}Z`OJus)11`_mht%q7h z>pzc{E=uBfMP?;yd&>ZWbCJEMqo#IM!QuD(`kf*yP=KHZm3r=ie7ntiObFT_52 zwD1OjeOd1t5{p!iGs-u;^>q@7`2sIe0_Lj8d%K!6&Z8swP^8^nR!uh>nFaeaWs!*L zC^Sim`!)JL=Qk(M-P+gvU*hj%dZH3s;5_ot_E8ZqvkaBB*)=eaM@8UB!%(z&$L~K zXpD?=KI7%1Hf$ez=XYjXO=+!tm^J-M{e@TLoXyXNao2Hic+*%*ggnEa;BcqBw%pb& zv0`7nMr0n~Gmgw{C61<-;H4TLu`G0*#;>Xk+-;E76`l<$jFJBZ5iE zj8#{cS8iGG8IG@?<-0KhrLWS17qrgY6EE+*0iYtLQ-2aMasR9qJG`RyDdYcO0qt1# zY74fN0dL%7U)^*cz{-W~HDC^@Si~!cuWSE0TB~+`Px=uJwWtajwPZ>3liA;PwFbXB zd-&YikqF#fTJKb9=`Xnxud4;P^P};$b=#(XZoM_@nS^V$Q1fMynQ_Iv>Kf3Gtgthd z186IDR()f_xB_F`obPve;93%q*BFMykPPDeDy06}?1JJ>fD~k3W##P#2|8H0o7C>9 z3OP6(pr~=(&z7fYM62Q;x)Y^_uPX@9#*B`Pi~~!u(QIPlO?1V3rrevo_l9;u6*Du| zsH?{qw@M?_1uC5?>sHkX{4hUt$;n#Q80Oa0ki5{t6+E%(BGY9KibnDo4y{Ydm2v{tp#(>fwRXRi!@y9XQKtkE;djgBf zEA^L;^{DsE%}3}b!eR%xM0`8gT^{R=)>_=~b(sx(F(>@!B(S^MKqf_Pz?-Q2mK7Pc zeBt!4Ey0HS3vBWnBN->OcDpwRMg2PRDI|$yltz&pVO^P*B+~z<&OVJ2UwAZF^r z=N}T&v~Qn(DccvfGyL-F^K>8c{#*mt>?948+Q^R_BnfQfvXUP}h9MMAF+-lFk%bdu zw&-xRAonekx}J@ZSl>hY?C#BGQU83%ihvAApf%ay;0-r$W0+X#l2hBDJusy4`k3zi zx$v{r6y~7+!GKCz$6BOMvGgm$<;$c8B}z9^h(R|F=+&deXDvLTwxYZc)1F(cHF4J; zf)*XF8Q+Po&R<*N>aAD#&96zwxxZ?0&Uz+`I*)Dfd+S*KV%ZM~)DtI>Fde5bP7v@# z8ue*(fVYJM#i^)2vxkANdNkyaB@GntYe$;t5@O%qt{TRdJxDb}ZhPl$MQltW>UlS& zL+UD0ZlBBN%}b0%<6lH9j$$fYy^LpHGvBTxPJp zRF~QwzS@ah?7KRA`#DvMn8CZsxNogCQ9}K;f3Pb^GoIlfZ!xo7{^v=|S0oTi#$(xA z^Z|gIB3z%-Cyh?PWo>SKK2$ll{p^69YluMlc5$oDQYAn}H7bN$=b*iQE!#~_Sc4gO zo;Lgic4n%z6iKxH^^~;Rd3Eiak3r852cOoTSfu=bVdQg2ghy*VG2>B(tkh#XR1##P z(%#PNV=TT`$WJZGZon5kQ@`eX7GWoj@8o|Hq^y~@5-hc@zRFT_8UiA45sY;Z zmGwGiKV}r(dZ;A0l=PHKMydIavjdw|i^j#T!-Cz`cE8 zFUp1*z3pe^oo}!ap`ja)@1c`Y-+US^;NmN%Ud$QOBbZ;CeLQD>OH73IxY;5cSR!wL zy0&}>-X~94g@W z;`c&3RJ8JnTs^>-q3qHFa>%6A4$*h{-R@4PrvqkF)9RA_H5Yuo+4!S9b2ft&Bh zjho}O#L$HnvB~ZbBN>+tmZZea=9|37<$bM50z;ES8%4d8rTC%GTtexI_`*Q+VNLl) zE~8px5;WAU-papP)i{SsnOkA!R}$b7Ml?k1q@-1U=!0#Kdpyp$4)&ow3TWw7g>m!mPbFO(Phbj2(3#J1ad$wRp& z3(yO`r5@@vo-agVW#zn1>w4h2+4~ibfPy{J(o~`|S=X?!1s>5;ciBn7mEzz^?}TX6 zAVlxKd2pzjjcU<*uW;)w)Yl;%Q<%b7_Cp|Fq}oAiCiE~Xv(lctMbt>)*X>xuXq4$w zKV-0kadXy#rnIM^v=dpei%%hXA0|fOu?j3@3>=`Piogq<8%_L=-yQ9B9`}tiTHoB} z)a*nngtsp_Q5|AH#ft^EN|S%@lVGx?Ud`6iHI;ckrJN#cCBs)ya&GkEGc$N&kDRjaKK9rzjuUefe{4D4rOg2@5FGCEQ+dWLCHy5i;AbK=M+`&rdoZ{Fu3nBlVGb zd*I)T6?Se!D1XqT%LS7Dj)}h_81U6J2UKF-j+-iS({wXLy8YdiPR??ji_f`;D%y9k z7AKinc%j6fi0d|yGwsNHwBdUg%Sjypj6yB=9#27Fh0j`3=*Yx3Ld5DxZ#9UUHg>3#jXNEty|?)!kM(rXr`_NYJzk6+fGP`$)3m<*>-9PWhC{7swmN zi4`!349jnCS4-eHpnPFhqIZ( zGd+)*3Og~ZS&rjf?Im)_&(V6+v6tSC+yH^G=!nn~sjs2v{%-;PGw`lvmBHU2>O);7 zg$Ul46K(Mh>NoJvCfbWzCseTfxzq`4vQ9ckO|`JbksSO{@hjc#FX6eR5`EdQhfu}X zfVpb|qb&i6sj7?)&M*mClT}E_PNK@r))v2adaZ=g=4GfJm&V{w@JNXJQIk1M)*c7D zp)0Kr(YdO2&J@?@*WJ0y#1s#+2qWu4XOUgJ`q!H>EP7#?NkcHLv{8N9a6d1 z(O!-?=Sh4+Q96I;px{gxh^0%-!p!``PNTEc&Quqd9E1)O_Pai zPXEVOi29``l|7SPXN{({{AI&OeC^FQ@I9H7IuD8LDB-`ofBE;KSprpgf3TE>fSO?y z6`R$#u77axC}Ar_Bd}&sUm~A|e~LAux&MNAX@o!-T6H@1NjjDJSx{%V(P z6*BUa#m26@Ul5|9p2Aet%%;Spqm1?`UMU4Dt!&_#XNS9L1!>Fcat;H0q44a02V;Yq z*HeE_)TG+3rAZ2*QKY?}6H_TR29l+2NF~e0?JIp8&+E&}69@T9O5>PRUNa=s#Mq-j zImpfn(X&ME#w`V;9GaD~l$Pi9?7mHhxp!h~VZ*A@lhI-q;v zorg*_{zW*x2vXv*zr&~EN+zddf76TZ`7J1FI}9_G!`S5F0!rh|_jnB3#Bm#BjT^jr zd`EM?oZ`|_2H|fLB!0MmOeXgB9y>X;o8g8J$10dkz&xGFFvgr9JK??~5c5di^}p_2 zq|dbda(kFk-pM-OM+fo}eo{+xnA4@BGv2~6Ay(u9430k2Jdj{wc}&0ZF%?3@yKxm_ zgf~7}PF9^bCCy(?r)EFm44~eTK%cQqXC)A)2T6#Hy(h;QJuxAY8pQI>ywQq?UjB!W z4S!u3B|WSj+$Fz&Si?%_{D z{~{&mhE;RA(_@;@V!T($)iP!Z%LD_!`FyH;)_xsLk z=b!cv?{6jbyMO-g)tc|V{oi|W<9#&GKwS<-;6i7uc>)tWY zhX4V(Xxd*1Nc=b~j_Ol%G}BVGE3v|T1-)i|@vmf2@P~J_ig}KCAbpr!6W(MGv%aUEE&BA{%)Ksn1l=JX#TV~|; zpBM+=w=Z3HsZnz*64y5mn2U=`%Kwf_*mezl=Ra70nx2|6s#_4dbA#hc-YP9sU5wr4It?w@RuF$sYS?v$p$zuswlcf>f*1aq$BLhBR;oNpyh08kkD$NGZ}PPb}`C`K|OARRO5>{jxikv}f;M zVvM0vkJh%gM*;srX<>zZ0p_y*>F72NH|yJ}Z$#?EF3CMJHi`HyoV+IwK#ekM&%e{jCTS-+{n z%*aWve~mckuNMf75WdoWn)TFS9mF7WmqP<+e!fotmO!_6CSdbrI~&R9%#-tFYtpzK z`<@fWFj`bz-W*S=BFyTjv2JDjc6}!M&zHNY1;}IYd=>2#+GOD<@nbuL^NC24t}J7P zo?`jWlJt(x4raYBRgFIhMHbGSWE({g6?dcp8k7~_uqVG_x+K)q)L15Q^3wrdl>L0_ zOsR4P1KNMC!Mm#m4;$=^mGE?~j4bn+M@&GWQz8w4sWJrx+r7Q5C3_{f$JSb()*lwg z;Xd#k3yO%qF;bEul4&8jcvB`W!pkR4&|u3r+E%cj-_*H17ZEHLud{i(PFOEr=aQ#4 z?sA99SU98oGY~Nxz#$h>{59&^AI2h6^pdPVw|k3x807BY0ff*A zggfg1z|fP!x8DkAD)PH+EoyObr1d9%&^cQUH%TiszxELQsh#zZHq!N96SE>fX$YN6 zMed+t*zwWr*#^YU?eO{l5l%7^mG&xuX(AFRT*a?utsdWQ;u@MTaEw>=7MIu|G4r{=6}uIf1T|c@ zl)9p5Ks_t<42l0}IDYzmei)L+bMqpimve+}$Ip=08x2HT>x@~R9A6Fs0>V2$b#PE( z;;kGpI~4>1?ZN{CM!y%!#6n#Xf=_vtC@?4d9&xI%_y?eOmR`_kw5N@AFlp- z5doqK*t-0DPods_W=4Exld_m5aahC<+FJ8ISvg&0m~*;Kw{k$C`Gf=_=~+jk+b(?@ zemCshACN!K3uY(StM*c#zq_JL)1Kq``-XnXIiZjJeAjfeuSb1x$bc#Ya4=3gG2u|}+*YColIrIL$&Di;!5AprguO|Q0es%WO<0AlEuMS=BrxFiw~P z1F+(z<@fg?pdS<3fG+*i3Frg86Rw^LPI%w@czC$E3k)K6Nw&!4O?~n|aU=oc8`EGT zR?3eQq%7wejYm$+%mDW0gpO(azkMn11oPVr+sbQi3QxSsY9NOxunUcmHkT{E0ma7w z6U`vXQ+1tb6hldd3GBsqzX4UoQ_d;L4k+@vw-@#g1s;YY$qPG%Fy{m(3=Z!vvjBVq zCB3_|jH+9gr=Jv{vHYXIV90?|CJlCZ>(!P2TGAnp?iL1qmYwPceL!W%rYUCXu8mm@jqx&NFt_33xNpj3AvMk4bhM>SeVJe7Eiy$oK;8tc64ZvN$-HpOARqKApMRr z=RMqPx6^a%%BktcXp%IhRZ|L}X~3a=Y#B??PhT2llL@U@5yl2obEsBgvoNRwtpGSd zj~(9qn!hp%Hh?u$0CW4n#iee-;9|ny8ej`&))K_m6`7oqvWkYgo6;lbIsbhV)3Q~)! z6$T=3zE@-&A8dLEEK{a;fEvc#i}uzZ6jy;z6jOAvO36>*64A)xrixMh=1=qhIgWeD zDJ5x=zGt@eeI6^sMw2Y14)HmW%|BDILl~mkK?{>O{ab@c3JPIR7<3YbF!HIxkd2N)!ol@fsLM37v;sziG!ggQ{ICHq87q-~7?3Wr z{U_l@@nr5gs0gJek7l+)6T=6zPEV^Ej$FfEH*H86s<<-`j9#lJFcy-$V19L5adT zF!8oQAKkmB35fW%GaU$#&>5Nl3fm_3A)_j9Sbrb80K%hdA7Br6T!l}5;z0IJgq&Ac zX}*5N z6g1y0D-4fmrRsdcY5GlZ=EXrOX|c)#%>+o8>rFg`t2gv_)HlbRu%~Ea8)0Els9C8= zUgO?*gD7gk^S0mu`N&SOhGlZs%Y)rZcm%1#mHowAKtOm3nAxNG%)MUb!3?w={SopD zn?5{CAx^uuEt#b3S%F)u@7cSQr45Z^Qfe9>x6X=yBYHRo$>lAJ15*Emk^ab}(j&Ep z#2tbbGcxP zm-u08bh5;xmx{oP8Gu|a59X^c;Y(tk2O8$1_9Q^it*6jE++U^dC|(re?`e7TYDH=% z_@|E!(LdC|4|}EiozeFbjlf*E%0N_7noI!q`*Jm{hW(AklX1FOr^v~$$QER)AmN3dANLWd<&{Om{iO1ajoqV2j7fTcIE{Gdo=`* z18B#_;;B}AQYqJxQgB{!Qi|# zSzci@j_ou~Y%h(LxSnq!H~kXNaPs-x#2H7#^(5c%ih<3m_|%?Ax+xZbeBtr}XwZ1i z(rLN1#Sfe`R&6r634%Q5ub{4I>BO=pauP@Cvoi}(FO#rV$J?{f+ z-TW=M(Y%|JAuvcKtO9vGIx&b+D%Fomw0DypdUkWfIK912rPqr2`qaW{sasy+{ov^E zR+i5R?A93_O>A?jI4+JlB<&_HtA27vL@Eerb%pCt$6?TZTZmI3c5N_e1{_12oAz!S zz_1$tfNU)`=LgMn}$H}GRK?$U;(Vp%D{^&mUWq;THc%XuWf81A*JC+d5An#gIe*^q?I5S3NUQ(Bbc`=r0svQT(1B#c#l<^uCf*xl^3G#AI57bU z38;7gkuP~n-$NXP;guf@A&WfDJ=^Lh*nI(rEc1_dzzWdt0DSB32T|&OVWAWEJAn&NP0 zR$saYZYpSWk)XmRS;0wIkpXUP$bkZHuplWmq707v@67rYTfxAB$FKfuc@2E%zS2mPP4 z_}Ff%&|u*u=6)qVH>ct7+{oDbQD@hK%Zt1z?3W9`Lfn)GUKJ}`pb}zyv?CTP*NY(v z@bdzeXsWXCcF;jIHEh3>MxGPl`;3b0ef@@}lK0Pn`TVV~myfErT~v)UcSjmHm&Gh+i0;41N?o^pe#eHcVVH@O3}FGTvRJBy6e9Y@~vMw3{rOFHNr1$79htVvCGXw z`))~cQCKcVTnFv+;Tv7|SfjVf4O);PsAalu3*s828#&Z*7I^u7>P(q&Zx@?jqTueJ-k?k8Ywnl;QXW-?LB`=CILdsPMs+_Sl)# zI7;hxgqfWPU8T=mw~^>RmqDOJr;3mu~5;S zlSgYHbLRt`v!FlME&ehtYXufM;!C>88Lb>(z7HGy$s!ms^CK>-NkrS`*7A$DT1sho zB!_Qr_B;4#JeUhB6|V7AOM4=MkFc*$uE($h)^PE~N>iWL`R`?VMwu3EN}dh89~N}z zf-YhvfLwnr&1glmiG50E2V&+nLlLg5#z;R|y$4KJ#^jgW`)WFATTm(xk_Oqit?xdV`9M5%cN=&uSEL~yr#w^@KS zFy%ECLOa0m5bMV@@RP>Y3rs0Y=0GOqVW(RCBFA3RjW_;*uaaomR^9b{o9fHPhqnob zJ40JA!7mXWC{6()e&@$n&*ZKW)R!eLFL!-U_r^+MFIr?EacdvwKKciT4*2T~E|9j_ zE{+p|HRM*VlAAA&R#`R@-IT+HsHpxNEuIlx;#)3^m^HtlBBw==2_fvrCMn1>Py~*d z0h8N<6Ip6za1Z!i>wJ}uPVaV0BE5wf@~kH%Y4EbW?X3UJ-4;!9CuuyJ46h%?J$f@Ylhf!k78%9SH;}Ig9sAmqp9MXO2&L%UGG(+B z@#xMo0Hu+tw+NhHl#O^xPi0E5=pjfl-%?Q&`$`k)yV3SREBq>UWP^M0G#(}^;`vT( ze@;?A;z$)2a6F=`Q*auW3(OE6JDCZtZUccp35_fT)sJ%?u}w&{ZDp4pzR7o<5U#rt z@7fD~A`qc!1riXrM9LA1Ce}Op1Di(MBYNQ21GNvdq*v%K1%`A2|PM7rR4@c@_Zerz?miQ@OJJB)MTPHg)vymO1-ya+Pb{mWsuyH z4f#Q%@+46oCzVt{z@yv3<6BpZf59O7UX|N}L^7U$KQ{-p*CUOP)sk4cn?oFp#=2~7 z$>Jw00=rJa9@#Tgygqt#FgfMfkyLy>Ihc`%Lzk8g!vtuqo2w=>TFi>A>`_Dn0-XGc z`C+qz{lOC1=~|M^&QQPBb?MZfMKu?&KIDJ{I3q340x~IEqvdohGzJ~0;&;WtTbr@s z^HUmYI^vP4r_C5g#ct zPmA%zUdJuHP^YAh%9H-%;Lu5fc>!QB8bM5Ry;4{0{vtRcZxLPcDv*KU7v zCf8fck^U-FSy*qPIackRK{PA3kaMqWzT zwJGUoImkBt7K&HngAfY@-$R2sPT*yqITd<)Z-RMluCK8K-b(p+OqkGg59gqvojBh~ z>$~><`egZE9Y6nnz6jX5E9~WNH~Le*=AKE;=%84f_?6R}Ug_UBD9=bB=~mG)#wP~-gFYTbo|WnK?B9lOI_GUGz=WBr-N5iu+Iaa;3Uw= zc1wP)+ha=S(P)snou>WwLxTq{Bua}0x7lxXrJ_2rDfjk9viP@-Z}$s#N&tODvXILk zN zShTxH?C*Gcv!!x;G$F1rLLJ-Q;C3Vi?P>6Bi1dVjd=X%r6gjKZbQ6H$zZcFbF*=B&X#5RZ-H?e1VfgC|kVO ze!E}Zd`%-0g-zI}xVTH6$7*Fa^rHwG0W=YXe>k9dlK!MA40kG?r8Z znG=ITcBrK3CHU?fb!%M(f=$wLeYc=rJFH=|AWA-bMigRp?*rbl&@UBTwuQ_KywfhZ zb{b|qbzLE!6BNJi=N9tQHm$hZJZ8hQI@#q085*QT>8|#yl6&4BYt-QQYUm{4F&_4= zIUF*81L|LL>ZJ`re$hW;I_>G(35tw*B76}|GDCwC1wW>V#%u6-yVG$EIb4$Z_{Zf+ z#TUM6Q;4kFS}!Wz`#fuIxu}7hzOgw~VUIwa9gnt~TOZ=oPL$Oh--nCbm>i$3I&gKt z=2r~W$1~26aDBB7+2hUT^EMaQP;p*RKMJ#`6n0RN0m@VO z!B?%*tEF|p5FfYUrNY$AO)B$;E2p2&{PRA&K7+GLwDw$r09ATbiRlA+>ma>Uc}^$i zt(Sx?SC{y~%vbZPTl({85Uh09yTkB`p%>4^w#jB`?wqEr<7Q*h1%tLj0yU0#dxkn2 zDUZ{D;ZR&Hdwu(HDDVX-2XA|I+GF5i*Lq%2fhnzg*wp+;@WBecm<-j+cJ`Z1RxaLm z9%jdIJCnV7l8ocRu#{8?4DxV=%)=DEN3x|j8Oj6l1T``t_OrOb%X-w#J9wZo$)cKB zb}qvG%bnKqaT1dJQD_ckJKcykbcF&X&Tb=wIF@LSxtUd2aK~eBt~<|oWj|H48tnw0 zP8vA2pQ$JWd+zzWAz|`?P}~j1Wfsq`UcT2G<6V23=Xr~^C1(_4)qU(&CI0)$DL>wK zLFFwn4CacwC@Jn8BaWLwQ-6~viJ)@5%!8lp-uFFAlCWitCFm|0bwpkFW?k}{5E+m~ zmw9Cb}Xif*lsnH}W3t9d&c;NX}jeQg2jrJ-)GZa(gpnhLZm${Ci%PF)S} zDeSlfz27ePH8l(TI4-R*`n-u(sQfI~c~m3?72Clxg4~ZBlCYIvT7X|##ogS>ynsFE zf8GDRGRLKt9R$mR`nYI&DoWhu^lI=*^tVgVq$df&3eMpxF-QW|lDPKaSdo&u92Y(~ zz{<55xZI@v3B^vk?TS%a#PdGcag#utv7R?c(NKQpaD8|m&(*g0dNWTiE0bk871cwu zrlA45k^sTBPP;_52L_R0PaGjmPmfrA`HrL2(oGyGs7)KKt$0JK*;CBnwJjhubn=Fg0wj zcVnkr*z}K>?u&2J8|lmK2xmCFZm7d$UHFED`TE_#s znX-PqR<8m^L*C1uWc;28whXu|6l<%x}xTu5+YY% zcK#Q$jD$5fC7y4Wu)0iW z=&@&{g!S&5sDnN_YbyxSZlSK2WKOjP_~9%W>Sm_}#K9zH znAl!n4LWDS3=Z99^jHcQ$JkR4Uoa8mK+#`v3i*@ID=O2Xp*5=CEm)N;Od6k`z9vv9 zlnZ1-w(N!5J6}kNDcU9Wf}KE!F4nDJ z#~S2~>113Ebp>uLtymLj-@NnSAFppw)FsU>CrWS9S(x{h`b&{JYq6&iPiUwZ2J9kR z<kEKbo~d?6en`PS|;WUI^@pFdgME=h;#% zagHIEXSH3lTfn|HMA5gj!gqm$x;BM zOXhoxu>u*AaFlqYLe1w=yDz+!cs!~|siu)Tx(tNSyST649=jl`&p&N>I9M(B*`c<; zIHjJSlCYsqcWCpJyHKoJFo=T00Aes{hcn0rHH)`0GoWnF!Wp)>hr8A4)VLATP4RJhH>w(rBD!#pYApnuzxlyYITrad2|i-Pdojx?sjGu!=c3#U-?EPWUyUg!C)8?%#0qSrgSFH)Og=N;!UfFV zj#$WxfFBj1ukVA7CFt%Q-_RUBo1VpV0*ido=Q}~lnMGP2k`}V`6#a^gu14waS(ctB zZrK5;2Qlbb{M=xpV5I&hK6}4?>Ie*fm^?_EO`}`#Lh8zOH))SioV|(ZjckufL_DMO zlZc2E*s@Nk*5Yw$6Z2brto-t$u=gvljpRk`W9OqdK-Xg!zH0X>y^R4o@3(~#+S;Jj zE0iEVc>p%7mRrocg$QG6-`stY{qyrH9{q$=G#>;gaSnmM@ENIc#T47ZlT4y z?BOEXK5+x+XKq>0Y4t1Y_Nx{;ish+kS`fN`OcbS%dfx6qgF&|Cwb%qj2;6p^6A31~ z!YdWIh#m&Dyfme%fAqZbqXtz`n1|%D{dWe&o45^n7er?VMTPnU1-b{(nYV2Y7&l%3 zw8+`@1oxLtLi_o+c?WVl#P?Do>qx}?YRn-<6~%ZqPz(YxJn^IT{HiDutjd2iI@F>@Xanm$AEvaOZ>fQAJo;a7%wMd3)49w+hbQ1b{?~~9_@w*-^ zR)D{I75o96PwCxU4*gz=b`@IbY4Sm_Jq9tIt!PQK>@2EWCS=lVi@u$VYu(`logq%6 z8T*i$6s&k3EEYa61K5z;DH%80M>KtAL6a}@#iM}~K#lH0(28eTb9HA~i?DETb;-l! z_3ig)e)`HV^iRG=@zK$uF*ALAa*eOa_Xgt_;LmMwAE5aa=1BvG4xs(78VLWZ6WZ;4 zKk=8q)&gJztpi~^cW@sA0O4nKO8j+Ab!SxgC+pdNX|UYj0MLd%d$1cV1W_Vd;54`a zS#k!VDLpBxW3v1irdv*a}vszm$l8PvT`aMApds$n-%P|fBwTBlkUd%}*T{zzMOfd+>w2zzidkHV`XW=! zZ*@BNe5bVJ-p&rK&remBS>>rMZ0E1hDnR_#o=kMj@CIbIV?C^> ztop2V*W)$|&wxX%Q(~nz+IeEo-j{trWqSczN>{06JZxbfgbh-#)q95GFlWrj5@oTw z&bbyM%b+A9w!n+)^#NKy?4sv1=~DD8E9sP9Y7{nJCHMKN`FWTGv`RTt@;SMy`v z9*%!OZ}@0&-P*>(;=_ouRI?zsFyr}{{KvN@sB7GCh+N`JY+d&7j@%3v0b8%jvNkvv zj(FEMh>mSAyoj2q=nE+oRrkwXoV|wF*0?yVl{HWlls*|PohH91xu-TkoiQ_Q`;I_o z%XN2L6c9l7@V$cBx5gE5w4(He&G32X+O%e&WH=Up{Q0E@c(SxgSG(HQe&IHylM_&B zf9v}ts!_H&GN1NkJX@aECTZBvz}Kz^<%xXRZCQSd2BWB2&tHG8$?7#eFmD_`&Dt@i z#usyL+*cVO8Bh$>|0@ymBieH`{jtPO&=F`mP*B+<2J zF93T$nQ5d--e}S86zNU+;^L%6Z$3%6{SZ+2pi~r#GE)l1nh$etZ;Ks0+s(EOIo2hCAhCESo zv&8a15BZbJS6m&A_HkK^oMa*euX=G$BTuCKne@F=hQL|v~&(T|hi@G}66%zlSs(@li2pc4*vZ(&Hq_c?k*HPjYpPp3h-%YWl;SoNHrBzdfUV z^u;qoYkXk63}?{ohYdd|@vs6(GjE@|p{G8hne*i}K<6^Uhkz??3XjuICig`l%$Ig9 zU7eH;yEcUsx#Q%NR)fYORZFt=MLyKOt6QzVCZ=22OCM4BLC4$JXq;cZ=N zYabk~V<-uW*_ID)|5O*+aN5lEYwg6wC1udHD$2R>3!OP0G4j#%Riq0kP{LQY;%Jd6 zg@nhVH4Y0tk0z1tDMfuRYx+BMlbz*;W0I(wIoFV`lab0)N1pPdN*{@STGelwYv*cb zB+sna4kQa!jkKfnC59#EH|>_WguUfXeRn3MUzR5?HrPwW;1pmMc>5`hh-B^OH$bS_ z1GchNs<46K*Ck`b!+T>-9m;?5ScTNj^RPMWWq%tQS;C`7RW(G?a@S`FV|i#j_1IO_ zAq$jj0m6I~yLcTU(^5w#`wW(fOw!F12+b%j*ozfCMsNuVUq~tWL z=sWPrJq8hM^aX@`uZp$>HpI)0Jqnp$ev8;DpF(mrXh6oxoE;KomGIye+*+-mA5XiQ z%b%siXVtseGJTL=wEogw5ae$aGoD!beXq79jE-TycDVF2K%;WJD)i)fpvDEFJFTstUV#PzqOeExvq97Az|Ex_ysf;|n-oY}JgttVc7! z^wNWDVD+trjw2*H2=|Q2hB|71jXZPRlq}dTvTj2eCdJ4Rg3X9aWzX*ov+YD&2~kIj zH*BP2vHKqRucs~=gU%NeM_)GjG+HU+k_2#@75ilNK(Q8`{B7$?{gq)7?Uu<_RT0ig zjZL?WPbmfm0v8iIjGyjZ|J35@JW)0$xiedS0cszu(mOiuV+WWy_$JY;5&HzpMn+p}Of+7FDIgy3R|dY+ehOEsqOrS<+c5^i#YVS*mUh(5l!r496?I zENn}j1qwE7<(EAg)=sas02}r>=0x(cakEs=jC+@AUdA{m41DXXa>C}`Is8faGBS%v zKtrBWgs-l9v5}a}=J44TWcyLfmT2%9u^-#?BTIDwh!mLc1d zJ|R54FGf8bq;5=QZ0yp1f8Ce)kN%fladX{x!Onzpu_Yhp^Yjkw|227sHXEI#YtxKO{EQ)WYZtuDv;0g}W@rmcvK z^gU;DmP#9zsKKFIu`)o->>a?LKoV>YC=6=ZE=aYyb`7>^0Zh$%-ZEFGWmQmk!9w2z zVgFs`3GKVm8z-)h!|OmdM5S4s1Q6C9%0x+-wsp%H?(geQm}gJQs$l9mo;xpsxN6#pwX1_u(NY?WP5SL8jkv2zZC=H~zn?0`rG zDD$oVT?Q6Ex7`0VefTIB2$=X;o|QFiVEE|0Cc5CIs%= z7<8vEuZ-*!7PSkFtsfu#lw~F^#)cA2Nc|7?-ZCuCE#20RCqRJU!Gi`T5L_d;26qS+ z+}%lnySux)dvJGmcMI-(v&iao+IFAS{q;V5uIudjLw-O7s@|IKnB%#}n0);1PVm$fiQ$)p)h z0>#GG1OzBhca3^Pdc_zH9<>XS)<>@wmn0m_>TL&>^beUX_}!6e6>al6N_f)^Dpg%) zHRvXAE{@Xd*0Fbpuf0(1dPdP>6jI&sx@Za*x<1olm=`PT?QK2*Z->PrEN3(t%&`;> zEFyMVUpxs+TE9Fo>WT2cI`MfH(h=SX&SuC`T*I!&^TGSpufvX zE}VP~xB6Z|Dw}O4dCi+>?rxu>FG@pN%_Mgc2D|}A8uHf{3t0i5L?bJ{jxMLJggwdp z@Hj8%pVEetz6WMAH8pCfERJQ#^(3+*Jb44+@{OZvsk$!LuE-h@P4vQuaLmf2R8$bS z+VC@2-B@Aa;SfXfWCAgzDLl%qPf9c{n}!asa>*qaiQJguSSObTVbVK=Jwf%4;ISC` zM6Oja|L7M=985w^@{u(!7t&C@*P90`P_IZI`s3mtvoo~Y%j$YghXu}`)fP@vd^z95 z!rOMR{1O)*lvG%oIXFFBqM65tNoHU$&7q~hqi?fX(^=;U z(k(@L&c4QD1emp_T3g8`SA#VZ9dlHO2Ds)Q?SkQ}vJw_t>?pkJjqIZP>M9r7A5!}{ zz0z!7?Jj&v44cbVaMR=6nA>#jtz1344(%ZBp*lh}GT7ngcBCi~G@c}KMd4UcWGxd_ ztP)k&jLaxU&fwSYg0@Dq$>Q{A=Z#d8w^vP#S4ss%Zp7Nl_g-RLKUk7=H%5BM0kB#C zl-9iOuwa^t6gK1XlnQBEt5^9-mOH(Bc4InAr|5F_#C$6eWtpx=4c$hiT%DI=1>TJI zM2}+!w%oEdbxl{O^SBEv+E%J1^PWewAT)tKJ=z6g>X$D~Bf_$a1dGR#m(>^{6>9uN z$?PO7qqB8o4On3jEW952>N@@VFW2-#DykcMT2C(=tMD9Bhmt~5TWg5Z@hDV@Eij$KuSx5oGEUOaY({K-v>7bq>ca9h_WOi^eBF<=utD(^ z`|1%}fWtbBNm~T-_w?7Z?DNfuLbWeWIc_db%}#g6_GaR%f2N{~H<*t#%9QU8PRY;m znd}*liB&mPbp~Yad{CremDHp{JJ7`_BVv$Os!ZO%`@&7`?O*i`F|cgnRgzXJqdrQS zk`faKSkd&rwN9NhOi`9E8i{CAGhj5|<32VOzqW1}?(sg+^aBkqlC;!**^6R3Nyq)p3li9cJ#x&Nip`MswCFhrBj4^Gf~Aw@Gzu$LRMK`!?o`Tpfk4=j=O9b zpZo7nq5Mb`-!I%INPfxM6WGP&8tHAh=21sZ@uRSPT~akVXJA>fYmIE1Y7Lsyx3{?2 zGLNw9U|EBVnOIyd%c{pLus5-Cz_0Rz6z5JB1I2ZDsN=^|m{S1q*}PlYBYgzaYmVY? zO|Lp5lbZ|Sl{rWk<84@e_P)hTp9z1n1K;vvNsBZ3s>_w%Y8cCABk>Y(w|>u4h!NhZ zHf4=C6MA&Q`;+1z;>c!m$%&;zYqO`t$z!H6$!3ZkVWV6Lt{`=wRZ9Jck0~&%BDxVU zrUp|cb1I%`LBeOwm=G(QFWK}vT*k+b&CKe_7%oepQl1B{hK_4hP@zRxH91I65s@$i zUZ*h1PUyxbnVRX_sYh7iGE(<9^P6}gSA^_#x1%{kWH&V9iKikjNUYQ}WoFg1bS5)b z*$hghARAFyjut$JhohB2r9XNTD&^7MZy8QuAo+~Ii5f~YJ);=hF{k!`VAehuS~ARM zs*t|86;`{7c!7X;uwHiUKUoe}QM=F8^8F`7Eh|a(UijkToL5~pc`EZoYX*2rREg`0 zJIZfjQFEDqL<*rnF`i*yO&X6kSBkYaaiVVoSNaTn7oA)>3Tu?~53o=v(u3P;uCdZC z12lD%BD__xF7!$N!>J#=2bUdQrz^T4Q4c{Pi??%_^9OVcWZ8dkEAuw1_HCDBYa zPv$W6-0!>h>rlUamkY#xo{IQw$v5_?AA3(Uq%+#UPSy@>^%!%l%Wp5=tFfp zn+}TCiYDXQ-%+nRHXd^kVeK%9mpLyim5qSSrZcSyjMJl?$P&@_*6bde*p0y-3yKhC zUEU_>kwpw#rVtF=+m~0{zQB4u6oSR6Zs+i7|Vv@z(ayKM=33#D;?@Z%(AZuBVODs3;N%)=v{ z82s@K+n~RvD_V2-Wn>)?s#WfN0jhxy_62_6ee4o(pql=qqGEJ=I65^PilXI$8S_z2 z>bs$dS;lO;nAhNhLiyyL*?cjt`43$SLkaXV)8DORd~;NG~Ypi4Du5luFl=TY%sE-q;Jk@-|G#T_b}Xh5Xe_ z>JL(&WXoAWFD`7<|U>S(i?}y6yUYSsiakM*vF#t6=vX5|3-3 z{{eAsPlE=1H^1Ib(i(;lbC7V}M*v$D$p69agATxGYR%)r%#A|xCTfCt zn_7EU95tc{2F2zBf0wMAPi10(3f<4J>?T@~I(AjR%eXAPSEsPP#zH}{_&(+yhia2o z8a9Rm^~Bf$tG>fH2f19d)H=%oM06`n$Z^CgO{e-F{>-eaRHwsEr zfZ-qO@chwApQ+O|xkaxvHT?c@Bs?$w%&;I`s9v&o>Kc4LGaJbOdI+K39$7dmpMUA& zA5fPiNKt+P1{5fGiLkz4t#WxbL`R5mXZ1xI%P7l-Z0YGlEgij2wY_|bPq@PmGCKXzZi{sP|qbNu8;D6z< zEza9`s}=&@l?H6Eofz{JRAD<&+&vg!-m#K!ck?jQJlRqm+SIACw=?rIwDP1i^_sk4 z>#_L}b348(uBoA4Ouhi_+P)ZT+KpK$J1iN|0W&^!>%BD?J)Rg6Pd?;kbp*i<= zt{<_T+uo#)JmhKZE2#AnKzDLKW8*yZSWj$HauTomq%1yNq{J$hOVKf87!tp=x`IMJ z^0OHGn)^oCtN zt)0Wdo~nLpz#NSW)4Hs^maHVDQI}B51~*@ot``ZF;qMn#8;^c;o4mJ}oTnLY-V98*^jY=OV~&dXoX+BgGf zHOyAW(SzNjab#~-xfezkuDJ7+bj@8kAk&F(-3<+1$f$x}U+lFbDyO1c4SCN5b&sr? zS9A^vCa-p*_aUN1Eax}Nh^z%}Ze?X|am6s{ZZn@(EhI^wW5r78Al`x^J=p)w5*~Df zv@bxLvvXRGF^TjIo zA`Bb?nX!|4P-?Z=lxO}?zZ`8~oxHWT6vezkz$hi(s{HbpW=wdxL|ZeHrtb!ygyl>& zWT`2relwscHw3w|eS=4107K?!+Xbnw=-A}9PSmyHows{||B)>LzUXs!44fhB)aRA@ zDf0$v`HRBYR$&ZV{VoKs9oncGOnDjUE2Yx}PFiA8)*h=IZ3GqZ#bDj&6;#Vsjm)?3Lk)zfKdx|7;P zwh7NY6Evovozx%}X@V+o8p$u07GEZGLM5ukj2$nimhQ~t)wj-^J;z(+OzSdSS&wBq z#7Rn);`FbHx#aI@|4FXphuFqpeV*dsw7SvE+NU35snS@&iTu<*{#yTl8jW~H%xpQ; zeOIvJw(d3U4BPZ^P+W8hnXDG|2NQll$!w&d$thuUq}QVpX!GOZ2*q@awWT5m{C?a# zDzZ;H_Ub7M>}#@Ldx*F5l2TMeuYSB=?M$-d*}aN9eeT8LP1I0+&7olCPt3`_ zd*b!olvL`!d!NwIr6Jn&d?vi;vw~dRRkiJ}i4bGm1xl{c%4E2acAy&H2G906xE1YO z({k>~b_|b`PJUfTZA+WL*bZ!S%Xnk9!f;-Cg|m!8H(8tNU7!*c&e|&E-C0cC7g+kf zYS2*q>G``K)e7DZQ+x=fEQ2Q>UzRi;()w9eBBt`-3KT1h@CEWpolo^3c`Zkj73K0o z#oGAyGTH0pU_Zh7;I!UM-3rTOvhG~GFl2=kXPqkMj;Deh!D_d9Ha=Hl*;iXH=*TlS zyTG-V9NPFe(ML{~j?$upi-I0wG2Y*#H@!bpib4v0NI+DddWe2u^`Pg2J_Wf-3ZkL> zjh|}Y)ft79&zqdhZ8fl9-`jy)Ei6F%mWR7djZFsZErV^phneq_q*$3X^uG>2Ve+_;4Cvu+kbL8WHN+~9>+-lIT-#jTR?OKhJu zt|Hd&XSn66GG1l>mXzo1`EfTfctlO3adSici8t$##H?cNJ6$$~vjsCj$2fzm7eC7V zH%6P3kXUvI+Z>cvfRnGvkTVEYE#UfTWU~}fhS8{KRhxM!3aT;e1Qh$zsq=FM6;p86 zHR*X4ZkfF?XZ7=rSoc^|k`J2$uf@z)bS!7aPC*5vs8S})p|Tx#(YyVJ>8MGGlI<(% z>wtM%P4eA!MxsJ7 z-$X1wBLF@F{#aRsTZ)F@Qy9yV_l(p=VPfhU7eM*1nGI*s7MEL}zJc zqqHe8(g4Q7i%VtkQWgUg4hg_vMK8(cQhR8RXKi1{nGzcYgP~0~acu072|rM=5tF2JHK0hV{RG zxuPERvK4##CPCSpGu{@#x^8k$JQlo%@A?Sl?}2aTWu$he$C?70ge|)kaR;+^ZH!VI z&~q4q^+s6^6zqX9;CmBLATdIt^a9z-aFxOfQi`v2;@zrHlEdVAUnn1v_6C^3&S7L5 zm8M$FG5{Ag0UkW{y?4aih=Wb_S<>JM8Xgw5lYp;a)9}X#c0ei%`y!e7N%LuOIteQ1j%!_;TfrIPO3-Q4P+%w_Qq+UR$+%p#b z1V#e;x~1=L!k?a6an5M-V0^+TJ9**+*+uAmgX}K$h*B{}9zNvi%Ro!INV~T{@Y_7Y z_9bK|r`)-@CNZSG;pT1rY~$UpJ&E(feN>YTSMo4IM#JA+^n0@%ZRr=Qj>k!D6RRdi z!Emo_D~}X|b^Jx9OaTbep|-j&pIi5fkJr#2oR=n0r-z$>Yok5erV9Ge<`1x z8v*TU30rrgiT3|PG9Fwl8nD`Xujf0)4mopi-q1R_?MO*>p0PHsok#L=!DH`U1RuB_ z1TBW`Om^sM^2b>wUnw$D=gVgL#qX?BLra$i>Xn3q6_m43n43PzmM5XP0H==iAYker)@TXHUi5^n0;b)d%}KA8yUnkW910)UTHc`sVe& zc6}+mBTgB+t z^Lcd*dfE6Pq`c%t&Uu>^)(Yk`&e?z@YVanZ_kPQOQiapY_kn59*Q_!Vp0@+up=JE> z6b2PtBVw{&#|{`!f{Ca-SB>G8MAC3~$!Xw_FA&0I4sXGHMQ-e2Tm$0x57CB)6Yg~{ ztb8KhTH7wp09UPZ7{+98sosgxYR~a{_PP>NB?^I}SqVmErb^IA&xW9-wn>S1<6?vC zV_F%ENz3-9&`QPjY@PA2aczqgzclverDx^(|~TOw`mh_A(=3UFAcogY9gg* zbN`M0sGH6iB?a4i-fTx48|KsCsK6zeUMwO%hy4S7gxl^RPph~Irky$$ z9VZev9L~#$Wfdx+s^rynLHL<)<68*cVN_FW zILArQf1f+H1#y1LF+R7FH#i>0%C6-{>EJEOFWMo1w|vKGxXz+s$MrQCjt}nb8Rk}! z>8R1we*4%CuE^1cNs8}^F@vFM!3RU)Yu0#PhcSsH{(TLcWt^U8XGMhd(>X%vNmMqOjLVwPyQl7aYFs zE-9$*yqSLi2nI(Q!v@cfPh()?>!SCY$$eR#pKmryPrPkwyIC!@+r3sgczbaImK5Av zWU6PH-QvkQnaM@VMtb_MBuYxxF66bzSC3 z;Sm?4rpZ|v+=cJe#5St!s5rK4rWZWA5TJ1<`XrWL5mov;h3R7_Jy7R$BVn^PQ^0L> z=J0`3(?lZk^TGc@D(}HJKXmg8w&%`49^PpQ_eaS2lS}>Tx8*hT9Udl_^}i zLro3yH4H`<3*R^DZx?9Itun#GDP27p5j;ud!r6nxwKZD!^YQ+1eg*z!{*Qs_fH*w? zXqud;lo9$VU^_`Zf*gi1PZ8zQ4 zW$=zb-{`4I>(l1@2rjNX==)FSQx67{XnobTOG1;zV6Zdj;yJ1MC6(n3bppsF=gH(A zPF_M;9~@taWt9WIMgQfZ(`%j-+oveZaTpW)*4tjd*S3EiI5^Xc}OFH9p$~+$fu`#3EIa zVJf*oGa)a(=vhgA>z)WhP?-HR(7#`lnEnEyQoc+n<;6XltxcmH75gZb<=@#}W)WGS z+VV~NGXD!Eh5{ZeYpS>t8|{zT367#{5_OZ-wAb+Y4oclhSc;M_ay+FcVdzqDAb20>xiGrk3026fL=DmCRV#E=@=|AI`(f)IB0F%+HXi0!me!365tIQ?@B1coEP9HL$?^Tc89#G^akDUe`I$p2#8?wRI}wqxY+|BkgEk%lf<%6gn@dT{Up`eN$% z>6n4sdWzWMYvWNX*s*J72Jbb!gK@)mFV@GlsgUA&|ELJVdn{x{X>YMbRhzrwi+l=a zg`K*Uo(=vSs%Dhpk5a3qfxzMyK4_9EA3XUr>}Q~u`}1KxMJ?D;Omj8de^*sB;v$7& zzZ{_ena6whgi?8iqlA$eh`L0)A)?Jlc{4R|2<*OHptKmE->1x-v(i2byd5_jtNZZC zeKMY+tIP1#Ap$#`$6MvzX&99$-9R=)Hxgw)#K%D zd^h2)_=R(OB= znVSVJ>XaVZ_7+klQU+2^N((=?LHw0U2fGSLh5hR`A^TI>@=ctSAmW!gJCZn0~EJOz6!gR-#<@g@K=)V8s)~m&#C~ zo(v8<19@#nG}VWISF0MAm#1pI*XN@MqhvL%A2_##miyguNUQ=Dsc585h>2tGJq2tUzKgs zXnbODxaSVQ+NHx#GpfGy|B%X^=MKS8$n+2fL#EQiK~=fd$$k_V=(mX5)IDViU)uYG zs{Oqm4}@Om5X%6BIqNL`^mt`Q=ri^u~_MO3fyr5tYmru zf&!2Ai_%lQ4A6n^);TtpJG)EB%V=cXDQK_Ngm2A#^@o43?T~h!C%SwzC zskfMNZmD%iP|}`S0r|ajw$s}8n;xBfu9^#t?Z&a2l25~uG3_ektM!GPswp*@X^Upp zFny(!=}CFBd#3pmVjJT;2HnQBI)NP}eCKcQMb9hL}(uP*!&L9vfz$t_V}CB^2Xyn3;DLnb8CxeAfay5r0ZSBOq7WZ1kZcsz z(%I`?2;8@(`B(E(LFD%X4?PGAr3}Mypt=;WORT+HXH^Alj>KiGRezVl9%7LEn-$ox z&64cNdcH)?LUleZdQx(Vw7g^i)7ewc_g8!f)X8>bNfn!I-NKoDKg}LP!a}7hMbZgP-enK+@0@+ck z&MhOdsPz~jQMyitBWo`y)!L;(a^@|3WVw&D|L!D_x*1!2^?6*J^{F$GJMHm@>C3ad zxxSfdm3k|u-PZ6gk6=vx0Pd-(9r^lCUcetiKNsb{6C7TJ_~gL$2uLpOLNj8jjIB(m ztN{L#gdjZwduMNDBKi>5Zc5v5{52nn?qxoy9r_UCybg=}@nL&cW&E%YR=w#eiOKf& za8a)_tvHdI!|qm{QzD_uk0$$P6Me+DrmBP3^t{Tp>vb-ddv^FkJxxl~8 zk;4I@#X^%?I}<`~ zzZmTtAVi)?)MZmLn+IgDg$?y*W=zMtT0x_nRQh$#iH1&x{$=hyVAo#vUnTO#7>|rw zoR;41z;b%qjIxPw?$NDt^BD~uKH>6!!6j~~5w@}2f~VKh zr8dr+)~bw{V@yuA1B*)_Hv$;CUZJI%r;evwl?*d0dn~ePedVA0@^Kp9M%WkClMfQF z#H8^Qsn!eADH0*Kq|1ebrz&&-qhf`DgGERdU2-Rf(4#2Wb+og|sFCm`J?43K5+7pD zY`*JcDsqj0?BN{b-?t6~_twN8H(oxNX)AA?RBgaJau>N$n+BH)91|vo1LK0H42H$a zgORV5#ae#;*FAct)0frDT1PwBB1atZq>3*(BT{*W#CZjq#gp-F&R?$CLo3O(h#$Yn zJ!(FoRYEePnxklLEjr*PTS!~kdwJ6B-zVPktSPIPN*XKx{h&Mco>7W2Em6*9MWPN) zAdobfHsY*5Zph?V8Re08=sdAL2FhhdZpdC5HM)(z8GAK_6$?g?kLOj9EtG_?OyOg5 zPzjKvMRDKCPNT;ktZqIQUz%uyk5@Q2)R%C5R_7p8jBtWHIzq$ z5iFF%3L~Bdg+AvjQ?U}iqCznaV6%uH6r)LcfUPX(qZI!=amqxonTr>BZ?NbJGDw31 z0f!n7gTR57vUIRLHZ&PRvg_yoQJ({g=$g-M2O|eLu)tE78UiqVDoI&&#>*ZFgHXgY z+Q7wa#VmidizjT}|LKWeMd|w2-=jQ3i-R!geXK?B4asuX4%C?!$7h@I$BS+UU0##3 zOy3`lc^^H@xSA#f$B?TW{xsQA`1IG=?RPTW6Abj-iY3wJ4;{WHjUrkn@*KU{cyV{0 z@Yp>d6If_L0^mc%;bTUj_wkEPh0?>`QJ_yd>GFKoyWw!eG5l`4WebWyo&Cm*LLVH7 z{T|x+8{Gl!8UO!7J1+nd1)k`ifCHU5Qg2}yLHTuGwf)97@RPMr_n-Es@538Ho@Uk) zLP3JZAFQ^n@CKKDQI(^kw392*JJsXU-1@Amxi&I;JxVW(?4;36t5gVVG>?Hl4~R(C z?D(XM)py?Y)x{X8vME&kGJNoOMA$c9=OoEDb0B}n*dvG-%a_JncCs;cIvw);l5#&) zRnKT2bW8&jF#;6p?<mt_R~f}`=*^fSR77-sk8Q*#_S=-I;zEBM?4 z;0VD_^*4c^x}yyIiL25PSef*!vLE<33=BR9 z?NugpBnOSY;jvry<@bYC7=h}F-lbR2l0{y+@NQ5nAo~)>20}gsbn-9b{09v6Q|pZ_!J56! z0yL;HmjJpru3r&nS-iK%M2RTtd-M9Mwy-JxBi;vdZh*elHISuHAV<;ttdrMemhKX3xwXcw= zd9(a1K3nKqRLaW=p;PxHH7t_W$4Z2v?iJkrKep^1R?PFAL!*R%9)$ar0-B@)S&BvFsb66c?OqT-CesAkrABwsu{9!Kd z$A{_C{gK@2qp~nY@oCm+i;%qdJX#Ii>K8KIa8i+7+>jxA2fWOTz|^k^>STdE@1IRj z3y;7Z%@_#)%^OiFkT{N5*>wv5>+oqA6CPkE;q@ohS=R26pwhMRF_qBA?Lbc-#HKc$XG{@KSCYrPifJG3hpapJx>|Fbw= z_-3Usg;m$D=BVER>U8du>&s>G`Ozq5=C4c+y~4p;O0irKAw45TO`#ZBEfr^VLGJFs z>7!8=Zo&zq7gM^}!kcmoyKf>1=*XAT|0jFjb`ln>HKmfUgi0(#1NcC0=W0_6Q$th`Wr~&oMZ`e< z$AU?U#%tZ+?8f%A^GFa~FK42a?9BQ-y)KZ_b@-mGQhtr>e0a<%!bHD^J?iSHVu~Ct zFSIfKe=jHP+>4Jo6*9DopPQNp$ao2NiVDUqxsvpnp+0otk?_(94Qcp!{X^1C>8h#>uXSs_8bG^c z4q#>=E8%HkO`J?k><&Tu_b|!For8GNhvc{F5^}`UC3x3$wPIgFuvqv!4*lT7TLZQ7 zRXZl46JoO7c_s>7SC25d31r`#NM!Wx3Q6 zl&)tsv3@T5Za4TK#G~S+Q)O<(4wT1= zFqTSY(q$CNer+g9txuvv+GEjukU^GFll?|LxOiYj!HD7)V^>%1Chv(gb3sauIzA;> zwk6o8hFPz`dn@i>s52gN0{<$1tFXfcEtEE}D8YF9K^y-*SOs9YKOT7MGHeio_7snt z7Sj&ToCOYg8y&q5#i*kY}Ol!=< zX9R}erFwOLGn93Nc3d4!(En!1OqYTOE*=?h=+-{sAoVTMcV9gW(TR4! z=&;xGnUJQJ?~;iRWI8bVXGI%=^Vgi@**|MsJ)g?X2>EH{(RcXP-vftb`uOz<%nDHp z6MjN&0T{ymxVMbjbwNNdGcv`t* z@YB>FCK{X!>ZV%$8@UP-JmUY ziaY6g$+C2+jtH@7yY{mA)cFqvT9m0oCQ{{DCI()GXM6k({#9m)5Bd>%fz5BC|)Y73Z-{{N|e@X za`Ft5YE;k{ppJhPO)s1g%MVe=l$+LWYtB$FvvlwjKTNUwmTTh2!^BGh>jm1f_RYf@ z;2a;|v~wJ}R;YK!`~dyNIL3>geydfwth77bI^FG?IU9UV`ngJPAzQ&}!+_E#rNRnQ zsKlwH**Ay zUHOf5`6`L+11L~DL6bSP(2k;SeEXP7y%_o(Lg@P^Q3zKyq z+4u%2$iU*`O>a`Ack-%7%{FTEw$+8bbySQ4q&@Cy)-eJkvN5X~FCAcVgduJ&C3R!z zjY1>e#bjz;cKJvv#e2BqE=)h{(;B~2Nh?9lI@z(ov%i}mId$q!$CtBjT}M9(_Yf|T z(|i$a=}8QedBep1Mm3aZ&0t1TKt5b|EW4Tgwvlr6+Uy(=XR^_rank94z{0mrtrYZ8 zVJ!0aVHmJKVNZ=m{@D-*BFJgDfPg0k8O-8fc?&;UNh00}xq>H)rFAx=t|axus;mbd zU{ewp1Cz)RuG@o7V0fg{(pWo1JA0!IZhL5uBbyM*S}IuxUBYn`Mo*skYT4)bKqEOg z|EHoDV*%-(bA)CzvLy-vjRNqlwT^oS?`lR?KxolSuR5xe3sRMIa2%tE|KrGa_HKf^ zt7>%DEglF)MEKW_ODnYsPVZ}Z&ZveeRA3@{-OI~CH^f=6VV zC^E%iU;ihX{cnzD`v~W?l~qvfP(b3@La_wSbxr@ihy=A7Lms~alYp%T#>X^E$|c#b zpT=Ofv5pAD2`GAe+)w^5Lb? z(PUfhFKK;mEcg$~u76LCxWv2E47`lK5Kxt8lSra5%MbHlCqG2}DaOhmidGfEbVU%6 z-uJ5Wy1T;GDwc8YPs`@&)&r9yQ+}1)AC^=36?#my)$$D@iw!mt9<(V}cRez$m3zQ? z24xMYrd;%+F?%8^T4M+B`bb;6U5BgFy|vw${JCmQt0lp=-&`yHp@f0~MS4?+n7Mh= z14l24lR{f~mEL>uP3gZFC?3QtgC5GG!omeRJ8-DGGn$w#>J%D!D3X^OGxBQFR2Xwy z?*PC6Yie2AZaP7+52!MVAP%MY6}0ekSbpT4}1@1q2r2q%OHU3CnHVtgcmw+Pd89c0YV@mV({d~1W-Kj z>{Q?JrMR00imyKQ&oP$b4Rm^cv`Ve&cj!8#apsbxNDAPI}$fO)eFH*Dpn~6aQO+? zz^TwCoRS40*7hKcOL9nx6?#k@+mhK0pT^Sg(3SbXFO-B{R2RF2g1odBL2+2HjJa$z zTnc*rLSop0#-yFyyhz?hNS589`?HCbeP?tw8lSHg45z(eM_;ip3jWy%&5Uh@-iP$q z<%+)St8sY>aP%t%^9%@5MS_iTSqtszmcErppdNpB8n)?4;D6a4*>wPkPO!fD{_vf8 z7cCBIW;CjnzC1;}?vCZ_KTC3y&Dpgmf4#H36rwo<#%0#WmutKQBKdSmLN_ogcK;8d zXqDu;LHBB;{-&&(8~*oJnmEsoCF!Gl3x?@ zAn)-8uIqzX!a1dtGu{-;b%kF^(2>r21HmaD10Vxa#fOl0c$>W*Mo+y`FIJuXjIst%>gdB9=Oiy>ZSk1_|L~6dE=TxxYiQ)3h{xcq zVARn|&*=*8)fj*Q>^odQq26;A@*+%e2eA_HdpSSdyxRE*{sA7gq(C@99{+fz`)?|u zIc~>KhE|z#c6M%PxaaD>;{?sjQz)N%Ty`rZGsc&L>V5aC0RCVG%lK$(EdLhv`ua*9 zeROP0=B!gRW&7hrabDi8=}0R1$Ox!|R8IJdK1khf$^KGjqw>h~(%iWtdjgP*Z3F$V z!F_ip=UZRKS(5aZv1|qLbG{El8HeSllxt)qBnZHrUgY=w@-PE|LO!L0{AVFf$QPp* ze_midQ~adO8T0A1`H*m|D5IkNwf)msx=)izV7A0Q{9lwvT4@=dot^PPxz^V!+&XW~ z)z>5YMf62)ZEb;w?wHqa?UEla0;T_=7^gc|MV3Fax#tICb)@0=<42G9J}R|fy$Fv$ zJ0=bu&}bh7?<&iezv<0c9ewVH8Om6N#1C3{=;vGSuhp|t=e08JtoLu4t*G_SKye~f zaYEnAm5Zz*rRhFz)K@IFw-8zCxl( zl?Tl&Kq}Lz;$+X8eA#yK;#=r{MP2mX81*ywC#&3gktc=si3@?WCWvkd4{k;o$R;uh z`xmg2&nEHn>6N(8Ml6pPNW~V^Y$z97xN+0u)j#WgoUOLn@ldb$xnQ#E!uiXcR_O~E ztvhP3`T`y6;gd%eUDLj;4<0;7QEidpvlT)j^E#g5$cDp0IEA^NKtyUa9`X{jT!T2w zPGK5}sR_^MlTtG~MO#&`G_`7VJ;^L(p&7{tmh|FkMybI!a5BR)S(1B9g;Rap=_NKd z3aaw#Kgl>?HmcSBd-5@xQEEEBGl9RwV>+d7?7BE#B>>{W1Lqa&7H|x@mphp@-sLfYrGp7e$11c>%20fwOek4eiDo}H=|xaALZj#lS9W_ePl{i3s3x~3#+#MWOe<_rqKBra2q%2ThLmO#2#(tRhgQGVreXss@gYrbx z_kvT`z0`_gqg-}SaAup>XyhcH^SJLOU~TiZ_rrbj?;1PP+5;NB+7fXJM`^rG67`b%Tk{0WQ_ctknWemzxB7I8fES_-{ zzV~j-ibI480ZXBai-=(1n|I5;Ivw?uVeCsXtK#rn8i;SsXx4IN*-%k@vN0CC8KLDy zKbhsj|Lj(OrjzkBM2dW*I4!S>|Y0T)63TosHxfayfl}d;9#sWV1FV-`TD_(DQ2<QF3?I;Wnw+yWX%^&3v;5iY$*tq9HaK>+C~tj-DS5cRN{}5 z*Mm?UlL@7<<&s*8p$iwbv06>DJ?EOlQykuD*ipNng>&~Uy%2~)D>&*pe3o}_sh>gY zDmF4?61Q2(0Ds86mCWvgVXW+Z5 zw@<}Y-H6&>tjQY=(ss|pP?lU?3FT_0zYrqC9-ACAnVKG^5 zcb|zFTAxyC?U^=J-8yXe=U;7qUm7|1QAU(nd)$_8x~x9)GHG{Tb|)iq{Ia`7?(i*m z`yf;7njG%p%$yI;p{2Z+``;%O<*a<%JasW3Xe#v$^{ zpeH=)31Zkwi*9KrF$@k1i3Ng13xz@#WhQV_o;0Byce&QTco$+cr%kR=2WqTrN|B8v$3mu*uTpbr%-VEY zV5n~@6DU5hlRG%XiQNi;vc7rGW$UE#{0l*=&H*>26S_6|xGrcxZsUw>(Y#uAfMdVt zWhR(t6-PiM>wBfmGDHZD4fqiES#8o`TE9<@*yTw$Dpp>RRam26(1-JHckoEr+gyN( zY(#{qanA34=@QQoDow?#wagqSc+}<@OJ)iV9ATEvh6dFks#B!4Gd5Xfz*G+jl!)pT z)nUWs-TmzC9#mSmkZP;tD}JM1HQMX^TWG76<$5E=Z&%-Rd1YEum&Z?q*(`+VeMKhj9axESc$|M0%kN+Dd*!xS2a)C^CLT7pLAHlau{vg5?oc&y@-Z z0oTM+%rXxV-Ama6dw7JG3A&Yivqv^28%=5@FhlWCv^qCKoR>>jhAd0L2)JZc7l|94TD0#nBO9Nb88pK2Gqiw*@n2# z%OC@N83~<~5c3czst9~7)WRlme_=Y8T{}VsIWFBs0blgonvOe1yd>oRYwkRQnq1d4 ztjnc{2nYxW2_m5ME)tNY6sZyE(xn+%2uQC{K#(rdEHsG$k*X+2jSHlz6lp@}MLL1d z1(Ndy*IKjoK6{_pXV09%A7=QG44HiS@;=XfU)P@Ti1AJ3oFL!FBY`~3{)t^a4Xk+k zbh|jk=2Xt$7s=Ia)IEkK+LSJtjM9SiG**qe@)U2E=W=ZKS;``y^Xfp$Uyr%5yiEzz z3|w45vOsvwBPT*}UN%Z|S4@g6=1R?H zJ91tGVLq?48R*JR#&$CE5OdWX&uX7S9)+R@Y=b0ke;ropCUbdxx?UF0RH!NF;WnDO zNe-@XD3~*0;=7=eD#|qCKbJjQ=o9Z_M+OR zh*~`4P3|D*fPx^dT(#Zxfl6cG*eooSl92YnJ}Bh35Yb_ZkEt}6P<^no=V4QViAtXF zm8v?2TGOgC%o1W`DY?lV;2*4opEBr?FK{-tIv=S%je_a&Ke8Ka54HfCkdBb%fkN8M zObC_Z4TZzx~f6M~(sbM1M=2ApRP^#dy zGsfONufgE(u8&uxYU3!*iLoL5dm%UDG@tdgg`NOc+|%=x<;lT&ZkUhH zg}ZMGf6N}&)I=`7n?{g#@$_1%vmZ@$MFRJz#&fnYqohT&+|%UM3MKY7)mz!yg)0e` z0*a{Jn_@NF@vYF8(NEqj=I^?k%zBa$nA|fYv%HGPLeCAbG2~2z8O1!QySMxhV{Uy; zDh49beCwHtN4p*)_nW+d)LM6u4|5i6HnscQ<(T2>+kTkVU&@UxUWT8rt!HGfZN0YC z)*_HNES%EyH`2qeeWKFY{1w$KS(ze-RQL)STf%$0n@_U% zHs#e+2HflMD_?1tN!^pj8*+uBIJ=7?t9iW!HRE?{+7gNy>s@bR6T4}FbZ--kE%2!A z3;!ydcQzm@8kN>}k8DM>RQcGtrBwLjDb#Cg(4>g&4cHF_eY2dZF5I_Yrdm(;axS1}+F&)>5xPr0kkB(d-FcA&j)?L{9TeoTRrw(hoY%E{}fCxwJKh zuc+@36VV5c-t4t6k1+oU@vXZeEFiMfRy@!xsRF6hG${&CwmpCTM6(y8KTE^6t4G^U ztF#HLHpmg)*Vz7S7_uPj;j1m0CkDFp8_Q2N&!watM@m30P%46x316)?ZGj=8Y#j0- z$ggNGi$e4In*VKm3h;V9eYABdKqi1=UtmyF^uL?ePYUs(`>EgvhoW`vgfo2YPzMu4 z3l;r0*s!B=gW1p0V4q$}NCtxtvlo39R|9wT+lDW&(Z&89O(;EfMl=pYh{%syhA#3D zY35oBGKSw3moGm<)iKnnIDVcAf6@Gw+LvCEp#5wemtl4H$guF`?<6YQX=`z^i?7u^ zn-X_j_m<8#23a()p8kG3xn@J!+o6$d{MgJ5-Cx;_|E!C?ejI+j+rW_HQ6Qe3>uGRNd&646Nc+J-sv_{Lyrh^&&R`x*x+e zky4g{uh6ENcUsG8)rdaT>u?lJ5}9lAwgVIfN0k7#1lgeunVJlF0Zi@E=26z-0N-_9 zliFKa*0~3L#(ZNR4`jaRpIQ(v*|FI+F{<0}=#!`TNM(BQQY1pRScun5##8mk2kX~) zp|zSx`ll`Ei@h3{ogaD}%9yONfjhZ5i`B_}-uUNj1go?obOntQ3;mU~A*A8Nd&)y3 z>u2N*>-JoHll*gr4tBXR-@Ii88bWs0P`B`KsZt_)iA5#wSCk&=%mu_wXrH?)WvujH z&`P`%#!CBqmpSi_`a65QIF*w1oh{=Nbr3>l$Wn#ygV0sK?ZLNM!Z&u;Afxw3hb3Ch zYh^SJf{kr(F5)?UWK8jX;~;J?x>whRdOgLKPCGlt%Hxs?n}$b3vJ3d64=xa?T`Ly= zhl}8w{YT<|wC~3tTM83>Pk1yv-dXf)mzk7vN`x@EaVE;E1=W;I9u{Vyw{$-{Oz5uX zDJqA>$OGo>-fU5h{7OwvZgYyB%3q0eM zJTL!a>Toz5Q5C%BN_>HM2Frw_UG=MGUp$?62KR07(@AYfCnLDEVsKq!(h z&p($RJacw;vE+-FRem00a9C8P$EvN7Nfn;=>dChX3YC+MzFX819^aMU%@HPkBMfuD z3*PZXL^U651{?^puC4=_FEQIUjuFe1J}iXx3JjB?IAm|7h^5ftIJ0 zn=Es+kfmK|QEDeYQQEU;7nO>rq-$swzi}lM&LFMJZ83y4-H>yrVZ>!}Ps{U(&rddS zpLyfjVJObgO-1r*)@_9ILkvsP4lmL=8(P>R7ep-IAFirnshpln++0mU7dXlA2fQP} zhWG(@ngC8~APoyHH#Ya4o*t{pAgnbxB&XW4&MUt>SGyZVDx3U*@NLnZvW?z;zU!K{ zTp|B*WOagOVfxcXAX=)&(L9`6woq!u6mKkW+)t3Sz-qo!IWxJcbjCYUh6j6uskb6S zvSycaHT#TAKuwGPX5+=L@vXWUu9x4WAAf+ZSt+b>j|fVx^o5zJVqQO|k2eVs?&x=~ zJDVf#bXl-=X$3`#YKueEk@|$E_+|v}2b8W4zAJ#*f13$7ZZ0T6_^r&8Sd$QO?O8BE zR?G6m*3NJ>cnx?_c4IHkB(CL%==x9Hi;^1|=F5ZB>v8bFNcIykgv>bH7B6N}xV63J z2@k*CD*qoIo_QkD)>72s{S9+`zIl^RrqnIgJk&Q0h6dmke{=6v(Jg8^XAislzm2C69(GWSmVfV zHpoBlYvphis?qi7(Tu33CtI|9C_NW5^fUbs33o4|4*Z#Qq?94VJmS|FT}Ag}Z0h8V zs3nd;Vp?vu)Qj|bAHfL}GmQ4^pjYe~;JJyd?0w);Y2*l_x{UM5U*#l|h|(Lw6H3-u zoY{$z><8D}T|N&Nj<~haOq}fYZEI`mE)HRqPyXtToyoO?9;HFo~=bSZp4>6ou!0@wWvF1xJ(L9-UtzH6jkAkBlWE-t7B+6 za^%TNl})tZ64qG3Aume03WZsvU_uAIj>4%-Z@ZhU1soQuIlZ$G&wy&X3 zy54==Vl->#2i_bvlTH+0SC;_qEjFyNK+SQ8liX0Jp3M;mJ!!cNCHFmH@nQz&B~6}q zQh}84PKBN34gPjHm9D>&O21Eo@VOZ(^D1TGXS2j`W@PZ}l+tH&*Vh zr67=z(BY|vMY|pSGbsNRJ|+&--fyeLbAsjiX;6%N4f^0;3IJ%kaBek5Fj-at1LpnR zEmo6-wrL?&QH$yN!*`I4_1k$YO*9_Bd%Cn9sI)-v%+ewi)n1wUgj2$glTBHt`fh2H&X)oqtE*_K3&;pQ>aVOU_T*w61=d>H^laq zY7#u(Sow`Ae$$&t%B5VP97G}~23c}_xwNFZ>%E?p{knD5$MblrOr;G6zTA3fFbuIW z*;;OZKx^-^mzW8P83>~H$vbaVd(erz|LXRgB>Wng0be&e<5zbt|E z^gR}-4Q?0?4i2~vA4peW+dJO!g{P4gbzVDdDMC40uX|ngb`?D0zNOZJ1rox0f3J{q zLi=w0Ji#1o#GL*QQ2jS5jzWD*UKL;?>-%Bn&Ycq%zcOyOo25+h&FOV6s@N~7GCQH- z40bECalGvoXV3*0E6{{v{$uCiR-}C)@j%+jz^{9Iy=ddFbpI;ZvC^da7@;&VZTfNl z&DyPBx{e+4O9Z%o&}_7{nyli{x47f)PQHtB*%R9+m(&60pSpZ?%1TK-^pEw%3Ha|# zyy#f)6)?NGQjP-@_UQjH`2Rit|HrPU#IgTOmUOR})!JKk)0wEV`(*hj>z)m0F9&Vw z`CKINxCr}h4h0d=#5;q51+^9hL(l$9p$uC+`T7W?hLyT@Q7DSjW2wu@+zl)t*x==n zinViR1JtWEaXF1(`*3W=c+RHf&dI_rl8b4I4Ap{?nq} zi7gZHC7b^&Wc_ag1whmhDka|}Tft4C?Wa`gEtg6Pf`+P``g-_+->jm@{~~$+0BSQk zrZE?_&JC*Mm5%%EV@C~M4E>gjdS;~Oy@v@h@1XGT({U{#U*K@_?@(J1bNMLVymqj4 z@|4&8UBh(|LL*pB?)>VJXUHzp2Lfw58s?(7rY4f;Gsm&PUr%7k3iawZ|0BiGqaFEPy|@pKxNc@4^= zArZ}g6JaP4N72}s#DTDUS_{}4aNOqt`D{S9-gCH*)sppnSnLEuNtKd20Y>p>l<7*| zv0g0%vI!5cx56(I80{{@NGjR~*_+LXw~eW8Ck0zv zTTI!*FF2l9QiEdKUVEDRXWjR`5J8>53KKCib^h!^#J0{9*#sw*j@#Du@K4M9ec*ZD zM%@kzl$jh%nD~LgjSHY@7_VmZ-7(xV{A>1Xu{r6j|qqwYUUt9=*G!!TH<>4>6)hu;Y-f1I!#B0%kk=5~EH-LRk2gy1SePEA$ zXwqFO^15rjjRXEO@7%-uHv{MS`c-h%nyCQX5>5B=yXv4Rb|U5uzhggYBh&v#ejSQNeihk6+c%7^594sxBD(*KlpD*RWC|HO-N7-1=Yzq}R_i)Da3L>o?7k?iY81SRfQCJ4wMS2R&Z1?8y&?1BrpuQ zVD>H~ZzPZEkzy$L{7}b6Ep`3)$RaRVnzHmj6%Y5vK4_D@)X-=p)N^@vg0~&=J~>+P z0{~HY@Bum(>&N?lVkk(v&;<1?{Oacp7NxDL9$%IylS(XtaY%9KQr_~bW^X!;~=hYS(*zw(5AmqET&eN_Y(W9LS6%xbRbO_YjWh@b2of;0A?Mnu+SwhlgV_hPwF=JH#Rcv+cQl`k>O63Km4r!wYWB6vTh4EtQ44+4niX}ul zm)GJDV<+3UkZHAR@bXtocw4r$r9_~(rJ(U$G(r7?L9_kM=^eU~3r)oxzjZFjh}!1x zMEg3KhERq~R20|-_kOu`IE;?&#Z4P$afED&;A&5QG_mdV|4zom@8wz_!AxUVZC-tZrY8E|L~r>) zDoKq#VMcy(|0u`p7sl&*$YVtF*HZv-TU4hA=8-Q-Xl8T hD1PV|<<@!R(22UV-z}OdPzn?%rA3Qdf#Sv8t$6W21xj!a4y8C0cemgK3Iqa#K!M`!9*S!c z+~x8-=R9M)=iWQU8TZ`x%l@#&&dS<*t;{ulbIz5B&ua2`FUVd1002Bi1sP2M;87?5 z@FW=f@k0x1{i8Sl;1xhoMpD}|Ykvtxf>`ek>!2sP0LR7i87?--pC^*C5S?;norB8r z5H_0%`1E+PjXjB;o2~uM9R$_Tz*-e4FIqko`9?NMUPJqpcJP~LNuJLL3z!A&1rmv| zU%mhPq&3&lo;y8Vg)!X`i5ar!{^chx{}}N5x!=R(r3?|^AH4q3EpjhU$#%veC1qvS2D|o;0nv#x*6T0vqUB<< zPv&jUlscukeNsgxxH;&N0?DgR3W|905)ZWu!PFW1+^?*Hq6GrFG_K-fIAibgRw%a z6LfF{kJS~z=b!swl|FOGCWBLbU9TG4V2atzCleXIy}u)snoYG<4JWu)a4TV850(LGLK!HMoH zdYt>$M~};rbF_55EJEy8a&O!Fs#|FR?&DwJFm`rGiTZiK&BaR9FZO+SN9dZr@V}v_E6U(9RMc{eGg%9De-BWVFt=xDIz^|ZUtWy1FBKIP zkx;WU_lkSIx10ajgz)ys5+gBL8vG#qC9aZOz5H!qNuBC&{jXppYW1k5ZvwstzqQ0! z=ECG+JYS#N?mU!!E^E@b$Lqm)a+Vf!@xb*cmfKzc7@lyW9(i2IsPWHL3VvqUKF z(JIR;GYv`X%icnXiKbPXwciJdVct0{*{^clM&NC<6dMDV-#@u&sdQ|_`^}>{FGJRg zX$AFbvAp%cp?*cZjQVAsyFF8}Q!fO@buR~vsBo(Ky0^A2(N7~*Lp+W^#me=uoL8Z? zDw@FVj1Ff-QSX!8Q4QpqJb`9+j80f4jw~upx5BK0d26ZS6SNxr1|SP{>&ragogLu)cikGC$M%t+qlhe6BPgS*41O` zfaMACaQR3GsKO(a)NtJ^#YIs5d{@F$*+bX`fkO< zXRVi>4~Y);TU(ClW>Wb9(HYkSN>7JDZ}bT&mNbbHxP#9Sa!p)r%9Q!XaTbkHFwav6G* zT-U~Wopema7fTDD=?i@b(hrh>xFMjjA~w6Ot*96W2N~4W)`A1TlF*g-tC`mZitfMN z?Uv#BUFhSB<+bafth@N8f=pe|tKap0mW5%AGfo&ZnNWxEmKviW$xuPyaJ9|^PZ#D< zi|#RFSBM|suyTtvqovb%S$e)KOP5$P`$e^ms@$xf_9BZ-=7-< zzEH#$FhU4Kv!N}d*}6`@;Ax%NyT271P6ng=WmUmy)$T-4htnBTn5|n@M#{;_NhPES z(M+WHtxJ?$N8CX8>gwvr^ApVCoEkk*JtD9{Yb9>>eUP)!pkcfcFzI2k!N?G*!tPLejY)J z;qT5TyS<(0q6hamqGt`b7>N8|*j`t;lxs0z<~^NY4!O-qHGd4xh;l0M9pX|eB1Ij_ z=Zt308S+nei1cA5ctWS{o6!PSZTEM}*>Iuyj~fk!&5+`fWl`UY-p!!}xB8{#rly#; zEB5^(;+&kA8PizPHh<{>dD{}dYY;J046LDH*yr-7X8kY-Yq17GDFm&n+1b8m4ze9V zW8qV!DA3EufA}yzm?Ju{Xp|ODQ>+NCF5%prb(XmIH_pz6-8))MPn3YEw(Bw53S=}h zCVtQH&b)87X%P0-ma0m9iA)JDu!VYz6aTLEO+8!k5LnvL6uuZWrdU6Jv8Nsu*twtE zbE9!ib>5tas;e$uh~k47!mei8bT6)A2K$Bu{jSa%Z4cFRzro?>WW1hvg+ZOB0Yx8- z&vqbx=rsix8M^}mso%VQog*BOgFK}WNo$B`y|R%uGc&7?omO-75Lnir+lfvrQIo%S zu30Q}e7UWj$#c?O-4@!@Z9>=l(F46Kv2Ncvo%3AHHVk3q#SZRqi}W=!iV@%-+7q}RNd-*9z9}E7GreJ z>%ow*7Ug;(*W`^beigb$2t@6ZRr>VwT6nE$$M3uppTv_>JjMrJ<+zVLo}jynm`}?j zI6rgQwySph=M||3>b&%r)5XtpF?t9*}eqG?{0=C!e= zM|`_BpbH1v&Jf+)lD+~$FFIc`L@nlNv6Ld*T5iA4z-iI~7MR40`vYTJ{eb!h2WIRZLZF>h1$duz zkZg+lR>0-@%|f9RPP zDPn!I+Ja(6b0&knwf5j;yq-6mfEemEiz_tk*g$>G)p_ZfJuq)b++!wn9URcrJsr#b zJ{P@&j%--??^esiVvaaaNHLd_*@09}Mab+NLQa_W?(+$?`~GOoCZT<9`R>lj8l^cn_POEa>wXN!UTQ$zK>Z6-D+X@EctM2f{n z??bN%s2rBA+OE%=u5yO?kDVE#!Q(`iH^;}g+r14S_kLW1w`6b0w8v-|yy)}QSzlp; zH7PxO_@~kK-y^p}W$q!Mt&>EiMKL^OWl9PQ1!Bo*+C<6*I`AjYhmY)$_w35he(uo#1-0*8}D39-m0q)!4{axB^Nau`{_- zDGG^s!`qu-k5~(YFLv67hmFgrhUWSr$OVhk+*O0dwyb@D-9K5x#OSzrcsc__tHfHs z;G|rI*vaWk$CtfBe(_l+R+e<5DU6i)0r&ngGouJRRV?-|V8L;XLOFlLN*mOu+z#5O z#rO*SDZvmtY|&!{vzr@lWv-?IA&}^gzvq&^t^g0qOm5 zXP51C)x@VCVe-pkg?`mci{Y_tYP)i`7k25a&9FU}ld~YKSPDwM8|I_f?I^My$K_UI z$aRBZJ$E4|t0=oDO@79y^a3@)2Y!9knw{VRkL3KGAw@5lSnGA%VAk34Z7_?ql@r-u zZ`IU*b9=X3y8$0hNKhBUD_=7cegIb}kd>KP#D5hQMnI)AhFEHq79MF2^7E5tWMG&< zZ`(K9F87s1$+xv~rE*jdoF8mU-$zHVxH7MO7q}vS`*tzl^FYwTe1pC1*RNlv%crsg z>&hw9`3Y22RIG*LmlUMV`CAO!tS)PdavhdyEO*8kOgclUW<5Tl4IV?j0;4t|u;=RO z-0}DBVE=#qij%UxC>U(Lk z-0COiNl;SfT?z7)o~bfcR#u*T_*uk;`r!E;u5N6w)qr)kwMMu1$2Z*Vhq)wX&LD=0 z^ekDZ4l zpCsKo%^zjU*RIjy-0%5z7}rSo?|RJDz1`NimUbS>5%p;ZxNo1Uvr^0D-zdpF>+`o) zwqI`5@`K`|7SuDv^p_<9Fi1a6n+3akmO85uv7_BQAM%X%^L+^5SlI2A&&f6tb;=O~ zF{m%_V+*)D)tkg@0V8TG`g$(CE-@-^<;`s`nIs<`r}cid;Ojh3vT2-Sp5v?@$oH&J zeqO`?*8>fvx<0)Kk4GMFjZ9tCEl4`Ha#?H}p0tLMVgE-9=&qLUoS486W!Kgaj`5ZV z$k1xY$vrPqk3LlaC{cP}gBk-qG}Lyai$iFe-ZT{5jLcnV%_ZtNjsN5pdPy;TxKdW3 zb2B+?-LJQodSSrm$KP9R;_tEK3%T}1T{stRU9{;rA5RmZ(!H-yEBzC(6ykT}w@TAT zWAhq0S@h!Kv7nElo)^6m%X#*O6=$f03Hwnv&-S6A&1$kpPN6y;f-N`RRa(iO&6s#dAr=HND~Rex7@|#L?;zqOZg2 zQAWlFb#?d!$^vp6UP_5jjmnOESU$Hv)ad9X8cuCpGMgv)#NMlRrK_u}O+Gv7>b7!N zeMRoV=DfO1(@4pj;68;IraN!hdFEUjvHBHP z)amNVY*D;v2t(@@svD5mGyOn9cpW4B1J~)SJ9U)fSc19D&TSPpL;6xW&)Sw-A>CiZ?qablkyHMjF#*v)kx#?8~O}`cIZL0qG6bgV_@Jf2VBz#A_$+ zRXe9r?X8Q%(=e7q7 z$*!?4LYwX~`k!=70UbdwVkF{AaRnUG6gT@)FMBKZjrAO*g6fjksrg%bd-h8OohzOE z?o{h1K&pp&`EbTmxuWk;Iq9(R9%jMshb$)%wJtv{mDSd|1$BiJuLMNX`jn-$&bsfl zrVguhUE!-deH(BHdBAObn+<5w4y`1KX!dCKIn-|2U*V{qUDC^p`g%;SKa!l9zAtF` zh3WEdU}DKj?U>J}6c>~sij7BX60*^C$=X4C)nzMHatlj>Wnb4q8XVNhID~YU?rO1^ z2zuD6+(4YGlZctC;~?s9IM!4AKjD4G4V94vmH7V}_%7MT*uqbf09ECe#>IHw1*2=6 z)~eg46^={43BP!hku7&mE&u>3ksaqJ07lo}Cjh?Fgwq55!KTFly#1l@7!dmZzbQOF z#Bzu;9~#?l9prjP32>F9lVcMj$&7eB%TFkdf zmwm?#B~VmPBm#`GNEg_m7NUSuOKkxjm>fv`Fr8GE96nUF?I8LKC{|a!^+*oKUe1p^ zM}_sJy7-$$EqiZ+Cs(sYVORmg6%_OtHNdJ&L7E0vX>Y3@`-Mj3K|aur%@aakn(I5* zedFriHNN$W7@o*2ltU)S!EiHAP`BS1c&*&Z9C`UE+DK%1w}Weyjhq9~%y-fFg?}?o z<z-+oWCAygTu0E8Ce@^Y_m1ZW7G3sTPGdjgQ93*;N4+8rh6fxqSCw7xR=n0~ zDlFfpB6tM&n*#nBuaB)nUo3j*bZUye5KpDz1%kIhI;x&`&=&p?dtMQt*xR`kpI5Po;;?cOUaZN-&H7m`O#u>vHe{W>h z5mnYKWh7(g6!{KVRoH@{wh^o$L_{OO_cIkxnLYmNwtDKTxZ(H zee+w!@Ajz(_}l_qAVL_DV+0*bf>20pNw1r`*b7|VnA5G*4zbV2m-m^F`K4Qp%KX?= z?16w!P8Jp#{6%fgmX(#1fGfI2+A=oE6n7I-U0Ohbm@k#(O`hW_=;avQ&GEr75=I`6 z;~nXW9Ghc>PKrOVIYjbR=Spi(UM*zW0N<#Bz`}kKwnP4Ff{6Kgn#~5+AB)=NCGPa= zVr7K$;R{Np-+Eu@6M82Dc%_>$%H9{BTiEu)((90!LiXq!W5eCiY#F*Br=8A?_%7<& z$I+PZ6>3CoI{PmhQyTHwwGJ%`-ycY(sq-#ihV)$X|1wmbXu)zp5$NKO#fpQ z65`S9?+t#7y~*K6X7U4y!pr)I2v8%lwl-)nu^;Q)-;@hW=GWJL`_Zf(Rn|$qH~%aaG}Wf2 zQ~7^b0=*Z%FiZK&h2@Y-nV~THVFzbHduGD`>&+WoH%>#4+M7p!QK?%wB7j8nUlqWA zi$(E&Y&9emSUxLW2Pk#HW#T5zpgl zG;qn}o`=dM|179>%xj(~2+1ogjeD+TMpKKEhvRJ-Zvg~;9WSWQ57Zc9;w=bZ#~v#F zanrITD|`7AkP)f(O7VGUH@nKSWPvECB@k#g+yCRamI<ovR?XnAvoX$PClU0_-V zt5?>K7jEpadB2B7(VG+3=|U=j2)W(Be8OyaQBBReGE!5SV!furuq+k5pK-rD@U1l` zO?<8(y>b2|JqOD^s$3m?uL^7>m6-(l#dv-=6p{|U$FrVnBRz8*Sms8p3(|d;cmm8* zuo)ZAI#b!(*@^d-wn7#ZeHSAPy!yKO$=hBbV4S{5bimr6 z!(%D>8Z3Sk?djKUq-`$Vs{?@|m`+f@?a4KcPpTJ)o572PFrOS7_n`v1NB{Wk^5p({ zsJTQvH;ysipDyAI1Ld{V`X=CiTX;BAUQeQ0l(0(sxcS?>eRr(ng71$maA4N$WXVhk z*k5NlGmcPbYv^-Fc$KjazW>0&e6uJ5!T%*$iA^{3X6<%^sIRk>r;UNZm?_%mR!%c2 zrQ`W9-McF=yJ4DmK#rosxk~fUY~u&Fjt3Q<<&o9s-xUJtaPw*-U!V2abbs8WPGy`+ z)J47;e?yQcB2$8X%G^|QAZ4@KiSw;JTg_0XH|^20M4Y}zwUc9bkcjOy_zq5-G(vJ2GW4^Wj(8oW znCybKT<>#8Z@vsT*5DJ)Gh+O3{mo;2!?v%le8yeyX73$GZJ1tgh4;|NT`5w$sMT}D z)~=reGXEm|4uh~^qj#B*B8`T>hpQQ#og#acar$6M*(W%u0k_}e^e*cT{f;Zvb;uds z{!-!#i&NN;GGUwOS?3lF_5p2(>?n!(Z1==YF7wr!+zZFk1Xpbx3`EkLP+orXRz3e) zZ$Gm#BJOC?pcMdBuCnEy@I=c;5bruClWC&88_JS3l5H}35lqv}UaKI<$0 zaaFw#;At+4X560)K*#c*AK9LRZB!N;umnG45J4>LaFajW!iDuV(waxG50^#xpyNmE z>zSNPf(b6w751>PTuK*b9}mxeCg)3M-z_a#K1+=5lp$_J&Et+c+4sy4HjKIJ`Wn>z9bd*>Pe7m*Q(eOth}Kv(6F?Jaos z2rcW&ogh|^Nx%d!O!a@cMsvs}VP8-DtZ*wFPA!(9zC|aV7r$ILnfc8^O{vjf*4*Sw zjyh-3NniilpaLqqXU6Jk$V~NgL39hI8qy%3C*!LA+HY;yG~Gv#MPBc?jkhk@1!V~iO411yNRF(H`mri)Ka)i*IRy$MYDi~ zZ*6m!B@AZPbL7%vU2*={Wm`VLV?!SK=TEa8jVtHZ!~IjMjk*l)zu(w%wN*`4tIBXe z&aulvP7)QYjC7tuW3Ml}IVlb#6&U0XpI)6Dy%1AgWPEz#$$cb(qBPut3=)3rIA63A zA}hgutc4|36h0(_)%7JI3eInx<=RBTt#ip;LZv$Pi=xom8xlc_V0?b_>YW!q%~8Pp zSpy4r&YVNQl(LCFW|m0MSQzh(_uPNDpbKizSLdRVljR^ zTH?zwlTK>Stu@X@kBOCahblLX<=g|>W&)7zIWHW<%`Z1;r&UId|FO7qvhxhWOue^G( z@zT~vHmzzn2c4q2`tl@{#4N!&YC0su3(rHrgZ8!~WrkF6%+_0Nsn{AEi_f0uSRgoN z>NAuQJ>hs#>*AU~BtHk_=P%UpDGs+1CpTlyNqSCG1~2{1M|gYB6s4B`Yth4B{Qj;V z81Yv8?uoweU{~8}Yh92$acb*SildjCOWHQ4Q=EVm_o@`z5{XXN3uk7y)YbL5-u}rz z_*?N6ze|_FvRi^fkfnl{7H>!;C2$MMDnKg4jN2hn7Cf1#IW^SS_?FI`7z68hNOSBP zEEe%^zPWwwne)j%oY$p!UwK^MwXoVbaLl1SH>#>cg`iK`;M_j3w`hsrGmK8c7WDQs5JmQm{OIwe)KWHqK) z_Jl!f1m*hVGgovi-!VBIn*7z=Da0a9u5N-@jpp+aU-AtOf%0t{V8kAY-kP8ijlm*U zCc2oUBjNdZkNwFKjKl+)xUli@S~S}Z^^P_+Hnyu(K>1J3$4n6ndtR?T#ppMC{q!D* z;mx?#gJ23FTUI?7-(qXIcjN^QF`#Wm!}?-=$Ljgxv+`zjHO4r%P7HVd3NZ(p8YJAb`o=5=qI^1IwYJ{575E`Awd`Ny^LyMkfo8A4J zEPZ+?2r>Q_?<`Q~VRk5qTnkj}q+pBnQcWQL`e(I&#-UD=23ofA9%|xmf4rYQ*%GbO z6qw4@HpLu$y|iL@7x&8aPLdQZKvunYw`gM+dmFW%R&_mc!8= zrq%PAg-NL{hu_rLbF@N*wcKR&zyb&i zi3c%I;g8qZ>M@JM@#0yzi7qF^xjQ7}*ls)rm+PfAVqQ>AkrU(U#Bl@BGPP{K^NH}t z{3Jq=-6aSqhJ}AI%ZC)!DlAfvP})U#%uCu?%FlzgjP3|oF&X2Z?$xUzm z-tV+Jd!cRS;ygDlAY0fcf!E)=gC7;nG3saUW(uD!Jg02){Ds$tXmy;x5KM(FAWmU8 zqEE|LmX`IogDYOTIHDGOcgk&IUlWyD5yOn{`n8bRNiM&qZCL{46s#ch zL02dd{ym|uUzX}7@@RY-^CcsG+~|nUduC~5Qdd91b<=B{+G=emD4?a?7Tb?*z8g)S zqx|ui?rvcuNBrcp_Fa%AyxT~G)R)-H&OyL(F2(ubb3K4Ww`rTw8HWr~0&3#Sm^X+} z_qK*(IZAv_8G1fK#vf|v!h5xQUKDsR0(o{P`#3sjm|p{Z1wGxeK8g5a^mP_A>U7?` zKQ+N4LC%;Ra3Tmv&F!z?UvO1OdfeAH6d58&V?(R-1EB50zj05ctm3r|?s_#LuQ#@mRY|3v z5O*r2uw26Gsf8KVm2C=>B($8k+}b_AsYT#57r_-+IT%Cv?1R>kSF&r8 zfaITdGu2i`n*^|WYVJV?ABewoFFQTpql#6CilX#Q!Kv(c-)xxMR^~uBY+l)P@`ibX z$Vd_AyS-2pcs${`_4k%f9{ZYaW^nihr@))>lM=W%fcm0NUCk%%lP!(jt1s{vqSPAr z#PM{49=e^3LDQBs#_`5sjg>e|qM1hU8sh+;$shVED7YDaZW|;b(nVRUE$w!=Eky+Q zCvDgtq?}$~%WZLC0gw%O*3_iB-n;`)P39n={J=4ZPU5M?&QJjCPgv5Eyyl`*46);+ z0=!z1(^PcUV5z{m8+}$7B@cKQ>)nu^3DUKL{u}8_z~s(F(zj=qO^o}-{n7k!yKdZl zNKExX{f6VeRXpYJUM8T(<<7!^#bba_(RJO2%?(l8x$&%D!5lRvss%+hRVY>a!jvHtAMrnSIVOW1?BwKho#I4v{zv1WKK=E&6VJt2X?P0H~?82vgH_ zF?N4dkPVTGJduzXEfU6e^;8+;k*TC_$1AtGn?Yc`zSvg01fS0EZ z*lX+h5X%{To-rIl*G3lK^vNQGGeB6_VWFF6m!Mm&8^Psq7b$jJiK149eynUns&;gE(FU~eTD+_q`jMKFBpOX7;y_I=rfy+X+M-t?CZiF;s z#GIxId#AxlZkte^%pwt5+FZ$oe)9}~1TLP3gt?@ogR^sBnYFDn9dUuJ+m^wDR`Qim zjZD!{?kG1``@;z!&jwGsv5e;<@8*xbUmU3roqSPwqqig^uK>WCmnw!(TD%GPtD75Ct$FIY5EF4}+$YJ|*^e5k_Bp`Y&3xVT7D;B7;<%6%GSPJo_)6 z!}vI9{Eo+XQ=6^NZSs?*3=U&{k)x;==14{LSqQ~U0ETZvg8cN|gMPy)Zq=&22p7)Z zr|4Hn_$4eO*vXnRpF6w`F5mv(LHb=ZoF4K?%_XW1WoNtK6%hH4#P<)3K&MJKMI-Y8 zJX2zOQ4Qqs>s7fkk4-Ep1;Vr3b^@>$w4cG5PaJCjd+$+9 z`nGw8^7@0t^SP?Lj;KxS5J2aHl<#1Nwqe< zl5^R|H;@M1)6@~pjqi{dP0g}MbycYnxj}`kdBs2)hZq(@6P*o;-xXmB7A}J0Il)o-u=DJ|iMR4$cNk1>Is9w+G^s^dcLnRY5U!F&XU0 zwUnPOV`#zR+=&BN_}n=4231UR`=p=R1dM!N5R$O}Jeq2C8?w#xBE8D4_i6VMC<|P1 z_bpl-;`s)a=nw;28;yQCC`~^#-%ut>pzyp>d!I9rQmx5NkN4d#CH_Cr%vV1jBZM%i zC#DSK6YOepsWLtRy7GqV;Xs7FovZ-*oez$*|=Z?8}{1cxW`)bu|pc;}d= zTvrzn^8j^kJ+tm$5AIU)(x}GZBVHxuMQB3e(k31?(}r<;g|u4#L#(_xR5wAF+Y$K& zf1i%F&zGIg0+?GO5UYRjWhqr$#ZaKNVKI8Y(VpBRqAyNga>PgjJ?aOrG?9KkB;2)LErxSlCUhlf>19)T0Q<|$8KV{ z?<(2O55Byf%Pg{>dM3jg+r0F0J=gEpzK4a*_C^I@C&{L0SR*ju*Ng`o##j807C@ti ziKUp`JZrZYH}T(*dqD9&!ydA6)xIszn45s{PRr=L3W0GyIE)S)YCP44!(!1=K}^U5 z_o!2CyNtF2Ue!2SXuKtVci#PU-i8h}Xss4f`B}uv`*|SW=6@xV+Etl2%gVI8`ukkZ zx&wx{NT~=nq&TK_p=TEz4t-_k(x|9zR6jfd{&A`|3{76*V%qCNdOf%|X3UFe53BAy zYPQ=fakM4R$($%4k9fv5hM$m^hk5bA$Nl%^zX0pM&D?T6E60xP-d6?EH1QrpXTvmr z&yW6#*9$$7wYbW5Lu2Mm0yZS7ij`CGVs8pM(mckAL2Nyz5AwL+sGMIn4b#NHNIECU zIa-Zb80-5cARbK8qv+t=kZo@-j8P|ii5=JV6fY*3Bf{3MX~nhx!qk7ADYe*pH+=K^ z2}{Qv&qW|_tZoy1)#lbe9R6pTg7>0pWkx_mF9ept?P z?BvdEabrk`rsCHw{lS_VMya0UogKF1AWb7|3D?m73WNi6{|3T=F!cV`Na%kB!t(zK zgu2jj03gH=5|X1r{~yG=>QF^m$rOft@@Bh=kSbildM2HZry{%f)o1!YR zo)erwO^E!|1@C ze_T5rdD(~OykzeVl&H;6dP zFeZ?i=m9b;P)GeJMwCWSllFCz&-Sne{M1lU`Y;#9R$8q;XVye2Fr4O{I60K*(}umz zsl7N5p;MKsS8VvXW0jwf44K*#Fa8r0x17@EyqKv#b`lM+r%A90c32^1HxF8_@IKBY zzf@a@BJU~VzgB{!G_Mu33%O*?IA&1eFLBek;d%r)1S8d@yd4D9-L}p~j<$+;2(DiwBp~ZLRg5s5w?%rJhn>$T@t3tv0W>3;(DApKN-w^<#&zGqE~$=n|0IB()XTo zuJ;c$zWU^s!m`xBBaD;&JK4Rce4@JsgZiSDYmX>w^|=gegV=KDu#kH2nm|5Zif zFO^?nTpbd(6Fy|xA8a%brw-|;Sc})p;Gvt4g{nm7-@V+*Atsm*qrnw^JK^TT(xG(2 z7L&8_0W3ay4Z}4wbFN!yR2+8m%hN4%i?w-r=3Dj=y1fA!P`~8`ZEvnNgGCbj?=YSY zHJhA zb?(%?kjyzZ^fyOb9Nl)|l(Cum8T2fHRacDnwM>F8P~0KrD^E)1-n8KPDyZxHc<67q z@P=IJ%T(-X{zZ0DWtT&j^4|%lWgV=0Y6={ot7wm;qscbB=O19AhTW@w=pLDJSd+D@E>Qwpyng30@TFlBky9okuf|+ezRCO|| zK`0b_6NKXz{wc?ZZ+3$-7aji$aeK{p*PIfZxZW45k|s1}+vb14y;QxW+}LhPaF9{X zAM1M*)dXRV>+a8cSqS@O(NwgU1ps$ z0@dIKq=~)d+5~t1ylv@|Wm0KaO1OB0O#>gu-^QXmXokaaVAfa%HB~&4pqx9I!A5e4 zW*^8$W^1ikBs%$NmOH$^_rkp00a+I;r_c#(uaTaBiV_?R2haF<{YV2-Zy zpE&P|$dpJhtK)sH0qnIv?YapGMuSpMZ2Pf+BH!^sSbH|;8M_#TqHW6QT5oM9G>rBk z4I$SUmvDB{xT!3xS=x~H^~F|5Wp;t)&6T> zwPUsLaz889J|g8V?8PitzX>-D z{70i0i`u34FOm5&US0(gs$yiTba}$zq<2mEs|nt%TDD)`*r<0O4YSUzKj0}A&~8-8 z=Brf7*x9fK=Q<&;W;nQ58kAIAK=v4z^tth&%=y*xzuRv9?r@bHVOw&DowxBALp4)kKwgd0FT>D;lWXbzQ#S5bZT+(jkf;TuEL^B*#n z7qZ~V{&udL5_e~damdAW3*FD>ne772&+z&eSsgi=u0!15?;4L;Jvw`0$P@hjRk|1$ zN8sdHOVC?8_Ku3FcLoKS^NFnUy8M&5fYr3Gpg^-`oE@G9N1+9lX)KQoEQ^hnRNko5 zU|Bxm4W@S6JV};}JPdQIQ*LXLrc&XpyO7D`)(pPF&mes5F#oR&f3MCnG_+Y|vL|p+ z?Qf7YMRny;WB6rZGk=VY@BDBx5utL{d^)k=avX`|No+&;Q(Y8}#Brc*!dXJB<4X~a zj2dRRT(n-sxzv;IFb@uUYom<1^ezlW%1Tz^k4;+Plq0k zz46f_PwfwC+~8;%;p=Q~p@a&8jlt9~5%+U8~WTJk~pjSFb&` z;YL|!6mBDRo4o0IW>P7xmU+<8--q|AEYy0pXkoP=Z`$>`9RY(d%=_j57<>+fRem?r* z#f%xwk9^)oM%BN90f3Qz1u!2QFgw_50+*U6B~ptxvJDk&wGdycmSg|`KShJpqf*rY z%>o~{oRBx{+c!9X_X$wRz4`)vc16E}l_`=4GpyZ{ zCnqe=Ti)2+Vsb2QS z0p<6H0jM0@JV6P1ox(rR-L&uv#}nh#$*Jm2?Kb3_067doVIJ@9yy0LVK6QI}hx$&e zg_3>Sw+-p8#J_&g++H8R@x7Q}L888V$3>0c4i$QSvqEmDpYZ1%H^%XFgnHUL!8}*R zG@x*=R+Y_)Gb5nVJu{%iEZ+ZMsVR4v(cOpRJ0k%EY_m+@<2NvT&SG+!U!a=J|; zwMpQ_%jJd29s!vO)gEQX1VbGr7_QEOeAm#0V#`+>EqBJd7e)Y83IoNd(E(1zsZ$}- zpRL#Xcxxxy*q671X(4o}6}ju%;DG+5%fgbgoU_yKt@qg{$QZ0-aZ-unP+d*F6PsC= z%gd3lKjkxF4-WWylwC>H9eTi{F+V`==49;JHK0vdW!{52uWsux(EFh}2yGweSnWt4 zg6JS`q5shW2q0?rZk+)io^1MX3Zqqf>ngWR0~j%txTa{cKG6#iR4l4p+&1TPTj`&_ z474~I!Vj3@T_hL!jPhv_n2KO!n$EkM!1d(C=SE4_unvefG>3c8Uvif?Tl@(7d!Exo z!b9Pil=5b(vk!2h6tOZv`h4X0-^dM|**xa+5HcN)eU{@uN>83xDq2_@{DG$ly{q(H z?{U1g4=?3|3}gfk>WzfQ7yNxXBiX^0Ide4Ep5M2s{1Ez0)}dlgu&3;6_$wi%q+Q32 z;R(0HGh*Asm2RV{5eE6elbLY^Hqwl!;>~S?n$#HP(rWP;yVi|hGowg2$b-S$iu6>%}9bu4ylb(#{(;Nt#XkGB6*sK|75G_tStD6z6y z=|TNjs)EBet%^p{sH(Qtb*Z(uyj-LrwP*2V8F;@wC^%{GRPw%-j%96aE7s*oM1Q@d z?u841Xf4tDq6#A*j}Mw)6Uvr7xQ6dsr2l}tl8)6hBs~#JgpH^d&Q9);h;)a&>sI)i zIzA6@wiZSF$omB-dGh{n;RtYVjVYj;^`-!EJFns9uJEp7 zy{DH)=Zy|K@{2T&AET*eh6cN)|EG$yE)CK-dpbAwW-Ul+aHH_>nAEgMb#nj?BPmSw zlG{iFsA9(`d!Jqye>0#++r3&SkfJZZL+Yv? zaR(+mT=roXHS@?Oy^QKTc}TK>YgUn;t{Qe%5x9b7QKw}^f;;XtN zz7Fn)5!=3@q?(!Grh3f}mYF+;XnU-SO6!X{o$fByN{DJe4f8~KJ%WsWqJ4b&`WS&7 zr^b=13W*-8ZL(CWq$ttTw9ZwFm+>bJElAHJH(Eq{LNz}DRHbj}^bVbnYe%Frn&V(N zicbw|qJ(4af$|#1)m7r!ZsV$t9t&-7MI*kSRdPHLikrAfr-jF7#2D>(FL&xu0Uev= zb941%7P}bn8@rsQN;NL=u|fb=)rwr_u?c0An%Yc%lyLI&7!)L5z?UFjW(HQQl{>@P zN8isr%%*&q_WU@Vm@p1GRGq@4<;VKvuRhc)demE11O@&!@O?5pV7I%WmZl`BQF+XA zoxEY^VrsfG`UsNic&h=dEqlqh{880!e#TtOEa#!o`dh~Vc~U|o&N|{3p02}=QWFR$ z?6*;0Y4tn4%xYJ!*yJ5#j%K_-FW^;_SAzT7{0{GYr2mf0k*Hfrym9c-m&6cGI203@ zk1FC+U243g62!9hG&D(ypujXg#=LmmKKROx);iCbgm$nwfNyOstQ=}uG&7mud($LI zElawZs3hcr1a2uGY2TysDwNA>=Z$jCC)ZQicY1~1tnb4XvVu?*1W%*c$GcuwE#CYk z_sW{c5h9#3E}l$97_YK3UFeoXGw)*f<{679_tVpI7xJ{Y+Bx0*ZE(XXE8+W`cdw&h zx%_&SJ|BW*z%O^+YPBvZHE2{%%svbC(zOvtsdR2uI0E3SYs@en2uHEjPxU4<_YL-t zpzz$L+PRD}uF>B?-36k(GFo1$cA~~3lYbN+b&P+=mjsP@#%~fU8-zPi^{Zccf(3P; zc@HI8N=Eq*#AOKgDI@ltePiwO?5+w?hjnS+sp=KRF3&B3HM~#^Iy@&LaL@Q?-T8AP z{0ZNV#G1IbsGJ}TeH~W;2lFa8BcGGaNH=&lPRc%(c?40x8A`LyIG_P`O@#I!>N^pK zKl0CvPhu0k)ya>C{cnQu>=wmy5~J#~>2T>APzI1O8Kg^{JM3@^8wIzBal-=)UAlo8G=jO? z$8ezUqPbQvtn=duLC$bO7abPlYk2khW7UmKW}p}SJ+AVAP?jj4Uae=!D~;KHp8jRY z9B=&JYJYysbPa*=e)k3pndqbDph;|Y>CTD?B9&%jFN zK`B>{)hqLLftzEtz6R4&W-A-JlG8_SL7I#6n?}qdr4`bJcTlxxOJfCUM=NK=#BKS_ zXSIEML44H8(+|PX7j1@xPG4kgcdF7vAQx7!n`CP9yhijL;G!ZPc&#u?L2Q#Z#8G#s2PLea$h z2=N-mEVK1lk@}JVOm-bc@s51mf-ILaw07yeWC7(5i?-6T-R=5n z?|!`J?-3ieuGApgRNNhLV{Hp>-di3b@Y1`8Ig9wR9 z;0|8#pA2=HoO2%_pNIK@aKGeT^H*BqWq`~08>!+u6E0mO^bFJ<09+mSI<`}Vm+#Hi-Ws0H4=$UC^kZfNQ&K~L z_F6Ld>nK7UfIMng=3dDX%KWF6?{X!zkT*F`hB3tDCSIdXELF#)uKjLDNsE;ltJy^U zo*g8!CKp(OC)Gm2!jY? zeNlqYb50*bsruts;b<1Qv>P|9Znu1AypdKQqU}e5dJ5kl8>yIwXCK4ZP{q+;HgY;% z=9`=*y$Vx&bd@YHue96FW;k7W)uEB$r5C%Uf8XmkHQg0@7!C0dzD9V0`Z+UsYduIr z+zX67>CNw2@s zlUb+1%956oot^EIMNxTqOG`=3ClMYVx)Z4Lvo9cr;CQRljOOY2c~&Ndk1Pxf%*+&{ z@d!ObKrRKEX}SX6V$2)Sj?xr_SZ&&Rwl%8O5w%DMude#;;UQ%lBt%o7mI1IJo1BkN zNs;q6U+Su8D4-@TeQ_yu9XFFF3FF2)$`(mUPMr85nOkA1tW&1`;=S;g%wrDl@*=|k zxSpfVXs9t4Xl4CgRj0ZUr``KB(mx%KSr?LnOJYQH5E7m7iCOopZj;U9_MrF?M@gm= z_Q9uI3*IRWtd2MkJWsux`_A)@)j+14V0~nyJ?A$~KwbD-)DfLDs`#AjJ@)v$Yr03T zD?wdCMo;ge8BPsZQ=Dd4{_4fU?etvb@yePW9kfiCWAa;hwV<=0_JSeu^x;nBj&g9iEo5tHZ@<#IGwS2)O#rwfuC*FyT67 zb1nG!`Ghw0M!^X2HIT{tEQi*G;W;7_6;(U*`AHH=4Ja{ zJ4b70^jp#9*GSGTD@eJ-;La-d*h#{?48oi=iyZFHF=VUor)&4okr5O3UcyaWMonU3 z!b)_5#m)}zW=({jg&(|azb{JS8PaIdm<~YQT|_DM)7Wfd$l39Yd*79tyR)k^DTi62 z(+5(+hnCt#-?tMg%T03-I2on~!%807756h|qLL&NJC;bW3(fED7!&t|_)TUeW|J%l zUted_=R7tyQ&V-Xh{Gb}l7CqyEb)@+uqxw-SMj=(@nSI<#em?a+aSAZ%XPz8EK=i~Ey>iyl# zB^FeU{rshn&yFTX*?23+Xp_qQ=G0w6QR5jlc0ge$XDq^bq!aFYJ`eOGCI^Wk5ln|( z^GsgF9ZI>4O+Vhd$7@=*L&`%}7JaGx%KS8|F$Q+3%L(RXXOwdUuRhQY^mB!B<{-?6 z(xqSc1JG~)^z`m{%sR20Q@VWAY^TX#Z<_U|C>8nsWY~97MNNMrr?Za7={&aH+*mK4 zCmtT0hi%8WTxgTEn|K2;;q{+ROAFbuAO!1aZAYg7?1X z`)61iwFw8rf&b(JmgWs$YIq2u14rBce+WBBz$8xD|6zue`Wt|XYoS#7(1jU;EFuu=5DTs4Mn#Q8I}f%k4J-oEW16^KBy zT~7HpiUb}Yo^k!IQb=OJV^=t?lXCLI=Pq1TJV8Eqwa2a`X`_~gPK#kbO-(ssH_72z ze`5UFi-m)HC7Ue_8SYy(mRe3B>ps_1ljs6IfMFlcDXfO`n=QZ=ZXo~lZ83^A7RMJ8 zg@LSX*QFyln5iUc&CJYb_b;_Vv+Dt* zXSegw;c4dp1VtDfSZp;El*r6|dHGfL`H`cuLyd@|VAtZJ`jvDG!v4$0+{;s(?@v!y zC`&a&k%)BiZA?`V<7jkNEL?xMK-}y0l7gB-Rn~rKoK6Sa7qzO)b@h!=Ck((*&R{lP zov{n$pE{|ZHlieIun108N_1p>?(xFLs>f@EU|$Yv^kgy#_W90pFrG17?3X@Oznk0T zHHDuD4rIdk%eZ8mKvvA)UA%8v>mHK3l^o@Jw7cKHs^sS660^(cTv&wQtE+UsZ}odA zsw%ssswg@MBhDdilgCH0*@EBf3)J5o6%P4Pj?z&c`HHP{&A7P!8A3P!AtDw&K0Y>5 z^6!=c{)6*zu`$lLsz(<|F8Ox)Cv=KA#jXAX@pJgoZ0U@5d3NVXl^*+=V(fTU(OEIM zUmHzfB@w)|K~--x7cvfX-9+E#wXphm;4bY#TiUPj=<}4zkS)}h;|g-u^g9L3CbYzf z=oU$?N_k!!vYCyPoSsA;L6;JcK1rFUJm351Da3K^YiSvlTeLpscel?DT*pL&0uy&3 z!8>`7ur5$Z#Ad!JmEgATaBtyuuX+O}JY7TFR?;Hl7LJt#x|ka(%jexvioyu9X*ChD z{N6TLS;2IDw61U;Ppg!cl%$@K-^|P;pw={nbWjrTw%Im!d2}@RXlZck1Xc}+it3P( zt2}|Mue3F1*!&JgorEuI1Okmjk4(&j3Hi5epZzR&WkoZKiGXql9m7Ek3oFWpHsw5+ zGcmonmS4)Z=SWg}O!48kXoSZH)UE0|G58sYAXXBjg`9dB2Br}nPR=}H51)qkgZ+zT zmjF}zj2DQ1uu)|l@U#5-VR_X+MH&dk<(221M;etQAT#wwafMldS5_0qD3`J+0*Am(Z>hk1R~YwrOOf=O%H|fh zbD^e!DnRMV?^vh#vi=0bVq#}^HJmbDPEcG^^YiCKO-YTvKatB%v5u)zHVFhKu#}E3 zG!0o+r}c7tA{^$Vlky6f4*0s-VL-J44unK1Hk?;xWGrEpUpA zRB!_AzW2Y&trw>mX0x8{>nRA1ivy5Wua zA~Q_RrY2BPAYJBnQkIe&d9`T^kWH;1*y{DSsArZD)r$rjDsw*zj;LC(oa)H2{XM5e z<7P_IQk(L8He4cXnlxcM#HlaGK_a8$!!$^jrD=A?T=Af5K@p5bVo~v*igy2`qyA?M zCjQL^V&(+ge0hmxnxe?g&Ru%{G7;%_Qmnp1Ma>6D%_mlb0}O=M*r&9gF)`Iq^U^|0 z2A~{wD7zxb)p@{-R3jR*2O}h!;114>%O;~A7#|)TrM=8IpacMckSNKJuJ7O5AMh*m zQ_zqO@){auW*Q3P;vDA^P%a%!#aFLs_F=?Y&5a1>A8p@Xa@&}q*y20~2x!S_AZ)!n zmdq_2TDAWz+6A++!WJa#qoy(?&-xB^f+P_qWny%twK6L^yNV-d52tdzV4U5xGZE=0 zQEQrdQ@4qyLxgRbN<$1%dPw|KeAnhP4i4u$fxiF@vc53D$$Ih<+24%n z1d3{mt=f8vO**MfotD~=qkpnn5MWHijLXDC?uU>|oot?gH{CNqIzd~?taGw;d zgtQAjppTZO7a`F}Pm7N?qB5q{1@wke`|pI<-AJ`s)9hEMhQl9;d_O&#c$akWXSbZ! z|MmZeg5_UJid~A-qYEB<8{@;e=GaIUodmWtw-w9oG#eL+A_&a(HXmQ39?unL@6g>F z>BIbRCF|q0&WdRl1D-AbM6Ptx0P=q?22sK-T*)aEpc;p#Ws1V9Bz$>vd!o3#P)MD8 zcl|mAvVNjL6hj2Y7qC3i$d4Xa;Y0)DBm1kP{ndZ4rvmPUDUe2!r6D{a7}te<7q1L) zBjPR~51?68;|6k3qL(2TJ(*Dh{UtAyYuoC zCq+C17uAev9pw1kKMVT3L;!t9O2PP8S4PW>{kd!~e8C$Oi=E{~^H2%&&o~C^o>}uZVv14wa1$7srMpU+9*<*}YvQp4;-S;6w zZHE>wP>@IPw5R;q6a^?4SDxn7AH_;9#(a(;Y~yG9keA~|H@VH!Dz{r8pGSzCQ9@P1 z{E48WkW(+P;fGs;zm}7GLBxF?Hq61B$Vm*qyyfQ2^3V z1>TI9UBU^e#IyeNtvKT~Oi! z(Z#O=1C8b@+Lf!u6Mmaqd$WaF-GcIy0>kZ;xDEV<@B&xE;z}0yw~u_lF0T9f0= z;`uF3bXI(o$giC7S9Zc|m9Xuqz+J_JOpLqT^<5vccGJO$jgu-8Me+nQ1A)YfqsZfJ zRPWta7)8xzh3?VtdyoYs@+SqQg(A|)mvIUyBO~{S!%fau9=#bU62^k4vHbt)x8ULt zjO8OF^bF|>%KxO&_`hoJpl{&cmYtfKy5N31)v69d!RR3*+(+yK%N$jyxb)=SWP%QA zP+eP!@e?nxYuy3h!7cN?M_e?NbEjU+SKu`gC#Af!$~}4>AmNcrxZUq?J}^y*THoM= z-{MbA3M)`A8Z2rxWG^>D=K~nQC-ZH4jZ_o9FGIxd5~SsQvirOZ;fS`k3Y*_@0&Yi> zanSSa7pbM|2NG5aWOA-$KWWM$`CH0MPgP4}bbgCt9HvSWXofSfupAuzxod10My!(r zkE&GNS_~xo$jnq(4>F^nr4{u4pdmby7o1jGI~b9|+K{~%Ny;V%&Zf!!X>6%7rBYhw zy;aWF8))UDG^C+Eg1;XB5;Rbp67`-Wo3p9jCR_l*d;emvn1zFp|M>51Etd*4rzln6 zb&kGQ-1^~5yW>Zl)TX`7ZFbvMNP;uZqWF&=Qu+Ogo>%he+3BATBCo#Fm4>_?Emzv? zo=+kSky@Y|63oBG%ZgCm!JPG|@b)G$G&OsP)Yzjzefqe_!9f$l4ZpcW7*%I<-ZR|A zlpsG}r}QR^@-x@DcRTXqYv2(P0m8J8&(0lOg%cUt#C3(n#;WwN2knO`g{@7*_ttX- zR$gayG~Fbn30}Ux-eYw)xqk5s*_M#6+-zZyEA^>uY}P>deq8Ss?1PyAK+3@*2&ZO* zH6_rEdtUr``W0w64g#3NZ3Cns0r>gjPxdfB-DbRY4oAuJdw4iMM)<>Zk$!hE3>yD-z4mBXIM-x*-`<{be;q93`H}W=SY=x? zVX~5cYSR72mZ<2k_CS!E-qI$`juvTxh%s*a_eAg1kmqm=v8jgy4XwfWnD4<#V~7WF z#6o#WmEIE-&o$p$w~QbC}U zgmX2Y-`yb?78_UR0s6`i={@S07aEFn!~%*m!&a4JTNveM=Bpcjh(a($^l!kV-pf|t zn6ivPSix_+X#1^x9{(0+cu0LG|DBx=)tz29( z4T)=AW*Zlu{HCm8KREzkJ(&fR(sVqearhdbd?Egq=EKmxFxx});D?(T#ubU#*RP`X z(*{TR(pN$)!1c#Pq%WFy$)r7mepvcnVS7gl<@gD9`X`&)2nH*~b9X$Q#P0=?0P$ z&y8reLiB9KW@nRG3Z_O=o4glYRbPqLLO))tX#FP_KrclFXu`TgfIGA(w0BYO&?4VO zMIzi?Un9-v0T4}ehK9E%3=V(8$+(t)Cg+Ryo}Ta1Y1~C9#z%T{;;ySk~cMl z^$dxtxL6vp8ujkoyC?;n2?zq#eSb))vyE!}YQz|i<558OUTZ>Pd~_5cjW@r5wby(C zJq;c=Su8Hi6cno61^JaEmZ}+9#ALA7FKaa*oQ?SueNewB?e$6W)FNoK{a4Zium)3_ z_{1Zsb8g#ukZ>N91=-(IoQJJ7ce2`VQQu7^ta2;fqT}j8n;Y5x)#=0HG~)8SXe*@> z7A6y4iHe zD=8`UqYt6?(X_HKk(ftCEJ9OFO@>Fbl@RMy%~W81wY~p(1X4Se%e3(>N3OuvDckjSyWrH+KdvuwCJ7Ju+8agxKy23^9XH&y$&?ZOc`^zLZ!km> zlWrG^rmc&L-eqNJgrwVSn9W17H-%3| z%BapzQ(5*!rxubuJJ#4eJq2tHW{Fn`4~Ly6Uc$B63+jIcp{Inik|R9kS3NvAcm*wO z%=e*38Yd^39U7dm+FJ&Ibjqq;8Kw*L~PKV{FiGr-s)(N0#Mt zZu4HwBr#6%RQ1z`T?tLnJX@|az6>4PegYfQMQ6#;wA^>f^&A&$P;di@sDNR)E@KQ zi-<52ntAWe>|4isQ#xd~dUl|Ynm@S1%rFk+*^LzuUw7a{TYDg%qb&yj_ysvj7Oh$V=Lo@;QV7Cv9hV@=q@$&03ZHoA1{9EUJt@BVQs?CAoG*_#$JLg1Vn z#G(X!FaB(ZJI-!h973P=Hl80kTDSMPK+n28tV|x%8grjn_cB{ry#uDlrJCz)F^KR< zX~c&ma1;hWGE9Oz&CFIIBB{_Ko-&{gk8oIli;-&WC6Zz)l70_>O$di%+@yMbIsP{SU zu3WG9+i#b>6UV_;7vB+l2^`|9Z$tP=f*};1qH5} z=8Q{;L+ycrR?)I@vKM6{9-U;&D>9YsBVLXtc8H)r$;!I^=a2XSM#ocY{dH*VlsR92 zH%0<&*`SolNUQ#CtM4Zn6A=ror^cg;7y??XzKZ=TRLFfO2&4~Z^E5a8PQpkjgw^%|O)G)^2}z}|XZDe3S#^7lj|81oIW{FA?{8`#9D#f}=u zrd8Eq)6_rg@sEHw$)c-JXIV>^jJ1@IEk*U`neLusCq&G#CJeLA7CuAf_Y1YM$hGm1a?-XEqp28FJP zoKF&KSZ>(cFL;11-k=#w@yNNgRaEo@<#pP(DiNH*c_=gzfIJC;7aB_39 zKf7(C)uuZ;cqKKy&=b)auyYS}WDkm7gigV7F^nvIPt$tK+{JE~C!Co!<*PMZ% zDzGkO0B^9gUj&l9raALHBkSTWJ3u!kmKLd!x}=cI_+AHxx;LA0djNXz%xKxX@Zr94 z_d4R?u8FEtS>SuKlqtU(E`8D7O<(`;kHs_-8nU%kN9#=G@hY>VQQhCdBf_TAf3Aj& zjE)7@?CD8O*sQ1X46lCB-*=)tK|Y27=4-9#F59urHEG$JPJUgQT%LZ*8pfG~>50v> zDoG<_7E4>TYBZWySEOpSL^eW?F90I>9pD}DZG9@cK-(^ro%MMXK zi?b%5a;m6w-Kp%6_chtHW2B6qNxdi9^?~*z6?{JL>~6R49CO8wyXdKuER*IEiF^2U zINT-zOmK387BOB(YKPs$5)FetB>!P;`_p+dmu4=UusRADa)gVUD-|4Od2F(_60MUU z_ClFlA{#Ag#RZBrsqrJw; z?5ot8*2thT&=~T?nsrm?xA{SGU#>I_@3wiScE$8(h)4OkpXZL3IBrC@n1zx1KKi&@ zPqM0BCxP*S+n7GD7iS%0WWA~*ENeu&S|ah8?k;UhhlcqGe4Ox^8N{~Xc*Wb+b)L}) zmyEM$aE%pho`>xtA4iW(>mNl-b;pkpiDWNpa*hDLGAXn<<2%y z914T!2*oArXrB(-o0v#i(EuKTTG9)Gs(D=``3|-5^euH1d?j7#fvt6EK)pR zi|Ev1MyLC&S|QmVV5bWC<4pk4_`11w>y9Bnv{Je3IhMsa@HRc=?A)Z{ zaeqOCET?DMFI>~e&eDWT= zFrXGbELUwA`5I`!Qb`@*yLHz@J#ixl;B&rvNGmB|!p>ORf^!dipTQ_@en|2DkZ8|}v!sI- z*m8O{J*HrF_E!RprVP8<(^dz8^VFnXeCei{4^Q~(H~-`UoUFeG&kJDRFQ1<% zi~;G~$UE=8$0A0>q4_ay9p>(?N(<OQ+kBiuO#~mqLb3L*uI34Y? zc3>+-ZohxWBVsRbHeW5^yWn-@$k;!5sj0!~MT_ne!k-a$I71vGgCg)N@EpZ&p<&BH zHo7#af6sBqUH+!kcx`eVlIJnw^m}{Jekq{=2yfmmE|IUFmsTKTQi(L(VyoGUsp+75 z@>E#I`-n|&dnq+KDvJnfu=LSxPmQ@rcW|P_PmwE0M z353CJf9A`vEYG0%^L3$MReRlMt-V|T4Q6dYX9sB~k%ONn+CeKTjpsMP@AjzxQ&p*L zE-;>EjY!>#`4h%GHTUs?X)mDwDzd$kgsyrO;q!@?MKYo)|LuWa@Q6@2H&! zNfc=v64}CWFs;_4bLquo#O4rQ;fjUNs|zdjL{B3ndG_lKz6=c$i+P394F*{u`0(g< zWCqG6`7}ZvJ;-W#UG?O)PeD=i+1p;d)C0$kUAtdV&pCU|x@TFlx)iO^g@AoCYTot* z?T?}&(|IYo9n~ku?XBbkhwWz!MY2vqk^1{RgCQ33jJWeYS5{dx zk%!@q5$}7)i1tQ!kBJF1R#9@^jl8AgAZuuxI!9OU`s!uly`uei!HL#VSU1WsRIr(t zkoSQL4O?iyQ_+C2m8gkF<8n=~c%5cW!kx^-B<`5Dl+I16fIb9wve;TKhb4VEH@?{~ zLS_)R35($vbyR*I(%b7Hu_u@ZjOzR~WnUyrm%JK+=CVzs@L4)$(%yBbdit8h;@3(f zte=r#i0Zo{wvfTJVEnd}EIOO}rEfX*wPJ?*0gs(%@d|^vZck%SaP;b7yC=UD-%`}} z45jLQ^AA4Vw23j62m|r<``4#W^V;VEo&vTfVY(heUOcRNU{L?1{5bipH@rHefR-$C z#py<;Deb(5{)9PI3He8<)ytX+=G&HjF@2H;+zvQ zP$V~(Kt#T-qoafH$2KyxRgD-#7Nuii5-^cvzqn}O4o9$=r4;;Ngj^yI^(N{+#hOX{ zQyghYY5uIH=1>$Vy}9T#p@J3*aN|QFI_>`->s9~Hu1!P|<4h=Dt$MS-F{bD!O#~6% zJFh9Db9lPxde*YgqB&NaqoyZ1O#1?lTWK%STWQGw z9FIF!G^Xj2h5|c|pcBk`ndggyASotE84&-Q2teH1AVtLIiVRxN2o5ZgiPSsg^Fb%U zsCskn>*{RY^r^qaQ}&LNWMmzemn_WD5c>lST&lPU8GtGz@swtYkXfa;d5Sk2a>HGu zC4NQRzkOY+>%Hp3BEoDtbSfUIlZ0Y57wJG#OU#JZe$bo6sZp7}rP0U;k(x#)r`Zy8 zHUY|&VHsrHkrElG#!yQ$iXnES>o@f&_U1>YIV-%CkTo__A0+tcI9Ve9mO)^-|>xf7FBC zEYX>crUw~jV`o8BTDFc0v395lDGejlq=ZWTp4B2yhzi72( zaxR6(vi^i=$Dfe zugMr@y4lKva4J7Tf31zrp28b`Vz3*7Ul#pcIq!aWM6C^E35-8;9`S)%CCEPiEOb;r zudJT<#`+l!8}(Qm)yWsA_)4f>(`!91+LfaJ2EHA``T#3ppJN!C0dF`y( zwP>CHR`l2hg_bK&oCfMM*ubPyL_(_oNM6q)MPr$lJ^>4-!$gHhG6bp~G}*MlhD6E= z*>1f4KTD3cgm(%Co+3H}`N!A{;tiCojNh|yYyt!0buD86(ez-BJleYzluSN?5-sRHSOh@m1 zM?@s%u|eQJIR1iZPCk&2G3X2Uj-FA=2m*nGU))O{>G%6VU~W~ z=r!k_at)4La%nxHwvEEz>(~zWCEzg$QR9w!3ysf{k4;sf1yX<%ozv|GCkG>D0Bsdm zpL1}qE7FAigpYy6OLs>F*ib}lP6uHouPS-!vt8hb_O(BsSD5`oq@-?F5KK-he0COV ze@@r0bM4BL;G_w26Ri8yZ@`Ug+w;PoJZ#VS{>rTIGFn+-B{ zcF%+RZv^8>&||C5>5d~}N~+Jv!iKJmazQppV@@>TdM?)w{8TqYF3A%AJ;n>JWlepE^m@x%u3W^MRj*66q7%zI7`? z9Rh;$53dMrMeEKy)1BRf6WADdzdFw+oOD1X6AOFX|meSrRPDV-C zqy@vNe$Cm2_jSmR7Q~z!1}hy5=*DXaD!cPxYV}azEOvLoYugheP%`fiP87}}XAXDG zy~W8ySwn#v#h+*}nV)g;r7=tQUBg(K3DS7VLeFkE3ph&8%8^|VuX=K?>%>J?)!r}1 zr*F9e%2z^`Y($#Di(U*roL9+-K$4Gg8Qcyt93De+`HiZ$GB73iGfG72a$S+}rI>kP#)hX1IW31r3%e)BId z?r+uH;y;|PrLg^F5Yaw@?Z0ybjW91bwWf@l;aq!%B)akHzcki9{RxWHBA2xDk@aT> z?bmVMwu7-LB|1V|I)OBijlL8#b&#wZgYV++@OjKFGMWR;w_9d1GqlxbMzTvl{?Z4V zjP$yBjW2CQ+1xF&d#QT)0RNYxWl0hun_Enq^P2T&I4-V;RNui?H^LkZVQW>YXR+(I7dGd~uW*&o5iTFzz z8PD<6PjQ`0iU!h6Xp$qqHK~cg$Diq-K~sq*`9Z^imNJqdr%|+)Lwz+)!$0-ybeUPe zt=;NBS5{Lgz%4qdAI^b4U^+~?Reih1O!m}rLJ`$O9 z;o6*_Ia=mg*hzFdiNmT|`KqD;2?&B}+i_{!9g99%l2uao2kSL|4i?-D=k5HsfMd^> z&idAZzJcCg$j7QU2}YsA(WM@ntd+Z&!L_)`bm@6(J(W;UVp7_!lCi%bqmtJ}iLLsw zE_Rc+)CJVGzTP^SVvBM>GH1*5OhZ)OjV2w&RCVK$L)J&A}a)g10K1Dj3 z9+m`C75;vwv-FLxyvwS>J6K%E3NKCqB3g(@D+fZtdTg#9&6{4V`{&b^P^pjN*}(MH zT4rM&tAoO5;jDP;^+4YXly|P2ThBkzsN$)NWh0#RAVIw z6P%IJ+8!(GtOa*{@&$R9x*bQ*gr^jJ^p1C{vSCu7768GBuN?eLiNIx-QrN&)yeeM^rSl!`9s;Wfvj;E_7E)cwgq>BeHC-bRl2Xr4p9t7`1Gvmd?quj5ia z;g)?`y5|_{iu2`UlxG^xA|oCW?!gt)%Qu#%S$0d+svA+3pz4z)6Xh(}VcGgD`_bOk zarmnlkMigdh0E-@I|enS7yHN#4p4un@Cj(DK<1F+6r92-mWsODrW_4v4k- zfhUZGNy}S;WYmYv>gG3=0{IthKZ)R#I8v?mHSJ~giaMoHS0o2?4N7t(-59aKY9Ehe zhWNWycaz03vL09PlITIZXJm18c16s&E>xu^&yK^G@;Ge=Ig{Lm(8XGQOA{$Dr~{_m z!;DUXNJcMKMpmI5rbW`Gz|U4gl@0|e&n=|9R`v`w@-46GgsJRAI<(jK!&f`T$XQ+J z2HBt@S>DUSWnCzaq9w&yb?-|^;5f%_Wd&QU2_#uePPj@E(lx}Ixm$teJZh8G4YWU{ zo8ECe&JDT;IBRRr+)20zOScc9yFA^5dS_2=GEJFG2)$8h#2>D%a?IkCl6ybT{WrVd%ql>covT>8r9EO;Jz9vNZ;_)C zrdb_~inCof1HCOkiB8w>Av9viUlB>?n&rj+JH4EX?{|__bzsxd4&$hkt%@KztMA14 zX%!Gr(m~@2qs0pGowm8tx-{a#^=w#Q0$ds(oJ0gD z^lw-EW;Bg^anaF4|5cfaknPK$B_$`H!IQPLmuHNe{D&<3-V1&~D7)Bc2t7UZ77@du zq^&{~S;lS>_MZ7}y;8t}(6L~8%-nERccG;t_bSI(hCFw}vT%71nCO|v&aWYTLBxo# zvi|x0UkQbOrz&ho*-z7Gv6zm;Y0nB2q>2J!hZPi^njs72Of{{UUCy2u6a! z?+SvC#B}jUqFI~~GFUBTRVb_}wD%Yw>G*Es^PAzkG5$KkQ%uJOO6|kG%hxBEHJPv| zqK;jDg*<;t!xdiPgbo?40;U*}1fEmPh+VsCUF@)7q31IS^&eMmIQMfOmT_2|rr%=uaDRoX{ z(!EcHYa_>>ZTm*RwfFsj7_T`oM+M?7=5DmYEQqCTwUT+|+rkp+oeH&ep*~7E#u(^! zw`U&$c8Wbt93%clJ`o*{$f*jd{3Dg>lNqPYnpB)kVV;>ZB>yqab0IqfOM+P!?B*M@ zbuwpDtv$8-Jf^Cx6A@)@9~-)n_tsvO5dS{_%}h%kD>E|`&Rkp9RNA|Zl!N_$Ia}yS zFaAqYITf~f?3i_$Xpu&jhw;Z{w&o=$OD)?8k^aj()g!FMqq0qSN%6?{82Xo*8eo)4 z8R9Vanb=haYP%P$Cz~FdNe}^#QWfGKpu@9&qMZLhW0~NsS(n6_Ia&fP6_z5}2)2V4 zqN09xE&dHVDJ1Br^A)U`X?SbK&;1?^kE52c%6xjLeS|;x&!oBmalgc*>u=zJ+xv^Y zZ3>&A8D`6TjNPHe{w>KOl4)i}LpjmI)sO0cP`1nAw|Pz~@wwY8{LFTAdvNeDw))34 zw9MXkR)03tD&=4&95tfkQak$$OZ>J{@m0_()?>yGrYKgT<^r6If{T;V+;ui%L+Pgf zfB-zcN;@p|GGLpHCCv}zz&(}Q1?aB>>yni`s%B?covY&VB(5;=7kIkqwOa#k#NRWkO&0fu40(EQeS>K}*w^Lv*bOHK zT?}%aviY6IQnBRV`2eM_kO-};GHFX=9ZN7hJDaJrr*8y?XE_u`YY~LVHZ*vu8QHh{KqCCK{`490gf{Nej(Rm?; zD*kWwCWjxyp^R{)c->mc3hSEaM2G}I8)+%Ef$>_)fhN*h3R{p{P{%f6L z@BVq|us58MJ01PD$>sXTQ0%j-;UVnPo=Iog4o4w{pX)j6BjTi^h?gKS2CRE3ly-4z z*|?AgtO?I9wSa$wHUw#fn($~y9anhr71ZjQ0(T4r@>Iea2ehYUyxE5&S;(o@c`f~i zwi+$#5Nw+v#x+lRNu!A|>SK^F<+JN(-R_6i4=GVjT^4ZC z^fju02>`eHwjyU7(f^u9vCf?zLJv-U&3N=C)AP(5@i&3lN0t=IA3UKv-S#FS-N2J^aZQ9 zG8d&zR9k&&*7TxH29wj4u6U>3IbXnC?{aAVw8c{!fHl37ucG)n5S6rFc%g80Sd!O!%*NEl4Em^5YWo$HI+_^mGfXIt(gd#qJr8<1$Id8F`6iu)uP<=-cY zWPNIv*Xyi5vE%ONQ|%dr4_CejpH-T&W$qfc2;mKWadsNFe0MqT|5j}LbguN4MJi_{ zYnLwp*5@L7Gqag$-dq+sz0Ce^lj5rHexF;Io&IWlb67ih|Jpm^LMBtvE_w;=_{1vG zFUG{U$|>P#TkoO=N3Um^tNX9AiR*kfRk=I!|CbpmPiI{AI3Rbl=G3+)mxE4xvAxdP zW%;3Z`V*bksWG$T?Kb&wZ=d@+$#(k5*Jpvf#!G8dYwZezbB}7gGV*Pe%Ux%+@}Bik zi&XU``7+<-*QLel+<&a5);0CaTQ*nWm5nbrZ*NiFrLgJcq_0mHS1!DCDd^vQA?@th zQ9kDwZaOlAelI_ueIPViYIV_tBZoFQFH>>$@7JDyKRqB_TpSJTj z?<^x=ja}ldK5JdC0I;qF_2(9FA|1hvF)U^>(OETmOAc^j(RSd{>xswKce(^!t}q53 xER8X%FyTKt1H=FS5f1mJFfcH%fjUUc40nJ#K=RhiPX>xGc)I$ztaD0e0s#214+;PP literal 0 HcmV?d00001 diff --git a/docs/screenshots/core/menu-record-light-1440.png b/docs/screenshots/core/menu-record-light-1440.png new file mode 100644 index 0000000000000000000000000000000000000000..da097e644b91ac7f17b0c162fa8a3beeebbefe09 GIT binary patch literal 83544 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

7c2~WszxRl_59FQ%NL%*Cz);kH*msUop5u?% zeknq+yoKo>v=Zt2cWhwaFfcxO10&zIw!^2l;v3NFq}%>pj0+V1hN%1xA4&%fC&ofg zhA5&sA;C?}CHA~FCL;r-w;Rlc(lvkDK-GEdU~+Whbv5I62t=ctzrJ1DiV_|rT!A~e zHJnr-Kd|(`9fm%k+Jql=+=(*+iMmL@c}_{)S@hXqG0LEE%UjS6f6NGftoqp(tPu)B zq!z-7)$9@&7}}FFGgk)>iH%VEze_u>7+}gIUi(k-DjN}}(p^FBTZe}50rZl97vNn7 z18c$}b^e6G*8qN54yL|rop^_d;j)9iK7=ws8tYMTbUJdyMXxc7NcbxLkHbPOKh5kD z;q3FP-u~Ku&Iqp*&{<$S7zB2yqE*GfAg_1os+Pd%Kt1`!S63-8ckH zES0($KJ}>2Dz57zPzMbyq|Nl%Wf#sA*m7B|SQLI}eEsyOVgIvH?0t;$Ce7g+hmWIg zr{j^5lnmixLST^FyMpmW@N&zcww=c+1dP-QJp8DjM|&HQK(zvp!&^sm%8Bus%%-k} zT(_Qs8FTm(fv5{)a6i~41bk8!R%aL%vq<`kvX{~M$Z?A>674?NtT-$z*xloDl@KY) zxgCWTB~7S2>XrSR4?!YEH?J$`=Wq7iBk5XyXp79&Gpv^>_S0&DQEZt0euS>Ds{tc3 zGz1B*VmVrZwd+CpR7vvO<>ZvVE_uc=grd$zGeC@@%(v6ak+@eMyxXIcp3Met*yt^U zDkV`A)Fk@BmPt|h;Eg)TVI?iT#Ai-h!)O$uqAr2DKvD@@$2pW1=w_9{g>w8^1?}O?}VyKJ( zSl1)lyJY?r91Q4i_;7Pwi~*!#0{_T#zx^$F8Lskmy@%4OgOL*2Gu=^kiRnZaXS(O{ zQ;Z$_3?D?26xGo2T2zpED*E(`RE}dlDKPv~6GRD`AO7tS{%2*C)bI+*OM0^!5D*?7 zZqyVYfY;}j>uwl2#;3z=*#iAw}?u|UWZPa0z27s%LOFjNYl~z z%Uz7}&^+aVgx2-L!?I2q6LDy2+!fT%uhnh}Rg&#A@2~{FTwEqHBYJ)No=u`vS7`YT z++3qao6&x5^Ux^=hDUNfoQ^-qyiZU#gbuT{Krtb^-6H%O*k=lI6;ZE`Yp`jD`C9OF z`EqM2Tsx}mJ4Y@l1|l>eVam4Br6pXF`F&Y}evIA?@`!|QO94Jx23cY#6B0b{H5v$azH$gu*E4XHDkt1$Ql$W0mo{i#Hxx_Q zcuTWYDeJ>B00`Gd|A6b%CG*K?mzJ>wfj1#%$L(KH%{0%$h|HWJa_Ewh`;)ogu%)sn4cBBJ97P%uq;i8}WZS8AVr7TtXPpKn_n-H;hl?tB7lFe3|}? zx)lpoWqgKCiPFKa-oq9nLWV6Pa`xGTP*QhpE3gM-9|W3n&n=YIG<1`?h&r5_Mz4p^ zc<-f=(+CEd%oyHiK5$Fd#0iTfn3$_8ZEAK6K&C1ztGJF`P?P=4=tLfJl?jAGq@T^;8lOG+Z> zWP4@64MBL!8h(Yo3Ly#Xrcz*qA_M2<{gnGel!<|C2O7Q$hH)YB156#<4D931XBJU7 zT6^y%Q_V&`Cpf_0enL*2Gwl}efRMUvD2=q?%5F~wLwf<-dt130kO6P*mjxu-BARu4 zzhUl0OQXi{Nw&QSh3)EOfd+HR3s-~#SWIF1*ccFdLBM^C@nNOJ8?7GY*yugE-O2@x zPZkfCoO)@2n$cjc+Ud=z?uJJMx4MqoZZ99WLIiRT)~c-x+Y&#Zb>(qbNEUWSEe1(% z+ANowp80@@=y?i~hh=>24V@*w!}QMViFrC5rrul#g7+!+gBHs|U&xxP~tXT~B350jaD+mM*|yz^)%wfD{ohaD2<- zw-(9u?D^b1Lj+adW`1KhYI0EK1?o8`*d72A;^JRS%_r2pT}mT2curzT>9aahzx&5? zbGke6#kS=GTy50D(DKifWX{_F@1CLd5dI}8KDf7@eYM+Lu}`+ zKejM*&p*l4ze!O}i<$Z0+V$;$bgS9+A3p8wSEJ|m#M!LpGlIr1{+I}9 zu((%P6iTSAZh|zh@`!yx7+J~n_2*Eu z!Ah#>g!>l1>qt*@T7q(VE5HqQkrd}ULWlO@u{`CyHY!k%+T<~cZ7RbnDoaGmIKcXW%v%j=bj^{r82>ORs-l}#B2X^gNofC1-TX96z^CYe;V={xe zwce*fva#SsqhlFV!b+0uJ)`YrTXDV8{46SwNwmzns9tw@P~69hfd_J_5T{F-iwjss z*`M61FzlI0c-#k;(N;0O2CQ8z#wM{Z+D=ojv`rPnhQMCmw7EeIS@yj_bLiwl1)OF| z4=0s5eg?*RPO3#0>ncB0_aKKtsX@FyNm(qQ56LGkiVBU-A}kLBD7trAb7HV7mE0K( zVM}E!6$BlNOYW||^_g!$_f@%)b>A)?6`ItQ>g>H-vXouc5h@U?{@}zXr~SnjEU0TD zICZsR6TaDsxj%J94d+4IirWp0*YP2q#GNApR z@{lqehVbtM&k_`0lUg^eNYmx#d9v^zH1y;UoqDp&Cc>$|f;|D-&qOv1IdsnGo^1`^ zhsEvhAIuMzG5=^_yJ6hM#X&@Dun@CA41I5NBGWkF~lBw562weqG|YBXsm=yA)y!n?4;JG$1Ja zI9nb^ag0*M(Q%A&Q3%|COMX!QpA4~I=#fgSfU#G z5Ia)Vu+?SGGRhfR=3$-if}CDci+(E+00)5fm`bsbKO`J)>A~ z|I`z#tkgH%Gl6y<{*{3~`g+=+wnTnyk$*MV^FCvva|HozMo!sy#}3E!I{-@TiY&b< zrf?|Q9lZ_`FDJX{azIbHDZ-bBmj$2&Hb&r&qvx5)kOL1UXsXGe1@!QNpUYui((-w0 zJ+yXP>&Q|Lu^W=N?#mR>(uDLE^l$!kHCSWhLputZyXp&}3@=}*t3>b7u8imy*5q8J zhNXJIJ_s0i@t$YZR+KI#3JTOCHrR~3p`|7z&Xg3V-fxi8dwIL7XfD(iR`C0a-*e}b zM2w;f&3?n$5oL1j2j^)v`jt27^Rck=L6OO4WRS}^>DHoBV%VSkic;k0Vp?;cTZ-$6 zEI%yBw*Ye8IY)OyVSpYsDo4*UWdyPzce9~E^cBZ^5D)`a+j8|31WgES0wcaSkw7V@ zbQb+W!CQoBBfcit&#Zmc(`6g;Bk^t)TeFWU(6I5r*#d_YR1O_qc@m$93JEkFjp*xb z?;~zR_f8whrY&*m^{mX`bjyqz;iD!SH7)?q=ida!SB1CzF~@pLx>z-1!_;_50kF@qDIioo;s#i=NaX`#;H|K z1J5f;eUZTqGTM|7rA0y0pE83qJoH6CQL#p1dF^IYUkF|I?vQUioUrT7q0;GW9UsZV zK55j4Z>K>s8ju)>KIG5=5bA^<0teg5KIPYWR^>%TYr|pa)Zua>Y+M>5;&ois?mpL;^#mye?VctE~79-WPq+v`0RxdryF`KYE=bGo_n&AHEYB|#FxRQ52b!3$;3 z5lCd5ktnJ)baaiSd4iN8XRW-cq=cMralogVdo1n-OCWo=&T@{3I6Y?gDAGg>bE_7J zKV2=Jsf-c1CU-xCH{nl3Dj1@6rUP)6PZr_M;v1cmqRk&*Pb|Ow#}=?`y#dR(TAB`c zyo@@Ta0pJlI{133*o=N+MBxAddl zWeyVF%EX`w&z;mSjK%Dncc0;Fg$=B$9%}iVj27@b6I~KKT`LcE-`~S~IZK;Z@A6@~ z9pPUjuO4IEjYmozckVI3e(_ZYhXa0(-lE&p^y~2A=yGg62#omFXySN+OOqYas)z^e z6Ro%&dM>V2b_Rzq-yDeQCD3>h0BBTM95otN2437SB(5%14c-L07Q_^ z*rMM>#?e_UkWGf+Pfo+=zm4074ko57XP)`B-ZXCTz62eQUV`GsqNuyxb6Uy=-WL@vy;S7s~{B2TCMlUN7QR zi12QozYY<-*48vo)J&;k{o~h@3I;4~a2}hBQ|9ePF{>I7sW9`OONr?wJuR0D*-y>S zjILcPkm}sRI-)U{tK|*-1%@7Hk?3l~57-KabAl*`iNb!&$#k~wK>S=6QJfE*$5} z0^%Y^v=b!k4=roYs9Y{Jdf2K~^&O8QKq$CN_~}WBjT%V%&=uI$30<15A6f2SzhBU@ zLG72%V9zx#Tqmtr6mY=5Q?Cn7dsG**1|!LxtZV^+bww4B$CSBGqu|SIe!DP-BWFXp z8|Qg>^qKVL{w&>C&%G<(%M|pDq*WchIg!viJg?z}pTcv)qZ^0Ql;eiK`$T&S#|eeP zQovAO*y-k358jE$NvI|vO30p9M-psporpI0uA6f%M0&0O>>LinE` zH59ZVc0ztpu3f~#H(Q(g3u(bf9Ag%sC6y|5v3h%oEyEWX$T zGCSMr@%j-#Z{@9WW{hhy7C z*cWN&x>td|vN;)bF2lbJpP6ar0WY2OJa2RW3P3PCj!fV2-V8W|Ap0ALvH~Ze~vE8h;EH`P8 zdX_jK6TqyZC#omGM}9XX{gD(ZhGLHGdZh8f7b(ikJ#0oK>lLZp&OB382(M{miRCut z^!Tn*bWit^Na4|lLme1VA+;&9jY@7pjx(ZO-N9(~QWa;##d=!}-q5WRZc9Ycj4CtCEX`C>QH*_C-s&L?(p-3=xNucVy} zvGLwiTxjuA6`*$nBR-!t?Mv^YugmS`-Cls>Taa8A>rXwdOE2qChsTn|pe>_m@Rj|X zdSfLF#LaM=>-_24sdS$~9@Ou6Yaa&+AI;r4^1UgRuP!y|Y4&wMZyiX2ZAVgG1(|6BCFG>rP-*tD`I7-Hy$#DKd4ur9n_!LVn%2>{%X z82%R7fT`iO{TFr3BLM5pzj)3mZ)ics!m6;2n>Se3ONs71D7>zsyGMCnM2G7($mA3G zt=cb~);s3X2scj4Q}vP#mMmtW-OTEwk{jcgvne#}Sgr;hoW`XA0^1@l;~I`U#=k8U zklNAXXyBEQ>E8}wa6I@7qs>_}*=CqqTNce8npX;smSq0?{?>6Q1~R#egV83Q#H?tM zQj(X!U_eiP8~=nL#st(CYc+Mo-(-=UX&2gytGDLaNllAJofOsaNmLhMhrX8r%P&4c zGYx$+X_rjD{k`~@-P2Zj2b;|)=PwkMI?M$rY{^}3kP5r+c4c;zup`9 z>DYef)}ai2s0Xc_S+dvh$y_wt)H5cxiIcXCN4A;iRtEl=Vc8^ifGz+T>ShWKJ^@bG$irI? z8~^kVz1`Yun#G^0Y|&@}?t2T!o=7IBQn1oIvkUUm(RLM}*cccJyt$uo zuYGJR%~eIVRc9>2^`PWeO_{}8X=_8qA2qrDZinS&%w>Vyh1&~L>8k3ntIR6aMepU# zf1bQ@jSno>+V5u5=Wq4tx$ctte!l4~bQxxZ=r|bzFD`z-A)o_)RPg?p_m)LlH&5b; zS<|T!ttip9Wkkwzu#@-4q$*Jh_qDl=ANKCA%rX*cm=_w{?0l9;60Bd)NJYh2IRpAu zCLcfy!z$*ik0%0u*-*U9jyv1pS`_^1w5gv$YFF{8H_X0?(f4cXx^aA8H^bEaHp9KS zfz2|uKLJ4-W_!;iVlI7txEi@8$`-cV6$i~Y=N5-N zZ{->}@^maJUWQo7IqKUGnDLjy-)Nt&SYMc{*tE*6J>hot`*JV~D@yGfWK9!5XRXSS zozMPy=}af#YwuyZux0eHV}ID6aN)peDPkOB@lzXFp?#NA|p6nRaOVl zL*}BRvLEeBUYzK}0I!zbL{j!0#mb_q{RPZ+mk?eSs z+~C(Ac=*p^8S*2nBkcWJNuVY6&joD^T}IPyjy+}9C5DcAMJH4cbIsm4tCoFP0XSEWxX$7Y*F4>tFSR zJ-3Ual|L;VHh`{@a9%1gz!%`N3jhMRMs8N$s$^DLSf6g?#QZ2Pz<)kb2S%vQ2H7PsOyVEoW z-IJF+*Lo11j-^6B3}J=H=Rr}bux}Hlkmj-)rA`gqo4E)OL%3kZNMbGz8}+voQKto} z+{nfz)^`M3GtxSRk&3~bLmtPLqwfNoqgCfki6dv<;Mc~RE;R4%k!!APb#BvCRN>F5 zK#xg41=}X<@ABzF9K{XSs=g^efQt}u2Z*4d5KkMersc`wEzO*oC7?LG5^ob^6PJ_w zHpefXL0~C3=7#nUPa3Q8{)(zM!NXJK!b8_g)~c&9j?XDqeoQl+xa9t*s?vnZe@APe zF!j_{vQbboX!z?{?MDXMT3v&KsgY;OF_4Bg;OYxqoPs~@?SfI05zh36NlD^%xZl?w zSG7I`NaDNsJ{ehS)|#aTAH`UjabAj)zZ6KuMLYMpZtk&OBm7%m!8FZco#Z*@>Ucba zIiuMFZ2jvQJws@uolo(Z>V2=#$5T69EW`u^c7nDt>_lwJqSz{cywD+(^uTN2x0Bo(WY4Z|0`8Y>xnxAu0g)rjH^3b1sg0kIQ}G@Y=h*Ofe}FI{i{#S^`t;%A--aE^lvv zr#_Jb*K6A#6c9!j?hQpfV98@5%D&Q5G2D~Mq^x=h z34@Qr$CyR7Sq$qeeQ$WYHnl~-9l+E2M*oeyw~nf^-PeUN5DSnHqy_1eZV)Ny?vn0F zgR}~Qw8ErQy1QE`>CQ>xq(i#l+>>{$Z?ApEK5M;apS{+%$2e#H;}{@}=`(%q=lWgs zyVwU3UnHi)YDF!qRqmM+cwh5=<=|W3HNX6)lnCIzu~o{+&A|eQk^po5Mz8w608!Ee zve5oeOb81SJz9<%fp!(FwDM!?Jw~_|_*5^)Mj34uUvWL%z6e#Pj~ed9?KSx7mFf7+ zG2M~sj`jkrkA7cN=@A_oJ%epuV5f@5_n8%}zG0Z7pvLrG{w*9(qruldq^bz!5; zsJ+lC7sx$;fgAt^LV1w9;LXSS#&t7UU)H>n%WWBfW`ps+qlOn#|2(2J2{lVt9JG_O z8I>}`-G{^+@v)Mw?^^feZ3*KYiwP>(7VMi-6Vc3czE^ED?%fWB8Ad~&?RR&FMUiN0 zgl|f}8sQ_;;KPI$>8cWMl8>7)ZHLGNP+i;qs7$$wXXw0AE(vPV zD43ab!T(G*U|#(#EhA2=6V;WA35zQHT;Y~sEg_{K)&{*D1dV~Vk1Wb^mRaOvy^^c&=(7-h8A-5 zslfI<`c83p=eW$dTef5y%ThWgXV*g-X~aTDH1KOR3kaHQ7f$wwc5pcZJWgjr`In-v zZ0is7TsS8_v~}t|8z#0gm+w|lrNI!HEUb?RKyT-cTUu^Sp4L^*%*>38hR; zEtWv{@flR*>URQmLzPGz&I$j=Ty>9#OUYi#M$&v2Zw|x@Z){2G{uO0rB6AcOuXbf} z{xT4IkVKDo;7mDhh4%WrVRKNotEzf`B-wLSnauTL94$;7ZrMgRGx;a^Y5<=PRGD=hl9>!BqbjH?DJxD@b8gIN{{YxQKj#`KC2Bw_x`s?bclqrt50oG2g~5j^=IqD-Ax_u=!W$I$lYJomG7Zhi@#^PHn~5gU080TWb z9u7*D)O7#Aa>{;Fn^sEWQC`if7vd7qHgd@Et!!D;+gs;qChs^Di@T2MTwZwXo9l6- zi5|g~@dW?zS^d7Gh2~5+RGjM5nN9{T-utdn&~f#WSbNTA5DP=E%z9ce6|<^`i;^_U z)>FGqgq(R}l_0T|9079ib!WnHSak|MYK$2pb{Y&Y0QVQqeEqc3113!!bUkBMilyQ{ zZ*!ZfKAb_Jci%DzmY>E7joIC0&!I^SUQjDqs3U~nY_if7b5yDSdgbuCM}C)D@(e3` zW`u>fqcAPF#pS~m4s1H0N@K;gA<)KA~D=PvOs*0$>}m&7>`9+XOG3 zMx=e*?7rnN*LB@F!$=^_`1yj%<$T!*to^B6o;gHE-^u00dpAPE@e54s>4SseoXqxh z%uPR;lgNxV6H71mSprHfx0w)N*dq3`zLhUwly0B|Yvb8OVSbAkGx6rOQ3m*sby7e~ zM|>oJ0YAE2nolE|v5%X#wj@^5X6Pb3O(&5dwMDl}`<@#%XGKz0+IN9NA50G`h-}Qv z(d|ZdOY`==uIN7ZqSad2`Q(dl zU4;lOGR_agRA?{Kwjbqmdbw(uCw|T;J*gn_R>XG__{J<@sr%+3r{}L~@i!z+E;_#S zJtcE1DxOx7P`h>?@lnSX=FV*E(%_Ct^__&&vGCw{PMuzX8#K(@r8vS{-`>A=`Yia% zT7bdym*{FM(qS8bhZ>uKuY%~|L<~(1%~_yAP*3(F?~sp(XHp%*gyFM1oh6v~sK0iZ4Cmkpq_qy8 zFshF`ww~gY7wIdkQ6?0r%(5KjoDt^;wF4&SJi|UPtuiC6K^r+gMu8hX8R&ReqxRZ& z`tEJEGojQvGMSm#7glS_xU|W-(T;OCgDAdoT34kWdyAJjlakKq^a7Q;Iep@!tD>Ch zX}DEJ>gwfd#iZZgDkstHiih$Cf7a4V%J6;ub?nngexCHi;Df`)G6MVMmma_K zvCeagPti$cYfGp~l1ZH&r)<)SC6;lV-8cAgxUMa6?w+C!6FU2oNht+C=lx~MbyNY_ zbM>siRe_2h#y|EyJc6u0;2Nk}X9&4As~wn&@V0=OiEvsCG$;7n;e7KCxXXdL5qGGj zjoDOKAdB>Aferp`?Z~2b-U-Xk2do*75XGGDH{N4DMY{YpO2kR%vb{;#b=W1+FILv*jHFZ_# zgJu&_NdMZhR7KRiHQp=yWZrr|H_LiJu^^2j1K`{|d}`)s=p;mGp3BauT^Yj|Pk^7H z;nt^B4;ef=u{`K1a=Y>afTp_fWCa(5TPVT@ES;(Xl3yZXyv?Z0oxp+%UVk@X@oyH{ zX;I|r9OcoG2S_Q`s1JT)0k_i^fb=<^UVTS&AvCip0Lm2c`g73@Vi&*$zf!TTQ8b0* zm$8j#;m5bq^JifdB)7xVmX@*(iSrRGE>d+U0<9-MVplF&*wH{-dtY$v-;1AjX}i>~z1|rP;eg(u^;bb-MEnxQ6O#u>^EI@+6{c}{ z>E1DIieny~WKpjQn!tBcl9@q{W&WFVRAyQ4=ukhD5gLlP$d|zYj$w=9Jq_U9Ad&(H z;!}M*cC{Ibp2k?GbL^E=;oY{E;_eo9b(f_&1o3 z+UV#k@Ga=)<@FsHnI3u^*+$35w;6EHcns3xteHyUN{UOmurxm{WO=r1MPu2t*lZx2 z{{2i{d%`WO?Z~-h@y^x}?HuNYdLExa*(M5OcObh+JA`KEo%@Ojc#HfXFZ1p>oM-Ze zc7@;4u~zY5hSwio^*lE&W95yfDKcAoupUvj;Qcp#U6I&7su&bn~gt?&>d z)#-tO!03=VIKvc&M#9aYu~K&`z71&sb~Zs!YJ+fv5?cK8NbIgLK;J_V%?2Zz%}W4$ zgeTPm^qV%YIWzD0nfJ3|rGj`*{geRI&gOs>d7LNNZ|Lh#;$t(o*4XBDHNP`}J5BW$ zW~bjHDLVV^iuAq+H;w>1K4(9#{Z0wc5Vs~U619q1eazGzjJ1^a$(n<~WAq(JV(ssj+2Qw>rx;Pw z=rHXE8E`FC>B3-$ifh)Z%}~0;g_GxroHFuj8o`5{-`r|UbXjW^Egy1 z8vo&J-=QnHxnJ^uk_%^2IFm>#RizCR-Lw~r*Vb#FGd^-x>&23-x-LNVcKIa!!ry9Z zD52T?r6)Uq1AT7Tvz?&&z#qSeoU$EEp0Aj|osk3w6AboX6>;5yqSqqzGlj;gWW~2% zF_q4zu*T)3g3TXIeeoZq2d6fbsr;}l@CvFqQ={+C)S1w?gy&R7z z1xK}IT;ZbC9QMV|MhT@adTp!b~5U%;{u@)9i#VsgO z|5D@`v7gP4=l0T#wuqLs44q2umz|?@Q8qPSwWxqx{P?ug?NYCo@8Q+tVbhVcE9K3l zdsb9Ou-Ux$iz(O~y^<{(PMZh4pK7Hx+u4e;MA&QRuqX#%qE{MQ*_73eCmh;BOW)iN zkNU(rUKrA^wWJu5+Dcu@VjT)Tz5`GvF)tCgk%_%=R3*ci52qc=^}l58p&7HBpMZBc zgovz0wucNB`e(c5G>1PKF09Nrk#x%#&tI+VO{3iSvBgev=pG~*z-nMvzxmbQ&9e{{ zwX*46iJI=J@S}B2NgYXPsn#MHb7=*?edO~ZGp7&my0<#=CceITmUl);sk-22CY|L^ z2kD10ZOV0Ld8KTi$u5-y*LdoG@LZN!*;ag*SVrDuBgs<&8QO-O$3e&k7;WnU&`+UIRny{B+#1q-afN^NA-ADYhc zKK~?P&UN561kD+X3SOLba=G)AQCHERM}5NQxcow-vzl7LbhucyWN@K}sG#o6+&n(? z%`{7z)f*-&4Z8is>1$SSTti-hA;||C=&Q!D<&;Px%s{X^`-@r)j~zz!t@mER#PF98 z>yMAmpB@fO9J${;?|Ep|r&4&)$No!Ib1C>q0mB~GzJA2z+4LE{>O>e`v4LN?a)k(& zl)1K)VJkCjDpQ4~_OXVIA`2_yNQAx2**$ z^u#Gd(bnA;Dt^FQmr064y(cFVihu4>-b2@TG9$Dz!?zFlZa=yvdP$ihRndsnWf`!llGln#FS3Wi)uQBd(DA#k^7ON&fi^pEf=#UAcS{dvK7SJ<_Q4 z?0Nz&6l=llCsC6-H#eFeYcVQqE@7=MR8U4EbUK*oPmEjfL|7zZnF}34uCFlAURao3 zQ1P0Xam@$ZcpqfD187;JB^?4c9-xmTea(Ck8TUZP%YSx@b%)r4eU=?ZX&mO;7l(U! z>2&H+G|MadYcpw67&XIxdFDLM)A}S@|9E<1zYoycPEv}*iP-Bdk=sT{wB3O+S3lm_ zdZLTTiFou@+DQdSPO~h<_$K@~wA;e`+M1tc1+YZdL~)BJ7jjf)LnPRBFNEB zXKdOsHr)GwS-1eT@@E=tl?W@TgpR77uEtUKuQf{jRXoL63Fe#HIBeA|8qc~jh9~ZF8x0RZ zmgmI$g)CRSlG}Ekd}}ZCtD^?SSrmV`U(CK!=>6`U+DvD2nrsOvV9Q^Gghtf|e1(Oa ziiYlDlN#p%meZ=SHo$F(yGFrK z6TpKiZa19sN?g3_9!2H|8r4f`bK9N{g^1e8BmDI$lL^x<<%qA0G(>QlM)i@}-JZUn zBg1>g--#?xo*y1m_82NQIT@yv*Qm%8_tTrZ4ik;w>1)Z3*W?yh&wV9MaIG3xYSlLy z@g!xRWU`?vz+zUxX{ub3lT7QQVxu(geI&7v8Af<~e=TjhFzCxC?xXYi+`lmE*>Mmq zO1ui0sND&ijYOpp&2YQ@%)CkQ>4cMdBXNyDH~;YyZhjIU3>JQcV1hl&Xa=J*fZYag z5i(Bd1pLZ8&oV1ryQhb+mRU(riO`8KF`D?7P2tbEP3=+~mu$HyWgf@sI?bc-ow#`F zfOf>l(3iLUKBPY$E4ko4Y}4Kr){cP~EL3v@P?HyuvqIZ`qeg0q^9QM!WKJb++{G%9 zm}TP6yWnzK7qV(mNhlgP+IvlY3C0LZ;UB3f@s=lkkp=fUc3E>*3asxVj`QKK(5OWs zt;wKpk1gDlHN{!vL+`?svddT(%Uk%D&j)qBW-;w#{iz)qA`(w-co666mCX|d4LPdQF}dHa&KKl0>72eDXd0aL%?>o0FMUVDtG zP;RdJy3I|ZayuYg@JMHVf6w~xHzfOQp7gQEgrgcanlDs2Rcu#jYp=cKu5uJoF=mQ| z?l_>KO+Wve6r5_>;2S1t|Jt_xEIBj~fT#l*R3tv3%h|=y?VXKDa4dY+6;202{}%{2 z;IvVo*?>knfg17bUss2MTrXRk>ez9mIFWd3glO&l}}JWa}g3!zsO(K75w>;1gvPRfJ-LU zfXP7K1{mAQ4iaR`z3^@HLc)^A+>1@VfL}Y$LpG0u^o}PYW6g2DjYlf&AQUr5SxdT0 zI6xelZdg7p-{99|3O?^bEN~Hg*o(FM}4_LvoTnXD)8PKyX z*4$-fEc9t&NMS}L>av`AY(b)Du|uD3u(Iu^yvKgrT3u5`T*VVl%!>tZa4TmGOB!a1 zPhQnEbXB$TjM0Wo(4T+kE;T^?TB6m(J3Ctg4EC@3Zwx33{}L>YG#_A5m!P6d63xcB z`tHcRqd*E3*=FU8FPyDK?kuN{K&}&)Y!M4q75x+KfVU1o{PX5hIB_SG2>g_XzlJJ+)$>uT`#+cpV2#86Rciq=p9nmPA)z~ z>IoO0n76)1-K)?xj>Hs#Zgug-p1e&+Fn1lm5B z0a_+d)U{6xmd3i;=w~Q^W4~V&fXw&ihn)GZ;sAie?rNBzaz5fF^vc9E$mAow$NjURnqyVIvK?)g%Et+{`j^LI4-0>&E$J9CJ2l9x=DQBg z=|y`VuQ&YFU*Kjo+fXz)?&po?+}|LuQy(6uT15^Yl=$YQ1}su3rTG(JG(s6aetRI& zI&MW!1WJ zty94on6XbM@>h}-$Xq>StiNTfzV2#aLC1;eP8d&{A0ex3FdL8N9;FzBa~XHiI3@hA(~aasE6QP!-3r)lU3Rfq?;;KO?QZ2I==x9&ILT=k@%qh5uf;e1wTuQ3y{8l^acD~CK2gf`9E1ik1+y90Py zFebOOmAAV)?1nz}_y*jF-+&v_Qno}$BQS76XB7;-S_DbBQty5acMLwl&mI4L4EjHs zon8aT(VXUKT*y1?`0aR2jG*gQWD6|{;7b8Q@+iBD^jkY}d5X1HWk|5cfX1@X2tz7m z3_u~IfqsCRk$%flN)1mgTl_)g-5>!mK*_N5?ykiV+G!2doE#KM7u^qFA2E%BCliNh7vz^B zTU*~DPGDpJ#~eZsTAn#=Dbr{=j|Iu*+yt(kmCE2i=|riqdY5R&w#A`{g`E_ts6~lk z2OxB5w(xmV2rKO^OB@VgUq|m`LV*%%9m6x*I@K+^!BL5uR-enk1anAmNGBMpGO_gQ z#&hOo(8mjXoHt6auDBJxfN5W|Y39zUBircso7B$qe==dpkm)s68TOxK2of?~0)5!| ztsU^Lm7{3kkJv}5NZwVbq}wrC^sx(FuIApQs=|$;*>G^CDwIK6b4F1-a+T=*k!U&I zzEWV9Bc@=0tr5#14leZ#b^7-Elst2Csa|zltL}LUIzzTnkx81&@r8K8(UOKa!9NKM>=k0ex$42 z_H`_{aXFs>Nd?|jNh3JmE?RC)`nK(H=cRlNIaEcP{DnpDOwt$<Ffp#2-clwh?IAe2Q*fy*QTSpsmr@d+ z(whpfNg3}$p@C5<80$_}R^i7|1O$E5YClLgIv)$dhmH}v{i-%)?ug8NHX?<_dQ^z} z=D;BS#i#t@hV<%rg2jxe1YHT0{)F(L$+6OP5&qei(H>5LoC_e1HM#17F8?Ct#6H<*3Tn)fQL3Yay(|sX!L?YAdty zfvBgcMkF1@5*MUlX%jlCvYlk-NHzauLE$*$Yhb5>&=LH7jSc+z7bF^$5?914q0V!^ zRznb7Yk&L9-`{04@iE^zHi13xKMk##b;dudnTgT+^-K-}_)aIUTw_}&yrOZJH;J(- zq+4Hdyhf8^YD>q{^R!YM(@%Sb?(9+uG@AE}H(98Si?1t0ZIpwxzL-kltnbfcgQBL1 z)a*q$d!1+UWP1jyTbZ+b-0rBY(0;v03_axvWXgn21U|P=Byv#aX?HwGWO2yZA8M$k z(Mt&o*`=-MO-)r?dG*ySSyjR}POG9m0IkctpmT0BhW$u;bgVMj|EvJ-=vb|{W?Jum z&xX3QpDVyY(Z#j&J1PC1a;Y7wX>qNRsD+eBr z#eN=$FhhPyX;*$(11!ZWy|;H!=7mOJ`q(2=NmTR?d1e*Yo)qu8IxLnw)sMFhiYs5) zDl-RukqA(1C@L(@UDX2}!S1lrjHV?Q=?;emDt2Jx-=TBF>Ko4$MLh~RFBhS3lb`C- zbT^jqRr}aX>$YlF^Xv#XQ=Mo${Jdv3IrfcjG?=72 zB{$W{Qdw7F;WoRu8%Wam0o1F?UDne}ErcjzrS_>armgaG{w z@IHVB0OS!#2qd5JC%H_;vR^mOu(5-18ku{ph?tBO$JE2&cjp!!7v-})>^=y+dmQ7& zQ~-iTfG`B;I>QC3o<3y&wiolIk`tvh_^q>F@B`k@HWA$ONWabWVmCrLbyhuV2mS0{ z!Hc`TBmR-&$aD0!koeRxYL28GA`j5Z)Vt!CG+HsU4-t_1fECPiV9o(~smdD7KiDtu z<&{v~mv zBx;U!slNFB`|~ybd7u3hNDYg0 zVcGr8CGG&^gb3K9Zs;L*9o9Idzhm7Un)CW}XE_!r=VZ2%>! z@4gIu)U+g4h!=R>#9TXLLD4p0CF?HmQ?q>$*b<=CWwV2fv13zFOF4UrAKGd>yIglJ z$Br(`PFwCmGRHh3TS?89FYZp3?I>|a#_RAnTnV>`S_r@@4Yqx=ccf$3j@RbA^cC^Z z8j{$Ib1Nv)s$FJgUVRDz_Fq<tDXC_{xk}U604j5h(&{$}BULjQ()T|$*dPOLP-!?H8RC9Qro{2P?nFnj>K?+3H z_^P=~v|pffhxw_8y^X21utF(^fqU=|F5vX6+L-`OA-+7BL;7ZlksDOi$Up#Sv(bxGojRq1fu&SnIW`+g zLU-iGKKuUPh&5|wWhcskJ}A)i5EdUu1)?C3TVb;w+cGBANxw~Ek zv4WZa`ag{IAcl>o&-Y^g}NNiq;L4QiEBE`EoM}LM6nkBaHbf+f<9f zD=2M1rpDq3gOf^t$u+VeQ>3BA@**KA?EC%LBR_e`BGZ;^h4Fz z+M!#4YTlq(IxbXrW^rYh${&QxXMlMvg$jX6f#aESrn$FSZHZ`;T?9O#kP&Nfo1I<- zJba%=)A+2iX0oIiRmoQA@52jQ_DZb`B+i__K^A{L(lWi@^115WOzPq8_-dry;RPz< zq3gNZ&jjkHCCR^yuS2i|^+&+d_C0|?xB@t40ZjRG^;-W|hg!6WfeY`=HJ4gs%usC+ zG!TTQ$$+a55M&b9f05=Onul6yE+=S5=K&2g8vm4p%g>{qgo9ie$%TO+?>gzG@r&Za z?0G>yAm+M499WS_9t2tKq)haH`7RQ<0a^w+9<_nVr6gj zA(t*ntxuwF%a-0->|_zbSuMoXI*Fi`CsWgA=SO8|F?%{{Q8D(0o5(B~VV-uISmD&ZJic>7vUrcE;3Ooqf)w?4fIDqriL8YUaB+IuIh z6u6{WM%@AmE&gs=x=Z}<&n8&}kl<93?VL_#OV#*#r!`y}W_kwjck>8G2F_2%XZi_6dYUlMLP9;R)j7ez(qC%;ih zY?4n;gYv2f&sQUA!+xbG+Sbn5a~^Us3iE-s5kQ zW0eG=CZ)8m8&>%hb3$=}GskLFnv1H$8qI*{9$ABJW)J-fM@FHWObaUIN8ZVAJ=*x$ zj&21vMzuyU8LcFA?I-jQNf~Fw5wjdPk-59cUqO}QzeTWfa5iH`1}tWtR0X-a2~+8Y zsC9F_Hth|%x~jdXQ`;e;vUip{`sOzzyua<)+sJXzUF^Pn=(-X)QeI0z6DIp`%ia&o zW;YycC8gsyeYEubkpCG!#x6Uooq>WDB?H`VJR7iFBF=#)3UXyrHi#L zhT|caMV6_?58-x%RinlEg?rh-EqWUcogNkD;(p>YoMN<;;>eTHca|F?uOsSoIAXM) zoZ4+4^=_D4@>%uPZIBSpu6^~Wm}U8$tz`9+d8zeHS{j9o!7pb+udjxDqCY2ijn7w% zF%8d&G-Ar!rAJs032tus2J8qEkHZoj4gU}WzKNMmNifvc0(>zaJCZ}K)W`c!7}&Cb zv#e6-{s|z`4nl}z{1qlo6ib%42qK|I^7#iJhun?3iRAh>^QCZS*bWu7IY|c$7@{zo zl0tiX8DLWTQlVRsF`3G4^9b`<4yTVh^J60dqbE^R&Yw3Ir*ETdNQv$cU+I4=g7<%nN8MJi|Hyd%1&>ZDMEzaGmpHvV z1(EJP(oXF9X59DwukNxkwX_LKP7oFD;nNvZti}9R6}ET(Aj!75q-2PzF4}?fuGJ0E zW@(ud`CI49)R*)8f*Cr8uWDDa<7$?30{UMCzWt&d=FHu9OON@XDBUI3z$`M9T=2#v z;cgW{O%f{GOfHn1$V&mv0_kEO)8L8DO zPBoQDjII8OVdmmBe0U>#8%B2a{7cR460X>~(~H{(QcMyz-5fY4mVU{<84IU_y2aDc4w@PNs*BP;GDZ-k}Md zxCx4NFb=v)r}lOKa?sE9iijMy~sx9rSuKeFrwu%Euv?_D#XL-TMtLPE3 z6iKbMz$~TL{tHt`Yo_0IeI&qpLn^!jNT_PCgY%;y&V%S5c#g7(!sX42>J~IQ-|rV8 z*@TQwF4LB&rx&>fw9m5}t-eq21e*T*vT(pdK3vd+V}*Z1GyRP(EjOL&b~*Sq2wr@^ z_4KVwZpDmCEyD;My8Y*Q-(HZ|W2E@C|P+b+POTG0)ws$CDBHfzI0Y3;72#0i2s z?u&v?^rnFb1g(+Os=MCClx5^!2Hpum{d#Z1&`y7Y9|s0Q4MH!6<#|Zu8y4(+?ky#$ zrl%Wwf>)POzqFMY56-#+#8L}xM01g%2#9Od zBYu6lH}{w5Okd^%T-XqKo7TBT;2W^$*oOS`nYw;kgfYvq&1w!!4Y&c;=sn&rR91|p zXDUNxTn9BehZJEyvOnBfOkka{rO~m266Nfei$zv6*l%zfFXgsY+SuhC^V^v=bceF{ zRlz191h*VnJ@2j4qv{llh3Hk=dYpzH2gQpt{*$sDcwIdiAEpLE$47Vg3t%<{ZWDsS z5lzFcTNV<61xk6OQ7CUfg~081)q6LIkJod4-JzM&&n(Xo$}$f-i2^n5S?CLLWsXK= z`t8F1m?4b(vhrua>;Fa!d*L9)4)QF}@ zf#BDPvZ9?ynjyWrAf7}AveMfVh{7fY-Xz+xkhc4v_J@6xwvwFQevBG9U%s>;is+Ca ztw0X6{vd0HP88~-`A-p0yjAtxH-q&2w}@8=eIAR_c1(}~JrJk=3Mxk>f%^num-5;sUBiYp{mNjxhWF;_l)mQY*c@%SE=l4QR zv!4`T$Jf#GDfkDbt4-nl5D%)`AAL8jF0EsO==(W19*560xb1L#EpsnLXNMBUx$IaT zRV?WF%{UbG^A@FNjxtENIx1$*sen4L|6_>h_cmGM1HuvsyV5eDn3>3#N#<7W73fo; z5U|`nxi8s{VGT=B{K<6>jiUD92t<=JUB+=#p?#sQnIl@#k5I1=#7q?ZO{yEiUX-Wt z0O4GQGqeYd2Xc8qjp8aXt@~e@YhdW6{xk9C-%rLCKlK(mh|xyp;08e-O|g`1b*b7d zw`2~5It!HTr+Sk4&G%96HKV4As0~#cnT{jBV9yEd6c-k^%)dScfway!kCLA?-ifs@?NF0t$VyS3?Hlif(<$QX&3fI zV12vxzDA5;Q-9vs1eAIy7$q!s%@1tgL3I9Dm&|gD7Es`E+SJB*w)O_}OF2U`vR&SV zBoFU1KO-H+YO5w?vYULJIR{XNCqM%4JLLV}j-+R*Z(!&DFg;nJxsKn8_yTgy3Qb*T zVZR^ln2jrthF<}}^w9N3>T^Gv$K;KV#@LDMT(w|h#n}j-M_VfK7CjAgSZEvh{iUgt#`#ke90D@bv5v(bWA5~oRRlOBW>spZQR*F< zaEy3kL0b*gd{P!?Dc24dFW7F3w91W$7W(%87EHoR=R4|unRP(FbblfSubf%a4KxcP z3U_YZOaIr9jsar5M^ca2l6k1!cjRu_t15VE4^5{mP3{m?F|uRVCvNP&8G0rT0<`N0A29YSdo$OOV?uJT>olObF4AesHF*Do+ zm}u;}64Jpyb$+jlaPlhwb^{i1Q)$G@lButE?FlTbykoE`r$^t;cZFjfJ2|h zS$bMS530bN(M(2>`BL0kN-CrW_&9G*zx|gP_e4ycIeww6XClL*=-0BGEY`aAkSuHU zdElCzLyW=lLm`L~m_AgilFwl0ER1dA^!Y~UnFd)&cVq>AzyL|rDCh)|=H9WMv*hsJ zn{Ur!*Q2nzAIB{ybhLS{EDJY@?n}5Hu!SFYn8H+h5}zCXYN@Wwo4SoR*djCZ{e0P#st zR}qx^wrLvwO*#(&fr*YO&?4B6q3gJMV{8+vU|XfU8y89)&BbubUlSI7Qy^C+%DSN4 zkPtl(Qy5AQN*#hU@24%(^rO_0Q?4f6Y<QbLF|)R#)L;ZPu~wA)^DR3 zVVJIL(r>Ke<*`F4H>NLB0_9uW1Ch_|qM3vK0c;aDY1}pEzP#d?3f5=WbSb8(zY!Eu}3=9ah1xL5; zv1<{D+wvfQj&(7I@_T}!j)0b*+2^kAkEwlA&UWa%R#)ak$|>WJtKT zF^0rvbZ|)@Icy%gs*uEE8Yk?|E3nVlO0!tR(=U}URJujxv%4-W%czxw0V}R+XWk|| z#ox1uA*tOWV5MNsXvyK({DZh+7G>Zl2^`2Pi{bb-oUi8j_uVRMdyj6v%Z2$sB6W+^ z=}pQejaYOFE$@Ra<%W4aWq3xdE^)3mfMIOXDTQ}Aqur#I1mhSFj(;WNQ{WGx60p5o znQul_bgm@(tt!}{TQq9HjvsRH(LP)2!sF~0NbXeg&LB3SBI;WTQsPJI@>W&9K<1Yh z^LEjW@a-#WB+nxLR%>N^iWoMm8V)-L6mCyj`I%o};GqbWXGvk2KglN(+6^y~e7Yc@%n-DZPc&Zb4Ca{c*>*eI-Swc9f zAY;_mvAsBDH8m1(GN>V4sbFDcf4>?j*e!@O8b#-{+zy;S4H+d8J>#}_6U{E!W*hNI z1PhMe_C5#aceB%o=`C?#VPP2=YX=7h&MLLnPmIrNYw2#?x)Kl&09rY!!QV+$ywnEK zxp|(ocy2BW3r4+K<(W&z7KusGNrg#Zg{#JBWEm&2sU0|XOhbjg@6wO-0n#?u<2mb9 zX2cPnmzzsK5TA~_zEMOi(J}x1mL@|)(ru)|WJ!mu*k#%^5|a`ryI$#M3i%Bng(Iz+ zHax_Ri;H8_$zM0F)gK-h$R?EJPSK_tKF@0;7TDcjb%ugpuZBp0SQkd!^c0f+<>wIZ zj`OgdK7+OEn}ubOD|M0i9IvR*R}7(KQ`2Njq{M6qnVkC$e3&j{RT`cqrpD^s_i%&U zs_SOJzQ*X@AF67J7*+C3PEH^t@c8XIUHvjvUSkbpAB6D!3yHGn3KYW8QFc!j=a$IM zkrYDJ!tbAst1j1~XaqGbGnT|FVu&DT;3Y*V@J@jqb z(X(Wg@-%;B$++8hD7c@C%h55&HFzJuDX>OV(3w0}9>F_$z3msrn`-)8zp2%m#98n9 zWI?TyT(h_g$2cRYN?3={)znD5c1bt%ceD=sav0BP=a^YN7JKv(9XxYj`E%y6vT#Nx z$n~D-?Sl`95QH%>;##dV!~(nezFY*T7EIn;45Fcsq-ACss}Tpzsi68jmnp_?MU}jT zbrbM2UrAQsu|f^&=(51|rSRo@MEzdC?5Dn^~39d8zgv^Xp~mnv*y90(I!l#%gCc7eESUQ%H^iA{kC)CxptBs zm)QCj*N5XiinIOwF<4%ZYq_x|2O&XrQdRt;UoiA@1?MC9S3wW1sm8tR%XRe{^{1*hTR*qsIrYa`J?IX#ek&-HYgFT*9#Y??D&9`oGUnT#@csWbcqCndxI zwI))RPIK`A0m5K#acA8$fAy8aNw83f^-8Q@4{8mWFb+YAo$S$`0CVmt-x4Wa7U) z8KaH=AYi|c@M1<@_UC$T!PtJ(`sX}NS`9+emde%GZa7hswg)nM`JA&g*Ra;LXS}?OEjmSitqQAes}^A zNlkvEao?0_mfyX($Z~SH<&gY^MoohIF}#7@&oy2z;b}p+AV`e_V<^TYUb=J;f2FzJ zZ=n`mC0`mcC-c8nrag<5aPVMkI=|9)+CtgEebf5mR6n%fMG{+IEghTH_E4;ly~g!# zizS!s$B9S3E^OhS67#Ap^mKmLv^_~Y$Saq)eV`j#!zNEKRp_exSryn<-`sQ-Ey5rT zpfeHvW>UpvCn=m#0%W!Ds-LUZe1TxP=X?U}x$(0%0W_TLn%)?|Wvf^sa*^N00&H+< zn>oJr$c-AChfKhaKoCjiJf4sNc%`kMpcQU7$~OjS!`M~IuJwzDruLWP64B&jN7uu{oL)_qo20_r?F0w$yIAYhg7Ub)9m@_Bz+ zV259bC_Swn1G6xR=TL{P%Qi{u`YC^PIZ=v5ubKqmN0UCeFZ|~MkxDg_8LTUUY}%*P zp8q~r^g5u}@;^3~&hs<;Lt`n|@wN0VVA9&uyd8RW=5@VTD6T_zIm&A)`VdF9e9V!) zQ{f6V_FC3U>XwXc_V*)^qN*wn1CGg2xNl*;4nN%>rQaAY__w3%nrAnsWJWRW!8dH@2jt-LaHSpuY6&tbjKj z3y0eR`q7_$b@eecsWJlw3>bHKF4xeyRkCmo%L91;dN zn5QaR3}92x)1V4Vynz4a-O-L(b-m`CV}5sHcI0hM(-)X#ZTX7$2#Zn~7_+9%-YDGMAP+maq%yDsJG`SfX*(`V| z2NFe>G@Xv?msu+UP0squ{O3uJpQgCHE?*cs#h>b7cD?a-q_uK7ih#OpmhuJ*YXqU5 z;#D+txV=@8)R%T={rSfO$@AAItD(BKDdp$C@?OYDN?Ei#)Oxh?3DU({aLZXbD<`(GQn%IJ8( zl|R0~FTp8I!jE;{u+x4u4qHj5Vw*{{D1X;qhst6M=^8OVhLOni$CK`5Z8qTY%uu~+ zM^8)lI8ROfg_F#4eB6L1_e_eM$6RcDju^Gh8*%`5N!F~ITUj_w6rwb9^FQ8ar zI9$2tkR|X_eYZ=HsLtbHF`~wssVIL8h2Z1eRRR$7x*e})p_W@*HKE%2Ei}fA=8m0W zhrntkvYzKLu_B@vmB{5z!0J_~Aul%t&u_I$! z#PjeV;!bRdx}8+?L%=##yMGsJoyGzW!*DpW{taqa{c&A_u;r)FG{PJy$@Xtiry`s( zcGtXp&i}S@0DjWK1-b)BvX|KN!wx2z{aGK{>&4~FH9^KkRCYWjH?|9TodQw0O%luq zOiRf7&!!KF3lSAc;r)rpK{x$L+saqB31B{Rm5BiotX)Ss8f#+AnNEL6ejRYln^~<+ z^8H5jo;uEgwR>Jx_Rn4E^i!VOSZ%6`pEkK=2^nBz)=;8F5KGE4_SpZA=FUBy>AwHt zT_tkm5UHG9T@n&53OQscaakBiWDZ3tXJR>XMJ0rsqY!ckBgbL3<$PEOvngf?Im{t5 zY-VpyMU-y08_wT;%$Nk6e`_J~z_T6`nJ-+*XU!T|e`P}f&_T~vb+{!|2K!V3U|W;vr>+cu zh>hHMLcab3xlDvu$e}`iu6!7Vv$q+0s@f0GrYwH>Vx^M$%@l4V5gEQ7esy^AHzLwBYQ+abhi6H4(oRP>N z`+WXIbsqgRb0Hm(ikJTo`fsm~99BGiMs^3?^h}Xr_H7m|OzZ%=!2PcZGY=)xi>*(7 z$#xI(A$aj`j%^HDAj%*gVo2P-e$N6d{XTc*Iw3Ko1<>gp?g}a6I|N#m72o#aA#$~p zCu@{HtG9V|KVKgLL=Y>4_hr>J63dhAmCn-cV(;72pmY2CWRe$u0zH|3DgE&19CPs1 z)zb38be?$oY)1NYe1WW#Y4urdC~ax{VMIK0A~Le4g2e38*Msck@5YuHnYdVz1SE-+ zsNX2lTiaQw7PbmU+7wRLBas{W0A@PXf*pd~OMIVS5s@FYr0g4**k{Ado)Ag;P&aYR zwcTVc(919;_vYb2N>7Eoy}-9YyV@J=yq?z{3!J6a+wxTB*u!Gp->WXz+#%Oa!)sDe zJ413WX09f$H*I1@jxDFBSeToouZLVO#%bY$oNqOTMuWdA8+>m?{ge6*(g63py@Q(N zbZZ1rz0Rrp#{j8*Puk|N)sg3!nMfqec{?d8Tx~sWp=fF?+`;y=UEtuNf=E^$xo-4P z&#oIKnwCu-ix#8&#I*$}1T1_vAGMMg%=(Jl*v_F$H7_%Rw`!Kb%U8Y^f-Z7zy}Om% z?blF#^ybZqA7lR7hW~Bt-qC_Q)5Q;}b_KC{JZnn1csJtPz0GIGCHC|HGA6CXR_*DM z@j+Tb;eO^>dXYi2fnO^p?>o&i-jRStYhTkaq=Mj9YZF&!wVEmaH>@i13ZkO7muRY? zZ^~L<#L(N6E?7oo!zd{03y^u))D%gebw_1fxW9Sb9ldoL{JpqWJxk-Qd8$YkI%2zb9Wotai+lE;spP>fs7#jqbK6ic)G{?(rjA8ep5Bo$%>>5NtUoG@OVjy}ESC z_G^|={28aD{uD&Qg7S!ii1yj9^9(mSem`HbY#6e2T|JR&7xmG1I|hvbP=ns`uF*!l zl?27oajmSrQ7B<#1he67+4%K^kwHHzjOoiz z(oEZ4jE-Z8%vqn=T&)2a7J(#X2(wr_H&Tjhn0n}g)##n~@IKg>rh34^fz;7~9n48l zYLm7dVcK>qd*&cr@}-B&k{;vMX2PpZgw^x#^eAi<=%{$x^Y6S;qCV|6r}r=QV6Zjd zXQ=l0Lec8w#smD`+Z!02fDMWXN$MVT#>FcwX6zmrv9#T z4{CI*__CQs*jt7qlEy-ATx%aI3^j-?lq!XcUm+NTG1iHOm>0T^0R+&kQiIM|gam0* z3j-?a&Db2Y-#;0Uh?g?sy()xg-+s65ngxpeNP*|qO=6y{BhyS(URwSU+-&RgR^`r9 zbY*2FdOL=yHr*A3fDq0Gwrk!uf32z5(uCqkT^mvO&r&2|di_Y)+l}}z%o>(fGHZ7Y-JMya zv(Yy|lQIO_1|y|TxQ-kyug#S%;<8=9`>?bt(qVPBa^^k?-<5!k>(M%Uc6+WYk+mC6 zaEa@jITr+u7QQ@`_UhKwQt74JJsu{k^#>mHdRK4=v{q64M>&wJ1#8GBRZ`QpMEoTB z{Y08{9!5SV?5_RUg$YPYzPm`XHv=tgNW4dmG5(mXw;|{*2+w) z1jbkfL%ZwH0gcjTYNlL(Ref0yi4JWMxT&uz?iTtGzg4jI3$IMko9vhc$W#km87eiY z&JakE@}^<>vaHl;>65puL@`n<_+YD{^T^{-W#&@5gXE!|pX``X#nKhkn_btHm6hkD zdva6ufFZA?V3sIn~u{BlRz7sE9-3&a)C*ZWmB!MN}f%9PP|@UF@*M3OEK zzhnU?FSzjfe(88L2Eu(u$vTIJv2MBif->E33b7X%UutG}Bc;>pGNhft<(2GqknZHX zQ4CU$@AgIZv9nyj5|nH8L)6t$2`#_J2?+>l=G_C+W(03HYZ$I|u^CT4ld#=Tv%1LB zT(z8zT#OV=;m|v7z)yA`?V7#873#ZY%N+EE>*Ha8yVwV@mp1OS_I)wI|%i+r9gjUkFQP~34I?r_XU}2Z@l$?Cf z>c;wtgds^j35ij2q#=$so-WBscM$ayb_reYZmuZbY)QR7E#b@YeQ29}Kklo)SRQQyP0U0cQ-e;C(8KNf;wOd( z??8yD_8QW)bhH`>Rca)YmuKLCO{32d8xxFh;oD^)OyAco_`R@gQ#a!Sn!fXZ<($aN z&(a81i4Bd1jBaJQHVM)v8^TRZpxQ8cX55emSFE3oi-+}A|Cel|UhAs5-`tl>U ze68-;*2-n{9lNGQVE1tX;)x*p?N7cUc#GS?Mv3LsX(dA`B^ANeQ$&h*@{^tOHm5p3 z&__4Soc|v0_b*A54h0hL#$pm63AYZR_{#jP=5Ch1M=!q%R5)mfRWyB1Dsgl5;%~GJ zYIdxA*8A6Mji=OzRkPIe`Jh0#U2k_;{dL(V#QfFYkJhbyIGGFnRX}*w!ok78%8E4R zj-Fq)x3>X-Kn^55)vwlMwa-%NWc{r5^8kg#`fqWLNu{id`0PIb9e>*13;bPqA0$tX zzNFcx0o&=*>guOYKVNLKd6)Nf&=r+>vaJ(ZM4l{XbPXUbSA!}EZotTS#J^B2M{7E0aA7&n&Y7SbV$QhW@F$Q-Ez+QgyWz-D$$cLeqdczdNeA)|?O8 zux1;6&n`s89X6bS_m~&>s5bs&9#LMt?~;!WXG_A^!03e1w^m4~ea2w+|AHYYd30w& z9jc@s`80_GRTbyLTsC zKd!!eP~3^otf=F69us34H`k6^+3h$*Ybc6t_x#5sk$_my!9J{J>r+qC&D*>4z6f+z z8F^SqdbRllya#~Ab-YzSs~h`0Isz;cuMD@SKR=9i)nPAi?aYv~C4+2*&qxd#=6+u^ zeJmFU4o|t=Wf}8?>_MVmvyFmRG9ldM<{s%A#shyskeY3G&#g_nFX1gmKd&F+2-rDW z7G)<1N~eqaFC-C;OOB#T$Iz%Uoe`t*0sAqr=Yo*!=?5Nq+^QW5eJ-iq#VcS($0p$O zP}#mckqCg52edUYAUFtSe@bCkwmCyv2msErOB>k^?(z|LtZY78!zzmlPz9bp`xG@u zHP)q}7Mezu)~sV4+$&xcn4J$*dEMTZK5wHuMA3qa)hHJDfM#CIJ-Rd(Gbwa!e|SmR zB0h&|Yv~xX+L@l_arwov9lPm^_Z=-k4Rd`e6xO`_M~wT}G0K0W^US3n8-Drse4hLh zz|^vnG7m6nr2sBG07Mqq+Ari!VfVppKIb0W`@Gkse>CQ&t)af>;siubJA4ku6Atxh z1Crd7v~#)Y8Xw2epZ%P|NdE9QuX6CO7qNR@a9NhWwdf08?iUvwEyry2npC@A6c=ER zyEOG(<1(gyUjLmS1!dlu4|K~Qy?SMIIkf}0iTMXrllrNlabX)Xa#cQ%I)6lWmDarU zER~KC>=Y0@A?9%6pUaw-Bm3*%&$N%uYacw`8@h>bc$V_$LWQhJhO0-n+>)KYhS|ht z8JUhJ56?bU=z*j>i4}yY^OA+cB>Kh%8e^%v<$BQo{ITZ|wI!`qRk@st37kg!9tM^wu3o z0wPu6h+K}tz*33$qU(Tujz4_xmCW9H$*;IRuo`jp=6D>ie20@(@75l>+BSe9%pC@R zQc>ow9^0FQ*!=!g9c$_I(X}kmtCf>)1=a;83HESAs-s~uID6s6aC?2a$fjyq^| z2oMC>SA`~-!|LL%uAO9aKBuRxi;gQ|ZIWk-BY+!+*@s~n76;y*6Ds3PEwlii@cEc6 zU)*rvex|ngYig!5F!~0wKksB)*lJeP|Av!e{>=WYOPMc$7H*aOM&_kGsjcfy1POiN z)HwOQfVc5%hGk7zaK(_sv2PV+_|~02^)<;fz2STC|FELmvJXJk6+b-MAa!**ZA5i1 zbm_WoZM8fpY-JgsLJ>7q@s{($%XD=s3?A!rd$*%+d9|i;1&Yka5p=unm!g_Xu2*7> zYg)vol*1fB%LuDXYbgnScc4n)_96aR*{YwMK&r2!5Em3~)`|0*>~inqwf%YO_3r#P!2lm6?d*gBp)LENhfGIw`O@$1IU6z4Dn3cWX+k&r<^l65Lr5 z^%z5uD9R>sLyHL60jj%cnJ3Rb3pwpq)3F&&Zj*bSCHv+$%(vRZ+eFsZFa$T1)@AbY zzwHAJ`4 zm&$BPmf-Ygn9Dt0z7*@D&efW|f$4alML+F0QhjI+U%=*$tanT7R=)*yjj8R>!>I_x z)0J&%f%F$JEGN~DBXuB4CRdlYfOZASjW_g zUkF_;vpf&}_1NE)o&7r%CJKd{1zryD3la~x%&$w{xTJwGqf;ASG3p-c{uJ_&l0Kb$ zWEs+XwMyD~r7{iz)BRCTxv^OkRWH-pl4lad%gvcjv5f}ZUAUnSSQ}2ta75QAwcWOJ zZizQ7-pC?8Jry;k)qer(VFB literal 0 HcmV?d00001 diff --git a/docs/screenshots/core/menu-record-light-390.png b/docs/screenshots/core/menu-record-light-390.png new file mode 100644 index 0000000000000000000000000000000000000000..a699424c89e9aefa21b4927210204ccb85a29829 GIT binary patch literal 35947 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 ChycF; literal 0 HcmV?d00001 diff --git a/docs/screenshots/core/page-record-dark-1440.png b/docs/screenshots/core/page-record-dark-1440.png new file mode 100644 index 0000000000000000000000000000000000000000..62b51eec9960e9b99f71b565b8be0dd24795bad9 GIT binary patch literal 85952 zcmc$`Ra9I{)GbUx0to~Q?!gl@xI+l;?iO5|#@!N}#tAg;?(P=crLo{Hjl0Y3lbrKE z{de4#d&k#LHM(o>s$F|kt+nQyt3wpz#8Hq4kl^6pP$VTpl;GfAXTZV1`@eY!`{p;( zivTz{bT~;7Ar;q@gC*oI%9rbiC!|K7mp{CFg)lgT7y2Vq;$_m0oEr(LSV#@qP}5K6 z>AP75THy7(u!sH7SsZ16g@M3078~hD@`8`Fl=21zpV50Aj4Gawt&PI+`4C=u3xci8 zc2ZJP53PCcy~d7z)zvwX!J$z(ASXj&7GA+-0s9~b;Jo{NK2>5oY)|!m3j0 z>QYi8d{i^L1}&aI5lmwzRh0Ghz#=|qYI}}oen?H|zk|ZnKsJ1ZXHzy>egdvvfkw!Z z#Qfd^?#wnbSRJMORCLrUKG3y4o9|0{a_G1KcdLSkXuik66 z)?8G@@U&|5e^5aM+kIZB~4?cg!+3d>tt|+DFgI&SCMgvPV9i?{S5b?qGE?`wUh*3{%q#19VuILpeKI5{*`=)%mipCIXI49G>YezqHhdqdT-TTiOWq<#@qR z>FjTgNy+w1en*x+2IedDU9Xdky}GF2<0lNHD4Q>c{|ud+Q?;H}m}nx{2#5A41cpbA zA9w=+nkP46{#`;WbA!vHRH7Qm?{YB`mZ3-66AEE){Z6gV2Jwtg!Mo|vKi$66kAqH3 zg-dL3O$UroUS&)Y5bObQO_NaYL*0qKG%5QDH7C&rBh%<|y!qbO=2KI$ z^vc&)B<^@Z1b==bp@fHzh3&QrCB7HC@ptYP7Epi}ywOWE&VOyiBq>A@I6krVRBy1hU*^SV`hF)i*Hky>A1$zdymv&R+ZDrI4DloZaf3C91E$#_sOdcBs8W^_zc2 zt`QX%m)Fq_z%US^$Wf960N9g9qNRFr`g$WS6PPI^B3NccQ2EwyOCS0q;Z znddt}8d_R2GgDaDxJzwb;L(~&d`mO4eU{ESqp(MChjiw8r~5QvB(Y-~^7h2$KaU~GdQeh$Q%jU*+er75bbyR784nmsgBR-2CH zV2VHSIUiXYf^uU?F5jjI9LA}u5%J-9oUWTd)W3dB`^?VH?Ra7f2{4`>4#A`uPPx5l ziQ-;ZU;7+DDtV9KMQ!0PkLwdfxrRpo{4G zc%ih%aO52-Gdr>UNe8fj?H{wxkdu~{)=p-Ko{A}Ru(eI(zqY`{tUf#QP>qYz!=#pV zJ2(vsv#LbAR#8=b@2VlWX9+F0yW1wu5eJA_0|1UrPGc!@5`170;NCt|@anfQA>qDu z{n>GI4Ol}{6XKZtRpnIrqTJ=E1_L>bADoaHdp^vHY&M3(_z@io`%;uYf|(>c2&G!k zZav4nNhnp&=U2!0N#&=f>?Lts*=Dgjsq|MwIPQX_tSRQ>zX<5ZpwvMqBCIYKEAKPv zOgav@^-yu#hoz|*hT0!yqcID!dUH7@XZiLmrd*}9(qeBGmR(JBi6XbGejJ=ddf!-C zf~E=L@*f|%fb|QmG7(!hx79Q}350`au{A7@9eKiugD8*%ZbX46e%;b?i{yMgodX-G z;PuK)`jq@2IhP$;PKAU9iamM7A#poYPm9W+Ld%uhtpMmw1Zj&}i4?zAx*o21xpPqO zA>EF&1FCl|XKpyka_B-0Z>C*d!17Lz`}?N?*ME~tl~fO}>I4k891I-=4w^pDCwB_t0$o~S&N7Bn^N!}RT$<;! z%eZgJtaupr#Oqdnn=O<@jUL1UGY(T5eqJ#~vib1V-Y*{!;*`bmNosip7992%;j{^Q zCG4r?>wjOid+r)ZZ-<_%RyW{3UwT){8^I2CU%l+?Vs+)o)X#>$Kj-&ItL5eAAO60o zr5(i+STq^MloxD2s6B39_&tX#y`k?hTkqI6tN8MzpSY}STp44&$FIcDcuy|W#P~BL zuZbn{&W9;Zl|{C3Go<>SubJz41pyb-cKgiy0@e6m|2rauvQN? z`yn%Jj?goGnlTl1)rr*&u)cHq!x>1PAG^x!JYHZIzuWG{_73>9vvCGw4krR1VbB$X zQspbWvoUQ671Qn7%1HvQTgvTJx6nY_uYN9zDEB0b4b9EET8TkHW|BU}=Tpcs%vCJU z_J*c~Y2nStD^|D#__7DWAxxBlI?iA8|(Me|vIe_n1mej;4Gxd5KDh zCfFvbd3VZ|$EBRCJ>M&w6p={Eu@o&^Ffj=QRz|#f&pl_eG1~KsE_=0N z+{iB@&NSJ^sOBQlj3lI#2ga9+d%V#*3F~)n3+oQ%V}^fD@v3g49(e{8j+NKVRi7#x zWe~gzv$A0K`Q=c{&fZM!qhNy1ww=M5p49Go8UwyMx|P(>nJNS%x^g9exAGioLiv~| z3Y!JOlz)Z-(%k2l5*Ope(YE5KG1IFg0XU4mWv(rdiV}>w$y{cG+G%G_TxrJxqwd8q zaLOV~bGhFVm*)(sng2LBkly@mLd4Y!(&0gxrNJV^Y39OMY$`rTUIN7*zyL8r1!5AOEh)E+y3qjcnajPaKCI*2(PEJlVau?3Fwl`M` z$578CyA*-c&nBVmLvMDHeavF?I2;S6TRltwbt9RqLxY2*fD%d4y-Q!e`f=O%@FEkb z$IQbmppJs${(O{U-CkpL43hvyYL6?5o1c0l^snbf4g(FWIB+_>ovy&mV6QqqIN3@VZP-+(>Tq9MFjPlXy= zhVL!F8VS+wnO16V+9U1-9_=$WYTU{Sd6VBK6)l230kExx=!Rqu#lksTvOI}vbZMIK z;(x|zB_wi|b>a&q=MfggP&$!)cYEV~@-PK-K}%w+W}v4}_j1W(oaDV9wt*q`p|TlwYN98 zaf+CaIC2>D0`Vdd7RQbuf=Y{ucw9eTo%ZFArJOccZch~|Pt7VWm6Vn)`K&6)$}*uk z9jtyX$;@1{HfkrVjGjZhy7WCa*d8&?6Bx2=KvyixGdz7>yoP36#$_3AxA$U1FYZ9Te zp&>JjsFW1f-gICyQz`yF4?fcvdkMXmi&I-;ToU>6^zBJJ+jo~&71WT$$-b&7()Hga z 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 JNxc2|zX0_xc|iaG literal 0 HcmV?d00001 diff --git a/docs/screenshots/core/page-record-dark-390.png b/docs/screenshots/core/page-record-dark-390.png new file mode 100644 index 0000000000000000000000000000000000000000..95fc6ac3e9d3fea8d60980e8514078ef322813c2 GIT binary patch literal 30322 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Ν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�M%U>q;}8#MXh}h|X%W1O;=XZb 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 UG~&~SZXO~pqw=;=+W71L1-~-@=Kufz literal 0 HcmV?d00001 diff --git a/docs/screenshots/core/page-record-light-390.png b/docs/screenshots/core/page-record-light-390.png new file mode 100644 index 0000000000000000000000000000000000000000..e61d2712dd7d9529433b191686e0d5ad441105d7 GIT binary patch literal 29729 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 vW&4jeP11opemcDr#sU-m9gi_pnsO?#=%JmkdE; literal 0 HcmV?d00001 diff --git a/docs/screenshots/core/pages-home-dark-390.png b/docs/screenshots/core/pages-home-dark-390.png new file mode 100644 index 0000000000000000000000000000000000000000..d91b36949d63027435821c3144d5bc0d1ea42b4d GIT binary patch literal 32775 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/core/pages-home-light-390.png b/docs/screenshots/core/pages-home-light-390.png new file mode 100644 index 0000000000000000000000000000000000000000..318b6912fc7df8b85be2eb880209a4f106e606d0 GIT binary patch literal 32986 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�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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/core/sites-home-dark-1440.png b/docs/screenshots/core/sites-home-dark-1440.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6da268fc0293baf72b65e820b333b66ffa8981 GIT binary patch literal 58483 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

{$O283sV=(nu9+7Pi>DW`sKpYO@K-chlt65ZY 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 z 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index 3b025a4..cb7f9f8 100644 --- a/pom.xml +++ b/pom.xml @@ -100,6 +100,18 @@ qqq-backend-module-postgres test + + + com.kingsrook.qqq + qqq-middleware-javalin + test + + + com.kingsrook.qqq + qqq-frontend-next + 1.0.0-RC.14 + test + org.testcontainers postgresql diff --git a/src/main/java/com/kingsrook/qbits/cms/CmsQBitConfig.java b/src/main/java/com/kingsrook/qbits/cms/CmsQBitConfig.java index be549ad..6015821 100644 --- a/src/main/java/com/kingsrook/qbits/cms/CmsQBitConfig.java +++ b/src/main/java/com/kingsrook/qbits/cms/CmsQBitConfig.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Pattern; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.kingsrook.qbits.cms.security.CmsRole; import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; @@ -527,8 +528,10 @@ public class CmsQBitConfig implements QBitConfig /******************************************************************************* - ** The install's runtime state, set when the qbit is produced. + ** The install's runtime state, set when the qbit is produced (not part of + ** the config's JSON: tables carry their source qbit config to the frontend). *******************************************************************************/ + @JsonIgnore public CmsRuntime getRuntime() { return (this.runtime); diff --git a/src/main/java/com/kingsrook/qbits/cms/CmsQBitProducer.java b/src/main/java/com/kingsrook/qbits/cms/CmsQBitProducer.java index e247e66..afbf80a 100644 --- a/src/main/java/com/kingsrook/qbits/cms/CmsQBitProducer.java +++ b/src/main/java/com/kingsrook/qbits/cms/CmsQBitProducer.java @@ -215,7 +215,7 @@ public class CmsQBitProducer implements QBitMetaDataProducer { LOG.warn("The CMS database is not up to date; starting degraded", logPair("problems", problems)); } - qBitConfig.setRuntime(new CmsRuntime(qBitConfig, problems)); + qBitConfig.setRuntime(new CmsRuntime(problems)); LOG.info("CMS QBit produced", logPair("version", VERSION), logPair("backendName", qBitConfig.getBackendName()), logPair("tablePrefix", qBitConfig.getTableNamePrefix()), logPair("features", qBitConfig.getFeatures()), diff --git a/src/main/java/com/kingsrook/qbits/cms/CmsRuntime.java b/src/main/java/com/kingsrook/qbits/cms/CmsRuntime.java index 3f6933f..982f6f8 100644 --- a/src/main/java/com/kingsrook/qbits/cms/CmsRuntime.java +++ b/src/main/java/com/kingsrook/qbits/cms/CmsRuntime.java @@ -24,28 +24,25 @@ import com.kingsrook.qqq.backend.core.model.metadata.qbits.QBitMetaData; /******************************************************************************* - ** Runtime state of one CMS install: its config and the result of the startup - ** schema check. Code that runs per request (widget renderers, processes) + ** Runtime state of one CMS install, held by its config: the result of the + ** startup schema check. Code that runs per request (widget renderers, processes) ** finds it by the install's name prefix, so two installs in one instance ** (two namespaces) stay apart. *******************************************************************************/ public class CmsRuntime { - private final CmsQBitConfig config; - private final List schemaProblems; + private final List schemaProblems; /******************************************************************************* ** Constructor. ** - ** @param config the install's config ** @param schemaProblems what the startup schema check found (empty when fine ** or not checked) *******************************************************************************/ - public CmsRuntime(CmsQBitConfig config, List schemaProblems) + public CmsRuntime(List schemaProblems) { - this.config = config; this.schemaProblems = List.copyOf(schemaProblems); } @@ -76,16 +73,6 @@ public class CmsRuntime - /******************************************************************************* - ** Getter for config - *******************************************************************************/ - public CmsQBitConfig getConfig() - { - return (config); - } - - - /******************************************************************************* ** Getter for schemaProblems *******************************************************************************/ diff --git a/src/main/java/com/kingsrook/qbits/cms/home/CmsHomeRenderer.java b/src/main/java/com/kingsrook/qbits/cms/home/CmsHomeRenderer.java index 5a69e3a..eff57f9 100644 --- a/src/main/java/com/kingsrook/qbits/cms/home/CmsHomeRenderer.java +++ b/src/main/java/com/kingsrook/qbits/cms/home/CmsHomeRenderer.java @@ -34,12 +34,15 @@ import com.kingsrook.qbits.cms.metadata.CmsAreas; import com.kingsrook.qbits.cms.metadata.CmsTableDefinition; import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.AbstractWidgetRenderer; import com.kingsrook.qqq.backend.core.actions.permissions.PermissionEnforcement; +import com.kingsrook.qqq.backend.core.actions.permissions.PermissionsHelper; +import com.kingsrook.qqq.backend.core.actions.permissions.TablePermissionSubType; import com.kingsrook.qqq.backend.core.actions.tables.CountAction; import com.kingsrook.qqq.backend.core.actions.tables.QueryAction; import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.exceptions.QPermissionDeniedException; import com.kingsrook.qqq.backend.core.model.actions.tables.count.CountInput; +import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterCriteria; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterOrderBy; @@ -59,14 +62,15 @@ import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; ** home owns its data and shows only real data read as the current user, so ** a table the user may not read is left out instead of shown as zero: ** - ** - the top home: one card per area with its main tables' counts (and draft - ** pages), linking to the area; no per-record lists, so nothing duplicates - ** an area home; + ** - the top home: one card per area with its main tables' counts (and + ** unpublished pages), linking to the area; no per-record lists, so nothing + ** duplicates an area home; + ** - an area home: what needs attention (unpublished or inactive rows), the + ** create actions the user may run, and the area's recently changed + ** records. Next's app page lists the tables and counts below it. + ** ** Reads always run with PermissionEnforcement.ENFORCE: a widget renders ** inside a trusted scope, and these counts must still be the user's own. - ** - ** - an area home: a tile per main table (count, drafts or inactive rows), - ** the area's recently changed records, and its settings tables. *******************************************************************************/ public class CmsHomeRenderer extends AbstractWidgetRenderer { @@ -146,44 +150,52 @@ public class CmsHomeRenderer extends AbstractWidgetRenderer /******************************************************************************* - ** An area home. + ** An area home. Next's app page already lists the area's tables with their + ** record counts, so this home shows only what that list cannot: what needs + ** attention, the create actions the user may run, and recent changes. *******************************************************************************/ String renderArea(CmsQBitConfig config, CmsAreas.Area area) throws QException { - StringBuilder html = new StringBuilder(); - List tiles = new ArrayList<>(); - List recent = new ArrayList<>(); + StringBuilder html = new StringBuilder(); + List attention = new ArrayList<>(); + List actions = new ArrayList<>(); + List recent = new ArrayList<>(); + boolean readable = false; for(String logical : area.mainTables()) { String table = config.applyPrefix(logical); - Long count = count(table, null); - if(count == null) + if(count(table, null) == null) { continue; } - List notes = new ArrayList<>(); - String draft = draftNote(config, logical); - if(!draft.isEmpty()) + readable = true; + if(hasField(table, "isPublished")) { - notes.add(draft.substring(2)); + addAttention(attention, config, logical, "isPublished", "Unpublished "); } - else if(hasField(table, "isActive")) + if(hasField(table, "isActive")) { - Long inactive = count(table, new QQueryFilter(new QFilterCriteria("isActive", QCriteriaOperator.EQUALS, false))); - if(inactive != null && inactive > 0) - { - notes.add(CmsHtml.muted(inactive + " inactive")); - } + addAttention(attention, config, logical, "isActive", "Inactive "); + } + if(PermissionsHelper.hasTablePermission(new InsertInput(table), table, TablePermissionSubType.INSERT)) + { + actions.add(CmsHtml.link(tablePath(config, logical) + "/create", "New " + label(logical).toLowerCase(Locale.ROOT))); } - notes.add(CmsHtml.link(tablePath(config, logical) + "/create", "New " + label(logical).toLowerCase(Locale.ROOT))); - tiles.add(new CmsHtml.Tile(pluralLabel(logical), String.valueOf(count), tablePath(config, logical), notes)); recent.addAll(recent(table)); } - if(tiles.isEmpty()) + if(!readable) { return (CmsHtml.empty("You do not have access to " + CmsHtml.escape(area.label()) + ".")); } - html.append(CmsHtml.tiles(tiles)); + + html.append(CmsHtml.heading("Needs attention")); + html.append(attention.isEmpty() ? CmsHtml.empty("Nothing: everything here is published and active.") : CmsHtml.tiles(attention)); + if(!actions.isEmpty()) + { + html.append("

"); + } html.append(CmsHtml.heading("Recently changed")); recent.sort(Comparator.comparing((QRecord r) -> r.getValueInstant("modifyDate"), Comparator.nullsLast(Comparator.reverseOrder()))); @@ -196,36 +208,32 @@ public class CmsHomeRenderer extends AbstractWidgetRenderer List rows = new ArrayList<>(); for(QRecord record : recent.subList(0, Math.min(RECENT_ROWS, recent.size()))) { - String table = record.getTableName(); - String logical = table.substring(config.getTableNamePrefix().length()); - String title = record.getRecordLabel() != null ? record.getRecordLabel() : label(logical) + " " + record.getValue("id"); - Instant when = record.getValueInstant("modifyDate"); + String logical = record.getTableName().substring(config.getTableNamePrefix().length()); + String title = record.getRecordLabel() != null ? record.getRecordLabel() : label(logical) + " " + record.getValue("id"); + Instant when = record.getValueInstant("modifyDate"); rows.add(new CmsHtml.Row(title, tablePath(config, logical) + "/" + record.getValue("id"), label(logical) + (when == null ? "" : " ยท " + DATE.format(when)))); } html.append(CmsHtml.rows(rows)); } - - List settings = new ArrayList<>(); - for(String logical : area.settingsTables()) - { - Long count = count(config.applyPrefix(logical), null); - if(count != null) - { - settings.add(CmsHtml.link(tablePath(config, logical), plural(count, label(logical)))); - } - } - if(!settings.isEmpty()) - { - html.append(CmsHtml.heading("Settings")); - html.append("
"); - settings.forEach(s -> html.append("").append(s).append("")); - html.append("
"); - } return (html.toString()); } + /******************************************************************************* + ** A "needs attention" tile when some rows of a table have a flag off. + *******************************************************************************/ + private void addAttention(List tiles, CmsQBitConfig config, String logical, String flagField, String labelPrefix) throws QException + { + Long count = count(config.applyPrefix(logical), new QQueryFilter(new QFilterCriteria(flagField, QCriteriaOperator.EQUALS, false))); + if(count != null && count > 0) + { + tiles.add(new CmsHtml.Tile(labelPrefix + pluralLabel(logical).toLowerCase(Locale.ROOT), String.valueOf(count), tablePath(config, logical), List.of())); + } + } + + + /******************************************************************************* ** ", N drafts" for a table with an isPublished field (empty otherwise). *******************************************************************************/ @@ -237,7 +245,7 @@ public class CmsHomeRenderer extends AbstractWidgetRenderer return (""); } Long drafts = count(table, new QQueryFilter(new QFilterCriteria("isPublished", QCriteriaOperator.EQUALS, false))); - return (drafts == null || drafts == 0 ? "" : ", " + CmsHtml.muted(drafts + (drafts == 1 ? " draft" : " drafts"))); + return (drafts == null || drafts == 0 ? "" : ", " + CmsHtml.muted(drafts + " unpublished")); } @@ -319,7 +327,7 @@ public class CmsHomeRenderer extends AbstractWidgetRenderer *******************************************************************************/ private static String pluralLabel(String logical) { - return (pluralize(label(logical))); + return (CmsTableDefinition.pluralize(label(logical))); } @@ -330,16 +338,6 @@ public class CmsHomeRenderer extends AbstractWidgetRenderer static String plural(long count, String label) { String lower = label.toLowerCase(Locale.ROOT); - return (count + " " + (count == 1 ? lower : pluralize(lower))); - } - - - - /******************************************************************************* - ** - *******************************************************************************/ - static String pluralize(String word) - { - return (word.endsWith("y") && !word.endsWith("ay") ? word.substring(0, word.length() - 1) + "ies" : word + "s"); + return (count + " " + (count == 1 ? lower : CmsTableDefinition.pluralize(lower))); } } diff --git a/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableBuilder.java b/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableBuilder.java index b2cb333..6ed7bc0 100644 --- a/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableBuilder.java +++ b/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableBuilder.java @@ -144,7 +144,7 @@ public class CmsTableBuilder String name = config.applyPrefix(definition.logicalName()); QTableMetaData table = new QTableMetaData() .withName(name) - .withLabel(definition.label()) + .withLabel(definition.pluralLabel()) .withIcon(new QIcon(definition.icon())) .withBackendName(config.getBackendName()) .withBackendDetails(new RDBMSTableBackendDetails().withTableName(name)) diff --git a/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableDefinition.java b/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableDefinition.java index 91b9899..e374cc4 100644 --- a/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableDefinition.java +++ b/src/main/java/com/kingsrook/qbits/cms/metadata/CmsTableDefinition.java @@ -19,6 +19,7 @@ package com.kingsrook.qbits.cms.metadata; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.Set; import com.kingsrook.qbits.cms.CmsFeature; import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; @@ -33,7 +34,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.tables.Tier; ** @param logicalName the unprefixed table name, e.g. "page" ** @param entityClass the entity whose fields the table has ** @param feature the feature that owns the table - ** @param label the table label + ** @param label the singular label ("Page"); the table label is the plural ** @param icon a Material icon name ** @param kind main table, child table or reference data ** @param recordLabelFields fields of the record label (joined by spaces) @@ -93,6 +94,28 @@ public record CmsTableDefinition(String logicalName, Class(Map.of("id", "1")))); + assertThat(JsonUtils.toJson(output.getWidgetData())).as(widget).isNotEmpty(); + } + } +} diff --git a/src/test/java/com/kingsrook/qbits/cms/CmsQBitProducerTest.java b/src/test/java/com/kingsrook/qbits/cms/CmsQBitProducerTest.java index 59f783e..7ef044e 100644 --- a/src/test/java/com/kingsrook/qbits/cms/CmsQBitProducerTest.java +++ b/src/test/java/com/kingsrook/qbits/cms/CmsQBitProducerTest.java @@ -84,6 +84,7 @@ class CmsQBitProducerTest QAppMetaData top = qInstance.getApp("cms"); assertThat(top.getLabel()).isEqualTo("CMS"); + assertThat(qInstance.getTable("cms_page_section_type").getLabel()).isEqualTo("Page Section Types"); assertThat(top.getWidgets()).containsExactly("cmsHome"); assertThat(top.getChildren()).extracting("name").containsExactly("cmsSites", "cmsPages", "cmsNavigation"); assertThat(qInstance.getApp("cmsPages").getWidgets()).containsExactly("cmsPagesHome"); diff --git a/src/test/java/com/kingsrook/qbits/cms/demo/CmsDemoServer.java b/src/test/java/com/kingsrook/qbits/cms/demo/CmsDemoServer.java new file mode 100644 index 0000000..e331c73 --- /dev/null +++ b/src/test/java/com/kingsrook/qbits/cms/demo/CmsDemoServer.java @@ -0,0 +1,93 @@ +/* + * Copyright 2026 Kingsrook, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.kingsrook.qbits.cms.demo; + + +import com.kingsrook.qbits.cms.CmsQBitConfig; +import com.kingsrook.qbits.cms.CmsQBitProducer; +import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.instances.AbstractQQQApplication; +import com.kingsrook.qqq.backend.core.model.metadata.QAuthenticationType; +import com.kingsrook.qqq.backend.core.model.metadata.QInstance; +import com.kingsrook.qqq.backend.core.model.metadata.authentication.QAuthenticationMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.branding.QBrandingMetaData; +import com.kingsrook.qqq.backend.module.postgres.model.metadata.PostgreSQLBackendMetaData; +import com.kingsrook.qqq.middleware.javalin.QApplicationJavalinServer; + + +/******************************************************************************* + ** A local demo host for looking at the CMS in the Next UI (screenshots): a + ** blank QQQ app with one PostgreSQL backend and the qbit, nothing else. + ** Not part of the build; run it from the IDE or with exec:java against a + ** database the qbit's changelog has run on: + ** + ** CMS_DEMO_DB_PORT (default 55433), CMS_DEMO_DB_NAME (cmsdemo), + ** CMS_DEMO_DB_USER (postgres), CMS_DEMO_DB_PASSWORD, CMS_DEMO_PORT (8000). + ** + ** It signs everyone in anonymously, so it runs the CMS with openReads. + *******************************************************************************/ +public class CmsDemoServer extends AbstractQQQApplication +{ + + /******************************************************************************* + ** Start the demo. + *******************************************************************************/ + public static void main(String[] args) throws Exception + { + new QApplicationJavalinServer(new CmsDemoServer()) + .withServeFrontendNext(true) + .withServeFrontendMaterialDashboard(false) + .withPort(Integer.parseInt(env("CMS_DEMO_PORT", "8000"))) + .start(); + } + + + + /******************************************************************************* + ** The demo instance. + *******************************************************************************/ + @Override + public QInstance defineQInstance() throws QException + { + QInstance qInstance = new QInstance(); + qInstance.addBackend(new PostgreSQLBackendMetaData() + .withName("database") + .withHostName("localhost") + .withPort(Integer.parseInt(env("CMS_DEMO_DB_PORT", "55433"))) + .withDatabaseName(env("CMS_DEMO_DB_NAME", "cmsdemo")) + .withUsername(env("CMS_DEMO_DB_USER", "postgres")) + .withPassword(env("CMS_DEMO_DB_PASSWORD", ""))); + qInstance.withInstanceDefaultAuthentication(new QAuthenticationMetaData().withName("anonymous").withType(QAuthenticationType.FULLY_ANONYMOUS)); + qInstance.setBranding(new QBrandingMetaData().withAppName("QBit CMS demo").withCompanyName("QRun-IO")); + + new CmsQBitProducer() + .withQBitConfig(new CmsQBitConfig().withBackendName("database").withOpenReads(true)) + .produce(qInstance); + return (qInstance); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private static String env(String name, String defaultValue) + { + String value = System.getenv(name); + return (value == null || value.isEmpty() ? defaultValue : value); + } +} diff --git a/src/test/java/com/kingsrook/qbits/cms/home/CmsHomeRendererTest.java b/src/test/java/com/kingsrook/qbits/cms/home/CmsHomeRendererTest.java index 68d6242..2cd8ec7 100644 --- a/src/test/java/com/kingsrook/qbits/cms/home/CmsHomeRendererTest.java +++ b/src/test/java/com/kingsrook/qbits/cms/home/CmsHomeRendererTest.java @@ -23,6 +23,7 @@ import com.kingsrook.qbits.cms.CmsQBitConfig; import com.kingsrook.qbits.cms.CmsQBitProducer; import com.kingsrook.qbits.cms.CmsStartupMode; import com.kingsrook.qbits.cms.CmsTestSupport; +import com.kingsrook.qbits.cms.metadata.CmsTableDefinition; import com.kingsrook.qbits.cms.security.CmsRole; import com.kingsrook.qbits.cms.security.CmsSecurity; import com.kingsrook.qqq.backend.core.actions.dashboard.RenderWidgetAction; @@ -74,7 +75,7 @@ class CmsHomeRendererTest assertThat(top).contains("Sites", "Pages", "Navigation", "/app/cmsPages", "0 pages"); String sites = render(qInstance, "cmsSitesHome"); - assertThat(sites).contains("Nothing yet", "4 redirect types", "/app/cms_redirect_type", "New site"); + assertThat(sites).contains("Nothing yet", "Needs attention", "everything here is published and active", "New site", "New redirect"); } @@ -97,11 +98,14 @@ class CmsHomeRendererTest insert("cms_snippet", new QRecord().withValue("name", "Footer").withValue("shortName", "footer").withValue("siteId", siteId).withValue("isActive", false)); String top = render(qInstance, "cmsHome"); - assertThat(top).contains("2 pages", "1 draft", "1 site"); + assertThat(top).contains("2 pages", "1 unpublished", "1 site"); String pages = render(qInstance, "cmsPagesHome"); - assertThat(pages).contains("Welcome <home>", "Work in progress", "/app/cms_page/", "1 inactive", "Recently changed", "4 page types"); + assertThat(pages).contains("Welcome <home>", "Work in progress", "/app/cms_page/", "Unpublished pages", "Inactive snippets", "Recently changed", "New page"); assertThat(pages).doesNotContain("Welcome "); + + CmsTestSupport.session(qInstance, CmsSecurity.permissionsFor(config, Set.of(CmsRole.VIEWER))); + assertThat(render(qInstance, "cmsPagesHome")).contains("Work in progress").doesNotContain("New page"); } @@ -140,7 +144,8 @@ class CmsHomeRendererTest { assertThat(CmsHomeRenderer.plural(1, "Page")).isEqualTo("1 page"); assertThat(CmsHomeRenderer.plural(2, "Page Type")).isEqualTo("2 page types"); - assertThat(CmsHomeRenderer.pluralize("category")).isEqualTo("categories"); + assertThat(CmsTableDefinition.pluralize("Category")).isEqualTo("Categories"); + assertThat(CmsTableDefinition.pluralize("Key")).isEqualTo("Keys"); assertThat(CmsHtml.escape(null)).isEmpty(); assertThat(CmsHtml.escape("
&\"")).isEqualTo("<a href='x'>&""); } -- 2.54.0