From 5f8d9740d6d171e38c775e9c59ea65dd80e7403b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moya?= Date: Fri, 19 Jun 2026 14:58:20 +0200 Subject: [PATCH 001/229] :wrench: Normalize text nodes comparison, to be used in tokens detach --- common/src/app/common/data.cljc | 16 +++++++++---- common/src/app/common/types/text.cljc | 24 +++++++++++++++++-- .../common_tests/logic/token_apply_test.cljc | 2 +- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/common/src/app/common/data.cljc b/common/src/app/common/data.cljc index c7d709483d..7cbfdcc4f5 100644 --- a/common/src/app/common/data.cljc +++ b/common/src/app/common/data.cljc @@ -9,7 +9,7 @@ data resources." (:refer-clojure :exclude [read-string hash-map merge name update-vals parse-double group-by iteration concat mapcat - parse-uuid max min regexp? array?]) + parse-uuid max min regexp? array? empty?]) #?(:cljs (:require-macros [app.common.data])) @@ -175,11 +175,17 @@ (.isArray (class o)) false))) +(defn empty? + [val] + (if (or (coll? val) (string? val)) + (clojure.core/empty? val) + (nil? val))) + (defn not-empty? - [coll] - (if (coll? coll) - (boolean (seq coll)) - (not (nil? coll)))) + [val] + (if (or (coll? val) (string? val)) + (boolean (seq val)) + (some? val))) (defn editable-collection? [m] diff --git a/common/src/app/common/types/text.cljc b/common/src/app/common/types/text.cljc index f928321f77..c2fc8f1ab3 100644 --- a/common/src/app/common/types/text.cljc +++ b/common/src/app/common/types/text.cljc @@ -201,6 +201,27 @@ [text] (subs text 0 (min 280 (count text)))) +(defn- compare-text-attr + "Compare two attribute values and return true if they are different. + Take into account the following: + - Only process keys that belong to text node attrs (ignore deprecated + attributes or other things that may be attached). + - Consider nil values, empty strings or empty lists all equal. + - Normalize numeric values (legacy) into strings. + - No value is equal than the default value." + [key value1 value2] + (when (d/index-of text-node-attrs key) + (let [default-value (get default-text-attrs key) + normalize-value (fn [value] + (as-> value $ + (if (number? $) (str $) $) + (if (or (d/empty? $) (= $ default-value)) + nil + $))) + value1' (normalize-value value1) + value2' (normalize-value value2)] + (not= value1' value2')))) + (defn- compare-text-content "Given two content text structures, conformed by maps and vectors, compare them, and returns a set with the differences info. @@ -245,8 +266,7 @@ ;; If the key is not :text, and they are different, it is an attribute difference. ;; Take into account that some processes remove empty attributes, so in some ;; cases we will compare [] with nil, and this is not a difference. - (if (and (not= v1 v2) - (or (d/not-empty? v1) (d/not-empty? v2))) + (if (compare-text-attr k v1 v2) (attribute-cb acc k) acc)))) #{} diff --git a/common/test/common_tests/logic/token_apply_test.cljc b/common/test/common_tests/logic/token_apply_test.cljc index 69e07e0510..93829cf0f5 100644 --- a/common/test/common_tests/logic/token_apply_test.cljc +++ b/common/test/common_tests/logic/token_apply_test.cljc @@ -331,7 +331,7 @@ d/txt-merge {:fills (ths/sample-fills-color :fill-color "#fabada") :font-size "1" - :letter-spacing "0" + :letter-spacing "2" :font-family "Arial"})) (:objects page) {}) From e8e0d68019a877c043e662dc430d76c2990cf85b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marina=20L=C3=B3pez?= Date: Fri, 19 Jun 2026 15:05:43 +0200 Subject: [PATCH 002/229] :sparkles: Changed org avatar shape from rounded to squared --- frontend/src/app/main/ui/components/org_avatar.scss | 13 ++++++++----- frontend/src/app/main/ui/dashboard/sidebar.scss | 5 +++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/main/ui/components/org_avatar.scss b/frontend/src/app/main/ui/components/org_avatar.scss index b72591568b..4e9367c13c 100644 --- a/frontend/src/app/main/ui/components/org_avatar.scss +++ b/frontend/src/app/main/ui/components/org_avatar.scss @@ -6,10 +6,10 @@ @use "ds/typography.scss" as t; @use "ds/colors.scss" as *; +@use "ds/_utils.scss" as *; .org-avatar { position: relative; - border-radius: 50%; overflow: hidden; flex-shrink: 0; } @@ -19,18 +19,21 @@ } .org-avatar-xxxl { - width: var(--sp-xxxl); - height: var(--sp-xxxl); + width: px2rem(30); + height: px2rem(30); + border-radius: px2rem(6); } .org-avatar-xxl { width: var(--sp-xxl); height: var(--sp-xxl); + border-radius: px2rem(5); } .org-avatar-xl { - width: var(--sp-xl); - height: var(--sp-xl); + width: px2rem(22); + height: px2rem(22); + border-radius: var(--sp-xs); } .org-avatar-bg { diff --git a/frontend/src/app/main/ui/dashboard/sidebar.scss b/frontend/src/app/main/ui/dashboard/sidebar.scss index 92edbbe3d5..7f0a8b983a 100644 --- a/frontend/src/app/main/ui/dashboard/sidebar.scss +++ b/frontend/src/app/main/ui/dashboard/sidebar.scss @@ -191,7 +191,7 @@ @extend %menu-item-base; display: grid; - grid-template-columns: var(--sp-xxxl) 1fr auto; + grid-template-columns: auto 1fr auto; gap: var(--sp-s); height: $sz-40; } @@ -603,7 +603,7 @@ height: calc(2 * var(--sp-xxxl)); max-height: calc(2 * var(--sp-xxxl)); justify-content: space-between; - padding: 0 var(--sp-xl); + padding: 0 var(--sp-l); } .selected-org { @@ -690,6 +690,7 @@ grid-template-columns: 1fr auto auto; gap: var(--sp-s); height: 100%; + padding: 0 px2rem(10); width: 100%; } From 7c19ace0f0992c166253f0d5208313ac0d540621 Mon Sep 17 00:00:00 2001 From: Luis de Dios Date: Mon, 22 Jun 2026 10:39:29 +0200 Subject: [PATCH 003/229] Reapply ":tada: Add flyout and semantic improvements to main toolbar (#9480)" (#10354) This reverts commit 94119159d8c83048dd9229a2b9f2551966ac9596. --- frontend/playwright/ui/pages/WorkspacePage.js | 27 + frontend/playwright/ui/specs/toolbar.spec.js | 88 +++ frontend/playwright/ui/specs/variants.spec.js | 24 +- .../app/main/ui/ds/buttons/icon_button.cljs | 65 ++- .../app/main/ui/ds/buttons/icon_button.scss | 11 + .../ui/ds/buttons/icon_button.stories.jsx | 9 + .../app/main/ui/workspace/top_toolbar.cljs | 516 +++++++++++------- .../app/main/ui/workspace/top_toolbar.scss | 198 +++---- .../src/app/main/ui/workspace/viewport.cljs | 4 +- .../app/main/ui/workspace/viewport_wasm.cljs | 4 +- 10 files changed, 632 insertions(+), 314 deletions(-) create mode 100644 frontend/playwright/ui/specs/toolbar.spec.js diff --git a/frontend/playwright/ui/pages/WorkspacePage.js b/frontend/playwright/ui/pages/WorkspacePage.js index 891b2a4e31..f31016ead4 100644 --- a/frontend/playwright/ui/pages/WorkspacePage.js +++ b/frontend/playwright/ui/pages/WorkspacePage.js @@ -448,6 +448,33 @@ export class WorkspacePage extends BaseWebSocketPage { await pagesToggle.click(); } + async selectToolbarTool(workspacePage, toolName) { + await workspacePage.page + .getByRole("button", { name: toolName }) + .first() + .click(); + } + + async selectToolFromFlyout( + workspacePage, + { triggerToolName, targetToolName }, + ) { + const trigger = workspacePage.page + .getByRole("button", { name: triggerToolName }) + .first(); + + const option = workspacePage.page + .getByRole("menuitemradio", { name: targetToolName }) + .first(); + + await trigger.hover(); + // Flyout opening is delayed by 350ms in the toolbar component. + await workspacePage.page.waitForTimeout(450); + await expect(trigger).toHaveAttribute("aria-expanded", "true"); + await option.waitFor({ state: "visible" }); + await option.click(); + } + async moveSelectionToShape(name) { await this.page.locator("rect.viewport-selrect").hover(); await this.page.mouse.down(); diff --git a/frontend/playwright/ui/specs/toolbar.spec.js b/frontend/playwright/ui/specs/toolbar.spec.js new file mode 100644 index 0000000000..2bd9cef5c4 --- /dev/null +++ b/frontend/playwright/ui/specs/toolbar.spec.js @@ -0,0 +1,88 @@ +import { test, expect } from "@playwright/test"; +import { WasmWorkspacePage } from "../pages/WasmWorkspacePage"; +import WorkspacePage from "../pages/WorkspacePage"; + +test.beforeEach(async ({ page }) => { + await WasmWorkspacePage.init(page); +}); + +const expectLayerNamed = async (workspacePage, name) => { + await expect(workspacePage.layers.getByText(name).last()).toBeVisible(); +}; + +test("User creates a frame with the toolbar frame tool", async ({ page }) => { + const workspacePage = new WasmWorkspacePage(page); + await workspacePage.setupEmptyFile(); + await workspacePage.goToWorkspace(); + + await workspacePage.selectToolbarTool(workspacePage, "Board (B)"); + await workspacePage.clickWithDragViewportAt(100, 100, 180, 120); + await expectLayerNamed(workspacePage, "Board"); +}); + +test("User creates a rectangle with the toolbar rect tool", async ({ + page, +}) => { + const workspacePage = new WasmWorkspacePage(page); + await workspacePage.setupEmptyFile(); + await workspacePage.goToWorkspace(); + + await workspacePage.selectToolbarTool(workspacePage, "Rectangle (R)"); + await workspacePage.clickWithDragViewportAt(350, 100, 120, 80); + await expectLayerNamed(workspacePage, "Rectangle"); +}); + +test("User creates an ellipse from the shapes flyout", async ({ page }) => { + const workspacePage = new WasmWorkspacePage(page); + await workspacePage.setupEmptyFile(); + await workspacePage.goToWorkspace(); + + await workspacePage.selectToolFromFlyout(workspacePage, { + triggerToolName: "Rectangle (R)", + targetToolName: "Ellipse (E)", + }); + await workspacePage.clickWithDragViewportAt(520, 100, 100, 100); + await expectLayerNamed(workspacePage, "Ellipse"); +}); + +test("User creates a text shape with the toolbar text tool", async ({ + page, +}) => { + const workspacePage = new WorkspacePage(page); + await workspacePage.setupEmptyFile(); + await workspacePage.goToWorkspace(); + + await workspacePage.selectToolbarTool(workspacePage, "Text (T)"); + await workspacePage.clickAndMove(120, 320, 300, 380); + await workspacePage.waitForSelectedShapeName("Text"); + await workspacePage.page.keyboard.type("toolbar test"); + await workspacePage.page.keyboard.press("Escape"); + await expectLayerNamed(workspacePage, "Text"); +}); + +test.skip("User creates a path with the toolbar path tool", async ({ + page, +}) => { + const workspacePage = new WasmWorkspacePage(page); + await workspacePage.setupEmptyFile(); + await workspacePage.goToWorkspace(); + + await workspacePage.selectToolbarTool(workspacePage, "Path (P)"); + await workspacePage.clickAndMove(120, 320, 300, 380); + await workspacePage.page.keyboard.press("Enter"); + await expectLayerNamed(workspacePage, "Path"); +}); + +test("User creates a curve from the path flyout", async ({ page }) => { + const workspacePage = new WasmWorkspacePage(page); + await workspacePage.setupEmptyFile(); + await workspacePage.goToWorkspace(); + + await workspacePage.selectToolFromFlyout(workspacePage, { + triggerToolName: "Path (P)", + targetToolName: "Curve (Shift+C)", + }); + await workspacePage.clickAndMove(120, 320, 300, 380); + await workspacePage.page.keyboard.press("Enter"); + await expectLayerNamed(workspacePage, "Path"); +}); diff --git a/frontend/playwright/ui/specs/variants.spec.js b/frontend/playwright/ui/specs/variants.spec.js index 0c50f7dc8b..d9dbb687e5 100644 --- a/frontend/playwright/ui/specs/variants.spec.js +++ b/frontend/playwright/ui/specs/variants.spec.js @@ -343,7 +343,9 @@ test("User drag and drop a variant outside the container", async ({ page }) => { // and use it to calculate the target position await workspacePage.clickWithDragViewportAt(600, 500, 0, 300); - await expect(workspacePage.layers.getByText("Rectangle / Value 1")).toBeVisible(); + await expect( + workspacePage.layers.getByText("Rectangle / Value 1"), + ).toBeVisible(); }); test("User cut paste a component inside a variant", async ({ page }) => { @@ -353,7 +355,10 @@ test("User cut paste a component inside a variant", async ({ page }) => { const variant = await findVariant(workspacePage, 0); //Create a component - await workspacePage.ellipseShapeButton.click(); + await workspacePage.selectToolFromFlyout(workspacePage, { + triggerToolName: "Rectangle (R)", + targetToolName: "Ellipse (E)", + }); await workspacePage.clickWithDragViewportAt(500, 500, 20, 20); await workspacePage.clickLeafLayer("Ellipse"); await workspacePage.page.keyboard.press("ControlOrMeta+k"); @@ -384,7 +389,10 @@ test("User cut paste a component with path inside a variant", async ({ const variant = await findVariant(workspacePage, 0); // Create a component - await workspacePage.ellipseShapeButton.click(); + await workspacePage.selectToolFromFlyout(workspacePage, { + triggerToolName: "Rectangle (R)", + targetToolName: "Ellipse (E)", + }); await workspacePage.clickWithDragViewportAt(500, 500, 20, 20); await workspacePage.clickLeafLayer("Ellipse"); await workspacePage.page.keyboard.press("ControlOrMeta+k"); @@ -425,7 +433,10 @@ test("User drag and drop a component with path inside a variant", async ({ const variant = findVariantNoWait(workspacePage, 0); //Create a component - await workspacePage.ellipseShapeButton.click(); + await workspacePage.selectToolFromFlyout(workspacePage, { + triggerToolName: "Rectangle (R)", + targetToolName: "Ellipse (E)", + }); await workspacePage.clickWithDragViewportAt(500, 500, 20, 20); await workspacePage.clickLeafLayer("Ellipse"); await workspacePage.page.keyboard.press("ControlOrMeta+k"); @@ -457,7 +468,10 @@ test("User cut paste a variant into another container", async ({ page }) => { await setupVariantsFileWithVariant(workspacePage); // Create anothe variant - await workspacePage.ellipseShapeButton.click(); + await workspacePage.selectToolFromFlyout(workspacePage, { + triggerToolName: "Rectangle (R)", + targetToolName: "Ellipse (E)", + }); await workspacePage.clickWithDragViewportAt(500, 500, 20, 20); await workspacePage.clickLeafLayer("Ellipse"); await workspacePage.page.keyboard.press("ControlOrMeta+k"); diff --git a/frontend/src/app/main/ui/ds/buttons/icon_button.cljs b/frontend/src/app/main/ui/ds/buttons/icon_button.cljs index 956bc44f35..272d4288a3 100644 --- a/frontend/src/app/main/ui/ds/buttons/icon_button.cljs +++ b/frontend/src/app/main/ui/ds/buttons/icon_button.cljs @@ -23,22 +23,49 @@ [:icon [:and :string [:fn #(contains? icon-list %)]]] [:aria-label :string] + [:has-tooltip {:optional true} [:maybe :boolean]] [:tooltip-placement {:optional true} [:maybe [:enum "top" "bottom" "left" "right" "top-right" "bottom-right" "bottom-left" "top-left"]]] + ;; Indicates that the button has a flyout menu, and should display an indicator + [:flyout-indicator {:optional true} [:maybe :boolean]] [:variant {:optional true} [:maybe [:enum "primary" "secondary" "ghost" "destructive" "action"]]]]) +(def ^:private schema:icon-button-internal + [:map + [:icon-class {:optional true} [:maybe :string]] + [:icon-size {:optional true} [:maybe [:enum "s" "m" "l"]]] + [:icon + [:and :string [:fn #(contains? icon-list %)]]] + ;; Indicates that the button has a flyout menu, and should display an indicator + [:flyout-indicator {:optional true} [:maybe :boolean]]]) + +(mf/defc icon-button-internal* + {::mf/schema schema:icon-button-internal + ::mf/memo true} + [{:keys [icon icon-class icon-size flyout-indicator children] :rest props}] + [:> :button props + [:> icon* {:icon-id icon + :aria-hidden true + :class icon-class + :size icon-size}] + (when flyout-indicator + [:svg {:view-box "0 0 6 6" + :aria-hidden true + :class (stl/css :flyout-indicator)} + [:path {:d "M4,2 L4,3.15 C4,3.62 3.62,4 3.15,4 L2,4" + :stroke-linecap "round"}]]) + children]) + (mf/defc icon-button* {::mf/schema schema:icon-button ::mf/memo true} - [{:keys [class icon icon-class icon-size variant aria-label children tooltip-placement tooltip-class type] :rest props}] - (let [variant - (d/nilv variant "primary") - + [{:keys [class icon icon-class icon-size variant aria-label children tooltip-placement tooltip-class type flyout-indicator has-tooltip] :rest props}] + (let [variant (d/nilv variant "primary") + flyout-indicator (d/nilv flyout-indicator false) + has-tooltip (d/nilv has-tooltip true) button-ref (mf/use-ref nil) - - tooltip-id - (mf/use-id) + tooltip-id (mf/use-id) button-class (stl/css-case :icon-button true @@ -53,13 +80,19 @@ {:class [class button-class] :ref button-ref :type (d/nilv type "button") - :aria-labelledby tooltip-id})] + :icon icon + :icon-size icon-size + :icon-class icon-class + :flyout-indicator flyout-indicator})] - [:> tooltip* {:content aria-label - :class tooltip-class - :trigger-ref button-ref - :placement tooltip-placement - :id tooltip-id} - [:> :button props - [:> icon* {:icon-id icon :aria-hidden true :class icon-class :size icon-size}] - children]])) + (if has-tooltip + (let [tooltip-props (mf/spread-props props {:aria-labelledby tooltip-id})] + [:> tooltip* {:content aria-label + :class tooltip-class + :trigger-ref button-ref + :placement tooltip-placement + :id tooltip-id} + [:> icon-button-internal* tooltip-props children]]) + + (let [no-tooltip-props (mf/spread-props props {:aria-label aria-label})] + [:> icon-button-internal* no-tooltip-props children])))) diff --git a/frontend/src/app/main/ui/ds/buttons/icon_button.scss b/frontend/src/app/main/ui/ds/buttons/icon_button.scss index 27f66f3a19..233bb8bfe7 100644 --- a/frontend/src/app/main/ui/ds/buttons/icon_button.scss +++ b/frontend/src/app/main/ui/ds/buttons/icon_button.scss @@ -16,6 +16,7 @@ display: grid; place-content: center; + position: relative; } .icon-button-primary { @@ -49,3 +50,13 @@ --button-width: #{$sz-24}; --button-height: #{$sz-24}; } + +.flyout-indicator { + position: absolute; + inset-block-end: var(--sp-xs); + inset-inline-end: var(--sp-xs); + stroke: currentcolor; + fill: none; + inline-size: $sz-6; + block-size: $sz-6; +} diff --git a/frontend/src/app/main/ui/ds/buttons/icon_button.stories.jsx b/frontend/src/app/main/ui/ds/buttons/icon_button.stories.jsx index fd90936d34..de37e42a02 100644 --- a/frontend/src/app/main/ui/ds/buttons/icon_button.stories.jsx +++ b/frontend/src/app/main/ui/ds/buttons/icon_button.stories.jsx @@ -24,6 +24,7 @@ export default { options: iconList, control: { type: "select" }, }, + flyoutIndicator: { control: "boolean" }, disabled: { control: "boolean" }, variant: { options: ["primary", "secondary", "ghost", "destructive", "action"], @@ -35,6 +36,7 @@ export default { variant: undefined, "aria-label": "Lorem ipsum", icon: "effects", + flyoutIndicator: false, }, render: ({ ...args }) => , }; @@ -70,3 +72,10 @@ export const Destructive = { variant: "destructive", }, }; + +export const Flyout = { + args: { + variant: "ghost", + flyoutIndicator: true, + }, +}; diff --git a/frontend/src/app/main/ui/workspace/top_toolbar.cljs b/frontend/src/app/main/ui/workspace/top_toolbar.cljs index dcce4fecc6..615e0921b1 100644 --- a/frontend/src/app/main/ui/workspace/top_toolbar.cljs +++ b/frontend/src/app/main/ui/workspace/top_toolbar.cljs @@ -20,79 +20,172 @@ [app.main.refs :as refs] [app.main.store :as st] [app.main.ui.components.dropdown-menu :refer [dropdown-menu* dropdown-menu-item*]] - [app.main.ui.components.file-uploader :refer [file-uploader]] + [app.main.ui.components.file-uploader :as file-uploader] [app.main.ui.context :as ctx] - [app.main.ui.icons :as deprecated-icon] + [app.main.ui.ds.buttons.button :refer [button*]] + [app.main.ui.ds.buttons.icon-button :refer [icon-button*]] + [app.main.ui.ds.foundations.assets.icon :as i] [app.util.dom :as dom] - [app.util.i18n :as i18n :refer [tr]] + [app.util.i18n :refer [tr]] [app.util.timers :as ts] [okulary.core :as l] [rumext.v2 :as mf])) -(mf/defc mcp-indicator* - [] - (let [mcp (mf/deref refs/mcp) +(def ^:private toolbar-hidden-ref + (l/derived (fn [state] + (let [visibility (get state :hide-toolbar) + path-edit-state (get state :edit-path) + selected (get state :selected) + edition (get state :edition) - conn-status (get mcp :connection-status) - has-valid-token? (get mcp :token-valid) + is-single (= (count selected) 1) + is-path-editing (and is-single (some? (get path-edit-state edition)))] - enabled? (get mcp :enabled) + (if is-path-editing true visibility))) + refs/workspace-local)) - mcp-connected? (= "connected" conn-status) - show-indicator? (and enabled? has-valid-token?) +(def grouped-tools + {:shapes {:default-tool :rect + :tools {:rect {:icon i/rectangle} + :circle {:icon i/ellipse}}} + :free-draw {:default-tool :path + :tools {:path {:icon i/path} + :curve {:icon i/curve}}}}) - menu-open* (mf/use-state false) - menu-open? (deref menu-open*) +(defn- tool-label + [tool] + (case tool + :move (tr "workspace.toolbar.move" (sc/get-tooltip :move)) + :frame (tr "workspace.toolbar.frame" (sc/get-tooltip :draw-frame)) + :rect (tr "workspace.toolbar.rect" (sc/get-tooltip :draw-rect)) + :circle (tr "workspace.toolbar.ellipse" (sc/get-tooltip :draw-ellipse)) + :text (tr "workspace.toolbar.text" (sc/get-tooltip :draw-text)) + :path (tr "workspace.toolbar.path" (sc/get-tooltip :draw-path)) + :image (tr "workspace.toolbar.image" (sc/get-tooltip :insert-image)) + :curve (tr "workspace.toolbar.curve" (sc/get-tooltip :draw-curve)) + :plugins (tr "workspace.toolbar.plugins" (sc/get-tooltip :plugins)) + :debug "Debugging tool" + (name tool))) - toggle-menu +(defn- active-group-tool + [group drawtool] + (if (contains? (:tools group) drawtool) + drawtool + (:default-tool group))) + +(defn- is-selected-group + [group drawtool] + (contains? (:tools group) drawtool)) + +(defn- group-menu-label + [group drawtool] + (let [tool-id (active-group-tool group drawtool)] + (str (tr "labels.options") ": " (tool-label tool-id)))) + +(defn- cancel-timer! + [timer-ref*] + (when-let [timer (mf/ref-val timer-ref*)] + (ts/dispose! timer) + (mf/set-ref-val! timer-ref* nil))) + +(mf/defc group-tool* + {::mf/private true + ::mf/wrap [mf/memo]} + [{:keys [group drawtool on-select-tool]}] + (let [default-tool* (mf/use-state (active-group-tool group drawtool)) + default-tool (deref default-tool*) + + open* (mf/use-state false) + open (deref open*) + + open-timer* (mf/use-ref nil) + close-timer* (mf/use-ref nil) + + default-icon (:icon (get-in group [:tools default-tool])) + subtools (:tools group) + menu-label (group-menu-label group drawtool) + selected (boolean (is-selected-group group drawtool)) + + on-select-tool (mf/use-fn (fn [event] - (dom/stop-propagation event) - (swap! menu-open* not))) + (let [tool (-> (dom/get-current-target event) + (dom/get-data "tool") + (keyword))] + (reset! default-tool* tool) + (on-select-tool event)))) - close-menu + on-display-menu (mf/use-fn - #(reset! menu-open* false)) + (fn [] + (cancel-timer! close-timer*) + (cancel-timer! open-timer*) + (mf/set-ref-val! + open-timer* + (ts/schedule 350 + #(do + (reset! open* true) + (mf/set-ref-val! open-timer* nil)))))) - connect-mcp + on-hide-menu (mf/use-fn - #(st/emit! (mcp/connect-mcp) - (ev/event {::ev/name "connect-mcp-plugin" - ::ev/origin "workspace:toolbar"})))] - (when show-indicator? - [:li - [:button - {:title (tr "workspace.toolbar.mcp") - :aria-label (tr "workspace.toolbar.mcp") - :class (stl/css-case :main-toolbar-options-button true - :mcp-button true - :selected menu-open?) - :on-click toggle-menu - :data-tool "mcp" - :data-testid "mcp-btn"} - [:span {:class (stl/css-case :mcp-status-dot true - :connected mcp-connected?)}] - [:span {:class (stl/css-case :mcp-button-label true - :connected mcp-connected?)} - (tr "workspace.toolbar.mcp")]] - [:> dropdown-menu* {:show menu-open? - :on-close close-menu - :class (stl/css :mcp-menu)} - (if mcp-connected? - [:li {:class (stl/css :mcp-menu-info) - :role "presentation"} - (tr "workspace.toolbar.mcp-connected")] - [:> dropdown-menu-item* {:class (stl/css :mcp-menu-item) - :on-click connect-mcp} - (tr "workspace.toolbar.mcp-connect-here")])]]))) + (fn [] + (cancel-timer! open-timer*) + (cancel-timer! close-timer*) + (mf/set-ref-val! + close-timer* + (ts/schedule 350 + #(do + (reset! open* false) + (mf/set-ref-val! close-timer* nil))))))] -(mf/defc image-upload* - {::mf/wrap [mf/memo]} + (mf/with-effect [] + (fn [] + (cancel-timer! open-timer*) + (cancel-timer! close-timer*))) + + [:li {:class (stl/css :toolbar-group) + :on-pointer-enter on-display-menu + :on-pointer-leave on-hide-menu} + [:div {:role "group" + :aria-label menu-label} + [:> icon-button* {:variant "ghost" + :flyout-indicator true + :aria-label (tool-label default-tool) + :aria-haspopup true + :aria-pressed selected + :aria-expanded open + :has-tooltip false + :icon default-icon + :on-click on-select-tool + :data-tool (name default-tool)}] + + [:ul {:role "menu" + :class (stl/css-case :toolbar-group-flyout true + :open open) + :aria-label menu-label} + + (for [[id {:keys [icon]}] subtools] + [:li {:key (name id) + :role "none"} + [:> icon-button* {:variant "ghost" + :tooltip-placement "bottom" + :role "menuitemradio" + :aria-label (tool-label id) + :aria-pressed (= drawtool id) + :aria-checked (= drawtool id) + :icon icon + :on-click on-select-tool + :data-tool (name id)}]])]]])) + +(mf/defc image-upload-tool* + {::mf/private true + ::mf/wrap [mf/memo]} [] - (let [ref (mf/use-ref nil) - file-id (mf/use-ctx ctx/current-file-id) + (let [ref (mf/use-ref nil) + file-id (mf/use-ctx ctx/current-file-id) - on-click + on-display-uploader (mf/use-fn (fn [] (st/emit! :interrupt (dw/clear-edition-mode)) @@ -111,50 +204,115 @@ :blobs (seq blobs) :position (gpt/point x y)}] (st/emit! (dwm/upload-media-workspace params)))))] - [:li - [:button - {:title (tr "workspace.toolbar.image" (sc/get-tooltip :insert-image)) - :aria-label (tr "workspace.toolbar.image" (sc/get-tooltip :insert-image)) - :on-click on-click - :class (stl/css :main-toolbar-options-button)} - deprecated-icon/img - [:& file-uploader - {:input-id "image-upload" - :accept dwm/accept-image-types - :multi true - :ref ref - :on-selected on-selected}]]])) -(def ^:private toolbar-hidden-ref - (l/derived (fn [state] - (let [visibility (get state :hide-toolbar) - path-edit-state (get state :edit-path) + [:* + [:> icon-button* {:variant "ghost" + :tooltip-placement "bottom" + :aria-label (tool-label :image) + :icon i/img + :on-click on-display-uploader}] + [:& file-uploader/file-uploader {:input-id "image-upload" + :accept dwm/accept-image-types + :multi true + :ref ref + :on-selected on-selected}]])) - selected (get state :selected) - edition (get state :edition) - single? (= (count selected) 1) +(mf/defc mcp-tool* + {::mf/private true + ::mf/wrap [mf/memo]} + [{:keys [is-mcp-connected]}] + (let [menu-open* (mf/use-state false) + menu-open? (deref menu-open*) - path-editing? (and single? (some? (get path-edit-state edition)))] - (if path-editing? true visibility))) - refs/workspace-local)) + on-toggle-menu + (mf/use-fn + (fn [event] + (dom/stop-propagation event) + (swap! menu-open* not))) + + on-close-menu + (mf/use-fn + #(reset! menu-open* false)) + + on-connect + (mf/use-fn + #(st/emit! (mcp/connect-mcp) + (ev/event {::ev/name "connect-mcp-plugin" + ::ev/origin "workspace:toolbar"})))] + + [:* + [:> button* {:variant "ghost" + :on-click on-toggle-menu + :aria-pressed menu-open? + :data-tool "mcp" + :data-testid "mcp-btn"} + [:div {:class (stl/css-case :toolbar-mcp-button true + :selected menu-open?)} + [:span {:class (stl/css-case :toolbar-mcp-button-dot true + :connected is-mcp-connected)}] + [:span {:class (stl/css-case :toolbar-mcp-button-label true + :connected is-mcp-connected)} + (tr "workspace.toolbar.mcp")]]] + + [:div {:class (stl/css :toolbar-mcp-menu)} + [:> dropdown-menu* {:show menu-open? + :on-close on-close-menu + :class (stl/css :toolbar-mcp-dropdown)} + (if is-mcp-connected + [:li {:class (stl/css :toolbar-mcp-dropdown-info) + :role "presentation"} + (tr "workspace.toolbar.mcp-connected")] + [:> dropdown-menu-item* {:class (stl/css :toolbar-mcp-dropdown-item) + :on-click on-connect} + (tr "workspace.toolbar.mcp-connect-here")])]]])) (mf/defc top-toolbar* - {::mf/memo true} + {::mf/wrap [mf/memo]} [{:keys [layout]}] - (let [drawtool (mf/deref refs/selected-drawing-tool) - edition (mf/deref refs/selected-edition) + (let [selected-drawing-tool (mf/deref refs/selected-drawing-tool) + selected-edition (mf/deref refs/selected-edition) + rulers-enabled (mf/deref refs/rulers?) + toolbar-hidden (mf/deref toolbar-hidden-ref) + mcp (mf/deref refs/mcp) - profile (mf/deref refs/profile) - props (get profile :props) + plugins-enabled? (features/active-feature? @st/state "plugins/runtime") + read-only? (mf/use-ctx ctx/workspace-read-only?) - read-only? (mf/use-ctx ctx/workspace-read-only?) - rulers? (mf/deref refs/rulers?) - hide-toolbar? (mf/deref toolbar-hidden-ref) + mcp-conn-status (get mcp :connection-status) + mcp-valid-token? (get mcp :token-valid) + mcp-enabled? (get mcp :enabled) - interrupt - (mf/use-fn #(st/emit! :interrupt (dw/clear-edition-mode))) + mcp-connected? (= "connected" mcp-conn-status) + mcp-show? (and (contains? cf/flags :mcp) + mcp-enabled? + mcp-valid-token?) - select-drawtool + separator? (or plugins-enabled? *assert* mcp-show?) + + on-display-plugins-manager + (mf/use-fn + (fn [] + (st/emit! (ev/event {::ev/name "open-plugins-manager" + ::ev/origin "workspace:toolbar"}) + (modal/show :plugin-management {})))) + + on-toggle-debug-panel + (mf/use-fn + (mf/deps layout) + (fn [] + (let [is-sidebar-closed (contains? layout :collapse-left-sidebar)] + (when is-sidebar-closed + (st/emit! (dw/toggle-layout-flag :collapse-left-sidebar))) + (st/emit! (dw/remove-layout-flag :shortcuts) + (-> (dw/toggle-layout-flag :debug-panel) + (vary-meta assoc ::ev/origin "workspace-left-toolbar")))))) + + on-interrupt + (mf/use-fn + (fn [] + (st/emit! :interrupt (dw/clear-edition-mode)))) + + on-select-tool (mf/use-fn (fn [event] (let [tool (-> (dom/get-current-target event) @@ -163,131 +321,91 @@ (st/emit! :interrupt (dw/clear-edition-mode)) ;; Delay so anything that launched :interrupt can finish - (ts/schedule 100 #(st/emit! (dw/select-for-drawing tool)))))) + (ts/schedule 100 + #(st/emit! (dw/select-for-drawing tool)))))) - toggle-debug-panel - (mf/use-fn - (mf/deps layout) - (fn [] - (let [is-sidebar-closed? (contains? layout :collapse-left-sidebar)] - (when is-sidebar-closed? - (st/emit! (dw/toggle-layout-flag :collapse-left-sidebar))) - (st/emit! - (dw/remove-layout-flag :shortcuts) - (-> (dw/toggle-layout-flag :debug-panel) - (vary-meta assoc ::ev/origin "workspace-left-toolbar")))))) - - toggle-toolbar + on-toggle-toolbar (mf/use-fn (fn [event] (dom/blur! (dom/get-target event)) - (st/emit! (dwc/toggle-toolbar-visibility)))) - - test-tooltip-board-text - (if (not (:workspace-visited props)) - (tr "workspace.toolbar.frame-first-time" (sc/get-tooltip :draw-frame)) - (tr "workspace.toolbar.frame" (sc/get-tooltip :draw-frame)))] + (st/emit! (dwc/toggle-toolbar-visibility))))] (when-not ^boolean read-only? - [:aside {:class (stl/css-case :main-toolbar true - :main-toolbar-no-rulers (not rulers?) - :main-toolbar-hidden hide-toolbar?)} - [:ul {:class (stl/css :main-toolbar-options) + [:div {:role "toolbar" + :aria-label (tr "workspace.toolbar.label") + :tabindex "0" + :class (stl/css-case :toolbar true + :no-rulers (not rulers-enabled) + :hidden toolbar-hidden)} + [:ul {:class (stl/css :toolbar-options) :data-testid "toolbar-options"} - [:li - [:button - {:title (tr "workspace.toolbar.move" (sc/get-tooltip :move)) - :aria-label (tr "workspace.toolbar.move" (sc/get-tooltip :move)) - :class (stl/css-case :main-toolbar-options-button true - :selected (and (nil? drawtool) - (not edition))) - :on-click interrupt} - deprecated-icon/move]] - [:* - [:li - [:button - {:title test-tooltip-board-text - :aria-label (tr "workspace.toolbar.frame" (sc/get-tooltip :draw-frame)) - :class (stl/css-case :main-toolbar-options-button true :selected (= drawtool :frame)) - :on-click select-drawtool - :data-tool "frame" - :data-testid "artboard-btn"} - deprecated-icon/board]] - [:li - [:button - {:title (tr "workspace.toolbar.rect" (sc/get-tooltip :draw-rect)) - :aria-label (tr "workspace.toolbar.rect" (sc/get-tooltip :draw-rect)) - :class (stl/css-case :main-toolbar-options-button true :selected (= drawtool :rect)) - :on-click select-drawtool - :data-tool "rect" - :data-testid "rect-btn"} - deprecated-icon/rectangle]] - [:li - [:button - {:title (tr "workspace.toolbar.ellipse" (sc/get-tooltip :draw-ellipse)) - :aria-label (tr "workspace.toolbar.ellipse" (sc/get-tooltip :draw-ellipse)) - :class (stl/css-case :main-toolbar-options-button true :selected (= drawtool :circle)) - :on-click select-drawtool - :data-tool "circle" - :data-testid "ellipse-btn"} - deprecated-icon/ellipse]] - [:li - [:button - {:title (tr "workspace.toolbar.text" (sc/get-tooltip :draw-text)) - :aria-label (tr "workspace.toolbar.text" (sc/get-tooltip :draw-text)) - :class (stl/css-case :main-toolbar-options-button true :selected (= drawtool :text)) - :on-click select-drawtool - :data-tool "text"} - deprecated-icon/text]] + [:li {:class (stl/css :toolbar-option)} + [:> icon-button* {:variant "ghost" + :tooltip-placement "bottom" + :aria-pressed (and (nil? selected-drawing-tool) + (not selected-edition)) + :aria-label (tr "workspace.toolbar.move" (sc/get-tooltip :move)) + :icon i/move + :on-click on-interrupt}]] - [:> image-upload*] + [:li {:class (stl/css :toolbar-option)} + [:> icon-button* {:variant "ghost" + :tooltip-placement "bottom" + :aria-pressed (= selected-drawing-tool :frame) + :aria-label (tool-label :frame) + :icon i/board + :on-click on-select-tool + :data-tool "frame"}]] - [:li - [:button - {:title (tr "workspace.toolbar.curve" (sc/get-tooltip :draw-curve)) - :aria-label (tr "workspace.toolbar.curve" (sc/get-tooltip :draw-curve)) - :class (stl/css-case :main-toolbar-options-button true :selected (= drawtool :curve)) - :on-click select-drawtool - :data-tool "curve" - :data-testid "curve-btn"} - deprecated-icon/curve]] - [:li - [:button - {:title (tr "workspace.toolbar.path" (sc/get-tooltip :draw-path)) - :aria-label (tr "workspace.toolbar.path" (sc/get-tooltip :draw-path)) - :class (stl/css-case :main-toolbar-options-button true :selected (= drawtool :path)) - :on-click select-drawtool - :data-tool "path" - :data-testid "path-btn"} - deprecated-icon/path]] + [:> group-tool* {:key :shapes + :group (get grouped-tools :shapes) + :drawtool selected-drawing-tool + :on-select-tool on-select-tool}] - (when (features/active-feature? @st/state "plugins/runtime") - [:li - [:button - {:title (tr "workspace.toolbar.plugins" (sc/get-tooltip :plugins)) - :aria-label (tr "workspace.toolbar.plugins" (sc/get-tooltip :plugins)) - :class (stl/css :main-toolbar-options-button) - :on-click #(st/emit! - (ev/event {::ev/name "open-plugins-manager" - ::ev/origin "workspace:toolbar"}) - (modal/show :plugin-management {})) - :data-tool "plugins" - :data-testid "plugins-btn"} - deprecated-icon/puzzle]]) + [:li {:class (stl/css :toolbar-option)} + [:> icon-button* {:variant "ghost" + :tooltip-placement "bottom" + :aria-pressed (= selected-drawing-tool :text) + :aria-label (tool-label :text) + :icon i/text + :on-click on-select-tool + :data-tool "text"}]] - (when *assert* - [:li - [:button - {:title "Debugging tool" - :class (stl/css-case :main-toolbar-options-button true :selected (contains? layout :debug-panel)) - :on-click toggle-debug-panel} - deprecated-icon/bug]]) + [:li {:class (stl/css :toolbar-option)} + [:> image-upload-tool*]] - (when (contains? cf/flags :mcp) - [:> mcp-indicator*])]] + [:> group-tool* {:key :free-draw + :group (get grouped-tools :free-draw) + :drawtool selected-drawing-tool + :on-select-tool on-select-tool}] + + (when separator? + [:div {:class (stl/css :toolbar-separator)}]) + + (when plugins-enabled? + [:li {:class (stl/css :toolbar-option)} + [:> icon-button* {:variant "ghost" + :tooltip-placement "bottom" + :aria-label (tool-label :plugins) + :icon i/puzzle + :on-click on-display-plugins-manager + :data-tool "plugins"}]]) + + (when *assert* + [:li {:class (stl/css :toolbar-option)} + [:> icon-button* {:variant "ghost" + :tooltip-placement "bottom" + :aria-pressed (contains? layout :debug-panel) + :aria-label (tool-label :debug) + :icon i/bug + :on-click on-toggle-debug-panel}]]) + + (when mcp-show? + [:li {:class (stl/css :toolbar-option)} + [:> mcp-tool* {:is-mcp-connected mcp-connected?}]])] [:button {:title (tr "workspace.toolbar.toggle-toolbar") :aria-label (tr "workspace.toolbar.toggle-toolbar") :class (stl/css :toolbar-handler) - :on-click toggle-toolbar} - [:div {:class (stl/css :toolbar-handler-btn)}]]]))) + :on-click on-toggle-toolbar} + [:div {:class (stl/css :toolbar-handler-indicator)}]]]))) diff --git a/frontend/src/app/main/ui/workspace/top_toolbar.scss b/frontend/src/app/main/ui/workspace/top_toolbar.scss index 7a185eb692..0db0002fbf 100644 --- a/frontend/src/app/main/ui/workspace/top_toolbar.scss +++ b/frontend/src/app/main/ui/workspace/top_toolbar.scss @@ -4,109 +4,118 @@ // // Copyright (c) KALEIDOS INC Sucursal en España SL -@use "refactor/common-refactor.scss" as deprecated; @use "ds/_borders.scss" as *; +@use "ds/_sizes.scss" as *; @use "ds/_utils.scss" as *; +@use "ds/spacing.scss" as *; @use "ds/typography.scss" as t; +@use "ds/z-index.scss" as *; -.main-toolbar { - cursor: initial; +.toolbar { + --toolbar-position-y: #{$sz-28}; + --toolbar-offset-y: 0px; + --menu-border-color: var(--color-background-quaternary); + --menu-background-color: var(--color-background-primary); + + cursor: default; position: absolute; - left: 50%; + inset-inline-start: 50%; transform: translateX(-50%); display: flex; align-items: center; flex-direction: column; - height: deprecated.$s-56; - padding: deprecated.$s-8 deprecated.$s-16; - border-radius: deprecated.$s-8; - border: deprecated.$s-2 solid var(--panel-border-color); - z-index: deprecated.$z-index-1; - background-color: var(--color-background-primary); + padding: var(--sp-m); + border-radius: $br-8; + border: $b-2 solid var(--menu-border-color); + z-index: var(--z-index-panels); + background-color: var(--menu-background-color); transition: - top 0.3s, - height 0.3s, + inset-block-start 0.3s, + block-size 0.3s, opacity 0.3s; + inset-block-start: calc(var(--toolbar-position-y) + var(--toolbar-offset-y)); + will-change: auto; - --toolbar-position-y: #{deprecated.$s-28}; - --toolbar-offset-y: 0px; + &.no-rulers { + --toolbar-position-y: 0px; + --toolbar-offset-y: 8px; + } - top: calc(var(--toolbar-position-y) + var(--toolbar-offset-y)); -} + &.hidden { + --toolbar-offset-y: -4px; -.main-toolbar-no-rulers { - --toolbar-position-y: 0px; - --toolbar-offset-y: #{deprecated.$s-8}; -} + block-size: $sz-16; + z-index: 1; + border-radius: 0 0 $br-8 $br-8; + border-block-start: 0; -.main-toolbar-hidden { - --toolbar-offset-y: calc(-1 * #{deprecated.$s-4}); - - height: deprecated.$s-16; - z-index: deprecated.$z-index-1; - border-radius: 0 0 deprecated.$s-8 deprecated.$s-8; - border-block-start: 0; - - .main-toolbar-options { - opacity: deprecated.$op-0; - visibility: hidden; + .toolbar-options { + opacity: 0; + visibility: hidden; + } } } -.main-toolbar-options { +.toolbar-options { position: relative; display: flex; align-items: center; + gap: var(--sp-xs); margin: 0; - opacity: deprecated.$op-10; + opacity: 1; transition: opacity 0.3s ease; +} - li { - position: relative; +.toolbar-option { + position: relative; +} + +.toolbar-group { + position: relative; +} + +.toolbar-group-flyout { + opacity: 0; + visibility: hidden; + pointer-events: none; + position: absolute; + inset-block-start: 140%; + inset-inline-start: 50%; + transform: translateX(-50%); + margin-block-start: var(--sp-xxs); + padding: var(--sp-xxs) 0; + border-radius: $br-8; + border: #{$b-1} solid var(--menu-border-color); + background-color: var(--menu-background-color); + z-index: var(--z-index-panels); + display: flex; + transition: + opacity 80ms ease-out, + visibility 80ms linear; + + &.open { + opacity: 1; + transition-delay: 0s; + visibility: visible; + pointer-events: auto; } } -.main-toolbar-options-button { - @extend %button-tertiary; - - height: deprecated.$s-36; - width: deprecated.$s-36; - flex-shrink: 0; - border-radius: deprecated.$s-8; - margin: 0 deprecated.$s-2; - - svg { - @extend %button-icon; - - stroke: var(--color-foreground-secondary); - } - - &.selected { - @extend %button-icon-selected; - } -} - -.mcp-button { +.toolbar-mcp-button { display: flex; align-items: center; gap: var(--sp-xs); - width: fit-content; - margin-inline-start: var(--sp-xs); - padding-inline: var(--sp-s); } -.mcp-button-label { - @include t.use-typography("body-small"); - +.toolbar-mcp-button-label { &.connected { color: var(--color-accent-primary); } } -.mcp-status-dot { - // Connection indicator placed before the label, vertically centered: - // a muted gray when disconnected, the primary accent when connected. +.toolbar-mcp-button-dot { position: relative; + display: flex; flex-shrink: 0; inline-size: px2rem(6); block-size: px2rem(6); @@ -143,23 +152,23 @@ } } -.mcp-menu { - @include deprecated.menu-shadow; - +.toolbar-mcp-menu { position: absolute; - inset-block-start: calc(100% + var(--sp-xs)); - inset-inline-start: var(--sp-xs); + left: 0; + top: $sz-36; +} + +.toolbar-mcp-dropdown { + box-shadow: 0 0 $sz-12 0 var(--color-shadow-dark); z-index: var(--z-index-dropdown); margin: 0; padding: var(--sp-xs); - list-style: none; border: $b-1 solid var(--panel-border-color); border-radius: $br-8; background-color: var(--menu-background-color); } -// Non-interactive informational text inside the menu (no hover, not focusable). -.mcp-menu-info { +.toolbar-mcp-dropdown-info { @include t.use-typography("body-small"); padding: var(--sp-s) var(--sp-m); @@ -167,7 +176,7 @@ white-space: nowrap; } -.mcp-menu-item { +.toolbar-mcp-dropdown-item { @include t.use-typography("body-small"); display: flex; @@ -182,26 +191,31 @@ } } +.toolbar-separator { + --separator-color: var(--color-background-quaternary); + + margin: 0 var(--sp-m); + border-inline-start: $b-1 solid var(--separator-color); + block-size: $sz-32; +} + .toolbar-handler { - @include deprecated.flex-center; - @include deprecated.button-style; - + block-size: $sz-12; + display: flex; + justify-content: center; + align-items: center; + appearance: none; + border: none; + background: transparent; position: absolute; - left: 0; - bottom: 0; - height: deprecated.$s-12; - width: 100%; - - .toolbar-handler-btn { - height: deprecated.$s-4; - width: 100%; - max-width: deprecated.$s-64; - padding: 0; - border-radius: deprecated.$s-4; - background-color: var(--palette-handler-background-color); - } + inset-inline: 0; + inset-block-end: 0; } -ul.main-toolbar-panels { - display: none; +.toolbar-handler-indicator { + block-size: px2rem(4); + inline-size: $sz-64; + padding: 0; + border-radius: $br-4; + background-color: var(--color-accent-default); } diff --git a/frontend/src/app/main/ui/workspace/viewport.cljs b/frontend/src/app/main/ui/workspace/viewport.cljs index ce03ca1f3a..f7d95b018b 100644 --- a/frontend/src/app/main/ui/workspace/viewport.cljs +++ b/frontend/src/app/main/ui/workspace/viewport.cljs @@ -53,7 +53,9 @@ [app.main.ui.workspace.viewport.selection :as selection] [app.main.ui.workspace.viewport.snap-distances :as snap-distances] [app.main.ui.workspace.viewport.snap-points :as snap-points] - [app.main.ui.workspace.viewport.top-bar :refer [grid-edition-bar* path-edition-bar* view-only-bar*]] + [app.main.ui.workspace.viewport.top-bar :refer [grid-edition-bar* + path-edition-bar* + view-only-bar*]] [app.main.ui.workspace.viewport.utils :as utils] [app.main.ui.workspace.viewport.viewport-ref :refer [create-viewport-ref]] [app.main.ui.workspace.viewport.widgets :as widgets] diff --git a/frontend/src/app/main/ui/workspace/viewport_wasm.cljs b/frontend/src/app/main/ui/workspace/viewport_wasm.cljs index 61f5025f81..cdc0a1e094 100644 --- a/frontend/src/app/main/ui/workspace/viewport_wasm.cljs +++ b/frontend/src/app/main/ui/workspace/viewport_wasm.cljs @@ -51,7 +51,9 @@ [app.main.ui.workspace.viewport.selection :as selection] [app.main.ui.workspace.viewport.snap-distances :as snap-distances] [app.main.ui.workspace.viewport.snap-points :as snap-points] - [app.main.ui.workspace.viewport.top-bar :refer [path-edition-bar* grid-edition-bar* view-only-bar*]] + [app.main.ui.workspace.viewport.top-bar :refer [grid-edition-bar* + path-edition-bar* + view-only-bar*]] [app.main.ui.workspace.viewport.utils :as utils] [app.main.ui.workspace.viewport.viewport-ref :as vp-ref :refer [create-viewport-ref]] [app.main.ui.workspace.viewport.widgets :as widgets] From f2bf5a3111cc43ad9fac357dd1aa96b97ade7fb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moya?= Date: Mon, 22 Jun 2026 12:25:29 +0200 Subject: [PATCH 004/229] :wrench: Add more tests for all cases and fix text token application in tests --- .../src/app/common/test_helpers/tokens.cljc | 17 +- common/src/app/common/types/text.cljc | 6 +- .../common_tests/logic/token_apply_test.cljc | 43 ++++- common/test/common_tests/types/text_test.cljc | 166 +++++++++++++++++- 4 files changed, 218 insertions(+), 14 deletions(-) diff --git a/common/src/app/common/test_helpers/tokens.cljc b/common/src/app/common/test_helpers/tokens.cljc index 21a8dd4f04..02becdc27a 100644 --- a/common/src/app/common/test_helpers/tokens.cljc +++ b/common/src/app/common/test_helpers/tokens.cljc @@ -6,12 +6,14 @@ (ns app.common.test-helpers.tokens (:require + [app.common.data :as d] [app.common.test-helpers.files :as thf] [app.common.test-helpers.shapes :as ths] [app.common.types.container :as ctn] [app.common.types.file :as ctf] [app.common.types.pages-list :as ctpl] [app.common.types.shape-tree :as ctst] + [app.common.types.text :as ctt] [app.common.types.token :as cto] [app.common.types.tokens-lib :as ctob])) @@ -81,11 +83,16 @@ :token {:name token-name} :attributes token-attrs}) (reduce (fn [shape attr] - (case attr - :stroke-width (set-stroke-width shape resolved-value) - :stroke-color (set-stroke-color shape resolved-value) - :fill (set-fill-color shape resolved-value) - (ctn/set-shape-attr shape attr resolved-value {:ignore-touched true}))) + (if (ctt/text-node-attr? attr) + (let [value (if (sequential? resolved-value) (first resolved-value) resolved-value)] + (ctt/update-text-content shape + ctt/is-content-node? + d/txt-merge {attr value})) + (case attr + :stroke-width (set-stroke-width shape resolved-value) + :stroke-color (set-stroke-color shape resolved-value) + :fill (set-fill-color shape resolved-value) + (ctn/set-shape-attr shape attr resolved-value {:ignore-touched true})))) $ shape-attrs)))] diff --git a/common/src/app/common/types/text.cljc b/common/src/app/common/types/text.cljc index c2fc8f1ab3..e0330b3264 100644 --- a/common/src/app/common/types/text.cljc +++ b/common/src/app/common/types/text.cljc @@ -78,6 +78,10 @@ text-transform-attrs text-fills)) +(defn text-node-attr? + [attr] + (d/index-of text-node-attrs attr)) + (def text-all-attrs (d/concat-set shape-attrs root-attrs paragraph-attrs text-node-attrs)) (def text-style-attrs @@ -210,7 +214,7 @@ - Normalize numeric values (legacy) into strings. - No value is equal than the default value." [key value1 value2] - (when (d/index-of text-node-attrs key) + (when (text-node-attr? key) (let [default-value (get default-text-attrs key) normalize-value (fn [value] (as-> value $ diff --git a/common/test/common_tests/logic/token_apply_test.cljc b/common/test/common_tests/logic/token_apply_test.cljc index 93829cf0f5..9715b7f235 100644 --- a/common/test/common_tests/logic/token_apply_test.cljc +++ b/common/test/common_tests/logic/token_apply_test.cljc @@ -111,8 +111,8 @@ (tht/apply-token-to-shape :frame1 "token-color" [:stroke-color] [:stroke-color] "#00ff00") (tht/apply-token-to-shape :frame1 "token-color" [:fill] [:fill] "#00ff00") (tht/apply-token-to-shape :frame1 "token-dimensions" [:width :height] [:width :height] 100) - (tht/apply-token-to-shape :text1 "token-font-size" [:font-size] [:font-size] 24) - (tht/apply-token-to-shape :text1 "token-letter-spacing" [:letter-spacing] [:letter-spacing] 2) + (tht/apply-token-to-shape :text1 "token-font-size" [:font-size] [:font-size] "24") + (tht/apply-token-to-shape :text1 "token-letter-spacing" [:letter-spacing] [:letter-spacing] "2") (tht/apply-token-to-shape :text1 "token-font-family" [:font-family] [:font-family] ["Helvetica" "Arial" "sans-serif"]) (tht/apply-token-to-shape :circle1 "token-sizing" @@ -331,7 +331,7 @@ d/txt-merge {:fills (ths/sample-fills-color :fill-color "#fabada") :font-size "1" - :letter-spacing "2" + :letter-spacing "3" :font-family "Arial"})) (:objects page) {}) @@ -360,3 +360,40 @@ (t/is (= (count applied-tokens-frame') 0)) (t/is (= (count applied-tokens-text') 0)) (t/is (= (count applied-tokens-circle') 0)))) + +(t/deftest dont-unapply-automatic-when-null-change + (let [;; ==== Setup + file (-> (setup-file) + (tht/apply-token-to-shape :text1 "token-font-size" [:font-size] [:font-size] "14") + (tht/apply-token-to-shape :text1 "token-letter-spacing" [:letter-spacing] [:letter-spacing] "2") + (tht/apply-token-to-shape :text1 "token-font-family" [:font-family] [:font-family] ["Helvetica" "Arial" "sans-serif"])) + page (thf/current-page file) + text1 (ths/get-shape file :text1) + + ;; ==== Action + changes (-> (-> (pcb/empty-changes nil) + (pcb/with-page page) + (pcb/with-objects (:objects page))) + ;; Some changes in text content are not semantic changes + ;; and thus they don't unapply tokens (e.g. adding an attribute + ;; with value nil or with the default value). + (cls/generate-update-shapes [(:id text1)] + (fn [shape] + (txt/update-text-content + shape + txt/is-content-node? + d/txt-merge + {:font-size nil + :line-height "3" + :nonexistent-attr "sample value"})) + (:objects page) + {})) + + file' (thf/apply-changes file changes) + + ;; ==== Get + text1' (ths/get-shape file' :text1) + applied-tokens-text' (:applied-tokens text1')] + + ;; ==== Check + (t/is (= (count applied-tokens-text') 3)))) \ No newline at end of file diff --git a/common/test/common_tests/types/text_test.cljc b/common/test/common_tests/types/text_test.cljc index be4424ef27..f6dea90560 100644 --- a/common/test/common_tests/types/text_test.cljc +++ b/common/test/common_tests/types/text_test.cljc @@ -16,6 +16,8 @@ (get :content) (cttx/change-text "hello world"))) +;; Normal happy-path changes + (def content-changed-text (assoc-in content-base [:children 0 :children 0 :children 0 :text] "changed")) @@ -34,22 +36,127 @@ (update-in content-base [:children 0 :children 0 :children] #(conj % (assoc line :font-weight "700")))) - (def content-changed-structure-same-attrs (update-in content-base [:children 0 :children 0 :children] #(conj % line))) +;; Special cases + +;; Numeric value (legacy): number 14 should normalize to string "14", +;; which equals the default value in content-base +(def content-numeric-font-size-default + (assoc-in content-base [:children 0 :children 0 :children 0 :font-size] 14)) + +;; Numeric value (legacy): number 32 should normalize to string "32", +;; matching content-changed-attr (which uses string "32") +(def content-numeric-font-size-32 + (assoc-in content-base [:children 0 :children 0 :children 0 :font-size] 32)) + +;; Attribute set to nil (removed) +(def content-nil-font-size + (assoc-in content-base [:children 0 :children 0 :children 0 :font-size] nil)) + +;; Attribute set to empty string +(def content-empty-string-font-size + (assoc-in content-base [:children 0 :children 0 :children 0 :font-size] "")) + +;; Attribute set to empty vector +(def content-empty-list-font-size + (assoc-in content-base [:children 0 :children 0 :children 0 :font-size] [])) + +;; Attribute set to its default value (font-size default is "14") +(def content-default-font-size + (assoc-in content-base [:children 0 :children 0 :children 0 :font-size] "14")) + +;; Non-text-node-attr key change (grow-type is not in text-node-attrs) +(def content-non-text-node-attr + (assoc-in content-base [:children 0 :children 0 :children 0 :grow-type] "auto-height")) + +;; Other text-node-attr categories +(def content-changed-font-family + (assoc-in content-base [:children 0 :children 0 :children 0 :font-family] "Arial")) + +(def content-changed-line-height + (assoc-in content-base [:children 0 :children 0 :children 0 :line-height] "1.5")) + +(def content-changed-letter-spacing + (assoc-in content-base [:children 0 :children 0 :children 0 :letter-spacing] "2")) + +(def content-changed-text-decoration + (assoc-in content-base [:children 0 :children 0 :children 0 :text-decoration] "underline")) + +(def content-changed-text-transform + (assoc-in content-base [:children 0 :children 0 :children 0 :text-transform] "uppercase")) + +(def content-changed-typography-ref-id + (assoc-in content-base [:children 0 :children 0 :children 0 :typography-ref-id] "new-typography-id")) + +(def content-changed-fills + (assoc-in content-base [:children 0 :children 0 :children 0 :fills] + [{:fill-color "#ff0000" :fill-opacity 1}])) + + (t/deftest test-get-diff-type (let [diff-text (cttx/get-diff-type content-base content-changed-text) diff-attr (cttx/get-diff-type content-base content-changed-attr) diff-both (cttx/get-diff-type content-base content-changed-both) diff-structure (cttx/get-diff-type content-base content-changed-structure) - diff-structure-same-attrs (cttx/get-diff-type content-base content-changed-structure-same-attrs)] + diff-structure-same-attrs (cttx/get-diff-type content-base content-changed-structure-same-attrs) + ;; Numeric normalization: number 14 → string "14" → default → nil (same as base) + diff-numeric-default (cttx/get-diff-type content-base content-numeric-font-size-default) + ;; Numeric normalization: number 32 → string "32" (different from base's "14") + diff-numeric-different (cttx/get-diff-type content-base content-numeric-font-size-32) + ;; Numeric 32 vs string "32": should be equal after normalization + diff-numeric-vs-string (cttx/get-diff-type content-changed-attr content-numeric-font-size-32) + + ;; nil / empty-string / empty-list / default → all normalize to nil + diff-nil-attr (cttx/get-diff-type content-base content-nil-font-size) + diff-empty-string (cttx/get-diff-type content-base content-empty-string-font-size) + diff-empty-list (cttx/get-diff-type content-base content-empty-list-font-size) + diff-default-value (cttx/get-diff-type content-base content-default-font-size) + + ;; Non-text-node-attr key: should be ignored + diff-non-text-node (cttx/get-diff-type content-base content-non-text-node-attr) + + ;; Other text-node-attr categories + diff-font-family (cttx/get-diff-type content-base content-changed-font-family) + diff-line-height (cttx/get-diff-type content-base content-changed-line-height) + diff-letter-spacing (cttx/get-diff-type content-base content-changed-letter-spacing) + diff-text-decoration (cttx/get-diff-type content-base content-changed-text-decoration) + diff-text-transform (cttx/get-diff-type content-base content-changed-text-transform) + diff-typography-ref (cttx/get-diff-type content-base content-changed-typography-ref-id) + diff-fills (cttx/get-diff-type content-base content-changed-fills)] + + ;; Basic cases (t/is (= #{:text-content-text} diff-text)) (t/is (= #{:text-content-attribute} diff-attr)) (t/is (= #{:text-content-text :text-content-attribute} diff-both)) (t/is (= #{:text-content-structure} diff-structure)) - (t/is (= #{:text-content-structure} diff-structure-same-attrs)))) + (t/is (= #{:text-content-structure} diff-structure-same-attrs)) + + ;; Numeric normalization + (t/is (= #{} diff-numeric-default)) + (t/is (= #{:text-content-attribute} diff-numeric-different)) + (t/is (= #{} diff-numeric-vs-string)) + + ;; nil / empty / default normalization (content-base has default font-size "14", + ;; which normalizes to nil; nil also normalizes to nil → equal) + (t/is (= #{} diff-nil-attr)) + (t/is (= #{} diff-empty-string)) + (t/is (= #{} diff-empty-list)) + (t/is (= #{} diff-default-value)) + + ;; Non-text-node-attr key is ignored + (t/is (= #{} diff-non-text-node)) + + ;; Each text-node-attr category triggers attribute diff + (t/is (= #{:text-content-attribute} diff-font-family)) + (t/is (= #{:text-content-attribute} diff-line-height)) + (t/is (= #{:text-content-attribute} diff-letter-spacing)) + (t/is (= #{:text-content-attribute} diff-text-decoration)) + (t/is (= #{:text-content-attribute} diff-text-transform)) + (t/is (= #{:text-content-attribute} diff-typography-ref)) + (t/is (= #{:text-content-attribute} diff-fills)))) (t/deftest test-get-diff-attrs @@ -57,13 +164,62 @@ attrs-attr (cttx/get-diff-attrs content-base content-changed-attr) attrs-both (cttx/get-diff-attrs content-base content-changed-both) attrs-structure (cttx/get-diff-attrs content-base content-changed-structure) - attrs-structure-same-attrs (cttx/get-diff-attrs content-base content-changed-structure-same-attrs)] + attrs-structure-same-attrs (cttx/get-diff-attrs content-base content-changed-structure-same-attrs) + ;; Numeric normalization: number 14 → string "14" → default → nil (same as base) + attrs-numeric-default (cttx/get-diff-attrs content-base content-numeric-font-size-default) + ;; Numeric normalization: number 32 → string "32" (different from base's "14") + attrs-numeric-different (cttx/get-diff-attrs content-base content-numeric-font-size-32) + ;; Numeric 32 vs string "32": should be equal after normalization + attrs-numeric-vs-string (cttx/get-diff-attrs content-changed-attr content-numeric-font-size-32) + + ;; nil / empty-string / empty-list / default → all normalize to nil + attrs-nil-attr (cttx/get-diff-attrs content-base content-nil-font-size) + attrs-empty-string (cttx/get-diff-attrs content-base content-empty-string-font-size) + attrs-empty-list (cttx/get-diff-attrs content-base content-empty-list-font-size) + attrs-default-value (cttx/get-diff-attrs content-base content-default-font-size) + + ;; Non-text-node-attr key: should be ignored + attrs-non-text-node (cttx/get-diff-attrs content-base content-non-text-node-attr) + + ;; Other text-node-attr categories + attrs-font-family (cttx/get-diff-attrs content-base content-changed-font-family) + attrs-line-height (cttx/get-diff-attrs content-base content-changed-line-height) + attrs-letter-spacing (cttx/get-diff-attrs content-base content-changed-letter-spacing) + attrs-text-decoration (cttx/get-diff-attrs content-base content-changed-text-decoration) + attrs-text-transform (cttx/get-diff-attrs content-base content-changed-text-transform) + attrs-typography-ref (cttx/get-diff-attrs content-base content-changed-typography-ref-id) + attrs-fills (cttx/get-diff-attrs content-base content-changed-fills)] + + ;; Basic cases (t/is (= #{} attrs-text)) (t/is (= #{:font-size} attrs-attr)) (t/is (= #{:font-size} attrs-both)) (t/is (= #{} attrs-structure)) - (t/is (= #{} attrs-structure-same-attrs)))) + (t/is (= #{} attrs-structure-same-attrs)) + + ;; Numeric normalization + (t/is (= #{} attrs-numeric-default)) + (t/is (= #{:font-size} attrs-numeric-different)) + (t/is (= #{} attrs-numeric-vs-string)) + + ;; nil / empty / default normalization + (t/is (= #{} attrs-nil-attr)) + (t/is (= #{} attrs-empty-string)) + (t/is (= #{} attrs-empty-list)) + (t/is (= #{} attrs-default-value)) + + ;; Non-text-node-attr key is ignored + (t/is (= #{} attrs-non-text-node)) + + ;; Each text-node-attr category reports correct attr key + (t/is (= #{:font-family} attrs-font-family)) + (t/is (= #{:line-height} attrs-line-height)) + (t/is (= #{:letter-spacing} attrs-letter-spacing)) + (t/is (= #{:text-decoration} attrs-text-decoration)) + (t/is (= #{:text-transform} attrs-text-transform)) + (t/is (= #{:typography-ref-id} attrs-typography-ref)) + (t/is (= #{:fills} attrs-fills)))) (t/deftest test-equal-structure From 22cf4917d87d629460f5d6f5628d0f40a965bc81 Mon Sep 17 00:00:00 2001 From: Dexterity <173429049+Dexterity104@users.noreply.github.com> Date: Mon, 22 Jun 2026 09:28:00 -0400 Subject: [PATCH 005/229] :recycle: Migrate shapes/export components to modern syntax (#9449) * :recycle: Migrate shapes/export components to modern syntax * :paperclip: Add minor changes Signed-off-by: Andrey Antukh * :paperclip: Remove whitespace Signed-off-by: Andrey Antukh --------- Signed-off-by: Andrey Antukh Co-authored-by: Andrey Antukh --- frontend/src/app/main/render.cljs | 2 +- frontend/src/app/main/ui/shapes/export.cljs | 19 +++++++++---------- frontend/src/app/main/ui/shapes/shape.cljs | 2 +- .../src/app/main/ui/workspace/viewport.cljs | 2 +- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/frontend/src/app/main/render.cljs b/frontend/src/app/main/render.cljs index 35183701f5..0655545429 100644 --- a/frontend/src/app/main/render.cljs +++ b/frontend/src/app/main/render.cljs @@ -239,7 +239,7 @@ :fill "none"} (when include-metadata - [:& export/export-page {:page data}]) + [:> export/export-page* {:page data}]) (let [shapes (->> shapes (remove cfh/frame-shape?) diff --git a/frontend/src/app/main/ui/shapes/export.cljs b/frontend/src/app/main/ui/shapes/export.cljs index 39c2ecfa79..649d5b5bb9 100644 --- a/frontend/src/app/main/ui/shapes/export.cljs +++ b/frontend/src/app/main/ui/shapes/export.cljs @@ -24,7 +24,7 @@ (def include-metadata-ctx (mf/create-context false)) -(mf/defc render-xml +(mf/defc render-xml* [{{:keys [tag attrs content] :as node} :xml}] (cond @@ -33,7 +33,7 @@ (json/->js :key-fn name))] [:> (d/name tag) props (for [child content] - [:& render-xml {:xml child :key (swap! internal-counter inc)}])]) + [:> render-xml* {:xml child :key (swap! internal-counter inc)}])]) (string? node) node @@ -166,7 +166,7 @@ (cond-> (some? display) (obj/set! "penpot:display" (str display))))]))]))) -(mf/defc export-flows +(mf/defc export-flows* [{:keys [flows]}] [:> "penpot:flows" #js {} (for [{:keys [id name starting-frame]} (vals flows)] @@ -175,7 +175,7 @@ :name name :starting-frame starting-frame}])]) -(mf/defc export-guides +(mf/defc export-guides* [{:keys [guides]}] [:> "penpot:guides" #js {} (for [{:keys [position frame-id axis]} (vals guides)] @@ -183,8 +183,7 @@ :frame-id frame-id :axis (d/name axis)}])]) -(mf/defc export-page - {::mf/props :obj} +(mf/defc export-page* [{:keys [page]}] (let [id (get page :id) grids (get page :grids) @@ -197,10 +196,10 @@ [:& export-grid-data {:grids grids}])) (when (d/not-empty? flows) - [:& export-flows {:flows flows}]) + [:> export-flows* {:flows flows}]) (when (d/not-empty? guides) - [:& export-guides {:guides guides}])])) + [:> export-guides* {:guides guides}])])) (defn- export-shadow-data [{:keys [shadow]}] (mf/html @@ -273,7 +272,7 @@ (for [[def-id def-xml] (:svg-defs shape)] [:> "penpot:svg-def" #js {:def-id def-id :key (swap! internal-counter inc)} - [:& render-xml {:xml def-xml}]])])) + [:> render-xml* {:xml def-xml}]])])) (when (= (:type shape) :svg-raw) (let [shape (-> shape (d/update-in-when [:content :attrs :style] str->style)) @@ -478,7 +477,7 @@ :penpot:layout-item-z-index layout-item-z-index}]))) -(mf/defc export-data +(mf/defc export-data* [{:keys [shape]}] (let [props (-> (obj/create) (add-data shape) (add-library-refs shape))] [:> "penpot:shape" props diff --git a/frontend/src/app/main/ui/shapes/shape.cljs b/frontend/src/app/main/ui/shapes/shape.cljs index 57366ad03b..63048f3122 100644 --- a/frontend/src/app/main/ui/shapes/shape.cljs +++ b/frontend/src/app/main/ui/shapes/shape.cljs @@ -122,7 +122,7 @@ [:& (mf/provider muc/render-id) {:value render-id} [:> :g wrapper-props (when include-metadata? - [:& ed/export-data {:shape shape}]) + [:> ed/export-data* {:shape shape}]) [:defs [:> defs/svg-defs* {:shape shape :render-id render-id}] diff --git a/frontend/src/app/main/ui/workspace/viewport.cljs b/frontend/src/app/main/ui/workspace/viewport.cljs index f7d95b018b..c7740e9680 100644 --- a/frontend/src/app/main/ui/workspace/viewport.cljs +++ b/frontend/src/app/main/ui/workspace/viewport.cljs @@ -398,7 +398,7 @@ [:stop {:offset "100%" :stop-color (str "color-mix(in srgb-linear, " background " 90%, #777)") :stop-opacity 1}]]] (when (dbg/enabled? :show-export-metadata) - [:& use/export-page {:page page}]) + [:> use/export-page* {:page page}]) ;; We need a "real" background shape so layer transforms work properly in firefox [:rect {:width (:width vbox 0) From 4c5991514a2282a26b27e45852df75d72cb2a3ed Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 22 Jun 2026 15:36:02 +0200 Subject: [PATCH 006/229] :bug: Fix syntax issues introduced in prev commit --- frontend/src/app/main/ui/shapes/export.cljs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/main/ui/shapes/export.cljs b/frontend/src/app/main/ui/shapes/export.cljs index 649d5b5bb9..46c9856ef6 100644 --- a/frontend/src/app/main/ui/shapes/export.cljs +++ b/frontend/src/app/main/ui/shapes/export.cljs @@ -25,18 +25,21 @@ (mf/create-context false)) (mf/defc render-xml* - [{{:keys [tag attrs content] :as node} :xml}] - + [{:keys [xml]}] (cond - (map? node) - (let [props (-> (csvg/attrs->props attrs) + (map? xml) + (let [{:keys [tag attrs content]} + xml + + props (-> (csvg/attrs->props attrs) (json/->js :key-fn name))] + [:> (d/name tag) props (for [child content] [:> render-xml* {:xml child :key (swap! internal-counter inc)}])]) - (string? node) - node + (string? xml) + xml :else nil)) From 0dbc2c54d6f514118d70aadc5229b091ffd9b3c3 Mon Sep 17 00:00:00 2001 From: Krishna zade <114551368+Krishcode264@users.noreply.github.com> Date: Mon, 22 Jun 2026 21:02:12 +0530 Subject: [PATCH 007/229] :bug: Fix spacebar activating pan mode in editable fields as Comment Input box (#10287) Co-authored-by: Andrey Antukh --- frontend/src/app/main/ui/workspace/viewport/actions.cljs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/viewport/actions.cljs b/frontend/src/app/main/ui/workspace/viewport/actions.cljs index 2ab6f6f490..3803577d45 100644 --- a/frontend/src/app/main/ui/workspace/viewport/actions.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/actions.cljs @@ -332,7 +332,8 @@ editing? (or (txu/some-text-editor-content? target) (= "rich-text" (obj/get target "className")) (= "INPUT" (obj/get target "tagName")) - (= "TEXTAREA" (obj/get target "tagName")))] + (= "TEXTAREA" (obj/get target "tagName")) + (true? (.-isContentEditable target)))] (when-not (.-repeat bevent) (st/emit! (kbd/->KeyboardEvent :down key shift? ctrl? alt? meta? mod? editing? event))))))) @@ -351,7 +352,8 @@ editing? (or (txu/some-text-editor-content? target) (= "rich-text" (obj/get target "className")) (= "INPUT" (obj/get target "tagName")) - (= "TEXTAREA" (obj/get target "tagName")))] + (= "TEXTAREA" (obj/get target "tagName")) + (true? (.-isContentEditable target)))] (st/emit! (kbd/->KeyboardEvent :up key shift? ctrl? alt? meta? mod? editing? event)))))) (defn on-pointer-move [move-stream] From ea20291d2a318e02a2bc0893b5499f0cc90c999c Mon Sep 17 00:00:00 2001 From: Dexterity <173429049+Dexterity104@users.noreply.github.com> Date: Mon, 22 Jun 2026 12:40:01 -0400 Subject: [PATCH 008/229] :recycle: Migrate v1 text-editor to modern component syntax (#9446) * :recycle: Migrate v1 text-editor to modern component syntax * :paperclip: Add minor changes Signed-off-by: Andrey Antukh --------- Signed-off-by: Andrey Antukh Co-authored-by: Andrey Antukh --- .../main/ui/workspace/shapes/text/editor.cljs | 38 ++++++++----------- .../src/app/main/ui/workspace/viewport.cljs | 4 +- .../app/main/ui/workspace/viewport_wasm.cljs | 4 +- 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/shapes/text/editor.cljs b/frontend/src/app/main/ui/workspace/shapes/text/editor.cljs index 766acb2430..3eca4f72fd 100644 --- a/frontend/src/app/main/ui/workspace/shapes/text/editor.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/text/editor.cljs @@ -30,24 +30,18 @@ ;; --- Text Editor Rendering -(mf/defc block-component - {::mf/wrap-props false} - [props] - (let [bprops (obj/get props "blockProps") - data (obj/get bprops "data") - style (sts/generate-paragraph-styles (obj/get bprops "shape") - (obj/get bprops "data")) - dir (:text-direction data "auto")] - +(mf/defc block-component* + [{:keys [block-props] :as props}] + (let [data (.-data ^js block-props) + style (sts/generate-paragraph-styles (.-shape ^js block-props) data) + dir (:text-direction data "auto")] [:div {:style style :dir dir} [:> draft/EditorBlock props]])) -(mf/defc selection-component - {::mf/wrap-props false} - [props] - (let [children (obj/get props "children")] - [:span {:style {:background "#ccc" :display "inline-block"}} children])) +(mf/defc selection-component* + [{:keys [children]}] + [:span {:style {:background "#ccc" :display "inline-block"}} children]) (defn- render-block [block shape] @@ -55,7 +49,7 @@ (case type "unstyled" #js {:editable true - :component block-component + :component block-component* :props #js {:data (ted/get-editor-block-data block) :shape shape}} nil))) @@ -69,7 +63,7 @@ (sts/generate-text-styles shape data {:show-text? false}))) (def default-decorator - (ted/create-decorator "PENPOT_SELECTION" selection-component)) + (ted/create-decorator "PENPOT_SELECTION" selection-component*)) (def empty-editor-state (ted/create-editor-state nil default-decorator)) @@ -95,12 +89,11 @@ "bottom" "flex-end" nil)) -(mf/defc text-shape-edit-html +(mf/defc text-shape-edit-html* {::mf/wrap [mf/memo] - ::mf/wrap-props false ::mf/forward-ref true} - [props _] - (let [{:keys [id content] :as shape} (obj/get props "shape") + [{:keys [shape]} _] + (let [{:keys [id content]} shape state-map (mf/deref refs/workspace-editor-state) state (get state-map id empty-editor-state) @@ -269,8 +262,7 @@ (-> (gpt/subtract pt box) (gpt/multiply zoom))))) -(mf/defc text-editor-svg - {::mf/wrap-props false} +(mf/defc text-editor-svg* [{:keys [shape modifiers]}] (let [shape-id (dm/get-prop shape :id) modifiers (dm/get-in modifiers [shape-id :modifiers]) @@ -343,6 +335,6 @@ [:foreignObject {:x x :y y :width width :height height} [:div {:style style} - [:& text-shape-edit-html + [:> text-shape-edit-html* {:shape shape :key (dm/str shape-id)}]]]])) diff --git a/frontend/src/app/main/ui/workspace/viewport.cljs b/frontend/src/app/main/ui/workspace/viewport.cljs index c7740e9680..ee85719d9b 100644 --- a/frontend/src/app/main/ui/workspace/viewport.cljs +++ b/frontend/src/app/main/ui/workspace/viewport.cljs @@ -454,8 +454,8 @@ [:& editor-v2/text-editor {:shape editing-shape :canvas-ref canvas-ref :modifiers modifiers}] - [:& editor-v1/text-editor-svg {:shape editing-shape - :modifiers modifiers}])) + [:> editor-v1/text-editor-svg* {:shape editing-shape + :modifiers modifiers}])) (when show-frame-outline? (let [outlined-frame-id diff --git a/frontend/src/app/main/ui/workspace/viewport_wasm.cljs b/frontend/src/app/main/ui/workspace/viewport_wasm.cljs index cdc0a1e094..142134c736 100644 --- a/frontend/src/app/main/ui/workspace/viewport_wasm.cljs +++ b/frontend/src/app/main/ui/workspace/viewport_wasm.cljs @@ -728,8 +728,8 @@ :canvas-ref canvas-ref :ref text-editor-ref}] - :else [:& editor-v1/text-editor-svg {:shape editing-shape - :ref text-editor-ref}])) + :else [:> editor-v1/text-editor-svg* {:shape editing-shape + :ref text-editor-ref}])) (when show-frame-outline? (let [outlined-frame-id (->> @hover-ids From 66c8ebf198aa0bfb9f37a18e374c3891e39a82dc Mon Sep 17 00:00:00 2001 From: Filip Sajdak Date: Wed, 17 Jun 2026 15:27:46 +0200 Subject: [PATCH 009/229] :bug: Accept negative letterSpacing in plugin API text setters The plugin text API rejected negative letter-spacing even though the product UI allows -200..200 (typography.cljs). Two defects in frontend/src/app/plugins/text.cljs: - `letter-spacing-re` (`#"^\d*\.?\d*$"`) had no provision for a leading minus, so any negative value failed validation. - The text-range `:letterSpacing` setter inverted its guard: it used `(or (empty? value) (re-matches ...))` to mean "invalid", which rejected matching values and let non-numeric input through. The text-shape setter and the sibling `lineHeight` range setter both correctly use `(not (re-matches ...))`. Fix the regex to allow an optional leading minus and add the missing `not` so the range setter matches the shape setter. Adds regression coverage for the regex accept/reject contract. Fixes #9780 Co-authored-by: Claude Opus 4.8 Signed-off-by: Filip Sajdak --- frontend/src/app/plugins/text.cljs | 2 +- .../frontend_tests/plugins/text_test.cljs | 37 +++++++++++++++++++ frontend/test/frontend_tests/runner.cljs | 2 + 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 frontend/test/frontend_tests/plugins/text_test.cljs diff --git a/frontend/src/app/plugins/text.cljs b/frontend/src/app/plugins/text.cljs index 26e13b1039..597833619b 100644 --- a/frontend/src/app/plugins/text.cljs +++ b/frontend/src/app/plugins/text.cljs @@ -33,7 +33,7 @@ (def ^:private font-size-re #"^\d*\.?\d*$") (def ^:private line-height-re #"^\d*\.?\d*$") -(def ^:private letter-spacing-re #"^\d*\.?\d*$") +(def ^:private letter-spacing-re #"^-?\d*\.?\d*$") (def ^:private text-transform-re #"uppercase|capitalize|lowercase|none") (def ^:private text-decoration-re #"underline|line-through|none") (def ^:private text-direction-re #"ltr|rtl") diff --git a/frontend/test/frontend_tests/plugins/text_test.cljs b/frontend/test/frontend_tests/plugins/text_test.cljs new file mode 100644 index 0000000000..edcfbf853d --- /dev/null +++ b/frontend/test/frontend_tests/plugins/text_test.cljs @@ -0,0 +1,37 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns frontend-tests.plugins.text-test + (:require + [app.plugins.text :as plugins.text] + [cljs.test :as t :include-macros true])) + +;; Regression coverage for issue #9780. +;; +;; `letterSpacing` accepts negative tracking in the product UI (-200..200, +;; see typography.cljs), but the plugin validator regex rejected any leading +;; minus, so negative values were refused. `letter-spacing-re` is the shared +;; predicate behind both the shape- and range-level setters; pin its +;; accept/reject contract here. + +(def ^:private letter-spacing-re @#'plugins.text/letter-spacing-re) + +(defn- valid? [s] (boolean (re-matches letter-spacing-re s))) + +(t/deftest letter-spacing-re-accepts-negative-values + (t/is (valid? "-0.56")) + (t/is (valid? "-12")) + (t/is (valid? "-200"))) + +(t/deftest letter-spacing-re-accepts-non-negative-values + (t/is (valid? "0")) + (t/is (valid? "12")) + (t/is (valid? "1.5"))) + +(t/deftest letter-spacing-re-rejects-non-numeric + (t/is (not (valid? "abc"))) + (t/is (not (valid? "1-2"))) + (t/is (not (valid? "--1")))) diff --git a/frontend/test/frontend_tests/runner.cljs b/frontend/test/frontend_tests/runner.cljs index b3b16a2079..154dd95ad9 100644 --- a/frontend/test/frontend_tests/runner.cljs +++ b/frontend/test/frontend_tests/runner.cljs @@ -33,6 +33,7 @@ [frontend-tests.plugins.page-active-validation-test] [frontend-tests.plugins.page-test] [frontend-tests.plugins.parser-test] + [frontend-tests.plugins.text-test] [frontend-tests.plugins.tokens-test] [frontend-tests.plugins.utils-test] [frontend-tests.render-wasm.process-objects-test] @@ -89,6 +90,7 @@ frontend-tests.plugins.format-test frontend-tests.plugins.page-test frontend-tests.plugins.parser-test + frontend-tests.plugins.text-test frontend-tests.plugins.tokens-test frontend-tests.plugins.utils-test frontend-tests.svg-fills-test From 46abf1c96808272afddef81b2538ae5ca2595f34 Mon Sep 17 00:00:00 2001 From: since-2017-hub <34567183+since-2017-hub@users.noreply.github.com> Date: Tue, 23 Jun 2026 03:38:07 -0400 Subject: [PATCH 010/229] :recycle: Migrate auth flow pages to modern component syntax (#9469) Refactor the 6 mf/defc components across the auth flow (login, password recovery, recovery request) to modern mf/defc name* syntax. Modern syntax avoids per-render JS->CLJS prop-conversion overhead. - Rename login-page -> login-page* in frontend/src/app/main/ui/auth/login.cljs. - Rename ecovery-form -> ecovery-form* and ecovery-page -> ecovery-page* in frontend/src/app/main/ui/auth/recovery.cljs. - Rename ecovery-form -> ecovery-form*, ecovery-request-page -> ecovery-request-page*, ecovery-sent-page -> ecovery-sent-page* in frontend/src/app/main/ui/auth/recovery_request.cljs (drop redundant {::mf/props :obj} marker since the * suffix already implies it). - Drop unused :as props destructure bindings. - Update internal forwarding callsites (2) and external callers in auth.cljs (3 callsites + 3 :refer imports), viewer/login.cljs (1 callsite + 1 :refer), and static.cljs (2 callsites + 1 :refer). Refs #9260 Signed-off-by: since-2017-hub Signed-off-by: Andrey Antukh Co-authored-by: Andrey Antukh --- frontend/src/app/main/ui/auth.cljs | 8 ++++---- frontend/src/app/main/ui/auth/login.cljs | 4 ++-- frontend/src/app/main/ui/auth/recovery_request.cljs | 13 ++++++------- frontend/src/app/main/ui/static.cljs | 8 ++++---- frontend/src/app/main/ui/viewer/login.cljs | 6 +++--- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/frontend/src/app/main/ui/auth.cljs b/frontend/src/app/main/ui/auth.cljs index 5f821fab9e..e52cbff034 100644 --- a/frontend/src/app/main/ui/auth.cljs +++ b/frontend/src/app/main/ui/auth.cljs @@ -10,9 +10,9 @@ [app.common.data.macros :as dm] [app.main.data.auth :as da] [app.main.store :as st] - [app.main.ui.auth.login :refer [login-page]] + [app.main.ui.auth.login :refer [login-page*]] [app.main.ui.auth.recovery :refer [recovery-page*]] - [app.main.ui.auth.recovery-request :refer [recovery-request-page]] + [app.main.ui.auth.recovery-request :refer [recovery-request-page*]] [app.main.ui.auth.register :refer [register-page* register-success-page* register-validate-page* terms-register*]] [app.main.ui.icons :as deprecated-icon] [app.util.dom :as dom] @@ -63,10 +63,10 @@ [:> register-validate-page* {:params params}] :auth-login - [:& login-page {:params params}] + [:> login-page* {:params params}] :auth-recovery-request - [:& recovery-request-page] + [:> recovery-request-page*] :auth-recovery [:> recovery-page* {:params params}]) diff --git a/frontend/src/app/main/ui/auth/login.cljs b/frontend/src/app/main/ui/auth/login.cljs index 1cee0b0192..8b87825eed 100644 --- a/frontend/src/app/main/ui/auth/login.cljs +++ b/frontend/src/app/main/ui/auth/login.cljs @@ -259,8 +259,8 @@ (contains? cf/flags :login-with-ldap)) [:> login-form* props])]) -(mf/defc login-page - [{:keys [params] :as props}] +(mf/defc login-page* + [{:keys [params]}] (let [go-register (mf/use-fn #(st/emit! (rt/nav :auth-register params)))] diff --git a/frontend/src/app/main/ui/auth/recovery_request.cljs b/frontend/src/app/main/ui/auth/recovery_request.cljs index 3233df8a30..78caa421ff 100644 --- a/frontend/src/app/main/ui/auth/recovery_request.cljs +++ b/frontend/src/app/main/ui/auth/recovery_request.cljs @@ -22,8 +22,8 @@ [:map {:title "RecoverRequestForm"} [:email ::sm/email]]) -(mf/defc recovery-form - [{:keys [on-success-callback] :as props}] +(mf/defc recovery-form* + [{:keys [on-success-callback]}] (let [form (fm/use-form :schema schema:recovery-request-form :initial {}) submitted (mf/use-state false) @@ -86,8 +86,8 @@ ;; --- Recovery Request Page -(mf/defc recovery-request-page - [{:keys [params on-success-callback go-back-callback] :as props}] +(mf/defc recovery-request-page* + [{:keys [params on-success-callback go-back-callback]}] (let [default-go-back #(st/emit! (rt/nav :auth-login)) go-back (or go-back-callback default-go-back)] [:div {:class (stl/css :auth-form-wrapper)} @@ -95,7 +95,7 @@ [:div {:class (stl/css :auth-subtitle)} (tr "auth.recovery-request-subtitle")] [:hr {:class (stl/css :separator)}] - [:& recovery-form {:params params :on-success-callback on-success-callback}] + [:> recovery-form* {:params params :on-success-callback on-success-callback}] [:hr {:class (stl/css :separator)}] [:div {:class (stl/css :go-back)} [:> lk/link* {:action go-back @@ -104,8 +104,7 @@ (tr "labels.go-back")]]])) -(mf/defc recovery-sent-page - {::mf/props :obj} +(mf/defc recovery-sent-page* [{:keys [email]}] [:div {:class (stl/css :auth-form-wrapper :register-success)} [:div {:class (stl/css :auth-title-wrapper)} diff --git a/frontend/src/app/main/ui/static.cljs b/frontend/src/app/main/ui/static.cljs index 02069fc147..cdc839ef79 100644 --- a/frontend/src/app/main/ui/static.cljs +++ b/frontend/src/app/main/ui/static.cljs @@ -21,7 +21,7 @@ [app.main.router :as rt] [app.main.store :as st] [app.main.ui.auth.login :refer [login-dialog*]] - [app.main.ui.auth.recovery-request :refer [recovery-request-page recovery-sent-page]] + [app.main.ui.auth.recovery-request :refer [recovery-request-page* recovery-sent-page*]] [app.main.ui.auth.register :as register] [app.main.ui.dashboard.sidebar :refer [sidebar*]] [app.main.ui.ds.buttons.button :refer [button*]] @@ -201,12 +201,12 @@ [:> register/register-success-page* {:params {:email @user-email :hide-logo true}}]] :recovery-request - [:& recovery-request-page {:go-back-callback set-section-login - :on-success-callback recovery-email-sent}] + [:> recovery-request-page* {:go-back-callback set-section-login + :on-success-callback recovery-email-sent}] :recovery-email-sent [:div {:class (stl/css :form-container)} - [:& recovery-sent-page {:email @user-email}]])]]])) + [:> recovery-sent-page* {:email @user-email}]])]]])) (mf/defc request-dialog* [{:keys [title content button-text on-button-click cancel-text on-close]}] diff --git a/frontend/src/app/main/ui/viewer/login.cljs b/frontend/src/app/main/ui/viewer/login.cljs index 635c236681..0371714419 100644 --- a/frontend/src/app/main/ui/viewer/login.cljs +++ b/frontend/src/app/main/ui/viewer/login.cljs @@ -11,7 +11,7 @@ [app.main.data.modal :as modal] [app.main.store :as st] [app.main.ui.auth.login :refer [login-dialog*]] - [app.main.ui.auth.recovery-request :refer [recovery-request-page]] + [app.main.ui.auth.recovery-request :refer [recovery-request-page*]] [app.main.ui.auth.register :refer [register-methods* register-success-page* terms-register* register-validate-form*]] [app.main.ui.icons :as deprecated-icon] [app.util.dom :as dom] @@ -113,8 +113,8 @@ (tr "labels.go-back")]]]] :recovery-request - [:& recovery-request-page {:go-back-callback go-back-to-login - :on-success-callback success-email-sent}] + [:> recovery-request-page* {:go-back-callback go-back-to-login + :on-success-callback success-email-sent}] :email-sent [:div {:class (stl/css :form-container)} [:> register-success-page* {:params {:email @user-email}}]]) From fc07a6467b2f8955e9245dd86bdfa3a58a15dfaa Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 23 Jun 2026 10:37:59 +0200 Subject: [PATCH 011/229] :bug: Fix organizations dropdown clipped by sidebar overflow (#10362) Render the organizations selector dropdown in a portal anchored to the trigger button, so a long list is no longer clipped by the sidebar-content-wrapper overflow. --- .../src/app/main/ui/dashboard/sidebar.cljs | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/main/ui/dashboard/sidebar.cljs b/frontend/src/app/main/ui/dashboard/sidebar.cljs index eeda604490..bcd2c92d7c 100644 --- a/frontend/src/app/main/ui/dashboard/sidebar.cljs +++ b/frontend/src/app/main/ui/dashboard/sidebar.cljs @@ -40,6 +40,7 @@ [app.main.ui.ds.buttons.button :refer [button*]] [app.main.ui.ds.foundations.assets.icon :refer [icon*] :as i] [app.main.ui.ds.foundations.assets.raw-svg :refer [raw-svg*]] + [app.main.ui.hooks :as hooks] [app.main.ui.icons :as deprecated-icon] [app.main.ui.nitrate.nitrate-form] [app.util.dom :as dom] @@ -704,6 +705,12 @@ show-orgs-menu? (deref show-orgs-menu*) + orgs-rect* + (mf/use-state nil) + + orgs-portal-container + (hooks/use-portal-container :popup) + show-org-options-menu* (mf/use-state false) @@ -723,6 +730,7 @@ (mf/use-fn (fn [event] (dom/stop-propagation event) + (reset! orgs-rect* (dom/get-bounding-rect (dom/get-current-target event))) (swap! show-orgs-menu* not))) on-show-orgs-keydown @@ -773,13 +781,22 @@ ;; Orgs Dropdown - [:> organizations-selector-dropdown* {:show show-orgs-menu? - :on-close close-orgs-menu - :id "organizations-list" - :class (stl/css :dropdown :teams-dropdown) - :organization current-org - :profile profile - :organizations (vals orgs)}] + (when show-orgs-menu? + (let [rect (deref orgs-rect*)] + (mf/portal + (mf/html + [:div {:style {:position "fixed" + :top (dm/str (:top rect) "px") + :left (dm/str (:left rect) "px") + :width (dm/str (:width rect) "px")}} + [:> organizations-selector-dropdown* {:show true + :on-close close-orgs-menu + :id "organizations-list" + :class (stl/css :dropdown :teams-dropdown) + :organization current-org + :profile profile + :organizations (vals orgs)}]]) + orgs-portal-container))) ;; Orgs options [:> org-options-dropdown* {:show show-org-options-menu? :on-close close-org-options-menu From 121c76235f7d9aa8f52fcddb4bbf88be0c4d2edc Mon Sep 17 00:00:00 2001 From: Ricardo Sawir <37329575+sawirricardo@users.noreply.github.com> Date: Tue, 23 Jun 2026 16:12:05 +0700 Subject: [PATCH 012/229] :bug: Fix zh-CN boolean intersection label (#10381) Update the Simplified Chinese translation for the boolean intersection menu item so it no longer duplicates the difference label. --- frontend/translations/zh_CN.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/translations/zh_CN.po b/frontend/translations/zh_CN.po index e7f740f919..3f51e0f199 100644 --- a/frontend/translations/zh_CN.po +++ b/frontend/translations/zh_CN.po @@ -6616,7 +6616,7 @@ msgstr "显示/隐藏界面" #: src/app/main/ui/workspace/context_menu.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:95 msgid "workspace.shape.menu.intersection" -msgstr "差集" +msgstr "交集" #: src/app/main/ui/workspace/context_menu.cljs:500, src/app/main/ui/workspace/sidebar/layer_item.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:271, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:324 msgid "workspace.shape.menu.lock" From 1b3a3b4cdbde4883770c92e60c2f35a76cd15e2b Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 23 Jun 2026 11:27:38 +0200 Subject: [PATCH 013/229] :paperclip: Add auto-label and auto-project github workflow --- .github/workflows/auto-label.yml | 68 ++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 .github/workflows/auto-label.yml diff --git a/.github/workflows/auto-label.yml b/.github/workflows/auto-label.yml new file mode 100644 index 0000000000..c27b45a5a2 --- /dev/null +++ b/.github/workflows/auto-label.yml @@ -0,0 +1,68 @@ +name: Auto Label and Add to Project + +on: + issues: + types: [opened] + pull_request: + types: [opened] + +jobs: + triage: + runs-on: ubuntu-latest + steps: + - name: Process Issue or PR + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.PROJECT_TOKEN }} + script: | + // === 1. CONFIGURATION === + const PROJECT_NUMBER = 8; // <--- Replace with your project board number + const IS_ORG = true; // <--- Set to false if this is a personal project, true if an organization + const OWNER = context.repo.owner; + const REPO = context.repo.repo; + + const issueNumber = context.issue.number; + const isPR = !!context.payload.pull_request; + const contentId = isPR ? context.payload.pull_request.node_id : context.payload.issue.node_id; + + // Define your labels here + const labelToApply = 'needs triage'; + + // === 2. APPLY THE LABEL === + console.log(`Applying label "${labelToApply}" to ${isPR ? 'PR' : 'Issue'} #${issueNumber}...`); + await github.rest.issues.addLabels({ + issue_number: issueNumber, + owner: OWNER, + repo: REPO, + labels: [labelToApply] + }); + + // === 3. ADD TO PROJECT BOARD === + console.log(`Fetching Project #${PROJECT_NUMBER} ID...`); + const projectQuery = ` + query($owner: String!, $number: Int!) { + ${IS_ORG ? 'organization' : 'user'}(login: $owner) { + projectV2(number: $number) { + id + } + } + } + `; + + const projectRes = await github.graphql(projectQuery, { owner: OWNER, number: PROJECT_NUMBER }); + const projectId = IS_ORG ? projectRes.organization.projectV2.id : projectRes.user.projectV2.id; + + console.log(`Adding item to project board...`); + const addToProjectMutation = ` + mutation($projectId: ID!, $contentId: ID!) { + addProjectV2ItemById(input: {projectId: $projectId, contentId: $contentId}) { + item { + id + } + } + } + `; + + await github.graphql(addToProjectMutation, { projectId, contentId }); + console.log("Automation successfully completed!"); + From af83a0c7f718d16937549f902d506cbc9d7ee9ad Mon Sep 17 00:00:00 2001 From: Ingrid Pigueron Date: Tue, 23 Jun 2026 11:58:14 +0200 Subject: [PATCH 014/229] :globe_with_meridians: Add translations for: French Currently translated at 84.8% (2010 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr/ --- frontend/translations/fr.po | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/frontend/translations/fr.po b/frontend/translations/fr.po index 45e41e1aee..8d750346ac 100644 --- a/frontend/translations/fr.po +++ b/frontend/translations/fr.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-22 07:30+0000\n" -"Last-Translator: Unreal Vision \n" -"Language-Team: French " -"\n" +"PO-Revision-Date: 2026-06-23 10:01+0000\n" +"Last-Translator: Ingrid Pigueron \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -8687,3 +8687,19 @@ msgstr "Les versions auto-enregistrées seront conservées %s jours." #, unused msgid "workspace.viewport.click-to-close-path" msgstr "Cliquez pour fermer le chemin" + +#, unused +msgid "dashboard.change-org-modal.choose" +msgstr "Déplacer vers :" + +#, unused +msgid "dashboard.change-org-modal.select" +msgstr "Sélectionner une organisation" + +#: src/app/main/ui/dashboard/import.cljs:509 +msgid "dashboard.import.import-error.corrupt-file" +msgstr "Ce fichier semble endommagé." + +#: src/app/main/ui/dashboard/sidebar.cljs:348, src/app/main/ui/dashboard/sidebar.cljs:349, src/app/main/ui/dashboard/sidebar.cljs:761 +msgid "dashboard.my-teams" +msgstr "Mes équipes" From cf4fb8d4a2285a1bc4c5f7b4148b7bc8db551696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuz=20Ersen?= Date: Mon, 22 Jun 2026 12:39:24 +0200 Subject: [PATCH 015/229] :globe_with_meridians: Add translations for: Turkish Currently translated at 99.7% (2364 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/tr/ --- frontend/translations/tr.po | 138 +++++++++++++++++++++++++++++++++--- 1 file changed, 130 insertions(+), 8 deletions(-) diff --git a/frontend/translations/tr.po b/frontend/translations/tr.po index 84dfb3ef0c..f991a7ff96 100644 --- a/frontend/translations/tr.po +++ b/frontend/translations/tr.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-22 07:30+0000\n" +"PO-Revision-Date: 2026-06-23 10:01+0000\n" "Last-Translator: Oğuz Ersen \n" -"Language-Team: Turkish " -"\n" +"Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -2419,7 +2419,6 @@ msgid "inspect.tabs.styles.active-themes" msgstr "Etkin temalar" #: src/app/main/ui/inspect/styles/style_box.cljs:75 -#, fuzzy msgid "inspect.tabs.styles.copy-shorthand" msgstr "CSS kısaltmasını panoya kopyala" @@ -6071,7 +6070,6 @@ msgid "subscription.settings.success.dialog.title" msgstr "%s oldunuz!" #: src/app/main/ui/settings/subscription.cljs:655 -#, fuzzy msgid "subscription.settings.support-us-since" msgstr "Bu planla bizi şu zamandan beri destekliyorsunuz: %s" @@ -9368,7 +9366,6 @@ msgid "workspace.tokens.num-active-sets" msgstr "%s etkin küme" #: src/app/main/ui/workspace/tokens/management/token_pill.cljs:122 -#, fuzzy msgid "workspace.tokens.original-value" msgstr "Orijinal değer: %s" @@ -9439,7 +9436,6 @@ msgstr "" "adlandırılacak" #: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:87, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:296, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:489, src/app/main/ui/workspace/tokens/management/forms/controls/combobox.cljs:298, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:189, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:324, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:259, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:381, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:505, src/app/main/ui/workspace/tokens/management/token_pill.cljs:123 -#, fuzzy msgid "workspace.tokens.resolved-value" msgstr "Çözülen değer: %s" @@ -9574,7 +9570,6 @@ msgid "workspace.tokens.themes-list" msgstr "Tema listesi" #: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:334, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:335 -#, fuzzy msgid "workspace.tokens.token-description" msgstr "Açıklama" @@ -10016,3 +10011,130 @@ msgstr "Otomatik kaydedilen sürümler %s gün boyunca saklanacaktır." #, unused msgid "workspace.viewport.click-to-close-path" msgstr "Yolu kapatmak için tıklayın" + +#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 +msgid "auth.check-email" +msgstr "E-posta kutunuza bakın!" + +#: src/app/main/ui/auth/register.cljs:238 +msgid "auth.verification-sent-email" +msgstr "Şu adrese bir doğrulama e-postası gönderdik:" + +#: src/app/main/ui/inspect/attributes/blur.cljs:30, src/app/main/ui/inspect/styles/style_box.cljs:32, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:262, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:274 +msgid "labels.blur-effects" +msgstr "Bulanıklık efektleri" + +#: src/app/main/ui/onboarding/questions.cljs:220 +msgid "onboarding.questions.team-size.2-100" +msgstr "2 - 100" + +#: src/app/main/ui/onboarding/questions.cljs:224 +msgid "onboarding.questions.team-size.501-1000" +msgstr "501 - 1000" + +#: src/app/main/ui/onboarding/questions.cljs:218 +msgid "onboarding.questions.team-size.just-me" +msgstr "Yalnızca ben" + +#: src/app/main/ui/onboarding/questions.cljs:228 +msgid "onboarding.questions.team-size.more-than-5001" +msgstr "5001 ve üzeri" + +#: src/app/main/ui/dashboard/subscription.cljs:229 +msgid "subscription.dashboard.banner.renew" +msgstr "Yenile" + +#: src/app/main/ui/dashboard/subscription.cljs:216 +msgid "subscription.dashboard.banner.renew-subscription" +msgstr "Aboneliğinizi yenileyin" + +#: src/app/main/ui/dashboard/subscription.cljs:222 +msgid "subscription.dashboard.banner.subscription-expire-days" +msgstr "Kurumsal aboneliğinizin süresi %s gün sonra dolacak (%s)" + +#: src/app/main/ui/dashboard/subscription.cljs:220 +msgid "subscription.dashboard.banner.subscription-expired" +msgstr "Kurumsal aboneliğinizin süresi doldu. (%s)" + +#: src/app/main/ui/workspace/main_menu.cljs:421 +msgid "workspace.header.menu.hide-comments" +msgstr "Yorumları gizle" + +#: src/app/main/ui/workspace/main_menu.cljs:422 +msgid "workspace.header.menu.show-comments" +msgstr "Yorumları göster" + +#: src/app/main/ui/workspace/colorpicker/libraries.cljs:354 +msgid "workspace.libraries.colors.add-library-color" +msgstr "Kütüphaneye renk ekle" + +#: src/app/main/ui/workspace/colorpicker/libraries.cljs:371, src/app/main/ui/workspace/colorpicker/libraries.cljs:387 +msgid "workspace.libraries.colors.empty-recent-colors" +msgstr "Henüz son kullanılan renkler yok" + +#: src/app/main/ui/workspace/colorpicker/libraries.cljs:336 +msgid "workspace.libraries.colors.toggle-color-palette" +msgstr "Renk paletini değiştir" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs +#, unused +msgid "workspace.options.blur-effects-options.title" +msgstr "Bulanıklık efektleri" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:273 +msgid "workspace.options.blur-effects-options.title.group" +msgstr "Grup bulanıklık efektleri" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:272 +msgid "workspace.options.blur-effects-options.title.multiple" +msgstr "Seçim bulanıklık efektleri" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:153 +msgid "workspace.options.blur-options.disabled-blur-label" +msgstr "" +"Arka plan bulanıklığı yalnızca yeni görselleştirmede desteklenir. Bu efekti " +"kullanmak için Tercihler menüsünden yeni görselleştirmeye geçin" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:138 +msgid "workspace.options.blur-options.toggle-more-options" +msgstr "Daha fazla seçenek göster/gizle" + +#, unused +msgid "workspace.toast.comments-hidden" +msgstr "Yorumlar gizlendi" + +#, unused +msgid "workspace.toast.comments-visible" +msgstr "Yorumlar görünür" + +#: src/app/main/ui/workspace/top_toolbar.cljs:65, src/app/main/ui/workspace/top_toolbar.cljs:66, src/app/main/ui/workspace/top_toolbar.cljs:77 +msgid "workspace.toolbar.mcp" +msgstr "MCP" + +#: src/app/main/ui/workspace/top_toolbar.cljs:87 +msgid "workspace.toolbar.mcp-connect-here" +msgstr "Buradan bağlanın" + +#: src/app/main/ui/workspace/top_toolbar.cljs:84 +msgid "workspace.toolbar.mcp-connected" +msgstr "MCP bağlandı" + +#: src/app/main/ui/workspace/palette.cljs:166 +msgid "workspace.toolbar.palette-bar" +msgstr "Palet çubuğu" + +#: src/app/main/data/workspace/tokens/errors.cljs:49 +msgid "errors.tokens.circular-reference" +msgstr "Tokende döngüsel referans var" + +#: src/app/main/ui/onboarding/questions.cljs:226 +msgid "onboarding.questions.team-size.1001-5000" +msgstr "1001 - 5000" + +#: src/app/main/ui/onboarding/questions.cljs:222 +msgid "onboarding.questions.team-size.101-500" +msgstr "101 - 500" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:144 +msgid "workspace.options.blur-options.blur-type-select" +msgstr "Bulanıklık türü seçimi" From 30be0cae718397a4be3344040cc69303a574e48c Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Mon, 22 Jun 2026 11:30:20 +0200 Subject: [PATCH 016/229] :globe_with_meridians: Add translations for: Hebrew Currently translated at 85.0% (2016 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/he/ --- frontend/translations/he.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/translations/he.po b/frontend/translations/he.po index 9f91b1f22c..691d4e25e3 100644 --- a/frontend/translations/he.po +++ b/frontend/translations/he.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-22 07:30+0000\n" +"PO-Revision-Date: 2026-06-23 10:01+0000\n" "Last-Translator: Yaron Shahrabani \n" -"Language-Team: Hebrew " -"\n" +"Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -3930,7 +3930,7 @@ msgstr "מה גודל הצוות שלך?" #: src/app/main/ui/onboarding/questions.cljs:242 msgid "onboarding.questions.step3.title" -msgstr "נשמח לשמוע על העבודה שלך" +msgstr "מה גודל החברה שלך?" #: src/app/main/ui/onboarding/questions.cljs:300 msgid "onboarding.questions.step4.title" From 1a88864cbb29568cd6e0d4903e60927d7c155084 Mon Sep 17 00:00:00 2001 From: Stephan Paternotte Date: Tue, 23 Jun 2026 12:01:27 +0200 Subject: [PATCH 017/229] :globe_with_meridians: Add translations for: Dutch Currently translated at 86.6% (2053 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/nl/ --- frontend/translations/nl.po | 160 ++++++++++++++++++++++++++++++++++-- 1 file changed, 154 insertions(+), 6 deletions(-) diff --git a/frontend/translations/nl.po b/frontend/translations/nl.po index 24c6f0ffda..51c60edadb 100644 --- a/frontend/translations/nl.po +++ b/frontend/translations/nl.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-22 07:30+0000\n" -"Last-Translator: Sebastiaan Pasma \n" -"Language-Team: Dutch " -"\n" +"PO-Revision-Date: 2026-06-23 10:01+0000\n" +"Last-Translator: Stephan Paternotte \n" +"Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -4300,7 +4300,7 @@ msgstr "Aftrekken (Booleaans verschil)" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87 msgid "shortcuts.bool-exclude" -msgstr "Uitsluiten" +msgstr "Uitsluiting" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88 msgid "shortcuts.bool-intersection" @@ -7620,7 +7620,7 @@ msgstr "Gebruikersinterface tonen/verbergen" #: src/app/main/ui/workspace/context_menu.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:95 msgid "workspace.shape.menu.intersection" -msgstr "Kruispunt" +msgstr "Doorsnede" #: src/app/main/ui/workspace/context_menu.cljs:500, src/app/main/ui/workspace/sidebar/layer_item.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:271, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:324 msgid "workspace.shape.menu.lock" @@ -8705,3 +8705,151 @@ msgstr "Automatisch opgeslagen versies worden %s dagen bewaard." #, unused msgid "workspace.viewport.click-to-close-path" msgstr "Klik om het pad te sluiten" + +#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 +msgid "auth.check-email" +msgstr "Controleer je e-mail!" + +#: src/app/main/ui/auth/verify_token.cljs:53 +msgid "auth.notifications.org-invitation-accepted" +msgstr "Je maakt nu deel uit van %s" + +#: src/app/main/ui/auth/register.cljs:238 +msgid "auth.verification-sent-email" +msgstr "We hebben een verificatie-e-mail gestuurd naar:" + +#: src/app/main/data/nitrate.cljs:165 +msgid "dasboard.leave-org.toast" +msgstr "Je maakt geen deel meer uit van de organisatie %s." + +#, unused +msgid "dashboard.change-org-modal.accept" +msgstr "TEAM VERPLAATSEN" + +#, unused +msgid "dashboard.change-org-modal.choose" +msgstr "Verplaatsen naar:" + +#, unused +msgid "dashboard.change-org-modal.select" +msgstr "Kies een organisatie" + +#, unused +msgid "dashboard.change-org-modal.text" +msgstr "" +"Projecten en bestanden blijven beschikbaar voor teamleden. Het team krijgt " +"de configuratie van de nieuwe organisatie." + +#: src/app/main/data/nitrate.cljs:399, src/app/main/ui/dashboard/team_form.cljs:157 +msgid "dashboard.change-org-modal.title" +msgstr "De organisatie van het team wijzigen" + +#: src/app/main/ui/dashboard/sidebar.cljs:376 +msgid "dashboard.go-to-admin-console" +msgstr "Ga naar het Beheerderspaneel" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:59 +msgid "nitrate.form.enterprise-feature-2" +msgstr "" +"Gecentraliseerde controle over wie wat doet en waar, vanuit een speciaal " +"beheerderspaneel" + +#: src/app/main/ui/dashboard/import.cljs:505 +msgid "dashboard.import.import-error.check-error" +msgstr "We konden dit bestand niet verifiëren." + +#: src/app/main/ui/dashboard/import.cljs:509 +msgid "dashboard.import.import-error.corrupt-file" +msgstr "Dit bestand lijkt beschadigd te zijn." + +#: src/app/main/ui/dashboard/import.cljs:512 +msgid "dashboard.import.import-error.unknown-error" +msgstr "Er ging iets mis bij de verwerking van dit bestand." + +#: src/app/main/ui/dashboard/team.cljs:831, src/app/main/ui/dashboard/team.cljs:1136 +msgid "dashboard.invitations.no-permission" +msgstr "" +"Je hebt geen toestemming om mensen uit te nodigen om zich bij dit team aan " +"te sluiten of om uitnodigingen te bewerken of te verwijderen." + +#: src/app/main/ui/dashboard/sidebar.cljs:671 +msgid "dashboard.leave-org" +msgstr "Org verlaten" + +#: src/app/main/ui/dashboard/sidebar.cljs:348, src/app/main/ui/dashboard/sidebar.cljs:349, src/app/main/ui/dashboard/sidebar.cljs:761 +msgid "dashboard.my-teams" +msgstr "Mijn teams" + +#: src/app/main/ui/dashboard/team_form.cljs:156 +msgid "dashboard.no-org-allows-create-team.message" +msgstr "" +"Je hebt geen toestemming om teams toe te voegen aan een van je organisaties." + +#: src/app/main/ui/dashboard/team_form.cljs:152 +msgid "dashboard.no-permission-create-team.message" +msgstr "" +"Je mag geen teams aanmaken binnen organisatie %s. Neem voor meer informatie " +"contact op met de eigenaar van de organisatie." + +#: src/app/main/ui/dashboard/team_form.cljs:154 +msgid "dashboard.no-permission-delete-team.message" +msgstr "" +"Je mag geen teams verwijderen die deel uitmaken van organisatie %s. Neem " +"voor meer informatie contact op met de eigenaar van de organisatie." + +#: src/app/main/ui/dashboard/team_form.cljs:158 +msgid "dashboard.no-permission-move-team.message" +msgstr "" +"Je mag geen teams verplaatsen die deel uitmaken van organisatie %s. Neem " +"voor meer informatie contact op met de eigenaar van de organisatie." + +#: src/app/main/data/dashboard.cljs:753 +msgid "dashboard.org-deleted" +msgstr "De organisatie %s is verwijderd." + +#: src/app/main/ui/dashboard/sidebar.cljs:798 +msgid "dashboard.plus-create-new-org" +msgstr "+ Org aanmaken" + +#: src/app/main/ui/dashboard/sidebar.cljs:354 +msgid "dashboard.section.organizations" +msgstr "Organizaties" + +#, unused +msgid "dashboard.select-org-modal.accept" +msgstr "TOEVOEGEN AAN ORGANISATIE" + +#, unused +msgid "dashboard.select-org-modal.choose" +msgstr "Kies een organisatie:" + +#: src/app/main/ui/dashboard/team.cljs:975 +msgid "dashboard.select-org-modal.external-invitations-warning" +msgstr "" +"\"%s\" staat alleen organisatieleden toe om zich bij zijn teams aan te " +"sluiten. Eventuele openstaande uitnodigingen aan mensen buiten de " +"organisatie worden ingetrokken." + +#: src/app/main/ui/dashboard/team.cljs:971 +msgid "dashboard.select-org-modal.external-invitations-will-be-canceled" +msgstr "Uitstaande uitnodigingen aan externe gebruikers worden geannuleerd." + +#, unused +msgid "dashboard.select-org-modal.permission-info" +msgstr "Hier vind je al je organisaties waar je teams mag maken of toevoegen." + +#, unused +msgid "dashboard.select-org-modal.select" +msgstr "Kies een organisatie" + +#: src/app/main/data/nitrate.cljs:342, src/app/main/ui/dashboard/team_form.cljs:155 +msgid "dashboard.select-org-modal.title" +msgstr "Team toevoegen aan een organisatie" + +#, unused +msgid "dashboard.team-belong-org" +msgstr "Dit team behoort nu tot %s" + +#, unused +msgid "dashboard.team-no-longer-belong-org" +msgstr "Dit team behoort niet meer tot de organisatie %s" From 8fa15f240f541fe878971f75645a598706118196 Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Wed, 24 Jun 2026 10:02:13 +0200 Subject: [PATCH 018/229] :sparkles: Check for nitrate sso on move team to another organization (#10379) --- backend/src/app/auth/oidc.clj | 5 +- backend/src/app/nitrate.clj | 275 ++++++++++--------- backend/src/app/rpc.clj | 51 ++-- backend/src/app/rpc/commands/nitrate.clj | 37 +-- frontend/src/app/main/data/nitrate.cljs | 65 ++--- frontend/src/app/main/ui.cljs | 14 +- frontend/src/app/main/ui/dashboard.cljs | 18 +- frontend/src/app/main/ui/dashboard/team.cljs | 6 +- frontend/src/app/util/dom.cljs | 38 ++- frontend/src/app/util/session_state.cljs | 29 ++ 10 files changed, 316 insertions(+), 222 deletions(-) create mode 100644 frontend/src/app/util/session_state.cljs diff --git a/backend/src/app/auth/oidc.clj b/backend/src/app/auth/oidc.clj index d72efa811d..286ff3be45 100644 --- a/backend/src/app/auth/oidc.clj +++ b/backend/src/app/auth/oidc.clj @@ -805,9 +805,8 @@ ;; Org SSO flow: state carries :dest-url — exchange the authorization ;; code with the OIDC provider to verify authentication actually occurred. (if-let [dest-url (:dest-url state)] - (let [team-id (:team-id state) - organization-id (:organization-id state) - sso (nitrate/call cfg :get-org-sso-by-team {:team-id team-id}) + (let [organization-id (:organization-id state) + sso (nitrate/call cfg :get-org-sso {:organization-id organization-id}) provider (prepare-org-sso-provider cfg sso) ;; verify token or throw error _info (get-info cfg provider state code) diff --git a/backend/src/app/nitrate.clj b/backend/src/app/nitrate.clj index b5f63add0e..3da69d29a1 100644 --- a/backend/src/app/nitrate.clj +++ b/backend/src/app/nitrate.clj @@ -15,6 +15,7 @@ [app.common.schema.generators :as sg] [app.common.time :as ct] [app.common.types.organization :as cto] + [app.common.uri :as u] [app.config :as cf] [app.http.client :as http] [app.http.session :as session] @@ -27,6 +28,22 @@ ;; HELPERS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defn- join-base-uri + [base-uri & segments] + (apply u/join (u/ensure-path-slash base-uri) segments)) + +(defn- generate-nitrate-uri + "Joins relative path segments to the Nitrate backend URI. + Segments must not start with `/`" + [& segments] + (apply join-base-uri (cf/get :nitrate-backend-uri) segments)) + +(defn- generate-public-uri + "Joins relative path segments to the public backend URI. + Segments must not start with `/`" + [& segments] + (apply join-base-uri (cf/get :public-uri) segments)) + (defn- request-builder [cfg method uri shared-key profile-id request-params] (fn [] @@ -225,56 +242,49 @@ (defn- get-team-org-api [cfg {:keys [team-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :get - (str baseuri - "/api/teams/" - team-id) - cto/schema:team-with-organization params))) + (request-to-nitrate cfg :get + (generate-nitrate-uri "api/teams/" team-id) + cto/schema:team-with-organization params)) (defn- get-org-membership-api [cfg {:keys [profile-id organization-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :get - (str baseuri - "/api/organizations/" - organization-id - "/members/" - profile-id) - schema:profile-org params))) + (request-to-nitrate cfg :get + (generate-nitrate-uri + "api/organizations/" + organization-id + "members/" + profile-id) + schema:profile-org params)) (defn- get-org-membership-by-team-api [cfg {:keys [profile-id team-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :get - (str baseuri - "/api/teams/" - team-id - "/users/" - profile-id) - schema:profile-org params))) + (request-to-nitrate cfg :get + (generate-nitrate-uri + "api/teams/" + team-id + "users/" + profile-id) + schema:profile-org params)) (defn- get-org-summary-api [cfg {:keys [organization-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :get - (str baseuri - "/api/organizations/" - organization-id - "/summary") - schema:org-summary params))) + (request-to-nitrate cfg :get + (generate-nitrate-uri + "api/organizations/" + organization-id + "summary") + schema:org-summary params)) (defn- get-owned-orgs-api [cfg {:keys [profile-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :get - (str baseuri - "/api/users/" - profile-id - "/owned-organizations") - [:vector schema:org-summary] - params))) + (request-to-nitrate cfg :get + (generate-nitrate-uri + "api/users/" + profile-id + "owned-organizations") + [:vector schema:org-summary] + params)) (def ^:private schema:org-summary-counts [:map @@ -288,99 +298,87 @@ (defn- get-owned-orgs-summary-api [cfg {:keys [profile-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri) - orgs (request-to-nitrate cfg :get - (str baseuri - "/api/users/" - profile-id - "/owned-organizations-summary") - [:vector schema:org-summary-counts] - params)] + (let [orgs (request-to-nitrate cfg :get + (generate-nitrate-uri + "api/users/" + profile-id + "owned-organizations-summary") + [:vector schema:org-summary-counts] + params)] (mapv (fn [org] (if-let [logo-id (:logo-id org)] - (assoc org :custom-photo (str (cf/get :public-uri) "/assets/by-id/" logo-id)) + (assoc org :custom-photo (generate-public-uri "assets/by-id/" logo-id)) org)) orgs))) (defn- cleanup-deleted-penpot-user-api [cfg {:keys [profile-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :post - (str baseuri - "/api/users/" - profile-id - "/cleanup-after-deletion") - nil params))) + (request-to-nitrate cfg :post + (generate-nitrate-uri + "api/users/" + profile-id + "cleanup-after-deletion") + nil params)) (defn- set-team-org-api [cfg {:keys [organization-id team-id is-default] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri) - params (assoc params :request-params {:team-id team-id + (let [params (assoc params :request-params {:team-id team-id :is-your-penpot (true? is-default)}) team (request-to-nitrate cfg :post - (str baseuri - "/api/organizations/" - organization-id - "/add-team") + (generate-nitrate-uri + "api/organizations/" + organization-id + "add-team") cto/schema:team-with-organization params) custom-photo (when-let [logo-id (dm/get-in team [:organization :logo-id])] - (str (cf/get :public-uri) "/assets/by-id/" logo-id))] + (generate-public-uri "assets/by-id/" logo-id))] (cond-> team custom-photo (assoc-in [:organization :custom-photo] custom-photo)))) (defn- add-profile-to-org-api [cfg {:keys [profile-id organization-id team-id email] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri) - request-params (cond-> {:user-id profile-id :team-id team-id} + (let [request-params (cond-> {:user-id profile-id :team-id team-id} (some? email) (assoc :email email)) params (assoc params :request-params request-params)] (request-to-nitrate cfg :post - (str baseuri - "/api/organizations/" - organization-id - "/add-user") + (generate-nitrate-uri + "api/organizations/" + organization-id + "add-user") schema:profile-org params))) (defn- remove-profile-from-org-api [cfg {:keys [profile-id organization-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri) - params (assoc params :request-params {:user-id profile-id})] + (let [params (assoc params :request-params {:user-id profile-id})] (request-to-nitrate cfg :post - (str baseuri - "/api/organizations/" - organization-id - "/remove-user") + (generate-nitrate-uri + "api/organizations/" + organization-id + "remove-user") nil params))) (defn- remove-team-from-org-api [cfg {:keys [team-id organization-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri) - params (assoc params :request-params {:team-id team-id})] + (let [params (assoc params :request-params {:team-id team-id})] (request-to-nitrate cfg :post - (str baseuri - "/api/organizations/" - organization-id - "/remove-team") + (generate-nitrate-uri + "api/organizations/" + organization-id + "remove-team") nil params))) (defn- delete-team-api [cfg {:keys [team-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :delete - (str baseuri - "/api/teams/" - team-id) - nil params))) + (request-to-nitrate cfg :delete + (generate-nitrate-uri "api/teams/" team-id) + nil params)) (defn- get-subscription-api [cfg {:keys [profile-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :get - (str baseuri - "/api/subscriptions/" - profile-id) - schema:subscription params))) + (request-to-nitrate cfg :get + (generate-nitrate-uri "api/subscriptions/" profile-id) + schema:subscription params)) (def ^:private schema:subscription-warning [:maybe @@ -392,21 +390,16 @@ (defn- get-subscription-warning-api [cfg {:keys [penpot-id profile-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri) - penpot-id (or penpot-id profile-id)] + (let [penpot-id (or penpot-id profile-id)] (request-to-nitrate cfg :get - (str baseuri - "/api/subscription-warning/" - penpot-id) + (generate-nitrate-uri "api/subscription-warning/" penpot-id) schema:subscription-warning params))) (defn- get-connectivity-api [cfg params] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :get - (str baseuri - "/api/connectivity") - schema:connectivity params))) + (request-to-nitrate cfg :get + (generate-nitrate-uri "api/connectivity") + schema:connectivity params)) (def ^:private schema:redeem-result [:map @@ -414,17 +407,16 @@ (defn- get-org-permissions-api [cfg {:keys [organization-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :get - (str baseuri - "/api/organizations/" - organization-id - "/permissions") - [:map - [:organization-id ::sm/uuid] - [:owner-id ::sm/uuid] - [:permissions [:map-of :keyword :string]]] - params))) + (request-to-nitrate cfg :get + (generate-nitrate-uri + "api/organizations/" + organization-id + "permissions") + [:map + [:organization-id ::sm/uuid] + [:owner-id ::sm/uuid] + [:permissions [:map-of :keyword :string]]] + params)) (def ^:private schema:nitrate-sso [:map @@ -437,35 +429,40 @@ [:issuer [:maybe :string]] [:scopes [:maybe [::sm/set ::sm/text]]]]) +(defn- get-org-sso-api + "Fetches the SSO configuration for an organization from Nitrate." + [cfg {:keys [organization-id] :as params}] + (request-to-nitrate cfg :get + (generate-nitrate-uri + "api/organizations/" + organization-id + "sso") + schema:nitrate-sso + params)) + (defn- get-org-sso-by-team-api [cfg {:keys [team-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :get - (str baseuri - "/api/teams/" - team-id - "/sso") - schema:nitrate-sso - params))) + (request-to-nitrate cfg :get + (generate-nitrate-uri "api/teams/" team-id "sso") + schema:nitrate-sso + params)) (defn- get-org-members-api [cfg {:keys [organization-id] :as params}] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :get - (str baseuri - "/api/organizations/" - organization-id - "/members-list") - [:vector ::sm/uuid] - params))) + (request-to-nitrate cfg :get + (generate-nitrate-uri + "api/organizations/" + organization-id + "members-list") + [:vector ::sm/uuid] + params)) (defn- redeem-activation-code-api [cfg params] - (let [baseuri (cf/get :nitrate-backend-uri)] - (request-to-nitrate cfg :post - (str baseuri "/api/activation-codes/redeem") - schema:redeem-result - (assoc params :throw-on-error? true)))) + (request-to-nitrate cfg :post + (generate-nitrate-uri "api/activation-codes/redeem") + schema:redeem-result + (assoc params :throw-on-error? true))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; INITIALIZATION @@ -487,6 +484,7 @@ :remove-profile-from-org (partial remove-profile-from-org-api cfg) :get-org-permissions (partial get-org-permissions-api cfg) :get-org-sso-by-team (partial get-org-sso-by-team-api cfg) + :get-org-sso (partial get-org-sso-api cfg) :delete-team (partial delete-team-api cfg) :remove-team-from-org (partial remove-team-from-org-api cfg) :get-subscription (partial get-subscription-api cfg) @@ -499,11 +497,14 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defn sso-session-authorized? - "Fetches the org-SSO config for the given team and checks whether - the HTTP request has a valid session entry for it. Returns a map + "Fetches the org-SSO config for the given organization or team and checks + whether the HTTP request has a valid session entry for it. Returns a map with :authorized and :sso keys." - [cfg team-id request] - (let [session (session/get-session request) sso (call cfg :get-org-sso-by-team {:team-id team-id})] + [cfg organization-id team-id request] + (let [session (session/get-session request) + sso (if organization-id + (call cfg :get-org-sso {:organization-id organization-id}) + (call cfg :get-org-sso-by-team {:team-id team-id}))] (if-not (:active sso) {:authorized true :sso sso} (if (or (:issuer sso) (:base-url sso)) @@ -549,7 +550,7 @@ (if (some? org) (-> (cto/apply-organization team (assoc org :custom-photo (when-let [logo-id (:logo-id org)] - (str (cf/get :public-uri) "/assets/by-id/" logo-id)))) + (generate-public-uri "assets/by-id/" logo-id)))) (assoc :is-default (or (:is-default team) (true? (:is-your-penpot team-with-org))))) team)) (catch Throwable cause diff --git a/backend/src/app/rpc.clj b/backend/src/app/rpc.clj index d950d34e62..c99a9210a1 100644 --- a/backend/src/app/rpc.clj +++ b/backend/src/app/rpc.clj @@ -223,15 +223,16 @@ (defn- wrap-nitrate-sso "Enforce Nitrate organization SSO authentication for RPC handlers. - Resolves the team context from request params using priority order: - 1. Explicit :team-id param - 2. Explicit :project-id param → lookup project.team_id - 3. Explicit :file-id param → lookup file's team via join - 4. :id param dispatched by ::rpc/id-type metadata (:team, :project, or :file) + Resolves the organization/team context from request params using priority order: + 1. Explicit :organization-id param + 2. Explicit :team-id param + 3. Explicit :project-id param -> lookup project.team_id + 4. Explicit :file-id param -> lookup file's team via join + 5. :id param dispatched by ::rpc/id-type metadata (:team, :project, or :file) - Once team-id is resolved, checks if the user is authorized within that org's SSO - session using nitrate/sso-session-authorized?. Results are cached by [profile-id cache-ref] - for 15 minutes to avoid repeated lookups. + Once the context is resolved, checks if the user is authorized within that org's + SSO session using nitrate/sso-session-authorized?. Authorized results are cached + by [profile-id cache-ref] for 15 minutes to avoid repeated lookups. Only activates when: - Nitrate flag is enabled @@ -245,27 +246,31 @@ (::nitrate/sso mdata true)) (fn [cfg params] ;; Resolve team/project/file from explicit keys or from :id via metadata - (let [id-type (::id-type mdata) - id (uuid/coerce (:id params)) - team-id (or (uuid/coerce (:team-id params)) - (when (= id-type :team) id)) - project-id (or (uuid/coerce (:project-id params)) - (when (= id-type :project) id)) - file-id (or (uuid/coerce (:file-id params)) - (when (= id-type :file) id))] - (if (or team-id project-id file-id) - (let [cache-ref (or team-id project-id file-id) + (let [organization-id (uuid/coerce (:organization-id params)) + id-type (::id-type mdata) + id (uuid/coerce (:id params)) + team-id (or (uuid/coerce (:team-id params)) + (when (= id-type :team) id)) + project-id (or (uuid/coerce (:project-id params)) + (when (= id-type :project) id)) + file-id (or (uuid/coerce (:file-id params)) + (when (= id-type :file) id))] + (if (or organization-id team-id project-id file-id) + (let [cache-ref (or organization-id team-id project-id file-id) profile-id (::profile-id params) cache-key [profile-id cache-ref] cached (cache/get org-sso-auth-cache cache-key) result (if (some? cached) cached - (let [team-id (or team-id - (when project-id - (:team-id (db/get-by-id cfg :project project-id {:columns [:id :team-id]}))) - (:id (teams/get-team-for-file cfg file-id))) + (let [team-id (when-not organization-id + (or team-id + (when project-id + (:team-id (db/get-by-id cfg :project project-id {:columns [:id :team-id]}))) + (:id (teams/get-team-for-file cfg file-id)))) request (-> (meta params) (get ::http/request)) - {:keys [authorized sso]} (nitrate/sso-session-authorized? cfg team-id request) + {:keys [authorized sso]} (if organization-id + (nitrate/sso-session-authorized? cfg organization-id nil request) + (nitrate/sso-session-authorized? cfg nil team-id request)) entry {:authorized authorized :organization-id (:organization-id sso)}] (when authorized diff --git a/backend/src/app/rpc/commands/nitrate.clj b/backend/src/app/rpc/commands/nitrate.clj index f7cbe5cb4f..cbd64ad43f 100644 --- a/backend/src/app/rpc/commands/nitrate.clj +++ b/backend/src/app/rpc/commands/nitrate.clj @@ -444,7 +444,7 @@ ::doc/added "2.17" ::sm/params schema:add-team-to-organization ::db/transaction true} - [cfg {:keys [::rpc/profile-id team-id organization-id]}] + [cfg {:keys [::rpc/profile-id team-id organization-id]}] (assert-is-owner cfg profile-id team-id) (assert-not-default-team cfg team-id) @@ -621,13 +621,17 @@ (def ^:private schema:check-nitrate-sso - [:map {:title "AuthSsoParams"} - [:team-id ::sm/uuid] - [:url ::sm/uri]]) + [:and + [:map {:title "CheckNitrateSsoParams"} + [:team-id {:optional true} ::sm/uuid] + [:organization-id {:optional true} ::sm/uuid] + [:url ::sm/uri]] + [::sm/contains-any #{:team-id :organization-id}]]) (sv/defmethod ::check-nitrate-sso "Check if a user needs to login into the organization SSO. - Returns {:authorized true} when SSO is not active for the team. + Accepts either team-id (to look up the org via the team) or organization-id directly. + Returns {:authorized true} when SSO is not active. Returns {:authorized false :redirect-uri } when SSO is active; the client must redirect there. The OIDC provider itself handles re-authentication transparently if the user already has an active SSO session." @@ -635,22 +639,21 @@ ::doc/added "2.19" ::sm/params schema:check-nitrate-sso ::nitrate/sso false} - [cfg {:keys [team-id url] :as params}] + [cfg {:keys [team-id organization-id url] :as params}] (if (contains? cf/flags :nitrate) - (let [request (rph/get-request params) - {:keys [authorized sso]} (nitrate/sso-session-authorized? cfg team-id request)] + (let [request (rph/get-request params) + {:keys [authorized sso]} (nitrate/sso-session-authorized? cfg organization-id team-id request)] (if authorized {:authorized true} (if-let [issuer (or (:issuer sso) (:base-url sso))] - (let [oidc-provider (oidc/prepare-org-sso-provider cfg sso) - organization-id (:organization-id sso) - state-token (tokens/generate cfg {:iss "oidc" - :dest-url url - :team-id team-id - :organization-id organization-id - :issuer issuer - :exp (ct/in-future "4h")}) - redirect-uri (oidc/build-auth-redirect-uri oidc-provider state-token)] + (let [oidc-provider (oidc/prepare-org-sso-provider cfg sso) + org-id (or organization-id (:organization-id sso)) + state-token (tokens/generate cfg {:iss "oidc" + :dest-url url + :organization-id org-id + :issuer issuer + :exp (ct/in-future "4h")}) + redirect-uri (oidc/build-auth-redirect-uri oidc-provider state-token)] {:authorized false :redirect-uri redirect-uri}) {:authorized false diff --git a/frontend/src/app/main/data/nitrate.cljs b/frontend/src/app/main/data/nitrate.cljs index 033d3525d0..5abc969155 100644 --- a/frontend/src/app/main/data/nitrate.cljs +++ b/frontend/src/app/main/data/nitrate.cljs @@ -3,6 +3,7 @@ [app.common.data.macros :as dm] [app.common.types.nitrate-permissions :as nitrate-perms] [app.common.uri :as u] + [app.common.uuid :as uuid] [app.config :as cf] [app.main.data.common :as dcm] [app.main.data.modal :as modal] @@ -11,10 +12,11 @@ [app.main.repo :as rp] [app.main.router :as rt] [app.main.store :as st] + [app.util.dom :as dom] [app.util.i18n :refer [tr]] + [app.util.session-state :as ss] [app.util.storage :as storage] [beicon.v2.core :as rx] - [cuerdas.core :as str] [potok.v2.core :as ptk])) (def ^:private nitrate-entry-active-key ::nitrate-entry-active) @@ -90,28 +92,12 @@ (def nitrate-checkout-finish-error-token "nitrate-checkout-finish-error") (def nitrate-checkout-cancelled-token "nitrate-checkout-cancelled") -(defn- append-query-param - [url key value] - (let [assoc-q (fn [u] - (update u :query - (fn [q] - (-> (u/query-string->map (or q "")) - (assoc (name key) value) - u/map->query-string)))) - parsed (u/uri url) - fragment (:fragment parsed)] - (if (str/blank? fragment) - (str (assoc-q parsed)) - (-> parsed - (assoc :fragment (str (assoc-q (u/parse fragment)))) - str)))) - (defn build-nitrate-callback-urls "Build the success/error/cancel callback URLs from a base URL by appending a `subscription` query param identifying the outcome." [base-url] (let [build (fn [token] - (append-query-param base-url :subscription token))] + (dom/append-query-param base-url :subscription token))] {:success-callback (build "subscribed-to-penpot-nitrate") :error-callback (build nitrate-checkout-error-token) :finish-error-callback (build nitrate-checkout-finish-error-token) @@ -261,15 +247,32 @@ (modal/show :no-permission-modal {:type :no-orgs-change})))))))))) -(defn add-team-to-org - [{:keys [team-id organization-id] :as params}] - (ptk/reify ::add-team-to-org +(defn add-team-to-organization + "Adds a team to an organization after checking whether the target + organization requires a fresh Nitrate SSO session. When SSO is required, + stores the pending action and redirects to the provider so the dashboard + can resume the operation after the callback." + [{:keys [team-id organization-id]}] + (ptk/reify ::add-team-to-organization ptk/WatchEvent (watch [_ _ _] - (->> (rp/cmd! ::add-team-to-organization {:team-id team-id :organization-id organization-id}) - (rx/mapcat - (fn [_] - (rx/of (modal/hide)))))))) + (let [pending-id (str (uuid/next)) + callback-url (dom/append-query-param (rt/get-current-href) + :pending-action-id pending-id)] + (->> (rp/cmd! :check-nitrate-sso {:organization-id organization-id :url callback-url}) + (rx/mapcat + (fn [{:keys [authorized redirect-uri]}] + (if authorized + (->> (rp/cmd! ::add-team-to-organization {:team-id team-id :organization-id organization-id}) + (rx/map (fn [_] (modal/hide)))) + (if redirect-uri + (do + (ss/save-pending-action! pending-id {:type :add-team-to-organization + :team-id team-id + :organization-id organization-id}) + (rx/of (rt/nav-raw :uri (str redirect-uri)))) + (rx/empty)))))))))) + (defn- fetch-orgs-allowed "Returns an rx observable of an `orgs-allowed` map (org-id -> boolean). @@ -286,12 +289,12 @@ (merge (into {} (map (fn [org] [(:id org) true])) add-anybody-orgs) checked-orgs))))))) -(defn show-add-team-to-org-modal +(defn show-add-team-to-organization-modal "Fetches fresh team/org data, then shows the add-to-org modal restricted to orgs where the user has permission, or the no-permission modal if none qualify." [{:keys [team-id]}] - (ptk/reify ::show-add-team-to-org-modal + (ptk/reify ::show-add-team-to-organization-modal ptk/WatchEvent (watch [_ state _] (let [profile-id (dm/get-in state [:profile :id])] @@ -306,8 +309,8 @@ (or (= perm "any") is-own?))) all-orgs) team (first (filter #(= (:id %) team-id) teams)) on-confirm (fn [organization-id] - (st/emit! (add-team-to-org {:team-id team-id - :organization-id organization-id}))) + (st/emit! (add-team-to-organization {:team-id team-id + :organization-id organization-id}))) show-select-modal (fn [orgs-allowed] (let [has-filtered? (< (count orgs) (count all-orgs)) @@ -377,8 +380,8 @@ orgs (filter can-create? orgs-by-move) selectable-orgs (remove #(= current-org-id (:id %)) orgs) on-confirm (fn [organization-id] - (st/emit! (add-team-to-org {:team-id team-id - :organization-id organization-id})))] + (st/emit! (add-team-to-organization {:team-id team-id + :organization-id organization-id})))] (if (empty? selectable-orgs) (rx/of (dt/teams-fetched teams) (modal/show :no-permission-modal {:type :no-orgs-change})) diff --git a/frontend/src/app/main/ui.cljs b/frontend/src/app/main/ui.cljs index 157ae24d9b..d3216efd70 100644 --- a/frontend/src/app/main/ui.cljs +++ b/frontend/src/app/main/ui.cljs @@ -229,11 +229,12 @@ :dashboard-settings :dashboard-deleted) (let [params (get params :query) - team-id (some-> params :team-id uuid/parse*) - project-id (some-> params :project-id uuid/parse*) - search-term (some-> params :search-term) - plugin-url (some-> params :plugin) - template (some-> params :template)] + team-id (some-> params :team-id uuid/parse*) + project-id (some-> params :project-id uuid/parse*) + search-term (some-> params :search-term) + plugin-url (some-> params :plugin) + template (some-> params :template) + pending-action-id (some-> params :pending-action-id uuid/parse*)] [:? #_[:& app.main.ui.releases/release-notes-modal {:version "2.5"}] #_[:& app.main.ui.onboarding/onboarding-templates-modal] @@ -257,7 +258,8 @@ :search-term search-term :plugin-url plugin-url :project-id project-id - :template template}]]]) + :template template + :pending-action-id pending-action-id}]]]) :workspace (let [params (get params :query) diff --git a/frontend/src/app/main/ui/dashboard.cljs b/frontend/src/app/main/ui/dashboard.cljs index bda371bd46..fb96681b6c 100644 --- a/frontend/src/app/main/ui/dashboard.cljs +++ b/frontend/src/app/main/ui/dashboard.cljs @@ -41,6 +41,7 @@ [app.util.i18n :refer [tr]] [app.util.keyboard :as kbd] [app.util.object :as obj] + [app.util.session-state :as ss] [app.util.storage :as storage] [beicon.v2.core :as rx] [cuerdas.core :as str] @@ -270,8 +271,22 @@ (st/emit! (dprof/update-profile-props {:onboarding-viewed true}) (dnt/show-nitrate-popup :nitrate-form))))) +(defn- use-pending-action + "Consumes a pending dashboard action from session storage and resumes it" + [pending-action-id] + (mf/with-effect [pending-action-id] + (when (some? pending-action-id) + (dom/replace-history-state! + (dom/remove-query-param (rt/get-current-href) :pending-action-id)) + (when-let [action (ss/consume-pending-action! (str pending-action-id))] + (case (:type action) + :add-team-to-organization + (st/emit! (dnt/add-team-to-organization {:team-id (:team-id action) + :organization-id (:organization-id action)})) + nil))))) + (mf/defc dashboard* - [{:keys [profile project-id team-id search-term plugin-url template section]}] + [{:keys [profile project-id team-id search-term plugin-url template section pending-action-id]}] (let [team (mf/deref refs/team) projects (mf/deref refs/projects) @@ -309,6 +324,7 @@ (use-plugin-register plugin-url team-id (:id default-project)) (use-templates-import can-edit? template default-project) (use-nitrate-entry-popup) + (use-pending-action pending-action-id) [:& (mf/provider ctx/current-project-id) {:value project-id} [:> modal-container*] diff --git a/frontend/src/app/main/ui/dashboard/team.cljs b/frontend/src/app/main/ui/dashboard/team.cljs index 8deb4e8b23..56df6cc5f1 100644 --- a/frontend/src/app/main/ui/dashboard/team.cljs +++ b/frontend/src/app/main/ui/dashboard/team.cljs @@ -1559,11 +1559,11 @@ (fn [] (st/emit! (dnt/show-remove-team-from-org-modal {:team-id (:id team)})))) - on-add-team-to-org + on-add-team-to-organization (mf/use-fn (mf/deps team) (fn [] - (st/emit! (dnt/show-add-team-to-org-modal {:team-id (:id team)})))) + (st/emit! (dnt/show-add-team-to-organization-modal {:team-id (:id team)})))) on-change-team-org (mf/use-fn @@ -1640,7 +1640,7 @@ (when can-add-to-organization? [:div {:class (stl/css :block-content)} [:span {:class (stl/css :block-text)} - [:a {:on-click on-add-team-to-org} (tr "dashboard.team-organization.add")]]])]))]) + [:a {:on-click on-add-team-to-organization} (tr "dashboard.team-organization.add")]]])]))]) [:div {:class (stl/css :block)} [:div {:class (stl/css :block-label)} diff --git a/frontend/src/app/util/dom.cljs b/frontend/src/app/util/dom.cljs index f4be22b6c9..faf5501f37 100644 --- a/frontend/src/app/util/dom.cljs +++ b/frontend/src/app/util/dom.cljs @@ -12,6 +12,7 @@ [app.common.geom.rect :as grc] [app.common.logging :as log] [app.common.media :as cm] + [app.common.uri :as u] [app.util.globals :as globals] [app.util.object :as obj] [app.util.webapi :as wapi] @@ -855,7 +856,42 @@ (defn browser-back [] - (.back (.-history js/window))) + (.back (.-history globals/window))) + +(defn replace-history-state! + "Replace the current browser history entry URL without triggering navigation." + [url] + (.replaceState (.-history globals/window) nil "" url)) + +(defn- update-query-params + "Apply `f` to the query-params map of `url`, returning the updated URL string. + Handles both plain query strings and fragment-based (hash) URLs." + [url f] + (let [transform (fn [parsed] + (update parsed :query + (fn [q] + (-> (u/query-string->map (or q "")) + f + u/map->query-string)))) + parsed (u/uri url) + fragment (:fragment parsed)] + (if (str/blank? fragment) + (str (transform parsed)) + (-> parsed + (assoc :fragment (str (transform (u/parse fragment)))) + str)))) + +(defn append-query-param + "Return a new URL string with the given query parameter added or replaced. + Handles both plain query strings and fragment-based (hash) URLs." + [url key value] + (update-query-params url #(assoc % key value))) + +(defn remove-query-param + "Return a new URL string with the given query parameter removed. + Handles both plain query strings and fragment-based (hash) URLs." + [url key] + (update-query-params url #(dissoc % key))) (defn reload-current-window ([] diff --git a/frontend/src/app/util/session_state.cljs b/frontend/src/app/util/session_state.cljs new file mode 100644 index 0000000000..d16f3b6779 --- /dev/null +++ b/frontend/src/app/util/session_state.cljs @@ -0,0 +1,29 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns app.util.session-state + "Helpers for persisting transient state in browser session storage + so it survives cross-origin redirects." + (:require + [app.util.storage :as storage])) + +(def ^:private pending-actions-key ::pending-actions) + +(defn save-pending-action! + "Persist an action map under `id` in the browser session." + [id data] + (binding [storage/*sync* true] + (swap! storage/session update pending-actions-key assoc id data))) + +(defn consume-pending-action! + "Read and remove the pending action stored under `id`. + Returns nil if not found." + [id] + (let [action (get-in @storage/session [pending-actions-key id])] + (when (some? action) + (binding [storage/*sync* true] + (swap! storage/session update pending-actions-key dissoc id))) + action)) From d757f966331bb945d4f5f5b1cc858353ba7086ff Mon Sep 17 00:00:00 2001 From: Dexterity <173429049+Dexterity104@users.noreply.github.com> Date: Wed, 24 Jun 2026 04:21:18 -0400 Subject: [PATCH 019/229] :recycle: Migrate svg filter components to modern syntax (#9448) Co-authored-by: Andrey Antukh --- frontend/src/app/main/ui/shapes/filters.cljs | 38 ++++++++++---------- frontend/src/app/main/ui/shapes/frame.cljs | 4 +-- frontend/src/app/main/ui/shapes/shape.cljs | 6 ++-- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/frontend/src/app/main/ui/shapes/filters.cljs b/frontend/src/app/main/ui/shapes/filters.cljs index 93feb1b8f4..9c3c9c3350 100644 --- a/frontend/src/app/main/ui/shapes/filters.cljs +++ b/frontend/src/app/main/ui/shapes/filters.cljs @@ -26,7 +26,7 @@ (= :layer-blur (-> shape :blur :type)))) (str/ffmt "url(#%)" filter-id))) -(mf/defc color-matrix +(mf/defc color-matrix* [{:keys [color]}] (let [{:keys [color opacity]} color [r g b a] (cc/hex->rgba color opacity) @@ -35,7 +35,7 @@ {:type "matrix" :values (str/ffmt "0 0 0 0 % 0 0 0 0 % 0 0 0 0 % 0 0 0 % 0" r g b a)}])) -(mf/defc drop-shadow-filter +(mf/defc drop-shadow-filter* [{:keys [filter-in filter-id params]}] (let [{:keys [color offset-x offset-y blur spread]} params] @@ -56,13 +56,13 @@ [:feOffset {:dx offset-x :dy offset-y}] [:feGaussianBlur {:stdDeviation (/ blur 2)}] - [:& color-matrix {:color color}] + [:> color-matrix* {:color color}] [:feBlend {:mode "normal" :in2 filter-in :result filter-id}]])) -(mf/defc inner-shadow-filter +(mf/defc inner-shadow-filter* [{:keys [filter-in filter-id params]}] (let [{:keys [color offset-x offset-y blur spread]} params] @@ -85,13 +85,13 @@ :k2 "-1" :k3 "1"}] - [:& color-matrix {:color color}] + [:> color-matrix* {:color color}] [:feBlend {:mode "normal" :in2 filter-in :result filter-id}]])) -(mf/defc background-blur-filter +(mf/defc background-blur-filter* [{:keys [filter-id params]}] [:* [:feGaussianBlur {:in "BackgroundImage" @@ -100,32 +100,32 @@ :operator "in" :result filter-id}]]) -(mf/defc layer-blur-filter +(mf/defc layer-blur-filter* [{:keys [filter-id params]}] [:feGaussianBlur {:stdDeviation (:value params) :result filter-id}]) -(mf/defc image-fix-filter [{:keys [filter-id]}] +(mf/defc image-fix-filter* [{:keys [filter-id]}] [:feFlood {:flood-opacity 0 :result filter-id}]) -(mf/defc blend-filters [{:keys [filter-id filter-in]}] +(mf/defc blend-filters* [{:keys [filter-id filter-in]}] [:feBlend {:mode "normal" :in "SourceGraphic" :in2 filter-in :result filter-id}]) -(mf/defc filter-entry [{:keys [entry]}] +(mf/defc filter-entry* [{:keys [entry]}] (let [props #js {:filter-id (:id entry) :filter-in (:filter-in entry) :params (:params entry)}] (case (:type entry) - :drop-shadow [:> drop-shadow-filter props] - :inner-shadow [:> inner-shadow-filter props] - :background-blur [:> background-blur-filter props] - :layer-blur [:> layer-blur-filter props] - :image-fix [:> image-fix-filter props] - :blend-filters [:> blend-filters props]))) + :drop-shadow [:> drop-shadow-filter* props] + :inner-shadow [:> inner-shadow-filter* props] + :background-blur [:> background-blur-filter* props] + :layer-blur [:> layer-blur-filter* props] + :image-fix [:> image-fix-filter* props] + :blend-filters [:> blend-filters* props]))) (defn change-filter-in "Adds the previous filter as `filter-in` parameter" @@ -160,7 +160,7 @@ filter-units "objectBoundingBox"] [filter-x filter-y filter-width filter-height filter-units]))) -(mf/defc filters +(mf/defc filters* [{:keys [filter-id shape]}] (let [shape' (update shape :shadow reverse) @@ -181,6 +181,6 @@ :filterUnits filter-units :color-interpolation-filters "sRGB"} (for [[index entry] (d/enumerate filters)] - [:& filter-entry {:key (dm/str filter-id "-" index) - :entry entry}])]))) + [:> filter-entry* {:key (dm/str filter-id "-" index) + :entry entry}])]))) diff --git a/frontend/src/app/main/ui/shapes/frame.cljs b/frontend/src/app/main/ui/shapes/frame.cljs index b95c887dd8..9b181c4caa 100644 --- a/frontend/src/app/main/ui/shapes/frame.cljs +++ b/frontend/src/app/main/ui/shapes/frame.cljs @@ -98,8 +98,8 @@ [:g.frame-container-wrapper {:opacity opacity} [:g.frame-container-blur {:filter filter-str-blur} [:defs - [:& filters/filters {:shape (dissoc shape :blur) :filter-id filter-id-shadows}] - [:& filters/filters {:shape (assoc shape :shadow []) :filter-id filter-id-blur}]] + [:> filters/filters* {:shape (dissoc shape :blur) :filter-id filter-id-shadows}] + [:> filters/filters* {:shape (assoc shape :shadow []) :filter-id filter-id-blur}]] ;; This need to be separated in two layers so the clip doesn't affect the shadow filters ;; otherwise the shadow will be clipped and not visible diff --git a/frontend/src/app/main/ui/shapes/shape.cljs b/frontend/src/app/main/ui/shapes/shape.cljs index 63048f3122..ad30274607 100644 --- a/frontend/src/app/main/ui/shapes/shape.cljs +++ b/frontend/src/app/main/ui/shapes/shape.cljs @@ -130,9 +130,9 @@ ;; The filters for frames should be setup inside the container. (when-not (cfh/frame-shape? shape) [:* - [:& filters/filters {:shape shape :filter-id filter-id}] - [:& filters/filters {:shape shape-without-blur :filter-id (dm/fmt "filter-shadow-%" render-id)}] - [:& filters/filters {:shape shape-without-shadows :filter-id (dm/fmt "filter-blur-%" render-id)}]]) + [:> filters/filters* {:shape shape :filter-id filter-id}] + [:> filters/filters* {:shape shape-without-blur :filter-id (dm/fmt "filter-shadow-%" render-id)}] + [:> filters/filters* {:shape shape-without-shadows :filter-id (dm/fmt "filter-blur-%" render-id)}]]) [:& frame/frame-clip-def {:shape shape :render-id render-id}] From a530cf0dec9a1c0bbb30ebd992a830e5b5de08b2 Mon Sep 17 00:00:00 2001 From: Dexterity <173429049+Dexterity104@users.noreply.github.com> Date: Wed, 24 Jun 2026 04:24:53 -0400 Subject: [PATCH 020/229] :recycle: Migrate render-wasm api object-svg to modern component syntax (#9459) * :recycle: Migrate render-wasm api object-svg to modern component syntax * :paperclip: Add minor changes Signed-off-by: Andrey Antukh --------- Signed-off-by: Andrey Antukh Co-authored-by: Andrey Antukh --- frontend/src/app/render_wasm/api.cljs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/render_wasm/api.cljs b/frontend/src/app/render_wasm/api.cljs index cc0814a6b2..eb7e8ce76e 100644 --- a/frontend/src/app/render_wasm/api.cljs +++ b/frontend/src/app/render_wasm/api.cljs @@ -320,9 +320,8 @@ (.postMessage (.-port2 ch) nil))))) ;; Based on app.main.render/object-svg -(mf/defc object-svg - {::mf/props :obj} - [{:keys [shape] :as props}] +(mf/defc object-svg* + [{:keys [shape]}] (let [objects (mf/deref refs/workspace-page-objects) shape-wrapper (mf/with-memo [shape] @@ -344,7 +343,7 @@ (defn get-static-markup [shape] (-> - (mf/element object-svg #js {:shape shape}) + (mf/element object-svg* #js {:shape shape}) (rds/renderToStaticMarkup))) ;; forward declare helpers so render can call them From 5ef8d35683f98e44e2e8aee818a0314fce5cb3bd Mon Sep 17 00:00:00 2001 From: Luis de Dios Date: Wed, 24 Jun 2026 10:25:37 +0200 Subject: [PATCH 021/229] :bug: Fix avoid flashing the move tool before activating the selected tool (#10291) --- frontend/src/app/main/ui/workspace/top_toolbar.cljs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/top_toolbar.cljs b/frontend/src/app/main/ui/workspace/top_toolbar.cljs index 615e0921b1..8236d21ee3 100644 --- a/frontend/src/app/main/ui/workspace/top_toolbar.cljs +++ b/frontend/src/app/main/ui/workspace/top_toolbar.cljs @@ -318,11 +318,9 @@ (let [tool (-> (dom/get-current-target event) (dom/get-data "tool") (keyword))] - (st/emit! :interrupt (dw/clear-edition-mode)) - - ;; Delay so anything that launched :interrupt can finish - (ts/schedule 100 - #(st/emit! (dw/select-for-drawing tool)))))) + (st/emit! :interrupt + (dw/clear-edition-mode) + (dw/select-for-drawing tool))))) on-toggle-toolbar (mf/use-fn From 0270c2a90f49f249d39f6d0bc73b88264197b5c1 Mon Sep 17 00:00:00 2001 From: "Dr. Dominik Jain" Date: Wed, 24 Jun 2026 10:27:28 +0200 Subject: [PATCH 022/229] :bug: Fix description of TokenCatalog.addTheme in high-level overview (#10359) Fixes #10074 --- mcp/packages/server/data/initial_instructions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mcp/packages/server/data/initial_instructions.md b/mcp/packages/server/data/initial_instructions.md index d11f7cdf95..34aaf95d16 100644 --- a/mcp/packages/server/data/initial_instructions.md +++ b/mcp/packages/server/data/initial_instructions.md @@ -345,7 +345,7 @@ The token library: `penpot.library.local.tokens` (type: `TokenCatalog`) * `sets: TokenSet[]` - Token collections (order matters for precedence) * `themes: TokenTheme[]` - Presets that activate specific sets * `addSet({name: string}): TokenSet` - Create new set - * `addTheme(group: string, name: string): TokenTheme` - Create new theme + * `addTheme({group: string, name: string}): TokenTheme` - Create new theme `TokenSet` contains tokens with unique names: * `active: boolean` - Only active sets affect shapes; use `set.toggleActive()` to change: `if (!set.active) set.toggleActive();` From b9136e6fda9a9857ab1bcc37242d646602fe5615 Mon Sep 17 00:00:00 2001 From: Stephan Paternotte Date: Tue, 23 Jun 2026 12:03:23 +0200 Subject: [PATCH 023/229] :globe_with_meridians: Add translations for: Dutch Currently translated at 87.0% (2062 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/nl/ --- frontend/translations/nl.po | 40 ++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/frontend/translations/nl.po b/frontend/translations/nl.po index 51c60edadb..881bf0abf2 100644 --- a/frontend/translations/nl.po +++ b/frontend/translations/nl.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-23 10:01+0000\n" +"PO-Revision-Date: 2026-06-24 11:01+0000\n" "Last-Translator: Stephan Paternotte \n" "Language-Team: Dutch \n" @@ -8853,3 +8853,41 @@ msgstr "Dit team behoort nu tot %s" #, unused msgid "dashboard.team-no-longer-belong-org" msgstr "Dit team behoort niet meer tot de organisatie %s" + +#: src/app/main/ui/dashboard/team.cljs:1609 +msgid "dashboard.team-organization" +msgstr "Teamorganisatie" + +#: src/app/main/ui/dashboard/team.cljs:1643 +msgid "dashboard.team-organization.add" +msgstr "Toevoegen aan een organisatie" + +#: src/app/main/data/nitrate.cljs:341, src/app/main/data/nitrate.cljs:398 +msgid "dashboard.team-organization.add.no-valid-orgs" +msgstr "" +"Je hebt geen toestemming om dit team aan een van je organisaties toe te " +"voegen." + +#: src/app/main/ui/dashboard/team.cljs:1632 +msgid "dashboard.team-organization.change" +msgstr "Teamorganisatie wijzigen" + +#: src/app/main/ui/dashboard/team.cljs:905 +msgid "dashboard.team-organization.disabled-org-tooltip" +msgstr "Alleen mensen binnen je organisatie kunnen worden uitgenodigd." + +#: src/app/main/ui/dashboard/team.cljs:1639 +msgid "dashboard.team-organization.none" +msgstr "Dit team maakt geen deel uit van een organisatie" + +#: src/app/main/ui/dashboard/team.cljs:1635 +msgid "dashboard.team-organization.remove" +msgstr "Team uit organisatie verwijderen" + +#, unused +msgid "dashboard.user-no-longer-belong-org" +msgstr "Je bent geen lid meer van de organisatie %s" + +#: src/app/main/ui/settings/options.cljs:109 +msgid "dashboard.webgl-switch.beta" +msgstr "Beta" From a6c7bd28e817a2876239dd2d4c314df9c4107451 Mon Sep 17 00:00:00 2001 From: Miguel de Benito Delgado Date: Wed, 24 Jun 2026 13:16:25 +0200 Subject: [PATCH 024/229] :lipstick: Fix some malli schemas (#7733) * :bug: Add missing fields to schema:profile * :bug: Add missing fields to schema:dissolve-animation * :paperclip: Add minor changes Signed-off-by: Andrey Antukh --------- Signed-off-by: Andrey Antukh Co-authored-by: Andrey Antukh --- backend/src/app/rpc/commands/profile.clj | 2 ++ common/src/app/common/types/shape/interactions.cljc | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/backend/src/app/rpc/commands/profile.clj b/backend/src/app/rpc/commands/profile.clj index 9941638196..79af070c6a 100644 --- a/backend/src/app/rpc/commands/profile.clj +++ b/backend/src/app/rpc/commands/profile.clj @@ -66,6 +66,8 @@ [:id ::sm/uuid] [:fullname [::sm/word-string {:max 250}]] [:email ::sm/email] + [:theme {:optional true} :string] + [:is-admin {:optional true} ::sm/boolean] [:is-active {:optional true} ::sm/boolean] [:is-blocked {:optional true} ::sm/boolean] [:is-demo {:optional true} ::sm/boolean] diff --git a/common/src/app/common/types/shape/interactions.cljc b/common/src/app/common/types/shape/interactions.cljc index 4554d02511..127ebee57f 100644 --- a/common/src/app/common/types/shape/interactions.cljc +++ b/common/src/app/common/types/shape/interactions.cljc @@ -76,7 +76,10 @@ [:map {:title "AnimationDisolve"} [:animation-type [:= :dissolve]] [:duration ::sm/safe-int] - [:easing [::sm/one-of easing-types]]]) + [:easing [::sm/one-of easing-types]] + [:way {:optional true} [::sm/one-of way-types]] + [:offset-effect {:optional true} :boolean] + [:direction {:optional true} [::sm/one-of direction-types]]]) (def schema:slide-animation [:map {:title "AnimationSlide"} From aedb7f9195320361350ee26bdebe09f20a2a871d Mon Sep 17 00:00:00 2001 From: Jack Storment <88656337+jack-stormentswe@users.noreply.github.com> Date: Wed, 24 Jun 2026 13:32:13 -0600 Subject: [PATCH 025/229] :sparkles: Add dedicated Line and Arrow drawing tools (#9146) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: Add dedicated Line and Arrow drawing tools Introduce a Line/Arrow toolbar option and a click-drag drawing interaction that matches Figma's workflow: select the tool, press and drag to define the line in one gesture, with Shift snapping to 15° increments. Arrowhead style can be toggled on either endpoint via the existing stroke-cap controls. Signed-off-by: jack-stormentswe * :lipstick: Fix formatting error Signed-off-by: jack-stormentswe * :bug: Translate line and arrow tooltips in top toolbar Signed-off-by: Luis de Dios * :bug: Add missing namespace Signed-off-by: Luis de Dios * :books: Update copyright notice Signed-off-by: Luis de Dios * Add translations (EN) for toolbar elements Signed-off-by: Luis de Dios * Add translations (ES) for toolbar elements Signed-off-by: Luis de Dios * :recycle: Improve stroke-cap-end update for arrow handling Signed-off-by: Luis de Dios * :bug: Fix shortcuts select tool but do not replace it in the toolbar Refactor tool selection logic in top_toolbar.cljs Signed-off-by: Luis de Dios * :recycle: Remove unnecessary blank line Signed-off-by: Luis de Dios --------- Signed-off-by: jack-stormentswe Signed-off-by: Jack Storment <88656337+jack-stormentswe@users.noreply.github.com> Signed-off-by: Luis de Dios Co-authored-by: Luis de Dios --- .../src/app/main/data/workspace/drawing.cljs | 5 +- .../app/main/data/workspace/drawing/line.cljs | 153 ++++++++++++++++++ .../app/main/data/workspace/shortcuts.cljs | 10 ++ .../app/main/ui/workspace/top_toolbar.cljs | 15 +- frontend/translations/en.po | 6 + frontend/translations/es.po | 6 + 6 files changed, 188 insertions(+), 7 deletions(-) create mode 100644 frontend/src/app/main/data/workspace/drawing/line.cljs diff --git a/frontend/src/app/main/data/workspace/drawing.cljs b/frontend/src/app/main/data/workspace/drawing.cljs index 03d7545bb8..a2bd2a986e 100644 --- a/frontend/src/app/main/data/workspace/drawing.cljs +++ b/frontend/src/app/main/data/workspace/drawing.cljs @@ -14,6 +14,7 @@ [app.main.data.workspace.drawing.box :as box] [app.main.data.workspace.drawing.common :as common] [app.main.data.workspace.drawing.curve :as curve] + [app.main.data.workspace.drawing.line :as line] [app.main.data.workspace.layout :as dwlo] [app.main.data.workspace.path :as path] [beicon.v2.core :as rx] @@ -101,8 +102,10 @@ (watch [_ _ _] (rx/of (case type - :path (path/handle-drawing) + :path (path/handle-drawing) :curve (curve/handle-drawing) + :line (line/handle-drawing :line) + :arrow (line/handle-drawing :arrow) (box/handle-drawing type)))))) (defn change-orientation diff --git a/frontend/src/app/main/data/workspace/drawing/line.cljs b/frontend/src/app/main/data/workspace/drawing/line.cljs new file mode 100644 index 0000000000..c942a7543c --- /dev/null +++ b/frontend/src/app/main/data/workspace/drawing/line.cljs @@ -0,0 +1,153 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns app.main.data.workspace.drawing.line + "Drawing handler for the Line (L) and Arrow (Shift+L) tools. + + Unlike the Path (P) tool, which builds a multi-node path via + successive clicks, Line/Arrow uses a single press-and-drag + gesture (matching Figma/Sketch/XD). The result is always a + two-node path from the drag start to the drag end. The Arrow + variant additionally pre-configures an arrow stroke cap at + the end so designers do not have to set it manually." + (:require + [app.common.data.macros :as dm] + [app.common.geom.point :as gpt] + [app.common.geom.rect :as grc] + [app.common.geom.shapes.flex-layout :as gslf] + [app.common.geom.shapes.grid-layout :as gslg] + [app.common.math :as mth] + [app.common.types.container :as ctn] + [app.common.types.path :as path] + [app.common.types.shape :as cts] + [app.common.types.shape-tree :as ctst] + [app.common.types.shape.layout :as ctl] + [app.common.uuid :as uuid] + [app.main.data.helpers :as dsh] + [app.main.data.workspace.drawing.common :as common] + [app.main.streams :as ms] + [app.util.mouse :as mse] + [beicon.v2.core :as rx] + [potok.v2.core :as ptk])) + +(def ^:private snap-step-deg 15) + +(defn- snap-to-angle + "Snaps `point` relative to `origin` to the nearest multiple of + `snap-step-deg` degrees on a circle of the same radius. Used when + Shift is held while drawing a line." + [origin point] + (let [dx (- (:x point) (:x origin)) + dy (- (:y point) (:y origin)) + r (mth/sqrt (+ (* dx dx) (* dy dy))) + angle (mth/atan2 dy dx) + step (/ (* mth/PI snap-step-deg) 180) + snapped (* step (mth/round (/ angle step)))] + (gpt/point (+ (:x origin) (* r (mth/cos snapped))) + (+ (:y origin) (* r (mth/sin snapped)))))) + +(defn- update-endpoint + "Rebuilds the two-node line shape with `start` as the first node + and `end-point` as the second. Called on every drag frame." + [start end-point] + (fn [state] + (update-in state [:workspace-drawing :object] + (fn [object] + (let [points [start end-point] + content (path/points->content points) + selrect (path/calc-selrect content) + points' (grc/rect->points selrect)] + (-> object + (assoc :content content) + (assoc :selrect selrect) + (assoc :points points'))))))) + +(defn- setup-frame + [] + (ptk/reify ::setup-frame + ptk/UpdateEvent + (update [_ state] + (let [objects (dsh/lookup-page-objects state) + content (dm/get-in state [:workspace-drawing :object :content]) + position (path/get-handler-point content 0 nil) + frame-id (->> (ctst/top-nested-frame objects position) + (ctn/get-first-valid-parent objects) + :id) + flex-layout? (ctl/flex-layout? objects frame-id) + grid-layout? (ctl/grid-layout? objects frame-id) + drop-index (when flex-layout? (gslf/get-drop-index frame-id objects position)) + drop-cell (when grid-layout? (gslg/get-drop-cell frame-id objects position))] + (update-in state [:workspace-drawing :object] + (fn [object] + (-> object + (assoc :frame-id frame-id) + (assoc :parent-id frame-id) + (cond-> (some? drop-index) + (with-meta {:index drop-index})) + (cond-> (some? drop-cell) + (with-meta {:cell drop-cell}))))))))) + +(defn- finalize + "After mouse-up, mark the shape initialized only if it spans more + than a single point. A zero-length drag is a noop (e.g. the user + clicked without dragging)." + [] + (ptk/reify ::finalize + ptk/UpdateEvent + (update [_ state] + (update-in state [:workspace-drawing :object] + (fn [{:keys [content selrect] :as shape}] + (cond-> shape + (or (empty? content) + (nil? selrect) + (<= (count content) 1)) + (assoc :initialized? false))))))) + +(defn- arrow-strokes + "Default stroke for the Arrow tool: a visible 1px solid line with + a triangular arrow cap on the end node. The Line tool uses the + same defaults minus the cap." + [arrow?] + (cond-> [{:stroke-color "#000000" + :stroke-opacity 1 + :stroke-style :solid + :stroke-alignment :center + :stroke-width 1}] + arrow? (update 0 assoc :stroke-cap-end :triangle-arrow))) + +(defn handle-drawing + "Runs the click-and-drag interaction for :line or :arrow. Produces + a two-node path shape with stroke (and an arrow cap when arrow?)." + [tool] + (let [arrow? (= tool :arrow)] + (ptk/reify ::handle-drawing + ptk/WatchEvent + (watch [_ _ stream] + (let [stopper (mse/drag-stopper stream) + start @ms/mouse-position + shape (cts/setup-shape {:type :path + :initialized? true + :frame-id uuid/zero + :parent-id uuid/zero + :strokes (arrow-strokes arrow?) + :fills [] + :content (path/points->content [start start])})] + (rx/concat + (rx/of #(update % :workspace-drawing assoc :object shape)) + + (->> ms/mouse-position + (rx/with-latest-from ms/mouse-position-shift) + (rx/map (fn [[point shift?]] + (if shift? + (snap-to-angle start point) + point))) + (rx/map (partial update-endpoint start)) + (rx/take-until stopper)) + + (rx/of + (setup-frame) + (finalize) + (common/handle-finish-drawing)))))))) diff --git a/frontend/src/app/main/data/workspace/shortcuts.cljs b/frontend/src/app/main/data/workspace/shortcuts.cljs index 5450a6d7a7..26954f8515 100644 --- a/frontend/src/app/main/data/workspace/shortcuts.cljs +++ b/frontend/src/app/main/data/workspace/shortcuts.cljs @@ -313,6 +313,16 @@ :subsections [:tools] :fn #(emit-when-no-readonly (dwd/select-for-drawing :path))} + :draw-line {:tooltip "L" + :command "l" + :subsections [:tools] + :fn #(emit-when-no-readonly (dwd/select-for-drawing :line))} + + :draw-arrow {:tooltip (ds/shift "L") + :command "shift+l" + :subsections [:tools] + :fn #(emit-when-no-readonly (dwd/select-for-drawing :arrow))} + :draw-curve {:tooltip (ds/shift "C") :command "shift+c" :subsections [:tools] diff --git a/frontend/src/app/main/ui/workspace/top_toolbar.cljs b/frontend/src/app/main/ui/workspace/top_toolbar.cljs index 8236d21ee3..21893b1ad3 100644 --- a/frontend/src/app/main/ui/workspace/top_toolbar.cljs +++ b/frontend/src/app/main/ui/workspace/top_toolbar.cljs @@ -47,7 +47,9 @@ (def grouped-tools {:shapes {:default-tool :rect :tools {:rect {:icon i/rectangle} - :circle {:icon i/ellipse}}} + :circle {:icon i/ellipse} + :line {:icon i/easing-linear} + :arrow {:icon i/stroke-arrow}}} :free-draw {:default-tool :path :tools {:path {:icon i/path} :curve {:icon i/curve}}}}) @@ -59,6 +61,8 @@ :frame (tr "workspace.toolbar.frame" (sc/get-tooltip :draw-frame)) :rect (tr "workspace.toolbar.rect" (sc/get-tooltip :draw-rect)) :circle (tr "workspace.toolbar.ellipse" (sc/get-tooltip :draw-ellipse)) + :line (tr "workspace.toolbar.line" (sc/get-tooltip :draw-line)) + :arrow (tr "workspace.toolbar.arrow" (sc/get-tooltip :draw-arrow)) :text (tr "workspace.toolbar.text" (sc/get-tooltip :draw-text)) :path (tr "workspace.toolbar.path" (sc/get-tooltip :draw-path)) :image (tr "workspace.toolbar.image" (sc/get-tooltip :insert-image)) @@ -109,11 +113,7 @@ on-select-tool (mf/use-fn (fn [event] - (let [tool (-> (dom/get-current-target event) - (dom/get-data "tool") - (keyword))] - (reset! default-tool* tool) - (on-select-tool event)))) + (on-select-tool event))) on-display-menu (mf/use-fn @@ -144,6 +144,9 @@ (cancel-timer! open-timer*) (cancel-timer! close-timer*))) + (mf/with-effect [drawtool group] + (reset! default-tool* (active-group-tool group drawtool))) + [:li {:class (stl/css :toolbar-group) :on-pointer-enter on-display-menu :on-pointer-leave on-hide-menu} diff --git a/frontend/translations/en.po b/frontend/translations/en.po index fa3f61cae6..0410ccc003 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -9725,6 +9725,9 @@ msgstr "The value is not valid" msgid "workspace.tokens.warning-name-change" msgstr "Renaming this token will break any reference to its old name" +msgid "workspace.toolbar.arrow" +msgstr "Arrow (%s)" + #: src/app/main/ui/workspace/sidebar.cljs:159, src/app/main/ui/workspace/sidebar.cljs:166 msgid "workspace.toolbar.assets" msgstr "Assets" @@ -9762,6 +9765,9 @@ msgstr "Create board. Click and drag to define its size. (%s)" msgid "workspace.toolbar.image" msgstr "Image (%s)" +msgid "workspace.toolbar.line" +msgstr "Line (%s)" + #: src/app/main/ui/workspace/top_toolbar.cljs:65, src/app/main/ui/workspace/top_toolbar.cljs:66, src/app/main/ui/workspace/top_toolbar.cljs:77 msgid "workspace.toolbar.mcp" msgstr "MCP" diff --git a/frontend/translations/es.po b/frontend/translations/es.po index 6c4a7b6ed0..a24bd2d177 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -9399,6 +9399,9 @@ msgstr "" "Cambiar el nombre de este token romperá cualquier referencia a su nombre " "anterior." +msgid "workspace.toolbar.arrow" +msgstr "Flecha (%s)" + #: src/app/main/ui/workspace/sidebar.cljs:159, src/app/main/ui/workspace/sidebar.cljs:166 msgid "workspace.toolbar.assets" msgstr "Recursos" @@ -9436,6 +9439,9 @@ msgstr "Crear tablero. Click y arrastrar para definir el tamaño. (%s)" msgid "workspace.toolbar.image" msgstr "Imagen (%s)" +msgid "workspace.toolbar.line" +msgstr "Línea (%s)" + #: src/app/main/ui/workspace/top_toolbar.cljs:65, src/app/main/ui/workspace/top_toolbar.cljs:66, src/app/main/ui/workspace/top_toolbar.cljs:77 msgid "workspace.toolbar.mcp" msgstr "MCP" From d58d816310a7a4043b103646dd14802ed70a14ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 25 Jun 2026 08:22:41 +0200 Subject: [PATCH 026/229] :wrench: Define concurrency policy to cancel in progress build workflows (#10409) --- .github/workflows/build-bundle.yml | 4 ++++ .github/workflows/build-docker.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/build-bundle.yml b/.github/workflows/build-bundle.yml index 8f8b40007a..e31382ccd4 100644 --- a/.github/workflows/build-bundle.yml +++ b/.github/workflows/build-bundle.yml @@ -37,6 +37,10 @@ on: required: false default: 'yes' +concurrency: + group: ${{ github.workflow }}-${{ inputs.gh_ref }} + cancel-in-progress: true + jobs: build-bundle: name: Build and Upload Penpot Bundle diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml index 18ac6aec9f..0972f1e25d 100644 --- a/.github/workflows/build-docker.yml +++ b/.github/workflows/build-docker.yml @@ -16,6 +16,10 @@ on: required: true default: 'develop' +concurrency: + group: ${{ github.workflow }}-${{ inputs.gh_ref }} + cancel-in-progress: true + jobs: build-and-push: name: Build and Push Penpot Docker Images From 28f3b8048aa1c20233df505682cc103b60a8cfa0 Mon Sep 17 00:00:00 2001 From: Alonso Torres Date: Thu, 25 Jun 2026 08:27:33 +0200 Subject: [PATCH 027/229] :sparkles: Improve MCP handling when tab is frozen in the browser (#10392) --- .github/workflows/tests-mcp.yml | 2 +- docs/mcp/index.md | 21 +++ frontend/src/app/main/data/workspace/mcp.cljs | 15 +- mcp/README.md | 5 + mcp/package.json | 3 +- mcp/packages/plugin/src/main.ts | 132 +++++++++++++++++- mcp/packages/server/package.json | 1 + mcp/packages/server/src/PluginBridge.test.ts | 45 ++++++ mcp/packages/server/src/PluginBridge.ts | 75 +++++++++- 9 files changed, 285 insertions(+), 14 deletions(-) create mode 100644 mcp/packages/server/src/PluginBridge.test.ts diff --git a/.github/workflows/tests-mcp.yml b/.github/workflows/tests-mcp.yml index 9e622ca83a..6f8eadcadd 100644 --- a/.github/workflows/tests-mcp.yml +++ b/.github/workflows/tests-mcp.yml @@ -49,4 +49,4 @@ jobs: - name: Tests working-directory: ./mcp run: | - pnpm -r run test; + pnpm run test; diff --git a/docs/mcp/index.md b/docs/mcp/index.md index 466144b3f1..4d2fa76fc0 100644 --- a/docs/mcp/index.md +++ b/docs/mcp/index.md @@ -147,6 +147,27 @@ If you just want to try Penpot AI workflows quickly through the MCP, follow this Once all five steps are done, your AI client should list Penpot tools. +### Keep the Penpot tab active + +The MCP plugin runs inside your Penpot browser tab. If the browser puts that tab to sleep, freezes it, or unloads it to save memory, the MCP server cannot run tasks in Penpot until the tab wakes up again. + +When this happens, MCP fails fast instead of waiting for a long task timeout: + +* In Chrome and Chromium-based browsers, the plugin can report when the tab is being frozen. +* In Firefox, Safari, and other browsers that do not expose the same freeze event, MCP uses plugin heartbeats. If the browser stops running the plugin JavaScript, the heartbeat becomes stale and the MCP server reports that the Penpot tab appears to be suspended. +* If the browser unloads the tab completely, the plugin disconnects and MCP reports that no Penpot plugin instance is connected. + +To recover, open or focus the Penpot tab again, wait until MCP reconnects, and retry the prompt. + +To reduce the chances of the browser putting Penpot to sleep during long MCP sessions: + +| Browser | Recommended setting | +| --- | --- | +| Chrome | Go to **Settings → Performance → Always keep these sites active** and add your Penpot site. Pinning the Penpot tab also helps prevent Chrome tab deactivation. | +| Edge | Go to **Settings → System and performance** and add your Penpot site to the list of sites that should never be put to sleep, if that option is available in your Edge version. | +| Firefox | Firefox does not provide the same per-site keep-awake control. If tab unloading is a problem, advanced users can disable tab unloading with `browser.tabs.unloadOnLowMemory=false` in `about:config`, but this can increase memory use. | +| Safari | Safari does not provide a comparable per-site keep-awake setting. Keep the Penpot tab open and active during long MCP sessions. | + ### First prompts to try After connecting, start with **read-only prompts** to confirm everything works and to understand what the agent can see: diff --git a/frontend/src/app/main/data/workspace/mcp.cljs b/frontend/src/app/main/data/workspace/mcp.cljs index 55d15e4852..fde7e22d6f 100644 --- a/frontend/src/app/main/data/workspace/mcp.cljs +++ b/frontend/src/app/main/data/workspace/mcp.cljs @@ -20,7 +20,10 @@ [beicon.v2.core :as rx] [potok.v2.core :as ptk])) -(def retry-interval 10000) +(def reconnect-fallback-interval 60000) + +(def reconnect-fallback-statuses + #{"disconnected" "error"}) (log/set-level! :info) @@ -54,11 +57,13 @@ (reset! interval-sub (ts/interval - retry-interval + reconnect-fallback-interval (fn [] - ;; Try to reconnect if active and not connected - (when-not (contains? #{"connecting" "connected"} - (-> @st/state :mcp :connection-status)) + ;; Slow app-level fallback. The plugin owns normal WebSocket + ;; reconnects; this only restarts it if the app remains in a + ;; failed connection state. + (when (contains? reconnect-fallback-statuses + (-> @st/state :mcp :connection-status)) (.log js/console "Reconnecting to MCP...") (st/emit! (ptk/data-event ::connect)))))))) diff --git a/mcp/README.md b/mcp/README.md index 3efc6255e7..bc6b2205cb 100644 --- a/mcp/README.md +++ b/mcp/README.md @@ -154,6 +154,11 @@ This bootstrap command will: > [!IMPORTANT] > Do not close the plugin's UI while using the MCP server, as this will close the connection. +> Also keep the Penpot tab active during long MCP sessions. Browsers may freeze, suspend, +> or unload inactive tabs to save resources; when that happens, the MCP server will reject +> tasks until the tab wakes up or reconnects. In Chrome, add your Penpot site to +> **Settings → Performance → Always keep these sites active** or pin the tab to reduce +> tab deactivation. ### 3. Connect an MCP Client diff --git a/mcp/package.json b/mcp/package.json index ff37ae65c4..2054f5c79f 100644 --- a/mcp/package.json +++ b/mcp/package.json @@ -15,7 +15,8 @@ "bootstrap": "pnpm -r install && pnpm run build && pnpm run start", "bootstrap:multi-user": "pnpm -r install && pnpm run build && pnpm run start:multi-user", "fmt": "prettier --write packages/", - "fmt:check": "prettier --check packages/" + "fmt:check": "prettier --check packages/", + "test": "pnpm -r run test" }, "repository": { "type": "git", diff --git a/mcp/packages/plugin/src/main.ts b/mcp/packages/plugin/src/main.ts index 94210da288..4cd19e1947 100644 --- a/mcp/packages/plugin/src/main.ts +++ b/mcp/packages/plugin/src/main.ts @@ -17,6 +17,18 @@ document.body.dataset.theme = searchParams.get("theme") ?? "light"; // WebSocket connection to the MCP server let ws: WebSocket | null = null; +const HEARTBEAT_INTERVAL_MS = 10_000; +const RECONNECT_BASE_DELAY_MS = 1_000; +const RECONNECT_MAX_DELAY_MS = 30_000; + +// transport-level reconnect state for the plugin WebSocket +let shouldReconnect = false; +let lastConnectionUrl: string | undefined; +let lastConnectionToken: string | undefined; +let reconnectAttempts = 0; +let reconnectTimer: ReturnType | null = null; +let heartbeatTimer: ReturnType | null = null; + /** * indicates whether the plugin is running with the Penpot-integrated remote MCP server enabled * (as opposed to a local server used with the explicitly loaded plugin); @@ -118,14 +130,82 @@ function sendTaskResponse(response: any): void { } } +/** + * Emits a liveness signal from the plugin event loop. + * + * WebSocket ping/pong is not enough here: browsers can answer protocol pings while + * page JavaScript is frozen and unable to run MCP tasks. + */ +function sendHeartbeat(): boolean { + if (ws && ws.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify({ type: "heartbeat" })); + return true; + } + return false; +} + +/** Starts heartbeat emission for the active WebSocket. */ +function startHeartbeat(): void { + stopHeartbeat(); + heartbeatTimer = setInterval(sendHeartbeat, HEARTBEAT_INTERVAL_MS); +} + +/** Stops heartbeat emission for the active WebSocket. */ +function stopHeartbeat(): void { + if (heartbeatTimer !== null) { + clearInterval(heartbeatTimer); + heartbeatTimer = null; + } +} + +/** + * Delay before the next reconnect, using capped exponential backoff. + * + * Keeps recovery fast for short drops without hammering an unavailable server. + */ +function computeReconnectDelay(attempts: number): number { + return Math.min(RECONNECT_BASE_DELAY_MS * 2 ** attempts, RECONNECT_MAX_DELAY_MS); +} + +/** Schedules one WebSocket reconnect attempt with backoff. */ +function scheduleReconnect(): void { + if (!shouldReconnect || reconnectTimer !== null) { + return; + } + const delay = computeReconnectDelay(reconnectAttempts); + reconnectAttempts++; + reconnectTimer = setTimeout(() => { + reconnectTimer = null; + if (shouldReconnect && ws?.readyState !== WebSocket.OPEN && ws?.readyState !== WebSocket.CONNECTING) { + connectToMcpServer(lastConnectionUrl, lastConnectionToken); + } + }, delay); +} + +/** Cancels pending reconnection and resets backoff. */ +function cancelReconnect(): void { + if (reconnectTimer !== null) { + clearTimeout(reconnectTimer); + reconnectTimer = null; + } + reconnectAttempts = 0; +} + /** * Establishes a WebSocket connection to the MCP server. */ function connectToMcpServer(baseUrl?: string, token?: string): void { + shouldReconnect = true; + lastConnectionUrl = baseUrl; + lastConnectionToken = token; + if (ws?.readyState === WebSocket.OPEN) { updateConnectionStatus("connected", "Connected"); return; } + if (ws?.readyState === WebSocket.CONNECTING) { + return; + } try { let wsUrl = baseUrl || PENPOT_MCP_WEBSOCKET_URL; @@ -139,6 +219,8 @@ function connectToMcpServer(baseUrl?: string, token?: string): void { updateConnectionStatus("connecting", "Connecting..."); ws.onopen = () => { + cancelReconnect(); + startHeartbeat(); setTimeout(() => { if (ws) { console.log("Connected to MCP server"); @@ -164,7 +246,8 @@ function connectToMcpServer(baseUrl?: string, token?: string): void { }; ws.onclose = (event: CloseEvent) => { - // If we've send the error update we don't send the disconnect as well + stopHeartbeat(); + // keep the explicit error state if one was already shown if (!wsError) { console.log("Disconnected from MCP server"); const label = event.reason ? `Disconnected: ${event.reason}` : "Disconnected"; @@ -172,6 +255,7 @@ function connectToMcpServer(baseUrl?: string, token?: string): void { updateCurrentTask(null); } ws = null; + scheduleReconnect(); }; ws.onerror = (error) => { @@ -188,6 +272,14 @@ function connectToMcpServer(baseUrl?: string, token?: string): void { } } +/** Closes the socket without reconnecting. */ +function disconnectFromMcpServer(): void { + shouldReconnect = false; + cancelReconnect(); + stopHeartbeat(); + ws?.close(); +} + copyCodeBtn?.addEventListener("click", () => { const code = executedCodeEl?.value; if (!code) return; @@ -203,7 +295,7 @@ connectBtn?.addEventListener("click", () => { }); disconnectBtn?.addEventListener("click", () => { - ws?.close(); + disconnectFromMcpServer(); }); // Listen plugin.ts messages @@ -224,7 +316,7 @@ window.addEventListener("message", (event) => { } } if (event.data.type === "stop-server") { - ws?.close(); + disconnectFromMcpServer(); } else if (event.data.source === "penpot") { document.body.dataset.theme = event.data.theme; } else if (event.data.type === "task-response") { @@ -233,4 +325,38 @@ window.addEventListener("message", (event) => { } }); +/** Sends a heartbeat or reconnects after the tab becomes active again. */ +function handleTabResumed(): void { + if (!shouldReconnect) { + return; + } + if (ws?.readyState === WebSocket.OPEN) { + sendHeartbeat(); + } else if (ws?.readyState !== WebSocket.CONNECTING) { + cancelReconnect(); + connectToMcpServer(lastConnectionUrl, lastConnectionToken); + } +} + +// Chrome supports freeze/resume; Firefox does not. That is acceptable because +// Firefox still supports visibilitychange, and stale heartbeats detect any tab +// suspension that prevents plugin JavaScript from running tasks. + +// Chrome: about to pause page JavaScript. +document.addEventListener("freeze", () => { + if (ws && ws.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify({ type: "freeze" })); + } +}); + +// Chrome: frozen page resumed. +document.addEventListener("resume", handleTabResumed); + +// Chrome and Firefox: tab visibility changed. +document.addEventListener("visibilitychange", () => { + if (document.visibilityState === "visible") { + handleTabResumed(); + } +}); + parent.postMessage({ type: "ui-initialized" }, "*"); diff --git a/mcp/packages/server/package.json b/mcp/packages/server/package.json index c3a3a04e47..29f1ec467b 100644 --- a/mcp/packages/server/package.json +++ b/mcp/packages/server/package.json @@ -12,6 +12,7 @@ "start:multi-user": "node dist/index.js --multi-user", "start:dev": "node --import ts-node/register src/index.ts", "start:dev:multi-user": "node --loader ts-node/esm src/index.ts --multi-user", + "test": "tsx --test src/*.test.ts", "test:integration:export-sema": "tsx scripts/integration-test-export-image-semaphore.ts", "types:check": "tsc --noEmit", "clean": "rm -rf dist/" diff --git a/mcp/packages/server/src/PluginBridge.test.ts b/mcp/packages/server/src/PluginBridge.test.ts new file mode 100644 index 0000000000..b0d15936be --- /dev/null +++ b/mcp/packages/server/src/PluginBridge.test.ts @@ -0,0 +1,45 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { assertPluginResponsive, HEARTBEAT_STALE_THRESHOLD_MS } from "./PluginBridge"; + +test("passes for a responsive connection with a recent heartbeat", () => { + const now = 1_000_000; + assert.doesNotThrow(() => assertPluginResponsive({ frozen: false, lastHeartbeat: now - 5_000 }, now)); +}); + +test("passes when the heartbeat age is exactly at the threshold", () => { + const now = 1_000_000; + const lastHeartbeat = now - HEARTBEAT_STALE_THRESHOLD_MS; + assert.doesNotThrow(() => assertPluginResponsive({ frozen: false, lastHeartbeat }, now)); +}); + +test("throws a frozen-specific error when the tab reported it is being frozen", () => { + const now = 1_000_000; + assert.throws(() => assertPluginResponsive({ frozen: true, lastHeartbeat: now }, now), /has been frozen/); +}); + +test("throws a suspended error when no heartbeat has arrived within the threshold", () => { + const now = 1_000_000; + const lastHeartbeat = now - (HEARTBEAT_STALE_THRESHOLD_MS + 1); + assert.throws( + () => assertPluginResponsive({ frozen: false, lastHeartbeat }, now), + /appears to be suspended by the browser/ + ); +}); + +test("includes the heartbeat age, in seconds, in the suspended error", () => { + const now = 1_000_000; + const lastHeartbeat = now - 45_000; + assert.throws(() => assertPluginResponsive({ frozen: false, lastHeartbeat }, now), /no heartbeat for 45s/); +}); + +test("honours a custom stale threshold", () => { + const now = 1_000_000; + const lastHeartbeat = now - 2_000; + + assert.doesNotThrow(() => assertPluginResponsive({ frozen: false, lastHeartbeat }, now)); + assert.throws( + () => assertPluginResponsive({ frozen: false, lastHeartbeat }, now, 1_000), + /appears to be suspended by the browser/ + ); +}); diff --git a/mcp/packages/server/src/PluginBridge.ts b/mcp/packages/server/src/PluginBridge.ts index 1c24547b8f..19a3a77545 100644 --- a/mcp/packages/server/src/PluginBridge.ts +++ b/mcp/packages/server/src/PluginBridge.ts @@ -9,12 +9,58 @@ import type { RedisBridge } from "./RedisBridge"; const KEEP_ALIVE_TIME = 30000; // 30 seconds -interface ClientConnection { +/** + * Maximum plugin heartbeat age before a connection is stale. + * + * This uses plugin heartbeats rather than WebSocket pongs because the browser can answer + * protocol pings while the tab's JavaScript event loop is frozen. + */ +export const HEARTBEAT_STALE_THRESHOLD_MS = 30000; + +/** + * Observable liveness state of a plugin connection. + */ +export interface PluginLivenessState { + /** timestamp of the last plugin message, in ms since epoch. */ + lastHeartbeat: number; + /** whether the plugin reported a browser freeze. */ + frozen: boolean; +} + +interface ClientConnection extends PluginLivenessState { socket: WebSocket; userToken: string | null; pingInterval: NodeJS.Timeout; } +/** + * Throws if the plugin tab cannot currently run tasks. + * + * A socket can stay open while the page event loop is paused, so task dispatch must check + * plugin-level liveness before sending work. + */ +export function assertPluginResponsive( + state: PluginLivenessState, + now: number, + staleThresholdMs: number = HEARTBEAT_STALE_THRESHOLD_MS +): void { + if (state.frozen) { + throw new Error( + `The Penpot plugin tab has been frozen by the browser and cannot run tasks. ` + + `Please click/focus the Penpot tab to wake it, then retry.` + ); + } + + const heartbeatAge = now - state.lastHeartbeat; + if (heartbeatAge > staleThresholdMs) { + throw new Error( + `The Penpot plugin tab appears to be suspended by the browser (no heartbeat for ` + + `${Math.round(heartbeatAge / 1000)}s). Please click/focus the Penpot tab to wake it, ` + + `then retry.` + ); + } +} + /** * Manages WebSocket connections to Penpot plugin instances and handles plugin tasks * over these connections. @@ -79,7 +125,13 @@ export class PluginBridge { }, KEEP_ALIVE_TIME); // register the client connection with both indexes - const connection: ClientConnection = { socket: ws, userToken, pingInterval }; + const connection: ClientConnection = { + socket: ws, + userToken, + pingInterval, + lastHeartbeat: Date.now(), + frozen: false, + }; this.connectedClients.set(ws, connection); if (userToken) { // ensure only one connection per userToken @@ -107,8 +159,20 @@ export class PluginBridge { ws.on("message", (data: Buffer) => { this.logger.debug("Received WebSocket message: %s", data.toString()); try { - const response: PluginTaskResponse = JSON.parse(data.toString()); - this.handlePluginTaskResponse(response); + // any plugin message proves the page event loop is running + connection.lastHeartbeat = Date.now(); + + const message = JSON.parse(data.toString()); + if (message?.type === "freeze") { + connection.frozen = true; + this.logger.info("Plugin tab reported it is being frozen by the browser"); + return; + } + connection.frozen = false; + if (message?.type === "heartbeat") { + return; + } + this.handlePluginTaskResponse(message as PluginTaskResponse); } catch (error) { this.logger.error(error, "Failure while processing WebSocket message"); } @@ -293,6 +357,9 @@ export class PluginBridge { throw new Error(`Plugin instance is disconnected. Task could not be sent.`); } + // the socket can be open while browser-throttled plugin JS cannot run tasks + assertPluginResponsive(target, Date.now()); + // register the task for result correlation, then send over the socket this.pendingTasks.set(task.id, task); target.socket.send(JSON.stringify(task.toRequest())); From 15a336a24963ef10d151c03d6502ed99745a1116 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Valderrama?= Date: Thu, 25 Jun 2026 09:28:23 +0200 Subject: [PATCH 028/229] :sparkles: Allow nitrate to view org teams (#10365) * :sparkles: Allow nitrate to view org teams * :paperclip: Code review * :paperclip: Code review 2 --- backend/src/app/rpc/management/nitrate.clj | 79 ++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/backend/src/app/rpc/management/nitrate.clj b/backend/src/app/rpc/management/nitrate.clj index 429205c1c7..7e25739d04 100644 --- a/backend/src/app/rpc/management/nitrate.clj +++ b/backend/src/app/rpc/management/nitrate.clj @@ -825,6 +825,85 @@ LEFT JOIN profile AS p nil)) +;; ---- API: get-teams-detail + +(def ^:private sql:get-teams-detail + "SELECT + t.id, + t.name, + t.photo_id, + t.created_at, + (SELECT MAX(p2.modified_at) + FROM project AS p2 + WHERE p2.team_id = t.id + AND p2.deleted_at IS NULL + AND p2.is_default IS FALSE) AS last_activity_at, + owner_tpr.profile_id AS owner_profile_id, + owner_p.fullname AS owner_name, + owner_p.photo_id AS owner_photo_id, + (SELECT COUNT(*) + FROM project AS p3 + WHERE p3.team_id = t.id + AND p3.deleted_at IS NULL + AND p3.is_default IS FALSE) AS num_projects, + (SELECT COUNT(*) + FROM file AS f + JOIN project AS p4 ON p4.id = f.project_id + WHERE p4.team_id = t.id + AND f.deleted_at IS NULL + AND p4.deleted_at IS NULL) AS num_files, + (SELECT COUNT(*) + FROM team_profile_rel AS tpr + WHERE tpr.team_id = t.id) AS num_members + FROM team AS t + LEFT JOIN team_profile_rel AS owner_tpr + ON owner_tpr.team_id = t.id AND owner_tpr.is_owner IS TRUE + LEFT JOIN profile AS owner_p + ON owner_p.id = owner_tpr.profile_id + WHERE t.id = ANY(?) + AND t.deleted_at IS NULL + AND t.is_default IS FALSE + ORDER BY last_activity_at DESC NULLS LAST") + +(def ^:private schema:get-teams-detail-params + [:map + [:organization-id ::sm/uuid]]) + +(def ^:private schema:get-teams-detail-result + [:vector + [:map + [:id ::sm/uuid] + [:name ::sm/text] + [:photo-url {:optional true} ::sm/uri] + [:created-at ::sm/inst] + [:last-activity-at {:optional true} [:maybe ::sm/inst]] + [:owner-profile-id {:optional true} [:maybe ::sm/uuid]] + [:owner-name {:optional true} [:maybe ::sm/text]] + [:owner-photo-url {:optional true} ::sm/uri] + [:num-projects ::sm/int] + [:num-files ::sm/int] + [:num-members ::sm/int]]]) + +(sv/defmethod ::get-teams-detail + "Get detailed information for all non-deleted teams in an organization, + including owner info and project/file/member counts." + {::doc/added "2.20" + ::sm/params schema:get-teams-detail-params + ::sm/result schema:get-teams-detail-result} + [cfg {:keys [organization-id]}] + (let [org-summary (nitrate/call cfg :get-org-summary {:organization-id organization-id}) + team-ids (into [] (comp d/xf:map-id (filter uuid?)) (:teams org-summary))] + (if (empty? team-ids) + [] + (db/run! cfg + (fn [{:keys [::db/conn]}] + (let [ids-array (db/create-array conn "uuid" team-ids)] + (->> (db/exec! conn [sql:get-teams-detail ids-array]) + (mapv (fn [{:keys [photo-id owner-photo-id] :as row}] + (cond-> (dissoc row :photo-id :owner-photo-id) + photo-id (assoc :photo-url (files/resolve-public-uri photo-id)) + owner-photo-id (assoc :owner-photo-url (files/resolve-public-uri owner-photo-id)))))))))))) + ;; ---- API: notify-org-sso-change (sv/defmethod ::notify-org-sso-change From 2a5b6a69ad189520ca00d7c3cbe0ddaaf0bb4d16 Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Thu, 25 Jun 2026 09:53:07 +0200 Subject: [PATCH 029/229] :sparkles: Send warning for email about nitrate orgs with sso (#10413) --- .../resources/app/email/invite-to-org/en.html | 28 ++- .../resources/app/email/invite-to-org/en.txt | 7 +- .../app/email/invite-to-team/en.html | 22 +- .../resources/app/email/invite-to-team/en.txt | 7 +- .../app/email/organization-setup-sso/en.html | 223 ++++++++++++++++++ .../app/email/organization-setup-sso/en.subj | 1 + .../app/email/organization-setup-sso/en.txt | 7 + backend/src/app/email.clj | 25 +- backend/src/app/nitrate.clj | 13 +- backend/src/app/rpc/commands/nitrate.clj | 50 ++-- .../app/rpc/commands/teams_invitations.clj | 6 +- backend/src/app/rpc/management/nitrate.clj | 56 ++--- backend/src/app/rpc/nitrate/emails_helper.clj | 106 +++++++++ .../app/rpc/nitrate/organization_helper.clj | 60 +++++ .../test/backend_tests/email_sending_test.clj | 66 ++++++ .../rpc_management_nitrate_test.clj | 79 +++++++ .../test/backend_tests/rpc_nitrate_test.clj | 118 +++++++++ common/src/app/common/types/organization.cljc | 3 +- 18 files changed, 792 insertions(+), 85 deletions(-) create mode 100644 backend/resources/app/email/organization-setup-sso/en.html create mode 100644 backend/resources/app/email/organization-setup-sso/en.subj create mode 100644 backend/resources/app/email/organization-setup-sso/en.txt create mode 100644 backend/src/app/rpc/nitrate/emails_helper.clj create mode 100644 backend/src/app/rpc/nitrate/organization_helper.clj diff --git a/backend/resources/app/email/invite-to-org/en.html b/backend/resources/app/email/invite-to-org/en.html index ce3a9846b3..fd5ee679b0 100644 --- a/backend/resources/app/email/invite-to-org/en.html +++ b/backend/resources/app/email/invite-to-org/en.html @@ -195,21 +195,39 @@
- +
+ background="{% if organization.logo %}{{organization.logo}}{% else %}{{organization.avatar-bg-url}}{% endif %}" + style="width:20px;height:20px;text-align:center;font-weight:bold;font-size:9px;line-height:20px;color:#ffffff;background-size:cover;background-position:center;background-repeat:no-repeat;border-radius: 50%;color:black"> {% if organization.initials %}{{organization.initials}}{% endif %}
- - {{ organization.name|abbreviate:50 }} + + {{ organization.name|abbreviate:50 }}
+ + {% if organization.sso-active %} + + +
+ "{{ organization.name|abbreviate:50 }}" has set up single sign-on (SSO) in Penpot. Access to its + teams and files goes + through your organization's identity provider. If you can't get in, your account probably isn't + in the directory yet. + To get access, contact the organization owner. +
+ + + {% endif %} + diff --git a/backend/resources/app/email/invite-to-org/en.txt b/backend/resources/app/email/invite-to-org/en.txt index ff8eabf194..4b94fe6331 100644 --- a/backend/resources/app/email/invite-to-org/en.txt +++ b/backend/resources/app/email/invite-to-org/en.txt @@ -1,6 +1,11 @@ Hello! -{{invited-by|abbreviate:25}} has invited you to join the organization “{{ organization.name|abbreviate:25 }}”. +{{invited-by|abbreviate:25}} has invited you to join the organization “{{ organization.name|abbreviate:50 }}”. + +{% if organization.sso-active %} +"{{ organization.name|abbreviate:50 }}" has set up single sign-on (SSO) in Penpot. Access to its teams and files goes +through your organization's identity provider. If you can't get in, your account probably isn't in the directory yet. To get access, contact the organization owner. +{% endif %} Accept invitation using this link: diff --git a/backend/resources/app/email/invite-to-team/en.html b/backend/resources/app/email/invite-to-team/en.html index 9ebc59231f..96fe6de59d 100644 --- a/backend/resources/app/email/invite-to-team/en.html +++ b/backend/resources/app/email/invite-to-team/en.html @@ -186,10 +186,26 @@
- {{invited-by|abbreviate:25}} has invited you to join the team “{{ team|abbreviate:25 }}”{% if organization %} - part of the organization “{{ organization|abbreviate:25 }}”{% endif %}.
+ {{invited-by|abbreviate:25}} has invited you to join the team “{{ team|abbreviate:25 }}”{% if + organization %} + part of the organization “{{ organization.name|abbreviate:50 }}”{% endif %}. + {% if organization.sso-active %} + + +
+ "{{ organization.name|abbreviate:50 }}" has set up single sign-on (SSO) in Penpot. Access to + its + teams and files goes + through your organization's identity provider. If you can't get in, your account probably isn't + in the directory yet. + To get access, contact the organization owner. +
+ + + {% endif %} @@ -241,4 +257,4 @@ - + \ No newline at end of file diff --git a/backend/resources/app/email/invite-to-team/en.txt b/backend/resources/app/email/invite-to-team/en.txt index 3482fab0a5..c688f7d61d 100644 --- a/backend/resources/app/email/invite-to-team/en.txt +++ b/backend/resources/app/email/invite-to-team/en.txt @@ -1,6 +1,11 @@ Hello! -{{invited-by|abbreviate:25}} has invited you to join the team "{{ team|abbreviate:25 }}"{% if organization %}, part of the organization "{{ organization|abbreviate:25 }}"{% endif %}. +{{invited-by|abbreviate:25}} has invited you to join the team "{{ team|abbreviate:25 }}"{% if organization %}, part of the organization "{{ organization.name|abbreviate:50 }}"{% endif %}. + +{% if organization.sso-active %} +"{{ organization.name|abbreviate:50 }}" has set up single sign-on (SSO) in Penpot. Access to its teams and files goes +through your organization's identity provider. If you can't get in, your account probably isn't in the directory yet. To get access, contact the organization owner. +{% endif %} Accept invitation using this link: diff --git a/backend/resources/app/email/organization-setup-sso/en.html b/backend/resources/app/email/organization-setup-sso/en.html new file mode 100644 index 0000000000..cfc72548ad --- /dev/null +++ b/backend/resources/app/email/organization-setup-sso/en.html @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ +
+ + + + +
+ + + + + + +
+ +
+
+
+ +
+
+ +
+ + + + + + +
+ +
+ + + + + + + + + + +
+
+ Hi{% if user-name %} {{ user-name|abbreviate:25 }}{% endif %}, +
+
+
+ "{{ organization-name|abbreviate:50 }}" has set up single sign-on (SSO) in Penpot. Access to its + teams and files goes through your organization's identity provider. If you can't get in, your + account probably isn't in the directory yet. To get access, contact the organization owner. +
+
+
+ The Penpot team.
+
+
+ +
+
+ + {% include "app/email/includes/footer.html" %} + +
+ + + diff --git a/backend/resources/app/email/organization-setup-sso/en.subj b/backend/resources/app/email/organization-setup-sso/en.subj new file mode 100644 index 0000000000..e8e3e42f39 --- /dev/null +++ b/backend/resources/app/email/organization-setup-sso/en.subj @@ -0,0 +1 @@ +“{{ organization-name|abbreviate:25 }}” has set up single sign-on (SSO) in Penpot diff --git a/backend/resources/app/email/organization-setup-sso/en.txt b/backend/resources/app/email/organization-setup-sso/en.txt new file mode 100644 index 0000000000..4521da3160 --- /dev/null +++ b/backend/resources/app/email/organization-setup-sso/en.txt @@ -0,0 +1,7 @@ +Hello! + +"{{ organization-name|abbreviate:50 }}" has set up single sign-on (SSO) in Penpot. Access to its teams and files goes +through your organization's identity provider. If you can't get in, your account probably isn't in the directory yet. To get access, contact the organization owner. + + +The Penpot team. diff --git a/backend/src/app/email.clj b/backend/src/app/email.clj index f15c6cbbc1..fbc768e1f6 100644 --- a/backend/src/app/email.clj +++ b/backend/src/app/email.clj @@ -419,10 +419,19 @@ :id ::change-email :schema schema:change-email)) +(def ^:private schema:organization-data + [:map + [:name ::sm/text] + [:initials {:optional true} [:maybe :string]] + [:logo {:optional true} [:maybe ::sm/uri]] + [:avatar-bg-url {:optional true} [:maybe ::sm/uri]] + [:sso-active {:optional true} [:maybe ::sm/boolean]]]) + (def ^:private schema:invite-to-team [:map [:invited-by ::sm/text] [:team ::sm/text] + [:organization {:optional true} [:maybe schema:organization-data]] [:token ::sm/text]]) (def invite-to-team @@ -431,13 +440,6 @@ :id ::invite-to-team :schema schema:invite-to-team)) -(def ^:private schema:organization-data - [:map - [:name ::sm/text] - [:initials [:maybe :string]] - [:logo [:maybe ::sm/uri]] - [:avatar-bg-url [:maybe ::sm/uri]]]) - (def ^:private schema:invite-to-org [:map [:invited-by ::sm/text] @@ -451,7 +453,16 @@ :id ::invite-to-org :schema schema:invite-to-org)) +(def ^:private schema:organization-setup-sso + [:map + [:user-name {:optional true} [:maybe ::sm/text]] + [:organization-name ::sm/text]]) +(def organization-setup-sso + "Email when an organization set up SSO" + (template-factory + :id ::organization-setup-sso + :schema schema:organization-setup-sso)) (def ^:private schema:renewal-notice [:map diff --git a/backend/src/app/nitrate.clj b/backend/src/app/nitrate.clj index 3da69d29a1..9c9c8339fc 100644 --- a/backend/src/app/nitrate.clj +++ b/backend/src/app/nitrate.clj @@ -22,15 +22,26 @@ [app.rpc :as-alias rpc] [app.setup :as-alias setup] [clojure.core :as c] + [clojure.string :as str] [integrant.core :as ig])) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; HELPERS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defn- join-path-segments + "Build a single relative path from Nitrate URI segments, normalizing slashes." + [segments] + (let [path (->> segments (map str) (str/join "/"))] + (->> (str/split path #"/") + (remove str/blank?) + (str/join "/")))) + (defn- join-base-uri + "Join path segments to a base URI." [base-uri & segments] - (apply u/join (u/ensure-path-slash base-uri) segments)) + (u/join (u/ensure-path-slash base-uri) + (join-path-segments segments))) (defn- generate-nitrate-uri "Joins relative path segments to the Nitrate backend URI. diff --git a/backend/src/app/rpc/commands/nitrate.clj b/backend/src/app/rpc/commands/nitrate.clj index cbd64ad43f..2103452c17 100644 --- a/backend/src/app/rpc/commands/nitrate.clj +++ b/backend/src/app/rpc/commands/nitrate.clj @@ -21,6 +21,8 @@ [app.rpc.commands.teams :as teams] [app.rpc.doc :as-alias doc] [app.rpc.helpers :as rph] + [app.rpc.nitrate.emails-helper :as neh] + [app.rpc.nitrate.organization-helper :as noh] [app.rpc.notifications :as notifications] [app.tokens :as tokens] [app.util.services :as sv])) @@ -394,12 +396,6 @@ (notifications/notify-team-change cfg {:id team-id :organization {:name organization-name}} "dashboard.team-no-longer-belong-org") nil) -(def ^:private sql:get-team-invitation-emails - "SELECT email_to - FROM team_invitation - WHERE team_id = ? - AND valid_until > now()") - (def ^:private sql:delete-team-external-invitations "DELETE FROM team_invitation WHERE team_id = ? @@ -421,8 +417,7 @@ allows-anybody (nitrate-perms/allowed? :add-anybody-to-team {:org-perms org-perms})] (if allows-anybody {:allows-anybody true :external-emails []} - (let [invitation-emails (db/exec! conn [sql:get-team-invitation-emails team-id]) - emails (map :email-to invitation-emails)] + (let [emails (map :email (noh/get-team-invitation-emails conn team-id))] (if (empty? emails) {:allows-anybody false :external-emails []} (let [emails-array (db/create-array conn "text" (vec emails)) @@ -451,7 +446,8 @@ (assert-membership cfg profile-id organization-id) (when (contains? cf/flags :nitrate) - (let [team-with-org (nitrate/call cfg :get-team-org {:team-id team-id}) + (let [org-member-ids-before (into #{} (nitrate/call cfg :get-org-members {:organization-id organization-id})) + team-with-org (nitrate/call cfg :get-team-org {:team-id team-id}) source-org-id (get-in team-with-org [:organization :id]) source-org-perms (when source-org-id (nitrate/call cfg :get-org-permissions @@ -487,26 +483,32 @@ :profile-id profile-id}) (ex/raise :type :validation :code :not-allowed - :hint "You are not allowed to add teams in this organization"))) + :hint "You are not allowed to add teams in this organization")) - (let [team-members (db/query cfg :team-profile-rel {:team-id team-id})] ;; Add teammates to the org if needed - (doseq [{member-id :profile-id} team-members - :when (not= member-id profile-id)] - (teams/initialize-user-in-nitrate-org cfg member-id organization-id))) + (let [team-members (db/query cfg :team-profile-rel {:team-id team-id}) + new-member-ids (->> team-members + (map :profile-id) + (remove #{profile-id}) + (remove org-member-ids-before))] + (doseq [member-id new-member-ids] + (teams/initialize-user-in-nitrate-org cfg member-id organization-id))) - ;; Api call to nitrate - (let [team (nitrate/call cfg :set-team-org {:team-id team-id :organization-id organization-id :is-default false})] + ;; Api call to nitrate + (let [team (nitrate/call cfg :set-team-org {:team-id team-id :organization-id organization-id :is-default false})] + ;; Notify connected users + (notifications/notify-team-change cfg team "dashboard.team-belong-org")) - ;; Notify connected users - (notifications/notify-team-change cfg team "dashboard.team-belong-org")) + ;; Delete pending invitations for users who are not members of the target organization + (let [{:keys [allows-anybody external-emails]} (get-external-invitation-info cfg team-id organization-id)] + (when (and (not allows-anybody) (seq external-emails)) + (let [conn (::db/conn cfg) + emails-array (db/create-array conn "text" external-emails)] + (db/exec! conn [sql:delete-team-external-invitations team-id emails-array])))) - ;; Delete pending invitations for users who are not members of the target organization - (let [{:keys [allows-anybody external-emails]} (get-external-invitation-info cfg team-id organization-id)] - (when (and (not allows-anybody) (seq external-emails)) - (let [conn (::db/conn cfg) - emails-array (db/create-array conn "text" external-emails)] - (db/exec! conn [sql:delete-team-external-invitations team-id emails-array]))))) + ;; Send warnings via email if the org has sso + (neh/send-organization-setup-sso-emails-for-team! + cfg organization-id team-id org-member-ids-before))) nil) diff --git a/backend/src/app/rpc/commands/teams_invitations.clj b/backend/src/app/rpc/commands/teams_invitations.clj index 50d3ba691b..34795ba77b 100644 --- a/backend/src/app/rpc/commands/teams_invitations.clj +++ b/backend/src/app/rpc/commands/teams_invitations.clj @@ -94,7 +94,9 @@ [:id ::sm/uuid] [:name :string] [:initials [:maybe :string]] - [:logo ::sm/uri]]] + [:logo ::sm/uri] + [:avatar-bg-url [:maybe ::sm/uri]] + [:sso-active [:maybe ::sm/boolean]]]] [:profile [:map [:id ::sm/uuid] @@ -246,7 +248,7 @@ :to email :invited-by (:fullname profile) :team (:name team) - :organization (dm/get-in team [:organization :name]) + :organization (:organization team) :token itoken :extra-data ptoken}))) diff --git a/backend/src/app/rpc/management/nitrate.clj b/backend/src/app/rpc/management/nitrate.clj index 7e25739d04..9168c0ea63 100644 --- a/backend/src/app/rpc/management/nitrate.clj +++ b/backend/src/app/rpc/management/nitrate.clj @@ -29,6 +29,8 @@ [app.rpc.commands.teams :as teams] [app.rpc.commands.teams-invitations :as ti] [app.rpc.doc :as doc] + [app.rpc.nitrate.emails-helper :as neh] + [app.rpc.nitrate.organization-helper :as noh] [app.rpc.notifications :as notifications] [app.storage :as sto] [app.util.services :as sv] @@ -485,23 +487,6 @@ RETURNING id, deleted_at;") ;; API: get-org-invitations -(def ^:private sql:get-org-invitations - "SELECT DISTINCT ON (email_to) - ti.id, - ti.org_id AS organization_id, - ti.email_to AS email, - ti.created_at AS sent_at, - p.fullname AS name, - p.id AS profile_id, - p.photo_id - FROM team_invitation AS ti -LEFT JOIN profile AS p - ON p.email = ti.email_to - AND p.deleted_at IS NULL - WHERE ti.valid_until >= now() - AND (ti.org_id = ? OR ti.team_id = ANY(?)) - ORDER BY ti.email_to, ti.valid_until DESC, ti.created_at DESC;") - (def ^:private schema:get-org-invitations-params [:map [:organization-id ::sm/uuid]]) @@ -523,18 +508,13 @@ LEFT JOIN profile AS p ::sm/params schema:get-org-invitations-params ::sm/result schema:get-org-invitations-result} [cfg {:keys [organization-id]}] - (let [org-summary (nitrate/call cfg :get-org-summary {:organization-id organization-id}) - team-ids (->> (:teams org-summary) - (map :id) - (filter uuid?) - (into []))] + (let [team-ids (noh/get-org-team-ids cfg organization-id)] (db/run! cfg (fn [{:keys [::db/conn]}] - (let [ids-array (db/create-array conn "uuid" team-ids)] - (->> (db/exec! conn [sql:get-org-invitations organization-id ids-array]) - (mapv (fn [{:keys [photo-id] :as invitation}] - (cond-> (dissoc invitation :photo-id) - photo-id - (assoc :photo-url (files/resolve-public-uri photo-id))))))))))) + (->> (noh/get-org-invitations conn organization-id team-ids) + (mapv (fn [{:keys [photo-id] :as invitation}] + (cond-> (dissoc invitation :photo-id) + photo-id + (assoc :photo-url (files/resolve-public-uri photo-id)))))))))) ;; API: delete-org-invitations @@ -554,12 +534,8 @@ LEFT JOIN profile AS p {::doc/added "2.16" ::sm/params schema:delete-org-invitations-params} [cfg {:keys [organization-id email]}] - (let [org-summary (nitrate/call cfg :get-org-summary {:organization-id organization-id}) - clean-email (profile/clean-email email) - team-ids (->> (:teams org-summary) - (map :id) - (filter uuid?) - (into []))] + (let [clean-email (profile/clean-email email) + team-ids (noh/get-org-team-ids cfg organization-id)] (db/run! cfg (fn [{:keys [::db/conn]}] (let [ids-array (db/create-array conn "uuid" team-ids)] (db/exec! conn [sql:delete-org-invitations clean-email organization-id ids-array])))) @@ -585,9 +561,7 @@ LEFT JOIN profile AS p ::sm/params schema:delete-all-org-invitations-params ::rpc/auth false} [cfg {:keys [organization-id]}] - (let [org-summary (nitrate/call cfg :get-org-summary {:organization-id organization-id}) - team-ids (->> (:teams org-summary) - (map :id))] + (let [team-ids (noh/get-org-team-ids cfg organization-id)] (db/run! cfg (fn [{:keys [::db/conn]}] (let [ids-array (db/create-array conn "uuid" team-ids)] (db/exec! conn [sql:delete-all-org-invitations organization-id ids-array])))) @@ -905,17 +879,19 @@ LEFT JOIN profile AS p owner-photo-id (assoc :owner-photo-url (files/resolve-public-uri owner-photo-id)))))))))))) ;; ---- API: notify-org-sso-change - (sv/defmethod ::notify-org-sso-change "Nitrate notifies that an organization sso values have changed" {::doc/added "2.19" ::sm/params [:map [:organization-id ::sm/uuid] - [:updated-props ::sm/boolean]] + [:updated-props ::sm/boolean] + [:became-active ::sm/boolean]] ::rpc/auth false} - [{:keys [::db/pool] :as cfg} {:keys [organization-id updated-props]}] + [{:keys [::db/pool] :as cfg} {:keys [organization-id updated-props became-active]}] (when updated-props (rpc/invalidate-org-sso-cache-by-org! organization-id) (session/clear-org-sso-sessions! pool organization-id)) (notifications/notify-organization-change-sso cfg organization-id) + (when became-active + (neh/send-organization-setup-sso-emails! cfg organization-id)) nil) diff --git a/backend/src/app/rpc/nitrate/emails_helper.clj b/backend/src/app/rpc/nitrate/emails_helper.clj new file mode 100644 index 0000000000..73fab3f6ba --- /dev/null +++ b/backend/src/app/rpc/nitrate/emails_helper.clj @@ -0,0 +1,106 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns app.rpc.nitrate.emails-helper + "Helpers for organization SSO notification emails triggered by Nitrate integration." + (:require + [app.common.data :as d] + [app.config :as cf] + [app.db :as db] + [app.email :as eml] + [app.nitrate :as nitrate] + [app.rpc.commands.teams :as teams] + [app.rpc.nitrate.organization-helper :as neh] + [cuerdas.core :as str])) + +(def ^:private sql:get-profile-emails-by-ids + "SELECT email + FROM profile + WHERE id = ANY(?) + AND deleted_at IS NULL") + +(def ^:private sql:get-profiles-by-emails + "SELECT id, email, fullname, is_muted + FROM profile + WHERE email = ANY(?) + AND deleted_at IS NULL") + +(defn- org-sso-active? + "Return whether SSO is enabled for the organization." + [cfg organization-id] + (when (contains? cf/flags :nitrate) + (true? (:active (nitrate/call cfg :get-org-sso {:organization-id organization-id}))))) + +(def ^:private xf:map-email (map :email)) + +(defn- recipients-by-emails + "Build `{:email :user-name :profile}` maps for a deduplicated email list." + [conn emails] + (let [profiles (if (seq emails) + (let [emails-array (db/create-array conn "text" emails)] + (db/exec! conn [sql:get-profiles-by-emails emails-array])) + []) + profile-by-email (d/index-by (comp str/lower :email) profiles)] + (map (fn [email] + (let [profile (get profile-by-email (str/lower email))] + {:email email + :user-name (:fullname profile) + :profile profile})) + emails))) + +(defn- send-organization-setup-sso-email! + "Send the organization SSO setup email to a single recipient, when allowed." + [conn organization-name {:keys [email user-name profile]}] + (when (or (nil? profile) + (eml/allow-send-emails? conn profile)) + (eml/send! {::eml/conn conn + ::eml/factory eml/organization-setup-sso + :public-uri (cf/get :public-uri) + :to email + :user-name user-name + :organization-name organization-name}))) + +(defn- get-org-sso-notify-recipients + "Unique org members and pending org/team invitees for SSO activation emails." + [conn cfg organization-id org-summary] + (let [member-ids (nitrate/call cfg :get-org-members {:organization-id organization-id}) + team-ids (neh/get-org-team-ids org-summary) + member-emails (if (seq member-ids) + (let [ids-array (db/create-array conn "uuid" member-ids)] + (into #{} (map :email (db/exec! conn [sql:get-profile-emails-by-ids ids-array])))) + #{}) + invite-emails (into #{} (map :email + (neh/get-org-invitations conn organization-id team-ids))) + emails (into #{} (concat member-emails invite-emails))] + (recipients-by-emails conn emails))) + +(defn- get-team-sso-notify-recipients + "Team members who are not in `org-member-ids`, plus pending team invitations." + [conn team-id org-member-ids] + (let [team-members (->> (teams/get-team-members conn team-id) + (remove #(contains? org-member-ids (:id %)))) + invitations (neh/get-team-invitation-emails conn team-id)] + (->> (sequence xf:map-email (concat team-members invitations)) + (recipients-by-emails conn)))) + +(defn send-organization-setup-sso-emails! + "Notify all org members and pending org/team invitees that SSO is active." + [cfg organization-id] + (let [org-summary (nitrate/call cfg :get-org-summary {:organization-id organization-id})] + (db/tx-run! cfg + (fn [{:keys [::db/conn]}] + (doseq [recipient (get-org-sso-notify-recipients conn cfg organization-id org-summary)] + (send-organization-setup-sso-email! conn (:name org-summary) recipient)))))) + +(defn send-organization-setup-sso-emails-for-team! + "Notify team members who are not in `org-member-ids-before` and pending team invitees." + [cfg organization-id team-id org-member-ids-before] + (when (org-sso-active? cfg organization-id) + (let [org-summary (nitrate/call cfg :get-org-summary {:organization-id organization-id})] + (db/tx-run! cfg + (fn [{:keys [::db/conn]}] + (doseq [recipient (get-team-sso-notify-recipients conn team-id org-member-ids-before)] + (send-organization-setup-sso-email! conn (:name org-summary) recipient))))))) diff --git a/backend/src/app/rpc/nitrate/organization_helper.clj b/backend/src/app/rpc/nitrate/organization_helper.clj new file mode 100644 index 0000000000..8627a4d10d --- /dev/null +++ b/backend/src/app/rpc/nitrate/organization_helper.clj @@ -0,0 +1,60 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns app.rpc.nitrate.organization-helper + "Shared Nitrate organization query helpers." + (:require + [app.db :as db] + [app.nitrate :as nitrate])) + +(def ^:private sql:get-org-invitations + "SELECT DISTINCT ON (email_to) + ti.id, + ti.org_id AS organization_id, + ti.email_to AS email, + ti.created_at AS sent_at, + p.fullname AS name, + p.id AS profile_id, + p.photo_id + FROM team_invitation AS ti +LEFT JOIN profile AS p + ON p.email = ti.email_to + AND p.deleted_at IS NULL + WHERE ti.valid_until >= now() + AND (ti.org_id = ? OR ti.team_id = ANY(?)) + ORDER BY ti.email_to, ti.valid_until DESC, ti.created_at DESC;") + +(def ^:private sql:get-team-invitation-emails + "SELECT DISTINCT ON (email_to) + ti.email_to AS email + FROM team_invitation AS ti + WHERE ti.team_id = ? + AND ti.valid_until >= now() + ORDER BY ti.email_to, ti.valid_until DESC, ti.created_at DESC;") + +(defn get-org-team-ids + "Return team ids for an organization. + + Accepts either `cfg` and `organization-id` (fetches the org summary from + Nitrate) or an already-resolved org summary map." + ([cfg organization-id] + (get-org-team-ids (nitrate/call cfg :get-org-summary {:organization-id organization-id}))) + ([org-summary] + (->> (:teams org-summary) + (map :id) + (filter uuid?) + (vec)))) + +(defn get-org-invitations + "Fetch valid org-level and team-level invitations for an organization." + [conn organization-id team-ids] + (let [ids-array (db/create-array conn "uuid" team-ids)] + (db/exec! conn [sql:get-org-invitations organization-id ids-array]))) + +(defn get-team-invitation-emails + "Return distinct valid team invitation recipient emails." + [conn team-id] + (db/exec! conn [sql:get-team-invitation-emails team-id])) diff --git a/backend/test/backend_tests/email_sending_test.clj b/backend/test/backend_tests/email_sending_test.clj index a688814e63..e96fd192ae 100644 --- a/backend/test/backend_tests/email_sending_test.clj +++ b/backend/test/backend_tests/email_sending_test.clj @@ -6,10 +6,12 @@ (ns backend-tests.email-sending-test (:require + [app.config :as cf] [app.db :as db] [app.email :as emails] [backend-tests.helpers :as th] [clojure.test :as t] + [cuerdas.core :as str] [promesa.core :as p])) (t/use-fixtures :once th/state-init) @@ -23,3 +25,67 @@ (t/is (contains? result :to)) #_(t/is (contains? result :reply-to)) (t/is (map? (:body result))))) + +(def ^:private sso-notice-snippet + "has set up single sign-on (SSO) in Penpot") + +(defn- email-text-body + [result] + (get-in result [:body "text/plain"])) + +(defn- invite-email-params + [organization] + {:to "invitee@example.com" + :public-uri (cf/get :public-uri) + :invited-by "Owner User" + :user-name "Invitee User" + :token "test-token" + :organization organization}) + +(t/deftest invite-to-org-includes-sso-notice-when-active + (let [result (emails/render emails/invite-to-org + (invite-email-params {:name "Acme Inc" + :sso-active true}))] + (t/is (str/includes? (email-text-body result) sso-notice-snippet)) + (t/is (str/includes? (get-in result [:body "text/html"]) sso-notice-snippet)))) + +(t/deftest invite-to-org-omits-sso-notice-when-inactive + (let [result (emails/render emails/invite-to-org + (invite-email-params {:name "Acme Inc" + :sso-active false}))] + (t/is (not (str/includes? (email-text-body result) sso-notice-snippet))) + (t/is (not (str/includes? (get-in result [:body "text/html"]) sso-notice-snippet))))) + +(t/deftest invite-to-team-includes-sso-notice-when-active + (let [result (emails/render emails/invite-to-team + {:to "invitee@example.com" + :public-uri (cf/get :public-uri) + :invited-by "Owner User" + :team "Design Team" + :token "test-token" + :organization {:name "Acme Inc" + :sso-active true}})] + (t/is (str/includes? (email-text-body result) sso-notice-snippet)) + (t/is (str/includes? (get-in result [:body "text/html"]) sso-notice-snippet)))) + +(t/deftest invite-to-team-omits-sso-notice-when-inactive + (let [result (emails/render emails/invite-to-team + {:to "invitee@example.com" + :public-uri (cf/get :public-uri) + :invited-by "Owner User" + :team "Design Team" + :token "test-token" + :organization {:name "Acme Inc" + :sso-active false}})] + (t/is (not (str/includes? (email-text-body result) sso-notice-snippet))) + (t/is (not (str/includes? (get-in result [:body "text/html"]) sso-notice-snippet))))) + +(t/deftest invite-to-team-omits-sso-notice-without-organization + (let [result (emails/render emails/invite-to-team + {:to "invitee@example.com" + :public-uri (cf/get :public-uri) + :invited-by "Owner User" + :team "Design Team" + :token "test-token"})] + (t/is (not (str/includes? (email-text-body result) sso-notice-snippet))) + (t/is (not (str/includes? (get-in result [:body "text/html"]) sso-notice-snippet))))) diff --git a/backend/test/backend_tests/rpc_management_nitrate_test.clj b/backend/test/backend_tests/rpc_management_nitrate_test.clj index abba0fa7a1..460471e639 100644 --- a/backend/test/backend_tests/rpc_management_nitrate_test.clj +++ b/backend/test/backend_tests/rpc_management_nitrate_test.clj @@ -11,6 +11,7 @@ [app.common.uuid :as uuid] [app.config :as cf] [app.db :as-alias db] + [app.email :as eml] [app.msgbus :as mbus] [app.nitrate :as nitrate] [app.rpc :as-alias rpc] @@ -1198,3 +1199,81 @@ (t/is (some? rel1))) (let [rel2 (th/db-get :team-profile-rel {:team-id (:id extra-team) :profile-id (:id user)})] (t/is (some? rel2))))) + +(t/deftest notify-org-sso-change-sends-setup-sso-email-once-per-recipient + (let [owner (th/create-profile* 1 {:is-active true :fullname "Owner"}) + member (th/create-profile* 2 {:is-active true + :fullname "Member" + :email "member@example.com"}) + invited (th/create-profile* 3 {:is-active true + :fullname "Invited User" + :email "invited@example.com"}) + org-id (uuid/random) + org-name "Acme Inc" + team (th/create-team* 1 {:profile-id (:id owner)}) + org-summary {:id org-id + :name org-name + :teams [{:id (:id team)}]} + sent (atom []) + params {::th/type :notify-org-sso-change + :organization-id org-id + :updated-props false + :became-active true}] + + ;; Member also has a pending invitation: should still receive only one email. + (th/db-insert! :team-invitation + {:id (uuid/random) + :org-id org-id + :team-id nil + :email-to (:email member) + :created-by (:id owner) + :role "editor" + :valid-until (ct/in-future "24h")}) + + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team) + :org-id nil + :email-to (:email invited) + :created-by (:id owner) + :role "editor" + :valid-until (ct/in-future "48h")}) + + ;; Invite without an existing profile. + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team) + :org-id nil + :email-to "external@example.com" + :created-by (:id owner) + :role "editor" + :valid-until (ct/in-future "72h")}) + + (with-redefs [nitrate/call (fn [_cfg method _params] + (case method + :get-org-members [(:id owner) (:id member)] + :get-org-summary org-summary + nil)) + eml/send! (fn [params] (swap! sent conj params))] + (management-command-with-nitrate! params)) + + (let [emails (->> @sent (map :to) set)] + (t/is (= 4 (count @sent))) + (t/is (= #{"member@example.com" + (:email owner) + "invited@example.com" + "external@example.com"} + emails)) + (doseq [email-params @sent] + (t/is (= org-name (:organization-name email-params))) + (t/is (= eml/organization-setup-sso (::eml/factory email-params))))))) + +(t/deftest notify-org-sso-change-skips-email-when-not-active + (let [sent (atom []) + params {::th/type :notify-org-sso-change + :organization-id (uuid/random) + :updated-props false + :became-active false}] + (with-redefs [eml/send! (fn [params] (swap! sent conj params))] + (management-command-with-nitrate! params)) + (t/is (empty? @sent)))) diff --git a/backend/test/backend_tests/rpc_nitrate_test.clj b/backend/test/backend_tests/rpc_nitrate_test.clj index 20e774ec99..28015bb369 100644 --- a/backend/test/backend_tests/rpc_nitrate_test.clj +++ b/backend/test/backend_tests/rpc_nitrate_test.clj @@ -6,12 +6,15 @@ (ns backend-tests.rpc-nitrate-test (:require + [app.common.time :as ct] [app.common.uuid :as uuid] [app.config :as cf] [app.db :as-alias db] + [app.email :as eml] [app.nitrate :as nitrate] [app.rpc :as-alias rpc] [app.rpc.commands.nitrate] + [app.rpc.commands.teams :as teams] [backend-tests.helpers :as th] [clojure.test :as t] [cuerdas.core :as str])) @@ -815,3 +818,118 @@ (t/is (not (th/success? out))) (t/is (= :validation (th/ex-type (:error out)))) (t/is (= :not-valid-teams (th/ex-code (:error out)))))))) + +(defn- add-team-to-org-nitrate-mock + [{:keys [org-id org-summary org-perms owner-id team-id sso-active?]}] + (fn [_cfg method params] + (case method + :get-org-membership (if (= (:profile-id params) owner-id) + {:is-member true :organization-id org-id} + {:is-member false :organization-id org-id}) + :get-org-members [owner-id] + :get-team-org {:organization nil} + :get-org-permissions org-perms + :set-team-org {:id team-id} + :get-org-sso {:active sso-active?} + :get-org-summary (assoc org-summary :teams [{:id team-id}]) + :add-profile-to-org {:is-member true} + nil))) + +(t/deftest add-team-to-organization-sends-sso-emails-to-new-members-and-invitees + (let [owner (th/create-profile* 301 {:is-active true + :fullname "Owner" + :email "owner301@example.com"}) + member (th/create-profile* 302 {:is-active true + :fullname "Member" + :email "member302@example.com"}) + team (th/create-team* 301 {:profile-id (:id owner)}) + _ (th/create-team-role* {:team-id (:id team) + :profile-id (:id member) + :role :editor}) + org-id (uuid/random) + org-name "SSO Org" + org-summary {:id org-id + :name org-name + :owner-id (:id owner) + :teams []} + org-perms {:owner-id (:id owner) + :permissions {:create-teams "any" + :move-teams "always" + :new-team-members "members"}} + sent (atom [])] + + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team) + :org-id nil + :email-to "external301@example.com" + :created-by (:id owner) + :role "editor" + :valid-until (ct/in-future "48h")}) + + (with-redefs [cf/flags (conj cf/flags :nitrate) + nitrate/call (add-team-to-org-nitrate-mock + {:org-id org-id + :org-summary org-summary + :org-perms org-perms + :owner-id (:id owner) + :team-id (:id team) + :sso-active? true}) + teams/initialize-user-in-nitrate-org (fn [& _] nil) + eml/send! (fn [params] (swap! sent conj params))] + (let [out (th/command! {::th/type :add-team-to-organization + ::rpc/profile-id (:id owner) + :team-id (:id team) + :organization-id org-id})] + (t/is (th/success? out)))) + + (let [emails (->> @sent (map :to) set)] + (t/is (= 2 (count @sent))) + (t/is (= #{"member302@example.com" "external301@example.com"} emails)) + (doseq [email-params @sent] + (t/is (= org-name (:organization-name email-params))) + (t/is (= eml/organization-setup-sso (::eml/factory email-params))))))) + +(t/deftest add-team-to-organization-skips-sso-emails-when-sso-inactive + (let [owner (th/create-profile* 303 {:is-active true :email "owner303@example.com"}) + member (th/create-profile* 304 {:is-active true :email "member304@example.com"}) + team (th/create-team* 303 {:profile-id (:id owner)}) + _ (th/create-team-role* {:team-id (:id team) + :profile-id (:id member) + :role :editor}) + org-id (uuid/random) + org-summary {:id org-id + :name "No SSO Org" + :owner-id (:id owner) + :teams []} + org-perms {:owner-id (:id owner) + :permissions {:create-teams "any" + :move-teams "always" + :new-team-members "members"}} + sent (atom [])] + + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team) + :org-id nil + :email-to "external303@example.com" + :created-by (:id owner) + :role "editor" + :valid-until (ct/in-future "48h")}) + + (with-redefs [cf/flags (conj cf/flags :nitrate) + nitrate/call (add-team-to-org-nitrate-mock + {:org-id org-id + :org-summary org-summary + :org-perms org-perms + :owner-id (:id owner) + :team-id (:id team) + :sso-active? false}) + teams/initialize-user-in-nitrate-org (fn [& _] nil) + eml/send! (fn [params] (swap! sent conj params))] + (let [out (th/command! {::th/type :add-team-to-organization + ::rpc/profile-id (:id owner) + :team-id (:id team) + :organization-id org-id})] + (t/is (th/success? out)) + (t/is (empty? @sent)))))) diff --git a/common/src/app/common/types/organization.cljc b/common/src/app/common/types/organization.cljc index 62d77ac14c..ca13e7de5b 100644 --- a/common/src/app/common/types/organization.cljc +++ b/common/src/app/common/types/organization.cljc @@ -61,4 +61,5 @@ [:name ::sm/text] [:initials [:maybe :string]] [:logo [:maybe ::sm/uri]] - [:avatar-bg-url [:maybe ::sm/uri]]]) + [:avatar-bg-url [:maybe ::sm/uri]] + [:sso-active {:optional true} [:maybe :boolean]]]) From f996ef372d0c323f21de598e5b2995d33b41cce6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 25 Jun 2026 11:26:15 +0200 Subject: [PATCH 030/229] :wrench: Migrate auto-label workflow from PAT to GitHub App toke --- .github/workflows/auto-label.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/auto-label.yml b/.github/workflows/auto-label.yml index c27b45a5a2..cd6224a544 100644 --- a/.github/workflows/auto-label.yml +++ b/.github/workflows/auto-label.yml @@ -10,10 +10,18 @@ jobs: triage: runs-on: ubuntu-latest steps: + - name: Generate GitHub App token + id: triage-app-token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ secrets.TRAIGE_APP_ID }} + private-key: ${{ secrets.TRIAGE_APP_PRIVATE_KEY }} + owner: ${{ github.repository_owner }} + - name: Process Issue or PR uses: actions/github-script@v7 with: - github-token: ${{ secrets.PROJECT_TOKEN }} + github-token: ${{ steps.triage-app-token.outputs.token }} script: | // === 1. CONFIGURATION === const PROJECT_NUMBER = 8; // <--- Replace with your project board number From ce1191d86f001c80eb150e71cd81019b8ade5f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 25 Jun 2026 11:53:07 +0200 Subject: [PATCH 031/229] :bug: fix missing app-id in auto-label workflow --- .github/workflows/auto-label.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-label.yml b/.github/workflows/auto-label.yml index cd6224a544..4025286273 100644 --- a/.github/workflows/auto-label.yml +++ b/.github/workflows/auto-label.yml @@ -14,7 +14,7 @@ jobs: id: triage-app-token uses: actions/create-github-app-token@v1 with: - app-id: ${{ secrets.TRAIGE_APP_ID }} + app-id: ${{ secrets.TRIAGE_APP_ID }} private-key: ${{ secrets.TRIAGE_APP_PRIVATE_KEY }} owner: ${{ github.repository_owner }} From 14fb211733637bd36f9ce95f80fc6c260229681a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 25 Jun 2026 12:41:18 +0200 Subject: [PATCH 032/229] :bug: Set org as owner for auto-label workflow --- .github/workflows/auto-label.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-label.yml b/.github/workflows/auto-label.yml index 4025286273..27ae0f37a4 100644 --- a/.github/workflows/auto-label.yml +++ b/.github/workflows/auto-label.yml @@ -16,7 +16,7 @@ jobs: with: app-id: ${{ secrets.TRIAGE_APP_ID }} private-key: ${{ secrets.TRIAGE_APP_PRIVATE_KEY }} - owner: ${{ github.repository_owner }} + owner: penpot - name: Process Issue or PR uses: actions/github-script@v7 From d328cb4a9e1942a217cda00b66983e04e30d2c13 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 25 Jun 2026 13:07:20 +0200 Subject: [PATCH 033/229] :sparkles: Enable org owners to view organization teams (#10388) --- backend/src/app/nitrate.clj | 42 +++++ backend/src/app/rpc/commands/binfile.clj | 4 +- backend/src/app/rpc/commands/comments.clj | 44 ++--- backend/src/app/rpc/commands/files.clj | 44 ++--- .../src/app/rpc/commands/files_snapshot.clj | 9 +- .../src/app/rpc/commands/files_thumbnails.clj | 8 +- backend/src/app/rpc/commands/fonts.clj | 12 +- backend/src/app/rpc/commands/management.clj | 2 +- backend/src/app/rpc/commands/projects.clj | 15 +- backend/src/app/rpc/commands/teams.clj | 66 +++++--- .../app/rpc/commands/teams_invitations.clj | 2 +- backend/src/app/rpc/commands/viewer.clj | 7 +- backend/src/app/rpc/commands/webhooks.clj | 2 +- backend/src/app/rpc/permissions.clj | 66 +++++++- .../rpc_org_owner_permissions_test.clj | 150 ++++++++++++++++++ frontend/src/app/main/data/helpers.cljs | 14 ++ frontend/src/app/main/data/team.cljs | 49 ++++-- frontend/src/app/main/features.cljs | 3 +- frontend/src/app/main/refs.cljs | 6 +- .../src/app/main/ui/dashboard/sidebar.cljs | 25 +-- 20 files changed, 445 insertions(+), 125 deletions(-) create mode 100644 backend/test/backend_tests/rpc_org_owner_permissions_test.clj diff --git a/backend/src/app/nitrate.clj b/backend/src/app/nitrate.clj index 9c9c8339fc..c99451d6df 100644 --- a/backend/src/app/nitrate.clj +++ b/backend/src/app/nitrate.clj @@ -21,6 +21,7 @@ [app.http.session :as session] [app.rpc :as-alias rpc] [app.setup :as-alias setup] + [app.util.cache :as cache] [clojure.core :as c] [clojure.string :as str] [integrant.core :as ig])) @@ -507,6 +508,47 @@ ;; UTILS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defonce ^:private team-org-owner-cache + ;; Short TTL: permission checks run on the read path, so we avoid an + ;; HTTP call to nitrate per check. The org owner of a team rarely + ;; changes, and stale entries only grant read access for a few seconds. + (cache/create :expire "30s" :max-size 2048)) + +(defn- nitrate-client? + "True when `cfg` is a config map carrying the nitrate client (i.e. not + a raw db connection/pool passed by an internal caller)." + [cfg] + (and (map? cfg) (some? (get cfg ::client)))) + +(def ^:private cache-miss ::no-org-owner) + +(defn- get-team-org-owner-id + "Returns the organization owner-id for `team-id`, or nil. Cached + briefly, including negative results (teams with no organization) so + repeated unauthorized probes don't each hit nitrate." + [cfg team-id] + (let [owner-id (cache/get team-org-owner-cache team-id + (fn [team-id] + (let [team-with-org (call cfg :get-team-org {:team-id team-id})] + (or (get-in team-with-org [:organization :owner-id]) + cache-miss))))] + (when-not (= owner-id cache-miss) + owner-id))) + +(defn organization-owner-of-team? + "True if `profile-id` is the owner of the organization that owns + `team-id`. Used to grant non-member org owners read-only access to the + teams of their organizations. `cfg` must be a config map with the + nitrate client; raw db connections/pools yield false so internal + callers are unaffected. Returns false when the :nitrate flag is off." + [cfg profile-id team-id] + (boolean + (when (and (contains? cf/flags :nitrate) + (nitrate-client? cfg) + (some? team-id) + (some? profile-id)) + (= profile-id (get-team-org-owner-id cfg team-id))))) + (defn sso-session-authorized? "Fetches the org-SSO config for the given organization or team and checks whether the HTTP request has a valid session entry for it. Returns a map diff --git a/backend/src/app/rpc/commands/binfile.clj b/backend/src/app/rpc/commands/binfile.clj index ec27d455b8..79b0bf7cf9 100644 --- a/backend/src/app/rpc/commands/binfile.clj +++ b/backend/src/app/rpc/commands/binfile.clj @@ -74,8 +74,8 @@ ::doc/changes [["2.12" "Remove version parameter, only one version is supported"]] ::webhooks/event? true ::sm/params schema:export-binfile} - [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id file-id] :as params}] - (files/check-read-permissions! pool profile-id file-id) + [cfg {:keys [::rpc/profile-id file-id] :as params}] + (files/check-read-permissions! cfg profile-id file-id) (sse/response (partial export-binfile cfg params))) ;; --- Command: import-binfile diff --git a/backend/src/app/rpc/commands/comments.clj b/backend/src/app/rpc/commands/comments.clj index 3383d3d343..6a926d1e98 100644 --- a/backend/src/app/rpc/commands/comments.clj +++ b/backend/src/app/rpc/commands/comments.clj @@ -230,8 +230,8 @@ {::doc/added "1.15" ::sm/params schema:get-comment-threads} [cfg {:keys [::rpc/profile-id file-id share-id] :as params}] - (db/run! cfg (fn [{:keys [::db/conn]}] - (files/check-comment-permissions! conn profile-id file-id share-id) + (db/run! cfg (fn [{:keys [::db/conn] :as cfg}] + (files/check-comment-permissions! cfg profile-id file-id share-id) (get-comment-threads conn profile-id file-id)))) (defn- get-comment-threads-sql @@ -328,8 +328,8 @@ {::doc/added "1.15" ::sm/params schema:get-comment-thread} [cfg {:keys [::rpc/profile-id file-id id share-id] :as params}] - (db/run! cfg (fn [{:keys [::db/conn]}] - (files/check-comment-permissions! conn profile-id file-id share-id) + (db/run! cfg (fn [{:keys [::db/conn] :as cfg}] + (files/check-comment-permissions! cfg profile-id file-id share-id) (some-> (db/exec-one! conn [sql:get-comment-thread profile-id file-id id]) (decode-row))))) @@ -347,9 +347,9 @@ {::doc/added "1.15" ::sm/params schema:get-comments} [cfg {:keys [::rpc/profile-id thread-id share-id]}] - (db/run! cfg (fn [{:keys [::db/conn]}] + (db/run! cfg (fn [{:keys [::db/conn] :as cfg}] (let [{:keys [file-id]} (get-comment-thread conn thread-id)] - (files/check-comment-permissions! conn profile-id file-id share-id) + (files/check-comment-permissions! cfg profile-id file-id share-id) (get-comments conn thread-id))))) (def sql:get-comments @@ -406,8 +406,8 @@ ::doc/changes ["1.15" "Imported from queries and renamed."] ::sm/params schema:get-profiles-for-file-comments} [cfg {:keys [::rpc/profile-id file-id share-id]}] - (db/run! cfg (fn [{:keys [::db/conn]}] - (files/check-comment-permissions! conn profile-id file-id share-id) + (db/run! cfg (fn [{:keys [::db/conn] :as cfg}] + (files/check-comment-permissions! cfg profile-id file-id share-id) (get-file-comments-users conn file-id profile-id)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -534,9 +534,9 @@ {::doc/added "1.15" ::sm/params schema:update-comment-thread-status ::db/transaction true} - [{:keys [::db/conn]} {:keys [::rpc/profile-id id share-id]}] + [{:keys [::db/conn] :as cfg} {:keys [::rpc/profile-id id share-id]}] (let [{:keys [file-id]} (get-comment-thread conn id ::sql/for-update true)] - (files/check-comment-permissions! conn profile-id file-id share-id) + (files/check-comment-permissions! cfg profile-id file-id share-id) (upsert-comment-thread-status! conn profile-id id))) ;; --- COMMAND: Update Comment Thread @@ -552,9 +552,9 @@ {::doc/added "1.15" ::sm/params schema:update-comment-thread ::db/transaction true} - [{:keys [::db/conn]} {:keys [::rpc/profile-id id is-resolved share-id]}] + [{:keys [::db/conn] :as cfg} {:keys [::rpc/profile-id id is-resolved share-id]}] (let [{:keys [file-id]} (get-comment-thread conn id ::sql/for-update true)] - (files/check-comment-permissions! conn profile-id file-id share-id) + (files/check-comment-permissions! cfg profile-id file-id share-id) (db/update! conn :comment-thread {:is-resolved is-resolved} {:id id}) @@ -582,7 +582,7 @@ {:keys [team-id project-id] :as file} (get-file cfg file-id page-id)] - (files/check-comment-permissions! conn profile-id file-id share-id) + (files/check-comment-permissions! cfg profile-id file-id share-id) (quotes/check! cfg {::quotes/id ::quotes/comments-per-file ::quotes/profile-id profile-id @@ -653,7 +653,7 @@ {:keys [file-id page-id] :as thread} (get-comment-thread conn thread-id ::sql/for-update true)] - (files/check-comment-permissions! conn profile-id file-id share-id) + (files/check-comment-permissions! cfg profile-id file-id share-id) ;; Don't allow edit comments to not owners (when-not (= owner-id profile-id) @@ -690,9 +690,9 @@ {::doc/added "1.15" ::sm/params schema:delete-comment-thread ::db/transaction true} - [{:keys [::db/conn]} {:keys [::rpc/profile-id id share-id]}] + [{:keys [::db/conn] :as cfg} {:keys [::rpc/profile-id id share-id]}] (let [{:keys [owner-id file-id] :as thread} (get-comment-thread conn id ::sql/for-update true)] - (files/check-comment-permissions! conn profile-id file-id share-id) + (files/check-comment-permissions! cfg profile-id file-id share-id) (when-not (= owner-id profile-id) (ex/raise :type :validation :code :not-allowed)) @@ -713,14 +713,14 @@ {::doc/added "1.15" ::sm/params schema:delete-comment ::db/transaction true} - [{:keys [::db/conn]} {:keys [::rpc/profile-id id share-id]}] + [{:keys [::db/conn] :as cfg} {:keys [::rpc/profile-id id share-id]}] (let [{:keys [owner-id thread-id] :as comment} (get-comment conn id ::sql/for-update true) {:keys [file-id]} (get-comment-thread conn thread-id)] - (files/check-comment-permissions! conn profile-id file-id share-id) + (files/check-comment-permissions! cfg profile-id file-id share-id) (when-not (= owner-id profile-id) (ex/raise :type :validation :code :not-allowed)) @@ -743,9 +743,9 @@ {::doc/added "1.15" ::sm/params schema:update-comment-thread-position ::db/transaction true} - [{:keys [::db/conn]} {:keys [::rpc/profile-id ::rpc/request-at id position frame-id share-id]}] + [{:keys [::db/conn] :as cfg} {:keys [::rpc/profile-id ::rpc/request-at id position frame-id share-id]}] (let [{:keys [file-id]} (get-comment-thread conn id ::sql/for-update true)] - (files/check-comment-permissions! conn profile-id file-id share-id) + (files/check-comment-permissions! cfg profile-id file-id share-id) (db/update! conn :comment-thread {:modified-at request-at :position (db/pgpoint position) @@ -767,9 +767,9 @@ {::doc/added "1.15" ::sm/params schema:update-comment-thread-frame ::db/transaction true} - [{:keys [::db/conn]} {:keys [::rpc/profile-id ::rpc/request-at id frame-id share-id]}] + [{:keys [::db/conn] :as cfg} {:keys [::rpc/profile-id ::rpc/request-at id frame-id share-id]}] (let [{:keys [file-id]} (get-comment-thread conn id ::sql/for-update true)] - (files/check-comment-permissions! conn profile-id file-id share-id) + (files/check-comment-permissions! cfg profile-id file-id share-id) (db/update! conn :comment-thread {:modified-at request-at :frame-id frame-id} diff --git a/backend/src/app/rpc/commands/files.clj b/backend/src/app/rpc/commands/files.clj index 3851ea577b..98a6ec0ec7 100644 --- a/backend/src/app/rpc/commands/files.clj +++ b/backend/src/app/rpc/commands/files.clj @@ -84,10 +84,10 @@ (perms/make-edition-predicate-fn bfc/get-file-permissions)) (def has-read-permissions? - (perms/make-read-predicate-fn bfc/get-file-permissions)) + (perms/make-read-predicate-fn perms/get-file-read-permissions)) (def has-comment-permissions? - (perms/make-comment-predicate-fn bfc/get-file-permissions)) + (perms/make-comment-predicate-fn perms/get-file-read-permissions)) (def check-edition-permissions! (perms/make-check-fn has-edit-permissions?)) @@ -99,8 +99,8 @@ ;; explicit comment permissions through the share-id (defn check-comment-permissions! - [conn profile-id file-id share-id] - (let [perms (bfc/get-file-permissions conn profile-id file-id share-id) + [cfg profile-id file-id share-id] + (let [perms (perms/get-file-read-permissions cfg profile-id file-id share-id) can-read (has-read-permissions? perms) can-comment (has-comment-permissions? perms)] (when-not (or can-read can-comment) @@ -152,7 +152,7 @@ (defn- get-minimal-file-with-perms [cfg {:keys [:id ::rpc/profile-id]}] (let [mfile (get-minimal-file cfg id) - perms (bfc/get-file-permissions cfg profile-id id)] + perms (perms/get-file-read-permissions cfg profile-id id)] (assoc mfile :permissions perms))) (defn get-file-etag @@ -171,7 +171,7 @@ ::sm/params schema:get-file ::sm/result schema:file-with-permissions ::db/transaction true} - [{:keys [::db/conn] :as cfg} {:keys [::rpc/profile-id id project-id] :as params}] + [cfg {:keys [::rpc/profile-id id project-id] :as params}] ;; The COND middleware makes initial request for a file and ;; permissions when the incoming request comes with an ;; ETAG. When ETAG does not matches, the request is resolved @@ -179,10 +179,10 @@ ;; will be already prefetched and we just reuse them instead ;; of making an additional database queries. (let [perms (or (:permissions (::cond/object params)) - (bfc/get-file-permissions conn profile-id id))] + (perms/get-file-read-permissions cfg profile-id id))] (check-read-permissions! perms) - (let [team (teams/get-team conn + (let [team (teams/get-team cfg :profile-id profile-id :project-id project-id :file-id id) @@ -242,7 +242,7 @@ ::sm/result schema:file-fragment} [cfg {:keys [::rpc/profile-id file-id fragment-id share-id]}] (db/run! cfg (fn [cfg] - (let [perms (bfc/get-file-permissions cfg profile-id file-id share-id)] + (let [perms (perms/get-file-read-permissions cfg profile-id file-id share-id)] (check-read-permissions! perms) (-> (get-file-fragment cfg file-id fragment-id) (rph/with-http-cache long-cache-duration)))))) @@ -286,7 +286,7 @@ ::sm/params schema:get-project-files ::sm/result schema:files} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id project-id]}] - (projects/check-read-permissions! pool profile-id project-id) + (projects/check-read-permissions! cfg profile-id project-id) (get-project-files pool project-id)) ;; --- COMMAND QUERY: has-file-libraries @@ -304,7 +304,7 @@ ::sm/result ::sm/boolean} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id file-id]}] (dm/with-open [conn (db/open pool)] - (check-read-permissions! pool profile-id file-id) + (check-read-permissions! cfg profile-id file-id) (get-has-file-libraries conn file-id))) (def ^:private sql:has-file-libraries @@ -337,7 +337,7 @@ ::sm/result ::sm/int} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id file-id]}] (dm/with-open [conn (db/open pool)] - (check-read-permissions! pool profile-id file-id) + (check-read-permissions! cfg profile-id file-id) (get-library-usage conn file-id))) (def ^:private sql:get-library-usage @@ -387,7 +387,7 @@ :code :params-validation :hint "page-id is required when object-id is provided")) - (let [perms (bfc/get-file-permissions conn profile-id file-id share-id) + (let [perms (perms/get-file-read-permissions cfg profile-id file-id share-id) file (bfc/get-file cfg file-id :read-only? true) proj (db/get conn :project {:id (:project-id file)}) @@ -438,8 +438,8 @@ ::sm/params schema:get-page} [cfg {:keys [::rpc/profile-id file-id share-id] :as params}] (db/tx-run! cfg - (fn [{:keys [::db/conn] :as cfg}] - (check-read-permissions! conn profile-id file-id share-id) + (fn [cfg] + (check-read-permissions! cfg profile-id file-id share-id) (get-page cfg (assoc params :profile-id profile-id))))) ;; --- COMMAND QUERY: get-team-shared-files @@ -562,7 +562,7 @@ (defn- get-team-shared-files [{:keys [::db/conn] :as cfg} {:keys [team-id profile-id]}] - (teams/check-read-permissions! conn profile-id team-id) + (teams/check-read-permissions! cfg profile-id team-id) (let [process-row (fn [{:keys [id library-file-ids]}] @@ -675,8 +675,8 @@ ::sm/params schema:get-file-stats ::sm/result schema:get-file-stats-result ::db/transaction true} - [{:keys [::db/conn] :as cfg} {:keys [::rpc/profile-id id]}] - (check-read-permissions! conn profile-id id) + [cfg {:keys [::rpc/profile-id id]}] + (check-read-permissions! cfg profile-id id) (get-file-stats cfg id)) @@ -719,7 +719,7 @@ ::sm/params schema:get-library-file-references} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id file-id] :as params}] (dm/with-open [conn (db/open pool)] - (check-read-permissions! conn profile-id file-id) + (check-read-permissions! cfg profile-id file-id) (get-library-file-references conn file-id))) ;; --- COMMAND QUERY: get-team-recent-files @@ -763,7 +763,7 @@ ::sm/params schema:get-team-recent-files} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id team-id]}] (dm/with-open [conn (db/open pool)] - (teams/check-read-permissions! conn profile-id team-id) + (teams/check-read-permissions! cfg profile-id team-id) (get-team-recent-files conn team-id))) @@ -808,8 +808,8 @@ {::doc/added "2.12" ::sm/params schema:get-team-deleted-files} [cfg {:keys [::rpc/profile-id team-id]}] - (db/run! cfg (fn [{:keys [::db/conn]}] - (teams/check-read-permissions! conn profile-id team-id) + (db/run! cfg (fn [{:keys [::db/conn] :as cfg}] + (teams/check-read-permissions! cfg profile-id team-id) (get-team-deleted-files conn team-id)))) ;; --- COMMAND QUERY: get-file-info diff --git a/backend/src/app/rpc/commands/files_snapshot.clj b/backend/src/app/rpc/commands/files_snapshot.clj index 38caa0aa05..7baac52428 100644 --- a/backend/src/app/rpc/commands/files_snapshot.clj +++ b/backend/src/app/rpc/commands/files_snapshot.clj @@ -22,6 +22,7 @@ [app.rpc.commands.files :as files] [app.rpc.commands.teams :as teams] [app.rpc.doc :as-alias doc] + [app.rpc.permissions :as perms] [app.rpc.quotes :as quotes] [app.util.services :as sv])) @@ -33,8 +34,8 @@ {::doc/added "1.20" ::sm/params schema:get-file-snapshots} [cfg {:keys [::rpc/profile-id file-id] :as params}] - (db/run! cfg (fn [{:keys [::db/conn]}] - (files/check-read-permissions! conn profile-id file-id) + (db/run! cfg (fn [{:keys [::db/conn] :as cfg}] + (files/check-read-permissions! cfg profile-id file-id) (fsnap/get-visible-snapshots conn file-id)))) ;; --- COMMAND QUERY: get-file-snapshot @@ -52,8 +53,8 @@ ::sm/params schema:get-file-snapshot ::sm/result files/schema:file-with-permissions ::db/transaction true} - [{:keys [::db/conn] :as cfg} {:keys [::rpc/profile-id file-id id] :as params}] - (let [perms (bfc/get-file-permissions conn profile-id file-id)] + [cfg {:keys [::rpc/profile-id file-id id] :as params}] + (let [perms (perms/get-file-read-permissions cfg profile-id file-id)] (files/check-read-permissions! perms) (let [snapshot (fsnap/get-snapshot cfg file-id id)] (when-not snapshot diff --git a/backend/src/app/rpc/commands/files_thumbnails.clj b/backend/src/app/rpc/commands/files_thumbnails.clj index 130d9a86be..2681b51c09 100644 --- a/backend/src/app/rpc/commands/files_thumbnails.clj +++ b/backend/src/app/rpc/commands/files_thumbnails.clj @@ -85,7 +85,7 @@ ::sm/result [:map-of [:string {:max 250}] [:string {:max 250}]]} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id file-id tag] :as params}] (dm/with-open [conn (db/open pool)] - (files/check-read-permissions! conn profile-id file-id) + (files/check-read-permissions! cfg profile-id file-id) (if tag (get-object-thumbnails-by-tag conn file-id tag) (get-object-thumbnails conn file-id)))) @@ -197,9 +197,9 @@ ::sm/params schema:get-file-data-for-thumbnail ::sm/result schema:partial-file} [cfg {:keys [::rpc/profile-id file-id strip-frames-with-thumbnails] :as params}] - (db/run! cfg (fn [{:keys [::db/conn] :as cfg}] - (files/check-read-permissions! conn profile-id file-id) - (let [team (teams/get-team conn + (db/run! cfg (fn [cfg] + (files/check-read-permissions! cfg profile-id file-id) + (let [team (teams/get-team cfg :profile-id profile-id :file-id file-id) file (bfc/get-file cfg file-id diff --git a/backend/src/app/rpc/commands/fonts.clj b/backend/src/app/rpc/commands/fonts.clj index 5f031a4583..4d9eb77636 100644 --- a/backend/src/app/rpc/commands/fonts.clj +++ b/backend/src/app/rpc/commands/fonts.clj @@ -6,7 +6,6 @@ (ns app.rpc.commands.fonts (:require - [app.binfile.common :as bfc] [app.common.data.macros :as dm] [app.common.exceptions :as ex] [app.common.logging :as l] @@ -30,6 +29,7 @@ [app.rpc.commands.teams :as teams] [app.rpc.doc :as-alias doc] [app.rpc.helpers :as rph] + [app.rpc.permissions :as perms] [app.rpc.quotes :as quotes] [app.storage :as sto] [app.storage.tmp :as tmp] @@ -71,14 +71,14 @@ (cond (uuid? team-id) (do - (teams/check-read-permissions! conn profile-id team-id) + (teams/check-read-permissions! cfg profile-id team-id) (db/query conn :team-font-variant {:team-id team-id :deleted-at nil})) (uuid? project-id) (let [project (db/get-by-id conn :project project-id {:columns [:id :team-id]})] - (projects/check-read-permissions! conn profile-id project-id) + (projects/check-read-permissions! cfg profile-id project-id) (db/query conn :team-font-variant {:team-id (:team-id project) :deleted-at nil})) @@ -86,7 +86,7 @@ (uuid? file-id) (let [file (db/get-by-id conn :file file-id {:columns [:id :project-id]}) project (db/get-by-id conn :project (:project-id file) {:columns [:id :team-id]}) - perms (bfc/get-file-permissions conn profile-id file-id share-id)] + perms (perms/get-file-read-permissions cfg profile-id file-id share-id)] (files/check-read-permissions! perms) (db/query conn :team-font-variant {:team-id (:team-id project) @@ -400,7 +400,7 @@ ::sm/params schema:download-font} [{:keys [::sto/storage ::db/pool] :as cfg} {:keys [::rpc/profile-id id]}] (let [variant (db/get pool :team-font-variant {:id id})] - (teams/check-read-permissions! pool profile-id (:team-id variant)) + (teams/check-read-permissions! cfg profile-id (:team-id variant)) ;; Try to get the best available font format (prefer TTF for broader compatibility). (let [media-id (or (:ttf-file-id variant) @@ -432,7 +432,7 @@ (ex/raise :type :not-found :code :object-not-found)) - (teams/check-read-permissions! pool profile-id (:team-id (first variants))) + (teams/check-read-permissions! cfg profile-id (:team-id (first variants))) (let [tempfile (tmp/tempfile :suffix ".zip") ffamily (-> variants first :font-family)] diff --git a/backend/src/app/rpc/commands/management.clj b/backend/src/app/rpc/commands/management.clj index c56f07ef83..41931f53ec 100644 --- a/backend/src/app/rpc/commands/management.clj +++ b/backend/src/app/rpc/commands/management.clj @@ -176,7 +176,7 @@ ;; profile-id is present; it can be ommited if this function is ;; called from SREPL helpers where no profile is available (when (uuid? profile-id) - (teams/check-read-permissions! conn profile-id team-id)) + (teams/check-read-permissions! cfg profile-id team-id)) (binding [bfc/*state* (volatile! {:index {team-id (uuid/next)}})] (let [projs (bfc/get-team-projects cfg team-id) diff --git a/backend/src/app/rpc/commands/projects.clj b/backend/src/app/rpc/commands/projects.clj index 0fdb9fb88f..0cb1b46e57 100644 --- a/backend/src/app/rpc/commands/projects.clj +++ b/backend/src/app/rpc/commands/projects.clj @@ -56,11 +56,16 @@ :can-edit (or is-owner is-admin can-edit) :can-read true}))) +(defn- get-read-permissions + [cfg profile-id project-id] + (or (get-permissions cfg profile-id project-id) + (perms/get-organization-owner-permissions cfg profile-id :project-id project-id))) + (def has-edit-permissions? (perms/make-edition-predicate-fn get-permissions)) (def has-read-permissions? - (perms/make-read-predicate-fn get-permissions)) + (perms/make-read-predicate-fn get-read-permissions)) (def check-edition-permissions! (perms/make-check-fn has-edit-permissions?)) @@ -159,10 +164,10 @@ {::doc/added "1.18" ::rpc/id-type :project ::sm/params schema:get-project} - [{:keys [::db/pool]} {:keys [::rpc/profile-id id]}] + [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id id]}] (dm/with-open [conn (db/open pool)] (let [project (db/get-by-id conn :project id)] - (check-read-permissions! conn profile-id id) + (check-read-permissions! cfg profile-id id) project))) @@ -230,8 +235,8 @@ ::webhooks/batch-key (webhooks/key-fn ::rpc/profile-id :id) ::webhooks/event? true ::db/transaction true} - [{:keys [::db/conn]} {:keys [::rpc/profile-id id team-id is-pinned] :as params}] - (check-read-permissions! conn profile-id id) + [{:keys [::db/conn] :as cfg} {:keys [::rpc/profile-id id team-id is-pinned] :as params}] + (check-read-permissions! cfg profile-id id) (db/exec-one! conn [sql:update-project-pin team-id id profile-id is-pinned is-pinned]) nil) diff --git a/backend/src/app/rpc/commands/teams.clj b/backend/src/app/rpc/commands/teams.clj index 50458c27f8..5efc564daa 100644 --- a/backend/src/app/rpc/commands/teams.clj +++ b/backend/src/app/rpc/commands/teams.clj @@ -60,6 +60,11 @@ :can-edit (or is-owner is-admin can-edit) :can-read true}))) +(defn get-read-permissions + [cfg profile-id team-id] + (or (get-permissions cfg profile-id team-id) + (perms/get-organization-owner-permissions cfg profile-id :team-id team-id))) + (def has-admin-permissions? (perms/make-admin-predicate-fn get-permissions)) @@ -67,7 +72,7 @@ (perms/make-edition-predicate-fn get-permissions)) (def has-read-permissions? - (perms/make-read-predicate-fn get-permissions)) + (perms/make-read-predicate-fn get-read-permissions)) (def check-admin-permissions! (perms/make-check-fn has-admin-permissions?)) @@ -180,7 +185,6 @@ sql (if (contains? cf/flags :subscriptions) sql:get-teams-with-permissions-and-subscription sql:get-teams-with-permissions)] - (->> (db/exec! conn [sql (:default-team-id profile) profile-id]) (into [] xform:process-teams)))) @@ -238,19 +242,34 @@ {::doc/added "1.17" ::rpc/id-type :team ::sm/params schema:get-team} - [{:keys [::db/pool]} {:keys [::rpc/profile-id id file-id]}] - (get-team pool :profile-id profile-id :team-id id :file-id file-id)) + [cfg {:keys [::rpc/profile-id id file-id] :as params}] + (let [team (get-team cfg :profile-id profile-id :team-id id :file-id file-id)] + (if (contains? cf/flags :nitrate) + (nitrate/add-org-info-to-team cfg team params) + team))) + +(defn- get-org-owner-viewer-team + "When `profile-id` is a non-member owner of the organization that owns + the requested team, returns the team shaped with viewer permissions; + otherwise nil. `cfg` must carry the nitrate client." + [cfg profile-id default-team-id params] + (when-let [team-id (perms/resolve-team-id cfg params)] + (when (nitrate/organization-owner-of-team? cfg profile-id team-id) + (when-let [team (db/get* cfg :team {:id team-id})] + (when-not (db/is-row-deleted? team) + (-> team + (decode-row) + (merge perms/viewer-role-flags) + (assoc :is-default (= team-id default-team-id)) + (process-permissions))))))) (defn get-team - [conn & {:keys [profile-id team-id project-id file-id] :as params}] + [cfg & {:keys [profile-id team-id project-id file-id] :as params}] (assert (uuid? profile-id) "profile-id is mandatory") - (assert (or (db/connection? conn) - (db/pool? conn)) - "connection or pool is mandatory") (let [{:keys [default-team-id] :as profile} - (profile/get-profile conn profile-id) + (profile/get-profile cfg profile-id) sql (if (contains? cf/flags :subscriptions) @@ -262,14 +281,14 @@ (some? team-id) (let [sql (str "WITH teams AS (" sql ") " "SELECT * FROM teams WHERE id=?")] - (db/exec-one! conn [sql default-team-id profile-id team-id])) + (db/exec-one! cfg [sql default-team-id profile-id team-id])) (some? project-id) (let [sql (str "WITH teams AS (" sql ") " "SELECT t.* FROM teams AS t " " JOIN project AS p ON (p.team_id = t.id) " " WHERE p.id=?")] - (db/exec-one! conn [sql default-team-id profile-id project-id])) + (db/exec-one! cfg [sql default-team-id profile-id project-id])) (some? file-id) (let [sql (str "WITH teams AS (" sql ") " @@ -277,17 +296,18 @@ " JOIN project AS p ON (p.team_id = t.id) " " JOIN file AS f ON (f.project_id = p.id) " " WHERE f.id=?")] - (db/exec-one! conn [sql default-team-id profile-id file-id])) + (db/exec-one! cfg [sql default-team-id profile-id file-id])) :else (throw (IllegalArgumentException. "invalid arguments")))] - (when-not result - (ex/raise :type :not-found - :code :team-does-not-exist)) - (-> result - (decode-row) - (process-permissions)))) + (if result + (-> result + (decode-row) + (process-permissions)) + (or (get-org-owner-viewer-team cfg profile-id default-team-id params) + (ex/raise :type :not-found + :code :team-does-not-exist))))) ;; --- Query: Team Members @@ -316,7 +336,7 @@ ::sm/params schema:get-team-memebrs} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id team-id]}] (dm/with-open [conn (db/open pool)] - (check-read-permissions! conn profile-id team-id) + (check-read-permissions! cfg profile-id team-id) (get-team-members conn team-id))) ;; --- Query: Team Users @@ -342,10 +362,10 @@ (dm/with-open [conn (db/open pool)] (if team-id (do - (check-read-permissions! conn profile-id team-id) + (check-read-permissions! cfg profile-id team-id) (get-users conn team-id)) (let [{team-id :id} (get-team-for-file conn file-id)] - (check-read-permissions! conn profile-id team-id) + (check-read-permissions! cfg profile-id team-id) (get-users conn team-id))))) ;; This is a similar query to team members but can contain more data @@ -432,7 +452,7 @@ ::sm/params schema:get-team-stats} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id team-id]}] (dm/with-open [conn (db/open pool)] - (check-read-permissions! conn profile-id team-id) + (check-read-permissions! cfg profile-id team-id) (get-team-stats conn team-id))) (def sql:team-stats @@ -468,7 +488,7 @@ ::sm/params schema:get-team-invitations} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id team-id]}] (dm/with-open [conn (db/open pool)] - (check-read-permissions! conn profile-id team-id) + (check-read-permissions! cfg profile-id team-id) (get-team-invitations conn team-id))) diff --git a/backend/src/app/rpc/commands/teams_invitations.clj b/backend/src/app/rpc/commands/teams_invitations.clj index 34795ba77b..c17a4e5a45 100644 --- a/backend/src/app/rpc/commands/teams_invitations.clj +++ b/backend/src/app/rpc/commands/teams_invitations.clj @@ -541,7 +541,7 @@ ::doc/module :teams ::sm/params schema:get-team-invitation-token} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id team-id email] :as params}] - (teams/check-read-permissions! pool profile-id team-id) + (teams/check-read-permissions! cfg profile-id team-id) (let [email (profile/clean-email email) invit (-> (db/get pool :team-invitation {:team-id team-id diff --git a/backend/src/app/rpc/commands/viewer.clj b/backend/src/app/rpc/commands/viewer.clj index 570751e48b..9333800af6 100644 --- a/backend/src/app/rpc/commands/viewer.clj +++ b/backend/src/app/rpc/commands/viewer.clj @@ -16,6 +16,7 @@ [app.rpc.commands.teams :as teams] [app.rpc.cond :as-alias cond] [app.rpc.doc :as-alias doc] + [app.rpc.permissions :as perms] [app.util.services :as sv] [cuerdas.core :as str])) @@ -125,8 +126,8 @@ ::sm/params schema:get-view-only-bundle} [system {:keys [::rpc/profile-id file-id share-id] :as params}] (db/run! system - (fn [{:keys [::db/conn] :as system}] - (let [perms (bfc/get-file-permissions conn profile-id file-id share-id) + (fn [system] + (let [perms (perms/get-file-read-permissions system profile-id file-id share-id) params (-> params (assoc ::perms perms) (assoc :profile-id profile-id))] @@ -139,5 +140,3 @@ :hint "object not found")) (get-view-only-bundle system params))))) - - diff --git a/backend/src/app/rpc/commands/webhooks.clj b/backend/src/app/rpc/commands/webhooks.clj index 702a9bdd14..33341bb34e 100644 --- a/backend/src/app/rpc/commands/webhooks.clj +++ b/backend/src/app/rpc/commands/webhooks.clj @@ -172,6 +172,6 @@ ::sm/params schema:get-webhooks} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id team-id]}] (dm/with-open [conn (db/open pool)] - (check-read-permissions! conn profile-id team-id) + (check-read-permissions! cfg profile-id team-id) (->> (db/exec! conn [sql:get-webhooks team-id]) (mapv decode-row)))) diff --git a/backend/src/app/rpc/permissions.clj b/backend/src/app/rpc/permissions.clj index f4107ec235..36ff9b2c23 100644 --- a/backend/src/app/rpc/permissions.clj +++ b/backend/src/app/rpc/permissions.clj @@ -7,8 +7,11 @@ (ns app.rpc.permissions "A permission checking helper factories." (:require + [app.binfile.common :as bfc] [app.common.exceptions :as ex] - [app.common.schema :as sm])) + [app.common.schema :as sm] + [app.db :as db] + [app.nitrate :as nitrate])) (def schema:permissions [:map {:title "Permissions"} @@ -89,3 +92,64 @@ (ex/raise :type :not-found :code :object-not-found :hint "not found")))) + +;; --- Organization owner (Nitrate) viewer access +;; +;; Read-permission helpers that augment normal Penpot membership with +;; Nitrate organization-owner viewer access. Edit/admin permission +;; providers intentionally stay membership-only. + +(def viewer-role-flags + "Role flags granted to a non-member organization owner: read-only. + Shared so callers that build full team/file rows shape permissions the + same way the permission lookups do." + {:is-owner false + :is-admin false + :can-edit false}) + +(def ^:private sql:get-team-id-for-project + "SELECT team_id FROM project WHERE id = ?") + +(def ^:private sql:get-team-id-for-file + "SELECT p.team_id + FROM file AS f + JOIN project AS p ON (p.id = f.project_id) + WHERE f.id = ?") + +(defn get-team-id-for-project + [cfg project-id] + (some-> (db/exec-one! cfg [sql:get-team-id-for-project project-id]) + (:team-id))) + +(defn get-team-id-for-file + [cfg file-id] + (some-> (db/exec-one! cfg [sql:get-team-id-for-file file-id]) + (:team-id))) + +(defn resolve-team-id + [cfg {:keys [team-id project-id file-id]}] + (cond + (some? team-id) team-id + (some? project-id) (get-team-id-for-project cfg project-id) + (some? file-id) (get-team-id-for-file cfg file-id))) + +(defn get-organization-owner-permissions + "When `profile-id` is a non-member owner of the organization that owns + the team/project/file referenced by `params`, returns read-only viewer + permissions; otherwise nil." + [cfg profile-id & {:as params}] + (when-let [team-id (resolve-team-id cfg params)] + (when (nitrate/organization-owner-of-team? cfg profile-id team-id) + (assoc viewer-role-flags + :can-read true + :type :membership + :is-logged (some? profile-id))))) + +(defn get-file-read-permissions + ([cfg profile-id file-id] + (or (bfc/get-file-permissions cfg profile-id file-id) + (get-organization-owner-permissions cfg profile-id :file-id file-id))) + + ([cfg profile-id file-id share-id] + (or (bfc/get-file-permissions cfg profile-id file-id share-id) + (get-organization-owner-permissions cfg profile-id :file-id file-id)))) diff --git a/backend/test/backend_tests/rpc_org_owner_permissions_test.clj b/backend/test/backend_tests/rpc_org_owner_permissions_test.clj new file mode 100644 index 0000000000..7ac84ef042 --- /dev/null +++ b/backend/test/backend_tests/rpc_org_owner_permissions_test.clj @@ -0,0 +1,150 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns backend-tests.rpc-org-owner-permissions-test + (:require + [app.common.uuid :as uuid] + [app.config :as cf] + [app.nitrate :as nitrate] + [app.rpc :as-alias rpc] + [backend-tests.helpers :as th] + [clojure.test :as t])) + +(t/use-fixtures :once th/state-init) +(t/use-fixtures :each th/database-reset) + +(defn- org-data + [org-id owner-id] + {:id org-id + :name "Acme" + :slug "acme" + :owner-id owner-id + :avatar-bg-url "http://example.com/avatar.png" + :permissions {}}) + +(defn- with-org-owner-access + [{:keys [org-owner-id org-id team-id]} f] + (with-redefs [cf/flags (conj cf/flags :nitrate) + nitrate/organization-owner-of-team? + (fn [_cfg profile-id candidate-team-id] + (and (= org-owner-id profile-id) + (= team-id candidate-team-id))) + + nitrate/call + (fn [_cfg method params] + (case method + :get-owned-orgs + [{:id org-id + :name "Acme" + :owner-id org-owner-id + :teams [{:id team-id :is-your-penpot false}]}] + + :get-team-org + (if (= team-id (:team-id params)) + {:id team-id + :is-your-penpot false + :organization (org-data org-id org-owner-id)} + {:id (:team-id params) + :is-your-penpot false + :organization nil})))] + (f))) + +(t/deftest org-owner-access-disabled-without-nitrate-flag + (let [team-owner (th/create-profile* 1) + org-owner (th/create-profile* 2) + target-team (th/create-team* 1 {:profile-id (:id team-owner)})] + + (let [out (th/command! {::th/type :get-projects + ::rpc/profile-id (:id org-owner) + :team-id (:id target-team)}) + error (:error out)] + (t/is (th/ex-info? error)) + (t/is (th/ex-of-type? error :not-found))))) + +(t/deftest non-member-org-owner-gets-viewer-access-to-org-team + (let [team-owner (th/create-profile* 1) + org-owner (th/create-profile* 2) + target-team (th/create-team* 1 {:profile-id (:id team-owner)}) + project (th/create-project* 1 {:profile-id (:id team-owner) + :team-id (:id target-team)}) + file (th/create-file* 1 {:profile-id (:id team-owner) + :project-id (:id project)}) + org-id (uuid/next)] + + (with-org-owner-access {:org-owner-id (:id org-owner) + :org-id org-id + :team-id (:id target-team)} + (fn [] + ;; The team is not listed for a non-member, even though the org + ;; owner can access it directly. + (let [out (th/command! {::th/type :get-teams + ::rpc/profile-id (:id org-owner)})] + (t/is (nil? (:error out))) + (t/is (not-any? #(= (:id target-team) (:id %)) (:result out)))) + + (let [out (th/command! {::th/type :get-team + ::rpc/profile-id (:id org-owner) + :id (:id target-team)}) + team (:result out)] + (t/is (nil? (:error out))) + (t/is (= (:id target-team) (:id team))) + (t/is (false? (get-in team [:permissions :is-owner]))) + (t/is (false? (get-in team [:permissions :is-admin]))) + (t/is (false? (get-in team [:permissions :can-edit]))) + (t/is (= org-id (get-in team [:organization :id]))) + (t/is (= "Acme" (get-in team [:organization :name])))) + + (let [out (th/command! {::th/type :get-team-members + ::rpc/profile-id (:id org-owner) + :team-id (:id target-team)}) + members (:result out)] + (t/is (nil? (:error out))) + (t/is (some #(= (:id team-owner) (:id %)) members)) + (t/is (not-any? #(= (:id org-owner) (:id %)) members))) + + (let [out (th/command! {::th/type :get-projects + ::rpc/profile-id (:id org-owner) + :team-id (:id target-team)})] + (t/is (nil? (:error out))) + (t/is (some #(= (:id project) (:id %)) (:result out)))) + + (let [out (th/command! {::th/type :get-file + ::rpc/profile-id (:id org-owner) + :id (:id file)})] + (t/is (nil? (:error out))) + (t/is (= (:id file) (get-in out [:result :id]))) + (t/is (false? (get-in out [:result :permissions :can-edit])))) + + (let [out (th/command! {::th/type :rename-project + ::rpc/profile-id (:id org-owner) + :id (:id project) + :name "Nope"}) + error (:error out)] + (t/is (th/ex-info? error)) + (t/is (th/ex-of-type? error :not-found))))))) + +(t/deftest org-owner-member-keeps-team-role + (let [team-owner (th/create-profile* 1) + org-owner (th/create-profile* 2) + target-team (th/create-team* 1 {:profile-id (:id team-owner)}) + org-id (uuid/next)] + + (th/create-team-role* {:team-id (:id target-team) + :profile-id (:id org-owner) + :role :editor}) + + (with-org-owner-access {:org-owner-id (:id org-owner) + :org-id org-id + :team-id (:id target-team)} + (fn [] + (let [out (th/command! {::th/type :get-team + ::rpc/profile-id (:id org-owner) + :id (:id target-team)}) + team (:result out)] + (t/is (nil? (:error out))) + (t/is (false? (get-in team [:permissions :is-owner]))) + (t/is (false? (get-in team [:permissions :is-admin]))) + (t/is (true? (get-in team [:permissions :can-edit])))))))) diff --git a/frontend/src/app/main/data/helpers.cljs b/frontend/src/app/main/data/helpers.cljs index fd22d092a0..1a3cd54509 100644 --- a/frontend/src/app/main/data/helpers.cljs +++ b/frontend/src/app/main/data/helpers.cljs @@ -209,6 +209,20 @@ (filter #(= team-id (:team-id (val %)))) (into {})))) +(defn lookup-team + "The team identified by `team-id`, looked up first in the membership + `:teams` map and falling back to the directly-opened `:current-team`. + The fallback covers org-owner access to teams the profile is not a + member of, which are kept out of `:teams` so they don't leak into the + teams listing." + ([state] + (lookup-team state (:current-team-id state))) + ([state team-id] + (or (dm/get-in state [:teams team-id]) + (let [current (:current-team state)] + (when (= team-id (:id current)) + current))))) + (defn get-selrect [selrect-transform shape] (if (some? selrect-transform) diff --git a/frontend/src/app/main/data/team.cljs b/frontend/src/app/main/data/team.cljs index f99765b5c3..a83add6a99 100644 --- a/frontend/src/app/main/data/team.cljs +++ b/frontend/src/app/main/data/team.cljs @@ -8,7 +8,6 @@ (:require [app.common.data :as d] [app.common.data.macros :as dm] - [app.common.exceptions :as ex] [app.common.logging :as log] [app.common.schema :as sm] [app.common.types.nitrate-permissions :as nitrate-perms] @@ -16,6 +15,7 @@ [app.common.uri :as u] [app.config :as cf] [app.main.data.event :as ev] + [app.main.data.helpers :as dsh] [app.main.data.media :as di] [app.main.data.modal :as modal] [app.main.data.profile :as dp] @@ -67,6 +67,18 @@ (->> (rp/cmd! :get-teams) (rx/map teams-fetched))))) +(defn- update-team-data + [state team-id f & args] + (cond + (contains? (:teams state) team-id) + (apply update-in state [:teams team-id] f args) + + (= team-id (dm/get-in state [:current-team :id])) + (apply update state :current-team f args) + + :else + state)) + (defn with-refreshed-team "Fetches fresh team data from the server to ensure up-to-date org permissions, updates the app state, and calls f with the fresh team data. @@ -197,7 +209,7 @@ ptk/UpdateEvent (update [_ state] (-> state - (update-in [:teams team-id] assoc :members members) + (update-team-data team-id assoc :members members) (update :profiles merge (d/index-by :id members)))))) (defn fetch-members @@ -223,7 +235,7 @@ (ptk/reify ::invitations-fetched ptk/UpdateEvent (update [_ state] - (update-in state [:teams team-id] assoc :invitations invitations)))) + (update-team-data state team-id assoc :invitations invitations)))) (defn fetch-invitations [] @@ -239,15 +251,24 @@ (ptk/reify ::team-initialized ptk/WatchEvent (watch [_ state _] - (let [teams (get state :teams) - team (get teams team-id)] - (if (not team) - (rx/throw (ex/error :type :authentication)) + (let [team (dsh/lookup-team state team-id)] + (if team (let [permissions (get team :permissions) features (get team :features)] - (rx/of #(assoc % :permissions permissions) + (rx/of #(-> % + (assoc :current-team team) + (assoc :permissions permissions)) (features/initialize features) - (fetch-members team-id)))))) + (fetch-members team-id))) + (->> (rp/cmd! :get-team {:id team-id}) + (rx/mapcat (fn [team] + (let [permissions (get team :permissions) + features (get team :features)] + (rx/of #(-> % + (assoc :current-team team) + (assoc :permissions permissions)) + (features/initialize features) + (fetch-members team-id))))))))) ptk/EffectEvent (effect [_ _ _] @@ -258,7 +279,9 @@ (ptk/reify ::initialize-team ptk/UpdateEvent (update [_ state] - (assoc state :current-team-id team-id)) + (-> state + (assoc :current-team-id team-id) + (dissoc :current-team))) ptk/WatchEvent (watch [_ _ stream] @@ -279,6 +302,7 @@ (if (= team-id' team-id) (-> state (dissoc :current-team-id) + (dissoc :current-team) (dissoc :shared-files) (dissoc :fonts)) state))))) @@ -330,7 +354,7 @@ (ptk/reify ::stats-fetched ptk/UpdateEvent (update [_ state] - (update-in state [:teams team-id] assoc :stats stats)))) + (update-team-data state team-id assoc :stats stats)))) (defn fetch-stats [] @@ -346,7 +370,7 @@ (ptk/reify ::webhooks-fetched ptk/UpdateEvent (update [_ state] - (update-in state [:teams team-id] assoc :webhooks webhooks)))) + (update-team-data state team-id assoc :webhooks webhooks)))) (defn fetch-webhooks [] @@ -776,4 +800,3 @@ (defn team->organization [team] (when-let [org (:organization team)] (assoc org :default-team-id (:id team)))) - diff --git a/frontend/src/app/main/features.cljs b/frontend/src/app/main/features.cljs index 58b33ce313..7e7890c435 100644 --- a/frontend/src/app/main/features.cljs +++ b/frontend/src/app/main/features.cljs @@ -12,6 +12,7 @@ [app.common.features :as cfeat] [app.common.logging :as log] [app.config :as cf] + [app.main.data.helpers :as dsh] [app.main.router :as rt] [app.main.store :as st] [app.render-wasm :as wasm] @@ -66,7 +67,7 @@ (defn get-enabled-features "An explicit lookup of enabled features for the current team" [state team-id] - (let [team (dm/get-in state [:teams team-id])] + (let [team (dsh/lookup-team state team-id)] (-> global-enabled-features (set/union (get state :features-runtime #{})) (set/intersection cfeat/no-migration-features) diff --git a/frontend/src/app/main/refs.cljs b/frontend/src/app/main/refs.cljs index 791520efd9..fc14e846f1 100644 --- a/frontend/src/app/main/refs.cljs +++ b/frontend/src/app/main/refs.cljs @@ -36,11 +36,7 @@ (l/derived (l/key :current-page-id) st/state)) (def team - (l/derived (fn [state] - (let [team-id (:current-team-id state) - teams (:teams state)] - (get teams team-id))) - st/state)) + (l/derived dsh/lookup-team st/state)) (def project (l/derived (fn [state] diff --git a/frontend/src/app/main/ui/dashboard/sidebar.cljs b/frontend/src/app/main/ui/dashboard/sidebar.cljs index bcd2c92d7c..9ba8dfd53b 100644 --- a/frontend/src/app/main/ui/dashboard/sidebar.cljs +++ b/frontend/src/app/main/ui/dashboard/sidebar.cljs @@ -676,19 +676,25 @@ [{:keys [team profile]}] (let [teams (mf/deref refs/teams) - ;; Find the "your-penpot" teams, and transform them in orgs - orgs (mf/with-memo [teams] - (->> teams - vals - (filter :is-default) - (map dtm/team->organization) - (d/index-by :id))) + current-org (dtm/team->organization team) + + ;; Find the "your-penpot" teams, and transform them in orgs. When + ;; the selected team is directly accessible but not listed in + ;; membership teams, include only its org so the org selector can + ;; show the current selection without leaking the team into the + ;; teams dropdown. + orgs (mf/with-memo [teams current-org] + (cond-> (->> teams + vals + (filter :is-default) + (map dtm/team->organization) + (d/index-by :id)) + (:id current-org) + (assoc (:id current-org) current-org))) show-dropdown? (or (dnt/is-valid-license? profile) (> (count orgs) 1)) - current-org (dtm/team->organization team) - org-teams (mf/with-memo [teams current-org] (->> teams vals @@ -1446,4 +1452,3 @@ [:> profile-section* {:profile profile :team team}]]) - From f8974288e723ea8f1dc549f7ae13bfd2c1f117a5 Mon Sep 17 00:00:00 2001 From: Denys Kisil Date: Wed, 24 Jun 2026 22:54:07 +0200 Subject: [PATCH 034/229] :globe_with_meridians: Add translations for: Ukrainian (ukr_UA) Currently translated at 87.1% (2064 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ukr_UA/ --- frontend/translations/ukr_UA.po | 274 +++++++++++++++++++++++++++++++- 1 file changed, 271 insertions(+), 3 deletions(-) diff --git a/frontend/translations/ukr_UA.po b/frontend/translations/ukr_UA.po index 5535913a4a..beae0c66da 100644 --- a/frontend/translations/ukr_UA.po +++ b/frontend/translations/ukr_UA.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-22 07:30+0000\n" +"PO-Revision-Date: 2026-06-25 21:01+0000\n" "Last-Translator: Denys Kisil \n" -"Language-Team: Ukrainian " -"\n" +"Language-Team: Ukrainian \n" "Language: ukr_UA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -8618,3 +8618,271 @@ msgstr "Автозбережені версії зберігатимуться #, unused msgid "workspace.viewport.click-to-close-path" msgstr "Натисність щоб закінчити шлях" + +#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 +msgid "auth.check-email" +msgstr "Перевірте поштову скриньку!" + +#: src/app/main/ui/auth/verify_token.cljs:53 +msgid "auth.notifications.org-invitation-accepted" +msgstr "Відтепер Ви учасник %s" + +#: src/app/main/ui/auth/register.cljs:238 +msgid "auth.verification-sent-email" +msgstr "Лист було надіслано на:" + +#: src/app/main/data/nitrate.cljs:165 +msgid "dasboard.leave-org.toast" +msgstr "Ви більше не є учасником організації %s." + +#, unused +msgid "dashboard.change-org-modal.accept" +msgstr "ПЕРЕМІСТИТИ КОМАНДУ" + +#, unused +msgid "dashboard.change-org-modal.choose" +msgstr "Перемістити до:" + +#, unused +msgid "dashboard.change-org-modal.select" +msgstr "Обрати організацію" + +#, unused +msgid "dashboard.change-org-modal.text" +msgstr "" +"Проєкти та файли залишаться доступними до учасників команди. Ця команда " +"отримає сповіщення від нової." + +#: src/app/main/data/nitrate.cljs:399, src/app/main/ui/dashboard/team_form.cljs:157 +msgid "dashboard.change-org-modal.title" +msgstr "Змінити організацію команди" + +#: src/app/main/ui/dashboard/sidebar.cljs:376 +msgid "dashboard.go-to-admin-console" +msgstr "Перейти до Адмін. Панелі" + +#: src/app/main/ui/dashboard/import.cljs:505 +msgid "dashboard.import.import-error.check-error" +msgstr "Не вдалось перевірити файл." + +#: src/app/main/ui/dashboard/import.cljs:509 +msgid "dashboard.import.import-error.corrupt-file" +msgstr "Файл здається пошкодженим." + +#: src/app/main/ui/dashboard/import.cljs:512 +msgid "dashboard.import.import-error.unknown-error" +msgstr "Щось пішло не так під час обробки файлу." + +#: src/app/main/ui/dashboard/team.cljs:831, src/app/main/ui/dashboard/team.cljs:1136 +msgid "dashboard.invitations.no-permission" +msgstr "" +"Ви не маєте дозволів на створення, редагування чи видалення запрошень до " +"команди." + +#: src/app/main/ui/dashboard/sidebar.cljs:671 +msgid "dashboard.leave-org" +msgstr "Лишити організацію" + +#: src/app/main/ui/dashboard/sidebar.cljs:348, src/app/main/ui/dashboard/sidebar.cljs:349, src/app/main/ui/dashboard/sidebar.cljs:761 +msgid "dashboard.my-teams" +msgstr "Мої команди" + +#: src/app/main/ui/dashboard/team_form.cljs:156 +msgid "dashboard.no-org-allows-create-team.message" +msgstr "Ви не маєте дозволів додавати команди до жодної з власних організацій." + +#: src/app/main/ui/dashboard/team_form.cljs:152 +msgid "dashboard.no-permission-create-team.message" +msgstr "" +"Ви не маєте дозволів на створення команд у організації %s. Для подробиць " +"зверніться до її власника." + +#: src/app/main/ui/dashboard/team_form.cljs:154 +msgid "dashboard.no-permission-delete-team.message" +msgstr "" +"Ви не маєте дозволів на видалення команд що є частиною організації %s. Для " +"подробить зверніться до її власника." + +#: src/app/main/ui/dashboard/team_form.cljs:158 +msgid "dashboard.no-permission-move-team.message" +msgstr "" +"Ви не маєте дозволів переміщати команди, що належать організації %s. Для " +"подробиць зверніться до її власника." + +#: src/app/main/data/dashboard.cljs:753 +msgid "dashboard.org-deleted" +msgstr "Організація %s видалена." + +#: src/app/main/ui/dashboard/sidebar.cljs:798 +msgid "dashboard.plus-create-new-org" +msgstr "+ Створити орг" + +#: src/app/main/ui/dashboard/sidebar.cljs:354 +msgid "dashboard.section.organizations" +msgstr "Організації" + +#, unused +msgid "dashboard.select-org-modal.accept" +msgstr "ДОДАТИ ДО ОРГАНІЗАЦІЇ" + +#, unused +msgid "dashboard.select-org-modal.choose" +msgstr "Оберіть організацію:" + +#: src/app/main/ui/dashboard/team.cljs:975 +msgid "dashboard.select-org-modal.external-invitations-warning" +msgstr "" +"Лише учасники \"%s\" можуть приєднуватись до команд організації. Будь-які " +"запрошення у процесі розгляду будуть відхилені." + +#: src/app/main/ui/dashboard/team.cljs:971 +msgid "dashboard.select-org-modal.external-invitations-will-be-canceled" +msgstr "" +"Запрошення сторонніх користувачів, що у процесі розгляду, буде відхилено." + +#, unused +msgid "dashboard.select-org-modal.permission-info" +msgstr "" +"Тут можна знайти усі організації, де Вам дозволено створювати чи додавати " +"команди." + +#, unused +msgid "dashboard.select-org-modal.select" +msgstr "Оберіть організацію" + +#: src/app/main/data/nitrate.cljs:342, src/app/main/ui/dashboard/team_form.cljs:155 +msgid "dashboard.select-org-modal.title" +msgstr "Додати команду до організації" + +#, unused +msgid "dashboard.team-belong-org" +msgstr "Ця команда тепер у %s" + +#, unused +msgid "dashboard.team-no-longer-belong-org" +msgstr "Ця команда більше не в організації %s" + +#: src/app/main/ui/dashboard/team.cljs:1609 +msgid "dashboard.team-organization" +msgstr "Команда організації" + +#: src/app/main/ui/dashboard/team.cljs:1643 +msgid "dashboard.team-organization.add" +msgstr "Додати до організації" + +#: src/app/main/data/nitrate.cljs:341, src/app/main/data/nitrate.cljs:398 +msgid "dashboard.team-organization.add.no-valid-orgs" +msgstr "Ви не маєте дозволів на додавання команди до будь-якої з організацій." + +#: src/app/main/ui/dashboard/team.cljs:1632 +msgid "dashboard.team-organization.change" +msgstr "Змінити команду організації" + +#: src/app/main/ui/dashboard/team.cljs:905 +msgid "dashboard.team-organization.disabled-org-tooltip" +msgstr "Лише люди з вашої організації можуть отримати запрошення." + +#: src/app/main/ui/dashboard/team.cljs:1639 +msgid "dashboard.team-organization.none" +msgstr "Ця команда не належить до жодної з організацій" + +#: src/app/main/ui/dashboard/team.cljs:1635 +msgid "dashboard.team-organization.remove" +msgstr "Вилучити команду з організації" + +#, unused +msgid "dashboard.user-no-longer-belong-org" +msgstr "Ви більше не учасник організації %s" + +#: src/app/main/ui/settings/options.cljs:109 +msgid "dashboard.webgl-switch.beta" +msgstr "Бета" + +#: src/app/main/ui/settings/options.cljs:110 +msgid "dashboard.webgl-switch.description" +msgstr "" +"Відмальовування WebGL може покращити швидкодію, проте функція в беті, тому є " +"менш стабільною. Можуть зʼявлятись візуальні відмінності між полотном, " +"експортами (SVG/PDF) та режимом перегляду." + +#: src/app/main/ui/settings/options.cljs:113 +msgid "dashboard.webgl-switch.disabled" +msgstr "Вимкнено" + +#: src/app/main/ui/settings/options.cljs:113 +msgid "dashboard.webgl-switch.enabled" +msgstr "Увімкнено" + +#: src/app/main/ui/settings/options.cljs:116 +msgid "dashboard.webgl-switch.feedback" +msgstr "Зворотній звʼязок" + +#: src/app/main/ui/settings/options.cljs:112 +msgid "dashboard.webgl-switch.status" +msgstr "Стан" + +#: src/app/main/ui/settings/options.cljs:108 +msgid "dashboard.webgl-switch.title" +msgstr "Відмальовування WebGL" + +#: src/app/main/data/workspace/clipboard.cljs:327, src/app/main/data/workspace/clipboard.cljs:535 +msgid "errors.clipboard-api-unavailable" +msgstr "" +"API буферу обміну недоступне. Надайте доступ до Penpot через HTTPS, щоб " +"увімкнути доступ" + +#: src/app/main/data/workspace/clipboard.cljs:321, src/app/main/data/workspace/clipboard.cljs:529 +msgid "errors.clipboard-permission-denied" +msgstr "" +"Відмовлено у доступі до буферу обміну. Надайте дозвіл на використання буферу " +"обміну у Вашому бровзері аби вставити вміст" + +#: src/app/main/ui/dashboard/fonts.cljs:341 +msgid "errors.font-family-invalid-chars" +msgstr "" +"Імʼя сімейства шрифтів може мати лише літери, числа, пробіли, дефіси, нижні " +"підкреслювання та крапки." + +#: src/app/main/ui/static.cljs:89 +msgid "errors.invite-email-mismatch" +msgstr "" +"Це запрошення для іншої поштової адреси. Вийдіть та зайдіть через запрошений " +"обліковий запис, або попросіть у власника команди нове." + +#: src/app/main/ui/static.cljs:93 +msgid "errors.invite-expired" +msgstr "Запрошення протерміноване. Запитайте власника команди про нове." + +#, unused +msgid "errors.org-leave.no-valid-teams" +msgstr "Сталась проблема під час виходу з організації. Спробуйте знову." + +#: src/app/main/ui/settings/integrations.cljs:581 +msgid "integrations.mcp-server.mcp-keys.info" +msgstr "" +"Це URL серверу, для якого потрібно налаштувати MCP клієнт для того щоб " +"зʼєднати його з сервером MCP Penpot'у." + +#: src/app/main/ui/settings/integrations.cljs:561 +msgid "integrations.mcp-server.mcp-keys.regenerate" +msgstr "Регенерувати ключ MCP" + +#: src/app/main/ui/settings/integrations.cljs:554 +msgid "integrations.mcp-server.mcp-keys.title" +msgstr "Ключ MCP" + +#: src/app/main/ui/settings/integrations.cljs:562 +msgid "integrations.mcp-server.mcp-keys.tootip" +msgstr "MCP ключ потрібен для налаштування клієнту MCP" + +#: src/app/main/ui/settings/integrations.cljs:517 +msgid "integrations.mcp-server.status" +msgstr "Стан" + +#: src/app/main/ui/settings/integrations.cljs:537 +msgid "integrations.mcp-server.status.disabled" +msgstr "Вимкнено" + +#: src/app/main/ui/settings/integrations.cljs:536 +msgid "integrations.mcp-server.status.enabled" +msgstr "Увімкнено" From 6e61e3304bfd399186b0b6014f7a2b9c74ca89ba Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Fri, 26 Jun 2026 11:38:18 +0200 Subject: [PATCH 035/229] :sparkles: Add and endpoint for nitrate to check the SSO configuration for an organization (#10432) --- backend/src/app/auth/oidc.clj | 96 ++++++++++++++++++- backend/src/app/loggers/audit.clj | 3 +- backend/src/app/nitrate.clj | 14 +-- backend/src/app/rpc/commands/nitrate.clj | 17 +--- backend/src/app/rpc/management/nitrate.clj | 21 +++- backend/test/backend_tests/auth_oidc_test.clj | 17 ++++ .../rpc_management_nitrate_test.clj | 38 ++++++++ common/src/app/common/types/organization.cljc | 11 +++ 8 files changed, 190 insertions(+), 27 deletions(-) diff --git a/backend/src/app/auth/oidc.clj b/backend/src/app/auth/oidc.clj index 286ff3be45..4f7583d39d 100644 --- a/backend/src/app/auth/oidc.clj +++ b/backend/src/app/auth/oidc.clj @@ -761,6 +761,16 @@ ;; ORG SSO HELPERS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defn- non-blank-uri + [value] + (when-not (str/blank? value) value)) + +(defn org-sso-discovery-uri + "Return the OIDC discovery URI from an org SSO config, preferring :issuer." + [sso] + (or (non-blank-uri (:issuer sso)) + (non-blank-uri (:base-url sso)))) + (defn prepare-org-sso-provider "Build an OIDC provider map dynamically from the Nitrate org SSO config. Uses OIDC discovery via :base-url (or :issuer as fallback) when @@ -770,12 +780,96 @@ {:type "oidc" :client-id client-id :client-secret client-secret - :base-uri (some-> (or base-url issuer) + :base-uri (some-> (or (non-blank-uri base-url) + (non-blank-uri issuer)) (str/rtrim "/") (str "/")) :scopes (into default-oidc-scopes (or scopes #{})) :skip-ssrf-check? true})) +(defn build-org-sso-auth-redirect-uri + "Build the OIDC authorization redirect URI for an organization SSO config. + Raises if the config is incomplete or OIDC discovery fails." + [cfg sso & {:keys [dest-url organization-id provider]}] + (let [organization-id (or organization-id (:organization-id sso)) + issuer (org-sso-discovery-uri sso) + dest-url (or dest-url (str (cf/get :public-uri)))] + (when-not issuer + (ex/raise :type :validation + :code :invalid-sso-config + :hint "missing issuer or base-url")) + (let [oidc-provider (or provider (prepare-org-sso-provider cfg sso)) + state-token (tokens/generate cfg {:iss "oidc" + :dest-url dest-url + :organization-id organization-id + :issuer issuer + :exp (ct/in-future "4h")})] + (build-auth-redirect-uri oidc-provider state-token)))) + +(def ^:private probe-auth-code "penpot-sso-config-probe") + +(defn- decode-token-error-response + [body] + (when (and (string? body) (pos? (count body))) + (try + (json/decode body) + (catch Throwable _ nil)))) + +(defn- token-endpoint-error + [response] + (some-> response :body decode-token-error-response :error d/name)) + +(defn- token-endpoint-error-description + [response] + (some-> response :body decode-token-error-response :error-description)) + +(defn- token-endpoint-valid-client-error? + "Token endpoint rejected the dummy auth code but accepted the client credentials." + [response] + (= "invalid_grant" (token-endpoint-error response))) + +(defn- token-endpoint-invalid-client-error? + "Token endpoint rejected the client credentials." + [{:keys [status] :as response}] + (let [error (token-endpoint-error response) + description (str/lower (or (token-endpoint-error-description response) ""))] + (or (= status 401) + (#{"invalid_client" "unauthorized_client"} error) + (and (= error "access_denied") + (str/includes? description "unauthorized"))))) + +(defn- probe-org-sso-client-credentials + "Probe the token endpoint with a dummy authorization code. + Valid client credentials are expected to answer with `invalid_grant`." + [cfg provider] + (let [params {:client_id (:client-id provider) + :client_secret (:client-secret provider) + :code probe-auth-code + :grant_type "authorization_code" + :redirect_uri (build-redirect-uri)} + req {:method :post + :headers {"content-type" "application/x-www-form-urlencoded" + "accept" "application/json"} + :uri (:token-uri provider) + :body (u/map->query-string params)} + response (http/req cfg req {:skip-ssrf-check? (:skip-ssrf-check? provider)})] + (cond + (token-endpoint-valid-client-error? response) true + (token-endpoint-invalid-client-error? response) false + :else false))) + +(defn is-organization-sso-config-valid? + "Return true when the SSO config can be discovered, can build a login URL, + and the client credentials are accepted by the token endpoint." + [cfg sso] + (try + (if (org-sso-discovery-uri sso) + (let [provider (prepare-org-sso-provider cfg sso)] + (and (build-org-sso-auth-redirect-uri cfg sso :provider provider) + (probe-org-sso-client-credentials cfg provider))) + false) + (catch Throwable _ false))) + (defn- auth-handler [cfg {:keys [params] :as request}] (let [provider (resolve-provider cfg params) diff --git a/backend/src/app/loggers/audit.clj b/backend/src/app/loggers/audit.clj index 9de442a48a..c1b63c9aff 100644 --- a/backend/src/app/loggers/audit.clj +++ b/backend/src/app/loggers/audit.clj @@ -88,7 +88,8 @@ #{:session-id :password :old-password - :token}) + :token + :client-secret}) (defn extract-utm-params "Extracts additional data from params and namespace them under diff --git a/backend/src/app/nitrate.clj b/backend/src/app/nitrate.clj index c99451d6df..1f54c47121 100644 --- a/backend/src/app/nitrate.clj +++ b/backend/src/app/nitrate.clj @@ -14,7 +14,8 @@ [app.common.schema :as sm] [app.common.schema.generators :as sg] [app.common.time :as ct] - [app.common.types.organization :as cto] + [app.common.types.organization :as cto + :refer [schema:nitrate-sso]] [app.common.uri :as u] [app.config :as cf] [app.http.client :as http] @@ -430,17 +431,6 @@ [:permissions [:map-of :keyword :string]]] params)) -(def ^:private schema:nitrate-sso - [:map - [:organization-id ::sm/uuid] - [:active [:maybe :boolean]] - [:provider [:maybe :string]] - [:client-id [:maybe :string]] - [:base-url [:maybe :string]] - [:client-secret [:maybe :string]] - [:issuer [:maybe :string]] - [:scopes [:maybe [::sm/set ::sm/text]]]]) - (defn- get-org-sso-api "Fetches the SSO configuration for an organization from Nitrate." [cfg {:keys [organization-id] :as params}] diff --git a/backend/src/app/rpc/commands/nitrate.clj b/backend/src/app/rpc/commands/nitrate.clj index 2103452c17..71a2e93b17 100644 --- a/backend/src/app/rpc/commands/nitrate.clj +++ b/backend/src/app/rpc/commands/nitrate.clj @@ -24,7 +24,6 @@ [app.rpc.nitrate.emails-helper :as neh] [app.rpc.nitrate.organization-helper :as noh] [app.rpc.notifications :as notifications] - [app.tokens :as tokens] [app.util.services :as sv])) @@ -647,17 +646,11 @@ {:keys [authorized sso]} (nitrate/sso-session-authorized? cfg organization-id team-id request)] (if authorized {:authorized true} - (if-let [issuer (or (:issuer sso) (:base-url sso))] - (let [oidc-provider (oidc/prepare-org-sso-provider cfg sso) - org-id (or organization-id (:organization-id sso)) - state-token (tokens/generate cfg {:iss "oidc" - :dest-url url - :organization-id org-id - :issuer issuer - :exp (ct/in-future "4h")}) - redirect-uri (oidc/build-auth-redirect-uri oidc-provider state-token)] - {:authorized false - :redirect-uri redirect-uri}) + (if (oidc/org-sso-discovery-uri sso) + {:authorized false + :redirect-uri (oidc/build-org-sso-auth-redirect-uri cfg sso + :dest-url url + :organization-id organization-id)} {:authorized false :redirect-uri nil}))) {:authorized true})) diff --git a/backend/src/app/rpc/management/nitrate.clj b/backend/src/app/rpc/management/nitrate.clj index 9168c0ea63..700cf59cac 100644 --- a/backend/src/app/rpc/management/nitrate.clj +++ b/backend/src/app/rpc/management/nitrate.clj @@ -8,11 +8,12 @@ "Internal Nitrate HTTP RPC API. Provides authenticated access to organization management and token validation endpoints." (:require + [app.auth.oidc :as oidc] [app.common.data :as d] [app.common.exceptions :as ex] [app.common.schema :as sm] [app.common.time :as ct] - [app.common.types.organization :refer [schema:team-with-organization schema:organization-with-avatar]] + [app.common.types.organization :refer [schema:team-with-organization schema:organization-with-avatar schema:nitrate-sso]] [app.common.types.profile :refer [schema:profile, schema:basic-profile]] [app.common.types.team :refer [schema:team]] [app.config :as cf] @@ -878,6 +879,23 @@ RETURNING id, deleted_at;") photo-id (assoc :photo-url (files/resolve-public-uri photo-id)) owner-photo-id (assoc :owner-photo-url (files/resolve-public-uri owner-photo-id)))))))))))) +;; ---- API: check-organization-sso + +(def ^:private schema:check-organization-sso-result + [:map + [:valid ::sm/boolean]]) + +(sv/defmethod ::check-organization-sso + "Validate an organization SSO configuration by generating a login redirect URL. + Nitrate calls this while configuring SSO to verify client credentials and OIDC + discovery before saving the settings." + {::doc/added "2.20" + ::sm/params schema:nitrate-sso + ::sm/result schema:check-organization-sso-result + ::rpc/auth false} + [cfg params] + {:valid (oidc/is-organization-sso-config-valid? cfg params)}) + ;; ---- API: notify-org-sso-change (sv/defmethod ::notify-org-sso-change "Nitrate notifies that an organization sso values have changed" @@ -895,3 +913,4 @@ RETURNING id, deleted_at;") (when became-active (neh/send-organization-setup-sso-emails! cfg organization-id)) nil) + diff --git a/backend/test/backend_tests/auth_oidc_test.clj b/backend/test/backend_tests/auth_oidc_test.clj index bdf18e5541..7ec2f4bdaf 100644 --- a/backend/test/backend_tests/auth_oidc_test.clj +++ b/backend/test/backend_tests/auth_oidc_test.clj @@ -53,3 +53,20 @@ ;; not silently slip through as if it were the matching string. (t/is (= :auto (#'oidc/select-user-info-source :token))) (t/is (= :auto (#'oidc/select-user-info-source :userinfo))))) + +(t/deftest token-endpoint-errors-detect-valid-client-credentials + (let [response {:status 403 + :body "{\"error\":\"invalid_grant\",\"error_description\":\"Invalid authorization code\"}"}] + (t/is (#'oidc/token-endpoint-valid-client-error? response)) + (t/is (not (#'oidc/token-endpoint-invalid-client-error? response))))) + +(t/deftest token-endpoint-errors-detect-invalid-client-credentials + (t/is (#'oidc/token-endpoint-invalid-client-error? + {:status 401 + :body "{\"error\":\"access_denied\",\"error_description\":\"Unauthorized\"}"})) + (t/is (#'oidc/token-endpoint-invalid-client-error? + {:status 400 + :body "{\"error\":\"invalid_client\"}"})) + (t/is (not (#'oidc/token-endpoint-valid-client-error? + {:status 400 + :body "{\"error\":\"invalid_client\"}"})))) diff --git a/backend/test/backend_tests/rpc_management_nitrate_test.clj b/backend/test/backend_tests/rpc_management_nitrate_test.clj index 460471e639..2691514952 100644 --- a/backend/test/backend_tests/rpc_management_nitrate_test.clj +++ b/backend/test/backend_tests/rpc_management_nitrate_test.clj @@ -6,6 +6,7 @@ (ns backend-tests.rpc-management-nitrate-test (:require + [app.auth.oidc :as oidc] [app.common.data :as d] [app.common.time :as ct] [app.common.uuid :as uuid] @@ -1277,3 +1278,40 @@ (with-redefs [eml/send! (fn [params] (swap! sent conj params))] (management-command-with-nitrate! params)) (t/is (empty? @sent)))) + +(t/deftest check-organization-sso-returns-valid-true + (let [org-id (uuid/random) + out (with-redefs [oidc/is-organization-sso-config-valid? (constantly true)] + (management-command-with-nitrate! + {::th/type :check-organization-sso + :organization-id org-id + :client-id "test-client" + :client-secret "test-secret" + :base-url "https://idp.example.com"}))] + (t/is (th/success? out)) + (t/is (true? (-> out :result :valid))))) + +(t/deftest check-organization-sso-returns-valid-false-on-invalid-config + (let [out (management-command-with-nitrate! + {::th/type :check-organization-sso + :organization-id (uuid/random) + :client-id "test-client" + :client-secret "test-secret"})] + (t/is (th/success? out)) + (t/is (false? (-> out :result :valid))))) + +(t/deftest check-organization-sso-uses-issuer-when-base-url-is-blank + (let [org-id (uuid/random) + out (with-redefs [oidc/is-organization-sso-config-valid? + (fn [_cfg sso] + (and (= "test-client" (:client-id sso)) + (= "https://idp.example.com/" (:issuer sso))))] + (management-command-with-nitrate! + {::th/type :check-organization-sso + :organization-id org-id + :client-id "test-client" + :client-secret "test-secret" + :base-url "" + :issuer "https://idp.example.com/"}))] + (t/is (th/success? out)) + (t/is (true? (-> out :result :valid))))) diff --git a/common/src/app/common/types/organization.cljc b/common/src/app/common/types/organization.cljc index ca13e7de5b..16c5ab22aa 100644 --- a/common/src/app/common/types/organization.cljc +++ b/common/src/app/common/types/organization.cljc @@ -63,3 +63,14 @@ [:logo [:maybe ::sm/uri]] [:avatar-bg-url [:maybe ::sm/uri]] [:sso-active {:optional true} [:maybe :boolean]]]) + +(def schema:nitrate-sso + [:map {:title "NitrateOrganizationSso"} + [:organization-id ::sm/uuid] + [:active {:optional true} [:maybe :boolean]] + [:provider {:optional true} [:maybe :string]] + [:client-id {:optional true} [:maybe :string]] + [:base-url {:optional true} [:maybe :string]] + [:client-secret {:optional true} [:maybe :string]] + [:issuer {:optional true} [:maybe :string]] + [:scopes {:optional true} [:maybe [::sm/set ::sm/text]]]]) From 3369abd98825fc144978d28b177a1cfb7f71bcbd Mon Sep 17 00:00:00 2001 From: Stephan Paternotte Date: Fri, 26 Jun 2026 15:36:09 +0200 Subject: [PATCH 036/229] :globe_with_meridians: Add translations for: Dutch Currently translated at 99.7% (2364 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/nl/ --- frontend/translations/nl.po | 1384 +++++++++++++++++++++++++++++++++-- 1 file changed, 1342 insertions(+), 42 deletions(-) diff --git a/frontend/translations/nl.po b/frontend/translations/nl.po index 881bf0abf2..b7b45fba58 100644 --- a/frontend/translations/nl.po +++ b/frontend/translations/nl.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-24 11:01+0000\n" +"PO-Revision-Date: 2026-06-27 07:01+0000\n" "Last-Translator: Stephan Paternotte \n" "Language-Team: Dutch \n" @@ -590,7 +590,7 @@ msgstr "%s standaardbestanden downloaden (.svg + .json)" msgid "dashboard.export.explain" msgstr "" "Een of meer bestanden die je wilt downloaden maken gebruik van gedeelde " -"bibliotheken. Wat wil je doen met hun assets*?" +"bibliotheken. Wat wil je doen met hun activa*?" #: src/app/main/ui/dashboard/file_menu.cljs:267 msgid "dashboard.file-menu.delete-files-permanently-option" @@ -1328,8 +1328,8 @@ msgstr "Er is een fout opgetreden bij de opmerking" #: src/app/main/errors.cljs:414 msgid "errors.deprecated" msgstr "" -"Sorry! Dit is een oud bestand dat gebruikmaakt van een verouderd type " -"Penpot-component en je niet kunt openen." +"Sorry! Dit is een oud bestand dat gebruikmaakt van een verouderd type Penpot-" +"activa en je niet kunt openen." #: src/app/main/errors.cljs:417 msgid "errors.deprecated.contact.after" @@ -1337,7 +1337,7 @@ msgstr "zodat wij je kunnen helpen." #: src/app/main/errors.cljs:415 msgid "errors.deprecated.contact.before" -msgstr "Hoewel Penpot dit soort componenten niet meer ondersteunt, kun je wel" +msgstr "Hoewel Penpot dit soort activa niet meer ondersteunt, kun je wel" #: src/app/main/errors.cljs:416 msgid "errors.deprecated.contact.text" @@ -1853,21 +1853,21 @@ msgstr "Gedeelde bibliotheken exporteren" msgid "files-download-modal.options.detach.message" msgstr "" "Gedeelde bibliotheken worden niet opgenomen in de export en er worden geen " -"assets aan de bibliotheek toegevoegd. " +"activa aan de bibliotheek toegevoegd. " #: src/app/main/ui/exports/files.cljs:143 msgid "files-download-modal.options.detach.title" -msgstr "Gedeelde bibliotheek-assets als basisobjecten behandelen" +msgstr "Gedeelde bibliotheek-activa als basisobjecten behandelen" #: src/app/main/ui/exports/files.cljs:144 msgid "files-download-modal.options.merge.message" msgstr "" -"Je bestand wordt geëxporteerd met alle externe assets samengevoegd in de " +"Je bestand wordt geëxporteerd met alle externe activa samengevoegd in de " "bestandsbibliotheek." #: src/app/main/ui/exports/files.cljs:145 msgid "files-download-modal.options.merge.title" -msgstr "Inclusief gedeelde bibliotheek-assets in bestandsbibliotheken" +msgstr "Inclusief gedeelde bibliotheek-activa in bestandsbibliotheken" #: src/app/main/ui/exports/files.cljs:123 msgid "files-download-modal.title" @@ -2178,7 +2178,6 @@ msgid "inspect.tabs.styles.active-themes" msgstr "Actieve thema's" #: src/app/main/ui/inspect/styles/style_box.cljs:75 -#, fuzzy msgid "inspect.tabs.styles.copy-shorthand" msgstr "CSS-code kopiëren naar klembord" @@ -3093,7 +3092,7 @@ msgstr "Exporteren naar code" #: src/app/main/ui/ds/product/loader.cljs:29 msgid "loader.tips.05.message" -msgstr "Deel assets en stijlen om consistentie te behouden." +msgstr "Activa en stijlen delen om consistentie te behouden." #: src/app/main/ui/ds/product/loader.cljs:28 msgid "loader.tips.05.title" @@ -3184,9 +3183,9 @@ msgstr "Solide" #: src/app/main/data/common.cljs:118 msgid "modals.add-shared-confirm-empty.hint" msgstr "" -"Je bibliotheek is leeg. Eenmaal toegevoegd als Gedeelde Bibliotheek, zijn " -"de assets die je aanmaakt beschikbaar voor gebruik in de rest van je " -"bestanden. Weet je zeker dat je dit wilt publiceren??" +"Je bibliotheek is leeg. Eenmaal toegevoegd als Gedeelde Bibliotheek, zijn de " +"activa die je aanmaakt beschikbaar voor gebruik in de rest van je bestanden. " +"Weet je zeker dat je dit wilt publiceren??" #: src/app/main/data/common.cljs:120 msgid "modals.add-shared-confirm.accept" @@ -3195,9 +3194,8 @@ msgstr "Toevoegen als gedeelde bibliotheek" #: src/app/main/data/common.cljs:118 msgid "modals.add-shared-confirm.hint" msgstr "" -"Eenmaal toegevoegd als gedeelde bibliotheek, zijn de assets van deze " -"bestandsbibliotheek beschikbaar voor gebruik tussen de rest van je " -"bestanden." +"Eenmaal toegevoegd als gedeelde bibliotheek, zijn de activa van deze " +"bestandsbibliotheek beschikbaar voor gebruik tussen de rest van je bestanden." #: src/app/main/data/common.cljs:117 msgid "modals.add-shared-confirm.message" @@ -3410,10 +3408,10 @@ msgstr "Teamlid verwijderen" msgid "modals.delete-unpublish-shared-confirm.activated.hint" msgid_plural "modals.delete-unpublish-shared-confirm.activated.hint" msgstr[0] "" -"Assets die al in dit bestand zijn gebruikt, blijven daar staan (er wordt " +"Activa die al in dit bestand zijn gebruikt, blijven daar staan (er wordt " "geen ontwerp verbroken)." msgstr[1] "" -"Assets die al in die bestanden zijn gebruikt, blijven daar staan (er wordt " +"Activa die al in die bestanden zijn gebruikt, blijven daar staan (er wordt " "geen ontwerp verbroken)." #: src/app/main/ui/dashboard/team.cljs:1417 @@ -4711,7 +4709,7 @@ msgstr "Dynamisch uitlijnen in/uitschakelen" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186 msgid "shortcuts.toggle-assets" -msgstr "Assets in/uitschakelen" +msgstr "Activa wisselen" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187 msgid "shortcuts.toggle-colorpalette" @@ -4823,7 +4821,7 @@ msgstr "Enterprise-abonnement (proef)" #: src/app/main/ui/dashboard/subscription.cljs:88 msgid "subscription.dashboard.power-up.professional.bottom-button" -msgstr "Gas geven!" +msgstr "Tandje erbij!" #: src/app/main/ui/dashboard/subscription.cljs:87 msgid "subscription.dashboard.power-up.professional.bottom-description" @@ -4847,7 +4845,7 @@ msgstr "" #: src/app/main/ui/dashboard/subscription.cljs:97 msgid "subscription.dashboard.power-up.trial.top-title" -msgstr "Unlimited-abonnement (proefversie)" +msgstr "Unlimited-abonnement (proef)" #: src/app/main/ui/dashboard/subscription.cljs:104, src/app/main/ui/dashboard/subscription.cljs:298 msgid "subscription.dashboard.power-up.unlimited-plan" @@ -4880,7 +4878,7 @@ msgstr "Jouw abonnement:" #: src/app/main/ui/dashboard/subscription.cljs:333 msgid "subscription.dashboard.professional-dashboard-cta-title" msgstr "" -"Je hebt %s-editors voor de teams in jouw beheer, terwijl jouw professionele " +"Je hebt %s-editors voor de teams in jouw beheer, terwijl jouw Professional-" "abonnement maximaal 8 toestaat." #: src/app/main/ui/dashboard/subscription.cljs:341 @@ -5053,7 +5051,7 @@ msgstr "organisatie per maand" #: src/app/main/ui/dashboard/subscription.cljs:277, src/app/main/ui/settings/subscription.cljs:114, src/app/main/ui/settings/subscription.cljs:591, src/app/main/ui/settings/subscription.cljs:667 msgid "subscription.settings.professional" -msgstr "Professioneel" +msgstr "Professional" #: src/app/main/ui/settings/subscription.cljs:596, src/app/main/ui/settings/subscription.cljs:674 msgid "subscription.settings.professional.autosave-benefit" @@ -5073,7 +5071,7 @@ msgstr "Aanbevolen" #: src/app/main/ui/settings/subscription.cljs:569 msgid "subscription.settings.section-plan" -msgstr "Uw abonnement" +msgstr "Jouw abonnement" #: src/app/main/ui/settings/subscription.cljs:343 msgid "subscription.settings.start-trial" @@ -5102,7 +5100,6 @@ msgid "subscription.settings.success.dialog.title" msgstr "Je bent %s!" #: src/app/main/ui/settings/subscription.cljs:655 -#, fuzzy msgid "subscription.settings.support-us-since" msgstr "Je hebt ons gesteund met dit abonnement sinds: %s" @@ -5343,11 +5340,11 @@ msgstr "Bibliotheek toevoegen" #: src/app/main/ui/workspace/sidebar/assets.cljs #, unused msgid "workspace.assets.assets" -msgstr "Assets" +msgstr "Activa" #: src/app/main/ui/workspace/sidebar/assets.cljs:158 msgid "workspace.assets.box-filter-all" -msgstr "Alle assets" +msgstr "Alle activa" #: src/app/main/ui/dashboard/grid.cljs:160, src/app/main/ui/dashboard/grid.cljs:192, src/app/main/ui/workspace/colorpicker/libraries.cljs:362, src/app/main/ui/workspace/colorpicker/libraries.cljs:379, src/app/main/ui/workspace/colorpicker/libraries.cljs:393, src/app/main/ui/workspace/sidebar/assets/colors.cljs:512, src/app/main/ui/workspace/sidebar/assets.cljs:164 msgid "workspace.assets.colors" @@ -5432,7 +5429,7 @@ msgstr "Bibliotheek beheren" #: src/app/main/ui/workspace/color_palette.cljs:204, src/app/main/ui/workspace/sidebar/assets/file_library.cljs:305 msgid "workspace.assets.not-found" -msgstr "Geen assets gevonden" +msgstr "Geen activa gevonden" #: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:111 msgid "workspace.assets.open-library" @@ -5448,7 +5445,7 @@ msgstr "Groep hernoemen" #: src/app/main/ui/workspace/color_palette.cljs:182, src/app/main/ui/workspace/color_palette.cljs:187, src/app/main/ui/workspace/sidebar/assets.cljs:192 msgid "workspace.assets.search" -msgstr "Assets zoeken" +msgstr "Activa zoeken" #: src/app/main/ui/workspace/sidebar/assets.cljs #, unused @@ -5704,7 +5701,7 @@ msgstr "Hulp & informatie" #: src/app/main/ui/workspace/main_menu.cljs:916 #, unused msgid "workspace.header.menu.option.power-up" -msgstr "Geef je abonnement een tandje erbij" +msgstr "Tandje erbij voor je abonnement" #: src/app/main/ui/workspace/main_menu.cljs:1061 msgid "workspace.header.menu.option.preferences" @@ -6093,7 +6090,7 @@ msgstr "Component uitwisselen" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:818 msgid "workspace.options.component.swap.empty" -msgstr "Er zijn nog geen assets in deze bibliotheek" +msgstr "Er zijn nog geen activa in deze bibliotheek" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1062 msgid "workspace.options.component.unlinked" @@ -7404,11 +7401,11 @@ msgstr "" #: src/app/main/ui/workspace/plugins.cljs:277 msgid "workspace.plugins.permissions.library-read" -msgstr "Jouw bibliotheken en middelen bekijken." +msgstr "Jouw bibliotheken en activa bekijken." #: src/app/main/ui/workspace/plugins.cljs:271 msgid "workspace.plugins.permissions.library-write" -msgstr "Jouw bibliotheken en middelen lezen en aanpassen." +msgstr "Jouw bibliotheken en activa lezen en aanpassen." #: src/app/main/ui/workspace/plugins.cljs:359 msgid "workspace.plugins.permissions.title" @@ -7688,7 +7685,7 @@ msgstr "Tonen" #: src/app/main/ui/workspace/sidebar/assets/common.cljs:559, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1213 msgid "workspace.shape.menu.show-in-assets" -msgstr "In paneel Assets tonen" +msgstr "In paneel Activa tonen" #: src/app/main/ui/workspace/sidebar/assets/common.cljs:580, src/app/main/ui/workspace/sidebar/assets/components.cljs:659 msgid "workspace.shape.menu.show-main" @@ -8113,7 +8110,6 @@ msgid "workspace.tokens.num-active-sets" msgstr "%s actieve verzamelingen" #: src/app/main/ui/workspace/tokens/management/token_pill.cljs:122 -#, fuzzy msgid "workspace.tokens.original-value" msgstr "Oorspronkelijke waarde: %s" @@ -8160,7 +8156,6 @@ msgid "workspace.tokens.remapping-in-progress" msgstr "Token-referenties opnieuw toewijzen…" #: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:87, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:296, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:489, src/app/main/ui/workspace/tokens/management/forms/controls/combobox.cljs:298, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:189, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:324, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:259, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:381, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:505, src/app/main/ui/workspace/tokens/management/token_pill.cljs:123 -#, fuzzy msgid "workspace.tokens.resolved-value" msgstr "Opgeloste waarde: %s" @@ -8291,7 +8286,6 @@ msgid "workspace.tokens.themes-list" msgstr "Lijst met thema's" #: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:334, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:335 -#, fuzzy msgid "workspace.tokens.token-description" msgstr "Beschrijving" @@ -8373,7 +8367,7 @@ msgstr "" #: src/app/main/ui/workspace/sidebar.cljs:159, src/app/main/ui/workspace/sidebar.cljs:166 msgid "workspace.toolbar.assets" -msgstr "Assets" +msgstr "Activa" #: src/app/main/ui/workspace/palette.cljs:182, src/app/main/ui/workspace/palette.cljs:183 msgid "workspace.toolbar.color-palette" @@ -8472,7 +8466,7 @@ msgstr "cirkels" #: src/app/main/ui/workspace/sidebar/history.cljs:113 msgid "workspace.undo.entry.multiple.color" -msgstr "kleur assets" +msgstr "kleurenactiva" #: src/app/main/ui/workspace/sidebar/history.cljs:114 msgid "workspace.undo.entry.multiple.component" @@ -8492,7 +8486,7 @@ msgstr "groepen" #: src/app/main/ui/workspace/sidebar/history.cljs:118 msgid "workspace.undo.entry.multiple.media" -msgstr "grafische assets" +msgstr "grafische activa" #: src/app/main/ui/workspace/sidebar/history.cljs:119 msgid "workspace.undo.entry.multiple.multiple" @@ -8520,7 +8514,7 @@ msgstr "teksten" #: src/app/main/ui/workspace/sidebar/history.cljs:125 msgid "workspace.undo.entry.multiple.typography" -msgstr "typografie-assets" +msgstr "typografische activa" #: src/app/main/ui/workspace/sidebar/history.cljs:146 msgid "workspace.undo.entry.new" @@ -8891,3 +8885,1309 @@ msgstr "Je bent geen lid meer van de organisatie %s" #: src/app/main/ui/settings/options.cljs:109 msgid "dashboard.webgl-switch.beta" msgstr "Beta" + +#: src/app/main/ui/settings/options.cljs:110 +msgid "dashboard.webgl-switch.description" +msgstr "" +"WebGL-weergave kan de prestaties verbeteren, maar bevindt zich in bèta en is " +"mogelijk minder stabiel. Er kunnen enkele visuele verschillen optreden " +"tussen het doek, de export (SVG/PDF) en de weergavemodus." + +#: src/app/main/ui/settings/options.cljs:113 +msgid "dashboard.webgl-switch.disabled" +msgstr "Uitgeschakeld" + +#: src/app/main/ui/settings/options.cljs:113 +msgid "dashboard.webgl-switch.enabled" +msgstr "Ingeschakeld" + +#: src/app/main/ui/settings/options.cljs:116 +msgid "dashboard.webgl-switch.feedback" +msgstr "Geef feedback" + +#: src/app/main/ui/settings/options.cljs:112 +msgid "dashboard.webgl-switch.status" +msgstr "Status" + +#: src/app/main/ui/settings/options.cljs:108 +msgid "dashboard.webgl-switch.title" +msgstr "WebGL-weergave" + +#: src/app/main/data/workspace/clipboard.cljs:327, src/app/main/data/workspace/clipboard.cljs:535 +msgid "errors.clipboard-api-unavailable" +msgstr "" +"Klembord-API is niet beschikbaar. Serveer Penpot via HTTPS om toegang tot " +"het klembord mogelijk te maken" + +#: src/app/main/data/workspace/clipboard.cljs:321, src/app/main/data/workspace/clipboard.cljs:529 +msgid "errors.clipboard-permission-denied" +msgstr "" +"Toegang klembord geweigerd. Verleen klembordrechten aan uw browser om inhoud " +"te plakken" + +#: src/app/main/ui/dashboard/fonts.cljs:341 +msgid "errors.font-family-invalid-chars" +msgstr "" +"De familienaam van het lettertype kan alleen letters, cijfers, spaties, " +"koppeltekens, onderstrepingstekens en punten bevatten." + +#: src/app/main/data/workspace/tokens/errors.cljs:49 +msgid "errors.tokens.circular-reference" +msgstr "Token heeft een cirkelreferentie" + +#: src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:350, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:436 +msgid "errors.tokens.empty-field" +msgstr "Dit veld mag niet leeg zijn" + +#: src/app/main/data/workspace/tokens/errors.cljs:67, src/app/main/ui/workspace/tokens/management/forms/controls/utils.cljs:126 +msgid "errors.tokens.name-collision" +msgstr "" +"Groepsnaam van %s is in conflict met een token met dezelfde naam in een " +"andere actieve set." + +#: src/app/main/ui/settings/integrations.cljs:629 +msgid "integrations.access-tokens.create" +msgstr "Nieuw toegangstoken aanmaken" + +#: src/app/main/ui/settings/integrations.cljs:645 +msgid "integrations.access-tokens.empty.add-one" +msgstr "" +"Druk op de knop \"Nieuw toegangstoken aanmaken\" om er een te genereren." + +#: src/app/main/ui/settings/integrations.cljs:644 +msgid "integrations.access-tokens.empty.no-access-tokens" +msgstr "Je hebt tot nu toe geen tokens." + +#: src/app/main/ui/static.cljs:89 +msgid "errors.invite-email-mismatch" +msgstr "" +"Deze uitnodiging is voor een ander e-mailadres. Meld je opnieuw aan met het " +"uitgenodigde account, of vraag de teameigenaar om een nieuwe uitnodiging." + +#: src/app/main/ui/static.cljs:93 +msgid "errors.invite-expired" +msgstr "" +"Deze uitnodiging is verlopen. Vraag de teameigenaar om een nieuwe te sturen." + +#, unused +msgid "errors.org-leave.no-valid-teams" +msgstr "" +"Er was een probleem om de organisatie te verlaten. Probeer het alsjeblieft " +"nog eens." + +#: common/src/app/common/types/team.cljc:26 +#, unused +msgid "errors.team-name-invalid-chars" +msgstr "De teamnaam kan geen van de volgende tekens bevatten: '.', ':' of '/'" + +#: src/app/main/data/media.cljs:74 +#, unused +msgid "errors.token-theme-not-existing-sets" +msgstr "Het thema verwijst naar enkele niet bestaande sets: %s" + +#: src/app/main/ui/settings/integrations.cljs:619 +msgid "integrations.access-tokens.personal" +msgstr "Persoonlijke toegangstokens" + +#: src/app/main/ui/settings/integrations.cljs:624 +msgid "integrations.access-tokens.personal.description" +msgstr "" +"Persoonlijke toegangstokens functioneren als een alternatief voor ons inlog-/" +"wachtwoordauthenticatiesysteem en kunnen worden gebruikt om een applicatie " +"toegang te geven tot de interne Penpot API" + +#: src/app/main/ui/settings/integrations.cljs:68 +msgid "integrations.copy-to-clipboard" +msgstr "Kopiëren naar klembord" + +#: src/app/main/ui/settings/integrations.cljs:266 +msgid "integrations.create-access-token.title" +msgstr "Toegangstoken aanmaken" + +#: src/app/main/ui/settings/integrations.cljs:265 +msgid "integrations.create-access-token.title.created" +msgstr "Toegangstoken aangemaakt" + +#: src/app/main/ui/settings/integrations.cljs:384 +msgid "integrations.delete-token.accept" +msgstr "Token verwijderen" + +#: src/app/main/ui/settings/integrations.cljs:383 +msgid "integrations.delete-token.message" +msgstr "Weet je zeker dat je dit token wilt verwijderen?" + +#: src/app/main/ui/settings/integrations.cljs:382 +msgid "integrations.delete-token.title" +msgstr "Token verwijderen" + +#: src/app/main/ui/settings/integrations.cljs:226 +msgid "integrations.expiration-180-days" +msgstr "180 dagen" + +#: src/app/main/ui/settings/integrations.cljs:223 +msgid "integrations.expiration-30-days" +msgstr "30 dagen" + +#: src/app/main/ui/settings/integrations.cljs:224 +msgid "integrations.expiration-60-days" +msgstr "60 dagen" + +#: src/app/main/ui/settings/integrations.cljs:225 +msgid "integrations.expiration-90-days" +msgstr "90 dagen" + +#: src/app/main/ui/settings/integrations.cljs:221 +msgid "integrations.expiration-date.label" +msgstr "Vervaldatum" + +#: src/app/main/ui/settings/integrations.cljs:222 +msgid "integrations.expiration-never" +msgstr "Nooit" + +#: src/app/main/ui/settings/integrations.cljs:406 +msgid "integrations.expired-on" +msgstr "Vervallen op %s" + +#: src/app/main/ui/settings/integrations.cljs:407 +msgid "integrations.expires-on" +msgstr "Vervalt op %s" + +#: src/app/main/ui/settings/integrations.cljs:307 +msgid "integrations.generate-mcp-key.title" +msgstr "MCP-sleutel genereren" + +#: src/app/main/ui/settings/integrations.cljs:305 +msgid "integrations.generate-mcp-key.title.created" +msgstr "MCP-sleutel gegenereerd" + +#: src/app/main/ui/settings/integrations.cljs:124 +msgid "integrations.info.mcp-client-config" +msgstr "Voeg deze configuratie toe aan je MCP-client (bijv. ~/ .mcp.json)." + +#: src/app/main/ui/settings/integrations.cljs:206 +msgid "integrations.info.mcp-server" +msgstr "" +"Met de Penpot MCP-server kunnen MCP-clients rechtstreeks communiceren met " +"Penpot-ontwerpbestanden." + +#: src/app/main/ui/settings/integrations.cljs:113 +msgid "integrations.mcp-key.will-expire" +msgstr "De MCP-sleutel vervalt op %s" + +#: src/app/main/ui/settings/integrations.cljs:116 +msgid "integrations.mcp-key.will-not-expire" +msgstr "De MCP-sleutel heeft geen vervaldatum" + +#: src/app/main/ui/settings/integrations.cljs:511 +msgid "integrations.mcp-server.description" +msgstr "" +"Met de Penpot MCP-server kunnen MCP-clients rechtstreeks communiceren met " +"Penpot-ontwerpbestanden." + +#: src/app/main/ui/settings/integrations.cljs:415 +#, unused +msgid "integrations.mcp-server.mcp-keys.copy" +msgstr "Link kopiëren" + +#: src/app/main/ui/settings/integrations.cljs:594 +msgid "integrations.mcp-server.mcp-keys.help" +msgstr "De configuratie van MCP-clients" + +#: src/app/main/ui/settings/integrations.cljs:581 +msgid "integrations.mcp-server.mcp-keys.info" +msgstr "" +"Dit is de server-URL die je nodig hebt om je MCP-client te configureren voor " +"de verbinding met de Penpot MCP-server." + +#: src/app/main/ui/settings/integrations.cljs:561 +msgid "integrations.mcp-server.mcp-keys.regenerate" +msgstr "MCP-sleutel opnieuw genereren" + +#: src/app/main/ui/settings/integrations.cljs:554 +msgid "integrations.mcp-server.mcp-keys.title" +msgstr "MCP-sleutel" + +#: src/app/main/ui/settings/integrations.cljs:562 +msgid "integrations.mcp-server.mcp-keys.tootip" +msgstr "De MCP-sleutel is nodig voor het instellen van de MCP-client" + +#: src/app/main/ui/settings/integrations.cljs:517 +msgid "integrations.mcp-server.status" +msgstr "Status" + +#: src/app/main/ui/settings/integrations.cljs:537 +msgid "integrations.mcp-server.status.disabled" +msgstr "Uitgeschakeld" + +#: src/app/main/ui/settings/integrations.cljs:536 +msgid "integrations.mcp-server.status.enabled" +msgstr "Ingeschakeld" + +#: src/app/main/ui/settings/integrations.cljs:527 +msgid "integrations.mcp-server.status.expired.0" +msgstr "" +"De MCP-sleutel voor de verbinding met de MCP-server is verlopen. Hierdoor " +"kan de verbinding niet tot stand worden gebracht." + +#: src/app/main/ui/settings/integrations.cljs:532 +msgid "integrations.mcp-server.status.expired.1" +msgstr "" +"Genereer de MCP-sleutel opnieuw en pas je clientconfiguratie aan met de " +"nieuwe sleutel." + +#: src/app/main/ui/settings/integrations.cljs:502 +msgid "integrations.mcp-server.title" +msgstr "MCP-server" + +#: src/app/main/ui/settings/integrations.cljs:506 +msgid "integrations.mcp-server.title.beta" +msgstr "Bèta" + +#: src/app/main/ui/settings/integrations.cljs:213 +msgid "integrations.name.label" +msgstr "Naam" + +#: src/app/main/ui/settings/integrations.cljs:214 +msgid "integrations.name.placeholder" +msgstr "De naam kan helpen om te weten waar het token voor is" + +#: src/app/main/ui/settings/integrations.cljs:405 +msgid "integrations.no-expiration" +msgstr "Geen vervaldatum" + +#: src/app/main/ui/settings/integrations.cljs:491 +msgid "integrations.notification.success.copied-link" +msgstr "Link gekopieerd naar klembord" + +#: src/app/main/ui/settings/integrations.cljs:254, src/app/main/ui/settings/integrations.cljs:287, src/app/main/ui/settings/integrations.cljs:332 +msgid "integrations.notification.success.created" +msgstr "Token met succes aangemaakt" + +#: src/app/main/ui/settings/integrations.cljs:86 +msgid "integrations.notification.success.mcp-key-copied" +msgstr "MCP-sleutel gekopieerd" + +#: src/app/main/ui/settings/integrations.cljs:457 +msgid "integrations.notification.success.mcp-server-disabled" +msgstr "MCP-server uitgeschakeld" + +#: src/app/main/ui/settings/integrations.cljs:456 +msgid "integrations.notification.success.mcp-server-enabled" +msgstr "MCP-server ingeschakeld" + +#: src/app/main/ui/settings/integrations.cljs:87 +msgid "integrations.notification.success.token-copied" +msgstr "Token gekopieerd" + +#: src/app/main/ui/settings/integrations.cljs:350 +msgid "integrations.regenerate-mcp-key.info" +msgstr "" +"Het opnieuw genereren van de MCP-sleutel zal de huidige onmiddellijk " +"intrekken. Elke toepassing die het gebruikt, zal stoppen met werken." + +#: src/app/main/ui/settings/integrations.cljs:349 +msgid "integrations.regenerate-mcp-key.title" +msgstr "MCP-sleutel opnieuw genereren" + +#: src/app/main/ui/settings/integrations.cljs:347 +msgid "integrations.regenerate-mcp-key.title.created" +msgstr "MCP-sleutel opnieuw gegenereerd" + +#: src/app/main/ui/settings/integrations.cljs:666 +msgid "integrations.title" +msgstr "Integraties" + +#: src/app/main/ui/settings/integrations.cljs:102 +msgid "integrations.token.info.non-recuperable" +msgstr "" +"Dit unieke token is niet recupereerbaar. Als je het verliest, moet je een " +"nieuwe maken." + +#: src/app/main/ui/settings/integrations.cljs:114 +msgid "integrations.token.will-expire" +msgstr "Het token vervalt op %s" + +#: src/app/main/ui/settings/integrations.cljs:117 +msgid "integrations.token.will-not-expire" +msgstr "Het token heeft geen vervaldatum" + +#: src/app/main/ui/inspect/attributes/blur.cljs:30, src/app/main/ui/inspect/styles/style_box.cljs:32, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:262, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:274 +msgid "labels.blur-effects" +msgstr "Vervagingseffecten" + +#: src/app/main/ui/settings/profile.cljs:116 +msgid "labels.delete-profile-photo.message" +msgstr "Weet je zeker dat je je profielfoto wilt verwijderen?" + +#: src/app/main/ui/settings/profile.cljs:115 +msgid "labels.delete-profile-photo.title" +msgstr "Profielfoto verwijderen" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:80 +msgid "nitrate.code-activation.title" +msgstr "Nitrate inschakelen" + +#, unused +msgid "nitrate.contact-sales.button" +msgstr "Neem contact op met Verkoop" + +#, unused +msgid "nitrate.contact-sales.downgrade-contact-info" +msgstr "" +"Neem contact op met ons verkoopteam om over te schakelen naar dit " +"abonnement. Wij helpen je jouw abonnement bij te werken en ervoor te zorgen " +"dat alles correct wordt ingesteld." + +#, unused +msgid "nitrate.contact-sales.downgrade-org-deleted" +msgstr "Jouw organisatie wordt verwijderd." + +#, unused +msgid "nitrate.contact-sales.downgrade-storage-limited" +msgstr "" +"Je totale opslag, automatische versiegeschiedenis en bestandsherstelperiode " +"zijn beperkt." + +#, unused +msgid "nitrate.contact-sales.downgrade-teams-available" +msgstr "" +"De teams, projecten en bestanden zullen geen deel meer uitmaken van een " +"organisatie maar blijven wel beschikbaar." + +#, unused +msgid "nitrate.contact-sales.downgrade-title" +msgstr "Wanneer je overgaat naar een mindere abonnementsvorm:" + +#, unused +msgid "nitrate.contact-sales.title" +msgstr "Overschakelen naar abonnement %s?" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:77 +msgid "nitrate.form.cancel-anytime" +msgstr "" +"De betaling wordt aan het einde van de proeftijd verwerkt. Je kunt op elk " +"gewenst moment annuleren." + +#: src/app/main/ui/nitrate/nitrate_form.cljs:92 +msgid "nitrate.form.contact-trial" +msgstr "Neem contact met ons op om Enterprise 14 dagen uit te proberen:" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:91 +msgid "nitrate.form.contact-upgrade" +msgstr "Neem contact met ons op om te upgraden naar Enterprise:" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:82, src/app/main/ui/nitrate/nitrate_form.cljs:102 +msgid "nitrate.form.enter-code" +msgstr "Activatiecode invoeren" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:57 +msgid "nitrate.form.enterprise-feature-1" +msgstr "Algemene tot fijnmazige machtigingen voor teams en projecten" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:61 +msgid "nitrate.form.enterprise-feature-3" +msgstr "" +"Volledige open-sourcevrijheid, met het bestuur dat past bij jouw organisatie" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:54 +msgid "nitrate.form.enterprise-intro" +msgstr "Alles wat jouw teams nodig hebben om veilig op schaal te werken:" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:66, src/app/main/ui/settings/subscription.cljs:767 +msgid "nitrate.form.enterprise.price" +msgstr "per deelnemer per maand" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:80, src/app/main/ui/nitrate/nitrate_form.cljs:98 +msgid "nitrate.form.have-code" +msgstr "Heb je een activeringscode?" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:86 +msgid "nitrate.form.see-plan" +msgstr "Mijn huidige abonnement weergeven" + +#, unused +msgid "nitrate.form.start-enterprise" +msgstr "Aan de slag met Enterprise" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:51 +msgid "nitrate.form.title" +msgstr "Enterprise-functies vrijgeven" + +#: src/app/main/ui/dashboard/subscription.cljs:209, src/app/main/ui/nitrate/nitrate_form.cljs:75 +msgid "nitrate.form.try-free" +msgstr "Probeer het 14 dagen gratis" + +#: src/app/main/ui/dashboard/subscription.cljs:251 +msgid "subscription.current-plan.nitrate-trial" +msgstr "Enterprise Proefperiode" + +#: src/app/main/ui/dashboard/subscription.cljs:246 +msgid "subscription.current-plan.professional" +msgstr "Professional" + +#: src/app/main/ui/settings/subscription.cljs:600, src/app/main/ui/settings/subscription.cljs:678 +msgid "subscription.settings.professional.selfhost.community-support" +msgstr "" +"Alle ontwerp- en prototypingfuncties met ondersteuning door de gemeenschap." + +#: src/app/main/ui/settings/subscription.cljs:594, src/app/main/ui/settings/subscription.cljs:672 +msgid "subscription.settings.professional.selfhost.control-over-data" +msgstr "Volledige controle over data en infrastructuur." + +#: src/app/main/ui/settings/subscription.cljs:597, src/app/main/ui/settings/subscription.cljs:675 +msgid "subscription.settings.professional.selfhost.unlimited-users" +msgstr "Onbeperkte gebruikers, teams en bestanden." + +#: src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs:57 +msgid "nitrate.activation-success.active-until" +msgstr "Jouw abonnement is actief tot %s." + +#: src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs:63 +msgid "nitrate.activation-success.enjoy" +msgstr "Veel plezier met je abonnement!" + +#: src/app/main/ui/dashboard/subscription.cljs:253 +msgid "subscription.current-plan.enterprise" +msgstr "Enterprise" + +#: src/app/main/ui/dashboard/subscription.cljs:252 +msgid "subscription.current-plan.nitrate" +msgstr "Enterprise" + +#: src/app/main/ui/dashboard/subscription.cljs:241 +msgid "subscription.current-plan.title" +msgstr "Jouw abonnement" + +#: src/app/main/ui/dashboard/subscription.cljs:249 +msgid "subscription.current-plan.unlimited" +msgstr "Unlimited" + +#: src/app/main/ui/dashboard/subscription.cljs:248 +msgid "subscription.current-plan.unlimited-trial" +msgstr "Unlimited Proefperiode" + +#, unused +msgid "errors.org-leave.org-owner-cannot-leave" +msgstr "De eigenaar van de organisatie kan de organisatie niet verlaten." + +#: src/app/main/ui/auth/verify_token.cljs:97 +msgid "errors.org-not-found" +msgstr "Die organisatie bestaat niet" + +#: src/app/main/ui/dashboard/sidebar.cljs:466 +msgid "errors.team-leave.only-owner-can-delete" +msgstr "Alleen de eigenaar kan een team verwijderen." + +#: src/app/main/ui/dashboard/fonts.cljs:283 +msgid "labels.download-simple" +msgstr "Downloaden" + +#: src/app/main/ui/exports/files.cljs:186 +msgid "labels.downloading-file" +msgstr "Bestand downloaden…" + +#: src/app/main/data/workspace/versions.cljs:305 +msgid "labels.exit" +msgstr "Sluiten" + +#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1277 +msgid "labels.flex-layout" +msgstr "Flex layout" + +#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1281 +msgid "labels.grid-layout" +msgstr "Rasterlayout" + +#: src/app/main/ui/settings/sidebar.cljs:122 +msgid "labels.integrations" +msgstr "Integraties" + +#: src/app/main/ui/static.cljs:337 +msgid "labels.nitrate-unavailable.main-message" +msgstr "" +"Penpot is tijdelijk niet beschikbaar vanwege een systeemprobleem. Probeer " +"het even later nog eens." + +#: src/app/main/ui/components/select.cljs:256 +msgid "labels.no-matches" +msgstr "Geen overeenkomst" + +#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:705 +msgid "labels.open" +msgstr "Openen" + +#: src/app/main/ui/dashboard/import.cljs:534 +msgid "labels.uploading-file" +msgstr "Bestand uploaden…" + +#: src/app/main/ui/dashboard/import.cljs:297 +#, unused +msgid "labels.warning-count" +msgid_plural "labels.warning-count" +msgstr[0] "%s waarschuwing" +msgstr[1] "%s waarschuwingen" + +#: src/app/main/data/nitrate.cljs:199 +msgid "modals.before-leave-org.message" +msgstr "" +"Je bent het enige lid van een aantal van de teams. Deze teams worden samen " +"met de projecten en bestanden verwijderd." + +#: src/app/main/data/nitrate.cljs:198, src/app/main/ui/dashboard/change_owner.cljs:151 +msgid "modals.before-leave-org.title" +msgstr "VOORDAT JE DE ORGANISATIE VERLAAT" + +#: src/app/main/data/nitrate.cljs:202 +msgid "modals.before-leave-org.warning" +msgstr "Elk team waarvan je het enige lid bent, wordt verwijderd." + +#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:322 +msgid "inspect.attributes.typography.mixed-font-family" +msgstr "Gemengde lettertypen Families" + +#: src/app/main/ui/settings/delete_account.cljs +#, unused +msgid "modals.delete-account.info.with-orgs" +msgstr "" +"Deze actie is onomkeerbaar. Je account, abonnement en organisaties worden " +"onmiddellijk verwijderd. Je verliest ook de toegang tot je huidige projecten " +"en bestanden." + +#: src/app/main/ui/settings/delete_account.cljs:83 +msgid "modals.delete-account.owned-orgs.list-title" +msgstr "Organisaties die zullen worden verwijderd" + +#: src/app/main/ui/settings/delete_account.cljs:98 +msgid "modals.delete-account.owned-orgs.members-count" +msgstr "%s leden" + +#: src/app/main/ui/settings/delete_account.cljs:96 +msgid "modals.delete-account.owned-orgs.teams-count" +msgstr "%s teams" + +#: src/app/main/ui/workspace/sidebar/assets/common.cljs:229 +msgid "modals.delete-asset-group.message" +msgid_plural "modals.delete-asset-group.message" +msgstr[0] "Weet je zeker dat je deze %s activa wilt verwijderen?" +msgstr[1] "Weet je zeker dat je deze %s activa wilt verwijderen?" + +#: src/app/main/ui/workspace/sidebar/assets/common.cljs:228 +msgid "modals.delete-asset-group.title" +msgstr "Groep verwijderen" + +#: src/app/main/data/team.cljs:129 +msgid "modals.delete-org-team-confirm.message" +msgstr "" +"Weet je zeker dat je dit team dat deel uitmaakt van %s org wilt verwijderen?" + +#: src/app/main/ui/workspace/tokens/import_from_library.cljs:75 +msgid "modals.import-library-tokens.description" +msgstr "" +"De bibliotheek heeft tokens en thema's die waarschijnlijk door de " +"componenten worden gebruikt." + +#: src/app/main/ui/workspace/tokens/import_from_library.cljs:92 +msgid "modals.import-library-tokens.import" +msgstr "Tokens importeren" + +#: src/app/main/ui/workspace/tokens/import_from_library.cljs:72 +msgid "modals.import-library-tokens.title" +msgstr "Tokens importeren uit bibliotheek?" + +#: src/app/main/data/team.cljs:583 +msgid "modals.invite-restricted-members.all-blocked" +msgstr "" +"Alleen bestaande leden van de organisatie kunnen worden uitgenodigd. Omdat " +"geen van de mensen op de lijst lid is, zijn er geen uitnodigingen verzonden." + +#: src/app/main/data/team.cljs:582 +msgid "modals.invite-restricted-members.all-blocked-title" +msgstr "Er zijn geen uitnodigingen verzonden" + +#: src/app/main/data/team.cljs:162 +msgid "modals.invite-restricted-members.all-org-members-in-team" +msgstr "" +"Alleen leden van de organisatie \"%s\" kunnen voor dit team worden " +"uitgenodigd, en ze zijn allemaal al teamleden. Als je meer informatie nodig " +"heeft, neem dan contact op met de eigenaar van de organisatie." + +#: src/app/main/ui/dashboard/team.cljs:308 +msgid "modals.invite-restricted-members.blocked-addresses" +msgstr "Adressen die geen uitnodiging ontvangen" + +#: src/app/main/ui/dashboard/team.cljs:325 +msgid "modals.invite-restricted-members.cancel" +msgstr "Annuleren" + +#: src/app/main/ui/dashboard/team.cljs:298 +msgid "modals.invite-restricted-members.description" +msgstr "Alleen bestaande leden van de organisatie kunnen worden uitgenodigd." + +#: src/app/main/ui/dashboard/team.cljs:333 +msgid "modals.invite-restricted-members.send" +msgstr "Uitnodigingen versturen" + +#: src/app/main/ui/dashboard/team.cljs:293 +msgid "modals.invite-restricted-members.title" +msgstr "Enkele uitnodigingen kunnen niet worden verzonden" + +#: src/app/main/ui/dashboard/team.cljs:299 +msgid "modals.invite-restricted-members.warning" +msgstr "Sommige mensen op de lijst ontvangen de uitnodiging niet." + +#: src/app/main/ui/dashboard/change_owner.cljs:158 +msgid "modals.leave-org-and-reassign.hint" +msgstr "" +"Jij bent de eigenaar van de teams van sommige organisaties. Promoot een " +"ander lid om eigenaar te worden." + +#: src/app/main/ui/dashboard/change_owner.cljs:161 +msgid "modals.leave-org-and-reassign.hint-delete" +msgstr "" +"Je bent het enige lid van een aantal van de teams. Deze teams worden samen " +"met de projecten en bestanden verwijderd." + +#: src/app/main/ui/dashboard/change_owner.cljs:163 +msgid "modals.leave-org-and-reassign.hint-promote" +msgstr "" +"Bovendien ben jij de eigenaar van de teams van sommige organisaties. Promoot " +"een ander lid om eigenaar te worden." + +#: src/app/main/data/nitrate.cljs:200, src/app/main/data/nitrate.cljs:209 +msgid "modals.leave-org-confirm.accept" +msgstr "Organisatie verlaten" + +#: src/app/main/data/nitrate.cljs:208 +msgid "modals.leave-org-confirm.message" +msgstr "" +"Je verliest permanent de toegang tot alle teams, projecten en bestanden " +"daarin." + +#: src/app/main/data/nitrate.cljs:207 +msgid "modals.leave-org-confirm.title" +msgstr "Organisatie %s verlaten?" + +#: src/app/main/data/nitrate.cljs:256 +msgid "modals.remove-team-org.accept" +msgstr "Extern van organisatie" + +#: src/app/main/data/nitrate.cljs:254 +msgid "modals.remove-team-org.info" +msgstr "" +"Projecten en bestanden blijven beschikbaar voor teamleden, maar de " +"instellingen van de organisatie zijn niet langer van toepassing." + +#: src/app/main/data/nitrate.cljs:253 +msgid "modals.remove-team-org.text" +msgstr "" +"Weet je zeker dat je het team '%s' uit de organisatie '%s' wilt verwijderen?" + +#: src/app/main/data/nitrate.cljs:252 +msgid "modals.remove-team-org.title" +msgstr "TEAM UIT DE ORGANISATIE VERWIJDEREN" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:58 +msgid "nitrate.activation-code.expired-error" +msgstr "Deze code is verlopen." + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:59 +msgid "nitrate.activation-code.invalid-error" +msgstr "Ongeldige code." + +#: src/app/main/ui/dashboard/subscription.cljs:195, src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs:68 +msgid "nitrate.activation-success.create-org" +msgstr "Organisatie aanmaken" + +#: src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs:60 +msgid "nitrate.activation-success.manage-info" +msgstr "" +"Je kunt je abonnement op elk gewenst moment beheren vanaf de " +"Abonnementspagina in je accountinstellingen." + +#: src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs:53 +msgid "nitrate.activation-success.title" +msgstr "Je bent Business Nitrate!" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:104 +msgid "nitrate.code-activation.footer" +msgstr "Een code nodig? Neem contact met ons op:" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:86 +msgid "nitrate.code-activation.input-label" +msgstr "Vul je activeringscode in" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:90 +msgid "nitrate.code-activation.placeholder" +msgstr "Plak hier je activeringscode" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:79 +msgid "nitrate.code-activation.renew-title" +msgstr "NITRATE VERLENGEN" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:101 +msgid "nitrate.code-activation.submit" +msgstr "Activeren" + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:65 +msgid "webgl.modals.webgl-unavailable.troubleshooting.before" +msgstr "Volg onze " + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:70 +msgid "webgl.modals.webgl-unavailable.troubleshooting.link" +msgstr "WebGL-gids voor probleemoplossing" + +#, unused +msgid "webgl.toast.webgl-render-disabled" +msgstr "WebGL-weergave uitgeschakeld" + +#, unused +msgid "webgl.toast.webgl-render-enabled" +msgstr "WebGL-weergave ingeschakeld" + +#: src/app/render_wasm/api.cljs:2052 +msgid "webgl.webgl-context-lost.toast" +msgstr "WebGL-context ging verloren" + +#: src/app/render_wasm/api.cljs:2068 +msgid "webgl.webgl-context-recovered.toast" +msgstr "WebGL-context is hersteld" + +#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:74 +msgid "workspace.assets.delete-group" +msgstr "Groep verwijderen" + +#: src/app/main/data/workspace/clipboard.cljs:1172 +msgid "workspace.clipboard.copying" +msgstr "Afbeelding kopiëren…" + +#: src/app/main/data/workspace/clipboard.cljs:1195 +msgid "workspace.clipboard.image-copied" +msgstr "Afbeelding gekopieerd naar het klembord" + +#: src/app/main/data/workspace/clipboard.cljs:1201 +msgid "workspace.clipboard.image-copy-failed" +msgstr "Fout bij kopiëren van afbeelding" + +#: src/app/main/ui/workspace/context_menu.cljs:873 +msgid "workspace.context-menu.grid-cells.copy-columns" +msgstr "Kolommen kopiëren" + +#: src/app/main/ui/workspace/context_menu.cljs:869 +msgid "workspace.context-menu.grid-cells.copy-rows" +msgstr "Rijen kopiëren" + +#: src/app/main/ui/workspace/context_menu.cljs:877 +msgid "workspace.context-menu.grid-cells.paste-tracks" +msgstr "Plakken" + +#: src/app/main/ui/workspace/context_menu.cljs:911 +msgid "workspace.context-menu.guides.change-color" +msgstr "Hulplijnkleur" + +#: src/app/main/ui/workspace/context_menu.cljs:923 +msgid "workspace.context-menu.guides.remove" +msgstr "Hulplijn verwijderen" + +#: src/app/main/ui/workspace/main_menu.cljs:336 +msgid "workspace.header.menu.disable-webgl" +msgstr "WebGL-weergave (bèta) uitschakelen" + +#: src/app/main/ui/workspace/main_menu.cljs:337 +msgid "workspace.header.menu.enable-webgl" +msgstr "WebGL-weergave (bèta) inschakelen" + +#: src/app/main/ui/workspace/main_menu.cljs:530 +msgid "workspace.header.menu.find" +msgstr "Zoeken" + +#: src/app/main/ui/workspace/main_menu.cljs:537 +msgid "workspace.header.menu.find-and-replace" +msgstr "Zoeken en Vervangen" + +#: src/app/main/ui/workspace/main_menu.cljs:421 +msgid "workspace.header.menu.hide-comments" +msgstr "Commentaar verbergen" + +#: src/app/main/ui/workspace/main_menu.cljs:410 +msgid "workspace.header.menu.lock-guides" +msgstr "Hulplijnen vergrendelen" + +#: src/app/main/ui/settings/subscription.cljs:584 +msgid "nitrate.subscription.settings.manual-cancel" +msgstr "Abonnement annuleren" + +#: src/app/main/ui/settings/subscription.cljs:103 +msgid "nitrate.subscription.settings.renew-with-code" +msgstr "Verlengen met activeringscode" + +#: src/app/main/ui/workspace/sidebar/options/menus/token_typography_row.cljs:44, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:103, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:110 +msgid "not-active-token.no-name" +msgstr "" +"Dit token bevindt zich niet in een actieve set of heeft een ongeldige waarde." + +#: src/app/main/data/workspace/mcp.cljs:185 +#, unused +msgid "notifications.mcp.active-in-another-tab" +msgstr "MCP is actief op een ander tabblad. Hier wisselen?" + +#, unused +msgid "notifications.mcp.active-in-this-tab" +msgstr "MCP is nu actief op dit tabblad." + +#: src/app/main/ui/onboarding/questions.cljs:226 +msgid "onboarding.questions.team-size.1001-5000" +msgstr "1.001 - 5.000" + +#: src/app/main/ui/onboarding/questions.cljs:222 +msgid "onboarding.questions.team-size.101-500" +msgstr "101 - 500" + +#: src/app/main/ui/onboarding/questions.cljs:220 +msgid "onboarding.questions.team-size.2-100" +msgstr "2 - 100" + +#: src/app/main/ui/onboarding/questions.cljs:224 +msgid "onboarding.questions.team-size.501-1000" +msgstr "501 - 1.000" + +#: src/app/main/ui/onboarding/questions.cljs:218 +msgid "onboarding.questions.team-size.just-me" +msgstr "Alleen ik" + +#: src/app/main/ui/onboarding/questions.cljs:228 +msgid "onboarding.questions.team-size.more-than-5001" +msgstr "5.001+" + +#: src/app/plugins/utils.cljs:318 +msgid "plugins.validation.message" +msgstr "Veld %s is ongeldig: %s" + +#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114 +msgid "shortcuts.find" +msgstr "Zoeken" + +#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115 +msgid "shortcuts.find-and-replace" +msgstr "Zoeken en Vervangen" + +#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165 +msgid "shortcuts.paste-replace" +msgstr "Plakken en vervangen" + +#: src/app/main/ui/dashboard/subscription.cljs:191 +msgid "subscription.banner.create-org-info" +msgstr "" +"Maak een organisatie aan en ervaar hoe Enterprise werkt. Stel regels in, " +"beheer je teams en ontdek een nieuw niveau van controle over je " +"ontwerpworkflow." + +#: src/app/main/ui/dashboard/subscription.cljs:189 +msgid "subscription.banner.see-enterprise" +msgstr "Enterprise in actie bekijken" + +#: src/app/main/ui/dashboard/subscription.cljs:229 +msgid "subscription.dashboard.banner.renew" +msgstr "Verlengen" + +#: src/app/main/ui/dashboard/subscription.cljs:216 +msgid "subscription.dashboard.banner.renew-subscription" +msgstr "Verleng je abonnement" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:50 +msgid "nitrate.subscription.renew-success" +msgstr "Je Nitrate abonnement is verlengd." + +#: src/app/main/ui/settings/subscription.cljs:575 +msgid "nitrate.subscription.active-until" +msgstr "Actief tot %s" + +#: src/app/main/ui/dashboard/subscription.cljs:222 +msgid "subscription.dashboard.banner.subscription-expire-days" +msgstr "Jouw Enterprise-abonnement vervalt over %s dagen (%s)" + +#: src/app/main/ui/dashboard/subscription.cljs:220 +msgid "subscription.dashboard.banner.subscription-expired" +msgstr "Jouw Enterprise-abonnement is verlopen. (%s)" + +#: src/app/main/ui/dashboard/subscription.cljs:201 +msgid "subscription.dashboard.banner.unlock-features" +msgstr "Enterprise-functies ontgrendelen" + +#: src/app/main/ui/dashboard/subscription.cljs:203 +msgid "subscription.dashboard.banner.unlock-features-description" +msgstr "" +"Stel fijnmazige machtigingen in en houd je ontwerpactiviteiten veilig, " +"zonder afbreuk te doen aan de open-sourcevrijheid waar je team al van houdt." + +#: src/app/main/ui/dashboard/subscription.cljs:208 +msgid "subscription.dashboard.banner.upgrade-nitrate" +msgstr "Aan de slag met Enterprise" + +#: src/app/main/ui/settings/subscription.cljs:408 +msgid "subscription.error.nitrate.checkout-cancelled" +msgstr "" +"Betaling is niet voltooid. Probeer het opnieuw wanneer je er klaar voor bent." + +#: src/app/main/ui/settings/subscription.cljs:427 +msgid "subscription.error.nitrate.checkout-failed" +msgstr "" +"We konden niet beginnen met de kassa. Probeer het alsjeblieft nog eens. Als " +"het probleem aanhoudt, neem dan contact met ons op: support@penpot.app." + +#: src/app/main/ui/settings/subscription.cljs:407 +msgid "subscription.error.nitrate.checkout-finish-failed" +msgstr "" +"We konden je abonnement niet bevestigen. Controleer je abonnementsstatus op " +"de Abonnementspagina. Indien nodig kun je het opnieuw proberen." + +#: src/app/main/ui/settings/subscription.cljs:97 +msgid "subscription.settings.activate-by-code" +msgstr "Activatiecode invoeren" + +#: src/app/main/ui/settings/subscription.cljs:724 +msgid "subscription.settings.organization-member-month" +msgstr "org deelnemer per maand" + +#: src/app/main/ui/settings/integrations.cljs:659 +msgid "title.settings.integrations" +msgstr "Integraties - Penpot" + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:76 +msgid "webgl.modals.webgl-unavailable.cta-dashboard" +msgstr "Ga naar het dashboard" + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:78 +msgid "webgl.modals.webgl-unavailable.cta-troubleshooting" +msgstr "Gids voor probleemoplossing" + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:62 +msgid "webgl.modals.webgl-unavailable.message" +msgstr "" +"WebGL is niet beschikbaar in je browser, wat vereist is om Penpot te laten " +"werken. Controleer je browserinstellingen en/of sluit tabbladen met veel " +"afbeeldingen." + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:58 +msgid "webgl.modals.webgl-unavailable.title" +msgstr "Oeps! WebGL is niet beschikbaar" + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:71 +msgid "webgl.modals.webgl-unavailable.troubleshooting.after" +msgstr "" +" om browserinstellingen, GPU-versnelling, stuurprogramma's en " +"veelvoorkomende systeemproblemen te controleren." + +#: src/app/main/ui/workspace/main_menu.cljs:869 +msgid "workspace.header.menu.mcp.plugin.status.connect" +msgstr "Verbinding maken" + +#: src/app/main/ui/workspace/main_menu.cljs:868 +msgid "workspace.header.menu.mcp.plugin.status.disconnect" +msgstr "Verbinding verbreken" + +#: src/app/main/ui/workspace/main_menu.cljs:878 +msgid "workspace.header.menu.mcp.server.status.disabled" +msgstr "Beheren (status: uitgeschakeld)" + +#: src/app/main/ui/workspace/main_menu.cljs:877 +msgid "workspace.header.menu.mcp.server.status.enabled" +msgstr "Beheren (status: ingeschakeld)" + +#: src/app/main/ui/workspace/main_menu.cljs:1101 +msgid "workspace.header.menu.option.mcp" +msgstr "MCP-server" + +#: src/app/main/ui/workspace/main_menu.cljs:422 +msgid "workspace.header.menu.show-comments" +msgstr "Commentaar weergeven" + +#: src/app/main/ui/workspace/main_menu.cljs:409 +msgid "workspace.header.menu.unlock-guides" +msgstr "Hulplijnen ontgrendelen" + +#: src/app/main/ui/workspace/colorpicker/libraries.cljs:354 +msgid "workspace.libraries.colors.add-library-color" +msgstr "Kleur toevoegen aan bilbliotheek" + +#: src/app/main/ui/workspace/colorpicker/libraries.cljs:371, src/app/main/ui/workspace/colorpicker/libraries.cljs:387 +msgid "workspace.libraries.colors.empty-recent-colors" +msgstr "Er zijn nog geen recente kleuren" + +#: src/app/main/ui/workspace/colorpicker/libraries.cljs:336 +msgid "workspace.libraries.colors.toggle-color-palette" +msgstr "Kleurenpalet wisselen" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:541 +msgid "workspace.libraries.text.mixed-tokens" +msgstr "Gemengde tokens" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:536 +msgid "workspace.libraries.text.mixed-tokens-and-assets" +msgstr "Gemengde activa en tokens" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:556 +msgid "workspace.libraries.text.mixed-typography" +msgstr "Gemengde activa" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:558 +msgid "workspace.libraries.text.multiple-assets-tooltip" +msgstr "Alle activa ontkoppelen" + +#: src/app/main/data/workspace/mcp.cljs:186 +#, unused +msgid "labels.dismiss" +msgstr "Afwijzen" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:543 +msgid "workspace.libraries.text.multiple-token-tooltip" +msgstr "Alle tokens loskoppelen" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs +#, unused +msgid "workspace.options.blur-effects-options.title" +msgstr "Vervagingseffecten" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:273 +msgid "workspace.options.blur-effects-options.title.group" +msgstr "Groepsvervagingseffecten" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:272 +msgid "workspace.options.blur-effects-options.title.multiple" +msgstr "Selectievervagingseffecten" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:99, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:109 +msgid "workspace.options.blur-options.background-blur" +msgstr "Achtergrondvervaging" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:144 +msgid "workspace.options.blur-options.blur-type-select" +msgstr "Vervagingstype selecteren" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:153 +msgid "workspace.options.blur-options.disabled-blur-label" +msgstr "" +"Achtergrondvervaging wordt alleen ondersteund in de nieuwe render. Schakel " +"over naar de nieuwe render in het menu Voorkeuren om dit effect te gebruiken" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:98, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:112 +msgid "workspace.options.blur-options.layer-blur" +msgstr "Laagvervaging" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:138 +msgid "workspace.options.blur-options.toggle-more-options" +msgstr "Meer opties tonen/verbergen" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:517 +msgid "workspace.options.convert-to-typography" +msgstr "Typografiestijl maken" + +#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:198 +msgid "workspace.options.fill.section" +msgstr "Sectie vullen" + +#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:285 +msgid "workspace.options.layer-options.layer-section" +msgstr "Menusectie laag" + +#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:117, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:488 +msgid "workspace.options.no-size-preset-results" +msgstr "Geen overeenkomende maatvoorinstelling" + +#: src/app/main/ui/workspace/sidebar/options/page.cljs +#, unused +msgid "workspace.options.pixel grid-color" +msgstr "Kleur van het pixelraster" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:626 +msgid "workspace.sidebar.layers.replace-all" +msgstr "Alles vervangen" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:587 +msgid "workspace.sidebar.layers.replace-placeholder" +msgstr "Vervangen door…" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:575 +msgid "workspace.sidebar.layers.search-and-replace" +msgstr "Zoeken en vervangen" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:606 +msgid "workspace.sidebar.layers.search-scope-canvas" +msgstr "Tekstinhoud" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:610 +msgid "workspace.sidebar.layers.search-scope-layers" +msgstr "Laagnamen" + +#, unused +msgid "workspace.toast.comments-hidden" +msgstr "Commentaar verborgen" + +#, unused +msgid "workspace.toast.comments-visible" +msgstr "Commentaar zichtbaar" + +#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:357 +msgid "workspace.tokens.copy-name" +msgstr "Tokenpad kopiëren" + +#: src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:60 +msgid "workspace.tokens.duplicate-group" +msgstr "Tokensgroep dupliceren" + +#: src/app/main/data/workspace/tokens/errors.cljs:32 +#, unused +msgid "workspace.tokens.duplicated-json-token-name" +msgstr "Importeerfout: dubbele tokennaam in JSON." + +#: src/app/main/data/workspace/tokens/errors.cljs:33 +#, unused +msgid "workspace.tokens.duplicated-json-token-name-detail" +msgstr "" +"Er bestaat al een token bij het pad '%s' of bij een voorvoegsel daarvan, in " +"een andere set." + +#: src/app/main/data/workspace/tokens/application.cljs:730, src/app/main/ui/workspace/tokens/management/group.cljs:161 +msgid "workspace.tokens.error-text-edition" +msgstr "" +"Tokens kunnen niet worden toegepast tijdens het bewerken van tekst. " +"Selecteer in plaats daarvan de tekstlaag." + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs:102 +msgid "workspace.tokens.remap-node-references-title" +msgstr "" +"'%s' hernoemen naar '%s' en alle tokens in deze groep opnieuw in kaart " +"brengen?" + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs:106 +msgid "workspace.tokens.remap-node-warning-effects" +msgstr "" +"Hiermee worden alle tokens en referenties die de oude tokensnaam gebruiken " +"bijgewerkt ." + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs:105 +msgid "workspace.tokens.remap-token-warning-effects" +msgstr "" +"Hierdoor worden alle lagen en verwijzingen die de oude tokennaam gebruiken, " +"gewijzigd." + +#: src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:59 +msgid "workspace.tokens.rename-group" +msgstr "Tokensgroep hernoemen" + +#: src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:68 +msgid "workspace.tokens.rename-group-name-hint" +msgstr "Je tokens worden automatisch hernoemd naar % s.(suffix).(tokenName)" + +#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:297, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:527 +msgid "workspace.tokens.search-by-token" +msgstr "Zoeken op tokennaam" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:273 +msgid "workspace.tokens.token-name-duplication-validation-error" +msgstr "Er bestaat al een token op het pad: %s of op een voorvoegsel daarvan." + +#: src/app/main/ui/workspace/top_toolbar.cljs:65, src/app/main/ui/workspace/top_toolbar.cljs:66, src/app/main/ui/workspace/top_toolbar.cljs:77 +msgid "workspace.toolbar.mcp" +msgstr "MCP" + +#: src/app/main/ui/workspace/top_toolbar.cljs:87 +msgid "workspace.toolbar.mcp-connect-here" +msgstr "Hier verbinden" + +#: src/app/main/ui/workspace/top_toolbar.cljs:84 +msgid "workspace.toolbar.mcp-connected" +msgstr "MCP verbonden" + +#: src/app/main/ui/workspace/palette.cljs:166 +msgid "workspace.toolbar.palette-bar" +msgstr "Paletbalk" + +#, unused +msgid "workspace.top-bar.webgl-context-lost" +msgstr "Weergave niet beschikbaar. Vernieuwen om de bewerking te herstellen." + +#: src/app/main/ui/workspace/viewport/top_bar.cljs:43 +msgid "workspace.top-bar.webgl-context-lost.reload" +msgstr "Vernieuwen" + +#: src/app/main/ui/workspace/sidebar/history.cljs:358 +msgid "workspace.undo.entry.by" +msgstr "door %s" + +#: src/app/main/ui/workspace/sidebar/versions.cljs:234, src/app/main/ui/workspace/sidebar/versions.cljs:314 +msgid "workspace.versions.button.preview" +msgstr "Voorvertoning van versie" + +#: src/app/main/data/workspace/versions.cljs:303 +msgid "workspace.versions.preview-banner-title" +msgstr "Voorvertoning van versie: % s" + +#: src/app/main/data/workspace/versions.cljs:297 +msgid "workspace.versions.preview.unnamed" +msgstr "Versie zonder naam" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:335 +#, unused +msgid "workspace.libraries.text.multiple-token-and-asset-tooltip" +msgstr "Alle tokens losmaken & alle typografieën loskoppelen" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:337 +msgid "workspace.options.stroke-gap" +msgstr "Ruimte" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:248 +msgid "workspace.options.stroke.toggle-stroke" +msgstr "Streek wisselen" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:501 +msgid "workspace.options.text-options.text-section" +msgstr "Tekstsectie" + +#: src/app/main/ui/workspace/plugins.cljs:317 +msgid "workspace.plugins.permissions.clipboard-read" +msgstr "Lees de inhoud van je klembord." + +#: src/app/main/ui/workspace/plugins.cljs:311 +msgid "workspace.plugins.permissions.clipboard-write" +msgstr "Lees en schrijf naar je klembord." + +#: src/app/main/ui/workspace/context_menu.cljs:651 +msgid "workspace.shape.menu.clear-guides" +msgstr "Bordhulplijnen wissen" + +#: src/app/main/ui/workspace/context_menu.cljs:229 +msgid "workspace.shape.menu.copy-as-image" +msgstr "Als afbeelding kopiëren" + +#: src/app/main/ui/workspace/context_menu.cljs:453 +msgid "workspace.shape.menu.stroke-to-path" +msgstr "Streek naar pad" + +#: src/app/main/ui/workspace/sidebar/layers.cljs +#, unused +msgid "workspace.sidebar.layers.match-count" +msgstr "%s van %s" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:601 +msgid "workspace.sidebar.layers.no-matches" +msgstr "Geen overeenkomst" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:620 +msgid "workspace.sidebar.layers.replace" +msgstr "Vervangen" + +#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:169, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:287 +msgid "workspace.options.radius.radius-section" +msgstr "Randradius van sectie" + +#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:482 +msgid "workspace.options.search-size-preset" +msgstr "Groottevoorinstelling zoeken" + +#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:200 +msgid "workspace.options.selection-color.section" +msgstr "Kleurselectie van sectie" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:327 +msgid "workspace.options.stroke-dash" +msgstr "Streepjes" From 785c5ffdfcf9edf7ab50ef758fff75f5080cfaac Mon Sep 17 00:00:00 2001 From: DoubleCat Date: Sun, 28 Jun 2026 10:08:57 +0200 Subject: [PATCH 037/229] :globe_with_meridians: Add translations for: Chinese (Simplified Han script) Currently translated at 79.4% (1881 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/zh_Hans/ --- frontend/translations/zh_CN.po | 439 +++++++++++++++++++++++++++++++-- 1 file changed, 424 insertions(+), 15 deletions(-) diff --git a/frontend/translations/zh_CN.po b/frontend/translations/zh_CN.po index e7f740f919..1de4b0d86e 100644 --- a/frontend/translations/zh_CN.po +++ b/frontend/translations/zh_CN.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-22 07:30+0000\n" -"Last-Translator: Jun Fang \n" -"Language-Team: Chinese (Simplified Han script) " -"\n" +"PO-Revision-Date: 2026-06-28 10:01+0000\n" +"Last-Translator: DoubleCat \n" +"Language-Team: Chinese (Simplified Han script) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -425,7 +425,7 @@ msgstr "导入一个 .penpot 文件" #: src/app/main/ui/dashboard/placeholder.cljs:44 msgid "dashboard.empty-project.start" -msgstr "开始构建令人惊奇的材料" +msgstr "开始打造惊人的作品" #: src/app/main/ui/dashboard/file_menu.cljs:281 msgid "dashboard.export-binary-multi" @@ -683,7 +683,7 @@ msgstr "没有找到“%s”的匹配项" #: src/app/main/ui/dashboard/sidebar.cljs:1103 msgid "dashboard.no-projects-placeholder" -msgstr "被钉住的项目会显示在这儿" +msgstr "被固定的项目将会显示在这里" #: src/app/main/ui/dashboard/comments.cljs:89 msgid "dashboard.notifications" @@ -743,7 +743,7 @@ msgstr "你现在是此团队的查看人员。" #: src/app/main/ui/dashboard/pin_button.cljs:22, src/app/main/ui/dashboard/project_menu.cljs:96 msgid "dashboard.pin-unpin" -msgstr "钉到侧边栏/取消钉住" +msgstr "固定到侧边栏/取消固定" #: src/app/main/ui/dashboard.cljs:223 msgid "dashboard.plugins.bad-url" @@ -1028,7 +1028,7 @@ msgstr "取消" #: src/app/main/ui/confirm.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:102 msgid "ds.confirm-ok" -msgstr "OK" +msgstr "Ok" #: src/app/main/ui/confirm.cljs:41, src/app/main/ui/confirm.cljs:45 msgid "ds.confirm-title" @@ -3175,7 +3175,7 @@ msgstr "参与到社区中" #, unused msgid "onboarding-v2.welcome.desc3" -msgstr "在这里,您将了解如何协作进行翻译、功能需求提出、核心代码贡献、BUG修复等…" +msgstr "在这里,您将了解如何参与翻译、提出功能需求、贡献核心代码、修复BUG等…" #, unused msgid "onboarding-v2.welcome.desc3.title" @@ -3359,7 +3359,7 @@ msgstr "你的团队有多少人?" #: src/app/main/ui/onboarding/questions.cljs:242 msgid "onboarding.questions.step3.title" -msgstr "告诉我们您的工作" +msgstr "请告诉我们您的工作?" #: src/app/main/ui/onboarding/questions.cljs:300 msgid "onboarding.questions.step4.title" @@ -4300,7 +4300,6 @@ msgid "subscription.settings.success.dialog.title" msgstr "你是 %s!" #: src/app/main/ui/settings/subscription.cljs:655 -#, fuzzy msgid "subscription.settings.support-us-since" msgstr "您自从 %s 一直支持我们的这个计划" @@ -6766,7 +6765,7 @@ msgstr "遮罩" #: src/app/main/ui/workspace/sidebar/layers.cljs:566 msgid "workspace.sidebar.layers.search" -msgstr "搜索图层" +msgstr "搜索…" #: src/app/main/ui/workspace/sidebar/layers.cljs:639, src/app/main/ui/workspace/sidebar/layers.cljs:733 msgid "workspace.sidebar.layers.shapes" @@ -7010,7 +7009,6 @@ msgid "workspace.tokens.num-active-sets" msgstr "%s 个活跃集" #: src/app/main/ui/workspace/tokens/management/token_pill.cljs:122 -#, fuzzy msgid "workspace.tokens.original-value" msgstr "原始值:%s" @@ -7032,7 +7030,6 @@ msgid "workspace.tokens.reference-error" msgstr "参考错误: " #: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:87, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:296, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:489, src/app/main/ui/workspace/tokens/management/forms/controls/combobox.cljs:298, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:189, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:324, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:259, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:381, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:505, src/app/main/ui/workspace/tokens/management/token_pill.cljs:123 -#, fuzzy msgid "workspace.tokens.resolved-value" msgstr "解析的值:%s" @@ -7071,7 +7068,6 @@ msgid "workspace.tokens.themes-list" msgstr "主题列表" #: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:334, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:335 -#, fuzzy msgid "workspace.tokens.token-description" msgstr "描述" @@ -7385,3 +7381,416 @@ msgstr "打开版本菜单" #, unused msgid "workspace.viewport.click-to-close-path" msgstr "单击以闭合路径" + +#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 +msgid "auth.check-email" +msgstr "请检查您的邮箱!" + +#: src/app/main/ui/auth/verify_token.cljs:53 +msgid "auth.notifications.org-invitation-accepted" +msgstr "你现在的进度为 %s" + +#: src/app/main/ui/auth/register.cljs:238 +msgid "auth.verification-sent-email" +msgstr "我们已经发送了一封验证邮件到:" + +#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:35 +msgid "color-token.empty-state" +msgstr "没有可用的颜色变量。检查激活的集合/主题或添加新的颜色变量。" + +#: src/app/main/data/nitrate.cljs:165 +msgid "dasboard.leave-org.toast" +msgstr "你不再是 %s 组织的一员。" + +#: src/app/main/ui/dashboard/file_menu.cljs:209 +msgid "dashboard-restore-file-confirmation.description" +msgstr "你将要恢复 %s。" + +#: src/app/main/ui/dashboard/file_menu.cljs:208 +msgid "dashboard-restore-file-confirmation.title" +msgstr "恢复文件" + +#, unused +msgid "dashboard.change-org-modal.accept" +msgstr "移动团队" + +#, unused +msgid "dashboard.change-org-modal.choose" +msgstr "移动到:" + +#, unused +msgid "dashboard.change-org-modal.select" +msgstr "选择一个组织" + +#, unused +msgid "dashboard.change-org-modal.text" +msgstr "项目和文件仍将对团队成员开放。团队将从新组织处获得配置。" + +#: src/app/main/data/nitrate.cljs:399, src/app/main/ui/dashboard/team_form.cljs:157 +msgid "dashboard.change-org-modal.title" +msgstr "更改团队的组织" + +#: src/app/main/ui/dashboard/deleted.cljs:316 +msgid "dashboard.clear-trash-button" +msgstr "清理回收站" + +#: src/app/main/ui/dashboard/sidebar.cljs:371 +msgid "dashboard.create-new-org" +msgstr "创建新组织" + +#: src/app/main/ui/dashboard/deleted.cljs:265 +msgid "dashboard.delete-all-forever-confirmation.description" +msgstr "您确定要永久删除所有已删除的项目和文件吗?此操作不可逆。" + +#: src/app/main/ui/dashboard/file_menu.cljs:222 +msgid "dashboard.delete-file-forever-confirmation.description" +msgstr "您确定要永久删除 %s 吗?此操作不可逆。" + +#: src/app/main/data/dashboard.cljs:861 +msgid "dashboard.delete-files-success-notification" +msgstr "%s 文件已被成功删除。" + +#: src/app/main/ui/dashboard/deleted.cljs:53, src/app/main/ui/dashboard/deleted.cljs:55, src/app/main/ui/dashboard/deleted.cljs:264, src/app/main/ui/dashboard/deleted.cljs:266, src/app/main/ui/dashboard/file_menu.cljs:221, src/app/main/ui/dashboard/file_menu.cljs:223 +msgid "dashboard.delete-forever-confirmation.title" +msgstr "永久删除" + +#: src/app/main/ui/dashboard/deleted.cljs:86 +msgid "dashboard.delete-project-button" +msgstr "删除项目" + +#: src/app/main/ui/dashboard/deleted.cljs:54 +msgid "dashboard.delete-project-forever-confirmation.description" +msgstr "" +"您确定要永久删除 %s 项目吗?您将永久删除该项目及其包含的所有文件。此操作不可" +"逆。" + +#: src/app/main/data/dashboard.cljs:860, src/app/main/data/dashboard.cljs:894 +msgid "dashboard.delete-success-notification" +msgstr "%s 已被成功删除。" + +#: src/app/main/ui/workspace/colorpicker.cljs:431, src/app/main/ui/workspace/colorpicker.cljs:443 +msgid "workspace.colorpicker.color-tokens" +msgstr "颜色变量" + +#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:268 +msgid "workspace.options.more-token-colors" +msgstr "更多颜色变量" + +#: src/app/main/ui/ds/controls/utilities/token_field.cljs:48 +msgid "ds.inputs.token-field.no-active-token-option" +msgstr "{%s} 不属于任何活跃集,或者值无效。" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:302, src/app/main/ui/workspace/tokens/management/forms/typography.cljs:232 +msgid "errors.field-max-length" +msgstr "最多可包含 %s 个字符。" + +#: src/app/main/data/common.cljs:82 +msgid "notifications.by-code.upgrade-version" +msgstr "有新版本可用。" + +#: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:292 +msgid "workspace.tokens.edit-token" +msgstr "编辑 %s token" + +#: src/app/main/ui/dashboard/deleted.cljs:330 +msgid "dashboard.deleted.empty-state-description" +msgstr "你的回收站是空的,删除的文件和项目将会出现在这里。" + +#: src/app/main/ui/dashboard/grid.cljs:247 +msgid "dashboard.deleted.will-be-deleted-at" +msgstr "%s 将会删除" + +#, unused +msgid "dashboard.errors.error-on-delete-file" +msgstr "删除 %s 的时候出现了一个错误。" + +#: src/app/main/data/dashboard.cljs:864 +msgid "dashboard.errors.error-on-delete-files" +msgstr "删除文件的时候出现了一个错误。" + +#: src/app/main/data/dashboard.cljs:897 +msgid "dashboard.errors.error-on-delete-project" +msgstr "删除项目 %s 的时候出现了一个错误。" + +#: src/app/main/data/dashboard.cljs:992, src/app/main/ui/dashboard/file_menu.cljs:202 +msgid "dashboard.errors.error-on-restore-file" +msgstr "恢复 %s 的时候出现了一个错误。" + +#: src/app/main/data/dashboard.cljs:993 +msgid "dashboard.errors.error-on-restore-files" +msgstr "恢复文件的时候出现了一个错误。" + +#: src/app/main/data/dashboard.cljs:1025 +msgid "dashboard.errors.error-on-restoring-project" +msgstr "恢复项目 %s 及其文件的时候出现了一个错误。" + +#: src/app/main/ui/dashboard/file_menu.cljs:267 +msgid "dashboard.file-menu.delete-files-permanently-option" +msgid_plural "dashboard.file-menu.delete-files-permanently-option" +msgstr[0] "删除文件" +msgstr[1] "删除文件" + +#: src/app/main/ui/dashboard/file_menu.cljs:264 +msgid "dashboard.file-menu.restore-files-option" +msgid_plural "dashboard.file-menu.restore-files-option" +msgstr[0] "恢复文件" +msgstr[1] "恢复文件" + +#: src/app/main/ui/dashboard/sidebar.cljs:376 +msgid "dashboard.go-to-admin-console" +msgstr "转到管理员面板" + +#: src/app/main/ui/dashboard/import.cljs:505 +msgid "dashboard.import.import-error.check-error" +msgstr "我们没有验证这个文件。" + +#: src/app/main/ui/dashboard/import.cljs:509 +msgid "dashboard.import.import-error.corrupt-file" +msgstr "这个文件似乎已损坏。" + +#: src/app/main/ui/dashboard/import.cljs:512 +msgid "dashboard.import.import-error.unknown-error" +msgstr "处理该文件的时候出错了。" + +#: src/app/main/ui/dashboard/team.cljs:851 +msgid "dashboard.invitation-modal.delete" +msgstr "您将删除以下邀请:" + +#: src/app/main/ui/dashboard/team.cljs:852 +msgid "dashboard.invitation-modal.resend" +msgstr "您将重新发送邀请至:" + +#: src/app/main/ui/dashboard/team.cljs:842 +msgid "dashboard.invitation-modal.title.delete-invitations" +msgstr "删除邀请" + +#: src/app/main/ui/dashboard/team.cljs:843 +msgid "dashboard.invitation-modal.title.resend-invitations" +msgstr "重新发送邀请" + +#: src/app/main/ui/dashboard/team.cljs:831, src/app/main/ui/dashboard/team.cljs:1136 +msgid "dashboard.invitations.no-permission" +msgstr "您没有权限邀请他人加入此团队,也没有权限编辑或删除邀请。" + +#: src/app/main/ui/dashboard/sidebar.cljs:671 +msgid "dashboard.leave-org" +msgstr "离开组织" + +#: src/app/main/ui/dashboard/sidebar.cljs:348, src/app/main/ui/dashboard/sidebar.cljs:349, src/app/main/ui/dashboard/sidebar.cljs:761 +msgid "dashboard.my-teams" +msgstr "我的团队" + +#: src/app/main/ui/dashboard/team_form.cljs:156 +msgid "dashboard.no-org-allows-create-team.message" +msgstr "您没有权限将团队添加到你的任何组织。" + +#: src/app/main/ui/dashboard/team_form.cljs:152 +msgid "dashboard.no-permission-create-team.message" +msgstr "你无权在 %s 组织内创建团队。如需更多信息,请联系该组织的负责人。" + +#: src/app/main/ui/dashboard/team_form.cljs:154 +msgid "dashboard.no-permission-delete-team.message" +msgstr "你无权在 %s 组织内删除团队。如需更多信息,请联系该组织的负责人。" + +#: src/app/main/ui/dashboard/team_form.cljs:158 +msgid "dashboard.no-permission-move-team.message" +msgstr "你无权在 %s 组织内移动团队。如需更多信息,请联系该组织的负责人。" + +#: src/app/main/ui/dashboard/team.cljs:1158 +msgid "dashboard.order-invitations-by-role" +msgstr "按角色排序" + +#: src/app/main/ui/dashboard/team.cljs:1167 +msgid "dashboard.order-invitations-by-status" +msgstr "按状态排序" + +#: src/app/main/data/dashboard.cljs:753 +msgid "dashboard.org-deleted" +msgstr "%s 组织已被删除。" + +#: src/app/main/ui/dashboard/sidebar.cljs:798 +msgid "dashboard.plus-create-new-org" +msgstr "+ 创建组织" + +#: src/app/main/data/dashboard.cljs:805 +msgid "dashboard.progress-notification.deleting-files" +msgstr "删除文件中…" + +#: src/app/main/data/dashboard.cljs:926 +msgid "dashboard.progress-notification.restoring-files" +msgstr "恢复文件中…" + +#: src/app/main/data/dashboard.cljs:806 +msgid "dashboard.progress-notification.slow-delete" +msgstr "删除速度出乎意料地慢" + +#: src/app/main/data/dashboard.cljs:927 +msgid "dashboard.progress-notification.slow-restore" +msgstr "恢复速度出乎意料地慢" + +#: src/app/main/ui/dashboard/deleted.cljs:277 +msgid "dashboard.restore-all-confirmation.description" +msgstr "您将恢复您所有的项目和文件。这可能需要一些时间。" + +#: src/app/main/ui/dashboard/deleted.cljs:276 +msgid "dashboard.restore-all-confirmation.title" +msgstr "恢复所有的项目及其文件" + +#: src/app/main/ui/dashboard/deleted.cljs:311 +msgid "dashboard.restore-all-deleted-button" +msgstr "恢复所有" + +#: src/app/main/data/dashboard.cljs:986 +msgid "dashboard.restore-files-success-notification" +msgstr "%s 文件已被成功恢复。" + +#: src/app/main/ui/dashboard/deleted.cljs:83 +msgid "dashboard.restore-project-button" +msgstr "恢复项目" + +#: src/app/main/ui/dashboard/deleted.cljs:43 +msgid "dashboard.restore-project-confirmation.description" +msgstr "您将恢复 %s 项目及其包含的所有文件。" + +#: src/app/main/ui/dashboard/deleted.cljs:42 +msgid "dashboard.restore-project-confirmation.title" +msgstr "恢复项目" + +#: src/app/main/data/dashboard.cljs:958, src/app/main/data/dashboard.cljs:985, src/app/main/data/dashboard.cljs:1022, src/app/main/ui/dashboard/file_menu.cljs:199 +msgid "dashboard.restore-success-notification" +msgstr "%s 已被成功恢复。" + +#: src/app/main/ui/dashboard/sidebar.cljs:354 +msgid "dashboard.section.organizations" +msgstr "组织" + +#, unused +msgid "dashboard.select-org-modal.accept" +msgstr "添加到组织" + +#, unused +msgid "dashboard.select-org-modal.choose" +msgstr "选择一个组织:" + +#: src/app/main/ui/dashboard/team.cljs:975 +msgid "dashboard.select-org-modal.external-invitations-warning" +msgstr "“%s” 仅允许组织成员加入其团队。任何发送给组织外部人员的邀请都将被撤销。" + +#: src/app/main/ui/dashboard/team.cljs:971 +msgid "dashboard.select-org-modal.external-invitations-will-be-canceled" +msgstr "已发出的外部用户邀请将被取消。" + +#, unused +msgid "dashboard.select-org-modal.permission-info" +msgstr "在这里您可以找到所有允许您创建或添加团队的组织。" + +#, unused +msgid "dashboard.select-org-modal.select" +msgstr "选择一个组织" + +#: src/app/main/data/nitrate.cljs:342, src/app/main/ui/dashboard/team_form.cljs:155 +msgid "dashboard.select-org-modal.title" +msgstr "添加一个团队到一个组织" + +#, unused +msgid "dashboard.team-belong-org" +msgstr "这个团队现在属于 %s" + +#, unused +msgid "dashboard.team-no-longer-belong-org" +msgstr "这个团队不再属于 %s 组织" + +#: src/app/main/ui/dashboard/team.cljs:1609 +msgid "dashboard.team-organization" +msgstr "团队组织" + +#: src/app/main/ui/dashboard/team.cljs:1643 +msgid "dashboard.team-organization.add" +msgstr "添加到一个组织" + +#: src/app/main/data/nitrate.cljs:341, src/app/main/data/nitrate.cljs:398 +msgid "dashboard.team-organization.add.no-valid-orgs" +msgstr "您没有权限将此团队添加到您的任何组织中。" + +#: src/app/main/ui/dashboard/team.cljs:1632 +msgid "dashboard.team-organization.change" +msgstr "改变团队的组织" + +#: src/app/main/ui/dashboard/team.cljs:905 +msgid "dashboard.team-organization.disabled-org-tooltip" +msgstr "只有组织内部人员才能被邀请。" + +#: src/app/main/ui/dashboard/team.cljs:1639 +msgid "dashboard.team-organization.none" +msgstr "这个团队不属于任何组织" + +#: src/app/main/ui/dashboard/team.cljs:1635 +msgid "dashboard.team-organization.remove" +msgstr "从组织中删除团队" + +#: src/app/main/ui/dashboard/deleted.cljs:301 +msgid "dashboard.trash-info-text-part1" +msgstr "已删除的文件将保留在回收站中" + +#: src/app/main/ui/dashboard/deleted.cljs:303 +msgid "dashboard.trash-info-text-part2" +msgstr " %s 天. " + +#: src/app/main/ui/dashboard/deleted.cljs:304 +msgid "dashboard.trash-info-text-part3" +msgstr "之后,它们将被永久删除。" + +#: src/app/main/ui/dashboard/deleted.cljs:306 +msgid "dashboard.trash-info-text-part4" +msgstr "如果你改变主意,可以在每个文件的菜单中恢复或永久删除它们。" + +#: src/app/main/ui/settings/subscription.cljs:600, src/app/main/ui/settings/subscription.cljs:678 +msgid "subscription.settings.professional.selfhost.community-support" +msgstr "所有设计和原型制作功能均由社区提供支持。" + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs +#, unused +msgid "workspace.tokens.no-remap-needed" +msgstr "该令牌目前未用于您的设计,因此无需重新映射。" + +#, unused +msgid "dashboard.user-no-longer-belong-org" +msgstr "您已不再是 %s 组织的成员" + +#: src/app/main/ui/settings/options.cljs:109 +msgid "dashboard.webgl-switch.beta" +msgstr "Beta" + +#: src/app/main/ui/settings/options.cljs:110 +msgid "dashboard.webgl-switch.description" +msgstr "" +"WebGL渲染可以提升性能,但目前仍处于测试阶段,稳定性可能较差。画布、导出文件(" +"SVG/PDF)和视图模式之间可能会出现一些视觉差异。" + +#: src/app/main/ui/settings/options.cljs:113 +msgid "dashboard.webgl-switch.disabled" +msgstr "已关闭" + +#: src/app/main/ui/settings/options.cljs:113 +msgid "dashboard.webgl-switch.enabled" +msgstr "已开启" + +#: src/app/main/ui/settings/options.cljs:116 +msgid "dashboard.webgl-switch.feedback" +msgstr "提供反馈" + +#: src/app/main/ui/settings/options.cljs:112 +msgid "dashboard.webgl-switch.status" +msgstr "状态" + +#: src/app/main/ui/settings/options.cljs:108 +msgid "dashboard.webgl-switch.title" +msgstr "WebGL渲染" + +#: src/app/main/data/workspace/clipboard.cljs:327, src/app/main/data/workspace/clipboard.cljs:535 +msgid "errors.clipboard-api-unavailable" +msgstr "剪贴板API不可用。请通过HTTPS启动Penpot以启用剪贴板访问" + +#: src/app/main/data/workspace/clipboard.cljs:321, src/app/main/data/workspace/clipboard.cljs:529 +msgid "errors.clipboard-permission-denied" +msgstr "剪贴板访问被拒绝。请在浏览器中允许剪贴板权限以粘贴内容。" From a9f3949abc476c781c063673af34cfea8fab6d8c Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Mon, 29 Jun 2026 09:44:16 +0200 Subject: [PATCH 038/229] :sparkles: Avoid going to last team on login if it is protected by sso (#10442) --- frontend/src/app/main/data/auth.cljs | 16 ++++++++++------ frontend/src/app/main/data/team.cljs | 12 ++++++++++++ frontend/src/app/main/ui/routes.cljs | 19 +++++++++++++------ 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/frontend/src/app/main/data/auth.cljs b/frontend/src/app/main/data/auth.cljs index ad60233006..2339c02452 100644 --- a/frontend/src/app/main/data/auth.cljs +++ b/frontend/src/app/main/data/auth.cljs @@ -53,12 +53,16 @@ :team-id (:default-team-id profile)) (dp/update-profile-props {:welcome-file-id nil})) - (let [teams (into #{} (map :id) teams) - team-id (dtm/get-last-team-id) - team-id (if (and team-id (contains? teams team-id)) - team-id - (:default-team-id profile))] - (rx/of (dcm/go-to-dashboard-recent {:team-id team-id})))))))] + (let [default-team-id (:default-team-id profile) + team-ids (into #{} (map :id) teams) + team-id (dtm/get-last-team-id) + team-id (if (and team-id (contains? team-ids team-id)) + team-id + default-team-id)] + (->> (dtm/resolve-login-team-id {:team-id team-id + :default-team-id default-team-id}) + (rx/mapcat (fn [team-id] + (rx/of (dcm/go-to-dashboard-recent {:team-id team-id}))))))))))] (ptk/reify ::logged-in ptk/WatchEvent diff --git a/frontend/src/app/main/data/team.cljs b/frontend/src/app/main/data/team.cljs index a83add6a99..ede9ca26ce 100644 --- a/frontend/src/app/main/data/team.cljs +++ b/frontend/src/app/main/data/team.cljs @@ -36,6 +36,18 @@ [] (::current-team-id storage/global)) +(defn resolve-login-team-id + "Resolve the team to navigate to after login. Falls back to the + default team when the candidate requires SSO and the user has no + valid SSO session for it." + [{:keys [team-id default-team-id]}] + (if (or (not (contains? cf/flags :nitrate)) + (= team-id default-team-id)) + (rx/of team-id) + (->> (rp/cmd! :check-nitrate-sso {:team-id team-id :url (rt/get-current-href)}) + (rx/map (fn [{:keys [authorized]}] + (if authorized team-id default-team-id)))))) + (defn teams-fetched [teams] (ptk/reify ::teams-fetched diff --git a/frontend/src/app/main/ui/routes.cljs b/frontend/src/app/main/ui/routes.cljs index 2c62f5d1b4..b33c3b6782 100644 --- a/frontend/src/app/main/ui/routes.cljs +++ b/frontend/src/app/main/ui/routes.cljs @@ -156,12 +156,19 @@ (st/emit! (rt/nav :auth-login))) empty-path? - (let [team-id (dtm/get-last-team-id)] - (if (contains? teams team-id) - (st/emit! (rt/nav :dashboard-recent - (assoc query-params :team-id team-id))) - (st/emit! (rt/nav :dashboard-recent - (assoc query-params :team-id (:default-team-id profile)))))) + (let [default-team-id (:default-team-id profile) + last-team-id (dtm/get-last-team-id) + team-id (if (contains? teams last-team-id) + last-team-id + default-team-id)] + (->> (dtm/resolve-login-team-id {:team-id team-id + :default-team-id default-team-id}) + (rx/subs! + (fn [team-id] + (st/emit! (rt/nav :dashboard-recent + (assoc query-params :team-id team-id)))) + (fn [cause] + (errors/on-error cause))))) :else (st/emit! (rt/assign-exception {:type :not-found})))) From 2d4a24bf97420e4281f1c68b85e99820a351b0fe Mon Sep 17 00:00:00 2001 From: Aitor Moreno Date: Mon, 29 Jun 2026 10:34:44 +0200 Subject: [PATCH 039/229] :bug: Fix stroke to path extra points (#10190) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :bug: Fix stroke to path extra points * :bug: Set evenodd when needed on stroke to path (#10446) --------- Co-authored-by: Elena Torró --- .../data/workspace/path/shapes_to_path.cljs | 22 ++++++----- frontend/src/app/render_wasm/api.cljs | 18 +++++---- render-wasm/src/mem.rs | 20 ++++++++++ render-wasm/src/shapes/paths.rs | 15 +++++++- render-wasm/src/shapes/stroke_paths.rs | 37 +++++++++---------- render-wasm/src/wasm/paths.rs | 4 +- 6 files changed, 76 insertions(+), 40 deletions(-) diff --git a/frontend/src/app/main/data/workspace/path/shapes_to_path.cljs b/frontend/src/app/main/data/workspace/path/shapes_to_path.cljs index 61134948cd..6c55397514 100644 --- a/frontend/src/app/main/data/workspace/path/shapes_to_path.cljs +++ b/frontend/src/app/main/data/workspace/path/shapes_to_path.cljs @@ -104,17 +104,19 @@ (into [] (keep-indexed (fn [idx stroke] - (let [content (wasm.api/stroke-to-path (:id shape) idx)] - (when (some? content) + (let [result (wasm.api/stroke-to-path (:id shape) idx)] + (when (some? result) (cts/setup-shape - {:type :path - :id (uuid/next) - :name (str (:name shape) " (stroke)") - :parent-id parent-id - :frame-id frame-id - :content content - :fills [(stroke->fill stroke)] - :strokes []}))))) + (cond-> {:type :path + :id (uuid/next) + :name (str (:name shape) " (stroke)") + :parent-id parent-id + :frame-id frame-id + :content (:content result) + :fills [(stroke->fill stroke)] + :strokes []} + (:even-odd? result) + (assoc :svg-attrs {:fillRule "evenodd"}))))))) (:strokes shape))) (defn convert-selected-strokes-to-path diff --git a/frontend/src/app/render_wasm/api.cljs b/frontend/src/app/render_wasm/api.cljs index c824603756..d99324647c 100644 --- a/frontend/src/app/render_wasm/api.cljs +++ b/frontend/src/app/render_wasm/api.cljs @@ -2360,21 +2360,25 @@ (defn stroke-to-path "Converts a shape's stroke at the given index into a filled path. - Returns the stroke outline as PathData content." + Returns a map {:content :even-odd? }, or nil when the + stroke produces no geometry. The buffer carries two header words ahead of + the segments: [even-odd flag][length] (the flat segment list can't encode + the fill rule itself)." [id stroke-index] (use-shape id) (try - (let [offset (-> (h/call wasm/internal-module "_convert_stroke_to_path" stroke-index) - (mem/->offset-32)) - heap (mem/get-heap-u32) - length (aget heap offset)] + (let [offset (-> (h/call wasm/internal-module "_convert_stroke_to_path" stroke-index) + (mem/->offset-32)) + heap (mem/get-heap-u32) + even-odd? (not (zero? (aget heap offset))) + length (aget heap (inc offset))] (if (pos? length) (let [data (mem/slice heap - (+ offset 1) + (+ offset 2) (* length path.impl/SEGMENT-U32-SIZE)) content (path/from-bytes data)] (mem/free) - content) + {:content content :even-odd? even-odd?}) (do (mem/free) nil))) (catch :default cause diff --git a/render-wasm/src/mem.rs b/render-wasm/src/mem.rs index 1c8531e7e9..a786f8eb55 100644 --- a/render-wasm/src/mem.rs +++ b/render-wasm/src/mem.rs @@ -95,3 +95,23 @@ pub fn write_vec(result: Vec) -> *mut u8 { write_bytes(result_bytes) } + +/* + Like `write_vec`, but prepends an extra u32 header word before the + length. Layout: [header u32][length u32][items...] +*/ +pub fn write_vec_with_header(header: u32, result: Vec) -> *mut u8 { + let elem_size = size_of::(); + let bytes_len = 8 + result.len() * elem_size; + let mut result_bytes = vec![0; bytes_len]; + + result_bytes[0..4].clone_from_slice(&header.to_le_bytes()); + result_bytes[4..8].clone_from_slice(&result.len().to_le_bytes()); + + for (i, item) in result.iter().enumerate() { + let base = 8 + i * elem_size; + item.clone_to_slice(&mut result_bytes[base..base + elem_size]); + } + + write_bytes(result_bytes) +} diff --git a/render-wasm/src/shapes/paths.rs b/render-wasm/src/shapes/paths.rs index 33666bb0de..94f7521c3e 100644 --- a/render-wasm/src/shapes/paths.rs +++ b/render-wasm/src/shapes/paths.rs @@ -156,6 +156,7 @@ impl Path { let mut current_point = 0; let mut current_conic = 0; let mut last_point = skia::Point::new(0.0, 0.0); + let mut subpath_start = skia::Point::new(0.0, 0.0); for verb in verbs { match verb { @@ -163,12 +164,15 @@ impl Path { let p = points[current_point]; segments.push(Segment::MoveTo((p.x, p.y))); last_point = p; + subpath_start = p; current_point += 1; } skia::PathVerb::Line => { let p = points[current_point]; - segments.push(Segment::LineTo((p.x, p.y))); - last_point = p; + if p != last_point { + segments.push(Segment::LineTo((p.x, p.y))); + last_point = p; + } current_point += 1; } skia::PathVerb::Quad => { @@ -239,6 +243,13 @@ impl Path { current_point += 3; } skia::PathVerb::Close => { + if let Some(Segment::LineTo(p)) = segments.last() { + if (p.0 - subpath_start.x).abs() < 1e-5 + && (p.1 - subpath_start.y).abs() < 1e-5 + { + segments.pop(); + } + } segments.push(Segment::Close); } } diff --git a/render-wasm/src/shapes/stroke_paths.rs b/render-wasm/src/shapes/stroke_paths.rs index 358be86141..cbf06874db 100644 --- a/render-wasm/src/shapes/stroke_paths.rs +++ b/render-wasm/src/shapes/stroke_paths.rs @@ -58,27 +58,24 @@ pub fn stroke_to_path( // For inner/outer strokes, use boolean ops to clip // the 2×-width stroke outline to the correct region. // Set EvenOdd to preserve the annular ring's inner hole, - // then as_winding() on the result fixes contour winding - // for Penpot's NonZero fill rule. + // then switch to Winding for Penpot's NonZero fill rule. + // Use set_fill_type instead of as_winding() because as_winding() + // decomposes self-intersecting geometry, which removes points + // at intersections of straight lines in closed paths. + // Center strokes skip the conversion: fill_path_with_paint + // already produces correctly-wound contours. let final_path = match render_kind { - StrokeKind::Inner => { - stroke_outline.set_fill_type(skia::PathFillType::EvenOdd); - let inner = stroke_outline - .op(&transformed_shape_path, skia::PathOp::Intersect) - .unwrap_or(stroke_outline); - inner.as_winding().unwrap_or(inner) - } - StrokeKind::Outer => { - stroke_outline.set_fill_type(skia::PathFillType::EvenOdd); - let outer = stroke_outline - .op(&transformed_shape_path, skia::PathOp::Difference) - .unwrap_or(stroke_outline); - outer.as_winding().unwrap_or(outer) - } - StrokeKind::Center => { - stroke_outline.set_fill_type(skia::PathFillType::EvenOdd); - stroke_outline.as_winding().unwrap_or(stroke_outline) - } + StrokeKind::Inner => stroke_outline + .simplify() + .unwrap() + .op(&transformed_shape_path, skia::PathOp::Intersect) + .unwrap_or(stroke_outline), + StrokeKind::Outer => stroke_outline + .simplify() + .unwrap() + .op(&transformed_shape_path, skia::PathOp::Difference) + .unwrap_or(stroke_outline), + StrokeKind::Center => stroke_outline.simplify().unwrap_or(stroke_outline), }; // If there was a path_transform, invert it back to local coords diff --git a/render-wasm/src/wasm/paths.rs b/render-wasm/src/wasm/paths.rs index 2350edb393..b035ee4f81 100644 --- a/render-wasm/src/wasm/paths.rs +++ b/render-wasm/src/wasm/paths.rs @@ -243,6 +243,7 @@ pub extern "C" fn current_to_path() -> *mut u8 { #[no_mangle] pub extern "C" fn convert_stroke_to_path(stroke_index: i32) -> *mut u8 { let mut result = Vec::::default(); + let mut even_odd = false; with_current_shape!(state, |shape: &Shape| { let idx = stroke_index as usize; if let Some(stroke) = shape.strokes.get(idx) { @@ -257,6 +258,7 @@ pub extern "C" fn convert_stroke_to_path(stroke_index: i32) -> *mut u8 { shape.svg_attrs.as_ref(), false, ) { + even_odd = path.is_even_odd(); result = path .segments() .iter() @@ -267,7 +269,7 @@ pub extern "C" fn convert_stroke_to_path(stroke_index: i32) -> *mut u8 { } }); - mem::write_vec(result) + mem::write_vec_with_header(even_odd as u32, result) } #[cfg(test)] From f05fb70a8a128941d10d14e8178b6ee1b0319127 Mon Sep 17 00:00:00 2001 From: AntonPalmqvist Date: Mon, 29 Jun 2026 06:39:11 +0200 Subject: [PATCH 040/229] :globe_with_meridians: Add translations for: Swedish Currently translated at 99.7% (2364 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/sv/ --- frontend/translations/sv.po | 151 ++++++++++++++++++++++++++++++++---- 1 file changed, 137 insertions(+), 14 deletions(-) diff --git a/frontend/translations/sv.po b/frontend/translations/sv.po index 07f2a724a1..c8148152a5 100644 --- a/frontend/translations/sv.po +++ b/frontend/translations/sv.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-22 07:30+0000\n" -"Last-Translator: Henrik Allberg \n" -"Language-Team: Swedish " -"\n" +"PO-Revision-Date: 2026-06-30 05:01+0000\n" +"Last-Translator: AntonPalmqvist \n" +"Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -18,14 +18,14 @@ msgstr "Har du redan ett konto?" #: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 #, unused msgid "auth.check-mail" -msgstr "Kontrollera din e-post" +msgstr "Kolla din e-post" #: src/app/main/ui/auth/register.cljs:277 #, unused msgid "auth.check-your-email" msgstr "" -"Kontrollera din e-post och klicka på länken för att verifiera och börja " -"använda Penpot." +"Kolla din e-post och klicka på länken för att verifiera och börja använda " +"Penpot." #: src/app/main/ui/auth/recovery.cljs:67 msgid "auth.confirm-password" @@ -2414,7 +2414,6 @@ msgid "inspect.tabs.styles.active-themes" msgstr "Aktiva teman" #: src/app/main/ui/inspect/styles/style_box.cljs:75 -#, fuzzy msgid "inspect.tabs.styles.copy-shorthand" msgstr "Kopiera CSS-förkortning till urklipp" @@ -4504,7 +4503,7 @@ msgstr "Vi har skickat ett återställningsmail till" #: src/app/main/ui/auth/recovery_request.cljs:116 msgid "not-found.login.sent-recovery-check" -msgstr "Kontrollera din e-post och klicka på länken för att skapa ett nytt lösenord." +msgstr "Kolla din e-post och klicka på länken för att skapa ett nytt lösenord." #: src/app/main/ui/static.cljs:174 msgid "not-found.login.signup-free" @@ -4623,7 +4622,7 @@ msgstr "Profilen sparades!" #: src/app/main/ui/settings/change_email.cljs:46 msgid "notifications.validation-email-sent" -msgstr "Verifiering e-post skickas till %s. Kontrollera din e-post!" +msgstr "Verifieringsmejl skickas till %s. Kolla din e-post!" #, unused msgid "onboarding-v2.before-start.desc1" @@ -6064,7 +6063,6 @@ msgid "subscription.settings.success.dialog.title" msgstr "Du är %!" #: src/app/main/ui/settings/subscription.cljs:655 -#, fuzzy msgid "subscription.settings.support-us-since" msgstr "Du har stöttat oss med detta abonnemang sedan: %s" @@ -9361,7 +9359,6 @@ msgid "workspace.tokens.num-active-sets" msgstr "%s aktiva uppsättningar" #: src/app/main/ui/workspace/tokens/management/token_pill.cljs:122 -#, fuzzy msgid "workspace.tokens.original-value" msgstr "Ursprungligt värde: %s" @@ -9432,7 +9429,6 @@ msgid "workspace.tokens.rename-group-name-hint" msgstr "Dina tokens kommer automatiskt att byta namn till %s.(suffix).(tokenName)" #: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:87, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:296, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:489, src/app/main/ui/workspace/tokens/management/forms/controls/combobox.cljs:298, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:189, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:324, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:259, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:381, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:505, src/app/main/ui/workspace/tokens/management/token_pill.cljs:123 -#, fuzzy msgid "workspace.tokens.resolved-value" msgstr "Uträknat värde: %s" @@ -9565,7 +9561,6 @@ msgid "workspace.tokens.themes-list" msgstr "Temalista" #: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:334, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:335 -#, fuzzy msgid "workspace.tokens.token-description" msgstr "Beskrivning" @@ -10005,3 +10000,131 @@ msgstr "Autosparade versioner sparas i %s dagar." #, unused msgid "workspace.viewport.click-to-close-path" msgstr "Klicka för att stänga bana" + +#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 +msgid "auth.check-email" +msgstr "Kolla din e-post!" + +#: src/app/main/ui/auth/register.cljs:238 +msgid "auth.verification-sent-email" +msgstr "Vi har skickat ett verifieringsmejl till:" + +#: src/app/main/data/workspace/tokens/errors.cljs:49 +msgid "errors.tokens.circular-reference" +msgstr "Token har en cirkulär referens" + +#: src/app/main/ui/inspect/attributes/blur.cljs:30, src/app/main/ui/inspect/styles/style_box.cljs:32, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:262, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:274 +msgid "labels.blur-effects" +msgstr "Oskärpaeffekter" + +#: src/app/main/ui/onboarding/questions.cljs:222 +msgid "onboarding.questions.team-size.101-500" +msgstr "101 - 500" + +#: src/app/main/ui/onboarding/questions.cljs:220 +msgid "onboarding.questions.team-size.2-100" +msgstr "2 - 100" + +#: src/app/main/ui/onboarding/questions.cljs:224 +msgid "onboarding.questions.team-size.501-1000" +msgstr "501 - 1000" + +#: src/app/main/ui/onboarding/questions.cljs:218 +msgid "onboarding.questions.team-size.just-me" +msgstr "Bara jag" + +#: src/app/main/ui/onboarding/questions.cljs:228 +msgid "onboarding.questions.team-size.more-than-5001" +msgstr "5001+" + +#: src/app/main/ui/dashboard/subscription.cljs:229 +msgid "subscription.dashboard.banner.renew" +msgstr "Förnya" + +#: src/app/main/ui/dashboard/subscription.cljs:216 +msgid "subscription.dashboard.banner.renew-subscription" +msgstr "Förnya din prenumeration" + +#: src/app/main/ui/dashboard/subscription.cljs:222 +msgid "subscription.dashboard.banner.subscription-expire-days" +msgstr "Din Enterprise-prenumeration löper ut om %s dagar (%s)" + +#: src/app/main/ui/dashboard/subscription.cljs:220 +msgid "subscription.dashboard.banner.subscription-expired" +msgstr "Din Enterprise-prenumeration har löpt ut. (%s)" + +#: src/app/main/ui/workspace/main_menu.cljs:421 +msgid "workspace.header.menu.hide-comments" +msgstr "Dölj kommentarer" + +#: src/app/main/ui/workspace/main_menu.cljs:422 +msgid "workspace.header.menu.show-comments" +msgstr "Visa kommentarer" + +#: src/app/main/ui/workspace/colorpicker/libraries.cljs:354 +msgid "workspace.libraries.colors.add-library-color" +msgstr "Lägg till färg i biblioteket" + +#: src/app/main/ui/workspace/colorpicker/libraries.cljs:371, src/app/main/ui/workspace/colorpicker/libraries.cljs:387 +msgid "workspace.libraries.colors.empty-recent-colors" +msgstr "Det finns inga nya färger ännu" + +#: src/app/main/ui/workspace/colorpicker/libraries.cljs:336 +msgid "workspace.libraries.colors.toggle-color-palette" +msgstr "Växla färgpalett" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs +#, unused +msgid "workspace.options.blur-effects-options.title" +msgstr "Oskärpaeffekter" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:273 +msgid "workspace.options.blur-effects-options.title.group" +msgstr "Grupposkärpaeffekter" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:272 +msgid "workspace.options.blur-effects-options.title.multiple" +msgstr "Oskärpaeffekter för val" + +#: src/app/main/ui/onboarding/questions.cljs:226 +msgid "onboarding.questions.team-size.1001-5000" +msgstr "1001 - 5000" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:144 +msgid "workspace.options.blur-options.blur-type-select" +msgstr "Oskärpatyp" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:153 +msgid "workspace.options.blur-options.disabled-blur-label" +msgstr "" +"Bakgrundsoskärpa stöds endast i den nya renderingsmotorn. Växla över till " +"den nya renderingsmotorn i Inställningar-menyn för att använda den här " +"effekten" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:138 +msgid "workspace.options.blur-options.toggle-more-options" +msgstr "Visa/dölj fler alternativ" + +#, unused +msgid "workspace.toast.comments-hidden" +msgstr "Kommentarer dolda" + +#, unused +msgid "workspace.toast.comments-visible" +msgstr "Kommentarer synliga" + +#: src/app/main/ui/workspace/top_toolbar.cljs:65, src/app/main/ui/workspace/top_toolbar.cljs:66, src/app/main/ui/workspace/top_toolbar.cljs:77 +msgid "workspace.toolbar.mcp" +msgstr "MCP" + +#: src/app/main/ui/workspace/top_toolbar.cljs:87 +msgid "workspace.toolbar.mcp-connect-here" +msgstr "Anslut här" + +#: src/app/main/ui/workspace/top_toolbar.cljs:84 +msgid "workspace.toolbar.mcp-connected" +msgstr "MCP ansluten" + +#: src/app/main/ui/workspace/palette.cljs:166 +msgid "workspace.toolbar.palette-bar" +msgstr "Palett" From 557a26717686ed2321c0e88e98d4303a602f6914 Mon Sep 17 00:00:00 2001 From: VKing9 Date: Mon, 29 Jun 2026 07:19:39 +0200 Subject: [PATCH 041/229] :globe_with_meridians: Add translations for: Hindi Currently translated at 83.8% (1987 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/hi/ --- frontend/translations/hi.po | 78 ++++++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 15 deletions(-) diff --git a/frontend/translations/hi.po b/frontend/translations/hi.po index f69af6749f..bede2ab1ef 100644 --- a/frontend/translations/hi.po +++ b/frontend/translations/hi.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-22 07:30+0000\n" +"PO-Revision-Date: 2026-06-30 05:01+0000\n" "Last-Translator: VKing9 \n" -"Language-Team: Hindi " -"\n" +"Language-Team: Hindi \n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -1916,9 +1916,8 @@ msgid "inspect.attributes.typography.text-decoration.none" msgstr "कोई नहीं" #: src/app/main/ui/inspect/attributes/text.cljs:112 -#, fuzzy msgid "inspect.attributes.typography.text-decoration.strikethrough" -msgstr " " +msgstr "" #: src/app/main/ui/inspect/attributes/text.cljs:113 msgid "inspect.attributes.typography.text-decoration.underline" @@ -2049,7 +2048,6 @@ msgid "inspect.tabs.styles.active-themes" msgstr "सक्रिय थीम" #: src/app/main/ui/inspect/styles/style_box.cljs:75 -#, fuzzy msgid "inspect.tabs.styles.copy-shorthand" msgstr "CSS शॉर्टहैंड को क्लिपबोर्ड पर कॉपी करें" @@ -3883,7 +3881,7 @@ msgstr "आपकी कंपनी कितनी बड़ी है?" #: src/app/main/ui/onboarding/questions.cljs:242 msgid "onboarding.questions.step3.title" -msgstr "हमें अपनी नौकरी के बारे में बताइये" +msgstr "आपकी कंपनी का आकार क्या है?" #: src/app/main/ui/onboarding/questions.cljs:300 msgid "onboarding.questions.step4.title" @@ -4944,9 +4942,8 @@ msgid "subscription.settings.success.dialog.title" msgstr "आप %s हैं!" #: src/app/main/ui/settings/subscription.cljs:655 -#, fuzzy msgid "subscription.settings.support-us-since" -msgstr "आप इस योजना में हमारा समर्थन तब से कर रहे हैं: %s" +msgstr "आप इस योजना के साथ %s से हमारा समर्थन कर रहे हैं" #: src/app/main/ui/settings/subscription.cljs:697, src/app/main/ui/settings/subscription.cljs:713 msgid "subscription.settings.try-it-free" @@ -7604,7 +7601,7 @@ msgstr "मास्क्स" #: src/app/main/ui/workspace/sidebar/layers.cljs:566 msgid "workspace.sidebar.layers.search" -msgstr "परतें खोजें" +msgstr "खोजो…" #: src/app/main/ui/workspace/sidebar/layers.cljs:639, src/app/main/ui/workspace/sidebar/layers.cljs:733 msgid "workspace.sidebar.layers.shapes" @@ -7917,7 +7914,6 @@ msgid "workspace.tokens.num-active-sets" msgstr "%s सक्रिय सेट" #: src/app/main/ui/workspace/tokens/management/token_pill.cljs:122 -#, fuzzy msgid "workspace.tokens.original-value" msgstr "मूल मान: %s" @@ -7947,9 +7943,8 @@ msgid "workspace.tokens.reference-error" msgstr "संदर्भ त्रुटियाँ: " #: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:87, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:296, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:489, src/app/main/ui/workspace/tokens/management/forms/controls/combobox.cljs:298, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:189, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:324, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:259, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:381, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:505, src/app/main/ui/workspace/tokens/management/token_pill.cljs:123 -#, fuzzy msgid "workspace.tokens.resolved-value" -msgstr "हल किया गया मान: %s" +msgstr "समाधानित मान: %s" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:248 msgid "workspace.tokens.save-theme" @@ -8059,9 +8054,8 @@ msgid "workspace.tokens.themes-list" msgstr "थीम्स सूची" #: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:334, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:335 -#, fuzzy msgid "workspace.tokens.token-description" -msgstr "वर्णन" +msgstr "विवरण" #: src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:133, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:258 msgid "workspace.tokens.token-font-family-select" @@ -8460,3 +8454,57 @@ msgstr "स्वतः सहेजे गए संस्करण %s दि #, unused msgid "workspace.viewport.click-to-close-path" msgstr "पथ बंद करने के लिए क्लिक करें" + +#: src/app/main/ui/ds/controls/utilities/token_field.cljs:48 +msgid "ds.inputs.token-field.no-active-token-option" +msgstr "{%s} यह token किसी भी सक्रिय सेट में नहीं है या इसका मान अमान्य है।" + +#: src/app/main/data/common.cljs:82 +msgid "notifications.by-code.upgrade-version" +msgstr "एक नया संस्करण उपलब्ध है ।" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:273 +msgid "workspace.tokens.token-name-duplication-validation-error" +msgstr "पथ पर एक token पहले से मौजूद है: %s" + +#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 +#, fuzzy +msgid "auth.check-email" +msgstr "अपने ईमेल की जाँच करें!" + +#: src/app/main/ui/auth/verify_token.cljs:53 +msgid "auth.notifications.org-invitation-accepted" +msgstr "अब आप %s का हिस्सा हैं।" + +#: src/app/main/ui/auth/register.cljs:238 +msgid "auth.verification-sent-email" +msgstr "हमने इस पते पर एक वेरिफिकेशन ईमेल भेजा है:" + +#, fuzzy, unused +msgid "dashboard.change-org-modal.choose" +msgstr "करने के लिए कदम:" + +#, unused +msgid "dashboard.change-org-modal.select" +msgstr "एक संगठन चुनें" + +#: src/app/main/data/nitrate.cljs:399, src/app/main/ui/dashboard/team_form.cljs:157 +msgid "dashboard.change-org-modal.title" +msgstr "टीम का संगठन बदलें" + +#: src/app/main/ui/dashboard/sidebar.cljs:371 +msgid "dashboard.create-new-org" +msgstr "ऑर्गनाइज़ेशन बनाएँ" + +#: src/app/main/ui/dashboard/deleted.cljs:330 +#, fuzzy +msgid "dashboard.deleted.empty-state-description" +msgstr "आपका ट्रैश खाली है। डिलीट की गई फ़ाइलें और प्रोजेक्ट यहाँ दिखाई देंगे।" + +#: src/app/main/data/dashboard.cljs:992, src/app/main/ui/dashboard/file_menu.cljs:202 +msgid "dashboard.errors.error-on-restore-file" +msgstr "फ़ाइल %s को रिस्टोर करते समय एक त्रुटि हुई।" + +#: src/app/main/ui/dashboard/sidebar.cljs:376 +msgid "dashboard.go-to-admin-console" +msgstr "एडमिन कंसोल पर जाएं" From e6a49adfbc0876d2577fdaa8ff1d7e45b13d758e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Tue, 30 Jun 2026 13:55:06 +0200 Subject: [PATCH 042/229] :bug: Fix crash on composition update when pressing Esc on a IME (#10479) --- .../ui/workspace/shapes/text/v3_editor.cljs | 17 +++++++++-------- render-wasm/src/wasm/text_editor.rs | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs b/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs index 749c5af69f..450db8f839 100644 --- a/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs @@ -81,8 +81,10 @@ (when-not composing? (reset! composing? true)) + ;; IME cancel (e.g. Escape on Linux ibus-mozc) fires compositionupdate + ;; with an empty string; that must reach WASM to clear the preview text. (let [data (.-data event)] - (when data + (when (some? data) (text-editor/text-editor-composition-update data) (sync-wasm-text-editor-content!) (wasm.api/request-render "text-composition")) @@ -93,13 +95,12 @@ (mf/use-fn (fn [^js event] (reset! composing? false) - (let [data (.-data event)] - (when data - (text-editor/text-editor-composition-end data) - (sync-wasm-text-editor-content!) - (wasm.api/request-render "text-composition")) - (when-let [node (mf/ref-val contenteditable-ref)] - (set! (.-textContent node) ""))))) + (let [data (or (.-data event) "")] + (text-editor/text-editor-composition-end data) + (sync-wasm-text-editor-content!) + (wasm.api/request-render "text-composition")) + (when-let [node (mf/ref-val contenteditable-ref)] + (set! (.-textContent node) "")))) on-paste (mf/use-fn diff --git a/render-wasm/src/wasm/text_editor.rs b/render-wasm/src/wasm/text_editor.rs index 6fc4a3e20a..189bbd8713 100644 --- a/render-wasm/src/wasm/text_editor.rs +++ b/render-wasm/src/wasm/text_editor.rs @@ -324,7 +324,7 @@ pub extern "C" fn text_editor_composition_start() -> Result<()> { #[no_mangle] #[wasm_error] pub extern "C" fn text_editor_composition_end() -> Result<()> { - let bytes = crate::mem::bytes(); + let bytes = crate::mem::bytes_or_empty(); let text = match String::from_utf8(bytes) { Ok(text) => text, Err(_) => return Ok(()), @@ -380,7 +380,7 @@ pub extern "C" fn text_editor_composition_end() -> Result<()> { #[no_mangle] #[wasm_error] pub extern "C" fn text_editor_composition_update() -> Result<()> { - let bytes = crate::mem::bytes(); + let bytes = crate::mem::bytes_or_empty(); let text = match String::from_utf8(bytes) { Ok(text) => text, Err(_) => return Ok(()), From b3b3ea97dbdbea060225ff54bd2134f6a2c14796 Mon Sep 17 00:00:00 2001 From: Andrew Barnes Date: Tue, 30 Jun 2026 08:35:55 -0400 Subject: [PATCH 043/229] :books: Fix Angular plugin usage doc link (#10349) --- plugins/docs/create-angular-plugin.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/docs/create-angular-plugin.md b/plugins/docs/create-angular-plugin.md index 9bc9119558..ea362705e8 100644 --- a/plugins/docs/create-angular-plugin.md +++ b/plugins/docs/create-angular-plugin.md @@ -156,4 +156,4 @@ pnpm --filter example-plugin build For more detailed information on plugin development, check out our guides: -- [Plugin Usage Documentation](,/plugin-usage.md) +- [Using plugins in Penpot](https://help.penpot.app/user-guide/plugins-integrations/) From 46f5346045f29214eac49732fb4bd6b129ae2aff Mon Sep 17 00:00:00 2001 From: Luis de Dios Date: Tue, 30 Jun 2026 14:37:27 +0200 Subject: [PATCH 044/229] :recycle: Merge :thumbnails and :thumbnails-meta into single state key (#10021) * :recycle: Merge :thumbnails and :thumbnails-meta into single state key :recycle: Unify thumbnail refs in a single ref :bug: Fix test * :recycle: Update tests --- frontend/src/app/main/data/workspace.cljs | 2 +- .../app/main/data/workspace/libraries.cljs | 6 +- .../app/main/data/workspace/thumbnails.cljs | 14 +- .../main/data/workspace/thumbnails_wasm.cljs | 2 +- frontend/src/app/main/refs.cljs | 11 +- .../app/main/ui/workspace/shapes/frame.cljs | 9 +- .../ui/workspace/sidebar/assets/common.cljs | 19 +- .../ui/workspace/viewport/interactions.cljs | 2 +- .../data/workspace_thumbnails_test.cljs | 491 +++++++++--------- .../test/frontend_tests/helpers/mock.cljc | 15 +- 10 files changed, 292 insertions(+), 279 deletions(-) diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 39b28fbdc0..5a2d4446c6 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -275,7 +275,7 @@ ptk/UpdateEvent (update [_ state] (-> state - (assoc :thumbnails thumbnails) + (assoc :thumbnails (d/update-vals thumbnails (fn [uri] {:uri uri :rendered-at nil}))) (update :files assoc file-id file))))) (defn zoom-to-frame diff --git a/frontend/src/app/main/data/workspace/libraries.cljs b/frontend/src/app/main/data/workspace/libraries.cljs index a3a93cf7cc..5225f5cecf 100644 --- a/frontend/src/app/main/data/workspace/libraries.cljs +++ b/frontend/src/app/main/data/workspace/libraries.cljs @@ -800,7 +800,8 @@ (ptk/reify ::library-thumbnails-fetched ptk/UpdateEvent (update [_ state] - (update state :thumbnails merge thumbnails)))) + (update state :thumbnails merge + (d/update-vals thumbnails (fn [uri] {:uri uri :rendered-at nil})))))) (defn fetch-library-thumbnails [library-id] @@ -1541,7 +1542,8 @@ (->> (rp/cmd! :get-file-object-thumbnails {:file-id library-id :tag "component"}) (rx/map (fn [thumbnails] (fn [state] - (update state :thumbnails merge thumbnails)))))))))) + (update state :thumbnails merge + (d/update-vals thumbnails (fn [uri] {:uri uri :rendered-at nil})))))))))))) (defn link-file-to-library [file-id library-id] diff --git a/frontend/src/app/main/data/workspace/thumbnails.cljs b/frontend/src/app/main/data/workspace/thumbnails.cljs index 3770a24a4a..3526c1ed99 100644 --- a/frontend/src/app/main/data/workspace/thumbnails.cljs +++ b/frontend/src/app/main/data/workspace/thumbnails.cljs @@ -134,12 +134,11 @@ ptk/UpdateEvent (update [_ state] - (let [uri (dm/get-in state [:thumbnails object-id])] + (let [uri (dm/get-in state [:thumbnails object-id :uri])] (l/dbg :hint "clear-thumbnail" :object-id object-id :uri uri) (-> state (update ::thumbnails-deletion-queue assoc object-id uri) - (update :thumbnails dissoc object-id) - (update :thumbnails-meta dissoc object-id)))) + (update :thumbnails dissoc object-id)))) ptk/WatchEvent (watch [_ _ stream] @@ -156,13 +155,12 @@ (ptk/reify ::assoc-thumbnail ptk/UpdateEvent (update [_ state] - (let [prev-uri (dm/get-in state [:thumbnails object-id]) - now (.now js/Date)] - (some->> prev-uri (vreset! prev-uri*)) + (let [prev-entry (dm/get-in state [:thumbnails object-id]) + now (ct/now)] + (some->> prev-entry :uri (vreset! prev-uri*)) (l/trc :hint "assoc thumbnail" :object-id object-id :uri uri) (-> state - (update :thumbnails assoc object-id uri) - (update :thumbnails-meta assoc object-id {:rendered-at now})))) + (update :thumbnails assoc object-id {:uri uri :rendered-at now})))) ptk/EffectEvent (effect [_ _ _] diff --git a/frontend/src/app/main/data/workspace/thumbnails_wasm.cljs b/frontend/src/app/main/data/workspace/thumbnails_wasm.cljs index 612bdd2e53..7d478c6448 100644 --- a/frontend/src/app/main/data/workspace/thumbnails_wasm.cljs +++ b/frontend/src/app/main/data/workspace/thumbnails_wasm.cljs @@ -168,7 +168,7 @@ (ptk/reify ::persist-thumbnail ptk/WatchEvent (watch [_ state _] - (let [data-uri (dm/get-in state [:thumbnails object-id])] + (let [data-uri (dm/get-in state [:thumbnails object-id :uri])] (if (and (some? data-uri) (str/starts-with? data-uri "data:")) (let [blob (wapi/data-uri->blob data-uri)] diff --git a/frontend/src/app/main/refs.cljs b/frontend/src/app/main/refs.cljs index fc14e846f1..cf6e9e17f9 100644 --- a/frontend/src/app/main/refs.cljs +++ b/frontend/src/app/main/refs.cljs @@ -580,14 +580,9 @@ [object-id] (l/derived (fn [state] - (some-> (dm/get-in state [:thumbnails object-id]) - (cf/resolve-media))) - st/state)) - -(defn workspace-thumbnail-rendered-at - [object-id] - (l/derived - #(dm/get-in % [:thumbnails-meta object-id :rendered-at]) + (when-let [entry (dm/get-in state [:thumbnails object-id])] + (cond-> entry + (:uri entry) (update :uri cf/resolve-media)))) st/state)) (def workspace-text-modifier diff --git a/frontend/src/app/main/ui/workspace/shapes/frame.cljs b/frontend/src/app/main/ui/workspace/shapes/frame.cljs index 2b09050dfe..27346b3178 100644 --- a/frontend/src/app/main/ui/workspace/shapes/frame.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/frame.cljs @@ -136,10 +136,11 @@ width (dm/get-prop bounds :width) height (dm/get-prop bounds :height) - thumbnail-uri* (mf/with-memo [file-id page-id frame-id] - (let [object-id (thc/fmt-object-id file-id page-id frame-id "frame")] - (refs/workspace-thumbnail-by-id object-id))) - thumbnail-uri (mf/deref thumbnail-uri*) + thumbnail-data* (mf/with-memo [file-id page-id frame-id] + (let [object-id (thc/fmt-object-id file-id page-id frame-id "frame")] + (refs/workspace-thumbnail-by-id object-id))) + thumbnail-data (mf/deref thumbnail-data*) + thumbnail-uri (:uri thumbnail-data) modifiers-ref (mf/with-memo [frame-id] (refs/workspace-modifiers-by-frame-id frame-id)) diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/common.cljs b/frontend/src/app/main/ui/workspace/sidebar/assets/common.cljs index 55d191d36a..086a21ae11 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/assets/common.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/assets/common.cljs @@ -328,19 +328,18 @@ (mf/with-memo [file-id page-id root-id] (thc/fmt-object-id file-id page-id root-id "component")) - thumbnail-uri* + thumbnail-data* (mf/with-memo [object-id] (refs/workspace-thumbnail-by-id object-id)) + thumbnail-data + (mf/deref thumbnail-data*) + thumbnail-uri - (mf/deref thumbnail-uri*) + (:uri thumbnail-data) - rendered-at* - (mf/with-memo [object-id] - (refs/workspace-thumbnail-rendered-at object-id)) - - rendered-at - (mf/deref rendered-at*) + thumbnail-rendered-at + (:rendered-at thumbnail-data) modified-at (some-> (:modified-at component) (.getTime)) @@ -349,9 +348,9 @@ ;; or the component was modified after the last render stale? (and (some? thumbnail-uri) - (or (nil? rendered-at) + (or (nil? thumbnail-rendered-at) (and (some? modified-at) - (> modified-at rendered-at)))) + (> modified-at thumbnail-rendered-at)))) on-error (mf/use-fn diff --git a/frontend/src/app/main/ui/workspace/viewport/interactions.cljs b/frontend/src/app/main/ui/workspace/viewport/interactions.cljs index 0a910d4730..6ffa2d32de 100644 --- a/frontend/src/app/main/ui/workspace/viewport/interactions.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/interactions.cljs @@ -258,7 +258,7 @@ dest-shape (cond-> dest-shape (some? thumbnail-data) - (assoc :thumbnail thumbnail-data))] + (assoc :thumbnail (:uri thumbnail-data)))] [:g {:on-pointer-down start-move-position :on-pointer-enter #(reset! is-hover-disabled true) :on-pointer-leave #(reset! is-hover-disabled false)} diff --git a/frontend/test/frontend_tests/data/workspace_thumbnails_test.cljs b/frontend/test/frontend_tests/data/workspace_thumbnails_test.cljs index fd35d6c5fc..6aaa09e283 100644 --- a/frontend/test/frontend_tests/data/workspace_thumbnails_test.cljs +++ b/frontend/test/frontend_tests/data/workspace_thumbnails_test.cljs @@ -9,6 +9,9 @@ [app.common.thumbnails :as thc] [app.common.uuid :as uuid] [app.main.data.workspace.thumbnails :as thumbnails] + [app.main.repo :as rp] + [app.util.timers :as tm] + [app.util.webapi :as wapi] [beicon.v2.core :as rx] [cljs.test :as t :include-macros true] [frontend-tests.helpers.mock :as mock] @@ -42,257 +45,267 @@ :component-root true}}}}}] (t/is (= #{["frame" root-id] ["component" shape-b-id]} - (#'thumbnails/extract-frame-changes page-id [event [old-data new-data]])))) + (#'thumbnails/extract-frame-changes page-id [event [old-data new-data]]))))) - ;; --- Batch deletion queue state management --- +;; --- Batch deletion queue state management --- - (t/deftest clear-thumbnail-adds-to-deletion-queue - (let [file-id (uuid/next) - object-id (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") - uri "blob:http://localhost/test-thumb" - event (thumbnails/clear-thumbnail file-id object-id) - state {:thumbnails {object-id uri}} - result (ptk/update event state)] - ;; Thumbnail removed from the map - (t/is (nil? (get-in result [:thumbnails object-id]))) - ;; Object-id added to the deletion queue with its URI - (t/is (= uri (get-in result [deletion-queue-key object-id]))))) +(t/deftest clear-thumbnail-adds-to-deletion-queue + (let [file-id (uuid/next) + object-id (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") + uri "blob:http://localhost/test-thumb" + event (thumbnails/clear-thumbnail file-id object-id) + state {:thumbnails {object-id {:uri uri :rendered-at nil}}} + result (ptk/update event state)] + ;; Thumbnail removed from the map + (t/is (nil? (get-in result [:thumbnails object-id]))) + ;; Object-id added to the deletion queue with its URI + (t/is (= uri (get-in result [deletion-queue-key object-id]))))) - (t/deftest clear-thumbnail-keeps-other-thumbnails - (let [file-id (uuid/next) - object-id1 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") - object-id2 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") - uri1 "blob:http://localhost/thumb-1" - uri2 "blob:http://localhost/thumb-2" - event (thumbnails/clear-thumbnail file-id object-id1) - state {:thumbnails {object-id1 uri1 object-id2 uri2}} - result (ptk/update event state)] - ;; Only the cleared thumbnail is removed - (t/is (nil? (get-in result [:thumbnails object-id1]))) - (t/is (= uri2 (get-in result [:thumbnails object-id2]))) - ;; Only the cleared thumbnail is queued - (t/is (= uri1 (get-in result [deletion-queue-key object-id1]))) - (t/is (nil? (get-in result [deletion-queue-key object-id2]))))) +(t/deftest clear-thumbnail-keeps-other-thumbnails + (let [file-id (uuid/next) + object-id1 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") + object-id2 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") + uri1 "blob:http://localhost/thumb-1" + uri2 "blob:http://localhost/thumb-2" + event (thumbnails/clear-thumbnail file-id object-id1) + state {:thumbnails {object-id1 {:uri uri1 :rendered-at nil} + object-id2 {:uri uri2 :rendered-at nil}}} + result (ptk/update event state)] + ;; Only the cleared thumbnail is removed + (t/is (nil? (get-in result [:thumbnails object-id1]))) + (t/is (= uri2 (get-in result [:thumbnails object-id2 :uri]))) + ;; Only the cleared thumbnail is queued + (t/is (= uri1 (get-in result [deletion-queue-key object-id1]))) + (t/is (nil? (get-in result [deletion-queue-key object-id2]))))) - (t/deftest clear-thumbnail-accumulates-in-queue - (let [file-id (uuid/next) - object-id1 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") - object-id2 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") - uri1 "blob:http://localhost/thumb-1" - uri2 "blob:http://localhost/thumb-2" - event1 (thumbnails/clear-thumbnail file-id object-id1) - event2 (thumbnails/clear-thumbnail file-id object-id2) - state {:thumbnails {object-id1 uri1 object-id2 uri2}} - state1 (ptk/update event1 state) - state2 (ptk/update event2 state1)] - ;; Both removed from thumbnails - (t/is (nil? (get-in state2 [:thumbnails object-id1]))) - (t/is (nil? (get-in state2 [:thumbnails object-id2]))) - ;; Both accumulated in the queue - (t/is (= uri1 (get-in state2 [deletion-queue-key object-id1]))) - (t/is (= uri2 (get-in state2 [deletion-queue-key object-id2]))) - (t/is (= 2 (count (get state2 deletion-queue-key)))))) +(t/deftest clear-thumbnail-accumulates-in-queue + (let [file-id (uuid/next) + object-id1 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") + object-id2 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") + uri1 "blob:http://localhost/thumb-1" + uri2 "blob:http://localhost/thumb-2" + event1 (thumbnails/clear-thumbnail file-id object-id1) + event2 (thumbnails/clear-thumbnail file-id object-id2) + state {:thumbnails {object-id1 {:uri uri1 :rendered-at nil} + object-id2 {:uri uri2 :rendered-at nil}}} + state1 (ptk/update event1 state) + state2 (ptk/update event2 state1)] + ;; Both removed from thumbnails + (t/is (nil? (get-in state2 [:thumbnails object-id1]))) + (t/is (nil? (get-in state2 [:thumbnails object-id2]))) + ;; Both accumulated in the queue + (t/is (= uri1 (get-in state2 [deletion-queue-key object-id1]))) + (t/is (= uri2 (get-in state2 [deletion-queue-key object-id2]))) + (t/is (= 2 (count (get state2 deletion-queue-key)))))) - (t/deftest remove-from-deletion-queue-removes-entry - (let [file-id (uuid/next) - object-id (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") - event (thumbnails/remove-from-deletion-queue object-id) - state {deletion-queue-key {object-id "blob:http://localhost/thumb"}} - result (ptk/update event state)] - (t/is (nil? (get-in result [deletion-queue-key object-id]))) - (t/is (empty? (get result deletion-queue-key))))) +(t/deftest remove-from-deletion-queue-removes-entry + (let [file-id (uuid/next) + object-id (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") + event (thumbnails/remove-from-deletion-queue object-id) + state {deletion-queue-key {object-id "blob:http://localhost/thumb"}} + result (ptk/update event state)] + (t/is (nil? (get-in result [deletion-queue-key object-id]))) + (t/is (empty? (get result deletion-queue-key))))) - (t/deftest remove-from-deletion-queue-keeps-other-entries - (let [file-id (uuid/next) - object-id1 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") - object-id2 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") - uri1 "blob:http://localhost/thumb-1" - uri2 "blob:http://localhost/thumb-2" - event (thumbnails/remove-from-deletion-queue object-id1) - state {deletion-queue-key {object-id1 uri1 - object-id2 uri2}} - result (ptk/update event state)] - ;; Only the specified entry is removed - (t/is (nil? (get-in result [deletion-queue-key object-id1]))) - (t/is (= uri2 (get-in result [deletion-queue-key object-id2]))) - (t/is (= 1 (count (get result deletion-queue-key)))))) +(t/deftest remove-from-deletion-queue-keeps-other-entries + (let [file-id (uuid/next) + object-id1 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") + object-id2 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") + uri1 "blob:http://localhost/thumb-1" + uri2 "blob:http://localhost/thumb-2" + event (thumbnails/remove-from-deletion-queue object-id1) + state {deletion-queue-key {object-id1 uri1 + object-id2 uri2}} + result (ptk/update event state)] + ;; Only the specified entry is removed + (t/is (nil? (get-in result [deletion-queue-key object-id1]))) + (t/is (= uri2 (get-in result [deletion-queue-key object-id2]))) + (t/is (= 1 (count (get result deletion-queue-key)))))) - (t/deftest remove-before-clear-cancels-pending-delete +(t/deftest remove-before-clear-cancels-pending-delete + (let [file-id (uuid/next) + object-id (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") + uri "blob:http://localhost/thumb" + ;; Step 1: clear-thumbnail queues the delete + state1 (ptk/update (thumbnails/clear-thumbnail file-id object-id) + {:thumbnails {object-id {:uri uri :rendered-at nil}}}) + ;; Step 2: remove-from-deletion-queue cancels the pending delete + state2 (ptk/update (thumbnails/remove-from-deletion-queue object-id) + state1)] + ;; Thumbnail was removed from :thumbnails map by clear-thumbnail + (t/is (nil? (get-in state2 [:thumbnails object-id]))) + ;; But the deletion queue entry was cancelled by remove-from-deletion-queue + (t/is (nil? (get-in state2 [deletion-queue-key object-id]))) + (t/is (empty? (get state2 deletion-queue-key))))) + +(t/deftest clear-thumbnail-batch-drains-queue + (let [file-id (uuid/next) + object-id1 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") + object-id2 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") + uri1 "blob:http://localhost/thumb-1" + uri2 "blob:http://localhost/thumb-2" + ;; Build up the queue state manually (simulating accumulated clear-thumbnails) + state {deletion-queue-key {object-id1 uri1 object-id2 uri2}} + event (#'thumbnails/clear-thumbnail-batch) + result (ptk/update event state)] + ;; The queue is drained from application state + (t/is (empty? (get result deletion-queue-key))))) + +(t/deftest clear-thumbnail-batch-empty-queue-noop + (let [state {deletion-queue-key {}} + event (#'thumbnails/clear-thumbnail-batch) + result (ptk/update event state)] + ;; Queue key removed from state; rest of state unchanged + (t/is (empty? (get result deletion-queue-key))) + (t/is (= (dissoc state deletion-queue-key) (dissoc result deletion-queue-key))))) + +(t/deftest assoc-thumbnail-adds-to-map + (let [object-id (thc/fmt-object-id (uuid/next) (uuid/next) (uuid/next) "frame") + uri "blob:http://localhost/new-thumb" + event (#'thumbnails/assoc-thumbnail object-id uri) + state {:thumbnails {}} + result (ptk/update event state)] + (t/is (= uri (get-in result [:thumbnails object-id :uri]))) + (t/is (some? (get-in result [:thumbnails object-id :rendered-at]))))) + +(t/deftest duplicate-thumbnail-copies-entry + (let [old-id (thc/fmt-object-id (uuid/next) (uuid/next) (uuid/next) "frame") + new-id (thc/fmt-object-id (uuid/next) (uuid/next) (uuid/next) "frame") + uri "blob:http://localhost/dup-thumb" + entry {:uri uri :rendered-at nil} + event (thumbnails/duplicate-thumbnail old-id new-id) + state {:thumbnails {old-id entry}} + result (ptk/update event state)] + (t/is (= entry (get-in result [:thumbnails old-id]))) + (t/is (= entry (get-in result [:thumbnails new-id]))))) + +;; --- Async WatchEvent tests --- + +(defn- make-obj-ids + "Helper to create n properly-formatted object-ids for a single file." + [file-id n] + (vec (repeatedly n #(thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame")))) + +(t/deftest clear-thumbnail-batch-watch-calls-rpc-with-object-ids + (t/async + done + (let [file-id (uuid/next) + oids (make-obj-ids file-id 3) + state {deletion-queue-key (zipmap oids (repeat "blob:http://test"))} + event (#'thumbnails/clear-thumbnail-batch)] + (ptk/update event state) + (mock/with-mocks + {rp/cmd! mock/rpc-cmd-mock + tm/schedule-on-idle mock/schedule-on-idle-mock} + (fn [done'] + (->> (ptk/watch event state nil) + (rx/reduce conj []) + (rx/subs! + (fn [_] nil) + (fn [err] (t/is (nil? err)) (done')) + (fn [_] + (t/is (= 1 (count @mock/rpc-calls))) + (let [[{:keys [cmd params]}] @mock/rpc-calls] + (t/is (= :delete-file-object-thumbnails cmd)) + (t/is (= (vec oids) (:object-ids params)))) + (done'))))) + done)))) + +(t/deftest clear-thumbnail-batch-watch-partitions-large-batch + (t/async + done + (let [file-id (uuid/next) + oids (make-obj-ids file-id 250) + state {deletion-queue-key (zipmap oids (repeat "blob:http://test"))} + event (#'thumbnails/clear-thumbnail-batch)] + (ptk/update event state) + (mock/with-mocks + {rp/cmd! mock/rpc-cmd-mock + tm/schedule-on-idle mock/schedule-on-idle-mock} + (fn [done'] + (->> (ptk/watch event state nil) + (rx/reduce conj []) + (rx/subs! + (fn [_] nil) + (fn [err] (t/is (nil? err)) (done')) + (fn [_] + (t/is (= 2 (count @mock/rpc-calls))) + (let [[c1 c2] @mock/rpc-calls] + (t/is (= :delete-file-object-thumbnails (:cmd c1))) + (t/is (= :delete-file-object-thumbnails (:cmd c2))) + (t/is (= 200 (count (:object-ids (:params c1))))) + (t/is (= 50 (count (:object-ids (:params c2))))) + (t/is (= (set oids) + (set (concat (:object-ids (:params c1)) + (:object-ids (:params c2))))))) + (done'))))) + done)))) + +(t/deftest clear-thumbnail-batch-watch-revokes-blob-uris + (t/async + done + (let [file-id (uuid/next) + oids (make-obj-ids file-id 2) + uris ["blob:http://localhost/thumb-1" + "blob:http://localhost/thumb-2"] + state {deletion-queue-key (zipmap oids uris)} + event (#'thumbnails/clear-thumbnail-batch)] + (ptk/update event state) + (mock/with-mocks + {rp/cmd! mock/rpc-cmd-mock + wapi/revoke-uri mock/revoke-uri-mock + tm/schedule-on-idle mock/schedule-on-idle-mock} + (fn [done'] + (->> (ptk/watch event state nil) + (rx/reduce conj []) + (rx/subs! + (fn [_] nil) + (fn [err] (t/is (nil? err)) (done')) + (fn [_] + (t/is (= (set uris) (set @mock/revoked-uris))) + (done'))))) + done)))) + +(t/deftest clear-thumbnail-batch-watch-empty-queue-no-rpc + (t/async + done + (let [event (#'thumbnails/clear-thumbnail-batch) + state {}] + (ptk/update event state) + (mock/with-mocks + {rp/cmd! mock/rpc-cmd-mock + tm/schedule-on-idle mock/schedule-on-idle-mock} + (fn [done'] + (->> (ptk/watch event state nil) + (rx/reduce conj []) + (rx/subs! + (fn [_] nil) + (fn [err] (t/is (nil? err)) (done')) + (fn [_] + (t/is (empty? @mock/rpc-calls)) + (done'))))) + done)))) + +(t/deftest clear-thumbnail-watch-emits-batch-after-debounce + (t/async + done (let [file-id (uuid/next) object-id (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") uri "blob:http://localhost/thumb" - ;; Step 1: clear-thumbnail queues the delete - state1 (ptk/update (thumbnails/clear-thumbnail file-id object-id) - {:thumbnails {object-id uri}}) - ;; Step 2: remove-from-deletion-queue cancels the pending delete - state2 (ptk/update (thumbnails/remove-from-deletion-queue object-id) - state1)] - ;; Thumbnail was removed from :thumbnails map by clear-thumbnail - (t/is (nil? (get-in state2 [:thumbnails object-id]))) - ;; But the deletion queue entry was cancelled by remove-from-deletion-queue - (t/is (nil? (get-in state2 [deletion-queue-key object-id]))) - (t/is (empty? (get state2 deletion-queue-key))))) - - (t/deftest clear-thumbnail-batch-drains-queue - (let [file-id (uuid/next) - object-id1 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") - object-id2 (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") - uri1 "blob:http://localhost/thumb-1" - uri2 "blob:http://localhost/thumb-2" - ;; Build up the queue state manually (simulating accumulated clear-thumbnails) - state {deletion-queue-key {object-id1 uri1 object-id2 uri2}} - event (#'thumbnails/clear-thumbnail-batch) - result (ptk/update event state)] - ;; The queue is drained from application state - (t/is (empty? (get result deletion-queue-key))))) - - (t/deftest clear-thumbnail-batch-empty-queue-noop - (let [state {deletion-queue-key {}} - event (#'thumbnails/clear-thumbnail-batch) - result (ptk/update event state)] - ;; State unchanged when queue is already empty - (t/is (empty? (get result deletion-queue-key))) - (t/is (= state (dissoc result deletion-queue-key))))) - - (t/deftest assoc-thumbnail-adds-to-map - (let [object-id (thc/fmt-object-id (uuid/next) (uuid/next) (uuid/next) "frame") - uri "blob:http://localhost/new-thumb" - event (#'thumbnails/assoc-thumbnail object-id uri) - state {:thumbnails {}} - result (ptk/update event state)] - (t/is (= uri (get-in result [:thumbnails object-id]))))) - - (t/deftest duplicate-thumbnail-copies-entry - (let [old-id (thc/fmt-object-id (uuid/next) (uuid/next) (uuid/next) "frame") - new-id (thc/fmt-object-id (uuid/next) (uuid/next) (uuid/next) "frame") - uri "blob:http://localhost/dup-thumb" - event (thumbnails/duplicate-thumbnail old-id new-id) - state {:thumbnails {old-id uri}} - result (ptk/update event state)] - (t/is (= uri (get-in result [:thumbnails old-id]))) - (t/is (= uri (get-in result [:thumbnails new-id]))))) - - ;; --- Async WatchEvent tests --- - - (defn- make-obj-ids - "Helper to create n properly-formatted object-ids for a single file." - [file-id n] - (vec (repeatedly n #(thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame")))) - - (t/deftest clear-thumbnail-batch-watch-calls-rpc-with-object-ids - (t/async done - (let [file-id (uuid/next) - oids (make-obj-ids file-id 3) - state {deletion-queue-key (zipmap oids (repeat "blob:http://test"))} - event (#'thumbnails/clear-thumbnail-batch)] - (ptk/update event state) - (mock/with-mocks - {app.main.repo/cmd! mock/rpc-cmd-mock - app.util.timers/schedule-on-idle mock/schedule-on-idle-mock} - (fn [done'] - (->> (ptk/watch event state nil) + state {:thumbnails {object-id {:uri uri :rendered-at nil}}} + event (thumbnails/clear-thumbnail file-id object-id)] + (ptk/update event state) + (mock/with-mocks + {rx/timer mock/timer-mock} + (fn [done'] + (let [stream (rx/subject)] + (->> (ptk/watch event state stream) (rx/reduce conj []) (rx/subs! - (fn [_] nil) - (fn [err] (t/is (nil? err)) (done')) - (fn [_] - (t/is (= 1 (count @mock/rpc-calls))) - (let [[{:keys [cmd params]}] @mock/rpc-calls] - (t/is (= :delete-file-object-thumbnails cmd)) - (t/is (= (vec oids) (:object-ids params)))) - (done'))))) - done)))) - - (t/deftest clear-thumbnail-batch-watch-partitions-large-batch - (t/async done - (let [file-id (uuid/next) - oids (make-obj-ids file-id 250) - state {deletion-queue-key (zipmap oids (repeat "blob:http://test"))} - event (#'thumbnails/clear-thumbnail-batch)] - (ptk/update event state) - (mock/with-mocks - {app.main.repo/cmd! mock/rpc-cmd-mock - app.util.timers/schedule-on-idle mock/schedule-on-idle-mock} - (fn [done'] - (->> (ptk/watch event state nil) - (rx/reduce conj []) - (rx/subs! - (fn [_] nil) - (fn [err] (t/is (nil? err)) (done')) - (fn [_] - (t/is (= 2 (count @mock/rpc-calls))) - (let [[c1 c2] @mock/rpc-calls] - (t/is (= :delete-file-object-thumbnails (:cmd c1))) - (t/is (= :delete-file-object-thumbnails (:cmd c2))) - (t/is (= 200 (count (:object-ids (:params c1))))) - (t/is (= 50 (count (:object-ids (:params c2))))) - (t/is (= (set oids) - (set (concat (:object-ids (:params c1)) - (:object-ids (:params c2))))))) - (done'))))) - done)))) - - (t/deftest clear-thumbnail-batch-watch-revokes-blob-uris - (t/async done - (let [file-id (uuid/next) - oids (make-obj-ids file-id 2) - uris ["blob:http://localhost/thumb-1" - "blob:http://localhost/thumb-2"] - state {deletion-queue-key (zipmap oids uris)} - event (#'thumbnails/clear-thumbnail-batch)] - (ptk/update event state) - (mock/with-mocks - {app.main.repo/cmd! (fn [_ _] (rx/of nil)) - app.util.webapi/revoke-uri mock/revoke-uri-mock - app.util.timers/schedule-on-idle mock/schedule-on-idle-mock} - (fn [done'] - (->> (ptk/watch event state nil) - (rx/reduce conj []) - (rx/subs! - (fn [_] nil) - (fn [err] (t/is (nil? err)) (done')) - (fn [_] - (t/is (= (set uris) (set @mock/revoked-uris))) - (done'))))) - done)))) - - (t/deftest clear-thumbnail-batch-watch-empty-queue-no-rpc - (t/async done - (let [event (#'thumbnails/clear-thumbnail-batch) - state {}] - (ptk/update event state) - (mock/with-mocks - {app.main.repo/cmd! mock/rpc-cmd-mock - app.util.timers/schedule-on-idle mock/schedule-on-idle-mock} - (fn [done'] - (->> (ptk/watch event state nil) - (rx/reduce conj []) - (rx/subs! - (fn [_] nil) - (fn [err] (t/is (nil? err)) (done')) - (fn [_] - (t/is (empty? @mock/rpc-calls)) - (done'))))) - done)))) - - (t/deftest clear-thumbnail-watch-emits-batch-after-debounce - (t/async done - (let [file-id (uuid/next) - object-id (thc/fmt-object-id file-id (uuid/next) (uuid/next) "frame") - uri "blob:http://localhost/thumb" - state {:thumbnails {object-id uri}} - event (thumbnails/clear-thumbnail file-id object-id)] - (ptk/update event state) - (mock/with-mocks - {beicon.v2.core/timer mock/timer-mock} - (fn [done'] - (->> (ptk/watch event state nil) - (rx/reduce conj []) - (rx/subs! - (fn [_] nil) - (fn [err] (t/is (nil? err)) (done')) (fn [events] (t/is (= 1 (count events))) (t/is (ptk/event? (first events))) - (done'))))) - done))))) + (done')) + (fn [err] (t/is (nil? err)) (done')) + nil)))) + done)))) diff --git a/frontend/test/frontend_tests/helpers/mock.cljc b/frontend/test/frontend_tests/helpers/mock.cljc index fce14876a3..fad0e8c3d1 100644 --- a/frontend/test/frontend_tests/helpers/mock.cljc +++ b/frontend/test/frontend_tests/helpers/mock.cljc @@ -106,9 +106,12 @@ (defn rpc-cmd-mock "Records [cmd params] in [[rpc-calls]], returns `(rx/of nil)`." - [cmd params] - (swap! rpc-calls conj {:cmd cmd :params params}) - (rx/of nil)) + ([cmd params] + (swap! rpc-calls conj {:cmd cmd :params params}) + (rx/of nil)) + ([cmd params _opts] + (swap! rpc-calls conj {:cmd cmd :params params}) + (rx/of nil))) (defn revoke-uri-mock "Records `uri` in [[revoked-uris]]." @@ -117,8 +120,10 @@ (defn schedule-on-idle-mock "Calls `f` immediately instead of deferring to the idle queue." - [f] - (f)) + ([_ms f] + (f)) + ([f] + (f))) (defn timer-mock "Returns `(rx/of :immediate)` so debounce timers fire instantly From 8d5b16295f7a9e7276b95fd96fcfe2dce19f04fa Mon Sep 17 00:00:00 2001 From: Parinith Date: Tue, 30 Jun 2026 19:44:24 +0530 Subject: [PATCH 045/229] :lipstick: Center libraries empty state placeholder vertically (#10452) Co-authored-by: Andrey Antukh --- frontend/src/app/main/ui/dashboard/placeholder.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/dashboard/placeholder.scss b/frontend/src/app/main/ui/dashboard/placeholder.scss index e37e627312..da0355bba4 100644 --- a/frontend/src/app/main/ui/dashboard/placeholder.scss +++ b/frontend/src/app/main/ui/dashboard/placeholder.scss @@ -99,7 +99,8 @@ } .empty-placeholder-libraries { - margin: deprecated.$s-16; + margin: auto; + margin-top: 5%; } .empty-project-container { From 51877c4bca22eccc22e51de0ec638b5607853190 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Wed, 1 Jul 2026 10:43:59 +0200 Subject: [PATCH 046/229] :bug: Fix text editor cursor being too thin on dpr > 1 (#10501) --- render-wasm/src/render/text_editor.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/render-wasm/src/render/text_editor.rs b/render-wasm/src/render/text_editor.rs index 8c990942ec..361b6db165 100644 --- a/render-wasm/src/render/text_editor.rs +++ b/render-wasm/src/render/text_editor.rs @@ -30,7 +30,7 @@ pub fn render_overlay( } if editor_state.cursor_visible { - render_cursor(canvas, zoom, editor_state, text_content, shape); + render_cursor(canvas, zoom, options.dpr, editor_state, text_content, shape); } canvas.restore(); @@ -39,6 +39,7 @@ pub fn render_overlay( fn render_cursor( canvas: &Canvas, zoom: f32, + dpr: f32, editor_state: &TextEditorState, text_content: &TextContent, shape: &Shape, @@ -54,7 +55,7 @@ fn render_cursor( if editor_state.is_overtype_mode { rect.width() } else { - editor_state.theme.cursor_width / zoom + editor_state.theme.cursor_width / zoom * dpr }, rect.height(), ); From 215de966ae6d93f9505b2f966ea8a89edb824876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Wed, 1 Jul 2026 12:40:25 +0200 Subject: [PATCH 047/229] :bug: Fix extra linebreak on MacOS IME (#10498) * :bug: Fix extra linebreak in Japense IME (MacOS) * :recycle: Remove composing? from the state and query event instead --- .../ui/workspace/shapes/text/v3_editor.cljs | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs b/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs index 450db8f839..03cb433153 100644 --- a/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs @@ -39,6 +39,24 @@ (if (>= (count lang) 3) (str/capital lang) (str/upper lang))) "Noto Color Emoji")) +(defn- composing-event? + "True when a key/input event is part of an in-flight IME composition. + + Read from the browser event itself so it stays correct regardless of render + timing or the relative ordering of compositionend. + Note that , and that compositionstart + dispatches after the first composing keydown event. + + We are checkign both isComposing and the keyCode (229, which is what is reported + when using an IME), beause compositionstart dispatches after the first composing + event. Note that also, on MacOS, the key that commits a composition (e.g. Enter + in Japanese IME) dispatches its keydown while composition is still active, so we + can't rely on a stale state and need to query the event itself." + [^js event] + (let [native (.-nativeEvent event)] + (or (.-isComposing native) + (= 229 (.-keyCode event))))) + (mf/defc text-editor* "Contenteditable element positioned over the text shape to capture input events." [{:keys [shape]}] @@ -47,7 +65,6 @@ clip-id (dm/str "text-edition-clip" shape-id) contenteditable-ref (mf/use-ref nil) - composing? (mf/use-state false) fallback-fonts (wasm.api/fonts-from-text-content (:content shape) false) fallback-families (map (fn [font] @@ -72,15 +89,11 @@ on-composition-start (mf/use-fn (fn [_event] - (reset! composing? true) (text-editor/text-editor-composition-start))) on-composition-update (mf/use-fn (fn [event] - (when-not composing? - (reset! composing? true)) - ;; IME cancel (e.g. Escape on Linux ibus-mozc) fires compositionupdate ;; with an empty string; that must reach WASM to clear the preview text. (let [data (.-data event)] @@ -94,7 +107,6 @@ on-composition-end (mf/use-fn (fn [^js event] - (reset! composing? false) (let [data (or (.-data event) "")] (text-editor/text-editor-composition-end data) (sync-wasm-text-editor-content!) @@ -143,11 +155,10 @@ (mf/use-fn (fn [^js event] (when (and (text-editor/text-editor-has-focus?) - (not @composing?)) + (not (composing-event? event))) (let [key (.-key event) ctrl? (or (.-ctrlKey event) (.-metaKey event)) shift? (.-shiftKey event)] - (cond ;; Escape: finalize and stop (= key "Escape") @@ -241,7 +252,7 @@ input-type (.-inputType native-event) data (.-data native-event)] ;; Skip composition-related input events - composition-end handles those - (when (and (not @composing?) + (when (and (not (composing-event? event)) (not= input-type "insertCompositionText")) (when (and data (seq data)) (text-editor/text-editor-insert-text data) From 64ba70e6f3615ae3826e89867ff3e37e19814ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marina=20L=C3=B3pez?= Date: Wed, 1 Jul 2026 10:38:37 +0200 Subject: [PATCH 048/229] :bug: Fix border color for selected subscription --- .../app/main/ui/settings/subscription.cljs | 32 +++++++++++++------ .../app/main/ui/settings/subscription.scss | 4 +++ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/frontend/src/app/main/ui/settings/subscription.cljs b/frontend/src/app/main/ui/settings/subscription.cljs index 86838c5790..b7ee644bdd 100644 --- a/frontend/src/app/main/ui/settings/subscription.cljs +++ b/frontend/src/app/main/ui/settings/subscription.cljs @@ -38,6 +38,7 @@ code-action editors recommended + current-plan show-button-cta inline-error]}] @@ -46,7 +47,8 @@ has-cta-button (and cta-link cta-text show-button-cta) has-cta-link (and cta-link cta-text (not show-button-cta))] [:div {:class (stl/css-case :plan-card true - :plan-card-highlight recommended)} + :plan-card-highlight recommended + :plan-card-current current-plan)} [:div {:class (stl/css :plan-card-header)} [:div {:class (stl/css :plan-card-title-container)} (when card-title-icon @@ -585,7 +587,8 @@ :cta-link (if (and (:licenses connectivity) (not (:manual nitrate-license))) dnt/go-to-nitrate-billing open-cancel-contact-sales-modal) - :code-action (when (:manual nitrate-license) :renovate)}] + :code-action (when (:manual nitrate-license) :renovate) + :current-plan true}] (case subscription-type "professional" [:> plan-card* {:card-title (tr "subscription.settings.professional") @@ -597,7 +600,8 @@ (tr "subscription.settings.professional.selfhost.unlimited-users")), (if cf/saas? (tr "subscription.settings.professional.teams-editors-benefit") - (tr "subscription.settings.professional.selfhost.community-support"))]}] + (tr "subscription.settings.professional.selfhost.community-support"))] + :current-plan true}] "unlimited" (if subscription-is-trial? @@ -611,7 +615,8 @@ :cta-link go-to-payments :cta-text-trial (tr "subscription.settings.add-payment-to-continue") :cta-link-trial go-to-payments - :editors (-> profile :props :subscription :quantity)}] + :editors (-> profile :props :subscription :quantity) + :current-plan true}] [:> plan-card* {:card-title (tr "subscription.settings.unlimited") :card-title-icon i/character-u @@ -621,7 +626,8 @@ (tr "subscription.settings.unlimited.bill")] :cta-text (tr "subscription.settings.manage-your-subscription") :cta-link go-to-payments - :editors (-> profile :props :subscription :quantity)}]) + :editors (-> profile :props :subscription :quantity) + :current-plan true}]) "enterprise" (if subscription-is-trial? @@ -634,7 +640,8 @@ :cta-text (tr "subscription.settings.manage-your-subscription") :cta-link go-to-payments :cta-text-trial (tr "subscription.settings.add-payment-to-continue") - :cta-link-trial go-to-payments}] + :cta-link-trial go-to-payments + :current-plan true}] [:> plan-card* {:card-title (tr "subscription.settings.enterprise") :card-title-icon i/character-e :benefits-title (tr "subscription.settings.benefits.all-unlimited-benefits"), @@ -642,7 +649,8 @@ (tr "subscription.settings.enterprise.autosave"), (tr "subscription.settings.enterprise.capped-bill")] :cta-text (tr "subscription.settings.manage-your-subscription") - :cta-link go-to-payments}]))) + :cta-link go-to-payments + :current-plan true}]))) [:div {:class (stl/css :membership-container)} (when (or nitrate? @@ -683,7 +691,8 @@ open-cancel-contact-sales-modal) go-to-payments) :cta-text-with-icon (tr "subscription.settings.more-information") - :cta-link-with-icon go-to-pricing-page}]) + :cta-link-with-icon go-to-pricing-page + :current-plan false}]) (when (and (not= subscription-type "unlimited") cf/saas?) [:> plan-card* {:card-title (tr "subscription.settings.unlimited") @@ -699,7 +708,8 @@ :cta-text-with-icon (tr "subscription.settings.more-information") :cta-link-with-icon go-to-pricing-page :recommended (= subscription-type "professional") - :show-button-cta (= subscription-type "professional")}]) + :show-button-cta (= subscription-type "professional") + :current-plan false}]) (when (and (not= subscription-type "enterprise") cf/saas? (not (contains? cf/flags :nitrate))) [:> plan-card* {:card-title (tr "subscription.settings.enterprise") @@ -714,7 +724,8 @@ :cta-link #(open-subscription-modal "enterprise" subscription) :cta-text-with-icon (tr "subscription.settings.more-information") :cta-link-with-icon go-to-pricing-page - :show-button-cta (= subscription-type "professional")}]) + :show-button-cta (= subscription-type "professional") + :current-plan false}]) ;; TODO add translations for this texts when we have the definitive ones (when (and (contains? cf/flags :nitrate) (not nitrate?)) @@ -732,6 +743,7 @@ :cta-link-with-icon go-to-pricing-page :code-action :activate :show-button-cta (not nitrate-license) + :current-plan false :inline-error nitrate-start-error-message}])]]])) (mf/defc subscribe-nitrate-dialog diff --git a/frontend/src/app/main/ui/settings/subscription.scss b/frontend/src/app/main/ui/settings/subscription.scss index f8226eb420..ff89722ac2 100644 --- a/frontend/src/app/main/ui/settings/subscription.scss +++ b/frontend/src/app/main/ui/settings/subscription.scss @@ -83,6 +83,10 @@ border: $b-1 solid var(--color-accent-select); } +.plan-card-current { + border: $b-1 solid var(--color-foreground-secondary); +} + .plan-card-header { display: flex; justify-content: space-between; From 6d458c80a196c96b5aaa2be580dad25aa49f7b55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Wed, 1 Jul 2026 20:15:20 +0200 Subject: [PATCH 049/229] :bug: Fix font and variant dropdowns on mixed text styles (#10520) * :bug: Fix dropdown shown Mixed Font Families for same family with different variant * :bug: Fix variants dropdown appearing blank on mixed variants but same family * :sparkles: Add playwright test for mixed font families/variants --- .../get-file-10502-mixed-families.json | 372 ++++++++++++++++++ .../get-file-10502-mixed-variants.json | 372 ++++++++++++++++++ .../ui/specs/text-editor-v3.spec.js | 69 ++++ .../sidebar/options/menus/typography.cljs | 3 + frontend/src/app/render_wasm/serializers.cljs | 7 + frontend/src/app/render_wasm/text_editor.cljs | 47 ++- frontend/src/app/render_wasm/wasm.cljs | 1 + render-wasm/src/shapes/fonts.rs | 3 + render-wasm/src/state/text_editor.rs | 33 +- render-wasm/src/wasm/text_editor.rs | 47 +-- 10 files changed, 900 insertions(+), 54 deletions(-) create mode 100644 frontend/playwright/data/text-editor/get-file-10502-mixed-families.json create mode 100644 frontend/playwright/data/text-editor/get-file-10502-mixed-variants.json create mode 100644 frontend/playwright/ui/specs/text-editor-v3.spec.js diff --git a/frontend/playwright/data/text-editor/get-file-10502-mixed-families.json b/frontend/playwright/data/text-editor/get-file-10502-mixed-families.json new file mode 100644 index 0000000000..05a0b07fbe --- /dev/null +++ b/frontend/playwright/data/text-editor/get-file-10502-mixed-families.json @@ -0,0 +1,372 @@ +{ + "~:features": { + "~#set": [ + "fdata/path-data", + "plugins/runtime", + "design-tokens/v1", + "layout/grid", + "styles/v2", + "fdata/pointer-map", + "fdata/objects-map", + "render-wasm/v1", + "components/v2", + "fdata/shape-data-type", + "text-editor-wasm/v1" + ] + }, + "~:team-id": "~u1091e979-bbec-8194-8005-f7aa420b5660", + "~:permissions": { + "~:type": "~:membership", + "~:is-owner": true, + "~:is-admin": true, + "~:can-edit": true, + "~:can-read": true, + "~:is-logged": true + }, + "~:has-media-trimmed": false, + "~:comment-thread-seqn": 0, + "~:name": "simple-text", + "~:revn": 7, + "~:modified-at": "~m1749629891313", + "~:vern": 0, + "~:id": "~u3b0d758a-8c9d-8013-8006-52c8337e5c72", + "~:is-shared": false, + "~:migrations": { + "~#ordered-set": [ + "legacy-2", + "legacy-3", + "legacy-5", + "legacy-6", + "legacy-7", + "legacy-8", + "legacy-9", + "legacy-10", + "legacy-11", + "legacy-12", + "legacy-13", + "legacy-14", + "legacy-16", + "legacy-17", + "legacy-18", + "legacy-19", + "legacy-25", + "legacy-26", + "legacy-27", + "legacy-28", + "legacy-29", + "legacy-31", + "legacy-32", + "legacy-33", + "legacy-34", + "legacy-36", + "legacy-37", + "legacy-38", + "legacy-39", + "legacy-40", + "legacy-41", + "legacy-42", + "legacy-43", + "legacy-44", + "legacy-45", + "legacy-46", + "legacy-47", + "legacy-48", + "legacy-49", + "legacy-50", + "legacy-51", + "legacy-52", + "legacy-53", + "legacy-54", + "legacy-55", + "legacy-56", + "legacy-57", + "legacy-59", + "legacy-62", + "legacy-65", + "legacy-66", + "legacy-67", + "0001-remove-tokens-from-groups", + "0002-normalize-bool-content", + "0002-clean-shape-interactions", + "0003-fix-root-shape", + "0003-convert-path-content", + "0004-clean-shadow-and-colors", + "0005-deprecate-image-type", + "0006-fix-old-texts-fills", + "0007-clear-invalid-strokes-and-fills-v2", + "0008-fix-library-colors-opacity" + ] + }, + "~:version": 67, + "~:project-id": "~u1091e979-bbec-8194-8005-f7aa420b8b07", + "~:created-at": "~m1749629823499", + "~:data": { + "~:pages": [ + "~u3b0d758a-8c9d-8013-8006-52c8337e5c73" + ], + "~:pages-index": { + "~u3b0d758a-8c9d-8013-8006-52c8337e5c73": { + "~:objects": { + "~u00000000-0000-0000-0000-000000000000": { + "~#shape": { + "~:y": 0, + "~:hide-fill-on-export": false, + "~:transform": { + "~#matrix": { + "~:a": 1.0, + "~:b": 0.0, + "~:c": 0.0, + "~:d": 1.0, + "~:e": 0.0, + "~:f": 0.0 + } + }, + "~:rotation": 0, + "~:name": "Root Frame", + "~:width": 0.01, + "~:type": "~:frame", + "~:points": [ + { + "~#point": { + "~:x": 0.0, + "~:y": 0.0 + } + }, + { + "~#point": { + "~:x": 0.01, + "~:y": 0.0 + } + }, + { + "~#point": { + "~:x": 0.01, + "~:y": 0.01 + } + }, + { + "~#point": { + "~:x": 0.0, + "~:y": 0.01 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1.0, + "~:b": 0.0, + "~:c": 0.0, + "~:d": 1.0, + "~:e": 0.0, + "~:f": 0.0 + } + }, + "~:r3": 0, + "~:r1": 0, + "~:id": "~u00000000-0000-0000-0000-000000000000", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 0, + "~:proportion": 1.0, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 0, + "~:y": 0, + "~:width": 0.01, + "~:height": 0.01, + "~:x1": 0, + "~:y1": 0, + "~:x2": 0.01, + "~:y2": 0.01 + } + }, + "~:fills": [ + { + "~:fill-color": "#FFFFFF", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 0.01, + "~:flip-y": null, + "~:shapes": [ + "~u7274a6af-66db-8009-8006-52c837bed25d" + ] + } + }, + "~u7274a6af-66db-8009-8006-52c837bed25d": { + "~#shape": { + "~:y": 368.000005463652, + "~:transform": { + "~#matrix": { + "~:a": 1.0, + "~:b": 0.0, + "~:c": 0.0, + "~:d": 1.0, + "~:e": 0.0, + "~:f": 0.0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:auto-width", + "~:content": { + "~:type": "root", + "~:key": "13hr3ftth2o", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:typography-ref-id": null, + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "1qm8gi1rphc", + "~:font-size": "48", + "~:font-weight": "400", + "~:typography-ref-file": null, + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "Hello " + }, + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:typography-ref-id": null, + "~:text-transform": "none", + "~:font-id": "gfont-sora", + "~:key": "2qm8gi1rphd", + "~:font-size": "48", + "~:font-weight": "400", + "~:typography-ref-file": null, + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "Sora", + "~:text": "World" + } + ], + "~:typography-ref-id": null, + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "r8gahivbg7", + "~:font-size": "48", + "~:font-weight": "400", + "~:typography-ref-file": null, + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "this is a text", + "~:width": 237.0000390021974, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 414.9999714372273, + "~:y": 368.000005463652 + } + }, + { + "~#point": { + "~:x": 652.0000104394247, + "~:y": 368.000005463652 + } + }, + { + "~#point": { + "~:x": 652.0000104394247, + "~:y": 426.0000039162686 + } + }, + { + "~#point": { + "~:x": 414.9999714372273, + "~:y": 426.0000039162686 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1.0, + "~:b": 0.0, + "~:c": 0.0, + "~:d": 1.0, + "~:e": 0.0, + "~:f": 0.0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:id": "~u7274a6af-66db-8009-8006-52c837bed25d", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:x": 414.9999714372274, + "~:selrect": { + "~#rect": { + "~:x": 414.9999714372274, + "~:y": 368.000005463652, + "~:width": 237.0000390021974, + "~:height": 57.99999845261664, + "~:x1": 414.9999714372274, + "~:y1": 368.000005463652, + "~:x2": 652.0000104394248, + "~:y2": 426.0000039162686 + } + }, + "~:flip-x": null, + "~:height": 57.99999845261664, + "~:flip-y": null + } + } + }, + "~:id": "~u3b0d758a-8c9d-8013-8006-52c8337e5c73", + "~:name": "Page 1" + } + }, + "~:id": "~u3b0d758a-8c9d-8013-8006-52c8337e5c72", + "~:options": { + "~:components-v2": true, + "~:base-font-size": "16px" + } + } +} \ No newline at end of file diff --git a/frontend/playwright/data/text-editor/get-file-10502-mixed-variants.json b/frontend/playwright/data/text-editor/get-file-10502-mixed-variants.json new file mode 100644 index 0000000000..d26099ef68 --- /dev/null +++ b/frontend/playwright/data/text-editor/get-file-10502-mixed-variants.json @@ -0,0 +1,372 @@ +{ + "~:features": { + "~#set": [ + "fdata/path-data", + "plugins/runtime", + "design-tokens/v1", + "layout/grid", + "styles/v2", + "fdata/pointer-map", + "fdata/objects-map", + "render-wasm/v1", + "components/v2", + "fdata/shape-data-type", + "text-editor-wasm/v1" + ] + }, + "~:team-id": "~u1091e979-bbec-8194-8005-f7aa420b5660", + "~:permissions": { + "~:type": "~:membership", + "~:is-owner": true, + "~:is-admin": true, + "~:can-edit": true, + "~:can-read": true, + "~:is-logged": true + }, + "~:has-media-trimmed": false, + "~:comment-thread-seqn": 0, + "~:name": "simple-text", + "~:revn": 7, + "~:modified-at": "~m1749629891313", + "~:vern": 0, + "~:id": "~u3b0d758a-8c9d-8013-8006-52c8337e5c72", + "~:is-shared": false, + "~:migrations": { + "~#ordered-set": [ + "legacy-2", + "legacy-3", + "legacy-5", + "legacy-6", + "legacy-7", + "legacy-8", + "legacy-9", + "legacy-10", + "legacy-11", + "legacy-12", + "legacy-13", + "legacy-14", + "legacy-16", + "legacy-17", + "legacy-18", + "legacy-19", + "legacy-25", + "legacy-26", + "legacy-27", + "legacy-28", + "legacy-29", + "legacy-31", + "legacy-32", + "legacy-33", + "legacy-34", + "legacy-36", + "legacy-37", + "legacy-38", + "legacy-39", + "legacy-40", + "legacy-41", + "legacy-42", + "legacy-43", + "legacy-44", + "legacy-45", + "legacy-46", + "legacy-47", + "legacy-48", + "legacy-49", + "legacy-50", + "legacy-51", + "legacy-52", + "legacy-53", + "legacy-54", + "legacy-55", + "legacy-56", + "legacy-57", + "legacy-59", + "legacy-62", + "legacy-65", + "legacy-66", + "legacy-67", + "0001-remove-tokens-from-groups", + "0002-normalize-bool-content", + "0002-clean-shape-interactions", + "0003-fix-root-shape", + "0003-convert-path-content", + "0004-clean-shadow-and-colors", + "0005-deprecate-image-type", + "0006-fix-old-texts-fills", + "0007-clear-invalid-strokes-and-fills-v2", + "0008-fix-library-colors-opacity" + ] + }, + "~:version": 67, + "~:project-id": "~u1091e979-bbec-8194-8005-f7aa420b8b07", + "~:created-at": "~m1749629823499", + "~:data": { + "~:pages": [ + "~u3b0d758a-8c9d-8013-8006-52c8337e5c73" + ], + "~:pages-index": { + "~u3b0d758a-8c9d-8013-8006-52c8337e5c73": { + "~:objects": { + "~u00000000-0000-0000-0000-000000000000": { + "~#shape": { + "~:y": 0, + "~:hide-fill-on-export": false, + "~:transform": { + "~#matrix": { + "~:a": 1.0, + "~:b": 0.0, + "~:c": 0.0, + "~:d": 1.0, + "~:e": 0.0, + "~:f": 0.0 + } + }, + "~:rotation": 0, + "~:name": "Root Frame", + "~:width": 0.01, + "~:type": "~:frame", + "~:points": [ + { + "~#point": { + "~:x": 0.0, + "~:y": 0.0 + } + }, + { + "~#point": { + "~:x": 0.01, + "~:y": 0.0 + } + }, + { + "~#point": { + "~:x": 0.01, + "~:y": 0.01 + } + }, + { + "~#point": { + "~:x": 0.0, + "~:y": 0.01 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1.0, + "~:b": 0.0, + "~:c": 0.0, + "~:d": 1.0, + "~:e": 0.0, + "~:f": 0.0 + } + }, + "~:r3": 0, + "~:r1": 0, + "~:id": "~u00000000-0000-0000-0000-000000000000", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 0, + "~:proportion": 1.0, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 0, + "~:y": 0, + "~:width": 0.01, + "~:height": 0.01, + "~:x1": 0, + "~:y1": 0, + "~:x2": 0.01, + "~:y2": 0.01 + } + }, + "~:fills": [ + { + "~:fill-color": "#FFFFFF", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 0.01, + "~:flip-y": null, + "~:shapes": [ + "~u7274a6af-66db-8009-8006-52c837bed25d" + ] + } + }, + "~u7274a6af-66db-8009-8006-52c837bed25d": { + "~#shape": { + "~:y": 368.000005463652, + "~:transform": { + "~#matrix": { + "~:a": 1.0, + "~:b": 0.0, + "~:c": 0.0, + "~:d": 1.0, + "~:e": 0.0, + "~:f": 0.0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:auto-width", + "~:content": { + "~:type": "root", + "~:key": "13hr3ftth2o", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:typography-ref-id": null, + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "1qm8gi1rphc", + "~:font-size": "48", + "~:font-weight": "400", + "~:typography-ref-file": null, + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "Hello " + }, + { + "~:line-height": "1.2", + "~:font-style": "italic", + "~:typography-ref-id": null, + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "2qm8gi1rphd", + "~:font-size": "48", + "~:font-weight": "600", + "~:typography-ref-file": null, + "~:font-variant-id": "600italic", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "World" + } + ], + "~:typography-ref-id": null, + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "r8gahivbg7", + "~:font-size": "48", + "~:font-weight": "400", + "~:typography-ref-file": null, + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "this is a text", + "~:width": 237.0000390021974, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 414.9999714372273, + "~:y": 368.000005463652 + } + }, + { + "~#point": { + "~:x": 652.0000104394247, + "~:y": 368.000005463652 + } + }, + { + "~#point": { + "~:x": 652.0000104394247, + "~:y": 426.0000039162686 + } + }, + { + "~#point": { + "~:x": 414.9999714372273, + "~:y": 426.0000039162686 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1.0, + "~:b": 0.0, + "~:c": 0.0, + "~:d": 1.0, + "~:e": 0.0, + "~:f": 0.0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:id": "~u7274a6af-66db-8009-8006-52c837bed25d", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:x": 414.9999714372274, + "~:selrect": { + "~#rect": { + "~:x": 414.9999714372274, + "~:y": 368.000005463652, + "~:width": 237.0000390021974, + "~:height": 57.99999845261664, + "~:x1": 414.9999714372274, + "~:y1": 368.000005463652, + "~:x2": 652.0000104394248, + "~:y2": 426.0000039162686 + } + }, + "~:flip-x": null, + "~:height": 57.99999845261664, + "~:flip-y": null + } + } + }, + "~:id": "~u3b0d758a-8c9d-8013-8006-52c8337e5c73", + "~:name": "Page 1" + } + }, + "~:id": "~u3b0d758a-8c9d-8013-8006-52c8337e5c72", + "~:options": { + "~:components-v2": true, + "~:base-font-size": "16px" + } + } +} \ No newline at end of file diff --git a/frontend/playwright/ui/specs/text-editor-v3.spec.js b/frontend/playwright/ui/specs/text-editor-v3.spec.js new file mode 100644 index 0000000000..90b2316a88 --- /dev/null +++ b/frontend/playwright/ui/specs/text-editor-v3.spec.js @@ -0,0 +1,69 @@ +import { test, expect } from "@playwright/test"; +import { WasmWorkspacePage } from "../pages/WasmWorkspacePage"; + +const FILE = { + id: "3b0d758a-8c9d-8013-8006-52c8337e5c72", + pageId: "3b0d758a-8c9d-8013-8006-52c8337e5c73", +}; + +test.beforeEach(async ({ page }) => { + await WasmWorkspacePage.init(page); + // WASM_FLAGS already enables render-wasm; add the WASM text editor on top. + await WasmWorkspacePage.mockConfigFlags(page, ["enable-feature-text-editor-wasm"]); +}); + +async function openEditorAndSelectAll(workspace) { + await workspace.clickLeafLayer("this is a text"); + // Enter edit mode (waits until the typography controls are ready) and then + // select every character so the sidebar reflects the combined styles of the + // whole text via the WASM editor path. + await workspace.textEditor.startEditing(); + await workspace.page.keyboard.press("ControlOrMeta+a"); +} + +test.describe("BUG 10502 - Mixed families and variants", () => { + test("Multiple variants of the same font family", async ({ + page, + }) => { + const workspace = new WasmWorkspacePage(page, { textEditor: true }); + await workspace.setupEmptyFile(); + await workspace.mockGetFile("text-editor/get-file-10502-mixed-variants.json"); + + await workspace.goToWorkspace(FILE); + await workspace.waitForFirstRender(); + + await openEditorAndSelectAll(workspace); + + // The whole selection shares a single font family, so it must be shown even + // though the variants differ. + const fontFamily = workspace.rightSidebar.getByTitle("Font Family"); + await expect(fontFamily).toContainText("Source Sans Pro"); + + // The variants differ across the selection, so the variant dropdown shows the + // "mixed" placeholder. + const fontVariant = workspace.rightSidebar + .getByTitle("Font Style") + .getByRole("combobox"); + await expect(fontVariant).toHaveText("--"); + }); + + test("Mixed font families appear as such in the dropdown", async ({ page }) => { + const workspace = new WasmWorkspacePage(page, { textEditor: true }); + await workspace.setupEmptyFile(); + await workspace.mockGetFile("text-editor/get-file-10502-mixed-families.json"); + // Serve a stand-in TTF for Sora so the render doesn't wait on a real fetch. + // Glyphs are irrelevant here: the assertion only inspects the sidebar. + await workspace.mockGoogleFont("sora", "render-wasm/assets/ebgaramond.ttf"); + + await workspace.goToWorkspace(FILE); + await workspace.waitForFirstRender(); + + await openEditorAndSelectAll(workspace); + + // The selection mixes two different font families (Source Sans Pro and Sora), + // so the font family dropdown reports it as mixed. + const fontFamily = workspace.rightSidebar.getByTitle("Font Family"); + await expect(fontFamily).toContainText("Mixed Font Families"); + }); +}); + diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.cljs index 5c96b00077..e5ee3647bd 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.cljs @@ -360,6 +360,9 @@ {:value (:id variant) :key (pr-str variant) :label (:name variant)}))) + ;; When the selection mixes variants we prepend a "--" entry: it is + ;; shown as the collapsed value (nothing single is selected) while + ;; the real variants of the resolved font are still listed below it. variant-options (if (or (= font-variant-id :multiple) (= font-variant-id "mixed")) (conj basic-variant-options {:value "" diff --git a/frontend/src/app/render_wasm/serializers.cljs b/frontend/src/app/render_wasm/serializers.cljs index f30f12d81c..3cc62c3c0c 100644 --- a/frontend/src/app/render_wasm/serializers.cljs +++ b/frontend/src/app/render_wasm/serializers.cljs @@ -286,6 +286,13 @@ default (unchecked-get values "parent")] (d/nilv (unchecked-get values (d/name kind)) default))) + +(defn translate-multiple-state + [multiple-state] + (let [values (unchecked-get wasm/serializers "multiple-state") + default (unchecked-get values "undefined")] + (d/nilv (unchecked-get values (d/name multiple-state)) default))) + ;; --- Guides ;; Each guide is serialized as 5 x 32-bit words: diff --git a/frontend/src/app/render_wasm/text_editor.cljs b/frontend/src/app/render_wasm/text_editor.cljs index 25d02211da..574ec1a72b 100644 --- a/frontend/src/app/render_wasm/text_editor.cljs +++ b/frontend/src/app/render_wasm/text_editor.cljs @@ -13,8 +13,11 @@ [app.render-wasm.api.fonts :as fonts] [app.render-wasm.helpers :as h] [app.render-wasm.mem :as mem] + [app.render-wasm.serializers :as sr] [app.render-wasm.wasm :as wasm])) +(def multiple-state-multiple (sr/translate-multiple-state :multiple)) + (def ^:const TEXT_EDITOR_STYLES_METADATA_SIZE (* 31 4)) (def ^:const TEXT_EDITOR_STYLES_FILL_SOLID 0) (def ^:const TEXT_EDITOR_STYLES_FILL_LINEAR_GRADIENT 1) @@ -260,33 +263,41 @@ text-direction-state (aget heap-u32 (+ u32-offset 2)) text-decoration-state (aget heap-u32 (+ u32-offset 3)) text-transform-state (aget heap-u32 (+ u32-offset 4)) - font-family-state (aget heap-u32 (+ u32-offset 5)) + font-family-id-state (aget heap-u32 (+ u32-offset 5)) font-size-state (aget heap-u32 (+ u32-offset 6)) font-weight-state (aget heap-u32 (+ u32-offset 7)) - font-variant-id-state (aget heap-u32 (+ u32-offset 8)) + ;; Unused: the variant id is stored as a zero uuid for every span + _font-variant-id-state (aget heap-u32 (+ u32-offset 8)) line-height-state (aget heap-u32 (+ u32-offset 9)) letter-spacing-state (aget heap-u32 (+ u32-offset 10)) - num-fills (aget heap-u32 (+ u32-offset 11)) - multiple-fills (aget heap-u32 (+ u32-offset 12)) + font-style-state (aget heap-u32 (+ u32-offset 11)) + num-fills (aget heap-u32 (+ u32-offset 12)) + multiple-fills (aget heap-u32 (+ u32-offset 13)) - text-align-value (aget heap-u32 (+ u32-offset 13)) - text-direction-value (aget heap-u32 (+ u32-offset 14)) - text-decoration-value (aget heap-u32 (+ u32-offset 15)) - text-transform-value (aget heap-u32 (+ u32-offset 16)) - font-family-id-a (aget heap-u32 (+ u32-offset 17)) - font-family-id-b (aget heap-u32 (+ u32-offset 18)) - font-family-id-c (aget heap-u32 (+ u32-offset 19)) - font-family-id-d (aget heap-u32 (+ u32-offset 20)) + text-align-value (aget heap-u32 (+ u32-offset 14)) + text-direction-value (aget heap-u32 (+ u32-offset 15)) + text-decoration-value (aget heap-u32 (+ u32-offset 16)) + text-transform-value (aget heap-u32 (+ u32-offset 17)) + font-family-id-a (aget heap-u32 (+ u32-offset 18)) + font-family-id-b (aget heap-u32 (+ u32-offset 19)) + font-family-id-c (aget heap-u32 (+ u32-offset 20)) + font-family-id-d (aget heap-u32 (+ u32-offset 21)) font-family-id-value (uuid/from-unsigned-parts font-family-id-a font-family-id-b font-family-id-c font-family-id-d) - font-family-style-value (aget heap-u32 (+ u32-offset 21)) - _font-family-weight-value (aget heap-u32 (+ u32-offset 22)) + font-style-raw-value (aget heap-u32 (+ u32-offset 22)) font-size-value (aget heap-f32 (+ u32-offset 23)) font-weight-value (aget heap-i32 (+ u32-offset 24)) line-height-value (aget heap-f32 (+ u32-offset 29)) letter-spacing-value (aget heap-f32 (+ u32-offset 30)) font-id (fonts/uuid->font-id font-family-id-value) - font-style-value (text-editor-translate-font-style (text-editor-get-style-property font-family-state font-family-style-value)) + font-style-value (text-editor-translate-font-style (text-editor-get-style-property font-style-state font-style-raw-value)) font-variant-id-computed (text-editor-compute-font-variant-id font-id font-weight-value font-style-value) + ;; A font variant is defined by its family + weight + style, so it + ;; is "mixed" when any of those is mixed. When the family itself is + ;; mixed there is no single font to resolve variants against, so we + ;; also report the variant as mixed. + font-variant-multiple? (or (= font-family-id-state multiple-state-multiple) + (= font-weight-state multiple-state-multiple) + (= font-style-state multiple-state-multiple)) fills (->> (range num-fills) (map (fn [idx] @@ -313,9 +324,9 @@ :font-size (text-editor-get-style-property font-size-state font-size-value) :font-weight (text-editor-get-style-property font-weight-state font-weight-value) :font-style font-style-value - :font-family (text-editor-get-style-property font-family-state font-id) - :font-id (text-editor-get-style-property font-family-state font-id) - :font-variant-id (text-editor-get-style-property font-variant-id-state font-variant-id-computed) + :font-family (text-editor-get-style-property font-family-id-state font-id) + :font-id (text-editor-get-style-property font-family-id-state font-id) + :font-variant-id (if font-variant-multiple? :multiple font-variant-id-computed) :typography-ref-file nil :typography-ref-id nil :selected-colors selected-colors diff --git a/frontend/src/app/render_wasm/wasm.cljs b/frontend/src/app/render_wasm/wasm.cljs index cf394896ed..77d8726347 100644 --- a/frontend/src/app/render_wasm/wasm.cljs +++ b/frontend/src/app/render_wasm/wasm.cljs @@ -75,6 +75,7 @@ :text-direction shared/RawTextDirection :text-decoration shared/RawTextDecoration :text-transform shared/RawTextTransform + :multiple-state shared/MultipleState :transform-entry-kind shared/RawTransformEntryKind :segment-data shared/RawSegmentData :stroke-linecap shared/RawStrokeLineCap diff --git a/render-wasm/src/shapes/fonts.rs b/render-wasm/src/shapes/fonts.rs index f4da4daa6c..56dbe10e59 100644 --- a/render-wasm/src/shapes/fonts.rs +++ b/render-wasm/src/shapes/fonts.rs @@ -38,9 +38,12 @@ impl FontFamily { pub fn id(&self) -> Uuid { self.id } + pub fn style(&self) -> FontStyle { self.style } + + #[allow(dead_code)] pub fn weight(&self) -> u32 { self.weight } diff --git a/render-wasm/src/state/text_editor.rs b/render-wasm/src/state/text_editor.rs index 8277bfc832..3216586998 100644 --- a/render-wasm/src/state/text_editor.rs +++ b/render-wasm/src/state/text_editor.rs @@ -3,7 +3,7 @@ use macros::ToJs; use crate::shapes::{ - Fill, FontFamily, TextAlign, TextContent, TextDecoration, TextDirection, + Fill, FontStyle, TextAlign, TextContent, TextDecoration, TextDirection, TextPositionWithAffinity, TextTransform, VerticalAlign, }; use crate::uuid::Uuid; @@ -88,6 +88,7 @@ impl TextSelection { } /// Events that the text editor can emit for frontend synchronization +/// FIXME: the serialization should be in the wasm module #[repr(u8)] #[derive(Debug, Clone, Copy, PartialEq, Eq, ToJs)] pub enum TextEditorEvent { @@ -111,7 +112,12 @@ pub struct TextEditorStyles { pub text_direction: Multiple, // Multiple pub text_decoration: Multiple, pub text_transform: Multiple, - pub font_family: Multiple, + // The font family is decomposed into its independent parts so the family + // dropdown shows a single family even when the selection mixes variants of + // the same family (e.g. regular + bold italic). The id identifies the + // family; weight is tracked by `font_weight`; only the style is left here. + pub font_family_id: Multiple, + pub font_style: Multiple, pub font_size: Multiple, pub font_weight: Multiple, pub font_variant_id: Multiple, @@ -121,7 +127,8 @@ pub struct TextEditorStyles { pub fills: Vec, } -#[derive(Debug, Clone, Copy, PartialEq)] +// FIXME: the serialization should be in the wasm module +#[derive(Debug, Clone, Copy, PartialEq, ToJs)] #[repr(u8)] pub enum MultipleState { Undefined = 0, @@ -228,7 +235,8 @@ impl TextEditorStyles { text_direction: Multiple::empty(), text_decoration: Multiple::empty(), text_transform: Multiple::empty(), - font_family: Multiple::empty(), + font_family_id: Multiple::empty(), + font_style: Multiple::empty(), font_size: Multiple::empty(), font_weight: Multiple::empty(), font_variant_id: Multiple::empty(), @@ -244,7 +252,8 @@ impl TextEditorStyles { self.text_direction.reset(); self.text_decoration.reset(); self.text_transform.reset(); - self.font_family.reset(); + self.font_family_id.reset(); + self.font_style.reset(); self.font_size.reset(); self.font_weight.reset(); self.font_variant_id.reset(); @@ -614,8 +623,11 @@ impl TextEditorState { .text_transform .merge(span.text_transform); self.current_styles - .font_family - .merge(Some(span.font_family)); + .font_family_id + .merge(Some(span.font_family.id())); + self.current_styles + .font_style + .merge(Some(span.font_family.style())); self.current_styles.font_size.merge(Some(span.font_size)); self.current_styles .font_weight @@ -667,8 +679,11 @@ impl TextEditorState { .text_transform .set_single(text_span.text_transform); self.current_styles - .font_family - .set_single(Some(text_span.font_family)); + .font_family_id + .set_single(Some(text_span.font_family.id())); + self.current_styles + .font_style + .set_single(Some(text_span.font_family.style())); self.current_styles .font_size .set_single(Some(text_span.font_size)); diff --git a/render-wasm/src/wasm/text_editor.rs b/render-wasm/src/wasm/text_editor.rs index 189bbd8713..1ee391b40b 100644 --- a/render-wasm/src/wasm/text_editor.rs +++ b/render-wasm/src/wasm/text_editor.rs @@ -722,27 +722,20 @@ pub extern "C" fn text_editor_get_current_styles() -> *mut u8 { .unwrap_or(RawTextTransform::None as u32); let font_family_id = styles - .font_family + .font_family_id .value() .as_ref() .map(|value| { - let (a, b, c, d) = uuid_to_u32_quartet(&value.id()); + let (a, b, c, d) = uuid_to_u32_quartet(value); [a, b, c, d] }) .unwrap_or_default(); - let font_family_weight = styles - .font_family + let font_style = styles + .font_style .value() .as_ref() - .map(|value| value.weight()) - .unwrap_or_default(); - - let font_family_style = styles - .font_family - .value() - .as_ref() - .map(|value| value.style() as u32) + .map(|value| *value as u32) .unwrap_or_default(); let font_size = styles.font_size.value().unwrap_or(0.0); @@ -767,35 +760,35 @@ pub extern "C" fn text_editor_get_current_styles() -> *mut u8 { } } - // Layout: 48-byte fixed header + fixed values + serialized fills. + // Layout: 56-byte fixed header + fixed values + serialized fills. let mut bytes = Vec::with_capacity(132 + fill_bytes.len()); - // Header data // offset // index + // Header data (multiple-states) // offset // index bytes.extend_from_slice(&vertical_align.to_le_bytes()); // 0 // 0 bytes.extend_from_slice(&(*styles.text_align.state() as u32).to_le_bytes()); // 4 // 1 bytes.extend_from_slice(&(*styles.text_direction.state() as u32).to_le_bytes()); // 8 // 2 bytes.extend_from_slice(&(*styles.text_decoration.state() as u32).to_le_bytes()); // 12 // 3 bytes.extend_from_slice(&(*styles.text_transform.state() as u32).to_le_bytes()); // 16 // 4 - bytes.extend_from_slice(&(*styles.font_family.state() as u32).to_le_bytes()); // 20 // 5 + bytes.extend_from_slice(&(*styles.font_family_id.state() as u32).to_le_bytes()); // 20 // 5 bytes.extend_from_slice(&(*styles.font_size.state() as u32).to_le_bytes()); // 24 // 6 bytes.extend_from_slice(&(*styles.font_weight.state() as u32).to_le_bytes()); // 28 // 7 bytes.extend_from_slice(&(*styles.font_variant_id.state() as u32).to_le_bytes()); // 32 // 8 bytes.extend_from_slice(&(*styles.line_height.state() as u32).to_le_bytes()); // 36 // 9 bytes.extend_from_slice(&(*styles.letter_spacing.state() as u32).to_le_bytes()); // 40 // 10 - bytes.extend_from_slice(&fill_count.to_le_bytes()); // 44 // 11 - bytes.extend_from_slice(&(fill_multiple as u32).to_le_bytes()); // 48 // 12 + bytes.extend_from_slice(&(*styles.font_style.state() as u32).to_le_bytes()); // 44 // 11 + bytes.extend_from_slice(&fill_count.to_le_bytes()); // 48 // 12 + bytes.extend_from_slice(&(fill_multiple as u32).to_le_bytes()); // 52 // 13 // Value section. - bytes.extend_from_slice(&text_align.to_le_bytes()); // 52 // 13 - bytes.extend_from_slice(&text_direction.to_le_bytes()); // 56 // 14 - bytes.extend_from_slice(&text_decoration.to_le_bytes()); // 60 // 15 - bytes.extend_from_slice(&text_transform.to_le_bytes()); // 64 // 16 - bytes.extend_from_slice(&font_family_id[0].to_le_bytes()); // 68 // 17 - bytes.extend_from_slice(&font_family_id[1].to_le_bytes()); // 72 // 18 - bytes.extend_from_slice(&font_family_id[2].to_le_bytes()); // 76 // 19 - bytes.extend_from_slice(&font_family_id[3].to_le_bytes()); // 80 // 20 - bytes.extend_from_slice(&font_family_style.to_le_bytes()); // 84 // 21 - bytes.extend_from_slice(&font_family_weight.to_le_bytes()); // 88 // 22 + bytes.extend_from_slice(&text_align.to_le_bytes()); // 56 // 14 + bytes.extend_from_slice(&text_direction.to_le_bytes()); // 60 // 15 + bytes.extend_from_slice(&text_decoration.to_le_bytes()); // 64 // 16 + bytes.extend_from_slice(&text_transform.to_le_bytes()); // 68 // 17 + bytes.extend_from_slice(&font_family_id[0].to_le_bytes()); // 72 // 18 + bytes.extend_from_slice(&font_family_id[1].to_le_bytes()); // 76 // 19 + bytes.extend_from_slice(&font_family_id[2].to_le_bytes()); // 80 // 20 + bytes.extend_from_slice(&font_family_id[3].to_le_bytes()); // 84 // 21 + bytes.extend_from_slice(&font_style.to_le_bytes()); // 88 // 22 bytes.extend_from_slice(&font_size.to_le_bytes()); // 92 // 23 bytes.extend_from_slice(&font_weight.to_le_bytes()); // 96 // 24 bytes.extend_from_slice(&font_variant_id[0].to_le_bytes()); // 100 // 25 From b3585428bd583a032909d475f6e2e6f7f78ccf0a Mon Sep 17 00:00:00 2001 From: DoubleCat Date: Wed, 1 Jul 2026 11:00:37 +0200 Subject: [PATCH 050/229] :globe_with_meridians: Add translations for: Chinese (Simplified Han script) Currently translated at 79.4% (1882 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/zh_Hans/ --- frontend/translations/zh_CN.po | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/translations/zh_CN.po b/frontend/translations/zh_CN.po index 1de4b0d86e..87c921e009 100644 --- a/frontend/translations/zh_CN.po +++ b/frontend/translations/zh_CN.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-28 10:01+0000\n" +"PO-Revision-Date: 2026-07-02 01:01+0000\n" "Last-Translator: DoubleCat \n" "Language-Team: Chinese (Simplified Han script) \n" @@ -7793,4 +7793,8 @@ msgstr "剪贴板API不可用。请通过HTTPS启动Penpot以启用剪贴板访 #: src/app/main/data/workspace/clipboard.cljs:321, src/app/main/data/workspace/clipboard.cljs:529 msgid "errors.clipboard-permission-denied" -msgstr "剪贴板访问被拒绝。请在浏览器中允许剪贴板权限以粘贴内容。" +msgstr "剪贴板访问被拒绝。请在浏览器中允许剪贴板权限以粘贴内容" + +#: src/app/main/ui/dashboard/fonts.cljs:341 +msgid "errors.font-family-invalid-chars" +msgstr "字体家族名称只能包含字母、数字、空格、连字符、下划线和点。" From 40091924e2e82debbf11c05c6de4eae392b2ca61 Mon Sep 17 00:00:00 2001 From: Stephan Paternotte Date: Wed, 1 Jul 2026 22:44:27 +0200 Subject: [PATCH 051/229] :globe_with_meridians: Add translations for: Dutch Currently translated at 99.7% (2364 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/nl/ --- frontend/translations/nl.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/translations/nl.po b/frontend/translations/nl.po index b7b45fba58..86deb9bbb9 100644 --- a/frontend/translations/nl.po +++ b/frontend/translations/nl.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-27 07:01+0000\n" +"PO-Revision-Date: 2026-07-02 01:01+0000\n" "Last-Translator: Stephan Paternotte \n" "Language-Team: Dutch \n" @@ -3025,7 +3025,7 @@ msgstr "Versie %s opmerkingen" #: src/app/main/ui/workspace/sidebar/sitemap.cljs:298 msgid "labels.view-only" -msgstr "ALLEEN BEKIJKEN" +msgstr "Alleen weergeven" #: src/app/main/ui/dashboard/team.cljs:146, src/app/main/ui/dashboard/team.cljs:396, src/app/main/ui/dashboard/team.cljs:647, src/app/main/ui/dashboard/team.cljs:683, src/app/main/ui/onboarding/team_choice.cljs:69 msgid "labels.viewer" @@ -4039,7 +4039,7 @@ msgstr "Hoe groot is je bedrijf?" #: src/app/main/ui/onboarding/questions.cljs:242 msgid "onboarding.questions.step3.title" -msgstr "Vertel ons over je baan" +msgstr "Wat is je bedrijfsgrootte?" #: src/app/main/ui/onboarding/questions.cljs:300 msgid "onboarding.questions.step4.title" @@ -7771,7 +7771,7 @@ msgstr "Maskers" #: src/app/main/ui/workspace/sidebar/layers.cljs:566 msgid "workspace.sidebar.layers.search" -msgstr "Lagen doorzoeken" +msgstr "Zoeken…" #: src/app/main/ui/workspace/sidebar/layers.cljs:639, src/app/main/ui/workspace/sidebar/layers.cljs:733 msgid "workspace.sidebar.layers.shapes" From 30e17eb076638270c78d11fe8e743ae89461a256 Mon Sep 17 00:00:00 2001 From: Alexis Morin Date: Wed, 1 Jul 2026 02:40:56 +0200 Subject: [PATCH 052/229] :globe_with_meridians: Add translations for: French (Canada) Currently translated at 99.0% (2347 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr_CA/ --- frontend/translations/fr_CA.po | 82 ++++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 3 deletions(-) diff --git a/frontend/translations/fr_CA.po b/frontend/translations/fr_CA.po index 165f18fcf8..18692bc673 100644 --- a/frontend/translations/fr_CA.po +++ b/frontend/translations/fr_CA.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-22 07:30+0000\n" +"PO-Revision-Date: 2026-07-02 01:01+0000\n" "Last-Translator: Alexis Morin \n" -"Language-Team: French (Canada) " -"\n" +"Language-Team: French (Canada) \n" "Language: fr_CA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" @@ -10055,3 +10055,79 @@ msgstr "Les versions auto-sauvegardées seront conservées pendant %s jours." #, unused msgid "workspace.viewport.click-to-close-path" msgstr "Cliquer pour fermer le chemin" + +#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 +msgid "auth.check-email" +msgstr "Vérifie ta boîte courriel!" + +#: src/app/main/ui/auth/register.cljs:238 +msgid "auth.verification-sent-email" +msgstr "Nous avons envoyé un courriel de vérification à :" + +#: src/app/main/ui/inspect/attributes/blur.cljs:30, src/app/main/ui/inspect/styles/style_box.cljs:32, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:262, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:274 +msgid "labels.blur-effects" +msgstr "Effets de flou" + +#: src/app/main/ui/onboarding/questions.cljs:226 +msgid "onboarding.questions.team-size.1001-5000" +msgstr "1 001 à 5 000" + +#: src/app/main/ui/onboarding/questions.cljs:222 +msgid "onboarding.questions.team-size.101-500" +msgstr "101 à 500" + +#: src/app/main/ui/onboarding/questions.cljs:220 +msgid "onboarding.questions.team-size.2-100" +msgstr "2 à 100" + +#: src/app/main/ui/onboarding/questions.cljs:224 +msgid "onboarding.questions.team-size.501-1000" +msgstr "501 à 1 000" + +#: src/app/main/ui/onboarding/questions.cljs:218 +msgid "onboarding.questions.team-size.just-me" +msgstr "Seulement moi" + +#: src/app/main/ui/onboarding/questions.cljs:228 +msgid "onboarding.questions.team-size.more-than-5001" +msgstr "5 001+" + +#: src/app/main/ui/dashboard/subscription.cljs:229 +msgid "subscription.dashboard.banner.renew" +msgstr "Renouveler" + +#: src/app/main/ui/dashboard/subscription.cljs:216 +msgid "subscription.dashboard.banner.renew-subscription" +msgstr "Renouveler l'abonnement" + +#: src/app/main/ui/dashboard/subscription.cljs:222 +msgid "subscription.dashboard.banner.subscription-expire-days" +msgstr "Ton abonnement Enterprise expire dans %s jours (%s)" + +#: src/app/main/ui/dashboard/subscription.cljs:220 +msgid "subscription.dashboard.banner.subscription-expired" +msgstr "Ton abonnement Enterprise a expiré. (%s)" + +#: src/app/main/ui/workspace/main_menu.cljs:421 +msgid "workspace.header.menu.hide-comments" +msgstr "Masquer les commentaires" + +#, unused +msgid "workspace.toast.comments-visible" +msgstr "Commentaires visibles" + +#: src/app/main/ui/workspace/top_toolbar.cljs:65, src/app/main/ui/workspace/top_toolbar.cljs:66, src/app/main/ui/workspace/top_toolbar.cljs:77 +msgid "workspace.toolbar.mcp" +msgstr "MCP" + +#: src/app/main/ui/workspace/top_toolbar.cljs:87 +msgid "workspace.toolbar.mcp-connect-here" +msgstr "Se connecter ici" + +#: src/app/main/ui/workspace/top_toolbar.cljs:84 +msgid "workspace.toolbar.mcp-connected" +msgstr "MCP connecté" + +#: src/app/main/ui/workspace/palette.cljs:166 +msgid "workspace.toolbar.palette-bar" +msgstr "Barre de palettes" From 2e32a8743ea98395c6e8712ef49cdcfd9d721cc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Fri, 3 Jul 2026 08:37:22 +0200 Subject: [PATCH 053/229] :recycle: Refactor rulers into ui modules (#10461) * :recycle: Move rulers rendering to ui submodule * :recycle: Refactor RulerState into UIState --- render-wasm/src/render.rs | 5 +- render-wasm/src/render/ui.rs | 11 ++-- render-wasm/src/render/{ => ui}/rulers.rs | 2 +- render-wasm/src/state.rs | 3 +- render-wasm/src/state/rulers.rs | 42 --------------- render-wasm/src/state/ui.rs | 63 +++++++++++++++++++++-- render-wasm/src/ui.rs | 3 +- render-wasm/src/wasm.rs | 1 - render-wasm/src/wasm/rulers.rs | 49 ------------------ render-wasm/src/wasm/ui.rs | 45 +++++++++++++++- 10 files changed, 117 insertions(+), 107 deletions(-) rename render-wasm/src/render/{ => ui}/rulers.rs (99%) delete mode 100644 render-wasm/src/state/rulers.rs delete mode 100644 render-wasm/src/wasm/rulers.rs diff --git a/render-wasm/src/render.rs b/render-wasm/src/render.rs index a75d2fcb8e..a45de5296f 100644 --- a/render-wasm/src/render.rs +++ b/render-wasm/src/render.rs @@ -7,7 +7,6 @@ pub mod grid_layout; mod images; mod options; pub mod pdf; -pub mod rulers; mod shadows; pub mod shape_renderer; mod strokes; @@ -30,7 +29,7 @@ use crate::shapes::{ all_with_ancestors, radius_to_sigma, Blur, BlurType, Corners, Fill, Shadow, Shape, SolidColor, Stroke, StrokeKind, TextContent, Type, }; -use crate::state::{RulerState, ShapesPoolMutRef, ShapesPoolRef}; +use crate::state::{ShapesPoolMutRef, ShapesPoolRef}; use crate::tiles::{self, PendingTiles, TileRect}; use crate::uuid::Uuid; use crate::view::Viewbox; @@ -374,7 +373,6 @@ pub(crate) struct RenderState { pub nested_blurs: Vec>, // FIXME: why is this an option? pub nested_shadows: Vec>, pub show_grid: Option, - pub rulers: RulerState, pub focus_mode: FocusMode, /// Viewer-only whitelist for fixed-scroll layer passes. pub include_filter: Option>, @@ -584,7 +582,6 @@ impl RenderState { nested_blurs: vec![], nested_shadows: vec![], show_grid: None, - rulers: RulerState::default(), focus_mode: FocusMode::new(), include_filter: None, viewer_render_root: None, diff --git a/render-wasm/src/render/ui.rs b/render-wasm/src/render/ui.rs index cf3f2d7963..19854df768 100644 --- a/render-wasm/src/render/ui.rs +++ b/render-wasm/src/render/ui.rs @@ -2,9 +2,10 @@ use skia_safe::{self as skia, Color4f}; use super::{RenderState, ShapesPoolRef, SurfaceId}; use crate::globals::get_ui_state; -use crate::render::{grid_layout, rulers}; +use crate::render::grid_layout; use crate::shapes::{Layout, Type}; pub mod guides; +pub mod rulers; pub fn render(render_state: &mut RenderState, shapes: ShapesPoolRef) { let canvas = render_state.surfaces.canvas(SurfaceId::UI); @@ -63,8 +64,12 @@ pub fn render(render_state: &mut RenderState, shapes: ShapesPoolRef) { } let viewbox = render_state.viewbox; - let ruler_state = render_state.rulers; - rulers::render(canvas, viewbox, &render_state.fonts, &ruler_state); + rulers::render( + canvas, + viewbox, + &render_state.fonts, + get_ui_state().ruler_state(), + ); // Width of the ruler bars in document coordinates. // Note that when rulers are hidden, guides are not shown either, so we diff --git a/render-wasm/src/render/rulers.rs b/render-wasm/src/render/ui/rulers.rs similarity index 99% rename from render-wasm/src/render/rulers.rs rename to render-wasm/src/render/ui/rulers.rs index 0d4fbd2379..16bf6f4acc 100644 --- a/render-wasm/src/render/rulers.rs +++ b/render-wasm/src/render/ui/rulers.rs @@ -9,7 +9,7 @@ use skia_safe::{self as skia, Color, Font, Paint, PaintStyle, PathFillType, Point, RRect, Rect}; -use super::fonts::FontStore; +use crate::render::fonts::FontStore; use crate::state::RulerState; use crate::view::Viewbox; diff --git a/render-wasm/src/state.rs b/render-wasm/src/state.rs index 2ae6ba4067..c38b604592 100644 --- a/render-wasm/src/state.rs +++ b/render-wasm/src/state.rs @@ -1,13 +1,12 @@ use skia_safe::{self as skia, textlayout::FontCollection, Path, Point}; use std::collections::HashMap; -mod rulers; mod shapes_pool; mod text_editor; mod ui; -pub use rulers::RulerState; pub use shapes_pool::{ShapesPool, ShapesPoolMutRef, ShapesPoolRef}; pub use text_editor::*; +pub use ui::RulerState; pub use ui::UIState; use crate::error::{Error, Result}; diff --git a/render-wasm/src/state/rulers.rs b/render-wasm/src/state/rulers.rs deleted file mode 100644 index c17cd46a71..0000000000 --- a/render-wasm/src/state/rulers.rs +++ /dev/null @@ -1,42 +0,0 @@ -use skia_safe::{self as skia, Rect}; - -#[derive(Debug, Clone, Copy)] -pub struct RulerState { - pub visible: bool, - // The rounded canvas frame/border. Drawn even when `visible` is false - // (rulers toggled off), but hidden in hide-UI mode. - pub frame: bool, - pub offset_x: f32, - pub offset_y: f32, - pub selection: Option, - pub bg_color: skia::Color, - pub border_color: skia::Color, - pub label_color: skia::Color, - pub accent_color: skia::Color, -} - -impl Default for RulerState { - fn default() -> Self { - Self { - visible: false, - frame: true, - offset_x: 0.0, - offset_y: 0.0, - selection: None, - bg_color: skia::Color::from_argb(0xff, 0x18, 0x18, 0x1a), - border_color: skia::Color::from_argb(0xff, 0x2e, 0x2e, 0x36), - label_color: skia::Color::from_argb(0xff, 0xb1, 0xb2, 0xb5), - accent_color: skia::Color::from_argb(0xff, 0x91, 0xff, 0x11), - } - } -} - -impl RulerState { - pub fn set_selection(&mut self, has: bool, x: f32, y: f32, w: f32, h: f32) { - self.selection = if has { - Some(Rect::from_xywh(x, y, w, h)) - } else { - None - }; - } -} diff --git a/render-wasm/src/state/ui.rs b/render-wasm/src/state/ui.rs index 607dc3117b..d29645cc02 100644 --- a/render-wasm/src/state/ui.rs +++ b/render-wasm/src/state/ui.rs @@ -1,4 +1,4 @@ -use crate::ui::{Guide, GuideKind}; +use crate::ui::{Color, Guide, GuideKind, Rect}; pub struct GuidePool { horizontal: Vec, @@ -78,15 +78,64 @@ impl GuidePool { } } +impl Default for GuidePool { + fn default() -> Self { + Self::new() + } +} + +#[derive(Debug, Clone, Copy)] +pub struct RulerState { + pub visible: bool, + // The rounded canvas frame/border. Drawn even when `visible` is false + // (rulers toggled off), but hidden in hide-UI mode. + pub frame: bool, + pub offset_x: f32, + pub offset_y: f32, + pub selection: Option, + pub bg_color: Color, + pub border_color: Color, + pub label_color: Color, + pub accent_color: Color, +} + +impl Default for RulerState { + fn default() -> Self { + Self { + visible: false, + frame: true, + offset_x: 0.0, + offset_y: 0.0, + selection: None, + bg_color: Color::from_argb(0xff, 0x18, 0x18, 0x1a), + border_color: Color::from_argb(0xff, 0x2e, 0x2e, 0x36), + label_color: Color::from_argb(0xff, 0xb1, 0xb2, 0xb5), + accent_color: Color::from_argb(0xff, 0x91, 0xff, 0x11), + } + } +} + +impl RulerState { + pub fn set_selection(&mut self, has: bool, x: f32, y: f32, w: f32, h: f32) { + self.selection = if has { + Some(Rect::from_xywh(x, y, w, h)) + } else { + None + }; + } +} + pub struct UIState { guides: GuidePool, - // TODO: show grid, rulers, etc. + rulers: RulerState, + // TODO: show grid } impl UIState { pub fn new() -> Self { Self { - guides: GuidePool::new(), + guides: GuidePool::default(), + rulers: RulerState::default(), } } @@ -101,6 +150,14 @@ impl UIState { pub fn find_guide_at(&self, x: f32, y: f32, zoom: f32, tolerance: f32) -> Option<&Guide> { self.guides.find_at(x, y, zoom, tolerance) } + + pub fn ruler_state(&self) -> &RulerState { + &self.rulers + } + + pub fn ruler_state_mut(&mut self) -> &mut RulerState { + &mut self.rulers + } } #[cfg(test)] diff --git a/render-wasm/src/ui.rs b/render-wasm/src/ui.rs index 156b4a8748..d0e47c18e7 100644 --- a/render-wasm/src/ui.rs +++ b/render-wasm/src/ui.rs @@ -1,6 +1,7 @@ use std::cmp::Ordering; -use crate::shapes::Color; +pub use crate::math::Rect; +pub use crate::shapes::Color; #[derive(Debug, Clone, Copy, PartialEq)] pub enum GuideKind { diff --git a/render-wasm/src/wasm.rs b/render-wasm/src/wasm.rs index 86f3101a83..a5d8261f4d 100644 --- a/render-wasm/src/wasm.rs +++ b/render-wasm/src/wasm.rs @@ -5,7 +5,6 @@ pub mod fonts; pub mod layouts; pub mod mem; pub mod paths; -pub mod rulers; pub mod shadows; pub mod shapes; pub mod strokes; diff --git a/render-wasm/src/wasm/rulers.rs b/render-wasm/src/wasm/rulers.rs deleted file mode 100644 index 7f7191e5eb..0000000000 --- a/render-wasm/src/wasm/rulers.rs +++ /dev/null @@ -1,49 +0,0 @@ -use macros::wasm_error; -use skia_safe::{self as skia}; - -#[allow(unused_imports)] -use crate::error::{Error, Result}; -use crate::get_render_state; - -#[no_mangle] -#[wasm_error] -pub extern "C" fn set_rulers_visible(visible: u32) -> Result<()> { - get_render_state().rulers.visible = visible != 0; - Ok(()) -} - -#[no_mangle] -#[wasm_error] -pub extern "C" fn set_rulers_frame_visible(visible: u32) -> Result<()> { - get_render_state().rulers.frame = visible != 0; - Ok(()) -} - -#[no_mangle] -#[wasm_error] -pub extern "C" fn set_rulers_offsets(offset_x: f32, offset_y: f32) -> Result<()> { - let r = &mut get_render_state().rulers; - r.offset_x = offset_x; - r.offset_y = offset_y; - Ok(()) -} - -#[no_mangle] -#[wasm_error] -pub extern "C" fn set_rulers_selection(has: u32, x: f32, y: f32, w: f32, h: f32) -> Result<()> { - get_render_state() - .rulers - .set_selection(has != 0, x, y, w, h); - Ok(()) -} - -#[no_mangle] -#[wasm_error] -pub extern "C" fn set_rulers_colors(bg: u32, border: u32, label: u32, accent: u32) -> Result<()> { - let r = &mut get_render_state().rulers; - r.bg_color = skia::Color::new(bg); - r.border_color = skia::Color::new(border); - r.label_color = skia::Color::new(label); - r.accent_color = skia::Color::new(accent); - Ok(()) -} diff --git a/render-wasm/src/wasm/ui.rs b/render-wasm/src/wasm/ui.rs index e71fd20388..3ef343618c 100644 --- a/render-wasm/src/wasm/ui.rs +++ b/render-wasm/src/wasm/ui.rs @@ -3,7 +3,7 @@ use crate::with_state; use crate::{ error::{Error, Result}, globals::{get_render_state, get_ui_state}, - ui::{Guide, GuideKind}, + ui::{Color, Guide, GuideKind}, }; use macros::{wasm_error, ToJs}; @@ -122,3 +122,46 @@ pub extern "C" fn find_guide_at(x: f32, y: f32, zoom: f32, tolerance: f32) -> Re .map(|guide| guide.index as i32) .unwrap_or(-1)) } + +#[no_mangle] +#[wasm_error] +pub extern "C" fn set_rulers_visible(visible: u32) -> Result<()> { + get_ui_state().ruler_state_mut().visible = visible != 0; + Ok(()) +} + +#[no_mangle] +#[wasm_error] +pub extern "C" fn set_rulers_frame_visible(visible: u32) -> Result<()> { + get_ui_state().ruler_state_mut().frame = visible != 0; + Ok(()) +} + +#[no_mangle] +#[wasm_error] +pub extern "C" fn set_rulers_offsets(offset_x: f32, offset_y: f32) -> Result<()> { + let r = &mut get_ui_state().ruler_state_mut(); + r.offset_x = offset_x; + r.offset_y = offset_y; + Ok(()) +} + +#[no_mangle] +#[wasm_error] +pub extern "C" fn set_rulers_selection(has: u32, x: f32, y: f32, w: f32, h: f32) -> Result<()> { + get_ui_state() + .ruler_state_mut() + .set_selection(has != 0, x, y, w, h); + Ok(()) +} + +#[no_mangle] +#[wasm_error] +pub extern "C" fn set_rulers_colors(bg: u32, border: u32, label: u32, accent: u32) -> Result<()> { + let r = &mut get_ui_state().ruler_state_mut(); + r.bg_color = Color::new(bg); + r.border_color = Color::new(border); + r.label_color = Color::new(label); + r.accent_color = Color::new(accent); + Ok(()) +} From 0387cdf7e4391edc110c257013d86edf34b4d789 Mon Sep 17 00:00:00 2001 From: Eva Marco Date: Fri, 3 Jul 2026 09:26:16 +0200 Subject: [PATCH 054/229] :recycle: Migrate shared ancillary components to modern syntax (#10527) * :recycle: Migrate shared ancillary components to modern syntax * :recycle: Address shared ancillary syntax review * :recycle: Apply Step 3 props destructuring on numeric-input* Replaces the legacy ?-suffixed prop aliases with clean :keys destructuring and updates internal references, addressing review on PR #9406. * :bug: Fix some problems on refactored components --------- Co-authored-by: sxxtony <166789813+sxxtony@users.noreply.github.com> --- .../main/ui/components/editable_select.cljs | 16 +- .../app/main/ui/components/numeric_input.cljs | 162 ++++++++++++------ .../app/main/ui/components/org_avatar.cljs | 1 - .../app/main/ui/components/tab_container.cljs | 74 -------- .../app/main/ui/components/tab_container.scss | 127 -------------- frontend/src/app/main/ui/dashboard/team.cljs | 26 ++- .../app/main/ui/ds/layout/tab_switcher.cljs | 2 +- frontend/src/app/main/ui/shapes/svg_raw.cljs | 24 +-- .../ui/workspace/colorpicker/gradients.cljs | 4 +- frontend/src/app/main/ui/workspace/nudge.cljs | 18 +- .../ui/workspace/shapes/text/v2_editor.cljs | 13 +- .../sidebar/options/menus/border_radius.cljs | 2 +- .../sidebar/options/menus/frame_grid.cljs | 42 ++--- .../sidebar/options/menus/grid_cell.cljs | 26 +-- .../sidebar/options/menus/layer.cljs | 2 +- .../options/menus/layout_container.cljs | 14 +- .../sidebar/options/menus/layout_item.cljs | 22 +-- .../sidebar/options/menus/measures.cljs | 6 +- .../sidebar/options/menus/typography.cljs | 10 +- .../sidebar/options/rows/color_row.cljs | 24 +-- .../sidebar/options/rows/shadow_row.cljs | 36 ++-- .../main/ui/workspace/viewport/presence.cljs | 7 +- 22 files changed, 253 insertions(+), 405 deletions(-) delete mode 100644 frontend/src/app/main/ui/components/tab_container.cljs delete mode 100644 frontend/src/app/main/ui/components/tab_container.scss diff --git a/frontend/src/app/main/ui/components/editable_select.cljs b/frontend/src/app/main/ui/components/editable_select.cljs index 0f158667ae..a3c43866fe 100644 --- a/frontend/src/app/main/ui/components/editable_select.cljs +++ b/frontend/src/app/main/ui/components/editable_select.cljs @@ -12,7 +12,7 @@ [app.common.math :as mth] [app.common.uuid :as uuid] [app.main.ui.components.dropdown :refer [dropdown]] - [app.main.ui.components.numeric-input :refer [numeric-input*]] + [app.main.ui.components.numeric-input :as deprecated-input] [app.main.ui.icons :as deprecated-icon] [app.util.dom :as dom] [app.util.keyboard :as kbd] @@ -163,13 +163,13 @@ [:div {:class (dm/str class " " (stl/css :editable-select)) :ref on-node-load} (if (= type "number") - [:> numeric-input* {:value (or (some-> current-value value->label) "") - :className input-class - :on-change set-value - :on-focus handle-focus - :on-blur handle-blur - :aria-label aria-label - :placeholder placeholder}] + [:> deprecated-input/numeric-input* {:value (or (some-> current-value value->label) "") + :class input-class + :on-change set-value + :on-focus handle-focus + :on-blur handle-blur + :aria-label aria-label + :placeholder placeholder}] [:input {:value (if (= value :multiple) nil (or (some-> current-value value->label) "")) :class input-class :on-change handle-change-input diff --git a/frontend/src/app/main/ui/components/numeric_input.cljs b/frontend/src/app/main/ui/components/numeric_input.cljs index f115ef2d38..9225674adf 100644 --- a/frontend/src/app/main/ui/components/numeric_input.cljs +++ b/frontend/src/app/main/ui/components/numeric_input.cljs @@ -14,7 +14,6 @@ [app.util.dom :as dom] [app.util.globals :as globals] [app.util.keyboard :as kbd] - [app.util.object :as obj] [app.util.simple-math :as smt] [cljs.core :as c] [cuerdas.core :as str] @@ -22,30 +21,22 @@ [rumext.v2 :as mf])) (mf/defc numeric-input* - {::mf/wrap-props false - ::mf/forward-ref true} - [props external-ref] - (let [value-str (unchecked-get props "value") - min-value (unchecked-get props "min") - max-value (unchecked-get props "max") - step-value (unchecked-get props "step") - wrap-value? (unchecked-get props "data-wrap") - on-change (unchecked-get props "onChange") - on-blur (unchecked-get props "onBlur") - on-focus (unchecked-get props "onFocus") - - title (unchecked-get props "title") - default (unchecked-get props "default") - nillable? (unchecked-get props "nillable") - class (d/nilv (unchecked-get props "className") "") + {::mf/forward-ref true} + [{:keys [value min max step data-wrap on-change on-blur on-focus title default + select-on-focus class is-disabled is-nillable is-integer] + :rest props} external-ref] + (let [value-str value + min-value min + max-value max + step-value step + wrap-value? data-wrap min-value (d/parse-double min-value) max-value (d/parse-double max-value) step-value (d/parse-double step-value 1) - default (d/parse-double default (when-not nillable? 0)) + default (d/parse-double default (when-not is-nillable 0)) - integer? (unchecked-get props "integer") - select-on-focus? (d/nilv (unchecked-get props "selectOnFocus") true) + select-on-focus? (d/nilv select-on-focus true) ;; We need a ref pointing to the input dom element, but the user ;; of this component may provide one (that is forwarded here). @@ -63,9 +54,13 @@ ;; Last value input by the user we need to store to save on unmount last-value* (mf/use-var value) + drag-state* (mf/use-ref :idle) + drag-start-x* (mf/use-ref 0) + drag-start-val* (mf/use-ref 0) + parse-value (mf/use-fn - (mf/deps min-value max-value value nillable? default integer?) + (mf/deps min-value max-value value is-nillable default is-integer) (fn [] (when-let [node (mf/ref-val ref)] (let [new-value (-> (dom/get-value node) @@ -74,7 +69,7 @@ (cond (d/num? new-value) (-> new-value - (cond-> integer? mth/round) + (cond-> is-integer mth/round) (d/max (/ sm/min-safe-int 2)) (d/min (/ sm/max-safe-int 2)) (cond-> (d/num? min-value) @@ -82,7 +77,7 @@ (cond-> (d/num? max-value) (d/min max-value))) - nillable? + is-nillable default :else value))))) @@ -150,7 +145,7 @@ max-value :else new-value) - new-value (if integer? (mth/round new-value) new-value)] + new-value (if is-integer (mth/round new-value) new-value)] (apply-value event new-value)))))) @@ -197,7 +192,7 @@ (fn [event] (when (mf/ref-val dirty-ref) (let [new-value (or @last-value* default)] - (if (or nillable? new-value) + (if (or is-nillable new-value) (apply-value event new-value) (update-input new-value))) (when (fn? on-blur) @@ -214,33 +209,100 @@ (dom/blur! node))))) handle-focus - (mf/use-fn + (mf/use-callback (mf/deps on-focus select-on-focus?) (fn [event] - (reset! last-value* (parse-value)) - (let [target (dom/get-target event)] - (when on-focus - (mf/set-ref-val! dirty-ref true) - (on-focus event)) - (when select-on-focus? - (dom/select-text! target) - ;; In webkit browsers the mouseup event will be called after the on-focus causing and unselect - (.addEventListener target "mouseup" dom/prevent-default #js {:once true}))))) + (when-not (= :dragging (mf/ref-val drag-state*)) + (reset! last-value* (parse-value)) + (let [target (dom/get-target event)] + (when on-focus + (mf/set-ref-val! dirty-ref true) + (on-focus event)) - props (-> (obj/clone props) - (obj/unset! "selectOnFocus") - (obj/unset! "nillable") - (obj/unset! "integer") - (obj/set! "value" mf/undefined) - (obj/set! "onChange" handle-change) - (obj/set! "className" class) - (obj/set! "type" "text") - (obj/set! "ref" ref) - (obj/set! "defaultValue" (fmt/format-number value)) - (obj/set! "title" title) - (obj/set! "onKeyDown" handle-key-down) - (obj/set! "onBlur" handle-blur) - (obj/set! "onFocus" handle-focus))] + (when select-on-focus? + (dom/select-text! target) + ;; In webkit browsers the mouseup event will be called after the on-focus causing and unselect + (.addEventListener target "mouseup" dom/prevent-default #js {:once true})))))) + + on-scrub-pointer-down + (mf/use-fn + (mf/deps value value-str min-value max-value default) + (fn [event] + (let [disabled? (unchecked-get props "disabled") + node (mf/ref-val ref) + is-focused (and (some? node) (dom/active? node))] + (when-not (or disabled? is-focused (= :multiple value-str)) + (let [client-x (.-clientX event) + start-val (or value default 0)] + (mf/set-ref-val! drag-state* :maybe-dragging) + (mf/set-ref-val! drag-start-x* client-x) + (mf/set-ref-val! drag-start-val* start-val) + (dom/capture-pointer event)))))) + + on-scrub-pointer-move + (mf/use-fn + (mf/deps apply-value update-input step-value min-value max-value) + (fn [event] + (let [state (mf/ref-val drag-state*)] + (when (or (= state :maybe-dragging) (= state :dragging)) + (let [client-x (.-clientX event) + start-x (mf/ref-val drag-start-x*) + delta-x (- client-x start-x)] + (when (and (= state :maybe-dragging) + (>= (js/Math.abs delta-x) 3)) + (mf/set-ref-val! drag-state* :dragging) + (dom/add-class! (dom/get-body) "cursor-drag-scrub")) + (when (= (mf/ref-val drag-state*) :dragging) + (let [effective-step (cond + (.-shiftKey event) (* step-value 10) + (.-ctrlKey event) (* step-value 0.1) + :else step-value) + steps (js/Math.round (/ delta-x 1)) + new-val (+ (mf/ref-val drag-start-val*) + (* steps effective-step)) + new-val (cond-> new-val + (d/num? min-value) (mth/max min-value) + (d/num? max-value) (mth/min max-value))] + (update-input new-val) + (apply-value event new-val)))))))) + + on-scrub-pointer-up + (mf/use-fn + (mf/deps ref) + (fn [event] + (let [state (mf/ref-val drag-state*)] + (when (= state :maybe-dragging) + (mf/set-ref-val! drag-state* :idle) + (dom/release-pointer event) + (when-let [node (mf/ref-val ref)] + (dom/focus! node))) + (when (= state :dragging) + (mf/set-ref-val! drag-state* :idle) + (dom/remove-class! (dom/get-body) "cursor-drag-scrub") + (dom/release-pointer event))))) + + on-scrub-lost-pointer-capture + (mf/use-fn + (fn [_event] + (mf/set-ref-val! drag-state* :idle) + (dom/remove-class! (dom/get-body) "cursor-drag-scrub"))) + + props (mf/spread-props props + {:value mf/undefined + :on-change handle-change + :class class + :type "text" + :ref ref + :default-value (fmt/format-number value) + :title title + :disabled is-disabled + :on-key-down handle-key-down + :on-blur handle-blur + :on-focus handle-focus + :on-pointer-down on-scrub-pointer-down + :on-pointer-move on-scrub-pointer-move + :on-pointer-up on-scrub-pointer-up + :on-lost-pointer-capture on-scrub-lost-pointer-capture})] (mf/with-effect [value] (when-let [input-node (mf/ref-val ref)] @@ -258,4 +320,4 @@ (let [key (events/listen node "wheel" handle-mouse-wheel #js {:passive false})] #(events/unlistenByKey key)))) - [:> :input props])) + [:> :input props])) \ No newline at end of file diff --git a/frontend/src/app/main/ui/components/org_avatar.cljs b/frontend/src/app/main/ui/components/org_avatar.cljs index 43521a1dd7..4a9829de22 100644 --- a/frontend/src/app/main/ui/components/org_avatar.cljs +++ b/frontend/src/app/main/ui/components/org_avatar.cljs @@ -11,7 +11,6 @@ [rumext.v2 :as mf])) (mf/defc org-avatar* - {::mf/props :obj} [{:keys [org size]}] (let [name (:name org) custom-photo (:custom-photo org) diff --git a/frontend/src/app/main/ui/components/tab_container.cljs b/frontend/src/app/main/ui/components/tab_container.cljs deleted file mode 100644 index fb8dad874a..0000000000 --- a/frontend/src/app/main/ui/components/tab_container.cljs +++ /dev/null @@ -1,74 +0,0 @@ -;; This Source Code Form is subject to the terms of the Mozilla Public -;; License, v. 2.0. If a copy of the MPL was not distributed with this -;; file, You can obtain one at http://mozilla.org/MPL/2.0/. -;; -;; Copyright (c) KALEIDOS INC Sucursal en España SL - -(ns app.main.ui.components.tab-container - (:require-macros [app.main.style :as stl]) - (:require - [app.common.data :as d] - [app.common.data.macros :as dm] - [app.main.ui.icons :as deprecated-icon] - [app.util.array :as array] - [app.util.dom :as dom] - [app.util.i18n :refer [tr]] - [cuerdas.core :as str] - [rumext.v2 :as mf])) - -(set! *warn-on-infer* false) - -(mf/defc tab-element - {::mf/wrap-props false} - [{:keys [children]}] - children) - -(mf/defc tab-container - {::mf/wrap-props false} - [{:keys [children selected on-change-tab collapsable handle-collapse header-class content-class]}] - (let [children (-> (array/normalize-to-array children) - (array/without-nils)) - - selected* (mf/use-state #(or selected (-> children first .-props .-id))) - selected (or selected @selected*) - - on-click (mf/use-fn - (mf/deps on-change-tab) - (fn [event] - (let [id (-> event - (dom/get-current-target) - (dom/get-data "id") - (keyword))] - (reset! selected* id) - (when (fn? on-change-tab) - (on-change-tab id)))))] - - [:section {:class (stl/css :tab-container)} - [:header {:class (dm/str header-class " " (stl/css :tab-container-tabs))} - (when ^boolean collapsable - [:button - {:on-click handle-collapse - :class (stl/css :collapse-sidebar) - :aria-label (tr "workspace.sidebar.collapse")} - deprecated-icon/arrow]) - [:div {:class (stl/css :tab-container-tab-wrapper)} - (for [tab children] - (let [props (.-props tab) - id (.-id props) - title (.-title props) - sid (d/name id) - tooltip (if (string? title) title nil)] - [:div {:key (str/concat "tab-" sid) - :title tooltip - :data-id sid - :data-testid sid - :on-click on-click - :class (stl/css-case - :tab-container-tab-title true - :current (= selected id))} - [:span {:class (stl/css :content)} - title]]))]] - - [:div {:class (dm/str content-class " " (stl/css :tab-container-content))} - (d/seek #(= selected (-> % .-props .-id)) - children)]])) diff --git a/frontend/src/app/main/ui/components/tab_container.scss b/frontend/src/app/main/ui/components/tab_container.scss deleted file mode 100644 index 54fa7f0627..0000000000 --- a/frontend/src/app/main/ui/components/tab_container.scss +++ /dev/null @@ -1,127 +0,0 @@ -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. -// -// Copyright (c) KALEIDOS INC Sucursal en España SL -@use "refactor/common-refactor.scss" as deprecated; - -.tab-container { - display: grid; - grid-template-rows: deprecated.$s-32 1fr; - height: 100%; -} - -.tab-container-tabs { - display: flex; - align-items: center; - flex-direction: row; - gap: deprecated.$s-2; - border-radius: deprecated.$br-8; - background: var(--tabs-background-color); - cursor: pointer; - font-size: deprecated.$fs-12; - height: 100%; -} - -.tab-container-tab-wrapper { - display: grid; - grid-auto-flow: column; - height: 100%; - width: 100%; -} - -.tab-container-tab-title { - @include deprecated.flex-center; - - height: 100%; - width: 100%; - padding: 0 deprecated.$s-8; - margin: 0; - border-radius: deprecated.$br-8; - background-color: transparent; - color: var(--tab-foreground-color); - border: deprecated.$s-2 solid var(--tab-border-color); - min-width: 0; - - svg { - @extend %button-icon; - - stroke: var(--tab-foreground-color); - } - - .content { - @include deprecated.headline-small-typography; - - text-align: center; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - - &.current, - &.current:hover { - background: var(--tab-background-color-selected); - border-color: var(--tab-border-color-selected); - color: var(--tab-foreground-color-selected); - - svg { - stroke: var(--tab-foreground-color-selected); - } - } - - &:hover { - color: var(--tab-foreground-color-hover); - - svg { - stroke: var(--tab-foreground-color-hover); - } - } -} - -.collapse-sidebar { - @include deprecated.flex-center; - @include deprecated.button-style; - - height: 100%; - width: deprecated.$s-24; - min-width: deprecated.$s-24; - padding: 0 deprecated.$s-6; - border-radius: deprecated.$br-5; - - svg { - @include deprecated.flex-center; - - height: deprecated.$s-16; - width: deprecated.$s-16; - stroke: var(--icon-foreground); - transform: rotate(180deg); - fill: none; - color: transparent; - } - - &:hover { - svg { - stroke: var(--icon-foreground-hover); - } - } - - &.collapsed { - svg { - transform: rotate(0deg); - padding: 0 0 0 deprecated.$s-6; - } - } -} - -.tab-container-content { - overflow: hidden auto; - display: flex; - flex-direction: column; -} - -// Firefox doesn't respect scrollbar-gutter -@supports (-moz-appearance: none) { - .tab-container-content { - padding-right: deprecated.$s-8; - } -} diff --git a/frontend/src/app/main/ui/dashboard/team.cljs b/frontend/src/app/main/ui/dashboard/team.cljs index cb73367c4f..c7d6aed7a0 100644 --- a/frontend/src/app/main/ui/dashboard/team.cljs +++ b/frontend/src/app/main/ui/dashboard/team.cljs @@ -72,9 +72,8 @@ (def ^:private group-icon (deprecated-icon/icon-xref :group (stl/css :group-icon))) -(mf/defc header - {::mf/wrap [mf/memo] - ::mf/props :obj} +(mf/defc header* + {::mf/wrap [mf/memo]} [{:keys [section team profile]}] (let [on-nav-members (mf/use-fn #(st/emit! (dcm/go-to-dashboard-members))) on-nav-settings (mf/use-fn #(st/emit! (dcm/go-to-dashboard-settings))) @@ -340,8 +339,7 @@ ;; MEMBERS SECTION ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(mf/defc member-info - {::mf/props :obj} +(mf/defc member-info* [{:keys [member profile]}] (let [is-you? (= (:id profile) (:id member))] [:* @@ -553,7 +551,7 @@ [:div {:class (stl/css :table-row)} [:div {:class (stl/css :table-field :field-name)} - [:& member-info {:member member :profile profile}]] + [:> member-info* {:member member :profile profile}]] [:div {:class (stl/css :table-field :field-roles)} [:> rol-info* {:member member @@ -623,9 +621,9 @@ (st/emit! (dtm/fetch-members))) [:* - [:& header {:section :dashboard-team-members - :team team - :profile profile}] + [:> header* {:section :dashboard-team-members + :team team + :profile profile}] [:section {:class (stl/css :dashboard-container :dashboard-team-members)} [:> team-members* @@ -1199,9 +1197,9 @@ (st/emit! (dtm/fetch-invitations))) [:* - [:& header {:section :dashboard-team-invitations - :team team - :profile profile}] + [:> header* {:section :dashboard-team-invitations + :team team + :profile profile}] [:section {:class (stl/css :dashboard-team-invitations)} [:> invitation-section* {:team team :profile profile}] @@ -1479,7 +1477,7 @@ (st/emit! (dtm/fetch-webhooks))) [:* - [:& header {:team team :section :dashboard-team-webhooks}] + [:> header* {:team team :section :dashboard-team-webhooks}] [:section {:class (stl/css :dashboard-container :dashboard-team-webhooks)} [:* [:> webhooks-hero* {}] @@ -1586,7 +1584,7 @@ (dtm/fetch-stats))) [:* - [:& header {:section :dashboard-team-settings :team team}] + [:> header* {:section :dashboard-team-settings :team team}] [:section {:class (stl/css :dashboard-team-settings)} [:div {:class (stl/css :settings-container)} [:div {:class (stl/css :block :info-block)} diff --git a/frontend/src/app/main/ui/ds/layout/tab_switcher.cljs b/frontend/src/app/main/ui/ds/layout/tab_switcher.cljs index 5e50589027..d83164ab98 100644 --- a/frontend/src/app/main/ui/ds/layout/tab_switcher.cljs +++ b/frontend/src/app/main/ui/ds/layout/tab_switcher.cljs @@ -48,7 +48,7 @@ (mf/defc tab-nav* {::mf/private true - ::mf/memo true} + ::mf/wrap [mf/memo]} [{:keys [ref tabs selected on-click button-position action-button] :rest props}] (let [nav-class (stl/css-case :tab-nav true diff --git a/frontend/src/app/main/ui/shapes/svg_raw.cljs b/frontend/src/app/main/ui/shapes/svg_raw.cljs index 9cf9a7521d..12db38a3af 100644 --- a/frontend/src/app/main/ui/shapes/svg_raw.cljs +++ b/frontend/src/app/main/ui/shapes/svg_raw.cljs @@ -22,14 +22,10 @@ ;; Context to store a re-mapping of the ids (def svg-ids-ctx (mf/create-context nil)) -(mf/defc svg-root - {::mf/wrap-props false} - [props] +(mf/defc svg-root* + [{:keys [shape children]}] - (let [shape (unchecked-get props "shape") - children (unchecked-get props "children") - - x (dm/get-prop shape :x) + (let [x (dm/get-prop shape :x) y (dm/get-prop shape :y) w (dm/get-prop shape :width) h (dm/get-prop shape :height) @@ -53,13 +49,9 @@ [:g.svg-raw {:transform (gsh/transform-str shape)} [:> "svg" props children]]])) -(mf/defc svg-element - {::mf/wrap-props false} - [props] - (let [shape (unchecked-get props "shape") - children (unchecked-get props "children") - - ids-mapping (mf/use-ctx svg-ids-ctx) +(mf/defc svg-element* + [{:keys [shape children]}] + (let [ids-mapping (mf/use-ctx svg-ids-ctx) render-id (mf/use-ctx muc/render-id) tag (-> shape :content :tag) @@ -119,13 +111,13 @@ [:style style-content] ^boolean svg-root? - [:& svg-root {:shape shape} + [:> svg-root* {:shape shape} (for [item childs] [:& shape-wrapper {:shape item :key (dm/str (:id item))}])] (and ^boolean svg-tag? ^boolean valid-tag?) - [:& svg-element {:shape shape} + [:> svg-element* {:shape shape} (for [item childs] [:& shape-wrapper {:shape item :key (dm/str (:id item))}])] diff --git a/frontend/src/app/main/ui/workspace/colorpicker/gradients.cljs b/frontend/src/app/main/ui/workspace/colorpicker/gradients.cljs index 7010e84371..ff8b733433 100644 --- a/frontend/src/app/main/ui/workspace/colorpicker/gradients.cljs +++ b/frontend/src/app/main/ui/workspace/colorpicker/gradients.cljs @@ -13,7 +13,7 @@ [app.common.types.color :as cc] [app.common.types.fills :as types.fills] [app.main.features :as features] - [app.main.ui.components.numeric-input :refer [numeric-input*]] + [app.main.ui.components.numeric-input :as deprecated-input] [app.main.ui.components.reorder-handler :refer [reorder-handler*]] [app.main.ui.components.select :refer [select]] [app.main.ui.ds.buttons.icon-button :refer [icon-button*]] @@ -147,7 +147,7 @@ [:div {:class (stl/css :offset-input-wrapper)} [:span {:class (stl/css :icon-text)} "%"] - [:> numeric-input* + [:> deprecated-input/numeric-input* {:value (-> offset offset->string) :on-change handle-change-offset :default 100 diff --git a/frontend/src/app/main/ui/workspace/nudge.cljs b/frontend/src/app/main/ui/workspace/nudge.cljs index f4e576f128..52975c33d9 100644 --- a/frontend/src/app/main/ui/workspace/nudge.cljs +++ b/frontend/src/app/main/ui/workspace/nudge.cljs @@ -11,7 +11,7 @@ [app.main.data.workspace :as dw] [app.main.refs :as refs] [app.main.store :as st] - [app.main.ui.components.numeric-input :refer [numeric-input*]] + [app.main.ui.components.numeric-input :as deprecated-input] [app.main.ui.icons :as deprecated-icon] [app.util.dom :as dom] [app.util.i18n :as i18n :refer [tr]] @@ -50,14 +50,14 @@ [:div {:class (stl/css :input-wrapper)} [:label {:class (stl/css :modal-msg) :for "nudge-small"} (tr "modals.small-nudge")] - [:> numeric-input* {:min 0.01 - :id "nudge-small" - :value (:small nudge) - :on-change update-small}]] + [:> deprecated-input/numeric-input* {:min 0.01 + :id "nudge-small" + :value (:small nudge) + :on-change update-small}]] [:div {:class (stl/css :input-wrapper)} [:label {:class (stl/css :modal-msg) :for "nudge-big"} (tr "modals.big-nudge")] - [:> numeric-input* {:min 0.01 - :id "nudge-big" - :value (:big nudge) - :on-change update-big}]]]]])) + [:> deprecated-input/numeric-input* {:min 0.01 + :id "nudge-big" + :value (:big nudge) + :on-change update-big}]]]]])) diff --git a/frontend/src/app/main/ui/workspace/shapes/text/v2_editor.cljs b/frontend/src/app/main/ui/workspace/shapes/text/v2_editor.cljs index 1724072b61..b5a16d2f5d 100644 --- a/frontend/src/app/main/ui/workspace/shapes/text/v2_editor.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/text/v2_editor.cljs @@ -248,10 +248,9 @@ (get-contrast-color background-color))) (get-contrast-color background-color))) -(mf/defc text-editor-html +(mf/defc text-editor-html* "Text editor (HTML)" - {::mf/wrap [mf/memo] - ::mf/props :obj} + {::mf/wrap [mf/memo]} [{:keys [shape canvas-ref render-wasm?] :or {render-wasm? false}}] (let [content (:content shape) shape-id (dm/get-prop shape :id) @@ -485,7 +484,7 @@ [:foreignObject {:x x :y y :width width :height height} [:div {:style style} - [:& text-editor-html {:shape shape - :canvas-ref canvas-ref - :render-wasm? render-wasm? - :key (dm/str shape-id)}]]]])) + [:> text-editor-html* {:shape shape + :canvas-ref canvas-ref + :render-wasm? render-wasm? + :key (dm/str shape-id)}]]]])) diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs index 16feaa68d0..5f3aef23a3 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs @@ -300,7 +300,7 @@ :else "--") :min 0 - :nillable true + :is-nillable true :on-change on-all-radius-change :value (if all-values-equal? (if (nil? (:r1 values)) diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs index a518622fb8..66b12b9955 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs @@ -13,7 +13,7 @@ [app.main.refs :as refs] [app.main.store :as st] [app.main.ui.components.editable-select :refer [editable-select]] - [app.main.ui.components.numeric-input :refer [numeric-input*]] + [app.main.ui.components.numeric-input :as deprecated-input] [app.main.ui.components.select :refer [select]] [app.main.ui.components.title-bar :refer [title-bar*]] [app.main.ui.ds.buttons.icon-button :refer [icon-button*]] @@ -163,11 +163,11 @@ (if (= type :square) [:div {:class (stl/css :grid-size) :title (tr "workspace.options.size")} - [:> numeric-input* {:min 0.01 - :value (or (:size params) "") - :no-validate true - :className (stl/css :numeric-input) - :on-change (handle-change :params :size)}]] + [:> deprecated-input/numeric-input* {:min 0.01 + :value (or (:size params) "") + :no-validate true + :class (stl/css :numeric-input) + :on-change (handle-change :params :size)}]] [:div {:class (stl/css :editable-select-wrapper)} [:& editable-select {:value (:size params) @@ -256,33 +256,33 @@ (if (= :row type) "H" "W")] - [:> numeric-input* {:placeholder "Auto" - :on-change handle-change-item-length - :nillable true - :className (stl/css :numeric-input) - :value (or (:item-length params) "")}]] + [:> deprecated-input/numeric-input* {:placeholder "Auto" + :on-change handle-change-item-length + :is-nillable true + :class (stl/css :numeric-input) + :value (or (:item-length params) "")}]] [:div {:class (stl/css :gutter) :title (tr "workspace.options.grid.params.gutter")} [:span {:class (stl/css-case :icon true :rotated (= type :row))} deprecated-icon/gap-horizontal] - [:> numeric-input* {:placeholder "0" - :on-change (handle-change :params :gutter) - :nillable true - :className (stl/css :numeric-input) - :value (or (:gutter params) 0)}]] + [:> deprecated-input/numeric-input* {:placeholder "0" + :on-change (handle-change :params :gutter) + :is-nillable true + :class (stl/css :numeric-input) + :value (or (:gutter params) 0)}]] [:div {:class (stl/css :margin) :title (tr "workspace.options.grid.params.margin")} [:span {:class (stl/css-case :icon true :rotated (= type :column))} deprecated-icon/grid-margin] - [:> numeric-input* {:placeholder "0" - :on-change (handle-change :params :margin) - :nillable true - :className (stl/css :numeric-input) - :value (or (:margin params) 0)}]] + [:> deprecated-input/numeric-input* {:placeholder "0" + :on-change (handle-change :params :margin) + :is-nillable true + :class (stl/css :numeric-input) + :value (or (:margin params) 0)}]] [:button {:class (stl/css-case :show-more-options true :selected show-more-options?) diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs index 2a8b2adc6a..34e27560de 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs @@ -16,7 +16,7 @@ [app.main.data.workspace.grid-layout.editor :as dwge] [app.main.data.workspace.shape-layout :as dwsl] [app.main.store :as st] - [app.main.ui.components.numeric-input :refer [numeric-input*]] + [app.main.ui.components.numeric-input :as deprecated-input] [app.main.ui.components.radio-buttons :refer [radio-button radio-buttons]] [app.main.ui.components.title-bar :refer [title-bar*]] [app.main.ui.ds.foundations.assets.icon :as i] @@ -225,23 +225,23 @@ [:div {:class (stl/css :grid-coord-group)} [:span {:class (stl/css :icon)} deprecated-icon/flex-vertical] [:div {:class (stl/css :coord-input)} - [:> numeric-input* + [:> deprecated-input/numeric-input* {:placeholder "--" :title "Column" :on-click #(dom/select-target %) :on-change (partial on-grid-coordinates :all :column) - :integer true + :is-integer true :value column}]]] [:div {:class (stl/css :grid-coord-group)} [:span {:class (stl/css :icon)} deprecated-icon/flex-horizontal] [:div {:class (stl/css :coord-input)} - [:> numeric-input* + [:> deprecated-input/numeric-input* {:placeholder "--" :title "Row" :on-click #(dom/select-target %) :on-change (partial on-grid-coordinates :all :row) - :integer true + :is-integer true :value row}]]]]) (when (and (not multiple?) (or (= :manual cell-mode) (= :area cell-mode))) @@ -249,35 +249,35 @@ [:div {:class (stl/css :grid-coord-group)} [:span {:class (stl/css :icon)} deprecated-icon/flex-vertical] [:div {:class (stl/css :coord-input)} - [:> numeric-input* + [:> deprecated-input/numeric-input* {:placeholder "--" :on-pointer-down #(dom/select-target %) :on-change (partial on-grid-coordinates :start :column) - :integer true + :is-integer true :value column}]] [:div {:class (stl/css :coord-input)} - [:> numeric-input* + [:> deprecated-input/numeric-input* {:placeholder "--" :on-pointer-down #(dom/select-target %) :on-change (partial on-grid-coordinates :end :column) - :integer true + :is-integer true :value column-end}]]] [:div {:class (stl/css :grid-coord-group)} [:span {:class (stl/css :icon)} deprecated-icon/flex-horizontal] [:div {:class (stl/css :coord-input :double)} - [:> numeric-input* + [:> deprecated-input/numeric-input* {:placeholder "--" :on-pointer-down #(dom/select-target %) :on-change (partial on-grid-coordinates :start :row) - :integer true + :is-integer true :value row}]] [:div {:class (stl/css :coord-input)} - [:> numeric-input* + [:> deprecated-input/numeric-input* {:placeholder "--" :on-pointer-down #(dom/select-target %) :on-change (partial on-grid-coordinates :end :row) - :integer true + :is-integer true :value row-end}]]]]) [:div {:class (stl/css :row)} diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layer.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layer.cljs index c636efcc92..980a2aa336 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layer.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layer.cljs @@ -302,7 +302,7 @@ :on-change handle-opacity-change :min 0 :max 100 - :className (stl/css :numeric-input)}]] + :class (stl/css :numeric-input)}]] [:div {:class (stl/css :actions)} (cond diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs index e321370e33..654eccaf4c 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs @@ -401,7 +401,7 @@ :on-change on-p1-change :on-focus on-focus-p1 :on-blur on-padding-blur - :nillable true + :is-nillable true :min 0 :value p1}]]) @@ -431,14 +431,14 @@ [:span {:class (stl/css :icon)} deprecated-icon/padding-left-right] [:> deprecated-input/numeric-input* - {:className (stl/css :numeric-input) + {:class (stl/css :numeric-input) :placeholder (tr "settings.multiple") :aria-label (tr "workspace.layout-grid.editor.padding.horizontal") :on-change on-p2-change :on-focus on-focus-p2 :on-blur on-padding-blur :min 0 - :nillable true + :is-nillable true :value p2}]])])) (mf/defc multiple-padding-selection* @@ -771,10 +771,10 @@ :on-focus on-focus-row-gap :on-change on-row-gap-change :on-blur on-gap-blur - :nillable true + :is-nillable true :min 0 :value (:row-gap value) - :disabled row-gap-disabled?}]]) + :is-disabled row-gap-disabled?}]]) (if token-numeric-inputs [:> numeric-input-wrapper* @@ -810,7 +810,7 @@ :on-focus on-focus-column-gap :on-change on-column-gap-change :on-blur on-gap-blur - :nillable true + :is-nillable true :min 0 :value (:column-gap value) :disabled col-gap-disabled?}]])])) @@ -998,7 +998,7 @@ :on-change #(set-column-value type index %) :placeholder "--" :min 0 - :disabled (= :auto (:type column))}]] + :is-disabled (= :auto (:type column))}]] [:div {:class (stl/css :track-info-unit)} [:& select {:class (stl/css :track-info-unit-selector) diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs index 065828c8c3..598fd69b1b 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs @@ -163,7 +163,7 @@ :on-focus on-focus-m1 :on-change on-m1-change :on-blur on-blur - :nillable true + :is-nillable true :value m1}]]) (if token-numeric-inputs @@ -194,7 +194,7 @@ :on-focus on-focus-m2 :on-change on-m2-change :on-blur on-blur - :nillable true + :is-nillable true :value m2}]])])) (mf/defc margin-multiple* @@ -287,7 +287,7 @@ :on-focus on-focus-m1 :on-change on-m1-change :on-blur on-blur - :nillable true + :is-nillable true :value m1}]]) (if token-numeric-inputs [:> numeric-input-wrapper* @@ -316,7 +316,7 @@ :on-focus on-focus-m2 :on-change on-m2-change :on-blur on-blur - :nillable true + :is-nillable true :value m2}]]) (if token-numeric-inputs @@ -346,7 +346,7 @@ :on-focus on-focus-m3 :on-change on-m3-change :on-blur on-blur - :nillable true + :is-nillable true :value m3}]]) (if token-numeric-inputs @@ -375,7 +375,7 @@ :on-focus on-focus-m4 :on-change on-m4-change :on-blur on-blur - :nillable true + :is-nillable true :value m4}]])])) (mf/defc margin-section* @@ -619,7 +619,7 @@ :on-focus dom/select-target :on-change on-layout-item-min-w-change :value (get values :layout-item-min-w) - :nillable true}]]) + :is-nillable true}]]) (if token-numeric-inputs [:> numeric-input-wrapper* @@ -649,7 +649,7 @@ :on-focus dom/select-target :on-change on-layout-item-max-w-change :value (get values :layout-item-max-w) - :nillable true}]])]) + :is-nillable true}]])]) (when (= v-sizing :fill) [:div {:class (stl/css :vertical-fill)} @@ -681,7 +681,7 @@ :on-focus dom/select-target :on-change on-layout-item-min-h-change :value (get values :layout-item-min-h) - :nillable true}]]) + :is-nillable true}]]) (if token-numeric-inputs [:> numeric-input-wrapper* @@ -712,7 +712,7 @@ :on-focus dom/select-target :on-change on-layout-item-max-h-change :value (get values :layout-item-max-h) - :nillable true}]])])])) + :is-nillable true}]])])])) (defn- check-layout-item-menu-props [old-props new-props] @@ -912,7 +912,7 @@ :placeholder "--" :on-focus #(dom/select-target %) :on-change #(on-change-z-index %) - :nillable true + :is-nillable true :value (:layout-item-z-index values)}]]]) [:div {:class (stl/css :behavior-row)} diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs index 8334acbebb..f4a454af54 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs @@ -571,7 +571,7 @@ :no-validate true :placeholder (if (= :multiple (:width values)) (tr "settings.multiple") "--") :on-change on-width-change - :disabled disabled-width-sizing? + :is-disabled disabled-width-sizing? :class (stl/css :numeric-input) :value (:width values)}]] [:div {:class (stl/css-case :height true @@ -582,7 +582,7 @@ :no-validate true :placeholder (if (= :multiple (:height values)) (tr "settings.multiple") "--") :on-change on-height-change - :disabled disabled-height-sizing? + :is-disabled disabled-height-sizing? :class (stl/css :numeric-input) :value (:height values)}]]]) @@ -632,7 +632,7 @@ [:> deprecated-input/numeric-input* {:no-validate true :placeholder (if (= :multiple (:x values)) (tr "settings.multiple") "--") :on-change on-pos-x-change - :disabled disabled-position? + :is-disabled disabled-position? :class (stl/css :numeric-input) :value (:x values)}]] diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.cljs index e5ee3647bd..dc242cb19c 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.cljs @@ -23,7 +23,7 @@ [app.main.refs :as refs] [app.main.store :as st] [app.main.ui.components.editable-select :refer [editable-select]] - [app.main.ui.components.numeric-input :refer [numeric-input*]] + [app.main.ui.components.numeric-input :as deprecated-input] [app.main.ui.components.radio-buttons :refer [radio-button radio-buttons]] [app.main.ui.components.search-bar :refer [search-bar*]] [app.main.ui.components.select :refer [select]] @@ -396,7 +396,7 @@ [:span {:class (stl/css :icon) :alt (tr "workspace.options.text-options.line-height")} deprecated-icon/text-lineheight] - [:> numeric-input* + [:> deprecated-input/numeric-input* {:min -200 :max 200 :step 0.1 @@ -405,7 +405,7 @@ :aria-label (tr "inspect.attributes.typography.line-height") :value (attr->string line-height) :placeholder (if (= :multiple line-height) (tr "settings.multiple") "--") - :nillable (= :multiple line-height) + :is-nillable (= :multiple line-height) :on-change #(handle-change % :line-height) :on-blur on-blur}]] @@ -415,7 +415,7 @@ {:class (stl/css :icon) :alt (tr "workspace.options.text-options.letter-spacing")} deprecated-icon/text-letterspacing] - [:> numeric-input* + [:> deprecated-input/numeric-input* {:min -200 :max 200 :step 0.1 @@ -425,7 +425,7 @@ :value (attr->string letter-spacing) :placeholder (if (= :multiple letter-spacing) (tr "settings.multiple") "--") :on-change #(handle-change % :letter-spacing) - :nillable (= :multiple letter-spacing) + :is-nillable (= :multiple letter-spacing) :on-blur on-blur}]]])) (mf/defc text-transform-options* diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs index 6fd4f3c654..3433048e26 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs @@ -17,7 +17,7 @@ [app.main.refs :as refs] [app.main.store :as st] [app.main.ui.components.color-input :refer [color-input*]] - [app.main.ui.components.numeric-input :refer [numeric-input*]] + [app.main.ui.components.numeric-input :as deprecated-input] [app.main.ui.components.reorder-handler :refer [reorder-handler*]] [app.main.ui.context :as ctx] [app.main.ui.ds.buttons.icon-button :refer [icon-button*]] @@ -54,17 +54,17 @@ (when opacity [:div {:class (stl/css :opacity-element-wrapper)} [:span {:class (stl/css :icon-text)} "%"] - [:> numeric-input* {:value (-> color :opacity opacity->string) - :class (stl/css :opacity-input) - :placeholder "--" - :select-on-focus select-on-focus - :on-focus on-focus - :on-blur on-blur - :on-change on-opacity-change - :data-testid "opacity-input" - :default 100 - :min 0 - :max 100}]])]) + [:> deprecated-input/numeric-input* {:value (-> color :opacity opacity->string) + :class (stl/css :opacity-input) + :placeholder "--" + :select-on-focus select-on-focus + :on-focus on-focus + :on-blur on-blur + :on-change on-opacity-change + :data-testid "opacity-input" + :default 100 + :min 0 + :max 100}]])]) (mf/defc color-token-row* {::mf/private true} diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/rows/shadow_row.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/rows/shadow_row.cljs index 82dae0e9f7..449ad67c83 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/rows/shadow_row.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/rows/shadow_row.cljs @@ -11,7 +11,7 @@ [app.main.data.workspace :as dw] [app.main.data.workspace.undo :as dwu] [app.main.store :as st] - [app.main.ui.components.numeric-input :refer [numeric-input*]] + [app.main.ui.components.numeric-input :as deprecated-input] [app.main.ui.components.reorder-handler :refer [reorder-handler*]] [app.main.ui.components.select :refer [select]] [app.main.ui.ds.buttons.icon-button :refer [icon-button*]] @@ -171,39 +171,39 @@ :title (tr "workspace.options.shadow-options.offsetx")} [:span {:class (stl/css :shadow-advanced-label)} "X"] - [:> numeric-input* {:no-validate true - :placeholder "--" - :on-change on-update-offset-x - :value (:offset-x shadow)}]] + [:> deprecated-input/numeric-input* {:no-validate true + :placeholder "--" + :on-change on-update-offset-x + :value (:offset-x shadow)}]] [:div {:class (stl/css :shadow-advanced-blur) :title (tr "workspace.options.shadow-options.blur")} [:span {:class (stl/css :shadow-advanced-label)} (tr "workspace.options.shadow-options.blur")] - [:> numeric-input* {:no-validate true - :placeholder "--" - :on-change on-update-blur - :min 0 - :value (:blur shadow)}]] + [:> deprecated-input/numeric-input* {:no-validate true + :placeholder "--" + :on-change on-update-blur + :min 0 + :value (:blur shadow)}]] [:div {:class (stl/css :shadow-advanced-spread) :title (tr "workspace.options.shadow-options.spread")} [:span {:class (stl/css :shadow-advanced-label)} (tr "workspace.options.shadow-options.spread")] - [:> numeric-input* {:no-validate true - :placeholder "--" - :on-change on-update-spread - :value (:spread shadow)}]]] + [:> deprecated-input/numeric-input* {:no-validate true + :placeholder "--" + :on-change on-update-spread + :value (:spread shadow)}]]] [:div {:class (stl/css :shadow-advanced-row)} [:div {:class (stl/css :shadow-advanced-offset-y) :title (tr "workspace.options.shadow-options.offsety")} [:span {:class (stl/css :shadow-advanced-label)} "Y"] - [:> numeric-input* {:no-validate true - :placeholder "--" - :on-change on-update-offset-y - :value (:offset-y shadow)}]] + [:> deprecated-input/numeric-input* {:no-validate true + :placeholder "--" + :on-change on-update-offset-y + :value (:offset-y shadow)}]] [:> color-row* {:class (stl/css :shadow-advanced-color) :color (:color shadow) diff --git a/frontend/src/app/main/ui/workspace/viewport/presence.cljs b/frontend/src/app/main/ui/workspace/viewport/presence.cljs index 7924fcb5fe..dccba55243 100644 --- a/frontend/src/app/main/ui/workspace/viewport/presence.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/presence.cljs @@ -23,9 +23,8 @@ "11.78,1.82,11.05L11.58,1.30ZL11.58,1.30ZM1.37,12.15L2.90," "13.68L1.67,13.89L1.165,13.39L1.37,12.15ZL1.37,12.15Z")) -(mf/defc session-cursor - {::mf/props :obj - ::mf/memo true} +(mf/defc session-cursor* + {::mf/wrap [mf/memo]} [{:keys [session profile zoom]}] (let [point (:point session) bg-color (:color session) @@ -70,7 +69,7 @@ (fn [] (rx/dispose! sem)))) (for [session sessions] - [:& session-cursor + [:> session-cursor* {:session session :zoom zoom :profile (get profiles (:profile-id session)) From 841b47736ba79f068a4c65758b04ae3430f4a0c7 Mon Sep 17 00:00:00 2001 From: Eva Marco Date: Fri, 3 Jul 2026 09:28:27 +0200 Subject: [PATCH 055/229] :bug: Fix token pill border color on invalid pills when not selected (#10535) Signed-off-by: Eva Marco --- .../ui/workspace/tokens/management/token_pill.cljs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/tokens/management/token_pill.cljs b/frontend/src/app/main/ui/workspace/tokens/management/token_pill.cljs index c4f636db79..e61c2fcbf3 100644 --- a/frontend/src/app/main/ui/workspace/tokens/management/token_pill.cljs +++ b/frontend/src/app/main/ui/workspace/tokens/management/token_pill.cljs @@ -288,16 +288,17 @@ :token-pill-no-icon (and (not status-icon?) (not errors?)) :token-pill-default can-edit? :token-pill-disabled disabled? - :token-pill-applied (and can-edit? has-selected? (or half-applied? full-applied?)) + :token-pill-applied (and can-edit? applied?) :token-pill-invalid (and can-edit? errors?) - :token-pill-invalid-applied (and (or half-applied? full-applied?) errors? can-edit?) + :token-pill-invalid-applied (and applied? errors? can-edit?) + :token-pill-viewer is-viewer? - :token-pill-applied-viewer (and is-viewer? has-selected? - (or half-applied? full-applied?)) + :token-pill-applied-viewer (and is-viewer? + applied?) :token-pill-invalid-viewer (and is-viewer? errors?) :token-pill-invalid-applied-viewer (and is-viewer? - (and full-applied? errors?))) + applied?)) :id (str "token-pill-" (:id token)) :type "button" :on-focus on-hover From 2c4a9e0f825721adcd3cc718fe3fd737572b848e Mon Sep 17 00:00:00 2001 From: Luis de Dios Date: Fri, 3 Jul 2026 09:28:52 +0200 Subject: [PATCH 056/229] :sparkles: Improve dashboard invitations modal (#10459) --- .../src/app/main/ui/components/forms.cljs | 187 ------------- .../src/app/main/ui/components/forms.scss | 106 -------- .../src/app/main/ui/dashboard/projects.cljs | 7 +- .../src/app/main/ui/dashboard/projects.scss | 5 - frontend/src/app/main/ui/dashboard/team.cljs | 103 +++---- frontend/src/app/main/ui/dashboard/team.scss | 254 ++++++++---------- frontend/src/app/main/ui/forms.cljs | 78 +++--- 7 files changed, 208 insertions(+), 532 deletions(-) diff --git a/frontend/src/app/main/ui/components/forms.cljs b/frontend/src/app/main/ui/components/forms.cljs index 89a1bcd42d..89eaa3e700 100644 --- a/frontend/src/app/main/ui/components/forms.cljs +++ b/frontend/src/app/main/ui/components/forms.cljs @@ -10,7 +10,6 @@ [app.common.data :as d] [app.common.data.macros :as dm] [app.main.ui.components.select :as cs] - [app.main.ui.hooks :as hooks] [app.main.ui.icons :as deprecated-icon] [app.util.dom :as dom] [app.util.forms :as fm] @@ -450,189 +449,3 @@ (on-submit form event))))] [:> (mf/provider form-ctx) {:value form} [:form {:class class :on-submit on-submit'} children]])) - -(defn- conj-dedup - "A helper that adds item into a vector and removes possible - duplicates. This is not very efficient implementation but is ok for - handling form input that will have a small number of items." - [coll item] - (into [] (distinct) (conj coll item))) - -(mf/defc multi-input - [{:keys [form label class trim valid-item-fn caution-item-fn on-submit] :as props}] - (let [form (or form (mf/use-ctx form-ctx)) - input-name (get props :name) - touched? (get-in @form [:touched input-name]) - error (get-in @form [:errors input-name]) - focus? (mf/use-state false) - - auto-focus? (get props :auto-focus? false) - - items (mf/use-state - (fn [] - (let [initial (get-in @form [:data input-name])] - (if (or (vector? initial) - (set? initial)) - (mapv (fn [val] - {:text val - :valid (valid-item-fn val) - :caution (caution-item-fn val)}) - initial) - [])))) - - value (mf/use-state "") - result (hooks/use-equal-memo @items) - - empty? (and (str/empty? @value) - (zero? (count @items))) - - klass (str (get props :class) " " - (stl/css-case - :focus @focus? - :valid (and touched? (not error)) - :invalid (and touched? error) - :empty empty? - :custom-multi-input true)) - - in-klass (str class " " - (stl/css-case - :inside-input true - :no-padding (pos? (count @items)) - :invalid (and (some? valid-item-fn) - touched? - (not (str/empty? @value)) - (not (valid-item-fn @value))))) - - on-focus - (mf/use-fn #(reset! focus? true)) - - on-change - (mf/use-fn - (fn [event] - (let [content (-> event dom/get-target dom/get-input-value)] - (reset! value content)))) - - update-form! - (mf/use-fn - (mf/deps form) - (fn [items] - (let [value (str/join " " (map :text items))] - (fm/update-input-value! form input-name value)))) - - on-key-down - (mf/use-fn - (mf/deps @value) - (fn [event] - (let [val (cond-> @value trim str/trim)] - (cond - (or (kbd/enter? event) (kbd/comma? event) (kbd/space? event)) - (do - (dom/prevent-default event) - (dom/stop-propagation event) - - ;; Once enter/comma is pressed we mark it as touched - (swap! form assoc-in [:touched input-name] true) - - ;; Empty values means "submit" the form (whent some items have been added - (when (and (kbd/enter? event) (str/empty? @value) (not-empty @items)) - (when (fn? on-submit) - (on-submit form event))) - - ;; If we have a string in the input we add it only if valid - (when (and (valid-item-fn val) (not (str/empty? @value))) - (reset! value "") - - ;; Once added the form is back as "untouched" - (swap! form assoc-in [:touched input-name] false) - - ;; This split will allow users to copy comma/space separated values of emails - (doseq [val (str/split val #",|\s+")] - (swap! items conj-dedup {:text (str/trim val) - :valid (valid-item-fn val) - :caution (caution-item-fn val)})))) - - (and (kbd/backspace? event) (str/empty? @value)) - (do - (dom/prevent-default event) - (dom/stop-propagation event) - (swap! items (fn [items] (if (c/empty? items) items (pop items))))))))) - - on-paste - (mf/use-fn - (fn [event] - (let [paste-data (-> event .-clipboardData (.getData "text"))] - (when (and (string? paste-data) - (re-find #"[,\s]" paste-data)) - (dom/prevent-default event) - (dom/stop-propagation event) - - ;; Mark as touched - (swap! form assoc-in [:touched input-name] true) - - ;; Split pasted text by commas and/or whitespace, add each valid part - (let [parts (->> (str/split paste-data #",|\s+") - (map str/trim) - (remove str/empty?))] - (doseq [part parts] - (when (valid-item-fn part) - (swap! items conj-dedup {:text part - :valid true - :caution (caution-item-fn part)}))) - - ;; Reset input value and mark as untouched after successful paste - (reset! value "") - (swap! form assoc-in [:touched input-name] false)))))) - - on-blur - (mf/use-fn - (fn [_] - (reset! focus? false) - (when-not (get-in @form [:touched input-name]) - (swap! form assoc-in [:touched input-name] true)))) - - remove-item! - (mf/use-fn - (fn [item] - (swap! items #(into [] (remove (fn [x] (= x item))) %)))) - - manage-key-down - (mf/use-fn - (fn [item event] - (when (kbd/enter? event) - (remove-item! item))))] - - (mf/with-effect [result @value] - (let [val (cond-> @value trim str/trim) - values (conj-dedup result {:text val :valid (valid-item-fn val)}) - values (filterv #(:valid %) values)] - - (update-form! values))) - - [:div {:class klass} - [:input {:id (name input-name) - :name (name input-name) - :class in-klass - :type "text" - :auto-focus auto-focus? - :on-focus on-focus - :on-blur on-blur - :on-key-down on-key-down - :on-paste on-paste - :value @value - :on-change on-change - :placeholder (when empty? label)}] - [:label {:for (name input-name)} label] - - (when-let [items (seq @items)] - [:div {:class (stl/css :selected-items)} - (for [item items] - [:div {:class (stl/css :selected-item) - :key (:text item) - :tab-index "0" - :on-key-down (partial manage-key-down item)} - [:span {:class (stl/css-case :around true - :invalid (not (:valid item)) - :caution (:caution item))} - [:span {:class (stl/css :text)} (:text item)] - [:button {:class (stl/css :icon) - :on-click #(remove-item! item)} deprecated-icon/close]]])])])) diff --git a/frontend/src/app/main/ui/components/forms.scss b/frontend/src/app/main/ui/components/forms.scss index dc3f521ab1..30901f43ec 100644 --- a/frontend/src/app/main/ui/components/forms.scss +++ b/frontend/src/app/main/ui/components/forms.scss @@ -326,112 +326,6 @@ } } -// MULTI INPUT -.custom-multi-input { - display: flex; - flex-direction: column; - position: relative; - min-block-size: $sz-40; - max-block-size: px2rem(180); - inline-size: 100%; - overflow-y: hidden; - - .inside-input { - @include deprecated.remove-input-style; - @include t.use-typography("body-small"); - @include text-ellipsis; - - inline-size: 100%; - max-inline-size: calc(100% - deprecated.$s-1); - min-block-size: $sz-32; - padding-block-start: 0; - block-size: $sz-32; - padding: var(--sp-s); - margin: 0; - border-radius: var(--sp-s); - color: var(--input-foreground-color-active); - background-color: var(--input-background-color); - - &:focus { - outline: none; - border: $b-1 solid var(--input-border-color-focus); - } - - &.invalid { - border: $b-1 solid var(--input-border-color-error); - - &:hover, - &:focus { - border: $b-1 solid var(--input-border-color-error); - } - } - } - - label { - display: none; - } - - .selected-items { - display: flex; - flex-wrap: wrap; - gap: var(--sp-xs); - max-block-size: px2rem(136); - padding: var(--sp-xs) 0; - overflow-y: auto; - - .selected-item { - .around { - display: flex; - align-items: center; - gap: var(--sp-xs); - block-size: $sz-24; - inline-size: fit-content; - padding-inline-start: px2rem(6); - border-radius: $br-6; - background-color: var(--pill-background-color); - border: $b-1 solid var(--pill-background-color); - box-sizing: border-box; - - .text { - @include t.use-typography("body-small"); - - padding-inline-end: var(--sp-s); - color: var(--pill-foreground-color); - } - - .icon { - display: flex; - justify-content: center; - align-items: center; - border: none; - background: none; - cursor: pointer; - block-size: $sz-32; - inline-size: $sz-24; - - svg { - @extend %button-icon-small; - - stroke: var(--icon-foreground); - } - } - - &.invalid { - background-color: var(--status-widget-background-color-error); - - .text { - color: var(--alert-text-foreground-color-error); - } - - .icon svg { - stroke: var(--alert-text-foreground-color-error); - } - } - } - } - } -} - // RADIO BUTTONS .custom-radio { display: grid; diff --git a/frontend/src/app/main/ui/dashboard/projects.cljs b/frontend/src/app/main/ui/dashboard/projects.cljs index cdf7d0d648..ee9ca03325 100644 --- a/frontend/src/app/main/ui/dashboard/projects.cljs +++ b/frontend/src/app/main/ui/dashboard/projects.cljs @@ -23,6 +23,7 @@ [app.main.ui.dashboard.inline-edition :refer [inline-edition]] [app.main.ui.dashboard.pin-button :refer [pin-button*]] [app.main.ui.dashboard.project-menu :refer [project-menu*]] + [app.main.ui.ds.buttons.button :refer [button*]] [app.main.ui.ds.product.empty-placeholder :refer [empty-placeholder*]] [app.main.ui.hooks :as hooks] [app.main.ui.icons :as deprecated-icon] @@ -88,11 +89,9 @@ [:div {:class (stl/css :info)} [:span (tr "dasboard.team-hero.text")] [:a {:on-click on-nav-members-click} (tr "dasboard.team-hero.management")]] - [:button - {:class (stl/css :btn-primary :invite) - :on-click on-invite} + [:> button* {:variant "primary" + :on-click on-invite} (tr "onboarding.choice.team-up.invite-members")]] - [:button {:class (stl/css :close) :on-click on-close' :aria-label (tr "labels.close")} diff --git a/frontend/src/app/main/ui/dashboard/projects.scss b/frontend/src/app/main/ui/dashboard/projects.scss index 4f47567d87..774d8ee3fa 100644 --- a/frontend/src/app/main/ui/dashboard/projects.scss +++ b/frontend/src/app/main/ui/dashboard/projects.scss @@ -244,11 +244,6 @@ stroke: var(--close-icon-foreground-color); } -.invite { - block-size: $sz-32; - inline-size: px2rem(180); -} - .img-wrapper { display: flex; align-items: center; diff --git a/frontend/src/app/main/ui/dashboard/team.cljs b/frontend/src/app/main/ui/dashboard/team.cljs index c7d6aed7a0..0746a49a6b 100644 --- a/frontend/src/app/main/ui/dashboard/team.cljs +++ b/frontend/src/app/main/ui/dashboard/team.cljs @@ -34,6 +34,11 @@ [app.main.ui.ds.buttons.icon-button :refer [icon-button*]] [app.main.ui.ds.controls.combobox :refer [combobox*]] [app.main.ui.ds.foundations.assets.icon :refer [icon*] :as i] + [app.main.ui.ds.foundations.typography :as t] + [app.main.ui.ds.foundations.typography.heading :refer [heading*]] + [app.main.ui.ds.foundations.typography.text :refer [text*]] + [app.main.ui.ds.notifications.context-notification :refer [context-notification*]] + [app.main.ui.forms :as fc] [app.main.ui.icons :as deprecated-icon] [app.main.ui.notifications.badge :refer [badge-notification]] [app.main.ui.notifications.context-notification :refer [context-notification]] @@ -126,15 +131,12 @@ [:li {:class (when settings-section? (stl/css :active))} [:a {:on-click on-nav-settings} (tr "labels.settings")]]]] [:div {:class (stl/css :dashboard-buttons)} - (if (and (or invitations-section? members-section?) (not-empty invitations)) - [:button - {:class (stl/css :btn-secondary :btn-small) - :type "button" - :disabled (not can-invite?) - :on-click on-invite-member - :data-testid "invite-member"} - (tr "dashboard.invite-profile")] - [:div {:class (stl/css :blank-space)}])]])) + (when (and (or invitations-section? members-section?) (not-empty invitations)) + [:> button* {:variant "secondary" + :on-click on-invite-member + :disabled (not can-invite?) + :data-testid "invite-member"} + (tr "dashboard.invite-profile")])]])) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; INVITATIONS MODAL @@ -142,10 +144,10 @@ (defn get-available-roles [permissions] - (->> [{:value "viewer" :label (tr "labels.viewer")} - {:value "editor" :label (tr "labels.editor")} + (->> [{:id "viewer" :value "viewer" :label (tr "labels.viewer")} + {:id "editor" :value "editor" :label (tr "labels.editor")} (when (:is-admin permissions) - {:value "admin" :label (tr "labels.admin")})] + {:id "admin" :value "admin" :label (tr "labels.admin")})] (filterv identity))) (def ^:private schema:invite-member-form @@ -236,46 +238,55 @@ :on-error (partial on-error form)}] (st/emit! (dtm/check-and-submit-invite-members (with-meta params mdata) origin do-invite-members!))))] + (mf/with-effect [team-id] + (st/emit! (dtm/fetch-members team-id))) + [:div {:class (stl/css-case :modal-team-container true :modal-team-container-workspace (= origin :workspace) :hero (= origin :hero))} - [:& fm/form {:on-submit on-submit :form form} - [:div {:class (stl/css :modal-title)} + [:> fc/form* {:form form + :class (stl/css :form-wrapper) + :on-submit on-submit} + [:> heading* {:level 2 + :typography t/headline-medium + :class (stl/css :color-light)} (tr "modals.invite-team-member.title")] (when (= :workspace origin) - [:div {:class (stl/css :invite-team-member-text)} + [:> text* {:as "p" + :typography t/body-large + :class (stl/css :color-light)} (tr "modals.invite-team-member.text")]) (when-not (= "" @error-text) - [:& context-notification {:content @error-text - :level :error}]) + [:> context-notification* {:level :error} + @error-text]) (when (some current-data-emails current-members-emails) - [:& context-notification {:content (tr "modals.invite-member.repeated-invitation") - :level :warning}]) + [:> context-notification* {:level :warning} + (tr "modals.invite-member.repeated-invitation")]) - [:div {:class (stl/css :role-select)} - [:p {:class (stl/css :role-title)} + [:div {:class (stl/css :form-group)} + [:> text* {:as "label" + :typography t/body-medium + :class (stl/css :color-light)} (tr "onboarding.choice.team-up.roles")] - [:& fm/select {:name :role :options roles}]] + [:> fc/form-select* {:name :role + :default-selected "editor" + :options roles}] + [:> fc/form-multi-input* {:type "email" + :name :emails + :auto-focus? true + :trim true + :valid-item-fn sm/parse-email + :caution-item-fn current-members-emails + :placeholder (tr "modals.invite-member.emails")}]] - [:div {:class (stl/css :invitation-row)} - [:& fm/multi-input {:type "email" - :class (stl/css :email-input) - :name :emails - :auto-focus? true - :trim true - :valid-item-fn sm/parse-email - :caution-item-fn current-members-emails - :label (tr "modals.invite-member.emails")}]] - - [:div {:class (stl/css :action-buttons)} - [:> fm/submit-button* - {:label (tr "modals.invite-member-confirm.accept") - :class (stl/css :accept-btn) - :disabled (and (boolean (some current-data-emails current-members-emails)) - (empty? (remove current-members-emails current-data-emails)))}]]]])) + [:div {:class (stl/css :form-buttons)} + [:> fc/form-submit* + {:disabled (and (boolean (some current-data-emails current-members-emails)) + (empty? (remove current-members-emails current-data-emails)))} + (tr "modals.invite-member-confirm.accept")]]]])) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; INVITE RESTRICTED MEMBERS MODAL @@ -821,15 +832,13 @@ [:div {:class (stl/css :empty-invitations)} [:div (tr "labels.no-invitations")] (if ^boolean can-invite - [[:div (tr "labels.no-invitations-gather-people")] - [:div {:class (stl/css :empty-invitations-buttons)} - [:a - {:class (stl/css :btn-empty-invitations) - :role "button" - :on-click on-invite-member - :data-testid "invite-member"} - (tr "dashboard.invite-profile")]] - [:div {:class (stl/css :blank-space)}]] + [:* + [:div (tr "labels.no-invitations-gather-people")] + [:> button* {:variant "primary" + :class (stl/css :btn-empty-invitations) + :on-click on-invite-member + :data-testid "invite-member"} + (tr "dashboard.invite-profile")]] [:div {:class (stl/css :no-permission-text)} (tr "dashboard.invitations.no-permission")])])) (mf/defc invitation-modal diff --git a/frontend/src/app/main/ui/dashboard/team.scss b/frontend/src/app/main/ui/dashboard/team.scss index 7509b52371..a1bf36a814 100644 --- a/frontend/src/app/main/ui/dashboard/team.scss +++ b/frontend/src/app/main/ui/dashboard/team.scss @@ -17,7 +17,7 @@ display: flex; flex-direction: column; align-items: center; - width: 100%; + inline-size: 100%; border-top: $b-1 solid var(--color-background-quaternary); overflow-y: auto; padding-inline-start: var(--sp-xl); @@ -35,8 +35,8 @@ display: grid; grid-auto-rows: min-content; gap: var(--sp-s); - max-width: $sz-1000; - width: 100%; + max-inline-size: $sz-1000; + inline-size: 100%; } .info-block { @@ -62,8 +62,8 @@ } .owner-icon { - width: $sz-32; - height: $sz-32; + inline-size: $sz-32; + block-size: $sz-32; border-radius: 50%; } @@ -73,8 +73,8 @@ display: flex; justify-content: center; align-items: center; - height: $sz-16; - width: $sz-16; + block-size: $sz-16; + inline-size: $sz-16; color: transparent; fill: none; stroke-width: $b-1; @@ -86,8 +86,8 @@ --update-button-opacity: 0; position: relative; - height: $sz-120; - width: $sz-120; + block-size: $sz-120; + inline-size: $sz-120; padding: var(--sp-l); margin-block-end: var(--sp-xxxl); @@ -101,8 +101,8 @@ top: 0; left: 0; border-radius: 50%; - width: $sz-120; - height: $sz-120; + inline-size: $sz-120; + block-size: $sz-120; } .update-overlay { @@ -116,8 +116,8 @@ position: absolute; top: 0; left: 0; - height: 100%; - width: 100%; + block-size: 100%; + inline-size: 100%; z-index: var(--z-index-set); border-radius: $br-circle; background-color: var(--color-accent-primary); @@ -127,13 +127,13 @@ display: flex; justify-content: center; align-items: center; - height: $sz-16; - width: $sz-16; + block-size: $sz-16; + inline-size: $sz-16; color: transparent; fill: none; stroke-width: $b-1; - min-width: $sz-24; - min-height: $sz-24; + min-inline-size: $sz-24; + min-block-size: $sz-24; stroke: var(--color-foreground-primary); } @@ -141,8 +141,8 @@ .dashboard-team-members { display: flex; justify-content: center; - width: 100%; - height: 100%; + inline-size: 100%; + block-size: 100%; padding-inline-start: var(--sp-xl); padding-block-start: var(--sp-xl); border-top: $b-1 solid var(--color-background-quaternary); @@ -158,9 +158,9 @@ .team-members { display: grid; grid-template-rows: auto 1fr; - height: fit-content; - max-width: $sz-1000; - width: 100%; + block-size: fit-content; + max-inline-size: $sz-1000; + inline-size: 100%; } .table-header { @@ -169,9 +169,9 @@ display: grid; align-items: center; grid-template-columns: 43% 1fr px2rem(108) var(--sp-m); - height: $sz-40; - width: 100%; - max-width: $sz-1000; + block-size: $sz-40; + inline-size: 100%; + max-inline-size: $sz-1000; padding: 0 var(--sp-l); user-select: none; color: var(--color-foreground-secondary); @@ -181,9 +181,9 @@ display: grid; grid-auto-rows: px2rem(64); gap: var(--sp-l); - width: 100%; - height: 100%; - max-width: $sz-1000; + inline-size: 100%; + block-size: 100%; + max-inline-size: $sz-1000; margin-top: var(--sp-l); color: var(--color-foreground-secondary); } @@ -192,8 +192,8 @@ display: grid; grid-template-columns: 43% 1fr auto; align-items: center; - height: px2rem(64); - width: 100%; + block-size: px2rem(64); + inline-size: 100%; padding: 0 var(--sp-l); border-radius: $br-8; background-color: var(--color-background-tertiary); @@ -201,8 +201,8 @@ } .title-field-name { - width: 43%; - min-width: px2rem(300); + inline-size: 43%; + min-inline-size: px2rem(300); } .title-field-role { @@ -221,8 +221,8 @@ display: grid; grid-template-columns: auto 1fr; gap: var(--sp-l); - width: 43%; - min-width: px2rem(300); + inline-size: 43%; + min-inline-size: px2rem(300); } .field-roles { @@ -236,15 +236,15 @@ // MEMBER INFO .member-image { - height: $sz-32; - width: $sz-32; + block-size: $sz-32; + inline-size: $sz-32; border-radius: $br-circle; } .member-info { display: grid; grid-template-rows: 1fr 1fr; - width: 100%; + inline-size: 100%; } .member-name, @@ -272,9 +272,9 @@ display: grid; grid-template-columns: 1fr auto; align-items: center; - height: $sz-32; - min-width: $sz-160; - width: fit-content; + block-size: $sz-32; + min-inline-size: $sz-160; + inline-size: fit-content; padding: var(--sp-xs) var(--sp-s); border-radius: $br-8; border-color: var(--color-background-quaternary); @@ -303,8 +303,8 @@ border: $b-2 solid var(--color-background-quaternary); margin: 0; bottom: calc(-1 * px2rem(76)); - width: fit-content; - min-width: $sz-160; + inline-size: fit-content; + min-inline-size: $sz-160; } .rol-dropdown-item { @@ -313,8 +313,8 @@ display: flex; align-items: center; justify-content: space-between; - height: $sz-28; - width: 100%; + block-size: $sz-28; + inline-size: 100%; padding: px2rem(6); border-radius: $br-8; cursor: pointer; @@ -329,8 +329,8 @@ display: flex; justify-content: center; align-items: center; - height: $sz-16; - width: $sz-16; + block-size: $sz-16; + inline-size: $sz-16; color: transparent; fill: none; stroke-width: $b-1; @@ -366,8 +366,8 @@ bottom: calc(-1 * var(--sp-xxxl)); right: 0; left: unset; - width: fit-content; - min-width: $sz-160; + inline-size: fit-content; + min-inline-size: $sz-160; } .action-dropdown-item { @@ -376,8 +376,8 @@ display: flex; align-items: center; justify-content: space-between; - height: $sz-28; - width: 100%; + block-size: $sz-28; + inline-size: 100%; padding: px2rem(6); border-radius: $br-8; cursor: pointer; @@ -391,8 +391,8 @@ .dashboard-team-invitations { display: flex; justify-content: center; - width: 100%; - height: 100%; + inline-size: 100%; + block-size: 100%; padding-inline-start: var(--sp-xl); padding-block-start: var(--sp-xl); border-top: $b-1 solid var(--color-background-quaternary); @@ -403,9 +403,9 @@ .invitations { display: grid; grid-template-rows: auto 1fr; - height: fit-content; - max-width: $sz-1000; - width: 100%; + block-size: fit-content; + max-inline-size: $sz-1000; + inline-size: 100%; } .invitations-actions { @@ -416,7 +416,7 @@ align-items: center; gap: var(--sp-l); color: var(--title-foreground-color); - height: $sz-40; + block-size: $sz-40; margin-block-end: px2rem(36); } @@ -430,7 +430,7 @@ } .empty-invitations { - width: 100%; + inline-size: 100%; margin-top: var(--sp-l); border: $b-1 solid var(--color-background-quaternary); border-radius: $br-8; @@ -440,21 +440,17 @@ } .empty-invitations-buttons { - width: fit-content; + inline-size: fit-content; margin: auto; } .no-permission-text { - max-width: $sz-512; + max-inline-size: $sz-512; margin: auto; } .btn-empty-invitations { - // TODO: Remove this extend add DS component - @extend %button-primary; - margin-block-start: var(--sp-l); - padding-inline: var(--sp-m); } .title-field-status { @@ -490,8 +486,8 @@ grid-template-rows: auto 1fr; justify-items: center; gap: var(--sp-xxl); - width: 100%; - height: 100%; + inline-size: 100%; + block-size: 100%; padding-inline-start: var(--sp-xl); padding-block-start: var(--sp-xl); border-top: $b-1 solid var(--color-background-quaternary); @@ -509,9 +505,9 @@ display: grid; place-items: center; align-content: center; - height: px2rem(156); - max-width: $sz-1000; - width: 100%; + block-size: px2rem(156); + max-inline-size: $sz-1000; + inline-size: 100%; padding: var(--sp-xxxl); border: $b-1 solid var(--color-background-quaternary); border-radius: $br-8; @@ -527,7 +523,7 @@ margin: 0; padding: var(--sp-xxxl); padding: 0; - width: px2rem(468); + inline-size: px2rem(468); } .hero-title { @@ -541,19 +537,19 @@ color: var(--color-foreground-secondary); margin-bottom: 0; - max-width: $sz-512; + max-inline-size: $sz-512; } .hero-btn { // TODO: Remove this extended class using a DS component @extend %button-primary; - height: $sz-32; - max-width: $sz-512; + block-size: $sz-32; + max-inline-size: $sz-512; } .webhook-table { - height: fit-content; + block-size: fit-content; } .webhook-row { @@ -569,7 +565,7 @@ .menu-disabled { color: var(--color-foreground-secondary); - width: $sz-28; + inline-size: $sz-28; display: flex; justify-content: center; align-items: center; @@ -590,8 +586,8 @@ margin: 0; right: calc(-1 * var(--sp-l)); bottom: calc(-1 * $sz-40); - width: fit-content; - min-width: $sz-160; + inline-size: fit-content; + min-inline-size: $sz-160; } .webhook-dropdown-item { @@ -600,8 +596,8 @@ display: flex; align-items: center; justify-content: space-between; - height: $sz-28; - width: 100%; + block-size: $sz-28; + inline-size: 100%; padding: px2rem(6); border-radius: $br-8; cursor: pointer; @@ -615,8 +611,8 @@ display: flex; justify-content: center; align-items: center; - height: $sz-16; - width: $sz-16; + block-size: $sz-16; + inline-size: $sz-16; color: transparent; fill: none; stroke-width: $b-1; @@ -627,8 +623,8 @@ display: flex; justify-content: center; align-items: center; - height: $sz-16; - width: $sz-16; + block-size: $sz-16; + inline-size: $sz-16; color: transparent; fill: none; stroke-width: $b-1; @@ -639,16 +635,16 @@ .modal-team-container { border-radius: $br-8; border: $b-2 solid var(--color-background-quaternary); - min-width: $sz-364; - min-height: $sz-192; - max-width: $sz-512; - max-height: $sz-512; + min-inline-size: $sz-364; + min-block-size: $sz-192; + max-inline-size: $sz-512; + max-block-size: $sz-512; box-shadow: var(--el-shadow-dark); position: fixed; top: px2rem(72); right: var(--sp-m); left: unset; - width: $sz-400; + inline-size: $sz-400; padding: var(--sp-xxxl); background-color: var(--color-background-primary); z-index: var(--z-index-set); @@ -664,26 +660,33 @@ z-index: var(--z-index-set); } -.modal-title { - @include t.use-typography("headline-medium"); - - height: $sz-32; +.color-light { color: var(--color-foreground-primary); } -.role-select { +.form-wrapper { display: flex; flex-direction: column; - gap: var(--sp-xs); - row-gap: var(--sp-s); + gap: var(--sp-xl); +} + +.form-group { + display: flex; + flex-direction: column; + gap: var(--sp-s); +} + +.form-buttons { + display: flex; + justify-content: flex-end; } .arrow-icon { display: flex; justify-content: center; align-items: center; - height: $sz-16; - width: $sz-16; + block-size: $sz-16; + inline-size: $sz-16; color: transparent; fill: none; stroke-width: $b-1; @@ -691,25 +694,6 @@ transform: rotate(90deg); } -.invite-team-member-text { - @include t.use-typography("body-large"); - - margin: 0 0 var(--sp-l) 0; - color: var(--color-foreground-primary); -} - -.role-title { - @include t.use-typography("body-large"); - - margin: 0; - color: var(--color-foreground-primary); -} - -.invitation-row { - margin-top: var(--sp-s); - margin-bottom: var(--sp-xxl); -} - .action-buttons { display: flex; justify-content: flex-end; @@ -729,8 +713,8 @@ position: fixed; left: 0; top: 0; - height: 100%; - width: 100%; + block-size: 100%; + inline-size: 100%; z-index: var(--z-index-set); background-color: var(--overlay-color); } @@ -741,10 +725,10 @@ border-radius: $br-8; background-color: var(--color-background-primary); border: $b-2 solid var(--color-background-quaternary); - min-width: $sz-364; - min-height: $sz-192; - max-width: $sz-512; - max-height: $sz-512; + min-inline-size: $sz-364; + min-block-size: $sz-192; + max-inline-size: $sz-512; + max-block-size: $sz-512; } .modal-header { @@ -795,23 +779,11 @@ .action-buttons { @extend %modal-action-btns; - button { - @extend %modal-accept-btn; - } - .cancel-button { @extend %modal-cancel-btn; } } -// TODO: Remove this extended class using input component -.email-input { - @include t.use-typography("body-small"); - @extend %input-base; - - height: auto; -} - // FIXME: This does not conform to our CSS Guidelines. Need to unnest and to use // custom properties to handle state changes. .input-wrapper { @@ -963,7 +935,7 @@ .modal-select-org-container { display: flex; flex-direction: column; - width: $sz-512; + inline-size: $sz-512; } .modal-select-org-header { @@ -1017,7 +989,7 @@ grid-template-columns: var(--sp-xxxl) 1fr var(--sp-xxxl); align-items: center; gap: var(--sp-m); - width: max-content; + inline-size: max-content; } .org-options-btn { @@ -1045,8 +1017,8 @@ display: flex; justify-content: center; align-items: center; - height: $sz-16; - width: $sz-16; + block-size: $sz-16; + inline-size: $sz-16; color: transparent; fill: none; stroke-width: $b-1; @@ -1067,8 +1039,8 @@ border: $b-2 solid var(--color-background-quaternary); margin: 0; top: var(--sp-xxxl); - width: fit-content; - min-width: $sz-160; + inline-size: fit-content; + min-inline-size: $sz-160; } .org-dropdown-item { @@ -1077,8 +1049,8 @@ display: flex; align-items: center; justify-content: space-between; - height: $sz-28; - width: 100%; + block-size: $sz-28; + inline-size: 100%; padding: px2rem(6); border-radius: $br-8; cursor: pointer; diff --git a/frontend/src/app/main/ui/forms.cljs b/frontend/src/app/main/ui/forms.cljs index 82b0335008..b542a06073 100644 --- a/frontend/src/app/main/ui/forms.cljs +++ b/frontend/src/app/main/ui/forms.cljs @@ -66,57 +66,53 @@ touched? (and (contains? (:data @form) name) (get-in @form [:touched name])) - value (mf/use-state "") - focus? (mf/use-state false) + value* (mf/use-state "") + value (deref value*) - items - (mf/use-state - (fn [] - (let [initial (get-in @form [:data name])] - (if (or (vector? initial) (set? initial)) - (mapv (fn [val] - {:text val - :valid (valid-item-fn val) - :caution (caution-item-fn val)}) - initial) - [])))) - - on-focus - (mf/use-fn - #(reset! focus? true)) + items* (mf/use-state + (fn [] + (let [initial (get-in @form [:data name])] + (if (or (vector? initial) (set? initial)) + (mapv (fn [val] + {:text val + :valid (valid-item-fn val) + :caution (caution-item-fn val)}) + initial) + [])))) + items (deref items*) on-change (mf/use-fn (fn [event] (let [content (-> event dom/get-target dom/get-input-value)] - (reset! value content)))) + (reset! value* content)))) on-key-down (mf/use-fn - (mf/deps @value form name valid-item-fn caution-item-fn trim) + (mf/deps value form name valid-item-fn caution-item-fn trim) (fn [event] - (let [val (cond-> @value trim str/trim)] + (let [val (cond-> value trim str/trim)] (cond (or (k/enter? event) (k/comma? event) (k/space? event)) (do (dom/prevent-default event) (dom/stop-propagation event) (swap! form assoc-in [:touched name] true) - (when (and (valid-item-fn val) (not (str/empty? @value))) - (reset! value "") + (when (and (valid-item-fn val) (not (str/empty? value))) + (reset! value* "") (swap! form assoc-in [:touched name] false) (doseq [v (str/split val #",|\s+")] (let [v (str/trim v)] - (swap! items conj-dedup {:text v - :valid (valid-item-fn v) - :caution (caution-item-fn v)}))))) + (swap! items* conj-dedup {:text v + :valid (valid-item-fn v) + :caution (caution-item-fn v)}))))) - (and (k/backspace? event) (str/empty? @value)) + (and (k/backspace? event) (str/empty? value)) (do (dom/prevent-default event) (dom/stop-propagation event) - (swap! items (fn [items] - (if (empty? items) items (pop items))))))))) + (swap! items* (fn [items] + (if (empty? items) items (pop items))))))))) on-paste (mf/use-fn @@ -136,43 +132,41 @@ (remove str/empty?))] (doseq [part parts] (when (valid-item-fn part) - (swap! items conj-dedup {:text part - :valid true - :caution (caution-item-fn part)}))) + (swap! items* conj-dedup {:text part + :valid true + :caution (caution-item-fn part)}))) ;; Reset input value and mark as untouched after successful paste - (reset! value "") + (reset! value* "") (swap! form assoc-in [:touched name] false)))))) on-blur (mf/use-fn (fn [] - (reset! focus? false) (when-not (get-in @form [:touched name]) (swap! form assoc-in [:touched name] true)))) on-remove-item (mf/use-fn (fn [item] - (swap! items #(filterv (fn [x] (not= x item)) %)))) + (swap! items* #(filterv (fn [x] (not= x item)) %)))) props - (mf/spread-props props {:value @value + (mf/spread-props props {:value value :on-change on-change - :on-focus on-focus :on-blur on-blur :on-key-down on-key-down :on-paste on-paste :hint-type (when (and touched? - (not (str/empty? @value)) - (not (valid-item-fn @value))) "error")})] + (not (str/empty? value)) + (not (valid-item-fn value))) "error")})] ;; Sync form data whenever items or input value changes. ;; This ensures the current (unconfirmed) input value is included in the ;; form data when the user submits without pressing Enter/Space/Comma. - (mf/with-effect [@items @value] - (let [items-text (mapv :text @items) - val (cond-> @value trim str/trim) + (mf/with-effect [items value] + (let [items-text (mapv :text items) + val (cond-> value trim str/trim) combined (if (and (valid-item-fn val) (not (str/empty? val))) (conj items-text val) items-text) @@ -182,7 +176,7 @@ [:div {:class (stl/css :multi-input)} [:> input* props] - (when-let [items-seq (seq @items)] + (when-let [items-seq (seq items)] [:div {:class (stl/css :multi-input-chips)} (for [item items-seq] [:div {:class (stl/css :multi-input-chip) From 0182f239ae4f2d02f083299880d62e8026f388b5 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Fri, 3 Jul 2026 09:45:44 +0200 Subject: [PATCH 057/229] :sparkles: Add Nitrate bulk profile creation endpoint (#10491) Add a Nitrate-only management RPC method to create active Penpot profiles in bulk through the existing shared-key protected management API. --- backend/src/app/nitrate.clj | 1 - backend/src/app/rpc/management/nitrate.clj | 54 ++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/backend/src/app/nitrate.clj b/backend/src/app/nitrate.clj index 1f54c47121..741e0f836f 100644 --- a/backend/src/app/nitrate.clj +++ b/backend/src/app/nitrate.clj @@ -279,7 +279,6 @@ profile-id) schema:profile-org params)) - (defn- get-org-summary-api [cfg {:keys [organization-id] :as params}] (request-to-nitrate cfg :get diff --git a/backend/src/app/rpc/management/nitrate.clj b/backend/src/app/rpc/management/nitrate.clj index 700cf59cac..7438d1f563 100644 --- a/backend/src/app/rpc/management/nitrate.clj +++ b/backend/src/app/rpc/management/nitrate.clj @@ -8,6 +8,7 @@ "Internal Nitrate HTTP RPC API. Provides authenticated access to organization management and token validation endpoints." (:require + [app.auth :as aauth] [app.auth.oidc :as oidc] [app.common.data :as d] [app.common.exceptions :as ex] @@ -24,6 +25,7 @@ [app.media :as media] [app.nitrate :as nitrate] [app.rpc :as rpc] + [app.rpc.commands.auth :as auth] [app.rpc.commands.files :as files] [app.rpc.commands.nitrate :as cnit] [app.rpc.commands.profile :as profile] @@ -914,3 +916,55 @@ RETURNING id, deleted_at;") (neh/send-organization-setup-sso-emails! cfg organization-id)) nil) +;; ---- API: bulk-create-profiles + +(def ^:private schema:bulk-create-profiles-params + [:map + [:password [::sm/word-string {:max 500}]] + [:emails [:vector ::sm/email]]]) + +(def ^:private schema:bulk-create-profiles-result + [:map + [:created [:vector ::sm/email]] + [:skipped [:vector ::sm/email]]]) + +(defn- create-active-profile! + "Create a single already-active profile (email pre-verified, onboarding + skipped) plus its default team. Returns nil; existence checks happen in the + caller so duplicates are skipped instead of aborting the whole batch." + [cfg email password] + (let [fullname (-> (str/split email "@") first)] + (->> {:email email + :fullname fullname + :password password + :is-active true + :props {:onboarding-viewed true}} + (auth/create-profile cfg) + (auth/create-profile-rels cfg)) + nil)) + +(sv/defmethod ::bulk-create-profiles + "Create multiple already-active profiles that share a single password. The + created users skip email verification and onboarding. Emails that already + belong to an existing profile are skipped. Intended for the Nitrate admin + bulk-creation screen; access is gated by the shared key and, in Nitrate, an + email allow-list." + {::doc/added "2.19" + ::sm/params schema:bulk-create-profiles-params + ::sm/result schema:bulk-create-profiles-result + ::rpc/auth false} + [cfg {:keys [password emails]}] + (let [derived (aauth/derive-password password)] + (db/tx-run! + cfg + (fn [{:keys [::db/conn] :as cfg}] + (reduce + (fn [acc email] + (let [email (eml/clean email)] + (if (profile/get-profile-by-email conn email) + (update acc :skipped conj email) + (do + (create-active-profile! cfg email derived) + (update acc :created conj email))))) + {:created [] :skipped []} + emails))))) From 04f6549e82fed619690778577792b7458e1dd4ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marina=20L=C3=B3pez?= Date: Wed, 1 Jul 2026 15:03:39 +0200 Subject: [PATCH 058/229] :bug: Replace hyphens with bullets in subscriptions benefits --- frontend/src/app/main/ui/settings/subscription.cljs | 2 +- frontend/src/app/main/ui/settings/subscription.scss | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/settings/subscription.cljs b/frontend/src/app/main/ui/settings/subscription.cljs index b7ee644bdd..e1b13d9ce8 100644 --- a/frontend/src/app/main/ui/settings/subscription.cljs +++ b/frontend/src/app/main/ui/settings/subscription.cljs @@ -73,7 +73,7 @@ [:h5 {:class (stl/css :benefits-title)} benefits-title]) [:ul {:class (stl/css :benefits-list)} (for [benefit benefits] - [:li {:key (dm/str benefit) :class (stl/css :benefit)} "- " benefit])] + [:li {:key (dm/str benefit) :class (stl/css :benefit)} benefit])] (when has-cta-button [:> button* {:variant "primary" diff --git a/frontend/src/app/main/ui/settings/subscription.scss b/frontend/src/app/main/ui/settings/subscription.scss index ff89722ac2..26853b6e65 100644 --- a/frontend/src/app/main/ui/settings/subscription.scss +++ b/frontend/src/app/main/ui/settings/subscription.scss @@ -150,6 +150,8 @@ } .benefits-list { + list-style-position: inside; + list-style-type: disc; margin-block: 0; } From 83d2edf2561e16ab2708cc87f7711d23dc5f5764 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Mon, 6 Jul 2026 15:42:42 +0200 Subject: [PATCH 059/229] :bug: Fix empty text shape not being removed (#10541) --- .../ui/specs/text-editor-v3.spec.js | 41 +++++++++++++++++++ .../src/app/main/data/workspace/edition.cljs | 4 +- .../ui/workspace/shapes/text/v3_editor.cljs | 12 +++--- 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/frontend/playwright/ui/specs/text-editor-v3.spec.js b/frontend/playwright/ui/specs/text-editor-v3.spec.js index 90b2316a88..35e5e1853a 100644 --- a/frontend/playwright/ui/specs/text-editor-v3.spec.js +++ b/frontend/playwright/ui/specs/text-editor-v3.spec.js @@ -67,3 +67,44 @@ test.describe("BUG 10502 - Mixed families and variants", () => { }); }); +test.describe("BUG 10530 - Empty text box left behind when leaving the editor", () => { + test("An empty text box is removed when leaving the editor by clicking outside", async ({ + page, + }) => { + const workspace = new WasmWorkspacePage(page, { textEditor: true }); + await workspace.setupEmptyFile(); + await workspace.goToWorkspace(); + await workspace.waitForFirstRender(); + + const layerRows = workspace.layers.getByTestId("layer-row"); + await expect(layerRows).toHaveCount(0); + + // Draw an empty text box + await workspace.createTextShape(200, 150, 320, 210); + // The shape exists while it is being edited + await expect(layerRows).toHaveCount(1); + + // Leave the editor by clicking outside + await workspace.clickAt(500, 400); + + await expect(layerRows).toHaveCount(0); + }); + + test("A non-empty text box is kept when leaving the editor by clicking outside", async ({ + page, + }) => { + const workspace = new WasmWorkspacePage(page, { textEditor: true }); + await workspace.setupEmptyFile(); + await workspace.goToWorkspace(); + await workspace.waitForFirstRender(); + + const layerRows = workspace.layers.getByTestId("layer-row"); + + // A text box with content must survive leaving the editor by clicking outside. + await workspace.createTextShape(200, 150, 320, 210, "hello"); + await workspace.clickAt(500, 400); + + await expect(layerRows).toHaveCount(1); + }); +}); + diff --git a/frontend/src/app/main/data/workspace/edition.cljs b/frontend/src/app/main/data/workspace/edition.cljs index d7822d4142..e1d33fa136 100644 --- a/frontend/src/app/main/data/workspace/edition.cljs +++ b/frontend/src/app/main/data/workspace/edition.cljs @@ -10,7 +10,6 @@ [app.main.data.workspace.path.common :as dwpc] [app.main.features :as features] [app.render-wasm.api :as wasm.api] - [app.render-wasm.text-editor :as text-editor] [beicon.v2.core :as rx] [potok.v2.core :as ptk])) @@ -66,6 +65,7 @@ ptk/EffectEvent (effect [_ state _] (when (features/active-feature? state "text-editor-wasm/v1") - (text-editor/text-editor-dispose) + ;; NOTE: the WASM text editor is disposed by the v3 editor component on + ;; unmount, *after* it finalizes its content. (wasm.api/request-render "clear-edition-mode"))))) diff --git a/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs b/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs index 03cb433153..47cb26696f 100644 --- a/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs @@ -318,11 +318,13 @@ (fn [] (when-let [node (mf/ref-val contenteditable-ref)] (.focus node)) - ;; Explicitly call on-blur here instead of relying on browser blur events, - ;; because in Firefox blur is not reliably fired when leaving the text editor - ;; by clicking elsewhere. The component does unmount when the shape is - ;; deselected, so we can safely call the blur handler here to finalize the editor. - on-blur)) + ;; On unmount, finalize the editor content and then dispose the WASM editor. + ;; We finalize on unmount instead of relying on the browser blur event, because + ;; it was not being reliable (timing issues, Firefox issues…) + (fn [] + (on-blur) + (text-editor/text-editor-dispose) + (wasm.api/request-render "text-editor-dispose")))) (mf/use-effect (fn [] From ac31edab14b5f83617583b73f2b8497479116002 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 7 Jul 2026 12:22:17 +0200 Subject: [PATCH 060/229] :bug: Skip end-user SSO gate on nitrate org management endpoints (#10559) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit get-teams-detail, get-org-invitations and delete-org-invitations lacked ::rpc/auth false, so wrap-nitrate-sso ran on them whenever params carried an organization-id. For SSO-active orgs this rejected the org owner's admin-console reads with a 401, since their Penpot session has no SSO grant for the org. These are shared-key protected management calls made on the org owner's behalf and never use profile-id, so they should not require an end-user SSO session — matching their sibling endpoints. --- backend/src/app/rpc/management/nitrate.clj | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/backend/src/app/rpc/management/nitrate.clj b/backend/src/app/rpc/management/nitrate.clj index 7438d1f563..b2b8ec4c95 100644 --- a/backend/src/app/rpc/management/nitrate.clj +++ b/backend/src/app/rpc/management/nitrate.clj @@ -509,7 +509,8 @@ RETURNING id, deleted_at;") "Get valid invitations for an organization, returning at most one invitation per email." {::doc/added "2.16" ::sm/params schema:get-org-invitations-params - ::sm/result schema:get-org-invitations-result} + ::sm/result schema:get-org-invitations-result + ::rpc/auth false} [cfg {:keys [organization-id]}] (let [team-ids (noh/get-org-team-ids cfg organization-id)] (db/run! cfg (fn [{:keys [::db/conn]}] @@ -535,7 +536,8 @@ RETURNING id, deleted_at;") (sv/defmethod ::delete-org-invitations "Delete all invitations for one email in an organization scope (org + org teams)." {::doc/added "2.16" - ::sm/params schema:delete-org-invitations-params} + ::sm/params schema:delete-org-invitations-params + ::rpc/auth false} [cfg {:keys [organization-id email]}] (let [clean-email (profile/clean-email email) team-ids (noh/get-org-team-ids cfg organization-id)] @@ -866,7 +868,8 @@ RETURNING id, deleted_at;") including owner info and project/file/member counts." {::doc/added "2.20" ::sm/params schema:get-teams-detail-params - ::sm/result schema:get-teams-detail-result} + ::sm/result schema:get-teams-detail-result + ::rpc/auth false} [cfg {:keys [organization-id]}] (let [org-summary (nitrate/call cfg :get-org-summary {:organization-id organization-id}) team-ids (into [] (comp d/xf:map-id (filter uuid?)) (:teams org-summary))] From 3e2826de9e43ad11b24ae7c22d696041cee361e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marina=20L=C3=B3pez?= Date: Tue, 7 Jul 2026 11:40:39 +0200 Subject: [PATCH 061/229] :sparkles: Redesign my penpot to my files --- frontend/resources/images/icons/logo-files.svg | 1 + frontend/src/app/main/ui/dashboard/sidebar.cljs | 8 ++++---- frontend/src/app/main/ui/icons.cljs | 1 + frontend/translations/en.po | 3 +++ frontend/translations/es.po | 3 +++ 5 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 frontend/resources/images/icons/logo-files.svg diff --git a/frontend/resources/images/icons/logo-files.svg b/frontend/resources/images/icons/logo-files.svg new file mode 100644 index 0000000000..55b707b557 --- /dev/null +++ b/frontend/resources/images/icons/logo-files.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/app/main/ui/dashboard/sidebar.cljs b/frontend/src/app/main/ui/dashboard/sidebar.cljs index 9ba8dfd53b..9f81b51a19 100644 --- a/frontend/src/app/main/ui/dashboard/sidebar.cljs +++ b/frontend/src/app/main/ui/dashboard/sidebar.cljs @@ -407,9 +407,9 @@ [:> dropdown-menu-item* {:on-click on-team-click :data-value default-team-id :class (stl/css :team-dropdown-item)} - [:span {:class (stl/css :penpot-icon)} deprecated-icon/logo-icon] + [:span {:class (stl/css :penpot-icon)} (if (contains? cf/flags :nitrate) deprecated-icon/logo-files deprecated-icon/logo-icon)] - [:span {:class (stl/css :team-text)} (tr "dashboard.your-penpot")] + [:span {:class (stl/css :team-text)} (if (contains? cf/flags :nitrate) (tr "dashboard.my-files") (tr "dashboard.your-penpot"))] (when (= default-team-id (:id team)) tick-icon)] @@ -901,8 +901,8 @@ (cond is-default? [:div {:class (stl/css :team-name)} - [:span {:class (stl/css :penpot-icon)} deprecated-icon/logo-icon] - [:span {:class (stl/css :team-text)} (tr "dashboard.default-team-name")]] + [:span {:class (stl/css :penpot-icon)} (if nitrate? deprecated-icon/logo-files deprecated-icon/logo-icon)] + [:span {:class (stl/css :team-text)} (if nitrate? (tr "dashboard.my-files") (tr "dashboard.default-team-name"))]] (and (contains? cf/flags :subscriptions) (not is-default?) diff --git a/frontend/src/app/main/ui/icons.cljs b/frontend/src/app/main/ui/icons.cljs index 6c5404393b..1ef023a079 100644 --- a/frontend/src/app/main/ui/icons.cljs +++ b/frontend/src/app/main/ui/icons.cljs @@ -17,6 +17,7 @@ (def ^:icon logo (icon-xref :penpot-logo)) (def ^:icon logo-icon (icon-xref :penpot-logo-icon)) (def ^:icon logo-error-screen (icon-xref :logo-error-screen)) +(def ^:icon logo-files (icon-xref :logo-files)) (def ^:icon logo-subscription (icon-xref :logo-subscription)) (def ^:icon logo-subscription-light (icon-xref :logo-subscription-light)) (def ^:icon nitrate-welcome (icon-xref :nitrate-welcome)) diff --git a/frontend/translations/en.po b/frontend/translations/en.po index e5ea13f565..e05426f58e 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -1422,6 +1422,9 @@ msgstr "Your name" msgid "dashboard.your-penpot" msgstr "Your Penpot" +msgid "dashboard.my-files" +msgstr "My Files" + #: src/app/main/ui/alert.cljs:36 msgid "ds.alert-ok" msgstr "Ok" diff --git a/frontend/translations/es.po b/frontend/translations/es.po index 4f7f44f4fa..cceda3bf52 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -1433,6 +1433,9 @@ msgstr "Tu nombre" msgid "dashboard.your-penpot" msgstr "Tu Penpot" +msgid "dashboard.my-files" +msgstr "Mis Archivos" + #: src/app/main/ui/alert.cljs:36 msgid "ds.alert-ok" msgstr "Ok" From a58c0e14075ab5ce63acf8afb436170528694a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Mon, 6 Jul 2026 17:53:17 +0200 Subject: [PATCH 062/229] :bug: Fix autowidth in text editor v3 --- frontend/playwright/ui/pages/WorkspacePage.js | 23 +++++++ .../ui/specs/text-editor-v3.spec.js | 21 +++++++ .../src/app/main/data/workspace/texts.cljs | 18 +++--- .../app/main/data/workspace/wasm_text.cljs | 10 ++- .../ui/workspace/shapes/text/v3_editor.cljs | 63 ++++++++++++++----- frontend/src/app/render_wasm/api.cljs | 1 + frontend/src/app/render_wasm/text_editor.cljs | 23 ++++++- 7 files changed, 133 insertions(+), 26 deletions(-) diff --git a/frontend/playwright/ui/pages/WorkspacePage.js b/frontend/playwright/ui/pages/WorkspacePage.js index f31016ead4..f6b6a5a11a 100644 --- a/frontend/playwright/ui/pages/WorkspacePage.js +++ b/frontend/playwright/ui/pages/WorkspacePage.js @@ -378,6 +378,29 @@ export class WorkspacePage extends BaseWebSocketPage { } } + /** + * Creates a new auto-width Text Shape by single-clicking at the given + * coordinates (as opposed to dragging a fixed-size box) and, optionally, + * types an initial text. + * + * @param {number} x + * @param {number} y + * @param {string} [initialText] + * @param {*} [options] + */ + async createAutoWidthTextShape(x, y, initialText, options) { + const timeToWait = options?.timeToWait ?? 100; + await this.page.keyboard.press("T"); + await this.page.waitForTimeout(timeToWait); + + await this.clickAt(x, y); + + if (initialText) { + await this.waitForSelectedShapeName("Text"); + await this.page.keyboard.type(initialText); + } + } + /** * Copies the selected element into the clipboard, or copy the * content of the locator into the clipboard. diff --git a/frontend/playwright/ui/specs/text-editor-v3.spec.js b/frontend/playwright/ui/specs/text-editor-v3.spec.js index 35e5e1853a..4a5964ea01 100644 --- a/frontend/playwright/ui/specs/text-editor-v3.spec.js +++ b/frontend/playwright/ui/specs/text-editor-v3.spec.js @@ -108,3 +108,24 @@ test.describe("BUG 10530 - Empty text box left behind when leaving the editor", }); }); +test("BUG 10467 - Auto-width text captures every typed character", async ({ + page, +}) => { + const workspace = new WasmWorkspacePage(page, { textEditor: true }); + await workspace.setupEmptyFile(); + await workspace.goToWorkspace(); + await workspace.waitForFirstRender(); + + const layerRows = workspace.layers.getByTestId("layer-row"); + + // A single click with the text tool creates an auto-width text box by default + await workspace.createAutoWidthTextShape(200, 150, "hello world"); + + // Leave the editor to finalize the content + await workspace.textEditor.stopEditing(); + + // Assert the whole typed text made it into the shape + await workspace.layers.getByTestId("layer-row").first().click(); + await workspace.waitForSelectedShapeName("hello world"); +}); + diff --git a/frontend/src/app/main/data/workspace/texts.cljs b/frontend/src/app/main/data/workspace/texts.cljs index 30b2ecf40b..df0508a1ba 100644 --- a/frontend/src/app/main/data/workspace/texts.cljs +++ b/frontend/src/app/main/data/workspace/texts.cljs @@ -1098,7 +1098,12 @@ (select-keys shape [:selrect :points :width :height])) content-has-text? (v2-content-has-text? content) prev-content-has-text? (v2-content-has-text? prev-content) - new-size (when (not= :fixed (:grow-type shape)) + ;; Only measure/resize the shape on finalize. While the user is + ;; actively typing, the WASM editor already renders the growing text + ;; (and the editor overlay measures it live), so a per-keystroke + ;; resize is redundant and, going through the interactive-transform + ;; modifier machinery, made auto-width typing very laggy. + new-size (when (and finalize? (not= :fixed (:grow-type shape))) (dwwt/get-wasm-text-new-size shape content)) ;; New shapes: single undo on finalize only (no per-keystroke undo) effective-save-undo? (if new-shape? finalize? save-undo?) @@ -1139,15 +1144,12 @@ :stack-undo? effective-stack-undo? :undo-group (when new-shape? id)}) - ;; When `get-wasm-text-new-size` reports a change, `update-shapes` above resizes the - ;; shape data; the WASM renderer still needs matching modifiers. While editing, use - ;; `set-wasm-modifiers` for a temporary preview; on `finalize?`, `apply-wasm-modifiers` - ;; commits layout (flex parents, sidebar width, etc.) like other transform flows. + ;; `new-size` is only computed on finalize (see above), so this commits + ;; the final auto-width/auto-height geometry via `apply-wasm-modifiers` + ;; like other transform flows (flex parents, sidebar width, etc.). (when (some? new-size) (when-let [modifiers (dwwt/resize-wasm-text-modifiers shape content)] - (if finalize? - (dwm/apply-wasm-modifiers modifiers {:undo-group (when new-shape? id)}) - (dwm/set-wasm-modifiers modifiers {:undo-group (when new-shape? id)}))))) + (dwm/apply-wasm-modifiers modifiers {:undo-group (when new-shape? id)})))) (when finalize? (rx/concat diff --git a/frontend/src/app/main/data/workspace/wasm_text.cljs b/frontend/src/app/main/data/workspace/wasm_text.cljs index 6468f487aa..5ae5cb8bc7 100644 --- a/frontend/src/app/main/data/workspace/wasm_text.cljs +++ b/frontend/src/app/main/data/workspace/wasm_text.cljs @@ -38,8 +38,14 @@ ;; returning nil makes callers skip the WASM resize/modifier path. (when (and id (wasm.api/initialized?)) (wasm.api/use-shape id) - (wasm.api/set-shape-text-content id content) - (wasm.api/set-shape-text-images id content) + ;; While the WASM text editor is actively editing it already holds the live + ;; content and layout. Re-pushing the content here calls `_clear_shape_text` + ;; + `_update_shape_text_layout`, which resets the editor and drops every + ;; keystroke after the first, so we just measure the live layout instead. + (when-not (and (wasm.api/text-editor-has-focus?) + (= id (wasm.api/text-editor-get-active-shape-id))) + (wasm.api/set-shape-text-content id content) + (wasm.api/set-shape-text-images id content)) (let [dimension (when (not= :fixed grow-type) (wasm.api/get-text-dimensions))] {:width (if (#{:fixed :auto-height} grow-type) diff --git a/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs b/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs index 47cb26696f..458153f3b5 100644 --- a/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs @@ -9,6 +9,7 @@ (:require-macros [app.main.style :as stl]) (:require [app.common.data.macros :as dm] + [app.common.types.text :as txt] [app.main.data.helpers :as dsh] [app.main.data.workspace.texts :as dwt] [app.main.refs :as refs] @@ -28,10 +29,37 @@ [& {:keys [finalize?]}] (when-let [{:keys [shape-id content]} (text-editor/text-editor-sync-content)] - (st/emit! (dwt/v2-update-text-shape-content - shape-id content - :update-name? true - :finalize? finalize?)))) + ;; Derive the layer name from the text so it tracks the content. + (let [text (txt/content->text content) + name (when (not= text "") + (txt/generate-shape-name text))] + (st/emit! (dwt/v2-update-text-shape-content + shape-id content + :update-name? true + :name name + :finalize? finalize?))))) + +(defn- reset-input-node + "Empties the contenteditable capture surface and restores a collapsed caret + inside it. + + The surface only exists to capture keystrokes for the WASM editor, so we clear + it after every input. But removing the text node the caret lived in leaves the + document without a valid selection, and the browser then stops firing `input` + events for subsequent keystrokes (you can only type one character). Re-placing + the caret inside the (now empty) node keeps input flowing, and we re-focus only + if focus was actually lost so we don't reset the WASM cursor on every keystroke." + [^js node] + (when (some? node) + (set! (.-textContent node) "") + (when (not= (.-activeElement js/document) node) + (.focus node)) + (when-let [sel (.getSelection js/window)] + (let [range (.createRange js/document)] + (.selectNodeContents range node) + (.collapse range true) + (.removeAllRanges sel) + (.addRange sel range))))) (defn- font-family-from-font-id [font-id] (if (str/includes? font-id "gfont-noto-sans") @@ -73,18 +101,28 @@ [{:keys [x y width height]} transform] (let [{:keys [width height]} (wasm.api/get-text-dimensions shape-id) selrect-transform (mf/deref refs/workspace-selrect) + vbox (mf/deref refs/vbox) [selrect transform] (dsh/get-selrect selrect-transform shape) selrect-height (:height selrect) selrect-width (:width selrect) max-width (max width selrect-width) max-height (max height selrect-height) + ;; During auto-width editing the shape width is trimmed to the content, so an + ;; empty text box ends up only a few pixels wide. That is not enough room for + ;; the caret and the contenteditable overlay may fail to receive input when it + ;; is that small. Expand the overlay by one viewport width for auto-width texts + ;; (mirroring the v2 editor) so typing works and the caret is not clipped. + viewport-width (or (:width vbox) 0) + overlay-width (if (= (:grow-type shape) :auto-width) + (+ max-width viewport-width) + max-width) valign (-> shape :content :vertical-align) y (:y selrect) y (case valign "bottom" (+ y (- selrect-height height)) "center" (+ y (/ (- selrect-height height) 2)) y)] - [(assoc selrect :y y :width max-width :height max-height) transform]) + [(assoc selrect :y y :width overlay-width :height max-height) transform]) on-composition-start (mf/use-fn @@ -101,8 +139,7 @@ (text-editor/text-editor-composition-update data) (sync-wasm-text-editor-content!) (wasm.api/request-render "text-composition")) - (when-let [node (mf/ref-val contenteditable-ref)] - (set! (.-textContent node) ""))))) + (reset-input-node (mf/ref-val contenteditable-ref))))) on-composition-end (mf/use-fn @@ -111,8 +148,7 @@ (text-editor/text-editor-composition-end data) (sync-wasm-text-editor-content!) (wasm.api/request-render "text-composition")) - (when-let [node (mf/ref-val contenteditable-ref)] - (set! (.-textContent node) "")))) + (reset-input-node (mf/ref-val contenteditable-ref)))) on-paste (mf/use-fn @@ -124,8 +160,7 @@ (text-editor/text-editor-insert-text text) (sync-wasm-text-editor-content!) (wasm.api/request-render "text-paste")) - (when-let [node (mf/ref-val contenteditable-ref)] - (set! (.-textContent node) ""))))) + (reset-input-node (mf/ref-val contenteditable-ref))))) on-copy (mf/use-fn @@ -148,8 +183,7 @@ (text-editor/text-editor-delete-backward) (sync-wasm-text-editor-content!) (wasm.api/request-render "text-cut")))) - (when-let [node (mf/ref-val contenteditable-ref)] - (set! (.-textContent node) ""))))) + (reset-input-node (mf/ref-val contenteditable-ref))))) on-key-down (mf/use-fn @@ -258,8 +292,7 @@ (text-editor/text-editor-insert-text data) (sync-wasm-text-editor-content!) (wasm.api/request-render "text-input")) - (when-let [node (mf/ref-val contenteditable-ref)] - (set! (.-textContent node) "")))))) + (reset-input-node (mf/ref-val contenteditable-ref)))))) on-pointer-down (mf/use-fn diff --git a/frontend/src/app/render_wasm/api.cljs b/frontend/src/app/render_wasm/api.cljs index 579eaa0ade..2403814e18 100644 --- a/frontend/src/app/render_wasm/api.cljs +++ b/frontend/src/app/render_wasm/api.cljs @@ -283,6 +283,7 @@ (def text-editor-get-current-styles text-editor/text-editor-get-current-styles) (def text-editor-has-focus? text-editor/text-editor-has-focus?) (def text-editor-has-selection? text-editor/text-editor-has-selection?) +(def text-editor-get-active-shape-id text-editor/text-editor-get-active-shape-id) (def text-editor-select-all text-editor/text-editor-select-all) (def text-editor-select-word-boundary text-editor/text-editor-select-word-boundary) (def text-editor-sync-content text-editor/text-editor-sync-content) diff --git a/frontend/src/app/render_wasm/text_editor.cljs b/frontend/src/app/render_wasm/text_editor.cljs index 574ec1a72b..5dba3e675c 100644 --- a/frontend/src/app/render_wasm/text_editor.cljs +++ b/frontend/src/app/render_wasm/text_editor.cljs @@ -8,6 +8,7 @@ "Text editor WASM bindings" (:require [app.common.types.fills.impl :as types.fills.impl] + [app.common.types.text :as txt] [app.common.uuid :as uuid] [app.main.fonts :as main-fonts] [app.render-wasm.api.fonts :as fonts] @@ -546,6 +547,22 @@ new-para-set (assoc para-set :children new-paras)] (assoc content :children [new-para-set]))) +(defn- default-empty-text-content + "Build a default, empty text content tree used as a merge template. + + A text shape created by a single click starts with `:content` nil, so + `set-shape-text-content` never seeds the content cache for it. Without a + template `text-editor-sync-content` would bail and the characters typed into + the WASM editor would never reach the shape. This provides the default + (Source Sans Pro) styling the WASM editor uses for a fresh empty shape." + [] + (let [attrs (txt/get-default-text-attrs)] + {:type "root" + :children [{:type "paragraph-set" + :children [(merge attrs + {:type "paragraph" + :children [(merge attrs {:text ""})]})]}]})) + (defn text-editor-sync-content "Sync text content from the WASM text editor back to the frontend shape. @@ -559,7 +576,11 @@ new-texts (text-editor-export-content)] (when (and shape-id new-texts) (let [texts-clj (js->clj new-texts) - content (get-cached-content shape-id)] + ;; A brand-new empty text shape (single click) has no cached + ;; content yet, so fall back to a default template so the first + ;; keystrokes are synced back to the shape instead of dropped. + content (or (get-cached-content shape-id) + (default-empty-text-content))] (when content (let [merged (merge-exported-texts-into-content content texts-clj)] (swap! shape-text-contents assoc shape-id merged) From 4eaefec43efefc36c8714b8d4485f84052d317b4 Mon Sep 17 00:00:00 2001 From: Luis de Dios Date: Wed, 8 Jul 2026 09:55:50 +0200 Subject: [PATCH 063/229] :bug: Fix glitch when using drawing tool in toolbar (#10447) --- .../src/app/main/data/workspace/drawing.cljs | 12 +----------- .../app/main/data/workspace/drawing/common.cljs | 16 +++++++++------- .../src/app/main/data/workspace/edition.cljs | 6 ++++-- .../src/app/main/data/workspace/shortcuts.cljs | 3 ++- .../src/app/main/ui/workspace/top_toolbar.cljs | 5 ++++- 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/frontend/src/app/main/data/workspace/drawing.cljs b/frontend/src/app/main/data/workspace/drawing.cljs index a2bd2a986e..4812cf32a0 100644 --- a/frontend/src/app/main/data/workspace/drawing.cljs +++ b/frontend/src/app/main/data/workspace/drawing.cljs @@ -47,16 +47,6 @@ (when (= tool :path) (rx/of (start-drawing :path))) - (when (= tool :curve) - (let [stopper (rx/filter dwc/interrupt? stream)] - (->> stream - (rx/filter (ptk/type? ::common/handle-finish-drawing)) - (rx/map (constantly tool)) - (rx/take 1) - (rx/observe-on :async) - (rx/map select-for-drawing) - (rx/take-until stopper)))) - ;; NOTE: comments are a special case and they manage they ;; own interrupt cycle. (when (= tool :comments) @@ -68,7 +58,7 @@ (->> stream (rx/filter dwc/interrupt?) (rx/take 1) - (rx/map common/clear-drawing) + (rx/map #(common/clear-drawing {:preserve-tool? true})) (rx/take-until stopper)))))))) ;; NOTE/TODO: when an exception is raised in some point of drawing the diff --git a/frontend/src/app/main/data/workspace/drawing/common.cljs b/frontend/src/app/main/data/workspace/drawing/common.cljs index 638b865211..0356086dd7 100644 --- a/frontend/src/app/main/data/workspace/drawing/common.cljs +++ b/frontend/src/app/main/data/workspace/drawing/common.cljs @@ -18,11 +18,14 @@ [potok.v2.core :as ptk])) (defn clear-drawing - [] - (ptk/reify ::clear-drawing - ptk/UpdateEvent - (update [_ state] - (dissoc state :workspace-drawing)))) + ([] (clear-drawing nil)) + ([{:keys [preserve-tool?]}] + (ptk/reify ::clear-drawing + ptk/UpdateEvent + (update [_ state] + (if preserve-tool? + (update state :workspace-drawing dissoc :object :lock) + (dissoc state :workspace-drawing)))))) (defn handle-finish-drawing [] @@ -95,6 +98,5 @@ (rx/empty))))) ;; Delay so the mouse event can read the drawing state - (->> (rx/of (clear-drawing)) + (->> (rx/of (clear-drawing {:preserve-tool? (= tool :curve)})) (rx/delay 0))))))) - diff --git a/frontend/src/app/main/data/workspace/edition.cljs b/frontend/src/app/main/data/workspace/edition.cljs index e1d33fa136..58815458a2 100644 --- a/frontend/src/app/main/data/workspace/edition.cljs +++ b/frontend/src/app/main/data/workspace/edition.cljs @@ -13,7 +13,9 @@ [beicon.v2.core :as rx] [potok.v2.core :as ptk])) -(defn interrupt? [e] (= e :interrupt)) +(defn interrupt? + [e] + (= e :interrupt)) (declare clear-edition-mode) @@ -51,7 +53,7 @@ (update [_ state] (-> state (update :workspace-local dissoc :edition :edit-path) - (update :workspace-drawing dissoc :tool :object :lock) + (update :workspace-drawing dissoc :object :lock) (dissoc :workspace-grid-edition) (dissoc :workspace-wasm-editor-styles))) diff --git a/frontend/src/app/main/data/workspace/shortcuts.cljs b/frontend/src/app/main/data/workspace/shortcuts.cljs index 26954f8515..1db91e3eaa 100644 --- a/frontend/src/app/main/data/workspace/shortcuts.cljs +++ b/frontend/src/app/main/data/workspace/shortcuts.cljs @@ -18,6 +18,7 @@ [app.main.data.workspace.colors :as mdc] [app.main.data.workspace.comments :as dwcm] [app.main.data.workspace.drawing :as dwd] + [app.main.data.workspace.drawing.common :as dwdc] [app.main.data.workspace.layers :as dwly] [app.main.data.workspace.libraries :as dwl] [app.main.data.workspace.shape-layout :as dwsl] @@ -149,7 +150,7 @@ :escape {:tooltip (ds/esc) :command "escape" :subsections [:edit] - :fn #(st/emit! :interrupt (dw/deselect-all true))} + :fn #(st/emit! :interrupt (dwdc/clear-drawing) (dw/deselect-all true))} :find {:tooltip (ds/meta "F") :command (ds/c-mod "f") :subsections [:edit] :fn #(st/emit! (dw/open-layers-search :find))} diff --git a/frontend/src/app/main/ui/workspace/top_toolbar.cljs b/frontend/src/app/main/ui/workspace/top_toolbar.cljs index 21893b1ad3..819f41b80c 100644 --- a/frontend/src/app/main/ui/workspace/top_toolbar.cljs +++ b/frontend/src/app/main/ui/workspace/top_toolbar.cljs @@ -13,6 +13,7 @@ [app.main.data.modal :as modal] [app.main.data.workspace :as dw] [app.main.data.workspace.common :as dwc] + [app.main.data.workspace.drawing.common :as dwdc] [app.main.data.workspace.mcp :as mcp] [app.main.data.workspace.media :as dwm] [app.main.data.workspace.shortcuts :as sc] @@ -313,7 +314,9 @@ on-interrupt (mf/use-fn (fn [] - (st/emit! :interrupt (dw/clear-edition-mode)))) + (st/emit! :interrupt + (dw/clear-edition-mode) + (dwdc/clear-drawing)))) on-select-tool (mf/use-fn From d4aa5122477b7d41c9298868342412e82c344af4 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Wed, 8 Jul 2026 11:57:27 +0200 Subject: [PATCH 064/229] :books: Update changelog (add 2.18.0 section) --- CHANGES.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 9fc930b9f6..b6c55f9ea3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,28 @@ # CHANGELOG +## 2.18.0 + +### :bug: Bugs fixed + +- Fix MCP integration hanging when the Penpot tab is backgrounded or frozen by the browser [#10323](https://github.com/penpot/penpot/issues/10323) (PR: [#10392](https://github.com/penpot/penpot/pull/10392)) +- Fix synced component copy not reflowing children after spacing token update [#9892](https://github.com/penpot/penpot/issues/9892) +- Fix spacebar activating pan mode while typing a comment (by @Krishcode264) [#10285](https://github.com/penpot/penpot/issues/10285) (PR: [#10287](https://github.com/penpot/penpot/pull/10287)) +- Fix plugin API rejecting negative letterSpacing values (by @filipsajdak) [#9780](https://github.com/penpot/penpot/issues/9780) (PR: [#10257](https://github.com/penpot/penpot/pull/10257)) +- Fix plugin API addTheme calls failing with the signature shown in the high-level overview [#10074](https://github.com/penpot/penpot/issues/10074) (PR: [#10359](https://github.com/penpot/penpot/pull/10359)) +- Fix empty text shape not being deleted on editor exit [#10540](https://github.com/penpot/penpot/issues/10540) (PR: [#10541](https://github.com/penpot/penpot/pull/10541)) +- Fix broken token pills showing wrong default state when not selected [#10524](https://github.com/penpot/penpot/issues/10524) (PR: [#10535](https://github.com/penpot/penpot/pull/10535)) +- Replace hyphens with bullets in subscription benefits list [#10547](https://github.com/penpot/penpot/issues/10547) (PR: [#10523](https://github.com/penpot/penpot/pull/10523)) +- Fix Chinese (zh-CN) translation showing wrong label for Intersection in board path menu (by @sawirricardo) [#10346](https://github.com/penpot/penpot/issues/10346) (PR: [#10381](https://github.com/penpot/penpot/pull/10381)) + +### :sparkles: New features & Enhancements + +- Group toolbar drawing tools into shape and free-draw flyouts [#9316](https://github.com/penpot/penpot/issues/9316) (PR: [#9480](https://github.com/penpot/penpot/pull/9480), [#10354](https://github.com/penpot/penpot/pull/10354)) +- Add outline stroke to Paths [#9961](https://github.com/penpot/penpot/issues/9961) (PR: [#8677](https://github.com/penpot/penpot/pull/8677)) +- Make throwValidationErrors default to true for v2 manifest plugins [#10401](https://github.com/penpot/penpot/issues/10401) (PR: [#10433](https://github.com/penpot/penpot/pull/10433)) +- Add dedicated Line and Arrow drawing tools (by @davidv399) [#9145](https://github.com/penpot/penpot/issues/9145) (PR: [#9146](https://github.com/penpot/penpot/pull/9146)) +- Refactor wasm rulers and UI state [#10116](https://github.com/penpot/penpot/issues/10116) (PR: [#10461](https://github.com/penpot/penpot/pull/10461)) +- Improve team invitations modal in the dashboard [#10484](https://github.com/penpot/penpot/issues/10484) (PR: [#10459](https://github.com/penpot/penpot/pull/10459)) + ## 2.17.0 (Unreleased) ### :boom: Breaking changes & Deprecations From 0de8bce8958feffa07eabffe41130300f625da9a Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Wed, 8 Jul 2026 12:51:03 +0200 Subject: [PATCH 065/229] :sparkles: Add ignore sso flag to nitrate management api endpoints (#10579) --- backend/src/app/rpc/management/nitrate.clj | 45 ++++++++++++++-------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/backend/src/app/rpc/management/nitrate.clj b/backend/src/app/rpc/management/nitrate.clj index b2b8ec4c95..fc96d2e448 100644 --- a/backend/src/app/rpc/management/nitrate.clj +++ b/backend/src/app/rpc/management/nitrate.clj @@ -53,7 +53,8 @@ "Authenticate the current user" {::doc/added "2.14" ::sm/params [:map] - ::sm/result schema:profile} + ::sm/result schema:profile + ::nitrate/sso false} [cfg {:keys [::rpc/profile-id] :as params}] (let [profile (profile/get-profile cfg profile-id)] (-> (profile-to-map profile) @@ -104,7 +105,8 @@ "List teams for which current user is owner" {::doc/added "2.14" ::sm/params [:map] - ::sm/result schema:get-teams-result} + ::sm/result schema:get-teams-result + ::nitrate/sso false} [cfg {:keys [::rpc/profile-id]}] (let [current-user-id (-> (profile/get-profile cfg profile-id) :id)] (->> (db/exec! cfg [sql:get-teams current-user-id]) @@ -127,7 +129,8 @@ collection when replacing an existing one." {::doc/added "2.17" ::sm/params schema:upload-org-logo - ::sm/result schema:upload-org-logo-result} + ::sm/result schema:upload-org-logo-result + ::nitrate/sso false} [{:keys [::sto/storage]} {:keys [content organization-id previous-id]}] (when previous-id (sto/touch-object! storage previous-id)) @@ -195,7 +198,8 @@ "List profiles that belong to teams for which current user is owner" {::doc/added "2.14" ::sm/params [:map] - ::sm/result schema:managed-profile-result} + ::sm/result schema:managed-profile-result + ::nitrate/sso false} [cfg {:keys [::rpc/profile-id]}] (let [current-user-id (-> (profile/get-profile cfg profile-id) :id)] (db/exec! cfg [sql:get-managed-profiles current-user-id current-user-id]))) @@ -234,7 +238,8 @@ "Get summary information for a list of teams" {::doc/added "2.15" ::sm/params schema:get-teams-summary-params - ::sm/result schema:get-teams-summary-result} + ::sm/result schema:get-teams-summary-result + ::nitrate/sso false} [cfg {:keys [ids]}] (let [;; Handle one or multiple params ids (cond @@ -373,7 +378,8 @@ RETURNING id, deleted_at;") "For a given user, find all owned organizations and apply the deleted-org transfer rules to their imported Your Penpot teams." {::doc/added "2.18" - ::sm/params schema:notify-user-organizations-deletion} + ::sm/params schema:notify-user-organizations-deletion + ::nitrate/sso false} [cfg {:keys [profile-id]}] (let [owned-orgs (nitrate/call cfg :get-owned-orgs {:profile-id profile-id})] (doseq [org owned-orgs] @@ -399,7 +405,8 @@ RETURNING id, deleted_at;") "Get profile by email" {::doc/added "2.15" ::sm/params [:map [:email ::sm/email]] - ::sm/result schema:profile} + ::sm/result schema:profile + ::nitrate/sso false} [cfg {:keys [email]}] (let [profile (db/exec-one! cfg [sql:get-profile-by-email email])] (when-not profile @@ -422,7 +429,8 @@ RETURNING id, deleted_at;") "Get profile by email" {::doc/added "2.15" ::sm/params [:map [:id ::sm/uuid]] - ::sm/result schema:profile} + ::sm/result schema:profile + ::nitrate/sso false} [cfg {:keys [id]}] (let [profile (db/exec-one! cfg [sql:get-profile-by-id id])] (when-not profile @@ -482,7 +490,8 @@ RETURNING id, deleted_at;") {::doc/added "2.15" ::sm/params [:map [:email ::sm/email] - [:organization schema:organization-with-avatar]]} + [:organization schema:organization-with-avatar]] + ::nitrate/sso false} [cfg params] (db/tx-run! cfg ti/create-org-invitation params) nil) @@ -510,7 +519,7 @@ RETURNING id, deleted_at;") {::doc/added "2.16" ::sm/params schema:get-org-invitations-params ::sm/result schema:get-org-invitations-result - ::rpc/auth false} + ::nitrate/sso false} [cfg {:keys [organization-id]}] (let [team-ids (noh/get-org-team-ids cfg organization-id)] (db/run! cfg (fn [{:keys [::db/conn]}] @@ -537,7 +546,7 @@ RETURNING id, deleted_at;") "Delete all invitations for one email in an organization scope (org + org teams)." {::doc/added "2.16" ::sm/params schema:delete-org-invitations-params - ::rpc/auth false} + ::nitrate/sso false} [cfg {:keys [organization-id email]}] (let [clean-email (profile/clean-email email) team-ids (noh/get-org-team-ids cfg organization-id)] @@ -606,7 +615,8 @@ RETURNING id, deleted_at;") [:organization-id ::sm/uuid] [:organization-name ::sm/text] [:default-team-id ::sm/uuid]] - ::db/transaction true} + ::db/transaction true + ::nitrate/sso false} [cfg {:keys [profile-id organization-id organization-name default-team-id] :as params}] (let [{:keys [valid-teams-to-delete-ids valid-teams-to-transfer @@ -643,7 +653,8 @@ RETURNING id, deleted_at;") [:organization-id ::sm/uuid] [:default-team-id ::sm/uuid]] ::sm/result schema:get-remove-from-org-summary-result - ::db/transaction true} + ::db/transaction true + ::nitrate/sso false} [cfg {:keys [profile-id organization-id default-team-id]}] (let [{:keys [valid-teams-to-delete-ids valid-teams-to-transfer @@ -744,7 +755,8 @@ RETURNING id, deleted_at;") "Return if there are any team invitations for emails that are not organization members." {::doc/added "2.18" ::sm/params schema:org-team-invitations-for-non-members-params - ::sm/result schema:exists-org-team-invitations-for-non-members-result} + ::sm/result schema:exists-org-team-invitations-for-non-members-result + ::nitrate/sso false} [cfg params] (db/run! cfg (fn [{:keys [::db/conn]}] {:exists (boolean (non-member-org-team-invitations-exist? conn params))}))) @@ -753,7 +765,8 @@ RETURNING id, deleted_at;") "Delete team invitations for emails that are not organization members." {::doc/added "2.18" ::sm/params schema:org-team-invitations-for-non-members-params - ::db/transaction true} + ::db/transaction true + ::nitrate/sso false} [cfg params] (db/run! cfg (fn [{:keys [::db/conn]}] (let [{:keys [emails-array teams-array]} @@ -869,7 +882,7 @@ RETURNING id, deleted_at;") {::doc/added "2.20" ::sm/params schema:get-teams-detail-params ::sm/result schema:get-teams-detail-result - ::rpc/auth false} + ::nitrate/sso false} [cfg {:keys [organization-id]}] (let [org-summary (nitrate/call cfg :get-org-summary {:organization-id organization-id}) team-ids (into [] (comp d/xf:map-id (filter uuid?)) (:teams org-summary))] From cc454de9ce48b949dbda26104540fb6c9d397c47 Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Wed, 8 Jul 2026 14:21:34 +0200 Subject: [PATCH 066/229] :bug: Fix wrap nitrate sso when there is no profile (#10592) --- backend/src/app/rpc.clj | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backend/src/app/rpc.clj b/backend/src/app/rpc.clj index c99a9210a1..98126e574d 100644 --- a/backend/src/app/rpc.clj +++ b/backend/src/app/rpc.clj @@ -246,7 +246,8 @@ (::nitrate/sso mdata true)) (fn [cfg params] ;; Resolve team/project/file from explicit keys or from :id via metadata - (let [organization-id (uuid/coerce (:organization-id params)) + (let [profile-id (::profile-id params) + organization-id (uuid/coerce (:organization-id params)) id-type (::id-type mdata) id (uuid/coerce (:id params)) team-id (or (uuid/coerce (:team-id params)) @@ -255,9 +256,10 @@ (when (= id-type :project) id)) file-id (or (uuid/coerce (:file-id params)) (when (= id-type :file) id))] - (if (or organization-id team-id project-id file-id) + (if (and profile-id + (or organization-id team-id project-id file-id)) (let [cache-ref (or organization-id team-id project-id file-id) - profile-id (::profile-id params) + cache-key [profile-id cache-ref] cached (cache/get org-sso-auth-cache cache-key) result (if (some? cached) From 5d933fd7705b630858d684494e7c5d0a6da8eaa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Valderrama?= Date: Wed, 8 Jul 2026 15:43:36 +0200 Subject: [PATCH 067/229] :bug: Organizations list sorted by name (#10589) --- frontend/src/app/main/ui/dashboard/sidebar.cljs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/dashboard/sidebar.cljs b/frontend/src/app/main/ui/dashboard/sidebar.cljs index 9f81b51a19..420383aa60 100644 --- a/frontend/src/app/main/ui/dashboard/sidebar.cljs +++ b/frontend/src/app/main/ui/dashboard/sidebar.cljs @@ -801,7 +801,12 @@ :class (stl/css :dropdown :teams-dropdown) :organization current-org :profile profile - :organizations (vals orgs)}]]) + :organizations (->> (vals orgs) + (sort-by (juxt (fn [o] (str/lower (:name o ""))) + :id)))}]]) + + + orgs-portal-container))) ;; Orgs options [:> org-options-dropdown* {:show show-org-options-menu? From 80d688be9375fc51a6b3d732f235f91cc8ca068b Mon Sep 17 00:00:00 2001 From: Alonso Torres Date: Thu, 9 Jul 2026 11:37:45 +0200 Subject: [PATCH 068/229] :bug: Fix problems with comments clusters (#10543) --- frontend/src/app/main/data/comments.cljs | 20 +- .../src/app/main/data/workspace/comments.cljs | 72 +++- frontend/src/app/main/ui/comments.cljs | 319 +++++++++++------- frontend/src/app/main/ui/comments.scss | 84 ++++- frontend/src/app/main/ui/viewer/comments.cljs | 68 +++- .../main/ui/workspace/viewport/comments.cljs | 43 ++- frontend/test/frontend_tests/runner.cljs | 2 + .../ui/comments_clustering_test.cljs | 144 ++++++++ 8 files changed, 578 insertions(+), 174 deletions(-) create mode 100644 frontend/test/frontend_tests/ui/comments_clustering_test.cljs diff --git a/frontend/src/app/main/data/comments.cljs b/frontend/src/app/main/data/comments.cljs index c0c0dc7409..a69d759272 100644 --- a/frontend/src/app/main/data/comments.cljs +++ b/frontend/src/app/main/data/comments.cljs @@ -503,7 +503,7 @@ (-> state (update :comments-local assoc :open id) (update :comments-local assoc :options nil) - (update :comments-local dissoc :draft))))) + (update :comments-local dissoc :draft :expanded))))) (defn close-thread [] @@ -511,8 +511,26 @@ ptk/UpdateEvent (update [_ state] (-> state + (update :comments-local dissoc :open :draft :options :expanded))))) + +(defn expand-comment-group + "Temporarily mark a proximity cluster of threads as expanded so its bubbles + can be laid out visually without altering their stored positions." + [thread-ids] + (ptk/reify ::expand-comment-group + ptk/UpdateEvent + (update [_ state] + (-> state + (update :comments-local assoc :expanded (set thread-ids)) (update :comments-local dissoc :open :draft :options))))) +(defn collapse-comment-group + [] + (ptk/reify ::collapse-comment-group + ptk/UpdateEvent + (update [_ state] + (update state :comments-local dissoc :expanded)))) + (defn update-filters [{:keys [mode show list] :as params}] (ptk/reify ::update-filters diff --git a/frontend/src/app/main/data/workspace/comments.cljs b/frontend/src/app/main/data/workspace/comments.cljs index 968cc8194e..16251100bf 100644 --- a/frontend/src/app/main/data/workspace/comments.cljs +++ b/frontend/src/app/main/data/workspace/comments.cljs @@ -25,6 +25,7 @@ [app.main.data.workspace.edition :as dwe] [app.main.data.workspace.layout :as dwlo] [app.main.data.workspace.selection :as dws] + [app.main.data.workspace.viewport-wasm :as dwvw] [app.main.data.workspace.zoom :as dwz] [app.main.repo :as rp] [app.main.router :as rt] @@ -79,15 +80,16 @@ (let [local (:comments-local state) comments-mode? (= :comments (get-in state [:workspace-drawing :tool]))] (cond - (:draft local) (rx/of (dcmt/close-thread)) - (:open local) (rx/of (dcmt/close-thread)) + (:draft local) (rx/of (dcmt/close-thread)) + (:open local) (rx/of (dcmt/close-thread)) + (:expanded local) (rx/of (dcmt/collapse-comment-group)) ;; Only clear edition / deselect on interrupt while the comments ;; tool is active. When comments are merely visible during design, ;; `select-shape` emits `:interrupt` and this would otherwise wipe ;; the freshly selected shape, breaking click selection. - comments-mode? (rx/of (dwe/clear-edition-mode) - (dws/deselect-all true)) - :else (rx/empty)))))) + comments-mode? (rx/of (dwe/clear-edition-mode) + (dws/deselect-all true)) + :else (rx/empty)))))) ;; Event responsible of the what should be executed when user clicked ;; on the comments layer. An option can be create a new draft thread, @@ -98,17 +100,28 @@ (ptk/reify ::handle-comment-layer-click ptk/WatchEvent (watch [_ state _] - (if (not= :comments (get-in state [:workspace-drawing :tool])) - (rx/empty) - (let [local (:comments-local state)] - (if (some? (:open local)) - (rx/of (dcmt/close-thread)) - (let [page-id (:current-page-id state) - file-id (:current-file-id state) - params {:position position - :page-id page-id - :file-id file-id}] - (rx/of (dcmt/create-draft params))))))))) + (let [local (:comments-local state) + comments-mode? (= :comments (get-in state [:workspace-drawing :tool]))] + (cond + ;; A click anywhere collapses a temporarily separated cluster, + ;; regardless of the active tool. Opening a thread clears :expanded, + ;; so this never fires while a comment is open. + (some? (:expanded local)) + (rx/of (dcmt/collapse-comment-group)) + + (not comments-mode?) + (rx/empty) + + (some? (:open local)) + (rx/of (dcmt/close-thread)) + + :else + (let [page-id (:current-page-id state) + file-id (:current-file-id state) + params {:position position + :page-id page-id + :file-id file-id}] + (rx/of (dcmt/create-draft params)))))))) (defn center-to-comment-thread [{:keys [position] :as thread}] @@ -127,7 +140,11 @@ nh (- (/ (:height vbox) 2) ph) nx (- (:x position) nw) ny (- (:y position) nh)] - (update local :vbox assoc :x nx :y ny))))))) + (update local :vbox assoc :x nx :y ny))))) + + ptk/EffectEvent + (effect [_ state _] + (dwvw/maybe-sync-workspace-local-viewport! state)))) (defn- set-comment-thread "Stores the comment thread in the workspace state so its bubble re-renders." @@ -305,6 +322,25 @@ distance-overlap 32] (< distance-zoom distance-overlap))) +(defn group-bubbles + "Group bubbles into vectors by proximity: each group holds threads whose + bubbles overlap at the given `zoom`." + [zoom circles] + (letfn [(overlaps-group? [current group] + (some #(overlap-bubbles? zoom current %) group)) + + (find-overlapping-group [groups current] + (some #(when (overlaps-group? current %) %) groups)) + + (add-to-group [groups target current] + (map #(if (= % target) (cons current %) %) groups)) + + (assign [groups current] + (if-let [group (find-overlapping-group groups current)] + (add-to-group groups group current) + (cons [current] groups)))] + (reduce assign [] circles))) + (defn- calculate-zoom-scale-to-ungroup-current-bubble "Calculate the minimum zoom scale needed to keep the current bubble ungrouped from the rest" [zoom thread threads] @@ -373,7 +409,7 @@ (rx/empty)) (->> (rx/of (dwd/select-for-drawing :comments) - (set-zoom-to-separate-grouped-bubbles thread) + ;; Center on the comment (no zoom) and open its thread. (center-to-comment-thread thread) (with-meta (dcmt/open-thread thread) {::ev/origin "workspace"})) (rx/observe-on :async)))))) diff --git a/frontend/src/app/main/ui/comments.cljs b/frontend/src/app/main/ui/comments.cljs index c3bd8044fa..bf49f7acc0 100644 --- a/frontend/src/app/main/ui/comments.cljs +++ b/frontend/src/app/main/ui/comments.cljs @@ -18,8 +18,6 @@ [app.main.data.comments :as dcm] [app.main.data.modal :as modal] [app.main.data.workspace.comments :as dwcm] - [app.main.data.workspace.viewport :as dwv] - [app.main.data.workspace.zoom :as dwz] [app.main.refs :as refs] [app.main.store :as st] [app.main.ui.components.dropdown :refer [dropdown]] @@ -704,15 +702,21 @@ (mf/defc comment-reply-form* {::mf/private true} - [{:keys [on-submit]}] + [{:keys [on-submit on-cancel]}] (let [content (mf/use-state "") disabled? (or (blank-content? @content) (exceeds-length? @content)) + ;; Contexts without a global interrupt handler (e.g. the viewer) pass an + ;; explicit cancel; otherwise fall back to the interrupt cycle. on-cancel (mf/use-fn - #(st/emit! :interrupt)) + (mf/deps on-cancel) + (fn [] + (if (fn? on-cancel) + (on-cancel) + (st/emit! :interrupt)))) on-change (mf/use-fn @@ -799,8 +803,10 @@ (some? position-modifier) (gpt/transform position-modifier)) content (:content draft) - bubble-margin (gpt/point 0 0) + ;; Keep the draft bubble centered on the comment position (matching a + ;; created bubble) while the input box is offset to the side. + bubble-margin (gpt/point 24 24) pos (offset-position position viewport zoom bubble-margin) margin-x (* (:x bubble-margin) (if (= (:h-dir pos) :left) -1 1)) @@ -808,6 +814,9 @@ pos-x (+ (* (:x pos) zoom) margin-x) pos-y (- (* (:y pos) zoom) margin-y) + bubble-x (floor (* (:x position) zoom)) + bubble-y (floor (* (:y position) zoom)) + disabled? (or (blank-content? content) (exceeds-length? content)) @@ -833,39 +842,36 @@ (on-submit draft)))] [:> (mf/provider mentions-context) {:value mentions-s} - [:div {:class (stl/css-case :floating-thread-draft-wrapper true + [:div {:class (stl/css :floating-preview-wrapper :floating-preview-bubble) + :data-testid "floating-thread-bubble" + :style {:top (dm/str bubble-y "px") + :left (dm/str bubble-x "px")} + :on-click dom/stop-propagation} + [:> comment-avatar* {:class (stl/css :avatar-lg) + :image (cfg/resolve-profile-photo-url profile)}]] + + [:div {:class (stl/css-case :floating-thread-draft-inner-wrapper true + :cursor-auto true :left (= (:h-dir pos) :left) :top (= (:v-dir pos) :top)) :style {:top (str pos-y "px") - :left (str pos-x "px")}} - [:div - {:data-testid "floating-thread-bubble" - :style {:top (str pos-y "px") - :left (str pos-x "px")} - :on-click dom/stop-propagation} - [:> comment-avatar* {:class (stl/css :avatar-lg) - :image (cfg/resolve-profile-photo-url profile)}]] - [:div {:class (stl/css :floating-thread-draft-inner-wrapper - :cursor-auto) - :style {:top (str (- pos-y 24) "px") - :left (str (+ pos-x 28) "px")} - - :on-click dom/stop-propagation} - [:div {:class (stl/css :form)} - [:> comment-input* - {:placeholder (tr "labels.write-new-comment") - :value (or content "") - :autofocus true - :on-esc on-esc - :on-change on-change - :on-ctrl-enter on-submit*}] - (when (exceeds-length? content) - [:div {:class (stl/css :error-text)} - (tr "errors.character-limit-exceeded")]) - [:> comment-form-buttons* {:on-submit on-submit* - :on-cancel on-esc - :is-disabled disabled?}]] - [:> mentions-panel*]]]])) + :left (str pos-x "px")} + :on-click dom/stop-propagation} + [:div {:class (stl/css :form)} + [:> comment-input* + {:placeholder (tr "labels.write-new-comment") + :value (or content "") + :autofocus true + :on-esc on-esc + :on-change on-change + :on-ctrl-enter on-submit*}] + (when (exceeds-length? content) + [:div {:class (stl/css :error-text)} + (tr "errors.character-limit-exceeded")]) + [:> comment-form-buttons* {:on-submit on-submit* + :on-cancel on-esc + :is-disabled disabled?}]] + [:> mentions-panel*]]])) (mf/defc comment-floating-thread-header* {::mf/private true} @@ -1057,7 +1063,10 @@ (mf/use-fn (mf/deps thread) (fn [content] - (st/emit! (dcm/add-comment thread content))))] + (st/emit! (dcm/add-comment thread content)))) + + on-cancel + (mf/use-fn #(st/emit! (dcm/close-thread)))] (mf/with-effect [thread-id] (st/emit! (dcm/retrieve-comments thread-id))) @@ -1092,60 +1101,65 @@ [:* {:key (dm/str (:id item))} [:> comment-floating-thread-item* {:comment item}]])] - [:> comment-reply-form* {:on-submit on-submit}] + [:> comment-reply-form* {:on-submit on-submit + :on-cancel (when (= origin :viewer) on-cancel)}] [:> mentions-panel*]])])) -(defn group-bubbles - "Group bubbles in different vectors by proximity" - ([zoom circles] - (group-bubbles zoom circles [] [])) +;; Screen-space gap (px) between concentric rings of an expanded cluster. +(def ^:private expanded-ring-gap 44) - ([zoom circles visited groups] - (if (empty? circles) - groups - (let [current (first circles) - remaining (rest circles) - overlapping-group (some (fn [group] - (when (some (partial dwcm/overlap-bubbles? zoom current) group) group)) - groups)] - (if overlapping-group - (group-bubbles zoom remaining visited (map (fn [group] - (if (= group overlapping-group) - (cons current group) - group)) - groups)) - (group-bubbles zoom remaining visited (cons [current] groups))))))) +;; Number of bubbles that fit in the innermost ring; each further ring +;; grows its capacity proportionally to its circumference. +(def ^:private expanded-ring-base 6) -(defn- inside-vbox? - "Checks if a bubble or a bubble group is inside a viewbox" - [thread-group wl] - (let [vbox (:vbox wl) - positions (mapv :position thread-group) - position (gpt/center-points positions) - pos-x (:x position) - pos-y (:y position) - x1 (:x vbox) - y1 (:y vbox) - x2 (+ x1 (:width vbox)) - y2 (+ y1 (:height vbox))] - (and (> x2 pos-x x1) (> y2 pos-y y1)))) +(defn- expanded-ring-slot + "Return [ring slot capacity] placing the bubble at index `i` (0-based) into + concentric rings, filling the innermost ring first." + [i] + (loop [ring 1 + i i] + (let [capacity (* expanded-ring-base ring)] + (if (< i capacity) + [ring i capacity] + (recur (inc ring) (- i capacity)))))) -(defn- calculate-zoom-scale - "Calculates the zoom level needed to ungroup the largest number of bubbles while - keeping them all visible in the viewbox." - [position zoom threads wl] - (let [num-threads (count threads) - grouped-threads (group-bubbles zoom threads) - num-grouped-threads (count grouped-threads) - zoom-scale-step 1.75 - scaled-zoom (* zoom zoom-scale-step) - zoomed-wl (dwz/impl-update-zoom wl position scaled-zoom) - outside-vbox? (complement inside-vbox?)] - (if (or (= num-threads num-grouped-threads) - (some #(outside-vbox? % zoomed-wl) grouped-threads)) - zoom - (calculate-zoom-scale position scaled-zoom threads zoomed-wl)))) +(defn- expanded-ring-vector + "Pure ring displacement (px) around the cluster center for the bubble at index + `i` (0-based), laid out into concentric rings, innermost first." + [i] + (let [[ring slot capacity] (expanded-ring-slot i) + ;; Start each ring at the top and stagger alternate rings by half a + ;; slot so bubbles don't line up radially. + angle (+ (* (/ slot capacity) 2 mth/PI) + (- (/ mth/PI 2)) + (if (even? ring) (/ mth/PI capacity) 0)) + radius (* ring expanded-ring-gap)] + (gpt/point (* radius (mth/cos angle)) + (* radius (mth/sin angle))))) + +(defn expanded-group-center + "Cluster center point (stored coordinates) shared by all bubbles of a group." + [thread-group] + (gpt/center-points (mapv :position thread-group))) + +(defn expanded-group-offsets + "Return a seq of [thread offset ring] triples laying each thread of + `thread-group` into a centered concentric-ring layout, leaving stored + positions untouched. `offset` is the total screen-space displacement from the + bubble's own position; `ring` is just the displacement from the cluster + center (used to animate the fan-out)." + [zoom thread-group] + (let [threads (sort-by :seqn thread-group) + center (expanded-group-center threads)] + (map-indexed + (fn [i thread] + (let [position (:position thread) + ring (expanded-ring-vector i) + base (gpt/point (* (- (:x center) (:x position)) zoom) + (* (- (:y center) (:y position)) zoom))] + [thread (gpt/add base ring) ring])) + threads))) (mf/defc comment-floating-group* {::mf/wrap [mf/memo]} @@ -1167,16 +1181,15 @@ ;; Click-through while transforming a shape, so it doesn't capture the drag dragging? (some? (mf/deref refs/current-transform)) + thread-ids (mf/with-memo [thread-group] + (into #{} (map :id) thread-group)) + on-click (mf/use-fn - (mf/deps thread-group position zoom) - (fn [] - (let [wl (deref refs/workspace-local) - centered-wl (dwv/calculate-centered-viewbox wl position) - updated-zoom (calculate-zoom-scale position zoom thread-group centered-wl) - scale-zoom (/ updated-zoom zoom)] - (st/emit! (dwv/update-viewport-position-center position) - (dwz/set-zoom position scale-zoom)))))] + (mf/deps thread-ids) + (fn [event] + (dom/stop-propagation event) + (st/emit! (dcm/expand-comment-group thread-ids))))] [:div {:style {:top (dm/str pos-y "px") :left (dm/str pos-x "px") @@ -1189,9 +1202,31 @@ :data-testid (dm/str "floating-thread-bubble-" test-id)} num-threads]])) +(mf/defc comment-floating-ghost* + "Dashed, semi-transparent placeholder shown at the cluster center while its + bubbles are fanned out into the expanded ring." + {::mf/wrap [mf/memo] + ::mf/private true} + [{:keys [thread-group zoom position-modifier]}] + (let [center (expanded-group-center thread-group) + center (cond-> center + (some? position-modifier) + (gpt/transform position-modifier)) + pos-x (floor (* (:x center) zoom)) + pos-y (floor (* (:y center) zoom)) + num-threads (str (count thread-group))] + [:div {:style {:top (dm/str pos-y "px") + :left (dm/str pos-x "px") + :pointer-events "none"} + :class (stl/css :floating-preview-wrapper :floating-preview-bubble :floating-preview-ghost)} + [:> comment-avatar* + {:class (stl/css :avatar-lg) + :variant "read"} + num-threads]])) + (mf/defc comment-floating-bubble* {::mf/wrap [mf/memo]} - [{:keys [thread zoom is-open on-click origin position-modifier]}] + [{:keys [thread zoom is-open on-click origin position-modifier offset ring]}] (let [owner (mf/with-memo [thread] (dcm/get-owner thread)) @@ -1202,6 +1237,10 @@ frame-id (:frame-id thread) + ;; A bubble with `offset` is one of the fanned-out members of an + ;; expanded cluster. + expanded? (some? offset) + ;; Click-through while transforming a shape, so it doesn't capture the drag dragging? (some? (mf/deref refs/current-transform)) @@ -1212,8 +1251,31 @@ :new-position-y nil :new-frame-id frame-id})) - pos-x (floor (* (or (:new-position-x @state) (:x position)) zoom)) - pos-y (floor (* (or (:new-position-y @state) (:y position)) zoom)) + new-x (:new-position-x @state) + new-y (:new-position-y @state) + + ;; While dragging, the new position already accounts for the ring offset; + ;; otherwise an expanded bubble sits at its stored position plus the + ;; screen-space ring offset. + pos-x (if (some? new-x) + (floor (* new-x zoom)) + (+ (floor (* (:x position) zoom)) + (if expanded? (:x offset) 0))) + pos-y (if (some? new-y) + (floor (* new-y zoom)) + (+ (floor (* (:y position) zoom)) + (if expanded? (:y offset) 0))) + + ;; World-space anchor a drag starts from: an expanded bubble is shown at + ;; its ring position, so dragging must begin there, not at its stored + ;; position. + drag-base-x (if expanded? (+ (:x position) (/ (:x offset) zoom)) (:x position)) + drag-base-y (if expanded? (+ (:y position) (/ (:y offset) zoom)) (:y position)) + + ;; CSS custom properties fed to the fan-out animation; nil for regular + ;; (non-expanded) bubbles. + ring-x (when (and expanded? (some? ring)) (dm/str (- (:x ring)) "px")) + ring-y (when (and expanded? (some? ring)) (dm/str (- (:y ring)) "px")) drag? (mf/use-ref nil) was-open? (mf/use-ref nil) @@ -1237,7 +1299,7 @@ on-pointer-up (mf/use-fn - (mf/deps origin thread (select-keys @state [:new-position-x :new-position-y :new-frame-id])) + (mf/deps origin thread expanded? (select-keys @state [:new-position-x :new-position-y :new-frame-id])) (fn [event] (when (not= origin :viewer) (swap! state assoc :is-grabbing false) @@ -1250,13 +1312,16 @@ (some? (:new-position-y @state))) (st/emit! (dwcm/update-comment-thread-position thread [(:new-position-x @state) (:new-position-y @state)])) + ;; Dropping a fanned-out bubble commits its new spot and closes + ;; the temporary cluster expansion. + (when expanded? (st/emit! (dcm/collapse-comment-group))) (swap! state assoc :new-position-x nil :new-position-y nil))))) on-pointer-move (mf/use-fn - (mf/deps origin drag? position zoom) + (mf/deps origin drag? drag-base-x drag-base-y zoom) (fn [event] (when (not= origin :viewer) (mf/set-ref-val! drag? true) @@ -1267,8 +1332,8 @@ delta-x (/ (- (:x current-pt) (:x start-pt)) zoom) delta-y (/ (- (:y current-pt) (:y start-pt)) zoom)] (swap! state assoc - :new-position-x (+ (:x position) delta-x) - :new-position-y (+ (:y position) delta-y))))))) + :new-position-x (+ drag-base-x delta-x) + :new-position-y (+ drag-base-y delta-y))))))) on-pointer-enter (mf/use-fn @@ -1286,7 +1351,7 @@ on-click* (mf/use-fn - (mf/deps origin thread on-click was-open? drag? (select-keys @state [:is-hover])) + (mf/deps origin thread on-click was-open? drag?) (fn [event] (dom/stop-propagation event) (when (or (and (mf/ref-val was-open?) (mf/ref-val drag?)) @@ -1298,34 +1363,42 @@ [:div {:style {:top (dm/str pos-y "px") :left (dm/str pos-x "px") - :pointer-events (when dragging? "none")} - :on-pointer-down on-pointer-down - :on-pointer-up on-pointer-up - :on-pointer-move on-pointer-move - :on-pointer-enter on-pointer-enter - :on-pointer-leave on-pointer-leave - :on-click on-click* + :pointer-events (when dragging? "none") + "--comment-ring-x" ring-x + "--comment-ring-y" ring-y} :class (stl/css-case :floating-preview-wrapper true - :floating-preview-bubble (false? (:is-hover @state)))} + :floating-preview-bubble (false? (:is-hover @state)) + :floating-preview-expanded expanded? + :floating-preview-hovered (:is-hover @state))} - (if (:is-hover @state) - [:div {:class (stl/css-case :floating-thread-wrapper true - :floating-preview-displacement true - :cursor-pointer (false? (:is-grabbing @state)) - :cursor-grabbing (true? (:is-grabbing @state)))} + ;; The avatar circle is the only pointer target: it drives hover, drag and + ;; click, so hovering the preview card below never keeps the tooltip open. + [:div {:on-pointer-down on-pointer-down + :on-pointer-up on-pointer-up + :on-pointer-move on-pointer-move + :on-pointer-enter on-pointer-enter + :on-pointer-leave on-pointer-leave + :on-click on-click* + :class (stl/css-case :floating-preview-avatar true + :cursor-pointer (false? (:is-grabbing @state)) + :cursor-grabbing (true? (:is-grabbing @state)))} + [:> comment-avatar* + {:image (cfg/resolve-profile-photo-url owner) + :class (stl/css :avatar-lg) + :data-testid (dm/str "floating-thread-bubble-" (:seqn thread)) + :variant (cond + (:is-resolved thread) "solved" + (pos? (:count-unread-comments thread)) "unread" + :else "read")}]] + + (when (:is-hover @state) + [:div {:class (stl/css :floating-thread-wrapper + :floating-preview-displacement + :floating-preview-hover-card)} [:div {:class (stl/css :floating-thread-item-wrapper)} [:div {:class (stl/css :floating-thread-item)} [:> comment-info* {:item thread - :profile owner}]]]] - - [:> comment-avatar* - {:image (cfg/resolve-profile-photo-url owner) - :class (stl/css :avatar-lg) - :data-testid (dm/str "floating-thread-bubble-" (:seqn thread)) - :variant (cond - (:is-resolved thread) "solved" - (pos? (:count-unread-comments thread)) "unread" - :else "read")}])])) + :profile owner}]]]])])) (mf/defc comment-sidebar-thread-item* {::mf/private true} diff --git a/frontend/src/app/main/ui/comments.scss b/frontend/src/app/main/ui/comments.scss index 8c99a6c95f..fc47433711 100644 --- a/frontend/src/app/main/ui/comments.scss +++ b/frontend/src/app/main/ui/comments.scss @@ -5,6 +5,7 @@ // Copyright (c) KALEIDOS INC Sucursal en España SL @use "refactor/common-refactor.scss" as deprecated; +@use "ds/_sizes.scss" as *; .cursor-grabbing { cursor: grabbing; @@ -104,6 +105,7 @@ justify-content: center; font-size: deprecated.$fs-12; background-color: var(--color-background-quaternary); + color: var(--color-foreground-quaternary); } .avatar-mask { @@ -167,31 +169,68 @@ z-index: initial; } -.floating-thread-draft-wrapper { - position: absolute; +// Sole pointer target of a floating bubble. +.floating-preview-avatar { display: flex; - flex-direction: row; - column-gap: deprecated.$s-12; + height: $sz-32; + width: $sz-32; +} - --translate-x: 0%; - --translate-y: 0%; +// Expanded-cluster bubble: sits above regular bubbles and fans out on appearance. +.floating-preview-expanded { + z-index: 2; + animation: comment-bubble-fan-out 0.18s ease-out; +} - transform: translate(var(--translate-x), var(--translate-y)); - - &.left { - --translate-x: -100%; - - flex-direction: row-reverse; +@keyframes comment-bubble-fan-out { + from { + translate: var(--comment-ring-x, 0) var(--comment-ring-y, 0); + opacity: 0; } - &.top { - --translate-y: -100%; - - align-items: flex-end; + to { + translate: 0 0; + opacity: 1; } } +// Hovered bubble's preview card floats above every other bubble. +.floating-preview-hovered { + z-index: 10; +} + +// Placeholder shown at the cluster center while its bubbles are fanned out. +.floating-preview-ghost { + z-index: 1; + opacity: 0.6; + pointer-events: none; + animation: comment-ghost-appear 0.18s ease-out; + + .avatar { + border-style: dashed; + background-color: var(--comment-modal-background-color); + } +} + +@keyframes comment-ghost-appear { + from { + opacity: 0; + } + + to { + opacity: 0.6; + } +} + +// Anchored to the wrapper origin and click-through, so hover stays bound to the avatar. +.floating-thread-wrapper.floating-preview-hover-card { + top: 0; + left: 0; + pointer-events: none; +} + .floating-thread-draft-inner-wrapper { + position: absolute; display: flex; flex-direction: column; gap: deprecated.$s-12; @@ -202,6 +241,19 @@ border: deprecated.$s-2 solid var(--modal-border-color); background-color: var(--comment-modal-background-color); max-height: var(--comment-height); + + --translate-x: 0%; + --translate-y: 0%; + + transform: translate(var(--translate-x), var(--translate-y)); + + &.left { + --translate-x: -100%; + } + + &.top { + --translate-y: -100%; + } } .floating-preview-displacement { diff --git a/frontend/src/app/main/ui/viewer/comments.cljs b/frontend/src/app/main/ui/viewer/comments.cljs index 4c18332a5d..e08d50cb5a 100644 --- a/frontend/src/app/main/ui/viewer/comments.cljs +++ b/frontend/src/app/main/ui/viewer/comments.cljs @@ -15,6 +15,7 @@ [app.common.geom.shapes :as gsh] [app.main.data.comments :as dcm] [app.main.data.event :as ev] + [app.main.data.workspace.comments :as dwcm] [app.main.refs :as refs] [app.main.store :as st] [app.main.ui.comments :as cmt] @@ -176,13 +177,22 @@ (-> (dcm/open-thread thread) (with-meta {::ev/origin "viewer"})))))) + expanded (:expanded local) + on-click (mf/use-fn - (mf/deps open-thread-id zoom page-id file-id modifier2) + (mf/deps open-thread-id expanded zoom page-id file-id modifier2) (fn [event] (dom/stop-propagation event) - (if (some? open-thread-id) + (cond + ;; A click anywhere first collapses a temporarily expanded cluster. + (some? expanded) + (st/emit! (dcm/collapse-comment-group)) + + (some? open-thread-id) (st/emit! (dcm/close-thread)) + + :else (let [event (dom/event->native-event event) position (-> (dom/get-offset-position event) (update :x #(/ % zoom)) @@ -204,24 +214,60 @@ (st/emit! (dcm/create-thread-on-viewer params) (dcm/close-thread)))))] + ;; Any zoom change collapses an expanded cluster back, matching the workspace. + (mf/with-effect [zoom] + (st/emit! (dcm/collapse-comment-group))) + [:div {:class (stl/css :comments-section) :on-click on-click} [:div {:class (dm/str cursor " " (stl/css :viewer-comments-container))} [:div {:class (stl/css :threads)} - (for [item threads] - [:> cmt/comment-floating-bubble* - {:thread item - :position-modifier modifier1 - :zoom zoom - :on-click on-bubble-click - :is-open (= (:id item) (:open local)) - :key (:seqn item) - :origin :viewer}]) + (for [thread-group (dwcm/group-bubbles zoom threads)] + (let [group? (> (count thread-group) 1) + thread (first thread-group) + expanded? (and group? + (= expanded (into #{} (map :id) thread-group)))] + (cond + expanded? + [:* {:key (:seqn thread)} + [:> cmt/comment-floating-ghost* + {:thread-group thread-group + :zoom zoom + :position-modifier modifier1}] + (for [[thread offset ring] (cmt/expanded-group-offsets zoom thread-group)] + [:> cmt/comment-floating-bubble* + {:thread thread + :position-modifier modifier1 + :zoom zoom + :offset offset + :ring ring + :on-click on-bubble-click + :is-open false + :origin :viewer + :key (:seqn thread)}])] + + group? + [:> cmt/comment-floating-group* + {:thread-group thread-group + :zoom zoom + :position-modifier modifier1 + :key (:seqn thread)}] + + :else + [:> cmt/comment-floating-bubble* + {:thread thread + :position-modifier modifier1 + :zoom zoom + :on-click on-bubble-click + :is-open (= (:id thread) (:open local)) + :origin :viewer + :key (:seqn thread)}]))) (when-let [thread (get threads-map open-thread-id)] [:> cmt/comment-floating-thread* {:thread thread :position-modifier modifier1 + :origin :viewer :viewport {:offset-x 0 :offset-y 0 :width (:width vsize) :height (:height vsize)} :zoom zoom}]) diff --git a/frontend/src/app/main/ui/workspace/viewport/comments.cljs b/frontend/src/app/main/ui/workspace/viewport/comments.cljs index 8fc476751c..288b537f1b 100644 --- a/frontend/src/app/main/ui/workspace/viewport/comments.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/comments.cljs @@ -28,12 +28,14 @@ (mf/defc comment-floating-bubble-wrapper* {::mf/private true} - [{:keys [thread zoom is-open]}] + [{:keys [thread zoom is-open offset ring]}] (let [position-modifier (use-frame-position-modifier (:frame-id thread))] [:> cmt/comment-floating-bubble* {:thread thread :zoom zoom :position-modifier position-modifier + :offset offset + :ring ring :is-open is-open}])) (mf/defc comment-floating-group-wrapper* @@ -46,6 +48,16 @@ :zoom zoom :position-modifier position-modifier}])) +(mf/defc comment-floating-ghost-wrapper* + {::mf/private true} + [{:keys [thread-group zoom]}] + (let [thread (first thread-group) + position-modifier (use-frame-position-modifier (:frame-id thread))] + [:> cmt/comment-floating-ghost* + {:thread-group thread-group + :zoom zoom + :position-modifier position-modifier}])) + (mf/defc comment-floating-thread-wrapper* {::mf/private true} [{:keys [thread viewport zoom]}] @@ -93,6 +105,10 @@ (st/emit! (dwcm/initialize-comments file-id)) (fn [] (st/emit! ::dwcm/finalize))) + ;; Any viewport change (pan/zoom) collapses an expanded cluster back. + (mf/with-effect [vbox zoom] + (st/emit! (dcm/collapse-comment-group))) + [:div {:class (stl/css :comments-section)} [:div {:id "comments" @@ -102,13 +118,30 @@ [:div {:class (stl/css :threads) :style {:transform (dm/fmt "translate(%px, %px)" pos-x pos-y)}} - (for [thread-group (cmt/group-bubbles zoom threads)] - (let [group? (> (count thread-group) 1) - thread (first thread-group)] - (if group? + (for [thread-group (dwcm/group-bubbles zoom threads)] + (let [group? (> (count thread-group) 1) + thread (first thread-group) + expanded? (and group? + (= (:expanded local) (into #{} (map :id) thread-group)))] + (cond + expanded? + [:* {:key (:seqn thread)} + [:> comment-floating-ghost-wrapper* {:thread-group thread-group + :zoom zoom}] + (for [[thread offset ring] (cmt/expanded-group-offsets zoom thread-group)] + [:> comment-floating-bubble-wrapper* {:thread thread + :zoom zoom + :offset offset + :ring ring + :is-open false + :key (:seqn thread)}])] + + group? [:> comment-floating-group-wrapper* {:thread-group thread-group :zoom zoom :key (:seqn thread)}] + + :else [:> comment-floating-bubble-wrapper* {:thread thread :zoom zoom :is-open (= (:id thread) (:open local)) diff --git a/frontend/test/frontend_tests/runner.cljs b/frontend/test/frontend_tests/runner.cljs index 6fc3fdd1cc..a83cba73be 100644 --- a/frontend/test/frontend_tests/runner.cljs +++ b/frontend/test/frontend_tests/runner.cljs @@ -52,6 +52,7 @@ [frontend-tests.tokens.style-dictionary-test] [frontend-tests.tokens.token-errors-test] [frontend-tests.tokens.workspace-tokens-remap-test] + [frontend-tests.ui.comments-clustering-test] [frontend-tests.ui.comments-position-modifier-test] [frontend-tests.ui.ds-controls-numeric-input-test] [frontend-tests.ui.measures-menu-props-test] @@ -122,6 +123,7 @@ 'frontend-tests.tokens.style-dictionary-test 'frontend-tests.tokens.token-errors-test 'frontend-tests.tokens.workspace-tokens-remap-test + 'frontend-tests.ui.comments-clustering-test 'frontend-tests.ui.comments-position-modifier-test 'frontend-tests.ui.ds-controls-numeric-input-test 'frontend-tests.ui.measures-menu-props-test diff --git a/frontend/test/frontend_tests/ui/comments_clustering_test.cljs b/frontend/test/frontend_tests/ui/comments_clustering_test.cljs new file mode 100644 index 0000000000..eeaa7d1a97 --- /dev/null +++ b/frontend/test/frontend_tests/ui/comments_clustering_test.cljs @@ -0,0 +1,144 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns frontend-tests.ui.comments-clustering-test + (:require + [app.common.geom.point :as gpt] + [app.common.math :as mth] + [app.main.data.comments :as dcm] + [app.main.data.workspace.comments :as dwcm] + [app.main.ui.comments :as cmt] + [cljs.test :as t :include-macros true] + [potok.v2.core :as ptk])) + +(defn- thread + [seqn x y] + {:id seqn :seqn seqn :position (gpt/point x y)}) + +(defn- magnitude + [p] + (gpt/distance p (gpt/point 0 0))) + +(defn- find-group + "Return the group (from a group-bubbles result) that contains the thread with + the given seqn." + [groups seqn] + (some (fn [group] + (when (some #(= (:seqn %) seqn) group) group)) + groups)) + +;; --- overlap-bubbles? ------------------------------------------------------ + +(t/deftest overlap-bubbles-close + (t/testing "bubbles within the overlap distance overlap" + (t/is (true? (dwcm/overlap-bubbles? 1 (thread 1 100 100) (thread 2 110 100)))))) + +(t/deftest overlap-bubbles-far + (t/testing "distant bubbles do not overlap" + (t/is (false? (dwcm/overlap-bubbles? 1 (thread 1 100 100) (thread 2 200 100)))))) + +(t/deftest overlap-bubbles-zoom + (t/testing "zoom scales the screen-space distance, separating close bubbles" + ;; 10px apart in canvas space is 40px on screen at zoom 4, above the 32px + ;; overlap threshold. + (t/is (false? (dwcm/overlap-bubbles? 4 (thread 1 100 100) (thread 2 110 100)))))) + +;; --- group-bubbles --------------------------------------------------------- + +(t/deftest group-bubbles-separate-clusters + (let [threads [(thread 1 100 100) + (thread 2 105 100) + (thread 3 500 500)] + groups (dwcm/group-bubbles 1 threads)] + (t/testing "produces one group per proximity cluster" + (t/is (= 2 (count groups)))) + (t/testing "overlapping bubbles share a group" + (t/is (= 2 (count (find-group groups 1)))) + (t/is (some #(= (:seqn %) 2) (find-group groups 1)))) + (t/testing "a distant bubble stays alone" + (t/is (= 1 (count (find-group groups 3))))))) + +(t/deftest group-bubbles-transitive-chain + ;; A-B and B-C overlap but A-C do not; the shared neighbour B keeps them in a + ;; single group. + (let [threads [(thread 1 100 100) + (thread 2 120 100) + (thread 3 140 100)] + groups (dwcm/group-bubbles 1 threads)] + (t/testing "a chain of overlaps forms a single group" + (t/is (= 1 (count groups))) + (t/is (= 3 (count (first groups))))))) + +;; --- expanded-group-center ------------------------------------------------- + +(t/deftest expanded-group-center-centroid + (t/testing "the cluster center is the centroid of the bubble positions" + (t/is (= (gpt/point 150 150) + (cmt/expanded-group-center [(thread 1 100 100) + (thread 2 200 200)]))))) + +;; --- expanded-group-offsets ------------------------------------------------ + +(t/deftest expanded-group-offsets-single-ring + (let [threads (mapv #(thread % 100 100) (range 6)) + offsets (cmt/expanded-group-offsets 1 threads)] + (t/testing "lays out every bubble of the cluster" + (t/is (= 6 (count offsets)))) + (t/testing "the innermost ring keeps a constant radius" + (t/is (every? #(mth/close? 44 (magnitude (nth % 2))) offsets))) + (t/testing "the first bubble is placed at the top of the ring" + (let [ring (nth (first offsets) 2)] + (t/is (mth/close? 0 (:x ring))) + (t/is (mth/close? -44 (:y ring))))))) + +(t/deftest expanded-group-offsets-concentric-rings + (let [threads (mapv #(thread % 100 100) (range 8)) + rings (mapv #(magnitude (nth % 2)) + (cmt/expanded-group-offsets 1 threads))] + (t/testing "the first six bubbles fill the inner ring" + (t/is (every? #(mth/close? 44 %) (take 6 rings)))) + (t/testing "the overflow spills onto a second, wider ring" + (t/is (every? #(mth/close? 88 %) (drop 6 rings)))))) + +(t/deftest expanded-group-offsets-total-offset + (t/testing "the total offset moves each bubble from its position to the ring" + ;; With all bubbles sharing a position, the base displacement is zero, so the + ;; total offset equals the pure ring vector. + (let [threads (mapv #(thread % 100 100) (range 3))] + (doseq [[_ offset ring] (cmt/expanded-group-offsets 1 threads)] + (t/is (mth/close? (:x offset) (:x ring))) + (t/is (mth/close? (:y offset) (:y ring))))))) + +;; --- cluster state transitions --------------------------------------------- + +(t/deftest expand-comment-group-replaces-open + (let [state {:comments-local {:open 5 :draft {} :options 9}} + result (ptk/update (dcm/expand-comment-group #{1 2 3}) state) + local (:comments-local result)] + (t/testing "expanding a cluster records its member ids" + (t/is (= #{1 2 3} (:expanded local)))) + (t/testing "expanding a cluster clears any open thread or draft" + (t/is (nil? (:open local))) + (t/is (nil? (:draft local)))))) + +(t/deftest collapse-comment-group-preserves-open + (let [state {:comments-local {:expanded #{1 2} :open 5}} + result (ptk/update (dcm/collapse-comment-group) state) + local (:comments-local result)] + (t/testing "collapsing clears the expansion" + (t/is (nil? (:expanded local)))) + (t/testing "collapsing leaves an open thread untouched" + (t/is (= 5 (:open local)))))) + +(t/deftest close-thread-clears-everything + (let [state {:comments-local {:open 5 :draft {} :expanded #{1} :options 9}} + result (ptk/update (dcm/close-thread) state) + local (:comments-local result)] + (t/testing "closing a thread clears open, draft, expanded and options" + (t/is (nil? (:open local))) + (t/is (nil? (:draft local))) + (t/is (nil? (:expanded local))) + (t/is (nil? (:options local)))))) From ebfcb716ac4e6501075985f25f14c9f24dcccac3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Valderrama?= Date: Thu, 9 Jul 2026 14:12:41 +0200 Subject: [PATCH 069/229] :bug: Fix permission to add a team to an organization (#10623) --- frontend/src/app/main/ui/dashboard/team.cljs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/main/ui/dashboard/team.cljs b/frontend/src/app/main/ui/dashboard/team.cljs index 0746a49a6b..e134930b4c 100644 --- a/frontend/src/app/main/ui/dashboard/team.cljs +++ b/frontend/src/app/main/ui/dashboard/team.cljs @@ -1538,8 +1538,9 @@ can-change-organization? (mf/with-memo [all-organizations] (> (count all-organizations) 1)) - can-add-to-organization? (mf/with-memo [organizations all-organizations] - (and (pos? (count all-organizations)) + can-add-to-organization? (mf/with-memo [organizations all-organizations permissions] + (and (:is-owner permissions) + (pos? (count all-organizations)) (not (:is-default team)))) show-org-options-menu* From 508569437a613c61e61b1317f00ca5ba2d7795b0 Mon Sep 17 00:00:00 2001 From: Whos Deez <134500894+Whosdeez@users.noreply.github.com> Date: Fri, 10 Jul 2026 07:01:43 +0000 Subject: [PATCH 070/229] :books: Fix flex word repetition and correct modifier key in docs (#10610) * :paperclip: Update version on mcp package.json * Update flexible-layouts.njk : fixed repetition and changed shortcut Fixed 'Flex' word repetition; made the Toggle Flex instruction reflect the correct keyboard modifier key. Signed-off-by: Whos Deez <134500894+Whosdeez@users.noreply.github.com> * Update package version to 2.17.0 Signed-off-by: Andrey Antukh --------- Signed-off-by: Whos Deez <134500894+Whosdeez@users.noreply.github.com> Signed-off-by: Andrey Antukh Co-authored-by: Andrey Antukh --- docs/user-guide/designing/flexible-layouts.njk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/user-guide/designing/flexible-layouts.njk b/docs/user-guide/designing/flexible-layouts.njk index 832344841e..15faa6bd39 100644 --- a/docs/user-guide/designing/flexible-layouts.njk +++ b/docs/user-guide/designing/flexible-layouts.njk @@ -24,11 +24,11 @@ desc: Master responsive web design with Penpot's flexible and grid layouts! Lear

Add Flex Layout

-

You can add Flex Layout to any layer, group, board or a selection including any of these. Once Flex Layout Flex is added the selected elements will be contained into a board with the Flex Layout properties. You have several ways to do this:

+

You can add Flex Layout to any layer, group, board or a selection including any of these. Once Flex Layout is added, the selected elements will be contained into a board with the Flex Layout properties. You have several ways to do this:

  • From the Design panel at the right sidebar.
  • From the option at the selection menu (right click button).
  • -
  • Pressing Ctrl/⌘ + A.
  • +
  • Pressing Shift/⇧ + A.
Adding Layouts
From 3ee5b500077d20ee16cb07f3a6adc7e62278d57c Mon Sep 17 00:00:00 2001 From: Alonso Torres Date: Fri, 10 Jul 2026 09:13:20 +0200 Subject: [PATCH 071/229] :bug: Fix problems with padding multiple values in plugins and UI (#10602) * :bug: Fix problem with padding types in plugins * :bug: Fix problem with multiple selection paddings --- common/src/app/common/types/shape/layout.cljc | 16 +++ .../options/menus/layout_container.cljs | 4 + .../sidebar/options/shapes/multiple.cljs | 61 ++++++++++- frontend/src/app/plugins/flex.cljs | 102 +++++++++++++----- frontend/src/app/plugins/grid.cljs | 51 ++++++--- frontend/test/frontend_tests/runner.cljs | 2 + .../ui/layout_container_multiple_test.cljs | 46 ++++++++ plugins/CHANGELOG.md | 12 ++- .../src/generated/api-surface.json | 26 +++++ .../src/tests/layout.test.ts | 93 ++++++++++++++++ plugins/libs/plugin-types/index.d.ts | 15 +++ 11 files changed, 388 insertions(+), 40 deletions(-) create mode 100644 frontend/test/frontend_tests/ui/layout_container_multiple_test.cljs diff --git a/common/src/app/common/types/shape/layout.cljc b/common/src/app/common/types/shape/layout.cljc index 595f99caa0..8b7831d5ab 100644 --- a/common/src/app/common/types/shape/layout.cljc +++ b/common/src/app/common/types/shape/layout.cljc @@ -347,6 +347,22 @@ (+ pad-top pad-top) (+ pad-top pad-bottom)))) +(defn padding-type-for + "`:simple` when top≈bottom and left≈right, `:multiple` otherwise (nil sides = 0)." + [{:keys [p1 p2 p3 p4]}] + (if (and (mth/close? (d/nilv p1 0) (d/nilv p3 0)) + (mth/close? (d/nilv p2 0) (d/nilv p4 0))) + :simple + :multiple)) + +(defn margin-type-for + "`:simple` when top≈bottom and left≈right, `:multiple` otherwise (nil sides = 0)." + [{:keys [m1 m2 m3 m4]}] + (if (and (mth/close? (d/nilv m1 0) (d/nilv m3 0)) + (mth/close? (d/nilv m2 0) (d/nilv m4 0))) + :simple + :multiple)) + (defn child-min-width [child] (if (and (fill-width? child) diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs index 654eccaf4c..70050dd38e 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs @@ -1213,6 +1213,10 @@ (and (= type :simple) (or (= prop :p2) (= prop #{:p2 :p4}))) (st/emit! (dwsl/update-layout ids {:layout-padding {:p2 val :p4 val}})) + (and (= type :multiple) (some? prop)) + (st/emit! (dwsl/update-layout ids {:layout-padding-type :multiple + :layout-padding {prop val}})) + (some? prop) (st/emit! (dwsl/update-layout ids {:layout-padding {prop val}})))))) diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/multiple.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/multiple.cljs index 565c368611..f20dc82caa 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/multiple.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/multiple.cljs @@ -12,6 +12,7 @@ [app.common.data.macros :as dm] [app.common.files.helpers :as cfh] [app.common.geom.shapes :as gsh] + [app.common.math :as mth] [app.common.types.component :as ctk] [app.common.types.path :as path] [app.common.types.shape.attrs :refer [editable-attrs]] @@ -208,6 +209,59 @@ [v] (when v (select-keys v blur-keys))) +(def layout-padding-attrs [:p1 :p2 :p3 :p4]) + +(defn- normalize-layout-padding + [value] + (if (= value :multiple) + (zipmap layout-padding-attrs (repeat :multiple)) + value)) + +(defn- merge-layout-padding + [values shape-values] + (let [current (normalize-layout-padding (get values :layout-padding ::unset)) + next (normalize-layout-padding (get shape-values :layout-padding ::unset))] + (cond + (= current ::unset) next + (= next ::unset) current + + (and (map? current) (map? next)) + (attrs/get-attrs-multi [current next] layout-padding-attrs) + + (= current next) + current + + :else + :multiple))) + +(defn- same-padding-value? + [v1 v2] + (if (and (number? v1) (number? v2)) + (mth/close? v1 v2) + (= v1 v2))) + +(defn- simple-layout-padding? + [{:keys [p1 p2 p3 p4]}] + (and (same-padding-value? p1 p3) + (same-padding-value? p2 p4))) + +(defn- promote-simple-layout-padding-type + [{:keys [layout-padding layout-padding-type] :as values}] + (cond-> values + (and (= layout-padding-type :simple) + (map? layout-padding) + (not (simple-layout-padding? layout-padding))) + (assoc :layout-padding-type :multiple))) + +(defn- merge-layout-container-attrs + [values shape-values attrs] + (let [merged-values (attrs/get-attrs-multi [values shape-values] attrs) + merged-values (cond-> merged-values + (or (contains? values :layout-padding) + (contains? shape-values :layout-padding)) + (assoc :layout-padding (merge-layout-padding values shape-values)))] + (promote-simple-layout-padding-type merged-values))) + (defn get-attrs* "Given a group of attributes that we want to extract and the shapes to extract them from returns a list of tuples [id, values] with the extracted properties for the shapes that @@ -217,9 +271,10 @@ merge-attrs (fn [v1 v2] (cond - (= attr-group :shadow) (attrs/get-attrs-multi [v1 v2] attrs shadow-eq shadow-sel) - (= attr-group :blur) (attrs/get-attrs-multi [v1 v2] attrs blur-eq blur-sel) - :else (attrs/get-attrs-multi [v1 v2] attrs))) + (= attr-group :shadow) (attrs/get-attrs-multi [v1 v2] attrs shadow-eq shadow-sel) + (= attr-group :blur) (attrs/get-attrs-multi [v1 v2] attrs blur-eq blur-sel) + (= attr-group :layout-container) (merge-layout-container-attrs v1 v2 attrs) + :else (attrs/get-attrs-multi [v1 v2] attrs))) merge-attr (fn [acc applied-tokens t-attr] diff --git a/frontend/src/app/plugins/flex.cljs b/frontend/src/app/plugins/flex.cljs index ff1ec594a7..0967edcbec 100644 --- a/frontend/src/app/plugins/flex.cljs +++ b/frontend/src/app/plugins/flex.cljs @@ -20,6 +20,20 @@ ;; Define in `app.plugins.shape` we do this way to prevent circular dependency (def shape-proxy? nil) +(defn- update-padding + "Patch the layout padding and re-derive its `:simple`/`:multiple` type." + [this id patch] + (let [padding (merge (-> this u/proxy->shape :layout-padding) patch)] + (st/emit! (dwsl/update-layout #{id} {:layout-padding patch + :layout-padding-type (ctl/padding-type-for padding)})))) + +(defn- update-margin + "Patch the item margin and re-derive its `:simple`/`:multiple` type." + [this id patch] + (let [margin (merge (-> this u/proxy->shape :layout-item-margin) patch)] + (st/emit! (dwsl/update-layout-child #{id} {:layout-item-margin patch + :layout-item-margin-type (ctl/margin-type-for margin)})))) + (defn flex-layout-proxy? [p] (obj/type-of? p "FlexLayoutProxy")) @@ -185,7 +199,7 @@ {:this true :get #(-> % u/proxy->shape :layout-padding :p1 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :verticalPadding value) @@ -197,13 +211,13 @@ (u/not-valid plugin-id :verticalPadding "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout #{id} {:layout-padding {:p1 value :p3 value}}))))} + (update-padding this id {:p1 value :p3 value})))} :horizontalPadding {:this true :get #(-> % u/proxy->shape :layout-padding :p2 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :horizontalPadding value) @@ -215,13 +229,13 @@ (u/not-valid plugin-id :horizontalPadding "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout #{id} {:layout-padding {:p2 value :p4 value}}))))} + (update-padding this id {:p2 value :p4 value})))} :topPadding {:this true :get #(-> % u/proxy->shape :layout-padding :p1 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :topPadding value) @@ -233,13 +247,13 @@ (u/not-valid plugin-id :topPadding "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout #{id} {:layout-padding {:p1 value}}))))} + (update-padding this id {:p1 value})))} :rightPadding {:this true :get #(-> % u/proxy->shape :layout-padding :p2 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :rightPadding value) @@ -251,13 +265,13 @@ (u/not-valid plugin-id :rightPadding "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout #{id} {:layout-padding {:p2 value}}))))} + (update-padding this id {:p2 value})))} :bottomPadding {:this true :get #(-> % u/proxy->shape :layout-padding :p3 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :bottomPadding value) @@ -269,13 +283,13 @@ (u/not-valid plugin-id :bottomPadding "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout #{id} {:layout-padding {:p3 value}}))))} + (update-padding this id {:p3 value})))} :leftPadding {:this true :get #(-> % u/proxy->shape :layout-padding :p4 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :leftPadding value) @@ -287,7 +301,27 @@ (u/not-valid plugin-id :leftPadding "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout #{id} {:layout-padding {:p4 value}}))))} + (update-padding this id {:p4 value})))} + + ;; `:simple` mirrors vertical/horizontal padding; `:multiple` honours each side. + :paddingType + {:this true + :get #(-> % u/proxy->shape :layout-padding-type (d/nilv :simple) d/name) + :set + (fn [_ value] + (let [value (keyword value)] + (cond + (not (contains? ctl/padding-type value)) + (u/not-valid plugin-id :paddingType value) + + (not (r/check-permission plugin-id "content:write")) + (u/not-valid plugin-id :paddingType "Plugin doesn't have 'content:write' permission") + + (not (u/page-active? page-id)) + (u/not-valid plugin-id :paddingType "Cannot modify a page that is not currently active") + + :else + (st/emit! (dwsl/update-layout #{id} {:layout-padding-type value})))))} :remove (fn [] @@ -469,7 +503,7 @@ {:this true :get #(-> % u/proxy->shape :layout-item-margin :m1 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :verticalMargin value) @@ -481,13 +515,13 @@ (u/not-valid plugin-id :verticalMargin "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout-child #{id} {:layout-item-margin {:m1 value :m3 value}}))))} + (update-margin this id {:m1 value :m3 value})))} :horizontalMargin {:this true :get #(-> % u/proxy->shape :layout-item-margin :m2 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :horizontalMargin value) @@ -499,13 +533,13 @@ (u/not-valid plugin-id :horizontalMargin "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout-child #{id} {:layout-item-margin {:m2 value :m4 value}}))))} + (update-margin this id {:m2 value :m4 value})))} :topMargin {:this true :get #(-> % u/proxy->shape :layout-item-margin :m1 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :topMargin value) @@ -517,13 +551,13 @@ (u/not-valid plugin-id :topMargin "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout-child #{id} {:layout-item-margin {:m1 value}}))))} + (update-margin this id {:m1 value})))} :rightMargin {:this true :get #(-> % u/proxy->shape :layout-item-margin :m2 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :rightMargin value) @@ -535,13 +569,13 @@ (u/not-valid plugin-id :rightMargin "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout-child #{id} {:layout-item-margin {:m2 value}}))))} + (update-margin this id {:m2 value})))} :bottomMargin {:this true :get #(-> % u/proxy->shape :layout-item-margin :m3 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :bottomMargin value) @@ -553,13 +587,13 @@ (u/not-valid plugin-id :bottomMargin "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout-child #{id} {:layout-item-margin {:m3 value}}))))} + (update-margin this id {:m3 value})))} :leftMargin {:this true :get #(-> % u/proxy->shape :layout-item-margin :m4 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :leftMargin value) @@ -571,7 +605,27 @@ (u/not-valid plugin-id :leftMargin "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout-child #{id} {:layout-item-margin {:m4 value}}))))} + (update-margin this id {:m4 value})))} + + ;; `:simple` mirrors vertical/horizontal margin; `:multiple` honours each side. + :marginType + {:this true + :get #(-> % u/proxy->shape :layout-item-margin-type (d/nilv :simple) d/name) + :set + (fn [_ value] + (let [value (keyword value)] + (cond + (not (contains? ctl/item-margin-types value)) + (u/not-valid plugin-id :marginType value) + + (not (r/check-permission plugin-id "content:write")) + (u/not-valid plugin-id :marginType "Plugin doesn't have 'content:write' permission") + + (not (u/page-active? page-id)) + (u/not-valid plugin-id :marginType "Cannot modify a page that is not currently active") + + :else + (st/emit! (dwsl/update-layout-child #{id} {:layout-item-margin-type value})))))} :maxWidth {:this true diff --git a/frontend/src/app/plugins/grid.cljs b/frontend/src/app/plugins/grid.cljs index e0122062db..96deccb857 100644 --- a/frontend/src/app/plugins/grid.cljs +++ b/frontend/src/app/plugins/grid.cljs @@ -21,6 +21,13 @@ ;; Define in `app.plugins.shape` we do this way to prevent circular dependency (def shape-proxy? nil) +(defn- update-padding + "Patch the layout padding and re-derive its `:simple`/`:multiple` type." + [this id patch] + (let [padding (merge (-> this u/proxy->shape :layout-padding) patch)] + (st/emit! (dwsl/update-layout #{id} {:layout-padding patch + :layout-padding-type (ctl/padding-type-for padding)})))) + (defn grid-layout-proxy? [p] (obj/type-of? p "GridLayoutProxy")) @@ -217,7 +224,7 @@ {:this true :get #(-> % u/proxy->shape :layout-padding :p1 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :verticalPadding value) @@ -229,13 +236,13 @@ (u/not-valid plugin-id :verticalPadding "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout #{id} {:layout-padding {:p1 value :p3 value}}))))} + (update-padding this id {:p1 value :p3 value})))} :horizontalPadding {:this true :get #(-> % u/proxy->shape :layout-padding :p2 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :horizontalPadding value) @@ -247,13 +254,13 @@ (u/not-valid plugin-id :horizontalPadding "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout #{id} {:layout-padding {:p2 value :p4 value}}))))} + (update-padding this id {:p2 value :p4 value})))} :topPadding {:this true :get #(-> % u/proxy->shape :layout-padding :p1 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :topPadding value) @@ -265,13 +272,13 @@ (u/not-valid plugin-id :topPadding "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout #{id} {:layout-padding {:p1 value}}))))} + (update-padding this id {:p1 value})))} :rightPadding {:this true :get #(-> % u/proxy->shape :layout-padding :p2 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :rightPadding value) @@ -283,13 +290,13 @@ (u/not-valid plugin-id :rightPadding "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout #{id} {:layout-padding {:p2 value}}))))} + (update-padding this id {:p2 value})))} :bottomPadding {:this true :get #(-> % u/proxy->shape :layout-padding :p3 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :bottomPadding value) @@ -301,13 +308,13 @@ (u/not-valid plugin-id :bottomPadding "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout #{id} {:layout-padding {:p3 value}}))))} + (update-padding this id {:p3 value})))} :leftPadding {:this true :get #(-> % u/proxy->shape :layout-padding :p4 (d/nilv 0)) :set - (fn [_ value] + (fn [this value] (cond (not (sm/valid-safe-number? value)) (u/not-valid plugin-id :leftPadding value) @@ -319,7 +326,27 @@ (u/not-valid plugin-id :leftPadding "Cannot modify a page that is not currently active") :else - (st/emit! (dwsl/update-layout #{id} {:layout-padding {:p4 value}}))))} + (update-padding this id {:p4 value})))} + + ;; `:simple` mirrors vertical/horizontal padding; `:multiple` honours each side. + :paddingType + {:this true + :get #(-> % u/proxy->shape :layout-padding-type (d/nilv :simple) d/name) + :set + (fn [_ value] + (let [value (keyword value)] + (cond + (not (contains? ctl/padding-type value)) + (u/not-valid plugin-id :paddingType value) + + (not (r/check-permission plugin-id "content:write")) + (u/not-valid plugin-id :paddingType "Plugin doesn't have 'content:write' permission") + + (not (u/page-active? page-id)) + (u/not-valid plugin-id :paddingType "Cannot modify a page that is not currently active") + + :else + (st/emit! (dwsl/update-layout #{id} {:layout-padding-type value})))))} :addRow (fn [type value] diff --git a/frontend/test/frontend_tests/runner.cljs b/frontend/test/frontend_tests/runner.cljs index 6f92bff904..b6f1a32a80 100644 --- a/frontend/test/frontend_tests/runner.cljs +++ b/frontend/test/frontend_tests/runner.cljs @@ -56,6 +56,7 @@ [frontend-tests.ui.comments-clustering-test] [frontend-tests.ui.comments-position-modifier-test] [frontend-tests.ui.ds-controls-numeric-input-test] + [frontend-tests.ui.layout-container-multiple-test] [frontend-tests.ui.measures-menu-props-test] [frontend-tests.util-object-test] [frontend-tests.util-range-tree-test] @@ -128,6 +129,7 @@ 'frontend-tests.ui.comments-clustering-test 'frontend-tests.ui.comments-position-modifier-test 'frontend-tests.ui.ds-controls-numeric-input-test + 'frontend-tests.ui.layout-container-multiple-test 'frontend-tests.ui.measures-menu-props-test 'frontend-tests.util-object-test 'frontend-tests.util-range-tree-test diff --git a/frontend/test/frontend_tests/ui/layout_container_multiple_test.cljs b/frontend/test/frontend_tests/ui/layout_container_multiple_test.cljs new file mode 100644 index 0000000000..19c4278057 --- /dev/null +++ b/frontend/test/frontend_tests/ui/layout_container_multiple_test.cljs @@ -0,0 +1,46 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns frontend-tests.ui.layout-container-multiple-test + (:require + [app.main.ui.workspace.sidebar.options.shapes.multiple :as multiple] + [cljs.test :as t :include-macros true])) + +(defn- flex-frame + [id padding-type padding] + {:id id + :type :frame + :layout :flex + :layout-flex-dir :row + :layout-gap-type :multiple + :layout-gap {:row-gap 0 :column-gap 0} + :layout-align-items :start + :layout-justify-content :start + :layout-align-content :stretch + :layout-wrap-type :nowrap + :layout-padding-type padding-type + :layout-padding padding}) + +(defn- layout-container-values + [shapes] + (let [[_ids values _tokens] (multiple/get-attrs* shapes {} :layout-container)] + values)) + +(t/deftest multiple-selection-padding-keeps-matching-sides + (let [values (layout-container-values + [(flex-frame :frame-1 :simple {:p1 10 :p2 20 :p3 10 :p4 20}) + (flex-frame :frame-2 :simple {:p1 10 :p2 20 :p3 30 :p4 40})])] + (t/is (= {:p1 10 :p2 20 :p3 :multiple :p4 :multiple} + (:layout-padding values))) + (t/is (= :multiple (:layout-padding-type values))))) + +(t/deftest multiple-selection-padding-type-does-not-demote + (let [values (layout-container-values + [(flex-frame :frame-1 :multiple {:p1 10 :p2 20 :p3 10 :p4 20}) + (flex-frame :frame-2 :multiple {:p1 10 :p2 20 :p3 10 :p4 20})])] + (t/is (= {:p1 10 :p2 20 :p3 10 :p4 20} + (:layout-padding values))) + (t/is (= :multiple (:layout-padding-type values))))) diff --git a/plugins/CHANGELOG.md b/plugins/CHANGELOG.md index 80dee3f1c9..323e8319ab 100644 --- a/plugins/CHANGELOG.md +++ b/plugins/CHANGELOG.md @@ -1,4 +1,14 @@ -## 1.5.0 (Unreleased) +## 1.6.0 (Unreleased) + +### 🚀 Features + +- **plugin-types:** Added `paddingType` (`'simple' | 'multiple'`) to flex and grid layouts and `marginType` (`'simple' | 'multiple'`) to layout children, exposing whether the four padding/margin sides are mirrored or honoured independently. + +### 🩹 Fixes + +- **plugins-runtime**: Setting an individual padding/margin side (`leftPadding`, `topMargin`, …) now re-derives the padding/margin type, switching to `multiple` when the four sides stop being symmetric (so the value is actually painted) and back to `simple` once top/bottom and left/right are mirrored again. + +## 1.5.0 (2026-07-08) ### 💣 Breaking changes & Deprecations diff --git a/plugins/apps/plugin-api-test-suite/src/generated/api-surface.json b/plugins/apps/plugin-api-test-suite/src/generated/api-surface.json index 69dc9d5546..f61aac311a 100644 --- a/plugins/apps/plugin-api-test-suite/src/generated/api-surface.json +++ b/plugins/apps/plugin-api-test-suite/src/generated/api-surface.json @@ -66,6 +66,7 @@ "justifyContent", "justifyItems", "leftPadding", + "paddingType", "remove", "rightPadding", "rowGap", @@ -254,6 +255,7 @@ "horizontalMargin", "horizontalSizing", "leftMargin", + "marginType", "maxHeight", "maxWidth", "minHeight", @@ -2032,6 +2034,12 @@ "type": null, "array": false }, + "paddingType": { + "decl": "CommonLayout", + "kind": "getset", + "type": null, + "array": false + }, "horizontalSizing": { "decl": "CommonLayout", "kind": "getset", @@ -3242,6 +3250,12 @@ "type": null, "array": false }, + "paddingType": { + "decl": "CommonLayout", + "kind": "getset", + "type": null, + "array": false + }, "horizontalSizing": { "decl": "CommonLayout", "kind": "getset", @@ -3590,6 +3604,12 @@ "type": null, "array": false }, + "paddingType": { + "decl": "CommonLayout", + "kind": "getset", + "type": null, + "array": false + }, "horizontalSizing": { "decl": "CommonLayout", "kind": "getset", @@ -4868,6 +4888,12 @@ "type": null, "array": false }, + "marginType": { + "decl": "LayoutChildProperties", + "kind": "getset", + "type": null, + "array": false + }, "maxWidth": { "decl": "LayoutChildProperties", "kind": "getset", diff --git a/plugins/apps/plugin-api-test-suite/src/tests/layout.test.ts b/plugins/apps/plugin-api-test-suite/src/tests/layout.test.ts index b42cb65fab..867132714e 100644 --- a/plugins/apps/plugin-api-test-suite/src/tests/layout.test.ts +++ b/plugins/apps/plugin-api-test-suite/src/tests/layout.test.ts @@ -82,6 +82,34 @@ describe('Layout', () => { expect(flex.leftPadding).toBeCloseTo(4.5, 2); }); + // paddingType is "simple" (sides mirrored) or "multiple" (each side independent). + test('paddingType round-trips', (ctx) => { + const flex = board(ctx).addFlexLayout(); + expect(flex.paddingType).toBe('simple'); + flex.paddingType = 'multiple'; + expect(flex.paddingType).toBe('multiple'); + flex.paddingType = 'simple'; + expect(flex.paddingType).toBe('simple'); + }); + + // Issue #10278: a single asymmetric side must switch paddingType to "multiple" so it paints. + test('setting an individual padding side switches paddingType to multiple', (ctx) => { + const flex = board(ctx).addFlexLayout(); + expect(flex.paddingType).toBe('simple'); + flex.leftPadding = 40; + expect(flex.leftPadding).toBeCloseTo(40, 0); + expect(flex.paddingType).toBe('multiple'); + }); + + // Re-derived from the sides: once symmetric again, the type collapses to "simple". + test('padding collapsing back to symmetric restores simple type', (ctx) => { + const flex = board(ctx).addFlexLayout(); + flex.leftPadding = 40; + expect(flex.paddingType).toBe('multiple'); + flex.leftPadding = 0; + expect(flex.paddingType).toBe('simple'); + }); + test('sizing round-trips', (ctx) => { const flex = board(ctx).addFlexLayout(); flex.horizontalSizing = 'fix'; @@ -210,6 +238,22 @@ describe('Layout', () => { expect(grid.leftPadding).toBeCloseTo(4.5, 2); }); + // paddingType behaves the same as on flex layouts (see issue #10278). + test('paddingType round-trips', (ctx) => { + const grid = board(ctx).addGridLayout(); + expect(grid.paddingType).toBe('simple'); + grid.paddingType = 'multiple'; + expect(grid.paddingType).toBe('multiple'); + }); + + test('setting an individual padding side switches paddingType to multiple', (ctx) => { + const grid = board(ctx).addGridLayout(); + expect(grid.paddingType).toBe('simple'); + grid.leftPadding = 40; + expect(grid.leftPadding).toBeCloseTo(40, 0); + expect(grid.paddingType).toBe('multiple'); + }); + // Index boundaries — invalid indices must be rejected. test('addRowAtIndex with a negative index throws', (ctx) => { const grid = board(ctx).addGridLayout(); @@ -389,6 +433,55 @@ describe('Layout', () => { } }); + // marginType is the child-margin counterpart of a layout's paddingType. + test('marginType round-trips', (ctx) => { + const b = board(ctx); + const flex = b.addFlexLayout(); + const rect = ctx.penpot.createRectangle(); + flex.appendChild(rect); + const child = rect.layoutChild; + expect(child).toBeDefined(); + if (child) { + expect(child.marginType).toBe('simple'); + child.marginType = 'multiple'; + expect(child.marginType).toBe('multiple'); + child.marginType = 'simple'; + expect(child.marginType).toBe('simple'); + } + }); + + // Issue #10278 (margins): a single asymmetric side must switch marginType to "multiple". + test('setting an individual margin side switches marginType to multiple', (ctx) => { + const b = board(ctx); + const flex = b.addFlexLayout(); + const rect = ctx.penpot.createRectangle(); + flex.appendChild(rect); + const child = rect.layoutChild; + expect(child).toBeDefined(); + if (child) { + expect(child.marginType).toBe('simple'); + child.leftMargin = 12; + expect(child.leftMargin).toBeCloseTo(12, 0); + expect(child.marginType).toBe('multiple'); + } + }); + + // Symmetric margins collapse the child back to "simple", mirroring padding. + test('margin collapsing back to symmetric restores simple type', (ctx) => { + const b = board(ctx); + const flex = b.addFlexLayout(); + const rect = ctx.penpot.createRectangle(); + flex.appendChild(rect); + const child = rect.layoutChild; + expect(child).toBeDefined(); + if (child) { + child.leftMargin = 12; + expect(child.marginType).toBe('multiple'); + child.leftMargin = 0; + expect(child.marginType).toBe('simple'); + } + }); + // Community report (forum #10700, issue #12): layoutChild was said to be // null for children appended to a flex board that is re-found (fresh // proxy) instead of using the creation-time reference. Did not reproduce; diff --git a/plugins/libs/plugin-types/index.d.ts b/plugins/libs/plugin-types/index.d.ts index 6150e6b136..1dbe005a3e 100644 --- a/plugins/libs/plugin-types/index.d.ts +++ b/plugins/libs/plugin-types/index.d.ts @@ -747,6 +747,13 @@ export interface CommonLayout { * The `leftPadding` property specifies the padding at the left of the container. */ leftPadding: number; + /** + * The `paddingType` property specifies how the four padding values are applied. + * It can be one of the following values: + * - 'simple': the vertical and horizontal paddings are mirrored across both sides. + * - 'multiple': each of the four sides (top, right, bottom, left) is honoured independently. + */ + paddingType: 'simple' | 'multiple'; /** * The `horizontalSizing` property specifies the horizontal sizing behavior of the container. @@ -2576,6 +2583,14 @@ export interface LayoutChildProperties { */ leftMargin: number; + /** + * The `marginType` property specifies how the four margin values are applied. + * It can be one of the following values: + * - 'simple': the vertical and horizontal margins are mirrored across both sides. + * - 'multiple': each of the four sides (top, right, bottom, left) is honoured independently. + */ + marginType: 'simple' | 'multiple'; + /** * Defines the maximum width of the child element. * If set to null, there is no maximum width constraint. From 3469867cf5a6ddce3fc63106527053067763a42b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Fri, 10 Jul 2026 11:08:10 +0200 Subject: [PATCH 072/229] :bug: Fix text editor not auto-selecting all text on mount (#10573) --- .../ui/specs/text-editor-v3.spec.js | 24 +++++++++++++++++++ .../ui/workspace/shapes/text/v3_editor.cljs | 5 +++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/frontend/playwright/ui/specs/text-editor-v3.spec.js b/frontend/playwright/ui/specs/text-editor-v3.spec.js index 4a5964ea01..53b439ab19 100644 --- a/frontend/playwright/ui/specs/text-editor-v3.spec.js +++ b/frontend/playwright/ui/specs/text-editor-v3.spec.js @@ -129,3 +129,27 @@ test("BUG 10467 - Auto-width text captures every typed character", async ({ await workspace.waitForSelectedShapeName("hello world"); }); +test("BUG 10531 - Entering the editor auto-selects the whole text", async ({ + page, +}) => { + const workspace = new WasmWorkspacePage(page, { textEditor: true }); + await workspace.setupEmptyFile(); + await workspace.mockGetFile("text-editor/get-file-lorem-ipsum.json"); + await workspace.goToWorkspace(); + await workspace.waitForFirstRender(); + + // Select the existing text shape and enter edit mode via Enter + await workspace.clickLeafLayer("Lorem ipsum"); + await workspace.textEditor.startEditing(); + + // Copying while editing exports only the selected text as raw text. + // Since we just entered the editor, the whole text should be selected. + await workspace.copy("keyboard"); + + // Assert the text was copied correctly + const copiedText = await page.evaluate(() => + navigator.clipboard.readText(), + ); + expect(copiedText).toBe("Lorem ipsum"); +}); + diff --git a/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs b/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs index 458153f3b5..55310b0b87 100644 --- a/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs @@ -350,7 +350,10 @@ (mf/deps contenteditable-ref) (fn [] (when-let [node (mf/ref-val contenteditable-ref)] - (.focus node)) + ;; Focus and select all text on mount (this will trigger on-focus) + (.focus node) + (text-editor/text-editor-select-all) + (wasm.api/request-render "text-editor-select-all-on-mount")) ;; On unmount, finalize the editor content and then dispose the WASM editor. ;; We finalize on unmount instead of relying on the browser blur event, because ;; it was not being reliable (timing issues, Firefox issues…) From 89551b24159672a6803dd5ab7e04171df7e6c61b Mon Sep 17 00:00:00 2001 From: AK <144495202+AKnassa@users.noreply.github.com> Date: Fri, 10 Jul 2026 05:21:21 -0400 Subject: [PATCH 073/229] :bug: Fix dashboard user menu submenu not closing on hover out (#10639) The dashboard profile menu submenus (Help & Learning, Community & Contributions, About Penpot) opened on pointer enter but nothing closed them when the pointer left the option, leaving a stale submenu visible until the whole menu closed. Close the open submenu when the pointer leaves an expandable option or its submenu, with a 200ms grace period (same approach as the workspace context menu) so the submenu survives the pointer crossing the gap between the parent menu and the floating submenu. Keyboard navigation is unchanged and now covered by tests. Closes #10549 AI-assisted-by: claude-fable-5 Signed-off-by: Akshit Nassa Co-authored-by: Andrey Antukh --- .../playwright/ui/specs/profile-menu.spec.js | 86 +++++++++++++++++++ .../app/main/ui/components/dropdown_menu.cljs | 9 +- .../src/app/main/ui/dashboard/sidebar.cljs | 63 +++++++++++--- 3 files changed, 144 insertions(+), 14 deletions(-) diff --git a/frontend/playwright/ui/specs/profile-menu.spec.js b/frontend/playwright/ui/specs/profile-menu.spec.js index 71bdbb4199..3c12fbb151 100644 --- a/frontend/playwright/ui/specs/profile-menu.spec.js +++ b/frontend/playwright/ui/specs/profile-menu.spec.js @@ -28,6 +28,92 @@ test("Navigate to penpot changelog from profile menu", async ({ page }) => { ); }); +test("Submenu closes when hovering a menu option without submenu", async ({ + page, +}) => { + const dashboardPage = new DashboardPage(page); + await dashboardPage.goToDashboard(); + + await dashboardPage.openProfileMenu(); + await page.getByText("About Penpot").hover(); + + const changelogSubmenuItem = page.getByText("Penpot Changelog"); + await expect(changelogSubmenuItem).toBeVisible(); + + await dashboardPage.userProfileOption.hover(); + await expect(changelogSubmenuItem).toBeHidden(); +}); + +test("Submenu stays open while moving the pointer into it", async ({ + page, +}) => { + const dashboardPage = new DashboardPage(page); + await dashboardPage.goToDashboard(); + + await dashboardPage.openProfileMenu(); + const aboutPenpotItem = page.getByText("About Penpot"); + await aboutPenpotItem.hover(); + + const changelogSubmenuItem = page.getByText("Penpot Changelog"); + await expect(changelogSubmenuItem).toBeVisible(); + + // Walk the pointer from the parent option into the submenu the way a + // real user does — gradually, crossing the gap between the two menus. + const from = await aboutPenpotItem.boundingBox(); + const to = await changelogSubmenuItem.boundingBox(); + await page.mouse.move(from.x + from.width / 2, from.y + from.height / 2); + await page.mouse.move(to.x + to.width / 2, to.y + to.height / 2, { + steps: 20, + }); + + await expect(changelogSubmenuItem).toBeVisible(); +}); + +test("Submenu closes when the pointer leaves the menu entirely", async ({ + page, +}) => { + const dashboardPage = new DashboardPage(page); + await dashboardPage.goToDashboard(); + + await dashboardPage.openProfileMenu(); + await page.getByText("About Penpot").hover(); + + const changelogSubmenuItem = page.getByText("Penpot Changelog"); + await expect(changelogSubmenuItem).toBeVisible(); + + await dashboardPage.mainHeading.hover(); + await expect(changelogSubmenuItem).toBeHidden(); +}); + +test("Hovering another expandable option switches submenus", async ({ + page, +}) => { + const dashboardPage = new DashboardPage(page); + await dashboardPage.goToDashboard(); + + await dashboardPage.openProfileMenu(); + await page.getByText("Help & Learning").hover(); + + const helpCenterSubmenuItem = page.getByText("Help Center"); + await expect(helpCenterSubmenuItem).toBeVisible(); + + await page.getByText("About Penpot").hover(); + await expect(page.getByText("Penpot Changelog")).toBeVisible(); + await expect(helpCenterSubmenuItem).toBeHidden(); +}); + +test("Submenu opens with keyboard navigation", async ({ page }) => { + const dashboardPage = new DashboardPage(page); + await dashboardPage.goToDashboard(); + + await dashboardPage.openProfileMenu(); + await dashboardPage.sidebarMenu + .getByRole("menuitem", { name: "Help & Learning" }) + .press("Enter"); + + await expect(page.getByText("Help Center")).toBeVisible(); +}); + test("Opens release notes from current version from profile menu", async ({ page, }) => { diff --git a/frontend/src/app/main/ui/components/dropdown_menu.cljs b/frontend/src/app/main/ui/components/dropdown_menu.cljs index aad1e9a47e..681682fdae 100644 --- a/frontend/src/app/main/ui/components/dropdown_menu.cljs +++ b/frontend/src/app/main/ui/components/dropdown_menu.cljs @@ -27,7 +27,7 @@ (mf/defc internal-dropdown-menu* {::mf/private true} - [{:keys [on-close children class id]}] + [{:keys [on-close children class id on-pointer-enter on-pointer-leave]}] (assert (fn? on-close) "missing `on-close` prop") @@ -106,7 +106,12 @@ #(doseq [key keys] (events/unlistenByKey key)))) - [:ul {:class class :role "menu" :ref container} children])) + [:ul {:class class + :role "menu" + :ref container + :on-pointer-enter on-pointer-enter + :on-pointer-leave on-pointer-leave} + children])) (mf/defc dropdown-menu* [{:keys [show] :as props}] diff --git a/frontend/src/app/main/ui/dashboard/sidebar.cljs b/frontend/src/app/main/ui/dashboard/sidebar.cljs index 420383aa60..bea1060183 100644 --- a/frontend/src/app/main/ui/dashboard/sidebar.cljs +++ b/frontend/src/app/main/ui/dashboard/sidebar.cljs @@ -1133,7 +1133,7 @@ (mf/defc help-learning-menu* {::mf/private true} - [{:keys [on-close on-click]}] + [{:keys [on-close on-click on-pointer-enter on-pointer-leave]}] (let [handle-click-url (mf/use-fn (fn [event] @@ -1150,7 +1150,9 @@ [:> dropdown-menu* {:show true :class (stl/css :sub-menu :help-learning) - :on-close on-close} + :on-close on-close + :on-pointer-enter on-pointer-enter + :on-pointer-leave on-pointer-leave} [:> dropdown-menu-item* {:class (stl/css :submenu-item) :data-url "https://help.penpot.app" @@ -1177,7 +1179,7 @@ (mf/defc community-contributions-menu* {::mf/private true} - [{:keys [on-close]}] + [{:keys [on-close on-pointer-enter on-pointer-leave]}] (let [handle-click-url (mf/use-fn (fn [event] @@ -1191,7 +1193,9 @@ [:> dropdown-menu* {:show true :class (stl/css :sub-menu :community) - :on-close on-close} + :on-close on-close + :on-pointer-enter on-pointer-enter + :on-pointer-leave on-pointer-leave} [:> dropdown-menu-item* {:class (stl/css :submenu-item) :data-url "https://github.com/penpot/penpot" @@ -1207,7 +1211,7 @@ (mf/defc about-penpot-menu* {::mf/private true} - [{:keys [on-close]}] + [{:keys [on-close on-pointer-enter on-pointer-leave]}] (let [version cf/version show-release-notes (mf/use-fn @@ -1230,7 +1234,9 @@ [:> dropdown-menu* {:show true :class (stl/css :sub-menu :about) - :on-close on-close} + :on-close on-close + :on-pointer-enter on-pointer-enter + :on-pointer-leave on-pointer-leave} [:> dropdown-menu-item* {:class (stl/css :submenu-item) :on-click show-release-notes} @@ -1255,6 +1261,11 @@ show-profile-menu? (deref show-profile-menu*) sub-menu* (mf/use-state false) sub-menu (deref sub-menu*) + + ;; Tracks whether the pointer is over an expandable option or + ;; its floating submenu, so the submenu survives the gap + ;; between them while the pointer travels across. + hovering?* (mf/use-ref false) version (:base cf/version) close-sub-menu @@ -1320,6 +1331,24 @@ (keyword))] (reset! sub-menu* menu)))) + on-menu-pointer-enter + (mf/use-fn + (fn [event] + (mf/set-ref-val! hovering?* true) + (on-menu-click event))) + + on-menu-pointer-leave + (mf/use-fn + (fn [_] + (mf/set-ref-val! hovering?* false) + (ts/schedule 200 #(when-not (mf/ref-val hovering?*) + (reset! sub-menu* nil))))) + + on-sub-menu-pointer-enter + (mf/use-fn + (fn [_] + (mf/set-ref-val! hovering?* true))) + on-power-up-click (mf/use-fn (fn [] @@ -1393,7 +1422,8 @@ :on-key-down (fn [event] (when (kbd/enter? event) (on-menu-click event))) - :on-pointer-enter on-menu-click + :on-pointer-enter on-menu-pointer-enter + :on-pointer-leave on-menu-pointer-leave :data-testid "help-learning" :id "help-learning"} [:span {:class (stl/css :item-name)} (tr "labels.help-learning")] @@ -1404,7 +1434,8 @@ :on-key-down (fn [event] (when (kbd/enter? event) (on-menu-click event))) - :on-pointer-enter on-menu-click + :on-pointer-enter on-menu-pointer-enter + :on-pointer-leave on-menu-pointer-leave :data-testid "community-contributions" :id "community-contributions"} [:span {:class (stl/css :item-name)} (tr "labels.community-contributions")] @@ -1415,7 +1446,8 @@ :on-key-down (fn [event] (when (kbd/enter? event) (on-menu-click event))) - :on-pointer-enter on-menu-click + :on-pointer-enter on-menu-pointer-enter + :on-pointer-leave on-menu-pointer-leave :data-testid "about-penpot" :id "about-penpot"} @@ -1440,13 +1472,20 @@ (when show-profile-menu? (case sub-menu :help-learning - [:> help-learning-menu* {:on-close close-sub-menu :on-click on-click}] + [:> help-learning-menu* {:on-close close-sub-menu + :on-click on-click + :on-pointer-enter on-sub-menu-pointer-enter + :on-pointer-leave on-menu-pointer-leave}] :community-contributions - [:> community-contributions-menu* {:on-close close-sub-menu}] + [:> community-contributions-menu* {:on-close close-sub-menu + :on-pointer-enter on-sub-menu-pointer-enter + :on-pointer-leave on-menu-pointer-leave}] :about-penpot - [:> about-penpot-menu* {:on-close close-sub-menu}] + [:> about-penpot-menu* {:on-close close-sub-menu + :on-pointer-enter on-sub-menu-pointer-enter + :on-pointer-leave on-menu-pointer-leave}] nil))])) (mf/defc sidebar* From 176a813fb9c793348b88135bfb4626d14f8da7e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Fri, 10 Jul 2026 12:02:30 +0200 Subject: [PATCH 074/229] :bug: Fix selected text background color in light theme (#10614) --- .../app/main/ui/workspace/viewport_wasm.cljs | 11 +++++++ frontend/src/app/render_wasm/api.cljs | 1 + frontend/src/app/render_wasm/text_editor.cljs | 30 ++++++++++++++++++- frontend/src/app/util/color.cljs | 17 +++++++++++ 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/workspace/viewport_wasm.cljs b/frontend/src/app/main/ui/workspace/viewport_wasm.cljs index 1c4384f1e6..4a0c4a80b2 100644 --- a/frontend/src/app/main/ui/workspace/viewport_wasm.cljs +++ b/frontend/src/app/main/ui/workspace/viewport_wasm.cljs @@ -575,6 +575,17 @@ (wasm.api/push-ruler-theme-colors!) (wasm.api/request-render "rulers-colors-theme"))))) + ;; Text-editor-wasm: push the theme colors (selection background, caret) + ;; into the WASM text editor so the selection follows the design tokens per + ;; theme (purple on light, teal on dark) instead of a hardcoded default. + (mf/with-effect [@canvas-init?] + (when @canvas-init? + (wasm.api/text-editor-apply-theme) + (theme/add-color-scheme-listener! + (fn [] + (wasm.api/text-editor-apply-theme) + (wasm.api/request-render "text-editor-colors-theme"))))) + ;; Ruler overlay updates below only change the UI surface, not the shapes. ;; They use `render-from-cache!` (cached tiles + UI, atomic) instead of a full ;; `request-render`, which would kick off a progressive tile-by-tile shape diff --git a/frontend/src/app/render_wasm/api.cljs b/frontend/src/app/render_wasm/api.cljs index cea8256980..e4be664616 100644 --- a/frontend/src/app/render_wasm/api.cljs +++ b/frontend/src/app/render_wasm/api.cljs @@ -273,6 +273,7 @@ (def draw-thumbnail-to-canvas webgl/draw-thumbnail-to-canvas) ;; Re-export public text editor functions +(def text-editor-apply-theme text-editor/text-editor-apply-theme) (def text-editor-focus text-editor/text-editor-focus) (def text-editor-blur text-editor/text-editor-blur) (def text-editor-set-cursor-from-offset text-editor/text-editor-set-cursor-from-offset) diff --git a/frontend/src/app/render_wasm/text_editor.cljs b/frontend/src/app/render_wasm/text_editor.cljs index 5dba3e675c..d630346159 100644 --- a/frontend/src/app/render_wasm/text_editor.cljs +++ b/frontend/src/app/render_wasm/text_editor.cljs @@ -15,7 +15,10 @@ [app.render-wasm.helpers :as h] [app.render-wasm.mem :as mem] [app.render-wasm.serializers :as sr] - [app.render-wasm.wasm :as wasm])) + [app.render-wasm.serializers.color :as sr-clr] + [app.render-wasm.wasm :as wasm] + [app.util.color :as uc] + [app.util.dom :as dom])) (def multiple-state-multiple (sr/translate-multiple-state :multiple)) @@ -124,6 +127,31 @@ nil))) +(def ^:private selection-color-css-var "--text-editor-selection-background-color") +(def ^:private caret-color-css-var "--text-editor-caret-color") + +(defn- resolve-theme-color + "Resolve a themed CSS color variable (read from the document body) into a + 32-bit argb value for the WASM text editor, preserving the variable's alpha + channel." + [css-var] + (when-let [{:keys [color opacity]} + (uc/parse-css-color-opacity + (dom/get-css-variable css-var js/document.body))] + (sr-clr/hex->u32argb color opacity))) + +(defn text-editor-apply-theme + "Push the current theme's selection and caret colors (read from the CSS + custom properties on the document body) into the WASM text editor. The + editor theme is a persistent singleton, so call once after init and again + on every color-scheme change." + [] + (when wasm/context-initialized? + (let [selection (resolve-theme-color selection-color-css-var) + caret (resolve-theme-color caret-color-css-var)] + (when (and selection caret) + (h/call wasm/internal-module "_text_editor_apply_theme" selection caret))))) + (defn text-editor-focus [id] (when wasm/context-initialized? diff --git a/frontend/src/app/util/color.cljs b/frontend/src/app/util/color.cljs index 58cd64beb7..d28c3ccfb6 100644 --- a/frontend/src/app/util/color.cljs +++ b/frontend/src/app/util/color.cljs @@ -104,3 +104,20 @@ (cc/valid-hex-color? s) (-> (subs s 1) cc/expand-hex cc/prepend-hash) :else (some-> (cc/parse-rgb s) cc/rgb->hex))))) + +(def ^:private rgba-color-re + #"rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*([0-9]*\.?[0-9]+)\s*)?\)") + +(defn parse-css-color-opacity + "Like `parse-css-color` but also extracts the alpha channel, returning a + `{:color \"#rrggbb\" :opacity <0..1>}` map (opacity defaults to 1 when the + source has none). Handles #rrggbb, #rgb, rgb() and rgba(). Returns nil when + the string cannot be parsed." + [raw] + (let [s (some-> raw str/trim)] + (when (and (string? s) (seq s)) + (if (cc/valid-hex-color? s) + {:color (-> (subs s 1) cc/expand-hex cc/prepend-hash) :opacity 1} + (when-let [[_ r g b a] (re-matches rgba-color-re s)] + {:color (cc/rgb->hex [(js/parseInt r 10) (js/parseInt g 10) (js/parseInt b 10)]) + :opacity (if a (js/parseFloat a) 1)}))))) From 2c15dcdb84561b3b98872ef38e47482c7f9a985a Mon Sep 17 00:00:00 2001 From: "Dr. Dominik Jain" Date: Fri, 10 Jul 2026 12:17:43 +0200 Subject: [PATCH 075/229] :sparkles: Add systematic component tests via a composable test model (#10529) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :sparkles: Add systematic component tests via a composable test model Introduce a framework for systematically testing Penpot component behaviour (synchronisation/propagation, swaps, variant switches, nesting), plus a first suite of cases built on it. A test is expressed as a COMPOSITION OF OPERATIONS over a "situation" (an in-memory file value plus named role bindings). Operations are reified as data and composed by two combinators — `in-sequence` (threads the situation) and `one-of`/`optional` (alternatives, enumerated into concrete variants). So one written case stands for a whole matrix of variants, and coverage grows by composition rather than by copying tests. Operations drive the REAL production change pipeline, and event-operations dispatch the REAL workspace events and await settlement, so the production watcher's automatic propagation is what is exercised — the tests reflect genuine app behaviour, not a reimplementation. Structure (frontend/test/frontend_tests/composable_tests/): - core — the domain-agnostic engine: situation, the operation and enumeration protocols, the combinators, and the runners. - comp/nodes — the component operations (create/instantiate/reset, nesting, swap, the variant ops, child add/remove/move, change, undo, library sync). - comp/setups — component-shaped starting configurations. - interpreter — runs a case against the real frontend store: sync-ops apply directly, event-ops dispatch real events and await settlement (absorbing sync-file's delayed status RPC, which would otherwise leak an error into subsequent tests). - comp/sync-test — the cases (B-F, H, I, K, L, M). This is test-only code with a single consumer — the frontend test suite (the layer that runs the real app) — so it lives entirely under the frontend test tree as .cljs, not under app/common. The framework and its cases are documented in the project memory frontend/composable-component-tests, added alongside. Co-authored-by: Claude * :bug: Guard WASM mock teardown against an empty snapshot `teardown-wasm-mocks!` unconditionally restored from the `originals` atom. When run without a matching setup (double teardown, or `with-wasm-mocks*` misused around an async test body), the snapshot is empty and every WASM API function was `set!` to nil — permanently, for the remainder of the test run. Any later code calling one of them (e.g. a leaked debounced resize-wasm-text event firing during a subsequent test namespace) then crashed with "initialized? is not a function". Make the restore a no-op when there is nothing to restore. Co-authored-by: Claude --------- Co-authored-by: Claude --- .../frontend/composable-component-tests.md | 317 +++++ .../composable_tests/comp/nodes.cljs | 1020 +++++++++++++++++ .../composable_tests/comp/setups.cljs | 203 ++++ .../composable_tests/comp/sync_test.cljs | 346 ++++++ .../frontend_tests/composable_tests/core.cljs | 611 ++++++++++ .../composable_tests/interpreter.cljs | 471 ++++++++ .../test/frontend_tests/helpers/wasm.cljs | 8 +- frontend/test/frontend_tests/runner.cljs | 2 + 8 files changed, 2976 insertions(+), 2 deletions(-) create mode 100644 .serena/memories/frontend/composable-component-tests.md create mode 100644 frontend/test/frontend_tests/composable_tests/comp/nodes.cljs create mode 100644 frontend/test/frontend_tests/composable_tests/comp/setups.cljs create mode 100644 frontend/test/frontend_tests/composable_tests/comp/sync_test.cljs create mode 100644 frontend/test/frontend_tests/composable_tests/core.cljs create mode 100644 frontend/test/frontend_tests/composable_tests/interpreter.cljs diff --git a/.serena/memories/frontend/composable-component-tests.md b/.serena/memories/frontend/composable-component-tests.md new file mode 100644 index 0000000000..28c0605569 --- /dev/null +++ b/.serena/memories/frontend/composable-component-tests.md @@ -0,0 +1,317 @@ +# Composable component tests + +A framework for systematically testing Penpot's component subsystem (synchronisation/propagation, +swaps, variant switches, nesting), plus the suite of cases built on it. Lives entirely in the +**frontend** test tree as `.cljs`; it is test-only code with a single consumer (the frontend test +suite, which runs the real app). There is nothing "common" about it — it is not under `app/common`. + +## Core idea +A test is a **composition of operations** over a **situation**, plus assertions. You describe a +test as data (a setup + a sequence of operations) rather than writing bespoke imperative code, and +coverage grows by COMPOSITION: a new variation is one combinator wrapped around existing pieces, +not a copied test. One written case stands for a whole matrix of concrete cases. + +- **Situation** — the in-memory Penpot file value, plus named **roles** (meaningful shapes, e.g. + `:main-instance`/`:copy-instance`), a `:vars` map (named non-shape values), and an ordered + **applied-log** of what ran. +- **Operation** — a step, reified as a DATA record implementing `IOperation` (single method + `apply-to`; `apply` collides with core). Operations are printable, navigable, and enumerable. + Most transform the situation; some do not — hence the genus is "operation", not "transformation" + (`Test` asserts and returns the situation unchanged; `Skip` is a no-op). +- **Assertions** — inline `Test` operations placed in the sequence (assert at intermediate points) + and/or a trailing asserter (a `situation -> any` lambda calling `t/is`). The runner makes NO + judgment; it applies operations and returns the situation. Only *retrieval* helpers live outside + the test (role accessors, `has-property-of`, `applied?`). + +## Principles +- **Operations are data with identity.** Each node gets a unique id at construction (`assign-id`), + records what it did under that id (`record-application`), and is interrogated by identity + (`applied?`, `get-choice`). No flat keyword-tagged log. +- **Drive the real production pipeline.** Every operation routes through the actual production + change functions (`generate-update-shapes`, `generate-component-swap`, `generate-reset-component`, + `generate-sync-file-changes`, …) — never raw field writes, or propagation would have nothing to + react to. The test exercises genuine Penpot logic, not a reimplementation. +- **The frontend runs the real app.** Synchronous file-ops apply directly to the store; event-ops + dispatch the REAL workspace events and await settlement, so the production watcher's AUTOMATIC + propagation is what's under test. Observed semantics are genuine. +- **Roles resolve to ids at setup time.** The global label→id map (`thi`) is shared and + time-varying, so a role is captured as an id when the situation is built; resolving late (across + enumerated variants) would be unsound. Absence throws a diagnostic (never silent nil). +- **Targets resolve at apply-time and may be rebound.** A target is a `(situation -> id)` FUNCTION, + else a currently-bound ROLE, else a LABEL (`target-shape-id`). So one operation targeting a role + follows that role as state-building ops re-point it — which is what lets a single operation be + swept across depth. +- **Enumeration is authored, not exhaustive.** You compose only VALID cases (every `one-of` branch + must be valid against the setup), so outcomes are just pass / fail / error — no not-applicable + cells. Adding a variation across a matrix is a one-expression edit. +- **Naming discipline.** Penpot domain nouns ("component", "variant") must not name framework + abstractions (they collide with real domain concepts). Framework vocabulary is testing concepts + only; an operation may name the domain *action* it performs (`swap`, `propagate`). + +## Composition operators +- `in-sequence` — ordered application, threads the situation; enumerates to the CARTESIAN PRODUCT + of its steps' variants. Operations do not commute, so order is explicit. The workhorse. +- `one-of` — exactly one branch; applying it throws (must be enumerated); enumerates to the UNION + of branches, each wrapped in a `RecordedChoice` so `get-choice` recovers which ran. +- `optional(X)` = `one-of([X, skip])` — sweeps "with and without X" (two variants). `skip` is the + identity operation. The workhorse for adding a state-building step as an axis over a case. +- `test-that [assert-fn]` — an inline `Test`: asserts at this point in the sequence, situation + unchanged. Lets checkpoints sit at intermediate steps. Engine stays clojure.test-free (it just + calls the supplied fn). +- `applied? [situation operation]` — whether that exact node ran (identity-based). Composes with + `optional`/`one-of` for free. REQUIREMENT: bind an operation to a value ONCE and reuse it (in the + composition AND any `Test` querying it), so the id you ask about is the id that ran. + +## Structure (frontend/test/frontend_tests/composable_tests/) +Two boundaries: the domain-agnostic **engine** and the **comp** subject library (about components; +naming the domain is correct there). + +- `core.cljs` (ns `frontend-tests.composable-tests.core`) — the engine, one file: + - situation: `make-situation`, `file`/`with-file`, `with-aux-files`/`aux-files` (carry extra + files, e.g. a library for case H), the applied-log. + - identity & transcript: `assign-id`, `node-id`, `record-application` (also stores a `::kind` + from the record type), `node-data`, `describe-applied` (readable ordered transcript, attached + to every failure so a failing variant in a sweep is identifiable). + - roles & lookup: `role-shape` (strict, by stored id), `has-role?`, `rebind-role`/`rebind-role-id` + (re-point a role — used by state-building ops), `target-shape-id` (fn | role | label), + `shape-by-id` (read a shape whose id is held in a `:vars` object), `resolve-shape`/`-id`. + - protocols: `IOperation`(`apply-to`); `IEnumerable`(`-enumerate`) + `enumerate`. + - operators: `Sequence`/`in-sequence`; `OneOf`/`one-of`/`RecordedChoice`/`get-choice`; + `Skip`/`skip`; `optional`; `Test`/`test-that`; `applied?`; vars `set-var`/`get-var`. + - runners (clojure.test-free): `run-variant`, `run-all` (enumerate → vector, `thi/reset-idmap!` + per variant). + - per-op-interpreter helpers: `sequence-ops` (flatten a concrete variant — flattens `Sequence`, + keeps `RecordedChoice` as a unit), `recorded-choice?`, `choice-of`, `choice-one-of-id`. +- `comp/setups.cljs` — setup fns returning a situation, + role accessors (`main-instance`/ + `copy-instance`/`main-root`/`copy-root`, `copy-child` 1-based): `simple-component-with-copy`, + `simple-component-with-labeled-copy`, `component-with-many-children` (E, F), + `nested-component-with-copy`, `cross-file-component-with-copy` (H: main in a linked library, copy + in the consuming file; primary `:file` = consuming, aux = library), and `empty-situation` (empty + file, no roles — the `:setup` for the sweep cases, whose first operation is `create-component`). +- `comp/nodes.cljs` — the component OPERATIONS. General edit/structure ops: + `change-property [target property value]` (`:fills`/`:opacity`) with its dual `has-property-of` + (`IPropertyCheck`); `change-attr`/`has-attr?` are aliases. `add-child`/`remove-child`/`move-child` + (with `IStructuralCheck`). `sync-from-library` (H: `generate-sync-file-changes`, libraries = + primary + aux). `undo` (I; frontend `dwu/undo`). Plus the scenario building blocks below. +- `interpreter.cljs` (ns `frontend-tests.composable-tests.interpreter`) — runs a case against the + real frontend (see "Interpreter"). +- `comp/sync_test.cljs` (ns `frontend-tests.composable-tests.comp.sync-test`) — the cases; + registered in `frontend_tests/runner.cljs`. + +## Scenario object model (behind the sweep cases) +Scenario ops track one or more named component LINEAGES as OBJECTS under `:vars :components` (keyed +by name, e.g. "main"). Grouping a lineage's fields into one object lets several lineages coexist +(a swap targets a DIFFERENT component) and makes each op "read object `name`, update, write back". + +A lineage object has: +- `:main-component-id` — the component the next instantiate/nest uses (advances to the new OUTER + component per `make-nested-component`). +- `:remote-head`/`:remote-rect` — the FIXED deepest origin (the original component everything is + derived from). For a plain lineage this is never re-pointed; a variant nesting DOES re-point it + (see below). +- `:main-head`/`:main-rect` — the current outer main (advances per nesting). +- `:nesting-count`; `:copies`, `:copy-head`/`:copy-rect` (from `instantiate-copy`). +- `:nesting-data` — vector, one entry per level i: `{:main-head, :nested-head, :nested-rect, + :nested-head-parent}`. + - `:nested-head` is the DEEPEST instance at level i — the descendant of the level's copy head + that corresponds to `:remote-head`, found by descending the `:shape-ref` chain (at level 0 the + inner copy itself; deeper, the corresponding shape nested within the outer wrapper). This is THE + SWAP / SWITCH TARGET; it carries a `:component-id`. + - `:nested-head-parent` is the SWAP-STABLE anchor: a swap/switch replaces the head in place but + keeps its parent, so assertions re-resolve parent → current head → rect. + +Accessors / targets (in nodes): `lineage-component-id`, `lineage-rect`, `lineage-copy-rect`, +`lineage-nesting`, `level-rect`/`level-rect-of` (level i's CURRENT rect via the parent anchor); +target-fns `remote-rect-of`/`main-rect-of`/`copy-rect-of` and `nested-head-of` (return a +`(situation -> id)` for use as an operation target). "Corresponds to" across layers follows the +`:shape-ref` CHAIN, matching on chain MEMBERSHIP not terminus (a copy rect refs its near-main, +which carries a further `:shape-ref`, so the terminus over-walks). Single-file setups, so the chain +resolves in the local page objects. + +Scenario operations (each takes a lineage `name`): +- `create-component [name color]` — a component (frame + rect child of `color`); remote == main, + count 0. +- `make-nested-component [name]` — wrap `name`'s component in a NEW OUTER component whose main + contains a COPY of it inside a board (add-frame → instantiate inside → make-component); the OUTER + becomes `:main-component-id`; advance `:main-*`; append a `:nesting-data` entry; bump count. + ITERABLE: `×N` = board-within-board nesting with one rect at the bottom. Each level's + `:nested-head` is the deepest instance there, so swapping/switching it propagates (via the + watcher) outward to copies of it in OUTER levels. +- `instantiate-copy [name]` — instantiate `name`'s current component; track `:copy-head` and the + rect corresponding to its main rect as `:copy-rect`. +- `reset-copy-instance [name]` — reset overrides on `:copy-head` (production + `generate-reset-component`, `:validate? false` — a file-op on the frontend too: the real reset + event reads browser globals and cannot run headless). +- `swap-component [name level target & {:keys [keep-touched?]}]` — swap level `level`'s + `:nested-head` for lineage `target`'s component, via production `generate-component-swap`. + Frontend = the REAL `dwl/component-swap` event, so the watcher AUTOMATICALLY propagates the swap + to copies (incl. deeper levels). A swap replaces the head in place: Penpot keeps the head id, + rewrites it to the new component, stamps a `:swap-slot-` touched group. `keep-touched?` + default false (discards overrides); true is the variant-switch flavour. +- Shared nesting helper `nest-in-new-outer-component [situation name op seek-rect-id seek-head-id + instantiate-inner-fn]` — the contain-outward mechanism behind BOTH nesting ops. Adds the outer + frame, calls `instantiate-inner-fn` to place the inner instance, makes the outer a component, + then computes this level's `:nested-rect`/`:nested-head` as the IMAGES (inside the new inner copy) + of `seek-rect-id`/`seek-head-id` — the FIXED deepest origin — and does the bookkeeping. A flavour + supplies only the two origin ids + the instantiate fn. Seeking the FIXED origin (not the advancing + `:main-*`) is what makes `:nested-head` land on the deepest instance at every level. + `self-or-descendant-corresponding-to` is the chain-descent that also matches the head itself + (needed at level 0, where the inner copy head IS the origin's image). + +## Variant operations +A variant switch IS a keep-touched swap whose target is resolved by a property VALUE (the +production `variants-switch`/`variant-switch` reduces to `component-swap … keep-touched? true`), so +it routes through the SAME `generate-component-swap` and the watcher auto-propagates it across +nesting levels exactly like a swap. +- `make-variant-container [name members]` (sync-op) — build a variant SET synchronously, mirroring + the test-helpers' `add-variant` idiom: a container frame (`:is-variant-container`), each `members` + entry `[value color]` becoming a member component whose ROOT is a child of the container carrying + the shared `:variant-id`/`:variant-name`, then `update-component` stamps `:variant-id` + + `:variant-properties [{:name "Property 1" :value value}]` on the component. Read the container id + via `(thi/id container-label)` only AFTER adding the container frame (`thi/id` returns nil before + the shape exists). Records the set in `:vars` (`variant-set`/`variant-member`/ + `variant-member-component-id` read it back). +- `make-nested-component-with-variant [name set-name value]` (sync-op) — nest a chosen member via + the shared nesting helper, AND re-point the lineage's `:remote-head`/`:remote-rect` to that + member's root/rect: nesting a variant makes the member the new deepest origin, so subsequent plain + `make-nested-component` descends to the variant's image (its `:nested-head`) at every level. +- `switch-variant [target value]` (frontend event) — switch the variant copy head bound to `target` + to the sibling member with property value `value`, via the REAL `dwv/variants-switch` event (which + DISCOVERS the sibling in the container via `find-variant-components`). `target` uses the standard + resolution (role | label | fn), so the op knows nothing about nesting; cases supply + `nested-head-of name i`. + +## Interpreter (interpreter.cljs) +Drives the real app: +- `op->events [op situation]` maps each event-dispatching operation to its real workspace event(s): + `ChangeProperty`→`dwsh/update-shapes` (the SHARED `set-property`, target via `target-shape-id`); + `MoveChild`→`dwsh/relocate-shapes`; `RemoveChild`→`dwsh/delete-shapes`; `AddChild`→`dwsh/add-shape`; + `SyncFromLibrary`→`dwl/sync-file`; `Undo`→`dwu/undo`; `SwapComponent`→`dwl/component-swap`; + `SwitchVariant`→`dwv/variants-switch {:shapes [head] :pos 0 :val value}`. All real events, so the + watcher auto-propagates. +- `sync-op?` ops (`MakeNestedComponent`, `CreateComponent`, `InstantiateCopy`, `ResetCopyInstance`, + `MakeVariantContainer`, `MakeNestedComponentWithVariant`, `Skip`, `Test`) are NOT dispatched as + events: `run-sync-op` runs the shared `apply-to` against a situation whose `:file` is the live + store file, then writes back synchronously. The property under test is still exercised by the + subsequent real-event ops + the watcher. +- It installs the situation's files into the global `st/state` store (primary as current; aux files + tagged `:library-of` the current file so the library-sync machinery treats them as linked), starts + the real `watch-component-changes` and the harness `watch-undo-stack`, then folds the operations: + dispatch events → await settlement → re-read the current file into `:file` → record. Re-reading + `:file` each step is why the shared role accessors keep working. +- `watch-undo-stack` mirrors the production undo-append subscription from `initialize-workspace` + (which the harness does not run); without it `dwu/undo` has an empty stack. +- Settlement (`await-settle`): subscribe to the commit stream, resolve on the first 60ms idle gap + after a commit (captures the edit commit and the watcher's follow-up sync commit), 2000ms timeout. + Debounce-based, not a deterministic per-op stopper. After settling, `op-grace-ms` adds a per-op + grace wait (currently only `SyncFromLibrary`, ~3.2s — see the Running note). +- Thumbnail rendering is stubbed for this suite (`install-thumbnail-noop!` no-ops + `dwth/update-thumbnail`): the propagation watcher schedules thumbnail renders that reach `window`, + absent headless. +- `check [done case-map asserter]` enumerates, runs each variant via the async fold, wraps the + asserter in `describe-applied`, and calls `done`. Per-variant isolation = id-map reset + global + state re-install (the global `st/state` is a shared `defonce`). +- STORE-SWAP IMMUNITY (`original-store`/`restore-global-store!`): many plugins-suite namespaces + `set!` `st/state`/`st/stream` to isolated stores and never restore them. The `app.main.refs` + lenses (through which the watcher observes commits) are okulary lenses bound to the ORIGINAL + atom instance at load time — after such a swap, events commit to a store the watcher cannot see + and ALL propagation dies silently (assertions see base/unsynced state; no error). The interpreter + therefore captures `st/state`/`st/stream` at namespace-LOAD time (before any test runs) and + re-`set!`s them at the start of every variant, making the harness immune to run order. Diagnosed + by bisecting the runner's deterministic execution order (it is NOT the `test-namespaces` vector + order: `t/test-vars-block` groups vars by namespace, and the group-by hash order decides — same + order locally and in CI). + +## Cases +Asserters are inline; no `doseq`, no count assertions. +- **B** — an override on the copy survives a later main change (override present + `:touched` + contains the fill group + `:shape-ref` present). +- **C** — attribute sweep via `one-of {fills, opacity}`: assert `(has-attr? (get-choice …) copy)` + per enumerated variant. +- **D** — `add-child` to the main gives the copy a ref-integral child (`is-main-of?` + + `parent-of?` + untouched). +- **E** — `remove-child` of the MIDDLE of three: survivors keep order `[child1, child3]`, + `:shape-ref` intact, untouched (middle removal is where index maintenance is tested). +- **F** — `move-child` of child1 to index 2: copy mirrors `[child2, child1, child3]`, identity + preserved. +- **H** — locality (cross-file): main in a linked library, copy in the consuming (current) file, + library main diverged. The in-file watcher does not cross a library boundary; the cross-file + mechanism is the library-update action (`sync-from-library` → `sync-file file-id library-id`). + Setup order matters: instantiate the copy first (captures the old value), diverge the library main + after. +- **I** — undo: an edit then `undo`; copy and main return to baseline, copy untouched. A single + `dwu/undo` reverses the whole logical action — the edit AND its auto-propagation — because the two + commits share an undo-group. +- **K** — SYNC-SCENARIO SWEEP (the flagship). On `empty-situation`: `create-component` → two + `(optional make-nested-component)` (depths 0/1/2) → `instantiate-copy` → three `(optional change-*)` + over remote/main/copy → INLINE checkpoints: (1) override-precedence at the copy (copy wins, else + main, else remote — branch via `applied?`), (2) force a copy override and confirm it wins, (3) + after `reset-copy-instance`, copy reverts to main's value if main changed, else remote's. No + explicit propagate (the watcher auto-propagates at all depths, incl. chained remote→deep-copy). +- **L** — SWAP SWEEP. On `empty-situation`: `create-component` (base) + one swap-target lineage per + level → three `make-nested-component` → three `(optional (swap-component "main" i target_i))` → + one `Test` asserting each level's colour. A swap at level i auto-propagates to level i and every + OUTER level until a higher swap overrides; colour at level i = applied swap at highest j<=i, else + base. +- **M** — VARIANT-SWITCH SWEEP (case L with a variant switch instead of the plain swap, driving the + REAL variant-switch machinery). On `empty-situation`: `create-component` (base lineage "main") + + `make-variant-container` (4 peer members `v0..v3`) → ONE `make-nested-component-with-variant + "main" "vset" "v0"` (introduce the variant innermost) + two plain `make-nested-component` + (progressive wraps, so each outer level CONTAINS the one below) → three + `(optional (switch-variant (nested-head-of "main" i) v_{i+1}))` → one `Test` with case L's exact + precedence asserter. Because the single variant instance has a switchable `:nested-head` at EVERY + level and the levels are progressively nested, a switch at level i propagates outward like a swap. + NOTE on structure: ONE variant + plain wraps is required for cross-level propagation (the levels + nest WITHIN each other). Three independent `make-nested-component-with-variant` would nest SIBLING + variants (none a descendant of another), so switches would not propagate between them — the right + construction for a different test (one asserting switches DON'T cross unrelated instances). + +Running: `cd frontend && pnpm run build:test` then `node target/tests/test.js --focus +frontend-tests.composable-tests.comp.sync-test`. To run one case, use var-level focus, e.g. +`…/case-m-variant-switch-scenarios`. NOTE: the production `sync-file` event (case H) additionally +schedules a 3s-delayed `update-file-library-sync-status` RPC, which fails headless (no backend; a +swallowed URL-parse trace is benign). The interpreter absorbs it: `op-grace-ms` makes the run wait +~3.2s after a `SyncFromLibrary` settles, so the failure lands inside case H instead of leaking into +(and potentially destabilising) whichever test runs next. + +## Frontend fidelity — read before extending +The frontend runs the REAL production logic from the dispatched event onward, so observed semantics +are genuine. But it drives a MINIMALLY-ASSEMBLED app: it installs a file into the global store and +starts only the watchers known to be needed. The real app assembles its workspace via +`initialize-workspace`, which wires many subscriptions; the harness reproduces only some. + +The risk is SILENT UNDER-WIRING — a behaviour that works in the real app can be silently absent in +the harness with no error (e.g. the undo stack is empty unless `watch-undo-stack` is started). +Therefore: when adding a case needing app behaviour beyond a raw edit (undo, persistence, selection, +layout, thumbnails, library auto-detection), first check whether that behaviour lives in an +`initialize-workspace` subscription the harness has not wired — and verify by PROBING store state, +not by trusting a green assertion. The harness hand-wires two stand-ins (`install-file-event`, +`watch-undo-stack`); track them for drift. A durable fix would be to drive the real +`initialize-workspace` headlessly (not done — full init may pull in machinery that doesn't run +cleanly headless). + +## Other caveats +- Cross-namespace leaks land in this suite first because it (correctly) uses the real global + store: besides the store swap above, `frontend-tests.helpers.wasm/teardown-wasm-mocks!` used to + `set!` every WASM fn to nil when run against an empty snapshot (double teardown / async misuse of + `with-wasm-mocks*`), which a leaked debounced `resize-wasm-text` event then tripped over during + our cases (a "Store error: initialized? is not a function"). The teardown is now guarded + (no-op on empty snapshot). If a new inexplicable full-run-only failure appears here, suspect + leaked global state from a preceding namespace before suspecting the framework. +- INLINE `Test` exceptions on the frontend are UNCAUGHT (they run during the async fold, not under + `check`'s try): a throwing checkpoint crashes the whole runner rather than failing one test. +- A `RecordedChoice` wrapping a `Sequence` (i.e. `(optional (in-sequence […]))`) is NOT flattened by + `sequence-ops`, so `op->events` chokes on the `Sequence`. Use independent optionals instead (as + case K does with two `(optional make-nested-component)`), or have the interpreter recurse into a + choice's composite alternative. +- The Serena symbol index / clj-kondo cache for `nodes.cljs` can go STALE and report PHANTOM symbols + or spurious "unresolved symbol" errors against code that compiles — TRUST THE BUILD (a real + `pnpm run build:test`), not the lint or the symbol overview, for this file. +- Label-after-the-fact resolution: `add-child`'s `added-shape` resolves `:new-label` via `thi/id`, + relying on the global label map still reflecting that run's setup — unsound if a structural node + is swept via `one-of`. Fix when needed by capturing the created shape's id at apply-time (as roles + already do). + +## Substrate +`mem:common/test-setup`, `mem:common/component-data-model`, `mem:common/component-swap-pipeline`, +`mem:frontend/testing`. diff --git a/frontend/test/frontend_tests/composable_tests/comp/nodes.cljs b/frontend/test/frontend_tests/composable_tests/comp/nodes.cljs new file mode 100644 index 0000000000..61c91d62c8 --- /dev/null +++ b/frontend/test/frontend_tests/composable_tests/comp/nodes.cljs @@ -0,0 +1,1020 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns frontend-tests.composable-tests.comp.nodes + "Component-specific operation nodes for the test model. + + These are the `IOperation` implementations whose subject is Penpot component + behaviour: they wrap component/shape operations and drive the real production + change pipeline. This namespace sits behind the `comp` boundary precisely + because it is about components; the generic engine in + `frontend-tests.composable-tests.core` has no domain terms. See + `mem:frontend/composable-component-tests`. + + Nodes deliberately call the production change pipeline directly + (`cls/generate-update-shapes` + `thf/apply-changes`, + `cll/generate-sync-file-changes` + `thf/apply-changes`) in the same way the + existing `app.common.test-helpers.compositions` helpers do. + + Each node, on apply, records a self-description into the situation's applied-log + so conditions (and later undo) can read back what it did, keeping the + operation the single source of truth for what should hold." + (:require + [app.common.data :as d] + [app.common.files.changes-builder :as pcb] + [app.common.files.helpers :as cfh] + [app.common.logic.libraries :as cll] + [app.common.logic.shapes :as cls] + [app.common.logic.variants :as clv] + [app.common.test-helpers.components :as thc] + [app.common.test-helpers.compositions :as tho] + [app.common.test-helpers.files :as thf] + [app.common.test-helpers.ids-map :as thi] + [app.common.test-helpers.shapes :as ths] + [app.common.types.container :as ctn] + [frontend-tests.composable-tests.core :as tm])) + +;; --------------------------------------------------------------------------- +;; Properties — an OPEN, extensible vocabulary of "what about a shape can change" +;; +;; A property is named by a keyword (`:fills`, `:opacity`, … extensible to +;; `:text`). Two pure functions know how to WRITE a property onto a shape (the +;; edit) and how to READ its comparable value back (the check). `change-property` +;; (the edit operation) uses `set-property`; `has-property-of` (the inspection) +;; uses `read-property` — so the change and its check stay duals, and adding a new +;; property kind is one clause in each `case`. (`change-attr`/`has-attr?` remain as +;; aliases for the common `:fills`/`:opacity` use.) +;; --------------------------------------------------------------------------- + +(defn set-property + "Write `property` = `value` onto `shape`, returning the updated shape. The edit + half of a property; extend the `case` to support more properties. Public so the + frontend interpreter applies the IDENTICAL edit the common node does." + [shape property value] + (case property + :fills (assoc shape :fills (ths/sample-fills-color :fill-color value)) + :opacity (assoc shape :opacity value) + (throw (ex-info (str "set-property: unsupported property " (pr-str property) + " (supported: :fills, :opacity)") + {:property property})))) + +(defn- read-property + "Read the comparable value of `property` from `shape`. The check half of a + property; extend the `case` to support more properties." + [shape property] + (case property + :fills (-> shape :fills first :fill-color) + :opacity (:opacity shape) + (throw (ex-info (str "read-property: unsupported property " (pr-str property) + " (supported: :fills, :opacity)") + {:property property})))) + +(defrecord ChangeProperty [target property value] + tm/IOperation + (apply-to [this situation] + ;; Goes through the production change path, exactly like tho/update-color, + ;; then records under its own identity. + (let [the-file (tm/file situation) + ;; `target` may be a ROLE (resolved via the situation, so the edit + ;; FOLLOWS the role as state-building ops like make-nested-component re-point it) + ;; or a label; strict-presence throws if neither resolves. + shape-id (tm/target-shape-id situation target) + page (thf/current-page the-file) + changes (cls/generate-update-shapes + (pcb/empty-changes nil (:id page)) + #{shape-id} + (fn [shape] (set-property shape property value)) + (:objects page) + {}) + file' (thf/apply-changes the-file changes)] + (-> situation + (tm/with-file file') + (tm/record-application this {:target target :property property :value value}))))) + +(defn change-property + "Constructor for the property-change operation: change `property` of the shape + named by `target` (a role or a label) to `value`. Stamps a node identity so the + test can interrogate it (via `has-property-of`). The general form; `change-attr` + is the same thing for the common `:fills`/`:opacity` properties." + [target property value] + (tm/assign-id (->ChangeProperty target property value))) + +(def ^{:doc "Alias of `change-property` (the historical name for :fills/:opacity + changes). `[target attr value]`."} + change-attr change-property) + +(defprotocol IPropertyCheck + "Inspection capability of a property-changing operation: report on its OWN + effect, applied to a shape the caller supplies. Makes no judgment about which + shape — the test supplies that (e.g. `(role-shape s :copy-child-rect)`)." + (applied-property [node] "The property this node changed.") + (applied-value [node] "The value this node applied.") + (has-property-of [node shape] + "True if `shape` carries this node's changed property at this node's applied + value. The node reports against its own change; the test chooses the shape.")) + +(extend-type ChangeProperty + IPropertyCheck + (applied-property [node] (:property node)) + (applied-value [node] (:value node)) + (has-property-of [node shape] + (= (:value node) (read-property shape (:property node))))) + +;; Aliases for the historical `has-attr?` name (used by the earlier cases). +(def ^{:doc "Alias of `has-property-of`."} has-attr? has-property-of) +(def ^{:doc "Alias of `applied-property`."} applied-attr applied-property) + +;; =========================================================================== +;; Synchronisation-scenario building blocks +;; +;; A family of operations that build up a component/copy configuration STEP BY +;; STEP, tracking a small, explicit set of named things in the situation so that +;; later edits and assertions can refer to them regardless of how much nesting was +;; applied. The tracked things per lineage (see the "Component objects" block +;; below for the exact fields): +;; +;; - the REMOTE head/rect — the ORIGINAL instance and its rect (the fixed +;; deepest origin; never re-pointed by plain nesting), +;; - the MAIN head/rect — the CURRENT outer main and its rect (the shape an +;; edit-to-main targets; advances inward with each `make-nested-component`), +;; - the COPY head/rect — the copy produced by `instantiate-copy` and its rect +;; (the shape an edit-to-copy targets / assertions observe), +;; - the component id the next instantiate/nest uses, and the nesting count. +;; +;; "corresponds to" between layers is resolved by following the :shape-ref chain +;; (a copy shape refs the main shape it mirrors); within these single-file setups +;; the chain resolves in the local page objects, so a local walk suffices. +;; =========================================================================== + +(defn- ref-chain-ids + "The set of ids on `shape`'s :shape-ref chain within `objects`, INCLUDING the + shape's own id and every shape its :shape-ref transitively points at. So a copy + shape's chain contains the near-main it mirrors, that near-main's near-main, and + so on — letting us recognise the descendant that is the image of a given origin + shape regardless of how many layers sit between." + [objects shape] + (loop [s shape, acc #{}] + (let [acc (conj acc (:id s))] + (if-let [ref (:shape-ref s)] + (recur (get objects ref) acc) + acc)))) + +(defn- descendant-corresponding-to + "The id of the shape in `head-id`'s subtree that is the propagated image of + `target-id` — i.e. whose :shape-ref chain PASSES THROUGH `target-id`. Throws if + not found or ambiguous — a structural invariant of these setups." + [objects head-id target-id] + (let [descendants (cfh/get-children-ids objects head-id) + matches (filter (fn [id] + (contains? (ref-chain-ids objects (get objects id)) target-id)) + descendants)] + (case (count matches) + 1 (first matches) + 0 (throw (ex-info "descendant-corresponding-to: no descendant corresponds to target" + {:head head-id :target target-id})) + (throw (ex-info "descendant-corresponding-to: ambiguous correspondence" + {:head head-id :target target-id :matches matches}))))) + +(defn- self-or-descendant-corresponding-to + "Like `descendant-corresponding-to`, but considers `head-id` ITSELF as well as + its subtree. Needed for the nested HEAD: when the instance nested at a level is + directly the image of the origin instance (e.g. level 0, where the inner copy + head IS that image), the match is the head itself, not a descendant." + [objects head-id target-id] + (if (contains? (ref-chain-ids objects (get objects head-id)) target-id) + head-id + (descendant-corresponding-to objects head-id target-id))) + +;; =========================================================================== +;; Component objects — the situation tracks NAMED component lineages +;; +;; The sync/swap scenario operations track one or more COMPONENT LINEAGES, each an +;; addressable OBJECT under `:vars :components`, keyed by a name (e.g. "main"). This +;; replaces the earlier flat, single-lineage roles (:main-child-rect, …): grouping +;; one lineage's fields into one object (a) lets several lineages coexist — required +;; for swap, whose target is a *different* component — and (b) makes each operation +;; "read object `name`, update its fields, write it back". +;; +;; A component object has: +;; :main-component-id - the component to instantiate next for this lineage +;; (advances to the new OUTER component on make-nested-component) +;; :remote-head/:remote-rect - the fixed deepest origin (NEVER re-pointed) +;; :main-head/:main-rect - the current main (advances inward on make-nested-component) +;; :nesting-count +;; :nesting-data - vector, one entry per nesting level i, each: +;; {:main-head +;; :nested-head +;; :nested-rect +;; :nested-head-parent } +;; The PARENT is the swap-stable anchor: a swap replaces the head in place but +;; keeps its parent, so an assertion re-resolves parent -> current head -> rect. +;; +;; (Child shapes are addressed via the `*-rect` fields / `lineage-rect`; if other +;; child kinds are added later, they get parallel fields, not a restructure.) +;; =========================================================================== + +(defn- get-component-obj + "The component object named `name` from the situation (nil if absent)." + [situation name] + (get (tm/get-var situation :components {}) name)) + +(defn- put-component-obj + "Store/replace the component object named `name`." + [situation name obj] + (tm/set-var situation :components + (assoc (tm/get-var situation :components {}) name obj))) + +(defn- update-component-obj + "Apply `f` (obj -> obj) to the component object named `name`." + [situation name f] + (put-component-obj situation name (f (get-component-obj situation name)))) + +(defn lineage-component-id + "The component id the lineage `name` will instantiate next." + [situation name] + (:main-component-id (get-component-obj situation name))) + +(defn lineage-rect + "The id of lineage `name`'s current main rect (the edit-to-main target)." + [situation name] + (:main-rect (get-component-obj situation name))) + +(defn lineage-nesting + "The `nesting-data` entry for level `i` of lineage `name`." + [situation name i] + (get-in (get-component-obj situation name) [:nesting-data i])) + +;; Target helpers — return a (situation -> shape-id) fn for `change-property`'s +;; target (resolved at apply-time against the lineage object, so it follows the +;; current ids). `applied`-querying `Test`s read the same fields via the accessors +;; below. + +(defn remote-rect-of + "Target: lineage `name`'s fixed remote (deepest-origin) rect." + [name] + (fn [s] (:remote-rect (get-component-obj s name)))) + +(defn main-rect-of + "Target: lineage `name`'s current main rect." + [name] + (fn [s] (:main-rect (get-component-obj s name)))) + +(defn copy-rect-of + "Target: lineage `name`'s current copy rect (from the latest instantiate-copy)." + [name] + (fn [s] (:copy-rect (get-component-obj s name)))) + +(defn lineage-copy-rect + "The id of lineage `name`'s current copy rect (for assertions)." + [situation name] + (:copy-rect (get-component-obj situation name))) + +(defn level-rect + "The id of the rect currently at lineage `name`'s nesting level `level`, + re-resolved from the swap-stable :nested-head-parent: parent -> current + subinstance head -> its rect descendant. Robust to a swap having replaced the + head (and the rect) in place." + [situation name level] + (let [objects (:objects (thf/current-page (tm/file situation))) + nd (lineage-nesting situation name level) + parent (:nested-head-parent nd) + head (->> (cfh/get-immediate-children objects parent) + (filter :component-id) + first + :id) + ;; the rect is the (single) rect descendant under the head + rect (->> (cfh/get-children-ids objects head) + (map #(get objects %)) + (filter #(= :rect (:type %))) + first + :id)] + rect)) + +(defn level-rect-of + "Target/accessor fn: the rect currently at lineage `name`'s nesting level + `level` (see `level-rect`)." + [name level] + (fn [s] (level-rect s name level))) + +;; --------------------------------------------------------------------------- +;; create-component — the starting operation: a component with a rect child +;; --------------------------------------------------------------------------- + +(defrecord CreateComponent [name color] + tm/IOperation + (apply-to [this situation] + ;; fresh, name-scoped labels so several lineages don't clash + (let [head-label (keyword (str "sync-" name "-head")) + rect-label (keyword (str "sync-" name "-rect")) + comp-label (keyword (str "sync-" name "-component")) + file' (-> (tm/file situation) + (tho/add-simple-component comp-label head-label rect-label + :child-params + {:fills (ths/sample-fills-color + :fill-color color)})) + head-id (thi/id head-label) + rect-id (thi/id rect-label) + comp-id (thi/id comp-label)] + (-> situation + (tm/with-file file') + ;; create the lineage object: remote == main at creation (no nesting yet) + (put-component-obj name + {:main-component-id comp-id + :remote-head head-id :remote-rect rect-id + :main-head head-id :main-rect rect-id + :nesting-count 0 + :nesting-data []}) + (tm/record-application this {:component name :id comp-id}))))) + +(defn create-component + "Starting operation: create a component lineage named `name` (root frame + one + rect child of fill `color`) and track it as a component OBJECT. Sets + remote==main head+rect, :main-component-id, nesting-count 0. Begin a scenario + with this; create more lineages (e.g. swap targets) with further calls." + [name color] + (tm/assign-id (->CreateComponent name color))) + +;; --------------------------------------------------------------------------- +;; make-nested-component — wrap the tracked component in a NEW OUTER component +;; +;; ONE specific notion of nesting (there are several): a new ENCLOSING component +;; whose main CONTAINS a COPY of the lineage's current component (contain-outward), +;; and the OUTER component becomes the lineage's new :main-component-id. The inner +;; copy's rect that corresponds (via :shape-ref) to the lineage's :remote-rect +;; becomes the new :main-rect, so an edit-to-main now targets one level deeper +;; while :remote-rect stays the fixed origin. Iterable: apply twice for 2 layers. +;; This is the structural family of penpot#9304 (a subinstance head inside a copy; +;; that issue adds a variant inner component + an extra frame — separate axes). +;; --------------------------------------------------------------------------- + +(defn- nest-in-new-outer-component + "Shared nesting mechanism (contain-outward): add a fresh outer board, run + `instantiate-inner-fn` to place THE INNER INSTANCE inside it, turn the board + into a NEW OUTER component, then advance lineage `name`'s object (main -> + deeper rect, append a `nesting-data` entry with the swap-stable + :nested-head-parent, bump nesting-count) and record `op`. + + `instantiate-inner-fn` is `(file outer-frame-label inner-copy-label) -> file`: + it instantiates whatever is being nested (the lineage's own component, or a + chosen variant) into `outer-frame-label`, registering `inner-copy-label` as + the inner copy's root. + + `seek-rect-id` / `seek-head-id` are the ORIGIN rect and the ORIGIN instance head + whose IMAGES inside the new inner copy become this level's nested rect and nested + head — found by following the shape-ref chain. For nesting the lineage's own + component these are the lineage's :remote-rect / :remote-head; for nesting a + variant member they are THAT MEMBER's rect / root (the inner copy refs the member, + not the lineage). `nested-head` is thus the DEEPEST instance (the image of the + original component's instance), per spec — at level 0 it is the inner copy itself; + at deeper levels it is the corresponding shape nested within. Everything else is + identical across nesting flavours, so a new flavour supplies only these three." + [situation name op seek-rect-id seek-head-id instantiate-inner-fn] + (let [the-file (tm/file situation) + obj (get-component-obj situation name) + level (:nesting-count obj) + ;; level-scoped labels so repeated nestings of one lineage don't clash + outer-frame (keyword (str "sync-" name "-outer-" level)) + inner-copy (keyword (str "sync-" name "-innercopy-" level)) + outer-comp (keyword (str "sync-" name "-outercomp-" level)) + file' (-> the-file + (tho/add-frame outer-frame {:name "OuterFrame"}) + (instantiate-inner-fn outer-frame inner-copy) + (thc/make-component outer-comp outer-frame)) + objects (:objects (thf/current-page file')) + inner-copy-id (thi/id inner-copy) + ;; images, inside the new inner copy, of the origin rect and origin instance + new-main-rect (descendant-corresponding-to objects inner-copy-id seek-rect-id) + ;; nested-head = the DEEPEST instance (image of the original component's + ;; instance), per spec — the switchable subinstance. Its parent is the + ;; swap-stable anchor for re-resolving it after a swap/switch replaces it. + nested-head (self-or-descendant-corresponding-to objects inner-copy-id seek-head-id) + nested-parent (:parent-id (get objects nested-head)) + outer-id (thi/id outer-comp) + outer-head-id (thi/id outer-frame)] + (-> situation + (tm/with-file file') + (update-component-obj + name + (fn [o] + (-> o + (assoc :main-component-id outer-id + :main-head outer-head-id + :main-rect new-main-rect + :nesting-count (inc level)) + (update :nesting-data conj + {:main-head outer-head-id + :nested-head nested-head + :nested-rect new-main-rect + :nested-head-parent nested-parent})))) + (tm/record-application op {:component name :level level :outer outer-id})))) + +(defrecord MakeNestedComponent [name] + tm/IOperation + (apply-to [this situation] + ;; nest a COPY of the lineage's own current component. Seek the FIXED deepest + ;; origin (:remote-rect / :remote-head): every level's copy refs back through it, + ;; so its image identifies this level's nested rect and deepest instance. (Variant + ;; nesting re-points :remote-* to the variant member, keeping this uniform.) + (let [obj (get-component-obj situation name)] + (nest-in-new-outer-component + situation name this + (:remote-rect obj) + (:remote-head obj) + (fn [file outer-frame inner-copy] + (let [inner-label (thi/label (:main-component-id obj))] + (thc/instantiate-component file inner-label inner-copy + {:parent-label outer-frame}))))))) + +(defn make-nested-component + "Wrap lineage `name`'s component in a NEW OUTER component (containing a copy of + it) and make the OUTER component its next-to-instantiate; advance :main to the + deeper rect while :remote stays fixed; append a `nesting-data` entry (with the + swap-stable :nested-head-parent) and bump nesting-count. ONE notion of nesting + (contain-outward). Apply repeatedly to deepen." + [name] + (tm/assign-id (->MakeNestedComponent name))) + +;; --------------------------------------------------------------------------- +;; instantiate-copy — instantiate the lineage's current component, track the copy +;; --------------------------------------------------------------------------- + +(defrecord InstantiateCopy [name] + tm/IOperation + (apply-to [this situation] + (let [the-file (tm/file situation) + obj (get-component-obj situation name) + comp-id (:main-component-id obj) + comp-label (thi/label comp-id) + main-rect (:main-rect obj) + copy-head (keyword (str "sync-" name "-copyhead-" + (count (:copies obj)))) + file' (-> the-file + (thc/instantiate-component comp-label copy-head)) + objects (:objects (thf/current-page file')) + copy-id (thi/id copy-head) + ;; the rect inside the copy corresponding to the current main rect + copy-rect (descendant-corresponding-to objects copy-id main-rect)] + (-> situation + (tm/with-file file') + (update-component-obj + name + (fn [o] + (-> o + (assoc :copy-head copy-id :copy-rect copy-rect) + (update :copies (fnil conj []) {:copy-head copy-id :copy-rect copy-rect})))) + (tm/record-application this {:component name :copy copy-id}))))) + +(defn instantiate-copy + "Instantiate lineage `name`'s current component; track the copy's head and the + rect corresponding to its current main rect on the lineage object (as + :copy-head/:copy-rect, and appended to :copies). The copy rect is the shape + edits-to-copy target and assertions observe." + [name] + (tm/assign-id (->InstantiateCopy name))) + +;; --------------------------------------------------------------------------- +;; reset-copy-instance — reset overrides on the tracked copy instance +;; --------------------------------------------------------------------------- + +(defrecord ResetCopyInstance [name] + tm/IOperation + (apply-to [this situation] + ;; Production reset path (generate-reset-component), validation OFF — mirrors + ;; SyncFromLibrary. We call the generator directly rather than via + ;; tho/reset-overrides because that helper validates the file, which the + ;; assembled-context frontend store does not always satisfy; and it stays a + ;; SYNC-op (`apply-to` on the live store file) rather than an event-op because + ;; the real reset event transitively reads browser globals, so it cannot run + ;; headless. + (let [the-file (tm/file situation) + copy-id (:copy-head (get-component-obj situation name)) + page (thf/current-page the-file) + container (ctn/make-container page :page) + file-id (:id the-file) + changes (-> (pcb/empty-changes) + (cll/generate-reset-component + the-file {file-id the-file} container copy-id)) + file' (thf/apply-changes the-file changes :validate? false)] + (-> situation + (tm/with-file file') + (tm/record-application this {:component name :reset copy-id}))))) + +(defn reset-copy-instance + "Reset overrides on lineage `name`'s tracked copy instance (its :copy-head) — + discards the copy's own divergences so it reflects its main again." + [name] + (tm/assign-id (->ResetCopyInstance name))) + +;; --------------------------------------------------------------------------- +;; swap-component — replace a nested subinstance head with an instance of a +;; different component (the general "Swap component" action), in place. +;; +;; Targets lineage `name`'s nesting level `level` (its `nesting-data[level] +;; .nested-head`) and swaps it for lineage `target`'s component +;; (`:main-component-id`). Drives the production `generate-component-swap` +;; (validation off). The `apply-to` below is the pure realisation; the frontend +;; interpreter instead dispatches the real `dwl/component-swap` event, so the +;; watcher auto-propagates the swap. keep-touched? defaults +;; false (the general swap discards overrides; variant-switch would pass true). +;; +;; A swap REPLACES the head in place (Penpot keeps the head's id but rewrites it to +;; reference the new component and stamps a :swap-slot touched group). The level's +;; :nested-head-parent is unchanged, so assertions re-resolve parent -> current +;; head -> rect. +;; --------------------------------------------------------------------------- + +(defrecord SwapComponent [name level target keep-touched?] + tm/IOperation + (apply-to [this situation] + (let [the-file (tm/file situation) + page (thf/current-page the-file) + objects (:objects page) + nested-head (:nested-head (lineage-nesting situation name level)) + shape (get objects nested-head) + target-id (lineage-component-id situation target) + libraries {(:id the-file) the-file} + orig-shapes (when keep-touched? + (cfh/get-children-with-self objects nested-head)) + [new-shape _parents changes] + (cll/generate-component-swap (pcb/empty-changes) + objects shape (:data the-file) page libraries + target-id 0 nil {} (boolean keep-touched?)) + [changes _] (if keep-touched? + (clv/generate-keep-touched changes new-shape shape orig-shapes + page libraries (:data the-file)) + [changes nil]) + file' (thf/apply-changes the-file changes :validate? false)] + (-> situation + ;; record the swapped-in head id on the level (its parent is unchanged) + (tm/with-file file') + (update-component-obj + name + (fn [o] (assoc-in o [:nesting-data level :swapped-head] (:id new-shape)))) + (tm/record-application this {:component name :level level + :target target :new-head (:id new-shape)}))))) + +(defn swap-component + "Swap lineage `name`'s nesting level `level` for lineage `target`'s component + (the general Swap-component action). `keep-touched?` (default false) preserves + the swapped instance's overrides (true = the variant-switch flavour)." + [name level target & {:keys [keep-touched?] :or {keep-touched? false}}] + (tm/assign-id (->SwapComponent name level target keep-touched?))) + +;; =========================================================================== +;; VARIANT operations (case M) — the variant-switch flavour of the swap sweep. +;; +;; A VARIANT SET is N peer components grouped in a container, distinguished by a +;; selector PROPERTY (here a single property at pos 0). Instantiation selects a +;; member by its property VALUE; a later `switch-variant` re-selects within the +;; set. Under the hood a switch is a keep-touched swap whose target is resolved +;; by property value (see `app.main.data.workspace.variants/variant-switch`), so +;; it routes through the SAME `generate-component-swap` as `swap-component` and +;; the watcher auto-propagates it across nesting levels exactly like a swap. +;; +;; OP SPLIT: only the SWITCH is a real workspace event (`variant-switch` has no +;; pure generator to call directly), so `SwitchVariant` is an EVENT-op: its +;; `apply-to` throws, and the frontend interpreter realises it by dispatching the +;; event. The container build and the variant nesting are SYNC-ops (test-helper +;; assembly + the shared nesting helper), applied via `apply-to` against the live +;; store file; they record the variant-set in vars. Event-ops do NOT run +;; `apply-to` (only sync-ops do), but the switch needs no bookkeeping: the +;; asserter re-resolves heads via the swap-stable :nested-head-parent +;; (`nested-head-of`/`level-rect`), exactly as case L does for swaps. +;; +;; Member SELECTOR: `make-variant-container` assigns each member an EXPLICIT property +;; value we choose (the `value` in its [value color] specs). A member is addressed by +;; that value in `make-nested-component-with-variant` / `switch-variant`, resolved via +;; the recorded variant-set in vars. +;; =========================================================================== + +(def ^:private variant-property-name + "The single selector property's name (these tests use one property)." + "Property 1") + +(defn variant-set + "Read the variant-set record `set-name` from the situation's vars (written by + `make-variant-container`): {:variant-id, :container-label, :members [{:value + :component-label :component-id} ...]}." + [situation set-name] + (or (tm/get-var situation [::variant-set set-name]) + (throw (ex-info "variant-set: no such set (was make-variant-container applied?)" + {:set set-name})))) + +(defn variant-member + "The member record of set `set-name` whose selector value is `value` ({:value + :component-label :component-id :root-label :rect-label :rect-id}). Throws if no + unique member matches — a structural invariant." + [situation set-name value] + (let [members (:members (variant-set situation set-name)) + matches (filter #(= value (:value %)) members)] + (case (count matches) + 1 (first matches) + 0 (throw (ex-info "variant-member: no member has that value" + {:set set-name :value value + :available (mapv :value members)})) + (throw (ex-info "variant-member: ambiguous value" + {:set set-name :value value :count (count matches)}))))) + +(defn variant-member-component-label + "The component label of set `set-name`'s member whose selector value is `value`." + [situation set-name value] + (:component-label (variant-member situation set-name value))) + +(defn variant-member-component-id + "The component id of set `set-name`'s member whose selector value is `value`." + [situation set-name value] + (:component-id (variant-member situation set-name value))) + +;; --------------------------------------------------------------------------- +;; make-variant-container — build a variant SET synchronously +;; +;; On our branch the only user-facing combine is the async `combine-as-variants` +;; (behind `penpot.createVariantFromComponents`), whose settlement + positional, +;; non-chosen property values make it a poor fit — and case M tests the SWITCH, not +;; the combine. So we assemble the container the way the variant test-helpers do +;; (`add-variant`): a container frame (:is-variant-container) whose children are the +;; member component roots, each carrying the shared :variant-id and an EXPLICIT +;; selector value we choose. This is synchronous (a sync-op, like create-component), +;; produces exactly the structure `variant-switch`/`find-variant-components` +;; consume, and lets us address members by a value of our choosing. +;; +;; `members` is a vector of [value color] — value = the selector value used by +;; `make-nested-component-with-variant` / `switch-variant`; color = the member's +;; rect fill (how the asserter tells members apart). The set is recorded in vars +;; under `name` (variant-id + per-member component labels/ids). +;; --------------------------------------------------------------------------- + +(defrecord MakeVariantContainer [name members] + tm/IOperation + (apply-to [this situation] + ;; Build the set exactly as the variant test-helpers' `add-variant` do (the + ;; proven idiom): a container frame (:is-variant-container), then each member's + ;; ROOT as a child carrying :variant-id + :variant-name, made into a component, + ;; then `update-component` stamps :variant-id + :variant-properties ON THE + ;; COMPONENT. (Routing this through add-simple-component's positional component + ;; params silently dropped :variant-id — hence the explicit two-step here.) + (let [container-label (keyword (str "sync-" name "-vcontainer")) + ;; create the container frame FIRST, THEN read its id (thi/id is a lookup + ;; that only resolves once the shape exists — reading it earlier yields nil). + base-file (-> (tm/file situation) + (ths/add-sample-shape container-label + :type :frame + :is-variant-container true)) + variant-id (thi/id container-label) + [file' member-recs] + (reduce + (fn [[file recs] [idx [value color]]] + (let [comp-label (keyword (str "sync-" name "-v" idx "-component")) + root-label (keyword (str "sync-" name "-v" idx "-root")) + rect-label (keyword (str "sync-" name "-v" idx "-rect")) + file2 (-> file + ;; member root as a child of the container, with variant id/name + ;; (mirrors add-variant's `add-sample-shape :type :frame ...`) + (ths/add-sample-shape root-label + :type :frame + :parent-label container-label + :variant-id variant-id + :variant-name value) + (ths/add-sample-shape rect-label + :parent-label root-label + :fills (ths/sample-fills-color :fill-color color)) + ;; make it a component, then stamp variant metadata ON THE COMPONENT + (thc/make-component comp-label root-label) + (thc/update-component + comp-label + {:variant-id variant-id + :variant-properties [{:name variant-property-name :value value}]}))] + [file2 (conj recs {:value value + :component-label comp-label + :component-id (thi/id comp-label) + :root-label root-label + :rect-label rect-label + :rect-id (thi/id rect-label)})])) + [base-file []] + (map-indexed vector members))] + (-> situation + (tm/with-file file') + (tm/set-var [::variant-set name] + {:variant-id variant-id + :container-label container-label + :members member-recs}) + (tm/record-application this {:variant-set name :variant-id variant-id + :count (count members)}))))) + +(defn make-variant-container + "Build a variant SET named `name` synchronously (test-helper assembly, like the + variant test-helpers' `add-variant`): a container holding N member components, + each with the shared variant-id and an EXPLICIT selector value. `members` is a + vector of [value color]. Members are addressed by `value` in + `make-nested-component-with-variant` / `switch-variant`; `color` distinguishes + them for the asserter." + [name members] + (tm/assign-id (->MakeVariantContainer name members))) + +;; --------------------------------------------------------------------------- +;; make-nested-component-with-variant — nest a chosen VARIANT, deeply +;; +;; Same contain-outward nesting as `make-nested-component` (shares +;; `nest-in-new-outer-component`), except the inner instance is a SPECIFIC variant +;; member (selected by property `value`) rather than the lineage's own component. +;; So every nesting level introduces a variant subinstance head — the switch +;; target. Sync-op (test-helper instantiation), like `make-nested-component`. +;; --------------------------------------------------------------------------- + +(defrecord MakeNestedComponentWithVariant [name set-name value] + tm/IOperation + (apply-to [this situation] + (let [member (variant-member situation set-name value) + root-id (thi/id (:root-label member)) + rect-id (:rect-id member)] + (-> situation + (nest-in-new-outer-component + name this + rect-id ; origin rect = the variant member's own rect + root-id ; origin head = the variant member's own root + (fn [file outer-frame inner-copy] + (thc/instantiate-component file (:component-label member) inner-copy + {:parent-label outer-frame}))) + ;; nesting a variant makes the MEMBER the new deepest origin: re-point the + ;; lineage's fixed origin so subsequent plain make-nested-component descends to the + ;; variant's image (its nested-head) at every level. + (update-component-obj name #(assoc % :remote-head root-id :remote-rect rect-id)))))) + +(defn make-nested-component-with-variant + "Nest (contain-outward, like `make-nested-component`) a SPECIFIC variant member of set + `set-name` — the member whose selector value is `value` — under lineage `name`, + advancing `name`'s nesting. Every level so nested gets a variant subinstance + head that `switch-variant` can later re-select. Apply repeatedly to deepen." + [name set-name value] + (tm/assign-id (->MakeNestedComponentWithVariant name set-name value))) + +;; --------------------------------------------------------------------------- +;; switch-variant — switch a variant copy head to a sibling member +;; +;; The variant-switch action: switch the variant copy head bound to `target` to the +;; sibling member whose selector property (pos 0) has `value`. FRONTEND-only: +;; dispatches the production `variants-switch`, which DISCOVERS the sibling by value +;; within the variant container and routes through `component-swap` with +;; keep-touched? true — so the watcher auto-propagates it across nesting levels +;; exactly like case L's swap. A switch REPLACES the head in place; the head's +;; :parent is unchanged, so assertions re-resolve parent -> current head -> rect. +;; +;; `target` is the head to switch, resolved by the standard `target-shape-id` (role +;; | label | (situation -> id) fn, e.g. `nested-head-of` for the stored nested head +;; at a level — exactly the head `swap-component` targets). So the op knows NOTHING +;; about nesting. +;; --------------------------------------------------------------------------- + +(defrecord SwitchVariant [target value] + tm/IOperation + (apply-to [_ _] + (throw (ex-info (str "switch-variant is an EVENT-op with no pure `apply-to` realisation: " + "it is the real `variants-switch` workspace event (which discovers the " + "sibling via the variant container), dispatched by the frontend " + "interpreter. See the VARIANT operations note above.") + {:type ::switch-variant-is-event-op})))) + +(defn switch-variant + "Switch the variant copy head bound to `target` to the sibling member whose + selector property (pos 0) has value `value`, via the real `variants-switch` + machinery (which discovers the sibling within the container). Propagates across + nesting exactly like case L's swap. `target` is resolved like any operation target + (role | label | (situation -> id) fn, e.g. `nested-head-of`), so the op is + structure-agnostic. FRONTEND-only." + [target value] + (tm/assign-id (->SwitchVariant target value))) + +;; nested-head-of — a (situation -> id) target fn for the nested head at a level, +;; supplied to `switch-variant` so the operation needs no nesting knowledge. +(defn nested-head-of + "Target fn: the subinstance head introduced at lineage `name`'s nesting level `i` + — the `:nested-head` stored in nesting-data for that level (exactly the head + `swap-component` targets). This is the variant instance to switch. For + `switch-variant`'s `target`." + [name i] + (fn [s] (:nested-head (lineage-nesting s name i)))) + + +;; --------------------------------------------------------------------------- +;; sync-from-library — pull a linked library's changes into the consuming file +;; +;; LOCALITY axis (case H): the main lives in a SEPARATE library file and the copy +;; in the consuming (current) file. Propagation here crosses a FILE boundary and +;; is NOT the in-file component watcher — on the real frontend it is the library +;; UPDATE action (the user accepts "library updated"), realised as +;; `sync-file file-id library-id`. This node models that action. +;; +;; The situation carries the consuming file as its primary `:file` and the library +;; as an AUXILIARY file (see `tm/with-aux-files`). The pure `apply-to` realisation +;; below builds the libraries map from BOTH and runs `generate-sync-file-changes` +;; for the whole library (asset-id nil), mirroring `test-sync-when-changing- +;; lower-remote`. The frontend interpreter instead dispatches the real +;; `sync-file` event (see its `op->events`). +;; --------------------------------------------------------------------------- + +(defrecord SyncFromLibrary [] + tm/IOperation + (apply-to [this situation] + (let [the-file (tm/file situation) + file-id (:id the-file) + aux (tm/aux-files situation) + library-id (first (keys aux)) + libraries (assoc aux file-id the-file) + changes (-> (pcb/empty-changes) + (cll/generate-sync-file-changes + nil + :components + file-id + nil ; whole library (no single asset-id) + library-id + libraries + file-id)) + file' (thf/apply-changes the-file changes :validate? false)] + (-> situation + (tm/with-file file') + (tm/record-application this {:library-id library-id}))))) + +(defn sync-from-library + "Constructor for the cross-file library-sync node (case H). Takes no parameters; + the situation supplies the consuming file (primary) and the library (auxiliary)." + [] + (tm/assign-id (->SyncFromLibrary))) + + +;; --------------------------------------------------------------------------- +;; undo — reverse the immediately preceding operation(s) +;; +;; Undo is "just another operation node": the APP owns reversal; this node does +;; not snapshot-and-compare. It is an EVENT-op: the frontend interpreter +;; dispatches the real `dwu/undo` event, which pops the workspace undo stack +;; (maintained automatically by the prior operations' commits) and applies the +;; inverse changes. "Test undo everywhere" = append this node after any case; the +;; post-undo assertion is an ordinary condition about the resulting state. +;; +;; A pure `apply-to` realisation is NOT built: it would require every node to +;; stash its produced change value (the engine `:undo-changes`) into its record +;; so this node could apply the inverse — a retrofit across all nodes that no +;; case needs. It therefore throws loudly rather than pretending. +;; --------------------------------------------------------------------------- + +(defrecord Undo [] + tm/IOperation + (apply-to [_ _] + (throw (ex-info (str "Undo is an EVENT-op with no pure `apply-to` realisation (change " + "values are not stashed per-node). It is realised by the frontend " + "interpreter via the real undo event.") + {:type ::undo-is-event-op})))) + +(defn undo + "Constructor for the undo node (case I). Takes no parameters; on the frontend it + dispatches the real undo, reversing the immediately preceding operation(s)." + [] + (tm/assign-id (->Undo))) + + +;; --------------------------------------------------------------------------- +;; add-child — add a new shape into a (main) component, structurally +;; +;; This is STRUCTURAL modification (changes the tree shape), as opposed to +;; change-attr (attribute modification). It mirrors the established +;; comp-sync-test "add shape" pattern: create a free shape on the page, then +;; relocate it INTO the target parent via the production `generate-relocate` +;; path. Propagation then materializes a corresponding child in copies. +;; +;; `parent` is the binding name of the shape to add the new child under (e.g. +;; :main-root). `new-label` is the label assigned to the created shape, so a +;; condition can find the corresponding copy child by what was recorded. +;; --------------------------------------------------------------------------- + +(defrecord AddChild [parent new-label shape-params] + tm/IOperation + (apply-to [this situation] + (let [the-file (tm/file situation) + ;; strict-presence on the parent (it must exist before we add under it) + parent-id (tm/resolve-shape-id situation parent) + ;; 1) create the free shape on the page (registers `new-label`) + file-1 (ths/add-sample-shape the-file new-label (or shape-params {})) + page (thf/current-page file-1) + new-id (thi/id new-label) + ;; 2) relocate it into the parent through the production change path + changes (cls/generate-relocate + (-> (pcb/empty-changes nil) + (pcb/with-page-id (:id page)) + (pcb/with-objects (:objects page))) + parent-id ; parent-id + 0 ; to-index + #{new-id}) ; ids to move + file' (thf/apply-changes file-1 changes)] + (-> situation + (tm/with-file file') + (tm/record-application this {:parent parent :new-label new-label}))))) + +(defn add-child + "Constructor for the structural add-child node: create a new shape (labeled + `new-label`) and relocate it under the shape bound to `parent`. Stamps a node + identity so the test can interrogate it." + [parent new-label & {:as shape-params}] + (tm/assign-id (->AddChild parent new-label shape-params))) + + +;; --------------------------------------------------------------------------- +;; remove-child — delete a shape from a (main) component, structurally +;; +;; Subtractive structural modification (twin of add-child). Mirrors the +;; established comp-sync-test "delete shape" pattern: `generate-delete-shapes` +;; on the named shape in the main. Propagation then removes the corresponding +;; child from clean copies. (Domain note from comp-sync-test: deleting from a +;; COPY would only hide; here we delete from the MAIN and propagate the removal.) +;; +;; `target` is the binding name (label) of the shape to remove from the main. +;; --------------------------------------------------------------------------- + +(defrecord RemoveChild [target] + tm/IOperation + (apply-to [this situation] + (let [the-file (tm/file situation) + ;; strict-presence: the target must exist before removal + shape-id (tm/resolve-shape-id situation target) + page (thf/current-page the-file) + [_all-parents changes] + (cls/generate-delete-shapes (pcb/empty-changes) + the-file + page + (:objects page) + #{shape-id} + {:components-v2 true}) + file' (thf/apply-changes the-file changes)] + (-> situation + (tm/with-file file') + (tm/record-application this {:target target}))))) + +(defn remove-child + "Constructor for the structural remove-child node: delete the shape bound to + `target` from the main. Stamps a node identity." + [target] + (tm/assign-id (->RemoveChild target))) + + +;; --------------------------------------------------------------------------- +;; move-child — reorder an existing shape within a (main) component +;; +;; Structural modification where nothing is created or destroyed; only ORDER +;; changes, and that order should propagate to clean copies while :shape-ref +;; identity stays decoupled from position. Mirrors the established comp-sync-test +;; "move shape" pattern: `generate-relocate` of an EXISTING child to a new index +;; under the same parent. +;; +;; `target` is the binding name (label) of the existing main child to move; +;; `to-index` is its destination index under `parent`. +;; --------------------------------------------------------------------------- + +(defrecord MoveChild [target parent to-index] + tm/IOperation + (apply-to [this situation] + (let [the-file (tm/file situation) + shape-id (tm/resolve-shape-id situation target) + parent-id (tm/resolve-shape-id situation parent) + page (thf/current-page the-file) + changes (cls/generate-relocate + (-> (pcb/empty-changes nil) + (pcb/with-page-id (:id page)) + (pcb/with-objects (:objects page))) + parent-id + to-index + #{shape-id}) + file' (thf/apply-changes the-file changes)] + (-> situation + (tm/with-file file') + (tm/record-application this {:target target :parent parent :to-index to-index}))))) + +(defn move-child + "Constructor for the structural move-child node: relocate the existing shape + bound to `target` to `to-index` under the shape bound to `parent`. Stamps a + node identity." + [target parent to-index] + (tm/assign-id (->MoveChild target parent to-index))) + + +(defprotocol IStructuralCheck + "Inspection capability of a structural node: retrieve the shapes involved in its + own effect, so the test can state ref-integrity / placement assertions itself." + (added-shape [node situation] + "The shape this node added to the main (live, from the current file).") + (materialized-instance-child [node situation container-shape] + "The child of `container-shape` that is the materialized instance of this + node's added shape (i.e. whose :shape-ref points at it), or nil. Retrieval + only — the test asserts the relationship.")) + +(extend-type AddChild + IStructuralCheck + (added-shape [node situation] + (ths/get-shape (tm/file situation) (:new-label node))) + (materialized-instance-child [node situation container-shape] + (let [the-file (tm/file situation) + added-id (thi/id (:new-label node))] + (->> (:shapes container-shape) + (map #(ths/get-shape-by-id the-file %)) + (d/seek #(= added-id (:shape-ref %))))))) diff --git a/frontend/test/frontend_tests/composable_tests/comp/setups.cljs b/frontend/test/frontend_tests/composable_tests/comp/setups.cljs new file mode 100644 index 0000000000..056da9c450 --- /dev/null +++ b/frontend/test/frontend_tests/composable_tests/comp/setups.cljs @@ -0,0 +1,203 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns frontend-tests.composable-tests.comp.setups + "Component-specific setups for the test model: named functions that build an + in-memory file value for a particular component configuration. They are the + subject-specific counterpart to the generic engine; a 'simple component with + a copy' is an entirely component-shaped configuration, so it lives behind the + `comp` boundary. See `mem:frontend/composable-component-tests`. + + Setups are kept as plain functions (not data): structure resists + declarativization and forcing it here has the worst cost/benefit. Each returns + a *situation* (file + ROLE bindings — meaningful named objects of the + configuration, e.g. :main-instance, :copy-instance), which the test retrieves + via the accessors below and asserts on directly. + + For these one-child-per-instance configurations the meaningful objects are the + child shapes that participate in propagation, so :main-instance is the main's + child and :copy-instance is the copy's child (this makes a test read like + `(has-attr? change-attr (copy-instance situation))`)." + (:require + [app.common.files.changes-builder :as pcb] + [app.common.logic.shapes :as cls] + [app.common.test-helpers.components :as thc] + [app.common.test-helpers.compositions :as tho] + [app.common.test-helpers.files :as thf] + [app.common.test-helpers.ids-map :as thi] + [app.common.test-helpers.shapes :as ths] + [frontend-tests.composable-tests.core :as tm])) + +(defn simple-component-with-copy + "A situation with a simple component (root + one child) and one clean copy. + Shape labels: :main-root :main-child :copy-root :copy-child. Roles: + :main-instance -> the main child, :copy-instance -> the copy child." + [] + (let [file (-> (thf/sample-file :file1) + (tho/add-simple-component-with-copy + :component1 :main-root :main-child :copy-root + :copy-root-params {:children-labels [:copy-child]}))] + (tm/make-situation file {:main-instance :main-child + :copy-instance :copy-child + :main-root :main-root + :copy-root :copy-root}))) + + +(defn empty-situation + "A situation with an empty file and NO roles — the starting point for scenarios + that build their own configuration via operations (e.g. `create-component`, + `make-nested-component`, `instantiate-copy`). Use as the `:setup` when the first + operation creates the component." + [] + (tm/make-situation (thf/sample-file :file1))) + +(defn simple-component-with-labeled-copy + "Like `simple-component-with-copy`, but the main child starts with a known fill + (so 'value stayed' is distinguishable from coincidence). Same labels and roles." + [] + (let [file (-> (thf/sample-file :file1) + (tho/add-simple-component-with-copy + :component1 :main-root :main-child :copy-root + :main-child-params {:fills (ths/sample-fills-color :fill-color "#abcdef")} + :copy-root-params {:children-labels [:copy-child]}))] + (tm/make-situation file {:main-instance :main-child + :copy-instance :copy-child + :main-root :main-root + :copy-root :copy-root}))) + +(defn main-instance + "The main child shape of the configuration (role :main-instance), live." + [situation] + (tm/role-shape situation :main-instance)) + +(defn copy-instance + "The copy child shape of the configuration (role :copy-instance), live." + [situation] + (tm/role-shape situation :copy-instance)) + +(defn main-root + "The main component root shape (role :main-root), live." + [situation] + (tm/role-shape situation :main-root)) + +(defn copy-root + "The copy root shape (role :copy-root), live." + [situation] + (tm/role-shape situation :copy-root)) + + +(defn component-with-many-children + "A situation with a component whose main has three children and one clean copy. + Shape labels: :main-root, :main-child1/2/3, :copy-root, :copy-child1/2/3. + Roles: :main-root, :copy-root, and :copy-child-1/2/3 -> the copy's children + (so a test can assert their post-operation order in the copy root)." + [] + (let [file (-> (thf/sample-file :file1) + (tho/add-component-with-many-children-and-copy + :component1 + :main-root + [:main-child1 :main-child2 :main-child3] + :copy-root + :copy-root-params {:children-labels [:copy-child1 :copy-child2 :copy-child3]}))] + (tm/make-situation file {:main-root :main-root + :copy-root :copy-root + :copy-child-1 :copy-child1 + :copy-child-2 :copy-child2 + :copy-child-3 :copy-child3}))) + +(defn copy-child + "The copy child shape for 1-based index `n` (role :copy-child-n), live. Lets a + test retrieve specific copy children to assert their order/identity." + [situation n] + (tm/role-shape situation (keyword (str "copy-child-" n)))) + + +(defn nested-component-with-copy + "A situation with a NESTED component configuration (depth axis): component2's + main contains a nested instance of component1 (`:main2-nested-head`); a clean + copy of component2 exists, so the copy contains a copy of that nested instance + whose child (`:copy2-child`) reaches the main through a :shape-ref CHAIN. + + This is the depth-1 analogue of the simple-with-copy setup: editing + `:main2-nested-head` (the nested instance inside component2's main) and + propagating component2 must reach `:copy2-child` — the same attribute- + propagation property as the flat case, one level deeper. (Editing the + INNERMOST :main1-child and propagating only :component1 would instead be a + CHAINED propagation across two component levels — a different property; not + this setup.) + + Shape labels from the helper: :main1-root/:main1-child, :main2-root, + :main2-nested-head, :copy2-root, and :copy2-child (the deep copy child, labeled + via the helper's children-labels). Roles: :main-instance -> :main2-nested-head, + :copy-instance -> :copy2-child, plus :main2-root / :copy-root for structure." + [] + (let [file (-> (thf/sample-file :file1) + (tho/add-nested-component-with-copy + :component1 :main1-root :main1-child + :component2 :main2-root :main2-nested-head + :copy2-root + :copy2-root-params {:children-labels [:copy2-child]}))] + (tm/make-situation file {:main-instance :main2-nested-head + :copy-instance :copy2-child + :main2-root :main2-root + :copy-root :copy2-root}))) + + +(defn- change-main-child-fill + "Apply `fill-color` to the library's :main-child via the production change path + (mirrors how a real edit to the main would have changed the library), returning + the updated library file value. Used to make the library main DIVERGE from the + already-instantiated copy, so a subsequent cross-file sync has something to pull." + [library fill-color] + (let [page (thf/current-page library) + main-id (thi/id :main-child) + changes (cls/generate-update-shapes + (pcb/empty-changes nil (:id page)) + #{main-id} + (fn [shape] (assoc shape :fills (ths/sample-fills-color :fill-color fill-color))) + (:objects page) + {})] + (thf/apply-changes library changes))) + +(defn cross-file-component-with-copy + "LOCALITY axis (case H): a component whose main lives in a SEPARATE, shared + LIBRARY file, and a clean copy that lives in a CONSUMING file. The library main + has since DIVERGED from the copy (its :main-child now carries `new-fill`, while + the copy still carries the original `#abcdef`), modelling 'the library was + changed elsewhere'. Propagating that change to the copy is therefore a CROSS- + FILE sync (the library-update flow), not the in-file watcher. + + The returned situation's PRIMARY file is the CONSUMING file (the current file, + where the copy lives and which the copy roles resolve against); the library + travels as an AUXILIARY file (see `tm/with-aux-files`) so an interpreter can + install it alongside (e.g. into the frontend store's `:files`) and run the + cross-file sync. Roles: :copy-instance -> the copy child, :copy-root -> the copy + root (both in the consuming file). `new-fill` should match the value the test + uses for its expected-value descriptor. + + Labels: in the LIBRARY — :component1, :main-root, :main-child; in the CONSUMING + file — :copy-root, :copy-child." + [new-fill] + (let [library (-> (thf/sample-file :library :is-shared true) + (tho/add-simple-component + :component1 :main-root :main-child + :child-params {:fills (ths/sample-fills-color :fill-color "#abcdef")})) + ;; instantiate the copy in the consuming file FIRST (copy gets the old fill) + file (-> (thf/sample-file :file) + (thc/instantiate-component :component1 :copy-root + :library library + :children-labels [:copy-child])) + ;; THEN diverge the library main (copy is now stale) + library' (change-main-child-fill library new-fill)] + (-> (tm/make-situation file {:copy-instance :copy-child + :copy-root :copy-root}) + (tm/with-aux-files {(:id library') library'})))) + +(defn library-id + "The id of the library file in a cross-file situation (the single auxiliary + file). Used by the cross-file sync operation." + [situation] + (-> situation tm/aux-files keys first)) diff --git a/frontend/test/frontend_tests/composable_tests/comp/sync_test.cljs b/frontend/test/frontend_tests/composable_tests/comp/sync_test.cljs new file mode 100644 index 0000000000..79a32492a4 --- /dev/null +++ b/frontend/test/frontend_tests/composable_tests/comp/sync_test.cljs @@ -0,0 +1,346 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns frontend-tests.composable-tests.comp.sync-test + "Component-behaviour cases authored on the composable test model, run against + the REAL app (frontend interpreter). In-file propagation is AUTOMATIC: a case + contains ONLY the user edit(s) (no propagate op); the app's component-change + watcher syncs copies on its own, and that is what we assert. + + The cases (see `mem:frontend/composable-component-tests` for details): + B — an override on a copy child survives a later main change (touched gate). + C — a sweep (one-of) over several attribute changes, each auto-propagating. + D — a shape added to the main is structurally auto-propagated (ref-integrity). + E — a middle shape removed from the main; survivors keep order. + F — reordering a shape in the main; order auto-propagates, identity preserved. + H — locality: a library main's change reaches the consuming file's copy on + the explicit library sync (cross-file propagation). + I — undo reverses an edit AND its auto-propagation. + K — the synchronisation sweep: depth x edit-targets, with override-precedence + and reset checkpoints. + L — the swap sweep: swaps at any subset of nesting levels. + M — the variant-switch sweep: case L with variant switches. + + Async: each deftest uses `t/async`; `ftm/check` drives the store and calls + `done` when finished." + (:require + [app.common.types.component :as ctk] + [app.common.types.shape-tree :as ctst] + [cljs.test :as t :include-macros true] + [frontend-tests.composable-tests.comp.nodes :as n] + [frontend-tests.composable-tests.comp.setups :as setup] + [frontend-tests.composable-tests.core :as tm] + [frontend-tests.composable-tests.interpreter :as ftm])) + +(def ^:private red "#ff0000") +(def ^:private green "#00ff00") + +;; Disable thumbnail rendering for the duration of each (async) test: the +;; propagation watcher schedules thumbnail renders that reach `window`, absent in +;; the headless runner. `:each` `:after` runs only after the test's `done` fires +;; (same guarantee the wasm-mock fixtures rely on), so the no-op covers the whole +;; async lifetime and is scoped to THIS namespace. See ftm/install-thumbnail-noop!. +(t/use-fixtures :each + {:before ftm/install-thumbnail-noop! + :after ftm/restore-thumbnail!}) + +;; (Cases A, G, J retired — subsumed by case K's depth-swept propagation scenario.) + +(t/deftest case-b-copy-override-survives-later-main-change + (t/async + done + (let [override (n/change-attr :copy-child :fills green)] ; touch the copy first + (ftm/check + done + {:setup setup/simple-component-with-labeled-copy + ;; override the copy, then change the main; the watcher auto-syncs after + ;; each edit. The override must survive (touched-flag gate). + :operation (tm/in-sequence + [override + (n/change-attr :main-child :fills red)])} + (fn [situation] + (let [copy-child (setup/copy-instance situation)] + (t/is (n/has-attr? override copy-child)) + (t/is (contains? (:touched copy-child) :fill-group)) + (t/is (some? (:shape-ref copy-child))))))))) + +(t/deftest case-c-attribute-sweep-auto-propagates-to-clean-copy + (t/async + done + (let [sweep (tm/one-of + [(n/change-attr :main-child :fills red) + (n/change-attr :main-child :opacity 0.5)])] + (ftm/check + done + {:setup setup/simple-component-with-copy + :operation (tm/in-sequence [sweep])} + (fn [situation] + (let [chosen (tm/get-choice situation sweep)] + (t/is (some? chosen)) + (t/is (n/has-attr? chosen (setup/copy-instance situation))))))))) + +(t/deftest case-d-add-shape-to-main-auto-propagates-to-clean-copy + (t/async + done + (let [add (n/add-child :main-root :main-child-2)] + (ftm/check + done + {:setup setup/simple-component-with-labeled-copy + :operation (tm/in-sequence [add])} + (fn [situation] + (let [copy-root (setup/copy-root situation) + main-new (n/added-shape add situation) + copy-new (n/materialized-instance-child add situation copy-root)] + (t/is (some? copy-new)) + (t/is (ctk/is-main-of? main-new copy-new)) + (t/is (ctst/parent-of? copy-root copy-new)) + (t/is (nil? (:touched copy-new))))))))) + +(t/deftest case-e-remove-shape-from-main-auto-propagates-to-clean-copy + (t/async + done + (let [removal (n/remove-child :main-child2)] + (ftm/check + done + {:setup setup/component-with-many-children + :operation (tm/in-sequence [removal])} + (fn [situation] + (let [copy-root (setup/copy-root situation) + order (vec (:shapes copy-root)) + c1 (setup/copy-child situation 1) + c3 (setup/copy-child situation 3)] + (t/is (= 2 (count order))) + (t/is (= (nth order 0) (:id c1))) + (t/is (= (nth order 1) (:id c3))) + (t/is (some? (:shape-ref c1))) + (t/is (some? (:shape-ref c3))) + (t/is (nil? (:touched c1))) + (t/is (nil? (:touched c3))) + (t/is (nil? (:touched copy-root))))))))) + +(t/deftest case-f-move-shape-in-main-auto-propagates-order-to-clean-copy + (t/async + done + (let [move (n/move-child :main-child1 :main-root 2)] + (ftm/check + done + {:setup setup/component-with-many-children + :operation (tm/in-sequence [move])} + (fn [situation] + (let [copy-root (setup/copy-root situation) + order (vec (:shapes copy-root)) + c1 (setup/copy-child situation 1) + c2 (setup/copy-child situation 2) + c3 (setup/copy-child situation 3)] + (t/is (= (nth order 0) (:id c2))) + (t/is (= (nth order 1) (:id c1))) + (t/is (= (nth order 2) (:id c3))) + (t/is (some? (:shape-ref c1))) + (t/is (some? (:shape-ref c2))) + (t/is (some? (:shape-ref c3))) + (t/is (nil? (:touched c1))) + (t/is (nil? (:touched c2))) + (t/is (nil? (:touched c3))))))))) + +(t/deftest case-i-undo-reverts-edit-and-its-auto-propagation + (t/async + done + ;; UNDO axis (case I), built on case A: change the main (which auto-propagates + ;; to the clean copy), then UNDO. A single undo reverses the whole logical + ;; action — the edit AND its propagation — so the copy returns to baseline and + ;; is left untouched. Undo is just another op (`n/undo`); the engine owns + ;; reversal (frontend realisation dispatches the real `dwu/undo`). + (let [original "#abcdef" ; the labeled setup's starting fill + baseline (n/change-attr :main-child :fills original) ; expected-VALUE descriptor + change (n/change-attr :main-child :fills red)] + (ftm/check + done + {:setup setup/simple-component-with-labeled-copy + :operation (tm/in-sequence [change (n/undo)])} + (fn [situation] + (let [copy (setup/copy-instance situation) + main (setup/main-instance situation)] + ;; the edit was reversed on the main … + (t/is (n/has-attr? baseline main)) + ;; … and on the copy (the propagation was reversed too) … + (t/is (n/has-attr? baseline copy)) + ;; … leaving the copy clean. + (t/is (nil? (:touched copy))))))))) + +(t/deftest case-h-library-change-propagates-across-file-boundary-on-sync + (t/async + done + ;; LOCALITY axis: the main lives in a linked LIBRARY, the copy in the consuming + ;; (current) file. The library main has diverged (setup applied `red` to it, + ;; leaving the copy stale). Unlike the in-file cases, the watcher does NOT cross the + ;; file boundary; the real app propagates via the library-UPDATE action, so the + ;; transformation is `sync-from-library` (dispatches the real `sync-file`). + ;; `expected` is only an expected-VALUE descriptor (its target is irrelevant; + ;; `has-attr?` uses just attr+value), so the asserter reads exactly like case A. + (let [expected (n/change-attr :main-child :fills red)] + (ftm/check + done + {:setup #(setup/cross-file-component-with-copy red) + :operation (tm/in-sequence [(n/sync-from-library)])} + (fn [situation] + (t/is (n/has-attr? expected (setup/copy-instance situation)))))))) + +(def ^:private blue "#0000ff") + +(t/deftest case-k-synchronisation-scenarios + (t/async + done + ;; CONSOLIDATED SCENARIO SWEEP — one composition standing in for many cases. + ;; Built from the sync-scenario operations on an empty situation. It sweeps: + ;; - DEPTH 0/1/2 via two independent `(optional (make-nested-component ...))` + ;; - which EDITS were made via three independent `(optional change-*)` + ;; and asserts, at INLINE checkpoints, the override-precedence and reset rules. + ;; The change targets are the tracked ROLES (:remote/:main/:copy-child-rect), so + ;; the same composition holds at any depth. Propagation is AUTOMATIC (no + ;; propagate op). Subsumes the flat/nested propagation cases (A/G/J). + (let [m "main" + change-remote (n/change-property (n/remote-rect-of m) :fills red) + change-main (n/change-property (n/main-rect-of m) :fills green) + change-copy (n/change-property (n/copy-rect-of m) :fills blue) + copy-rect (fn [s] (n/lineage-copy-rect s m)) + ;; precedence at the copy: copy override wins; else main; else remote. + expected-after-edits + (fn [s] + (cond + (tm/applied? s change-copy) (n/has-property-of change-copy (tm/shape-by-id s (copy-rect s))) + (tm/applied? s change-main) (n/has-property-of change-main (tm/shape-by-id s (copy-rect s))) + (tm/applied? s change-remote) (n/has-property-of change-remote (tm/shape-by-id s (copy-rect s))) + :else true))] + (ftm/check + done + {:setup setup/empty-situation + :operation (tm/in-sequence + [(n/create-component m red) + ;; depth sweep: two independent optionals give depths 0/1/2 + ;; (depth 1 appears twice — harmless) without nesting a + ;; Sequence inside an optional. + (tm/optional (n/make-nested-component m)) + (tm/optional (n/make-nested-component m)) + (n/instantiate-copy m) + (tm/optional change-remote) + (tm/optional change-main) + (tm/optional change-copy) + (tm/test-that (fn [s] (t/is (expected-after-edits s)))) + ;; force a copy override, observe it wins, then reset it away + change-copy + (tm/test-that + (fn [s] (t/is (n/has-property-of change-copy (tm/shape-by-id s (copy-rect s)))))) + (n/reset-copy-instance m) + (tm/test-that + (fn [s] + ;; after reset: main's value if main changed, else remote's + ;; if remote changed (else the original — not asserted). + (cond + (tm/applied? s change-main) (t/is (n/has-property-of change-main (tm/shape-by-id s (copy-rect s)))) + (tm/applied? s change-remote) (t/is (n/has-property-of change-remote (tm/shape-by-id s (copy-rect s)))) + :else true)))])})))) + +(defn- level-color + "The fill colour of the rect currently at lineage `name`'s nesting level `i`." + [s name i] + (-> (tm/shape-by-id s (n/level-rect s name i)) :fills first :fill-color)) + +(def ^:private base-color "#aaaaaa") +(def ^:private swap-colors ["#ff0000" "#00ff00" "#0000ff"]) ; level 0/1/2 targets + +(t/deftest case-l-swap-scenarios + (t/async + done + ;; SWAP SWEEP — build a 3-level nesting, then OPTIONALLY swap the nested + ;; component at each level for a differently-coloured one, and assert the colour + ;; that surfaces at every level. A swap at level i propagates (automatically, via + ;; the watcher) to level i and every OUTER (higher-index) level, until a swap at + ;; a higher level overrides it. So the colour at level i is the swap at the + ;; HIGHEST index j <= i that was applied, else the base colour. (Generalises the + ;; "single swap in copy" diagram across which levels are swapped.) + (let [m "main" + targets ["s0" "s1" "s2"] + ;; swap[i] swaps level i's nested component for target lineage i (color i) + swaps (mapv (fn [i] (n/swap-component m i (nth targets i))) (range 3)) + expected-at + (fn [s i] + ;; the colour of the applied swap at the highest j <= i, else base + (or (some (fn [j] (when (tm/applied? s (nth swaps j)) (nth swap-colors j))) + (range i -1 -1)) + base-color))] + (ftm/check + done + {:setup setup/empty-situation + :operation (tm/in-sequence + (concat + [(n/create-component m base-color)] + ;; a target lineage per level + (map-indexed (fn [i c] (n/create-component (nth targets i) c)) swap-colors) + [(n/make-nested-component m) (n/make-nested-component m) (n/make-nested-component m)] + ;; optionally swap at each level + (map (fn [sw] (tm/optional sw)) swaps) + [(tm/test-that + (fn [s] + (doseq [i (range 3)] + (t/is (= (expected-at s i) (level-color s m i)) + (str "level " i)))))]))})))) + +(t/deftest case-m-variant-switch-scenarios + (t/async + done + ;; VARIANT-SWITCH SWEEP — the variant-switch flavour of case L. Build a variant + ;; SET of peer members and nest the base member at EVERY level (so each level has + ;; a variant head, just as case L's swap target exists at every level). Then + ;; OPTIONALLY switch the variant head at each level to a differently-coloured + ;; sibling and assert the colour that surfaces at every level. A variant switch + ;; routes through the SAME component-swap as case L (keep-touched? true), so the + ;; watcher auto-propagates it identically: the colour at level i is the switch at + ;; the HIGHEST index j <= i that was applied, else the base member's colour. Same + ;; asserter as L — the test of "a variant switch propagates like a swap". + (let [m "main" ; the nesting lineage (holds the nesting-data) + vset "vset" ; the variant set + vals ["v0" "v1" "v2" "v3"] + colors (into [base-color] swap-colors) ; base + sibling colours + ;; switch[i] switches level i's variant head to member i+1 (colour i). The + ;; single variant instance has a corresponding (switchable) head at every + ;; level — `nested-head` IS the deepest instance there — so we can switch at + ;; ANY level, exactly like case L's per-level swap. + switches (mapv (fn [i] (n/switch-variant (n/nested-head-of m i) (nth vals (inc i)))) + (range 3)) + expected-at + (fn [s i] + ;; same precedence as case L: the colour at level i is the switch at the + ;; HIGHEST index j <= i that was applied (a switch propagates outward), + ;; else base. + (or (some (fn [j] (when (tm/applied? s (nth switches j)) (nth swap-colors j))) + (range i -1 -1)) + base-color))] + (ftm/check + done + {:setup setup/empty-situation + :operation (tm/in-sequence + (concat + ;; the nesting lineage, and the variant set (members = [value color]) + [(n/create-component m base-color) + (n/make-variant-container vset (mapv vector vals colors))] + ;; introduce the variant instance ONCE (innermost), then wrap it + ;; with plain nesting so each outer level CONTAINS the one below + ;; (progressive nesting, like case L's make-nested-component x3). nested-head + ;; at every level is then the variant (the deepest instance), so a + ;; switch at level i targets it and propagates OUTWARD via the + ;; watcher — exactly like case L's swap. + [(n/make-nested-component-with-variant m vset "v0") + (n/make-nested-component m) + (n/make-nested-component m)] + ;; optionally switch each level's variant head to its target sibling + (map (fn [sw] (tm/optional sw)) switches) + [(tm/test-that + (fn [s] + (doseq [i (range 3)] + (t/is (= (expected-at s i) (level-color s m i)) + (str "level " i)))))]))})))) + + diff --git a/frontend/test/frontend_tests/composable_tests/core.cljs b/frontend/test/frontend_tests/composable_tests/core.cljs new file mode 100644 index 0000000000..6c1221658b --- /dev/null +++ b/frontend/test/frontend_tests/composable_tests/core.cljs @@ -0,0 +1,611 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns frontend-tests.composable-tests.core + "The domain-agnostic ENGINE of the composable test model (see + `mem:frontend/composable-component-tests`): + + - a `situation` carrying the in-memory file value, named ROLE bindings, + a `:vars` map, and an ordered record of applied operations, + - node identity (`assign-id`) + the applied-log (`record-application`, + `applied?`, `describe-applied`), + - strict-presence lookup that throws a diagnostic error on a missing name, + - the `IOperation` protocol (single method `apply-to`) and the + `IEnumerable` protocol behind variant enumeration, + - the composition operators `in-sequence`, `one-of`, `optional`, `skip`, + and the inline-assertion operation `test-that`, + - the enumerating pure runners `run-variant` / `run-all` (the frontend + interpreter in `frontend-tests.composable-tests.interpreter` is the + event-dispatching counterpart and the test-facing entry point). + + No Penpot domain terms live here; the component-specific operations sit + behind the `comp` boundary (`frontend-tests.composable-tests.comp.*`). + + Shape references use the existing label->uuid system (`app.common.test-helpers.ids-map`) + rather than a parallel binding map: a binding name in an operation IS a + shape label, resolved through `thi/id`. The situation adds the applied-log and + the strict-presence discipline on top of that substrate." + (:refer-clojure :exclude [apply-to]) + (:require + [app.common.test-helpers.files :as thf] + [app.common.test-helpers.ids-map :as thi] + [app.common.types.shape-tree :as ctst] + [app.common.uuid :as uuid] + [clojure.string :as str])) + +;; --------------------------------------------------------------------------- +;; Situation +;; +;; A situation wraps the in-memory Penpot file value together with the record of +;; what has been applied to it. The environment of *shape* bindings is the +;; global label->uuid map (reset per variant by the runners), so the situation +;; does not duplicate it; it only adds: +;; :file - the current in-memory file value +;; :applied-log - vector of application records, in application order +;; --------------------------------------------------------------------------- + +;; resolve-shape is defined below (strict-presence section) but referenced by +;; role-shape above it; declare it so the forward reference resolves at load. +(declare resolve-shape) +(declare resolve-shape-id) + +(defn make-situation + "Create a situation from an initial in-memory file value, optionally with role + bindings. Roles are meaningful named objects of the configuration the setup + built (e.g. :main-instance, :copy-instance), passed as shape *labels*. The + labels are resolved to ids IMMEDIATELY (at construction, while the labels are + freshly valid) and the situation stores the resolved ids. This is essential: + the global label->id map is time-varying and shared, so resolving a role label + later (e.g. in another enumerated variant's run) would be unsound; capturing + the id at setup time makes each situation resolve its roles against the file it + was built with, independent of the global map's later state. + + The situation also carries: + :applied - ordered vector of operation ids, in application order + (so the full sequence is always recoverable from the situation) + :node-data - map of operation-id -> the record that operation + wrote about its own application (keyed by NODE IDENTITY, not by + a node-kind tag), so each node retrieves its own record." + ([file] (make-situation file {})) + ([file roles] + {:file file + ;; resolve role labels to ids now, while the labels are valid + :roles (into {} (map (fn [[k label]] [k (thi/id label)])) roles) + :applied [] + :node-data {}})) + +(defn file + "The current in-memory file value of the situation." + [situation] + (:file situation)) + +(defn with-file + "Return a situation with its file value replaced (the threaded result of + applying a transformation through the production change pipeline)." + [situation file'] + (assoc situation :file file')) + + +(defn with-aux-files + "Return a situation carrying AUXILIARY files (a map of file-id -> file value) + beyond the primary `:file`. Used by cross-file configurations (e.g. a copy in + the primary/current file whose main lives in a linked LIBRARY file): the + primary `:file` stays the current file the role accessors resolve against, + while the auxiliary files travel alongside so an interpreter can install them + too (e.g. into the frontend store's `:files`, so cross-file sync can run). + The primary file is NOT included here." + [situation files-by-id] + (assoc situation :aux-files files-by-id)) + +(defn aux-files + "The situation's auxiliary files (map of file-id -> file), or an empty map. + See `with-aux-files`." + [situation] + (get situation :aux-files {})) + +;; ----- Node identity (central, no inheritance) ----------------------------- +;; +;; Records are value-equal in Clojure, so two structurally-identical nodes would +;; collide as map keys. Each node therefore carries an explicit unique id under +;; the reserved key ::id, stamped at construction by `assign-id` (the single +;; thing every node constructor must call). The id machinery — stamping, and the +;; record/retrieve-by-id pair below — is implemented ONCE here and shared by all +;; nodes as plain functions; nodes never reimplement it, they just pass `this`. + +(defn assign-id + "Stamp a fresh unique id onto a node record (reserved key ::id). Every node + constructor's final step. Returns the node." + [node] + (assoc node ::id (uuid/next))) + +(defn node-id + "The unique id of a node." + [node] + (::id node)) + +;; ----- Self-description, keyed by node identity ---------------------------- + +(defn- node-kind + "A short readable kind name for a node, derived from its record type (no + per-node boilerplate, faithful to the actual type). E.g. a ChangeAttr record + yields \"change-attr\"." + [node] + (let [cls (or (some-> node type .-name (str/split #"\.") last) + "node") + ;; CamelCase -> kebab-case + kebab (-> cls + (str/replace #"([a-z0-9])([A-Z])" "$1-$2") + (str/lower-case))] + kebab)) + +(defn record-application + "Record what an operation `node` did into `situation`, keyed by the node's + identity, and append its id to the ordered :applied sequence. `record` is an + arbitrary map describing the application; the node retrieves it later via + `node-data` by passing itself. The node's kind (from its type) is merged in + under ::kind so the application can be rendered (see `describe-applied`) + without the node needing to name itself. Both consumers (inspection methods, + undo) read through node identity and ignore the extra ::kind key." + [situation node record] + (-> situation + (update :applied conj (node-id node)) + (assoc-in [:node-data (node-id node)] (assoc record ::kind (node-kind node))))) + +(defn node-data + "The record that `node` wrote about its own application in `situation`, or nil + if it has not been applied. Keyed by node identity." + [situation node] + (get-in situation [:node-data (node-id node)])) + +(defn applied-ids + "The ordered vector of operation ids applied to the situation (the full + sequence, recoverable from the situation)." + [situation] + (:applied situation)) + +(defn applied? + "Whether `operation` ran in this situation. Identity-based: true iff this exact + operation node (by its `::id`) recorded an application. Works through `optional` + / `one-of`: a chosen alternative records itself under its own identity, so + querying with the raw operation answers correctly. Bind an operation to a value + ONCE and reuse it (in the composition AND in any `Test` that queries it), so the + id you ask about is the id that ran." + [situation operation] + (contains? (:node-data situation) (node-id operation))) + + +(defn- render-application + "Render one (non-choice) application record as a short human-readable string. + Content-agnostic: uses ::kind and the record's own fields." + [record] + (let [kind (::kind record) + args (dissoc record ::kind)] + (str kind (when (seq args) (str " " (pr-str args)))))) + +(defn describe-applied + "A human-readable, ordered transcript of the operations that produced + `situation` — one line per application, in order. Built purely from the + situation's recorded :applied ids and :node-data records (each node's own + self-description), so it is faithful to what actually ran, including the branch + a one-of chose. Used to label failures with the exact sequence at hand." + [situation] + (let [node-data (:node-data situation)] + (->> (:applied situation) + (keep (fn [id] + (let [record (get node-data id)] + (if (contains? record :chosen) + ;; a one-of's choice record: if the chosen node recorded its + ;; own application, its own line (also in :applied) already + ;; tells the story — emit nothing to avoid a duplicate line. + ;; Only a non-recording choice (a skipped `optional`) is + ;; rendered here, so a skip stays visible in the transcript. + (let [chosen (:chosen record)] + (when-not (contains? node-data (::id chosen)) + (str "one-of -> " (render-application {::kind (node-kind chosen)})))) + (render-application record))))) + (str/join "\n ")))) + +;; ----- Role accessors ------------------------------------------------------ +;; +;; A setup records role bindings (meaningful named objects of the configuration) +;; as shape labels. `role-shape` resolves a role to the live shape in the current +;; file, with strict presence: an absent role throws diagnostically (never nil). +;; Specific named accessors (e.g. copy-instance) are thin wrappers, so tests read +;; `(copy-instance situation)` rather than knowing the role key. + +(defn role-shape + "Resolve role `role-key` to the live shape in the situation's current file, + using the id captured at setup time. Throws a diagnostic error if the role is + not bound, or if its captured shape is no longer present in the current page + (e.g. it was deleted) — never returns nil silently." + [situation role-key] + (let [id (get-in situation [:roles role-key]) + page (thf/current-page (file situation))] + (when (nil? id) + (throw (ex-info (str "Unbound role: " (pr-str role-key) + ". Roles present: " (pr-str (vec (keys (:roles situation))))) + {:type ::unbound-role + :role role-key}))) + (let [shape (ctst/get-shape page id)] + (when (nil? shape) + (throw (ex-info (str "Role " (pr-str role-key) " resolves to a shape no longer " + "present in the current page (id " (pr-str id) ").") + {:type ::role-shape-absent + :role role-key + :id id}))) + shape))) + + +(defn has-role? + "Whether `role-key` is currently bound in the situation." + [situation role-key] + (contains? (:roles situation) role-key)) + +(defn shape-by-id + "The live shape with `id` in the situation's current page (nil if absent). For + reading a shape whose id is held outside the role map — e.g. a field of a + tracked component object." + [situation id] + (ctst/get-shape (thf/current-page (file situation)) id)) + +(defn rebind-role + "Re-point `role-key` to the current id of shape `label` (resolved via the global + label map now, while it is valid). Used by state-building operations that move + the configuration (e.g. `make-nested-component`) and must update where a role points so + that role-targeted operations keep acting on the intended shape." + [situation role-key label] + (assoc-in situation [:roles role-key] (thi/id label))) + +(defn rebind-role-id + "Like `rebind-role`, but re-points `role-key` to a shape `id` directly (when the + operation discovered the shape by id, e.g. by following a :shape-ref chain, + rather than by label)." + [situation role-key id] + (assoc-in situation [:roles role-key] id)) + + +;; --------------------------------------------------------------------------- +;; Situation vars — arbitrary named values beyond roles +;; +;; Roles name SHAPES (resolved from labels to ids). Some operations need to track +;; named values that are NOT shapes — e.g. a component id to instantiate next, or +;; a counter (nesting depth). Those live in a separate `:vars` map so they do not +;; get confused with shape roles. Set/read with `set-var`/`get-var`. +;; --------------------------------------------------------------------------- + +(defn set-var + "Associate `k` with `v` in the situation's `:vars` (arbitrary named values that + are NOT shapes — e.g. a component id, a counter). Returns the situation." + [situation k v] + (assoc-in situation [:vars k] v)) + +(defn get-var + "Read the value of `k` from the situation's `:vars`, or `default` (nil if + omitted) when absent. See `set-var`." + ([situation k] (get-var situation k nil)) + ([situation k default] (get-in situation [:vars k] default))) + +(defn target-shape-id + "Resolve an operation's target to a shape id: + - a FUNCTION `(situation -> id)` is called with the situation (lets the target + be computed from situation state — e.g. a field of a tracked object — + resolved at apply-time so it follows state changes); + - a currently-bound ROLE resolves via the role (so the operation follows the + role as state-building ops re-point it); + - otherwise `target` is a label (strict-presence). + This is what makes a single operation composable across depth / with + make-nested-component et al." + [situation target] + (cond + (fn? target) (target situation) + (has-role? situation target) (:id (role-shape situation target)) + :else (resolve-shape-id situation target))) + +;; --------------------------------------------------------------------------- +;; Strict-presence lookup +;; +;; Resolving a binding name (shape label) that is absent must throw a DIAGNOSTIC +;; error: it names the absent binding and lists those present. A silently-nil +;; lookup is forbidden (it would make a declarative case a lie / a green test +;; that asserts against nothing). Acting on a present-but-wrong-kind binding is +;; left to crash naturally downstream. +;; --------------------------------------------------------------------------- + +(defn resolve-shape + "Resolve a shape binding name (label) to the actual shape in the situation's + current page, throwing a diagnostic error if the name is not bound to a shape + that exists in that page. The diagnostic lists the labels of the shapes that + ARE present, derived from the file itself (not from a parallel binding map)." + [situation name] + (let [the-file (file situation) + page (thf/current-page the-file) + id (thi/id name) + shape (when id (ctst/get-shape page id))] + (when (nil? shape) + (let [present (->> (vals (:objects page)) + (map (comp thi/label :id)) + (sort) + (vec))] + (throw (ex-info (str "Unbound shape name: " (pr-str name) + ". Shapes present in current page: " (pr-str present)) + {:type ::unbound-shape-name + :name name + :present present})))) + shape)) + +(defn resolve-shape-id + "Resolve a shape binding name (label) to its uuid, with strict-presence + diagnostics (see `resolve-shape`)." + [situation name] + (:id (resolve-shape situation name))) + +;; --------------------------------------------------------------------------- +;; Operation protocol +;; +;; An OPERATION is a step in a composition. Most operations TRANSFORM the +;; situation (an edit, a structural change, a nesting), but some do not (a `Test` +;; asserts and returns the situation unchanged; `Skip` is a no-op) — hence the +;; genus is "operation", not "transformation". An operation is reified as DATA (a +;; record), not a bare function, so it is printable and navigable. `apply-to` +;; takes the operation and a situation and returns a (possibly identical) +;; situation; it may also record its own application. The method cannot be named +;; `apply` (core clash). +;; --------------------------------------------------------------------------- + +(defprotocol IOperation + (apply-to [operation situation] + "Apply this operation to `situation`, returning a (possibly identical) + situation.")) + + +;; --------------------------------------------------------------------------- +;; Enumeration +;; +;; A composed operation may stand for MANY concrete cases (because `one-of` +;; offers alternatives). Enumeration turns one composed operation into the +;; sequence of fully-concrete operations it represents — each of which has +;; no remaining choice and can be `apply-to`'d directly. +;; +;; Enumeration is a generic-engine concern: only the composition operators +;; (`in-sequence`, `one-of`) implement it. Leaf/subject operations (e.g. the +;; component nodes) need not know about it — the top-level `enumerate` falls back +;; to "an operation with no choice enumerates to itself", so a plain node yields a +;; single variant (itself). This keeps `apply-to` and `enumerate` orthogonal and +;; keeps the `comp` node library free of enumeration code. +;; --------------------------------------------------------------------------- + +(defprotocol IEnumerable + (-enumerate [operation] + "Return a sequence of fully-concrete operations this one represents.")) + +(defn enumerate + "The concrete operations represented by `operation`. Falls back to a single + variant (the operation itself) for anything that does not implement + IEnumerable (i.e. leaf operations with no internal choice)." + [operation] + (if (satisfies? IEnumerable operation) + (-enumerate operation) + [operation])) + +;; --------------------------------------------------------------------------- +;; Composition operator: sequence +;; +;; A `Sequence` holds an ordered vector of child operations and applies them +;; left-to-right, THREADING the situation through each: the situation returned +;; by one child is the input to the next. Operations do not commute, so order +;; is explicit. Its enumeration is the CARTESIAN PRODUCT of its children's +;; variants (with single-variant children this is exactly one Sequence), which +;; is what makes a `one-of`/`optional` composed inside a sequence multiply the +;; case out into a matrix. +;; +;; The constructor is named `in-sequence` because `sequence` is a clojure.core +;; name and must not be shadowed. +;; --------------------------------------------------------------------------- + +(declare ->Sequence) + +(defrecord Sequence [steps] + IOperation + (apply-to [_ situation] + (reduce (fn [sit step] (apply-to step sit)) + situation + steps)) + + IEnumerable + (-enumerate [_] + ;; Cartesian product: every combination of one concrete variant per step, + ;; each combination rewrapped as a concrete Sequence. With single-variant + ;; steps this yields exactly one Sequence (the all-singletons case). + (->> steps + (map enumerate) ; step -> seq of concrete variants + (reduce (fn [acc step-variants] + (for [combo acc + variant step-variants] + (conj combo variant))) + [[]]) ; seed: one empty combination + (map ->Sequence)))) + +(defn in-sequence + "Constructor for the sequence operator: apply `steps` (a seq of + transformations) in order, threading the situation through each." + [steps] + (->Sequence (vec steps))) + + +;; --------------------------------------------------------------------------- +;; Composition operator: one-of +;; +;; `one-of` offers a set of alternative transformations: it represents N cases, +;; one per alternative. It is a pure *enumeration* construct — it has no single +;; apply semantics, because applying it would mean arbitrarily picking one +;; alternative. So `apply-to` on a raw OneOf is an error; it must be enumerated +;; first (the runner does this). Its `-enumerate` is the UNION of its +;; alternatives' enumerations, so `one-of` composed inside `in-sequence` +;; multiplies out correctly via the sequence's cartesian product. +;; --------------------------------------------------------------------------- + +(defrecord RecordedChoice [one-of-id chosen] + ;; Internal node produced by OneOf enumeration. Applying it records, under the + ;; originating one-of's identity, which alternative was chosen, then applies + ;; that alternative. This is how `get-choice` (read by the test holding the + ;; one-of) recovers the choice from the resulting situation. It is already + ;; concrete, so it enumerates to itself. + IOperation + (apply-to [_ situation] + (-> situation + (assoc-in [:node-data one-of-id] {:chosen chosen}) + (update :applied conj one-of-id) + (->> (apply-to chosen)))) + + IEnumerable + (-enumerate [this] [this])) + +(defrecord OneOf [alternatives] + IOperation + (apply-to [_ _] + (throw (ex-info (str "OneOf cannot be applied directly; it represents a choice " + "and must be enumerated first (the runners do this via `enumerate`).") + {:type ::one-of-applied-directly + :alternative-count (count alternatives)}))) + + IEnumerable + (-enumerate [this] + ;; Each alternative may itself enumerate to several concrete variants; every + ;; resulting concrete variant is wrapped so that, when applied, it records + ;; this one-of's choice under this one-of's identity. + (for [alt alternatives + variant (enumerate alt)] + (->RecordedChoice (node-id this) variant)))) + +(defn one-of + "Constructor for the one-of operator: represents one case per alternative in + `alternatives`. Used to sweep a set of variants (e.g. several attribute + changes) across an otherwise-shared case. Carries an identity so the choice it + made in a given enumerated run can be recovered via `get-choice`." + [alternatives] + (assign-id (->OneOf (vec alternatives)))) + + +(defrecord Skip [] + IOperation + (apply-to [_ situation] situation) + IEnumerable + (-enumerate [self] [self])) + +(defn skip + "The identity operation: applies as a no-op, enumerates to itself. The building + block of `optional`." + [] + (->Skip)) + +(defrecord Test [assert-fn] + ;; An operation that makes ASSERTIONS at this point in the sequence and leaves + ;; the situation unchanged. `assert-fn` is a (situation -> any) that performs the + ;; assertions itself (e.g. calls `t/is`), exactly like an external asserter — so + ;; checks can be placed at INTERMEDIATE steps, not only at the end. It records + ;; its application (so the transcript shows where checkpoints sit) but changes + ;; nothing. Concrete, so it enumerates to itself. + IOperation + (apply-to [this situation] + (assert-fn situation) + (record-application situation this {})) + IEnumerable + (-enumerate [self] [self])) + +(defn test-that + "Constructor for an inline `Test` operation. `assert-fn` is a (situation -> any) + that performs assertions (it is run for side effects; its return is ignored). + Place it inside an `in-sequence` to assert at that point in the trajectory. + Typically queries `applied?`/`get-choice`/`has-property-of` to decide what to + assert for the current enumerated variant." + [assert-fn] + (assign-id (->Test assert-fn))) + +(defn optional + "`(optional t)` = `(one-of [t (skip)])`: sweeps WITH and WITHOUT `t` across a + case (two enumerated variants). Kept as its own named constructor for + readability. The workhorse for adding a state-building step (e.g. + `(optional (make-nested-component))`) as an axis over an existing case." + [t] + (one-of [t (skip)])) + +(defn get-choice + "The alternative this `one-of` chose in `situation` (the concrete transformation + that actually ran for this branch), or nil if it did not run in this variant. + Recovered by node identity, so the test holds the one-of and asks it." + [situation one-of] + (:chosen (node-data situation one-of))) + +;; --------------------------------------------------------------------------- +;; Executors +;; +;; Build a fresh situation from a setup thunk and apply a (possibly composed) +;; OPERATION. `run-variant` runs one already-concrete variant; `run-all` +;; enumerates a composed operation and runs every variant. Neither makes a +;; judgment or touches clojure.test — `check` (in +;; `frontend-tests.composable-tests.interpreter`) is the test-facing entry point. (Assertions can also live INSIDE the operation, via +;; `Test`; those fire as the operation is applied.) +;; --------------------------------------------------------------------------- + +(defn run-variant + "Run one concrete (already-enumerated) variant: build a fresh situation via + `setup` (a 0-arg fn returning a *situation*) and apply `operation`, + returning the resulting situation. Makes no judgment. Exceptions propagate. + This is the per-variant step `check` builds on; tests use `check`, not this." + [{:keys [setup operation]}] + (->> (setup) + (apply-to operation))) + + +(defn run-all + "Enumerate `operation` into its concrete variants and run each (fresh setup + per variant, isolated label space — the id map is reset before each variant's + setup so per-variant setups don't clobber labels). Returns a vector of the + resulting situations, one per enumerated variant, in enumeration order. Makes + no judgment and does not touch clojure.test — see `check` (in + `frontend-tests.composable-tests.interpreter`) for the test-facing entry point that asserts." + [{:keys [setup operation]}] + (->> (enumerate operation) + (mapv (fn [variant] + (thi/reset-idmap!) + (run-variant {:setup setup + :operation variant}))))) + + +(defn sequence-ops + "Flatten a CONCRETE (already-enumerated) operation into its ordered units. + Used by alternative interpreters (e.g. the frontend one) that dispatch + per-operation effects rather than calling `apply-to`. + + A concrete variant is a single operation record, or a `Sequence` of them, with + `RecordedChoice` (the enumerated form of a one-of) appearing where a one-of was. + `Sequence` is flattened; a `RecordedChoice` is KEPT as a unit (it carries both + the chosen operation and the one-of identity, so a per-op interpreter can + dispatch the chosen op's effect AND record the choice for `get-choice`). Use + `recorded-choice?`, `choice-of`, and `choice-one-of-id` to handle those units." + [variant] + (cond + (instance? Sequence variant) + (vec (mapcat sequence-ops (:steps variant))) + + :else + [variant])) + +(defn recorded-choice? + "True if `op` is a one-of's enumerated choice wrapper." + [op] + (instance? RecordedChoice op)) + +(defn choice-of + "The concrete operation a `RecordedChoice` selected." + [recorded-choice] + (:chosen recorded-choice)) + +(defn choice-one-of-id + "The identity of the one-of that produced this `RecordedChoice` (so a per-op + interpreter can record the choice under it, enabling `get-choice`)." + [recorded-choice] + (:one-of-id recorded-choice)) diff --git a/frontend/test/frontend_tests/composable_tests/interpreter.cljs b/frontend/test/frontend_tests/composable_tests/interpreter.cljs new file mode 100644 index 0000000000..1890fd0faf --- /dev/null +++ b/frontend/test/frontend_tests/composable_tests/interpreter.cljs @@ -0,0 +1,471 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns frontend-tests.composable-tests.interpreter + "FRONTEND interpreter + test-facing `check` for the composable test model. + + The generic engine lives in `frontend-tests.composable-tests.core` and the + component instruments (operation records, setups, role accessors, inspection + methods) behind the `comp` boundary. What lives HERE is: + 1. `op->events` — the event realisation of each EVENT-op: the real + workspace event(s) it dispatches (it depends on + `app.main.data.workspace.*`). + 2. an ASYNC interpreter that drives a sequence of operations through the REAL + app: it installs the situation's file into the global store, starts the + real component-change watcher, then for each operation dispatches its + event(s) and AWAITS settlement (so the app's AUTOMATIC propagation — not a + manual sync — is what runs), re-reading the file from the store after each. + 3. `check` — the test-facing entry: takes {:setup :operation} + an OPTIONAL + asserter; enumerates the operation and runs each variant; assertions may + be inline (`Test` ops) and/or in the asserter. + + IN-FILE PROPAGATION IS AUTOMATIC: there is no propagate operation. The watcher + (`dwl/watch-component-changes`), running on the global store, detects + main-instance changes in the CURRENT file and syncs that file's copies on its + own. That automatic behaviour is precisely what the cases exercise. The one + deliberate exception is CROSS-FILE propagation (case H): when the main lives + in a linked LIBRARY and the copy in the consuming file, the watcher does NOT + cross the file boundary — the real app propagates via the library-UPDATE + action, so the `SyncFromLibrary` op explicitly dispatches `sync-file` (this is + faithful: it is exactly the user action, not a test shortcut). See + `mem:frontend/composable-component-tests`. + + NOTE on the store: this uses the GLOBAL `st/state` store (not the isolated + `setup-store`), because the watcher reads `refs/workspace-data` which derives + from `st/state`. State is re-installed per variant for isolation." + (:require + [app.common.test-helpers.files :as cthf] + [app.common.test-helpers.ids-map :as cthi] + [app.common.test-helpers.shapes :as cths] + [app.main.data.changes :as dch] + [app.main.data.workspace.libraries :as dwl] + [app.main.data.workspace.shapes :as dwsh] + [app.main.data.workspace.thumbnails :as dwth] + [app.main.data.workspace.undo :as dwu] + [app.main.data.workspace.variants :as dwv] + [app.main.store :as st] + [beicon.v2.core :as rx] + [cljs.test :as t] + [frontend-tests.composable-tests.comp.nodes :as n] + [frontend-tests.composable-tests.core :as tm] + [potok.v2.core :as ptk])) + +;; -------------------------------------------------------------------------- +;; (0) Thumbnail rendering — disabled in this headless suite +;; +;; The propagation watcher we start (`dwl/watch-component-changes`) ALSO schedules +;; THUMBNAIL renders on every component change (its `component-changed` event has a +;; thumbnail branch). Thumbnail rendering reaches `app.util.dom/get-css-variable`, +;; which calls `window.getComputedStyle` — and there is no `window` in the headless +;; runner, so a (queued, async) render fires LATER and crashes the run. Thumbnails +;; are pure UI side-effect, irrelevant to what we test, so we stub the public seam +;; `dwth/update-thumbnail` to a no-op event for the duration of OUR tests (installed +;; / restored by a `:each` fixture in the case namespace — the same `set!`-and- +;; restore pattern as `frontend_tests.helpers.wasm`, whose `:after` correctly runs +;; only after each async test's `done`). Scope is thus our suite only. +;; -------------------------------------------------------------------------- + +(defonce ^:private original-update-thumbnail (atom nil)) + +(defn- noop-thumbnail-event [] + (ptk/reify ::noop-thumbnail + ptk/WatchEvent + (watch [_ _ _] (rx/empty)))) + +(defn install-thumbnail-noop! + "Replace `dwth/update-thumbnail` with a no-op event so no thumbnail rendering + runs (it would reach `window`, absent headless). Restore with + `restore-thumbnail!`. Idempotent." + [] + (when (nil? @original-update-thumbnail) + (reset! original-update-thumbnail dwth/update-thumbnail) + (set! dwth/update-thumbnail (fn [& _] (noop-thumbnail-event))))) + +(defn restore-thumbnail! + "Restore the real `dwth/update-thumbnail` saved by `install-thumbnail-noop!`." + [] + (when-let [orig @original-update-thumbnail] + (set! dwth/update-thumbnail orig) + (reset! original-update-thumbnail nil))) + +;; -------------------------------------------------------------------------- +;; (1) Frontend realisation of operations: op record -> workspace event(s) +;; +;; The operation's "what" (its update-fn / target) is shared in common; this maps +;; it to the "how" on the frontend — the real event a user interaction dispatches. +;; Returns a vector of events to emit for that operation. +;; -------------------------------------------------------------------------- + +;; The edit a ChangeProperty performs is the SHARED `n/set-property`, so the +;; frontend applies the identical change the common node does (only the wrapping +;; differs: a real workspace event here vs. apply-changes there). + +(defn- add-child->shape + "Build the shape value AddChild introduces, parented under the target parent in + the current store page (mirrors the common add-child's sample shape). Returns + the shape with parent/frame set to the target parent." + [parent-label new-label shape-params] + (let [parent-id (cthi/id parent-label) + shape (cths/sample-shape new-label (or shape-params {}))] + (assoc shape + :parent-id parent-id + :frame-id parent-id))) + +(defn op->events + "Map a comp operation record to the real workspace event(s) it dispatches. + `op` is one of the comp node records (frontend-tests.composable-tests.comp.nodes); + `situation` provides cross-file context (e.g. the library id) for ops that need + it. + + Each operation is realised with the SAME production change builder the common + node uses, but wrapped in the real workspace event (so it commits to the store + and the watcher auto-propagates): + ChangeProperty -> update-shapes (generate-update-shapes; n/set-property) + MoveChild -> relocate-shapes (generate-relocate, existing shape) + AddChild -> add-shape (create a shape under the parent) + RemoveChild -> delete-shapes (generate-delete-shapes) + SyncFromLibrary -> sync-file (the cross-file library-update action, H) + Undo -> dwu/undo (reverse the previous operation(s), I) + (In-file propagation is automatic — the watcher — so no propagate op exists.)" + [op situation] + (cond + (instance? n/ChangeProperty op) + (let [{:keys [target property value]} op] + ;; `target` may be a ROLE (resolved via the situation, so the edit follows + ;; the role as make-nested-component re-points it) or a label — same dual resolution + ;; as the common ChangeProperty. The edit uses the SHARED `n/set-property`. + [(dwsh/update-shapes #{(tm/target-shape-id situation target)} + (fn [shape] (n/set-property shape property value)))]) + + (instance? n/SwapComponent op) + ;; Swap lineage `name`'s nesting level `level` for lineage `target`'s component + ;; via the REAL swap event (dwl/component-swap), so it commits through the + ;; normal path and the watcher AUTOMATICALLY propagates the swap to copies + ;; (incl. the deeper nesting levels). This is the behaviour under test. + (let [{:keys [name level target keep-touched?]} op + file-id (:id (tm/file situation)) + nested (n/lineage-nesting situation name level) + shape (tm/shape-by-id situation (:nested-head nested)) + target-id (n/lineage-component-id situation target)] + [(dwl/component-swap shape file-id target-id (boolean keep-touched?))]) + + (instance? n/SwitchVariant op) + ;; The variant-switch action: switch the resolved variant copy head to the + ;; sibling member whose selector property (pos 0) has `value`, via the REAL + ;; `variants-switch` event (which discovers the sibling in the variant container + ;; and routes through component-swap keep-touched? true, so the watcher + ;; auto-propagates the switch across nesting levels exactly like a swap). `target` + ;; uses the standard resolution (role | label | (situation -> id) fn), so the op + ;; is structure-blind. + (let [{:keys [target value]} op + head-id (tm/target-shape-id situation target) + shape (tm/shape-by-id situation head-id)] + [(dwv/variants-switch {:shapes [shape] :pos 0 :val value})]) + + (instance? n/MoveChild op) + (let [{:keys [target parent to-index]} op] + [(dwsh/relocate-shapes #{(cthi/id target)} (cthi/id parent) to-index)]) + + (instance? n/RemoveChild op) + (let [{:keys [target]} op] + [(dwsh/delete-shapes #{(cthi/id target)})]) + + (instance? n/AddChild op) + (let [{:keys [parent new-label shape-params]} op] + [(dwsh/add-shape (add-child->shape parent new-label shape-params) + {:no-select? true})]) + + (instance? n/SyncFromLibrary op) + ;; The cross-file library-update action: sync the current (consuming) file + ;; from its linked library — exactly what the "library updated" dialog does. + (let [file-id (:current-file-id @st/state) + library-id (first (keys (tm/aux-files situation)))] + [(dwl/sync-file file-id library-id)]) + + (instance? n/Undo op) + ;; Reverse the previous operation(s) via the real undo event. The workspace + ;; undo stack was maintained automatically by the prior ops' commits. + [dwu/undo] + + :else + (throw (ex-info (str "op->events: no frontend realisation for " (pr-str (type op))) + {:op op})))) + +;; -------------------------------------------------------------------------- +;; (2) Async interpreter +;; -------------------------------------------------------------------------- + +(def ^:private settle-debounce-ms + "Resolve a step once the store's commit stream has been idle this long. This + captures the edit commit AND the watcher's follow-up sync commit, without a + fixed total delay. (Provisional: a fully deterministic per-op stopper would + await that op's specific component-changed/sync; debounce-idle is robust enough + for now.)" + 60) + +(def ^:private settle-timeout-ms 2000) + +(defn- install-situation-event + "An UpdateEvent installing the situation's files into the (global) store: the + primary file as the current/workspace file, plus any AUXILIARY files (e.g. a + linked library, for the cross-file case H) alongside in `:files`, each tagged + `:library-of` the current file so the library-sync machinery treats them as + linked libraries." + [situation] + (let [file (tm/file situation) + aux (tm/aux-files situation)] + (ptk/reify ::install-file-event + ptk/UpdateEvent + (update [_ state] + (assoc state + :current-file-id (:id file) + :current-page-id (cthf/current-page-id file) + :permissions {:can-edit true} + :files (into {(:id file) file} + (map (fn [[lib-id lib]] [lib-id (assoc lib :library-of (:id file))])) + aux)))))) + +(defn- current-file + "Read the live workspace file out of the global store." + [] + (let [st @st/state] + (get-in st [:files (:current-file-id st)]))) + +(defn- await-settle + "Dispatch `events` into the global store, then call `k` once the commit stream + has gone idle (debounced). A hard timeout guarantees progress." + [events k] + (let [stream (ptk/input-stream st/state) + commits (->> stream (rx/filter dch/commit?)) + ;; resolve on first idle gap after a commit, or on timeout + settled (->> commits + (rx/debounce settle-debounce-ms) + (rx/take 1) + (rx/timeout settle-timeout-ms (rx/of :settle/timeout)))] + (rx/subscribe settled (fn [_] (k))) + (doseq [e events] (st/emit! e)))) + +(defn- record-op + "Record an operation's application onto the situation (after its effect settled), + re-reading the file from the store. For a RecordedChoice (one-of), record the + chosen op's application AND the choice under the one-of identity (so the + asserter's `get-choice` works), mirroring `RecordedChoice`'s own `apply-to`." + [situation op] + (let [situation (tm/with-file situation (current-file))] + (if (tm/recorded-choice? op) + (let [chosen (tm/choice-of op) + descriptor (dissoc (into {} chosen) :frontend-tests.composable-tests.core/id)] + (-> situation + ;; record the chosen op under its own identity … + (tm/record-application chosen descriptor) + ;; … and the choice under the one-of's identity, keyed for get-choice + (update :node-data assoc (tm/choice-one-of-id op) {:chosen chosen}) + (update :applied conj (tm/choice-one-of-id op)))) + (let [descriptor (dissoc (into {} op) :frontend-tests.composable-tests.core/id)] + (tm/record-application situation op descriptor))))) + +(defn- op-events + "The workspace events to dispatch for an op unit (a plain op or a one-of's + RecordedChoice — for the latter, the chosen op's events). `situation` provides + cross-file context to ops that need it." + [op situation] + (op->events (if (tm/recorded-choice? op) (tm/choice-of op) op) situation)) + +(defn- install-file-event + "An UpdateEvent that replaces the current file in the (global) store with `file` + (keeping aux files and everything else). Used to write back the result of a + FILE-TRANSFORMING op (see `file-op?`)." + [file] + (ptk/reify ::install-file + ptk/UpdateEvent + (update [_ state] + (-> state + (assoc :current-file-id (:id file) + :current-page-id (cthf/current-page-id file)) + (assoc-in [:files (:id file)] file))))) + +(defn- sync-op? + "Whether `op` is a SYNCHRONOUS, `apply-to`-based operation rather than one that + dispatches a workspace event and needs settling. Two kinds: + - FILE-TRANSFORMING (`make-nested-component`, `skip`): a pure file-value transformation + that arranges the CONFIGURATION (deepens it, re-points roles) — applied by + running `apply-to` against the live store file and writing the result back. + The property under test is still exercised by the SUBSEQUENT real-event ops. + - `Test`: an inline assertion checkpoint — its `apply-to` runs the assertion + against the current situation and returns it unchanged. + Both are handled by `run-sync-op` (no async settle — any store write is a + synchronous UpdateEvent)." + [op] + (let [op (if (tm/recorded-choice? op) (tm/choice-of op) op)] + (or (instance? n/MakeNestedComponent op) + ;; the structural building blocks are also file-transforming: they arrange + ;; the configuration via the shared `apply-to`. ResetCopyInstance is also a + ;; file-op: the real reset event transitively reads browser globals (CSS + ;; vars), so it cannot run headless; the shared apply-to runs the production + ;; reset generator with validation off. + (instance? n/CreateComponent op) + (instance? n/InstantiateCopy op) + (instance? n/ResetCopyInstance op) + ;; the variant container (test-helper assembly) and variant nesting (the + ;; shared nesting helper) are file-transforming sync-ops; the SWITCH is the + ;; real `variants-switch` workspace event (handled by op->events), not here. + (instance? n/MakeVariantContainer op) + (instance? n/MakeNestedComponentWithVariant op) + (instance? tm/Skip op) + (instance? tm/Test op)))) + +(defn- run-sync-op + "Apply a synchronous (`sync-op?`) operation: run its shared `apply-to` against a + situation whose `:file` is the live store file, write the resulting file back + into the store, and return the updated situation (with any re-pointed roles). + For `Test` this runs the inline assertion (against the live store state) and the + file is unchanged; for `make-nested-component`/`skip` it writes back the transformed file. + Synchronous." + [situation op] + (let [op' (if (tm/recorded-choice? op) (tm/choice-of op) op) + situation (tm/with-file situation (current-file)) + situation (tm/apply-to op' situation)] + (st/emit! (install-file-event (tm/file situation))) + ;; record the choice too, if this came wrapped in a one-of + (if (tm/recorded-choice? op) + (-> situation + (update :node-data assoc (tm/choice-one-of-id op) {:chosen op'}) + (update :applied conj (tm/choice-one-of-id op))) + situation))) + +(defn- op-grace-ms + "Extra wait AFTER an event-op has settled, before proceeding. Zero for all ops + except `SyncFromLibrary`: the production `sync-file` event additionally + schedules `rx/timer 3000` + an `:update-file-library-sync-status` RPC. There is + no backend in the headless runner, so that delayed call fails (benignly) — but + 3s after the sync it would land INSIDE whatever test is then running, leaking + an error trace across test boundaries (and historically destabilising + whole-suite runs). Waiting it out here absorbs the failure within the test that + caused it." + [op] + (let [op (if (tm/recorded-choice? op) (tm/choice-of op) op)] + (if (instance? n/SyncFromLibrary op) 3200 0))) + +(defn- run-ops + "Async fold over `ops` (concrete operation units, in order — plain ops and/or + one-of RecordedChoice wrappers). Threads the situation. A SYNCHRONOUS op + (`sync-op?` — file-transforming or an inline `Test`) is applied synchronously + via `apply-to`; every other op dispatches its real workspace event(s) and awaits + settlement (plus a per-op grace period, see `op-grace-ms`). The file is re-read + from the store after each. Calls `k` with the final situation." + [situation ops k] + (if (empty? ops) + (k situation) + (let [op (first ops)] + (if (sync-op? op) + (run-ops (run-sync-op situation op) (rest ops) k) + (await-settle + (op-events op situation) + (fn [] + (let [continue #(run-ops (record-op situation op) (rest ops) k) + grace (op-grace-ms op)] + (if (pos? grace) + (js/setTimeout continue grace) + (continue))))))))) + +(defn- watch-undo-stack + "Maintain the workspace UNDO STACK in the (global) store, mirroring the + production subscription in `app.main.data.workspace/initialize-workspace`: + for every local commit with `save-undo?` and non-empty `:undo-changes`, dispatch + `dwu/append-undo`. We start this in the harness because the minimal store setup + does not run the full `initialize-workspace` (which is where the real app wires + it). Re-emitting this event stops any previous instance (so re-install per + variant does not stack watchers)." + [] + (ptk/reify ::watch-undo-stack + ptk/WatchEvent + (watch [_ _ stream] + (let [stopper-s (->> stream (rx/filter (ptk/type? ::watch-undo-stack)))] + (->> stream + (rx/filter dch/commit?) + (rx/map deref) + (rx/filter #(= :local (:source %))) + (rx/mapcat + (fn [{:keys [save-undo? undo-changes redo-changes undo-group tags stack-undo? selected-before]}] + (if (and save-undo? (seq undo-changes)) + (rx/of (dwu/append-undo + {:undo-changes undo-changes + :redo-changes redo-changes + :undo-group undo-group + :tags tags + :selected-before selected-before} + stack-undo?)) + (rx/empty)))) + (rx/take-until stopper-s)))))) + +(defonce ^:private original-store + ;; Captured at namespace-LOAD time — i.e. before any test in the run executes. + ;; Several test namespaces (the plugins suite) `set!` st/state / st/stream to + ;; isolated stores and never restore them. That silently kills this harness: + ;; the refs in `app.main.refs` (through which `watch-component-changes` + ;; observes commits) are okulary lenses bound to THIS atom instance at load + ;; time, so once the var points elsewhere, our events commit to a store the + ;; watcher does not see and propagation dies with no error. Re-installing the + ;; original per variant makes the harness immune to run order. + {:state st/state :stream st/stream}) + +(defn- restore-global-store! + "Point st/state / st/stream back at the load-time originals (see + `original-store`)." + [] + (set! st/state (:state original-store)) + (set! st/stream (:stream original-store))) + +(defn- run-variant + "Set up one variant on the global store and run its ops. `setup` returns a + situation (file + roles). Restores the global store (a preceding namespace may + have swapped it), installs the file + starts the watcher, then folds the ops. + Calls `k` with the final situation." + [setup ops k] + ;; fresh label space per variant (mirrors the pure `tm/run-all`) + (cthi/reset-idmap!) + (restore-global-store!) + (let [situation (setup)] + (st/emit! (install-situation-event situation)) + (st/emit! (dwl/watch-component-changes)) + (st/emit! (watch-undo-stack)) + (run-ops situation ops k))) + +;; -------------------------------------------------------------------------- +;; (3) Test-facing check +;; -------------------------------------------------------------------------- + +(defn check + "Frontend `check`: run `case-map` ({:setup :operation}) through the REAL app and, + if `asserter` is given, apply it (a situation -> any fn performing assertions) + to the resulting situation of EACH enumerated variant. Async — `done` is the + cljs.test async callback and MUST be called when finished. + + Assertions may be INLINE (via `Test` operations in the `:operation` sequence, + firing as the op runs) and/or via the trailing `asserter`; `asserter` is + optional (omit when all assertions are inline). The asserter closes over node + references the test holds (e.g. `has-property-of` on a change node). In-file + propagation is AUTOMATIC (the watcher) — no propagate op is added. + + Arities: `(check done case-map)` or `(check done case-map asserter)`." + ([done case-map] (check done case-map nil)) + ([done {:keys [setup operation]} asserter] + (let [variants (tm/enumerate operation)] + (letfn [(run-next [vs] + (if (empty? vs) + (done) + (run-variant + setup + ;; a variant is a composed operation; flatten to its ordered leaf + ;; ops. `enumerate` already removed all one-of choices, so the + ;; variant is a Sequence (or a single op). + (tm/sequence-ops (first vs)) + (fn [situation] + (when asserter + (t/testing (str "operations:\n " (tm/describe-applied situation)) + (asserter situation))) + (run-next (rest vs))))))] + (run-next variants))))) diff --git a/frontend/test/frontend_tests/helpers/wasm.cljs b/frontend/test/frontend_tests/helpers/wasm.cljs index 497b4c22f1..4529e34582 100644 --- a/frontend/test/frontend_tests/helpers/wasm.cljs +++ b/frontend/test/frontend_tests/helpers/wasm.cljs @@ -202,9 +202,13 @@ (set! wasm.fonts/get-content-fonts mock-get-content-fonts)) (defn teardown-wasm-mocks! - "Restore the original WASM functions saved by `setup-wasm-mocks!`." + "Restore the original WASM functions saved by `setup-wasm-mocks!`. + No-op when there is nothing to restore (`originals` empty): restoring from an + empty snapshot would `set!` every WASM function to nil, breaking any later + code that calls them (e.g. a leaked debounced event firing during a + subsequent test namespace)." [] - (let [orig @originals] + (when-let [orig (not-empty @originals)] (set! wasm.api/initialized? (:initialized? orig)) (set! wasm.api/use-shape (:use-shape orig)) (set! wasm.api/calculate-position-data (:calculate-position-data orig)) diff --git a/frontend/test/frontend_tests/runner.cljs b/frontend/test/frontend_tests/runner.cljs index b6f1a32a80..2adae3e61e 100644 --- a/frontend/test/frontend_tests/runner.cljs +++ b/frontend/test/frontend_tests/runner.cljs @@ -6,6 +6,7 @@ [clojure.tools.cli :refer [parse-opts]] [frontend-tests.basic-shapes-test] [frontend-tests.code-gen-style-test] + [frontend-tests.composable-tests.comp.sync-test] [frontend-tests.copy-as-svg-test] [frontend-tests.data.nitrate-test] [frontend-tests.data.repo-test] @@ -79,6 +80,7 @@ (def test-namespaces ['frontend-tests.basic-shapes-test 'frontend-tests.code-gen-style-test + 'frontend-tests.composable-tests.comp.sync-test 'frontend-tests.copy-as-svg-test 'frontend-tests.data.nitrate-test 'frontend-tests.data.repo-test From a006a12ab6929804af918ec1f5c845d0aeab8b51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elena=20Torr=C3=B3?= Date: Fri, 10 Jul 2026 12:33:59 +0200 Subject: [PATCH 076/229] :bug: Fix render stroke caps on drag (#10634) --- render-wasm/src/shapes.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/render-wasm/src/shapes.rs b/render-wasm/src/shapes.rs index 92d49c7c30..5dfbe9e384 100644 --- a/render-wasm/src/shapes.rs +++ b/render-wasm/src/shapes.rs @@ -1132,6 +1132,10 @@ impl Shape { .fold(0.0, f32::max) } + pub fn has_cap_bounds(&self) -> bool { + self.cap_bounds_margin() > 0.0 + } + pub fn mask_id(&self) -> Option<&Uuid> { self.children.first() } @@ -1452,7 +1456,8 @@ impl Shape { } } - self.blur.is_none() + !self.has_cap_bounds() + && self.blur.is_none() && self.background_blur.is_none() && self.shadows.is_empty() && (self.opacity - 1.0).abs() <= 1e-4 From c11d3aaaa74d42e7c9a4a4a87c35445f5e58982c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elena=20Torr=C3=B3?= Date: Tue, 14 Jul 2026 10:26:19 +0200 Subject: [PATCH 077/229] :bug: Add :stroke-image support to plugins API (#10683) --- frontend/src/app/plugins/format.cljs | 7 ++-- frontend/src/app/plugins/parser.cljs | 4 ++- frontend/src/app/plugins/strokes.cljs | 10 ++++-- .../src/generated/api-surface.json | 7 ++++ .../src/tests/media.test.ts | 33 +++++++++++++++++++ plugins/libs/plugin-types/index.d.ts | 4 +++ 6 files changed, 60 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/plugins/format.cljs b/frontend/src/app/plugins/format.cljs index 1f0701dd99..8680a6d8a0 100644 --- a/frontend/src/app/plugins/format.cljs +++ b/frontend/src/app/plugins/format.cljs @@ -206,11 +206,13 @@ ;; strokeCapStart?: StrokeCap; ;; strokeCapEnd?: StrokeCap; ;; strokeColorGradient?: Gradient; +;; strokeImage?: ImageData; ;; } (defn format-stroke [{:keys [stroke-color stroke-color-ref-file stroke-color-ref-id stroke-opacity stroke-style stroke-width stroke-alignment - stroke-cap-start stroke-cap-end stroke-color-gradient] :as stroke}] + stroke-cap-start stroke-cap-end stroke-color-gradient + stroke-image] :as stroke}] (when (some? stroke) (obj/without-empty @@ -223,7 +225,8 @@ :strokeAlignment (format-key stroke-alignment) :strokeCapStart (format-key stroke-cap-start) :strokeCapEnd (format-key stroke-cap-end) - :strokeColorGradient (format-gradient stroke-color-gradient)}))) + :strokeColorGradient (format-gradient stroke-color-gradient) + :strokeImage (format-image stroke-image)}))) ;; export interface Blur { diff --git a/frontend/src/app/plugins/parser.cljs b/frontend/src/app/plugins/parser.cljs index 1b9f844c48..cbadff48f4 100644 --- a/frontend/src/app/plugins/parser.cljs +++ b/frontend/src/app/plugins/parser.cljs @@ -214,6 +214,7 @@ ;; strokeCapStart?: StrokeCap; ;; strokeCapEnd?: StrokeCap; ;; strokeColorGradient?: Gradient; +;; strokeImage?: ImageData; ;; } (defn parse-stroke [^js stroke] @@ -228,7 +229,8 @@ :stroke-alignment (-> (obj/get stroke "strokeAlignment") parse-keyword) :stroke-cap-start (-> (obj/get stroke "strokeCapStart") parse-keyword) :stroke-cap-end (-> (obj/get stroke "strokeCapEnd") parse-keyword) - :stroke-color-gradient (-> (obj/get stroke "strokeColorGradient") parse-gradient)}))) + :stroke-color-gradient (-> (obj/get stroke "strokeColorGradient") parse-gradient) + :stroke-image (-> (obj/get stroke "strokeImage") parse-image-data)}))) (defn parse-strokes [^js strokes] diff --git a/frontend/src/app/plugins/strokes.cljs b/frontend/src/app/plugins/strokes.cljs index 59e305d4aa..1a717bb21c 100644 --- a/frontend/src/app/plugins/strokes.cljs +++ b/frontend/src/app/plugins/strokes.cljs @@ -18,7 +18,7 @@ :strokeColor {:get (fn [] (:stroke-color @state)) :set (fn [v] - (swap! state #(-> % (assoc :stroke-color v) (dissoc :stroke-color-gradient))) + (swap! state #(-> % (assoc :stroke-color v) (dissoc :stroke-color-gradient :stroke-image))) (on-change!))} :strokeColorRefFile @@ -62,7 +62,13 @@ (on-change!))] (gradients/gradient-proxy gradient-state gradient-change!)))) :set (fn [v] - (swap! state #(-> % (assoc :stroke-color-gradient (parser/parse-gradient v)) (dissoc :stroke-color))) + (swap! state #(-> % (assoc :stroke-color-gradient (parser/parse-gradient v)) (dissoc :stroke-color :stroke-image))) + (on-change!))} + + :strokeImage + {:get (fn [] (format/format-image (:stroke-image @state))) + :set (fn [v] + (swap! state #(-> % (assoc :stroke-image (parser/parse-image-data v)) (dissoc :stroke-color :stroke-color-gradient))) (on-change!))}))) (defn format-strokes diff --git a/plugins/apps/plugin-api-test-suite/src/generated/api-surface.json b/plugins/apps/plugin-api-test-suite/src/generated/api-surface.json index f61aac311a..0cbb2f8e1d 100644 --- a/plugins/apps/plugin-api-test-suite/src/generated/api-surface.json +++ b/plugins/apps/plugin-api-test-suite/src/generated/api-surface.json @@ -467,6 +467,7 @@ "strokeColorGradient", "strokeColorRefFile", "strokeColorRefId", + "strokeImage", "strokeOpacity", "strokeStyle", "strokeWidth" @@ -7791,6 +7792,12 @@ "kind": "getset", "type": "Gradient", "array": false + }, + "strokeImage": { + "decl": "Stroke", + "kind": "getset", + "type": "ImageData", + "array": false } }, "SvgRaw": { diff --git a/plugins/apps/plugin-api-test-suite/src/tests/media.test.ts b/plugins/apps/plugin-api-test-suite/src/tests/media.test.ts index c05ba336e2..3f4b4b01bb 100644 --- a/plugins/apps/plugin-api-test-suite/src/tests/media.test.ts +++ b/plugins/apps/plugin-api-test-suite/src/tests/media.test.ts @@ -61,6 +61,39 @@ describe.skipIfMocked('Media', () => { expect(fill.fillImage).toBeDefined(); }); + test('an uploaded image can be used as a stroke', async (ctx) => { + const image = await ctx.penpot.uploadMediaData( + 'plugin-stroke', + PNG_1X1, + 'image/png', + ); + const rect = ctx.penpot.createRectangle(); + ctx.board.appendChild(rect); + rect.strokes = [{ strokeWidth: 2, strokeImage: image }]; + + const strokes = rect.strokes; + expect(strokes).toHaveLength(1); + expect(strokes[0].strokeImage).toBeDefined(); + }); + + test('Stroke.strokeImage can be set on a stroke and clears the solid color', async (ctx) => { + const image = await ctx.penpot.uploadMediaData( + 'plugin-stroke-set', + PNG_1X1, + 'image/png', + ); + const rect = ctx.penpot.createRectangle(); + ctx.board.appendChild(rect); + rect.strokes = [{ strokeColor: '#ff0000', strokeWidth: 2 }]; + + // Set strokeImage directly on the stroke (covers Stroke.strokeImage (set)). + const stroke = rect.strokes[0]; + stroke.strokeImage = image; + expect(stroke.strokeImage).toBeDefined(); + // An image stroke replaces the solid color. + expect(stroke.strokeColor).toBeFalsy(); + }); + test('uploadMediaUrl resolves to image data', async (ctx) => { // Needs the backend to fetch an external URL, which may be unavailable in // the headless runner; treat a rejection as an environment limitation. diff --git a/plugins/libs/plugin-types/index.d.ts b/plugins/libs/plugin-types/index.d.ts index 1dbe005a3e..cb53532dd6 100644 --- a/plugins/libs/plugin-types/index.d.ts +++ b/plugins/libs/plugin-types/index.d.ts @@ -4180,6 +4180,10 @@ export interface Stroke { * The optional gradient stroke defined by a Gradient object. */ strokeColorGradient?: Gradient; + /** + * The optional image stroke defined by an ImageData object. + */ + strokeImage?: ImageData; } /** From 95cfbf5f7c4f21766dbfb87a5ff21b02fd7c83e8 Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Tue, 14 Jul 2026 12:42:19 +0200 Subject: [PATCH 078/229] :sparkles: Improve workspace debug sidebar workflow (#10678) --- frontend/src/app/main/data/workspace.cljs | 1 + .../app/main/data/workspace/clipboard.cljs | 9 ++++ .../src/app/main/data/workspace/layout.cljs | 2 +- .../app/main/ui/workspace/context_menu.cljs | 6 +++ .../src/app/main/ui/workspace/sidebar.cljs | 26 ++++------- .../app/main/ui/workspace/sidebar/debug.cljs | 17 ++++++- .../workspace/sidebar/debug_shape_info.cljs | 5 -- .../main/ui/workspace/sidebar/layer_name.cljs | 6 ++- .../main/ui/workspace/sidebar/options.cljs | 46 +++++++++++++++---- frontend/src/app/util/debug.cljs | 21 +++++++-- frontend/translations/en.po | 3 ++ frontend/translations/es.po | 5 +- 12 files changed, 109 insertions(+), 38 deletions(-) diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 67621f3754..fb6245c31c 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -1568,6 +1568,7 @@ (dm/export dwcp/paste-shapes) (dm/export dwcp/paste-data-valid?) (dm/export dwcp/copy-link-to-clipboard) +(dm/export dwcp/copy-id-to-clipboard) (dm/export dwcp/copy-as-image) ;; Drawing diff --git a/frontend/src/app/main/data/workspace/clipboard.cljs b/frontend/src/app/main/data/workspace/clipboard.cljs index c87a5707f9..25c51f2257 100644 --- a/frontend/src/app/main/data/workspace/clipboard.cljs +++ b/frontend/src/app/main/data/workspace/clipboard.cljs @@ -1138,6 +1138,15 @@ (watch [_ _ _] (clipboard/to-clipboard (rt/get-current-href))))) +(defn copy-id-to-clipboard + [id] + (ptk/reify ::copy-id-to-clipboard + ptk/WatchEvent + (watch [_ _ _] + (->> (rx/from (clipboard/to-clipboard id)) + (rx/map (fn [_] + (ntf/info "The id has been copied to the clipboard"))))))) + (defn copy-as-image [] (ptk/reify ::copy-as-image diff --git a/frontend/src/app/main/data/workspace/layout.cljs b/frontend/src/app/main/data/workspace/layout.cljs index 2f04bcfa53..fa8208c0ff 100644 --- a/frontend/src/app/main/data/workspace/layout.cljs +++ b/frontend/src/app/main/data/workspace/layout.cljs @@ -53,7 +53,7 @@ :add #{:tokens}}}) (def valid-options-mode - #{:design :prototype :inspect}) + #{:design :prototype :inspect :debug}) (def default-layout #{:sitemap diff --git a/frontend/src/app/main/ui/workspace/context_menu.cljs b/frontend/src/app/main/ui/workspace/context_menu.cljs index 6931253cd4..6d1384790c 100644 --- a/frontend/src/app/main/ui/workspace/context_menu.cljs +++ b/frontend/src/app/main/ui/workspace/context_menu.cljs @@ -37,6 +37,7 @@ [app.main.ui.ds.foundations.assets.icon :refer [icon*] :as i] [app.main.ui.workspace.sidebar.assets.common :as cmm] [app.util.clipboard :as clipboard] + [app.util.debug :as dbg] [app.util.dom :as dom] [app.util.i18n :refer [tr] :as i18n] [app.util.shape-icon :as usi] @@ -152,6 +153,7 @@ do-copy #(st/emit! (dw/copy-selected)) do-copy-link #(st/emit! (dw/copy-link-to-clipboard)) + do-copy-id #(st/emit! (dw/copy-id-to-clipboard (-> shapes first :id str))) do-cut #(st/emit! (dw/copy-selected) (dw/delete-selected)) @@ -200,6 +202,10 @@ (reset! enabled-paste-props* false))))))] [:* + (when (and (not multiple?) + (dbg/enabled? :show-ids)) + [:> menu-entry* {:title (tr "workspace.shape.menu.copy-id") + :on-click do-copy-id}]) [:> menu-entry* {:title (tr "workspace.shape.menu.copy") :shortcut (sc/get-tooltip :copy) :on-click do-copy}] diff --git a/frontend/src/app/main/ui/workspace/sidebar.cljs b/frontend/src/app/main/ui/workspace/sidebar.cljs index 6e17e7f0c7..c918288270 100644 --- a/frontend/src/app/main/ui/workspace/sidebar.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar.cljs @@ -33,7 +33,6 @@ [app.main.ui.workspace.right-header :refer [right-header*]] [app.main.ui.workspace.sidebar.assets :refer [assets-toolbox*]] [app.main.ui.workspace.sidebar.debug :refer [debug-panel*]] - [app.main.ui.workspace.sidebar.debug-shape-info :refer [debug-shape-info*]] [app.main.ui.workspace.sidebar.history :refer [history-toolbox*]] [app.main.ui.workspace.sidebar.layers :refer [layers-toolbox*]] [app.main.ui.workspace.sidebar.options :refer [options-toolbox*]] @@ -41,7 +40,6 @@ [app.main.ui.workspace.sidebar.sitemap :refer [sitemap*]] [app.main.ui.workspace.sidebar.versions :refer [versions-toolbox*]] [app.main.ui.workspace.tokens.sidebar :refer [tokens-sidebar-tab*]] - [app.util.debug :as dbg] [app.util.dom :as dom] [app.util.i18n :refer [tr]] [rumext.v2 :as mf])) @@ -285,18 +283,16 @@ (let [is-comments? (= drawing-tool :comments) is-history? (contains? layout :document-history) is-inspect? (= section :inspect) - - dbg-shape-panel? (dbg/enabled? :shape-panel) + is-debug? (= section :debug) current-section* (mf/use-state :info) current-section (deref current-section*) can-be-expanded? - (or dbg-shape-panel? - (and (not is-comments?) - (not is-history?) - is-inspect? - (= current-section :code))) + (and (not is-comments?) + (not is-history?) + is-inspect? + (= current-section :code)) {on-pointer-down :on-pointer-down on-lost-pointer-capture :on-lost-pointer-capture @@ -325,15 +321,16 @@ [:aside {:class (stl/css-case :right-settings-bar true :not-expand (not can-be-expanded?) - :expanded (> width right-sidebar-default-width)) + :expanded (or is-debug? (> width right-sidebar-default-width))) :id "right-sidebar-aside" :data-testid "right-sidebar" :data-size (str width) :on-context-menu dom/prevent-default-context-menu - :style {:--right-sidebar-width (if can-be-expanded? - (dm/str width "px") - (dm/str right-sidebar-default-width "px"))}} + :style {:--right-sidebar-width (cond + is-debug? (dm/str right-sidebar-default-max-width "px") + can-be-expanded? (dm/str width "px") + :else (dm/str right-sidebar-default-width "px"))}} (when can-be-expanded? [:div {:class (stl/css :resize-area) @@ -348,9 +345,6 @@ [:div {:class (stl/css :settings-bar-inside)} (cond - dbg-shape-panel? - [:> debug-shape-info*] - is-comments? [:> comments-sidebar* {}] diff --git a/frontend/src/app/main/ui/workspace/sidebar/debug.cljs b/frontend/src/app/main/ui/workspace/sidebar/debug.cljs index 5fbe361490..9e46f48c41 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/debug.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/debug.cljs @@ -18,15 +18,28 @@ [app.util.i18n :refer [tr]] [rumext.v2 :as mf])) +(def ^:private no-reload-options + "Debug options that don't require a page reload to take effect. + These options are handled reactively via okulary subscriptions." + #{:shape-panel + :show-ids + :show-touched}) + (mf/defc debug-panel* [{:keys [class]}] - (let [on-toggle-enabled + (let [;; dbg/state is an okulary atom; deref'ing it makes this component + ;; re-render whenever any debug option is toggled, so checkboxes + ;; reflect the current state without a page reload. + _dbg (mf/deref dbg/state) + + on-toggle-enabled (mf/use-fn (fn [event option] (dom/prevent-default event) (dom/stop-propagation event) (dbg/toggle! option) - (js* "app.main.reinit(true)"))) + (when-not (contains? no-reload-options option) + (js* "app.main.reinit(true)")))) handle-close (mf/use-fn diff --git a/frontend/src/app/main/ui/workspace/sidebar/debug_shape_info.cljs b/frontend/src/app/main/ui/workspace/sidebar/debug_shape_info.cljs index f4b30eea5f..f7c1e84ca9 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/debug_shape_info.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/debug_shape_info.cljs @@ -13,7 +13,6 @@ [app.main.data.workspace :as dw] [app.main.refs :as refs] [app.main.store :as st] - [app.main.ui.ds.product.panel-title :refer [panel-title*]] [debug :as dbg] [rumext.v2 :as mf])) @@ -125,10 +124,6 @@ (map (d/getf objects)))] [:div {:class (stl/css :shape-info)} - [:> panel-title* {:class (stl/css :shape-info-title) - :text "Debug" - :on-close #(dbg/disable! :shape-panel)}] - (if (empty? selected) [:div {:class (stl/css :attrs-container)} "No shapes selected"] (for [[idx current] (d/enumerate selected)] diff --git a/frontend/src/app/main/ui/workspace/sidebar/layer_name.cljs b/frontend/src/app/main/ui/workspace/sidebar/layer_name.cljs index 91e8a1c605..3e4b1ee570 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/layer_name.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/layer_name.cljs @@ -26,7 +26,11 @@ type-comp type-frame component-id is-hidden is-blocked variant-id variant-name variant-properties variant-error on-tab-press ref]}] - (let [edition* (mf/use-state false) + (let [;; Subscribe to dbg/state so the component re-renders when + ;; :show-ids or :show-touched are toggled without a page reload. + _dbg (mf/deref dbg/state) + + edition* (mf/use-state false) edition? (deref edition*) local-ref (mf/use-ref) diff --git a/frontend/src/app/main/ui/workspace/sidebar/options.cljs b/frontend/src/app/main/ui/workspace/sidebar/options.cljs index 5b4619710e..f07dce3891 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options.cljs @@ -21,6 +21,7 @@ [app.main.ui.context :as ctx] [app.main.ui.ds.layout.tab-switcher :refer [tab-switcher*]] [app.main.ui.inspect.right-sidebar :as hrs] + [app.main.ui.workspace.sidebar.debug-shape-info :refer [debug-shape-info*]] [app.main.ui.workspace.sidebar.options.drawing :as drawing] [app.main.ui.workspace.sidebar.options.menus.align :refer [align-options*]] [app.main.ui.workspace.sidebar.options.menus.bool :refer [bool-options*]] @@ -38,6 +39,7 @@ [app.main.ui.workspace.sidebar.options.shapes.rect :as rect] [app.main.ui.workspace.sidebar.options.shapes.svg-raw :as svg-raw] [app.main.ui.workspace.sidebar.options.shapes.text :as text] + [app.util.debug :as dbg] [app.util.i18n :as i18n :refer [tr]] [okulary.core :as l] [rumext.v2 :as mf])) @@ -199,13 +201,17 @@ [:> hrs/right-sidebar* props])) -(def ^:private options-tabs - [{:label (tr "workspace.options.design") - :id "design"} - {:label (tr "workspace.options.prototype") - :id "prototype"} - {:label (tr "workspace.options.inspect") - :id "inspect"}]) +(defn- generate-options-tabs + [] + (cond-> [{:label (tr "workspace.options.design") + :id "design"} + {:label (tr "workspace.options.prototype") + :id "prototype"} + {:label (tr "workspace.options.inspect") + :id "inspect"}] + (dbg/enabled? :shape-panel) + (conj {:label "Debug" + :id "debug"}))) (defn- on-option-tab-change [mode] @@ -225,9 +231,28 @@ options-mode (mf/deref refs/options-mode-global) + ;; dbg/state is an okulary atom; deref'ing it makes this component + ;; re-render when debug options change (e.g. :shape-panel toggle) + ;; so the tabs list is regenerated reactively without a page reload. + dbg-state + (mf/deref dbg/state) + shapes (mf/with-memo [selected objects] - (sequence (keep (d/getf objects)) selected))] + (sequence (keep (d/getf objects)) selected)) + + options-tabs + (generate-options-tabs)] + + (mf/use-effect + (mf/deps dbg-state) + (fn [] + (if (contains? dbg-state :shape-panel) + ;; shape-panel was just enabled: select the debug tab + (on-option-tab-change "debug") + ;; shape-panel was just disabled: if debug tab is active, go back to design + (when (= options-mode :debug) + (on-option-tab-change "design"))))) [:div {:class (stl/css :tool-window)} (if (and (:can-edit permissions) (not render-context-lost?)) @@ -255,7 +280,10 @@ :objects objects :page-id page-id :file-id file-id - :shapes shapes}])] + :shapes shapes}] + + :debug + [:> debug-shape-info*])] [:div {:class (stl/css :element-options :inspect-options :read-only)} [:> inspect-tab* {:page-id page-id diff --git a/frontend/src/app/util/debug.cljs b/frontend/src/app/util/debug.cljs index 6eea87a758..0f8d4471f2 100644 --- a/frontend/src/app/util/debug.cljs +++ b/frontend/src/app/util/debug.cljs @@ -6,9 +6,11 @@ (ns app.util.debug (:require - [app.main.store :as st])) + [app.main.store :as st] + [app.util.storage :as storage] + [okulary.core :as l])) -(defonce state (atom #{#_:events})) +(def ^:private storage-key :app.util.debug/enabled-options) (def options #{;; Displays the bounding box for the shapes @@ -105,6 +107,17 @@ ;; Event times :events-times}) +(defn- load-state + [] + (let [stored (get storage/user storage-key #{})] + (into #{} (filter options) stored))) + +(defonce state (l/atom (load-state))) + +(defn- persist-state! + [state] + (swap! storage/user assoc storage-key state)) + (defn handle-change [] (set! st/*debug-events* (contains? @state :events)) @@ -112,7 +125,9 @@ (when *assert* (handle-change) - (add-watch state :watcher handle-change)) + (add-watch state :watcher handle-change) + (add-watch state :persistence (fn [_ _ _ new-state] + (persist-state! new-state)))) (defn enable! [option] diff --git a/frontend/translations/en.po b/frontend/translations/en.po index e05426f58e..1e1eb52478 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -8779,6 +8779,9 @@ msgstr "Copy as CSS (nested layers)" msgid "workspace.shape.menu.copy-link" msgstr "Copy link" +msgid "workspace.shape.menu.copy-id" +msgstr "Copy id" + #: src/app/main/ui/workspace/context_menu.cljs:219 msgid "workspace.shape.menu.copy-paste-as" msgstr "Copy/Paste as ..." diff --git a/frontend/translations/es.po b/frontend/translations/es.po index cceda3bf52..78c4c51465 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -4629,7 +4629,7 @@ msgid "onboarding.choice.team-up.invite-members" msgstr "Invitar integrantes" msgid "onboarding.choice.team-up.invite-members-desc" -msgstr "" +msgstr "" "Personas de desarrollo, diseño, gestión... todo el mundo es bienvenido. " "Podrás invitar a más gente posteriormente." @@ -8551,6 +8551,9 @@ msgstr "Copiar como CSS (capas anidadas)" msgid "workspace.shape.menu.copy-link" msgstr "Copiar enlace" +msgid "workspace.shape.menu.copy-id" +msgstr "Copiar id" + #: src/app/main/ui/workspace/context_menu.cljs:219 msgid "workspace.shape.menu.copy-paste-as" msgstr "Copiar/Pegar como ..." From c119622ad9fd50d8161cbf7320c4b3fbc0392974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marina=20L=C3=B3pez?= Date: Tue, 14 Jul 2026 12:13:06 +0200 Subject: [PATCH 079/229] :bug: Changed color and text from nitrate banners --- frontend/src/app/main/ui/dashboard/subscription.cljs | 2 +- frontend/src/app/main/ui/dashboard/subscription.scss | 2 +- frontend/translations/en.po | 6 +++--- frontend/translations/es.po | 7 +++---- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/frontend/src/app/main/ui/dashboard/subscription.cljs b/frontend/src/app/main/ui/dashboard/subscription.cljs index bd33bfa998..7021cb9884 100644 --- a/frontend/src/app/main/ui/dashboard/subscription.cljs +++ b/frontend/src/app/main/ui/dashboard/subscription.cljs @@ -200,7 +200,7 @@ [:div {:class (stl/css :nitrate-content)} [:span {:class (stl/css :nitrate-title)} (tr "subscription.dashboard.banner.unlock-features")]] [:div {:class (stl/css :nitrate-content)} - [:span {:class (stl/css :nitrate-info)} (tr "subscription.dashboard.banner.unlock-features-description")] + [:span {:class (stl/css :nitrate-info)} (tr "subscription.dashboard.banner.unlock-features-description-text")] [:> button* {:variant "primary" :type "button" :class (stl/css :nitrate-bottom-button) diff --git a/frontend/src/app/main/ui/dashboard/subscription.scss b/frontend/src/app/main/ui/dashboard/subscription.scss index 653650dd40..16fa856de9 100644 --- a/frontend/src/app/main/ui/dashboard/subscription.scss +++ b/frontend/src/app/main/ui/dashboard/subscription.scss @@ -225,7 +225,7 @@ border-radius: var(--sp-s); flex-direction: column; margin: var(--sp-m) var(--sp-m) 0; - background: var(--color-background-quaternary); + background: var(--color-accent-select); border: $b-1 solid var(--color-accent-primary-muted); padding: var(--sp-l); } diff --git a/frontend/translations/en.po b/frontend/translations/en.po index 1e1eb52478..b5dabef677 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -5771,10 +5771,10 @@ msgid "subscription.dashboard.banner.unlock-features" msgstr "Unlock Enterprise features" #: src/app/main/ui/dashboard/subscription.cljs:203 -msgid "subscription.dashboard.banner.unlock-features-description" +msgid "subscription.dashboard.banner.unlock-features-description-text" msgstr "" -"Set fine-grained permissions and keep your design operations secure, " -"without compromising the open-source freedom your team already loves." +"Set fine-grained permissions and stay in control, " +"without compromising the open-source freedom your team loves." #: src/app/main/ui/dashboard/subscription.cljs:208 msgid "subscription.dashboard.banner.upgrade-nitrate" diff --git a/frontend/translations/es.po b/frontend/translations/es.po index 78c4c51465..6384ee4a9f 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -5628,11 +5628,10 @@ msgid "subscription.dashboard.banner.unlock-features" msgstr "Desbloquea las funciones Enterprise" #: src/app/main/ui/dashboard/subscription.cljs:203 -msgid "subscription.dashboard.banner.unlock-features-description" +msgid "subscription.dashboard.banner.unlock-features-description-text" msgstr "" -"Establece permisos detallados y garantiza la seguridad de tus operaciones " -"de diseño, sin renunciar a la libertad del código abierto que tanto valora " -"tu equipo." +"Establece permisos detallados y mantén el control, " +"sin renunciar a la libertad del código abierto que tanto valora tu equipo." #: src/app/main/ui/dashboard/subscription.cljs:208 msgid "subscription.dashboard.banner.upgrade-nitrate" From 167aa7410f95bce91b9a80059624a3e3d9307f1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Valderrama?= Date: Tue, 14 Jul 2026 14:15:29 +0200 Subject: [PATCH 080/229] :bug: Fix modals for nitrate subscription when unlimited (#10690) --- frontend/src/app/main/ui/dashboard/sidebar.cljs | 16 ++++++++++++++-- .../src/app/main/ui/dashboard/subscription.cljs | 8 ++++---- .../src/app/main/ui/nitrate/nitrate_form.cljs | 3 ++- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/main/ui/dashboard/sidebar.cljs b/frontend/src/app/main/ui/dashboard/sidebar.cljs index bea1060183..269e2a3793 100644 --- a/frontend/src/app/main/ui/dashboard/sidebar.cljs +++ b/frontend/src/app/main/ui/dashboard/sidebar.cljs @@ -315,8 +315,14 @@ (mf/use-fn (mf/deps profile) (fn [] - (if (dnt/is-valid-license? profile) + (cond + (= (get-subscription-type (-> profile :props :subscription)) "unlimited") + (st/emit! (dnt/show-nitrate-popup :nitrate-form {:show-contact-sales-option true})) + + (dnt/is-valid-license? profile) (dnt/go-to-nitrate-ac-create-org) + + :else (st/emit! (dnt/show-nitrate-popup :nitrate-form))))) on-go-to-cc-click @@ -755,8 +761,14 @@ (mf/use-fn (mf/deps profile) (fn [] - (if (dnt/is-valid-license? profile) + (cond + (= (get-subscription-type (-> profile :props :subscription)) "unlimited") + (st/emit! (dnt/show-nitrate-popup :nitrate-form {:show-contact-sales-option true})) + + (dnt/is-valid-license? profile) (dnt/go-to-nitrate-ac-create-org) + + :else (st/emit! (dnt/show-nitrate-popup :nitrate-form)))))] (if show-dropdown? [:div {:class (stl/css :sidebar-org-switch)} diff --git a/frontend/src/app/main/ui/dashboard/subscription.cljs b/frontend/src/app/main/ui/dashboard/subscription.cljs index 7021cb9884..b7a4e9a3e6 100644 --- a/frontend/src/app/main/ui/dashboard/subscription.cljs +++ b/frontend/src/app/main/ui/dashboard/subscription.cljs @@ -162,11 +162,11 @@ handle-click (mf/use-fn - (mf/deps nitrate-license subscription-type) + (mf/deps subscription-type) (fn [] - (if (= subscription-type "unlimited") - (st/emit! (dnt/show-nitrate-popup :nitrate-dialog {:nitrate-license nitrate-license :show-contact-sales-option true})) - (st/emit! (dnt/show-nitrate-popup :nitrate-form))))) + (st/emit! (dnt/show-nitrate-popup :nitrate-form + (when (= subscription-type "unlimited") + {:show-contact-sales-option true}))))) handle-go-to-cc (mf/use-fn dnt/go-to-nitrate-ac-create-org) diff --git a/frontend/src/app/main/ui/nitrate/nitrate_form.cljs b/frontend/src/app/main/ui/nitrate/nitrate_form.cljs index 138b485151..ef973f111f 100644 --- a/frontend/src/app/main/ui/nitrate/nitrate_form.cljs +++ b/frontend/src/app/main/ui/nitrate/nitrate_form.cljs @@ -24,7 +24,8 @@ ::mf/wrap-props true} [connectivity] - (let [online? (:licenses connectivity) + (let [show-contact-sales-option (:show-contact-sales-option connectivity) + online? (and (:licenses connectivity) (not show-contact-sales-option)) profile (mf/deref refs/profile) on-click (mf/use-fn From 22034825315ec388ea5273a1300979d3d879be58 Mon Sep 17 00:00:00 2001 From: DoubleCat Date: Mon, 13 Jul 2026 14:29:18 +0200 Subject: [PATCH 081/229] :globe_with_meridians: Add translations for: Chinese (Simplified Han script) Currently translated at 100.0% (2369 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/zh_Hans/ --- frontend/translations/zh_CN.po | 3456 +++++++++++++++++++++++++------- 1 file changed, 2754 insertions(+), 702 deletions(-) diff --git a/frontend/translations/zh_CN.po b/frontend/translations/zh_CN.po index 87c921e009..2bc4b19499 100644 --- a/frontend/translations/zh_CN.po +++ b/frontend/translations/zh_CN.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-07-02 01:01+0000\n" +"PO-Revision-Date: 2026-07-14 13:01+0000\n" "Last-Translator: DoubleCat \n" "Language-Team: Chinese (Simplified Han script) \n" @@ -9,7 +9,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 2026.7.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" #: src/app/main/ui/auth/register.cljs:214, src/app/main/ui/static.cljs:180, src/app/main/ui/viewer/login.cljs:100 msgid "auth.already-have-account" @@ -18,12 +18,12 @@ msgstr "已经有账号了?" #: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 #, unused msgid "auth.check-mail" -msgstr "请检查您的邮箱" +msgstr "请检查你的邮箱" #: src/app/main/ui/auth/register.cljs:277 #, unused msgid "auth.check-your-email" -msgstr "请检查您的邮箱,点击邮件中的链接来验证,然后开始使用Penpot。" +msgstr "请检查你的邮箱,点击邮件中的链接完成验证,然后开始使用 Penpot。" #: src/app/main/ui/auth/recovery.cljs:67 msgid "auth.confirm-password" @@ -40,7 +40,7 @@ msgstr "只是想试试?" #: src/app/main/ui/auth/login.cljs:40 msgid "auth.demo-warning" -msgstr "这是一个演示服务,请【不要】用于真实工作,这些项目将被周期性地抹除。" +msgstr "这是演示服务,请勿用于实际工作。项目会被定期清除。" #: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:86 msgid "auth.forgot-password" @@ -65,27 +65,27 @@ msgstr "登录" #: src/app/main/ui/auth/login.cljs:273 msgid "auth.login-tagline" -msgstr "Penpot是一款自由开源的设计工具,用于「设计」和「开发」协同" +msgstr "Penpot 是一款用于设计与代码协作的自由开源设计工具" #: src/app/main/ui/auth/login.cljs:230 msgid "auth.login-with-github-submit" -msgstr "GitHub登录" +msgstr "使用 GitHub 登录" #: src/app/main/ui/auth/login.cljs:236 msgid "auth.login-with-gitlab-submit" -msgstr "GitLab登录" +msgstr "使用 GitLab 登录" #: src/app/main/ui/auth/login.cljs:224 msgid "auth.login-with-google-submit" -msgstr "Google登录" +msgstr "使用 Google 登录" #: src/app/main/ui/auth/login.cljs:209 msgid "auth.login-with-ldap-submit" -msgstr "LDAP登录" +msgstr "使用 LDAP 登录" #: src/app/main/ui/auth/login.cljs:242 msgid "auth.login-with-oidc-submit" -msgstr "OpenID登录" +msgstr "使用 OpenID 登录" #: src/app/main/ui/auth/recovery.cljs:60 msgid "auth.new-password" @@ -97,7 +97,7 @@ msgstr "密码修改成功" #: src/app/main/ui/auth/recovery_request.cljs:50 msgid "auth.notifications.profile-not-verified" -msgstr "个人资料未验证,请于验证后继续。" +msgstr "个人资料尚未验证,请验证后再继续。" #: src/app/main/ui/auth/recovery_request.cljs:33 msgid "auth.notifications.recovery-token-sent" @@ -113,7 +113,7 @@ msgstr "密码" #: src/app/main/ui/auth/register.cljs:174 msgid "auth.password-length-hint" -msgstr "至少8位字符" +msgstr "至少 8 个字符" #: src/app/main/ui/auth/register.cljs:259 msgid "auth.privacy-policy" @@ -125,7 +125,7 @@ msgstr "找回密码" #: src/app/main/ui/auth/recovery_request.cljs:95 msgid "auth.recovery-request-subtitle" -msgstr "我们将给你发送一封带有说明的电子邮件" +msgstr "我们会向你发送一封包含操作说明的邮件" #: src/app/main/ui/auth/recovery_request.cljs:94 msgid "auth.recovery-request-title" @@ -141,11 +141,11 @@ msgstr "现在还没有账号?" #: src/app/main/ui/auth/register.cljs:352 msgid "auth.register-account-tagline" -msgstr "让我们知道在仪表板和电子邮件中如何称呼您。" +msgstr "请告诉我们在仪表板和邮件中该如何称呼你。" #: src/app/main/ui/auth/register.cljs:351 msgid "auth.register-account-title" -msgstr "您的昵称" +msgstr "你的姓名" #: src/app/main/ui/auth/login.cljs:290, src/app/main/ui/auth/register.cljs:186, src/app/main/ui/auth/register.cljs:339, src/app/main/ui/static.cljs:170, src/app/main/ui/viewer/login.cljs:93 msgid "auth.register-submit" @@ -154,7 +154,9 @@ msgstr "创建账号" #: src/app/main/ui/auth/register.cljs:124 #, unused msgid "auth.register-tagline" -msgstr "拥有一个Penpot的免费账户,您可以创建任意多的团队并与其他设计师和开发人员在任意数量的项目中协作。 " +msgstr "" +"注册免费的 Penpot 账号后,你可以创建任意数量的团队,并与其他设计师和开发者在" +"任意数量的项目中协作。 " #: src/app/main/ui/auth/register.cljs:205 msgid "auth.register-title" @@ -163,25 +165,25 @@ msgstr "创建账号" #: src/app/main/ui/auth.cljs #, unused msgid "auth.sidebar-tagline" -msgstr "设计与原型的开源解决方案。" +msgstr "面向大规模数字产品开发团队的开源设计平台。" #: src/app/main/ui/auth/register.cljs:50 #, markdown msgid "auth.terms-and-privacy-agreement" -msgstr "我同意 [服务条款](%s) 与 [隐私政策](%s)。" +msgstr "我同意[服务条款](%s)和[隐私政策](%s)。" #: src/app/main/ui/auth/register.cljs:251, src/app/main/ui/dashboard/sidebar.cljs:1221, src/app/main/ui/workspace/main_menu.cljs:205 msgid "auth.terms-of-service" -msgstr "服务协议" +msgstr "服务条款" #, unused msgid "auth.terms-privacy-agreement" -msgstr "创建账号意味着您认可我们的服务条例和隐私政策。" +msgstr "创建新账号即表示你同意我们的服务条款和隐私政策。" #: src/app/main/ui/auth/register.cljs:238 #, unused msgid "auth.verification-email-sent" -msgstr "我们已经发送了一封验证邮件到" +msgstr "我们已将验证邮件发送至" #: src/app/main/ui/auth/login.cljs:178, src/app/main/ui/auth/recovery_request.cljs:77, src/app/main/ui/auth/register.cljs:168 msgid "auth.work-email" @@ -202,19 +204,19 @@ msgstr "发布" #: src/app/main/ui/viewer/share_link.cljs:305, src/app/main/ui/viewer/share_link.cljs:315 msgid "common.share-link.all-users" -msgstr "所有Penpot用户" +msgstr "所有 Penpot 用户" #: src/app/main/ui/viewer/share_link.cljs:199 msgid "common.share-link.confirm-deletion-link-description" -msgstr "你确定要移除链接?那么任何人都无法再访问它" +msgstr "确定要移除此链接吗?移除后,任何人都无法再通过此链接访问" #: src/app/main/ui/viewer/share_link.cljs:260, src/app/main/ui/viewer/share_link.cljs:290 msgid "common.share-link.current-tag" -msgstr "(当前)" +msgstr "(当前)" #: src/app/main/ui/viewer/share_link.cljs:208, src/app/main/ui/viewer/share_link.cljs:215 msgid "common.share-link.destroy-link" -msgstr "去除链接" +msgstr "移除链接" #: src/app/main/ui/viewer/share_link.cljs:222 msgid "common.share-link.get-link" @@ -231,8 +233,8 @@ msgstr "权限管理" #: src/app/main/ui/viewer/share_link.cljs:278 msgid "common.share-link.page-shared" msgid_plural "common.share-link.page-shared" -msgstr[0] "1页已共享" -msgstr[1] "%s页已共享" +msgstr[0] "已共享 1 个页面" +msgstr[1] "已共享 %s 个页面" #: src/app/main/ui/viewer/share_link.cljs:299 msgid "common.share-link.permissions-can-comment" @@ -240,7 +242,7 @@ msgstr "可评论" #: src/app/main/ui/viewer/share_link.cljs:309 msgid "common.share-link.permissions-can-inspect" -msgstr "可审查代码" +msgstr "可检查代码" #: src/app/main/ui/viewer/share_link.cljs:194 msgid "common.share-link.permissions-hint" @@ -256,7 +258,7 @@ msgstr "可分享的链接会在此处显示" #: src/app/main/ui/viewer/share_link.cljs:304, src/app/main/ui/viewer/share_link.cljs:314 msgid "common.share-link.team-members" -msgstr "只团队成员" +msgstr "仅团队成员" #: src/app/main/ui/viewer/share_link.cljs:172 msgid "common.share-link.title" @@ -264,11 +266,11 @@ msgstr "分享原型" #: src/app/main/ui/viewer/share_link.cljs:270 msgid "common.share-link.view-all" -msgstr "选择所有" +msgstr "全选" #: src/app/main/ui/workspace/libraries.cljs:344 msgid "common.unpublish" -msgstr "未发布" +msgstr "取消发布" #: src/app/main/ui/dashboard/projects.cljs:90 msgid "dasboard.team-hero.management" @@ -276,16 +278,16 @@ msgstr "团队管理" #: src/app/main/ui/dashboard/projects.cljs:89 msgid "dasboard.team-hero.text" -msgstr "Penpot是为团队协作而设计,邀请成员合作处理项目和文件" +msgstr "Penpot 专为团队协作而设计。邀请成员共同处理项目和文件" #: src/app/main/ui/dashboard/projects.cljs:87 msgid "dasboard.team-hero.title" -msgstr "组建团队!" +msgstr "组建团队!" #: src/app/main/ui/dashboard/projects.cljs #, unused msgid "dasboard.tutorial-hero.info" -msgstr "通过有趣的实践教程学习Penpot的基础知识。" +msgstr "通过有趣的实践教程学习 Penpot 基础知识。" #: src/app/main/ui/dashboard/projects.cljs #, unused @@ -300,7 +302,7 @@ msgstr "实践教程" #: src/app/main/ui/dashboard/projects.cljs #, unused msgid "dasboard.walkthrough-hero.info" -msgstr "浏览Penpot, 了解其主要功能。" +msgstr "浏览 Penpot,了解其主要功能。" #: src/app/main/ui/dashboard/projects.cljs #, unused @@ -314,11 +316,11 @@ msgstr "界面浏览" #: src/app/main/ui/dashboard/placeholder.cljs:40 msgid "dashboard.add-file" -msgstr "新增文件" +msgstr "添加文件" #: src/app/main/ui/dashboard/file_menu.cljs:323, src/app/main/ui/workspace/main_menu.cljs:695 msgid "dashboard.add-shared" -msgstr "新增为共享库" +msgstr "添加为共享库" #: src/app/main/ui/settings/profile.cljs:75 msgid "dashboard.change-email" @@ -338,7 +340,7 @@ msgstr "固定此版本" #: src/app/main/ui/components/context_menu_a11y.cljs:300, src/app/main/ui/dashboard/sidebar.cljs:882 msgid "dashboard.default-team-name" -msgstr "你的Penpot" +msgstr "你的 Penpot" #: src/app/main/ui/dashboard/sidebar.cljs:588, src/app/main/ui/dashboard/team_form.cljs:153 msgid "dashboard.delete-team" @@ -346,12 +348,12 @@ msgstr "删除团队" #: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/workspace/main_menu.cljs:732 msgid "dashboard.download-binary-file" -msgstr "下载Penpot文件 (.penpot)" +msgstr "下载 Penpot 文件(.penpot)" #: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:712 #, unused msgid "dashboard.download-standard-file" -msgstr "下载标准文件(.svg + .json)" +msgstr "下载标准文件(.svg + .json)" #: src/app/main/ui/dashboard/file_menu.cljs:305, src/app/main/ui/dashboard/project_menu.cljs:92 msgid "dashboard.duplicate" @@ -381,15 +383,15 @@ msgstr "还没有文件。" #, markdown msgid "dashboard.empty-placeholder-libraries" msgstr "" -"添加至项目的库将显示在这里。您可以尝试共享您的文件,或从我们的[库和模板](https://penpot.app/libraries-" -"templates)添加。" +"添加到项目的库会显示在这里。你可以尝试共享文件,或从我们的[库和模板](https://" +"penpot.app/libraries-templates)中添加。" #: src/app/main/ui/dashboard/placeholder.cljs #, markdown, unused msgid "dashboard.empty-placeholder-libraries-subtitle" msgstr "" -"添加至项目的库将显示在这里。您可以尝试共享您的文件,或从我们的[库和模板](https://penpot.app/libraries-" -"templates)添加。" +"添加到项目的库会显示在这里。你可以尝试共享文件,或从我们的[库和模板](https://" +"penpot.app/libraries-templates)中添加。" #: src/app/main/ui/dashboard/placeholder.cljs:113 msgid "dashboard.empty-placeholder-libraries-subtitle-viewer-role" @@ -401,7 +403,7 @@ msgstr "还没有库。" #: src/app/main/ui/dashboard/placeholder.cljs:58 msgid "dashboard.empty-project.add-library" -msgstr "新增一个库或一个模版" +msgstr "添加库或模板" #: src/app/main/ui/dashboard/placeholder.cljs:42, src/app/main/ui/dashboard/placeholder.cljs:133 msgid "dashboard.empty-project.create" @@ -409,19 +411,19 @@ msgstr "创建新文件" #: src/app/main/ui/dashboard/placeholder.cljs:60 msgid "dashboard.empty-project.explore" -msgstr "浏览并新增" +msgstr "浏览可添加的内容" #: src/app/main/ui/dashboard/placeholder.cljs:56 msgid "dashboard.empty-project.go-to-libraries" -msgstr "转至库和模版" +msgstr "前往库和模板" #: src/app/main/ui/dashboard/placeholder.cljs:48, src/app/main/ui/dashboard/placeholder.cljs:50 msgid "dashboard.empty-project.import" -msgstr "导入一个文件" +msgstr "导入文件" #: src/app/main/ui/dashboard/placeholder.cljs:52 msgid "dashboard.empty-project.import-penpot" -msgstr "导入一个 .penpot 文件" +msgstr "导入 .penpot 文件" #: src/app/main/ui/dashboard/placeholder.cljs:44 msgid "dashboard.empty-project.start" @@ -429,7 +431,7 @@ msgstr "开始打造惊人的作品" #: src/app/main/ui/dashboard/file_menu.cljs:281 msgid "dashboard.export-binary-multi" -msgstr "下载 %s Penpot文件 (.penpot)" +msgstr "下载 %s 个 Penpot 文件(.penpot)" #: src/app/main/ui/workspace/main_menu.cljs:740 msgid "dashboard.export-frames" @@ -437,15 +439,15 @@ msgstr "将画板导出为 PDF 格式" #: src/app/main/ui/exports/assets.cljs:202 msgid "dashboard.export-frames.title" -msgstr "导出为PDF" +msgstr "导出为 PDF" #, unused msgid "dashboard.export-multi" -msgstr "导出 %s 个文件" +msgstr "导出 %s 个 Penpot 文件" #: src/app/main/ui/exports/assets.cljs:108 msgid "dashboard.export-multiple.selected" -msgstr "已选择 %s / %s 元素" +msgstr "已选择 %s/%s 个元素" #: src/app/main/ui/workspace/main_menu.cljs:723 msgid "dashboard.export-shapes" @@ -453,24 +455,24 @@ msgstr "导出" #: src/app/main/ui/exports/assets.cljs:179 msgid "dashboard.export-shapes.how-to" -msgstr "你可以在设计选项中为元素添加导出设置(位于右侧边栏底部)。" +msgstr "你可以在设计属性中为元素添加导出设置(位于右侧边栏底部)。" #: src/app/main/ui/exports/assets.cljs:183 msgid "dashboard.export-shapes.how-to-link" -msgstr "关于如何使用Penpot导出。" +msgstr "了解如何在 Penpot 中设置导出。" #: src/app/main/ui/exports/assets.cljs:178 msgid "dashboard.export-shapes.no-elements" -msgstr "在导出设置中没找到任何元素。" +msgstr "没有设置为导出的元素。" #: src/app/main/ui/exports/assets.cljs:189 msgid "dashboard.export-shapes.title" -msgstr "导出已选中" +msgstr "导出所选内容" #: src/app/main/ui/dashboard/file_menu.cljs:262 #, unused msgid "dashboard.export-standard-multi" -msgstr "下载 %s 标准文件 (.svg + .json)" +msgstr "下载 %s 个标准文件(.svg + .json)" #: src/app/main/ui/exports/files.cljs:155 #, unused @@ -479,43 +481,45 @@ msgstr "你想导出的一个或多个文件用到了共享库。你想怎么处 #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:336 msgid "dashboard.fonts.deleted-placeholder" -msgstr "字体已删除" +msgstr "缺失字体" #: src/app/main/ui/dashboard/fonts.cljs:235 msgid "dashboard.fonts.dismiss-all" -msgstr "全部取消" +msgstr "全部忽略" #: src/app/main/ui/dashboard/fonts.cljs:495 msgid "dashboard.fonts.empty-placeholder" -msgstr "您上传的自定义字体将显示在此处。" +msgstr "你上传的自定义字体会显示在这里。" #: src/app/main/ui/dashboard/fonts.cljs:498 msgid "dashboard.fonts.empty-placeholder-viewer" -msgstr "还没有定制化的字体。" +msgstr "还没有自定义字体。" #: src/app/main/ui/dashboard/fonts.cljs:499 msgid "dashboard.fonts.empty-placeholder-viewer-sub" -msgstr "一旦项目成员上传定制化的字体,它将会显示在这里。" +msgstr "项目成员上传自定义字体后,字体会显示在这里。" #: src/app/main/ui/dashboard/fonts.cljs:223 msgid "dashboard.fonts.fonts-added" msgid_plural "dashboard.fonts.fonts-added" -msgstr[0] "1 个字体添加成功" -msgstr[1] "%s 个字体添加成功" +msgstr[0] "已添加 1 个字体" +msgstr[1] "已添加 %s 个字体" #: src/app/main/ui/dashboard/fonts.cljs:198 #, markdown msgid "dashboard.fonts.hero-text1" msgstr "" -"你在此上传的任何网络字体文件,将会被添加至本团队下文件的字体属性中的可用字体族列表中。拥有相同字体族名称的字体文件,将会按照字体族进行分组。你可以上传以" -"下格式的字体文件:**TTF,OTF和WOFF**(你只需要上传其中一种即可)。" +"你在这里上传的任何 Web 字体都会添加到此团队所有文件的文本属性中的可用字体家族" +"列表。字体家族名称相同的字体会归为**一个字体家族**。你可以上传以下格式的字体" +":**TTF、OTF 和 WOFF**(只需上传其中一种格式)。" #: src/app/main/ui/dashboard/fonts.cljs:211 #, markdown msgid "dashboard.fonts.hero-text2" msgstr "" -"你应当只向Penpot上传你所拥有的字体,或是你持有使用许可的字体。点击[Penpot服务条例](https://penpot.app/terms." -"html)查看更多有关内容权利的章节。或许你也想了解一下[字体许可授权] (https://www.typography.com/faq)。" +"你应当只向 Penpot 上传你拥有或获准使用的字体。请参阅 [Penpot 服务条款](%s)中" +"的“内容权利”章节了解更多信息。你也可以阅读有关[字体许可](https://" +"www.typography.com/faq)的信息。" #: src/app/main/ui/dashboard/fonts.cljs:231 msgid "dashboard.fonts.upload-all" @@ -525,25 +529,25 @@ msgstr "全部上传" #, markdown msgid "dashboard.fonts.warning-text" msgstr "" -"我们在你的字体中检测到一个可能的问题,与不同操作系统的垂直度量有关。为了检查它,你可以使用字体垂直度量服务,如[这个](https://" -"vertical-metrics.netlify.app/)。此外,我们建议使用[Transfonter](https://transfonter." -"org/)来生成网络字体并修复错误。 " +"我们检测到你的字体可能存在与不同操作系统的垂直度量有关的问题。你可以使用[此字" +"体垂直度量服务](https://vertical-metrics.netlify.app/)进行检查。此外,我们建" +"议使用 [Transfonter](https://transfonter.org/)生成网络字体并修复错误。 " #: src/app/main/ui/dashboard/import.cljs:463, src/app/main/ui/dashboard/project_menu.cljs:109 msgid "dashboard.import" -msgstr "导入文件" +msgstr "导入 Penpot 文件" #: src/app/main/ui/dashboard/import.cljs:290, src/app/worker/import.cljs:138, src/app/worker/import.cljs:141 msgid "dashboard.import.analyze-error" -msgstr "文件无法导入" +msgstr "糟糕!无法导入此文件" #, unused msgid "dashboard.import.analyze-error.components-v2" -msgstr "文件已启用“组件v2”功能,但这个团队尚未支持该功能。" +msgstr "此文件启用了组件 v2,但该团队尚不支持此功能。" #: src/app/main/ui/dashboard.cljs:259 msgid "dashboard.import.bad-url" -msgstr "导入失败,模版 URL 不正确" +msgstr "导入失败。模板 URL 不正确" #: src/app/main/ui/dashboard.cljs:241 #, unused @@ -553,11 +557,11 @@ msgstr "导入失败,请重试" #: src/app/main/ui/dashboard/import.cljs:292 #, unused msgid "dashboard.import.import-error" -msgstr "文件导入过程中出现未知问题,导入失败。" +msgstr "导入文件时出现问题。文件未导入。" #: src/app/main/ui/dashboard/import.cljs:484 msgid "dashboard.import.import-error.disclaimer" -msgstr "不是所有文件都被导入" +msgstr "部分文件未能导入" #: src/app/main/ui/dashboard/import.cljs:488 msgid "dashboard.import.import-error.message1" @@ -570,48 +574,48 @@ msgstr "有错误的文件将不会被上传。" #: src/app/main/ui/dashboard/import.cljs:478 msgid "dashboard.import.import-message" msgid_plural "dashboard.import.import-message" -msgstr[0] "1个文件导入成功。" -msgstr[1] "%s 个文件导入成功。" +msgstr[0] "已成功导入 1 个文件。" +msgstr[1] "已成功导入 %s 个文件。" #: src/app/main/ui/dashboard/import.cljs:473 msgid "dashboard.import.import-warning" -msgstr "一些包含无效对象的文档已被移除。" +msgstr "部分文件包含无效对象,这些对象已被移除。" #: src/app/main/ui/dashboard.cljs:260 msgid "dashboard.import.no-perms" -msgstr "你没有权限导入到此团队" +msgstr "你没有权限将文件导入此团队" #: src/app/main/ui/dashboard/import.cljs:125 msgid "dashboard.import.progress.process-colors" -msgstr "处理颜色中" +msgstr "正在处理颜色" #: src/app/main/ui/dashboard/import.cljs:134, src/app/main/ui/dashboard/import.cljs:137 msgid "dashboard.import.progress.process-components" -msgstr "处理组件中" +msgstr "正在处理组件" #: src/app/main/ui/dashboard/import.cljs:131 msgid "dashboard.import.progress.process-media" -msgstr "处理视频中" +msgstr "正在处理媒体" #: src/app/main/ui/dashboard/import.cljs:122 msgid "dashboard.import.progress.process-page" -msgstr "处理页面中:%s" +msgstr "正在处理页面:%s" #: src/app/main/ui/dashboard/import.cljs:128 msgid "dashboard.import.progress.process-typographies" -msgstr "处理字体中" +msgstr "正在处理排版" #: src/app/main/ui/dashboard/import.cljs:116 msgid "dashboard.import.progress.upload-data" -msgstr "数据上传中" +msgstr "正在将数据上传到服务器(%s/%s)" #: src/app/main/ui/dashboard/import.cljs:119 msgid "dashboard.import.progress.upload-media" -msgstr "文件上传中" +msgstr "正在上传文件:%s" #: src/app/main/ui/dashboard/team.cljs:137, src/app/main/ui/dashboard/team.cljs:829 msgid "dashboard.invite-profile" -msgstr "邀请people" +msgstr "邀请成员" #: src/app/main/ui/dashboard/sidebar.cljs:570, src/app/main/ui/dashboard/sidebar.cljs:577, src/app/main/ui/dashboard/sidebar.cljs:582, src/app/main/ui/dashboard/team.cljs:433 msgid "dashboard.leave-team" @@ -623,7 +627,7 @@ msgstr "库和模板" #: src/app/main/ui/dashboard/templates.cljs:263 msgid "dashboard.libraries-and-templates.description" -msgstr "这里你有一些可以添加至你项目的库和模版" +msgstr "这里列出了可以添加到项目的库和模板" #: src/app/main/ui/dashboard/templates.cljs:167 msgid "dashboard.libraries-and-templates.explore" @@ -635,11 +639,11 @@ msgstr "导入模板时发生错误。模板未导入成功。" #: src/app/main/ui/dashboard/libraries.cljs:68 msgid "dashboard.libraries-title" -msgstr "共享库" +msgstr "库" #: src/app/main/ui/dashboard/placeholder.cljs:142 msgid "dashboard.loading-files" -msgstr "正在加载文档…" +msgstr "正在加载文件…" #: src/app/main/ui/dashboard/fonts.cljs:489 msgid "dashboard.loading-fonts" @@ -647,7 +651,7 @@ msgstr "正在加载字体…" #: src/app/main/data/comments.cljs:481 msgid "dashboard.mark-all-as-read.success" -msgstr "标记所有通知为已读" +msgstr "已将所有通知标为已读" #: src/app/main/ui/dashboard/file_menu.cljs:313, src/app/main/ui/dashboard/project_menu.cljs:101 msgid "dashboard.move-to" @@ -663,7 +667,7 @@ msgstr "移动到其他团队" #: src/app/main/ui/dashboard/files.cljs:106, src/app/main/ui/dashboard/projects.cljs:253, src/app/main/ui/dashboard/projects.cljs:254 msgid "dashboard.new-file" -msgstr "+ 新文档" +msgstr "+ 新文件" #: src/app/main/data/dashboard.cljs:539, src/app/main/data/dashboard.cljs:651 msgid "dashboard.new-file-prefix" @@ -683,7 +687,7 @@ msgstr "没有找到“%s”的匹配项" #: src/app/main/ui/dashboard/sidebar.cljs:1103 msgid "dashboard.no-projects-placeholder" -msgstr "被固定的项目将会显示在这里" +msgstr "固定的项目会显示在这里" #: src/app/main/ui/dashboard/comments.cljs:89 msgid "dashboard.notifications" @@ -691,11 +695,11 @@ msgstr "通知" #: src/app/main/ui/auth/verify_token.cljs:36 msgid "dashboard.notifications.email-changed-successfully" -msgstr "已经成功更新你的电子邮件" +msgstr "电子邮箱地址已成功更新" #: src/app/main/ui/auth/verify_token.cljs:30 msgid "dashboard.notifications.email-verified-successfully" -msgstr "已经成功验证你的电子邮件" +msgstr "电子邮箱地址已成功验证" #: src/app/main/data/profile.cljs:281 msgid "dashboard.notifications.notifications-saved" @@ -703,7 +707,7 @@ msgstr "通知设置已更新" #: src/app/main/ui/settings/password.cljs:38 msgid "dashboard.notifications.password-saved" -msgstr "已经成功保存密码!" +msgstr "密码已成功保存!" #: src/app/main/ui/dashboard/comments.cljs:43 msgid "dashboard.notifications.view" @@ -711,7 +715,7 @@ msgstr "查看通知" #: src/app/main/ui/dashboard/team.cljs:1658 msgid "dashboard.num-of-members" -msgstr "成员%s人" +msgstr "%s 名成员" #: src/app/main/ui/dashboard/file_menu.cljs:296 msgid "dashboard.open-in-new-tab" @@ -731,15 +735,15 @@ msgstr "你现在是此团队的管理员。" #: src/app/main/data/common.cljs:191 msgid "dashboard.permissions-change.editor" -msgstr "你现在是此团队的编辑人员。" +msgstr "你现在是此团队的编辑者。" #: src/app/main/data/common.cljs:193 msgid "dashboard.permissions-change.owner" -msgstr "你现在是此团队的拥有者。" +msgstr "你现在是此团队的所有者。" #: src/app/main/data/common.cljs:190 msgid "dashboard.permissions-change.viewer" -msgstr "你现在是此团队的查看人员。" +msgstr "你现在是此团队的查看者。" #: src/app/main/ui/dashboard/pin_button.cljs:22, src/app/main/ui/dashboard/project_menu.cljs:96 msgid "dashboard.pin-unpin" @@ -755,7 +759,7 @@ msgstr "不能解析插件清单" #: src/app/main/ui/dashboard.cljs:184 msgid "dashboard.plugins.try-plugin" -msgstr "尝试插件 " +msgstr "尝试插件: " #: src/app/main/ui/dashboard/deleted.cljs:63, src/app/main/ui/dashboard/projects.cljs:56 msgid "dashboard.projects-title" @@ -763,7 +767,7 @@ msgstr "项目" #: src/app/main/ui/settings/profile.cljs:86 msgid "dashboard.remove-account" -msgstr "希望注销您的账号?" +msgstr "想要删除账号?" #: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #, unused @@ -796,7 +800,7 @@ msgstr "选择界面主题" #: src/app/main/ui/settings/options.cljs:76 msgid "dashboard.select-ui-theme.dark" -msgstr "Penpot 暗黑模式(缺省)" +msgstr "Penpot 深色模式(默认)" #: src/app/main/ui/settings/options.cljs:77 msgid "dashboard.select-ui-theme.light" @@ -868,7 +872,7 @@ msgstr "通知" #: src/app/main/ui/dashboard/projects.cljs:305 msgid "dashboard.show-all-files" -msgstr "显示全部文档" +msgstr "显示所有文件" #: src/app/main/ui/workspace/main_menu.cljs:713 msgid "dashboard.show-version-history" @@ -877,8 +881,8 @@ msgstr "版本历史" #: src/app/main/ui/dashboard/file_menu.cljs:99 msgid "dashboard.success-delete-file" msgid_plural "dashboard.success-delete-file" -msgstr[0] "您的文件已被成功删除" -msgstr[1] "您的多个文件已被成功删除" +msgstr[0] "文件已成功删除" +msgstr[1] "文件已成功删除" #: src/app/main/ui/dashboard/project_menu.cljs:63 msgid "dashboard.success-delete-project" @@ -887,8 +891,8 @@ msgstr "成功删除了项目" #: src/app/main/ui/dashboard/file_menu.cljs:94 msgid "dashboard.success-duplicate-file" msgid_plural "dashboard.success-delete-file" -msgstr[0] "您的文件已被成功复制" -msgstr[1] "您的多个文件已被成功复制" +msgstr[0] "文件已成功复制" +msgstr[1] "文件已成功复制" #: src/app/main/ui/dashboard/project_menu.cljs:35 msgid "dashboard.success-duplicate-project" @@ -920,7 +924,7 @@ msgstr "团队项目" #: src/app/main/ui/dashboard/templates.cljs:132 msgid "dashboard.template.add-to-project" -msgstr "添加至您的项目" +msgstr "添加到你的项目" #: src/app/main/ui/settings/options.cljs:71 msgid "dashboard.theme-change" @@ -932,7 +936,7 @@ msgstr "搜索结果" #: src/app/main/ui/dashboard/search.cljs:66 msgid "dashboard.type-something" -msgstr "输入关键词进行搜索" +msgstr "输入内容以搜索" #: src/app/main/ui/dashboard/file_menu.cljs:320, src/app/main/ui/workspace/main_menu.cljs:687 msgid "dashboard.unpublish-shared" @@ -940,11 +944,11 @@ msgstr "取消发布库" #: src/app/main/ui/settings/options.cljs:82 msgid "dashboard.update-settings" -msgstr "保存设置" +msgstr "更新设置" #: src/app/main/ui/dashboard/sidebar.cljs:1328 msgid "dashboard.upgrade-plan.no-limits" -msgstr "无创作能力限制" +msgstr "创意不设限" #: src/app/main/ui/dashboard/sidebar.cljs:1326 msgid "dashboard.upgrade-plan.penpot-free" @@ -952,15 +956,15 @@ msgstr "Penpot 免费" #: src/app/main/ui/dashboard/team.cljs:1338 msgid "dashboard.webhooks.active" -msgstr "处于活跃状态" +msgstr "已启用" #: src/app/main/ui/dashboard/team.cljs:1339 msgid "dashboard.webhooks.active.explain" -msgstr "当这个webhook被触发时,事件细节将被传递" +msgstr "触发此 Webhook 时会传递事件详情" #: src/app/main/ui/dashboard/team.cljs:1381 msgid "dashboard.webhooks.cant-edit" -msgstr "您只能删除或修改由您创建的 webhooks。" +msgstr "你只能删除或修改自己创建的 Webhook。" #: src/app/main/ui/dashboard/team.cljs:1329 msgid "dashboard.webhooks.content-type" @@ -968,27 +972,29 @@ msgstr "内容类型" #: src/app/main/ui/dashboard/team.cljs:1361 msgid "dashboard.webhooks.create" -msgstr "创建webhook" +msgstr "创建 Webhook" #: src/app/main/ui/dashboard/team.cljs:1264 msgid "dashboard.webhooks.create.success" -msgstr "Webhook创建成功。" +msgstr "Webhook 创建成功。" #: src/app/main/ui/dashboard/team.cljs:1358 msgid "dashboard.webhooks.description" -msgstr "Webhooks是一种简单的方式,允许其他网站和应用程序在Penpot的某些事件发生时得到通知。我们将发送一个POST请求到你提供的每个URL。" +msgstr "" +"Webhook 是一种让其他网站和应用在 Penpot 中发生特定事件时收到通知的简便方式。" +"我们会向你提供的每个 URL 发送 POST 请求。" #: src/app/main/ui/dashboard/team.cljs:1485 msgid "dashboard.webhooks.empty.add-one" -msgstr "按“添加webhook”按钮添加一个。" +msgstr "点击“添加 Webhook”按钮即可添加。" #: src/app/main/ui/dashboard/team.cljs:1484 msgid "dashboard.webhooks.empty.no-webhooks" -msgstr "到目前为止还没有创建webhook。" +msgstr "尚未创建 Webhook。" #, unused msgid "dashboard.webhooks.update.success" -msgstr "Webhook成功更新。" +msgstr "Webhook 更新成功。" #: src/app/main/ui/settings.cljs:34 msgid "dashboard.your-account-title" @@ -1004,11 +1010,11 @@ msgstr "你的姓名" #: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:46, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:352, src/app/main/ui/dashboard/search.cljs:47, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:616, src/app/main/ui/dashboard/team.cljs:1191, src/app/main/ui/dashboard/team.cljs:1471, src/app/main/ui/dashboard/team.cljs:1577 msgid "dashboard.your-penpot" -msgstr "你的Penpot" +msgstr "你的 Penpot" #: src/app/main/ui/alert.cljs:36 msgid "ds.alert-ok" -msgstr "好" +msgstr "确定" #: src/app/main/ui/alert.cljs:35, src/app/main/ui/alert.cljs:38 msgid "ds.alert-title" @@ -1028,7 +1034,7 @@ msgstr "取消" #: src/app/main/ui/confirm.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:102 msgid "ds.confirm-ok" -msgstr "Ok" +msgstr "确定" #: src/app/main/ui/confirm.cljs:41, src/app/main/ui/confirm.cljs:45 msgid "ds.confirm-title" @@ -1036,7 +1042,7 @@ msgstr "你确定?" #: src/app/main/ui/workspace/tokens/management/forms/controls/utils.cljs:24 msgid "ds.inputs.numeric-input.no-applicable-tokens" -msgstr "活动集合或主题中无可用token。" +msgstr "已启用的令牌集或主题中没有适用的令牌。" #: src/app/main/ui/workspace/tokens/management/forms/controls/utils.cljs:25 msgid "ds.inputs.numeric-input.no-matches" @@ -1044,15 +1050,15 @@ msgstr "无匹配项。" #: src/app/main/ui/ds/controls/numeric_input.cljs:728, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:511, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:146, src/app/main/ui/workspace/tokens/management/forms/controls/combobox.cljs:270 msgid "ds.inputs.numeric-input.open-token-list-dropdown" -msgstr "打开token列表" +msgstr "打开令牌列表" #: src/app/main/data/auth.cljs:346 msgid "errors.auth-provider-not-allowed" -msgstr "认证提供者不允许访问此个人设定" +msgstr "此个人资料不允许使用该身份验证提供商" #: src/app/main/data/auth.cljs:193 msgid "errors.auth-provider-not-configured" -msgstr "没有配置身份认证服务源." +msgstr "未配置身份验证提供商。" #: src/app/main/errors.cljs:238 msgid "errors.auth.unable-to-login" @@ -1060,11 +1066,11 @@ msgstr "你似乎还没有登录或会话已过期。" #: src/app/main/data/fonts.cljs:256, src/app/main/ui/dashboard/fonts.cljs:134, src/app/main/ui/dashboard/fonts.cljs:178 msgid "errors.bad-font" -msgstr "无法加载%s字体" +msgstr "无法加载字体 %s" #: src/app/main/data/fonts.cljs:255 msgid "errors.bad-font-plural" -msgstr "无法加载%s等字体" +msgstr "无法加载字体 %s" #: src/app/main/data/workspace/media.cljs:226 msgid "errors.cannot-upload" @@ -1076,23 +1082,23 @@ msgstr "超出字符限制" #: src/app/main/data/workspace/clipboard.cljs:541 msgid "errors.clipboard-not-implemented" -msgstr "你的浏览器不支持该操作" +msgstr "你的浏览器不支持此操作" #: src/app/main/errors.cljs:346 msgid "errors.comment-error" -msgstr "评论有错误" +msgstr "处理评论时出错" #: src/app/main/errors.cljs:414 msgid "errors.deprecated" -msgstr "抱歉!这是一个使用了已弃用的 Penpot 资源类型的旧文件,您无法打开它。" +msgstr "抱歉!这是一个使用已弃用 Penpot 素材类型的旧文件,你无法打开它。" #: src/app/main/errors.cljs:417 msgid "errors.deprecated.contact.after" -msgstr "所以我们可以帮助你。" +msgstr "链接并向我们说明情况。" #: src/app/main/errors.cljs:415 msgid "errors.deprecated.contact.before" -msgstr "虽然Penpot不再支持此类型的资源,但您可以" +msgstr "虽然 Penpot 不再支持此类素材,但如需帮助,请点击下方的" #: src/app/main/errors.cljs:416 msgid "errors.deprecated.contact.text" @@ -1104,11 +1110,11 @@ msgstr "无法将父集放置到自己的子路径中。" #: src/app/main/ui/auth/register.cljs:103, src/app/main/ui/auth/verify_token.cljs:109, src/app/main/ui/settings/change_email.cljs:29 msgid "errors.email-already-exists" -msgstr "电子邮件已被占用" +msgstr "此电子邮箱已被使用" #: src/app/main/ui/auth/verify_token.cljs:114 msgid "errors.email-already-validated" -msgstr "电子邮件已经验证通过。" +msgstr "电子邮箱已验证。" #: src/app/main/ui/auth/register.cljs:107, src/app/main/ui/settings/password.cljs:29 msgid "errors.email-as-password" @@ -1116,7 +1122,7 @@ msgstr "密码不能为邮箱地址" #: src/app/main/ui/auth/register.cljs:88 msgid "errors.email-does-not-match-invitation" -msgstr "邮件和此邀请不匹配。" +msgstr "电子邮箱与邀请不匹配。" #: src/app/main/data/auth.cljs:348, src/app/main/ui/auth/register.cljs:94, src/app/main/ui/dashboard/team.cljs:223 msgid "errors.email-domain-not-allowed" @@ -1124,15 +1130,15 @@ msgstr "不允许使用此域名" #: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:97, src/app/main/ui/auth/register.cljs:100, src/app/main/ui/dashboard/team.cljs:709, src/app/main/ui/settings/change_email.cljs:37 msgid "errors.email-has-permanent-bounces" -msgstr "电子邮件“%s”收到了非常多的永久退信报告。" +msgstr "电子邮箱 «%s» 有多次永久退信记录。" #: src/app/main/ui/dashboard/team.cljs:219, src/app/main/ui/dashboard/team.cljs:1062, src/app/main/ui/onboarding/team_choice.cljs:121 msgid "errors.email-spam-or-permanent-bounces" -msgstr "此邮箱[%s]已被标记为垃圾邮件或已被永久拉黑。" +msgstr "电子邮箱 «%s» 已被举报为垃圾邮件来源或有永久退信记录。" #: src/app/main/errors.cljs:391 msgid "errors.feature-mismatch" -msgstr "看起来你正在打开一个启用了'%s'功能的文件,但当前penpot版本并不支持该功能或已将其禁用。" +msgstr "你打开的文件启用了“%s”功能,但当前 Penpot 版本不支持或未启用此功能。" #: src/app/main/errors.cljs:395, src/app/main/errors.cljs:409 msgid "errors.feature-not-supported" @@ -1140,7 +1146,7 @@ msgstr "不支持功能“%s”。" #, unused msgid "errors.field-min-length" -msgstr "至少需要包含1个字符。" +msgstr "至少需要包含 1 个字符。" #: src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:471 msgid "errors.field-missing" @@ -1153,11 +1159,13 @@ msgstr "名称必须包含除空格外的其他字符。" #: src/app/main/errors.cljs:387 msgid "errors.file-feature-mismatch" -msgstr "看起来当前启用的功能,与正在打开的文件所依赖的功能不匹配。在打开文件前,需要应用对“%s”修改。" +msgstr "" +"当前启用的功能与要打开的文件所需功能不匹配。必须先对“%s”应用迁移,才能打开此" +"文件。" #: src/app/main/data/auth.cljs:354, src/app/main/errors.cljs:190, src/app/main/ui/auth/login.cljs:103, src/app/main/ui/auth/register.cljs:112, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:119, src/app/main/ui/dashboard/fonts.cljs:386, src/app/main/ui/dashboard/team.cljs:227, src/app/main/ui/dashboard/team.cljs:1065, src/app/main/ui/onboarding/team_choice.cljs:124, src/app/main/ui/settings/feedback.cljs:84, src/app/main/ui/settings/integrations.cljs:156, src/app/main/ui/workspace/main_menu.cljs:971 msgid "errors.generic" -msgstr "发生了某种错误。" +msgstr "出现了问题。" #: src/app/main/errors.cljs:200 #, unused @@ -1166,7 +1174,7 @@ msgstr "内部断言错误" #: src/app/main/errors.cljs:325 msgid "errors.internal-worker-error" -msgstr "web worker 出错。" +msgstr "Web Worker 出错。" #: src/app/main/ui/components/color_input.cljs:51 msgid "errors.invalid-color" @@ -1184,7 +1192,7 @@ msgstr "请输入有效的电子邮件" #: src/app/main/ui/settings/change_email.cljs:62 msgid "errors.invalid-email-confirmation" -msgstr "确认电子邮件必须保持一致" +msgstr "两次输入的电子邮箱必须一致" #: src/app/main/ui/auth/recovery.cljs:32 msgid "errors.invalid-recovery-token" @@ -1205,15 +1213,15 @@ msgstr "此邀请可能已取消或已过期。" #: src/app/main/ui/auth/login.cljs:88 msgid "errors.ldap-disabled" -msgstr "LDAP身份验证已禁用。" +msgstr "LDAP 身份验证已禁用。" #: src/app/main/errors.cljs:403, src/app/main/ui/dashboard/team.cljs:214, src/app/main/ui/onboarding/team_choice.cljs:116 msgid "errors.max-quota-reached" -msgstr "您已达到“%s”报价。与支持人员联系。" +msgstr "你已达到“%s”配额。请联系支持团队。" #: src/app/main/ui/dashboard/team.cljs:210, src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/onboarding/team_choice.cljs:112 msgid "errors.maximum-invitations-by-request-reached" -msgstr "已达到单次请求中可邀请的电子邮件数量上限(%s)" +msgstr "已达到单次请求可邀请的电子邮箱数量上限(%s)" #: src/app/main/data/workspace/media.cljs:217 msgid "errors.media-too-large" @@ -1229,7 +1237,7 @@ msgstr "该图片好像不可用。" #: src/app/main/ui/dashboard/team.cljs:704 msgid "errors.member-is-muted" -msgstr "你邀请的人设置了邮件免打扰(报告垃圾邮件或者多次退信)。" +msgstr "受邀用户已停用邮件通知(曾举报垃圾邮件或多次发生退信)。" #: src/app/main/errors.cljs:377 msgid "errors.migration-in-progress" @@ -1246,24 +1254,24 @@ msgstr "只有版本创建者可以解除锁定" #: src/app/main/ui/settings/password.cljs #, unused msgid "errors.password-invalid-confirmation" -msgstr "确认密码必须保持一致" +msgstr "两次输入的密码必须一致" #: src/app/main/ui/settings/password.cljs #, unused msgid "errors.password-too-short" -msgstr "密码最少需要8位字符" +msgstr "密码至少需要 8 个字符" #: src/app/main/errors.cljs:267 msgid "errors.paste-data-validation" -msgstr "剪切板中为无效数据" +msgstr "剪贴板中的数据无效" #: src/app/main/data/auth.cljs:344, src/app/main/ui/auth/login.cljs:84, src/app/main/ui/auth/login.cljs:92 msgid "errors.profile-blocked" -msgstr "个人资料已被屏蔽" +msgstr "此账号已被封禁" #: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:205, src/app/main/ui/dashboard/team.cljs:700, src/app/main/ui/dashboard/team.cljs:1048, src/app/main/ui/onboarding/team_choice.cljs:108, src/app/main/ui/settings/change_email.cljs:33 msgid "errors.profile-is-muted" -msgstr "你设置了邮件免打扰(报告垃圾邮件或者多次退信)。" +msgstr "你的邮件通知已停用(曾举报垃圾邮件或多次发生退信)。" #: src/app/main/data/auth.cljs:342, src/app/main/ui/auth/register.cljs:91 msgid "errors.registration-disabled" @@ -1271,7 +1279,7 @@ msgstr "当前禁止注册。" #: src/app/main/errors.cljs:337 msgid "errors.svg-parser.invalid-svg" -msgstr "SVG无效或格式错误" +msgstr "SVG 无效或格式错误" #: src/app/main/errors.cljs:382 msgid "errors.team-feature-mismatch" @@ -1279,32 +1287,32 @@ msgstr "检测到不兼容功能“%s”" #: src/app/main/ui/dashboard/sidebar.cljs:469, src/app/main/ui/dashboard/team.cljs:474 msgid "errors.team-leave.insufficient-members" -msgstr "离开团队后成员不足,您可能要将其删除。" +msgstr "团队成员不足,无法退出。你可能需要删除此团队。" #: src/app/main/ui/dashboard/sidebar.cljs:472, src/app/main/ui/dashboard/team.cljs:477 msgid "errors.team-leave.member-does-not-exists" -msgstr "您尝试分配的成员不存在。" +msgstr "你尝试指定的成员不存在。" #: src/app/main/ui/dashboard/sidebar.cljs:475, src/app/main/ui/dashboard/team.cljs:480 msgid "errors.team-leave.owner-cant-leave" -msgstr "所有者不能离开团队,您必须转让所有者角色。" +msgstr "所有者无法退出团队,你必须先转让所有者角色。" #: src/app/main/ui/workspace/tokens/sets/helpers.cljs:25, src/app/main/ui/workspace/tokens/sets/helpers.cljs:46 msgid "errors.token-set-already-exists" -msgstr "同名的集已经存在" +msgstr "已存在同名令牌集" #: src/app/main/data/tokens.cljs: #, unused msgid "errors.token-set-doesnt-exists" -msgstr "不能复制一个未知的集" +msgstr "无法复制未知令牌集" #: src/app/main/data/workspace/tokens/library_edit.cljs:449 msgid "errors.token-set-exists-on-drop" -msgstr "无法完成删除,同名集合已存在于路径中。" +msgstr "无法完成放置:此路径中已存在同名令牌集。" #: src/app/main/data/workspace/tokens/library_edit.cljs:237, src/app/main/data/workspace/tokens/library_edit.cljs:256 msgid "errors.token-theme-already-exists" -msgstr "同名的主题选项已经存在" +msgstr "已存在同名令牌主题" #: src/app/main/data/workspace/tokens/errors.cljs:15 msgid "errors.tokens.error-parse" @@ -1320,7 +1328,9 @@ msgstr "无效的颜色值:%s" #: src/app/main/data/workspace/tokens/errors.cljs:103 msgid "errors.tokens.invalid-font-weight-token-value" -msgstr "字体粗细值无效:使用数值(100-950)或标准名称(细、亮、常规、粗体等),后跟可选的“斜体”" +msgstr "" +"字重值无效:请使用数值(100-950)或标准名称(thin、light、regular、bold 等)" +",后面可加“Italic”" #: src/app/main/data/workspace/tokens/errors.cljs:23 msgid "errors.tokens.invalid-json" @@ -1328,21 +1338,21 @@ msgstr "导入错误:JSON 中存在无效的令牌数据。" #: src/app/main/data/workspace/tokens/errors.cljs:27 msgid "errors.tokens.invalid-json-token-name" -msgstr "导入错误;JSON中存在无效的令牌名。" +msgstr "导入错误:JSON 中存在无效的令牌名称。" #: src/app/main/data/workspace/tokens/errors.cljs:28 msgid "errors.tokens.invalid-json-token-name-detail" msgstr "" -"“%s” 不是有效的 token 名称。\n" -"token 名称只能包含字母和数字,并以 . 字符分隔,并且不能以 $ 符号开头。" +"“%s”不是有效的令牌名称。\n" +"令牌名称只能包含以英文句点(.)分隔的字母和数字,且不能以美元符号($)开头。" #: src/app/main/data/workspace/tokens/errors.cljs:95 msgid "errors.tokens.invalid-text-case-token-value" -msgstr "无效的token值:仅接受无、大写、小写或大写" +msgstr "令牌值无效:仅接受以下字面值:none、uppercase、lowercase 或 capitalize" #: src/app/main/data/workspace/tokens/errors.cljs:99 msgid "errors.tokens.invalid-text-decoration-token-value" -msgstr "无效的token值:仅接受无、下划线和删除线" +msgstr "令牌值无效:仅接受以下字面值:none、underline 或 strike-through" #: src/app/main/data/workspace/tokens/errors.cljs:75, src/app/main/data/workspace/tokens/errors.cljs:87, src/app/main/data/workspace/tokens/errors.cljs:91 msgid "errors.tokens.invalid-value" @@ -1350,15 +1360,15 @@ msgstr "无效的令牌值:%s" #: src/app/main/data/workspace/tokens/errors.cljs:71 msgid "errors.tokens.missing-references" -msgstr "缺少token引用: " +msgstr "缺少令牌引用: " #: src/app/main/data/workspace/tokens/errors.cljs:19 msgid "errors.tokens.no-token-files-found" -msgstr "在此文件中未找到任何标记、集合或主题。" +msgstr "此文件中未找到任何令牌、令牌集或令牌主题。" #: src/app/main/data/workspace/tokens/errors.cljs:45, src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:305, src/app/main/ui/workspace/tokens/management/forms/typography.cljs:235 msgid "errors.tokens.self-reference" -msgstr "Token存在自我引用" +msgstr "令牌存在自引用" #: src/app/main/data/media.cljs:74 msgid "errors.unexpected-error" @@ -1410,7 +1420,7 @@ msgstr "验证时出现意外错误" #: src/app/main/ui/dashboard/team.cljs:1243, src/app/main/ui/dashboard/team.cljs:1430 msgid "errors.webhooks.unexpected-status" -msgstr "意外状态%s" +msgstr "意外状态 %s" #: src/app/main/ui/auth/login.cljs:96, src/app/main/ui/auth/login.cljs:100 msgid "errors.wrong-credentials" @@ -1426,15 +1436,15 @@ msgstr "描述" #: src/app/main/ui/settings/feedback.cljs:150 msgid "feedback.discourse-subtitle1" -msgstr "我们很欢迎你的到来。请在发布帮助请求前搜索你所需要的帮助内容。" +msgstr "很高兴在这里见到你。如需帮助,请先搜索再发帖。" #: src/app/main/ui/settings/feedback.cljs:149 msgid "feedback.discourse-title" -msgstr "Penpot社区" +msgstr "Penpot 社区" #: src/app/main/ui/settings/feedback.cljs:105 msgid "feedback.subject" -msgstr "话题" +msgstr "主题" #: src/app/main/ui/settings/feedback.cljs:102 msgid "feedback.subtitle" @@ -1442,19 +1452,19 @@ msgstr "请说明你发邮件的原因,详细说明这是一个问题反馈、 #: src/app/main/ui/settings/feedback.cljs:156 msgid "feedback.twitter-subtitle1" -msgstr "这里可以帮助您解决技术问题。" +msgstr "帮助你解决技术问题。" #: src/app/main/ui/settings/feedback.cljs:155 msgid "feedback.twitter-title" -msgstr "X(原Twitter)支持帐号" +msgstr "X 支持账号" #: src/app/main/ui/exports/files.cljs:132 msgid "files-download-modal.description-2" -msgstr "* 可能包含组件、图形、颜色和/或排版。" +msgstr "* 可能包括组件、图形、颜色和/或排版。" #: src/app/main/ui/exports/files.cljs:140 msgid "files-download-modal.options.all.message" -msgstr "使用了共享库的文件将会在导出时保持引用关系。" +msgstr "使用共享库的文件会连同共享库一起导出,并保持引用关系。" #: src/app/main/ui/exports/files.cljs:141 msgid "files-download-modal.options.all.title" @@ -1462,7 +1472,7 @@ msgstr "导出共享库" #: src/app/main/ui/exports/files.cljs:142 msgid "files-download-modal.options.detach.message" -msgstr "导出文件中将不包含共享库,素材也不会被添加到库中。 " +msgstr "导出内容中不会包含共享库,也不会向文件库添加任何素材。 " #: src/app/main/ui/exports/files.cljs:143 msgid "files-download-modal.options.detach.title" @@ -1470,7 +1480,7 @@ msgstr "将共享库素材作为基本对象" #: src/app/main/ui/exports/files.cljs:144 msgid "files-download-modal.options.merge.message" -msgstr "导出您的文件时所有的外部素材将会被合并到库中。" +msgstr "导出文件时,所有外部素材都会合并到文件库中。" #: src/app/main/ui/exports/files.cljs:145 msgid "files-download-modal.options.merge.title" @@ -1478,7 +1488,7 @@ msgstr "将共享库素材加入文件库" #: src/app/main/ui/settings/password.cljs:31 msgid "generic.error" -msgstr "发生了一个错误" +msgstr "发生错误" #: src/app/main/ui/inspect/attributes/blur.cljs:31 #, unused @@ -1569,7 +1579,7 @@ msgstr "尺寸和位置" #: src/app/main/ui/inspect/attributes/stroke.cljs:89 msgid "inspect.attributes.stroke" -msgstr "边框" +msgstr "描边" #, permanent, unused msgid "inspect.attributes.stroke.alignment.center" @@ -1577,15 +1587,15 @@ msgstr "居中" #, permanent, unused msgid "inspect.attributes.stroke.alignment.inner" -msgstr "内部" +msgstr "内侧" #, permanent, unused msgid "inspect.attributes.stroke.alignment.outer" -msgstr "外部" +msgstr "外侧" #, unused msgid "inspect.attributes.stroke.style.dotted" -msgstr "虚线" +msgstr "点线" #, unused msgid "inspect.attributes.stroke.style.mixed" @@ -1610,7 +1620,7 @@ msgstr "排版" #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:316 msgid "inspect.attributes.typography.font-family" -msgstr "字体" +msgstr "字体家族" #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:346 msgid "inspect.attributes.typography.font-size" @@ -1618,16 +1628,16 @@ msgstr "字号" #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:357 msgid "inspect.attributes.typography.font-style" -msgstr "文字风格" +msgstr "字体样式" #: src/app/main/ui/inspect/attributes/text.cljs:113 #, unused msgid "inspect.attributes.typography.font-weight" -msgstr "字体粗细" +msgstr "字重" #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:410, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:421 msgid "inspect.attributes.typography.letter-spacing" -msgstr "字距" +msgstr "字间距" #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:392, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:402 msgid "inspect.attributes.typography.line-height" @@ -1636,7 +1646,7 @@ msgstr "行高" #: src/app/main/ui/inspect/attributes/text.cljs:140 #, unused msgid "inspect.attributes.typography.text-decoration" -msgstr "文字装饰" +msgstr "文本装饰" #, unused msgid "inspect.attributes.typography.text-decoration.line-through" @@ -1653,11 +1663,11 @@ msgstr "下划线" #: src/app/main/ui/inspect/attributes/text.cljs:153 #, unused msgid "inspect.attributes.typography.text-transform" -msgstr "文本变换" +msgstr "大小写转换" #: src/app/main/ui/inspect/attributes/text.cljs:125, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:451 msgid "inspect.attributes.typography.text-transform.capitalize" -msgstr "首字母大写" +msgstr "单词首字母大写" #: src/app/main/ui/inspect/attributes/text.cljs:123, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:455 msgid "inspect.attributes.typography.text-transform.lowercase" @@ -1669,7 +1679,7 @@ msgstr "无" #: src/app/main/ui/inspect/attributes/text.cljs:127 msgid "inspect.attributes.typography.text-transform.unset" -msgstr "取消设置" +msgstr "未设置" #: src/app/main/ui/inspect/attributes/text.cljs:126, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:445 msgid "inspect.attributes.typography.text-transform.uppercase" @@ -1685,11 +1695,11 @@ msgstr "变体属性" #: src/app/main/ui/inspect/right_sidebar.cljs:235 msgid "inspect.empty.help" -msgstr "如果您想了解有关设计检查的更多信息,请访问Penpot的帮助中心" +msgstr "如需进一步了解设计检查功能,请访问 Penpot 帮助中心" #: src/app/main/ui/inspect/right_sidebar.cljs:233 msgid "inspect.empty.select" -msgstr "选择形状、板或组以检查其属性和代码" +msgstr "选择形状、画板或组以检查其属性和代码" #: src/app/main/ui/inspect/right_sidebar.cljs:165 msgid "inspect.layer-info" @@ -1697,7 +1707,7 @@ msgstr "图层信息" #: src/app/main/ui/inspect/right_sidebar.cljs:136 msgid "inspect.multiple-selected" -msgstr "已选中%s项" +msgstr "已选择 %s 项" #: src/app/main/ui/inspect/right_sidebar.cljs:67 msgid "inspect.subtitle.copy" @@ -1770,7 +1780,7 @@ msgstr "访问令牌" #: src/app/main/ui/dashboard/team.cljs:1445 msgid "labels.active" -msgstr "激活" +msgstr "启用" #: src/app/main/ui/workspace/libraries.cljs:172 msgid "labels.add" @@ -1782,7 +1792,7 @@ msgstr "添加自定义字体" #: src/app/main/ui/workspace/libraries.cljs:172 msgid "labels.adding" -msgstr "新增..." +msgstr "正在添加…" #: src/app/main/ui/dashboard/team.cljs:149, src/app/main/ui/dashboard/team.cljs:402, src/app/main/ui/dashboard/team.cljs:645, src/app/main/ui/dashboard/team.cljs:675, src/app/main/ui/onboarding/team_choice.cljs:71 msgid "labels.admin" @@ -1851,7 +1861,7 @@ msgstr "社区" #: src/app/main/ui/inspect/right_sidebar.cljs:109 msgid "labels.computed" -msgstr "计算" +msgstr "计算结果" #: src/app/main/ui/settings/password.cljs:93 msgid "labels.confirm-password" @@ -1863,11 +1873,11 @@ msgstr "继续" #, unused msgid "labels.continue-with" -msgstr "继续" +msgstr "使用以下方式继续" #: src/app/main/ui/viewer/login.cljs:69 msgid "labels.continue-with-penpot" -msgstr "你可以使用Penpot帐号继续" +msgstr "你可以使用 Penpot 账号继续" #: src/app/main/ui/components/copy_button.cljs:41 msgid "labels.copy" @@ -1899,7 +1909,7 @@ msgstr "自定义字体" #: src/app/main/ui/settings/sidebar.cljs:82 msgid "labels.dashboard" -msgstr "面板" +msgstr "仪表板" #: src/app/main/ui/dashboard/file_menu.cljs:337, src/app/main/ui/dashboard/fonts.cljs:286, src/app/main/ui/dashboard/fonts.cljs:363, src/app/main/ui/dashboard/fonts.cljs:397, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1379, src/app/main/ui/settings/integrations.cljs:389, src/app/main/ui/settings/profile.cljs:117, src/app/main/ui/settings/profile.cljs:128, src/app/main/ui/settings/profile.cljs:129, src/app/main/ui/workspace/sidebar/assets/common.cljs:231, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:223, src/app/main/ui/workspace/sidebar/versions.cljs:258, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:353, src/app/main/ui/workspace/tokens/management/node_context_menu.cljs:111, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:378 msgid "labels.delete" @@ -1907,7 +1917,7 @@ msgstr "删除" #: src/app/main/ui/comments.cljs:1015 msgid "labels.delete-comment" -msgstr "删除该评论" +msgstr "删除评论" #: src/app/main/ui/comments.cljs:937 msgid "labels.delete-comment-thread" @@ -1919,11 +1929,11 @@ msgstr "删除邀请" #: src/app/main/ui/dashboard/file_menu.cljs:292 msgid "labels.delete-multi-files" -msgstr "删除%s个文件" +msgstr "删除 %s 个文件" #: src/app/main/ui/onboarding/questions.cljs:83 msgid "labels.developer" -msgstr "开发者" +msgstr "开发" #: src/app/main/ui/onboarding/questions.cljs:260 #, unused @@ -1948,7 +1958,7 @@ msgstr "编辑" #, unused msgid "labels.edit-file" -msgstr "编辑文档" +msgstr "编辑文件" #: src/app/main/ui/dashboard/team.cljs:147, src/app/main/ui/dashboard/team.cljs:399, src/app/main/ui/dashboard/team.cljs:646, src/app/main/ui/dashboard/team.cljs:679, src/app/main/ui/onboarding/team_choice.cljs:70 msgid "labels.editor" @@ -1977,7 +1987,7 @@ msgstr "导出" #: src/app/main/ui/settings/feedback.cljs:83 msgid "labels.feedback-disabled" -msgstr "反馈被禁止" +msgstr "反馈已禁用" #: src/app/main/ui/settings/feedback.cljs:74 msgid "labels.feedback-sent" @@ -1989,7 +1999,7 @@ msgstr "Figma" #: src/app/main/ui/dashboard/fonts.cljs:472 msgid "labels.font-family" -msgstr "字体族" +msgstr "字体家族" #, unused msgid "labels.font-providers" @@ -2006,7 +2016,7 @@ msgstr "字体" #: src/app/main/ui/onboarding/questions.cljs:259 #, unused msgid "labels.founder" -msgstr "创始人/副总裁" +msgstr "首席执行官或创始人" #: src/app/main/ui/onboarding/questions.cljs:258 #, unused @@ -2015,7 +2025,7 @@ msgstr "我是一名自由职业者" #: src/app/main/ui/dashboard/sidebar.cljs:1172, src/app/main/ui/workspace/main_menu.cljs:196 msgid "labels.github-repo" -msgstr "Github仓库" +msgstr "GitHub 仓库" #: src/app/main/ui/dashboard/sidebar.cljs:1148, src/app/main/ui/workspace/main_menu.cljs:225 msgid "labels.give-feedback" @@ -2039,7 +2049,7 @@ msgstr "隐藏" #: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:75 msgid "labels.hide-resolved-comments" -msgstr "隐藏已决定的评论" +msgstr "隐藏已解决的评论" #: src/app/main/ui/workspace/tokens/sidebar.cljs:131 msgid "labels.import" @@ -2075,7 +2085,7 @@ msgstr "语言" #: src/app/main/ui/workspace/main_menu.cljs:187 msgid "labels.libraries-and-templates" -msgstr "库&模板" +msgstr "库和模板" #: src/app/main/ui/auth/verify_token.cljs:125, src/app/main/ui/dashboard/grid.cljs:126, src/app/main/ui/dashboard/grid.cljs:146, src/app/main/ui/dashboard/import.cljs:255, src/app/main/ui/dashboard/placeholder.cljs:139, src/app/main/ui/ds/product/loader.cljs:85, src/app/main/ui/exports/files.cljs:59, src/app/main/ui/nitrate/entry.cljs:26, src/app/main/ui/static.cljs:615, src/app/main/ui/viewer.cljs:641, src/app/main/ui/workspace/sidebar/assets/file_library.cljs:247, src/app/main/ui/workspace.cljs:131, src/app/main/ui.cljs:71, src/app/main/ui.cljs:109, src/app/main/ui.cljs:128 msgid "labels.loading" @@ -2095,7 +2105,7 @@ msgstr "登录" #: src/app/main/ui/dashboard/sidebar.cljs:1405 msgid "labels.logout" -msgstr "登出" +msgstr "退出登录" #: src/app/main/ui/onboarding/questions.cljs:86 msgid "labels.marketing" @@ -2127,7 +2137,7 @@ msgstr "下一项" #: src/app/main/ui/dashboard/comments.cljs:120, src/app/main/ui/workspace/comments.cljs:162 msgid "labels.no-comments-available" -msgstr "你们都赶上了! 新的评论通知将出现在这里。" +msgstr "所有评论都已处理完毕!新的评论通知会显示在这里。" #: src/app/main/ui/dashboard/team.cljs:821 msgid "labels.no-invitations" @@ -2135,7 +2145,7 @@ msgstr "没有待处理的邀请。" #: src/app/main/ui/dashboard/team.cljs:823 msgid "labels.no-invitations-gather-people" -msgstr "召集你的人,一起建设伟大的事业。" +msgstr "邀请大家加入,一起创造精彩成果。" #: src/app/main/ui/static.cljs #, unused @@ -2153,20 +2163,20 @@ msgstr "通知" #: src/app/main/ui/dashboard/projects.cljs:236, src/app/main/ui/dashboard/team.cljs:1672 msgid "labels.num-of-files" msgid_plural "labels.num-of-files" -msgstr[0] "共1个文档" -msgstr[1] "共%s个文档" +msgstr[0] "1 个文件" +msgstr[1] "%s 个文件" #: src/app/main/ui/viewer/thumbnails.cljs:82 msgid "labels.num-of-frames" msgid_plural "labels.num-of-frames" -msgstr[0] "1个画板" -msgstr[1] "%s个画板" +msgstr[0] "1 个画板" +msgstr[1] "%s 个画板" #: src/app/main/ui/dashboard/team.cljs:1667 msgid "labels.num-of-projects" msgid_plural "labels.num-of-projects" msgstr[0] "1 个项目" -msgstr[1] "共 %s 个项目" +msgstr[1] "%s 个项目" #, unused msgid "labels.ok" @@ -2207,7 +2217,7 @@ msgstr "密码" #: src/app/main/ui/dashboard/team.cljs:752 msgid "labels.pending-invitation" -msgstr "待办" +msgstr "待处理" #: src/app/main/ui/dashboard/sidebar.cljs:1091 msgid "labels.pinned-projects" @@ -2223,11 +2233,11 @@ msgstr "前一项" #: src/app/main/ui/onboarding/questions.cljs:82 msgid "labels.product-design" -msgstr "产品或UX设计" +msgstr "产品或 UX 设计" #: src/app/main/ui/onboarding/questions.cljs:87 msgid "labels.product-management" -msgstr "产品经理/项目经理" +msgstr "产品管理" #: src/app/main/ui/settings/profile.cljs:148, src/app/main/ui/settings/sidebar.cljs:91 msgid "labels.profile" @@ -2328,7 +2338,7 @@ msgstr "正在发送…" #: src/app/main/ui/static.cljs:327 msgid "labels.service-unavailable.desc-message" -msgstr "我们正在进行系统的程序维护。" +msgstr "系统正在按计划维护。" #: src/app/main/ui/static.cljs:326 msgid "labels.service-unavailable.main-message" @@ -2352,7 +2362,7 @@ msgstr "分享原型" #: src/app/main/ui/dashboard/sidebar.cljs:1085 msgid "labels.shared-libraries" -msgstr "共享库" +msgstr "库" #: src/app/main/ui/dashboard/templates.cljs:86 msgid "labels.show" @@ -2368,7 +2378,7 @@ msgstr "显示评论列表" #: src/app/main/ui/workspace/comments.cljs:69, src/app/main/ui/workspace/comments.cljs:138 msgid "labels.show-mentions" -msgstr "只显示您的提及" +msgstr "只显示提及你的评论" #: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:63, src/app/main/ui/workspace/comments.cljs:137 msgid "labels.show-your-comments" @@ -2380,7 +2390,7 @@ msgstr "Sketch" #: src/app/main/ui/dashboard/sidebar.cljs:1070 msgid "labels.sources" -msgstr "源" +msgstr "来源" #: src/app/main/ui/onboarding/questions.cljs:53 msgid "labels.start" @@ -2422,7 +2432,7 @@ msgstr "解锁" #: src/app/main/ui/dashboard/file_menu.cljs:286 msgid "labels.unpublish-multi-files" -msgstr "取消发布%s文件" +msgstr "取消发布 %s 个文件" #: src/app/main/ui/settings/profile.cljs:123 msgid "labels.update" @@ -2454,7 +2464,7 @@ msgstr "查看者" #: src/app/main/ui/dashboard/sidebar.cljs:552, src/app/main/ui/dashboard/team.cljs:116, src/app/main/ui/dashboard/team.cljs:126, src/app/main/ui/dashboard/team.cljs:1356 msgid "labels.webhooks" -msgstr "Webhooks" +msgstr "Webhook" #: src/app/main/ui/comments.cljs:856 msgid "labels.write-new-comment" @@ -2462,11 +2472,11 @@ msgstr "写一条新评论" #: src/app/main/ui/dashboard/team.cljs:350 msgid "labels.you" -msgstr "(你)" +msgstr "(你)" #: src/app/main/ui/dashboard/sidebar.cljs:1358 msgid "labels.your-account" -msgstr "你的账户" +msgstr "你的账号" #: src/app/main/ui/onboarding/questions.cljs:403 #, unused @@ -2483,7 +2493,7 @@ msgstr "可重用组件" #: src/app/main/ui/ds/product/loader.cljs:23 msgid "loader.tips.02.message" -msgstr "与您的团队实时协作,即时分享反馈。" +msgstr "与团队实时协作,即时分享反馈。" #: src/app/main/ui/ds/product/loader.cljs:22 msgid "loader.tips.02.title" @@ -2491,23 +2501,23 @@ msgstr "实时协作" #: src/app/main/ui/ds/product/loader.cljs:25 msgid "loader.tips.03.message" -msgstr "使用熟悉的类CSS布局控制灵活设计。" +msgstr "使用熟悉的类 CSS 布局控件灵活设计。" #: src/app/main/ui/ds/product/loader.cljs:24 msgid "loader.tips.03.title" -msgstr "像 CSS 一样自动布局" +msgstr "CSS 风格布局" #: src/app/main/ui/ds/product/loader.cljs:27 msgid "loader.tips.04.message" -msgstr "从您的设计中直接获取 CSS 和 SVG。" +msgstr "直接从设计中获取 CSS 和 SVG 代码。" #: src/app/main/ui/ds/product/loader.cljs:26 msgid "loader.tips.04.title" -msgstr "导出为代码" +msgstr "导出代码" #: src/app/main/ui/ds/product/loader.cljs:29 msgid "loader.tips.05.message" -msgstr "共享资产和风格以保持一致性。" +msgstr "共享素材和样式以保持一致性。" #: src/app/main/ui/ds/product/loader.cljs:28 msgid "loader.tips.05.title" @@ -2515,7 +2525,7 @@ msgstr "设计库" #: src/app/main/ui/ds/product/loader.cljs:31 msgid "loader.tips.06.message" -msgstr "通过动画和过渡让您的想法变为现实。" +msgstr "通过动画和过渡让你的想法变为现实。" #: src/app/main/ui/ds/product/loader.cljs:30 msgid "loader.tips.06.title" @@ -2531,7 +2541,7 @@ msgstr "Web 标准格式" #: src/app/main/ui/ds/product/loader.cljs:35 msgid "loader.tips.08.message" -msgstr "使用便捷的快捷键(例如 Shift + A 用于自动布局)来加快您的工作流程。" +msgstr "使用 Shift + A 等便捷快捷键启用自动布局,加快工作流程。" #: src/app/main/ui/ds/product/loader.cljs:34 msgid "loader.tips.08.title" @@ -2539,15 +2549,15 @@ msgstr "键盘快捷键" #: src/app/main/ui/ds/product/loader.cljs:37 msgid "loader.tips.09.message" -msgstr "选择适合您风格的主题。" +msgstr "选择适合你风格的主题。" #: src/app/main/ui/ds/product/loader.cljs:36 msgid "loader.tips.09.title" -msgstr "暗黑和浅色模式" +msgstr "深色和浅色模式" #: src/app/main/ui/ds/product/loader.cljs:39 msgid "loader.tips.10.message" -msgstr "使用社区构建的插件扩展 Penpot 以获得额外的功能。" +msgstr "使用社区开发的插件扩展 Penpot,获得更多功能。" #: src/app/main/ui/ds/product/loader.cljs:38 msgid "loader.tips.10.title" @@ -2567,7 +2577,7 @@ msgstr "图片" #: src/app/main/ui/inspect/attributes/common.cljs:53 msgid "media.image.short" -msgstr "img" +msgstr "图片" #: src/app/main/ui/workspace/colorpicker.cljs:479 msgid "media.keep-aspect-ratio" @@ -2593,7 +2603,7 @@ msgstr "纯色" #: src/app/main/data/common.cljs:118 msgid "modals.add-shared-confirm-empty.hint" -msgstr "你的库是空白的。一旦添加为共享库,此文档库中的素材就可被用于你的其他文档中。你确定要发布它吗?" +msgstr "你的库是空的。添加为共享库后,你创建的素材可供其他文件使用。确定要发布吗?" #: src/app/main/data/common.cljs:120 msgid "modals.add-shared-confirm.accept" @@ -2601,7 +2611,7 @@ msgstr "添加为共享库" #: src/app/main/data/common.cljs:118 msgid "modals.add-shared-confirm.hint" -msgstr "一旦添加为共享库,此文档库中的素材就可被用于你的其他文档中。" +msgstr "添加为共享库后,此文件库中的素材可供其他文件使用。" #: src/app/main/data/common.cljs:117 msgid "modals.add-shared-confirm.message" @@ -2609,39 +2619,39 @@ msgstr "将“%s”添加为共享库" #: src/app/main/ui/workspace/nudge.cljs:59 msgid "modals.big-nudge" -msgstr "小幅微调" +msgstr "大幅微调" #: src/app/main/ui/settings/change_email.cljs:109 msgid "modals.change-email.confirm-email" -msgstr "确认新的邮件" +msgstr "确认新电子邮箱" #: src/app/main/ui/settings/change_email.cljs:97 msgid "modals.change-email.info" -msgstr "我们会发送一封信的邮件到当前的电子邮件“%s”,以验证你的身份。" +msgstr "我们会向你当前的电子邮箱“%s”发送一封邮件,以验证你的身份。" #: src/app/main/ui/settings/change_email.cljs:102 msgid "modals.change-email.new-email" -msgstr "新电子邮件" +msgstr "新电子邮箱" #: src/app/main/ui/settings/change_email.cljs:117 msgid "modals.change-email.submit" -msgstr "修改电子邮件" +msgstr "更改电子邮箱" #: src/app/main/ui/settings/change_email.cljs:90 msgid "modals.change-email.title" -msgstr "修改你的电子邮件" +msgstr "更改电子邮箱" #: src/app/main/ui/dashboard/team.cljs:1350 msgid "modals.create-webhook.submit-label" -msgstr "创建webhook" +msgstr "创建 Webhook" #: src/app/main/ui/dashboard/team.cljs:1315 msgid "modals.create-webhook.title" -msgstr "创建webhook" +msgstr "创建 Webhook" #: src/app/main/ui/dashboard/team.cljs:1326 msgid "modals.create-webhook.url.label" -msgstr "有效负载网址" +msgstr "有效载荷 URL" #: src/app/main/ui/dashboard/team.cljs:1327 msgid "modals.create-webhook.url.placeholder" @@ -2686,15 +2696,15 @@ msgstr "删除注释" #: src/app/main/ui/dashboard/file_menu.cljs:126 msgid "modals.delete-file-confirm.accept" -msgstr "删除文档" +msgstr "删除文件" #: src/app/main/ui/dashboard/file_menu.cljs:125 msgid "modals.delete-file-confirm.message" -msgstr "你确定想要删除这个文档?" +msgstr "确定要删除此文件吗?" #: src/app/main/ui/dashboard/file_menu.cljs:124 msgid "modals.delete-file-confirm.title" -msgstr "正在删除文档" +msgstr "正在删除文件" #: src/app/main/ui/dashboard/file_menu.cljs:120 msgid "modals.delete-file-multi-confirm.accept" @@ -2702,27 +2712,27 @@ msgstr "删除文件" #: src/app/main/ui/dashboard/file_menu.cljs:119 msgid "modals.delete-file-multi-confirm.message" -msgstr "你确定要删除这%s个文件?" +msgstr "确定要删除这 %s 个文件吗?" #: src/app/main/ui/dashboard/file_menu.cljs:118 msgid "modals.delete-file-multi-confirm.title" -msgstr "正在删除%s个文件" +msgstr "删除 %s 个文件" #: src/app/main/ui/dashboard/fonts.cljs:396 msgid "modals.delete-font-variant.message" -msgstr "你确定要删除这个字体样式吗?如果它被用在某个文件里的话,将无法加载。" +msgstr "确定要删除此字体样式吗?如果文件使用了该样式,将无法加载它。" #: src/app/main/ui/dashboard/fonts.cljs:395 msgid "modals.delete-font-variant.title" -msgstr "正在删除字体样式" +msgstr "删除字体样式" #: src/app/main/ui/dashboard/fonts.cljs:362 msgid "modals.delete-font.message" -msgstr "你确定要删除这个字体吗?如果它被用在某个文件里的话,将无法加载。" +msgstr "确定要删除此字体吗?如果文件使用了该字体,将无法加载它。" #: src/app/main/ui/dashboard/fonts.cljs:361 msgid "modals.delete-font.title" -msgstr "正在删除字体" +msgstr "删除字体" #: src/app/main/ui/workspace/context_menu.cljs:707, src/app/main/ui/workspace/sidebar/sitemap.cljs:109 msgid "modals.delete-page.body" @@ -2748,31 +2758,31 @@ msgstr "删除项目" msgid "modals.delete-shared-confirm.accept" msgid_plural "modals.delete-shared-confirm.accept" msgstr[0] "删除文件" -msgstr[1] "批量删除文件" +msgstr[1] "删除文件" #: src/app/main/ui/delete_shared.cljs:56 msgid "modals.delete-shared-confirm.activated.no-files-message" msgid_plural "modals.delete-shared-confirm.activated.no-files-message" -msgstr[0] "没有文件引用它。" -msgstr[1] "没有文件引用它们。" +msgstr[0] "所选库未在任何文件中启用。" +msgstr[1] "所选库未在任何文件中启用。" #: src/app/main/ui/delete_shared.cljs:58 msgid "modals.delete-shared-confirm.activated.scd-message" msgid_plural "modals.delete-shared-confirm.activated.scd-message" -msgstr[0] "该库被以下文档使用: " -msgstr[1] "这些库被以下文档使用: " +msgstr[0] "所选库已在以下文件中启用: " +msgstr[1] "所选库已在以下文件中启用: " #: src/app/main/ui/delete_shared.cljs:47 msgid "modals.delete-shared-confirm.message" msgid_plural "modals.delete-shared-confirm.message" -msgstr[0] "你是否确认要删除这个文件?" -msgstr[1] "你是否确认要删除这些文件?" +msgstr[0] "确定要删除所选文件吗?" +msgstr[1] "确定要删除所选文件吗?" #: src/app/main/ui/delete_shared.cljs:42 msgid "modals.delete-shared-confirm.title" msgid_plural "modals.delete-shared-confirm.title" msgstr[0] "删除文件" -msgstr[1] "批量删除文件" +msgstr[1] "删除文件" #: src/app/main/data/team.cljs:136 msgid "modals.delete-team-confirm.accept" @@ -2780,11 +2790,11 @@ msgstr "删除团队" #: src/app/main/data/team.cljs:130 msgid "modals.delete-team-confirm.message" -msgstr "你确定想要删除这个团队?与该团队关联的所有项目和文档都会被永久删除。" +msgstr "确定要删除此团队吗?与该团队关联的所有项目和文件都将被永久删除。" #: src/app/main/data/team.cljs:134 msgid "modals.delete-team-confirm.title" -msgstr "正在删除团队" +msgstr "删除团队" #: src/app/main/ui/dashboard/team.cljs:542 msgid "modals.delete-team-member-confirm.accept" @@ -2801,28 +2811,28 @@ msgstr "删除团队成员" #: src/app/main/ui/delete_shared.cljs:60 msgid "modals.delete-unpublish-shared-confirm.activated.hint" msgid_plural "modals.delete-unpublish-shared-confirm.activated.hint" -msgstr[0] "这个文件中被其他文件引用的素材依然在那(其他文件的现有设计不会被破坏)。" -msgstr[1] "这些文件中被其他文件引用的素材依然在那(其他文件的现有设计不会被破坏)。" +msgstr[0] "已在这些文件中使用的素材会保留在原处(不会破坏现有设计)。" +msgstr[1] "已在这些文件中使用的素材会保留在原处(不会破坏现有设计)。" #: src/app/main/ui/dashboard/team.cljs:1417 msgid "modals.delete-webhook.accept" -msgstr "删除webhook" +msgstr "删除 Webhook" #: src/app/main/ui/dashboard/team.cljs:1416 msgid "modals.delete-webhook.message" -msgstr "你确定要删除这个webhook吗?" +msgstr "确定要删除此 Webhook 吗?" #: src/app/main/ui/dashboard/team.cljs:1415 msgid "modals.delete-webhook.title" -msgstr "删除webhook" +msgstr "删除 Webhook" #: src/app/main/ui/dashboard/team.cljs:1349 msgid "modals.edit-webhook.submit-label" -msgstr "编辑webhook" +msgstr "编辑 Webhook" #: src/app/main/ui/dashboard/team.cljs:1314 msgid "modals.edit-webhook.title" -msgstr "编辑webhook" +msgstr "编辑 Webhook" #: src/app/main/ui/dashboard/team.cljs:273 msgid "modals.invite-member-confirm.accept" @@ -2838,7 +2848,7 @@ msgstr "有些成员已经在团队中,我们将邀请其余成员。" #: src/app/main/ui/dashboard/team.cljs:246 msgid "modals.invite-team-member.text" -msgstr "您可以邀请成员加入团队,以便他们可以访问此文件和所有团队文件。" +msgstr "你可以邀请成员加入团队,以便他们访问此文件及团队的所有文件。" #: src/app/main/data/team.cljs:165, src/app/main/ui/dashboard/team.cljs:242 msgid "modals.invite-team-member.title" @@ -2850,7 +2860,7 @@ msgstr "由于你是这个团队的唯一成员,这个团队将连同其项目 #: src/app/main/ui/dashboard/sidebar.cljs:526, src/app/main/ui/dashboard/team.cljs:507 msgid "modals.leave-and-close-confirm.message" -msgstr "您确定要离开 %s 团队吗?" +msgstr "确定要离开 %s 团队吗?" #: src/app/main/ui/dashboard/change_owner.cljs:57, src/app/main/ui/dashboard/change_owner.cljs:92 msgid "modals.leave-and-reassign.forbidden" @@ -2893,14 +2903,14 @@ msgstr[1] "移动" #: src/app/main/ui/delete_shared.cljs:49 msgid "modals.move-shared-confirm.message" msgid_plural "modals.move-shared-confirm.message" -msgstr[0] "你确定要移动这个共享库吗?" -msgstr[1] "你确定要移动这些共享库吗?" +msgstr[0] "确定要移动所选共享库吗?" +msgstr[1] "确定要移动所选共享库吗?" #: src/app/main/ui/delete_shared.cljs:44 msgid "modals.move-shared-confirm.title" msgid_plural "modals.move-shared-confirm.title" msgstr[0] "移动共享库" -msgstr[1] "移动多个共享库" +msgstr[1] "移动共享库" #: src/app/main/ui/workspace/main_menu.cljs:312, src/app/main/ui/workspace/nudge.cljs:46 msgid "modals.nudge-title" @@ -2912,15 +2922,15 @@ msgstr "转让所有权" #: src/app/main/ui/dashboard/team.cljs:460 msgid "modals.promote-owner-confirm.hint" -msgstr "如果你转移所有权,你的角色将变为管理员,失去对这个团队的一些权限。 " +msgstr "转让所有权后,你的角色将变为管理员,并失去对此团队的部分权限。 " #: src/app/main/ui/dashboard/team.cljs:459 msgid "modals.promote-owner-confirm.message" -msgstr "您是此团队的所有者,你确定想要将所有者转让给该成员?" +msgstr "你是此团队的当前所有者。确定要将 %s 设为团队的新所有者吗?" #: src/app/main/ui/dashboard/team.cljs:458 msgid "modals.promote-owner-confirm.title" -msgstr "新增团队所有者" +msgstr "新团队所有者" #: src/app/main/ui/workspace/libraries.cljs:309 msgid "modals.publish-empty-library.accept" @@ -2932,7 +2942,7 @@ msgstr "你的库是空的。你确定想要发布它?" #: src/app/main/ui/workspace/libraries.cljs:307 msgid "modals.publish-empty-library.title" -msgstr "发布空白库" +msgstr "发布空库" #: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #, unused @@ -2962,14 +2972,14 @@ msgstr[1] "取消发布" #: src/app/main/ui/delete_shared.cljs:48 msgid "modals.unpublish-shared-confirm.message" msgid_plural "modals.unpublish-shared-confirm.message" -msgstr[0] "你是否确认取消发布这个库?" -msgstr[1] "你是否确认取消发布这些库?" +msgstr[0] "确定要取消发布所选库吗?" +msgstr[1] "确定要取消发布所选库吗?" #: src/app/main/ui/delete_shared.cljs:43 msgid "modals.unpublish-shared-confirm.title" msgid_plural "modals.unpublish-shared-confirm.title" msgstr[0] "取消发布库" -msgstr[1] "批量取消发布库" +msgstr[1] "取消发布库" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs, src/app/main/ui/workspace/context_menu.cljs #, unused @@ -3003,7 +3013,7 @@ msgstr "此页面不存在" #: src/app/main/ui/static.cljs:308 msgid "not-found.desc-message.error" -msgstr "404错误" +msgstr "404 错误" #: src/app/main/ui/static.cljs:160 msgid "not-found.login.free" @@ -3015,7 +3025,7 @@ msgstr "我们已将恢复电子邮件发送至" #: src/app/main/ui/auth/recovery_request.cljs:116 msgid "not-found.login.sent-recovery-check" -msgstr "检查您的邮箱并点击超链接以创建新的密码。" +msgstr "请检查电子邮箱,然后点击链接创建新密码。" #: src/app/main/ui/static.cljs:174 msgid "not-found.login.signup-free" @@ -3031,19 +3041,19 @@ msgstr "用爱和开源制作" #: src/app/main/ui/static.cljs:269 msgid "not-found.no-permission.already-requested.file" -msgstr "您已经申请了对此文件的访问权限。" +msgstr "你已申请访问此文件。" #: src/app/main/ui/static.cljs:270 msgid "not-found.no-permission.already-requested.or-others.file" -msgstr "您已申请对此文件或该团队的其他文件或项目的访问权限。" +msgstr "你已申请访问此文件,或此团队的其他文件或项目。" #: src/app/main/ui/static.cljs:276 msgid "not-found.no-permission.already-requested.or-others.project" -msgstr "您已经申请了对该项目或该团队的其他项目或文件的访问权限。" +msgstr "你已申请访问此项目,或此团队的其他项目或文件。" #: src/app/main/ui/static.cljs:275 msgid "not-found.no-permission.already-requested.project" -msgstr "您已经申请了对此项目的访问权限。" +msgstr "你已申请访问此项目。" #: src/app/main/ui/static.cljs:290, src/app/main/ui/static.cljs:299 msgid "not-found.no-permission.ask" @@ -3051,31 +3061,31 @@ msgstr "请求访问权限" #: src/app/main/ui/static.cljs:282 msgid "not-found.no-permission.done.remember" -msgstr "请记住,如果团队所有者允许,您将被邀请加入此团队。" +msgstr "请注意,如果所有者批准请求,你将受邀加入此团队。" #: src/app/main/ui/static.cljs:281 msgid "not-found.no-permission.done.success" -msgstr "您的请求已发送!" +msgstr "你的请求已成功发送!" #: src/app/main/ui/static.cljs:287 msgid "not-found.no-permission.file" -msgstr "您没有针对此文件的访问权限。" +msgstr "你无权访问此文件。" #: src/app/main/ui/static.cljs:62, src/app/main/ui/static.cljs:265, src/app/main/ui/static.cljs:271, src/app/main/ui/static.cljs:277, src/app/main/ui/static.cljs:283, src/app/main/ui/static.cljs:292, src/app/main/ui/static.cljs:301 msgid "not-found.no-permission.go-dashboard" -msgstr "前往您的Penpot" +msgstr "前往你的 Penpot" #: src/app/main/ui/static.cljs:289, src/app/main/ui/static.cljs:298 msgid "not-found.no-permission.if-approves" -msgstr "如果所有者允许,您会被邀请加入此团队。" +msgstr "如果所有者批准请求,你将受邀加入此团队。" #: src/app/main/ui/static.cljs:527, src/app/main/ui/static.cljs:540 msgid "not-found.no-permission.penpot-file" -msgstr "Penpot文件" +msgstr "Penpot 文件" #: src/app/main/ui/static.cljs:264, src/app/main/ui/static.cljs:296 msgid "not-found.no-permission.project" -msgstr "您没有针对此项目的访问权限。" +msgstr "你无权访问此项目。" #: src/app/main/ui/static.cljs:526, src/app/main/ui/static.cljs:538 msgid "not-found.no-permission.project-name" @@ -3083,15 +3093,15 @@ msgstr "项目" #: src/app/main/ui/static.cljs:288 msgid "not-found.no-permission.you-can-ask.file" -msgstr "要访问此文件,您可以询问团队拥有者。" +msgstr "要访问此文件,你可以向团队所有者申请。" #: src/app/main/ui/static.cljs:297 msgid "not-found.no-permission.you-can-ask.project" -msgstr "要访问此项目,您可以询问团队拥有者。" +msgstr "要访问此项目,你可以向团队所有者申请。" #: src/app/main/data/common.cljs:89 msgid "notifications.by-code.maintenance" -msgstr "维护中断:我们将在5分钟内进行短暂维护。" +msgstr "维护通知:系统将在 5 分钟内短暂停机维护。" #: src/app/main/ui/dashboard/team.cljs:193, src/app/main/ui/dashboard/team.cljs:1071 msgid "notifications.invitation-email-sent" @@ -3103,7 +3113,7 @@ msgstr "邀请链接已复制" #: src/app/main/ui/settings/delete_account.cljs:28 msgid "notifications.profile-deletion-not-allowed" -msgstr "您无法删除您的个人资料。在继续之前重新分配您的团队。" +msgstr "你无法删除个人资料。请先转让你拥有的团队。" #: src/app/main/ui/settings/options.cljs:36, src/app/main/ui/settings/profile.cljs:34 msgid "notifications.profile-saved" @@ -3111,15 +3121,15 @@ msgstr "个人资料保存成功!" #: src/app/main/ui/settings/change_email.cljs:46 msgid "notifications.validation-email-sent" -msgstr "验证邮件已发至%s。请检查电子邮箱!" +msgstr "验证邮件已发送至 %s。请检查电子邮箱!" #, unused msgid "onboarding-v2.before-start.desc1" -msgstr "有很多资源可以帮助你开始使用Penpot,如用户指南和我们的Youtube频道。" +msgstr "你可以通过用户指南和 YouTube 频道等丰富资源开始了解 Penpot。" #, unused msgid "onboarding-v2.before-start.desc2" -msgstr "有关如何使用Penpot的详细信息。从原型设计到组织或共享设计。" +msgstr "详细了解如何使用 Penpot,包括制作原型、整理和分享设计。" #, unused msgid "onboarding-v2.before-start.desc2.title" @@ -3127,7 +3137,7 @@ msgstr "用户指南" #, unused msgid "onboarding-v2.before-start.desc3" -msgstr "您可以观看我们的官方教程以及社区制作的教程。" +msgstr "你可以观看我们的教程以及社区制作的教程。" #, unused msgid "onboarding-v2.before-start.desc3.title" @@ -3140,34 +3150,40 @@ msgstr "在开始之前" #: src/app/main/ui/onboarding/newsletter.cljs:68 #, unused msgid "onboarding-v2.newsletter.desc" -msgstr "订阅Penpot通知邮件,跟进产品开发进度,获取最新消息。" +msgstr "订阅 Penpot 新闻简报,及时了解产品开发进展和新闻。" #: src/app/main/ui/onboarding/newsletter.cljs:88 #, unused msgid "onboarding-v2.newsletter.news" -msgstr "发给我有关Penpot的新闻(博客文章、视频教程、直播等)。" +msgstr "向我发送 Penpot 新闻(博客文章、视频教程、直播等)。" #: src/app/main/ui/onboarding/newsletter.cljs:96 #, unused msgid "onboarding-v2.newsletter.privacy1" -msgstr "我们关心隐私,您可在此阅读我们的 " +msgstr "我们重视隐私,你可以在此阅读我们的 " #: src/app/main/ui/onboarding/newsletter.cljs:102 #, unused msgid "onboarding-v2.newsletter.privacy2" -msgstr "我们将仅发送与您有关的邮件,您可以随时在其中任意一封邮件中点击取消订阅。" +msgstr "" +"我们只会向你发送相关邮件。你可以随时通过任意一封新闻简报中的退订链接取消订阅" +"。" #: src/app/main/ui/auth/register.cljs:35 msgid "onboarding-v2.newsletter.updates" -msgstr "向我发送一些产品更新(新功能,新版本,新修复等)。" +msgstr "向我发送产品更新(新功能、新版本、问题修复等)。" #, unused msgid "onboarding-v2.welcome.desc1" -msgstr "Penpot是由Kaleidos及社区共同开发的开源软件,许多人已经在社区中互相帮助。每个人都可以通过以下方式进行协作:" +msgstr "" +"Penpot 是由 Kaleidos 和社区共同开发的开源软件,社区中已有许多人互相帮助。每个" +"人都可以通过以下方式参与协作:" #, unused msgid "onboarding-v2.welcome.desc2" -msgstr "一个与整个社区和Penpot核心团队学习、分享和讨论Penpot及其现在和未来的公共空间。" +msgstr "" +"这是一个公共空间,你可以与整个社区和 Penpot 核心团队一起了解、分享和讨论 " +"Penpot 的现在与未来。" #, unused msgid "onboarding-v2.welcome.desc2.title" @@ -3175,7 +3191,7 @@ msgstr "参与到社区中" #, unused msgid "onboarding-v2.welcome.desc3" -msgstr "在这里,您将了解如何参与翻译、提出功能需求、贡献核心代码、修复BUG等…" +msgstr "你可以在这里了解如何参与翻译、提交功能请求、贡献核心代码和查找错误等…" #, unused msgid "onboarding-v2.welcome.desc3.title" @@ -3183,7 +3199,7 @@ msgstr "贡献指南" #: src/app/main/ui/onboarding/team_choice.cljs:248 msgid "onboarding-v2.welcome.title" -msgstr "欢迎来到Penpot!" +msgstr "欢迎来到 Penpot!" #: src/app/main/ui/onboarding/team_choice.cljs:254 #, unused @@ -3208,7 +3224,7 @@ msgstr "你可以稍后再邀请成员" #: src/app/main/ui/onboarding/team_choice.cljs:193 msgid "onboarding.choice.team-up.create-team-desc" -msgstr "命名团队后,您将能够邀请他人加入。" +msgstr "为团队命名后,你就可以邀请其他人加入。" #: src/app/main/ui/onboarding/team_choice.cljs:188 msgid "onboarding.choice.team-up.create-team-placeholder" @@ -3228,11 +3244,11 @@ msgstr "邀请成员" #: src/app/main/ui/onboarding/team_choice.cljs:218 msgid "onboarding.choice.team-up.invite-members-info" -msgstr "记得将开发人员、设计师、经理……等各类人员都加进来:)" +msgstr "记得邀请所有人加入。开发者、设计师、管理者……多元协作让团队更出色 :)" #: src/app/main/ui/dashboard/team.cljs:258 msgid "onboarding.choice.team-up.roles" -msgstr "邀请角色:" +msgstr "邀请成员担任以下角色:" #: src/app/main/ui/onboarding/team_choice.cljs:222 #, unused @@ -3251,12 +3267,12 @@ msgstr "是的,订阅" #: src/app/main/ui/onboarding/newsletter.cljs:42 #, unused msgid "onboarding.newsletter.acceptance-message" -msgstr "您的订阅请求已发送,我们将向您发送一封电子邮件进行确认。" +msgstr "你的订阅请求已发送,我们会向你发送确认邮件。" #: src/app/main/ui/onboarding/newsletter.cljs:100 #, unused msgid "onboarding.newsletter.policy" -msgstr "隐私策略。" +msgstr "隐私政策。" #: src/app/main/ui/onboarding/newsletter.cljs:65 #, unused @@ -3270,17 +3286,17 @@ msgstr "让我们开始吧!" #: src/app/main/ui/onboarding/questions.cljs:248 #, unused msgid "onboarding.questions.reasons.alternative" -msgstr "寻找 Figma、XD等的替代者" +msgstr "寻找 Figma、XD 等工具的替代方案" #: src/app/main/ui/onboarding/questions.cljs:242 #, unused msgid "onboarding.questions.reasons.exploring" -msgstr "仅浏览" +msgstr "随便看看" #: src/app/main/ui/onboarding/questions.cljs:245 #, unused msgid "onboarding.questions.reasons.fit" -msgstr "评估Penpot是否适合我的团队" +msgstr "评估 Penpot 是否适合我的团队" #: src/app/main/ui/onboarding/questions.cljs:251 #, unused @@ -3290,7 +3306,7 @@ msgstr "自托管前测试" #: src/app/main/ui/onboarding/questions.cljs:407 #, unused msgid "onboarding.questions.referer.article" -msgstr "文章(博客、帖子、实时通讯)" +msgstr "文章(博客、帖子、新闻简报)" #: src/app/main/ui/onboarding/questions.cljs:405 #, unused @@ -3300,11 +3316,11 @@ msgstr "搜索引擎(Google、Yahoo、Bing)" #: src/app/main/ui/onboarding/questions.cljs:406 #, unused msgid "onboarding.questions.referer.social" -msgstr "社交媒体(X、Linkedin、FB等)" +msgstr "社交媒体(X、LinkedIn、Facebook 等)" #: src/app/main/ui/onboarding/questions.cljs:275 msgid "onboarding.questions.start-with.code" -msgstr "从设计中产生真实代码" +msgstr "从设计中生成真实代码" #: src/app/main/ui/onboarding/questions.cljs:273 msgid "onboarding.questions.start-with.ds" @@ -3316,15 +3332,15 @@ msgstr "原型设计" #: src/app/main/ui/onboarding/questions.cljs:267 msgid "onboarding.questions.start-with.ui" -msgstr "设计 App 的 UI/UX" +msgstr "设计应用的 UI/UX" #: src/app/main/ui/onboarding/questions.cljs:269 msgid "onboarding.questions.start-with.wireframing" -msgstr "线框图" +msgstr "线框设计" #: src/app/main/ui/onboarding/questions.cljs:114 msgid "onboarding.questions.step1.question1" -msgstr "您将使用 Penpot 做什么?" +msgstr "你打算使用 Penpot 做什么?" #: src/app/main/ui/onboarding/questions.cljs:272 #, unused @@ -3333,7 +3349,9 @@ msgstr "是什么让你今天来到 Penpot?" #: src/app/main/ui/onboarding/questions.cljs:110 msgid "onboarding.questions.step1.subtitle" -msgstr "请告诉我们一些关于您的信息,帮助我们完善 Penpot。您的回答将帮助我们确定新功能的优先级,并指导您如何开始使用。" +msgstr "" +"请告诉我们一些关于你的信息,帮助我们优化 Penpot。你的回答将帮助我们确定新功能" +"的优先级,并指引你开始使用。" #: src/app/main/ui/onboarding/questions.cljs:107 msgid "onboarding.questions.step1.title" @@ -3341,11 +3359,11 @@ msgstr "帮助我们了解你" #: src/app/main/ui/onboarding/questions.cljs:188 msgid "onboarding.questions.step2.title" -msgstr "这些工具中您最常使用哪个?" +msgstr "你最常使用以下哪个工具?" #: src/app/main/ui/onboarding/questions.cljs:121 msgid "onboarding.questions.step3.question1" -msgstr "您做什么工作?" +msgstr "你从事什么工作?" #: src/app/main/ui/onboarding/questions.cljs:303 #, unused @@ -3359,16 +3377,16 @@ msgstr "你的团队有多少人?" #: src/app/main/ui/onboarding/questions.cljs:242 msgid "onboarding.questions.step3.title" -msgstr "请告诉我们您的工作?" +msgstr "你的公司规模有多大?" #: src/app/main/ui/onboarding/questions.cljs:300 msgid "onboarding.questions.step4.title" -msgstr "您想从哪里开始?" +msgstr "你想从哪里开始?" #: src/app/main/ui/onboarding/questions.cljs:428 #, unused msgid "onboarding.questions.step5.title" -msgstr "您是如何听说Penpot的?" +msgstr "你是如何得知 Penpot 的?" #: src/app/main/ui/onboarding/questions.cljs:233 #, unused @@ -3393,7 +3411,7 @@ msgstr "我是自由工作者" #: src/app/main/ui/onboarding/questions.cljs:230 #, unused msgid "onboarding.questions.team-size.more-than-50" -msgstr "50以上" +msgstr "50 人以上" #: src/app/main/ui/onboarding/questions.cljs:235 #, unused @@ -3418,11 +3436,11 @@ msgstr "创建一个团队" #: src/app/main/ui/onboarding/team_choice.cljs:53 msgid "onboarding.team-modal.create-team-desc" -msgstr "团队能够让你与其它Penpot用户协作处理相同的文件和项目。" +msgstr "团队可以让你与其他 Penpot 用户协作处理相同的文件和项目。" #: src/app/main/ui/onboarding/team_choice.cljs:57 msgid "onboarding.team-modal.create-team-feature-1" -msgstr "无限制的文件和项目" +msgstr "文件和项目数量不限" #: src/app/main/ui/onboarding/team_choice.cljs:59 msgid "onboarding.team-modal.create-team-feature-2" @@ -3434,11 +3452,11 @@ msgstr "角色管理" #: src/app/main/ui/onboarding/team_choice.cljs:63 msgid "onboarding.team-modal.create-team-feature-4" -msgstr "无限制成员" +msgstr "成员数量不限" #: src/app/main/ui/onboarding/team_choice.cljs:65 msgid "onboarding.team-modal.create-team-feature-5" -msgstr "完全免费!" +msgstr "完全免费!" #: src/app/main/ui/onboarding/team_choice.cljs:48 msgid "onboarding.team-modal.team-definition" @@ -3483,11 +3501,11 @@ msgstr "基础" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418 msgid "shortcut-section.dashboard" -msgstr "仪表盘" +msgstr "仪表板" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421 msgid "shortcut-section.viewer" -msgstr "观察者" +msgstr "阅读器" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415 msgid "shortcut-section.workspace" @@ -3496,7 +3514,7 @@ msgstr "工作区" # SUBSECTIONS #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58 msgid "shortcut-subsection.alignment" -msgstr "对准" +msgstr "对齐" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59 msgid "shortcut-subsection.edit" @@ -3640,7 +3658,7 @@ msgstr "移至最上层" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94 msgid "shortcuts.clear-undo" -msgstr "清除回退内容" +msgstr "清除撤销历史" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95 msgid "shortcuts.copy" @@ -3657,7 +3675,7 @@ msgstr "复制属性" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98 msgid "shortcuts.create-new-project" -msgstr "创建新的" +msgstr "新建" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99 msgid "shortcuts.cut" @@ -3701,7 +3719,7 @@ msgstr "路径" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109 msgid "shortcuts.draw-rect" -msgstr "长方形" +msgstr "矩形" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110 msgid "shortcuts.draw-text" @@ -3721,7 +3739,7 @@ msgstr "导出形状" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116 msgid "shortcuts.fit-all" -msgstr "缩放至适应所有" +msgstr "缩放以显示全部" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117 msgid "shortcuts.flip-horizontal" @@ -3733,11 +3751,11 @@ msgstr "垂直翻转" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119 msgid "shortcuts.font-size-dec" -msgstr "缩小字体大小" +msgstr "减小字号" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120 msgid "shortcuts.font-size-inc" -msgstr "增加字体大小" +msgstr "增大字号" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121 msgid "shortcuts.go-to-drafts" @@ -3753,7 +3771,7 @@ msgstr "搜索" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124 msgid "shortcuts.group" -msgstr "组" +msgstr "编组" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125 msgid "shortcuts.h-distribute" @@ -3761,7 +3779,7 @@ msgstr "水平分布" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126 msgid "shortcuts.hide-ui" -msgstr "显示/隐藏UI" +msgstr "显示/隐藏 UI" #: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:127 msgid "shortcuts.increase-zoom" @@ -3777,7 +3795,7 @@ msgstr "切换斜体" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130 msgid "shortcuts.join-nodes" -msgstr "链接节点" +msgstr "连接节点" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131 msgid "shortcuts.line-through" @@ -3785,11 +3803,11 @@ msgstr "切换删除线" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132 msgid "shortcuts.make-corner" -msgstr "制作圆角" +msgstr "转换为角点" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133 msgid "shortcuts.make-curve" -msgstr "制作曲线" +msgstr "转换为曲线" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134 msgid "shortcuts.mask" @@ -3845,47 +3863,47 @@ msgstr "下个画板" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:510 msgid "shortcuts.not-found" -msgstr "没找到快捷方式" +msgstr "未找到快捷键" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147 msgid "shortcuts.opacity-0" -msgstr "设置不透明度为100%" +msgstr "将不透明度设为 100%" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148 msgid "shortcuts.opacity-1" -msgstr "设置不透明度为10%" +msgstr "将不透明度设为 10%" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149 msgid "shortcuts.opacity-2" -msgstr "设置不透明度为20%" +msgstr "将不透明度设为 20%" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150 msgid "shortcuts.opacity-3" -msgstr "设置不透明度为30%" +msgstr "将不透明度设为 30%" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151 msgid "shortcuts.opacity-4" -msgstr "设置不透明度为40%" +msgstr "将不透明度设为 40%" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152 msgid "shortcuts.opacity-5" -msgstr "设置不透明度为50%" +msgstr "将不透明度设为 50%" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153 msgid "shortcuts.opacity-6" -msgstr "设置不透明度为60%" +msgstr "将不透明度设为 60%" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154 msgid "shortcuts.opacity-7" -msgstr "设置不透明度为70%" +msgstr "将不透明度设为 70%" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155 msgid "shortcuts.opacity-8" -msgstr "设置不透明度为80%" +msgstr "将不透明度设为 80%" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156 msgid "shortcuts.opacity-9" -msgstr "设置不透明度为90%" +msgstr "将不透明度设为 90%" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157 msgid "shortcuts.open-color-picker" @@ -3893,23 +3911,23 @@ msgstr "色彩拾取器" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158 msgid "shortcuts.open-comments" -msgstr "前往查阅者评论区" +msgstr "前往阅读器的评论区" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159 msgid "shortcuts.open-dashboard" -msgstr "前往看板" +msgstr "前往仪表板" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160 msgid "shortcuts.open-inspect" -msgstr "转到查看器检查部分" +msgstr "前往阅读器的检查区域" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161 msgid "shortcuts.open-interactions" -msgstr "转往阅读器交互部分" +msgstr "前往阅读器的交互区域" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162 msgid "shortcuts.open-viewer" -msgstr "转往阅读器交互部分" +msgstr "打开阅读器" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163 msgid "shortcuts.open-workspace" @@ -3995,11 +4013,11 @@ msgstr "对齐像素网格" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181 msgid "shortcuts.start-editing" -msgstr "启用编辑" +msgstr "开始编辑" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182 msgid "shortcuts.start-measure" -msgstr "启用测量" +msgstr "开始测量" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183 msgid "shortcuts.stop-measure" @@ -4019,7 +4037,7 @@ msgstr "切换动态对齐" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186 msgid "shortcuts.toggle-assets" -msgstr "切换资产" +msgstr "切换素材面板" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187 msgid "shortcuts.toggle-colorpalette" @@ -4043,11 +4061,11 @@ msgstr "切换历史" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192 msgid "shortcuts.toggle-layers" -msgstr "切换层" +msgstr "切换图层面板" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193 msgid "shortcuts.toggle-layout-flex" -msgstr "添加/删除弹性布局" +msgstr "添加/移除弹性布局" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194 msgid "shortcuts.toggle-layout-grid" @@ -4055,7 +4073,7 @@ msgstr "添加/移除网格布局" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195 msgid "shortcuts.toggle-lock" -msgstr "锁定所选" +msgstr "锁定/解锁" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196 msgid "shortcuts.toggle-lock-size" @@ -4083,7 +4101,7 @@ msgstr "更改主题" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202 msgid "shortcuts.toggle-visibility" -msgstr "切换可见度" +msgstr "显示/隐藏" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203 msgid "shortcuts.toggle-zoom-style" @@ -4095,7 +4113,7 @@ msgstr "切换下划线" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205 msgid "shortcuts.undo" -msgstr "回退" +msgstr "撤销" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206 msgid "shortcuts.ungroup" @@ -4111,27 +4129,27 @@ msgstr "垂直分布" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209 msgid "shortcuts.zoom-lense-decrease" -msgstr "变焦镜头缩小" +msgstr "降低缩放镜倍率" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210 msgid "shortcuts.zoom-lense-increase" -msgstr "变焦镜头放大" +msgstr "提高缩放镜倍率" #: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211 msgid "shortcuts.zoom-selected" -msgstr "缩放到选定对象" +msgstr "缩放至所选对象" #: src/app/main/ui/dashboard/subscription.cljs:118, src/app/main/ui/dashboard/subscription.cljs:299 msgid "subscription.dashboard.power-up.enterprise-plan" -msgstr "企业计划" +msgstr "Enterprise 方案" #: src/app/main/ui/dashboard/subscription.cljs:113 msgid "subscription.dashboard.power-up.enterprise-trial.top-title" -msgstr "企业计划(实验)" +msgstr "Enterprise 方案(试用版)" #: src/app/main/ui/dashboard/subscription.cljs:86 msgid "subscription.dashboard.power-up.professional.top-title" -msgstr "专业计划" +msgstr "Professional 方案" #: src/app/main/ui/dashboard/subscription.cljs:64, src/app/main/ui/settings/subscription.cljs:107, src/app/main/ui/settings/subscription.cljs:131 #, unused @@ -4141,20 +4159,22 @@ msgstr "订阅" #: src/app/main/ui/dashboard/subscription.cljs:98 #, markdown msgid "subscription.dashboard.power-up.trial.bottom-description" -msgstr "试用体验良好?永久解锁完整访问权限。[订阅|target:self](%s)" +msgstr "喜欢试用版吗?永久解锁全部功能。[订阅|target:self](%s)" #: src/app/main/ui/dashboard/subscription.cljs:97 msgid "subscription.dashboard.power-up.trial.top-title" -msgstr "无限计划(试验)" +msgstr "Unlimited 方案(试用版)" #: src/app/main/ui/dashboard/subscription.cljs:104, src/app/main/ui/dashboard/subscription.cljs:298 msgid "subscription.dashboard.power-up.unlimited-plan" -msgstr "无限计划" +msgstr "Unlimited 方案" #: src/app/main/ui/dashboard/subscription.cljs:105 #, markdown msgid "subscription.dashboard.power-up.unlimited.bottom-text" -msgstr "以固定价格为您的所有团队提供无限存储空间、扩展文件恢复能力和无限编辑器。[查看企业版。|target:self](%s)" +msgstr "" +"以固定价格为你拥有的所有团队提供无限存储空间、更长的文件恢复期限和不限数量的" +"编辑者。[查看 Enterprise 方案。|target:self](%s)" #: src/app/main/ui/dashboard/subscription.cljs:70 #, unused @@ -4164,41 +4184,47 @@ msgstr "看一看" #: src/app/main/ui/dashboard/subscription.cljs:68 #, unused msgid "subscription.dashboard.power-up.unlimited.top-description" -msgstr "额外的编辑器、存储和自动保存的版本、文件备份等等。" +msgstr "获得更多编辑席位和存储空间,以及更长的自动保存版本和文件恢复期限等。" #: src/app/main/ui/dashboard/subscription.cljs:85, src/app/main/ui/dashboard/subscription.cljs:96, src/app/main/ui/dashboard/subscription.cljs:103, src/app/main/ui/dashboard/subscription.cljs:112, src/app/main/ui/dashboard/subscription.cljs:117 msgid "subscription.dashboard.power-up.your-subscription" -msgstr "您的订阅:" +msgstr "你的订阅:" #: src/app/main/ui/dashboard/subscription.cljs:333 msgid "subscription.dashboard.professional-dashboard-cta-title" -msgstr "您所拥有的团队共有 %s 名编辑,而您的专业计划最多可拥有 8 名编辑。" +msgstr "你拥有的团队共有 %s 名编辑者,而 Professional 方案最多包含 8 个编辑席位。" #: src/app/main/ui/dashboard/subscription.cljs:341 #, markdown msgid "subscription.dashboard.professional-dashboard-cta-upgrade-owner" -msgstr "请升级到无限版或企业版,以解锁更多编辑席位、存储空间和文件恢复功能。[立即订阅。|target:self](%s)" +msgstr "" +"请立即升级到 Unlimited 或 Enterprise,以获得更多编辑席位和存储空间,并延长文" +"件恢复期限。[立即订阅。|target:self](%s)" #: src/app/main/ui/dashboard/subscription.cljs:274 msgid "subscription.dashboard.team-plan" -msgstr "团队计划" +msgstr "团队方案" #: src/app/main/ui/dashboard/subscription.cljs:336 msgid "subscription.dashboard.unlimited-dashboard-cta-title" -msgstr "您的团队不断壮大!您的无限套餐最多可容纳 %s 位编辑,但现在您有 %s 位。" +msgstr "" +"你的团队还在不断壮大!Unlimited 方案最多包含 %s 个编辑席位,但你目前有 %s 名" +"编辑者。" #: src/app/main/ui/dashboard/subscription.cljs:344 #, markdown msgid "subscription.dashboard.unlimited-dashboard-cta-upgrade-owner" -msgstr "请升级以匹配您当前的编辑数量。[立即订阅。|target:self](%s)" +msgstr "请立即升级,使方案包含的编辑席位符合当前人数。[立即订阅。|target:self](%s)" #: src/app/main/ui/dashboard/subscription.cljs:321 msgid "subscription.dashboard.unlimited-members-extra-editors-cta-text" -msgstr "只有您自有团队中的新编辑人员才会被计入未来账单。25 名及以上编辑人员仍需支付每月 175 美元的固定费用。" +msgstr "" +"只有你拥有的团队中新增的编辑者才会计入后续账单。编辑者达到 25 名后,每月仍按" +"固定价格 175 美元收费。" #: src/app/main/ui/dashboard/subscription.cljs:317 msgid "subscription.dashboard.unlimited-members-extra-editors-cta-title" -msgstr "在无限套餐期间邀请他人" +msgstr "使用 Unlimited 方案时邀请成员" #: src/app/main/ui/dashboard/sidebar.cljs:1330 msgid "subscription.dashboard.upgrade-plan.power-up" @@ -4214,23 +4240,23 @@ msgstr "添加付款方式以便在试用后继续" #: src/app/main/ui/settings/subscription.cljs:606, src/app/main/ui/settings/subscription.cljs:693 msgid "subscription.settings.benefits.all-professional-benefits" -msgstr "所有专业计划权益以及:" +msgstr "包含 Professional 方案的所有权益,此外还有:" #: src/app/main/ui/settings/subscription.cljs:618, src/app/main/ui/settings/subscription.cljs:630, src/app/main/ui/settings/subscription.cljs:640, src/app/main/ui/settings/subscription.cljs:709, src/app/main/ui/settings/subscription.cljs:725 msgid "subscription.settings.benefits.all-unlimited-benefits" -msgstr "所有无限计划权益以及:" +msgstr "包含 Unlimited 方案的所有权益,此外还有:" #: src/app/main/ui/settings/subscription.cljs:62 msgid "subscription.settings.editors" -msgstr "(x %s 位编辑)" +msgstr "(%s 名编辑者)" #: src/app/main/ui/dashboard/subscription.cljs:282, src/app/main/ui/settings/subscription.cljs:116, src/app/main/ui/settings/subscription.cljs:560, src/app/main/ui/settings/subscription.cljs:638, src/app/main/ui/settings/subscription.cljs:705 msgid "subscription.settings.enterprise" -msgstr "企业" +msgstr "Enterprise" #: src/app/main/ui/settings/subscription.cljs:112, src/app/main/ui/settings/subscription.cljs:559, src/app/main/ui/settings/subscription.cljs:628 msgid "subscription.settings.enterprise-trial" -msgstr "企业(实验)" +msgstr "Enterprise(试用版)" #: src/app/main/ui/settings/subscription.cljs:632, src/app/main/ui/settings/subscription.cljs:642, src/app/main/ui/settings/subscription.cljs:711 msgid "subscription.settings.enterprise.autosave" @@ -4246,17 +4272,19 @@ msgstr "无限存储空间" #: src/app/main/ui/dashboard/subscription.cljs:287, src/app/main/ui/settings/subscription.cljs:583, src/app/main/ui/settings/subscription.cljs:610, src/app/main/ui/settings/subscription.cljs:622, src/app/main/ui/settings/subscription.cljs:634, src/app/main/ui/settings/subscription.cljs:644 msgid "subscription.settings.manage-your-subscription" -msgstr "管理您的订阅" +msgstr "管理你的订阅" #: src/app/main/ui/settings/subscription.cljs:128 msgid "subscription.settings.management.dialog.currently-editors-title" msgid_plural "subscription.settings.management.dialog.currently-editors-title" -msgstr[0] "目前,您的团队中有 %s 人可以编辑。" -msgstr[1] "目前,您的团队中有 %s 人可以编辑。" +msgstr[0] "目前,你的各团队中共有 %s 人可以编辑。" +msgstr[1] "目前,你的各团队中共有 %s 人可以编辑。" #: src/app/main/ui/settings/subscription.cljs:260 msgid "subscription.settings.management.dialog.downgrade" -msgstr "注意:切换到较低的计划意味着更少的存储空间和更短的备份和版本历史记录。" +msgstr "" +"请注意:切换到较低级别的方案后,存储空间会减少,文件备份和版本历史记录的保留" +"期限也会缩短。" #: src/app/main/ui/settings/subscription.cljs:282, src/app/main/ui/settings/subscription.cljs:286 #, markdown @@ -4265,11 +4293,11 @@ msgstr "每月 **$%s**" #: src/app/main/ui/settings/subscription.cljs:247 msgid "subscription.settings.management.dialog.title" -msgstr "应用 %s 到您的团队" +msgstr "将 %s 应用于你的团队" #: src/app/main/ui/settings/subscription.cljs:662 msgid "subscription.settings.member-since" -msgstr "Penpot 成员,自从: %s" +msgstr "加入 Penpot 的时间:%s" #: src/app/main/ui/settings/subscription.cljs:685, src/app/main/ui/settings/subscription.cljs:699, src/app/main/ui/settings/subscription.cljs:715, src/app/main/ui/settings/subscription.cljs:731 msgid "subscription.settings.more-information" @@ -4277,15 +4305,15 @@ msgstr "更多信息" #: src/app/main/ui/settings/subscription.cljs:665 msgid "subscription.settings.other-plans" -msgstr "其它 penpot 计划" +msgstr "Penpot 的其他方案" #: src/app/main/ui/dashboard/subscription.cljs:277, src/app/main/ui/settings/subscription.cljs:114, src/app/main/ui/settings/subscription.cljs:591, src/app/main/ui/settings/subscription.cljs:667 msgid "subscription.settings.professional" -msgstr "专业" +msgstr "Professional" #: src/app/main/ui/settings/subscription.cljs:569 msgid "subscription.settings.section-plan" -msgstr "您的订阅" +msgstr "你的订阅" #: src/app/main/ui/settings/subscription.cljs:308, src/app/main/ui/settings/subscription.cljs:679, src/app/main/ui/settings/subscription.cljs:697, src/app/main/ui/settings/subscription.cljs:713, src/app/main/ui/settings/subscription.cljs:729, src/app/main/ui/settings/subscription.cljs:782 msgid "subscription.settings.subscribe" @@ -4293,35 +4321,35 @@ msgstr "订阅" #: src/app/main/ui/settings/subscription.cljs:377 msgid "subscription.settings.success.dialog.footer" -msgstr "享受您的计划!" +msgstr "尽情使用你的方案吧!" #: src/app/main/ui/settings/subscription.cljs:370 msgid "subscription.settings.success.dialog.title" -msgstr "你是 %s!" +msgstr "你已开通 %s!" #: src/app/main/ui/settings/subscription.cljs:655 msgid "subscription.settings.support-us-since" -msgstr "您自从 %s 一直支持我们的这个计划" +msgstr "你从 %s 起一直通过此方案支持我们" #: src/app/main/ui/settings/subscription.cljs:697, src/app/main/ui/settings/subscription.cljs:713 msgid "subscription.settings.try-it-free" -msgstr "免费试用14天" +msgstr "免费试用 14 天" #: src/app/main/ui/dashboard/subscription.cljs:280, src/app/main/ui/settings/subscription.cljs:115, src/app/main/ui/settings/subscription.cljs:557, src/app/main/ui/settings/subscription.cljs:616, src/app/main/ui/settings/subscription.cljs:689 msgid "subscription.settings.unlimited" -msgstr "无限" +msgstr "Unlimited" #: src/app/main/ui/dashboard/subscription.cljs:279, src/app/main/ui/settings/subscription.cljs:111, src/app/main/ui/settings/subscription.cljs:556, src/app/main/ui/settings/subscription.cljs:604 msgid "subscription.settings.unlimited-trial" -msgstr "无限(实验)" +msgstr "Unlimited(试用版)" #: src/app/main/ui/settings/subscription.cljs:609, src/app/main/ui/settings/subscription.cljs:621, src/app/main/ui/settings/subscription.cljs:696 msgid "subscription.settings.unlimited.bill" -msgstr "月度账单上限" +msgstr "每月账单上限为 175 美元" #: src/app/main/ui/dashboard/subscription.cljs:312, src/app/main/ui/workspace/main_menu.cljs:1137 msgid "subscription.workspace.header.menu.option.power-up" -msgstr "升级您的计划" +msgstr "升级你的方案" #: src/app/main/ui/dashboard/files.cljs:179 msgid "title.dashboard.files" @@ -4385,11 +4413,11 @@ msgstr "设置 - %s - Penpot" #: src/app/main/ui/dashboard/team.cljs:1469 msgid "title.team-webhooks" -msgstr "Webhooks - %s - Penpot" +msgstr "Webhook - %s - Penpot" #: src/app/main/ui/viewer.cljs:422 msgid "title.viewer" -msgstr "%s - 预览模式)- Penpot" +msgstr "%s - 预览模式 - Penpot" #: src/app/main/ui/workspace.cljs:239 msgid "title.workspace" @@ -4397,7 +4425,7 @@ msgstr "%s - Penpot" #: src/app/main/ui/ds/controls/utilities/token_field.cljs:106, src/app/main/ui/workspace/sidebar/options/menus/token_typography_row.cljs:67, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:141 msgid "token-actions.detach-token" -msgstr "分离token" +msgstr "分离令牌" #: src/app/main/ui.cljs:138 #, unused @@ -4411,15 +4439,15 @@ msgstr "对不起!" #: src/app/main/ui/viewer.cljs:572 msgid "viewer.empty-state" -msgstr "该页面上未找到任何画框。" +msgstr "此页面上未找到画板。" #: src/app/main/ui/viewer.cljs:577 msgid "viewer.frame-not-found" -msgstr "画框未找到。" +msgstr "未找到画板。" #: src/app/main/ui/viewer/header.cljs:341 msgid "viewer.header.comments-section" -msgstr "注释 (%s)" +msgstr "评论(%s)" #: src/app/main/ui/viewer/interactions.cljs:268 msgid "viewer.header.dont-show-interactions" @@ -4431,7 +4459,7 @@ msgstr "全屏" #: src/app/main/ui/viewer/header.cljs:350 msgid "viewer.header.inspect-section" -msgstr "检查 (%s)" +msgstr "检查(%s)" #: src/app/main/ui/viewer/interactions.cljs:258 msgid "viewer.header.interactions" @@ -4439,7 +4467,7 @@ msgstr "交互" #: src/app/main/ui/viewer/header.cljs:332 msgid "viewer.header.interactions-section" -msgstr "交互 (%s)" +msgstr "交互(%s)" #: src/app/main/ui/viewer/share_link.cljs:188 msgid "viewer.header.share.copy-link" @@ -4463,35 +4491,35 @@ msgstr "上次交付成功。" #: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56 msgid "workspace.align.hcenter" -msgstr "水平居中对齐 (%s)" +msgstr "水平居中对齐(%s)" #: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72 msgid "workspace.align.hdistribute" -msgstr "水平均匀分布 (%s)" +msgstr "水平等距分布(%s)" #: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48 msgid "workspace.align.hleft" -msgstr "靠左对齐 (%s)" +msgstr "左对齐(%s)" #: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64 msgid "workspace.align.hright" -msgstr "靠右对齐 (%s)" +msgstr "右对齐(%s)" #: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97 msgid "workspace.align.vbottom" -msgstr "底部对齐 (%s)" +msgstr "底部对齐(%s)" #: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89 msgid "workspace.align.vcenter" -msgstr "垂直居中对齐 (%s)" +msgstr "垂直居中对齐(%s)" #: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102 msgid "workspace.align.vdistribute" -msgstr "垂直均匀分布 (%s)" +msgstr "垂直等距分布(%s)" #: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81 msgid "workspace.align.vtop" -msgstr "顶部对齐 (%s)" +msgstr "顶部对齐(%s)" #: src/app/main/ui/workspace/sidebar/assets.cljs:181 msgid "workspace.assets.add-library" @@ -4532,7 +4560,7 @@ msgstr "创建组" #: src/app/main/ui/workspace/sidebar/assets/groups.cljs:171 msgid "workspace.assets.create-group-hint" -msgstr "这些物件将按照“组名/物件名”的格式自动命名" +msgstr "这些项目将自动命名为“组名/项目名”" #: src/app/main/ui/workspace/context_menu.cljs:716, src/app/main/ui/workspace/sidebar/assets/colors.cljs:265, src/app/main/ui/workspace/sidebar/assets/components.cljs:670, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:475, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:541 msgid "workspace.assets.delete" @@ -4544,7 +4572,7 @@ msgstr "创建副本" #: src/app/main/ui/workspace/sidebar/assets/components.cljs:649 msgid "workspace.assets.duplicate-main" -msgstr "重复主体" +msgstr "复制主组件" #: src/app/main/ui/workspace/sidebar/assets/colors.cljs:258, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:466 msgid "workspace.assets.edit" @@ -4552,7 +4580,7 @@ msgstr "编辑" #: src/app/main/ui/workspace/sidebar/assets.cljs:195 msgid "workspace.assets.filter" -msgstr "过滤器" +msgstr "筛选" #: src/app/main/ui/workspace/sidebar/assets/graphics.cljs:386, src/app/main/ui/workspace/sidebar/assets.cljs:152 #, unused @@ -4589,7 +4617,7 @@ msgstr "未找到素材" #: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:111 msgid "workspace.assets.open-library" -msgstr "打开库文档" +msgstr "打开库文件" #: src/app/main/ui/workspace/context_menu.cljs:719, src/app/main/ui/workspace/sidebar/assets/colors.cljs:254, src/app/main/ui/workspace/sidebar/assets/components.cljs:645, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:461 msgid "workspace.assets.rename" @@ -4607,8 +4635,8 @@ msgstr "搜索素材" #, unused msgid "workspace.assets.selected-count" msgid_plural "workspace.assets.selected-count" -msgstr[0] "已选中%s个物件" -msgstr[1] "已选中%s个物件" +msgstr[0] "已选中 %s 个项目" +msgstr[1] "已选中 %s 个项目" #: src/app/main/ui/workspace/sidebar/assets.cljs #, unused @@ -4618,8 +4646,8 @@ msgstr "共享库" #: src/app/main/ui/workspace/sidebar/assets/common.cljs:263 msgid "workspace.assets.sidebar.components" msgid_plural "workspace.assets.sidebar.components" -msgstr[0] "1个组件" -msgstr[1] "%s个组件" +msgstr[0] "1 个组件" +msgstr[1] "%s 个组件" #: src/app/main/ui/workspace/sidebar/assets.cljs:213 msgid "workspace.assets.sort" @@ -4640,11 +4668,11 @@ msgstr "字体" #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:577 msgid "workspace.assets.typography.font-size" -msgstr "尺寸" +msgstr "字号" #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:573 msgid "workspace.assets.typography.font-style" -msgstr "文字风格" +msgstr "字体样式" #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:595 msgid "workspace.assets.typography.go-to-edit" @@ -4652,7 +4680,7 @@ msgstr "前往样式库文件进行编辑" #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:585 msgid "workspace.assets.typography.letter-spacing" -msgstr "字距" +msgstr "字间距" #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:581 msgid "workspace.assets.typography.line-height" @@ -4684,7 +4712,7 @@ msgstr "新建画板" #: src/app/main/ui/workspace/context_menu.cljs:857 msgid "workspace.context-menu.grid-cells.merge" -msgstr "合并网格" +msgstr "合并单元格" #: src/app/main/ui/workspace/context_menu.cljs:784 msgid "workspace.context-menu.grid-track.column.add-after" @@ -4728,15 +4756,15 @@ msgstr "复制此行" #: src/app/main/ui/workspace/sidebar/layers.cljs:841 msgid "workspace.focus.focus-mode" -msgstr "禅模式" +msgstr "专注模式" #: src/app/main/ui/workspace/context_menu.cljs:398, src/app/main/ui/workspace/context_menu.cljs:742 msgid "workspace.focus.focus-off" -msgstr "退出禅模式" +msgstr "退出专注模式" #: src/app/main/ui/workspace/context_menu.cljs:397 msgid "workspace.focus.focus-on" -msgstr "关注" +msgstr "进入专注模式" #, unused msgid "workspace.focus.selection" @@ -4748,7 +4776,7 @@ msgstr "线性渐变" #: src/app/util/color.cljs:35 msgid "workspace.gradients.radial" -msgstr "放射渐变" +msgstr "径向渐变" #: src/app/main/ui/workspace/main_menu.cljs:288 msgid "workspace.header.menu.disable-dynamic-alignment" @@ -4756,7 +4784,7 @@ msgstr "禁用动态对齐" #: src/app/main/ui/workspace/main_menu.cljs:249 msgid "workspace.header.menu.disable-scale-content" -msgstr "禁用比例尺" +msgstr "禁用比例缩放" #: src/app/main/ui/workspace/header.cljs #, unused @@ -4781,7 +4809,7 @@ msgstr "启用动态对齐" #: src/app/main/ui/workspace/main_menu.cljs:250 msgid "workspace.header.menu.enable-scale-content" -msgstr "启用比例尺" +msgstr "启用比例缩放" #: src/app/main/ui/workspace/header.cljs #, unused @@ -4810,7 +4838,7 @@ msgstr "隐藏参考线" #: src/app/main/ui/workspace/main_menu.cljs:435 msgid "workspace.header.menu.hide-palette" -msgstr "隐藏调色盘" +msgstr "隐藏调色板" #: src/app/main/ui/workspace/main_menu.cljs:472 msgid "workspace.header.menu.hide-pixel-grid" @@ -4834,16 +4862,16 @@ msgstr "文件" #: src/app/main/ui/workspace/main_menu.cljs:1119 msgid "workspace.header.menu.option.help-info" -msgstr "帮助和信息" +msgstr "帮助与信息" #: src/app/main/ui/workspace/main_menu.cljs:916 #, unused msgid "workspace.header.menu.option.power-up" -msgstr "升级您的计划" +msgstr "升级你的方案" #: src/app/main/ui/workspace/main_menu.cljs:1061 msgid "workspace.header.menu.option.preferences" -msgstr "首选项" +msgstr "偏好设置" #: src/app/main/ui/workspace/main_menu.cljs:1048 msgid "workspace.header.menu.option.view" @@ -4867,7 +4895,7 @@ msgstr "显示参考线" #: src/app/main/ui/workspace/main_menu.cljs:436 msgid "workspace.header.menu.show-palette" -msgstr "显示调色盘" +msgstr "显示调色板" #: src/app/main/ui/workspace/main_menu.cljs:473 msgid "workspace.header.menu.show-pixel-grid" @@ -4915,12 +4943,12 @@ msgstr "正在保存" #: src/app/main/ui/workspace/right_header.cljs:237 msgid "workspace.header.share" -msgstr "共享" +msgstr "分享" #: src/app/main/ui/workspace/right_header.cljs:48, src/app/main/ui/workspace/right_header.cljs:53 #, unused msgid "workspace.header.unsaved" -msgstr "未保存的修改" +msgstr "未保存的更改" #: src/app/main/ui/workspace/right_header.cljs:242 msgid "workspace.header.viewer" @@ -4932,15 +4960,15 @@ msgstr "缩放" #: src/app/main/ui/viewer/header.cljs:109 msgid "workspace.header.zoom-fill" -msgstr "填充 - 填充比例" +msgstr "填充 - 缩放以填满" #: src/app/main/ui/viewer/header.cljs:102 msgid "workspace.header.zoom-fit" -msgstr "适合 - 缩小以适合" +msgstr "适合 - 缩小以适应" #: src/app/main/ui/workspace/right_header.cljs:98 msgid "workspace.header.zoom-fit-all" -msgstr "缩放以适应所有" +msgstr "缩放以显示全部" #: src/app/main/ui/viewer/header.cljs:116 msgid "workspace.header.zoom-full-screen" @@ -4948,7 +4976,7 @@ msgstr "全屏" #: src/app/main/ui/workspace/right_header.cljs:105 msgid "workspace.header.zoom-selected" -msgstr "缩放到选定的位置" +msgstr "缩放至所选对象" #: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:294, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:296, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:854 msgid "workspace.layout-grid.editor.options.edit-grid" @@ -4964,7 +4992,7 @@ msgstr "下内边距" #: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:668, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:669 msgid "workspace.layout-grid.editor.padding.expand" -msgstr "显示4边内距选项" +msgstr "显示四边内边距选项" #: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:419, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436 msgid "workspace.layout-grid.editor.padding.horizontal" @@ -5009,15 +5037,15 @@ msgstr "添加" #: src/app/main/ui/workspace/color_palette.cljs:203, src/app/main/ui/workspace/colorpicker/libraries.cljs:372, src/app/main/ui/workspace/colorpicker/libraries.cljs:403 msgid "workspace.libraries.colors.empty-palette" -msgstr "你的库中还没有颜色风格" +msgstr "你的库中还没有颜色样式" #: src/app/main/ui/workspace/text_palette.cljs:158 msgid "workspace.libraries.colors.empty-typography-palette" -msgstr "你的库中还没有排版风格" +msgstr "你的库中还没有排版样式" #: src/app/main/ui/workspace/color_palette_ctx_menu.cljs:97, src/app/main/ui/workspace/colorpicker/libraries.cljs:220, src/app/main/ui/workspace/text_palette_ctx_menu.cljs:49 msgid "workspace.libraries.colors.file-library" -msgstr "文档库" +msgstr "文件库" #: src/app/main/ui/workspace/colorpicker.cljs #, unused @@ -5031,7 +5059,7 @@ msgstr "最近使用的颜色" #: src/app/main/ui/workspace/colorpicker.cljs #, unused msgid "workspace.libraries.colors.rgb-complementary" -msgstr "RGB互补" +msgstr "RGB 互补色" #: src/app/main/ui/workspace/colorpicker.cljs:364 msgid "workspace.libraries.colors.rgba" @@ -5039,23 +5067,23 @@ msgstr "RGBA" #: src/app/main/ui/workspace/colorpicker.cljs:562 msgid "workspace.libraries.colors.save-color" -msgstr "保存颜色风格" +msgstr "保存颜色样式" #: src/app/main/ui/workspace/libraries.cljs:432 msgid "workspace.libraries.empty.add-some" -msgstr "或者添加一些这样的来试试:" +msgstr "也可以添加以下内容试用:" #: src/app/main/ui/workspace/libraries.cljs:426 msgid "workspace.libraries.empty.no-libraries" -msgstr "您的团队中没有共享库,您可以查找" +msgstr "你的团队中没有共享库,你可以查找" #: src/app/main/ui/workspace/libraries.cljs:430 msgid "workspace.libraries.empty.some-templates" -msgstr "这里有些模版" +msgstr "这里的一些模板" #: src/app/main/ui/workspace/libraries.cljs:336 msgid "workspace.libraries.file-library" -msgstr "文档库" +msgstr "文件库" #: src/app/main/ui/workspace/libraries.cljs:330 msgid "workspace.libraries.in-this-file" @@ -5081,7 +5109,7 @@ msgstr "加载中…" #: src/app/main/ui/workspace/libraries.cljs:387 #, unused msgid "workspace.libraries.more-templates" -msgstr "您可以搜索 " +msgstr "你可以查找 " #: src/app/main/ui/workspace/libraries.cljs:526 msgid "workspace.libraries.no-libraries-need-sync" @@ -5089,7 +5117,7 @@ msgstr "没有需要更新的共享库" #: src/app/main/ui/workspace/libraries.cljs:440 msgid "workspace.libraries.no-matches-for" -msgstr "没有找到“%s”的匹配项" +msgstr "未找到与“%s”匹配的结果" #: src/app/main/ui/workspace/libraries.cljs:394 msgid "workspace.libraries.search-shared-libraries" @@ -5101,21 +5129,21 @@ msgstr "共享库" #: src/app/main/ui/workspace/libraries.cljs:414 msgid "workspace.libraries.shared-library-btn" -msgstr "连接共享库" +msgstr "连接库" #: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:332 #, unused msgid "workspace.libraries.text.multiple-typography" -msgstr "复合排版" +msgstr "多种排版" #: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:335 #, unused msgid "workspace.libraries.text.multiple-typography-tooltip" -msgstr "断开所有排版的链接" +msgstr "取消链接所有排版" #: src/app/main/ui/workspace/libraries.cljs:381 msgid "workspace.libraries.unlink-library-btn" -msgstr "断开共享库" +msgstr "断开库连接" #: src/app/main/ui/workspace/libraries.cljs:548 msgid "workspace.libraries.update" @@ -5123,7 +5151,7 @@ msgstr "更新" #: src/app/main/ui/workspace/libraries.cljs:624 msgid "workspace.libraries.update.see-all-changes" -msgstr "查看所有修改" +msgstr "查看所有更改" #: src/app/main/ui/workspace/libraries.cljs:671 msgid "workspace.libraries.updates" @@ -5131,7 +5159,7 @@ msgstr "更新" #: src/app/main/ui/ds/notifications/shared/notification_pill.cljs:61 msgid "workspace.notification-pill.detail" -msgstr "细节" +msgstr "详细信息" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:784 msgid "workspace.options.add-interaction" @@ -5156,7 +5184,7 @@ msgstr "编组模糊" #: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:276 msgid "workspace.options.blur-options.title.multiple" -msgstr "选项模糊" +msgstr "所选对象的模糊" #: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:160 msgid "workspace.options.blur-options.toggle-blur" @@ -5168,7 +5196,7 @@ msgstr "画布背景" #: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:692 msgid "workspace.options.clip-content" -msgstr "剪辑内容" +msgstr "裁剪内容" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1023, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1029, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1278 msgid "workspace.options.component" @@ -5192,11 +5220,11 @@ msgstr "编辑注释" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1036, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1282 msgid "workspace.options.component.main" -msgstr "主要" +msgstr "主组件" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:781 msgid "workspace.options.component.swap" -msgstr "交换组件" +msgstr "替换组件" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:818 msgid "workspace.options.component.swap.empty" @@ -5208,31 +5236,31 @@ msgstr "未链接" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:570 msgid "workspace.options.component.variant.duplicated.copy.locate" -msgstr "转到主组件" +msgstr "定位冲突的变体" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1337 msgid "workspace.options.component.variant.duplicated.group.locate" -msgstr "定位到复制的变体" +msgstr "定位重复的变体" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1327 msgid "workspace.options.component.variant.malformed.group.locate" -msgstr "定位无效的变体" +msgstr "定位无效变体" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1324 msgid "workspace.options.component.variant.malformed.group.title" -msgstr "一些变体的名字无效" +msgstr "部分变体的名称无效" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:251 msgid "workspace.options.component.variant.malformed.single.all" -msgstr "这些变体的名字无效。" +msgstr "这些变体的名称无效。" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:248 msgid "workspace.options.component.variant.malformed.single.one" -msgstr "这个变体的名字无效。" +msgstr "此变体的名称无效。" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:254 msgid "workspace.options.component.variant.malformed.single.some" -msgstr "其中一些变体的名字无效。" +msgstr "其中部分变体的名称无效。" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:433 msgid "workspace.options.component.variant.malformed.structure.example" @@ -5244,15 +5272,15 @@ msgstr "尝试使用下面的结构:" #: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:67 msgid "workspace.options.component.variants-help-modal.rule1" -msgstr "共享相同的名字。" +msgstr "名称相同。" #: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:76 msgid "workspace.options.component.variants-help-modal.rule2" -msgstr "是相同的类型。" +msgstr "类型相同。" #: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:87 msgid "workspace.options.component.variants-help-modal.rule3" -msgstr "存在相同的层级。" +msgstr "位于同一层级。" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1041, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1285, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47 msgid "workspace.options.component.variants-help-modal.title" @@ -5309,13 +5337,13 @@ msgstr "导出" #: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/inspect/exports.cljs #, unused msgid "workspace.options.export-multiple" -msgstr "导出已选择" +msgstr "导出所选对象" #: src/app/main/ui/inspect/exports.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274 msgid "workspace.options.export-object" msgid_plural "workspace.options.export-object" -msgstr[0] "输出1个元素" -msgstr[1] "输出%s元素" +msgstr[0] "导出 1 个元素" +msgstr[1] "导出 %s 个元素" #: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:213 msgid "workspace.options.export.add-export" @@ -5363,7 +5391,7 @@ msgstr "调整画板适应内容大小" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:704 msgid "workspace.options.flows.add-flow-start" -msgstr "增加流程起点" +msgstr "添加流程起点" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:700 msgid "workspace.options.flows.flow" @@ -5380,7 +5408,7 @@ msgstr "所有流程起点" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155 #, unused msgid "workspace.options.flows.remove-flow" -msgstr "移除流" +msgstr "移除流程" #: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32 msgid "workspace.options.grid.auto" @@ -5406,7 +5434,7 @@ msgstr "列" #: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266 msgid "workspace.options.grid.params.gutter" -msgstr "栅格间隔" +msgstr "间距" #: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253 msgid "workspace.options.grid.params.height" @@ -5481,15 +5509,15 @@ msgstr "编组填充" #: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:69 msgid "workspace.options.group-stroke" -msgstr "编组边框" +msgstr "组描边" #: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:337 msgid "workspace.options.guides.add-guide" -msgstr "新增辅助线" +msgstr "添加参考线" #: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188 msgid "workspace.options.guides.remove-guide" -msgstr "移除辅助线" +msgstr "移除参考线" #: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:334 msgid "workspace.options.guides.title" @@ -5497,7 +5525,7 @@ msgstr "参考线" #: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184 msgid "workspace.options.guides.toggle-guide" -msgstr "切换辅助线" +msgstr "切换参考线" #: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:553, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:572 msgid "workspace.options.height" @@ -5509,7 +5537,7 @@ msgstr "检查" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:438 msgid "workspace.options.interaction-action" -msgstr "执行" +msgstr "操作" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:344 msgid "workspace.options.interaction-after-delay" @@ -5521,7 +5549,7 @@ msgstr "动画" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:383 msgid "workspace.options.interaction-animation-dissolve" -msgstr "解散" +msgstr "淡化" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:382 msgid "workspace.options.interaction-animation-none" @@ -5529,7 +5557,7 @@ msgstr "无" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:389 msgid "workspace.options.interaction-animation-push" -msgstr "推送" +msgstr "推入" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:384 msgid "workspace.options.interaction-animation-slide" @@ -5541,7 +5569,7 @@ msgstr "自动" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:570 msgid "workspace.options.interaction-background" -msgstr "添加背景覆盖" +msgstr "添加背景叠加层" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:563 msgid "workspace.options.interaction-close-outside" @@ -5549,11 +5577,11 @@ msgstr "点击外部时关闭" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:349 msgid "workspace.options.interaction-close-overlay" -msgstr "关闭覆盖" +msgstr "关闭叠加层" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58 msgid "workspace.options.interaction-close-overlay-dest" -msgstr "关闭遮罩层: %s" +msgstr "关闭叠加层:%s" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426 msgid "workspace.options.interaction-delay" @@ -5561,7 +5589,7 @@ msgstr "延迟" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:449, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:455 msgid "workspace.options.interaction-destination" -msgstr "目的地" +msgstr "目标" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:628 msgid "workspace.options.interaction-duration" @@ -5569,11 +5597,11 @@ msgstr "持续时间" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:641 msgid "workspace.options.interaction-easing" -msgstr "平滑" +msgstr "缓动" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:393 msgid "workspace.options.interaction-easing-ease" -msgstr "缓解" +msgstr "缓动" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:394 msgid "workspace.options.interaction-easing-ease-in" @@ -5581,7 +5609,7 @@ msgstr "缓入" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:396 msgid "workspace.options.interaction-easing-ease-in-out" -msgstr "缓进缓出" +msgstr "缓入缓出" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:395 msgid "workspace.options.interaction-easing-ease-out" @@ -5594,7 +5622,7 @@ msgstr "线性" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs #, unused msgid "workspace.options.interaction-in" -msgstr "在" +msgstr "进入" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:341 msgid "workspace.options.interaction-mouse-enter" @@ -5614,11 +5642,11 @@ msgstr "导航至" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52 msgid "workspace.options.interaction-navigate-to-dest" -msgstr "导航到: %s" +msgstr "导航至:%s" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:357 msgid "workspace.options.interaction-none" -msgstr "(未设定)" +msgstr "(未设置)" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:654 msgid "workspace.options.interaction-offset-effect" @@ -5634,16 +5662,16 @@ msgstr "打开叠加层" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54 msgid "workspace.options.interaction-open-overlay-dest" -msgstr "打开覆盖:%s" +msgstr "打开叠加层:%s" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:351 msgid "workspace.options.interaction-open-url" -msgstr "打开网址" +msgstr "打开 URL" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs #, unused msgid "workspace.options.interaction-out" -msgstr "外" +msgstr "退出" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:556 msgid "workspace.options.interaction-pos-bottom-center" @@ -5663,7 +5691,7 @@ msgstr "居中" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373 msgid "workspace.options.interaction-pos-manual" -msgstr "手册" +msgstr "手动" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:532 msgid "workspace.options.interaction-pos-top-center" @@ -5687,7 +5715,7 @@ msgstr "保留滚动位置" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:350 msgid "workspace.options.interaction-prev-screen" -msgstr "上一个屏幕" +msgstr "上一画面" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:494 msgid "workspace.options.interaction-relative-to" @@ -5695,15 +5723,15 @@ msgstr "相对于" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:356, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371 msgid "workspace.options.interaction-self" -msgstr "自己" +msgstr "自身" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:348 msgid "workspace.options.interaction-toggle-overlay" -msgstr "切换覆盖层" +msgstr "切换叠加层" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56 msgid "workspace.options.interaction-toggle-overlay-dest" -msgstr "切换覆盖:%s" +msgstr "切换叠加层:%s" #: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:415 msgid "workspace.options.interaction-trigger" @@ -5886,7 +5914,7 @@ msgstr "反向行" #: src/app/main/ui/workspace/sidebar/options/menus/layout.cljs #, unused msgid "workspace.options.layout.gap" -msgstr "差距" +msgstr "间距" #: src/app/main/ui/workspace/sidebar/options/menus/layout.cljs #, unused @@ -5911,7 +5939,7 @@ msgstr "简易外边距" #: src/app/main/ui/workspace/sidebar/options/menus/layout.cljs #, unused msgid "workspace.options.layout.packed" -msgstr "收起" +msgstr "紧凑" #: src/app/main/ui/workspace/sidebar/options/menus/layout.cljs #, unused @@ -5936,12 +5964,12 @@ msgstr "右" #: src/app/main/ui/workspace/sidebar/options/menus/layout.cljs #, unused msgid "workspace.options.layout.space-around" -msgstr "周围留空" +msgstr "两侧留白" #: src/app/main/ui/workspace/sidebar/options/menus/layout.cljs #, unused msgid "workspace.options.layout.space-between" -msgstr "间隔留空" +msgstr "两端对齐" #: src/app/main/ui/workspace/sidebar/options/menus/layout.cljs #, unused @@ -5954,7 +5982,7 @@ msgstr "更多颜色" #: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:227 msgid "workspace.options.more-lib-colors" -msgstr "更多共享库颜色" +msgstr "更多库颜色" #: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:240, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:297 msgid "workspace.options.opacity" @@ -6019,11 +6047,11 @@ msgstr "已选颜色" #: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:104 msgid "workspace.options.selection-fill" -msgstr "选项填充" +msgstr "所选对象的填充" #: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:68 msgid "workspace.options.selection-stroke" -msgstr "选项边框" +msgstr "所选对象的描边" #: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:154 msgid "workspace.options.shadow-options.add-shadow" @@ -6059,7 +6087,7 @@ msgstr "移除阴影" #: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/rows/shadow_row.cljs:190, src/app/main/ui/workspace/sidebar/options/rows/shadow_row.cljs:192 msgid "workspace.options.shadow-options.spread" -msgstr "展开" +msgstr "扩散" #: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:149 msgid "workspace.options.shadow-options.title" @@ -6071,7 +6099,7 @@ msgstr "编组阴影" #: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:147 msgid "workspace.options.shadow-options.title.multiple" -msgstr "选项阴影" +msgstr "所选对象的阴影" #: src/app/main/ui/workspace/sidebar/options/rows/shadow_row.cljs:156 msgid "workspace.options.shadow-options.toggle-shadow" @@ -6095,16 +6123,16 @@ msgstr "尺寸预设" #: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:587 msgid "workspace.options.size.lock" -msgstr "锁定比率" +msgstr "锁定比例" #: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:587 msgid "workspace.options.size.unlock" -msgstr "解锁比率" +msgstr "解锁比例" #: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44 #, unused msgid "workspace.options.stroke" -msgstr "边框" +msgstr "描边" #: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs #, unused @@ -6118,11 +6146,11 @@ msgstr "圆形" #: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs #, unused msgid "workspace.options.stroke-cap.diamond-marker" -msgstr "钻石标记" +msgstr "菱形标记" #: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:200 msgid "workspace.options.stroke-cap.diamond-marker-short" -msgstr "钻石" +msgstr "菱形" #: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs #, unused @@ -6135,7 +6163,7 @@ msgstr "箭头" #: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:194 msgid "workspace.options.stroke-cap.none" -msgstr "无边框" +msgstr "无" #: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:202 msgid "workspace.options.stroke-cap.round" @@ -6165,11 +6193,11 @@ msgstr "三角形" #: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:233 msgid "workspace.options.stroke-color" -msgstr "线条颜色" +msgstr "描边颜色" #: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:268, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:291 msgid "workspace.options.stroke-width" -msgstr "线宽" +msgstr "描边宽度" #: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:209 msgid "workspace.options.stroke.add-stroke" @@ -6181,15 +6209,15 @@ msgstr "居中" #: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163 msgid "workspace.options.stroke.dashed" -msgstr "长虚线" +msgstr "虚线" #: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:162 msgid "workspace.options.stroke.dotted" -msgstr "虚线" +msgstr "点线" #: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136 msgid "workspace.options.stroke.inner" -msgstr "内部" +msgstr "内侧" #: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:164 msgid "workspace.options.stroke.mixed" @@ -6197,7 +6225,7 @@ msgstr "混合" #: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137 msgid "workspace.options.stroke.outer" -msgstr "外部" +msgstr "外侧" #: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:224, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:253 msgid "workspace.options.stroke.remove-stroke" @@ -6259,7 +6287,7 @@ msgstr "无" #: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:211 msgid "workspace.options.text-options.strikethrough" -msgstr "删除线 (%s)" +msgstr "删除线(%s)" #: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:68 msgid "workspace.options.text-options.text-align-center" @@ -6287,7 +6315,7 @@ msgstr "编组文本" #: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:372 msgid "workspace.options.text-options.title-selection" -msgstr "选项文本" +msgstr "所选对象的文本" #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs #, unused @@ -6296,7 +6324,7 @@ msgstr "首字母大写" #: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:206 msgid "workspace.options.text-options.underline" -msgstr "下划线 (%s)" +msgstr "下划线(%s)" #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs #, unused @@ -6313,11 +6341,11 @@ msgstr "宽度" #: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:623 msgid "workspace.options.x" -msgstr "X轴" +msgstr "X 轴" #: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:634 msgid "workspace.options.y" -msgstr "Y轴" +msgstr "Y 轴" #: src/app/main/ui/workspace/viewport/path_actions.cljs:166 msgid "workspace.path.actions.add-node" @@ -6337,11 +6365,11 @@ msgstr "连接节点(%s)" #: src/app/main/ui/workspace/viewport/path_actions.cljs:203 msgid "workspace.path.actions.make-corner" -msgstr "转锐角 (%s)" +msgstr "转换为角点(%s)" #: src/app/main/ui/workspace/viewport/path_actions.cljs:210 msgid "workspace.path.actions.make-curve" -msgstr "转圆角 (%s)" +msgstr "转换为曲线(%s)" #: src/app/main/ui/workspace/viewport/path_actions.cljs:181 msgid "workspace.path.actions.merge-nodes" @@ -6357,7 +6385,7 @@ msgstr "拆分节点(%s)" #: src/app/main/ui/workspace/viewport/path_actions.cljs:217 msgid "workspace.path.actions.snap-nodes" -msgstr "对接节点 (%s)" +msgstr "吸附节点(%s)" #: src/app/main/ui/workspace/plugins.cljs:98 msgid "workspace.plugins.button-open" @@ -6366,7 +6394,7 @@ msgstr "打开" #: src/app/main/ui/workspace/plugins.cljs:215 #, markdown msgid "workspace.plugins.discover" -msgstr "发现 [more plugins](%s)" +msgstr "发现[更多插件](%s)" #: src/app/main/ui/workspace/plugins.cljs:222 msgid "workspace.plugins.empty-plugins" @@ -6406,19 +6434,19 @@ msgstr "保存数据至浏览器。" #: src/app/main/ui/workspace/plugins.cljs:290 msgid "workspace.plugins.permissions.comment-read" -msgstr "阅读您的评论和回复。" +msgstr "读取你的评论和回复。" #: src/app/main/ui/workspace/plugins.cljs:277 msgid "workspace.plugins.permissions.library-read" -msgstr "阅读您的库和资源。" +msgstr "读取你的库和素材。" #: src/app/main/ui/workspace/plugins.cljs:271 msgid "workspace.plugins.permissions.library-write" -msgstr "阅读和修改您的库和资源。" +msgstr "读取和修改你的库和素材。" #: src/app/main/ui/workspace/plugins.cljs:359 msgid "workspace.plugins.permissions.title" -msgstr "'%s' 插件需要访问:" +msgstr "“%s”插件需要访问:" #: src/app/main/ui/workspace/plugins.cljs:227 msgid "workspace.plugins.plugin-list-link" @@ -6430,11 +6458,11 @@ msgstr "移除插件" #: src/app/main/ui/workspace/plugins.cljs:195 msgid "workspace.plugins.search-placeholder" -msgstr "写入插件 URL" +msgstr "输入插件 URL" #, unused msgid "workspace.plugins.success" -msgstr "插件已正确载入。" +msgstr "插件已成功加载。" #: src/app/main/ui/workspace/plugins.cljs:188 msgid "workspace.plugins.title" @@ -6442,11 +6470,11 @@ msgstr "插件" #: src/app/main/ui/workspace/plugins.cljs:494 msgid "workspace.plugins.try-out.cancel" -msgstr "不是现在" +msgstr "暂不" #: src/app/main/ui/workspace/plugins.cljs:483 msgid "workspace.plugins.try-out.title" -msgstr "'%s' 插件已为您的使用者安装!" +msgstr "“%s”插件已为你的账号安装!" #: src/app/main/ui/workspace/plugins.cljs:500 msgid "workspace.plugins.try-out.try" @@ -6454,7 +6482,7 @@ msgstr "尝试插件" #: src/app/main/ui/workspace/context_menu.cljs:572 msgid "workspace.shape.menu.add-flex" -msgstr "添加弹性布局" +msgstr "添加 Flex 布局" #: src/app/main/ui/workspace/context_menu.cljs:576 msgid "workspace.shape.menu.add-grid" @@ -6470,7 +6498,7 @@ msgstr "创建变体" #: src/app/main/ui/workspace/sidebar/assets/common.cljs:590, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1069, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1217, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1303 msgid "workspace.shape.menu.add-variant-property" -msgstr "新增新属性" +msgstr "添加新属性" #: src/app/main/ui/workspace/context_menu.cljs:289 msgid "workspace.shape.menu.back" @@ -6498,7 +6526,7 @@ msgstr "复制为 CSS" #: src/app/main/ui/workspace/context_menu.cljs:223 msgid "workspace.shape.menu.copy-css-nested" -msgstr "复制为 CSS (嵌套层)" +msgstr "复制为 CSS(嵌套图层)" #: src/app/main/ui/workspace/context_menu.cljs:206 msgid "workspace.shape.menu.copy-link" @@ -6506,7 +6534,7 @@ msgstr "复制链接" #: src/app/main/ui/workspace/context_menu.cljs:219 msgid "workspace.shape.menu.copy-paste-as" -msgstr "复制/粘贴为..." +msgstr "复制/粘贴为…" #: src/app/main/ui/workspace/context_menu.cljs:238 msgid "workspace.shape.menu.copy-props" @@ -6570,7 +6598,7 @@ msgstr "编辑" #: src/app/main/ui/workspace/context_menu.cljs:469, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:100 msgid "workspace.shape.menu.exclude" -msgstr "相减" +msgstr "排除重叠" #: src/app/main/ui/workspace/context_menu.cljs:447, src/app/main/ui/workspace/context_menu.cljs:476, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:104 msgid "workspace.shape.menu.flatten" @@ -6599,7 +6627,7 @@ msgstr "移至顶层" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs, src/app/main/ui/workspace/context_menu.cljs #, unused msgid "workspace.shape.menu.go-main" -msgstr "前往主组件文档" +msgstr "前往主组件文件" #: src/app/main/ui/workspace/context_menu.cljs:371 msgid "workspace.shape.menu.group" @@ -6615,7 +6643,7 @@ msgstr "显示/隐藏界面" #: src/app/main/ui/workspace/context_menu.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:95 msgid "workspace.shape.menu.intersection" -msgstr "差集" +msgstr "交集" #: src/app/main/ui/workspace/context_menu.cljs:500, src/app/main/ui/workspace/sidebar/layer_item.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:271, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:324 msgid "workspace.shape.menu.lock" @@ -6623,7 +6651,7 @@ msgstr "锁定" #: src/app/main/ui/workspace/context_menu.cljs:376 msgid "workspace.shape.menu.mask" -msgstr "蒙板" +msgstr "蒙版" #: src/app/main/ui/workspace/context_menu.cljs:212, src/app/main/ui/workspace/context_menu.cljs:734 msgid "workspace.shape.menu.paste" @@ -6639,7 +6667,7 @@ msgstr "路径" #: src/app/main/ui/workspace/context_menu.cljs:562 msgid "workspace.shape.menu.remove-flex" -msgstr "删除弹性布局" +msgstr "移除 Flex 布局" #: src/app/main/ui/workspace/context_menu.cljs:565 msgid "workspace.shape.menu.remove-grid" @@ -6663,11 +6691,11 @@ msgstr "重命名" #: src/app/main/ui/workspace/sidebar/assets/common.cljs:571 msgid "workspace.shape.menu.reset-overrides" -msgstr "还原自定义选项" +msgstr "重置覆盖项" #: src/app/main/ui/workspace/sidebar/assets/common.cljs:577 msgid "workspace.shape.menu.restore-main" -msgstr "恢复主要组件" +msgstr "恢复主组件" #: src/app/main/ui/workspace/sidebar/assets/common.cljs:576 msgid "workspace.shape.menu.restore-variant" @@ -6708,7 +6736,7 @@ msgstr "取消编组" #: src/app/main/ui/workspace/context_menu.cljs:460, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:85 msgid "workspace.shape.menu.union" -msgstr "相加" +msgstr "并集" #: src/app/main/ui/workspace/context_menu.cljs:497, src/app/main/ui/workspace/sidebar/layer_item.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:278, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:330 msgid "workspace.shape.menu.unlock" @@ -6721,7 +6749,7 @@ msgstr "取消蒙版" #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs, src/app/main/ui/workspace/sidebar/options/menus/component.cljs, src/app/main/ui/workspace/context_menu.cljs, src/app/main/ui/workspace/context_menu.cljs #, unused msgid "workspace.shape.menu.update-components-in-bulk" -msgstr "更新主要组件" +msgstr "更新主组件" #: src/app/main/ui/workspace/sidebar/assets/common.cljs:583 msgid "workspace.shape.menu.update-main" @@ -6761,7 +6789,7 @@ msgstr "图片" #: src/app/main/ui/workspace/sidebar/layers.cljs:635, src/app/main/ui/workspace/sidebar/layers.cljs:685 msgid "workspace.sidebar.layers.masks" -msgstr "遮罩" +msgstr "蒙版" #: src/app/main/ui/workspace/sidebar/layers.cljs:566 msgid "workspace.sidebar.layers.search" @@ -6777,7 +6805,7 @@ msgstr "文本" #: src/app/main/ui/inspect/attributes/svg.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/svg_attrs.cljs:113 msgid "workspace.sidebar.options.svg-attrs.title" -msgstr "已导入SVG属性" +msgstr "已导入的 SVG 属性" #: src/app/main/ui/workspace/sidebar/sitemap.cljs:291 msgid "workspace.sidebar.sitemap" @@ -6785,7 +6813,7 @@ msgstr "页面" #: src/app/main/ui/workspace/sidebar/sitemap.cljs:301 msgid "workspace.sidebar.sitemap.add-page" -msgstr "新增页" +msgstr "添加页面" #: src/app/main/ui/workspace/left_header.cljs:93 msgid "workspace.sitemap" @@ -6793,24 +6821,24 @@ msgstr "站点地图" #: src/app/main/ui/workspace/tokens/themes/theme_selector.cljs:87 msgid "workspace.tokens.active-themes" -msgstr "%s 个活动的主题" +msgstr "%s 个已启用的令牌主题" #: src/app/main/ui/workspace/tokens/sidebar.cljs #, unused msgid "workspace.tokens.add set" -msgstr "新增集" +msgstr "添加令牌集" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:65, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:148, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:344 msgid "workspace.tokens.add-new-theme" -msgstr "新增新主题" +msgstr "添加令牌主题" #: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62 msgid "workspace.tokens.add-set-to-group" -msgstr "新增集至此编组" +msgstr "向此组添加令牌集" #: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:199, src/app/main/ui/workspace/tokens/management/group.cljs:183 msgid "workspace.tokens.add-token" -msgstr "新增令牌:%s" +msgstr "添加令牌:%s" #: src/app/main/ui/workspace/tokens/management/token_pill.cljs:141 msgid "workspace.tokens.applied-to" @@ -6822,11 +6850,11 @@ msgstr "轴" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:353 msgid "workspace.tokens.back-to-themes" -msgstr "返回到主题列表" +msgstr "返回令牌主题列表" #: src/app/main/ui/workspace/tokens/settings/menu.cljs:88 msgid "workspace.tokens.base-font-size" -msgstr "基本字体大小" +msgstr "基准字号" #: src/app/main/ui/workspace/tokens/modals/import.cljs:127 #, unused @@ -6844,7 +6872,7 @@ msgstr "颜色" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:56 msgid "workspace.tokens.create-new-theme" -msgstr "现在创建您的第一个主题。" +msgstr "立即创建你的第一个令牌主题。" #: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44 msgid "workspace.tokens.create-one" @@ -6852,15 +6880,15 @@ msgstr "创建一个。" #: src/app/main/ui/workspace/tokens/management/context_menu.cljs:360 msgid "workspace.tokens.delete" -msgstr "删除 token" +msgstr "删除令牌" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:137 msgid "workspace.tokens.delete-theme-title" -msgstr "删除主题" +msgstr "删除令牌主题" #: src/app/main/ui/workspace/tokens/management/context_menu.cljs:354 msgid "workspace.tokens.duplicate" -msgstr "复制 token" +msgstr "复制令牌" #: src/app/main/data/workspace/tokens/library_edit.cljs:352 msgid "workspace.tokens.duplicate-suffix" @@ -6868,15 +6896,15 @@ msgstr "复制" #: src/app/main/ui/workspace/tokens/management/context_menu.cljs:340 msgid "workspace.tokens.edit" -msgstr "编辑 token" +msgstr "编辑令牌" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343 msgid "workspace.tokens.edit-theme-title" -msgstr "编辑主题" +msgstr "编辑令牌主题" #: src/app/main/ui/workspace/tokens/themes/theme_selector.cljs:75 msgid "workspace.tokens.edit-themes" -msgstr "编辑主题" +msgstr "编辑令牌主题" #: src/app/main/ui/workspace/tokens/export/modal.cljs:48 msgid "workspace.tokens.export" @@ -6884,7 +6912,7 @@ msgstr "导出" #: src/app/main/ui/workspace/tokens/export/modal.cljs:124 msgid "workspace.tokens.export-tokens" -msgstr "导出 tokens" +msgstr "导出令牌" #: src/app/main/ui/workspace/tokens/export/modal.cljs:34 msgid "workspace.tokens.export.preview" @@ -6905,7 +6933,7 @@ msgstr "错误: " #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:92 msgid "workspace.tokens.group-name" -msgstr "编组名称" +msgstr "令牌组名称" #: src/app/main/ui/workspace/tokens/import/modal.cljs:232 msgid "workspace.tokens.import-button-prefix" @@ -6926,35 +6954,35 @@ msgstr "ZIP 文件" #: src/app/main/ui/workspace/tokens/sidebar.cljs:414, src/app/main/ui/workspace/tokens/sidebar.cljs:415 #, unused msgid "workspace.tokens.import-tooltip" -msgstr "导入 JSON 文件将覆盖所有当前令牌、集合和主题" +msgstr "导入 JSON 文件将覆盖当前所有令牌、令牌集和令牌主题" #: src/app/main/ui/workspace/tokens/import/modal.cljs:246, src/app/main/ui/workspace/tokens/import_from_library.cljs:81 msgid "workspace.tokens.import-warning" -msgstr "导入 token 将覆盖您当前的所有令牌、集合和主题。" +msgstr "导入令牌将覆盖你当前的所有令牌、令牌集和令牌主题。" #: src/app/main/ui/workspace/tokens/management.cljs:83 msgid "workspace.tokens.inactive-set" -msgstr "不激活" +msgstr "未启用" #: src/app/main/ui/workspace/tokens/management.cljs:75 msgid "workspace.tokens.inactive-set-description" -msgstr "此设置未启用。请更改主题或启用此设置以在视口中查看更改" +msgstr "此令牌集未启用。请更改令牌主题或启用此令牌集,以在视口中查看更改" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:202 msgid "workspace.tokens.label.group" -msgstr "编组" +msgstr "令牌组" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:204 msgid "workspace.tokens.label.group-placeholder" -msgstr "新增编组 (如模式)" +msgstr "添加令牌组(例如模式)" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:211 msgid "workspace.tokens.label.theme" -msgstr "主题" +msgstr "令牌主题" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:212 msgid "workspace.tokens.label.theme-placeholder" -msgstr "新增一个主题(如浅色)" +msgstr "添加令牌主题(例如浅色)" #: src/app/main/ui/workspace/tokens/management/context_menu.cljs:234 msgid "workspace.tokens.margins" @@ -6974,39 +7002,39 @@ msgstr "右键单击查看选项" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:132 msgid "workspace.tokens.no-active-sets" -msgstr "没有活动集" +msgstr "没有已启用的令牌集" #: src/app/main/ui/workspace/tokens/themes/theme_selector.cljs:92 msgid "workspace.tokens.no-active-theme" -msgstr "主题未启用" +msgstr "没有已启用的令牌主题" #: src/app/main/ui/workspace/tokens/sets/lists.cljs:72 msgid "workspace.tokens.no-permisions-set" -msgstr "您需要成为编辑才能激活/停用集合" +msgstr "你需要拥有编辑权限才能启用或停用令牌集" #: src/app/main/ui/workspace/tokens/themes.cljs:54 msgid "workspace.tokens.no-permission-themes" -msgstr "您需要成为一名编辑才能使用主题" +msgstr "你需要拥有编辑权限才能使用令牌主题" #: src/app/main/ui/workspace/tokens/sets/lists.cljs:485 msgid "workspace.tokens.no-sets-create" -msgstr "尚未定义任何集合。请先创建一个。" +msgstr "尚未定义任何令牌集。请先创建一个。" #: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99 msgid "workspace.tokens.no-sets-yet" -msgstr "尚不存在任何集。" +msgstr "尚无令牌集。" #: src/app/main/ui/workspace/tokens/themes.cljs:40 msgid "workspace.tokens.no-themes" -msgstr "目前没有主题。" +msgstr "尚无令牌主题。" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:52 msgid "workspace.tokens.no-themes-currently" -msgstr "您目前没有主题。" +msgstr "你目前没有令牌主题。" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:131 msgid "workspace.tokens.num-active-sets" -msgstr "%s 个活跃集" +msgstr "%s 个已启用的令牌集" #: src/app/main/ui/workspace/tokens/management/token_pill.cljs:122 msgid "workspace.tokens.original-value" @@ -7022,24 +7050,24 @@ msgstr "圆角半径" #: src/app/main/ui/ds/controls/utilities/token_field.cljs:47, src/app/main/ui/workspace/tokens/management/token_pill.cljs:130 msgid "workspace.tokens.ref-not-valid" -msgstr "引用无效或不在任何活动集中" +msgstr "{%s} 中的引用无效,或不属于任何活动令牌集" #: src/app/main/ui/workspace/tokens/style_dictionary.cljs #, unused msgid "workspace.tokens.reference-error" -msgstr "参考错误: " +msgstr "引用错误: " #: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:87, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:296, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:489, src/app/main/ui/workspace/tokens/management/forms/controls/combobox.cljs:298, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:189, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:324, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:259, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:381, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:505, src/app/main/ui/workspace/tokens/management/token_pill.cljs:123 msgid "workspace.tokens.resolved-value" -msgstr "解析的值:%s" +msgstr "解析值:%s" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:248 msgid "workspace.tokens.save-theme" -msgstr "保存主题" +msgstr "保存令牌主题" #: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309 msgid "workspace.tokens.select-set" -msgstr "选择集。" +msgstr "选择令牌集。" #: src/app/main/ui/workspace/tokens/sets/lists.cljs:60 msgid "workspace.tokens.set-edit-placeholder" @@ -7047,12 +7075,12 @@ msgstr "输入名称(组名使用“/”)" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:358 msgid "workspace.tokens.set-selection-theme" -msgstr "定义应使用哪些 token 集作为此主题选项的一部分:" +msgstr "定义此令牌主题应使用哪些令牌集:" #: src/app/main/ui/workspace/tokens/token_pill.cljs:47 #, unused msgid "workspace.tokens.set.not-active" -msgstr "Token 集未激活" +msgstr "令牌集未启用" #: src/app/main/ui/workspace/tokens/management/context_menu.cljs:258 msgid "workspace.tokens.size" @@ -7061,11 +7089,11 @@ msgstr "大小" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:154 #, unused msgid "workspace.tokens.theme-name" -msgstr "主题 %s" +msgstr "令牌主题 %s" #: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:48, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:82 msgid "workspace.tokens.themes-list" -msgstr "主题列表" +msgstr "令牌主题列表" #: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:334, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:335 msgid "workspace.tokens.token-description" @@ -7109,7 +7137,7 @@ msgstr "图片(%s)" #: src/app/main/ui/workspace/top_toolbar.cljs:199, src/app/main/ui/workspace/top_toolbar.cljs:200 msgid "workspace.toolbar.move" -msgstr "移动 (%s)" +msgstr "移动(%s)" #: src/app/main/ui/workspace/top_toolbar.cljs:256, src/app/main/ui/workspace/top_toolbar.cljs:257 msgid "workspace.toolbar.path" @@ -7117,7 +7145,7 @@ msgstr "路径(%s)" #: src/app/main/ui/workspace/top_toolbar.cljs:267, src/app/main/ui/workspace/top_toolbar.cljs:268 msgid "workspace.toolbar.plugins" -msgstr "插件 (%s)" +msgstr "插件(%s)" #: src/app/main/ui/workspace/top_toolbar.cljs:218, src/app/main/ui/workspace/top_toolbar.cljs:219 msgid "workspace.toolbar.rect" @@ -7126,7 +7154,7 @@ msgstr "矩形(%s)" #: src/app/main/ui/workspace/left_toolbar.cljs #, unused msgid "workspace.toolbar.shortcuts" -msgstr "快捷键 (%s)" +msgstr "快捷键(%s)" #: src/app/main/ui/workspace/top_toolbar.cljs:236, src/app/main/ui/workspace/top_toolbar.cljs:237 msgid "workspace.toolbar.text" @@ -7134,7 +7162,7 @@ msgstr "文本(%s)" #: src/app/main/ui/workspace/palette.cljs:190, src/app/main/ui/workspace/palette.cljs:191 msgid "workspace.toolbar.text-palette" -msgstr "排字式样 (%s)" +msgstr "排版(%s)" #: src/app/main/ui/workspace/top_toolbar.cljs:289, src/app/main/ui/workspace/top_toolbar.cljs:290 msgid "workspace.toolbar.toggle-toolbar" @@ -7147,7 +7175,7 @@ msgstr "完成" #: src/app/main/ui/workspace/viewport/top_bar.cljs:37 #, markdown, unused msgid "workspace.top-bar.view-only" -msgstr "**检查代码**(仅查看)" +msgstr "**检查代码**(仅查看)" #: src/app/main/ui/workspace/sidebar/history.cljs:378 msgid "workspace.undo.empty" @@ -7155,11 +7183,11 @@ msgstr "目前没有历史修改" #: src/app/main/ui/workspace/sidebar/history.cljs:148 msgid "workspace.undo.entry.delete" -msgstr "%s已删除" +msgstr "删除了 %s" #: src/app/main/ui/workspace/sidebar/history.cljs:147 msgid "workspace.undo.entry.modify" -msgstr "%s已修改" +msgstr "修改了 %s" #: src/app/main/ui/workspace/sidebar/history.cljs:149 msgid "workspace.undo.entry.move" @@ -7223,7 +7251,7 @@ msgstr "排版素材" #: src/app/main/ui/workspace/sidebar/history.cljs:146 msgid "workspace.undo.entry.new" -msgstr "新建%s" +msgstr "新建了 %s" #: src/app/main/ui/workspace/sidebar/history.cljs:126 msgid "workspace.undo.entry.single.circle" @@ -7287,7 +7315,7 @@ msgstr "排版素材" #: src/app/main/ui/workspace/sidebar/history.cljs:150 msgid "workspace.undo.entry.unknown" -msgstr "操作覆盖%s" +msgstr "对 %s 执行操作" #: src/app/main/ui/workspace/sidebar/history.cljs:335 #, unused @@ -7356,15 +7384,15 @@ msgstr "%s 的版本" #: src/app/main/ui/workspace/sidebar/versions.cljs:421 msgid "workspace.versions.loading" -msgstr "截入中..." +msgstr "加载中…" #, unused msgid "workspace.versions.locked-by-you" -msgstr "此版本已被您锁定" +msgstr "此版本已被你锁定" #: src/app/main/data/workspace/versions.cljs:230 msgid "workspace.versions.restore-warning" -msgstr "你想要恢复此版本吗?" +msgstr "要恢复此版本吗?" #, unused msgid "workspace.versions.snapshot-menu" @@ -7384,19 +7412,19 @@ msgstr "单击以闭合路径" #: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 msgid "auth.check-email" -msgstr "请检查您的邮箱!" +msgstr "请检查你的邮箱!" #: src/app/main/ui/auth/verify_token.cljs:53 msgid "auth.notifications.org-invitation-accepted" -msgstr "你现在的进度为 %s" +msgstr "你现在已加入 %s" #: src/app/main/ui/auth/register.cljs:238 msgid "auth.verification-sent-email" -msgstr "我们已经发送了一封验证邮件到:" +msgstr "我们已将验证邮件发送至:" #: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:35 msgid "color-token.empty-state" -msgstr "没有可用的颜色变量。检查激活的集合/主题或添加新的颜色变量。" +msgstr "没有可用的颜色令牌。请检查已启用的令牌集或主题,或添加新的颜色令牌。" #: src/app/main/data/nitrate.cljs:165 msgid "dasboard.leave-org.toast" @@ -7424,7 +7452,7 @@ msgstr "选择一个组织" #, unused msgid "dashboard.change-org-modal.text" -msgstr "项目和文件仍将对团队成员开放。团队将从新组织处获得配置。" +msgstr "团队成员仍可访问项目和文件。团队将采用新组织的配置。" #: src/app/main/data/nitrate.cljs:399, src/app/main/ui/dashboard/team_form.cljs:157 msgid "dashboard.change-org-modal.title" @@ -7432,7 +7460,7 @@ msgstr "更改团队的组织" #: src/app/main/ui/dashboard/deleted.cljs:316 msgid "dashboard.clear-trash-button" -msgstr "清理回收站" +msgstr "清空回收站" #: src/app/main/ui/dashboard/sidebar.cljs:371 msgid "dashboard.create-new-org" @@ -7440,15 +7468,15 @@ msgstr "创建新组织" #: src/app/main/ui/dashboard/deleted.cljs:265 msgid "dashboard.delete-all-forever-confirmation.description" -msgstr "您确定要永久删除所有已删除的项目和文件吗?此操作不可逆。" +msgstr "确定要永久删除回收站中的所有项目和文件吗?此操作无法撤销。" #: src/app/main/ui/dashboard/file_menu.cljs:222 msgid "dashboard.delete-file-forever-confirmation.description" -msgstr "您确定要永久删除 %s 吗?此操作不可逆。" +msgstr "确定要永久删除 %s 吗?此操作无法撤销。" #: src/app/main/data/dashboard.cljs:861 msgid "dashboard.delete-files-success-notification" -msgstr "%s 文件已被成功删除。" +msgstr "已成功删除 %s 个文件。" #: src/app/main/ui/dashboard/deleted.cljs:53, src/app/main/ui/dashboard/deleted.cljs:55, src/app/main/ui/dashboard/deleted.cljs:264, src/app/main/ui/dashboard/deleted.cljs:266, src/app/main/ui/dashboard/file_menu.cljs:221, src/app/main/ui/dashboard/file_menu.cljs:223 msgid "dashboard.delete-forever-confirmation.title" @@ -7461,24 +7489,24 @@ msgstr "删除项目" #: src/app/main/ui/dashboard/deleted.cljs:54 msgid "dashboard.delete-project-forever-confirmation.description" msgstr "" -"您确定要永久删除 %s 项目吗?您将永久删除该项目及其包含的所有文件。此操作不可" -"逆。" +"确定要永久删除项目 %s 吗?该项目及其包含的所有文件都将被永久删除。此操作无法" +"撤销。" #: src/app/main/data/dashboard.cljs:860, src/app/main/data/dashboard.cljs:894 msgid "dashboard.delete-success-notification" -msgstr "%s 已被成功删除。" +msgstr "已成功删除 %s。" #: src/app/main/ui/workspace/colorpicker.cljs:431, src/app/main/ui/workspace/colorpicker.cljs:443 msgid "workspace.colorpicker.color-tokens" -msgstr "颜色变量" +msgstr "颜色令牌" #: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:268 msgid "workspace.options.more-token-colors" -msgstr "更多颜色变量" +msgstr "更多颜色令牌" #: src/app/main/ui/ds/controls/utilities/token_field.cljs:48 msgid "ds.inputs.token-field.no-active-token-option" -msgstr "{%s} 不属于任何活跃集,或者值无效。" +msgstr "{%s} 令牌不属于任何已启用的令牌集,或其值无效。" #: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:302, src/app/main/ui/workspace/tokens/management/forms/typography.cljs:232 msgid "errors.field-max-length" @@ -7490,39 +7518,39 @@ msgstr "有新版本可用。" #: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:292 msgid "workspace.tokens.edit-token" -msgstr "编辑 %s token" +msgstr "编辑 %s 令牌" #: src/app/main/ui/dashboard/deleted.cljs:330 msgid "dashboard.deleted.empty-state-description" -msgstr "你的回收站是空的,删除的文件和项目将会出现在这里。" +msgstr "回收站为空。删除的文件和项目会显示在这里。" #: src/app/main/ui/dashboard/grid.cljs:247 msgid "dashboard.deleted.will-be-deleted-at" -msgstr "%s 将会删除" +msgstr "将于 %s 删除" #, unused msgid "dashboard.errors.error-on-delete-file" -msgstr "删除 %s 的时候出现了一个错误。" +msgstr "删除文件 %s 时出错。" #: src/app/main/data/dashboard.cljs:864 msgid "dashboard.errors.error-on-delete-files" -msgstr "删除文件的时候出现了一个错误。" +msgstr "删除文件时出错。" #: src/app/main/data/dashboard.cljs:897 msgid "dashboard.errors.error-on-delete-project" -msgstr "删除项目 %s 的时候出现了一个错误。" +msgstr "删除项目 %s 时出错。" #: src/app/main/data/dashboard.cljs:992, src/app/main/ui/dashboard/file_menu.cljs:202 msgid "dashboard.errors.error-on-restore-file" -msgstr "恢复 %s 的时候出现了一个错误。" +msgstr "恢复文件 %s 时出错。" #: src/app/main/data/dashboard.cljs:993 msgid "dashboard.errors.error-on-restore-files" -msgstr "恢复文件的时候出现了一个错误。" +msgstr "恢复文件时出错。" #: src/app/main/data/dashboard.cljs:1025 msgid "dashboard.errors.error-on-restoring-project" -msgstr "恢复项目 %s 及其文件的时候出现了一个错误。" +msgstr "恢复项目 %s 及其文件时出错。" #: src/app/main/ui/dashboard/file_menu.cljs:267 msgid "dashboard.file-menu.delete-files-permanently-option" @@ -7538,11 +7566,11 @@ msgstr[1] "恢复文件" #: src/app/main/ui/dashboard/sidebar.cljs:376 msgid "dashboard.go-to-admin-console" -msgstr "转到管理员面板" +msgstr "前往管理控制台" #: src/app/main/ui/dashboard/import.cljs:505 msgid "dashboard.import.import-error.check-error" -msgstr "我们没有验证这个文件。" +msgstr "无法验证此文件。" #: src/app/main/ui/dashboard/import.cljs:509 msgid "dashboard.import.import-error.corrupt-file" @@ -7554,11 +7582,11 @@ msgstr "处理该文件的时候出错了。" #: src/app/main/ui/dashboard/team.cljs:851 msgid "dashboard.invitation-modal.delete" -msgstr "您将删除以下邀请:" +msgstr "你将删除发送给以下人员的邀请:" #: src/app/main/ui/dashboard/team.cljs:852 msgid "dashboard.invitation-modal.resend" -msgstr "您将重新发送邀请至:" +msgstr "你将向以下人员重新发送邀请:" #: src/app/main/ui/dashboard/team.cljs:842 msgid "dashboard.invitation-modal.title.delete-invitations" @@ -7570,7 +7598,7 @@ msgstr "重新发送邀请" #: src/app/main/ui/dashboard/team.cljs:831, src/app/main/ui/dashboard/team.cljs:1136 msgid "dashboard.invitations.no-permission" -msgstr "您没有权限邀请他人加入此团队,也没有权限编辑或删除邀请。" +msgstr "你没有权限邀请他人加入此团队,也没有权限编辑或删除邀请。" #: src/app/main/ui/dashboard/sidebar.cljs:671 msgid "dashboard.leave-org" @@ -7582,7 +7610,7 @@ msgstr "我的团队" #: src/app/main/ui/dashboard/team_form.cljs:156 msgid "dashboard.no-org-allows-create-team.message" -msgstr "您没有权限将团队添加到你的任何组织。" +msgstr "你没有权限将团队添加到你的任何组织。" #: src/app/main/ui/dashboard/team_form.cljs:152 msgid "dashboard.no-permission-create-team.message" @@ -7630,7 +7658,7 @@ msgstr "恢复速度出乎意料地慢" #: src/app/main/ui/dashboard/deleted.cljs:277 msgid "dashboard.restore-all-confirmation.description" -msgstr "您将恢复您所有的项目和文件。这可能需要一些时间。" +msgstr "你将恢复所有项目和文件。这可能需要一些时间。" #: src/app/main/ui/dashboard/deleted.cljs:276 msgid "dashboard.restore-all-confirmation.title" @@ -7642,7 +7670,7 @@ msgstr "恢复所有" #: src/app/main/data/dashboard.cljs:986 msgid "dashboard.restore-files-success-notification" -msgstr "%s 文件已被成功恢复。" +msgstr "已成功恢复 %s 个文件。" #: src/app/main/ui/dashboard/deleted.cljs:83 msgid "dashboard.restore-project-button" @@ -7650,7 +7678,7 @@ msgstr "恢复项目" #: src/app/main/ui/dashboard/deleted.cljs:43 msgid "dashboard.restore-project-confirmation.description" -msgstr "您将恢复 %s 项目及其包含的所有文件。" +msgstr "你将恢复项目 %s 及其中的所有文件。" #: src/app/main/ui/dashboard/deleted.cljs:42 msgid "dashboard.restore-project-confirmation.title" @@ -7658,7 +7686,7 @@ msgstr "恢复项目" #: src/app/main/data/dashboard.cljs:958, src/app/main/data/dashboard.cljs:985, src/app/main/data/dashboard.cljs:1022, src/app/main/ui/dashboard/file_menu.cljs:199 msgid "dashboard.restore-success-notification" -msgstr "%s 已被成功恢复。" +msgstr "已成功恢复 %s。" #: src/app/main/ui/dashboard/sidebar.cljs:354 msgid "dashboard.section.organizations" @@ -7674,15 +7702,15 @@ msgstr "选择一个组织:" #: src/app/main/ui/dashboard/team.cljs:975 msgid "dashboard.select-org-modal.external-invitations-warning" -msgstr "“%s” 仅允许组织成员加入其团队。任何发送给组织外部人员的邀请都将被撤销。" +msgstr "“%s”仅允许组织成员加入其团队。所有发给组织外人员的待处理邀请都将被撤销。" #: src/app/main/ui/dashboard/team.cljs:971 msgid "dashboard.select-org-modal.external-invitations-will-be-canceled" -msgstr "已发出的外部用户邀请将被取消。" +msgstr "发给组织外用户的待处理邀请将被取消。" #, unused msgid "dashboard.select-org-modal.permission-info" -msgstr "在这里您可以找到所有允许您创建或添加团队的组织。" +msgstr "这里列出了你有权创建或添加团队的所有组织。" #, unused msgid "dashboard.select-org-modal.select" @@ -7690,7 +7718,7 @@ msgstr "选择一个组织" #: src/app/main/data/nitrate.cljs:342, src/app/main/ui/dashboard/team_form.cljs:155 msgid "dashboard.select-org-modal.title" -msgstr "添加一个团队到一个组织" +msgstr "将团队添加到组织" #, unused msgid "dashboard.team-belong-org" @@ -7706,15 +7734,15 @@ msgstr "团队组织" #: src/app/main/ui/dashboard/team.cljs:1643 msgid "dashboard.team-organization.add" -msgstr "添加到一个组织" +msgstr "添加到组织" #: src/app/main/data/nitrate.cljs:341, src/app/main/data/nitrate.cljs:398 msgid "dashboard.team-organization.add.no-valid-orgs" -msgstr "您没有权限将此团队添加到您的任何组织中。" +msgstr "你没有权限将此团队添加到你的任何组织。" #: src/app/main/ui/dashboard/team.cljs:1632 msgid "dashboard.team-organization.change" -msgstr "改变团队的组织" +msgstr "更改团队所属组织" #: src/app/main/ui/dashboard/team.cljs:905 msgid "dashboard.team-organization.disabled-org-tooltip" @@ -7726,15 +7754,15 @@ msgstr "这个团队不属于任何组织" #: src/app/main/ui/dashboard/team.cljs:1635 msgid "dashboard.team-organization.remove" -msgstr "从组织中删除团队" +msgstr "从组织中移除团队" #: src/app/main/ui/dashboard/deleted.cljs:301 msgid "dashboard.trash-info-text-part1" -msgstr "已删除的文件将保留在回收站中" +msgstr "删除的文件会在回收站中保留" #: src/app/main/ui/dashboard/deleted.cljs:303 msgid "dashboard.trash-info-text-part2" -msgstr " %s 天. " +msgstr " %s 天。 " #: src/app/main/ui/dashboard/deleted.cljs:304 msgid "dashboard.trash-info-text-part3" @@ -7746,26 +7774,26 @@ msgstr "如果你改变主意,可以在每个文件的菜单中恢复或永久 #: src/app/main/ui/settings/subscription.cljs:600, src/app/main/ui/settings/subscription.cljs:678 msgid "subscription.settings.professional.selfhost.community-support" -msgstr "所有设计和原型制作功能均由社区提供支持。" +msgstr "所有设计和原型功能,以及社区支持。" #: src/app/main/ui/workspace/tokens/remapping_modal.cljs #, unused msgid "workspace.tokens.no-remap-needed" -msgstr "该令牌目前未用于您的设计,因此无需重新映射。" +msgstr "该令牌目前未用于你的设计,因此无需重新映射。" #, unused msgid "dashboard.user-no-longer-belong-org" -msgstr "您已不再是 %s 组织的成员" +msgstr "你已不再是 %s 组织的成员" #: src/app/main/ui/settings/options.cljs:109 msgid "dashboard.webgl-switch.beta" -msgstr "Beta" +msgstr "测试版" #: src/app/main/ui/settings/options.cljs:110 msgid "dashboard.webgl-switch.description" msgstr "" -"WebGL渲染可以提升性能,但目前仍处于测试阶段,稳定性可能较差。画布、导出文件(" -"SVG/PDF)和视图模式之间可能会出现一些视觉差异。" +"WebGL 渲染可以提升性能,但目前仍处于测试阶段,稳定性可能较低。画布、导出内容" +"(SVG/PDF)和查看模式之间可能存在一些视觉差异。" #: src/app/main/ui/settings/options.cljs:113 msgid "dashboard.webgl-switch.disabled" @@ -7785,16 +7813,2040 @@ msgstr "状态" #: src/app/main/ui/settings/options.cljs:108 msgid "dashboard.webgl-switch.title" -msgstr "WebGL渲染" +msgstr "WebGL 渲染" #: src/app/main/data/workspace/clipboard.cljs:327, src/app/main/data/workspace/clipboard.cljs:535 msgid "errors.clipboard-api-unavailable" -msgstr "剪贴板API不可用。请通过HTTPS启动Penpot以启用剪贴板访问" +msgstr "剪贴板 API 不可用。请通过 HTTPS 提供 Penpot 服务以启用剪贴板访问" #: src/app/main/data/workspace/clipboard.cljs:321, src/app/main/data/workspace/clipboard.cljs:529 msgid "errors.clipboard-permission-denied" -msgstr "剪贴板访问被拒绝。请在浏览器中允许剪贴板权限以粘贴内容" +msgstr "剪贴板访问遭拒。请在浏览器中授予剪贴板权限以粘贴内容" #: src/app/main/ui/dashboard/fonts.cljs:341 msgid "errors.font-family-invalid-chars" -msgstr "字体家族名称只能包含字母、数字、空格、连字符、下划线和点。" +msgstr "字体家族名称只能包含字母、数字、空格、连字符、下划线和句点。" + +#: src/app/main/ui/static.cljs:89 +msgid "errors.invite-email-mismatch" +msgstr "" +"此邀请对应的是另一个电子邮箱地址。请退出登录,然后使用受邀账号登录;或者请团" +"队所有者重新发送邀请。" + +#: src/app/main/ui/static.cljs:93 +msgid "errors.invite-expired" +msgstr "此邀请已过期。请让团队所有者重新发送邀请。" + +#: src/app/main/ui/dashboard/team.cljs:1057 +msgid "errors.max-quote-reached" +msgstr "已达到配额上限" + +#, unused +msgid "errors.org-leave.no-valid-teams" +msgstr "退出组织时出现问题,请重试。" + +#, unused +msgid "errors.org-leave.org-owner-cannot-leave" +msgstr "组织所有者无法退出组织。" + +#: src/app/main/ui/auth/verify_token.cljs:97 +msgid "errors.org-not-found" +msgstr "该组织不存在" + +#: src/app/main/ui/dashboard/sidebar.cljs:466 +msgid "errors.team-leave.only-owner-can-delete" +msgstr "只有团队所有者可以删除团队。" + +#: common/src/app/common/types/team.cljc:26 +#, unused +msgid "errors.team-name-invalid-chars" +msgstr "团队名称不能包含以下字符:'.'、':' 或 '/'" + +#: src/app/main/data/media.cljs:74 +#, unused +msgid "errors.token-theme-not-existing-sets" +msgstr "此主题引用了不存在的令牌集:%s" + +#: src/app/main/data/workspace/tokens/errors.cljs:49 +msgid "errors.tokens.circular-reference" +msgstr "令牌存在循环引用" + +#: src/app/main/data/workspace/tokens/errors.cljs:115, src/app/main/ui/workspace/tokens/management/forms/typography.cljs:243 +msgid "errors.tokens.composite-line-height-needs-font-size" +msgstr "行高依赖字号。请添加字号以获取解析值。" + +#: src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:350, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:436 +msgid "errors.tokens.empty-field" +msgstr "此字段不能为空" + +#: src/app/main/data/workspace/tokens/errors.cljs:41 +msgid "errors.tokens.empty-input" +msgstr "令牌值不能为空" + +#: src/app/main/data/workspace/tokens/errors.cljs:107 +msgid "errors.tokens.invalid-font-family-token-value" +msgstr "令牌值无效:只能引用字体家族令牌" + +#: src/app/main/data/workspace/tokens/errors.cljs:119 +msgid "errors.tokens.invalid-shadow-type-token-value" +msgstr "阴影类型无效:仅接受 'innerShadow' 或 'dropShadow'" + +#: src/app/main/data/workspace/tokens/errors.cljs:131 +msgid "errors.tokens.invalid-token-value-shadow" +msgstr "值无效:必须引用复合阴影令牌。" + +#: src/app/main/data/workspace/tokens/errors.cljs:111 +msgid "errors.tokens.invalid-token-value-typography" +msgstr "值无效:必须引用复合排版令牌。" + +#: src/app/main/data/workspace/tokens/errors.cljs:67, src/app/main/ui/workspace/tokens/management/forms/controls/utils.cljs:126 +msgid "errors.tokens.name-collision" +msgstr "%s 的组名与另一个已启用令牌集中的同名令牌冲突。" + +#: src/app/main/data/workspace/tokens/errors.cljs:57 +msgid "errors.tokens.number-too-large" +msgstr "令牌值无效。解析值过大:%s" + +#: src/app/main/data/workspace/tokens/errors.cljs:87, src/app/main/data/workspace/tokens/warnings.cljs:15 +msgid "errors.tokens.opacity-range" +msgstr "不透明度必须介于 0 和 100% 之间或介于 0 和 1 之间(例如 50% 或 0.5)。" + +#: src/app/main/data/workspace/tokens/errors.cljs:123 +msgid "errors.tokens.shadow-blur-range" +msgstr "阴影模糊值必须大于或等于 0。" + +#: src/app/main/data/workspace/tokens/errors.cljs:127 +msgid "errors.tokens.shadow-spread-range" +msgstr "阴影扩展值必须大于或等于 0。" + +#: src/app/main/data/workspace/tokens/errors.cljs:91, src/app/main/data/workspace/tokens/warnings.cljs:19 +msgid "errors.tokens.stroke-width-range" +msgstr "描边宽度必须大于或等于 0。" + +#: src/app/main/data/workspace/tokens/errors.cljs:83 +msgid "errors.tokens.value-with-percent" +msgstr "值无效:不允许使用 %。" + +#: src/app/main/data/workspace/tokens/errors.cljs:79 +msgid "errors.tokens.value-with-units" +msgstr "值无效:不允许使用单位。" + +#: src/app/main/errors.cljs:105 +#, unused +msgid "errors.unexpected-exception" +msgstr "意外错误:%s" + +#: src/app/main/ui/static.cljs:346 +msgid "errors.webgl-context-lost.desc-message" +msgstr "WebGL 已停止工作。请重新加载页面以将其重置" + +#: src/app/main/ui/static.cljs:345 +msgid "errors.webgl-context-lost.main-message" +msgstr "糟糕!画布上下文已丢失" + +#: src/app/main/ui/settings/feedback.cljs:122 +msgid "feedback.description-placeholder" +msgstr "请说明反馈原因" + +#: src/app/main/ui/settings/feedback.cljs:143 +msgid "feedback.other-ways-contact" +msgstr "其他联系方式" + +#: src/app/main/ui/settings/feedback.cljs:126 +msgid "feedback.penpot.link" +msgstr "如果反馈与某个文件或项目有关,请在此添加 Penpot 链接:" + +#: src/app/main/ui/settings/feedback.cljs:101 +msgid "feedback.title-contact-us" +msgstr "联系我们" + +#: src/app/main/ui/settings/feedback.cljs:110, src/app/main/ui/settings/feedback.cljs:111 +msgid "feedback.type" +msgstr "类型" + +#: src/app/main/ui/settings/feedback.cljs:115 +msgid "feedback.type.doubt" +msgstr "疑问" + +#: src/app/main/ui/settings/feedback.cljs:113 +msgid "feedback.type.idea" +msgstr "建议" + +#: src/app/main/ui/settings/feedback.cljs:114 +msgid "feedback.type.issue" +msgstr "问题" + +#: src/app/main/ui/exports/files.cljs:131 +msgid "files-download-modal.description-1" +msgstr "你要下载的一个或多个文件使用了共享库。要如何处理其中的素材*?" + +#: src/app/main/ui/exports/files.cljs:123 +msgid "files-download-modal.title" +msgstr "下载文件" + +#: src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:123 +msgid "inspect.attributes.image.preview" +msgstr "形状填充图像的预览" + +#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:322 +msgid "inspect.attributes.typography.mixed-font-family" +msgstr "混合字体家族" + +#: src/app/main/ui/inspect/attributes/text.cljs:112 +msgid "inspect.attributes.typography.text-decoration.strikethrough" +msgstr "删除线" + +#: src/app/main/ui/inspect/right_sidebar.cljs:169 +msgid "inspect.color-space-label" +msgstr "选择颜色空间" + +#: src/app/main/ui/inspect/right_sidebar.cljs:239 +msgid "inspect.empty.more" +msgstr "更多信息" + +#: src/app/main/ui/inspect/right_sidebar.cljs:176 +msgid "inspect.tabs-switcher-label" +msgstr "检查面板选项卡" + +#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:26 +msgid "inspect.tabs.styles.active-sets" +msgstr "已启用的令牌集" + +#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:21 +msgid "inspect.tabs.styles.active-themes" +msgstr "已启用的主题" + +#: src/app/main/ui/inspect/styles/style_box.cljs:75 +msgid "inspect.tabs.styles.copy-shorthand" +msgstr "将 CSS 简写复制到剪贴板" + +#: src/app/main/ui/inspect/styles/property_detail_copiable.cljs:52 +msgid "inspect.tabs.styles.copy-to-clipboard" +msgstr "复制到剪贴板" + +#: src/app/main/ui/inspect/styles/style_box.cljs:22 +#, unused +msgid "inspect.tabs.styles.geometry-panel" +msgstr "尺寸和位置" + +#: src/app/main/ui/inspect/styles/style_box.cljs:67, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:181 +msgid "inspect.tabs.styles.toggle-style" +msgstr "切换面板 %s" + +#: src/app/main/ui/inspect/styles/style_box.cljs:26 +msgid "inspect.tabs.styles.token-panel" +msgstr "令牌集和主题" + +#: src/app/main/ui/ds/controls/shared/token_option.cljs:46, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:104, src/app/main/ui/inspect/styles/rows/properties_row.cljs:62 +msgid "inspect.tabs.styles.token-resolved-value" +msgstr "解析值:" + +#: src/app/main/ui/inspect/styles/style_box.cljs:25 +msgid "inspect.tabs.styles.variants-panel" +msgstr "变体属性" + +#: src/app/main/ui/settings/integrations.cljs:629 +msgid "integrations.access-tokens.create" +msgstr "创建新访问令牌" + +#: src/app/main/ui/settings/integrations.cljs:645 +msgid "integrations.access-tokens.empty.add-one" +msgstr "点击“创建新访问令牌”按钮即可生成令牌。" + +#: src/app/main/ui/settings/integrations.cljs:644 +msgid "integrations.access-tokens.empty.no-access-tokens" +msgstr "你还没有访问令牌。" + +#: src/app/main/ui/settings/integrations.cljs:619 +msgid "integrations.access-tokens.personal" +msgstr "个人访问令牌" + +#: src/app/main/ui/settings/integrations.cljs:624 +msgid "integrations.access-tokens.personal.description" +msgstr "个人访问令牌可替代账号密码认证,让应用访问 Penpot 内部 API" + +#: src/app/main/ui/settings/integrations.cljs:68 +msgid "integrations.copy-to-clipboard" +msgstr "复制到剪贴板" + +#: src/app/main/ui/settings/integrations.cljs:266 +msgid "integrations.create-access-token.title" +msgstr "创建访问令牌" + +#: src/app/main/ui/settings/integrations.cljs:265 +msgid "integrations.create-access-token.title.created" +msgstr "访问令牌已创建" + +#: src/app/main/ui/settings/integrations.cljs:384 +msgid "integrations.delete-token.accept" +msgstr "删除令牌" + +#: src/app/main/ui/settings/integrations.cljs:383 +msgid "integrations.delete-token.message" +msgstr "确定要删除此令牌吗?" + +#: src/app/main/ui/settings/integrations.cljs:382 +msgid "integrations.delete-token.title" +msgstr "删除令牌" + +#: src/app/main/ui/settings/integrations.cljs:226 +msgid "integrations.expiration-180-days" +msgstr "180 天" + +#: src/app/main/ui/settings/integrations.cljs:223 +msgid "integrations.expiration-30-days" +msgstr "30 天" + +#: src/app/main/ui/settings/integrations.cljs:224 +msgid "integrations.expiration-60-days" +msgstr "60 天" + +#: src/app/main/ui/settings/integrations.cljs:225 +msgid "integrations.expiration-90-days" +msgstr "90 天" + +#: src/app/main/ui/settings/integrations.cljs:221 +msgid "integrations.expiration-date.label" +msgstr "到期日期" + +#: src/app/main/ui/settings/integrations.cljs:222 +msgid "integrations.expiration-never" +msgstr "永不过期" + +#: src/app/main/ui/settings/integrations.cljs:406 +msgid "integrations.expired-on" +msgstr "已于 %s 过期" + +#: src/app/main/ui/settings/integrations.cljs:407 +msgid "integrations.expires-on" +msgstr "将于 %s 过期" + +#: src/app/main/ui/settings/integrations.cljs:307 +msgid "integrations.generate-mcp-key.title" +msgstr "生成 MCP 密钥" + +#: src/app/main/ui/settings/integrations.cljs:305 +msgid "integrations.generate-mcp-key.title.created" +msgstr "MCP 密钥已生成" + +#: src/app/main/ui/settings/integrations.cljs:124 +msgid "integrations.info.mcp-client-config" +msgstr "将此配置添加到你的 MCP 客户端(例如 ~/.mcp.json)。" + +#: src/app/main/ui/settings/integrations.cljs:206 +msgid "integrations.info.mcp-server" +msgstr "Penpot MCP 服务器让 MCP 客户端能够直接与 Penpot 设计文件交互。" + +#: src/app/main/ui/settings/integrations.cljs:113 +msgid "integrations.mcp-key.will-expire" +msgstr "MCP 密钥将于 %s 过期" + +#: src/app/main/ui/settings/integrations.cljs:116 +msgid "integrations.mcp-key.will-not-expire" +msgstr "MCP 密钥没有到期日期" + +#: src/app/main/ui/settings/integrations.cljs:511 +msgid "integrations.mcp-server.description" +msgstr "Penpot MCP 服务器让 MCP 客户端能够直接与 Penpot 设计文件交互。" + +#: src/app/main/ui/settings/integrations.cljs:415 +#, unused +msgid "integrations.mcp-server.mcp-keys.copy" +msgstr "复制链接" + +#: src/app/main/ui/settings/integrations.cljs:594 +msgid "integrations.mcp-server.mcp-keys.help" +msgstr "如何配置 MCP 客户端" + +#: src/app/main/ui/settings/integrations.cljs:581 +msgid "integrations.mcp-server.mcp-keys.info" +msgstr "你需要使用此服务器 URL 配置 MCP 客户端,以连接到 Penpot MCP 服务器。" + +#: src/app/main/ui/settings/integrations.cljs:561 +msgid "integrations.mcp-server.mcp-keys.regenerate" +msgstr "重新生成 MCP 密钥" + +#: src/app/main/ui/settings/integrations.cljs:554 +msgid "integrations.mcp-server.mcp-keys.title" +msgstr "MCP 密钥" + +#: src/app/main/ui/settings/integrations.cljs:562 +msgid "integrations.mcp-server.mcp-keys.tootip" +msgstr "配置 MCP 客户端时需要 MCP 密钥" + +#: src/app/main/ui/settings/integrations.cljs:517 +msgid "integrations.mcp-server.status" +msgstr "状态" + +#: src/app/main/ui/settings/integrations.cljs:537 +msgid "integrations.mcp-server.status.disabled" +msgstr "已停用" + +#: src/app/main/ui/settings/integrations.cljs:536 +msgid "integrations.mcp-server.status.enabled" +msgstr "已启用" + +#: src/app/main/ui/settings/integrations.cljs:527 +msgid "integrations.mcp-server.status.expired.0" +msgstr "用于连接 MCP 服务器的 MCP 密钥已过期,因此无法建立连接。" + +#: src/app/main/ui/settings/integrations.cljs:532 +msgid "integrations.mcp-server.status.expired.1" +msgstr "请重新生成 MCP 密钥,并在客户端配置中更新为新密钥。" + +#: src/app/main/ui/settings/integrations.cljs:502 +msgid "integrations.mcp-server.title" +msgstr "MCP 服务器" + +#: src/app/main/ui/settings/integrations.cljs:506 +msgid "integrations.mcp-server.title.beta" +msgstr "测试版" + +#: src/app/main/ui/settings/integrations.cljs:213 +msgid "integrations.name.label" +msgstr "名称" + +#: src/app/main/ui/settings/integrations.cljs:214 +msgid "integrations.name.placeholder" +msgstr "名称可帮助你了解令牌的用途" + +#: src/app/main/ui/settings/integrations.cljs:405 +msgid "integrations.no-expiration" +msgstr "无到期日期" + +#: src/app/main/ui/settings/integrations.cljs:491 +msgid "integrations.notification.success.copied-link" +msgstr "链接已复制到剪贴板" + +#: src/app/main/ui/settings/integrations.cljs:254, src/app/main/ui/settings/integrations.cljs:287, src/app/main/ui/settings/integrations.cljs:332 +msgid "integrations.notification.success.created" +msgstr "令牌创建成功" + +#: src/app/main/ui/settings/integrations.cljs:86 +msgid "integrations.notification.success.mcp-key-copied" +msgstr "MCP 密钥已复制" + +#: src/app/main/ui/settings/integrations.cljs:457 +msgid "integrations.notification.success.mcp-server-disabled" +msgstr "MCP 服务器已停用" + +#: src/app/main/ui/settings/integrations.cljs:456 +msgid "integrations.notification.success.mcp-server-enabled" +msgstr "MCP 服务器已启用" + +#: src/app/main/ui/settings/integrations.cljs:87 +msgid "integrations.notification.success.token-copied" +msgstr "令牌已复制" + +#: src/app/main/ui/settings/integrations.cljs:350 +msgid "integrations.regenerate-mcp-key.info" +msgstr "重新生成 MCP 密钥会立即撤销当前密钥,所有使用该密钥的应用都将停止工作。" + +#: src/app/main/ui/settings/integrations.cljs:349 +msgid "integrations.regenerate-mcp-key.title" +msgstr "重新生成 MCP 密钥" + +#: src/app/main/ui/settings/integrations.cljs:347 +msgid "integrations.regenerate-mcp-key.title.created" +msgstr "MCP 密钥已重新生成" + +#: src/app/main/ui/settings/integrations.cljs:666 +msgid "integrations.title" +msgstr "集成" + +#: src/app/main/ui/settings/integrations.cljs:102 +msgid "integrations.token.info.non-recuperable" +msgstr "此唯一令牌无法恢复。如果丢失,你需要创建一个新令牌。" + +#: src/app/main/ui/settings/integrations.cljs:114 +msgid "integrations.token.will-expire" +msgstr "令牌将于 %s 过期" + +#: src/app/main/ui/settings/integrations.cljs:117 +msgid "integrations.token.will-not-expire" +msgstr "令牌没有到期日期" + +#: src/app/main/ui/dashboard/sidebar.cljs:1395 +msgid "labels.about-penpot" +msgstr "关于 Penpot" + +#: src/app/main/ui/inspect/attributes/blur.cljs:31, src/app/main/ui/inspect/styles/style_box.cljs:33, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:115, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:263, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:278 +msgid "labels.blur" +msgstr "模糊" + +#: src/app/main/ui/inspect/attributes/blur.cljs:30, src/app/main/ui/inspect/styles/style_box.cljs:32, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:262, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:274 +msgid "labels.blur-effects" +msgstr "模糊效果" + +#: src/app/main/ui/workspace/colorpicker.cljs:427 +msgid "labels.color" +msgstr "颜色" + +#: src/app/main/ui/dashboard/sidebar.cljs:1382 +msgid "labels.community-contributions" +msgstr "社区与贡献" + +#: src/app/main/ui/static.cljs:446 +msgid "labels.contact-support" +msgstr "联系支持团队" + +#: src/app/main/ui/settings/sidebar.cljs:135 +msgid "labels.contact-us" +msgstr "联系我们" + +#: src/app/main/ui/static.cljs:73, src/app/main/ui/static.cljs:339 +msgid "labels.copyright-period" +msgstr "Kaleidos © 2019 - 至今" + +#: src/app/main/ui/settings/profile.cljs:116 +msgid "labels.delete-profile-photo.message" +msgstr "确定要删除你的头像吗?" + +#: src/app/main/ui/settings/profile.cljs:115 +msgid "labels.delete-profile-photo.title" +msgstr "删除头像" + +#: src/app/main/ui/dashboard/deleted.cljs:216 +msgid "labels.deleted" +msgstr "已删除" + +#: src/app/main/data/workspace/mcp.cljs:186 +#, unused +msgid "labels.dismiss" +msgstr "忽略" + +#: src/app/main/ui/settings/feedback.cljs:134, src/app/main/ui/static.cljs:440 +msgid "labels.download" +msgstr "下载 %s" + +#: src/app/main/ui/dashboard/fonts.cljs:283 +msgid "labels.download-simple" +msgstr "下载" + +#: src/app/main/ui/exports/files.cljs:186 +msgid "labels.downloading-file" +msgstr "正在下载文件…" + +#: src/app/main/data/workspace/versions.cljs:305 +msgid "labels.exit" +msgstr "退出" + +#: src/app/main/ui/inspect/styles/style_box.cljs:28 +msgid "labels.fill" +msgstr "填充" + +#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1277 +msgid "labels.flex-layout" +msgstr "Flex 布局" + +#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1281 +msgid "labels.grid-layout" +msgstr "网格布局" + +#: src/app/main/ui/dashboard/sidebar.cljs:1371 +msgid "labels.help-learning" +msgstr "帮助与学习" + +#: src/app/main/ui/settings/sidebar.cljs:122 +msgid "labels.integrations" +msgstr "集成" + +#: src/app/main/ui/static.cljs:436 +msgid "labels.internal-error.desc-message-first" +msgstr "出现了问题。" + +#: src/app/main/ui/static.cljs:437 +msgid "labels.internal-error.desc-message-second" +msgstr "你可以重试此操作,或联系支持团队报告错误。" + +#: src/app/main/ui/inspect/styles/style_box.cljs:35, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1289 +msgid "labels.layout" +msgstr "布局" + +#: src/app/main/ui/dashboard/sidebar.cljs:1137 +msgid "labels.learning-center" +msgstr "学习中心" + +#: src/app/main/ui/static.cljs:337 +msgid "labels.nitrate-unavailable.main-message" +msgstr "由于系统问题,Penpot 暂时不可用。请稍后重试。" + +#: src/app/main/ui/components/select.cljs:256 +msgid "labels.no-matches" +msgstr "没有匹配项" + +#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:705 +msgid "labels.open" +msgstr "打开" + +#: src/app/main/ui/dashboard/sidebar.cljs:1215 +msgid "labels.penpot-changelog" +msgstr "Penpot 更新日志" + +#: src/app/main/ui/dashboard/sidebar.cljs:1143 +msgid "labels.penpot-hub" +msgstr "Penpot 中心" + +#: src/app/main/ui/dashboard/deleted.cljs:209 +msgid "labels.recent" +msgstr "最近" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:209, src/app/main/ui/workspace/tokens/management/forms/typography.cljs:177 +msgid "labels.reference" +msgstr "参考" + +#: src/app/main/ui/static.cljs:349 +msgid "labels.reload-page" +msgstr "重新加载页面" + +#: src/app/main/ui/dashboard/team.cljs:874 +msgid "labels.resend" +msgstr "重新发送" + +#: src/app/main/ui/inspect/styles/style_box.cljs:34, src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:233 +msgid "labels.shadow" +msgstr "阴影" + +#: src/app/main/ui/inspect/styles/style_box.cljs:29, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:70 +msgid "labels.stroke" +msgstr "描边" + +#: src/app/main/ui/inspect/right_sidebar.cljs:107, src/app/main/ui/inspect/styles.cljs:149 +msgid "labels.styles" +msgstr "样式" + +#: src/app/main/ui/inspect/styles/style_box.cljs:40 +msgid "labels.svg" +msgstr "SVG" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:348 +msgid "labels.switch" +msgstr "切换" + +#: src/app/main/ui/inspect/styles/style_box.cljs:30 +msgid "labels.text" +msgstr "文本" + +#: src/app/main/ui/workspace/tokens/management/forms/typography.cljs:187 +msgid "labels.typography" +msgstr "排版" + +#: src/app/main/ui/dashboard/import.cljs:534 +msgid "labels.uploading-file" +msgstr "正在上传文件…" + +#: src/app/main/ui/inspect/right_sidebar.cljs:65, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1035 +msgid "labels.variant" +msgstr "变体" + +#: src/app/main/ui/dashboard/sidebar.cljs:1209 +msgid "labels.version-notes" +msgstr "版本 %s 说明" + +#: src/app/main/ui/inspect/styles/style_box.cljs:39 +msgid "labels.visibility" +msgstr "可见性" + +#: src/app/main/ui/dashboard/import.cljs:297 +#, unused +msgid "labels.warning-count" +msgid_plural "labels.warning-count" +msgstr[0] "%s 条警告" +msgstr[1] "%s 条警告" + +#: src/app/main/data/nitrate.cljs:199 +msgid "modals.before-leave-org.message" +msgstr "你是部分团队的唯一成员。这些团队及其项目和文件将被删除。" + +#: src/app/main/data/nitrate.cljs:198, src/app/main/ui/dashboard/change_owner.cljs:151 +msgid "modals.before-leave-org.title" +msgstr "离开组织前" + +#: src/app/main/data/nitrate.cljs:202 +msgid "modals.before-leave-org.warning" +msgstr "你是唯一成员的所有团队都将被删除。" + +#: src/app/main/ui/settings/delete_account.cljs +#, unused +msgid "modals.delete-account.info.with-orgs" +msgstr "" +"此操作无法撤销。你的账号、订阅和组织将被立即删除,你也将无法再访问当前的项目" +"和文件。" + +#: src/app/main/ui/settings/delete_account.cljs:83 +msgid "modals.delete-account.owned-orgs.list-title" +msgstr "将被删除的组织" + +#: src/app/main/ui/settings/delete_account.cljs:98 +msgid "modals.delete-account.owned-orgs.members-count" +msgstr "%s 名成员" + +#: src/app/main/ui/settings/delete_account.cljs:96 +msgid "modals.delete-account.owned-orgs.teams-count" +msgstr "%s 个团队" + +#: src/app/main/ui/workspace/sidebar/assets/common.cljs:229 +msgid "modals.delete-asset-group.message" +msgid_plural "modals.delete-asset-group.message" +msgstr[0] "确定要删除这个素材吗?" +msgstr[1] "确定要删除这 %s 个素材吗?" + +#: src/app/main/ui/workspace/sidebar/assets/common.cljs:228 +msgid "modals.delete-asset-group.title" +msgstr "删除分组" + +#: src/app/main/data/team.cljs:129 +msgid "modals.delete-org-team-confirm.message" +msgstr "确定要删除属于 %s 组织的这个团队吗?" + +#: src/app/main/ui/workspace/tokens/import_from_library.cljs:75 +msgid "modals.import-library-tokens.description" +msgstr "此库包含可能已被其组件使用的令牌和主题。" + +#: src/app/main/ui/workspace/tokens/import_from_library.cljs:92 +msgid "modals.import-library-tokens.import" +msgstr "导入令牌" + +#: src/app/main/ui/workspace/tokens/import_from_library.cljs:72 +msgid "modals.import-library-tokens.title" +msgstr "从库中导入令牌?" + +#: src/app/main/data/team.cljs:583 +msgid "modals.invite-restricted-members.all-blocked" +msgstr "只能邀请组织的现有成员。由于列表中的人员都不是组织成员,因此未发送任何邀请。" + +#: src/app/main/data/team.cljs:582 +msgid "modals.invite-restricted-members.all-blocked-title" +msgstr "未发送任何邀请" + +#: src/app/main/data/team.cljs:162 +msgid "modals.invite-restricted-members.all-org-members-in-team" +msgstr "" +"只能邀请“%s”组织的成员加入此团队,而他们都已经是团队成员。如需更多信息,请联" +"系组织所有者。" + +#: src/app/main/ui/dashboard/team.cljs:308 +msgid "modals.invite-restricted-members.blocked-addresses" +msgstr "不会收到邀请的地址" + +#: src/app/main/ui/dashboard/team.cljs:325 +msgid "modals.invite-restricted-members.cancel" +msgstr "取消" + +#: src/app/main/ui/dashboard/team.cljs:298 +msgid "modals.invite-restricted-members.description" +msgstr "只能邀请组织的现有成员。" + +#: src/app/main/ui/dashboard/team.cljs:333 +msgid "modals.invite-restricted-members.send" +msgstr "发送邀请" + +#: src/app/main/ui/dashboard/team.cljs:293 +msgid "modals.invite-restricted-members.title" +msgstr "部分邀请无法发送" + +#: src/app/main/ui/dashboard/team.cljs:299 +msgid "modals.invite-restricted-members.warning" +msgstr "列表中的部分人员不会收到邀请。" + +#: src/app/main/ui/dashboard/change_owner.cljs:158 +msgid "modals.leave-org-and-reassign.hint" +msgstr "你是该组织部分团队的所有者。请将另一名成员提升为所有者。" + +#: src/app/main/ui/dashboard/change_owner.cljs:161 +msgid "modals.leave-org-and-reassign.hint-delete" +msgstr "你是部分团队的唯一成员。这些团队及其项目和文件将被删除。" + +#: src/app/main/ui/dashboard/change_owner.cljs:163 +msgid "modals.leave-org-and-reassign.hint-promote" +msgstr "此外,你还是该组织部分团队的所有者。请将另一名成员提升为所有者。" + +#: src/app/main/data/nitrate.cljs:200, src/app/main/data/nitrate.cljs:209 +msgid "modals.leave-org-confirm.accept" +msgstr "离开组织" + +#: src/app/main/data/nitrate.cljs:208 +msgid "modals.leave-org-confirm.message" +msgstr "你将永久失去对此组织内所有团队、项目和文件的访问权限。" + +#: src/app/main/data/nitrate.cljs:207 +msgid "modals.leave-org-confirm.title" +msgstr "要离开 %s 组织吗?" + +#: src/app/main/data/nitrate.cljs:256 +msgid "modals.remove-team-org.accept" +msgstr "从组织中移除" + +#: src/app/main/data/nitrate.cljs:254 +msgid "modals.remove-team-org.info" +msgstr "团队成员仍可访问项目和文件,但组织设置将不再适用。" + +#: src/app/main/data/nitrate.cljs:253 +msgid "modals.remove-team-org.text" +msgstr "确定要将“%s”团队从“%s”组织中移除吗?" + +#: src/app/main/data/nitrate.cljs:252 +msgid "modals.remove-team-org.title" +msgstr "从组织中移除团队" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:58 +msgid "nitrate.activation-code.expired-error" +msgstr "此激活码已过期。" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:59 +msgid "nitrate.activation-code.invalid-error" +msgstr "激活码无效。" + +#: src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs:57 +msgid "nitrate.activation-success.active-until" +msgstr "你的方案有效期至 %s。" + +#: src/app/main/ui/dashboard/subscription.cljs:195, src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs:68 +msgid "nitrate.activation-success.create-org" +msgstr "创建组织" + +#: src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs:63 +msgid "nitrate.activation-success.enjoy" +msgstr "尽情使用你的方案吧!" + +#: src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs:60 +msgid "nitrate.activation-success.manage-info" +msgstr "你可以随时在账号设置的“订阅”页面管理订阅。" + +#: src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs:53 +msgid "nitrate.activation-success.title" +msgstr "你已开通 Business Nitrate!" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:104 +msgid "nitrate.code-activation.footer" +msgstr "需要激活码?请联系我们:" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:86 +msgid "nitrate.code-activation.input-label" +msgstr "输入激活码" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:90 +msgid "nitrate.code-activation.placeholder" +msgstr "在此粘贴激活码" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:79 +msgid "nitrate.code-activation.renew-title" +msgstr "续订 Nitrate" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:101 +msgid "nitrate.code-activation.submit" +msgstr "激活" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:80 +msgid "nitrate.code-activation.title" +msgstr "激活 Nitrate" + +#, unused +msgid "nitrate.contact-sales.button" +msgstr "联系销售团队" + +#, unused +msgid "nitrate.contact-sales.downgrade-contact-info" +msgstr "" +"如需切换到此方案,请联系我们的销售团队。我们会协助你更新订阅并确保一切设置妥" +"当。" + +#, unused +msgid "nitrate.contact-sales.downgrade-org-deleted" +msgstr "你的组织将被删除。" + +#, unused +msgid "nitrate.contact-sales.downgrade-storage-limited" +msgstr "你的总存储空间、自动版本历史记录和文件恢复期限将受到限制。" + +#, unused +msgid "nitrate.contact-sales.downgrade-teams-available" +msgstr "团队、项目和文件将不再属于任何组织,但仍可继续访问。" + +#, unused +msgid "nitrate.contact-sales.downgrade-title" +msgstr "降级后:" + +#, unused +msgid "nitrate.contact-sales.title" +msgstr "要切换到 %s 方案吗?" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:77 +msgid "nitrate.form.cancel-anytime" +msgstr "试用期结束后才会扣款,可随时取消。" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:92 +msgid "nitrate.form.contact-trial" +msgstr "联系我们,免费试用 Enterprise 14 天:" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:91 +msgid "nitrate.form.contact-upgrade" +msgstr "联系我们,升级到 Enterprise:" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:82, src/app/main/ui/nitrate/nitrate_form.cljs:102 +msgid "nitrate.form.enter-code" +msgstr "输入激活码" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:57 +msgid "nitrate.form.enterprise-feature-1" +msgstr "为团队和项目提供从全局到精细级别的权限控制" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:59 +msgid "nitrate.form.enterprise-feature-2" +msgstr "通过专用管理控制台,集中管理人员在各处可执行的操作" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:61 +msgid "nitrate.form.enterprise-feature-3" +msgstr "保留完整的开源自由,同时满足组织的治理需求" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:54 +msgid "nitrate.form.enterprise-intro" +msgstr "为团队安全地规模化协作提供所需的一切:" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:66, src/app/main/ui/settings/subscription.cljs:767 +msgid "nitrate.form.enterprise.price" +msgstr "每位成员每月" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:80, src/app/main/ui/nitrate/nitrate_form.cljs:98 +msgid "nitrate.form.have-code" +msgstr "已有激活码?" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:86 +msgid "nitrate.form.see-plan" +msgstr "查看当前方案" + +#, unused +msgid "nitrate.form.start-enterprise" +msgstr "开始使用 Enterprise" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:51 +msgid "nitrate.form.title" +msgstr "解锁 Enterprise 功能" + +#: src/app/main/ui/dashboard/subscription.cljs:209, src/app/main/ui/nitrate/nitrate_form.cljs:75 +msgid "nitrate.form.try-free" +msgstr "免费试用 14 天" + +#: src/app/main/ui/nitrate/nitrate_form.cljs:74 +msgid "nitrate.form.upgrade" +msgstr "升级" + +#: src/app/main/ui/settings/subscription.cljs:575 +msgid "nitrate.subscription.active-until" +msgstr "有效期至 %s" + +#: src/app/main/ui/nitrate/nitrate_code_activation_modal.cljs:50 +msgid "nitrate.subscription.renew-success" +msgstr "你的 Nitrate 订阅已续订。" + +#: src/app/main/ui/settings/subscription.cljs:584 +msgid "nitrate.subscription.settings.manual-cancel" +msgstr "取消订阅" + +#: src/app/main/ui/settings/subscription.cljs:103 +msgid "nitrate.subscription.settings.renew-with-code" +msgstr "使用激活码续订" + +#: src/app/main/ui/dashboard/team.cljs:1030 +msgid "notifications.invitation-deleted" +msgstr "邀请已成功删除" + +#: src/app/main/data/workspace/mcp.cljs:185 +#, unused +msgid "notifications.mcp.active-in-another-tab" +msgstr "MCP 已在另一个标签页中启用。要切换到此处吗?" + +#, unused +msgid "notifications.mcp.active-in-this-tab" +msgstr "MCP 现已在此标签页中启用。" + +#: src/app/main/ui/onboarding/questions.cljs:226 +msgid "onboarding.questions.team-size.1001-5000" +msgstr "1,001 - 5,000 人" + +#: src/app/main/ui/onboarding/questions.cljs:222 +msgid "onboarding.questions.team-size.101-500" +msgstr "101 - 500 人" + +#: src/app/main/ui/onboarding/questions.cljs:220 +msgid "onboarding.questions.team-size.2-100" +msgstr "2 - 100 人" + +#: src/app/main/ui/onboarding/questions.cljs:224 +msgid "onboarding.questions.team-size.501-1000" +msgstr "501 - 1,000 人" + +#: src/app/main/ui/onboarding/questions.cljs:218 +msgid "onboarding.questions.team-size.just-me" +msgstr "只有我" + +#: src/app/main/ui/onboarding/questions.cljs:228 +msgid "onboarding.questions.team-size.more-than-5001" +msgstr "5,001 人以上" + +#: src/app/main/ui/workspace/sidebar/options/menus/token_typography_row.cljs:42, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:101, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:108 +msgid "options.deleted-token" +msgstr "此令牌不存在或已被删除。" + +#: src/app/plugins/utils.cljs:318 +msgid "plugins.validation.message" +msgstr "字段 %s 无效:%s" + +#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97 +msgid "shortcuts.create-component-variant" +msgstr "创建组件/变体" + +#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114 +msgid "shortcuts.find" +msgstr "查找" + +#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115 +msgid "shortcuts.find-and-replace" +msgstr "查找和替换" + +#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165 +msgid "shortcuts.paste-replace" +msgstr "粘贴并替换" + +#: src/app/main/ui/dashboard/subscription.cljs:191 +msgid "subscription.banner.create-org-info" +msgstr "" +"创建组织,亲自体验 Enterprise 的工作方式。设置规则、管理团队,探索设计工作流" +"中更高层次的控制能力。" + +#: src/app/main/ui/dashboard/subscription.cljs:189 +msgid "subscription.banner.see-enterprise" +msgstr "查看 Enterprise 实际效果" + +#: src/app/main/ui/dashboard/subscription.cljs:253 +msgid "subscription.current-plan.enterprise" +msgstr "Enterprise" + +#: src/app/main/ui/dashboard/subscription.cljs:252 +msgid "subscription.current-plan.nitrate" +msgstr "Enterprise" + +#: src/app/main/ui/dashboard/subscription.cljs:251 +msgid "subscription.current-plan.nitrate-trial" +msgstr "Enterprise 试用版" + +#: src/app/main/ui/dashboard/subscription.cljs:246 +msgid "subscription.current-plan.professional" +msgstr "Professional" + +#: src/app/main/ui/dashboard/subscription.cljs:241 +msgid "subscription.current-plan.title" +msgstr "你的订阅" + +#: src/app/main/ui/dashboard/subscription.cljs:249 +msgid "subscription.current-plan.unlimited" +msgstr "Unlimited" + +#: src/app/main/ui/dashboard/subscription.cljs:248 +msgid "subscription.current-plan.unlimited-trial" +msgstr "Unlimited 试用版" + +#: src/app/main/ui/dashboard/subscription.cljs:229 +msgid "subscription.dashboard.banner.renew" +msgstr "续订" + +#: src/app/main/ui/dashboard/subscription.cljs:216 +msgid "subscription.dashboard.banner.renew-subscription" +msgstr "续订你的订阅" + +#: src/app/main/ui/dashboard/subscription.cljs:222 +msgid "subscription.dashboard.banner.subscription-expire-days" +msgstr "你的 Enterprise 订阅将在 %s 天后到期(%s)" + +#: src/app/main/ui/dashboard/subscription.cljs:220 +msgid "subscription.dashboard.banner.subscription-expired" +msgstr "你的 Enterprise 订阅已到期。(%s)" + +#: src/app/main/ui/dashboard/subscription.cljs:201 +msgid "subscription.dashboard.banner.unlock-features" +msgstr "解锁 Enterprise 功能" + +#: src/app/main/ui/dashboard/subscription.cljs:203 +msgid "subscription.dashboard.banner.unlock-features-description" +msgstr "设置精细权限并保障设计运营安全,同时保留团队所喜爱的开源自由。" + +#: src/app/main/ui/dashboard/subscription.cljs:208 +msgid "subscription.dashboard.banner.upgrade-nitrate" +msgstr "开始使用 Enterprise" + +#: src/app/main/ui/dashboard/subscription.cljs:88 +msgid "subscription.dashboard.power-up.professional.bottom-button" +msgstr "立即升级!" + +#: src/app/main/ui/dashboard/subscription.cljs:87 +msgid "subscription.dashboard.power-up.professional.bottom-description" +msgstr "为你的团队获得更多存储空间、文件恢复等功能。" + +#: src/app/main/ui/settings/subscription.cljs:408 +msgid "subscription.error.nitrate.checkout-cancelled" +msgstr "付款尚未完成。准备好后可随时重试。" + +#: src/app/main/ui/settings/subscription.cljs:427 +msgid "subscription.error.nitrate.checkout-failed" +msgstr "无法开始结算流程,请重试。如果问题仍然存在,请联系我们:support@penpot.app。" + +#: src/app/main/ui/settings/subscription.cljs:407 +msgid "subscription.error.nitrate.checkout-finish-failed" +msgstr "无法确认你的订阅。请在“订阅”页面检查订阅状态,如有需要可重试。" + +#: src/app/main/ui/settings/subscription.cljs:97 +msgid "subscription.settings.activate-by-code" +msgstr "输入激活码" + +#: src/app/main/ui/settings/subscription.cljs:328 +msgid "subscription.settings.management-dialog.step-2-add-payment-button" +msgstr "添加付款信息" + +#: src/app/main/ui/settings/subscription.cljs:315 +msgid "subscription.settings.management-dialog.step-2-description" +msgstr "" +"现在添加付款信息,即可在试用期结束后顺畅续订,并继续支持我们的开源项目。目前" +"不会向你收费。" + +#: src/app/main/ui/settings/subscription.cljs:323 +msgid "subscription.settings.management-dialog.step-2-skip-button" +msgstr "暂时跳过并开始试用" + +#: src/app/main/ui/settings/subscription.cljs:246 +msgid "subscription.settings.management-dialog.step-2-title" +msgstr "助力我们成长,也让你的试用更轻松" + +#: src/app/main/ui/settings/subscription.cljs:130 +msgid "subscription.settings.management.dialog.editors" +msgstr "编辑者" + +#: src/app/main/ui/settings/subscription.cljs:137 +msgid "subscription.settings.management.dialog.editors-explanation" +msgstr "(包括所有者、管理员和编辑者,不包括查看者)" + +#: src/app/main/ui/settings/subscription.cljs:293 +msgid "subscription.settings.management.dialog.input-error" +msgstr "" +"设置的编辑者人数不能少于当前人数。请在团队设置中,将实际不编辑文件的人员角色" +"从编辑者或管理员改为查看者。" + +#: src/app/main/ui/settings/subscription.cljs:289 +msgid "subscription.settings.management.dialog.payment-explanation" +msgstr "试用期结束后收费,目前无需信用卡。" + +#: src/app/main/ui/settings/subscription.cljs:296 +msgid "subscription.settings.management.dialog.unlimited-capped-warning" +msgstr "" +"提示:你可以现在增加席位数,为后续邀请预留空间。当各团队共有 25 名或更多编辑" +"者时,每月固定收费 175 美元。" + +#: src/app/main/ui/settings/subscription.cljs:724 +msgid "subscription.settings.organization-member-month" +msgstr "每名组织成员每月" + +#: src/app/main/ui/settings/subscription.cljs:669, src/app/main/ui/settings/subscription.cljs:692 +msgid "subscription.settings.price-editor-month" +msgstr "每名编辑者每月" + +#: src/app/main/ui/settings/subscription.cljs:708 +msgid "subscription.settings.price-organization-month" +msgstr "每个组织每月" + +#: src/app/main/ui/settings/subscription.cljs:596, src/app/main/ui/settings/subscription.cljs:674 +msgid "subscription.settings.professional.autosave-benefit" +msgstr "保留 7 天的自动保存版本和文件恢复" + +#: src/app/main/ui/settings/subscription.cljs:594, src/app/main/ui/settings/subscription.cljs:672 +msgid "subscription.settings.professional.selfhost.control-over-data" +msgstr "完全掌控数据和基础设施。" + +#: src/app/main/ui/settings/subscription.cljs:597, src/app/main/ui/settings/subscription.cljs:675 +msgid "subscription.settings.professional.selfhost.unlimited-users" +msgstr "用户、团队和文件数量不限。" + +#: src/app/main/ui/settings/subscription.cljs:593, src/app/main/ui/settings/subscription.cljs:671 +msgid "subscription.settings.professional.storage-benefit" +msgstr "10GB 存储空间" + +#: src/app/main/ui/settings/subscription.cljs:599, src/app/main/ui/settings/subscription.cljs:677 +msgid "subscription.settings.professional.teams-editors-benefit" +msgstr "团队数量不限。你拥有的团队中最多可有 8 名编辑者。" + +#: src/app/main/ui/settings/subscription.cljs:58 +msgid "subscription.settings.recommended" +msgstr "推荐" + +#: src/app/main/ui/settings/subscription.cljs:343 +msgid "subscription.settings.start-trial" +msgstr "开始免费试用" + +#: src/app/main/ui/settings/subscription.cljs:375 +msgid "subscription.settings.success.dialog.description" +msgstr "你可以随时在账号详情的“订阅”页面编辑订阅。" + +#: src/app/main/ui/settings/subscription.cljs:373 +msgid "subscription.settings.success.dialog.thanks" +msgstr "感谢你选择 Penpot %s 方案!" + +#: src/app/main/ui/settings/subscription.cljs:608, src/app/main/ui/settings/subscription.cljs:620, src/app/main/ui/settings/subscription.cljs:695 +msgid "subscription.settings.unlimited.autosave-benefit" +msgstr "保留 30 天的自动保存版本和文件恢复" + +#: src/app/main/ui/settings/subscription.cljs:607, src/app/main/ui/settings/subscription.cljs:619, src/app/main/ui/settings/subscription.cljs:694 +msgid "subscription.settings.unlimited.storage-benefit" +msgstr "25GB 存储空间" + +#: src/app/main/ui/workspace/sidebar/versions.cljs:63 +#, markdown +msgid "subscription.workspace.versions.warning.enterprise.subtext-owner" +msgstr "如需提高此限额,请发送邮件至 [%s](mailto)" + +#: src/app/main/ui/workspace/sidebar/versions.cljs:65 +#, markdown +msgid "subscription.workspace.versions.warning.subtext-member" +msgstr "如需提高此限额,请联系团队所有者:[%s](mailto)" + +#: src/app/main/ui/workspace/sidebar/versions.cljs:64 +#, markdown +msgid "subscription.workspace.versions.warning.subtext-owner" +msgstr "如需提高此限额,请[升级你的方案|target:self](%s)" + +#: src/app/main/ui/dashboard/team.cljs:1142 +msgid "team.invitations-selected" +msgid_plural "team.invitations-selected" +msgstr[0] "已选中 1 个邀请" +msgstr[1] "已选中 %s 个邀请" + +#: src/app/main/ui/settings/integrations.cljs:659 +msgid "title.settings.integrations" +msgstr "集成 - Penpot" + +#: src/app/main/ui/viewer/header.cljs:187 +#, unused +msgid "viewer.header.edit-in-workspace" +msgstr "在工作区中编辑" + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:76 +msgid "webgl.modals.webgl-unavailable.cta-dashboard" +msgstr "前往仪表板" + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:78 +msgid "webgl.modals.webgl-unavailable.cta-troubleshooting" +msgstr "故障排除指南" + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:62 +msgid "webgl.modals.webgl-unavailable.message" +msgstr "" +"你的浏览器无法使用 WebGL,而 Penpot 必须使用 WebGL 才能正常运行。请检查浏览器" +"设置和/或关闭占用大量图形资源的标签页。" + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:58 +msgid "webgl.modals.webgl-unavailable.title" +msgstr "糟糕!WebGL 不可用" + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:71 +msgid "webgl.modals.webgl-unavailable.troubleshooting.after" +msgstr " ,了解如何检查浏览器设置、GPU 加速、驱动程序和常见系统问题。" + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:65 +msgid "webgl.modals.webgl-unavailable.troubleshooting.before" +msgstr "请参阅我们的 " + +#: src/app/main/ui/workspace/webgl_unavailable_modal.cljs:70 +msgid "webgl.modals.webgl-unavailable.troubleshooting.link" +msgstr "WebGL 故障排除指南" + +#, unused +msgid "webgl.toast.webgl-render-disabled" +msgstr "WebGL 渲染已禁用" + +#, unused +msgid "webgl.toast.webgl-render-enabled" +msgstr "WebGL 渲染已启用" + +#: src/app/render_wasm/api.cljs:2052 +msgid "webgl.webgl-context-lost.toast" +msgstr "WebGL 上下文已丢失" + +#: src/app/render_wasm/api.cljs:2068 +msgid "webgl.webgl-context-recovered.toast" +msgstr "WebGL 上下文已恢复" + +#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:91 +msgid "workspace.assets.component-group-options" +msgstr "组件组选项" + +#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:74 +msgid "workspace.assets.delete-group" +msgstr "删除组" + +#: src/app/main/data/workspace/clipboard.cljs:1172 +msgid "workspace.clipboard.copying" +msgstr "正在复制图片…" + +#: src/app/main/data/workspace/clipboard.cljs:1195 +msgid "workspace.clipboard.image-copied" +msgstr "图片已复制到剪贴板" + +#: src/app/main/data/workspace/clipboard.cljs:1201 +msgid "workspace.clipboard.image-copy-failed" +msgstr "复制图片时出错" + +#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:506 +msgid "workspace.component.swap.loop-error" +msgstr "组件不能嵌套在自身内部。" + +#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:505 +msgid "workspace.component.switch.loop-error-multi" +msgstr "部分组件实例无法切换。组件不能嵌套在自身内部。" + +#: src/app/main/ui/workspace/context_menu.cljs:873 +msgid "workspace.context-menu.grid-cells.copy-columns" +msgstr "复制列" + +#: src/app/main/ui/workspace/context_menu.cljs:869 +msgid "workspace.context-menu.grid-cells.copy-rows" +msgstr "复制行" + +#: src/app/main/ui/workspace/context_menu.cljs:877 +msgid "workspace.context-menu.grid-cells.paste-tracks" +msgstr "粘贴" + +#: src/app/main/ui/workspace/context_menu.cljs:911 +msgid "workspace.context-menu.guides.change-color" +msgstr "参考线颜色" + +#: src/app/main/ui/workspace/context_menu.cljs:923 +msgid "workspace.context-menu.guides.remove" +msgstr "移除参考线" + +#: src/app/main/ui/workspace/sidebar/debug.cljs:38 +msgid "workspace.debug.title" +msgstr "调试工具" + +#: src/app/main/ui/workspace/main_menu.cljs:336 +msgid "workspace.header.menu.disable-webgl" +msgstr "禁用 WebGL 渲染(测试版)" + +#: src/app/main/ui/workspace/main_menu.cljs:337 +msgid "workspace.header.menu.enable-webgl" +msgstr "启用 WebGL 渲染(测试版)" + +#: src/app/main/ui/workspace/main_menu.cljs:530 +msgid "workspace.header.menu.find" +msgstr "查找" + +#: src/app/main/ui/workspace/main_menu.cljs:537 +msgid "workspace.header.menu.find-and-replace" +msgstr "查找和替换" + +#: src/app/main/ui/workspace/main_menu.cljs:421 +msgid "workspace.header.menu.hide-comments" +msgstr "隐藏评论" + +#: src/app/main/ui/workspace/main_menu.cljs:410 +msgid "workspace.header.menu.lock-guides" +msgstr "锁定参考线" + +#: src/app/main/ui/workspace/main_menu.cljs:869 +msgid "workspace.header.menu.mcp.plugin.status.connect" +msgstr "连接" + +#: src/app/main/ui/workspace/main_menu.cljs:868 +msgid "workspace.header.menu.mcp.plugin.status.disconnect" +msgstr "断开连接" + +#: src/app/main/ui/workspace/main_menu.cljs:878 +msgid "workspace.header.menu.mcp.server.status.disabled" +msgstr "管理(状态:已禁用)" + +#: src/app/main/ui/workspace/main_menu.cljs:877 +msgid "workspace.header.menu.mcp.server.status.enabled" +msgstr "管理(状态:已启用)" + +#: src/app/main/ui/workspace/main_menu.cljs:1101 +msgid "workspace.header.menu.option.mcp" +msgstr "MCP 服务器" + +#: src/app/main/ui/workspace/main_menu.cljs:422 +msgid "workspace.header.menu.show-comments" +msgstr "显示评论" + +#: src/app/main/ui/workspace/main_menu.cljs:409 +msgid "workspace.header.menu.unlock-guides" +msgstr "解锁参考线" + +#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128 +msgid "workspace.libraries.colors" +msgid_plural "workspace.libraries.colors" +msgstr[0] "1 种颜色" +msgstr[1] "%s 种颜色" + +#: src/app/main/ui/workspace/colorpicker/libraries.cljs:354 +msgid "workspace.libraries.colors.add-library-color" +msgstr "将颜色添加到库" + +#: src/app/main/ui/workspace/colorpicker/libraries.cljs:371, src/app/main/ui/workspace/colorpicker/libraries.cljs:387 +msgid "workspace.libraries.colors.empty-recent-colors" +msgstr "还没有最近使用的颜色" + +#: src/app/main/ui/workspace/colorpicker/libraries.cljs:336 +msgid "workspace.libraries.colors.toggle-color-palette" +msgstr "显示或隐藏调色板" + +#: src/app/main/ui/workspace/libraries.cljs:97, src/app/main/ui/workspace/libraries.cljs:120 +msgid "workspace.libraries.components" +msgid_plural "workspace.libraries.components" +msgstr[0] "1 个组件" +msgstr[1] "%s 个组件" + +#: src/app/main/ui/workspace/libraries.cljs:367 +msgid "workspace.libraries.connected-to" +msgstr "已连接到" + +#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124 +msgid "workspace.libraries.graphics" +msgid_plural "workspace.libraries.graphics" +msgstr[0] "1 个图形" +msgstr[1] "%s 个图形" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:541 +msgid "workspace.libraries.text.mixed-tokens" +msgstr "混合令牌" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:536 +msgid "workspace.libraries.text.mixed-tokens-and-assets" +msgstr "混合素材和令牌" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:556 +msgid "workspace.libraries.text.mixed-typography" +msgstr "混合素材" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:558 +msgid "workspace.libraries.text.multiple-assets-tooltip" +msgstr "取消链接所有素材" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:335 +#, unused +msgid "workspace.libraries.text.multiple-token-and-asset-tooltip" +msgstr "分离所有令牌并取消链接所有排版素材" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:543 +msgid "workspace.libraries.text.multiple-token-tooltip" +msgstr "分离所有令牌" + +#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132 +msgid "workspace.libraries.typography" +msgid_plural "workspace.libraries.typography" +msgstr[0] "1 个排版素材" +msgstr[1] "%s 个排版素材" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs +#, unused +msgid "workspace.options.blur-effects-options.title" +msgstr "模糊效果" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:273 +msgid "workspace.options.blur-effects-options.title.group" +msgstr "组模糊效果" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:272 +msgid "workspace.options.blur-effects-options.title.multiple" +msgstr "所选对象的模糊效果" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:99, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:109 +msgid "workspace.options.blur-options.background-blur" +msgstr "背景模糊" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:144 +msgid "workspace.options.blur-options.blur-type-select" +msgstr "选择模糊类型" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:153 +msgid "workspace.options.blur-options.disabled-blur-label" +msgstr "背景模糊仅支持新版渲染器。请在“偏好设置”菜单中切换到新版渲染器以使用此效果" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:98, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:112 +msgid "workspace.options.blur-options.layer-blur" +msgstr "图层模糊" + +#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:138 +msgid "workspace.options.blur-options.toggle-more-options" +msgstr "显示或隐藏更多选项" + +#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:567 +msgid "workspace.options.component.variant.duplicated.copy.title" +msgstr "此组件包含冲突的变体。请确保每个变体都有一组独一无二的属性值。" + +#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1334 +msgid "workspace.options.component.variant.duplicated.group.title" +msgstr "部分变体的属性和值完全相同" + +#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:267 +msgid "workspace.options.component.variant.duplicated.single.all" +msgstr "这些变体的属性和值完全相同。请调整属性值,以便正确检索这些变体。" + +#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:264 +msgid "workspace.options.component.variant.duplicated.single.one" +msgstr "此变体与另一个变体的属性和值完全相同。请调整属性值,以便正确检索此变体。" + +#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:270 +msgid "workspace.options.component.variant.duplicated.single.some" +msgstr "其中部分变体的属性和值完全相同。请调整属性值,以便正确检索这些变体。" + +#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:557 +msgid "workspace.options.component.variant.malformed.copy" +msgstr "此组件包含名称无效的变体。请确保每个变体的名称都遵循正确的结构。" + +#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:560 +msgid "workspace.options.component.variant.malformed.locate" +msgstr "定位无效变体" + +#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:54 +msgid "workspace.options.component.variants-help-modal.intro" +msgstr "为了在切换变体时保留更改,Penpot 会连接符合以下条件的图层:" + +#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:91 +msgid "workspace.options.component.variants-help-modal.outro" +msgstr "" +"更改上述任一项(例如重命名图层或将图层编组)都会断开连接,但还原更改即可恢复" +"连接。" + +#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:77 +msgid "workspace.options.component.variants-help-modal.rule2.detail" +msgstr "矩形、椭圆、路径和布尔运算视为同一类型。" + +#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:88 +msgid "workspace.options.component.variants-help-modal.rule3.detail" +msgstr "组、画板和布局视为等效。" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:517 +msgid "workspace.options.convert-to-typography" +msgstr "创建排版样式" + +#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:198 +msgid "workspace.options.fill.section" +msgstr "填充区域" + +#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:285 +msgid "workspace.options.layer-options.layer-section" +msgstr "图层菜单区域" + +#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:117, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:488 +msgid "workspace.options.no-size-preset-results" +msgstr "没有匹配的尺寸预设" + +#: src/app/main/ui/workspace/sidebar/options/page.cljs +#, unused +msgid "workspace.options.pixel grid-color" +msgstr "像素网格颜色" + +#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:205, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:346 +msgid "workspace.options.radius.hide-all-corners" +msgstr "收起独立圆角设置" + +#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:169, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:287 +msgid "workspace.options.radius.radius-section" +msgstr "圆角半径区域" + +#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:482 +msgid "workspace.options.search-size-preset" +msgstr "搜索尺寸预设" + +#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:200 +msgid "workspace.options.selection-color.section" +msgstr "颜色选择区域" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:327 +msgid "workspace.options.stroke-dash" +msgstr "虚线长度" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:337 +msgid "workspace.options.stroke-gap" +msgstr "间隙" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:248 +msgid "workspace.options.stroke.toggle-stroke" +msgstr "启用或禁用描边" + +#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:501 +msgid "workspace.options.text-options.text-section" +msgstr "文本区域" + +#: src/app/main/data/plugins.cljs:128, src/app/main/ui/workspace/main_menu.cljs:806, src/app/main/ui/workspace/plugins.cljs:97 +msgid "workspace.plugins.error.need-editor" +msgstr "你需要拥有编辑权限才能使用此插件" + +#: src/app/main/ui/workspace/plugins.cljs:205 +msgid "workspace.plugins.error.url" +msgstr "插件不存在或 URL 不正确。" + +#: src/app/main/ui/workspace/plugins.cljs:428 +msgid "workspace.plugins.permissions-update.warning" +msgstr "自你上次打开以来,此插件已被修改。它现在还希望访问:" + +#: src/app/main/ui/workspace/plugins.cljs:317 +msgid "workspace.plugins.permissions.clipboard-read" +msgstr "读取剪贴板中的内容。" + +#: src/app/main/ui/workspace/plugins.cljs:311 +msgid "workspace.plugins.permissions.clipboard-write" +msgstr "读取和写入剪贴板内容。" + +#: src/app/main/ui/workspace/plugins.cljs:284 +msgid "workspace.plugins.permissions.comment-write" +msgstr "读取和修改你的评论,并以你的名义回复。" + +#: src/app/main/ui/workspace/plugins.cljs:257 +msgid "workspace.plugins.permissions.content-read" +msgstr "读取用户有权访问的文件内容。" + +#: src/app/main/ui/workspace/plugins.cljs:251 +msgid "workspace.plugins.permissions.content-write" +msgstr "读取和修改用户有权访问的文件内容。" + +#: src/app/main/ui/workspace/plugins.cljs:366 +msgid "workspace.plugins.permissions.disclaimer" +msgstr "" +"请注意,此插件由第三方创建,因此请在授予访问权限前确认你信任它。你的数据隐私" +"和安全对我们至关重要。如有任何疑虑,请联系支持团队。" + +#: src/app/main/ui/workspace/plugins.cljs:264 +msgid "workspace.plugins.permissions.user-read" +msgstr "读取当前用户的个人资料信息。" + +#: src/app/main/ui/workspace/plugins.cljs:487 +msgid "workspace.plugins.try-out.message" +msgstr "" +"想看看吗?它将在当前团队的新草稿中打开。(如果不想,你之后也可以在任意文件的" +"已安装插件中找到它。)" + +#: src/app/main/ui/workspace/context_menu.cljs:651 +msgid "workspace.shape.menu.clear-guides" +msgstr "清除画板参考线" + +#: src/app/main/ui/workspace/context_menu.cljs:229 +msgid "workspace.shape.menu.copy-as-image" +msgstr "复制为图片" + +#: src/app/main/ui/workspace/context_menu.cljs:453 +msgid "workspace.shape.menu.stroke-to-path" +msgstr "将描边转换为路径" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:570 +msgid "workspace.sidebar.layers.filter" +msgstr "筛选" + +#: src/app/main/ui/workspace/sidebar/layers.cljs +#, unused +msgid "workspace.sidebar.layers.match-count" +msgstr "%s/%s" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:601 +msgid "workspace.sidebar.layers.no-matches" +msgstr "无匹配结果" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:620 +msgid "workspace.sidebar.layers.replace" +msgstr "替换" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:626 +msgid "workspace.sidebar.layers.replace-all" +msgstr "全部替换" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:587 +msgid "workspace.sidebar.layers.replace-placeholder" +msgstr "替换为…" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:575 +msgid "workspace.sidebar.layers.search-and-replace" +msgstr "查找和替换" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:606 +msgid "workspace.sidebar.layers.search-scope-canvas" +msgstr "文本内容" + +#: src/app/main/ui/workspace/sidebar/layers.cljs:610 +msgid "workspace.sidebar.layers.search-scope-layers" +msgstr "图层名称" + +#, unused +msgid "workspace.toast.comments-hidden" +msgstr "评论已隐藏" + +#, unused +msgid "workspace.toast.comments-visible" +msgstr "评论已显示" + +#: src/app/main/ui/workspace/tokens/settings/menu.cljs:42 +msgid "workspace.tokens.base-font-size.error" +msgstr "基准字号必须是像素值或无单位数值。" + +#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:357 +msgid "workspace.tokens.copy-name" +msgstr "复制令牌路径" + +#: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:293 +msgid "workspace.tokens.create-token" +msgstr "创建新的 %s 令牌" + +#: src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:60 +msgid "workspace.tokens.duplicate-group" +msgstr "复制令牌组" + +#: src/app/main/data/workspace/tokens/errors.cljs:32 +#, unused +msgid "workspace.tokens.duplicated-json-token-name" +msgstr "导入错误:JSON 中存在重复的令牌名称。" + +#: src/app/main/data/workspace/tokens/errors.cljs:33 +#, unused +msgid "workspace.tokens.duplicated-json-token-name-detail" +msgstr "另一个令牌集中已存在路径为“%s”或以该路径为前缀的令牌。" + +#: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:299 +msgid "workspace.tokens.enter-token-name" +msgstr "输入 %s 令牌名称" + +#: src/app/main/data/workspace/tokens/application.cljs:730, src/app/main/ui/workspace/tokens/management/group.cljs:161 +msgid "workspace.tokens.error-text-edition" +msgstr "编辑文本时无法应用令牌。请改为选择文本图层。" + +#: src/app/main/ui/workspace/tokens/export/modal.cljs:117 +msgid "workspace.tokens.export.multiple-files" +msgstr "多个文件" + +#: src/app/main/ui/workspace/tokens/export/modal.cljs:37 +msgid "workspace.tokens.export.no-tokens-themes-sets" +msgstr "没有可导出的令牌、令牌主题或令牌集。" + +#: src/app/main/ui/workspace/tokens/management/forms/typography.cljs:127 +msgid "workspace.tokens.font-size-value-enter" +msgstr "字号或 {alias}" + +#: src/app/main/data/workspace/tokens/application.cljs:328 +msgid "workspace.tokens.font-variant-not-found" +msgstr "设置字重/样式时出错。当前字体中不存在此字体样式" + +#: src/app/main/ui/workspace/tokens/management/forms/form_container.cljs:60, src/app/main/ui/workspace/tokens/management/forms/typography.cljs:135 +msgid "workspace.tokens.font-weight-value-enter" +msgstr "字重(300、Bold Italic...)或 {alias}" + +#: src/app/main/ui/workspace/tokens/sets.cljs +#, unused +msgid "workspace.tokens.grouping-set-alert" +msgstr "暂不支持对令牌集进行分组。" + +#: src/app/main/ui/workspace/tokens/import/modal.cljs:240 +msgid "workspace.tokens.import-multiple-files" +msgstr "导入多个文件时,文件名/路径将作为令牌集名称。" + +#: src/app/main/ui/workspace/tokens/import/modal.cljs:239 +msgid "workspace.tokens.import-single-file" +msgstr "导入单个 JSON 文件时,一级键应为令牌集名称。" + +#: src/app/main/ui/workspace/libraries.cljs:374, src/app/main/ui/workspace/tokens/import/modal.cljs:236 +msgid "workspace.tokens.import-tokens" +msgstr "导入令牌" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:245, src/app/main/ui/workspace/tokens/management/forms/typography.cljs:194 +msgid "workspace.tokens.individual-tokens" +msgstr "使用单独的令牌" + +#: src/app/main/ui/workspace/tokens/management/forms/typography.cljs:151 +msgid "workspace.tokens.letter-spacing-value-enter-composite" +msgstr "字间距或 {alias}" + +#: src/app/main/ui/workspace/tokens/management/forms/typography.cljs:143 +msgid "workspace.tokens.line-height-value-enter" +msgstr "行高(倍数、px、%)或 {alias}" + +#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:316 +msgid "workspace.tokens.missing-reference" +msgstr "缺少引用" + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs:87 +#, unused +msgid "workspace.tokens.no-references-found" +msgstr "未找到引用" + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs:113 +msgid "workspace.tokens.not-remap" +msgstr "不重新映射" + +#: src/app/main/ui/workspace/tokens/management/forms/typography.cljs:176 +msgid "workspace.tokens.reference-composite" +msgstr "输入排版令牌别名" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:208 +msgid "workspace.tokens.reference-composite-shadow" +msgstr "输入阴影令牌别名" + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs:117 +msgid "workspace.tokens.remap" +msgstr "重新映射令牌" + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs:102 +msgid "workspace.tokens.remap-node-references-title" +msgstr "要将“`%s`”重命名为“`%s`”,并重新映射此组中的所有令牌吗?" + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs:106 +msgid "workspace.tokens.remap-node-warning-effects" +msgstr "这将更新所有使用旧令牌名称的令牌和引用。" + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs:101 +msgid "workspace.tokens.remap-token-references-title" +msgstr "要将所有使用“`%s`”的令牌重新映射到“`%s`”吗?" + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs:105 +msgid "workspace.tokens.remap-token-warning-effects" +msgstr "这将更改所有使用旧令牌名称的图层和引用。" + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs:107 +msgid "workspace.tokens.remap-warning-time" +msgstr "此操作可能需要一些时间。" + +#: src/app/main/ui/workspace/tokens/remapping_modal.cljs:92 +#, unused +msgid "workspace.tokens.remapping-in-progress" +msgstr "正在重新映射令牌引用…" + +#: src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:59 +msgid "workspace.tokens.rename-group" +msgstr "重命名令牌组" + +#: src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:68 +msgid "workspace.tokens.rename-group-name-hint" +msgstr "你的令牌将自动重命名为 %s.(suffix).(tokenName)" + +#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:297, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:527 +msgid "workspace.tokens.search-by-token" +msgstr "按令牌名称搜索" + +#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:126 +msgid "workspace.tokens.sets-hint" +msgstr "编辑令牌主题并管理令牌集" + +#: src/app/main/ui/workspace/tokens/settings/menu.cljs:90 +msgid "workspace.tokens.setting-description" +msgstr "你可以在此配置基准字号,它定义了 1rem 的值:" + +#: src/app/main/ui/workspace/tokens/settings/menu.cljs:83 +msgid "workspace.tokens.settings" +msgstr "令牌设置" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:236 +msgid "workspace.tokens.shadow-add-shadow" +msgstr "添加阴影" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:163, src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:164, src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:168 +msgid "workspace.tokens.shadow-blur" +msgstr "模糊" + +#: src/app/main/ui/workspace/tokens/management/create/form.cljs:987, src/app/main/ui/workspace/tokens/management/create/form.cljs:988 +#, unused +msgid "workspace.tokens.shadow-color" +msgstr "颜色" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:116 +msgid "workspace.tokens.shadow-inset" +msgstr "内阴影" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:125 +msgid "workspace.tokens.shadow-remove-shadow" +msgstr "移除阴影" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:176, src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:177, src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:181 +msgid "workspace.tokens.shadow-spread" +msgstr "扩散" + +#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1215 +#, unused +msgid "workspace.tokens.shadow-title" +msgstr "阴影" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:287 +msgid "workspace.tokens.shadow-token-blur-value-error" +msgstr "模糊值不能为负数" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:287 +#, unused +msgid "workspace.tokens.shadow-token-spread-value-error" +msgstr "扩散值不能为负数" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:141, src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:143 +msgid "workspace.tokens.shadow-x" +msgstr "X" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:152, src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:154 +msgid "workspace.tokens.shadow-y" +msgstr "Y" + +#: src/app/main/ui/workspace/tokens/management/forms/form_container.cljs:54, src/app/main/ui/workspace/tokens/management/forms/typography.cljs:159 +msgid "workspace.tokens.text-case-value-enter" +msgstr "none | uppercase | lowercase | capitalize 或 {alias}" + +#: src/app/main/ui/workspace/tokens/management/forms/form_container.cljs:57, src/app/main/ui/workspace/tokens/management/forms/typography.cljs:167 +msgid "workspace.tokens.text-decoration-value-enter" +msgstr "none | underline | strike-through 或 {alias}" + +#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:51 +#, unused +msgid "workspace.tokens.theme-name-already-exists" +msgstr "已存在同名令牌主题" + +#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:100 +#, unused +msgid "workspace.tokens.theme.disable" +msgstr "停用" + +#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:96 +#, unused +msgid "workspace.tokens.theme.enable" +msgstr "启用" + +#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:84 +msgid "workspace.tokens.themes-description" +msgstr "你可以在此管理令牌主题、启用或停用主题,以及配置主题的活动令牌集。" + +#: src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:133, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:258 +msgid "workspace.tokens.token-font-family-select" +msgstr "选择字体家族" + +#: src/app/main/ui/workspace/tokens/management/forms/typography.cljs:119 +msgid "workspace.tokens.token-font-family-value" +msgstr "字体家族" + +#: src/app/main/ui/workspace/tokens/management/forms/typography.cljs:118 +msgid "workspace.tokens.token-font-family-value-enter" +msgstr "字体家族,或以英文逗号(,)分隔的字体列表" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:273 +msgid "workspace.tokens.token-name-duplication-validation-error" +msgstr "路径 %s 或其前缀处已存在令牌。" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:270 +msgid "workspace.tokens.token-name-length-validation-error" +msgstr "名称至少应包含 1 个字符" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:272 +msgid "workspace.tokens.token-name-validation-error" +msgstr "" +" 不是有效的令牌名称。\n" +"令牌名称只能包含以英文句点(.)分隔的字母和数字,且不能以美元符号($)开头。" + +#: src/app/main/ui/workspace/tokens/style_dictionary.cljs:259 +#, unused +msgid "workspace.tokens.token-not-resolved" +msgstr "无法解析名为 %s 的引用令牌" + +#: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:325 +msgid "workspace.tokens.token-value" +msgstr "值" + +#: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:324, src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:131 +msgid "workspace.tokens.token-value-enter" +msgstr "输入值或使用 {alias} 输入别名" + +#: src/app/main/ui/workspace/tokens/management.cljs:72 +msgid "workspace.tokens.tokens-section-title" +msgstr "令牌 - %s" + +#: src/app/main/data/workspace/tokens/import_export.cljs:50 +#, unused +msgid "workspace.tokens.unknown-token-type-message" +msgstr "" +"导入成功,但部分令牌因使用不受支持的 $type 值而被跳过。展开详细信息可查看受影" +"响的令牌。" + +#: src/app/main/data/workspace/tokens/import_export.cljs:52 +#, unused +msgid "workspace.tokens.unknown-token-type-section" +msgstr "不支持类型“%s”(%s):" + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:249, src/app/main/ui/workspace/tokens/management/forms/typography.cljs:198 +msgid "workspace.tokens.use-reference" +msgstr "使用引用" + +#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136 +msgid "workspace.tokens.value-not-valid" +msgstr "值无效" + +#: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs +#, unused +msgid "workspace.tokens.warning-name-change" +msgstr "重命名此令牌会导致对其旧名称的所有引用失效" + +#: src/app/main/ui/workspace/top_toolbar.cljs:231 +#, unused +msgid "workspace.toolbar.debug" +msgstr "调试工具" + +#: src/app/main/ui/workspace/top_toolbar.cljs:188 +msgid "workspace.toolbar.frame-first-time" +msgstr "创建画板。单击并拖动以定义其大小。(%s)" + +#: src/app/main/ui/workspace/top_toolbar.cljs:65, src/app/main/ui/workspace/top_toolbar.cljs:66, src/app/main/ui/workspace/top_toolbar.cljs:77 +msgid "workspace.toolbar.mcp" +msgstr "MCP" + +#: src/app/main/ui/workspace/top_toolbar.cljs:87 +msgid "workspace.toolbar.mcp-connect-here" +msgstr "在此连接" + +#: src/app/main/ui/workspace/top_toolbar.cljs:84 +msgid "workspace.toolbar.mcp-connected" +msgstr "MCP 已连接" + +#: src/app/main/ui/workspace/palette.cljs:166 +msgid "workspace.toolbar.palette-bar" +msgstr "调色板栏" + +#, unused +msgid "workspace.top-bar.webgl-context-lost" +msgstr "无法渲染。刷新页面以恢复编辑。" + +#: src/app/main/ui/workspace/viewport/top_bar.cljs:43 +msgid "workspace.top-bar.webgl-context-lost.reload" +msgstr "刷新" + +#: src/app/main/ui/workspace/sidebar/history.cljs:358 +msgid "workspace.undo.entry.by" +msgstr "由 %s 操作" + +#: src/app/main/ui/workspace/sidebar/versions.cljs:234, src/app/main/ui/workspace/sidebar/versions.cljs:314 +msgid "workspace.versions.button.preview" +msgstr "预览版本" + +#, unused +msgid "workspace.versions.locked-by-other" +msgstr "此版本已被 %s 锁定,无法修改" + +#: src/app/main/data/workspace/versions.cljs:303 +msgid "workspace.versions.preview-banner-title" +msgstr "正在预览版本:%s" + +#: src/app/main/data/workspace/versions.cljs:297 +msgid "workspace.versions.preview.unnamed" +msgstr "未命名版本" + +#: src/app/main/ui/workspace/sidebar.cljs:256 +msgid "workspace.versions.tab.actions" +msgstr "操作" + +#, unused +msgid "workspace.versions.tooltip.locked-version" +msgstr "版本已锁定,仅创建者可以修改" + +#: src/app/main/ui/workspace/sidebar/versions.cljs:66 +#, markdown +msgid "workspace.versions.warning.subtext" +msgstr "如需提高此上限,请发送邮件至 [support@penpot.app](%s) 联系我们" + +#: src/app/main/ui/workspace/sidebar/versions.cljs:463 +msgid "workspace.versions.warning.text" +msgstr "自动保存的版本将保留 %s 天。" + +#: src/app/main/ui/workspace/sidebar/options/menus/token_typography_row.cljs:44, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:103, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:110 +msgid "not-active-token.no-name" +msgstr "此令牌不在任何有效集合中,或其值无效。" From 792d88dc4f0f6d70ce013bb1a8e616eab2d8c57d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Valderrama?= Date: Wed, 15 Jul 2026 12:30:20 +0200 Subject: [PATCH 082/229] :bug: Fix invalid org invitation show toast (#10693) * :bug: Fix invalid org invitation show toast * :paperclip: Code review --- backend/src/app/rpc/commands/verify_token.clj | 58 +++++++++++-------- .../src/app/main/ui/auth/verify_token.cljs | 11 ++++ frontend/translations/en.po | 3 + frontend/translations/es.po | 3 + 4 files changed, 50 insertions(+), 25 deletions(-) diff --git a/backend/src/app/rpc/commands/verify_token.clj b/backend/src/app/rpc/commands/verify_token.clj index e2433fec95..13f36da82a 100644 --- a/backend/src/app/rpc/commands/verify_token.clj +++ b/backend/src/app/rpc/commands/verify_token.clj @@ -184,13 +184,7 @@ {:columns [:id :email :default-team-id]}) registration-disabled? (not (contains? cf/flags :registration)) - org-invitation? (and (contains? cf/flags :nitrate) organization-id) - ;; Membership only makes sense for a logged-in profile; querying it for - ;; an anonymous recipient would call nitrate with a nil profile-id and - ;; mask the clean :invalid-token response with a generic error. - membership (when (and profile org-invitation?) - (nitrate/call cfg :get-org-membership {:profile-id profile-id - :organization-id organization-id}))] + org-invitation? (and (contains? cf/flags :nitrate) organization-id)] (if profile (do @@ -201,23 +195,32 @@ :reason :email-mismatch :hint "logged-in user does not matches the invitation")) - (when (:is-member membership) - (ex/raise :type :validation - :code :already-an-org-member - :team-id (:default-team-id membership) - :hint "the user is already a member of the organization")) - - (when (and org-invitation? (not (:organization-id membership))) - (ex/raise :type :validation - :code :org-not-found - :team-id (:default-team-id profile) - :hint "the organization doesn't exist")) - (when (nil? invitation) (ex/raise :type :validation - :code :invalid-token - :hint "no invitation associated with the token")) + :code (if organization-id :canceled-invitation :invalid-token) + :hint (if organization-id + "the invitation has been canceled" + "no invitation associated with the token"))) + ;; Membership only makes sense for a logged-in profile with an + ;; existing invitation; querying it when the invitation is absent + ;; would call nitrate needlessly and could mask the clean + ;; :canceled-invitation/:invalid-token response with a generic error. + (let [membership (when org-invitation? + (nitrate/call cfg :get-org-membership {:profile-id profile-id + :organization-id organization-id}))] + + (when (:is-member membership) + (ex/raise :type :validation + :code :already-an-org-member + :team-id (:default-team-id membership) + :hint "the user is already a member of the organization")) + + (when (and org-invitation? (not (:organization-id membership))) + (ex/raise :type :validation + :code :org-not-found + :team-id (:default-team-id profile) + :hint "the organization doesn't exist"))) ;; if we have logged-in user and it matches the invitation we proceed ;; with accepting the invitation and joining the current profile to the @@ -251,12 +254,17 @@ (assoc :org-team-id accepted-team-id))))) (do - ;; If the user is not logged-in and the token is invalid we throw the error - ;; Taiga issue #14182 + ;; If the user is not logged-in and the invitation has been canceled + ;; we return a specific error code so the frontend can redirect to + ;; login with an appropriate message instead of showing the error page. + ;; This only applies to org invitations; team invitations keep the + ;; existing :invalid-token behavior. (when (nil? invitation) (ex/raise :type :validation - :code :invalid-token - :hint "no invitation associated with the token")) + :code (if organization-id :canceled-invitation :invalid-token) + :hint (if organization-id + "the invitation has been canceled" + "no invitation associated with the token"))) ;; If we have not logged-in user, and invitation comes with member-id we ;; redirect user to login, if no member-id is present and in the invitation diff --git a/frontend/src/app/main/ui/auth/verify_token.cljs b/frontend/src/app/main/ui/auth/verify_token.cljs index 337e89c89f..d67be7e5eb 100644 --- a/frontend/src/app/main/ui/auth/verify_token.cljs +++ b/frontend/src/app/main/ui/auth/verify_token.cljs @@ -96,6 +96,17 @@ (rt/nav :dashboard-recent {:team-id team-id}) (ntf/error (tr "errors.org-not-found"))) + (= :canceled-invitation code) + (let [profile (:profile @st/state) + authenticated? (da/is-authenticated? profile)] + (if authenticated? + (st/emit! + (dcm/go-to-dashboard-recent :team-id :default) + (ntf/warn (tr "notifications.invitation-canceled"))) + (st/emit! + (rt/nav :auth-login) + (ntf/warn (tr "notifications.invitation-canceled"))))) + (or (= :validation type) (= :invalid-token code) (= :token-expired reason)) diff --git a/frontend/translations/en.po b/frontend/translations/en.po index b5dabef677..ea0d60d7ec 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -10106,3 +10106,6 @@ msgstr "Autosaved versions will be kept for %s days." #, unused msgid "workspace.viewport.click-to-close-path" msgstr "Click to close the path" + +msgid "notifications.invitation-canceled" +msgstr "This invitation is no longer available." \ No newline at end of file diff --git a/frontend/translations/es.po b/frontend/translations/es.po index 6384ee4a9f..d117f9ca38 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -9757,3 +9757,6 @@ msgstr "Los autoguardados duran %s días." #, unused msgid "workspace.viewport.click-to-close-path" msgstr "Pulsar para cerrar la ruta" + +msgid "notifications.invitation-canceled" +msgstr "Esta invitación ya no está disponible." \ No newline at end of file From bdc078d5ea0cd9450993267b22d3866cf7667978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Valderrama?= Date: Wed, 15 Jul 2026 14:47:44 +0200 Subject: [PATCH 083/229] :bug: Fix mismatched subscription in social login (#10703) --- backend/src/app/rpc/commands/verify_token.clj | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/backend/src/app/rpc/commands/verify_token.clj b/backend/src/app/rpc/commands/verify_token.clj index 13f36da82a..ee15a63385 100644 --- a/backend/src/app/rpc/commands/verify_token.clj +++ b/backend/src/app/rpc/commands/verify_token.clj @@ -85,9 +85,18 @@ ::audit/props (audit/profile->props profile) ::audit/profile-id (:id profile)})))) +(defn- with-nitrate-licence + [profile cfg] + (if (contains? cf/flags :nitrate) + (nitrate/add-nitrate-licence-to-profile cfg profile) + profile)) + (defmethod process-token :auth [{:keys [::db/conn] :as cfg} _params {:keys [profile-id] :as claims}] - (let [profile (profile/get-profile conn profile-id)] + (let [profile (-> (profile/get-profile conn profile-id) + (profile/strip-private-attrs) + (update :props profile/filter-props) + (with-nitrate-licence cfg))] (assoc claims :profile profile))) ;; --- Team Invitation From 001dba1bef49e8bd83e3b4ab48025b307bdba805 Mon Sep 17 00:00:00 2001 From: Elena Torro Date: Thu, 16 Jul 2026 07:47:21 +0200 Subject: [PATCH 084/229] :sparkles: Add background blur to text shapes --- .../render-wasm/assets/squares-background.png | Bin 0 -> 1908023 bytes .../get-file-text-background-blur.json | 146 ++++++++++++++++++ .../ui/render-wasm-specs/texts.spec.js | 20 ++- ...nders-background-blur-on-text-shapes-1.png | Bin 0 -> 561216 bytes render-wasm/src/render.rs | 37 ++++- render-wasm/src/render/text.rs | 6 + 6 files changed, 206 insertions(+), 3 deletions(-) create mode 100644 frontend/playwright/data/render-wasm/assets/squares-background.png create mode 100644 frontend/playwright/data/render-wasm/get-file-text-background-blur.json create mode 100644 frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-background-blur-on-text-shapes-1.png diff --git a/frontend/playwright/data/render-wasm/assets/squares-background.png b/frontend/playwright/data/render-wasm/assets/squares-background.png new file mode 100644 index 0000000000000000000000000000000000000000..55b49b44800b8787b1ea0c3596a3ae061a3fff80 GIT binary patch literal 1908023 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

M7p6Ik;-Z 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

lxTpbvQIp+fNkMlu5(_GC@ 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 ~jysU=9QeEn+l@>yuR;d!h?O3{pqX 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�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 v$Qj%@ZT9y*3v4;B%}4ieljMn(FmYd`dgb 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 z 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 z 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 z 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 Bc8ep&5Yr7{bX)*nK*e_1 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

sLkUCfFW7$-#VfxZhklC9$CalSCHiliHA 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%0AT?Kx)`Q;~lKh8R54flxLDNF*k+-tq{; zDvrwfdFKbZ>~Z*k&l5MWyO{00-r`KVU&T}Q0dVI&fmQM|1?o+r@_Rt1u#9P0vV;7p z7*-r6HyV}4^MS(E?(AOJ~3K~(D`i}PwtxNTzJ*rJ(qnR~we(z7a$ zbY}k;7ytB~Fw=jTe6O3k8#Bb}@x%%+4})re@JI&OVUB zm4b*v<8;xYu>$stjr73T5IzS{$)>i^QPqffqc#iT8KVv!)RY_*{RJ^RfDY8uLJJZe z4r4&|L~BX)3kOUP@Hb)SBqa&VM*644^!Wtvma3-y-skIgluUbIOa|4oCDF6_%MoaH z2Ypk-xPJ7@y$lY{z4vW0T+m#VuaRvac(k^l=Q?x=vI&$n&4RQ(B?-skI3?OL@27HR ze76dawxKQt=AO`;S<#mQvJtYSM_|Iy{E|$mUOth4-w9PM|9%!Egwgx?yJc*2cgCC>UUfx&Ww65^18e z5=7@$tC_%%Ks5$a7bX4i-EFdg%Lsb_7@e8@_CTCr*Ep$>wF#W(ZDH6*o>A4+rG-qw ztD?JfwP*imA2y1r|D~a@s%ri=Mvm4{u>o@4RC|{$4hBdJ@9 z!})5@)%Lao>H-!djot+YBX$xt8o_Ifv1$Q`xf19T#FK1roX-T%8iN2VK?!nkwwnzo+IXU2f&Sgm%^Jm9C0r6w_D-v>V7k~^*-O>Rkv+CFU2N^F zX+5yF3yfZvO45H$APxL86_V2|oeHdi0-pB@gbN}(JFxij^Du+<>H|td&OG(F8k#T$ z^xE-WjGZHV4n$Vz155#5uo?h(Kq6pyXTqQ}UolOk@*My%pfsCRZ5=spn5FWYnL6(e;?T<>{UP-Ewt>JS7HlB#w*{VV#n{#{iS;-eSqvMN2D`St_=&% z`be%MMgUs-7Q4bfWGmT6leC_niRO>brD})e%%@07?^&?t&N=qq*wXJa`pD{MQ|;wv zP7iYwV+b3G?dZwbmr=}?6k;)mcL0QsC#iCduu0Ym7xc#j)%IfP`D9-lj83I>@m$)e z1b~8i$!V_;0}uqjm~<{d^Pk2>d-f&a0sJik(s0RmvCLDgJUlI3$K_oE8?~uuF+Mr_ z?(I}>)!W|9pRrrw5OI!+4-$KgQ`c%LX>2juF|v##o_xxZE*}ua@DcC&Ksq`79kYjQ z^B%^kgn##a4) zYNBoe?AH2atG2Q3+OJIo0y??8L-quKvOD_+Q;^L7Mq+kgY-5bR7F$9OUqu&c-4U$|Ca6NFXv+2{?0qZ zUOgtUIze=2luji^=^Vph_lP^cAAflu4bEDx_*jhmR`AGl$i!z_GR1phI!SivzU1HD z7sfci=h(de-=!UYY+o6dqbB0z+;!$m1NF4t>?^e}{tSS^WG?l94)7fvpYcVpry8q6 z=Y+)7*`gl=jJ6*nl}meDJ|NEa?j@Uws^UQV!al2p!aN%vMmtLkA}0~^&0C-rU-H^0O#os95JZv*?zInZjq zcFD!)@M;U4Yg3IsQ$te%Y!+yhUp`kHXlDbcUr0Rht@yfAwnx-GEO{~s{j&Gz*)qKwe-(a=jV^le}`q z#93N{A}plyMm)iHVixtwxx}0i+bTlOS@L2+?O~hthZy6&*jr#c(5XwB)D-HRiygxh zN7hk=alH$4I<~rF*lxqe@Z_0IAYi(u##DcGY57<5+DMXeQdNO>)0fzP&R_Fs&5{^ruOrv9G^#yeU3QTz)iB0!cn z_>Kag0^WQOh7}{LHHH9~-e8-AffMkLo0WPyr)Kj@>_$C~wHLy{xF5lkB$*T4N62~l z!Rm2Mzpdm(vMM;NNq3)pS-=lNOV2@1?u$uG06(hGf@l*by5Kb9sA?scWIIM9;&5`P z+Tu=6a0`fdZDC>rM`N`8oB4bH4LBiqS>s9b=K?dqj`ydP(q8af5><|i^SCaFm4m$2 zMyaAp=vd3g(&b%p)I{b0P^y%IicjM>8PneOz}P$yc96ry$zwsNRsupKr}k2b15cV5 z{ksGM+8-rcWi;~3GztNJcYHs%@#0EgA=aFbJ<}=a{c|Kfl6uL4fbgO0;R?!z*UzGf!?+#Zbm}v{7@8u%Wh_>7V>$S7Rpq|VL=6pGi4?nZF z3eO3g9)_U68yJUTJEvevG|veO(R=zR@8Xj%GPDD7(50c0`}8?>hvbzQv9-E97330z zH>O*KH1AA1q820UDil`V*Ds)xs;NNM$FW83$@`OhN-}7O8A-l$Id=d7V7Yy8Lt2#q zRsZmdoyBMq`Y6`p)i>X%s;+?FDDbt*JzkXn8s)lagB(!_ z`C3A>^f{&*(nR1-1j%a`028z4(zLR$kAMSbv@|=i*8~rIh3dRE4Yu(N0-&?|7kB}! z#>t-;v-T43kw3E!RBWqqnrFi90O$+Ky;q3`+jd&^mVlZ@lGYnO2oNmL!kY08*yTPI zYU$akWhXwMrWeMxYY7s}5Z3=B&tqNK6zoO5$A1gxRR+I_o|9zT{jnQ-7M%*(3~Y*I zUciT~Lp#Gev|r!!cL75A8x_t6B0kFJ_p43#48XdeKj+_+R*S{TrtZ_S>`g+H_Fd8Q zVYdEzYEj@jFat2S)|e9Bxqagd@mT^{N$YrF1sO&m@oD1ld;N&mLjtQnB>}uRNzXq= zcoU1srGlvt#&^;tpfToIwY-Tp07)mN^>ohq^0U~Pe1`UBAT!&_Ml3N+=KI0-o|AzA zrm9L3fx6p|!=`8~FndKMzqcLo16mb~xjxt_SAs!Ao zH?Y5HTbz+|R}7E*zkMR9!bIY)dn=!UC0`((yJN=_dtyuz5((P+{v}3P-@EKme>Y8h zJgmvY#v@oD$>0~qeJM7=PFd0by)-eu`!``uOo5pyZU?A|g8}rIuk2G_`?Bc^qQB$1 z@~sVoXpoQqufT?F!*Z}&=9k3mjE;=`!u><~M9x*E*a_QoC6^{4;0J?Zm zk~wGp07Gfu(ODyLK$tuYpw$A}ZQUMaD#ZtkxWw9GReP)KL(cf?Z@yiO8vk27$QHdC zz-3qBd7!m59p8<8<=ok?YZqTHh7@+7I~RH=`6pM)-uDB=2uNKOdhn9>)4l`b)PGr*TuROq=4G5 zZvdUFCv6>eMttvib^#gzj>T+i&!{LM_v*luHZb|#DJjH@DgNdk@2%SqYhW&o?UvrB zqQrrwSISSXy6B7=meVKt`dRNr42r>YS@@?Zg}r--k0HFa|8(hDpp2z5t}IQIfDo_{K+q8jH%Vbco2VqOdw7f z2V5xB%aQGsV)E92oYux@&1i15IC}3M24c%8u*0mK_f_2od5@1qv|R4-tA`c0*V}jd z?K=Cd?Uva8G*Dyu9edOs~g8)j5SaDbsLU$?-5clH@J|hF;G=*^rEcWMYoob1KkY`Yp75upuPhgez~lJObhYDLTj?ppa0h zI@#cK60`zp5y5Z(R;~plkYKEjrC_=!nwbiSHPaJS_pS{=z~Wt*cJlh$@5Y(ESM4Jw z=6Owz0V+z~{agV-@oFg4D*Gt0SbKd>Vst>c1w@<`Q1qENXF{dNr7E-a@Hof(pFl){ z!az3Tl<5|j5|dy$AXLJqO2;VD5wS+v%IvMq&Qld~|G+-|zmJ7UR{ik9)hmvw5+)zG zt_j=F=V1RyO3njnnI;rpCeUgIq4mB?ng#1xwZ?Wb$)E(ICk>wc+KbOFw#<@%p-FiV zd-_4%|0B=7yidiGU68p|E@pFI(z>rd<1sKi(}g!@any^!l@`Ru8kSh0K_vB45^kL%w#LAoV)T} z_XYiDxM{rTOW&HHPY@;WV*}Z&^8q}uW&PsJC8$_2_M!LV{eJXms%CixpYcuw^!tKw z{pY=d5?PHslc@gt?_U=O`$2Tz9xng`J8KhtSmJIiOxa|!I22W1UUw5Sp@f=~1PSz1 zk(|4a0ni&5OLKd6eSms4NR?Dzr;XZk`n}WdYs`6U7Y3D@dm>@oZ zy!HXXgy$HiJNj-m4`q97b<&O~a413T+=J;`y<^uN{=wzZ^^vDh{ z#cy0|zR#pF>I0j*1EgBz!-FJ(+4F(^UHT>&vLH48=uD( z@_ik&zcha6wAhk6Yb^8r^-e!0Q2Hci>z(-driXAs70H%Hyem}D2(l-%mSAPtYxC)5 zOV8DHFWp6Bb{tv^u+FIRz0NnFuqH1~;`4pX^5S9*f2g{BarWe63$5kOg``ws*L|)^ z=}Tec^vbb)YAv)Ld4D6ADpq3im-b{8UJ`d4m!U69%;}~3ws+pj1YK>)OP3;y1bdTR zoBy0R1Q=O*Fn*7}1g_Tfsn{+Iz~3ZR?U(NmYhV#<54Z{pz!<6_7*n#$_Z*%Cjm;A< zJDXZ>NFppv;q0Fc++;8N=kQl-?R;uf|9k#Hl4Z}!5$sJM&Rlb> z|9dt9==kg_@ymI=_PJKPd3&Zk#0LNooR^Aq<0sEd``2snE8-8^qZ;KVbHZL})5oqW z23CIUVYkP(ofj>&Ev6`jQ4R=IP_@s<3Ag}GfcRceUt{j@_4d%~Icv*jDnMFnhxS3> zulFpm)@~{mZxbi?pXBDV6tKU@y;<+l1*?1}N5 zIXTBsBq8z~08D=-KJz>^Wv~XUd^}Cr&cv_SVfiRlkTcEh+8e~e`53l=k1U32{9`f8 zfXD$N#4xSJ@BKw48J3dR0<+z|15jd5cEFMU&`Gj(-skI8v1WC3G~xJa_s^c#ikX*n z>FuEPP7_l-7az*U>r4_ay2KjtYoPxgTNwLjZ;fELxU6ZbH9&?A&}q5%3*t9u++n{1 ze8k}LM(XoY!oFqZ;l(?@NLQ}({36AIXkwiTO`J@uoz9^UWc6s8p+?GO2rvmh4b zd&DINJMHse?h{BXwtIOtxqazp*%)W0E7MOiB&N!#EofL zQgKH+gVb>@HmNGGQS-;-A&(Xyc<2}{8yAIFqV|)BZ7*FMj>AhZ8wJoI13De(lC)f$ zHU*l-u zk+f$p%@`ZZhteWbedDZhKdKnMm+|88s_K%@1olaw{_Xd#DGjsNQz7e2AMcXpRIjGd z7x7*>4u}1rwA$>8x3_77B88`(|9zp(J_FNfoO&RTsJ5M)3FpmNghJL6o3OB1O#KGdQco^qP9ARh6OmT5w&?zCPxMvOa4X zT%P~Qtp8YXD~%nkV*z@XF3DMMXL9}oL_j7JwbC*ed5-NM=7^JEnKX7-L#FvnFQs z$!q-__O-CT05P=MfWZF!rP(77g_R=6^^B5+9>6ZGA-c0FBb(kYd*u1(Hvl5nF2Pg@ za>hOrZ9L=T6DwFgSgNh_qZOsw;wvN42r!bke-+W~zMtq9VBF|GzdFIU_iSI$JmFjB z_CwL51mCm&Xye$29Vo$&p(oL+s%Y8lASRi=lW?;cz+d`L?36@BFywo+>C`0DB!`zJ zNuwR*ybHSK0J*jb-?d3kg3SSXv;8XGv^AVtk(XfL=h1-k*+A`W*^~AJ@WF^*ns*0# z*$2)>jdAzR;zQ{UEnRFSpcAVH`+*IyCIVAuM8#dDvcSyTgSG4$LNyFx(&cdO!~sT> zTYo;t8aU;2G)#p~aJ4XLoA!n(#xnJ*3Y#q+t(dC{f+J3vQ!mgSb?1Ff~cmy8&s zq3EXCEzTTUVYSn3%bs@@3%HD}RjoJR#Xf2v&}UW5#KLR|Y-4Hg`J1$>Og;KTK(!?{ zym$ul3d@epQ>#cvgDvbjx-cdQ&8K7b=T*Fr{Jojac3qrxWIwTNN^7ko3euGjKg6c& z4Exvl1st52=Y3`xl|8PXSetFKUjF^krA6w6u(tZdVhOE%BR=nJk}f*mCeXFYHjqHk zLOfaRZP`;FuM}6t@5PP*0<5*_V>4>vZIej1R!fh-0-y?r%4Y%r z#4Phk(EWKym%JF?|3%)3cVo@?OxiFQt-yca3;>laEg(DJwJYN9l6CR;I5?tzu6=oR zik~KWS__Q#HQ-Ru2Ae|4>od0JKaNy0AetFz0W`Yy1-%}ALi!BYA*Yj{VKm#&{aqg z>np4&umgatm%@qSqdWpo&UX1Z@)CYV4C3q|YxrH>tEe*9^7Q9GGr%FcrEo=CvGn)Y zkK9LT)#ks&1AL3v8dxvhv%lQGz0EcsUAnBTFop5f3e`>f5P;(BiWfJvn2N`4N?zL9 z>$a5ECq`Lmy%pHpI(z^#KOQ7<`a8PqnhUFQfeo;~0R7@?j8?hXrU~c=`=0y1W52}9 z_Mi7+UzQ(V=p*Dajtn>?kDp)SIWewIq50*UpPn^o6ALi`bI`k8a_ECK=t2^={yb7T z+Tk%!$1acYGjF{7yuu>vmujyoVeS}1zcUVy%I{rsQIfk%FDMNilLb-*^&$a71o?7! zj3Kvq7!^ppfZ51I8|^2*P7mX7sfq$I#}+ zIUo;UPVX?Ch}%qmEG9cNBR;Df31M5y|a&Dx_u;a+La2v`|M zz*(mps<1qf#Php(uXpTtybP??rYG|mo$&;iQjzJ^PmGhAu9G$8lsm|Uq|Z~H=p#&a?7fR3uBCwLU#38JjsiwW|tj==UK5oEI`(aZ&QzuEb_1mZ`O z+P^@Bqv$$G{T@``fTyUSjJ}@w-o|NNI6`X!h}5R)b80m4AZn}P#4vVIX{UX6{|E!2ofL-@oCaV#bY>$ba|!t4o+0yGD|vHIBfXJz#S+y|ai%$8j*4bbo3h zQJx1SU9fWNRTtKN2f~`XLo~eu0yTUfdvz1oYpR!^*0@&SigV^Zc18zjPAlgu#@_Am zne9bDf&h_rPdhV5l+(dB5(se;v`*g3}W) z3E%=N7ju^F#vIZnW4M8&MsOz}!<<}V3idS-RJMT}Uzh!%`Q;n{2JBg)z4Pm`03{!% z)${H5Y5y#pqeOeDY zqVS}Eqe#&KBuNX#X|*Bd>B^Nt01mn8WYx2!SxJhQ;bo_I5X zm%>wNwxvS+VXA*^g!A4=4!9-G=q+kmc4`1d&gX$H&+Jphc>nNA4+m`^M~KhMvG>zZ^1i1-5Y z_%mSrT=TMYzjB5YuAE;5ii5fAyPYYz%;ZD%{HWl*rW59#u?k8z$**a2{Tg67ez({W z1Kt@1^!lz|+~BLV#XJ#^iH+m4wRGD->@ol3-vH{d@Ouoy{@C}MT59fY3mP0z68Bz}kIYf6kAvZSL*DtTonz0y)rtuLm}X z>#ehRzZZ_!2y3*KG)njk5y7UdxI4B>ahgpzG9U>M5ir(3K~to+mEMb(P(uAtZ2UIB z<}~19sjb&DYHO4ibgicGJvoQs)K^oiQ9Q+9T)XUXpf^EilT2%{Pxgi>txbDxcIC6# zeM4?s&ZcK(6W9nXeuw3E;Kb6oaE@F{?bP=A*=a{~Mltwb&mQay|M_j$6N*jPLRzA+ zoN5yI)KUpdDan-F2cNAFhmnk>1yrih?z!(1!(e_Z`@A%TXSrhS_4rS*g;*EZj%_&t zH112xsg+awtDVeQSjhM5+-w4!=$!iegRy6;FLdEAoCg4aJ;S-6QPohJBdhhD=3AS_36!snB!ER;ykSRTJ^+*a6`VI z(JI&{nveIQVA=u3wR?09?3dfqCjRZPLCME-P0IPt+;;T^^$xAumcRP1|9iKfb5C_8 zn-QDfnk*Ut+lLc`2u1`jf-*s(>WXU0ok6%<43~q7m4P7zF@GW8MF~1i7r;qN?MPb} zgjzsMt2GS^4w0i5;Exw$R^wP{FlCe2Obq_BnNYH69BTgzhSZ{3B-G)x3sQPcoC?Ie zYYez=BZyBAwHd1U`?o%T2XTh?rPXnM zsY+@MdL~s71{R{)lS=;_Qt!@wKBuKw0g5So#Ybk+ZtF}rE z`&FXO0Sld10q{8SV7w=WK_H1{F9>(3o;e7J<=XDPUmnAOk!h@CBjR(6y6^L#<{ERt2&z2BEjRd zwJUipj;kiaOqvjW2bc(UA^krLL+Rlp`dCy;msTGPqkAF_juzb%SmqtR zLa%}FUw#Jd)p=^7>_%j^mP^K5O9J+sHS|ubvkU70dxC>>&d{klfGTLYCGYfae|rDo zeR4=Qq&;&>5b|$lA3T>mR_w7jhxs^8j^ehoU(#4#`SbV*TOvj}q#rt30hiYFX61lI|Ki+!CIXpJ1 zjnK_hom$6p>l|avR0~SZ(V8}j>eml%xxB#VrZa}_9{?b?p}&6Z!XBjq9WurVRF1>EM-?tLtJbPEEo)>@#+-eT$) z*n#~kIl;2~R^Bta=y@xk%lD~_+g}B?<<~{|83ndJb=CbXRa5yW1s!(X=UDr5liaku zxG!Mk9sS_uORB1Gn8Lw=y!4pfc`s)|LNQ&{8lLyl#dp~gNi=(=y3AhM=Kx|lnk>}M z?tOe?MR?rbe4C^lpy*xm-Tcm%@uOl#Q|*8U*0B5LE=s;hvkXh2bhZMNV;lRWprhdF z^WCR?%fI`by(}$>Fdb@Kwzwg_7XYg|&Q89UB&su5u*~=cx|8$EXOn=y7-DbP6~MW7 z3ml-E(Zyz$?5CeA=KTiyy7Y6BCDUNvQ}{{Y5P;7Av45DL{EGL+p7yD03O(4{^OiL> z#J??pWNaR-52eZ1v|)~j9iw3*Nx=XEg0dM)g&v>7k99zSf22vLoyG7P?5w$#lFw5` zCj;R7h|zA3KdDjVd6(W908~=8l&qhVNosUC=PcL0ZkRbAf4*yD-Xu|< zUmb|q#JKD%swLYeF=Yqb+x!wE0PbmhR>3ID%cYiZKPS2F=Z+2Gixi8xeFP4RFZg_# zT_cfT{9b2Tyy{H2Z=k<(fLUk#0lV@&xt@R9HKWGQ@cCHZdl+ohjL@jA}6$Op01p3{X4Ke-$z?{(6L`)P(H8PnNzqC z#{iihnx?yoRlb*eyD{9iAMy`(K2-nhoxA+(9LPMV7n^@%&(cJ`d+H>!eqyWgm9g(^ z9gv-E*%9o(`IBdfo936e>{kyyyJv#xK6~8c%Dmep@%;YpdWY4WAs~pk?UyC_4eS4% zNaFBQCbn+*kN@rOcdIz}QJ{>f$#gZrOl#L{I*%ZQfjjwx=#<2WcOmI&J)16-2#%_Y zWcp)?J;ye-kl3^wyr2&vymSE+jHgs39xuT&v1_2LANMORB25CXCtdl~}n0%shNA zBN2a_P17mO2_YUy#d^Q=R z77(O@&Ka1BwyAmo6hwao)^uTN)MB*KKbc08nvi5~sdx!GR3$Ku0Gv&fE`7f_P@aR4 z5;!sXlJOe*8Ng-ou^t>k`@?r*FL?Kb1~VANGWtA@?~F_l zYLz?HXkdjPtxfd!{XRMe{XGcYfu3)Nl_6Q1U*Essl45Jw*Mf2FNodH7O--|kG0?Wu zBqW;XVgYWc#JESn&dI5Y{o~z_EKV=-ebxvlFtWxPr9D%?5+q|PI@hYy^sA~umHm2N zjTBE?X3n0q|0?f;ri`j-O;AjgA0t7+*sF;|ZGp&NCD3nURQq_>IPnAo5*#32(+)6# z-RCx~H$j4mcoRQQwIO!nf;eu^4h$TFW(nhw*?+Gkz-mkwg3oE$&Be)kF9L7tg_$WC z20o6XX9XUD-NvTCkVw#yKm%YUs8=N`dUf76h9x7t);fwYwLM9Ipi9+^D7e_HRmhE% zO=Wu0!jYhO-!DupNDRMx+Z0YtBGu^{!&U2~WmH2X;nfK8s>hvZ!l_X2C zSwJ+w;>&30A?a-kmi&ZTpEimzfTjbLSnIgo5G1X*m z4vPlMZbuk<0Cyty0uLY{-_xuA#h{C?anEdU4@xDOXC5Cr+oqp z-!b}X{}wYqlBxY%E7FqR6kyzty<+X{BQ{u4rd=8hA28*)K1@*oYojMB;tfHQ;Qxc{ z`Lj+H%>TYxwza|t_ApY|bLZ;46bYPt_QgJzRE{HHNx;}J0H(qNRzhpbHo>=PjR7_d02zTO@9z9eciSB#y!p5-WmhG~ z^UK<>m4F(y@nA14)8dO!_fnw;u(ZUc8b8rv^?PmX=T4D0{k_NvNK}u&d#T5xRfC;E9 zF2RVkr?oSwv^HBq|0ectWn{Nt8e>&*AX(Fc9Pj4L^l7!)Js(V>4hS7DaSWiu-fYuS4Xp@^H|yWef;Rus@HpJm z#N(?#x|EjocB(4sWF7n)8n1p9z|!oZ{2G*Tgo&VA_0$vM;P9-E47TZO#r zV~O_(iN&;!iW$XHm=jK3lA>_^_6nC}8qI&h8%e*ot26(tZcfD3Yzo7tpg(j4q-24Vq3^rrO2i zSA2T|QwEK?IpzEEjxc@MH|G>c`p3Mmk8Zl+{Azy`V~GjAjD7ex z=TIKtjO>|uI2BNckdvpe7FCeQS`;I)iaP58^z5|rZqn@1rSj zbM4m$iN8!re)s*)!XW;#is@e@=K-9F(bzY+ymO^+_22*YuKGB{o6{0I@rCk_vZoUO zRl}erty+7;-?2CI=a4U-o4x;#fi1Zd;I)8`#VPhn5kqm2FRS;tupZ=7ewOZyrGZ}d zglm(Gkp1oX?h5$`lbekgW3ax4;(RU8p2_\",\"1.2\",\"^?\",\"normal\",\"~:typography-ref-id\",null,\"^@\",\"none\",\"^L\",\"left\",\"^A\",\"sourcesanspro\",\"^B\",\"200px\",\"^C\",\"900\",\"~:typography-ref-file\",null,\"^M\",\"ltr\",\"^Q\",374.6099853515625,\"^D\",\"regular\",\"^E\",\"none\",\"^F\",\"0px\",\"~:x\",95.4999771118164,\"^G\",[[\"^ \",\"^H\",\"#ffffff\",\"^I\",0.12]],\"~:direction\",\"ltr\",\"^J\",\"sourcesanspro\",\"~:height\",282.1201171875,\"^K\",\"blur\"]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",95.49998073772146,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",95.49998073772146,\"~:y\",-1863.999482267452,\"^Q\",375.0000213699236,\"^Z\",240.0000101225969,\"~:x1\",95.49998073772146,\"~:y1\",-1863.999482267452,\"~:x2\",470.50000210764506,\"~:y2\",-1623.9994721448552]],\"~:flip-x\",null,\"^Z\",240.0000101225969,\"~:flip-y\",null]]", + "~u9f14b915-410b-8062-8008-55a1fbbd5fa4": "[\"~#shape\",[\"^ \",\"~:y\",-2043.9994670845845,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"background_1\",\"~:width\",599.9999796086561,\"~:type\",\"~:rect\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",-16.999998381644758,\"~:y\",-2043.9994670845845]],[\"^9\",[\"^ \",\"~:x\",582.9999812270113,\"~:y\",-2043.9994670845845]],[\"^9\",[\"^ \",\"~:x\",582.9999812270113,\"~:y\",-1443.9994873277228]],[\"^9\",[\"^ \",\"~:x\",-16.999998381644758,\"~:y\",-1443.9994873277228]]],\"~:r2\",0,\"~:proportion-lock\",true,\"~:transform-inverse\",[\"^2\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"~:id\",\"~u9f14b915-410b-8062-8008-55a1fbbd5fa4\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",-16.999998381644787,\"~:proportion\",1,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",-16.999998381644787,\"~:y\",-2043.9994670845845,\"^5\",599.9999796086561,\"~:height\",599.9999797568616,\"~:x1\",-16.999998381644787,\"~:y1\",-2043.9994670845845,\"~:x2\",582.9999812270113,\"~:y2\",-1443.9994873277228]],\"~:fills\",[[\"^ \",\"~:fill-opacity\",1,\"~:fill-image\",[\"^ \",\"^5\",1181,\"^G\",1181,\"~:mtype\",\"image/png\",\"^?\",\"~u814272d9-d3f8-812d-8008-55a1fb78211b\",\"~:keep-aspect-ratio\",true]]],\"~:flip-x\",null,\"^G\",599.9999797568616,\"~:flip-y\",null]]" + } + }, + "~:id": "~u814272d9-d3f8-812d-8008-54c11cbba21a", + "~:name": "Page 1" + } + }, + "~:id": "~u814272d9-d3f8-812d-8008-54c11cbba219", + "~:options": { + "~:components-v2": true, + "~:base-font-size": "16px" + } + } +} diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js b/frontend/playwright/ui/render-wasm-specs/texts.spec.js index b474c7ca05..f660356d91 100644 --- a/frontend/playwright/ui/render-wasm-specs/texts.spec.js +++ b/frontend/playwright/ui/render-wasm-specs/texts.spec.js @@ -609,4 +609,22 @@ test("Renders a file with group with strokes and not 100% opacities", async ({ maxDiffPixelRatio: 0, threshold: 0.01, }); -}); \ No newline at end of file +}); + +test("Renders background blur on text shapes", async ({ page }) => { + const workspace = new WasmWorkspacePage(page); + await workspace.setupEmptyFile(); + await workspace.mockFileMediaAsset( + "814272d9-d3f8-812d-8008-55a1fb78211b", + "render-wasm/assets/squares-background.png", + ); + await workspace.mockGetFile("render-wasm/get-file-text-background-blur.json"); + + await workspace.goToWorkspace({ + id: "814272d9-d3f8-812d-8008-54c11cbba219", + pageId: "814272d9-d3f8-812d-8008-54c11cbba21a", + }); + + await workspace.waitForFirstRenderWithoutUI(); + await expect(workspace.canvas).toHaveScreenshot(); +}); diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-background-blur-on-text-shapes-1.png b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-background-blur-on-text-shapes-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4988e566e76b4d379bb239566af2365597db0ab5 GIT binary patch literal 561216 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

umMhFQ9ko03kF3k~VYHrkHtZEJR< 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

KMJ53b^r~bcL609 zbr0X~ob8Mqxg;MuskNpE(BCOW1K)k5p{t*`pi9pAMcIz0Nh>PS+Je566!0 zAKl){@5k{#i{jTSEh|O|^Cl7^gvaqL06)J9NYUUFT51IcHihNdfC+Dv*18S*tVXJP zv7VGPUThSYnBj8Fi|KQ@PLUbwqz4aLJ-?d9v zy9S>0&7UD-jOx53ZuZ`33Y~ed%$RneRB($FYF7ADMw(ptpRDV;#C%J-xfc^>l3e-u zHCA}O2^S{2KNj);U1j3TIotf0x^m)YBQYAaY*H;w8OF4R3t=`jR`Il^O@w>@w3-E6tt=SVD! z`_P^kgI*9*0pIBUxWelA=<&K@*b>8en&UvT=w6`dii1gP zrC#=!K*gW@9IVmAp&#M){oIi_yPlr{^|DEtjs}M_{2nGv`N0T6Y9y(zSTttbhA=n?j9jIl86hMxymj#cVpD+YoO=i{BnIQ$|megaf*U~g8GA^+H^S83RCETjuXiU18kHpRxNH%!m(-u60u~stI-D`R znW1G#DR?tAC{pZ$ld8oCinY36RaqqDufB~#A@oqtFz-eHpKS4oCJ9i6_7Fw?QJRsO zU?OG4R!qdX+rM4Jqd;FgwN(auU8YtP|aad)Y#lph(Vf4f&#R z02^EiAQ*4pTp%XG<-Q~JYNo60yduMqBv84@;YMjgwhdq3p6b=#hLBc$6!TNlsv9hQ zE=u`c7}1y(0mdraU=x$cihbQ zHo2Sg;<5izvn17v0nF{HScWcE zqz?*&BPhGN$oW`kA=!cv%9(KVU<@U8Dy%X$WY=KI@xs_ zg$|R4y@IHoE-Xj zSBmC=%Y|F&!&iQ~+BpeonyrkE4(lv~NoP@BnZ;9Elf<%3k^f$>U6=il8{i~&`=8!} zl9w9y(&!g>Hqne$1NjU$?SV~!pJTL}&VqH!V{~IQh5YC>{>i}}fiT-h!J@?>t^jx! z+vkKfr7XaDBlt_^)I>}D%k6UGJFF+?GuQXx|0{}SnC0fM5C;~agmc5+iCC%cNO38! z>B%fItah7P@&lFH<;{RH-Yk*c9ISC_#rLa|T#>Pyr5o1I4&s}l2IWmz4@E}krc6`y zA;NUR?cYZ26pNS?jFCO@4xwi^z*U{cjsv0MQEm6R2BHDfi^F2UQ}>S!Uf$B(Eg?|3 znS;P}ojFts-0r6kMcXhi67CxZo*`Om;a2XiaEIy_Mef_wBH%crLVMS-Y z4!)>#4}2i#D!(j+O*F+sOB3%@J;TjaxvTPA4fc^ldsf`dsCgGqCM+8y+6?%3Xn%TG z1=a2>?sWkPL^Bif9k#kwBB-IAt=?FhyD6q_qd0Vz4M_lNJ<^K#CP}r2sCd~DuiKzu zzpKc|rKOBbA+6pIlwQ#zAN;SEcTt1C&^ zYi@7`f#E~m^UIlJY*oo#RWHv}kkoW80Ug-!ZtsmhlbhM~Q_^)q$gU0754TS%vJ*yYci6243@bGW%tPgvFS0 zE&vO7wY1}(r)JDLSzca#T&U0oA(csZXxo<69xGNG=-t*!cy74lid!fJhR{H z^E!sqDP_wl=F6VAmXY|PaNdC!bEICrS@uR)-Y3u2vl|jl#8mr-U1WZHY#vFOScFE# zc?7zgAVKKNtjOkA(|L1s0+5KTk9ON$9hUBe^Mw2>rQ`9XvP1m;$Kiyj{BZ=L@4gT- z%$Kn$XBuHc$H)$FILEgJ;386dz47=G6<5+#FQQ=%CgFXMO>4~t|2{eHOa6-nbv;1Y zn>4RVPGd)(zyI!uLtuyZJvJwn3?&`IV&9CwaOECs8T>E}l3P`jmd|eSgIRVS;z=D; z#IBi&j?SGBjkQeL;p&qw&A!zV7Ve+2TeR2N0&CwAkk;Vr=74_bjlF|XhqO^unIADG z!%8jyR!Si zFhl(7yIgCV7B$?eO7|f$oRZUaWM1*5m&(TeTGQD`qdEc1wA}$+&XZ}6NxwOG@|QN0 z2Lr5YkZ^b@?;>~ms=qRGLzLgeKj&XcXs&7&?Iwr$yRFy+T+ zZF9v;DwilGGeBJT&b;oF$S!#1lGL$jF_9EMv=U4&-k~`yRAh6|;S^c6Z;@eXGt8 zVDwauIhTO84{ylg%X| SZ|q>uvhE&2<}iq=Sk+>Y2~-h&7LLo#&fag}Uzm7XLw= z!{*+VLhRShkTCt=MTcTYW~U=Yyv~!n>@I{l*xzAPbX=rj=!2WzT|tIImH_d)K#i(F zgz#;x+3JY*Q+S%r4CPG;MoB#?k4aw3%Hh&_JJ5*|ab96YR=}LUb4D(q7S1i#%#Hsf z`Nn`G^n?EKhX=;jQ!+t;KEA}>!kqKc*w-V(`=7K6=4msI+H=FOVS#Gz4y-$PDid|) zT$9znT-ID0gXh~V(2rH6!W*~0MlFf5XSyFIc>L`L?19_51-AJY(|rm29D^3yxxEX8 zQC)U{`aJF*r{7QSn@xU~|9!?#{7>9j`?pQH$J-pE#ux^U5>LJ*AZ+2KrL@_N4~h*r zOj8+#non)=hmTmEmH4~cf(RXbUE-H{9wr6eVqnv3O>GDh0lP{>1C?;t80v%CV}oWV zxh!Uac*&~GOD2kw?4fY?ra)*_=Abz%2kJt)dB-Twvs#iO;bi%vk!9-MWxpJIwAZ*O zY&zo{EhD}m!o7Q`^Zd!K1NYG30 z_LXyv|5F*u8z^2_>g=baejX_Qsf~-;%fW_L>{qoF7Am$fstZfZdp)kqvv*CgQrSCK zwBhF8C1L81e_tpefp-Ke{ONeCEfA>Z*KCKU`lD2p^}Rr&Jj{WFj|<0dTI7v$oG`T& zPwWmDDDHni#F3D;bEHyICSombsp`wDv0KXV#jGa^7>77};@vaA_LE0*Jll7y9;BS>E!729lWfw)?#V&jN zMx#_s5T@hAA{jyQ?n%10+#y;!OFngg=;DTvLodF9Nbb$XD1ncw5GdH+gM`nw%8K$Y zsdooSzr**;-{w&Xd|Uf5vbNvPm33~e2Jbnn&;$4nxR>jjN#ne%>*usei1KdhXBoT0 za5(r|N#0da$At7^IGdi9H?O*)p1i1L0toQ$G;IHTZA_i_e7&9cA?a<_68LbRtNh>m z^NVuq|Ili%VlLjlrZ}ni4jnaQc#Nsk(1&tbBOmB(nRsBn_hCQo_$%|Qj`UBjut zmiQwPe|Z=Ex>5q0=;0bUOv7VA>t?O(MM|4sh;Jnm+E;6IccYNu{qaKARc9iVhIy~T ziQz;V#;0ajJK`C5&k4uLgoP$4yv_!IfZ{O98ErRWJD8`ec>XgB&wGuv0iss7f3}9q z)oJ1p)2t@LWy4H`%(E1;9`w7C1E^~opmu4Ii6Y3)yZV+$kHGT?Olx6gX2G(}YwzUv zLyj@bi-vVq!liq31>&IHz@KT{uAQjVZgs$6tA>y3obtIo3&&Oc3;``+%L#sGNS2eQ z;ul$Xk$~Rf#H4uhT>lQD;=7wRvG@B~y90SX>6AtvBW{TX8A5HS@PXkMtOHu3J~Xe; zn^UiNaf9=HrHjHI<*UrmotIcHxgQ!CH(X*G0&D1lGf8+tOlc{2)uq}?yH=8f9-PK! zgW*nedcX0g!fL5iCKEfZc_4!~!1cL?nV3dojvakWQOLmE&!G>KUjF^FHO-YKbBx2_ z#j?c6wu6ZsKN*5XP}=UK6gaPm)W0c|Tf^}0U8PF_w(sytt*~@i1FgFcNwnwc;L&X^ z5jX=X;?%Gz2+P}?NmI7T^g)winU(a z#$B$C_xzvrk{tpMkDbDFgS0DewV&nKb?|BLV0XFy^a3ah@pdD0qk>%#HKUrV%8hmwV=Z`@>heWLg?`71bM0pj^qfLKu$Pgu`;zaJ(xB`n@=~R$ zx-|Q`JowEC#|u!$(G#=AW@Oxf==HgZZ%vNpNZQT3rr8s7!~!IkAm&~fbr9ZX{B2?w zydjX=^?yiZr%6&Q{*xD?(Lmo0N6D1I1ETxyBMdu`x#+9G_&oK4V?(u}XQTVw@9X@m zsQS$9>(1}g&($>K|6N!kllq7d|DSbf*h6u+-~8>-ei|KuTrfz~yELGw*ED&szC^6h zR=J({gqSMr<2OUC2knp>yr)%M1UiJcDg)kQ@@f_F5a^m}x4)<<3(x=v>E8@YW^A9QQkrN7 zf4vWW48R(_Mk!uMMec+_yB=sN<(EZ0^_uwlQE$i>OD=_+M<}$CyX>MjIwU<_8pkpw=Z#*?qhhbH5_-V9?*!`5d%CAPb zdJ9o&%Z{qShV@*tb(-J1cmVlPvXw94)wv3 zV=@}N3YW1(Y~grTxyv>a=9Jy+s843{fMo%()so97zRm2{`|Oy|lqVG%A$^3a22NXw zo|B(P!rrjX6M1VlNS^t&7)}FrCUk-HJN8eU*b4*}Z(7KsfJl>A9~Uzw%>b;j`}V+XpLB zh{o&*`(grEMp1UN}! zE|rf?rk_nKaW@5YjvfmIW}IY~^VCZMSL~j>BU2aHwGW6a3oTzoIt;FNtVhime8f0VM{%B%qYOlA2! z{U?5IZf#7J6iZj5xlPV~^NW5OGip8!&i`TBoTL6vaE(?)t~JI0jQHL31&5xC!y057 z@a*U5gw%q;V2d6PL%**_8W7i#;1|`y8nBz{S7#34+~DwBa`n+q39c1(<7RG8s7j(f zoVo#|%Pch7R}n{09Xf0s6a2%47U=asPPHVV*zRcn+TD%vZj3CY6$ykJ@pFZESSYT3 zmcfj*YK61&f|$xfnVe0xnxxu~nUI>u7S$jX=7ST(SH76Yxsu!4tqZlHLUg^9wM-33 zx6B$Bu-Q`_iw`@|VY|C$O}C$_-c_AMXb^i-Ns?Y=>bZKU|F03zCk(u?kz@IyHbTdO zzxSoWD6HDL%m!NRjiLAL!t@6n`q)hiyd_%1~ zR)cIrCz%rTHv2X5Y<*b9ofr+LOiLnH5)s_2Phr?K*%1D#K)zJo>_SW3CJm#WxHQVW z(;Hevr~YLVDfQHIMugBsEE`yLvI4`0(HI|Sky+lnGZhJjHbv@f`0@n0I^$z&Wg(l^ z*_vhX2D9ZezlgH=)%1)JWgc%b-uRlaQkH>xcI@d^WErh`R4i{RSda0k{avN%d0!;( z4c!;iuVc-yk*+EaO(1RD%ATek)$yvEjsZy;@=}z_XvpuwXrq=>@VSINzGdRt9P$a+ z>b|l|&Ff5Vis&fqMy0yhh?yow3x{$D61`>j+qQ{&n0MMvf2}D3!VdJh@jufLulSKa zH*;#Do+5G9F0L>!cSZOggvt6@A+1_PnDY0$Ofw&1#Zz0Bmi-YslVlqK|E#$ueWo30 ze+TT|fV8K%B$IjGy^ob)nEnF^2Da%Yqirzuw_!~BDsJ!T=mNt7z%(uf4|4uOdJS2y zp5x|W7d(hy@E1Z}=k@~wpAh_NXsW{p&5LEw;h}08M;tr+pnjHN*XJIQl3VtNz#dyC ztN5)j`Bv@BEz{k@J*I0XN+!OkwSMM10WKh5Iq;B{vlk2MYj1uI2R1FYC?Mu1u;2?i zL6W+yFLhrX`iO#zwmC}T4yI^RmW@9Rko_2R?CFB)Y5QR;J|q=h%k#hL^Ox~?>wMQX z`?Xl3zhC?Pr+F>U`@epZ;;)orEqU`ZTLrasgmmRy>$uem4@PeuYUPo6kY#$oJR158 zrApG+b=3sqN{yha=xPwgO;3PD-QXTKMZ>tXT!@2gi+F56!G_kB1=y$ki1doX%Hh_7 zjbP=^ZgS-hmixoi6_FAd3+tlM>ILVnw*I7f`sZ-mLi3#_lLsj*a=W#~$~Tu|5gWP+ zg|HEQyv@@VBc_L|1~kMe(!-h+QklmNi*I%gUDl_mf75_#Fz@PtUt*JPApTOzQ-`bK z*VF_SDB*XqBg`xxH^(7~I8!3#BLec+yi2k*D1=MIeDel{G#}^P8K*2Q$M~2L=T?pr z!(uV*U{0WOeFw4RHOp3bT)50((LhU$j-nHB&7c^NOK)x9ZXd)tFG^0%h(C#%H%wMY zGEOs~5}wS{uc%yGJyHW7F`4~f&r)70^<_4DJi~lc`bh~HYu0(wlTJV#Mk7G}mv>!Jbuuk42gr|RpH8ib9}1m&|> zy{BANde-w-SI{WCjrWJ6YzoK6Xhvwl>s*2j-I_$Xn2L|gH6zIdJsV=2)zmzt^V{u; z`PB^sUIA)_`=|V1mq?c^)rHTi0?b)=N6|GN0Ja)_f>|WWX zC0OwDB%M_4QP2+AEx3qIY#;o^5jacZlRrvW`s7X4=sVjUF;5K0T!?Tj@WWA$Z8BX6 zrnx*^u6t6n9Kpz!f5`rEukJn&8!j&&t_Q(L--9zb)PSE~6^vyyD6+=5jE{+~A5s_F z`BXOV5zdzQKsTUJI&ZE>{TeBnn;29p!NL-r6sC5e+|!^HXiz%0WSYz%5bw4~$|CFc z<(#lA;v!h#pA0;S;9#>RA(tVL+4ln%I}TEH*mO6}&NLX>Y_tc^4YzeVio=hq$T4Zk z_d6ZMY1cu7!iuMuwc<7-iKQUCrUUr0s=8G!9cQiGL< zV?Qb})Y&4Fn`ahgaxK5d}aNN zKfztC=;_sXhD$Jvg!}wc66&aym%cPu_Zj(_v)%vL@Hn#Jd3-^whPd3x?Q-m7;|!nD z`RLoSJp>6mT@&55if`BK4+Xn7?KNe0e4j;cbN1qgf8gVWM|^icjuxNd9it^LMn}AE zbwY~&>9))A{1GCuiJF3wu<#A<^o5M=bVl%iJ%^-XPg|CyFfSbI$;5YW3()!43DM6$ z#ZnLS8UuUV$Qh~Ny_AkoSn&;i4#C@m9<0vyvp&8l-7Nh`LlXJQPIor*SJ2BeB>s%K zGd%u|=5+Y)Tj2k~gVNt{_b@A<`MIF`k!jzlhW!?j{otF)^(UWLe*C3Q2o)+gWrW%1 z4A@@miru-{pOI(wK};ampxWfIW!-z72Ky(sI%`h-ypB66DZ_SQxe%#h-CDC>7-Mt$ z;Y-rvK1>u4tB_;zZw!Wn1qhTbE3C<+DPFTBeOa2V@KgpiF^{N|<0&dx52?GpM+>glWHUiILwa>7%m{d2WHk$l zJ$Z_+kw)lx?Vv;O_W00{32$x&#X$wzr8r2%(GnSgZX2rn=A% z2=-40HTx;YTF5AAgll?giN`+nTh%V?g=h&Aeyr z0}sg764tAI(9siqKJoJ|Hv(s6Q=Hw?6?$z(Qz(5rf*)3-_*RyIEx$ z5q0$s{f)0E8h;AS_TR%SZDRhi@yYX8b7?|m$e)IVz0@%wZE^9p@>ekg^iZ3Tw2-?B zcBB4!H^))oP;tuN9!D0D`-%3N&__@VZ*mB*Q=dRd+6b=_j0ulaB;a{DlkK?jB;@V7 zz8C^OKDRW`|943t{;wY^TSIQ{dt)*R`(?{QPZv@pPnvP$Y>^t04cTFcP9WT~8*Pn|pJSTeU8h18&N zdD`s`83~ol`e73~)rx-jkQf~y>8QnWgkb$Lb}fL=9$C#?!VC-B?@FgBc|xaQt7$vB z(|1VwoW02(UWS{uNaA%L@o*)izAWo>3pjkP+o+JP^FSo(LLBH?BXIE6sLCRzDw#Hx z?^V0^?Yxg$fgSMj6Z;R&P}s-qU&TtjYq=)BpHGhxh9g{m1*p}Lcds4YNl!=dz9c^% zNObea9}hvmpPRQp=XJ2;?ZK>?OnSJb!abyY7brerd2nK9uQ zFb$w1#k3+iCW& z&Lw!+Lfuz*Ffckl4H&r)vzbGfQN6i>)Lw!I3{Sml|Gq zlP1c%%D|HfinbbOEtXyu6v8Hjx!5moBF8%~GV$wSXVC^w)`eV#qhh}&fKy05_%2O~*qK!anP4?6B%rbkvaL`1?d3!q0ybthU z`>UAGFzo7vq?g(nqJ53V>Z&Oe>OOEX{RU}j$MD&as}H}6()Gn<+AZ-gi*hV||0q7O z4W}H(%A}JIvN42?+#1x-Vw~yG@Vn_f9xU}FHs2&=PvXMmZk$TUH5id;kYk$G&0?B5 z*UX!hU3>q7H}^m^s(!GvktO}XuXwy8G#+lC)WYQA`WLGMY8(88uTapK@N_&art2H4 z)47!wL$X3{j3}XNa!X(!t3n z2QN={Hf=t@Dp_lvCFSXmZXg-Rd0X~oE0``HT0XXe*WmV)!l)4-0#&P;G!!pblf}2Q zhk>g)qpzcCU7hpC`ibPu8*;QGA)n;QHLR4qz{XM5q2=hGTBcpq{^>uXe}P|)&muzo zV_75TEiI_M0DFYT{rV^)$wbRs&Vl5E5$4bF$nN!|6-)4P&Ws-6pz=G~<`IjYpO=!? z8FCrXeb$GGd%O*69mvSng;XB?D(Va8#O9K1=xsoKI2!5y7EAsA6pM|Z>GLL}@<%Gq z$N8s>_*TyQnG+v!PY7OXuT)_8Q<;beQ-1YfwB`!)hgonVxKB)+1YN47k58Uvy1T~u zGetilFz*H0Z*OueLfc7#0-;$ShQBzvXGA#JyD_sTSh9*gw(BZ;Uh(BdxLxv;4U3S71Q>vRO*GJ2|l)FlALXfSYpC;tU z*BRbsnjjv{psnZ-U_Sh1ju;7oM%3VV5IuzvmV!s4V5+5oL97Iu##!Pi9i9=KD*>Pv zNka5Nv&j;roJ4!5?J7x+Y@Y1LmTG@6v$mAd??mL)=ZBHk>(0S{!Sl9qqS2b*!-Vnb zl<` zWPr59ghfWQf>$Hh1yzTNv3 zz_KbjWks}Qrj*~9e@V2gN4(+;FZB5hcxB(W$!rWvS_c`R+3TIZU9=@2nFP;CM=yR# z^A3T+{E_^Okp~NDsmYv`Hf|z0H}6)L9D{zcHl(=POxh(Z7U!gubR()$Omcu{iMAnH zO(~YwII0Ow^!!q5tg0j$Ck{C-+MRfow`UF_POj>zaq)L4kKp@8`dUqE;0$IydeZg(a zA*z2$lxqsj?`+NtNq)7RPDtD{KO(G|GlRvqzjT!}-pwvJ5NY1dg%V`_siQx!gLLp9 zTh3iH0JJmLhXu??dbT+ei%N3QU=drCgZ{J!Vnt(0=}U?Ya5Ml`OCiV-)OlN z=zeyd%c|r5EwMokRU}~N|2mll!yU#!*hxSWTIXHjU_@eoqO-UaQK!p?=|N_D8AQi6 zLTXCJeXmBs-n8U%&p{*|`1zM-;1M@<&e{j&KaHZf^X;bM7lAIfM4Ag`Oze5i3-NlZ zD5adoh8qi4nBTWGEGEQawWooxwzBHeArgt6&{ik^(E&Pbb^JZNST~V+QG$r*R>3bt zc$>uN7w^k-{`N)ULAf~+lUxq?5A$Yg_3!Kzoj|`s3 ziyCDTd`4cTp&t6Z$*Xa;YXD1uuW?{xZLZiv$N}(DL?;Od%1=vDtr1oW>6nY7vT?a5 z)SzqEezC)a0S#b*k3KUGpC3+nu6P>8WA4%9E1dVUX72h&!4jcs#1gMA(Wxz3;M2r~ zV@n1Q+mBjYs#%NcDFYXV1UES?swdv`6u3y->H^(sO6H80@_c~*OU`V>(?4%OE#-ix zwQ-xFskZN!OdH|g|Fnr&DnEHJ&Pp5p26GVvpr``%Hzl?ll zPix&=+CTmok+d6Lrr><}B~yQ|Re&49(kukzT$3UPTd|w^@8G-(wI@kvhP=s8rG**y zD6RuO^P&9c8>h%w=KAdhQeX@Bw}AjN1vAL+6=t*x2~1$^Z^8q#yai!FA>jus4*CzN zF)4hqC!i*3o=})^L$CIXc^oah0-y->`J*+53`3IA#G-L#Q+}NrXuUexDkiEC>Y>mJ z6D;~Hr0?9)!(=wDWEN<=% zSr^SogqR*S0c<%{n>~8e;Pu||p2kSO>xUCelQpeNj2m`@AHrv{u(F|Q(E*riuKt?* z@zoaNbnh|b+Zx|hVw=Ao;~%#EZEA;cJe9Xcq!OWA_5UiT|Ee%$R3w3s|MP@dO1qj7 z_~{2(4kRAbJnU}z z6uNmBAe1mLKF{(iOE(!=-F!kIF>OA30|Q%ZHcSrj&C=k?jY==I ze-XuR;O1uxVk6bYTAr1wW!yH1#;kzU=XMtwm8z5AIv~UU^a6xHNpv(Q6Md5++l2M` zv_^-WEH1@LC|oA610nvx&{E}5z*3c#`Gg3+EcgP3*>#O+{S9120vH z66Y|{{9cQ)MJCS(aY!n-bYM)4Z4R*zYF)mTWq9gfa)`}Vu?cO5G9wBq|6F(gR>;gm zmwn@AmXaINPwT+qq{PSe8tuLY>UkWepf_#JyXjUP+i)*QctNM(&58iKRxb;pl&Y9_@kXiXWvE?^FsM`DGJDd0i~NA z)uHItA>r}t9Ul;>(TtDqmW+T&!vQzVIZ`XS?bQPom>JtPG&C&)vYMQ;2ldSWXl60^ z|EhGxs6YwdOnPN1)DUMf$zh16Wp3QtMS2D4vvRB<0WDY!1SM}XbfgN!^p{dLC4^2@ z#E(+r{FM2nJ@h>u@GO_q;bVnq1Dj%$Rj8m}~l!imCqe1ZR`12rI8j@JeY0(KPe%&){;s z*VXdnl(T5YRx5&nH5!fd=q3yy(?$qb#&gRc8K}Dff*|KCc+`Cb(K#%77p^0;`MTW0 zCxs%>%dbEm8=!EH-A_Mqh3qyNt(5M__j(^TTk0kn;) zv5c>vi=KfHt?T2)Kabv81>PeNwu^zHZcSe|hz488+c(cCstG+isR~UN4cpsO>X@5> z))2TfD>(8$SHznCbw%u(yh_6Q%y%>`6Bqw3nt{)dQyIjEh}f+_RB@W=Vi!Y~>6}UU zPym%(rQnZzoYXnhZUxC~w|wAt!QkRzehQ+LLI92iF%}{;y4)B6P{OT%Vb+Og#Sm)G zUA>3~q#33`O^|$01uh3A#yHpg+jEVTI*x<3oayvTO<=hm4b=mRD9h?5t-N3)?BKDRAaizy32j+=;IXd1clZ{t3kn~PX{ZBh+DhN2=ZID3_{Wj8(h`OWF@3TD=#%1 zz_7d>I3R`90-hTvNA4-M&sj4#%CQt!M+2QyjoeACqC)8)Im^Mf6`YIBOEPpdX>?v! zq?o+g5@sTB@JBzDUF=Q-Go*`Nh8ln4zX;ke7VL&@vF+}4u3S?~RdeW3!+@Bm?sPQ6XQYPqGF6e76DVs%MkhyOZoo7v_$?5K+5?wKPBdgL%3;XU zvXhgYMNlme7RB!;kkIcveqkIV>q`b+My-&PE|3p00m%ibim~2B%G(5eN$`Yc8DrP} zLLL(Slfc+?B|IU4-oKqiXlM$DD=6;8PuipgOY7tI{S7Rwjxnn`%KEF+pkn^K-CdwT zmGRj7+pxXaTckWpsFRLD;9pSJ+;A6Kg{;qd+`zen6y(?VgCDkl29LES zo7%2ZoJNXE=1VMyvKPd_rixPka*V=lWfs;VWs(oDgLcD;btZo;Fz7T4#up^!2iR{J0uRkGJ#+E4PTD*NrP=l=qXoR zR`NN-=$YBc*I(6JtYY}e?!h7^U+;6taOUvB0s@n< zn{5BC77EbkAtgZKZ}o^+;#u-fLKO=%;3J@SGdrB}iDZiWxfm%jmY<$*PZ+kf3jG?V zQ9AD$hubyAgf>ZOpn+nJDc{LJ93aF5c$*!q50c0(#Y*X$o@c7VmH8=eD7?iD`q{b<3##ru*)=iII;+Lly+mX zx|dJtz?hd6Oy?pY%$27VC6Ed;_Cqmayi_EaBF|tJn+FYLS+7zy+qjyqjOMo1vlcz9 z)@omOP1O{s>ZG)fr+_TPJV&wwa57Oxw_V4oF0J1(!fq67I4X;L3Hnv&!2Y&ca`aH3 z;Z)bltnxlv#t&`2S67Zt5vuQ#aIeGEg)<+B`Ej^hvIB_ zge!LQV34Wn9t1;ehIewhw^nzL4=`E85erAgWHI!IXF?#?H>mnfrI9WwSHU(v>@b&O{o;O=Bgge>i95nD@$ zmXPwIai7;ctANGx93guTLzbfM@QulWb{|FHFs?UhB_+BO{9so1XA zwr!_kt76+WE4J;-7!}*LHDl|k<6ZaKdw+QU!|1(_c3x=63&ZQYx6YGeq?dM6N=BdK zaIm!%PQ;b(u{=A8lGM_ad5pM8Cs1^{gNvYE#{)?=+V{C#0H~eSwh?Rh3Vr>#bnn%o z!TGO47$fEw?CNb@?lfo!0T(Nb9Q5e$US2=1n5*!#>XJW*Ll61MN1RJklb^wni0{_{)6tRO80@?WsmBjkS=F1uAy zvtJ!m0_UnFLSxD5$m;_+tAVVt2!i{dA~c|a;;;6X5*uQ-$2*o~BlFz-itJtJ0mKE$ zH64kBeZnO0$~;qc-YTD!8naW>@iqqlJ~;uvCVOv7Bz?s8NcyN9sRMHDc@idv>v!`Nm?*MPqZx-xn@UmgBzZ>_E4B+ zH8}7@R@ZEHeJ0k{l_bjlFUYTed+-4oNXi{g1~}FN`CH9yzQ#_Z%dz__95?v9xS&a; zrqIG!TFZC`-x#CuQPp%3!RD9)nF<&ar zH#W!GwB`%Di$zrQ0QxT~jagk1MK^#SOU_D(J~zotz^34JJ>Jb+=LlW9@>1FT4Tg5-jiPV{2r{S9I1dv?>i}iij7`1p^mW0Afhc_J zQeQy|MYLFvT~O`6H?~HizbnqdZE$f{5I_o^{^IgtDgJgr85UD8&OMV3%TGfDg>kd7 zu=MMoP%ugRv_5LmxB*;rJEr6nnjY3%Xb8_qI3o9PT10ki(IWytxGk~C30HxGWuOkM z&>A1Ike@4s1`;^z(29KeqyP?LpPn`$`@#wSklnrd8zF7UY}_q*)6%Icurxrk%)O5D zbA{@SBLC+A3Ov;ST1Vt5e#=sQ@%Mw49`M}aEpus#sYW34^xjgs*ogdhGEEYUFpl6revMG+A% zEj3kYttg^=|M+yTvI9c;rKt>^nYigXKL_uF+vOA6yCPXPgEZptCVW1%3&!&QAB8|A z8>Wte$v64W0JVSxbPR+zOfAqKn}t5OP0|fWg-J*?q;&TW#3*4Yl&UiAj(P-ES9Tq1 zqCT{5idus08rC_4V>C&n@PX?A1pY37`Vpu{Xs+G}CzsJ+ErJyam*$IwI5#6~)6Ukq z2uX}FFiFkGTi?}4$Z9u!tpW>S8eIA@MgO+KZGk7OgX~IpsT9HBY7xr11Ih*=*yprn z8N~xwLnR7N=P}aoX#&>hZ+K=Gm6jE4ZkuzwV37J?91w0P9~8{|jfBJjux~cx!Okl1 zZlmG_SG+z2v`DRlvOEKs)sZQ&PjXbwv8g@vz_fd{OuhK-_Zwvjn#+*lqL-3hx@7Iz z%~V{Y9XetH&3T0Y$C8nL5ENCKq~UrDyUg>_%)C3xBpfp`8v6>fGPWO=e1>amgH<-c z4(usxrb=3#76?ewT59@$v1zF4Y(%^D@ts;XDod;Oh^HS~ue{4LltQZ03e+nCk}Y1N zLGJd^b{?U_B`04oyn_ft#ak+<#1B&%v9mZ$h018(q0$@>xa?#C{1J z1_P6Ms;~VE(S!(Dbs=(AF{Bl!Z*iCoSqrODyV6kr-8%_+*YdAs#}JZ?Qj=33fF zOK&qzxE+=JiQ(XBwH0X@^WAR|OgSwqba4D^vtnSl)V0rASE{i#y5OA7o3(peGztOc zTHN_I^$!GTQhv~pr_&_J=?lZ~t}J<|0=Q0@!&sY@@6Ij4YR}0yxnJi|PkwZE+MSBh z-S6X3$BhYNW0ImPBOf?jjP9{LEI$*2c?U9^d0K zy>H8Jh+1q}(lA)u=|$KX7V!Ui^)Q@c@L< zDXq#JhT0NO8f!;==CN%Z_ZYni!bb`B^p&_;|D|KRot2cq9VLtHec5XHM~bV0X``=n9$$5^bt-re;E!|JNTRADji1g-~4lexM@{ zpXB7cXsN;+2nc(28c7D((p5HTppzG~71lYvOLoxsCmOuyy0ZEjjskRt}BFI?4;sKUR$dq*L_02b8;*D|jnYrD7 z+z1N*rs2RA;2*q0FaDfB2dpGQPnjxq@cvXwgcESvrUR=-0Qod|0CM$5YN+~_245cM z|NVXG>@@sGZC-~ZU1(sH1}RL;{>yi#yV3Y|7g%lb#mt=zPiQ}Llj_qE21N{PWnZh6L^0ayG z5DPCbX>kANlRS^vDQ&_po+U0l%cWwW0Vx`)G-`kq5>h`1Gl?^v$7TknCafgnwfRwh zl@j+u;xLg*EZmY9zyZIjshW_UPUBrS0iBaCLYRieR-ETK#0Sj**C%YHjc16_oYSh* zU|uDK(Pm5nLDdb;EzR~Xx`EbR1ZEn6eU6Wq@dx2+Yf}fH5P$Md5-CVNsF@qW26{3y z{M1-2>I1@A6)JVa-Z+y{+#CuHJfTz3o;9AQL#)uCv6MhbOlquGY1unz%d(%NbA1r1 z-Lfre+!H}UkrU5Kq1o`82SueFs01>^Y*E$-akz3ze3}=lXlHyU{9?U*J~Sjy05Ch) z5p;kSTU~KmOPZH3UZ5<1n9_C4vX;Q&thxn6V~J=#w>#Q291UE{YMwaE5CE@Bj|G#1VMExr9tm+IbnWsr>@8G9ol)PE`C?D(|H?fUqrTYH|IYVb57z6gf*Cz{;| z0k@gFD569J|At1ssKUeLT$pVuk1QQi)_K?o!0hjycD-`@?!UXd_HBG55*XS~DEb)c z^?j|ei>Hw&J#2kgPFx4(TW5U=?bdz{&)uZYam&X(Ln5@tHfs**8vp=J z&YYf}J-0*S`AU3x{!cT{l;3N+ik-D#)Gi(=JMLKO|6%B;2WsLFv;Uc^hOOWWLYBXF zLHcPO;X5sJ}*#8Qcw3X}^fv&>U$UDq2cmU`57W!9gb#2c%n2oS`)>-xq6 zL6UZ{Ex{w>wz@+_-L0ZU2CV4ArYB3gy{my`T@70ez0jI;w)Y*IhJh8(vc8zn=%ghy zQYSD|3_22%T2BtrvkL%T=PvQ9S(O91ksjXRDAT@3^S)`iWqP$y|3m?BM>}2`{60>7 z;Yq3JcleJsp>(v7YINK&QAx6cTuiy^hS|;JlCnHMEZ==uTW$lpXcBlE5ZP8}>V&^W z+>$(vcHHpJCQlB?yistmD`Kqla4FoYsW*|5Arq{)H;swWG?i(TciY^aigigYzIB!# za!&M1Gf&wbEDvMl>nb+Zb#n@9pKI}g@Y!o|K7lIkMj?SnHrHgRIs(tJCrOc)!&Q6& z96Auwv46Te84$l+{Zg`R)IO&0A5S2TOMfkHyj+melh-IH^n&Q;2o8VHfYPyEjC-v( zB~{&9vA>oa*5C#+RhD2-^J^a!Vm0wp2pr2|9zF!wm-FFnK`o4z=~t)g;mHL46daHZ z=OBn{B))tem;p1#?JCnvPdb^O?^VT+m-WEhN*e<=bur9!IZKloTo^tjdvxHJKcv2i z|J$*?Hx2a%SqR%`Kj(U!2fWvoW2kv!Y$xDNl1XO2?2s+^UoQv#_7vAZA^sVUE5-%!Wr(pnISD<9X|f zm7*@Ffz3EcHk8L1%#1Zsg`t<9uG=2tTtVx)nP?z%*`faJ>nCGAwj5tepZDLF688ET zYsGKjM7ER`xu2Q7vS}rbq4eR**UHxAjZfj>TzBbSZ!(G;Y<=|qcC?Il#Ssz!KVg?y zA-KNwmHGkDW{?vOIpilR0zNKJ-_91FpG62Zp36`10@5>&x$j%7M5lu#`V+IEuv`KU zKplhaB3gbN4_p$L#N(48``Wx=U{1rq(z{4o`P9_e>D)Np!rsYfL9n?@lG;Vx*HBTn zeS6!rChc>h=FD&L|CzS_uQJ@9v=Qaw9Y59viapX;Vw ztlXJL#5>P*F{Nv7ZuwJgMJUuYz*51noAL7w#SqS}Q6l(kAU0i|zvEM7+Dz2QDM%u6 zXANn?a<@C+%ZEuAA8G`l9J5eht#g1>+ZVq^(Wl|cOH-`$K}^aQgcRl;M{dJi?eiSU&xya5r|03nrubx7>c%?NYM;+3du|Pv}DJcKjL2MI^_Qd7Bw&efjpZ%o^#`nIS1oDVwhS*G6mM z`AzRu6u-|B;5%}HgK;?GQwDW4%wDQB`9=yp8l#o`8iC|8X~F(aEMoC@_?lKHe@FV{ zf=|;mcszxjBa$#2epNT$zlIG7XT`8Z7R0c>{)yE?*2GBLT!mXJ;(P8 zaJ(zYs-Cyv>+zg*MSs1U3EL!`kZx-VCusLV)aL`EJJ`9-#hl(>n)2nw+TiRWU1QZ6 zRwa_Bf73LzjHvjR`%L#T_s_4_k(|z^W1{%`!ml!-Shu&8ZQWOFMh+PQU6OkS(vnAi z^f3b&Kdhi(&HgWylGsoF!L843vX*wVtR{_5y42sEyA$63pG>lyg`O z{Nc-i_Iw70Ojvq+Pa6=n^~*%eJQ=bvD_!&NG1#&b}%ayPdd^ngWrm@YD|0^xe5;3-XJzbw24#U*+ zVl8Qy{``~Y%b7k25Y%BiJGM9$OjkV_2e=?Y14>hv{R>CG_^KGy5*IGdMtCL$H3Ri| z6pKqf;etRD%%|m<7KTmNra~~oD;@mm;$0g{Xa+XxU|tZ{+;&`3=aY z7*1r^ddG2NAdEM`ku-I~Q^MkS0PPltK{e><6#uvmWsFU~freJ+vfe6_n0L~UIe~gY z2y|-mdo_3%pQC^ABap2lv=@9)qb9OI!A-IvEf5w{*`_p&%&g&#E{ic*V;aIj8?EZ6 zMIRQbjI7-*ta>E^y~Q9Lr5hc|%6W))nAXMV^5{EJ6CxYgSBD*L9^M&Zr)Zyd0~^@> zs|;i+!c@y46~`De4x%-Ti`|K_+4PXOk&c~GLD#rq7zfRzlUEEMf6DXLF>DigGMtvF zd2w&gY^v$Z-@@jMI%F|#GBROqNB0_W^J&e12d#`z3qLuE23x}UTukWSLv-8uDew7z zCl`J$d<407dn4#(O_cELw=WkxTbU6tHspLRR+qNVCYBrIjREXPdR|tb<|~tu5OL@u zvjB4OLHKQ+(t$?PYWK&D*l+87IT!oZ%kpA1$aEX8m+SK#?juYBZ#H;N3PzRbaa(vy_dTzIsugiMd+35wcV%M@3zpuP4Gz2+)IsSdD zJGO^+x;OHiNn(AV4KJpt{yDH~jLH2Y_we5bR5pwVlKw4k!mVkbxB568@28*ki;UuB zf?Vw{L*cS*%yO0MmH%ZI75|4_U@qtwieD)`K+iTkO+NTwC0_WQtU@}iC*9zI_09qwH9m@gMSSg5>dxb3btS0^)?Uke2U*$lYggan zX{rzLn&E}32>DW{vQ27)vsQV$48z30Jl8{p6V)WD6`bXJTFh1W1B;8r#Yo0)E!6PG zgV0a0*zn!qL}luC)R_uI0x~ocjZF=ZChUSFJ?Ud5jOkS~F~0@b{TlBtSr0fIoTSU7 zCdsyvOB0$Jn90O3SnEkqq4-rlPLMUnvy!kLcLWsJ+`?_v`+U`wzS=v9rM;BKAJD)0 zAByW3tA;CAUkg3e1LXBpYPv#nUrqkx6eu>M1w)1v_vZ|9XO#3H!sxX~HiNQh*Fl7j z=`PJ5^^K^*Gjrx}zshG(cP5u-h7Na_MHeXQOSjk`)^PKD8A?1=ydZH>Ijje;5A6RH zIXSLb537A7PD$bmQJ#w3?atDsemL=Q3+GKw(C;ZcR5CKVW9kK}rUK?UT#5H4262tt zM|ejU9 zROChF(zqaQ5g>&3pq-agyas`(vsk&1W6| z{MPe|L_obr-@^#LR2v}<48^Q1wpOVmysGl(I{Xc7d235NV_F|Nn{y$3Ys zn!1_eMlE5USa{ezXW<1jIYI1E;kO(d&fy~7tep39mmEo}r(I&%!@zChWVuh8{O= z?k{K+%aX7CGJUA7kp!HJUX8hR2z7P3{LAjM1ix;!zu(pvEB<@V&LaPp5n_IdnUJu2 ztnh<1>yxr!?hZ_d(v?3Zn~gS&{`nAR%J_juRwRsQ(mr9EW(Odxf5tB_i zWN^f=Y-%CyB*e8eNQdTum#B+LtlnW5VG;~hc7(`9VYOCVh?nAMO~NHSpxm|{1qDtb zj%9-;%7`~AU9f>u!&suZK-dZUFVe!^{HUhTLb)Vf;xp zv}guRUTm|6o)lWikXr;~ZGTqwBaCxa!+zQa&MysQy53L~L}#TXY&P#QM6;#qEB@{# z2&c6C<8f~+i=fx!D+7PW(!39Sx{kd%XlFwqS-64S?VArjym_83+9sgwPmZpRp|-IX zCx_h921?SIdV{Xuc;m62Kk-z|YoRc1;o18GsBf*nR{9jrc&oCr4qt_+9T+}W3gk=Q(+JBx8h|x&J)SNzhL!;mSH& zr%3H&cCpxz=^yC`_?nYAMo9K``;tdjgFs%8@T~bDQ2o{rxjz2cxNIwL_bZ05$6qe( zf){XJ)*)+bDg|h`U`Mq;9E+UbpS(?Agi|@2+H6q3_h7yTBSDx_zq`>rji3~?Y`vOp z=3e3FHflD3x6j2(;8~}DK3UP!t2giI?CU0;HPrG5l#gzR&m+gZDsHHXbQfHy>4t>J zVV;9jYzhyfI&Mj<()&YjS|eC91@GISQ0PJo)b(@^x>9s~GydegAUdk+st3CD&idv@ zXKsDZ1;cc}ViA#BhAL{qrFfg*BD6IbHmp_oe(wL<*<%QH=S=1s_!f62aS|6*H8|FN zwl%kVPx}e%_o(z!7mD8YyY#a^xcBe89|Xqwx-e=BfBX8(R!~j5pIGyb*e6U;#cxgb zzPcR53!KTx;8zT4KgM6{t!if(tasX*FP+Tn2=IOE-5zr$LF6TpfM?vgaNzqtWGy}C z*5GR|3uqfD4i#%slPt#2)5!aA-tKZ=IhUqjv&)`oT>(1e zaC*n=O6TgL=0|V!iY+G%xkjb}g5^=)#{nIJxO=n)YK+=9TjAzz4wN3~;QrhcQneCu z*;}P|**TTve;-4LpG2U+31eGeEbQlU!McQLfBJ zkAyZaGmlbfThh?4z-uUbb&MM_qo^;VrYj`upz=CKKL#S%O#q7p>kgtqi~Y8Q6v2Jv zO6P>CR~NICk4f|@P3mdVF}apJkQQ4}uZ|1Kb5ec4KfofgTW#}kw3>_}NCny-pdfv6 z7N6HE(pc#}nOB`pV7KAFw32q1IU~3HTCAgR8tqa5fTuf)J5tF7hmRh179IBb+$%a= zoBW^w&6XHRFf4PlbDJ;r8y#R;BU-`HUq=YI)e?bb1I4L9<9=YymjKq7=MGny0J z+eyG}kW0m#rWmEJ5G4>O@bIUq7B%<4btm*YGGp1hV!?HOy+jW-UF2k&Y%YdS3LST< zE_5@J_?llyC%y#}Hl7RhY;%3ff%2^c+J6av> zRK>v$o2K*K8b1WNqFP)4#^^uQXV`P8H ztFJ{spK})#97}{+p%w4Nqfu_Jeq5_v*Xvl!=L{9a!sV=eY<*o)h13B2V(prKB;nXL zCJT(e;MgQeL`TIrK4lUYb%Ou8KAu!gpK9sB#Vzh8h&?}8CU;qY``1YIVmJFlC6_9< z?dk0tX3v9it{Kjy!S@@Ek4|%9N5@x^DE%#e9xtP7v1rl9hEpONc1KX>`&PKkt|VQ+Pv<*%L-XqyD^Bxm!A`}$ z<@t$7kbqAvS9Zb0+t-XQM_0G!z2!^s+Wh2uZfZ(;tD#lxzs?I)jQ=$V(rp%7hvW%q z5z-C)-EDXJ*Iql?1cPqcUb4Fegg!He*)xnAT+_gzYL5f zT(h(~2PrK=L#Ybk9zM#192J|<9{F?_6CW;?SSvP8iy9FjWE%H!-6`m_}m8Ji%(?kC26gw?(XcQHDvTXE~_LnW6!`DkIQqI#1fB z{3Sa3Cpl>8mXnY3<%|tZsi(+&1QUEMAYPQ{SN>YGMCiwQTJA#=1AeY?RbS7qRy;(; z<*EL(N=jTRnLUSvVpq&~MQJroHfa=q4IB{TkR=h<6W@WZvyQ1jUWWoR>nQ=fjU-4{ zi3aSBGxF|uu2{hQC+uLZik+bl1fWn(Lgs6_-j6DP+AIm zn{#SVo=*m-EQ@VD2&gCSn}~jgvb5bz1^o50ps3l`iN@*7nvDrrG1Vah9-_*(VC@x7 zAimi@#PGE!m#%#ovr5_!v}QW`IYG&D#*+j3nu1$<<~4cmkc>HyBm>}}aPf_%UO93L zKY;f=;ZZ*xVClJpnyKqbHBP(DiEjQ{)>gw1XBik*-oafG^2bf9#EOl&($ia@I=Jpf z4rZ`c_MIC#_H-)EAhQ|TVV8%)Z@UCZh|GXM0(rKf!JU&>LXT-}_*x!LG+jq2n6$!8 z57ifS>$;lW<)7_$F72~7yuO}^9;1>a@U4>gyi4yn8T>znQs2X9`oMT3$Mg31LZJRF z{hcMZoq63>i}iEzc_P|5+o^MY%vf0j5N)#0#OQz6{98!iyyl+|9o=1XQKta+{xWvJ zIOTV@{z30s;60J!sZ)y|S7!D|tK{)tJ}-Fme-tt1lF!{zWsRt1cB-|^`;X`P<{d$< zJy?*4Jyeja5<$p6EzY3CrMhl2d-_%nNwxSOYgY7);~lZvN>a4d$bY7XYTsP~?doM9 zhE_Q?sp623rJ7;C_WNT|K_N4oh<&tqx|0A@6etwV99T2Ph6|DuJJVZ#(25*i%&zwG z#ZzlVi4a1wdJ0-%Ok>jfX^dsOL)$^~@#80RWHtCzy&0a0aX{oj^rNd-j9SE}=;!FX z%{Cw;l%r)LFz}lc(i)qh>f0@>Go{c`N}%BrTc*1!alwE`G62*{Bxw|#SCVs-R!pa< zMoSj6*27UyXou8M$5;!qpo!2i1(}c}gwq`Jhsf-1w|)6+rsl`-BWm?{HbNg>MW?lR z4Q~NFv8g5*Thi4>4o>y&va2F5VW-MOFkD}YZ`)d zWp_9So8e&1bv83>dh3N&P<&{|e)Wl7zYCjG#o|z3?D1U4$Xi!$z)~l#NAkbL=vT2n z;0~jP8UdR6hO^1aWy0`Ai-NWJgtjO6M>xlIT7H(LSO;a}6wl&E|8*1~Q+UMq*zI9> zrmj7fj*RCHLO4I7PqCJUB!XUEP&_W6P=OCC?#3d*$xh{)^QGaln^w zSQl^CmF235*fet|F>uKtv_cW2ue^)Nke}Cd>!HclYYV@uhYb%nXqHRYpmVtecss}4 zM!mD(B@o+AZ}1?aoClEuSKk?TojIW*7H+Y^b4S(kAfh+g1ADt1Jpw;tO0Y>%zMy~j zlms+OA1c#m_mPZ+yWvjn1g`R)TCEN5q=VmPSuJfB{ulv8w8NLsc^qV_2-x@c3 zIpw-)ICo}mc^~a5P6DgfPcd|^h~&pHFSNK3)se=SgrLMb32V7tdZ)!Qu8Hl{eR zqfynRA1~5c8<4{cF1Vd&8#RR9>NO)tUHQqlM4pgnsWA)Y4_y%GtnAd4c%18_I1F0` z3XhQz&^KtE$uv~&_XF_p5=sg$fmVUbI3-QjiUB?(TOeOUZiur_8>}Okn2~O>1N|;$ z{{#;GoEaGC9Il`59V~d?1JgooiV71T@a zSL0oPvn2J5oP3&qj%|-ZhS}y#%<=x|$!3|N!6#L5c z!OpD$=Xd&dNzeUi_stiXPhpYYiOtsS4%huxMvDl`uNxtK?9sm$=w>~Otb>0C$hJqF zI6G&v$j?fPNBq?Brz`y%{f{^q45XketcdlD3Swy9jwv`(Ld|bq z6-=S~mv6-#^(*E{rX zU+hB(9U>4oX(K#O@5n%k7qX5qKc9htyd30U1U!n$98N3vb%bl>aJ8iuY^wE62Zl#b zKjI#+!tT1}>F79nNJFXGQBdM30w;gx4lHN_<@nWQ0IN@QKMBj|Kb(d!&{(Hz~cycH1xIHw)G+x@C0Uoues2SBP+bj^~__sG!V6z|BMBH zy&c9Dc$v^hsKfQo zE2`_Az-+nV>@bL2&7Qw$Gi_b(D~2^?k+8kr_YS%_s{DSb>r6JahSV{dFwZv`4Ny2f z0>UN(Cl^e;Br?@z`aB;MRuE$r+sLO_bXIM?FF)uUs@d|EpT^MSIqK;OhAASVGpB7P zS7Q(J_+Z>tSaK$u`@vP#O+brVvS1#<1r^5R$WB156S{e6n0DNBO#my>$>RfU0cd`9 z+9nl)3aX~_+XnkloHA3iqMozky}6k(EMP+ZDwf1^H_J`kXlXgkZ$~5|_fb%u$_Lp- zN9?-y$vCD%36l1vQx|5xG>%=cMb59X?ZeekIwiEY6FsJ3xU?T4+Jsn78xM!aLkA!m}g{SdA<; z;2u~a{Ak)Bj-e=KJxiypk+9?mt-)1#NQwZ=w%yjQ@m>|8j}nV)+Nm?$r;-c!l!s zWgA8upwP@?bwud>s~*dXHX2wEp`%Q}^dzoVz6ivPOk^iR2oUHCvY$z$Wa6laRJuX( zYKQJiY{CCi-Lq-(4JyXeg-7s*MfRJmL3ri`KLC5#iif7kwSv*sMn5`W`WhcgWTY$= zCVeiLv?No{yQei*#Lslv6%doVLGLOF{yvDf3!>^KyNCw{WejMu!^e04AmtuOLE3in zp}(+f7E!A#{6Zw!2;DP&HBTP4{m(xORu{q3qZmg&RF zNCIVpk4i;@k7FX1r5b+_CLIFNe%4WGg0~Mu6qJ{ilrAOZ3Zo@QqSq^OG7Hzn{K5KV z4(Sq~&GUy^Qv=3B{QbfCAWuhDq^f(QZJrbsNuupH=HdFG=0pU;}u zN+7e}U7|soVv!?ZSi3fqA?wJE_rtRt^v>qJw)DAZ^5T-qh1O+5V8Tqk3ugX3B)pJ* zDv<&O)aGpv`QCT{eMM!z2`4>IgVX)Iz|Dfch4%~;we;1?v6S67;ydY^!8)Sbo0jc~ z5smGlz!@BMx{xtvEt1tx14;ItKeHZxV3}G<50590(fZ}RWjN?Qrkz+ZTiSk;2xTW{ zuyfKCxFAh@#M)J71IR8>rpWqw_z95R*r()xU07H9`1_g6hjB8u61aS5+t9q z9PCz0XbquVaGp!=z*~E{Wb$`(dCAl3n%f#Sjzscflld2gg2@joi=V?B{#@$`wxs}6 z@1_do4BB#%IeRjBs^tOPA81`(XM-Q-c0(=PYO{BA)0UpM-(IGRy7j4k84wh|?)C@2 zaX(u%S~JAQ5mwwoPki`49;^S)Ipasg_+Q5q<)8i^A}t;`w26^bq>k;&Bj@U=A0|XO zLVGDAqg)R|wH>qK0WI~wWrRrbF&*XQ=Y9yrv6iNQJKd{`d%gETGHSI^&P`fR6Rvq9 zu!W!L<~s=a$lizV2#ZiJQaigqk3JQLj(fLSAx@3*FOpqCLk6uiI_8;&8y?FMT|k+s z8h;gm>~};3fcL(S0~z8bAXJyaT@eMfClh@lg}d`yqitbJ!vRf`uD&k zSb%-Q^+zjvWqYz7zcw0KE0-6j1v>waCxkz+tIwNWEp%en40J6f?F;!oDQQHh%%A&$eK=QP=tX|Fw(ngMY{6mcp?&LAbp z9E%Fs4ERRXwOE##aC%*MK9y@vVzra_93*U3-G1C$-cl5tGgG3D;w70*(QoNYjtS)N z5Wy)7YQ+E~uZ`V@{SPfjT|9`1z3%c))rarjeuteU8y{_MQ?qBuegqw6zfc(pBa@om z#Y%ro>cH+l=xB}+k?XtLM$G6?Wj=J2zzj>8z*6MNfw-V?&nL@ksu&ksk)knxRls

`Ff*gAQY^`30aetd>j@G^6}BV;`ECIc4(^L9{>R9 zhJ!xAoQ~|`zHBwD?VY4c)h&`IX^Y-D_!?S?jPf_1U}|3W1&r=`g@aw_=@z>+rkjBb z!*m>qmVBx_Xi}%WjbvUiD$81#su;BxJeb9_xOsA%#}S`c&1hu0X-kzJ4u@+$12lEdWrI(ya!BW3c!&EGidwmJm;o{oW$G(lEL*=t&!PxBcQym+0^$=AJ~ux!Sw z7u%lAf|u^*(Z&aNRf2hZFCxBWs?*=oE%EvuEdLYg`oCzAepOu~r+OwVa8sz4dw@qL z9{%|Y;^Gdp$n<#Bdx_Tnl1bdQ80ONCC%vie;QmWBow^dA z1~wV7WIV^z&b3(^%_6s0Vs|tPB4%aM?r^)tfUge38X5SfNNWtHP%~v}_Lbz$8wt5G zKF*5cjv}d2EzPf5pAa(CYiWnYj9sPM>6-8}q{#_Th9G_rykOxwyEAA#?aep5ha5S% zDtL<5NsL&R#g2^k^pOSF|3)q2aT=45CI-pj*9b7CWpiE)p+jnK#zmNG)F6$vi?n{N zV0Hvj*l9E*EEv7ApsPUMvC+Qq?=CjfdsuY;&}1*p!f6vI?*as(chl@-`f3KsW97b2 zUX&U!p)1kbK?VY#dJc%7*>q16uWa5Lyuq{7en9+uKRn%%7z})%_`9B+tgZHb%!67E28<7J5Ba!eRAuT$T8gCrx_Gjtd*9Pg5_lyvJ;&= z&al3fuza2fW4MWEpbqyp)ridGeM~x6yWa-;V5c=>3S=7CP)3b8w!x*}O>!p8$YV;g z)oMQ_dNw=FYED%S6yvEn=oaSMeMh3OZ?CYmOGazBqNM6@P}+ayH`rz>?g<#1E=SpC zx*(`2<;|PsKW$ABj$Wi-r~gr(4^l$E=5c{N zJM;;R7Wzx0d{s7V_8wG~B`0biOy!o>%0oPutSnJrG>-NP>!!wtzMJCPmWGIPdGGLl z75^e8E`k_t(T5rrYc(qoq?Mzq5&mFMz6z_fSYjZRJUq$}up2pMoOW#x*$pmHYFj$? zPtJEq?7d2CN0X&Ic7X4jiiySFn902w00kyzRQlv}%bEC(1&E;6h%66w5&njr9n3t( zS)L~c5Rq)fq;zBqATiVkh;W*+K?hV3XwIs2FU{Hd_vf~H^TCMap(iox(2j=bq5e_I zOfwOUZ#`);X{01Vn{UuDJ}VbAYg(zm`1gbWGSxI(GD9(3nUHx+j)D-2ax4dHem}$K zt@}|sEVK}Y-%;E-IZ?yrBAZslu5dqPAe+u({+9(riA6p`Dv+N?-V);4W-5DHInV8< zUP*l@V&EX$rvv)o>}A;V*HrCYF4cQ<^!hI3T%BWul-g>uU%~A^WKq}OWp?!DV*ZL#lmXR~12B5q~VE-JaQ zM;%mX$({2R$$9~sTMCx=6W;HGZrR@M$Fr7}@F{c1i>*MByt1W>-j`bgz3=hwwoRHE zJ))-oK0)tSpWdwRk0M^8Z9fQXFBU!AB2J0mtwGog{+*8A&K7}>`@@!A<1e~@jhd?e z6~Y$&j}S&r$mnSD{!=tq;Ucuy7F>t>VL^+`0KN}`7vNbM9(5c)s~&8ake))AD#ZqJ z{I3;*h`Fqt9XfZuo=K9;O{0he${BiBGJePz9Nc5X{CHP|7M7+IbeV5sgcd)=GQIz_ z3=@aUkj&kCc~rqu)RW0lfP85D^V;<5V1z}52h2D6cAxP~9l^X&k zCa)N$I^QKww}IA1{MW$=1$#j4=3HMS-!Jkmq+sx$h~q65t*=M`;vmFha6~ zbe<8qO1n>JZHX7bV5lTs*J#F=WucgGx+JtoCNx(^5!h%Iix_J^O?U#w)BC@9!0Ga+ zRt?$6sg(#7is#ieid1Wc?Oz6%G`uwoX{q~Y2ez*j-#5Vnv(D=v(J(vq|v{ z+CF}!xR01`jzI!3HDbzg+-Hvk!gPYHW?x$?iP7Ng@@p=mSsg8%#`^wFFk*$d zU*rmTBAu$o5PE6s)#;ntYkG29eId;@{ku-3*KAEmZ>7r*`mE!m@vBUNkojq`F_6X2 z{QDnqrJ_&JQNb)OHX^yu|Ij{F{%zJ8@@5N*x|Cs(?%d37_zg4}_sOr#!yVLR5rv2h z$9NE86%?30A(5h|b^BSM9yxNPg^*0hfTv;lU{?Nzv&~3`_>=B35;yXyBh%J+8aS_L z2@jTV3fnEf^lGITfbE4)uT$ZXv}>KVYjNtGL<}DK7a8RUja6v1uY@QWNuFJbm-|kC zCg!s5bpEV9vwt6?mxDzM+_i`W2{~xC>-2(|w}jEn2QZ-lCG!3ohv}#0+u^zDKD|?( zEQsM0<8HGXXK8yxcSled_5}`4VBa~k+M673wY(#b>AdAS7F6*92wo6NZkvnY5?0W-=!5B%%JfZHwnT}~)9Q9N*NT$--=OdjKbzpsE?3AI?O~c>)HC_ABS|(U%#8lN8GO9vuig># z0$%%X>rWC+;Jxlae6g_9#V%GhZ_=L^|Ma)`dMe}H=}<@TySVI5-A)d^tZRlTLH}LUre|WpMm$&OKAcD1s|8HqVZiG0@|Fi$9Vgh$Q1PUz- z;uM>nJcUw==+tq2w1{hi>fAe!JZ>F_-e(_aY2S1u8DWaSC;+^Y`EqZ@L!AYIFEI_R zxt8Lc!(BWg(1$on%Di^){2P9%g#WW$xb3M@ELA4FpA$N#@So7}fpFQWzy)pO<(K73_A1#fd1L zH{F83*l~~q3Z%O&Rw_f>pTyYm1f@q5<~d1%kRe%`yjNpVGdCIbP|xy+gr7oyK?}ia zJ4bOfrVZF-5J{gDFxA@z2+Tesxx%$H`M!;Z%~1w?L>a%OulsRw-%MPoCxZRj#&DAamoxJscvw+0nlS z%u)l2h?;TM5(hhPiiLFGJbz#kg@=m-8T%w^yU0O;i*pfeMtN5lvl4|}-l#lNM+dL{ z@bU~4V;lp)`T*UohV%?`NXC3nc#P?yAz*3TrO5#ZFPMrKHRswiW=m`V|Mgcv zq#kT;w8Kdeut+~GaQB4Oqud^{ZS(RTp66d(3LqnE9Mha9ZjG=uznoGSiy9ri?*B`_ zlyg@geAH1${whjlI28wg-0liE7>}IihQ_7EKDDN$nZt)lid>>DT zk7K>_DiK>6SWjJn`~s_jxyIJj)hiO8XI%~ULA|1ld{to^d3c)~zbe*05dZ(N4{CVd zl6dnUs{2TTe|`K+ceo{(@2Y46ST}i1e&Dhic{Uq5gFyW1!vaxxM)yvS;R^7z6k*a8 zR7zZr>-!lLW3(@jYn|3hUjsfq_S1PkHW;TKtS^&9%*~#FHFr>Usd(G0u-gDa)*yua zXDwTV;jsGb5{a2#&vkAJZ~-TXh9lE(+0j1GS~yIY{OX^3E3I%~j)!v?PA`^+k;EPT zm}`?PUyWdZ!TqGrQhx%);s0anouVU)7B1X4>9FH;Y}>YN+qP|VY}>Ytj%_Cu+vd#} z_nz~ghx=A9^;ToAUEiAXn?f7@1}3YpL)j8id*i|sWZf-^mcCF4Cs=?xf8QFoSu!y3 z--R6#B#d&TrQ`RV_9moU-VP$tbx%Emu*Q(ejPU%p3!EZ?n#=P8%|A+^=_DKxM>?72 z?Np-M`F)mx4{!#zmu}t&LybNumyH)%O?F;Xaw%^O?!!wK#cSFDhDs6Ya!uk?lf|kc z)uC)uu6p~Deu`@}THZwgW6Y+padcc~o7?6@?Ld+MvRJ3t`n&#Qq{yfvYB^XwstxN1 zgJiotvw^piCWeOy&LdK>fL4#{wbt&;xsyK*AvImOE@x(i#bSwye+8)m>K>q+4?p8!46i^l z)GyY7!w!4kKr1*g4z^j2y%gu<2XO)bHS$k^jYQ2(QdGY=@>Rg$^N9bb!UreK8$_tJ zEsJ68B@1)WC6V5;{0&*@@@+|G#Mi?3m;4LhFOQGxr!|;Rr1_ezs_tcGQ1giW%6m_7 zlG(48#3DISc;F4;)m*B4U_X0@0YD6M3rH}4^0?iab2f?O|Kr&d&+-oR@@smu&nJZ1 zM_eye#3L9ABQP-qOzn=UY)Id=Ut+{fzQw6i;QohE6vW<4{&G(Khjt@=B<&`DAK@thKF5fwNSUy-p2EG zm;Skf`LW8K4yexg9|M~L@P8B?4fcL7@5Bj9QKk>~pl(*O@QW|rP)e+f`8dLbJI#sT~u_!xsbrTeJZ3B%4WSrwTPDD{Q%G@{X6Ong=9pQeMAx@ z7HHF9ogj_w3_Xky91E+9X8sX6{qMruPepE4`GZPf4er{17X6vfM2ZB{=ccd|bxDMj z$mpundew=#jauMFwgV~|Q$o8yAG`5z{!AFs+m-Oq6h5zX{4Ovn@^(UdhRc|E3QF(g zZcX~x4FUlit!Q<-;w@)JO#XY(qp{$aYa~vVGMwkds2LWg^hb-uhuAH<>z4HBDU>*{ za7;yY5EtQ=CVD?1`hSvLu^QTZ_^GhERJ%6W3WR_09AxRBJgZ6#;hDt$IZIqKEAr07f7khb+l^E z)rsR?P+U>&lD`oZZM=qjE_2XEW?w8 z^pspeWuR*vdTp6sMm(98eJxY{VTEP%wvSYxv=xlw0=wcSY(z}?MK-(x)!XlszFTS@ zM)P&iGzj{*``dmQ{~wcSb7$kO4(VGvZ^@gj(v?kI+KQ_FY2yx;{Vc_3R=)`#W*=$8 zzDFn-6si8KChN1&C&}IJSY5TgL{(uJoH2gYLmapP^w+1Pw2z5ByTpudSEL;COadF- z^VjshT-f=9Pjz8Y8|Dmw&#{_Lj^20T?;201<IXut;giA zt&w*Zn~4g{rw*WQwv|x2-0RQORK6F_Z?iQ+z?b`q59i9xN9F&p5z7ApW?zaWu{l9?{Nyzi`usfbf zN7Ig2Dh&ZUPg7Hp6{nCufOOpDXRaFgX|$vYolW@IB6kDu+$CYtfGD70nkvl}ST0q? z`}yCPL5_St=B=jTjdYK{`DiSMHYYRYCi@HGnX@tp90eVfIoOC?oJ<1r*ze+&oavI} zK)lLv@PbHj#Za$O^(2H#pr?Wmw9-8_Pq_PanV)ckOO_cgK)iot`9yUa-CKga&H78S z5YHQNjj*gGq4$9h0aFf5URj4Z0xjMKU*y2tp#hal-kFKrjJ9C^1@MUtB@4DUn$SRu zFCyLcxtwrBj@ajmKrBxynO0}WToDfsA@rXQz9sln6jvW@pz4xYbw5Jp1|P!tPzc(= z;$OPZ-2YwQ$gc}sJmwYNqd_Ba{wz*@OW~f<>_$f$OBJ5J`dFo`kCG=NVC2DRqHNh7 z&bTfP;@*);u$cg;u}nQ6JTPeQ0xs3eN8F7+(tZ{P)@)+2di_&^ZdNgNCFa_Amm>Q4J<%FN3zB%XaZHNS^=aha4;BTg@nQXW9wbt>-LL&6F?Ifyp|K6leYg0K$;IO<`P&oj%>Gm zcPE?$KKQ!|F2mlPJRQxuViG2A{cAx5h)wMsN*<`qE>4Z5fIO(E zO}L%GvH;L07Sh?fNG)m#@=sDiq%0f2=_FQ+nWB@7s(}UshwWu;qjHauhG%2UJ{|Im4uSGd9hnop zch%S*3gydNV0!UF?h?vmIYml-oP{d(OUziiZz%4uC@3m4@F6NVwvNFnoqRk9wShOH zuS^hUfIY{wJY}uqgPyT{x|yAb%LSyXAx?urq1Us#dAXY6Oqr=?`hHoMt$7gxG7JWS zGwTGI(fE)iKUo=3__D&vMFjHqbv1WWY9f_i@=eR*hv3lATH$1RZ(?|>K^K}QvBg}L|WOd%PR9=grKJK)5RYhND(%Dli4y$k~I?luFY-3WVaB%-lXMFugQ;g^YuSkhI`^W8-I<}gW7j3B%@*> z1=NwEYey#Q(N3X>ehfLF@>FexAt&*v{&?)J8Kp0DFaO?>Mw zbgsSyS2I0c*OTp!Khxh}c=Cs{W~YJ(j>T-xUb#JQm;cUpoFy{cI$BfByt+TDBS|)E zya*=F20Nb|GoD#Rg9@t5BKO`x`ggh>rrE@@TZm&;#oHYx2}yY`&4JOh@OhpT4tnB1&aVQ-6;s= zD4W1`7?5piFa*rOu6E+|mwI&9*EK*XN*;82W11x{sZcU6!A-F5oQcb-lM@BrWcn}k zFWwC?jwkCFt={wlkfPO5ApTByCV7u7+P-*D=4pB!qkt|@n#wf=p$N80B2&205@GfM zV&r^;y4|3LTjtSdr)WlW$T*b9wzUs!$k`~PHAbx+koiEXnX%2MGLQk2xmyj3<(rxk z!#CLQQqorQXi8Zyt$Z{*)nX??4&n3)g_#GiVc<88JQNTtx^SO5yEFofp~;xarblzP z58LvpC2InZog~#XigV++*FgerHQ$Hb{kEi;Nujx__BgNp4}CXNS{q2WV6?kJV;c*J zKa$>Dw@8%d8&+{q)ea;X{=)&T5;+Mm(1n(IMt!Y zajIgU*sPhPCX$M)qCZV{4JXUeNdihaQDnY1R&Tk(35~zN)>v{Vrz0aZ z?f9@C!S-w5+BB588q{I0nb*}zcW!1m1%4%4<{*yXBThA__6j2DD(#UiD3T>Y{v9)Q zXLhVXu7dRo?3Wmu&$l*VN$_vX79YSNQFbK4yhk~$Q0*UDLomA3!vvvZ(ryUwkLlHAtC!XKW19D4y zmO%p7cXr&Ytf{M2F8+%xFx4^1e6!xb@83A*i%AK_X)kD%>dldtFeQEouj61 z*eLZZ=?*l^<;CiJ6^wsIPhCW*#3rL&?k_Tzrg!P)zF;il^VO}n-!&hf*Y)j@lV4eH z*XR1g_kB?ASIygCRw|KXz4ziq$9Hq>Ol=n+s=VTD4B*b|#>d-_i9F`>$A0<^RsP zaY4TayN5&Ggd}02F`SYUsCvB$U=DDma{|k9J?y*^44~Ns5SJk(>R^+erchj*XEbyB zu7vRHN7AZdZ^}@DN#O*IAj|Ay8o6_!scL~ay@dpDY#3k%?V^%L5fEwa z4vaiZA-?LHCuMYq(6FLYmFv#9@Hr@7zyK@#U_V#z^yTQP1Ym^1KH31ydE!0w{%H8$ zV4bvoBG@UwO52Wdh)$W2h0rQViCuD6#??rOM_~B~%)w9!wU$#FP*NXD0ZA>?E6r)v zGN?=bSPih;a`NdDGE-6X=I|TiDs`DsYzFTj)(BGma>PtSs`&zrHSq_2%gbw$Ooy5B zQuOlEEpDO(MfTe4eH+Qa+TjcRoB~~GI2;&Id$n3woEG16czFcbLZV>a^hEB5|3*{F zni$~BkLt4%nM5U;6g*HH6{-7D(V6Z+|7AHS)_eX`^jFf03=FVoJm4|3TBy~Gvj)LN@lj0JN{VW#tr->i?Wmyc&iBy%sB@-i z`5&ck-wOG<-uYarox~FCYwJ(JKRVMd zznOkYXS2EO`PKV=aM$};q-=3KxukYA^SAQV2qnVKbz7?C`ubye@1jyQb8!E3&bWu+ z4BmP9$Z7GF|O+R zKuMD;yN#C=G?+x*c>Qr^t&y4tn+?zdVJqw71;UoO+Iv==7RGO5uGgK06DDc7F9)Pj zjXx(JT;rg;gCUY+jTeJ6vt7fjJIJX-Lmp97hSn1h!TZhc+Dm9Joa?wq7&I_u(w}Gb zcXjdE+%B@Db~-6I;);UDV#cg7VVXTMPX)1EZV~(FPDrWXy7TL5M$!J@FJ>{HHX{ev z00kN~tcyDf#r-jTgyNLK5xM-={`U{^mm{&-vFStNFbunU-Az9|{^(H>ia0awfx{wA zO!?|~5NGiL;_eFuU3*Pc8hw%Ig+Gl%7jOsopjC~jX*He9=}!=yNi6U0G8c6iYf%Tm z9N9tZ7qo0wri*;%`~D5_Ii^LON-s#ooylmkPzB(y=PmaRL(|J`A4oU(+oDrD|6Z?! zWi_9lP#UQqn5+YN(o&MJE{3m(l7w>w%A&pZqbsd=;QE|GB38l)jymlKRMHAAHSb|d z?vyqQTXW(-H|4{7_sond30u)PLwe*Ib+0;W9$S}4g1YnYMj3X&l!pr-;@e(Xf}5S# z4}K^`{iX&+;L3*hN;6*R3#8W*=z9ycC9qVU-Q>UK>(7{Gyt9hVbDtAZb z8qM0u5VVxMcD@WE>9TFZf)YFY4+~f!U`AEHVd6P7IRf)-_Uf?rD)zAT|AfA;d{9bM zIkq?C1N`!z##OHW-FvLNNGo2H=}$z1uC#Pj_-ma|4{O#?#pvBjaTjrQFXCi`uK1oUq@Jhu@QTiULV zYOS3S#b`RXE#H8eXD3Z{Pjl-)_!lvD+pJDUND^FosEKPZ3l>z(b8k+0>EXV#U_3fXd2Ax{f=_tj=zpN@UTx=)}3@X z-+@n8Xq|77h%238!j{oOHOjVpK8Qj&L^=LTE>HAtm+B3$GA*e9a1Cq==`FJIfl0+?3ty0>qQB z3qrJjuRL0guc&{ITOXhGBMB^R?lC;0KLtQ4LKeHnE*8n+5VxgzCxOTcZu5wHGG9e0t_fZczN1r^IvqkL*!-WgK0#E!o0u&QIMg5V10fFrJ zdy~AN{e~_Q$pjo)dEL^W!350PC@PM$zJ39wZ9J^G9wMGtN7=Re-MeH@b{urrYm;rM6V?n1bOPu(1ey-N z+R-l|j4jM7n#IOEhN`;VBoFgj;Loh7ZNi?bZ{|kxyhcDj5P8_uyl$-oQV#!^2&;}k z{_(9gcCVgKg$CQ?Y{WboR;A^gz{Vl!4kAl7`^aNiLi{HMHwKYmK{*jEbSI&-T}%uL zXZ~F@v<8y*M_1+Ccqi!IlyUtzGI+R6h)}|Q_Dv#Dxo+Ad!kueW{dLWdUZU{zax{FK za-MXsa;`KTf(jKY#!9slOCreP+xmmsafGD`qweKIN~bA*)Q3^DT(oU!Vqf7oLVx=wC=K--m2$e ze?en&eJNe-IC9Zr)OfMsr#ed1PG%>Tl5~f+2b?|+W!1`03f!T8QnQ_|;Z@3vRTVN@_8Bm2_Z{h#4G5V*-@1nk zTPUb#Sq_z$@B5s~dw$UG^0{5Re)@W=HS=?9;o1m>1t5$dT)g@LTE2}rgR6kCRac(+ z6N6@Y?J1-Zr@|gRuIUc2 z0m{#}C{{KO1hozky$HxjZv!k+HLt^x5{JB5gyulgAj;q@QDheQ$!Ctzgs{*S3YzTY zm!(cquGqlv1yZ6QP#7B!y-NFOFiN%<4NxIQgG zyku^s-Z1$Q#bMR6g62Xi;h8iNwsVp#sfHpfp~=R|(L$OU3erw>JK=Y2E&G+*#S{%= zfz=pIv5_jvWJeaavxvH5Xx&D<>8H5wXsgo)k|^^CKHOce&~JS9SS!%wLBVW7f0Z^6?dZ+ku57ymrWhB(3jX=g$8u^_bKrYVX0g~?=|B5JiFg{TM(nt)AO~X(u+cS|DG!30obZWv|JO>om1ri=3w zGu+rbb^LvBbx~XDXVCD_J!SS4wn4>q#%m_d>Cw^L;duXb)lk;^_2%S};<`-xKPIk| z|GW8{?R^>SV|)BZtBMJR^nfA2{e@p5BBiykn%wF2&OU| zX;pxbMX&C24`fDPq(fAnYu9JHWZ*&Z&B%);4OPmk#6rIx7)M%tFV9bf_UIz=@JX zY7i*nK{I@}}5gaW`yQtzYCb4zecG zi-_ZhbEXl2Kh@vDM#gN%Z<)Yfib!O!w3ecpQGV|?-Z^fOYUcX2Hc0M4v>!@+|FO9J zw*y+I#9OGqM7Mu}kzO!3*78=H)wg2TfJW_iM~JD)7r%HbY%GC1{C&D#()_=6Q;HD? znfDRpSXz>KXgZ>-f^Gl{H=XXEU3yo@jQO7l+eFlnk1E@#tu64LI*NY16WR}Rfss0z z&ii-J-ORtC`0>Y~4$6C0P_^7~8hMjNV#DZXP}zqrY!1lQ{zqu@C#MRckDzd+BuxUf zHu|+`{sEg9_DdT~+HWPzp}eFAB;6^DO2c@Uh9XMhsy|MlTV(NB7O2YC{^wljxkq16 zl4Dzib9g!!Xq;RwQR@Z-^ATV_c;2}O=B=srck{p4xhaxvP7pINkN;+^)qUxl)41+u z+dt>K`9i^PQ~qF^Kzdx$JUV)OZq!76tn;54wmCU%YSrSxrbb>>2eEK1%skfHXtE^! zJqD7&z(&ImdTCC#5+^ZbW>B<|@w~p}aI#w;laiI%t(^pt8zHSOnN@xVJY;``Kw9;- zYkTDEWHC#$tf&J030vvd7z5^^oA_~C87n++UZTK>W{^e}aBgn--2&)ZmMi_-+#m6_ zvA1Zrx`rP+U)SrN&A;2K&IZT2$Sa&SDi=&Xho{B=`(7&dKg?zTm^=#!5e(y2{}dNB zaCkTJ6C_}o++;?T8OsERstz7#NLWGPgzeVzXesKq{azYrjuh1SiiV$C~OTNoA)~4F?9;;h(M;)4eJH9+ho6f_3bkH>>&zHq{a-* zX$}I(ibrWQPAb7%>L86wHmkF-+wo6ggzJ<7Vyx1mesNJ!|5~apGB;908z{`?$`4ho zHpAg3`*658ZLvh$&=;>h5px2|TlegR|JtG;2xW#;*w$_RU<)J>?5pBVm5%JD4BTHv z*Qv^8m!$fh)!}cIHLs;NXMBN2TeUujw#AbD`vSg=b5pM#hKDo_gs?Sw8N3x}`1QZ&0eyTZ_TTYv0wIRm#ritth;<_a>#8)Em$ z2WKN*)8cE9R7itMIogcXwntv(T-ZNoCZRZ(wJUuuG!{_#E+Wh5G5Aa%H=;niV)F$Z z^`TB6SHQ7V`}inj7?aaya4B+?(al}PxsWyjK-A1pxQuzcO?flD(Cj4=^a7EJtN zlo2&}s3;I)zb~l>UBjvu!}j2XQ=er;IfoWj;&1L&7&0{nyEMKSITILs;Y6OqTs22! z)T8V+v9-ImzE3DK?ko5!@Cao%=OabUUspbCmDMlXx2KQvf5mz$*#>Fo5(&#zD?4jm zo~}htEM8B*&bW!6WS%VvZOPX5h&-TQ?sfbcRESiY1ia#l3yRKdSRBx(uYuU@ z%W7}r{Tt&B*RN^Lv&sm+|3K>(HY@Xz3nngTwj3nB&1~s}7c%JoT|#+2QbJ_fe7KAq ziczoqH0D%F{L>U~^A2AgEhx4UGbcU7xZV{j+M(G9wxqAYnla6W(BG3p}Pqyx~U4w`Z^|Xf05S`w?F9J zjY*bHtK}O_c{Wx04K+pd2}p{Fe6mNs@kqFfqv=ozp+YqOhNqM{C!&F&$hQpEz7cth4oZ1M9q{m$%b2^_+^pb4~wAjD@rGHj%+#^I_xVp8kjlr@y(2u z1@@=WiCz~*)yT#f8NVhY60hE-s%^1={<&b7#aIb8O{&|Z>mlZ{plInds4gt`*UNMN zL%y|Id>$BF$}>-4Cd$o>@o2d;e?bNn;w36u z`_cA*WPw1d%)T{8(RE`R&zabQ588MM+UG;gYRi3p#m zIuvs{Q#6;7OA3LWve=4&%sTzY!;&4j1A=940eapADvzvri|*DrdUydS;}P1TY=voe z6ao`rB=J4?=!#C_cB($K<*uNGwhL1yaUfd{a+(SVGgKw!i8+sg4|**7-97ZL#mNA9 z|365~y7b#9!Pd7%VyDo^{x)D;F)9xUaedqCx`ZGP`T%*nq%!7QWvb(cYKp2=t^Rex z9`envXuC(>Wfv)IGj;bF7t|ukYuX1Uo-JPrNh%k11|uOlx{~K6mNl_Mrtj9=T0i%= zP1**F@5x6%Jk2=DZHK7l6ivDY#&CbjwtTGZ)Jo%5=$nc{($d}Z)Q_l@IGDmlnCA<6V`DE(hnPlzGSb%|_ z*~`_L&Zsk)p{*`nMfFU(2WRB*`zOm(^T#_S_8JM%uOhzOzjHVL6CG) z?OsFSX{wC=5_qy17AvV8!Q6hL0jQw$El-ebhicNV$q64&&~z4 zhLsru(qTtLX{5Uh^zl2DQXRN+NpsY^!zlNz=I|ZoA8#wdJx}rg0b??3fjJJ?w+u^n zyQ_xEJR}Yk(WqI0m$Kl^MdTRkBuO4pB5j2d}$8U1vh;O3TfQ})Amm3fY>Jz{IitkAXu3=GeKFA*y zAWf&SQ%aky9BRT*qUh;W##i>d)J!1~Ae&^aLTfYNx@=YV1taAfuo^i{F z5=lF#8}1|L8NgxMGk~iMIsN?VrsC@`6VJMYAJ=s&xsq9yO0?nLT#D3;ZP+sTn)CMY zY8Ll2O-mW<_R5`}HZD|gVKj{t-15HW^E%GGj>4-!f4;W6Xqz5xsN(X_TzNX}f6>1l z3+eB2`{LkIUm0F}ee-sBcx;T_;ZV<{K13xKXYOw2oJ=roHu_$Fd#5WK8DrW}{cr6D z`TzWPG(GRNaYuF2%7NTkaF-r>o}CaY^Yk?(5I_%}p;-0Dx@ql_UCr>;3S*?_BO#pR zzfpl3-95}%9U;lvNud@EW*`;84M}(u9nR38k9m&xjm9#B^iDJHbv9pl#f9;?`v=^P zILxK5FbdTNXi-0v%gRKoRwho&;HV*@^VdYcPJYc6Oljk!9w21q#f!+$WA=bKCdJ3! zhR59olWPHj+nHc$s+M~i(CD9kdIF=G5)db4^0)z-#zuV!uA?0XZH}i2PNuad&d^ygN7{j^Z0e>x>+q$i#9)FW zbM-NhVX}4M4RRor_zuRFa88aCg_bgvv9L~M5#;TAsUcEhv1WZaG@YghvKM6SW59#@k*cwBIut|*m6&ejq*_R7gt~ACJBFku*YGcO zBrHHUt z4yN8eOfPO6Q*lgKJhXog)H@N18opCK!#xG=);XdUA>GQ#_GTaCq=Ji3bsjO zw+6l~=CE-(=dyn##JTWjv<9W%-SVq?O}V5yxR#ct6%#?PL5}BudQBWx-_LowmZu=Qj+RitQA zD7shq9ZzkBbTCbG;_ z%Q_8JNEyH<9;6K>PR+5<3y?77c4&dsztTv#?5-vs_n}Ihm(6_qK)N}vJV?jqU zu69nnNT~MP6R^mPqX~Lk`j9j{Y_@smHne=7fWYa!lggN+ENkx`Yc{o(Ol{B&#&vJK zW9H5p9Z{3SPC@1i7bwj-DfxARyMLf@W8)=}89dQ7)pg0J6>yJlpDmFy$h~_r+R=^& zY=M)mJnIX>p86SybBVxjzzCDl9nUQNH4`w=dtQn*BXI?x}ldYJOw{!7G z$vDU%a###akbJUqH<6V2{h2(g=&Zd(YA{Dj22Iat&v$ocXKgj#8smG+MG*6@h52M5 z39WO4>v_6|kqUPY8B5K@tO>^TNXWZ6h`qKR-d~X@MYF`u??ER#mxk17w^&-(NXKKX zmd^F-SY8?5=LIpolj^J0$5f_lZ{yzjo|jx&*b<}E*cDY)ud%}J!ut)Y#Mg$J^T*g9 zg)-hprfl;rK`@|W7O(f~6wjyiKKs<(>Gk1s>6mt{>iz3-#D4rtG8f_eNsP@@?<3(W zamS)frr>Cl3Jj4H1L|^XV111bg^FOt;*_ymoFiXaJl|MIw3`YTm09NyC zgC*1^W}NMhL8JpIn5p4kFSe39X`94cQJI*GAmFS4ixq^-Jp~;Sh#<86TRXJcA!Kc? z5P6~L5!aer83fIC$3^)!e3~FxTqlhD)p?ytBH10x3TV%U^gMjYRP%&D%Lt~Sh-|=Q z4dNhdA`f{~A7HP(dhaH_jV2ZNZ+HclSr;rjOZkG4*K|>xgRZmqTB7$tzDpuO3&?DC zcTlm6B+>@)_ks)12E*DxPhEKp6FEh-EVN^?STwAVNl*Lm-0I4klW|^kHd$AWkCe$k zhd}3mE3g}Fmb5}Ordql_=|Y-2d%4Ki^5nQy{0W-va)k(jj*;3xc?j!r(nDAppA<}U zZ^{oUZ#ikdONH+1xa8D{?`7S)3myTs!U+AIgA4f8 z1L7AxU{&c2Li@yR0Z73xh|E!5!mwD~v7PE03j#-0yJ0AdqD?R$cV=bUp+gXj*Wgzj zeOnNr-T~}vDVB(jr3tdLLUw-GjK~ixyBDS<{onnH5L*FQ10UKFlTM&0VvRGMmL+A= zER43JGTK;eFgjDDU)02U6A$M^C@qZ~UV%`V!fO$=ai_+l?99)zSZns&@6}#>;%`35 zCD08%jhG`tobi*82-uQ224w#d`LHxe@ zPb5?e76}OK%1o?k(j?1ZCsRIJz?k27BtIT-l{`Sf>bO?ileEurZom|z-R9cX_-=h= zD_dWK|64`>_XZ9>t2j>#rGg$v&MJ-kR+dEz$FfkZ(h*Wf1k&>_M*&psk!iTrV`sHD zZ?hv@q&MlgAXJ7aFqcT$Jav)KIY<+ujI7@@;JVrzBjb|8qUuKzgq#j!7W-|EQJuHq zcbYy8!VczpJbvj@Q`H!UluPC`>4_k)n*zb1D3jftbHJ<2Kqq@^o1IRLI!v139*T3TJC^4jEWAMktGVC3|`G?L~MYrdPX7XVz4jE*o$ticInb!cz7DSK_6A2PP8!BGcYlDAWmrvnht9m zsBFdPbjLJY0N*rB>KX+XtW4hg`oz;8Fs|r>_%M=W$wLtiS~gkY!ZRt4uT`= zHEnf?R$@)##pNI47}{kzUO<4Gh};Ri|3G>CB{=D)1=d!z*o+&&vP zmXZBBm)k&WW;w0ADgVs9=2_lVYQq@*BBk+6dZ43-j&Vc93aSe4N7g|%d$*ZtRX|HQ zzxjxqT4j-Tj^!4nu4TjStmYj<2Art<>S;^ni4Uv=M^zm(_p|oMRyx-mc;MV@%47U3r5 zKpn)Q>tHR1dlT`hj~~u`bV;DG6PJ^&I;eSZ_HJY8$QlxzLH!EoQ}?v}?*tO1x&Us} zdnD6N-B$JTqVgc%x2$iI*CJEoO5#t!vGkfuPcz43tC$1!JE&A_$Ll?@qviXn`z)DF z_htMQOY}X9+}T($J;&qpY!2oWfy_+IZO7xm7;hyotTPND7x%GaZ5fl(ojQ_{?X?2y zyZTY2y%yj^@7&S(*PcU#^4P^hZ-9q@u_1{+OX( z5Z(v>f;HaIeXK`IXiM%%5sE>}6Cptsh^TYJwM`C^*Z{E+es^`&#inB3(Bf}#wHaah zL64Zx*wCqkQAy>O`9I{KjIytmXyj9`Z)I_mB+jN`)6hL=o~@Rqb^D_>augKv+l)@2 z_Qj!#B{pEaoTg*D4b50JC5GDhx9gp8_+Ruu;Vv^#kLjw$Gte?)rNLx2O zK~mlM2H<+YZ_|5*dwT5#i?q{Yo3i+Z+?Z+NH!G~hC;cOJh^$NkqJ0H!u8Jt}y$6d> zd^oIYzqfvf1F$%QUQ5TnkY;n=WV43J@ao(EV7%PlL|)mB_;WI|;6fA=iF_eqna2aG`u^Pl8OqwK3(Lsjdp`6ay)qqpC#xqmYGu|T9z96J$(jlk~ zEaNc~gVF9)Mw*+PEV`pZYZcb+;e>qZjeP2*PP?f-oS|P4E)z-8(QJD1dGAnIz(NM& zIS*vDnc#Mh>0R79?&xqc`rLOBuj24;E-`Mo-VihJsVMzCSGJ??(4zqf~LlRqPSxp~BbbXBz6UT)fQCRuw_;A?&}j3`P7K7*A5GWh(cBvw zIhd;W^#(+ry(j7@3IPJA#<&?V6FR5KO)+=_&l8%H-rofNM|TwzLeIurDPlO9cUn)S;NA?Pb4M5_(8C zDxm7*WvGy~7`UF9J!Pncm}XJyk3VsDMm{&T>>5o`M;;*#VVucPyHx4wYdRtVmIm1N zs?=nAOee=kzi~EW)GKE>Iv~)TNhVcW{rZyM41P4jKi*b# zLE>dtCuX0gsf`|^V@}o#3+42RR&OH}0{-MPe2#z1axz<((jo6T2>0)6mj=t^sQNx7 zIf%#ND^F``xgwrJEf@rOMpq^ipN(`Lj@Nb`xML2U3*m87A`xzjQ#7pSJ(T?$Z_74| zFTSQ^5N~ji(HLkTwc2I@KM3L+M3NmuyYaGirWk93W~F>VzpX`PlgH zfa1;~*zekQC0OzW;n3_Lr(b_eRevMjuX57S>lsS^)!d^ZcU(5s^@4#nyyuo#MJ(8- z5mRU8A&`5Da&C+1^5N9^Ao@5NL$Y!lh=iS(@TAm%S8_JJ1=_Y|VArTh(9<&CYg3d% zV}#G-AQhi>K6uqM+>@Sks0_%x_myk|#Vo4{aMRvip76nz&<$@xIc^&!0Y``XL#4lv z_9p2=^k>}^vz$TYXCYeV>E!B3I{UJZ(Zm1{@&t?I)I%k@VZ4@~`FdpVDYz^o!)WYX zLKOjPBnkbz8=#~FPrXEb9?FgVajPvx3fo)Gg~KKuK+&mM1A-iY6VxeGRRLgP7%`W`FJ@IApOUU(_?VQD{ z3B8V<)AM*-H}2Ww%HZ~Ly=kTU(63foq4e71dlz$KtEBwaihO@{%s+^BU3ri7dv1sE zyLGnzKJ9Pl>-F6JI+^ynpD(1t_2Daz(mWq@x-9*dN!9B6tofbm6K5vj=umyXo!xEn zi8r?SpOW5}QuKd!a~9C})q3jwCUh5$`$Q?42bX?a-y(XL%g!dN>s=DHf)hI^OHeTR zcfqW~#1=zkr)AMf;QX3AoKwub%qu~cN;jC|VSZz$-ntAS`~cw6-iQT@%QLLV%`#y| z!dd3?L0FktsG7hl8DxVNP^w1O{Q14=8xd1>+(C{62BL!437peVnhlw1Z=z2q?uSIe zTBTCnE{w(h$JLW(N5tmN;c)r?Ve1`(GmD~a?bzrf9ox2Tt7F@FW7{3uww-irb!+zW8ubfmixu?0WAyLka*@1iAg*Ww{O%ty*)q99MiqmZHw z8~?GYgAzv}$5p#S2eZ#X)16-XClX~Q6OTnpE`VUO$NZ4({+k9(fIi_9Q+-xr12gNa z%e9=2xU+~(i+Dq%a5Z86-$|*eA?en^zaZ{9r5HdM#an{F2lB)`9EPg?1+Go_V7KmB zTxAK6BCy)+Rjg`ABX|n%g8bes`4ZSZv7~#~c^lB_%Xk4>ZL4sPW6@q}xsgTtrZPYZ zc$Z6NQmHCt+O-IGCVCh@0@;1iDhbspdOV;ywiX89MTgcP#0FSN*0an_{moINv1DFE zk_J^WDhkT=(bGNiW6}en3(zG@4*U!%>lHzN%x+EJl@q2J_+7!$zOuVvHJX8Ua+%sdgs zO$>U)Qry2=t)@G&FTAgPq}pRon$!hzXYd;xMo)orj{*fSY|upldb%~buCUVvp?g^X zjj{Vj5d8^H^8rEzI@K9Cp2lnAt4kZcvqy) z`E`iPxaryCZsl#}{sIhLz7kx2$86Qu=DvL3UArqfGuZinRCXqL=(Ia4`Z&lLF=JZv zbYgmWN!kW*$d>m|whFHNHE6%S2|mEZ?|wf$ol$w1kF$^YZ^Q2Y2ii95{D6QJXLRh7 zU`+%SkeCJkDf)!^_J?%n#}RLv1zsN&lh!T@ZG@+5xD<5X55pu4uylF*s^ zNg_wZw99U4G;-C4>Dha1`E0=1ls{sk?ndGz3l2CEBvooJH<+cX@g;9_`ezA{>k3!2uCUiwNE{fa_)JYik zioqo=q_5r5y8(xo)JFF8SIjDAO6c+qJl9GW#)6T!A-vRrV@>C9zbgeqtTc6WZ5`dI zX{Xu&Kj^MY4_IrSk;`-&AuwUITo!q^ZIfistH)2qCHe!6Cz&`P3NN98bD|YD&loH% zDf24G>zYnehl)C+T*^PD2eDGAUB><+{SP%XfYKKzY1RAC#r4DDG4~JvLCo})t?4gp zDZ!~EyA1HYs9#15a08WogElX>G`jF#bjrt|iLp3AqkBsm+~9c=q~SQh5clC~*a8vE zHg>($Vs7fqvx}&}Mwy05Ixw}Z&Tjp8jmL4rw&o$u`o~)~bsX{Ri5{EGm}#%;&mWbk z3#`|;(QmqKwN}+O#atvDpY_g-Fud3RA$&*m6G#6P8WV13Qx(+1e`x_O&GQz#s}~R& z5pZQU+>Q0=ye`$b33JZ#L03ZND=N$iK<6m!p~VgSE(!x5;g`f1x#&L`R_@a62xvV? z|76@!1vLQdG%avf(RiXdw$7^FkDf^0VOX4Yg(9D|ovsz`!qA?m_rDt6P@0 zl^~uQ^(jNAb#YNm&bVbFfSAR5QusE4nb!AUr^+X?wxjgx_}&VcxbhpAo0}aYvd%4o ze zC(~r}QmC<8{N)(qCS%Voc8t>gbGudO{P33aphL^(Q{r=W&MG7NSnH6Py@`@Ghzd93 z#rpO9dN8tOuez}^L;K3r}UEa==LHqr9ovm+xUO?}_ zD6@Gp*J~YPx3B*?{*!^v$t1iYM(h7Nc(+eq{eu5pG`oQIdPrDQ##+DPSo0|R@%{te z0$*cl+mi_MjM~n|zfBCA2zr3ACNS|HwORu5Yr9u4&Huq-Zxz7sbj@VA=FrTY0C=v? zjBKq-()RTF&E^76drV30mx=W;{^Nr`wkou`rdYEWK7Ws3o$XH$R#wcmIdga@f@}}5)w?Mf3iC7KVU)HaT*5OyAPN*A zk;Dd}u*pFaPjo$RCIvUem=L{d+AEZz{hTD`*9JS&%G@A*R~-xy4OyQ|naQo4`!Ub)SvY2PwZ4Ya5JPC7b@LCw;Q}|Gwab?!U2)84$a6)Yr0>7f! z6ed9YG<3FjJvG zA?psHT)FZ9oFH)vm+ct`GB(b|D8as4ib3J$h+TU42bzSJ$h#JGazdP`T&3CO0%>o zaOR!rtG5OZfy;<(0T1>+y2b$>0R*UA%lpQvg`}(ubIwhpBPcq1xu~90$q*v6$eIM5 z&zGGggZs<+Cjz+zv$&TqviA^x+C8KAR^A0+P?QxVa|xt{-)U7GX-HBaW%(R0yfv7*!vucA5ZkbBi_dqcr& zYM_I+oqF)%D7*b;nv!SD)Z(59eHz}TKNHx4Ux*RE#wnb6rOBuvPQqJfcdtAHuJ%%H8jni*P+~tN5DEo}UO2%l-uG@HD6qO+U=gzereJ?uY|Yw$CoUmLbk(%> z@h15nYD#EssS&zxfQ$p9dJCAomZqbO*@VXO1(*c%rH^JpN78+UH|ks%dhV!YlAr-j zCo;>0$dsIQZoX}l^kCe6>b@yVg=@gv-k<8g10Nw7QaX0j+GRye0Z>f>{9L11z2|1C`@420H8c-I+O^ZWcc%q zb!Ihp_R|iG+5^Hz*@fB^2JI##hX*W;)mBhDpBuu^g>>n;wzXx6A1vG34sQgEVGL#a zq(cp({iq3v=Gr%M3o&(xQV=?&;r4aU(5=8%yk9jhVBKa>hc~Ww3f2HceX-G8kQLFi zEHf3c=*V%F{uAKxPgMb3%rQ6Z{!iEM_P@yMaWzgc!jd(ak`>uLDmtF8ciNY<$Wjx! zLEP~;Cl$9E$LYgs8RV1vUTB@kS|?;IH>*GJGRH&t;AtaG4%_*NjY4HDa`?VIjSi=U zuR-g+TwEJj#H+;swt;$GqR-MrrD<}`96t6j+xRgSdGIDEp2B}d`gO&ZRzM_Xt76^= z0;NXzgdH{})ng>nb13NrRIkn0l9AuPgXd(A7TPnl8&T)&lu08Fy&oc2igLmq85nR- zP1*)PWC%PxAM^{Ho9ZR~iydRm5Plg-Ns<$ML=iSEsj8vcg{d#a+vE1?RgObtg%Kw_p zlSN%C)pQGJfyK7z$D+gM;ndbKf8~BV;yu!wqEVPsmZM;?(f(~He0&b(;J%$~-xzz> z^it8Z-PW&o9#p?(@e=w>`6k~Z#0ZIaLpEv2<|YFaz4H`NH+!=z#vYn$Bmbu)^S?o; zR#A%PcthAz9Amw2iYIBlt1y+f1B6d@uxd`VyQX13by&0xFTmQX+^|6czr5A-yHWH7Uz z!Qai*!$2;YsO*^k{)S*~ux)r;T$zE_mB6TAdT zArX%Q?b*uq`9b7>%58kokoXfYsYPr9_#W_E3kY~knJGQKw+#IQzMpS_4_S62a;=is06&> zKPCs#?uA42{hps$vrpum20GJ1$1OlwKG5 zh57jah|`@-luH;4XN``@r65n6sN2b^HJ&ED&mhL6 zFkfvjFPyw!YE_#0HD|ZVe8A#L_Tq(h0@59u9LGzi9!+q2qLhG;cb(}0V_{o0iJrd% zBEh_JaQ(AsXrPmMP|B0iuW-@xuDQ<>^yp_7+8b+vBJY!o|t_*o(f^E$WPmYPkqQUN&3_}0wrn{LP#n$Cp z%#I}Imz#XGu=`P2 zUzlUhCkHn>=Mt*a9lqA54GTM)LwGaZ?AE^1@M}#ChtTfzUT^;=%*)NR`#O%&|1{W) z-zo9`XYSEK^yXgVdm(+2``HKLnQDQf31g}f{m5$f^xMs)+v5Evl-=;FfYd=6vcG(j zFv1x&@iepi(#Xu;E80PZlK`^Ksyh#455i_YK>Lz+Uox@}LkF>*qN&~zA;ztitW^$e zilccriwOa(g-9sj0jdQQ27Zt1wgl3WWPV~w_X6|P+5lPk?F0e#AsBMrq9eS09vbO) zjDORwe#^j=f$_oP@pb|f3G+5RWYV=b5fmrwnKlH>SK%Umar$>abm)pyju#m;1HX4O zqA5>cmgYMx-L^Dt+e#mVMe%3txCHlvk(9LdtZzFGnag{dvdT9rXe%PWN;ezhXfUKdGp)&6EEo%f)n3rX#PVe$2}Yyf}1#x~`8 zPVv(6pxFUVP<8qr0Dc!{v084P(^#h=dUt)yT^ohPaZ5Dr!qQ(8!(z-CdwFc&WJ%TjP*)1WTV7x#o_nw$G|ioV zQ2RIE3c+_%D$J&?!D&BMM|RVt1us>bxu*v&nvgRB{EWg}%BY!ab4$w{El*r7K^=WZ zu)q|KyMx31@UGiR0oXb}eLkGr)mF_N8oKIA>WI!mOPB@@Nv(`{ASG+y+PR{L|# z?Z58^=uNNNy)Oq!{!&b!1K*A=Zl&={sPFAz^Bd#(+ewZHzhcWubJw8d4qMFy6R#A= zv0`l5-CRDW&d>i&g;o9!0HNtOG4mF&c4lG7ERQ=Na&MD6gKkifkp7~}oV}#;kI*n^ zQ_v4o3~;`D5 zZw%vQ5p_jnOgH;NHw1n0TZCUrkV*{ve`x`A1oQHsCyChQ1YQizxS}|mgXjhamKr`s< zsxKDdX0GCo?1Ll+`BbSvOnebnT|OpqC}^Pro6E-tin{o!;cPBUUFbfHrH=u_fpB9} z+Va?_X)|rQ0Q8$?(W|KONR2l5XqrvOO982>>`I78b+rTEp>;Zh6<>sxx#!=h03Ysz{&UwL~1w}s-Q`X==thYt?tw@=ut^I z8h7VN9ddP6U1!v-O_5Uxp8TfEA2H`ka9U6~q#I^ix42;sVcE(}rgS)@PW%<;evmOg zxgYHUeb>i;ButfdMvgZ|$b^XNu{Dk zl1`@gYU<1dWv>)^T!CRvn>n;wWq+(aygQt}t_}SIpM1|A`^)n#b=wlj#yncmr=s93 zmILVO;^N&`n&~HA|3+om`#fLuJl?*2`9bzsiGbQ4fx%u)J(=BUF@+T4d30uoVaMcD&T zHKFn~mw^m5-pb|B@PT&Wt<}#c;CK*h2q0;CaX^C)+zbj*cp~b{&M>+%ag4sK&9Dd$ zG(rt|W={Em4ec=rKXGV5O*mHGq_d^P3*5)L+2W4jsq;xh3z(<`2zqI1gf^fx;ornQ zt<_Z!zeUCH^d!ZaznBSne4;h6v)boi*4hSehO6}5$NwGs!NTdThkNaawZy3YI~9}kh1 z6zZg8G^+8t369QtB4r^AkbfC|FmrX!!<2f4fReLTv4_eGQYZ8fq#=4N^?wc& zm23GHrW0eYz#+(wVzs(Vk?Kd%wsKvBS`IGcA2L`|XNC>f=7QH~Wh%Fe@3*8#MPQOW zEpIOuJ!-aFQ|H@8wU+8f_ufNc0{3VvORNSsYZoYkksatg*?(O%k;5Hk$K3tkyBS)0 zl}7Dzzd&pr^bR9`(|$5WKF*(TtNbQMafix8200~NXK)!mWv{{vkDM25n&D!+n$&Y4 zm*+%HH-N$%@}pJ4DmB z`v<}yRkiMr?#@Io0p04`{CEN`=ry&nzPWT+v|-)?v!k6(3piO}C1CJ!12yL6RiuEw zT~P71pv(q@dn_=FQjEZM)1J1-*cX$r?3-;cR9*M|j9c9x(5q)^wM1#iYL1LNg{>hU z&naeWM*3e)mPYy-2Hy8Yd0iHQ?XMTK|5|&SUShdk@>@}Pu-9}IHChbtH?IUcFa; z8rSFBo6nm1|)+7npLwj7T>%b+m@HnaQ=mQLC)mclwEkw^Yl%k=+HTWvvI9!^2p zFB~H_k`mZe$;$7AVuZ0Sz(%?^ESxxt#(CvWvh`<}1|rozw@#ln`WK-_1&U6j0E zh*7G_?(04r$qNr_@Dzbl|Ad0{ag^n2wE5|kg5|7@$%uj>EWxZ;m4c%U)A};J{m75D>Ai6A%fI{f%`NQI0n1X2M9JrgD7TGqwsESdBPmqaK;?iy^P$}U?3nUZ zqTPSet_6jEhoEWFfym*^*S(bWaOa@g%}GlkjoL0gOjv8xT!NNL&r} z^~S`V%yL%8G_*|(vW0WZ?Q6zn;=%8u@th(OQeMJ)zs_bCIG!FCsMiAc^g=tFaW2zO zCAa~j_GxRnU^yiO!YXK+CyWQ=vR9A=+I>o`ba7hJA8n~9`5$jF$>~-^ak;iAYK%rSb8T_Iw{_?{6l_-p~GP23r5hC6vY)1;oXiEMHDyx+e7#F`cNYX#ddbb{-H(v4l zkhM=Jg4iBR`TI8C_^yenQm3`QHDk*jxKwy!cQn=E*ldX*TM9sYD=8+DRW5+a^OU=J zuA?|JknZk^T=||+PS3nF<>(WUoKiLw#MX1QGlDTmD&~r8&j$QT=`g|T00)sBLhi4w z+`OXh=9~(yir%d4W|UAVaCF(Jo_p=O~<% ziRzJ+{l@P`53Z}1+Do#jO(wSUa}_7e4jt!e3mEs1rBHp*sXxqWn&fdSTSdx)!P}FD z@)9(N8LXO*0vUxfGep8VK96)brH3(UY?oy`AzVe(ib{0#$0XIYe4N)kSBkrIcc+o7 zrnKY-ROsecOi8Vo#=lpEwp09jX3ZLJ`xp(kyzSx%k`1<>P0RH4-H@}VPLWezZ{+H* z?he;Q%)C#}3Gr+Moj)_Ks(V*5KB^4pdTZ3(ct!|)s@^{EBqZ^^PU>) z(%h%JIZpj`dTa167qtXxFTcy~1~D}RJ)Zw=8I&JMTp<~}`)^}yi>~?IOjAB_szbM4 zU2S>QSN(T{n&y8Z)JDZP{6d^gAJtCohnHIo;nrwZOuO#mq*C3zzq(b)YI*S&UqSPA z6I0!2R{|pHtiP}7$3s4N#ii{xpWk3#AKd9RDb~RFRFi26Ui)bH^0-g>E0q9NRWyD0 z@KWAozH#M_Gyw4SHL?32;b9+#no2bo*Rb%#ANw}qE7n(8=!OyW88t=iFrT6ZIlhL;(fV?`Czo8;eRxsq=cfm!@q-IcCkvT zjyRoUo`EW72+JFvDo6ZUOqa-=6bBwB7;&>Ro0Uow&9|p!S>K!y)mh{fI&8P68{Nzo zxe2(7s1c&gM7;p#Sr_{~Nt0c4yw;_tbd#S;QY8Or|H>jQPw#fiqUA>&D9wwiig+@$ z9BsVvAexZiYzE!XNX2cR$t@qP5}S+X5ge7^EczLZo~~j5AEC`>_>>|S(oOeic6Ui;B>~Y>hnP~Sk|@$=?2e--=c=Op3oSe(gHLYg*_%HN zClsGCr_?9Wc(w8vk%z?S0q5oMI^oPk%fqZGk65k&xuTvJuTNr-oF63}mq}KGMOun3 z9A+^3_u#afDH22(%3-mMM8PPs-UJ|=alMa9GkLda>gR&U584n%c;y{r)Ey^nlF&s* zg&2orxH5M{Y$8qR(Mj#jPS!LWI#HaqFB$7vyz8C{jnOLye+;;{1=Wfl~QLpRs;Iu<%JG9|3a+-Cr@Py>UbFXHn zXRFuCr4hD%sS)SKB}1-3x3}KZ*H+S>%T3(j^o!>Ho13}y_1C$XaS?bkx+ilA;T48R#(FkP(^`pN@@56pj zhvrwtf6;ch_rYce5CO{C%_u-arZ0@kTi^U3vL(eJ#v?nvy}2_X;(h#RAflg#%&PJo zT9DlbSQ4;EUexz&ifXb}#0U39P@%cS;wur-OC?DiM|>z_i!|gevO8%T-bDWaFIV+} zP^LM$oX$vzNLFk9S&i_Nk&avVg^n$WY`OUp8|LS}d&4ya!ae~}le;$X3P8;fu|>bC z!Yc-}xA0ZseV%15WP;p8|X;Bq3( z9LT5FafrKc3r11EAmIBC*eu6I4)+WHex1@Kv!(#>CC0jk=||6Et+>=p+>De$to3v; zD!v90!TC_0#@4zE%DRnJ@cGs7RJPMde&k7rh2lNQJ;S%tV7HYCuO?(f1QJ9W_s8zx=EPLHO%%Lnj8&}8miG3%5 z?rph`etvpCIM1;vaorp9fw9jz8TLxs}`B=>N8mlA^07rm-@Z~Ud<)wET(^1#O? zkhi*Ubk-M0?Hs>LkqCtjbKrthi+nE^24&f4G?OuIZqvTL8SEIyb**bZZcA*xwqDihb$kDSN*T|XSsFTaKEbU#zY1Rx>=Afs=Dis; z46{eP^g9nVbXQvJwJwF zAqaNn9|BfXmi@oPiYcb~Y@3Tj7Q<9IxYR+30N;0pzGb87Y?!A4@CFgUzfFf4*1!jZ zhIOEnPTNM_K7D{eDm!Oq8PHC@}#}y6fK9z zVy7^CJ#=ku(O#-RS4h&CbZRg-cWR*C%%<#*RZx!k;f{~cMReGJfA^zAAeE5SQ%N2i z7^H(Y1@#cR32iLDFt}KREJTArX)7vzQ@?mDjxvIEL=h6!^8pd??pLV?Iwa*HqV(cU zm={Wr)7Neih{x=kCAc{V3$vji?>56-H&?$Kv{0rkg5??WUosL>$rQ1bRd_;b0_W8D z%FYLxW}q<5lUhp5g!H z!$STkkP+{dA{Q1zx%TE!=||`)E-2am;A4o}$Nwj-Fq5kfkuW?3`vJVmoD$nBvotuS zKO3W3yxzEPrlK($9*YE*Apn*#L^f`$T9V2$vAeG`)fxEgNnA-_EwyOWVaL%|l>e0# z=)0WTxV^`3AzzyfE5K_WACEUxfhnT!Ba`f?Jp$=rpmeX^sJ_~k+=+Vsn{r>zMvbm? z^K&`LMPeV-HfoU)$4A_=XI$%tOSrkDYvKH?eOqW)GKdhceaPIIRCc@Oc(T`{wS8$$ zEB7kyopHj#ptqj8`7y%1<^GH3Zr{J-)~i^;5_e#bR2>TIRo|MXCzsJccKPdEnP;Q? zqWLxIPqT$0!<1eRO1Ha^r~w^)OP>GZwdBQn#l9sFM%gH_t z|G9>{1mF2-`j`E%xrOIpF{*5DJ5@cBsQ0L1d-%@&$=;u?_j%|trMJ1K&F}Oy>bB+c zj=wFf_v2>b|9xQXl++VpP*8Df@AIzEY|xi^QiHdULAsDoeDb-x$P+1LOH&5?&vdAy zY53Ze4yR6>1jV(QT%NfokBl!i!TH#-#mB+3ExpCA(DHCBS@9yK=Jw|m9O-0LExy%`3HVA=@9lNVzZ?~Eps?=jBEBen5O(GXhL6VOC|&=02r(_*RzX? z?4q_|ju`?H3hEfLF^F&+87xf(lUNJ>8mxoZ56H@~TJ|Ktsa>DJYt>d&ZUF4B!u@9C zwm8rlO1pY#hZ(Ie(Qo_5l)zA-(7TEWzWXTY6rYZtRu_nJg3A7>ixBQBjL0m{hteCg z$Lm$oG2-r{DbU2%6paKWx5yBK%O8Xc55RiAhy2=f6BQBIbM?5-cT5`kIJMwE&9pIHfPW1HpG?lz!8s$P8!E=j zOHLJ{HA7BSF+P>sP%xQrf|?E2ZFc_4?AAjR^Kg#I&$7W33$Rddt%_lHqUM!mm;E&{ z{^}*_pX!Upaemlu4G4;}gpRWt6*&D(YJtZ$y9^y#(jQeYT2@iSdQZhI8kd|c>cmFJ zp>PFo2A{l4Bgw|p5zTmMJ2!O+PO$K7rI5`4-Qvx5CeGJ|QE;0Kxd9mV$J>F*MHjDX zb|ODfnT}1f>-HO}CK1NEn4uyT(+>Yzj<4d4?npoNchWADi2WPbT(5yBTRYc9&@-wg z(VnMOdNG$2v~)TBqr!1PGL6_MO+e~z|7%3IWQ)jaO)Q^=a3y@43%ke-yHy7wkw+Kr zDfy!hMa45bZ4Sd>b zChHc#%rDVSW`vVjqdifL!6+$XVwJWX%JDrLY{J>}tHEB#^$gvc>Cr02nU&rI4q{+) z50|r(?a6IUu!22T2K2Dcoy2p)<@|__eWga`CV1&#l|g23(lJq2LeBG7mwIO#Ep5rC z$R98JGIVI+e;G3dTwM>UR~Yir4?ZSe4O^@X-#IKP;C62JiXUKN)|2reU2c-!* zWB|i|olAL+UF7qoS)M+FjJet>) zX~e5Ihlj5LJ>f`yoruNyAA}>*ybFU0cUQE-#mzk3l1~5R};QDjIs6oU8=k zJf4g=mQ%I6Qc#HTtz4=FCZpY4kFYSoMl~apM%QMhmU2NAMl4C455dnPK~{Onyv%$K zP-Kz#&8;;#X0;kgo*jlu@2%3=&7Jq*1E&J;!1H)b$Sbn~vI@2ccFn$lg1II+8XU@|NZXYDG)kXoN8~Ov66=~Wj_!GW@DYVeZX|zuM)@Im&Y)ZV_p{G zs9-wD-48>l)CxECdwTf2}C z@3-Ge-><{itO<#l;1Z}aaa1#@b|yxG%JiG>g-?>ERqbLtIs=}JhB1IHCHkQ_`=h*I zXV5TIuq0vXX&2O~PuiT;tjxW`Tga{~ar$vDzG&2oK&aYA1M73F>53edrredgf~2J+ zGN0i2sbA&$_?z{{cV*@5+^WjmHNpKc$wCBX;6wfffv z{#G|ZjKtX3B>hL+oVjJl3fKSn8%eb%cuoc4f+GG?Neo3CuN6dKgP77Fzt3VEqBmSX z_bSVc!UDWlZ{=j;}0m^Zfh1Vqv?hF||1c!Mam{lBcf0G#8StdndLXcwbcwqlRAky5BbKqPwf^q(D zm=b@aG@^Qicof-21t_}kGLqci>!w7^=#?5!x>(Pc*)oMjZ0i6Q=LLlf`|%X4hu)0P zPiD?n4{l^F)`2#dHMYyfI5Hd^@RA_A`FAUhw?<}4ab&$}kv zpLw*@F+Ob-&2L%gc@}w{^8_UDp`8+*$ajHErubL%4iRqEb?Jm;v-SC=)PE;6(JJua z_;U<=8BD+2_RJl|w)f8CX`^e(%8GwmBGkQP*_e=w`f`n3fM)YCeQi_S1>X?QNNs;n zbfz&KBs)#!UnohmA&f1aRJXS@{C#cXbht-FG@U%<2Ftb7u~u$l15w1d5NgR}nST61 zE#qc!_@o6{oul=~V#B6x^lpMfVzhw~`fLaI?cVf@Ym8cZ3S_h49t_$62C)1^-vFk> zU?Vm$4qOd{ka=iPrm;iDA^SMnR;Y;gK=ZZN!O@V)2(Rf~Ugjh-;(TG=*_O3o&z8RH zDo?i}aGk;(e4_6V{y+_VXbUo8#oQI**qk^H7cL!9Unh7aVmg|OKC#BDu-z(;Pc)t>q@oFSa z)DJitC}f(S@>OHkbMf1_)|ws(j&DtvfdE%G8=!i2bYN26pCG?=wNQM)wgzw57FHLx zrR!JqE!U#rsA2V6X62=_O4DZAHQ=K$>;4Qb# zN6o`VFOUCNrz_QII!Ao=etuh0-KV?#beG%HX9eW1=kbdRB^DJwVBNdhYmDKxZ1j_Y zi66IS#npLBPFIH(tv%foO-a`Q8e`R5zjybx<+*ZPC@v-DxWC!Kx^pw{Hm|=A%>~iGxkh|Y zknM4T3Nta~t@nQQ2&Xm#=H{~w_cXZ-13*Y@uRJl=H2ekQCZndPo)G-YmsNBYySdO; zB=r~o%vkhf;R-h=gI#2JfS|=(GfoHTJ0t%uEx_bFO?$6WE4Ph1pHUf>%b=joQ?TD; zm&QSkHQpPx!(|c@%E2wt`qvPHD+EbtU5!*cvtyyW2ws>y_Vl6EgdrQV8L}e{N5mQ$ zQ+}y^?E`%XOYJGq`#QOxmb5+wJA)a;ESae;yF-xR{+yscM*0#ZeAMPLlvpf8fR$MH ziQJsmm#Dr*0(Qb+UVTp#Y6<;ros>{}e{ z!%1#<-d|EcsX+n{$0~;e)J||Zk!{51j6DIIvgJ-}f`fF9Wao4T4_CkokNZk-nW^YO z)AOk%1hQaHy{d=8?Ucs-RkfX2Ev(=m@AG9J7pD&BVQ+=<&{0$y*??y%gLH>>*Appd zUQ-|=dTU_jG|=V-b^4u)XD}cqL$>~4$T05?Rli+$fa1blZFNUBzC9v7S&jl1X#w`3 zppi>ma51c+1~Q&bc4xW8D*5?uQup-VpYnX+u&sQMm--dnfZe4soa26evJkyNlCafc ziF|01_GHPqU%B)f-f8=m21VlA8a7KcJ}=*_uvho3Mvt36g#NFlog4NNC;nZJ!!P5p z9NWw5Yiox_#{fBqo*niTsP4F&XUdBQjVnCY!o0{qyRRVKuepIcMG4MrF0L(|XCLWQ zOp7E1e=LvfcRBiryFa+_DX5>c5}fLS&0a5AE1OMY$xUr*n# z?9PekT*oT7O_*Y0qlz$pMjtl}ZI4zzC;9&~h5q9)LJbF^_dSvR&pZ9D;KbDrUxNK` zj`3VRB?$pqhaG;FgEQZKYDM*Ulgl!yALe3G6j(D&We^rTW#-U%|K?yLk?88fq#!^j z2$w$s(qr3o>Ch-KilV#}n>#Y(GiJTH$18fCR7sN|%CH` zs$Kl5Hc7@GrLic;Nhrl{0|EZt%^RjlON`g>!UP=Zch@n zbUA|8qX~oc`)e;pKb+KDRO-Q=Q7M0B3ey(5-s_rPx=Edrod+9H6p%1KJPtN|djm0iTwP+eXm^H-GV}h9&k99~Nt^by> z854zYKb?!~DB}Xo(5y#3#z0V%L2YR z0y#AfNBQ_8-6%MU_LNdf1-yzW4qz-5kLVQqy zOD-HTsI(ZNk%XYN9u18buqhEs=Jppelbdz-47H{B{mSlsuT5EEzKvE_Y;$vVUum*C z&!?BxGdj;H!~K}2f;Osm2~@q?ybp{>fZpx%&qy!iKR(Hh)u9(V>uv77{uj%izxaL} zaQVF6pDtJ|+q+fP1iw1~F-d#ptzD0@&}}i+yZdu;g3X(|oM#b(4FPpq<;#bdhk1DC zy}c>)Y%>04ZfC6ux^yoYR>{{cvy_?)=<|^{C(aSolfbdPtx@3krp{K(*AC#o|32~m zPO0zJC|2nwNXLIpuvnd;aSTGzO7gMnMX2j=xb_mT;mnfm?KAQW>s_Kl94%#4{>3jR ztdZVb6)@{V<(17Qg~snCIm9DCx|wxovuv!aIW7g3{8xIeI7fiUEDyG&EU&0AAzStD z{oi~CP2A%v@KhyEd6;seFT&8M>eOA`fMf#YpDPIL7L%WRw3(m=g$yyGo zd#c}_l>}QoAi3raVLF2*5WG~f&SW79#+3<341W`tq;L|M|C8<{)i3P$A+2RsySBFH%HOwc4dIzM z1%bdZqQ569`WYRIGF_foQa8M5uP$`2`)a+XZ;NL>70vDi<&`^cNYs3*$}Tu)xs;5) zZIWX8_t0_!CVgE+dVcFJ_@4lfC9Zlr%%EpP+Yyk4_mB74GXEw}Wk@HS=Ei?+2Ev2A zIwJ#D$V0bLF&^IeZ>xp|U1(`1PKPin!!c!zGo&^TjMbSkoHn`f40kP-j(S2Oj3s_7 zE)r8eQ3Ue3aVSD5ySm)p;Ubmx#@flqVc2RK(#EV`V%?%NHZYzQN_M{7d}WFw0)f$K zaUZOc7apPQ0mBE!J~4+Y4p-fql{F7s_De@G|SP*Rc;MWL}NJY4u3f@ zHzA@i3_|SuHU;A1HxQUy{({L`-Hm%**0!u9-HHL(9TpRbnXIr!1_oZ{@INWm&GYTtO)#6MsN2^9{kH2_+>BFsVP4jJaT)61x*YNGzO!rOgVga{K z>UQ!0Kc7|$_D#r#yBNb`)tUdM!Q1T=*VvVg@qeojU$aFZv;TLk`sp|+GT>j%7-AXN zk&`bM=Qg4!U`N^_M7w|UdG?DtmO=^rOfjTM%2xAtrKUZMLz2D)4risx1@n+}UnQ2r zpECL!dGKQwkiWX8z&8gWSS1YQt!_>P(aAF2Y-9D+X`DBtD0a!nz%_MvUioqmRA%P{+8+t2+a$JjkE$-&W^3N zqx+g<2;hn|6xqxhw?(0mi_OOS<=-3m^|V!Apz!cDBa2u6mDlO+0k;A^R9E0qN^W|UZ#nH0D8K>zR7x{?8QB6 z%Z&*Wx}KeTVv2M82gT&cM^_xUynCwf9qYb#-7(W_Qb1EV@QAufuzX~_7aWbe0-|%-X`K;?M zalR{Ly}QZH^u4>LCA8NMTR2A;R7d?BpP=mVu5bmu@=wo;2hQAM>z|)Dk9%L4HS%?K zY15~9AU^Lqm(iA#YtiOu=5Fzxb5xd4-2)Ch;`YN(6+4`+qP}nNyQaAso1t> zj7r6}lZtJt;>_5#ZRh4Z_pH74{c!)o7*8LgwbtMEe{YWRKYx_}ZF-R&p?*U$!@l~V zxj3*|VS{*k0Tg53ip4b47RJ9%dt^|8@r>}>9VKl$hB*%MDi#gmhjg>6!wtVSLB-F$*wl>cIrsY3>>S zP(|62Gj+vpBd4KO5h%tzD7VwLc3Lo0R_(vTr6MHmBTiuY+%mEVwI@T<2u+^ z6D%!^HJ&4xP;C!zBv58gJBjSzC@x-ce}-d`G5N;}{Wq~KMJpJ-5J%&i{~RpqvP-kZS553WPd4DP zuG$(_H=EMOB))G+7s+nlfV$WlD2!(%N8|-1V}~qR=MwX3b}{J?`toQ0qVlHXOP%QX z@pPhTm=QTSbaEyMw~@q+MNdsGGsG}_tIqi)Zeor#ac6I2bcoH}8kA+7$C1oqerfJH zuRpoAUqlCH#Njv}9maP__0j2V5{R3DIE_BpjJJ2JQvwl7TH=WmP;w3??1+o8qr>S( zP+$#Fq~0gA?w5Z`L_feTIkYl`7fX7fxoL-CT2;B##gSa%JHLQ8p2;1lTtN%!Gdr2gs z>AyQWxu!}}X824IH?<~PT1vYCeZQ6+?^#EcIYzfj>q9L((_36AGsoV4pXu9dP0X!{ zWj7aw>8Yakn8*z6nj?q(=;BuMR!q%YDOl%md-tJ}_X!+=11_qvOqbE1UbVEJgt3px<7c z#Me;=bHAc`y4lqs7yJ}#UDfD0S!yXDwljjAqo+9cUb~TNr`G($r*n1^`5!G{L3aN1 zzDodbxoBhaP%WL*bQ*TKi-61UEWT>(0^gA4-8Em$45-ll(yU4cp#Mj@pxO15{I7P= zI+!MZQK*ImNaruJ3@f!yqzE8f+AtRD`(kzAEYXsl22oj8IA=v+7aF@yQ_rgl7MUg= zLCZK!)`J6P5+3GI0VOQpE>ZduT>{$@BR3?7|5~o_iUb77hjj9zWQY72K`pTMjmHBA zc|Gj4O-w`Go@8sAZf0ZO^vu!CH8u_74T3eT#a*f`^!5fZ27zS^8)2?~tUCzM02R>` z^x0d-H|2_UOexPw_Z?HhViDvma7Rz;H*a-&*dOKSu7AFXEu$q!7O`&Mgy$c3ZiEg^ zh%Wv6tXyWoW>h1NvH5k91aqU{dm_!Gygfw1slywW{=5eUc)?map|-XhY^wUOA7F z1$+6Ka&AJ#Orgd|2Q+(sEgYPJlG-*|EH#A1_*N|Kh6=V13(iuSa19*C8}Dh|MQUGh z8dMx?I>^yKDuT&Uh(+%WlVqF%Hw^M$h%2HNlkcD^CQxL1(wX~p`(Y9WF*P(BEJbhN zt;|R>`s60~Qn0torrWz92x`vpVE}{s_dGzG`dB;h8T@Q&kZF=ku{<@?QiVCDlDuGCk?UmRJ*eW73a=czCnPBADsg_qpP&Qf zoZodcyL!Kid<3+|es3%cW4HpF1j8YZu1Q_BzL8%Kwtm@xKD`Rsr}; zF8txhGLBbN`)iXmS-$zFrK83~!4~SE&B4y^e6DzD^;2a#U&>|MC)e{(4ac+U($K_; zN@h0r!{%(JTMxhrYjK&G628$lc=i+^YT?!0v?R%YDL<_I++Shv^8AQ@njFTEx{rOt z+JWMgZO9bI#}s{?NqOc_-SpJ88Szy|XevA!!u%h5_ftFqOa%M?=;j#8|5)Mg>@_FC z>vuAL1&wSVL_%!h>F}E*xMz6qQK?v(!wHKU*Fc@b3g~jBde@(1YM75=STRPIP}=x& z%ffIt%}+7EptlCp9e3v`ycZNWJ9CAhs|L^rJF&HupV826@johS9ai)5n}z zDdZkkwFjzs%uty36P)PMxJ^hyjAdw4!z|rXt`9O{5wp8?nqsnO=n0Ii4-V*m-S@d; zMeVbxaPERrmTZ6Lv{4Qv7|hJ3W38X2yW4VM{;GjThfJo9VBL}X;U%DhCqw}NR$Ws2 z7%66jN30Tu3_O=XHnMIv*vW-Kp4nm`b>{ zj}zDm1|lC-Y2N&ooHOG2Mr(exWzyBwA#r~deTXibs5d@CQ6@z0_+N98BQFVZ^?ZHd z2T6moR;9E**--K1`sRSUpZBE>oaE+b+wum1Css7dpaX@c{AA~|)Nz17d3kN^8-8jX z9+h@cd(x8DZGlRS9C$k`*~JJC+AfHXTD&!;rk$MbbnoyVb7HIe;qIZtB@c)Ff}!(* zILG1q;B7kn_!4K<9ys`UQ)B?>#i$jAQ$dKzuqpwXj}*f$QP*P2XEu#fUpKuH4C0N& zxRwa%fbrhNHkWm{2>Qle>FM zXbf?04Jm$V%D;5Bw(tf&J*O10Nobuh{Ee|>(~rbtn+M!evJq%KVw@2wb4j4Gezasp z8*fN5L0aqkL?!8$jjei6xz_}7QDaQs9@QJhJFVC00iOrk?6nX1LtT3n>o^xfg&GEBrB&rRg9v+h@espu;)yNpWiX$G;xHNvgfC&rayf#bqq_-b-l|(tLMK z04=hlRR{ZWhtI*fj<}}&%&lMMyN!o?_ubF|#kklOzrXiEExT4uP2#UVZC$>fWgAb{ zof_e6i8tB42eGRS4-)TE^fl0MRt@jTUY1q2`{Rd0L+|WM?!sf{N&oetYX6rP)xhE* zrNtGe&5nI;tOy0=-(QC6gF6e?3)i1MM764Sp1;UI`iwc_fw(FuXQiCiwx0R8#ga{6 z6Y4dD$97J+r&u+XfvdM4@u+3`llYuUOH)ZUOx76>ZqMFHYGs5A`>G&Yr>fe;Ed>Yy z(>f8=9n?K_*i}7{ii87dw4yM*72J~--36a_ggK=VXc8OGx-2$(VM1Fgu7dIwW9vi= z=3C}NRuW`hiEEMJZb4x_zH6cSFn00cZ<&PBLZV~*;k*Q@YMWo@8Sf4>VQw0wYv2DV z-vwDFVIh{##AeTa9F_kMqPOl#Qc^sWf6L`nn|($?H@mV?$1u_QY%M?oL7{qFJSg_* zZ#R8bWaB}3HOG1yr?8Og=gQDBXz)gQlasZ*AniYDOD&B~*f64Tw`laR!oA<|do!23 znQp9uk%Jhb8n+|p7LEo~V!-eRb_Oe)SvPVO6`yMTTt_9XHU<0V=9Mt%I(k}bRTu_y zZlrpfBL{JQ{Mzg~bP{rIZ1f5nnd<3=qQ~TYaYUEq{T1(sg!$<>V13vv6szm@N>GT( zDs}ZpT?y)Pqmm@`jC)fbQvd<1FRHx@t@j8x*r^Wr8Uff1)nDhBYgaS{Od1aOZeEc( z7Sm3IYJ48)^r(gx*cYWjZjLdZv2^e9hn3Ki}iL=pU#Jz;)e}dI~dw zZT14u$lHhS%CyE6y!=Bv#8fr{c2329V=#KI3-UlA&0JdrH0svQZ8VWWc$Bu0t+NWy zeWXw!)gF(>HZ!-q2i=F&%g5QtWXWzH#$P?Dm2TB~usL4(UObld^09o-xv={Dwj&?6 z?58vUqNs$W&7PH0B`$SVvowuI)dfASMO_o~2jN{bF|8y=WS&>Wr0AbeSKSwF4aRq*7%v4x z)CLpypNdsu<~=tK`)tuCFxv6O%H>E(Ckv1Y_KmQYZfp= zX#6CIPXs5SQz0p5$85*K6E8$(jmWMGmH2gFOhY~;lDIt)P@gHJV!LV{gXr$7R4)!0 zucUpW#7R4X*p^I+J{66dS&H^N0J!`;&VI}1sPoJ6VmXU%L4!C0J*eu&Mc;V`z&SuGp4v0=lodrGKb;t=W>J5YK=Q-g7GkVre;dI*!@Bpp99v(_lS zbZ%;lwp=0qJ;5`JsKWr1k=SW{U|=6M!h9oe!i5)-t!RxRo*Rz@r=Z`YA^zlUO`lVx zZ7lblVL}aj`4^unG)~KuNSsBT)A=SoKK&egH{l{Yv~>Yf>b=Ez-CWR*wb@^4yqtAT zRms)affd+eLfdr~i0WF?z^NH$UA$i`abp~K%lV<194QJmVg*9De+ME_y&eqrqKn&u z*JFsqPrr*-rS4d}5E>-h`v0=bXc6h(P`}U(?@-!=nB2~mK_;-PkdqGs680|gc%3Z) za!R0xyyX>uhE%+)t5%rn94KD+Gc-oC^&jrOvgAXy3HlhwE+ZYZZ63o)sA*=6PK)` zJlAbC(xmMxyG!tZ%>(u4%)`rg_TkH_JHW~4YoEG0*45&Gvgx(1`~EH1zD$o-;Cyo3 z_d_mNn4fUHdgwzpm{&Wa2_5(wKeJ=&{U#K+p}~uk`EYCGF@1@M%pZ(S?=qmQ!xS2j z@8)B%U{m$Yd2gm(aH?6O1^(jsePpw<^4&_kGOz&UeYQcgFM)h_t#3zFk=538s>29tu=4q!; zAT^5KL7%zN=awe~TT}gIEhP1vr@|Q2IguV+z|mEILcB4c_>MnDNpr4{+MtTe3UYwN zQ;(HOnr72|O;+3iR!{~?CaqX>LLPUL>%Zc(DyD}23d010)Zn4=_j4bR06z9C|dV#oBUM(1j z_pyd~42&L3%0Z-#F6e$z9OjVqzzx>G|UPMyEyx;$~3$ zm5yoJnkas|9<0=+6$bsVMoD2r`tzGHC>~*ptWa2piaU*X+?aOR09>A6+xaLP8I8TL zgWIfnYcmjkQVa7(w8Ux9z@ROdP;uRJjBq}FLtAv!umLdH09YL|0UHJ5kySA^L`^MW zltpeWGPMP6P+E_jd;-H8@g|IPV0_!mFl1F2Hd_~hUm;?R;IIE^0WQ*&L$Q(uQg_}A z;F%_STMI6_il5#>9!SLbNk+xZye?vAAH}ub)f-M1U{pxkI9OBC(T(l3OFUXH?|Cns zqzkpT?|xQpB?}ug68o0TbSIilr9%5Hza}c zn;P}_Nn7zHSDeBg%Tr7Jzls)gVJ}~lW;^E~W0=nZy{ba}q#QkLSmCNO`+947+*%*M zx^(=>H`8>}-iG;`;4cg-3Xuob`$zAbioLb;CwE_H5XO^bJLZVb?frMR*K$`s?Y-Vm z@Ral)y$AY?JfZB1=J5TVfb7jp+5Y;GgMA8H@=+AyttJg*h~y3c?pci#y}b{*Eu~ zzlMkZ9^zb)S&*A_t( zBRW{P<(uVsjE$^vhFc)5FutDk7C1O_G2fkzqM{b#0JpOal?9dV@2*M}%;UJdQy;S8 zLc{+3%!Iv$9G@b`qqdzQyKa*vr{300i}>cqRcb$0NTXGRFvg8oufM$ld5~>r{cru= zVEcKbqUyw1=S*cLsgEbl&eJdngL5WL43O~t=!M1mq}hn|)4+8_+-oIr52jTdS_Yf! zRA$@;qB<8;J!Wm{B|1T9I+C zv`H_2A&ex`ikr)+A_R8XKIc|z-bv^ad`1|)+UR`>a^@PCJw-A?pIvj7BgIhRcHWS^ za&fsP(`glRX_&4UKW33@9)&sme?mHU_Wg(oNjZ%U_NE?nJ^=W5SZ(Mbl3ekiUyrZ` zBYZM~RA}fU*HqTnFXfyt`|9~LtrfTfYCR5y-J_RDrt62 z*TAY`{~Lw*v7{}9uRP~h9Y2s@DDMvT`HRh3y+0Yzr;mQraKXJ#si{~UOGsEYnSBxE zBlMl=+bgFVz{R(VTUCR%P5$1zlEW-3H*fZ)TR;4=n~RI!7jv_w{M*gV9$&e0#0mee z!>q4@7te!Lzs^q}a4`L|5BE#NtX1Mz#7*_9X|N<*(cf2V6GRI+_U^^y?CEj!VpHV5 zDG)|D$p2;&pT~vk-xlf=vZ>HbgN(-^WL9=k`wSwbi1;`zQc}-!*+J0qURy zWH3zFGmx0{mcTGikSq(m946LQL_PHT5IJsGuOl^5M_VS_6XFQ0z^3>PCOoIw3J?@} z9{&NUX!ijNp=u3d2yVvtfW4BC{fP_G44-`{-B}n@*m3-RFUKiAYujXD(ds#~DdVDn z`SuJHgT#Y``y|TpU24uP9_M%PqrUENBpFo5F7-pR7`7ne6iVi;?6fjkwz=lj)Vfu7uld8LT5ZFT6WFsOOD3W*ceS) zr^IwFIvLgn*jA-4Y*|@i#Xe7Lv-=)VeV3NkPNfsU&2G4fpiPy1dV>N{Zm`$ zCKbH=ea(FYr2;k$&Y%+BBgNBn^Db`3%EygQWFLwkI7A*-yngO9Gge7}&u7Zj_+g6< zH5rmYSPWT3Bvf}&U(aX1cN!$?oWzxeHn3$Xz&L!7tJdbaClIXtw9Gb=6a#_z)citdU_^L*j_vX%NCwwNQhk)|wFqkO@ zwAJbP(iwvThz|U8Z+`8cJ$7L3(zeI5rQX2n>~&xK5btp{s%`AJUb#G%YoprI7osyn_5RqaWZe`mdELed#nI?s#!7gaF`b>nE^H_VH<}BKmJXv`NRq$V~RM+=9 z+&|roDuVI7s^zDVGD;uIQW_@|W6AYq={XdJL}7OO9(gK~6k*lWpkKkKXa9 zj$Sn9ku5B}Ke}>5{!RLX=F+rwpHcDk=>2Z7RM6pf_b$uT(UEy&miit_>^7D9VcPTF z30G;-dPU2#a7jAt_~iiDt^99vMDc$|N8Sfh8FxWN?wrAY<{~@wbb6PAu}Fhif{-C7 zv60hKs>+4U6FBZCVun-!LC$dhn&JRMue91mB`17f!Ll1L*Ts-HAU5+8$qO>zuj%FD zE1_Gf@GX-Vt$w&6eUq$L6RkO$*S-Wn|Ao^9^FEYPfm&s5h()QZq}H+I%^$!1!G6f{ zqF1u&HHvCOFM)Y<8t)8Ma-0C|qq5BZhxXf&XjWt-Ce4RR+Z&7ZdjrJuN4zESO?)4EB~N!s2Cc9ewP1DJfTVGy z92D&Ig%`U?8HbYeh2vM+Q}hn=xK(izQ=f@59^Im4kZTj}xEduJ{{dZ2I&B6*31Tdd zvNSt@7w%wwG00{s{btXkyt;oFeEO+NXg2UxoH%%N1YGCmi>CAvZ<(9F<;4SFcefn0{V*=cW%;eHPc46c@64G zLmfT`v(3Ei6+(o?a!O9BBuicSxex+3iYP=I$VsW!u}S_DmPUe(Qgoihp~<=BVlr8d z-e)I=Xvd!cI}p?y{W*w>Sw7@hJ+Qn3BK$_XPa_3{NZ^aGSG_GDp!7lW1M3N|8}mt> zCo%zbiNAvprqF5aBlf}aN&8fv;R0;6yhc8>=`0F>&hPx<95c zK_!Cnl$B_e0IDn?FmAr(ni0`r6R!>u+S%H2jbZh9nHrwQ$0sBe3nFx>j*f)tZaLbt z=s*W{m7V=uZNP^+@z9U|V}7tEYojCY5PYHzkt5NyYQL(}z3V-~=wrf&xlDz$`{aff z!rsU8>SZ=L;qpvV_iz&?IwCJSI*%b-k$a7}W~mYsb$s^`Vwg+^H^Qaf$Lygdwg%LztbyLeKxtgbIE!C-CiGRsV78FE zL(0M4+aItVotQ+7TF!1>dA3TU($39Z=hI7=9J{^KoKfdFMR~GA1-s2ooa&8VZz`*v zR91u#Ee>XKC9NGv365N@7&C|5xx%FXBkAm+heAsIC$~RU`yIdTrI|Bk;@DW%J0`2Q zf_enOYR6+^SwMQqn~v27RhE^Jf;|uZkpuw|Xo!}^Rhk4b0`7VkcMvWiAd~VNq5AMs z6M{hT;Hnax=}r$qed5bgQWNDSvWD-mgSlu)#$tx7AR;ev{&>;qO8znQK`njK!mR?LuI6jJ&3I zT=&PK3!Ba446gskv_^~wY0@$%8Wjz#{BDF4vYG&U?t8y1+*p@1dN?XwL}h;-O*xO6 z!MrOsr-R+|Jiu}5L)b4o#*UEairz$0uo`Xz?kQlug*0D1uR6aX>6o@+X)=m&aro6B z7D0xpdk=%>Pm$v!T39TD&ts`OUBI8)B2|f5B@Ou?13xl>$L;jRBw!89QEep<;`Ql7 zU3G+ zqitZ_Ff}v}zqp$e`WW&<(oaT5U!&@{Cm{`>LXY4ouLE9(rLDwmPs>Oa%&0O# z_;Iso$Uv4O-3C9BJ!l2)pas>Jz`O_n#Eo| z=9fr7V7}+yg3O&k{XO@C#FhTx)7f#Ijg5iHetCdEOvks~;dvm(??21K`tQ$g(?h0Z zJAc^09(d((Bscw%z!#<;0Orjm7YgHotO+ zWxUi~rDDGK$N`Jbo6OUB=L5}LJim*2Z+G|m7WXgbm)Sn<942IQVcwjW+B8?_!cP+I z^{&ridIK9S@9Dv~O%`_0(|_^jk*C@p9fkB?v6n9-zoiN>uy6tfA7p6}J}!dYGgg$N z!G)LDn`B#r&&9eC6|0*jbF^Y=uKuzw9E<7tcfFRqwjH^eflBUJ-k4ooXPVz>ba#RV zLq0cMUin&C-O-<9{de@KV|*Xx|Mv#+*x#fYG~a8-@x;S9jwVtzA<96v1qQD*s&Co%Qd?4>s*zfp9F#)1>Jy+`mw@suQb)<*=)}zYG`L!9q`>7+Fy`-r~Mx-0K6Fqb3MouS(}GQfk*rvF;68NqU8K) zLVg{`CKiMS&iik+++&=XWIC!#tepGOJB}Zq_4qL`4*4Ch#V=!hJ7F!&8>ZGABZDGP zm@)i&{dCbqv%#JL{D{2(IjrtVx}0k?^n}5m0zuXzc%wSHI7`o4S$^Rk`#+<$w4BzO z)tuUH6!~<)qbm8XKbemU^G5Qy6G?{|J<@`CowMX`$90ZhCSEd`0;qhs_X!vp4-7H_ z_KZ0PA+^-6zrh6m=2*<7)$L}I7m|A^edEGUtPVO$>v4JiG#Gz zlm+^{t)fmF;9N0^$8h)D%$=fFszJyvRL@?ibE?3q(LG*+0ND4PAutYC)0y)?q)%jp z*~pMUwn1*tHLwb^}ly}TD8sf_tb%cQdlcycMZ9qIqnW@WJQ zwELaOi^0Ia%f#S@9L;G=392i{AZ^L?XvoSMhe=Pb7B3|`NoMt9c}%)}U+x*Mlbv|? z0L`60ke%|*n;4$d**T_Zi1I6?vK!w|lBtIRqcWf#BNW6%N=E08xYje$YM1#_HuHf&%U(BHjGP=oic~Ml2yXi^xOxfZqHWa&}73TE~KXmp*utK4Z zaaS#|gszo|P@8^q<}ryiTwZB_T0l|u+x~##|)s0 zD-6I$0!1TR@5|;*J{GkOOeI}!PAxe0B#?02SH%Rq$MU?fH`d;b?rvkpk^6>TxN6wF z()@->@baMH3fv4T9J{?>vns$AW9wObg4Op=h$H@tVT>L2&H5QA<$cS_ks~OMb8H3?smw$d z|H>+QX|6$EMV;WzH!Irv4->=`*ZXknOuLDkpTFa8RL4x}qAbs~?FR29>cMZiC(;Jz z!?d9`c^J)XJDsgc!dFwoTXCO#C!e=Ex4G4*E}M1i6E;c<#-NWxU3R#$UXfQPsE=lW z?7B6iv_trWSr_XgnCzo!DmH9%^Pf#XXqu&#N~&t_cd>d)>~_4NuV=NPja;da)z;0u zwkht(FfQ7Kdy}Tm0QoiY`n#~hL3Corb35Jsm`g~)z);KQXY!~);E+5H$F*$QEtYjh z3b?j@v{FApV%^~i#Xm9AeD?iPDAT>YVHOM0rBE)6X{(lSPd|fIJ?X^i5lWO3KSWnB zk=gny$yU}k*p!)I$RgRQKqL|;!D@s!irXQ)Uq)S`9GtK=r3vgZ(pKPoCOJb!#FVr0 zrFE&s_cJN**A^omwy$LyE&;eOgLA`50Ezk*D$RRQb9>@aOS+Slk8})L{jL_C>}ep@`)>8bmE2h@D*-)kV>JiJx-H(vlKbwENYv}U#@p^pK;Lo4iS{3p=8ao_U%nlG*U$^S=c-UO@ zqdK^ZP&r$9S*k{uI!`k2^**!tPweIYiy^V^yOu_GRVGSgu<7232e4demFTDkJygx^ z{5X-0aK?!t{577Fh3M$vYk&WQ6t4?Zul0lR% z4T2LCmVZ&!IEi+hj9ag~Ny=yx$siQKR~M9gI;af>|BDTuWZ~3IV`rQ@6I}+{J%!i$ zWp4Ut7$Gbz;!ILee&mzKi-k)~#>F>7Qb+AVxdV}xw>DiwvJnucNVjA*7aTaLb5mI{ zIzo6dT9@4jIh^hiXy|R(s*&ILIA@!NaO`MnDnA5;?ngIVZec~)ySIjVIW-)CeC)rc zKtuc*2tPG8Kpl7j?crQaKf;MGsOhN4pNT}@zu5ntJvy;e@ zwID^<1vt7rM-Xtl4KwW`i%w>F>(?oZauJ}Nkx>+Tg)Y8Kb0M=t`YrJHucNXohfCgV z4rdE4S;;@BrBYLnpKerMJwXfQ4Lh9Tx}x)L#zy&r%PC!dn6REFTaENqkuFQ=5Dm4{ z%J-{Cjp_$h*_?+Kae3WbVH*mN`9=8{yOhrAWRA@d7cnui2|h04@qFAnX;1mM zU|H2}9CGga%OoTBU6MzYayMI1=(ks0SyrX;5~1`s-LJ71@jV^IIXY9!-1+10SxR9@ zL2kU(vB?%q-YQ=L>nmV06YrhKzX_OpDOCy$WJtj@UcA0Xx@*OgvqwQJ*2L!mslHET zE0MxN%MV>+!_dO_^s{`nFzu1)z1xc@(U3S#XcO*HBW~2}^{9I1>JFO1nLr_vtUZ?& z;rAOKZl;a(G1~N}J&zjyojpbM@#Br1w@u5JP~t0lzrWu^ZOXW>#D<;Yf9p#vQ+^)` zHFH;cjY`%|)t?8EGA+4XJU#C((J{z~V}`Y+Cy#GEZTE`>{v?x<=D16W41Si5++iWM z#{7eIh#Nn+g{C)??M=$GS7n1dsy72mbYdE;X>S3T&-xh$^mh+E-M5?6bg2mpYKJRV zcAS2{^u4>8K8NAuYBuBd)TL}bKASogRMLuG)>0iT+BQUP7XPNj=FmI%7VQ5JCi1=H z{eN?1|7R(?goc6V|9<;+TL;$+M4Jjpo^j})hGC>Y+Q49r4;EG2MZUfp76B{{n$Q#> zIWv>JsU9`pM%ogmf#CyQmy}vI@Y7XJTo_yg`4w;0oGGjq$KeCZJEA-+!$(>9==O!F zjbe!!#`HN!@nS__tqmb>yYbB&013IGkEC_!6M1lsRmc%}{4jJ!kLzFJS0?d-cE4(& z74ik96ZX5LYdJ3apbZ(x+e3x=T6Zu$??!7#*fp>&bkoaCxwZ04HVC+v8WdX860FB+ zpQ!_8kd;M*1LPVoF1(xeoNNUMX>HUPM`3~lv7lDt%&}r41mIbv_Vbm=ppj#HImX?Z zY8R(?cLez9vLNA}L@u=$-!Rvgr2WWAdJ*MWma55e`DOWMC*TaI4O{dF2>yf__z62{ zIK7Yp9&mzg!hNZTUr==%f3G+H?#&|gga%Kl44iBHjCdMydjff)ej z9K*|RS|m`dY*lIV2k<(NQ~ieBAs`_couoQPp@B}1)(Y2XM4cZE*54lPV~=y5cLBww zn#L11UH;+@_r$(l17bj+Q1=zEp1Z=Rqw2yzs%gerO<>q2a6fC*5+^=^Y@|IeLiQC( zv3NoHCpG_uwi;ZEt~Sx=L;ci9X4XLq7zf#4fZ~u4z}_3QNAGJPG7fit_W&xiULHQt zb4osFAEwpcxE~*@1f@;Gadw^D#v8C@c?F&t=CKS083t#ltp%lO$LdNy*HC=n`+{s= ziP(NKRHf_3t)1bpaSW1xRkQwjI`?2Bno{-HvKZ{64?F-1%-kZ9Wn=84t3-_siH|qk zj4sBoO0NF*I&1k;O|xz`kM-$MXX||?G&9p@$ecy#{THoN!vkC@%Du1u)P!cj8nDA> zceVHa{-CL(=RIfT?>Z48%}QyqJ5q->lRLVb{iuPxNbEN+;N{RD+si_u#jY7mW4=wP z`kyoH_Gr-SWqpauil6Xz7jh4c;w7`c=)9tYQ5?mJQHii@eY!WL3_Hm5RF*cchcPd1 zG}r2qtneyd%e-Kn!0W{9g$nJOyan^Q_goo`9Y^o|!$JC*F7zsZMc!=zo}RLIyHDPI zZ**bqzq3wAndX1CyVF8_%Z>fksZJ`21oxz^1DZ>z=_`BYuH53M*h~_t^>LT3{v=nv z9lFOzmtIB!Ny%6sXo@iGpYcGGIc#CZZ7>!8!Ym%L>>RcjU4S z3Bd;OY$M>>@c8TQk9SS@+5goEabC(QN1e^hA8Vpe=AaH9p-ocpkQyUrfyX#|_gI2Vu-B?hyQ(wz5 z>DyZ)PISt3Y8a}Cz911`bKVh)ndQxh+DHM;3&MH4tqM|Xy60u7Mk~7U3Y=#v=D>_p>D+qlx|phlrB!8b%$t@C~F1ley{pKYP(sd^J|(GT3Q+%3V7 z5-rB)drRh7)ygosic$r>0Zd0mGtaN+UeZhSc){cHPURebme;?unw@h~f`R!u4Aze=0gmds8) znThfSfZcw&vv^$l{>Ih1O!GGJ`5SvZ4jt+@VL-D_0iMPlnZvf2LW5K3TDEDSoxWO@ zYV4nK-XqUuFNNcs^R;;!gtjhXt&=@_7WUe7{{&5FQYT*Fvv%wnVD3i#|J}ToRbsfu zKV}^1i6-DEf$1U%|IqAMRc58wVN@?ex5+|^JQ=-c9xmDntk0L~c*SIGP@dZ_zG5O- zVUuSU3(0lDk*dn#D_FmI@5CfU{QIV|tq}ACho&JqyvAilk1EYFP0>>$!D#>r&#$ih zkB4+dOv_u^!OPYhoL3|{-J-~M?&mX@h(qxJGd9-d)%7^{nnD6JfN)Y<_OYLF7T zk_`JTdP*@kO0Mp&eYcQY183Q>e@tK{pj0;eTmbFpJTX7uNIq!Y_Sy3u*LiV!U^)wO-9EgF2k^2ENIu)pj zMB||0yxO%y;~nnSA+Viq!Dg4v?~l=X3phM}7)GKHu%W0(3WIZyeKQSZ>`hCY zO~3kJX~HMmE|Hp?QCGPI3wgkZJTCqvNz+uDsbDWqLZuCDx~>@D24r{}f>elEoedE1IZ;EgQ>-#b?-7-5#$!L@2!~MW&Q1 z_en<(bg>yhCn)YvSB&`%Ym$nG*Z33_Az?IoAw5iv^kKdRrd0r(94wL8^yq!9N)O9* z{y6ppQY~CN#nCrrlP`#SJkE zE3TzdhQ(dxrp?ddN&W|y0-dpI0~Fioe`bcM*_PFr(_(4>j~PHqoPOYbM$w>(~7HK;Z&lk10>&dl#(um3+B4E(GxAm+gnmIc|H1* z%w~5!;ONhrFQM00S=|dnP+Q%#@GOEdcQm(C3?cq*fU}m=EkHqMCe=x-6tR!_N78@A z&;O6_=X)260#P}HF8G%urz0C=jT4$yCMtB0^_%X9Z02C#ZWSPcuR(@QL7ikVW_eJT zDeoHxs*^>dEz1M7VhcSpr5x9homcat5(OCd2UlAL8`FEyJMG8cGFG*Q7%#*bGUGB- zRRJkpz&)DiF1zdRxY86gRiqwA1dfO$ zUcW<8-U!;kVnny)VtLpfoxt1aTqyabPCHh9i^He1DuhfSkeOKcp~>3Z6QJps`|BQ- zNSITaXfRS)>heIF3Ne%rU(lh`IY~eR6YNHULk^I|reaUKkUyVAL4a5U=3p_(%k+A1 z;g`Q+!rM`r>kG()&8lUGX?SyQcX8Ma#6L$6b_KaZ1f&WeEBcFn;!z@x1kT*+twNL9 zVe+r3{ZI$p`Qt-t#FECGQ%rd(k0^{eS2e=&vEv9XQgR$460k} z@f?DB`}Z7l3@xpVexRM|;;=cNIXK;r^b(`;&_OT4B$r7og(reRt9c4ij_&jDL8%)9luZ10qh;0^>QigO@Ejmo*?*Fm z9>_ktrxO!Yzdt#oIJi+Yae7D@*EC++HmIhMYa?&lQej>Mzvli?{c>$_ciSdRNy*8y z8g`;PB3H}aBJ3mlmf5{cp+=bnI0H_u4-veh(meP(K5my<<}G()Lo_DkT->%N2OuD4 zf|c8wwsNX8ZIW9z&QjYog}>`xe=W-jUP*2qLyaE{x^Q1<2g4Wd>lJ-^zdbM$brVi_ z-KwQ?sW@tkrY)@nbt#c3Yd!$Io0_^G_ul^rcW~T2@E<7rF|p;51?3Y5ABt$#;m!Fj zr0v?Vx!Q^n>p_!Rd%FN;544$A(Lt3I{A`MdBh*|4D%*WIUaXuZ&z!&fc*&jUeo(oy zZ&>rIXmRA3Sj5VtK3&<;^*?KH;UQv3~=&kO}U1;Et6t(V7Bec9#bN&zcWn zF2oED%-0=`|MnB4?~wRQ{Ft~_RBrfMMgfs<9k?|FDVU3X~W@XgNORd zFyO(-dq?YH+RQdZxPZ9Pm072IpXBdq|F;>Y)kYUZ(O~LdNPh#HH-T)eK}dFT29an4 z#YA9z?jxIThI&Fpq)Z>5F1XTkDN>PL5y6pz!<;qe`*xQ z=9~7byIvcGYcedNa>NCc~wXH(@mcFfLT>wkMF%CR96! zAm}h<@OFAQE9_O$Dcrube{C;y-1-u={?PJPzk}Shx&*EGnaE$i*NmGs#1>#%H+&caa5M}6x@&MC&#)% zg9Z}#6#GjXzwoozflt%E3hk)$r?NVEpDA0 zrWwL`R9+yMJR+FKFVIjYEL)UR}Hf!SI6hF2b2zIrI(%4UyRU4LWHWhJ`(m| zBk$!C@Nw*!Q4!dkgZXXhet`3?mI{-205IhW>Z(J?_qBxFab&H`g?S~)jUC^bC@YZRj< z41&`+SFciQazFA}@=Vi91Y2`SCjO$ZSR{rQCxwD9a0H?h-7q^Dre!qo9M4XXvKf>) zod08VFTbX0JLwbe?Gf*>Tyhwpz$##nQ+b}WtU=qT-6l4DJ+J7Iepo#{HNGBsG=nOX zwrz!M!R}Rhc-eP_JNC_0XkX+7R0?N@gi82;NQPg~>nkNM%)9BRU6fL1Am1CO#4s+lt0q8$pv@4oYOnZWaudsb1 z+9J1NPfKKgNSYL(xzK)Ql-Z3knmOWrJl3j9ZKHOi(}gIq7bPt)89!uKI`vkwG0juT z@hf&C_dpG__eOJwkVsxzxxof{dvK-KT}S38R0&x(LT*2D#p(|5Ln2QgMWW-{N_(dj z^HOEH9LuW@9DQF1yV^M4k(UmnG99<05NEQlH(G6-RixA+E6pQ}VuGd2OQT-To11*i zGT5Hz+Bp7Ey!TX@b_D zb5-hLU+ufQ!0%3D*0#B7GsRgEcm)cdW1|)*WueW*-T67z)idwX^z_i5ttcp{^PYyp zdH}xh^4`{D1SYT5^SmEM#Ngn4BS~< z=W?6$3wDJ#YO~$-&4oGpE-A=`h=__sZ)XOOZ)A_G3`^oe&Zp? z=I-c}>_+^hM02SI@m*2qE#2XsiF%;V@g-gPvWh#rr^~O5;I|zAQTGPFlT7Lx)z<$* z*Ex1)wszY(wry0BifyxE+qUf|R>ih$+m)nZ+qP}&?9=vp*4nL|^JTXC56n5o-AC_N zU)dz|0{mm|B>P|X&KttLt7zs%vf+rvA1+?Y@V{NR*+tS3XiuVIU?0*W0{&m!o+K#A?E>2Xd}zQgv)6_h?7mm zcfibl1A=RfVHljLg*kVIIWO`bm@#1nRJY%-0SUZF<>nmJQ^{oC_Toej3SZHWpKGd# z!{e(YV=+ilr5b$0#6?Z9kC}5}_98BliB#B+e;79+73PgJ?AIZa39J2F-=7Rr;G@PB ziXt$JKuOy1nGfi#3u*n5vCpEmsjXn*EF%Jk9M$-~fnjZnvAIr3fP4w)YzyjJbR(j( z!n3sO(!e223&y{9Lk|$aB%OsdL-{t2r`1D4sS<>d7gZ|iKE@>g`{ALluBH5| zGi57@MitMDHusQaw!F6Ql)=!66c)zdSlPJ0eShS_oay*((S^kAe6x@>R!g1PuZi#= zCiwS{|7ZdI1Z2txOxzM>q7(?fW8reSu{oEq-f%z;WvQE<$e>fm6L_M?Iw>dQR~P-5 zqk&k)8Ag&9dB!QANum2;s?}3}RHi`FqVXyoQgLBHAR^6vn{)oI1mVd3jXq^C(1?k7 zBZk5g9u4g@lox@cq?k+un`{NGR#A)}FP;z#*xfaySm7Hk3Btf;*^3UXTi`$>XyqPe zNJ`>Si8mp{#FIOP<<*wc*U9I!O<=*nceiIAikxbmY@F0LGG1swg}J_$KO0u_(>4=! zZZ9o3R|A<2#l_2w3)7CS`(xi6sEjZzzB)Q9HrTn6to8BN(s4y^<@7idVMIFubb)6M zizeA?y56G(V94fOq7tz?tEaQ|wNcbUEhuZRo$dN=jS(g6jmp_YQ%w1zc7X`kcT?Jc}*r!ComNAcJcQ^i*p#R@h?rh9;jNhO3 zMHyWJ>8i|(kz_#I4-VWWeFTq$^y5&PXvwf}Hb5N$=qHin9dNtlc?rfm)!07Lu?Rr} z!93FyDMd0E!Jk9iQ3tLcB!1+v^5>EJLSfROeQ+#`Gm1e6>dIjq1HaM8;l{!~?}v?+ zRGFEL6sTUAaLrDLmO*jcvC~`f!_#_-pakeeROcy|WsSk`hTt5XJ-RbJNktlJbiw6SGZ|WL( zoYhn#Ps6<|#c}|XoDSzBH6_FSx*i6xt=9^DGbU&g;FHwsn2sNAbkx%Nb&`cBMo(~l zw`p@P?Rm%V6hW*?s)jHpvJRF8lx@6JH2j4_1mt`uev{AwF;cM6SRHGY$zcG_FGg1b zjJ|kDqo062EG`GvscO*g&xVOZVy1ZK5a0)8QM>}N7+Wbew`nAWQ?C!vwe#pefX6v> zItfX-Gy3h;@UcD(J|(h1!B_(mfcC}UkGct@ncfOQ3=}rxK*vRIgS%!lzGFz6ix@Gi z3s|Lgq(bZngjtNxQMl1FvEm`9?AYZp!@3Fe6bNxVv zzkv2_;I|*s+hJf8(p(=H_!+@CGpm5P1u;-(%s?R>Q3W)jX4iNM&a`v;K|5?sP%|xS zl8@8Tc-6i-f*KM;FogfC+oGs;`h>gx190`AZ!~!pifn^g=KkI8Q-@B-o13u@K42xj z(twU8ML-wNZERfm%Y&G|qk7YNswwn|*?dds8>QOQWdE_3q{SC8@6-@WSUH)vMAfyW z;m-ePQ>8rbCr03Tu!WUNJG+65v*kp#upUiEdJCIMl=-lhB>6D0!Qt}4EF3Zk%iPpI z`3=Bpnv)g1S-&24>YvLQE5N=HpeXW=;nE(B+miNzq~779$$fLPEcyWDMm;29DO8<3 zgFBLWH09dD{v9e>?e7<(O4YxS!QSmjwuLV{Iz>0ZN`&9KbZV;nf<)xl!@^!!yv%dM?3vwL}2!u`9GdtVxiI46puMY#m$ga76_zySX|C}8naD9K~ zloCCg7YUHfH?X#0jTDJj4?%=6r@iF+cyMAg5QC`p4k-s9GL8ySTt;dWbMJCo=iCX; z(!!`gMA=YirmaZAQ8EIr=W_bdSBa#%%$=9}`+LKX`Gc zAs{0i+EzCE5aa5pC1nwFI+}#y7#`W748kuj;j0exp>Wdh90s&X+Gq3ykHf4zNk?+S z@wBjfkuHp^L?D&Hic1G8HJ8*_{?4dkCIg^vDAb)D1lgiooY~c0IT`$*!AHJ~?M*gl zBz|G$I+eHjL4}V^r6r1TR2-UM_@3_kXFwPl5;T?I>}-WTm{4XrJ0LF$Y0o(PCv+z* zon(V`q+4)@gD;hh0P2>pW;AjqlIkctWdC)A=VGa*WQPPus|PzfUlud5OxMDlBCdXy zWn3|?sQdZNaH0{Yt$!LKv>qga7A#UUVd1bhbn%!p7SL<$0GX!V$(}3x@y=hUFg7~7 zCCJvxKQL_>0=UK!f*2F$g^qOkQ9VJ-DFD}m(3dW5sI3bACB7#sw+>U2)|0KvI+Ye1 zX`;5x6VgF+!JRqbTO6k00yEQ4DdvL~gz`Y+zTEy^UsKjkIkwF=>pfMZH5vpK(asIs zg^nZkRd>72JHI2G_wLP>UxvUnb_37t=iFJ{&LrsgBF@=_?qhCRI8KC;lk8Mhuu)yA zzE(9+UYd?wE3lY{OJfhk&$UqAUz4@S5u0u;hhOGqFO(}~QC!QFPUy#G1j-M$!^);x zs|ZaV&k_&?#<8Au>r##mg+rDHrE|DUfJ3aG7U>7vkQ*oc+xS2e)OS%Is`L`fQ%VL{ zy`GF%MIO~w3n-a6T)Ll^)c*kb_t5@18)4i|)clZy5NKfSd)2H!4wv9gYg-mZ>vM+v zjUG>VLhWQ{ypY(X4fHTAnoT{{g!R|2+wjXAjPX1W_{#(lsYI;fjhCtD;;0#dD8cYR zIiGo-pm$e;gBja!Igk}a6zwLeF%!CuksJEj;X(N?P!fbJ*l?>D&Xhkjce6lfT>UH% zvt%QxWWr$EX@8Ws&EKBVN!{M47x%Wr!ck!}vvtX~>vU2cBbOH0;P5S#v)=~2C#nB zJ+Nm*=|6{M9X|)TK4ayAe?j?zywdPt35=BmLOI8X8YXJgkF0y(#buiB2R9g*zH<#% zp3l3T-pe2!j)Q2)qsy47uO{Os1>}>rfFI(0Fgp^}J-DG4ms7eRUEaOLcs;7;91a&<`j>#d<$4DcNK5r!fidB9*QM*tN zs&bfAvRVU@`%eMy&XnGE$Owo^e+sQ=o^=9Xt1zW{>eTb;oDNFKJTs7Qsejf~mK=++ zCI0zi6n5mL=f~b_ZD+SfONZlA@%KDMKrf<*z_1YvT@Fx(L4)aEyZ7bkkX``P?4)G~SH_7GNQR4%tn~;i z{Yf(`_$sZ>Cv$jrn_s1bNYl)yejA z0D9)$!sRmz+ZP5CN!yzhA@eHtq2=f-NFV{`N04%mQv6jo3ixHfc5PNn6HHYFYZ7Zh zQGKTA&{sAPiw4sjwWqrCL!1+*-y%Ymgqr{w4TM+4v-xmAQsHpa&++rSooRu*tT)gyZ@d5r>b%SaKtlA^^-2$ z34vHjqz1czbxjmU9k)zvWAmvj{E5b+Wi9dZ!TIHXXX4N)+)CK#!Mqq{luY|Z? z0$i!FuiTGk34+7T*cAszZ;D0J{Rb~Y36=!|##>ix%frw{Gf#@84Qt&g&r+_)s@uzY z_pwKFLLDg+#~5$V;)M>W9Sr_7{32KppoYiFqEWq!mc;BlidX8f_HJ~41oUhzFY}z& zL|ua4b^9d%X%s^e10+KPOXAE}aA1-amfi8Au7rc9wSOlZ^pk3~x^I79MW$+^KL5;C z;3g4VR3pXfoRgW%=+9VzF*J-f`5eh_aE9T&ASFcD?_E>o9zCeD1bA%@@~`po6Phs# zVy3pXu}!;)W(Z#BI9%G_L|9xz-c!riap*1dG&{b1c%7c^d^F^7OTS69H?!GE_9xzL` z8&w46v!d8FF1zGj+;$V7#bXX)hp*P=d^KnrqmS0y8iAfVV=VObpeOY+NJ#4e<+UgV zJ<3lHid->DJ_d6FM>$552*Gf1n(%nzr~haH8Odt_{^!3Loy~u`nXY7`&cYbjuv77U zaJl1!cE5{NLrnf9jd~sm%A6yi8iH2iJ;bWy^`;CAkyuS4Z3@B zdixv8!xD5R-JCHUtpp3wG^csKzHH@UuHOL7eT8yec$e*pYBpYs{GiCZ-G2QG>yDQx z0oXpXLu`Z$26SksN&i#o)I#XOW|arH3LIzxXoFlXhHGYxfOF0M6S|7cyV343m=$;D z(U`@lEfkn=&x#ujKEbhjCU$)jK#tzCIz*DULJBV$8Wn3TK*TEwVhQjPm!0OgEfdY@ zzf8-ELRPMh-Qli1EQ0zB`in#xFFY_Oo}A>e@9WsH#$7k_Ah|D-i7jzJN|vNGQ2GpIY(PU;IP1j8$$_HLr7W65+q6~`g^Ba_ zbu*d~#qpP91z4{&D2iyKgvG60+w*1hgkHqbt2%ibIi3H(wp{7!;mm2P&6X|( zLof4U!D^%wMYmO{tNW(y^YrL0H$?0u`@WxErTa_B(ZR#)zFG6QSj_R4!M4g?EgD4B zD#_6*x7wx8QPh}3deqj4qf?9C$FgG2&$sy7AFo17+7}f`=7WUi$H7*Ru8bDSyGNEU zR|N0ZEeN_DOX@v*eW90cFs1j_T_6;kC82-D@(AMEYP63C9FukMDmQQ@f zxF8BdSAszSkWYLFVl2>`VG2^A^r%h7IOq$_sdkS13SIbZs66HCGY_eyX1t~MlLt=Y z1ge6#Ux%wg9ujCkQK}X(Ux!Q4chI)11XGm#E$zQlE7rhfy&g$W-*<6_i69jhg#Cvl zNjUMS!jZ36$UqA^zO0_sI!q=&)N~N9ID~z82{7-6s|eY^hsJ>>%-bs1s~81Tiv~g? zbD!qG46DOzG{rWndWYL~>KxRV zYE%p@i3t&X@i1V8v9T0c^MqQ9P=GvCSsy6}ZRaGG=#U`?Y5`zEy^3tv!fqQ~8n0ti zgwIx1r#tm7on{1MA+=VQ%AT`ZE+i{!9=%Dg7vPVdtyES^O2AJrTZG7a4h&>NR3Vtv zYvcz^G4{gg(5Go94Z81|$xy=9M*#6PH0O`a^+v_2Ddi;A@GW}bpDd<@xz$=Vk&LoF*uQlZdqjgLm1kQ%^Y?S`b$jFsA@HtPY z%FOe;Iw<0FcWbgk$?sCTJw?9-v4t5KID2ZhP&I0~{Rvdb6-STsc#3`&DVJLj_p!C} zKV2klKi$wOJlP@Gb*JxHYTRGq%&H&Y?+! zUb+9gE+{;#_EDdt(YrsqteKiFX#Ym{{9!WKlbQ9=^HJ+zLAchuG;!&AB&RHj89L_m zO;xGCZ;aJVKKoF0Ygqt%%x-k_uim{*j$W+6jwQhwZa#r7;(SM5+L{K3a`;S0VPXl% z0;2o3SF<)O+Uk0JrJfCpE=G>42`wL8fX@+LIt7aFOkP$u;nw@g+Mex5F+V2{^{UC= z-hRkpuvb@zQX(9go!&*A3YtxqCV7HZ{D!FPte?gsJMrmQs!WcWxzgK`yz}-cX2be< zajEZ6ed$GzYqmX)$cCbsV@33$&T-?W%SZdK1nECluRRR*FF0z$CMPE^aU5x*5j9a+ zG(UM8ByP0-EysQD8RD_v0yCi{lGdKh|<2$nHrn!XW z4f^S8Wo(Nu!>P%cIn?OPF9_V^3V~dDLH0Qafd-e#bfj4Mk~8qR%85a65B&uU2{yjb z_Zn_2;Quyt<6PGl|N9!*E!tHXbMln~==G0#7?dX8J_)8N2MRK==`prA@py=MzLFa8 z^yf7Dj$mzAJ%)N-HK`kTh+iA?fxhwt+FHuuWGX&EYQn97yDCqOznBC$&2S3(~Fp??#Do#vAJ+WcgD(usjy1?POE=_CI@OvCH=j4K0aVb91}~vd4h&ij@-59pNmsYvQv>g!dVll1U9h z+z?PCbto#bj_Ql9DI*0S8tmKthLs!6e)PEjOMq5&OMTvw{c>R%B*|y3 z9wv5jLag%HKZNShCH7~lVYb&%6xdS_et?m;;}yWl?0A6eMjX=|31o$_%4hRF?0i1b z?PD@K+Yx5FX$`N1Ig5Pkr5eKSl5R)=>!yG%IGQr?fX_N?Pb5(r&f7oW2%fsNFhHbvrp3 zxMxnF~iytfB@t4O%p#|Mm+VtxnB(LFy0)c3(}fTL~1|HH}L-RTVD@W4j04r-kI$IgK5u^|{BGH6ilF~2_t{}?n2>af)$Zx2nBL+H-UKnuj5QFecB$ajZ-uKF zQ<%q%*7xum1NIAXqjH$9Oz~stH!!6lgdo>Qtzxw@dA7Anr5T_1*=uw8$LpVS{p&w# zXopIW6}nnPMVN?k@~MJfA31j`;-*-Xx|*zu9#Ybul<0=MO4H0{wFrpi?IrglRM{oQBrXlC+edZIilv~1{!Hz|WvmM8e8c{qHm zye3OKc_`#vnNA4VlYkS!F@z2a{=qiSb8-vz4Xl~0Ct*iLd2NUa&7Lg>fTMb!Il%4p z8QF!GU5VNj_>m4_JsT2Tbo#x)XRQsYuTNk{ClUycA}!V)MKpSwDA7@l2xOu+q(57WADz#cf#4V4<{Zdan+UR3Ws7B(r7ofgs>Z`7FW7)|ebV z`8(4cZvB#3rS80J>A);`*v9!*k$?~B{+=A!`5a^v9D9E3FZn+EbZ{RN5WJh-J+!8U zBNsJoQ%#e*g>n?8kccgmS(ydwC#_t$vftkIU_VFkw<)|P-Q%(*dK$e*-Y*_uH{gvq zp?6YL^OSzJlBpQnA` zgvD-ea(1epnv@9KU4m7Pqz4HHuiMw#+OMnhTY$5kN}qQjxyeOp|Er6ZX3u+6DLCsm}8U2|Y+TzR)-gTbEJsjjGXm(^v5O zf*n0fTgQkfHqkVRy+dO~rP;}vS^kTMWlGf7C08RfQ)-8?NuYs;Bx4TCmEYlmc8%mJ zx^aO(;jMq5eRbhN!2h>}ie_Bx3tknR6hL^JK7kBl`pw2J`mKtxv3_b?CWLwF0iN_y z{_4mnN*>NF?9m)RH+3;?$?vqfv-v|ZW5x|v9RyaKz0bC|g+QSe=3;$Gq{U2l1@326 zz@xLH6#7a}00Vq7h?58+*;-`I55t3SwBl(~41CmFk&(yPOn4y+sRZI=p&R@J)*$XQ zl8ov2cycQOF9WUh0#XdM`=X{$w#iQSSYeX7tlkZ-v>7En2*0{kwk&(|q{5Z>8Rq-I z$mmpd{$t7;V21(L-F~!b2}{mZf;8ubT~^`lh-&cRr7*T)jDmRYHDa$p8wM=(W^0p~ z(egGMU4v2fKzNl-$`aFNI0*Sfi?oh>Z!t+Um^WG@8j7V^E_rG}KUkcY;qV>gRm9@QskRKu%TKw!W))%5X#Y#$c&x9;ST%5hl9=ptG-M@GCY z0JLp#Z5V>{fLphI=qq{MM^?Y_@DVQ|4@kS1pN*U0GKj zPQ5qrWIy=LFD}u!bi#kx?&Gdk8Fa-rW-yvkW}iz z%1^88e(*TSAYq1+^c}RJ@eY9mdjhwMwky>Aox@Rgzd!O@V;A8X_OS?z8_`G=v?(#OA+LBrg! z-1MT0kU-+44%_uPazPcp4a^{%4TG)vR+f|8D-Vp#{8UXLu;YI|qsfvfq*Tc!+N*i_ zDVhiM0HrDl?ZjuoFu)O!yL5xJLh`X{{ie+uG@Te+foB#wn^RMtlX?4C7{PMjyoZpI z-UUy}6ZNoER^)t4XHr)3REE3?aMb{YExQH3;gl=p7G6wSj4KWFlUO?MN}%2rZ)eC+g$qA$qn_o~EXa@^b

bic$)4L<2a?>)8u$YTw!{aFrFUN=M=|LrxiYsGCaIII#D zO~)GSrfO{vUA2#Wyv$8uHaNa01g0kAw!l!?xuo+uIs2)AW0Xr_F?yV#bV`R8D&?R{ z--{?CZ=E8~9H)YksW|1Mt;o)V{A=y3=>ra#XL~7lg=>4;)$Td4rRJLzw15j3d5dUz z*X6b2b^7uCN7Y6^39=oyq zaFn#I6S8)_wz#-b4O3YkBcix4IbJ#+~$Z7 z1z_T@yEH#6axZ|6#}uH31`Oo?(Rp+g{?Sz(U^h*(jbxaa#}Cr#PadZefRQ9*qp?>d zRCgYj(Tx>bAdh!yGmzw&znPlXvcAnZ!@(~KW7&A%4a(0}+;vyOjD;l4Dt+9IW?;ClE)$3<9uwZ_`TzIVMvEf=^LU)jI1>u{mIe@{1^hY_J(R5;ew!f zcRGjzI9Kj>!k4i&$F6=O9!(wk^B>G$#@v`!#n4Xs9=Cgube3^_PZ9T~)q@2@)tI3u zv3jRc2fXGU-i6rL-W6@bxpIvXD0^`XY)h!boGxX?WgPdw0_<#PlaVITkIIF;zxwrP zJ;ZB&1rlfxifft6auL51<=78O)D~y3_8k`7PeBfZW(mo*(MqwE65!5Y!FsHKdwCa< z9@t4LXKjFbTU`gpK-hARD*VI~zsIO~b>#;xfk`}5uaGNYGdIF-e?hU9{sSMXgGdoLaz>RQR4h+Hr3n^?7{(^*<7~)PM>t-)v6JaBXE8FCusM- zRMY-8XV~tV~3XNnykfqMOP3+X-cvAKPEF#lB{Tc~aO?+-%>|~9{Xi$oO2t9c- zbY(JpQUTi_OhtvVF5GpgnC93(-Z<08RromZFQcDfN=V~43IHK12${?A(q>mIy1t7q z(=CsAkf05zX|MDZ4!l~d-KIy{**=|@YxH|OnHg|yw+qNvfSI`+l>@0W|4f%O2$vfi za%)C9EN~jJ$>FH=EH+M~;+&*Tj(8(R8Sc%W;sQd;0b;&Pkue}j48Ft<5j^`6&O7bB z*!)`+0vO?kx96-OsGxab0;&R(_)a_&sInW>cf9~@Y(%W0ndZxUBGut#v{nKw2~ti| zZgodnIjYL^q%4o5gx%Y$;x_$+gx(iN@ger8g3{NU*9$Wgcg)!z`XrTJKoxmS!aEeC zDX20m)V`o5lnfPrIo0x(XVYy7MVl7gQ?D*cWWA3yoHzCY$0N~JtzKemLDzclpl9e)m3eO@0 zG#}V4a_WTP+SB%6U9&>=^l$rwp^LhCmCqQ%hs;3l(N6bGvnN5yXw(ryH0`42aj;F? z)gP3vB8_=_o9pZzI8ulxc|}8(;t1Y1lB7CD8s0v(ui*4P=8vg9r&#|9Su&D;tscjUY&^yND!oU61xz1b-kF|(W}4Z(9yiVxCCDw zD^}A_5j4JS@Kq~^W(lG}Xmy0b6ZaoczpY#c^f)}FmH2vGZ2^9C-y>%G?yPx@(Pw6t zjaOlx1PgWEo}YZUUhyr$UD2>u^(&-Xabp2}(oLxTs-NrOe%^F#kU_v=f4pnKO#XVk zhX5g1n1b?K`KKkW`o^jNYXP8l;(Gf2=##*9`AlNJ{%_>QP;;d+B}l@`pPv zCEtHm2sYEc%Ynu#6KJOyt1aJ4u64g~*l=JCs)&yWwutl|yg=@8XV zEBf2A>9{8tO>X=)pGwhC$7NpTSdjELEIcS-(8G_Rn}SlRUNm}Fqr)sH{`G_48X`!k z3XXjVQc2&cunGk2dk?8SCC{rhW8dIaw)|tekNmy}E=vuFM0wD6RegBaea5X5k=P=- zyGYs={&gqcvwc@<6H;WYJVuy@UmK8Hh1>LGaH@HC{B(sXhR)m>r5=!|8l?kUyIX0&_I^UHE7K7L`4YcW+c9y$@ zu8cuK2M@g1u$kGqP;V9T_$aC zkyNM-zZq|BWLC)c%;t^6AOnG^>{H+cZPqn)x zm+&pjx3IF4bKrwx@j&49Sh#vI_|H4Bu4~5O-tN|dVlDni)mLjz^1u1|Tn#?&`cNvs zhuE`d+I&c^mrN6_ot+IF0s>0+C7OYRg|X!zmf)rGU~CDz9L|ojM~+{XYAu;8?L@O( zy4#SnNQ3Pa!gGC9ICgtmmosIMK24fEYti~Dy!m~E^LBElM^SdmZkwhz_W7I@+Pt+IJOYFX3HHHI*z!+S2Xp`Qq!vKOLh!vDr@E-Qf6ma=N2-HST-Y zzD2OZ^qM93Fvl#%<7Hnqrw&uE&@qQw$cbdW^%OZcT+cId`*-CPHR4YVop$-iqR@QJ z=QfTh26)<)uR*m^_M7h6`IDPvhF8{rid?X4dxMj^p~vCxhnIvgC%;VJ=Sfy~!b`dd z$A84smVdPgwE)TA2`hq&Nhb3e51pgHiDSy&F7U0I18JJn=meRACADMQ>5KijawJ{) zf$eelIK7UQ+fP}cL1tT%oJOuj0!#yq)$7IEkV52Sd_&~;0|ZT&$wLPGraZIY<~(aRDD+vZO!O&zB#Lb0w8 z^4lXZ*u0fMY#<$h;+Bp@fYuK}&5i!j=%QX;x%n;s(E^^Q z=k)(hS{qhYD#%8dvIC?ehc+dfbs1E3+z1hXcyRAd%*lz#v{u?MP^sWpXA(}f)U4VSuCiA!9Bqzv+ zXIvpIPZVsNn>>~57A|Tblx5prZsK0-5Lu4`JfHuEagF^$prBX2v8!0CkEre%B7I~s z!XclNd3nys$Ii-;B4Z`uW4|nbwMu2B9~1)tYyv2^C`IG-{D{I=6{pH-*cbE`5E~u% z9(zb1i-Py}hUptjPVqZs|EgMNm5}$Y%1T|bX#;g)jB^~NC z@Iel%(wFMJDdqEA^i7SL|Gnr{%eUJ}la_x1Ve$IxedOR%pv~hurmp*iUTJ(Kw!>lIw`HeK05bddfjNa*kAK&f2b$%Qh>)2}Rak%bfX5k8;WgDIIf}dJhe{nX)!#Itmujq5w(j?4h#8&0w~(s$`518d|g^Trlm21@)6SeQ3U#B-j=GO zyRrZQ`C&3HsK&^my9sL|eJ!nRJq4D=HgWNHfJ%R0W?Xn7=A#&DQ>BL^UjW8c@m zW_L)rG=8g~{y3JZ0?bw&Gh+HB*m1C}CQel`Oc#Ds6p|x&FjMl6=PQFe%9dwxya*i7 z+FbAA(=*b#_Fw#992tmWfS`TjCer?TWy{mbXja0u#piHBkz7Kuv}D0;*6)V8 zPu!(<`KA$_^{;{Pg>Yl>iAyBZT^<)`MH{UYXljq2WR;noM`q|Tfii7nf$NtLxsD#m z@xm3}M@r*Ra7fxANjKBk?&pwMbMAirXc0ML;_X~dird*?`8Htdj*k$Gi7nT~-n82i z3&WP6mlbG+4IejVh}wIf=fnN!!~=UgH1~@7YG*d}4lzj=3*lxj_1kzMaj_4SV&=94 z9cd=(Y{6pLAH#ZLF$sr%jK=5rg*$zni&blLO^$z5jkK6mIeV#hYx=l4@6K^mCN;e% zyd@RCAJ*2hP_QGB79??+O%;AmZTl1fkNR<=*X*6DopZvLOb9bjqEP6WT?vfjl zdfi<* z!Gt#G?DPb?bJGP$@9FGR?*8CM&8`Uc|K3kb-t{>Z{HOQc?Oz~sJuC>Z2IAQ|d7Q^? ztOyqW8a}-QKxhgIj>l~LV{xggGAne#8@Cr3a52iE3np|hB# zr2B?JYddyuv66Vj5cmw@^U@3B@{*jG+bfO}=}IhV;C>va!||byB-RY@q~56-*I>t; zfz}8g27og9r!opW6_>zeaD5JBgc-?v_UnP! zxT1IpqWq^FZORiGCmv$_jAB!_(-1sAqr1KsRH*tt&Kj-u=MmiIq2?lfS7wUrrg8pg zO`c5b=V%=d^0cO`z^iS>Bxi%4T2(=OA`+Q=32wlK{3mMtO)ziKLK)_HoDe(h+2TD#Ff-%S7+p`1Z zkEijyhCsuS&E;qDvx?cDQfvSZr8MJh^;}e_Pogz(`)V-5`BL#bT@)NGHzPc1_3*6n z^y%uZcR+B0Q$qf=v(ty^<7{GVxq1Hiq&1VG-!&JyVvk;$A}WU!`Zkih*eD{Gzxb2 z9M?mSwuSC840&>B4^B_BIziE?(N@n%jABJR0o+_+qSe8kYHFGI zEREExUQW*}oY>(H%g!rRcFWg8@AV%1tQWoA!;(q*@84u>-nW^+`%d&_&5h^ajbRN$ zu4o{Ar@hIMg7`GK3oW?;c=Ln1hiD-8kxp4f#Ag`cm_sw>f+I- zfP6rJE|A^vS1kPxEeWRsxs*%=e^^pcBl}Y&LQ6US_}M)-ql&cJYiKB%(81z8h=6r5 z-x+0S_HGC{0Z*FA!0MNJLq+?DAPN*^L$s$aJi!K9xDPdyLPFgT48bnsBoK{Ca`s51 zW(3Mo^~)w3Ufnl}Ni;}xa5Unjx@|tAFFDt>HU*dC=Pz9CgoH=PbOt8f-+A9eKY~1Ibkv8CuJYjy?$J?<{n3D zExELoIiiYvqb>itqxEvYZ$b-#0;{MjrrBunA6evM=s8?dN|!;pM2&kPo|XhYF>qr4|+6vyxU&e92wrvU~A}-+U*F& zo0{#$tFzA@#LAuaB5o=cEFbA>?7T1H#T~6jbje@HQ)E9rN4j3qgG$6udE3RHFRmkrf5&~wAyZ^FLVnTu%Aa5+BS8TukJfO;?SflM;B-Hx>a5c%kDj#o@2Hu0bkYLUG?!@>YwlD zNuToGAEqC+>|9GbGHu>K_wlM$cb%QSI zv2iJ0`@JGDz6hm2Ny6_Z12idVyemyHw~qZIfyztW&x$SajyV3}l zhCgETq69Hlr7YG2^1487xv$br z;S4#1!-tss+2wX--lLK2jW-VKKm|=z%L|Ctmx3%&?DIyQIHq~F+$YZoG@+#0PDe+~ zktCJ|^)b^@Mbhe$=itC5gNsl9)ofKgtvfGZR?PAia(x6cb7)xEJbpg`xDj+WI!OvL zmsxSK;3J~`BGmZz5C2Zmu4ctiUu#5!7lWKpNZk%h(HQx}jnQd%EKLxnIdY|lbrskF zjX>Q$rPGK>3u67frgjG~=pez|k3hS@F`bw9+~4~NWRRbD3s499bMBQw6@HOUPksFQ zl)atN`c{~!sh&VzCgcf!6l(4YqKIE<$~pHK zk6JmImS)PuRg_VJGHyKh>l@vg-Zsy#+1TT?V9qid12JT)W66!cg%GKcU}gnzfANzB zEG}MYq~bBVXfmfAHmWe`eal?*?>h$+SsLCx2MkCn@m$v9i(9KP6$j6-QXgAuZ;O_m zt@CRe_z0m=auf&fbMsF;&$oXwo<840uWT;e#L`yO9=4e5Lb=^K3iP|<|lX z<9A)b^vY%!h+Khzu68bY(12#ZbefH_?Bs9{!1T_pvfJ0N_5eS6dy;M8mEVio)7MG4 zCb6#PbIU)_L?n@_je_r6`yh)&TMFt*5=Adj)0V_WTXH%`JUS5G)f}V` z{ILi39}0cE=j3beNBUU z=HG+)#(bJJ#e2N=BmlT&t3GaYi(<{H=`H_vy)e!jRP|A{)X>Ag$V=iSan#OH88Vs4BE1 zm>EQzFXEbJ1UH`~*o|KNkT@x2lEPG9#FZ}!S3I5AF%t*}GyLm0P^=$N*o_RSzx3?`O6wrQGFjZmN6|l? z-;obE^sSizAqF|Qiz>g!ZWM4H67cmML8ckFsk;Au1-?Q)MSB}{ zROm0k<+7ji)PsL|ndH?DP`Y0|-d8c<)N)1(Y5K_>hn%6#KCxRN#Br0Ok${|h>4N*< z*;R9b?nUC!i`B-{X@L#5K#}wQ%4h$K8ODFn^^Vb*#NYO3Y;|mO(m{tE+h(Ubww*k& zZQC|FwrxMLZQDgB1by+7Y`_7Q?@#S)^e+wS=uh|dNLOqYuu zGtHeAmuU~^xo3I#bg#ZyjLxxeYu}@1mo6#bW1J^AaBi)&t=fEPzXL4D2yV{Un7Xxk z&;xY%60dYxHOmM3Dc(QMu1Fk%*I_T>Y^JN&vfq{~R~=@qr>ua((6SUuHiN3B0xVju z4PhBVYC0RBOGYR_2-X*sZz(UY-1(U3>tx`I>hZB*1JOQ29C%(I>b=Nc+!d^(G^qZO zW|&&!?(D^&O6G9Uyx6ogWcUyObleDEI44pbW<|F$FB8zc&#gslZNNK38N*~WO1EM* zaYLFN-FmXzPE=;G>wLeTX6@U;(|*p#BB@g5t~(4l0hUiS?|WLto*R1;h6E_8&`P{z z&3Jee@dUiASy%G1$ucXH?NDz}-A`~kKW6Z|*q6c_tEKgH#}B2KF1kGCLB}LPxB3hJuX|;2paU zq0eksg=!@IJ56bMh!exqIU6flYYq9f51VTMT?hSO8maMygUp;$L|LEbsn}-DQ%U{U ztBF8jnn|eHN-a;Rh+i21^aOH|@P1Bn$F2^tWjUe+Am|gZ1m67|C3+<&w_8y)T2K87 zaJNTVABKm2^kv`m4mkJm@vC!>3h>hwYI*lWG~68}LiBNeR2cn!p9wXSjY(35f1u!I z8jeJ$myQ3AUOnHkpH-Gx0g^nqj_#NVvLdY+uEv1Fi18aU!A|0|0$k|X1~Ayxwq z+4n2_k%RrjU%RK#p5GTo00Yb3&(w1@|8iU2ti)bbTv5vdzn0vPSiwzWd2^c(N# zv39YqV~Y5wF(OSR;0BoyG8?G{{??mz4LOO}^zdnI?3zJ38%0q;b`+UW>$k7GfFqra z;xSSFSMBEW-8ru)=|X zXTI`V*;PDlLXOb&;G?%)by6=?>GB+8aCf-nWq%#xO=zbqxLxnz)`?Z6d^%I!-o4HR z8v48NuF69YK&2yPB9G>PV^`L}@-&vk!;yl2(x~%(cw3*fatjc3sd6z5ywA~4`h0o) zS`q(2eh0Gs_-oF|bGf6z^)Z+-9g?RT7Lc`;@_Be$UVg)HiPo}+!&3t@*4}ojvkHV+ z650BzzunuW86JSR#4e-Q(pBeZ@unAhJe^jlyXo%5^`qCm8bS9wWOA08{)HPUf78r% z`JzAcE8Xqi0rlMBC2$SUjAMG%uef-MQcU7b2#q*-icW|h#3{IYwrvKhls!$b*&35S@ev-COKa7&)577DF{S&>LrNB2+?J5 zAlO7!*hr6`+=C;1e=PX)5A~?3g(N*NH;GYLM z#A)dv)Wt>jmpl?A!^iW+M{i^&~g+G)Xv%cZE?{LnDs^c+?3rA+Z>FmXg&h zUIXy2U5nAkJ}Vd8I0^Ya0s+r8umvqaiLpK9?ZqCm!n5YnmJOk!)={D#$)guipd6ZC zKEH?fFMo-IvSk}=rn3{);7CW&ZNNI>T>sXqQsm+-mp%H3;dSKsMN%|T;K_Ro0s>yf z*k=t{-0dh3d&{9(Teejo5B8jfS~BBB_W2dG^`g(2m>&5ICgbz!zkiSXXKLLzEf1O& z|K$%#MJ7U7q3+3JPO2wUkuF3EFLQND=%iyzo3WCITW=cHQLN?9;b8c^hZ$BuC4jFW z_kwAP_m<-=N855k>QHA)hW6)N%4K0h)b{4i@$TX=EX$GfLy`WTIYTEW5tt_c zKy)8mz%srNbq(A*;Tll#<5qX~wz(rIE%Na+)_16`XWjzVv^c-^Lxo)r5JT}UB3pz`tNy!{co)6@#mwxJ%<0o}ysdyY$WTJAvAGE?ulzeTES5NLQ17jg^ zr1O2`0~D)p*D|-a0VkNFf@Re|?#q&v7&j3-8{0VV243_3XKYyce-SYCT$q=KrUZD5 zQhd&I_7TOy3b@*$ReS1OGSyeQKv5Yp5ft1xb~q=J&Uh{x6lB4D$Udlk!gmbcqsx-e zj-9g<_d|Exy6ftS-y0JT1NH&wW`Hq2aPJL*6}gKN>CnNazd{R$UoDb0!~vO#jI9c( z@EXghMiQhi##w<6%K-`?Q#?<6g zlzMEay#6-gMk$!nhW+dF;QLg*lL--^<^?2&^M=SEDUI5_#1w25uhI@Zi*+p zdiLeIY1<;0nZGcu8n~7UiC>?Zb14e$`7#4hpn%V$QV8^@_KkB`C1du#&?{sgm8LbX zK^D=v5Q7u)l)a*Em$|*K@uECUCwMw(o;qXAPbj!jk=GJrNb&DOgSVwr~3DT!FmO^ z%E7eLR(nqiYdhnr8KTJ5&fZz8$_1iC>4)Y=fj6z&g6HihtCIw2{bBIZjm@j$+tE!> z{c*mb?=`XK-sBF`iG_yY=eF>LD!-TWA+=X9Dop?W!xKQK!;KLM^gLK!T|Di@;60b1 z!KaLM^fN!7_lE#YmDO0pU*i9}{l!GzCP9|Y<+)5$Y~i)l*mUR{pWo%^Z5YDO;uUyzByjTS z>m{$V4NX|M8nc( zPpL{a7&63D8ZRW&`=ufqnE=5bH%A;x4}Qc*v95-Jv8_p2{S8@NC$5`Fn+pCeV)61# zn`+l8lm~J$@ppcyIs;UG;q@6E$|S45RmJonJlN$L{J*@`MzG<$IB7LEItkJhe9bY~ zz&88SAh+eSVfR=G1-AF%XX=u8k^{JxIOrxLijPn za!E`GWyN#ENkLUJ0~P2v!v=Y)ZML{arhO?U)5kiLt7S~!5XU)?yNquw)U~vH7DFXy zCCSbvQ6r@MxyTrT?v{DhSaiDANdw@HDEUC)$dC+f>6|#YdLEYUt9YK^zsiZ?BcsR~ z8TRl3w0YK@corw)tfk1E(A>+hS{mwZ?CnW1d)Um$+8)>pdqKPbgPKJPj{R$;2dZ$j zSXrZ3zc2&4Ou5&(>nX0nj!fsb0Sw)>6!9*dDUY*5Ih`q8-ABFtRJWkADtVEk6qplwzq(s4sSa^ zCv)@W2{HVg*YL14mgw$)}RY#`- z(2oEH%JXK(`6UcTMbl+!!Fl8@2zxq5Q@C>@(JVAB3tkA4z=6OsMEYU zLFCs$5~3d~CD{V+y9or+qiePj1^X^j6aPP{ve3DIsyb3gWs*$C)MU`WS-*8I_b*w2 zG;VFjU#xt89_|bfLax|x5cG38I8axi0!Iw!+0~SQYRAPxYcDg-c*t=f_{a>)I! zxrNg0ekpTIKW9g`x~Z*dmpz7Y;O-+EJ+OR-xC!nmE}wDc^-R0#JFy>u%(xy zXeel95T&8J?=fBsbYxOo2R&?j;0?iMMrsc3g(u*dR4^7V$&w<|xV>C1Ta*7T&XG1| zp%#8GM1C$M8xTn>U)n5?IQaeoGkhQz)IJ=;I$PZB>a#}d zj5|>`@K8dP#gNg~**6Fll!_cD)L%&aLy}!&H7D*=iu*#JNS~(WP3Vg;gL#4Va>bcN z1S6v|(ibgixQ*oMuO>W+k;j+N*6rR9BWAf5*y`XTp9Qju=4?>^xQndK3o!y9Uw}B4 zLj#;{pLr9p1Q9tg5Mp&D4M0LtmPpDe) zZip@)<^WeAri-W58^_l?`rC{X^Lk`fZiw7lo_n`hD<<>^{(vs`ybYoT?ttm8`~8JA z9*)b4Q-`?e|F8g|xz9RhduN7LXHyP@&WFKb0p-DOl$T!XR4$FM4^St$4 z+h2)GVtxVwnrmF=*Y%s502gt@YO0)c)DOpE=5&7hg{>DYCx`kjd(&pV_lebjdxg%s zBh^R4B>Pnw_V+FR#)qliHWmE>m9BONTnYUmLZ`Qao+p#D1BGhjD`J$Ur*k}U^QNUs zV|C)^(-W3*nR?{hiKWX+?XJd+6J)RHcDJisjp(mDOM-M*WbEDlwNWSMe>H~G$1?5_ zo7S>1HwX8mPX=ZGutcl(^K7&5UjFV!rY?Mi#*cea%K{TTqtfzE>My94yG@{bL+pO& z&+f#?f*PyW%#ulJ0WlZVo{5UOIQqksG6^;NtvZYm7l4pM&+~^6V{)!`SUtA7wP_h_L2fS22pP=1IeD5yZeL4p&$OEQ;yc7iY zZK#v%A4(AR3J@F| z@@L^UW9|$6VEWJHqh$$Lob)+5mXSrkT_|7A`%zDFJK=p{Dv+Mljb;7H?qn|q$tp~M zg=B3o$OX!DwC2BcBarZ;cN! zOG3Xs(A0c8&s#r5(do8zFf>1$ni3*>?U#l2=DO|RgyX$BUPL30$9%5e%S?|N41HrmK4514j25%J`kKR zj%v62Ww>dKdhv6{pv#SKA8BepO24=sRJ4m1G_1t|BWorUnbD;_G^a7bBk1RAQRS+X zd9BbX0>OqP;hR-TbjcFwH2l*vY={1MEOdhYbxch!g%>7EY(}2UTBrvl)~AM* zq6kSF$S2PWL9Ngoi^_LcOLiy$k#!sALuft?OLSKg9JMw<;{IhoiU$UQMB2CmXWi6~ zVUZXr7S&`+89@9KOd?FP%)kF>xfvDkYm7)_gRf>#rq*tol)jZ#G+g2SD*JUz$wD1orEAw0t}Q0b~`73u|2ks#OyVTNy5swQ*9}wq_Fzk%}6?I_y@UQK2{2j*dGRX zZ@w~2gsxBeZhP8xOU`O2n=?5-6EjkV%hE8{ajtHLf>Cp%b)t`b_2XDdn+#3swkD2A zVaFxch{cy=`;a;Ghp-NplaP63P7%u%?wl!B57^ib(Bn%;^o{Fo9dr=U^B}cx?yB33cyC$VnJ8CwP{rea4~3ZlmEp!X+R2#jNVOdm0DGuO+>;t!G2Ho(q${9 zSA>uMjPFIe!h&F_h{rZQYA}Nc#_JWPOuC!z1N2%f53|pylon^2A;@zVu5{Nxk7p^( zkBXIQjRt`LtFbC%Wo?~Jl0OY$un&z>$re^!Lg zY!HKZgc-!TV6t^P%@3d2$)RJaG~A0=K`|Nv?nNGaZO#ntewd4z=nA}OfKffw5kOHGddkDH5C?o ziGHXTs9Yk~3{_l}b>EF){Er#nSNxx;6%+lgR{+{UBoa{b!3vq_*D1nIRwht~u^G*l z&dub;yc7+|xPhG5`;>oiZ&eCRHSJyLya+0yXwad-XX~5_riKwM|0@=5UDjM<_@^q@ zK}RpTAnA5{*osUA5fixa{?s`*5jCVIVHIbO0(h>>bAyOgh5|}RkTe@aB701YGv2M8 zo~;Lb4eA*(I@%@zmIrG>Zc_TvIM5Wbh7Ih;w)zI)HTF2=4ehm93$~+h_&UZ0m<70V z7FFf%^efnCyo1L~Tlh8}Wd<)aU+kDNb#JRzQ0kHAv;J)yENB2}b(1;Jly$|y@~G(- zKT;eu-#0zLDwh3T)`znz5Ma361g$;7LavXb>KzT1o{?ARwT*Yc8(C{%!@jG>;UHgi zEph}x{wJjvQjvcP%eq6R&p+0?$B1Vy`lznR5F`1}D)_xSczqPj1*Ru9FC4!BRxCDZV2G}GDv8>7WXW8pR|s?p8sP0RC1MFz#l7wzSNWP@+~n5aIB!B3`s~w)A%8#Q>6LTJ8Rd2sgaJ(Fkjv zSq~6nLzG_XPw;Up_k8%xc9!JcsKhv&gQQ_9(Z2OF=iT|`{I1@kOa4GG!=vE%BduzF^4;=N??ZIem1FIAD)F@?~>13QvLt;YhiP9!MH|r2^MDx5lAEG0e-@4s;Bs`5Hhhq<$5{|3=!s% zQUzgBbC1Px(dyl8B?0I7V&&&|t{$l@LdM#x8V=}e6jzr?7fKjM?-ro2WLMQdHbkG) zc{dV?v3xyU7@dG(@&nikhOLDw0mCogB3Sx#aV$;2yIB6pN`Fl;f!={z$m$xe}E(0Mv8FcOM=tSD>N=nKNluW4y|5Ksnyk zfCs0iVTfu*8%pV7pF?rv&kPQJc`RXxs4M4ssQ{UK06SwEN&|M0UFi7mGwQFcN5$F# zuZp#)Ic%}|?3u^UpI$vd{08+T`ljFjD)P8?%;>K$kk)eZ4F8~6V0osfpFk7(+bYew ze)4EsV$t(Qm%EwFfZ>{xq+Q}S9%xod*O3SaokZ%DewZ7qd4oM3<(NvYiu{ZS&$@;7 z{SL7&(G!W^j4Bi>>6Xr)@B;HQH;n(y2q}sI&qgJ-751Hy+KShw&?tG~C=f>u+%Y2c zB`DP!^O2E3Sn`};vRECw(n?)8qk>%Ax}n^(^n~ruROL$NvCay2ev3iiM#XdYej-ox zuLXZ%-tC-GS30uT9tVnU7S74j9@XcT>M2LaEBvd(m>ENg|x0ddMmDizJI&R$(H$vzDeQu7wolaMzOV8D)MHHENe-OTy z)DIMog8QrgMNR)VLDlrU8V?LB!o{o4NDqKY3O;YQ5E~nEU!9T&^o6fSW)rp$+JrFf ztA>jgwu07kLjNIR6@z#K}Jeo2da+Pt&Dbq8OC{@SUHwh<=G- z;0!d~us}J3`IGwn5Gue!mRViB zRo(SbThm>%!fLg&lxbx3C51y1M3pcsHZ5+~kTrj3kfs+#T=IU(bf}gPJsdCjXOS*h z??Fj5*5CjB+PWmB>UFu)O*K+T&Bo}CJpMzZdp{4pY?mRUnDPXy7u8 z2^+jq5(tl7#zBW@xvk~Ts1}AYB8>Eg6zv&~Vo8N}lSca7I&#bPoSHSW3(s5GDSNhx z2d3fS&khj~A(cE5VG;OOz|QWah;=J>E@>!&)npNSkQH*VtRTV4M;`1oGO3>3E!&K) zfE>F-gaUw?6!BZb_6)U@_-iD$aT>~Id*=O! zXucc_PGy?8vN(cG-_S1HtCq`Q^+P^cl)id@8e)jzJVoYc&dexmRN)Su@I4+Qm5tHK z>f^@y>fjc86{x@&lJk54Uy~kLZDsq-?rrbh&bpxCC5hha#CadI^w#KXbRIHs57I@x zQq$BJZRzIzN1hpzHFB_G&l6veJ_u>dqRz58VyM>BNWxo%xoRs`O2oD zO*j8cXdY^A=2pzKsbY1~CXvhE^115|@wiZ7ezs(1i1-f+kh|+|&g9r6+>``4RcjTK zzXZ%Y8*~|p?FeUWA!A2NxDC2^^xL5gB~a@hoH9wq(`})Y>*^wo+kmm8FqMwC4|^T; z8C#pFmRDObaHuRgwNt1IoX*O$X;&p~``A00RVvf=`|H<`N~bse$-ZG7=MIosabQ=? zh_)tbfK4_IR;;U?e|}h6WX1ZaRQfwlc<=>YIq-K7!vDGD1d!!s`!@N?4VPXI8q4HB z){QtnFsisF-Zj4#B2uD)2Lw7OW2iBG*Xvb-4J&mTLY>jUz!ArTjAt98Xl;W3`R!3y zs!l2ru8Xo2%GgC5Jr=Lcc5{T}%P6)5Ia*nqkrA@U4uzEUSiA-!@*KKQ)kJu2NUSH2 zQo{-cxWbAB?hBJrn~LJ5C!jeYK;b=5LlO@H8zH^v@lxwcN#J@c#}cGr9^Dxe;Q;ut zT(-_T3J_t&S{6=&lvCsSt-DBBy>;?mJ)^`q?8|8pj2&0wLds3qc_3}ETO4_gY-jv6n3c8#o`%|4tsSsqvMFqXN%+f-!F|8IPN{T=iM6X); z0}dzcH$p=Vv#W_fdiFKn%t^aaIZEF3AJj3-p7dbe8Z`%*(l`K9)-*pUN`lgcn|YD? z`gk|zCIuojxr}{ImHcmUKO=GXx3S165uSx4a64JZoF`j6MZOHDOdr7S&*Hkb zkrs_5M(A`bDuP6hxOdpHM8{mCZ+3i-h)oC_vk{`YSm}4D>lSP4a)n6MC&W(nZ!!}U z`AS#=4I_Ak?#QVSI{IuF5N|CTNrF>8Uqq;a&MY!N>fg$7EZd{XN1K#8eNK}0cNv4y zKlQUe?n_gE6`E5oB!mQwgMg3D{bAe6H2m)Pt@ZZnQ|eISE2qPdKBo$eQBCzyuboqk z!Kdf~$>3uw$&jDZ*OZMl^Q1xw3gr)mc+wT;n@-OCl4NHCn#^XF5``2pqz?6SNxu4WBjfoLMI9HWK|iP5`j&wQ=x!j zeI&4uVX4ktpOaUZd$U?a9nDez$-^#122|WpyJCJg+P|+V|EljJI!s@c|NH9al&0)^ z3L8{eX$j)DA2q6;q{g1KqJzJvzB$JJo$1#4!>-bi)P+N4iEZ6d_y=?4eNeMEne$~j6n;PJ*OS62{&&HFqE9pap3zlFQubbcp41Z5RSIY%LInFER`qa z;m56hY&sE3Vd8{;h`3{b+Wr`XYKBnqKp(t@yE-O)4|I$setJQtR*k}-Gg&QZ?^|E* z2^tC<>(L-v*-p`T2{if%JuEm7{7U}#(Qk50>2eyVyPG>L|FEKpkN*!70`&8pD!76t zy@0E|a?hc_$RgZb8m^9FFctQRB*qa;>piJYp-8;x*%H>*ILShTpU{&gew|;4!|`{dl%YFL`GF z!}ZR!Tj#O8XmtKh!9Ew5DgC(X#qB@KwNB@^?>^THv={ORksI12Mr3)s%Vh(rA~ z+M|Prt#|t~Dw0iIbLBgqbnn2lv*uvvHDnTAdylVni;(y$38n-L;gJ7pOi1 zCpn{9S36?wzISS7)9&-ETDw9S6mJ>>dGGFBOB3qGdK}K%E z6RaaIHlc-Vj05BN`6NwxQf$A%URbw8x72RSw$&A@QGr-5r1j~eDujo46-M7rgEk1T z$)(6+TAE1641eOa@SQ`q2deA;l!KGK-ZGZ(DGHRwH@x-2X2*wc>SYMbNCV`mhk!{A z!*lcN-hC^wtAGl{l&twqx~e!;%)F+A;Yy@lA6pFZ_U)KO%mZyXo`?G~!#?|vjvCED zo=5nN3FR9XKCBtbWRQR_jd5}+?_$z~;-qnZh$D^*;iRtSn=*u(I}#*bcxS!yX^6$}rvn!v zGqZmoE;v+4O?r$KRR=9=_iUXkrFLlP6`N?VDSAu^323Vt_3a5}{FW0y9*zpz&Hpaj zCK7ZPR$3nRm&VcS(afMsJQ?R2Q_wY59m~ifdU7i%@ zJ0_AvdEE6wCLHMTYeF!k$?)^u@q9d7&yT<6QD2KNS)7wA;Jg$2rzP%sO z_7*$cad9pPy0bAze3qwPYvueXmRmY9A5*85>$|Wr-MEci_zrs^SDWwKms1Hn0+TP3 zVLsL?mgx!YFN0UzBwO66R#mJ!ocf7i4VBNAUm=!rr6ko9hEMYRnLOvEVT z2|V3;T`#9Qa-I4rmY&S;`L}Fai{08j_lQLj0-e>Ja|bw@hg)i%pq=9+pAXlC-Ai%% z4pYE~zN__``lnI3m!$L&>!i=)On}FlM1j=)@}fb#fu@NMA^$Rec3_-*%qeYolty{d zfhQA!xGmw9pOrq&_C`;xX4Ke1)Q{ZR>P2n2{}MgF?YxD-&Hnq<$nho-0AB&a_bvz* zgLqT(iw(hp?Qu`ceekQ1WOuZ$|8YvCWw7(9!sj(Au5T}UOn&(1t{jKGRJVdOm`B`D zWndB+9p7-K4>!$T;K$wxl-(cEpEIGJ3B&uUzQU?m+P7&6AQ_;h(PFSOTCJ8KNp$4s zycl=tPpT`Fp8}zBLVJSWlScwI$gj*ZLNn0R*V=MLQ{5=}NNVWxIpVYk+%OY-;oD+& zP2j@dqQ@7tMB;}dWvYh5R~-i<-f?LZSsN<6^ua2zFk`ZyqZ@G`ClxebD11LKe!)4-Jl$K}JehVU||O|Ap8!mBFQ*Qz*p5V(7@h6U<3^OaSAKY+w=> zK(Kp&)3%j&rfp&?u#zHk_vrDWXqSt0 zu3jxKX7M`N5!e7*;^}*86XM=FAfKLDqfR8e8qCn*&r_d36?x3^%8%iGNCPw#NA%}E z%NO20U(9@UFuSda{lE{(;lfdX8<@nyw`KC5IUb0^Fgj`xyvL(;=-XGJw9d8T>gH+K zBw*~eAl9;lNuk{VEZPtSUT)s%j^lH1^5yx~+FZEIo+GIdns%60H2o|3e4EZ3HY`_s z$QyMZgazwtQk%Z*5XiJ;t}A_e)bMQ4AbvONcoFa#fhDU>UMH276{$|{EK`Q=m#9FQ zKGYZtc-WI#zKrSP^h4HoV7A&CYb2m0>fh(wD6KD=y{2u1OorVH^;vtq;mATgbI(bN zEYuo{t`7?64A8lbx((nMb8+7|Pt_(&*C{x?z)SJ@T-?s(I5~|NDg`mF(Kf#p*&)p9 z(0WuEr@1tv4BvO5P@uwUYnQrJMYZC&mvB@ib+#pFBoh}~p$~PPf!R&fflNsRK*yKz z@dxjUU<6ysT1~Pd|6Tc>K@h?=4iS`ESWkh6q z4-Ru|k`FlT$?CPTP&F0|u zJ_XOd905W34$TOTno?p-YQ5r)Aa66HvC~n|GH^C-cR){1Qk;ESiNURu`DDLiMPo>$ zUl&ax8rulNuq|c|smt<6dZ1}=jTYVo>&^LA`iZuE{GEO`i^wl zDRmN`ovmc2**g&~gTt<;tD#2-)=-e;m)6L#%;#Ys&{U`|aJFJg!!l!Gjk zqX?cA4}rgEy5AaiW*=;X?fFV$q7cjMAUxq3WU^lpmxmmZ{XJNG+9Gg9^q)iK^4JgG zDm7Eq1b{+#9+|n7S@d=0^pT<0}hX30d|F+BiUw;W`Ff%fqiyt7S-7HKZMTwQn z(^xdDHUu-P4dbp+-)G4$ zg+Zo;eBmwpxaAcCNi)LuAcT+wC|dA%c$m>5zp#XQ*kUMZTz1W;hVUR>d=>G~dbe~*wo6>-ygiLMp}vFI9l8eI z38v=MdMun_@D^O4>CPQ3UABInemqZQ7=k+P4^@e3)riETW7tZTrL0wjk#CDS#0=fr z?B^$%b*)7TVLUH$8lE&@QF$4>2w%+v*K=aVSOfnuz98N^u zFxG(AY&&yddYkVpa@(r~V`-ry$o?UCI!dV^rM3)90|-b)_VKr`r|o>F_T0&AVbZN| z7C4FOwno_$F&z)f=xtdOPIY8)BOLlVy^6oK^*B#ww=IOJC)YdgsFy~KToXaq__R#Y zyK_2XSnKR*k~=kBL*bA~Q_2GiL;%Xm=5rQqN~2k9_8Qm|X>zTcc$R3sCjLAHN8%8O zl=-GRgF?5aFOPv{s!BBbgFL9RwntijOp*^IGchvV4Vgxvr{k2Q^UQC>=E*U25nd+> z5hXUW_W>72cJVIfMb(V=d@O;qll8Y2bGGDF|Tu*?$Hlfh=)GT zI~OuGIIpS?Ol#pgfLc0ZLxEN1WPf z_8tX#zn^s>WuLUlm8(77$}0ZbRw$Hy5Bv{ELek^zs!Bozd}sUkgy4VEg%V$4lIDEP;IxVvAi-i-_vUBIH$^LrQ!XS*>( z^I(AetPo3Bo9&(NDS(J-7FvzfAio0lFV={8!a4KmKB?>njAX)#QkbOjI2dw-zX=W3 z*id12Fk8{?!8<3;cj-U7w;dRW$_&9gur*McMxmlFLV?CWy4i$qIe%FLp3d!5nmlI3 zrWv-_Ld1>c=^q<&I)Z(m^Kb`{G4A~lI%tsHaN5c*OGmsMYGeLZDLj1;Ci9$aU_H2a z^1irccFrx3H->Ox`ZeYEhntHh|G-AvIL5%=+uvvhtmNsGe$(hlGZ?F?G8yg_-_#W>HcUeSFbh1{AxbZFVwz2kaIarg$pa`;FP!{ z4#qd_cwn<*=jy8Q&0VHe`j~~pKW2f?VIh}*G@ECi>-kmYWHPui81JuUh<3qdkIA#Q z(7V%{03@N`XBtmAf?zV;rTVU}qfFDD`h~ zNCfQFK-%x7)v8yxvG(CcM8xYH>k^-%I8mQ#YmNE?qpTy)dYw+oPS&*Yv%S>5Nivh+ z*6DWX@&xzVnVBsajLIqOJIt+(mh3Ph^c+5B)}ZZv;1gvt!MG+YpV{dvnZZWvq50Z zz_HWe+&^_H{4ym^k_@id{I(Z<)z{@Q?A3GJ*=vL;8hf#TDD#C}2c`b~ckL@vgH`?? zvh-6avzaM%pgnpDY#r(E$EYNlAnD*U$;@=Q92?VBO;)-Ov<+FD*8Jc&g1??-Ec_&;l!7|g~V z)d{a!y&DO3D;-oBJxFPbax{S7#$aQ`||nA zt zBA1HS7M-=d>e*&gPj&kqNs*m>5m7RBsHK(NM2>NkV$(tH~|#Q7Z0+1~(ivQ2!U&C2$fE%!=m!L2{mmRjB;s&d&-CJ!Dv5C^3ob;6t~QOk5O-OdDZXLj*$ysedX35(TGk7e4;(yO#Dk*> z%};Z(0T=o$8jZ}`+pOcd>UO*`Z6~df%)mm4>l7606-uPu#yhvbF^MU#Ip%iYn*WIr|j!aP?CXy0> zv$bPU!+e2K=uf3<`hQ8Fyj`vTF$r9VP3QZaf#AFsMW7PCS>bq0{8Fh=K@MfLW%!~I z9AJ&S4qiS(rYlaD)$aIh4I;PdcE(jHjVM@2Eu)emf)|=a7L?zEP$1g*1$fh;$R5&( zZII_rgFj>pT&0bH$3v2Bce`H%tKfv*DS>lRF|Y@RsX-`JwkGGq<6S8NNfp6VGlVmK zV0hqz5-$hJGbAtv##~Wu)vlM4%z3JGi1g7;__CRs9^>~AHt+1IlnmPJ&Qw_yp4H)> zj63EDd4Kg*ip%H~JR8&!Cc>p`63~7$<0x&M#G$Y(!ZFEfX#vtpJtl=`tLt}d3>Y6? zp0K}nusg;~P9Ip*zs70fZr@xwFIqXf+>-<5(tkZk)qQOh3s@jqGWxl7Kd;1467_9j{} zE-EzjxZR@}HkkLXnI~AN7FY`R`$(+e&0*WtzcuOF50v9haJ?Cr)Cb!BcC4BUjfIE# zvz@5~9E}=*~T$T0Z`pQ%FsSp0otKzesGg8z@=4 zf7{-@AFtMW?$vDGF6=RcPi6ak^1deoV>r~nI{wf2N(v157eWDSyEQJtmPq?4z~@G~ zau>2~llz$1F<1z5X^i-E^NtYCH97A<3YQ8MK=KJ&&0z6g!X_yE4g*23{6D7%uCaM3 zc35Q0?K;A=Mqoy7WI!YSQMI5O;&+#>?OzP=0)H`u^Xbz4+2~Nf+&31MwC@)=LtkJa zJ=-_t)rp+Omi@)pfq3d<2~DZ=%M}*48RSM%{zu1j0+FfP?te{#5gCL}^@A-WRN%D1 zofVibNc)y9{Geg+N}7+2>Dfq4RJ|y+DLBMq`Myu27ku;k2tv4z@L|sGZDGZDkA0kk zaEoEKrXA=chV>7!8`e{#l$lVLEi`0f_989`ZK_qm=9(6U2>E4W7-yywYJ^d-NG(Cw z#XfGoGk?S@V`6&ZHq9TzIGo#>y)Tpt4L_zGLL*NM7AiZ!mVZzaHbfVrZlaiQVI0u; z8{I1X@*EMe#XQwj`mi-`nSv_mGE*xRv5oV`l<$L+_Ym&8aae8;bq4zQ^EpLbK4y04 zNn;k;rcqE<8*X7FgT_TzSYUT#PYPu5ce`kpSSHPBMbQbmHc_!1p)45*6iMQaC>mS2vwumx)fA(Ge<`?8GLUxH&SP}&g_bbo1_|;MwvRN*)S6u2OyMgZ`AfwOM#+?Hdw;XNvlJ*-$`ueN zY?0Ufl>!w-C?ZzX14V9w4CGP_{2E$ z)fE!|w(;6LX>vEaD%>uxsrK)R_`$sZET_H8!FZ)z3;&&wB**Ue_)|#g$@a6cU${H^sD!ll=^iCi-zyO$esR@P1f$ z>3CJ`eNv%h$Tgy3&;>Zo;;6VH3!op?aZrHR0t0<|m0Q!UsFY#sPQXT{+;};@B4LKQ zRrJ+t88oHVwW<&__^i?sWP~+hCC~c}#rpV|YaAY}$ZXN?$H&lqh9ae#Q}n5!^XL&O z#0Va4GYD&0VRHZ53SR*qYtkE}>^WXX#w`U7WAk|PEwm_QcNAWNznE%HXFUn2$!>lz zq2BjI=3=A6aaR5J3Pnq>Zav2BZJHyyDJbXwdADFpfcy%+6;cllH&3HkYH-b7s&2o+ z?h(}sQ4S!mlhkCgAAb6KrA_XFz4#o`_n(xMsGVm&2=%;)zmJzKq~4r-EL=jL+~MW% z$P+8b>lx1cm6soTwMx9sX{C&q@1?|m@U5x27A^3RLef~r2{xMHom9`Bu3`ve=b!u! z3rH=maWvPjfUi-LYz>0Z&42_>hnDc@bZFJ#t#V%nn)vDgkwkv_>N~?yYP;?{GDKE} zN$5gpB7O&xomQ@T1V=suTD0}JX)=%&#Z8wyg_RjJFB31r;sTBFED<^3V4FMFw` zn7`ursB@1lX?qj#CY{Nu3t0lfHI-N$RL*6ZnM&#cl`?-NkL&{awW^_KxQzpyG0zVM{ZuEkd_UR}5EBHUioPOWIDp+g?8%XK?l-?8o-y~HXt0G)gw%cv zZ`Y=<5#7&Q#IB9uTPHC$#^`e`T^jGw{cvMvpLeidKMlpsUGQ2g>{*#8>CB_9GC);> zd%`d|9%t%9DLeY^>4FwfjYZu@8e9pGfiKvp57Zkoq!H+^Q)S>V3(&n z>yFkv9qZbwq_?jGajwZh_qMsT1%W^l@b9|nx@x)>a3mIR(~SYWMueh0V*o1#K!Pj* zK1s=OpWQN1cs;J@OGi}Wf6J)A|HWE4CHx`boZ^qJP|yf@f(uKz+x{=M&apkyt?SZv zoK$S9V%xS|72CFLRBW3S+qP}nw$pj~?Y;Z?@E*tY7p}F|9OE2gCjGR0aJ;RWe*Rzp z0sgj#x?Z3bpFj{IA_0{WEd@n_30TP89Xx3q1Lbwq#*{GEn2^gdSX_-~H=m&yGQDUj?+7PMZ z_=>D6mePm)8~W=%-p-AIW>|c$yGFYzD)3ILQ0&=fv4?EP=&2dykz)JuykhecFEEWb?e( z(Jy;>X`)CaPk4Z_KH$?l2=mnhb0-;UGJH*$s#5W>zdMISyaq;zE9SI_O1rvy?VaBE zY@wKQEv7d8FgJ#~uRJ{J)dUwdWq`MC4;t~l+?UXebxb4vo$cPAcaMy_1%Y2`m-@I) z0buH7G9G1rwP`mGO?>ZYIoCM8!`@u4`8IJtWU@DwIyb*pg9<-UeI?8z2hX-V=~MKO z=Crq?<>GQzwxsQmh;7oI1E@3Iye;(Mes8kw=<47>qJ3F;dKlX>zjTckhTq-7X>W3Q zVDolIpld4q*x6q-f1zTdO|Y1#hk!rTT5e^7!5Oo+f);PL(vXeAYlN7#6pfCWVOKR* zeu{>;ZdopO42i$Ykhx<9=&_ZNET83jwApBCeJ$8@yoT_7g7VW}UoI`Rf3d&aIC;=j zwYar+aLb-<%C@ zcX_-QZms=EZ-Ciu-h{rx2^O$fkSq&#%9*OP0KrG+2vm5Vtf1LGmq=@gdg!3jY3poB zFj~p5NPo33a00$N|lI;rv4NhAz z%)r)M!nrWoD|Bau&`Q65kgr4dS?QcYmRaq6SH;nH z#z?5!oT``Di*;Fg`^ap6Duu^&R4zM-*Wfszv?P?=a1!dI3Jl0(z!HK=8wEiIQp!T_ zZE_fC)w|O8jfC@Fc+jCQaY_rIbU$uq4)GC(>+Y#qUfq-9f>{33Dl&LU-^8MwWd8T&4_e3)9@lgHhFJ&YoVxBo0qD^K6NA)6Ax>Rf4JhxU}T* zwXfIW!3g1d5@`;_$Z;9H8Zcvu1Uv?Q`?l2ifz@p)HTAVQ$i-&v>y@tYGVrxqF&Gk3 zH)e)G{B@Bz@NoKU?&gvh-No^;0w0BCHu-gI_h2!RpH%!6ZBw;1I}v%Hn0C-6=EaV1 z-mqM<-rNiW^?AMrL2q&suG0a>(J%3;`_#OFuNDkN+_8auf&b8H>x7FYxmm!30Rmf< z!~>Y_E=o>c$iI|V`X6BFS4J8A=bg_pJj?(1)Pe&Xf7pD|5hw{!OS4JNQwo=ue4|PS zlyUg`RGARO?M8g7$Pam<6bww6(CqGe5Zrln*=4X1t>{EjkLJ|`$v%?~Ul)+t4juUW ze4&>#3v|&8Xt1Nx^9TVU#<@2nVh{k>6898yC3_PluQ`+6W`hi1yI3@I&Y5n4qZrWy zA`0+e#}$yk32u9&YNrqNu;^(d^?a)s$8dH3X}bH&X#^3P<#7_PCxUcX;C=dBtS|}_ zK_VE7TK@wes*nu7u!>f8NhfFrafv)Ca&%4%48;c4$LZuFQqZb33s!TuFS_AM3X%u63qcy{UI6H16mIa-NH5pl9BlyGq(P znX|k3Y-1zcB$9$VAgJ_9HHg=H>W^`7_7Dy{YN|g8nx>n2=3w@R!Nz%$o}{s9!1Wf;S|4(?Exx0gq32D#e2Z+bccC4!KhdjtdX*cY@zl}Y0 zuC;Q}t1J1Rw>_TfSE$k0fPCTQv#vB&{JFZseLz1u_%_$z27A~#ZAqpjEnd-DGkMbgzFV8w%K#xUo zMZ@=!zifHEwf;M@@a3ZX>u^H@DV|(-B!EM6#>V;iR^+GJtEvCJh00xnjiy<(T-bR- z^uaMV3dbi=lrPU!jJpb&9oOp-wFX0>APIqB_6-(Q^hP1v2aB1nb!F50joeX87$6ZG zj16TL;uYBFsh9v!{%s-3x_aA0$Ro}2hns{$q|P(+626YWyvN>S_~lreLol?kp4F;q z_Vt25dF7X&k%LCw_tdas3rRHB6NnGokcfw{o+VMQvq_qHmgq#-iIF)mBxiMr0(pwy z_NEmM2zvvnxI|!ElZ_(iY`nYk>G7j&`4uIRVl*Z7r;yxCpe1<|chi^F ze__$t)}x5a#=*uyMXhaF{*JX|eT-^bKDoWrVDz0FLz$S{wdLZ*WCV5Vm(nXK{ya?Mu__fk?3RTr zm(y6gZlQJ~44OP(OoAFWxiuk5hDqzm(D-v}f;NZGjVAT#n$mLRoWY(BY~46do*wMx za%O7q*Uslmd^ntM8S88AaOo@mFxzKjb#3!2-1T9tmwgKQ^PpxmQZGpdinLw zoaRg?*2jv+M(IX7Bp03&1fSbi&!hsIPb=4GK>jxV4K#dy*7GUnqJI7>*Okkxv`z`p z2y8s4uVvvrshYE0p_`i*BLCy2-PJFyN-HgG$4}9Z_=(NQ=na*R1-h!s3pi1MI`!7t zn)*&v2+()aFN{V_(_gd9(Yy7^H=oJ)UVuP!j}E{+aWLSYNu<3wJ#SPeEjH4 zmqw%2ECV02iRZP*CT^m(WUY^#sHgaf$toSGufHl2M&Dw(D!Oj);2!XNgy)C+4>?(2N%YsdA3B+b$ZIx{c+pnW#Il7pD3c{l>d);&Oh$^s) zj*SSbiK^-C2n5$4eZZdULP>kN8m!jZaO9rSkpK&dB%PnlX{l zTCbtrTPw}7M@Mwg92!x{^sQkbfD=H65oWB@y#x0R07U~YEa3vkeZ$baDGn4XXfeza zZb%Gg(nL{mA+y;lbnVK_)<7?Zaf^&HvUnNtI80E#`J~!Gvv@Ik88r-z&gv!ryLEYK z*~8wVzg{xhz+{Y3?y#~=xGQ*Mp}H5maq65@(oBUuZQU?}F6?&NCiLuw>8kJV8}m}3 zi_j~)Hp8+-m*`8S;Iv!yV}zoXDs1P_s+4q!PCEY40&Hn@^!c~aaeCYb_Qe>=(p}Nm zF>e!^i}(&q$uR4cGbm{br|emU<}t=wbf=jvrLzSgtPs3N!6zOPa_>a_?^7Eh^g2*F z)w!B6yKbtk_SiWa8|JB_2XFM6pdnT{&aJ4~@Gcs1g_4yuY(Q=LP;w4VwPOAm44}qsk{+ zk&(|uFcfo>_QM_Z6&x9#=hdZo8QP!(PVsa@NB(C=MPIw^b#t2+B+<1i-zlu+(BkH0 zW%)v1$Tt9_EOptmwD+ZZP_eky=9z&{TlG0M37oNjfAQOUqkgj*UsL=2u%mBo_i~5$ zUK9KE_rnbf@b`)}n_moj7U?getEYQCo3=PfJZuxS4FjvTIO}en)$64Vr-gP14wGWY zmbNQpkHH52@`06tYPSE0O8j4lT=hr}BWHGq&_7Eg#H;X6oE{;o;lS84z~z;qvw{y+ zc5;Sa2vFRMPoZ*PafX@}1Fm1QO8~V>5^&Og{P;Jez(D+= z?3sdMvcXmW@o*J0mt87N{F-_W_bOtK_vT=ZXv1t%`bfc7o17tgArPf^&27D$Zv~;q zebs*tGsNKh?^>p#i7VqY8L0x?N7x2Aa3 z@9wxA&X2TMTtnUR2)RB|MS4Wr6CK-;9*NqMgDSWuv}$TchDAl!;bC+nZL^#Lcn;7B zKa=lMnc_J9^ZBJSO$?`|?$pLIG6jJ>&tJnI4qZoMkHt@}wGDPzR(UpXxb|InfA1SN zaJF)Adorc3@Jcpzivz~4pktxh6372)$ZWzKe{|ZrO|xTJvB!Tp9HXzL;^ij0%PiTd z{P4col~p$DkKVgA9(f`Y__m)-r(k?1r79@vn_3qC#G?#T1B|w-Ii)GwmCFn*E9tr% z9M1aM+UUc;`5MgmtuF!|0nYbYZ?mtv$(35Fe?3%|E8@~?#(lW$Dn|XUI3i1J(gz`2 zT)dwzH|!8#NeP+ZAhDaT?QEEBc4H6R5C$5JlqJ9Ez_mQ?o)yk7iCk@7bJHs73la(PZYr>yw5*gyTPOEJ0e0l# zY)l&+Iro3g(a zqo_KHF{4E(LaviSmZy#aj)JLuPbfsp)m@xq8HvD(OJ(8@vpYCXv>ni$)&{kB9H4z{ zxTWxuZWZc5t6uuEPC7=6Fait|-c1>X+5lspd$JH1i}Ny$#mX36^V|qp8t`VQ&%dyeeB145ayZj%v$V@awVXK~0-q{z= z3iXSQe%(2wW_*U3-QF&dcpa8lqgi8j=Y(;kr&{l)2~X{VMvjHi2OJL8D8F`SeL@U< z?g(S2h3nWp(b2y6HGO8TF0wPhhj8HJt2+Y?0M~#~b3w&-DMD4k;_b3roxY~^`4;!3 z9BFQrX65QQGHqN5p8*0zE0w(*;45M|kJc%8Z36$3|<@Fo$ z_}=iKs-=46=-+TLr1y8mtUQ&*LeJ>tw84U>7%ehH!C;PYBI77HSIAv0Ny)9xh&||g z5R2m&hvi>kj@%)h{)7AxRCZx{S7c=?09 z2klzqd&_Rxr#cw)J#N2c&tg@gyo+W7I}X*Tdp?f96$iHl@VFC4o&!X+y<%Xi^$P zO%-1$tN*Tm{X8^6=gA>l<8AB?8eAdWLljsD3S}Q1K%B`lOo)X{bFBTX#G0r+1vIVc z(Za3-WQBk^H$1B{f4LWg*+eh{RZQvAf3=;UHjk)uq&EmDzgxwbR!Hz8kXQAwZq@@4 z=S6=wt{4ipW_sQt=@~Y?Gw9ok58pbllTthwY&r1E2{?_Y$@YNDNNzVE9BII zfst2qIsPhmTv9p4aXTUNOIJXGO~t{BqT;m8nR+3k`uvXx?Z& z!8FfQzxRANdFeBMo#@F&_eY4I)6T>C0$LqQf5&kg-`bGhw1XdBM(AkSCyD)>3CLXtXld_ zsTrTfgjcY?#QPU(mCNL}UoVQiZN zk6ea+DZqLm4KJ$2%dh1>z2-|FTRpHz0tZS6oaF zmz;?cc4)|!qu=mVBI(JKbAakM4_8dWL6$We?IEALtY!-E z4cVIa&%Tq9Kn}{u;(N@mP~J1!s)GG40Sxt{U#>B{ux6uve7TaX6Qx}~Y#0%R9UutH z$`$YNLnBwP#(IBR44h33tHg~Xpr$8IhNTpRD zJ)c6A9bbn+tG>WzDF0^(zF*hW#Gg;3060x2gNTdYP zXBuKXy&l+{`YjlC9k<^F)Elu>sRnnpszOLp8=DY(i8e4}lTY%wS7+0={bu4!`+d2& z)%B%U7OPW_-*x-@;_E*Dm7J5IRxL|sO|_-YNmt|0z6>ky=2C%g!k(au3c7(@a+?wa z;Xi{u=X6_#m(3eJWP3!LXd2(~Nu=j-3!1KlGF{h$P`P3Adie_;P6uc=76BvRAjsX# zDfiRV#(c91GZ-$!VsTUeMMu>d_yFRb8*X+$5j$U_mumqk8RqbpsL18f@AT&h2xK$DITlXoS5| z$v*;f_6C%v?_2Q{cn3bT;ndq^pr~xVzs*3b10Bb0(A^m?ZLW2K>ai)SDqi))W)=Bs zs^o{|%J_`Y0h^2>u~%Pw1iU(S!7%wqLqH;oI0#s*Ey1vSj2-PnCWDG>Xh?mDG>(XA zpoDI?{!v6i4=2Y6a28i+&HPSG6fi$pu<4AR;TshjnlsL{>_Xfai_~|ArBJtf`Zgjn zcD|<4Te~26gB(>33$0|n03#76x_U0|BC}a#=H1^a+9(Y{v*Ow;Y~W7cQfhZ_%I5fp zmCL%>&+;F~EpW#;Jhac}2^0Lq7#a*_0(Y2X(@bPw_s|1O6LMK)zLOI2)Rb&LM3_p0 zkK%S5U<+H?>!r0G6`N`LqyY%LYaU@B7TJs@S;FdEX=Zm|5a>CW)>JylaX!WL!HcQn zB$7yG<%JS4SeIboCyQYLHFb;}4^Q`z#aJ$8Gur2UYN3M!QM~cpL(Fuuxng3!_DM+z zF?gIwG5I2{6CqV?uq_uBq*YXHGyHP1rSsW2QStg21NPg2?pMUk2uVijx~DnjZj{(K z`ZxoxQPK3RWht>KLxLXu(E_|t&wj|30VjDiab*ZgSgVOz{Y zkJ`jKm^@502KDn5X*?7%dgB4?PBtjSYOM3-$!nQGugg?-8`{$~bQLs>zO%d+v?kBA z5FXVY1!wdUhSaPY6Ru}Z_(k|m7F`XW;!o-LxYhc9Vt}x`A8yU-)G6KIa*jS8yIpVz zx{%GdFXkzE_nDv+g4c1Q`q(dEN$nYZ9kiCJY-l~;=v`s(As=i#mvOtneG8i4TQ4?C zlpi7Xx@*S2-H#L*l`&czhKTqBQ8yXEUFLXnZ?iu3!Hft zTXvWD!(*$p^1tqif8pG^ZJ$RkVP+ct>TVyuWn-{gxB!-W&cDjDu|I%f zw5lJL#!S;{&T}va0^4(=^}WRlzW__xk3dU#VGzCr1tmhmkh0~R!*zie$fgj!SHIO+P2?z_r7W5q9+Eyl>?Wb9YuUm&p3bD&O9=R4>?F`D65*GTHT z-0hSR?Cz7EMcttjh$?GGCYnOx&p@mL##)nMxP$Yz=S3s!!jb~}O~!D-F7#>{r{gTV zo>VRl$}9#%;ijjQj`b*O@Uw#hI;w@eVRyiawg{lkMF@Immp8!ROuWmaWRq(j6x14d zO`ERoG6QxRB+I&}FNR!95+feW!DMC3y#f9@2V&~{3L#Dj%hC}u2;H~aP99T&*!@t# zo3*S(x6ZLWua@;Fc(Vd<1P75q##7e=qfPkxmz8S|>@3;hzSm9Y*0I%on!CqsCf|JO zWO{CHq59_mqzy!AcIw`-LN0H6mtg;k;zoIR7%nc?Le$MqbUa)I+JsL?ci1-$z$=)d z*Y2tDK#7b>;PBZ2DAf1MY%ruAg84&<2{8d%WRjC}pFU;L?}aJeu33(XbOG3@Uv2vq zp+7lj(Cx8!!loME_p6%-vaU<3~>;$c6 zj^%gQJKXoE!o`wOm+E!-R2j^}r?Rj?vaB&Ub#-K`g5GV(_%bktkhRNxckS^sC+l$H z3EL{@Y^b__pYV1rkfzTw+Qm#5#b)48OH_F8t0hUAL!6fItsiz7hWwEpeK`sbA$zGv z91^t;2jIR=s^FsUn->)wd)|{T#1Sf3Mu6k%E<`v3>`VxqzcwMtX2r?CoI0kzG{cQB zr|Qbhf}yFxqg0R}(~s7l+6RIbZE*zPz2Ga2t-hN1!lut8{woAnyZujKT#dl8+DTzQ zvLfc-7~s^Y$u15EL!2BC%{@4e%~KXiWT+IN9=IRFgNS&$5ohcPB!CJFeL*x2srk7T z*VhCbnY$R*fFml4`%d5wi$L3CDZGIB{pi|)SAgRXueYPDNWzzOUC~AN{6z}_rB#i1 z6-6(>9Jlxb8j%1Nkfn@^cce*9LI^61Ty9>9&+Mek!0y=3Qj$T?aYeVE;*VREgAE0t zzCl~=?QqVE{!=-~R zD8lsvW`T9hXMvC1N~0I6skQAFbNR4)y;^idlr`y1CAlVzi=k*y(5va-%TLh8%Au+g5nq$EJap##t&kaO<(eLIH zE496Upq219{UqwB$}2a_xR+>+27@^t+r*t+50U7SE=|6NL`%C;@jgOHDMO>y%X@I+ zCsT@CfQ7zx#K=@{00hg-GYrD6=}2t@M=Tp#X0;tEnvBrfAa*hkzsu`hIL%Qqx=WWT z{^!^7LJ`ln;-OchzS7+x5Im*(aXPM@RERK-Sj8{ZNh1MBBP- z#MX+17dOMZ{botxYDa8vp0R^L%T1vQZ8_bdAFoAdaOP4~Wyi}V&rGcm#zSe>dMVyR zu&-u3^9Ae>$Tp-O55bx9s;c5+dK2*$UI{XuFa~-bm2y=+o+XkJrGRs&S@5*ap z03U9Zm1g-8KHdB-b020I_Z3_~pLJ4W#%qa{+buZNi?vJ4ZzsnKSI_CczuV1MY!*i8 z3GPgU|H+Kg{&yOXfTHPmO7CFEu#JuPvWvgr@FC7J7oI|*=Vcmm+gEBFYmy>ers zIMNn|tK#7hbJ8;XEdIZ@A;`ps913LjP$S#T{3R_S&60G@s9@PB7;w$3IB*sqKeEsC zp$U;Ep}Z4ef~Se}IwzyqZ%uut+^Jpy?uV;ufyp^4-WGPq2j*H{1b$Yd7k?`d8f-X+_7t|Gla z@HdZ$e=*rFYD(f-O@mSIY@GNW?1>vId!su8*EpC_UI4jAPY0af$Z^X29kD$_jExB*ZFSv%wApD zx73^(g<}$t{SXiIj6vHjqQ8rU+aZ}XZyHNo8iCfx)QhQE5Q|zzn!q%r1{6zSpiQ1> z5QY_$--O9V|fnEdw%QvlgPy*CmiJBarbM~!=P>H3fW6W zG=4yI;0fngv*LV-s;~h}B3ndhi8a}VcNwG?nomp9;(O-x4NS|Nh2LsxTQC1M9aZS4 z+d5)PevkvpU+o!uo&D~+BxQ4lf3p4%xoyx1oAqRd0-B#J%bla{>hf|mIm?-Y$ijK6 z)S~jRz5hP(zcV63uh}c;U5*E%*b3hBxE&66vDf_oTbTVOO?#dpe-=O$9W~n=Gk%1B zkSNKRJz#>~duSup_Cj~QVPOD^7={~*wfVtTXWHccLszxFnh)*?{Br@ikdLb}q4Pc* zA19gX?^RE^1jbW{K%BAQt{3}wl*itJx$f#Eal{UMZO~qno}U@S1rRfwFJ94)!BG(P z|M@A{ZT_1Hz6R?S6JVzt_)1_B=FZ4L?czCf_AOP_m2)5&ezp!pIw>6i;DgKx4(NmL z$3V}}SVkv4IgT_Ul|qO&RzL>mN)2t>1tVz<=?eS3rw zH;>cZ&d*>8l9tEA(>WH$10a$m4cAG8{IItzmBs5`G8&tN%Iql+je5fYuMO#DOOpGt zIX8V6VI~v$7I0lmgK*{StKP)+@s{(t(vb1-z4ky2c?Et!xxNO`;)ZGVw83^+TIQCr z8{97DS$>bp(EPeH2{!aVnS1&Cl;jjdfQa<$R?ai4t=eIcZt$)oa4~U+0f&^S*^dVW z)j!T6BdFKJKa0(P?+tXY3r(r(MFLAywkU>Wk3C`UyUWBIlfLZ>%N@?MbLhvSLrm6Q zds68d#V-|Jr=mNcIrd}v7JX~NN{}*Vu6BxYkqqf=#0@KMBCy=ti9g#|`G_r4N2g%$ zZOm4Lj1SNyag9~AZLhByOTU&rdjqprqpY-a>OU(A-?si*U127F=|q2nUk|R6IUuM* z8`Ct2EQ&lrt5yW1;SKbXa9n*o-(cjTx{i5h)4-13_$Jvi$K$M!CA zB2nz^!hD6z5f{m$+QD#*G{m8LfM!nEHVz8KtRo2rv z6^)WQ@C+}{MwiBa*x#*XdAxrylyC^25?Cf`wxe`N&m%-_E`g28nAaX~Q>$@94z6PU z4hTfPC^z^H#`-qTC84qIPC>y!Uk7w6vkNQ(E#Vp-Cgu|?m~IY&K}rln$J`JfQ#_fXpNy`A z@8i%E#oOuK;ch+21XMdaRQuWS5n<+$hG%{}NS6q{-HSN)4c-2KKu-d_8g*Q ztOPyGCW-li5?e2`N>iS=Vb7tRjv_>>P4Vb7Wh}LRzWsIS|0P3Ro2kwE0*y}Si8ymV z$F?I;e(?7fMEDL8-mVfN^SQ-IkQqy|8FoEsQTX&Cm~;q(*C=8(MU08u`()N8wCHbS zT=#|UIcTn1jvRO&5|Aon8R>l#KByPxN|`BOCYf8`EWFsv&gKY8M%vKa${)A1-+daT}KI_K&L>*M-9>djwS2r(@9=xxh~blp58>uPCpg~ZhT@s@1+(yjU3`d_;9Q&ALQhy0fiN>v@vrL5y4j~ z_Wx)B@;OHQ_3`vb<7^Z5IUT{d@MJrW-c8ERbmffz1{J9+S$J*I(+Xf3aLSIx>iN>w zC|C~~R!Wt{WbKZ2bq&kNmwkViWd;@R6s`B{M+|QvrCkzM$LfMcFmW!+uOBdh%A%{4TpgBBl3664?;+#xU#7d4n2- z_ritc1Qx9P9nfG|VFm)T+m`E@*rA_WGe|5lQm5O%*=O$8o3Ff$t|XSd;+-ZZD()2Y zX_uhSEACbQK8bPTxRN2kPFM(rP2rY8bRP;;Y}{h#k2x3D3$6~hcWVlCD=CiW|6M@2 zo;^?%4oAxmYzB-IZWAKtG-gFG(s~$Uy-Mn_r8kI$7R@+<` zFEg^1%&BUsZ;{iDj=rLMOP|?vT(7f7UpyOPWLqX z*+f8^(lkh(_28B=bMbW!8Ykrjxd<(rC#zlX&;czWX^O*4RrQyARJHT0?ea7UbBK=` zZ92OXA#Jp(D&-XJP2u3(z``_rB5*&Bv7_{=3=Gk}e3M}qpV}q-nN^+yT)MW6V;#mX zb!2PBr8F*P4_WuSkF>WVidSx%a%vqIT^K7;O|4lIj2%0@O4#;l!`(6PnT$VtbO>Fp zJ$drx$R0rwKLxVYWPKE!X|yuJXe`)eiX6P%6~#0)HQ#+x4~LshM)wk^y$?yJSRdYI zdiJw!*gg&wvyL*Ik5-?_bWHG5(72Bkao&T$rUuu8vFSdV(D4Ts&vYK}Jj;BRIIwOF zB0IF5J7%^T@Hgt&#O%DyuUq?|wpTx#bs(F-!q9G9yY6hOV1+TZ&krTXY7TtDdsuyy z3GKEU?c%i5bTrL=1APFGX_Y6F>3KRCAa++aZ#8-OZ5+U+}<^Z zR&B&V8B9uF_-2_qF7m%i*hpsz8y49ke0hc3^sxH<7QHaIO;Zw?L;GZzj6G7Xkz zTyS+eeSO;uv0)J~LpkUV5`(a|&&^j*|1wf59LxDbir?rWfhwGHG&bXGH*8PB(uWm;SNeeVBwOa(@3`bmh+-n$N3OKbyZO17RBS!Tc~Y(E$@V zxU}gU1Z_l)+jnnCk7cbHc)P!AxD=HhMZ#irB>{kL*@dt7fuaH;29&0M-csNp3mm>8bQ}>v;@;`DJj{A5y%L4zprnI|-V3EVf#zxMk|e5#{k7_Mimha>o`i z!^MedWkL5T_FE$os)1vLiu0r;H8Ee9`dh5uilgsS0nA)9xipJ6#0f&&g=LuNXtYR) zvQz%kN9LNAwv2ryI4?}Fj8jO8XN*u!M@1&`M|4G;^}PjpufOB-)Y?}?=mfnLfARV> zqYt*xRRhTp^;at^49Qvg;Ou=sKA~URg^%R_$gw%CZ7mYj3aFy*n~$m?>+}GgudR#n zHgE1XVF=@|0@~)Gy&u4YE2I?}eMVJre+^AFeU*|WHH0Ig8Kd|;40{W8sA@IQJ3_hq z>(7K;`gaYdBT+s`q2>@98hic|nxp#P1En1Yy)OpTcS$Vo+RYr=M%|20X1z8gJzPF~ z>gD*GlBGu0!H>(O0KSi(Ul>J`@*eHDJwgFA?D^}jhV8B<^`EOf7j#;tUAv7F9RM3S z*GkQM-SoqNkICD@wE$!Th~`Fx2fr!VUSTel!H5^%44M4>)o$%F$OO!sqkz30IX?I4 z(qzjq&QsX$^dRARhGC;s+;KDTH9BIom9ZL}=2Hneo*6Xq*r)}%Gaytcs4vJJ(>}xs zYXNDbgag4)x6P#yUgV~mU4pRbQWr@S$}+pq&4%52Vbl!gy^RY0elYB}#s<$R2rl?M zGy;w@(6ttAO9Lb0F1ajQ(rI@BM1D0}TDRN+k~6aS&8Yr&g-@Aph29n+9<#sp;@Edv zBXs1be!k~Nue}Go^^@2%bUQ07?r?*F28R}**&i?@J?0$fG&9VR8N1=dBy`WIO|H|g z0R^Jh)z9Nm2PlAkBfF%N`2^XjK4y9mkiRo&%|fCxY8AG~WT|cg2-j3qv3ytee|k zdw%xk`-9{laKk7#rAPZv!4bcE1{_iYi>|h(9f)OET%rd_JiI_MN_@ejYsb8vGwT+o z{zD$p2cSWQ8FyR+hPxjCs>;fg+Hb{+i5R*mpkzl0*63@Y7wT^*%IzRwAL}WwcdbNM znArc2!(xi>&ZDo+<~4irn0n)gOU*Tw@<^eBSS|IXd5T5Nk4_qN-zNFBiiV&ctWA_o zN>MMBp(SR;Wj_+giHE#7@r*n)trgbx?UM+4$Nz138ABB23RUX49myYNnC zLzX3Fm7yW^C|G8WQuO9AKoopB%~{>x6XxO7F?Pypa^|RfnwQA#Fla7_)SD#Mo2}=x z2sQr9b}j986_J$@Cuo26hLkYEa;`zrK?Md+zS4I4n^_6Xx}g)hr-toA#C1p^7{y>? zFIFL{9;MhDSO?8D<(&FMaRxxaFlBu3Vh}j zF6UU2xTv`^Z+}VD)8Bl0Ws3lD{4x4mFnju30X@kuK6~Q!T5-A=UAn{>z@MMyu@DDM z(4a=M;qBS|5*F)XbtWmLW9HhTQ%hZU&XL)Jq3j&8$M>>Q@#zXI|De)!LrH%;I`y3u4rOIqJ zc+cSj3YAeIpAQ~__CB9WxcoZ-ahGsp9XrIbg>hc=aNGUD4C+2O0A0B4WSCIriU?g? zWpIV|#%14kUG?3>@Ub-r-0$agB%`kBF*?8bGKO#S+43s=GVi&zrj^^b#$|K52bpvC zeM@?1gh-?TJ!or`f7eZ5g10q+5i!j0Mz{UHwrTmBJD9@%U&-74)&`ldRZ^W)crjGl zx*8}vu?yy@l&oFcokm7sj$|cNmI{dn6FBb){XxF$KaqrEeD+Qbt~{VkmmkxZZKlqAxrYDWA!A|kGf^~$y#X89V49%@y1)&&t zIe1FCST8Xa>I4pX^>vezDN}AXs_Y^bl5_$9WYb?%v;Yx~v47gMfv^K|T2FbJc3YN+ zQ(rY@_OKuZWnt>nu=YGX&>B;bUbfF@y17SN(6Jox7C8#!Qv%-f!U$#hyuf654$DtS zq$Y`YwpcYmg4t15o4hkP7vLRY$dOFCRKi@0Oc}UIn2NESz_e|~U^e-F2=v&!qQ@^9ZQ{6RXt|kcG@j)N4jKG7^~9=!ZrxH*35ov#v7Q3dMicx^6+a zo#>51SH5FJmYlr~PoR;6GKng!id_8{Pcu}4C@<1YAp&vX5{F6dd0ZHH*`1gU#<(S} zuR}bzxT{vJ^_-*anthg$v+H%BjwW3KaF#p;V$n<$wK!S~P;}_wzrii6nxIMqZ;B@pdq%kyWMz@kNP6Fc6D&i$?Y^lh zhTc=I{y$nkD%x3L zL@t<^;62Ao5pgTIIJqKa1ly0!@#k`j+e;+uWBUMPG@MCY(>BDqnIZ5y#5sgO8L-_a z%}tpJg_l-q3~?tW4eZO6%CBfVoA>29Uth$9m;qTI4EItcrA9;FQ-Of*3ABoBh3J*Xtv`yx|c0fy& zwDY)Q$M7KAlh6-8rZ*FnX(Z#m@40U~hAW^3P|NR4s4>;39O4m@>U1}wmo_qzh+}~# zI@FC!0yMQ zkb$;DtYfb1A(Y@Dgf5w-MZu9}@Bj`dtU3KTeJ8mhHFv(Dp<&~7JN;zIzubg>(YF-T z{x#svXshv|0C@sSruTz_L%Ct!2(zi0(g2h!Px+R&wd-l5j|gZ~?ypI*WozB2imCH5;|a$kaA6o|T-dB0v+vKy%9Dae$lppeF8 z?Il($6*2J#R|P`XASvf%UbF)TCrE|tYPxNShmFQ)sp5kiSA;37=|qeZP;YzVa(!Ax zlQi)Vds1&{*uS^G=`~0rgrAYq_rJOdj#12a9)p)jp_+?JM^a~zM9BV-QxVTG-s25I zr?x)@O5}tY!B0KKWE`4K!eK5iQ6J78#6+*K%TunNrIk08ot)=4^HN%l6PE^$n94Qx zHrv6uc#+P|ubG4M{xSJXe3bboREz%tDr)>sSs15zOohm-iflgz>2sw*u=b8drrqCp zw0e}!Sx@!4C^b9}MB&NF_tC6}vv?$fEGbA@Q;cM^_SxJ(R238|R(krKBM*KbS^y^) zO!8RlwmMJ_bcj)U$|rj~^VYP<WE^UkF)aerkD zns&8!?=io^i=BTJWH&72l2sI{z>Ml3TMC#h!!N zBaeLLQN1*?=Hx5N7u_@`!=c%hYK?k&*mF3T>yLf2lo#*eKoyCEJ7<`qOgB?qSfUZj zqV)1!@aO>bb7rxN4i#{|x4b)Y-N&n|s>}PERT-AH)90#mu2h4@Wdy8A?4{j^wkX*3 zMrEKs7O`t}pFtMb54BA->!G{U`^qhvoTqT#u920p)OX)5kdQ@`5$*q>>o2(KineuI zbmBJg;2t~>+}#}lL4w1?-Q8V+yE_DTx8UyX?k>Ug&GOD!YwvqYxj&+h(filhSL^(! z`CtM)fxN-?%-=I1Y5?b!SIg_odnd&NZW`B*DFrZm59M(blABtJ=9ZyX*87`8L2BfT*Xb=LgfW z2~p4|1fjw3iqdTczP=iATE=z}i6NZBNlH8Zou&aVDnP%zPfiShgNg0}vWv>TOE9}h ze}ezAVF$vLD;DS_zC^htJ=Yu}3&hey9nB2MXMWnRvE-xplNB*4V(QX544N3;wYzGHuZ zqVA`vo4E#TT981<$`KRWla`q^#^EwT2uh&qyY> z5Ub@-$2;_$NQVj)$|gH))pYV&CD4SKW%sR56`7O$jh(&HM8>}f61x8Zmm8Rv?~=PhHAW=3&%tFA=4oLz`tu^S3JH}E!^ocNrlr1$oA zpgq9N)v?jpzS8*C>!yd-Ai;4NTtutIL~7qFF#vwgtgD{ zJ7(~L${LzW2*|&xM|cS2W#8D^p%~%kQjF&n?7ed~DZJDW`TM9lJe2LQqWu3vdjBt_ z$+5UQ^Nq~kyc;-7`WtF56>f7M+o)m0w5HHcmuBP;$}!yS%(r(4A-M(4)BVqEx_X@lT(7K?ZO($D~g|m?i)k> zE??Iz#U3VjWcZkG1H_OlXuYD?cgD-5-K+CPlDNAg<-$yrwp&jRr2%dVdiFH}WN1A7 zj?m{4X+o!~_WitaztdjBIpkug5n=4314q7&0=Qxa3NgbJmK#j+DkVS0=X$cA?@QNm z8g<0fNv5Bbg3O^j@V6@hNWIdTY6h?H(mf&^eDnW)%_1c>wh|dB7-mb6z!a?3ZyPMu zVMXkV)lT3*&s1;4RiBZ6GrVo{KneWd^XQSLj;<%wR$!IuEaN8fk?{IdAQ5R5=|0n4bnwP!*43z&5 z=6VkCO{wlyHdiWgLY4=NieV(~oz|ouMD<_r5hGyqOvFFwM#2Z{! z|JHk&i}!~$)EwLBABfZiCa3hWvE=h^5}yVoTW6@w^J4=;Pzs?0EvX5}1p@dG<8ynn z_dXfU+M~Yk=ur@!cP8YiXIb>Qw!mvMLSNtW`7t^q>~w#THO>}!KkyR#yVY@h!y0w( zNo-(zhQbTHvlHfJSn7V?YvB8(?qlZB=F@**Zi~NdaH)$=o*16}t?`w7=>{7=iEnC- zzC6i$s!7njX6Zy!_C_TVC<&qMvy9h`cq|p2g#T|q0><`^!uoOW{(mUC_^z!F2Vvds5&Mz~!NwhFlbij+X=#SVk$aVQq*ykyV$X?KqH zzwvkA|0-^N-+Z&4A4GJ+$5g`%?y&mF5E}NdY)rD%vjlA~`c7r3*?Wsihh}1wh;CFu zbXn9Q6jB=&eskdy5(TVZL5DDjX2m%AS|F5xk~5kKlUAsIjp=vDpvhzi5{0PHnI$Fn z`=bKE10@)SP*cTSq8(C=;7?w!*o!y^E4hSo4r%S^C9Jzme)pKm23y)aR3V%_Kg8T7 z4h8xl^??wz^j+*;UUR-Fi@8QLrd;ipVsr9lA!5N^_;vE-l&uJQ$EZeN>1hfOOKpbk(#mcYryi za3Y@IwaVy@tw{14c~)ff`$ZY;52a&9tR^b_=IJ|qwV-SBveO@MiYwv9`Z@b5-DTL522IK!m~#0alR9L!O}ZY9{q;fM|(RaBIChCN(%$O{2QM zt+_2>T1!I(lqT0;G#_dCC?TQvOWypYfMCJ5A%(~Oz%_c0q=Z06o{K<^aX+(Y>a?nL zEuhkl#KG>^(lr14?K#Kc$SrTcvI0{zLEjYomdWP}_!xA-qe=<0AM2C<+#isSA??J) zx)ICY8}pT_KT10r#MCiao$&XxRB30iVuaIKUnFz2U7i5V9%lb;WWng@)7D8n<{X+B z+WbXb-c`|h&o*YL0?oNTm=5CBsjTvKyL#DK{5!I{h}9R%7_rX{r+C)>0P^hSecj@F z+pA{3(s6q`mf-Q|TrX7vRb66`&v2414N&n26dVNSttC6JlYqTybBU}TGkHqig>Pk} zP6r+K8ZDj{M&E(U+%aQnHA+X#)MK)hiv&v?9!d{4fq`tihMT}jrjQ=4NUg@(Rf7#% zHqh>^#Z!$FsHIYeCF`gCh43MQ;*C8TXSqNwXelI3XrigIeGM*9$!?d2OwjC@UD41@ zt&(A$a12^vgQS3&jpRl*=LB_`VK@I_*fa%5cN00gP0G zP+gKCCM3$%1-zj0s>9UobNk(bn2JN@M*~Fv?-GyR|6bw&IEmFPex*K;rosyL=qdE$ zv2HoOsvyfW0C<0$L^Tu`b(2aOg@+^0yDW~sKx7%7QApRhMH7XZEz>wJoAUFz$Lwzu zDqmxU(~r8wkLG2iz!Lw5=Fz*8Y|W7*3+0W%(sa736hb=}@oVSREVu_`=oD~RVSFMR z-5@-TWI@41Z#A74#I0cp-CB|x2BA`6T=06~(+?m>Lbk%bwOXmmCA8A0ja?8i02Daa z6_T2b1>H0h6l5{HMJXQ=yin%MA$_(`o?{)=J%O;q@{LAq0%ev7|RLd`YT>QrP zSY&J)a~D&-pM1xx&{Kw$cImO@a%JqA!+!PzEv^4GY1l2(wcXo za?cSa&9_&3d6mz;t_C}=$>BH+uivnruUQAx^dUI12~yDi$pSV+3+lGrHhmlJMi`$T z3CUAN5>F%?|J+*3r|-DEG>DM_eJWna3c3BX(Si|@P_47xPDH2D?lKm0!Ii_NEAhx$6N z8&l84HP6a3RAPJ(-!);US7}=dgf##uJ7~s^P{7^CAJVaRx5mrd8~yKK1VNVF_2B5v z4HM#|+rxw;$;KK48*q5}k&sKzJ|5`d-GU2lrYTSSaYuoI%+k>)aeg81 zUYstC9T(k3OEzBo#<0%WU8*zYKu9NF&ozLc5Z!2UPe%}ebkB0_F;!bm=_>by7{vk~ zwrQoT#~2L8k*6zu|M|b3HuPNof4O4tZ%5oh5>}t0B6o=oYHNcYt3xb(4D(=P2S?aH zkpxa)iVW6dN6E2K27@A*wmWXUGY-cgD%CK5Z6e8$bhK)#cHmHJ1&HRf2|@3KCV{;l zD35Os(EO_RD=wQp3=V#oH8#W);>8d!tDw!qj0D+xOKRnE0$|yYl{pSN|FN_(_v9Wu#@7q)dd<=Ub7tIRWVlkzP(4<2LaN_* z4`Y0ye6N3XR*V~V_&ZaX#^__n7C1!zy>1>E_#Vzcjp>!=e*v2-`Fp%GaC5r(zOUoPtE~grp+bMv#YQO`}=ReXjkl z=9z{^)fP>j4*U|%?9E}I;96O=x-MQcHVR5YJgAj&jl*B7z3I8=jKJ3W%}()JZM#0^ zk$0M2NY`(kL~!}y4r-~EA>-F+ftTfThOa%E@$=-8E?BNOOYi=0^>N*|vkx6;qXJIx zkO2HLKm9fWmB6E0q9Ja#`z?>^&v)Czs}J3y-+!N0Lmyo>I~yroxGzy`1qGyL=cntC zU9MEEsp&fHmuiDp@7d~rLu2#z6w>}Ze*=yLH0oAeu~;WNJceVa7S1&{~a+m{qAC9&s=>}7?AD9+Ih10 zrnTJ5E-Z)`4;60qFBMqE6a+!dJi+DFG#9C{1cA!OE^wt*asUC*1O@co5Z!s#izoUJs3KnK70nr$<|;_0GX9Q1nK;Y^tNFP!Mw zu&_m``z)qpbSOwO-V=-TRd~g##-E5Xtswy0t31{6DV zr|-yjLd7R(y`_Pc#q{dgXNdfr`p?=U5`@4>L_?&Gb+fX(*m}#ZrevQ`UnBh16Ny!q zFf_t!4oZh+Kl5;5DiU@kBFb@)MaUicWzlXYoZEJd>^#?=+c&pt=8bvB??WiZ;wBYB z+uF&}Ur@-XaT^AMEIF6N@dgsSIa1^oD=fepj*<31sm1N4&fK=-S@uZpILAOg^xhIa z287Q$oPFn|H@dp)&>CIKD;qZg8KxK9t4;4%7(A==UJ7=W)MBpe1T{3Y0d{YmwmuDx z^X)DmT4{BQ3PFpl*1BnAbz?!TTqu?uqiB`b#rTFEMH5KIRE`~_dy zIJa8v0-J429VG}udH^4gT@0-ceH$*7yAXaM_t8hb^Ut$5eU*&jf*!tghw6XA8C7fI zZBZpb#e$>%-n8iU&Ke6IVN(P)E!v|A22MI~SR-MDPGv2T0L>7hP+SVLk?4h{J+X|3I=+xL!@9$m8axNZ7^E*%)};4j|R3NY^)$Tkluq z&GK#L|NMQx3BmU-|DCXcVt=N7=2q(5nqa*(^iHd(D6pog&>$u0bE5l{0$92H6af9I z5m5V-3rxOjac)w8;?(58$k2T3j1UnMp>cBtEs2hzolCqUBeIDhT0)e8$^3_HB@trC zFd1%;-r@1=hpJSPs0Nu5UD~Wqvk4iOCtpusG!mSJ0tx~kNlxb&vz6xiF+n`bQAsCE z-S`ABgOavNjr~a}GHc`79vbpxgqbb72F75^AlKwB8I%p^4GJST#)-8|U|b$4crD%-NNgo$>X zh2fd&K54cwedIPgGI9k%+Oh7~9~qa-Ftbaa&vg9@_X&4jGtQrSob(n<#20!yw!PJH z6wRFQf?}X%243PeD+M?&Z8`yEspjtBbZVQn=edS%94~Hh0R=w(={&}e7?mR_FisS3 zxi4wI9qdebG>tA0}%OX`M8PAK}TP4@K zo~#RlY4zlr`};xtFCD&~1i8<8UUznetq7z~d!FrGn{DO3(~oW^-yb$Rhc$IeAX-DL z7n4r`jSzUg>)*Sc&AhvE+)x&&D-tsmZ21ts=Jo;7b%uUp-bD&rM(Zq}o z8%wb${G4(|&cc&GXnJ#U`yR|APebGg+xeM4SWdF@u-@>S2n&r)a-|s|ce)@l06X$Sy`TO%H#bS2=onht z9W7Qrja$ol0AH8bnohU#))2N(@pf2gCt(6yY(>Q4rLm3RL;b&gH5g@1*_D@%XOS4r zKtMqgpUa2LQe!hL{U~ww5G>oH;TK zSzB~w$CQFW`l7Xr}H{|P%A2;thhfV{8R=BD1~Li5Gb*L zgZ1U)C#s_lNsht`48Ee9gtbRotY85%9FM9LIx7)^w||S1JGLnTcK-lH@Kgm;5Ci=U zs5ny^hAqK_4A-4{F9x>5Vwab2%nXmDXmG-3ujOXK?IfZA#k6q| zQ*KTCrxEiuKbX|b)gTc2cKqa_iY9HVL0TD6Gze6?Be-q}4kSzt zxc8VK(>q+}j|zQ$%ypcv+1dQ0*B_QlfS;AEuh{32+yHg%{^E1sGFQoMk9k~Wsxb!t zjBDZX{_E3l#QI-84fPQtIuyv`HS)q*Wm_nTfC>0_>y;>$sw;{POsFXF3i{sJA~*DD zYr?S?XXgY}`M*S8w}MR4ISdXm>wovObH}&072RWOMvn|6F$;-z|M3ota0oCgyMXm; zVR^j5>TbD*ltWCi9}t3U#QKV83R!9|*7q+2c25PD5L4bH9@Qay_+KSJHc0rew-C~K zg~ucS(p03MJLOyz+^#cjqBVnxH#_}FkcK&M7Qax(6o{?RI1O_rPsMMp-6AVUF2G4i zjHdvl7{ba<^OgW(C>CMC3`ud29iqD}t|o^oSHCk*eRve@mV=Q=#fp*s$dvlU>WD=5423UjE2Ir?kz)khlH$<f;Bx{T}vErK~REbF!@B}Vw#y)U?d z9&N+JacP@g-J%ALX3LSPQ2)Rsz=J0JoyaixZ~GzgFo(ZKzPFSOMA7bFQ&}g>CH#(L zymkqU7)nqha3Xz{zBSE4tjG^;AFoPXCWUFB!Iv83fzD%Q{xgxH^o4GCGW0_)wGa4{ zSYCbZ)NGNuCwP07QU1J$q|@_pvF}~)?IlXJ_&H~z#dhV~cbd_M&i4&z12sc;PL55U2qXUc_Qp}*MEq@i1MI-$aR73g^ zU!=iQ@-HH*%IpLYIQU;>8IVsA%;DlRqMTMPc|8+w-51?F4fe{kw6s+oC5*s5#M}k zZVSAlDmy@G-qwV~5Q>a^3}DOO{cpGioG06QHHYv2J|^vD?xFIsCXx=pe^Vz8++0)r zOQDk2f?Tx+&3g>RtBbzN2VoqwwLf@f>RsqQ0bK=?XoG{ba%O~@*>d@HS1xddLQ}oD zP_u#i5bjWi;5Ag2(1iFa{j5Hw=mel9ud(g_#e9@JaSBF$zL9*0{udt=y*tzuB?o6` z#|T0uI2e>>kadmggHS0O{8XpVfgYt#H5u`{7+^^kgK`L1tRqzC&~jPU#$vo+>J2o3vBj7q5Z*aq4wf?a zp9DeOdYcdsmut2dk4$s&GvpHF(hZZ1PlF1~rK!>4c`eNzm4FI;i;OQ)jUjj_vW&td zMDbg96e)_x@zC2`(nyMu!LKYbNG|kor1-{rg>a$Oph>=%lONsdN3*81^IpVR`@tKq zKU!0!{OY)nN;%HXOBaKyywZU=Aj{U^3zjht51T3V&+*8dH)dJ4c&S}_i>(83oLP+v z;pejk7#7oMozHWVoD2lsXV=4~xt(zG@6y52Je>D)rU_Wx?3gOQ#xw0`=U^$2U1Mv6 z?BzG?6iCj`#|5q7&CCD!)5n*hJL*Ho*S2Cx@YXj>779yGlJj zF*T|7r19n84L6|(PJC~7|KulH6oz4UKWv&q;uxlvVr(EX3eI}XSJ4EU^53*4tb9gR zL}ax^^~q6_d^8Kij|6^H1Ohp9jxe=MMV6hn>! zcxF40yl7k5_N9=EmzJZnUc$|LeW=@nNi@P2Ur0#4T)2k9xyG2*) zj;VUSiD|QZe)vK2`=o~g8|(KEF;A8d;g|aXX#;i%gtD0WNN~ZrA5D(gKGOsz zhLcHh>tw|`c8fGNK`{Xq6Sxb!(>j8Fi~(lXE0Vxep$)RkLa?(;D3;`+ImSbjEUe0n z;qJvRGS8nJia(TfwgOV2IU2!5R5_{)HBjYN2Uk*PE%r^M6VlY`ss)w*_x3X0mbwk@ z9}wP)k7><($=hm_>VJ>Q|C6+~=Nqox8ncbvrPr?pDo@hCxG6^y3|RU>MRDitl%;*dSI!BR!i{Fd@UU zR6-tq#Cm?SDE%BkaD*XdaM064RtAUs`&{K?aci;SJ=3^ z(l{6jDB2{nzd6XcIRwf)F}={=KpFoa%QMJUwRt2 zcfB4MOe+e3MZI4b^UNnCq7bO<)7Ivn#I?B*CgiRSkiVM$A-Fu*t2L#1C=G~#qMxF1 z7&Cnsc*2_e+X9dS^RPBQc9%M(Ual4I1(T1*9kOAvrW8`mi+=?0sOM{Q~*7>Q;1rNLW{=I05xMWl8UvM&m{xpAk#o`&Oj!8ZD2vnVC5rm17`eVFZB!l z>)5Y4xER>Uz|qI2BE3ykH5a(Nzb^+dk9#yS`CQ^UcAY>k7wcLZdpvdL{aE+{92Bv7v2uJg%>zL6UH}0EGIHm3kcgg$UVFGz@6rZH8C4vyZe3R>_Ltz zO1k;HUhjX4*6Cu1Vn2l}}L7Cv2GC%=y zi;8VC?q`{!pVSdBa1i?9iFUC!hWXwhNYhN-R7JZc-EVMSz~3${+awG0lj}3LqlSnux%Q^E2Uv7L6*Q zDJmVSSpHH_f5L~%-ow2jblg;&B@@73d%e;(8BP)*`zr;8m23#%iq#eTQg-5 z`>&n#Uhm-P&c`yo!b^&;YP0s(&8C2Z?_*_UR^O#eIV?9>phBI*1l+f_CKVF68!$Dn z1TU45^zdZ4#{?+~@!G(z?BWC7&lX_}mdbbw*6;N+sc~@>KlWF5Pq)^OELgMATK|@G z$t*IjMxgf?XQX2)i2#CdB)xS z$>z}Z78xOcN3`ji#-c%rFfiZekg%5q!UfoAwkX5H?GCPr>${R(b@%M}X5R7zMEZ}89iF1OAFnLO7GjVf3--US^ke!b5AfkhwxsM;nybP= z4XYymRNkY$p|XB(i4h}H;7rdNsSP4?lULjfuZt#&?S(yH?23qFq{S2XNl(svk02Sc znmKIGQ%SNgLbEzMhO4v6+k&A#HnKT8ZsBLS)LsqY0{R?aI>Gcri@>E2ee+2rMMBz6NrT%JI#}rR8)(9%b&(uASI8gSG1jQ}RQ5W!uCz;@Xt~orW9wX*=V2$N_gk4T zb_`NyHq=e+eggWFvfUF|1G}!1=cI<++H$rDp~eG*dhH$vk~@}yhIJAjgQRh0aO^>1 zMi~k5V)zWNrx7@wM)hJxCW?q>M*X3?dBSu2T%MHDwac>@%?K0UxYxcu)t~%mEXH#&D9(jv!T5_U+gr zH0KJQQY=hWxoVri#g`1;9Y!;fRJ$|}3GK(h($}OjK)}Tgg@>^t?Fh>p(_qHdrr8y8 z%%;Us*Nv&|7MOoCj^4o&k_T0byhjnX%VqB`x#iKqD3|Qnr*B=$fs$XU1;eEA^1F7K z2I`-+iVWCmJWscobWfQ(8z}uW(z$V|zq@LJE9-zfR_Sp7?yQos#~O2?vBA@;3vku* zNh=Q<@rC>0R5LDW6gb&dJDy#5Z#CL#>y{=PRmyD-XN*ns(A0c~>iqumIK^k0`1Hlh zId4ZDcG}vE(2Tu7niZB0KHqLN$5I7dMw{2-t2b*)B>`;>q{qi7a3?C)U`p6zO_|F;HzcDj7;GM^WV0J}=?-U4%*v$>8UYP@-njhfH|$ z4YK`%3<5%334zO(h@^NN1ZAXn6Pfd4%)CoV{1qos0~80f`sH$CH4e7rW}6*+P@_`n z_}3;_8TPMds9V$3DRwDs;Z4NoyHrN%^0IY*$i4}+lG^lw3==`J^0J7wnBTso#;Gz` zVIM%o=PN@wXPK7;dh&B-RmPmb3kz=}~x{}7V znNQ5ypOwny*9m$@$;+iawFwzDyE2I%I3gc%mh|4egrb@&Ty3eO!mSN%DBXk@gdGAE2{?N3~9fx-S~kZAUd^ zMlpD@T9l!D0f9+aNdy^D7AFakp(OlPp+>uL#@xBON>ON3c>ZWmNCKzP`f}}oH-L9$ zu8P){#Z`gRrc+}s)R@P$a-_zMJpnt=FyYHGfx;k-5d(rVYXzbF*O@Fj9P9!v?#rl` zK7?FT(q5r`nAH$DQeP?2l6r`refWJ$@f3j!LRUQR2xyK^>|>6{kfbJ0Ncv)Rgf4J( zz%wv>!K{WAx6k5uK-d((AFLFWP@zf(3gme`v(=vd?|_KnoOfAWt%H}X6$CzrhLO-rAlUMQyiR;A$wAJm#=SSy2 zGY!4^N2Mz)7va$g?MWrft@MJL&}FhC{SRoI<0pW;_RXM;*K3 zN$P}-MDvhoVVu)Lu#<2M9pBzGD_KLAzE6+iT?``%*CSd?*&KFQ`c4VLj&Z;xCwBCDhG# z)L*`XFziQkMRdQ}_FS?-vcj{)b57zM(u<(EbZ^oK4fH70Xzg-@?&gX7IV&*Kn@G$N zD0(M>Y1XCtz0s4L>o|-)148$;s?&2m2g7BVDEgoko77%toH<&Hs45VNu96@{Es!Z7 zT1enpSxSIFs04zuk5q2EBoS@V#AsCp$yx}o=n9J|G*yG-1Rd){f|8kg08at@;t3{l zMSo`5YA^iHsY!$h{Xaw>`wx*%wX7}tfA(dK+HAbh?3D(PYvQtIPgfrWsar(<;DEn& z7v=O^XN(F`u46*|0=d(yNLLC0QWK|C_=uv)&LUIYoDgzQo2LnswGu#&*ilW>4VB(Y zV>px^k{`Iwv}a4QVB2Aq*k5l{I*0^>A0ZS+0dgnZ;`E!6s_db#{_${yk|quIbC8iy zlIy?Ol%8YbaC$(I%c5*!h<|_t-IsuL*8cupb~RCCs=rY&bgtxb%i@gY;iH<^mneH2 za!T7Bm}DKSVO+2KNSPDQI%ZOBt@<)F%mTqN#XUL3>ElSveyl!RL_jy45wd^Ckh_sI zt+7*=Wzn|3G~uH5c)rLJ>A)6Rd5>`B4+;rGjXRi|)=$@-?;!&Az_XXUzU^ zb&9%BA{8ZbHkh(HwUl$X6f%6E6%)ZkyKF4D?+K}Pe`>L@^s%9)9_gXRr7nZj5X|n6*7}6XPRxq8 zkk_gqBXQm|!I6IuiDygRUVWt90VU6Be(6VbX-W4LZVP^6$v57SnRi>-3{vuJRi<2? z!AKZCkpj^M9q4(7ouH?#hndB8M84_3TRO@sjL)A|u07kPN^XH+I}-dJ{GUd8TV@L~ zp;=^Be7LZmFU6eAC_F4AlQEv;egpj$%zhD@D?I8tWqo}Y;I6db>or8~mP94AkjrbX z==}>gA@1(~#fc5^ghJg@DGBFfgSVc0Jq>9gS4`IoG<+;sk}LpX9)BbBcF%)NeX8LH za9pgaW&Uv`CV46J(6vgG&4%**YxusILE;>WDQAN5y}3*}oww;^^>EW3wVUk?I@7iG z)aTxyl{Ynvu1)DXcQi~Sk%!YfQFI_Ywx2hYjSG?17g%UBlnbbf;2Z#E_4fsk7X;?o zpB)~xL?fZT;(+5w3o?=0-e-KSr?$zzZ=;8&BFH>k2)kM_5BmH@C|?LxL%)|BqoN?E z%;08~T8r!~^q4_v6OR$^_9e5IeNcquLuX0o=n+r6ZGASC&cuT&I(#7DIVRjb1Lm9;{S5){TJ}_{vHmw&dO!9+ zUhss!5?i{xJ2u6q5k{#gct1k9R~T~Oe9{pSL4a3xls@19tl|#P35orpU=cs{R(jL6 zJ)5^=G#i~(y8>%U^8W7(5~wfdw@I^n`GwhX;C=+@d#ml_biL3Uq)>gn+K%bSDNJjF zG~M0<|biE%|v6>jl4VTAl;=hv}1(wy(o|k z-i%H-qpwE<=xBHMr!>+UAI1ypnM%NNw+LBsajPhUL`HJsIQKaG0!DI!5CHt%8UCgw z2XN=V78l?5b|&;@w!Exw7k3W2ZtJ;V-gq*DLa8;VyH^)roQz;+5s|;Mje=J^19{iL z-EGdQDrB%bP51A!J}NvdUlo8Ks=KqH32>*@0@7YlUllm-xgGrZ@Ad^;?17AZx$$|e zj3IG;F%;_bb6QI2SQzlAJckJJd0gD9?(#u6{zr}aKnxbRv6UyT*P??VjJoPJM%-}p zNKORZ%#mhjl-F1Q_Pc+%tU<fR#VbvT-B_qcm$ZP%rk4L8Lwa<VA^?|a#HJAM-RT*k*j z7ox6!M<|}+-Ka~7Ft-1AK3o5H&9u8W`fHGZ@SuM~d@0Np3c7474=PJ|NwQVbt{v%& zQuY=>eOq-v)2@;>+ ztMDPYMbt5eAbl?2D<9E&x<9};?QR-y={h3WxEIJQ0{S6|B0zd&p5=x{9isyl9mXjW z0Ok3Tt)-)W5v_kPNtikJh=wFtdWn#Cv(Yw&`04oJJKkjuBsm`|h4C(aS7T9R6_7Da zx&b(I8xdHulzL-hoen$yQWs&(kk)mVY4b$n_BDBlgkXgbu23zR&J@mN9Vs%k*K`wJ zW|O%-isQcvIxpi+5kEq#8B8tkKGpwW-|2?W9h~V-g^b;Q96a!6)+^8jTj9WJQc9h4 zoX_wjO^qyvPAK%|iz-cHeqb@Z>Yo;Fte@W2O*ivF0p5QKOM4xd)K_` zOC?ZGxmIDR19eZdIUQ~9e~bq!!zn}=mxN#=nxzr>$=(JnB8S{*92wNueF%qDKqL`A zhGbjX>b3&4fL4!}H+@T^?Q0`Y|4w%&Z}eZ8rn86lYgo0lN*Z7H)H>HMq2i+bKR+(? z-qX*Px87&jhd92A`d&ROI+S~Wy@gT?(`z&e(0<@1_21i3s@&xT7&f!$g!8G*)_c20 zb(*kJZ~f7oRfCJoMUaFE5g78ZT@SwSUB}PkT^~@433SxYl_jqQ+7CD`VxPrgpB!HavyH8_J0RKRsW0H8!WGS;@1f|#2r1r!>~UByGH^<7ojAyPPtbvi+M#5 zB;~Q%9=ozyIN&9#Iv4Ae1((p&XdzGre+LNVugzOY09Fl#d4`7hTg%T<`2J$r-5O9a z3>Mwcfk6jRr4lTeJvA=P4kCv;17m%D;0Q ze@~IXP7tiqSenxm&h_2J2U0rw(A1Icne~~xB2+Xq4?33{OZ>|^$10ouf3g5>9LhtA zvtouH6WA?;lnR?*-L7>C9-}hLO>57gz>lMGcU;+v?{pSqh(P{(*0j>_2qXzPla3PH zr+@IGE#^2wUq&sNcgX0wDtj-262?~&8&qr%x<*~04jn$`nLIq0`8>lI6pf}MaoH5&p9!&|M!(WU{LBFE{IY1K+G@*vpJcp#^gY>pQgXL$cWC5~{E?N&Hs;3# zCAGnQjwk_??|lB~+vCLUh^aAPFgN0J_(GUC2)nMb8Yr0GWv;7jzAkWLmJ<;XPfa|4io|9k=sr>p4 z1qKWhIFAowMcYyE6}!Y1Zrr!2YUt(44nknk9%I@*uIUThFeF>NL>cT(eCbXJlNdoiJqX$k!k$_FVJ7`8%; zbibGs1s%@PW*S*{ZQumy{0D^{ErLa+@_#(llUiPHo|+SjA++uL^_<_-N2@W(ze1j` z)v=S-U}1cQ;Qftc{5^jVoIu}qY6SGVWlCCr!MoXY#@UH8tqBQ6B61i}e}wn6FRbk? z>s{pD-eYD#QERqC?rx_H?bPkT*_KR$jx)d!CX?rIMi9b0brBhY*_Z6{2>A#`WU2FC zC%$2RgRs}NuSG(LlM%A*juU+;PqjKFfs`bSM+z;FB^4NnmCfR?AS^Zd0b1=^ zD~IDP);K@)R8$A)@65!SOq_3q!g$VorF>hyf&7O2o_XKJG3>+4f7mw*AFJsfYkNWp z&6RR0gjJ+nFuNS0ugFq=Mk3cm_R-6y@0p#*d4yBL_)W5vvMoVdE*_+2SS4Hgi>94y z4|MAa&|MTUVr7f7?%6(_X2^x@?zn_S1PwRApj9~G_`?NQ9#=qzPbN+VY-0a3*fACk zehu;sX3(MkqcFM~V_wf4wA;&-AUr2RbLnkzVuI1-QS*L(vytSL%eZ=s_g-zY^tsT)IT@v!*i3*^tpb@!JBrSHChn0xPAZel`izA&jb|-!rxALF zs_&$E9S%@=vuIbCv0kYv1u2GCo zFTekY8_21l{lR*tfzoUAqHOy`NEx8s#|3k#?NCWUs7j~$WU+Qg5eD+)QY_{TgR`Ei zvx3X}Cie#M1ssplm)x-BW`QR`=|KXJmRqh_CKHl#Kpv-Z&8oc9<&L&m=>BI$0U!8S zoF>BDv^uCnwM?t6dI-En@Fv@Ub0yN4e3TUr0J={D(gFDnZ`jS0DWm`@KBTYb1WKWE zz2bfdBG<}qk{DliXrZndws4aPs2sWp5f6)DmCnO-JVOD=g)+}Y&4toI;GAElezN`U*@BhD{rXIA(+pM@A3^8?Sgv%1-CPpp4yc#l=W1c#h*RE?` zwkSlM#t_tC@wUE3S*s17=kxix`rWl!nNeakE-)+gHmQ6A`WhOx|Nmp_o1!a?wxwgcW2ZZ|ZQDu5#*S^< zw#|-rl8$Ys)3I&af6l!}{}}gWjqm*%bFDe6YF7Djd6>%1&_T?w2t+2lSq4wj%7I7g zF_rAn?McpnwogPD#47s|Qi=4#mb@|iN7i^OQ^jM0%*~8t@_g+lKd^c0tt2eA`wf5> zdNpDuJEO`@1Bh5L=f`6;yx}dDSt*qnEL;iN2>~fmyz6$aoF2*MlYyQ@h~i>*bQ-A+ z9psuF)~FlvFrsR0eS)3Tc8)m$CL>@0v9o7bG${@p`F4RJn&LauMG3^Wh(m^;%XH7$ zGgsLzEX5|3NRJ<6=}I%yQ=&4=>VvR!s)GGYTl{^>k@%--FQx3V!YrT5^+Zl2EAzf> zM4x{GPwP!q%nDi$R4UjEoxgy}{Av6n7L2*|8p}XGjV{cX#0`U!fyVj=EBD4waE8*nizS`iv zyYb7d_oUgYC~7y4&Sdp5vAf{(;={qur9SuYdFrEJgU|iTQ6Aw_tCbcB4(6eW#_DU0 zNYOPTyC~p+{&%H)30MZCJOY8Hw)GhSvVZ#5t00O8IFtVMF#DeK!Dvr=+agetdc}o& z+)IRV$S7ZFiluQoa6{P6F(utG4=@mF>s$z3M2~N zU6;lK>!(&v(U*_#_k#y~ac^(*;II9Pe8Z&@fy^rU!qQiiE6>DUm>%i7neZLY!I&iG zld9duJsuok%Wp$AB(`Ze7)Nx9c9{5d$QQn?e{krkH;>x@!33fp6>=;DiC^M|OcZZe z%CBHL?EImQ<;t{w^R55i;3TLBGF!u0j!RhDFh-PL&v+OICThlxIuD}@xl|d1cAO2r zYp|j4{LX|?`@^)c7PvU}<`8}l5}-ih3{OT3uC7fi--Q8)YW@%pArgnFoy7;)p8zO> zo}UE+jtY_jHHaC7NJ8FluD+T4`hgjEeyjaM$VGGRAPL0cX_5pOLuEVUKar!O3bO|> z@zkhFV9i!Yukc(tx^#~w732h^*p+nE38Q~IoW}`Hjddj)Rb2$5C1E}3CPFtQH79HI zCkQ5>MN!a7RI;oYvX0OH374Vr)1oY7IxmA~TD}UB0$w?s>tYd2ye&B@J;7hWMLrw1iJAFEXdK+tF_ntwU zl%-o{*=PtT>zoezxac0kldpIwKG# znulS!9`jY?}>XE`Gsbsv)iTVInIu`AWzp? zmEu^EW5zgaR1-n|=eImPW#!&U7sFoAH7+u=oWwx9h44QiV5zs+gzC#K0>8CvNq`5BXJMgHQei$_4y=q=Fo|lU-IGO zBNokD+m)!*#z!&nVttwHc>3XOofnISPGK!-Us+^9ow?h+ex+JrTJB>XHD9XA$OI`d z;zQT{Bf@8Q1E%iMs7My=pj?TjSMO*MU-StD)_A(<*l@yNxoICmMnFt3csm?R9d~{E zDfxptR%Nk1h!M63VoIjutT!ND=XB!lz1HAqT-|G@AqWnbUf4QlV83Lcgv2i>{nemr zXt&?n`8oXZ3hLgMJU|>G?yv@l z=UX`z(v6cCVu#%iisxR7H$mufo+11fBw^b7zwMrC_V1@rJ0M$FbxW0Dy%^s7n20j; zDnzk&P<3m$7KA0jCoJ-KUy^Jgt5yF!S$H!_V=Twj!Y{*aqtdOEGN9^bY0$RK7pisd5lAxbH~NVAhB|tmJV> zh@c3SK89`v6(&Ui@l@a8&6YG?U|39s3pEO3(y_PLR__{Nk1J?Wy8tX28K`=f25KT( zb`$wiP&nV(`zh{9tPSD&Xt)kptU|Kg-O^={D8!ZTgkf@YYwdL@gQpe#n6v->n1f=W zGh5~@fs0Q~Zp7+lsl6CGA;0DPQ5GoQ#|*EmwtpfNram7 zxTBe)j0>cQQnGy7!`UG1d`=7|&#JeebBQyLlP6k|LpOU@HrGm|B@D<#DSIqt^1zG; zEtl#bgjKgCAH^A5rbFN@p)0`ZZ* z?KiL%SS(AUXNnGn;wUkpa*HuZGd_k|0gq=1_ub@?LOu#++x%BY2NmM!14b!VbQY!U zIZI6iC5^sL+H+DQ@h1qAw5 z2bYAa%{E{@P**F*abkYAy!!fW0#lG>{VoT?3e5mi|GfOp67doxs!pHNSso4| z@It++H0_v%a#olvJnZ^It*%25Dkvj(Z+zdt(m)t1!Ztx~IX-#&LZPZgy1xZKeHI_j zP$mnVh8uM7s_Eo)9cfg5pt5V|R|)|wQhNnKiKYQqoVXXVfmS`e{;jL;s8t}mF<@68 zoKjammmt&mE%MfzLbRrCKNvaBj5-G_tt|MuZ^>?h^h^X;yYHq9-X)NM?+LALyulQM zR%z-5`<%U>0U!$q5*oJiUytX*plXII#2l32-D8)F?!OWpv-1@Hy*zGrowT{Is7u<6 z3%XXVm^!ZQ5Rddzu6Zv%rr#ANKa7t1w*AHy3Z#(d#z`y*O_>_q9RL%>y;5ia0x)L^+to1>Ago^89g1WGDfR@p_2fV+ z$lJgXHL$2sd354m3A>bl_6?Mk%@p&^!4f6lu2sXe{EXxWNHrGP5tU~yu-gYyAv<;g zSOkDTDlQVE710m(wlpWH`w=6k3L_Iin>aGd)&b{5b%^-T$abc=nvFmhSF!RVOOqGx z#d^5vix?_*?(*@W4mX=%U8WLZ@?whrY(Q9Hob|*f#~XPSYoQ(=4L!amFSQiU$i6~R zY9>{{!YZ(3T>r!Gm7VdK^a9|l4GoIspJMb->QS+O1F3}=8c`Yg^5{-YQ*s~+kJ8E{ zPg-=Mo@MzMyvqPU`3x$U%w!JC{K3nV>POwSBGF{dx&)`8pRs2@1xW))7g=t7JXu2W zYRl%36tE}6#~q=kPaMn&OA*zN`8C`vxTOx|G>VfSviP0sC}g#%M#Y+BCSbyvLvlz& z9R~8xjSvTsL&P*eqgE6_vlegTu*1dIHxSO6=NH;_eXUKXQ;aooPCkNNx(KwYI)+W% zJf0yVSC=>(fVxf|TM(1>*NvAng+%H3^7(xJ9Jf1oH^P?b!$;2fENR~^ z`7+Jq-V}e232~qL7pDGjo;1#aImL?T-+W)G?`Sj34$6c)B!n`wp9qhREvF+5AOzFJ zmj5m|QP=D19rZ)C?Ik zQ|=y?V`zshxEmEC-E`K=2HD;}w#^AqhZqBLk5u@jM^*9ocO(SWe;C>gVe{us*dFzT zx=|_32Jm135FcLUCom9c$LhOaU@y#M(JTq~2&(q6SV2SZSMN6Yw^dAae9>GSDbNHAs@ypHSNEKwXXQ)3|K{5yyfHz{oaZrcG?0|rouM7TT4#XBE zFA!3H_(#VNP{;Shtf2wx!qwoSJ}83fskw4~ePAb1PzxQw}E!`-r?l9EU969cMu zn*DP=*V@n%6IM7)rX>l-Dc2qv;1&5nvb$sYtooM_qRpIXj;EUV!}&Te-@BPF?P0*1 z-pc_E=zTELGsTTy+>lu~Ig8R*>L&UlAwIn8e%apTT*ee;9*oGM z(|xWYJC6KwRxCDJ5(!`6m-A#unK$|X1~MO618to0R_Aiw+hFwvW%|Ru1BLIe)|VU( zTYysIYS;Uvo$dSL!Xh~pP_9S-$=ywrs#R_JCFRd#ExxaYv50$@F1vvHr@cjvz(=4{ zdlPW|xK6-Q$G79n^tS`oS@g%%FwvJfAs$Q7_z67NXN@R@7y8Dtaq;6A`fW62njd^60+pMkLQ;^QSI5f z)6NsN{@evp^Prn-W=G^waCs_&XfXWM)-md@&;+pcq=M4e)ie%VK<9j+gKWR}Q4F0^ z+^lueC{}$>A$^h^mIKxK`FK}o-%6Ci#WzgkGi@dXj@=4l@)2b6F7mr{kg`HU z*(6))AiHO8sU2=125vB0&<-9zVoLD&%FDAAlIB%ugkw<)D1lzxB0Y2vGP1My_>O&` zp<&Ta2MT@r0yVas=&>9105NRW)F3NrTYS9%-!lO}^7;k$XwwYRPK@DH%yh>Uh&(Kx zN#NLbmQJ2QJJUc|s2t#m#v*?rLS;I!wBL2P+)sLqhTMl&``9_PBpHQ9W2L1~3cKH^ zI3p%_%I`x{eP(FG+zZM^p<`#_OYSvg?mA11-CO{`SfA@yzBFuEzp7KJi+U;3H>&Jy z);4TwYnnlaoE?Jo9)C7_xJ3H?L4#%X*MqmF_#J;|uMmIytK zEO4RU(lO^iv>DiG9#ZR-O>5_&$oN`S9+1M4-bhnJbmOfkmN%3x|7M{i5m%;lp7-aD z7(SLmclLh|xg|}Fwz|lL8_}n?n@$wKk1yM0R#4~J7;m0z7WGod1{lEzrn1UVd%(z=;YvNZ zG_fTni3}^BWC&8Khtmu`H<`6yAO8K{x_3$%V)9NS25bC$t9W~9f4C=eir!S^KQ-)h zIxwG~XYa?gCfc4G5$8>ZOH2~koW{A?VP3y%*QpyKjip$rBG9rBr2vidHxN%zhWUn1 zS+90i68%uPj0Pf@XSPc=QtCjp+sn0D-E}OJ&2Wc?kB?+L z*W*sp1RkY*6WSr4kyi8c3EytR6;iOrInlIgCzEG6YI{mgP- zGq62@Zl1DBP?-whQTZP<&IrICZ z`Xw$Vbf4xzgzoEz`kjuzJTxJiOC&X~nN&0)sNsP;=x?9>r2nDkdq{ZA4_B;Lm)w#Ca@>+=Z8EMA_<$GOQCZIr}Z{r?lewu}YzzA+v@jCbgrXp1g=GDh<-I-U|Wi zmbo`nlqjl*+Rex;=R=!*XO?)` zcJXu`&EBc$?6=iEXe*Z$Xj5f8SLRdzu(w5b7_8FvFIY5^A`fM&;KXrMm~8*3_b;&r z-1KbAEn^b@V)G~fvwlA6I4gq<8xwLOAD=x76uvwC23Y1ZhYdRSaE8^y_da zCP1HVoLbTxcgK@>_JDEr2ZF2s6JJmW0GJLL+PZ0>-FX@O;0F%%_^V7 zup6H=dAtf%72uv*6{%3Q6D(!zV9qD<@%vLs8fX^Qxb*OUyoQYkeV0}R%9})N`%LZe z^OfZ}>Ig3lv64h|jyyKwVm){#H~ebS@zD6?n8jRB#&52kN4Rr4zNf!$`TY)Cy%W|) z+;}gQMAl-m!!j?t7{^RqvUFPbnZL}jgkWKqo7PWWG!<=h&(Z%5Bjm4!uO3@a>VfA2 z5)tnfxXWl6vR8zhZ!@1U%D5&q{tdN4v6IQg$7|Bir2uoPg)&==pdW_c85U zzX1`duaF9TF;$ux_Pp)4U(6AioO5Z^jZxt!t&y4LKc7ZkhBv$6_uvLR4o@Cp-sM05ylBa9a~`T#P$U+cc(MoYvyFRPt1cW@ubQjB zVcIj-yWaNzftb8Ju$v!8&+mukL9+<% zkM~wQ`StHgD;8@0I-l>4{G9wmI|*(?_^h_J9qZL%LApiFKgkR~GjR-;z_ZgZNCi2RVJJCVYY7;6~&^%jD!KtHIioEI)kCoPM<4TZ>qPa!T z2Ux-9p;TXmw5Uv7O!wr=^^nI=7K?V5B_OcWACEdn$DBPwtqi*yC>~%4wDXjl3dSRb zAqX;K-tZxlWzsoxGOr=z<4D_tZe{EVB3`|R6Ue8GH4FqVnVlM{tU?1;G_-<-nW5*T zkGRdrno8hiq$VqDx&)>W$?VIF-jyEyH2Qgy_@;`zE#c`4ioQFYYYj#fKYVMcmOWe% z?Z4^p?>yZIH&y=JXC^ZYCD%O2{x7B~g2+*_%$#l6aYdxPNuVgxPF!borhr zi@^|6ws5KN=zFR6@+Uoy;1MJQ%UMzUF6oorLW;v;zeE)dFgIgCc|=>0Ur>NpnDVl$ z%1<^HF1*Z7bBOq{9Rb?rpv}e+|F0*oB#9dDN%|PW&+t6Gfkk zpUY7A6n4qSf2xqI>cN>I;O_d;v{<7mz0o@g5{>;=W4#+@w``ZS{o`?^dMM8KYFpFK z+oNoqV7fF4P^L>HYu0R<$~$BKd%ZkZ2|+fRNr0ahS(?7()|rsNB}_xAZr8Kbgy&%N zdBn|zc$ZVIpOY?a0GOnQO_nQj4+R;V&QCizB~rVDIa0BHo}D(RLB zLcX5V&`gw06*Vkyr~8vHtHmMf7etj|_C)J5C^lohhM}baz^s#L4Ikte)2JZJybc7WrDY>jMtQM~Jc0jSMrC~L5 zMgsHu8Kehne$=$XEtcn_@!E4qyjEK7s-ViKP@NeK$vKOc17n047Lt=@*YsXoI5Pps z3vEPi5)rS@BC5T0Wzm4EI;&eQGw+uE^y(pVWedu zKG~5_P_R3*13d_Q+tIl^)o=SlAZI<^=1>uoXI338F+)4T=JQD!S;UDWf0*`r^_G#F z^E}RcJLO!R3!t}ZWn50&{RFBmzANbt)C4U!*zp~3!fSH06Qy73>B|2jT@{l>VWvux z2I3KrYko^PN@~xNSWj!kn49x3M8wCpylVZF8x#eyDV1q>f@v7+#xqG>Lp(}4uGikI zLgy8in+Hy2{IGIAWS&+^}jE}jyvzFw_r9+yA^1sKMgsZ#1 z-Q_R+rO7Zo6MJe0+JN=1g21A#`t0|+*T?y1i={LG8F~3>B^LoQOvoS^sMQ4f0)hfw zHUwcZSc42zeJNlpfEb@emr5~Q9LH{#2HU#RmiRKo0)B_{_S+=mmF(q^lx)(mbb`aN z`q!u`(q-&7x>)ftK(PdbCaZ?{dW=}#-$Pn)iQv%dJ`Sty}`oK$d-y7KUo#~N~fD0IIJVd=u`Vu*aJ_2lr2 z^Y~?Oh?qo;f;*7&<7TZ6h7ZqR=45!t4ow2jOmA{}Vx(v|c_RCm2eP#`#PLv(raiWq zr3M0<6x^}3moVKt!jvB+1~^qakoM(1%rm{Cb$czbZ%(Bqdb z&qeG<|Kp`=W{UhTa(?n5iE#(vsc+3TlNBv`D^)))6>wjZUiT5HaBVT$%PjW0{j6T5 z-ha%j5?^UG-OTOUlIvFok#|Q~;!M_POHrO8kb=|lXHN+Fa%444s-I8IpIdI-zQHK& zd6I!NLaw{wzn)ADrF+nCtXM48oZ0AXo+f)^b-F^&C2fqs7HrmDw8{Ov#omDrIC0{%_AcT8AYI?gFHYwc_BZ7zid*$FtU>SzazgPn_TE8xw%>5uPV3#0+KIZ_9 zp3lR(r#h>zX=k${+e=R}%S$gtl)grAR*CR*<}Dl>qHsjmvHA=k%D0@hAj0&UcgKJP ziZs#GXa6Bz>*c`69U-K?6a9OpVPb8J*Zut`BZ1Fc=Wj#T_nW)t36Jxa3+k*bXa0-IXZ_Fh z6>VLwM`G6xB0H|>VQ}Wt^bjImUNEt9Rw)RZdWKt>YRytE?cm?^c3)Te$u#!d5_1o| zvJt4`7B{;jtve0M)w_9_A$F&)F>){#oq)jk=F%oaJRdh62pmu9^TGN1>d)q63%1EJ z3%w1CAmZPrrX4W6kE2RhM6w#ORCK}(o=O`H)gRPhpQ5Y8f8o2{aq@PvBgGA88rPmnT! z&8-=kC7{%$mZ2W!A676|#8Z$|6fa_=5&A&pDK_mm1oCn8ph)~>?}&gAW`jRobZxHJCv*YeUISq}ydzv9cI7 z^F$4ZAyF&H4x6Pz^ zv8Ln6KZ3QjS!Qr_k2m;hK7nCCzxF}X8;r_NP4Zndb>c`YlfwWTmnT)$XYWdRdB}x& z>|;wydO8#VD#-V^*b4bA`nm$)<(uiqo~p>Ht<%TZ$HXR!;(&_fqjATov-7xx$x_#K z#&s(csowpKQ>I%-B~$AMGTD)OGdlUF21F{8i8?nPd4{%R1;2vu{I!ZLk2?Z|X8tsj zTzrYZowDZh7U6tNgTZzzuZm5m8H&E%TDzBT*}^hp?3t_AdCbk{{rmc_ruEILHGxXs zlE%jp{fM~kdvm*j0?#JrUFE}r4@~>La)posbS(7}a5;KzK!p<1tNO;JrJ-y{Zqse( zjMS+JxMk4aW!j3;&9n1(SY{o<=^b*Bjq%md?pREAf&@325HH__VQgqp2CnM%KBS6MwT3#pIueKctS;fEB#{vc zRz%K%wneXSl$0Ru&S-4Te0*6<4CcW_dLm|SgPNuGXqE(th8hw>Oz?R( zCHKeo>pv%cJJ^p6 z@vJ>)8>$!U12)(aWx-vbYe_K9xH65ijGMi$%S~8ZRkuKnL^tEpR38Tsf@Og-53scJ zGsVJA2l0(TcQa?Qh+%V$?klMDg1`0i?CxhR1QJXIy7k|l5O73`gA+5;-fC~1iTl}f zF5f9Sy>wv~pQ&(uiei8DVYuRGC=7m#qnXkB8_p zd5#g|rb1hwiCvhrdAUwHy*{5!njI%Vk~$yv?mnC*q(5Wu+9xy5;>-Y*n#hIW!Tn#b znLw_VtRratvIkd7!+OnPVE(2=?{uSLge z4%QEHOrS6IJBEqTWw+Jpi00scw=32@+H>cf3;RgD%6+tz-UAEOKuXx@7cJWEaHEPT zihsXQ@E9S`|AES$HZHUDf8nim0hR_-dpt78zcHM)9F!#T#@erYS5wm`u$A?eKx*RC zjd+4FLb>DOv$GG>NZjwJ#`o9>-KoEKKXi$8i(UAR3z*QIXZA6PjiMoj#j6PDSsGs} zIM$SNi7%J>1uDs_Buap}su7H_OcIpfXk^$ejDWWt!|?{b5zGPFowII=2?rX|zG4>W zJj5w%(#lzLB|f5Lb#5w#VFB$wlCheN7F2S-$?Q`0aT=$FL1V(&v4lq86uCkkF*UAY zunN<*_nHk*tvXw`Is1KYf^JNR`>QecQ1cyY!`I9k*8{z_?TKYz_!fO9>b}8fhIyQP zB}jNaenMlShV_a4c<$#%tBfGS!re&ZO@q>L~`OZy; zu;>b!A!1~t?&m4dQPj)$RZW>#rA~`xOMFGITCdl{T*`>!Q%!3fhji% z-_KMvGA!ypL+RwIBNnub>fu71<=%N1PRp>8RumBT>21hEG4K|Qj5r1WCv07LYj42g z6z%+rPjy0y>>gkuW5Vs zMlT5Ny@Xb9dZ|{E{xQbYtF#}C{D?fhCjXNxp1u)Ei@>kWk9F3(rZgS4bXroQd?zwU zGdOSg`^qVC7&Z3A`(fFp-y`Z0J<6?myQ@2QkChOe2@ya4NAIgbAE&Kq5To>t$$nXa zDGn!X{E-1O`0aU&nL!Z;ypm#N^$8UE@)1iL%Vgd435 zF`ePTLIJgBjkCj#8y-&|{USOQb>?^L!^2N8LnW#c>Vbz~rNa)m$vWIj5bo@Bg6Cq` z_u_LskKdIQWU?mm*Eax#jCR>(F_t)@*mePRMMBf{LSb1=(q(EcEjPq1Ts5pCwOn4l zD_D2>Y-VIvv@)bpk-h4GnZ_K6J-_%SxkmH>Os9B49R ztKd_zO|_!Z&NL}|r~H%8GpySGpaz3qrZ&3&;A_5s1uQy{*RhF^u~gnDDJN;yZ?Q{{ z4ugv7Xh>E{0e)qp@UqDj%s3(n%Jd&Y_%lYzFb8<`Cn|B};(Hv4iY%;Ho^@%SipkgGHgusZ3`_63_uwXZ zag9|mdjMayY}!HlIZPNiUSb_p3MmXThtpKENdiCD-Yl-Ek7)TNay>#bvX4&^pmqgm z?5uoL4BF5{#)H+MnSUz7W9H+wVpJtg4Jofjgfy-tUN55ON#-raSK9>Ep4Q8{w=XP{ ziqhmiw>7jlED7Y$#$%Ogdb+%xlEh4R9jg5KaHfgH!Z%pB_`Ag(Hs;^#Kbg43L2L0R zuFm=oF0h{ERiw z_tf`XA`UvvJZjL2N1^hyJLzq;7W)x_CaLC0d;j(GAfKG$L$6xr`}w&c#{>a&OJzaE ze$U_h)O(8gJp@=jnmk1Eo#-Nu+2qfm6>F*tYw^2hNL1EW#~DN^xC`%v%AbPPm;AgZ zapoX{g5{67*$5OYC`+7jLM0dutt$_cZ>q#IydD z)_U~@m}gBs*9YRRcHSSftUYSOb0}3FtQp|l^mGhRNzcDO&Z;?VFS=Y^%r`bB*=?hT z94bU9!u{)#w|93fmqoyKkA)jhuswY5AAH;OHa0DHLV>-(d`*M$W!HD*j~nk?`Bx=2 z(Y1f^q`_>PD@|kwLI=k9%9LOk^Zfgq2&oQGmsXnP)@ro` zrMs_I_Nn6=sy}msS|24;)|!E{fCZ5L9MVz$6?2a=!TGu6!We5EuRs#YA6Qi8Q7BFq z4bCeDI`Y6n9v(cGX@|BTDwr;t>W_h~Jdj8A?f2{N)UiQzliGuy`m;}fwZCvW6AQ|QX%NsQ) zh3Ag5t(A0{7nv1cS)weXWGcrRku;#AVJTG5Y$cOMgOh?!n7XV8=exAacSZZBRF3QRffVnTXD3=#_pD{fPz22AWAB(~IJ_yU;Y z_Dp_uSMAgbAcN6qdhqa5x#cO@&llC^2J7g^ z+#(g!fjezEaOTHCA4V(d(#)NHopy*x6hy{pIGcc)?F!e>q@xLCbP8u?HAC=u7vpFi zUtV5M%Aol=rQWslSo&7k$`&h%NwTn4X)Jxd{n%E=)o0*C)>cS91 zP_;KU0cgAmfB?9Rh9rQ)+&mk2zrOe?Rt!5t@@)FpUj;o9DqxY!oGZDlS*Tj3fY^b? z?(V3!Lm9-VrfA=}%a7nOVg+f5-aTSkSkE$+G1z1~ZW*Gd^M)+SDbu`;bk9|_R@uhx zK;Q%lrtyX$H2flyy#okuVFNd8lZCd4h;qY}qOtg6@$hNn8z>}nNoNS;L2H?6O0;xf z3*ERUkG&n7`72X=h^<`+bc^O_`yqyUmecw6LZ1irl4a&oki)rd7x44G(EjexTgU5Ql5FwDY$shwL6 zW@GL+AZ(VwV}LR`=}ac5q9l3pHSgSTCLZ1uk(Q8ht8YH1>B!ipChe3YC$*HJr%Dl| zRIklw0`vx30epbI!HX8EZ%;f^jfbIVoWEoRds0fXKs!;0g1lWXIJZ*tpk`{lueo+v zKpU@}jArtn1^rwlgv}~+qMI^WGFEK|90$$QzJiqjRkhm<-o3Y;6$=;)nes3(o+10V z`m_Tpao3g%Q3~x1Q28o>rz=@v8IcBcOTV8?3>oA!0GD-CVIw*D<7dThfiCxl8qGfq z_7zadx^M1>8Q^w}SE1&t(R?sTDTkoRzv(!lV6Ql{%%$FezgWZ1p^Xjn>2TWvDBx|b zX;TG^j{6GUn8NvKJ`trb@i+M2T;_s&qN zTUc;VOEQIaFJo@*^4$=}YZk|*6<+;wiMO&J$(XuzydEyf0Um-z^F0Emai4d?kFhQOBo-OJwQj{!Z*p#XA;K|% zaH8-Z?Z1}?Fa&QU!VcLcfMnEU99Oy~k|7Y_D2`Fy*}K7%b*719?U-9*_Pkc}y$MO4 zO@GUi(Z#1tT)mNC_#qXcoHqcfnN5yIS^WlEQCX#Q}&k8 z&`5vdSx65Q<9(7E-XwSCs?=~&WFSmAy+r$+J*yVlqo^zbbSS$IWRqB;24}aXunBw* zQ#J=uWsbN^kT@mF!M1~&M(YPOl7Cd$%dynOV<7gK6>!9bLzN%7Hs6I9D8Ph)I`^o- zSs^T7dDIJqC|=jL8C$zISZ74EXJ(svb6cb5y}o?5fV{AXj9K#+o7*%qDbeKK#3_E@ zRbDquqZpv^zl6=0@3l#FN~y--auaB?UE|P zib&=^XBDyFcG&3)V{*jJ*uZi|diDSX7>ljzw*={B@GuR&M15u9+zw&$Uy-%EIDzK`=J8J zM(1G@za~2n3JUiV#m*)&5vzTMkZbC|v}VoMSkl25%xg~l8OkyS?5Ghn=mYHN#}NXb z1J~7QN@mgT=4?2qdw_zyIqE4nl%$S5d8q!gmNIYVRcC>X6@{|p`O!RcnJKbSQhhk z^EzFf;vmrR>=4yQWG+&vPzlBfb-JFamDCWWAQ++?#Q8GJHBG9tgy_S31)8hQZFl*5 zecjg}iLm_9BUC#QL|ODF_pv9!q-cnE-iAz)dseH(@pKwqno&)?z#wDxSg#))752R3 za4|nT-hPj0`hi)mTc`&nhG88MBw)#Z~F(E^Tp%PYu%-*Q~JT*`?#PK zacM);jWSmREsua9aCo^{(=P2Vn~0f5kWG^>)6WgsPMD;U`2s+yCY#FFH7ajHZ?3Zm zl~O=v`$$vV-$;|kq6F2Fz(*lX1>^AOGki&vPpe>w>Wf!KaB!|}l*;oWNtbO+q6dF9 zFWv9$W|;XsRV)YdfVR-7XR+hYvhGR9E+uuy7GhfA4J2r;(3(@#y9D(zX>rCiKHeqH zNilbn5Xw%Wq_^9ij%r4tq;V^(u@IMVap|w#lokB88r#IG!OrvCKSUES23m2MN5P(> zXanxsdduJ$B~SWGK)vW{Ve zlO8>{ zu|%H@UXO7rc5D66>aewPB0;_5ks=Es^kkx=!_O7pXOCh=k_Ti1=uGUZEe<$<1#{9x8?>@;MLQz<#`=a_X~YfB$L<9v6o*LNSMASJIE-FFo>`Ew|Km4J?RHZDWl z<*@u2{Na@Y^)81y8J}ycndY{l5eV$X=0WCLX;!?#s)yOdOJfh{AR@>P!U{s)HL6yY zX4Ybix7s^hDs|jud>SjMCNF>d69w*%E#i6gX6>_CUTUv(^;8#yzhd&J1lCk)mm&#! zb^g<4PipLxbLdR&a8}bU`1k~oBE}MS^y?Avza*RHI*&zCc>OX4rY&4av_6vCAaKau z;vh#v5x829F@scSZHB$OG6(M;?NCAt-Ce#goBLm)^B<+5 ziVpIhG8tJT3nKG_uo{wfoLGZ2S)Q`kqWztr<)C9CVjm_nmOosag! zHh=x2i&o`euulVYQ`S;_oP6qTA=F9_xdEA+w8^%WG(iu$EwMmHrLWQt3iDX%HA1OL zQiM-dbS||hxN-hb^HTOR3|8eUc!eD(Ix%`8#Girs%G~mSm#*5^(QcF=0(MbR@#z(M zUZ(KFD98QUx<>6cbpX3e>oDxBMvz=suP8bMJf4!+xJ&kRM z)-=a^3w=ZM)QD_(VpDqRI`?!XVb7Qx(+h|jT_XYuM{k&K2RN~>ryRe(ztbVILUM7-X zwZm=iu9FW30g#oG3?E7+yz3!=~6OP#Eyb`PL21II&M)0Sjc3r9j#naHW?pRAS{2;7{E$Z}YFf_PD zqq`;Wq1Eo=ZdnL4%JDa&uJx<6>{VpL1p-e=FW&;fY!*>gZgx(HCOWX>j)0>ff~w!3 zX`m5{I?{@DXp?vG=MwQ!qi!>vk#by;I&@^|4M&_jxbVE`HGl+JOyrgs&jv?L3jZ}+ z6QE!oHuv+r&Eo&j$p1>WsDa+R|0G?srbDiW+L5yC<*o#2nnN_|{5%$^a(`zz$S8GEXr6a&lKX0R!Nyp?fZek3xKh)! zgt2ozlnyHxmod=^^h1V4q5B5JvSM=g(3MA1fj)=A-YfZiQlkzynY7C2uwJN}pI0?cr~(8&wFtQxcYP2M zdS04!TI=lVEKD-UXD*WZT|~gkIKGZbm;sD?46C2+>n-d~{kR-YqO8lG^I@Nmp))x4 zgZZIDGu3`m&ba9ZvgI_scx9?{_c}EB2h38lR%$kpzRnvtvi%xjVoB1Mo?mt*S*t7P$MTNeo z74L2S?j>b2X6sq8Mj5aV)eVN^do=dwN&tw3M~EGLS{KyHZ9d^*uJ^sDWU%dCHry`{ol;1`;P7)><2eNUqL8ZAi$-PU6QDdFbOe?y4eFm zsX(|B-kZ*f#hJVinxmI{LjeJZD<+ju^b*}S5`iNdXLkcP~z`szTV zT(~W(ao804dYd|XCVfRGd}{u#alerk>u^wF!Uo$5#d%r;?;zY{3Tjh5d6icCs zXK~h>I?bLAT%&!R>@TK5F>-0L+k8JWU!@tUTSAbA(U4CtiSNvNuRa2}f%-NtYF9O1 zN5is={20Z42o_D&fnLaGL00v$YrMH77HU7tT_*QMt+rSy)UK;O+X9P?sZVSc-}ikC7E2Z9snl}Atit_t<_KKm@LXi4##$@Q_sdXg1ue1L z1M}FsG@mM!dgSyx6?H@#rFi*|QX77%U(R`XiJV=Ca94rIbhWoS*#sm3_QwgaJAF2A zf4;nu#rxB`eW%yDEx#qjBJn(MWk%OkSJj$>?c#x!(h<(;Vvs?;g;iNql@VFQQe8w& zIcb!i1k&_NIK?Wvp1DP2(zWd!o5`nNnYHDwTA% z#|HkxFw1@YZ1wwY&N$KUX$45;@m>p^=I@uFUGRHoeBZXeahv?YTQ@f`JK{PQ)8Y(MLAn#*k+|l{HKfU=`)KW0sTX_e(t>wP-8b+r z?b!5~VUUGJW#-V1vF$3UV^@BRU}S&n+_|_eSEhmHCoHO0b@yxzEMAJLfEtR9)@Dq}Mz9u)#)DkgA0C~!I73X~?GBN}7hAH%Ed0&A-!BD$BhXtlApy7Dui_M)|XnO8uMT>zbEwbaYCuGPbGB zy0ICZF)g1gW#M_~FRxoQn;R*c`#%EvGSlO%WE)Z@P|ez=k*vX|7OZdc!xWOu0+IZ~ zE?imG-WIrXOb<1jEXNeu>6NDALvv@VGeq;6cYhT-=yk4?PHj!Q!N-{TblZKgR&A}9 z&K33nd0boq59d9+**TH4RN^58bvRy-+KA~FqH%N;Z+IDPBHGUlar0ibvB8joL8 zR|o5NB{o$Q%kCM@tgQ_{e`CHX4l~+6ZypT`=$?0~mrWbflViXo-W-Wa-tI9<>BEgs zw{4N)AI$Wm)?#vHs`FzxyPX?e?{e6rI5hpau%2sQc=2SCx}KTeDnIu*3Lf1u7iowZ z29DHwywBzgdB6Ivx>XR~adW;ulVd}|vV$Pgda^qcA{F=w+$&Hw2kJX;0BQqE1;DK6 z1JncRQyV>s$PQVatkU2phvprNv~mwG`x7@aY(^4$DgAl2>jGXL!N@G88eURz*rBaF zSowHyzmY+82b=ahU6KU;RqxtuUs_(@bHKTRr(Sfgahb_6BEVTRY*d5bfb=7f!+gri zEu?ZaS}#po)v2kR*!TGB|2yIsxFah|j#2$lmi_ZK2P&|0`yqI=S_@ux_!QAXaJ20i zNCPx}rdJox!8&4uWX7=Z-aEUpgM8asEq@YM;SKe$8-^tJzdlcnZ?f`#In*EZpqPiS zD#x51ZpArfS^7rur-{~WL&lEznI{ZB72eo?jnK~H)WQ$>nVz%TgiAGWmUW)i&v}Cl zT3JW;G;u?0>XoEv(MnzUGwSD1D?5%6R?z{F@6@VE{ov7P-QyfYI6;u2=?d9gaanXe zxvpmT%IvmK{P*{n*gKm9XnxecLC!+4T4(fbsZZQ$0*o|YE-9&#Y{?7r{2mU5=w4P7 zjBlvvpf{`sUZVC`Aa+LNTFA7TcQRXJNg?s9{;2SzNU||kX`=n31aea6wv5u`;-bwH z5h$yG&AU>WK;|EZloPtWR3+lEhd7kqZFgW2=ff&Q5ylWjm3l%eV^im=lBv?Br}_l* z4A11CMrZ7b<=A4d>2EzFna`$J$5X4fhoayUHBo|xdQmIABzyFJ=*ip@XXZu!O^HUk zQRiTf&mFh#NhqwUn=AJpBF1Jw8I0q@ZY1xr9+x66t&qjk%FbMTwLTX(iqG>B5=)hD zBqfD$j9k3TWVmAz{{w591o$rJFvjBGxWliepd6t#%V7dQOo6QnD+10etL$a8vh^F5 zo_#aLOvY<^glpcd=FIo*Lf=JG+I~y&J4n^A#xnD{zvmu&(w$Cb^WfSkaKKn%#>sX( zHYn@+TDR_oHu3-9SL&h{h!g@NCd|gNGCg6&oAOY; z^*JOoJdPIlqx|AelLVizj9$X?yr|qK&v1FZ^yUB7SNEoHIoNs?=b&NTtY)qJINW$b zyJo2#=q@CWI1LG8-_4XiZ*iAnrzHaJKc0jbkM1a=jRPh1VNs7&P770uJ1~gL=7z=& zxOV8wrHyDAoTpC1uVxRv-?1RK->tq>FWNpFZQjs==S?b~aJge8IUu$%xcUJ>G6;6Q%UColh~O=IjlE=)oQXeKtsGC>Y9_b$dAwVl%WNELm*VrcBl;xR z@`pzv$`Qe$Is+DsURbSJ=)CAdC&ohT!`}siaRLDIo?m@GjdzWbNuAt}Zq>6*pYnd{ z%7Eyuv;Gb6gyy#ive%H_dogaE&z}6(MJidpjVBw3d_pAnc=A)G@lwbStJpn7`?W&@ z5u+8qt52aSf9FfwX4qP+n#&s)CHYGjII z&g?8YqZj0gpL@&lSh*001}u1XYqACXAR%i~tV{l#o_@g?J3GE4?#G(3p6bPpwMQ_Q z+jxkd6y-n5tO+>cv`+mmMS~d%A@NV)%<~NqBx#~hq{2=qgd*;nG(NDwdvteBaBnOV;nYECdt{Y)5{G~{@6G_ z%56|xS44^{jY`F0v8dxAwS@OlR13H7J)`2WiBo}46C3>!g^f)UcKJ%9@7itFofu8U zX~bvYA=QS2!-ri)-7N!-alQ%^+Ejw%G?h<_~m4w7@WD%eFaPneouNkIB%DI0`Ho}yCS&@JJ2WFP;?y^m@IPy zscVdX`XU#2Ok|xR!_e=7CpFHJ$~`*rf)$HT2R@9fHqcJ6e7+KRgpb>fGW9n&mW>HD z1G*>c&Ra0gH=P`phC}xHSSM4bGgB+J=+ZV`a01;EO004bhostHmBDi5b{E_(fZcAm zGOZHg!aK%WTU<=0U+Oiy8FjYzH?~#!TkF=w-f>gmMCZrQN2ouK&fRdzx{%4ibAqBd zs?4&Xo@;|)hNnGog0vXO*8k@WRa2t<({7#(g7<19j5}_=-Owyn1yMXS?jcM4HkOd# zJ7JK6KpQkNolz%M!If{U*-J|(U*cS-IMnS!R*A|fcc4S^4KB_C*iEPsA`_uZMPorT z_cN;mAY|mG(!%=+x&16iphKaox49+;8;4{oT`H87XDR6ZTO*A##ZtpH_{DpWor2Dg zD<%P-HS@xYK0lC-T3kvY6rZpa#N^cfgK1x@xGSt9p*E~c^M`m1o>=l=cptX-`8d;b z(EB=yUNd31>1?kuYS)dlSiTqElPR=Gv4YAMNP;37@%eMO0;c*ob)avaZ{#*^2b|gwa?&G~U7J_*u zeHp^ohIYE-RtR+biS(6BS(kaWy;A*-4Rvj-Gj2=auF}L{nXXTTQ-dCy&y%Eq4=Ijx zidkTD&7J*Jjb=5c)8wt=U`zvk?run+`)xn`N+43xKKgIKXVTl(Hpdp8JjU`9`&L(g zVLb^8m`Tu-R_RK;^IkjvIukPFh)#-t-JBoh7lXywt;Opsu{B-a(OaO|kkzdHCg_2QR9!}BVeB3UZj0%yFGR3*q*Jk^pz^jkANi_z^a0oaP3O)lV5qwB>BZxysaHUU)jEc~ zWgr(1`^hk-Qq3-54&ss|Q|4rgwrTUM)zWUVIwI;flo&4XV+n*2)OU|6HC#9gX*|2% zPlFN)@(A)!Ab&04U2(gzT_sNSdJRB~ms{lYVPv5rxB{7bnf!kiH)8lTbKIx{h13{M zRZ5U~2t}@qT6`BWjQ5;Uj3(?RXS6y@Hl%?}yJ7N;y8zYbn`WE!#eCKb2FD(=xsRq@ zP7AzAN0vwZ4yC?`V|bNn4G-FXcXNp8rP010|GT!+W@u#om%YVz?ooUoV1fs|=n#oE zt88stb5uSY=1rB+qc5hLOi0^FCqw4fYN`9EqNX5YVMA!)&%-ooQ&iYaADmxw3Qc@5 zPK#fAb>C4crGpa|3=Yyr`HL~-BrsuACwD7A-=xD|G=P7bwXqN{uWr zks)FN$8@7QiKy9y_EB8wk+S1{l%gnxXBc)^L}F6&WuZ?pB?;BaN(!jPB@FXe$Q`pT zhTalG{*CA*twSU;QfHq*Wh)7zgs2Y0$P?lng#EgiTYQLjk~P-Bu)x8}&s2^I-6{q5 zF%yA)OX^_cKdYIZGD?AqkmpRf$=-IbwlsksR^^fCFtMQh)b+;ZEL9gTJHfH9|kQ~Mkr>miHn1-=1ZGekb|ZcZVzyJ<{ul&=V2+nr(y zJ9EkMO3S-`euRD4!ghUx)Q{;}I@32kH(H|{-fLA)%gN{6B@t0MZ_?lGlt462q|7qF ziIg&D#ou)_h%>?YNixc*eY$!YW_G90i%MzcjwP#3llqo2r#E>fX4G<1kK8FC&;o*T z6r{^(^V@sBOx2tZUNv$N=NyW!7CasmcE|RPECk!%`gVVDc6NJyW%#inU-rB_@?32R z$j)PG7Mo@D#`5HlV_oW3ov)NCx*@7{R1TD!DpdV3$YreKXP#`j_6jYy>v35l z7-FqTL2>8XX7J~*HZwf#^PIYn%-7K6C6u)`3&>_Mi|a}kvVz*v>d@~CPDxz0QXho^ za6n?wdBrvW9Bpkp8oAuZ{9Wv(} zhU;g{1BBg>z4*j(>=K-C^REwb*tPjDV`*hHQ(?+|w(?jj&4_FQAFNj;g0n8xro_SW zf&JA+r1dJWd+$rjcEfqNRy_s_+xUj5_E^J~*~;3Y18Fkd%rlH_)n?7Q!Z@&hHqi53TsNyB`bY8V629j52)yy+ z4%3Z_fmg0?dn(HR$pW7FUm>1=OB>Eue@Bj!d35M~@p!mL|NA`ss|NSqn^aKfd)n6@ z&M4^L4OI>2!=&Jl+1D#fMdoL_J|Jva^g`=g!Fyt*AFS5`X7nuS(nc^JC9b!t*8{N% z^m9(+Z!j;SPsXPZabWFC7HDZQLyY874S!-I(OSRV#ZU`bY#`=Bq^>yuhzrLS^Tjc+ zz0@q)NgN#u-Iu|NtYOuv7*p1SG{0Y<>9!1ZBU&P8(+R#-y6a;p=2M~UWLD}HEO_Qn zwKxtWo`Md~hDZX8Ltz3|`PEMy9wvQL8{9Rg@as968p(CVrtV}}TAii*F9A}=xc zBRog(3YsR1FPhDq)F-R_bkmh0CW(a~_ganJa{)bO=ruFLFuPfhH0Betr71w}6tCLY zo?FlnFt;qI7@2KcLoqh%D6n`Ag0YBCE^j2m!X{kFp`Vl83Cj7-GzhB(#94K!$+Dc~|u&uPC6|3+<)mdKA6&tBfM$&I)J9s;kk4_Uana1u$0Lfn>8=01O-U#2Q1bXhIHAj-g zx)@p&IPGJHu#s&3JxaRK*!CizSk@X28Wy_N|0t_hF$}9#N~ut_>8+~;v&KOowe z2s$=9l&sc5{B7P3V^88@v3(WX_#@E2M)yw#Akw8}vDO1eP4-(khms>yFZUm`oe|Ju z?DWkYf~-XlRLe|rpd#wRBu6v>(8K>J2AT6!-#{Xi7Y`&FKx!xk1PQZGn!F`FwfvDpr>Pj+`9w z7$HQcB0eHCMCG#7fwedYdccuL&xSkL0KhmBB&5}t*K~cA^vOtZT3&_Nc)rs^EKze@ zc5SF#&Pqb}LeXi5P9ax(Uux5}BqEghv!w|G^p@O;1xvY72LEt7j%d49qAPf0Is$-N zIRr14rJKuSA^~m*r*kGl#+bsaCh0<75^)No(wsxxSFlAQQnEty!`Ke4FrocgRhwXA zxVU2UP{i2Xh~kiW5*{@}Vy)8j^BpVUZz@{`$LsXby-D{0$kS4~G-;2Rx~@vjqtZ!A zrMf0#8M+VlSX||LdsCIu2k30;*6L}0e92%_8K!b|s|Y2Gl@esOA3{bff2m=*zd+bT zF^J{~7(mab%4Y^R1oHGIz%7l8tDSO|P&QJ?j^&{l9iL_zRkCghXC*;nPtTwHsn!T_ zG&nsld(HMirCG>=A@3K>%Ro7jK*A9|Yf4sQ@fR~@W|~@|B35tac)2sa6V;l#*6WH8 z4%q9H#w^`G^)q!gG+zS*DSDKCN0OdTPIR5(g+Fh}cEU)dXQH~ZPO`y!e}3M_?7yGQowBaxkD>=4G#HZ zjn6cq{M&uO1fAkPaYYnL=(m4(2F($VPeogA)41;_U=7)|32ndN17S}oriF=n`a?`R z-G<+l)eum2TQCAj^!!Ntuoy_cbi}3%}bZM7EfyW^9OMfHXpi=aCbqqS$>CH=se@QGV>G z-bl7Urs|L*_tq7Tk-?O{{i|7A?QL#ly*gKo3Zr3bej{3b$8b$^Xpgd&+t6A+7&<{) z(6g4uWEbb0&{oM;e*LQJ5QMKcf&{#GEzhTovBAl$Vgi%MG@z5g5rS zlOD#bjYQRIyT`IPvpfISM2JQ_S$x$Pxc-nTZOoN!FNQhBFNHP-y-ORsMy?lNCYB_2 znQv^F*v>wHSIywZwX*IJdfWK!-;Ct+`McrJQ;JXSkW@LgwCTc5#^g9p`P0^SHwk>k z*hK!5f)^KVx1R9#8Ac~fGD&!?$jBjGWthcSUMb`JFOw+3>0?H)GH6J`TUvas{iyGj z^!XB0RN)87vTbtN*~KAYKlPpPWjzmis*`6~ZLCaVA^+$pQjOE*O>+l;Cr3$)y!w%S zwPH!ph}9?1owvAi_L+l#Oko|JBGHDhCr1rd2IcwJyLK@)zjEeH)Qw;LP4$q7yz{@{ z(9tlcOOY|?2DG-W-s@Tzvt7(4ks>IJ*Dbcx@pAJT5C{eu0t;@T#l6P## z;+6l&>!rrkd9Xjfr#~e1FW#!35(oq28CKcu5`w*F5U+x%eF{Dzw+$eMo13=hO}IdO z=N(g4%ZrJ^3I`awE_O^40q$j7^#|oUKHrP$qIocs8fL5Ap!UXf=(e}F47CwD&0>TE zb@t&>@hGs%y-W6c?q=_M@x-U6D8|hba3dUQc7qiO^AHnsu!aS1jy_;0 z8Ap>!T#xt2XQ;@9)-BTuwP;Z5TIAFOe((D{Si{sERog$}K}E&3CQR58ELHV2CT%$~ zE6h(c)9I2j$`PN#wc)u$xW`i?vC|jS-MH2c9MaCP_pVCqZsNv~yY$+#2}qs`e7(9A z{hO}))yAnr`QONWkcb=-q8&~1Fs3293>fS6_eo`L=0s%5L2EJ+RjsMYD>mFQr%%Ny zFtney*apSc{N$}d+OV=YFAu~xX zXAW#2L>9E=G#>|@8YhngpY12vl%yUrgJl|TNEh00mGh;uf~H*}Eu`3WV;mD;i&~gW z|J6UE$VVIwk%nixGIp#buhMtCs_5T9zL-{&YC+W;twFEj75|#DSj{S1IwxL>>n3_w zYn_mgi7NxL#W(JpI;OigdJ#z1*KTe!fpQ8PftQgdz9t3OiKp}#n88%^kFWmzN`;am zZMVfojw2r>0_~JQFKpEQ$GswTgJQ5uGEWGrQPjM?g^QhYoy<=?LxNTfvO(1XF-WcD zR~Q2Yr4>339f@y~OLwnW;J4e7z2rtH)g!GS0@Ha?I#Npit5$UL(AS619YZYbw98kk1I|~)orUnM zt}kcEv;Xtj_SD~LS&tUz^%!fk!J@{a*0|4i%H(&NYX#JTeT+uFbR167;TZ&gji zUe_u$0bX2M%ni45^RCw=C2xMB9~ZzD;2Lhs%GQ-(#fP0T}+gfc3F2$A*nVgbIRMD1S3dA zcYJAb88o>j@Z@(T2I1Qx+1jhaVwF;o=JPHynoZI7k_8j)7`?-uu*Vp`pM3*+G*A}a zB>IO5`MHK9zB(KP-cxkoX$Xj2_GP~vt^RSMU1uib53 z!QzV)H6#W=iZn&k?$uhFec6o4K>i$4od{0qTGaSUo>a?Gv`ORMSq>BX%jGoaCaBKA zz)0e&nD`~OWrlpEQZh}l@{$G7LK{WtqE+*XH)X5Lf%X#5hvms+XW!01YI_8|rKfFh zz24FQ*iM2hhFYlN5Bpw<`)l0g5C$6+`fu`yYANcrLcde7Bb=3mFb`Vebw-;zrQ)yu zWC1Rfj7_Y~`&!@Rr5SWqq)f|T>(C;1g52E($u*Fc7m~vEVwCMkYB@~(14CfZqY@?T zpU3lMt86B!M|X0b99L189At{W|0a}INaFL|0wMTI_#Du9uuz1}7kgnIRhLHaK6}IS z)z638_UQ0+dv@U3#^Y0_(~*18d1LCkb@??K*2pQ~wY>5bmU&JoA33VuO~sd~In3^V zF?mLm9@v@lFJX|XG{VU3;W>{-_8T$VV`G0(U&h7?MD+krURs*qHZi)h^U}f6BcKnw z!;)*YtX2m>17D2rW+J*YKCxZ1<=^%mM>Dy)8|E`7M2Kdin>X9AQPmLM8?Fk^Kw+FA zpsP`~)W`W5Z)(P~+Il!LsZ%b2HQXy-*Z5-9Y6r%Q81hDMHX!WvhKOK)?vTn0Rm6E# z2R>+ddgx!qku7I_*DBzB2w=Bl2z1LVA==w6?>-}rF@qQHH873!DW@b%d+x_pYQ%sO zpU3f1j5mXVX4o3cxiEKQ)!E)mx|AF(zmZHDqX^@KIc}bJH`$UzFZ8$A?>QXuD72HX9-+=KDo{}zIJ6%;Q%04McW%#0JKy=VKk)y@hc)9z!@hYKPG-g* z-g8aX7b(9{?`a=o6=?n_zY(Q;(jYc23o#a(M3x)2w`t1hz~HIdK!@ec)kyTsVr$*f@1d#*1eu2Yuq zCTY^Rs8pPt_)YW$i~hB;zp&Zo)Fe^O-M590q5u%eWY=6`+JsGcHFi?Gw30Z}F$$#r z#vaa$Vd=`c2B-g7H$umwdbTFg7q3OWA|i(R65^*VD#?!NUmiM2?jA&kcF(bjXRk{d^^Lqw7*_jpGir*Y&AEj3E`U=jXBzuL1Ohzfxx@qY6iG#zQwlS z>Wl{{W`fVwJF+M%`XJ>YqJSjIE*6{d2+{T6Z#$5%sz>3BBAr# zpI@%dlcLxwqJuOzukdg^CzajpWmvLDI0q@MwWORmj(f(KJK=$5daY5U?QBlI0+oM+ zyxg@ZernoClzQ(6%$G^tAMeq51MDpT*0hD+6lT z6b*^f4C2A?r&u6!Te?I30Swb9xIYVuIf zd8aI+M=Dk}v?9YnUV;_dA{-w1E6hP4=mOg$sB1qmL7FU293UItVoDxac+|OXtQBw9 zvYLeL(Qh>-gg8)DSy+gKXwy7u49{YB*Y zk}*z?-kC1c9Ja&|@NFWMeZ@Wu1nb)r;U(q=d+*CgMr&&!l69Qage-?GIz{xFZOD-#TM#0 zNuAj6L&{EiH~X+pMM@6~6RM}fNOb;nvuzUWxs#xDGGf_@#HQ#0{SbEy9`XIQ-UKV< z%IsC2k~{jxK1P?V>DmpNfUea5{e<(HokjxRL}cRO&$t&|@FN%|&exa$53{X*y&ZX>r!kh6FQmA0c@q{1JN>?fpK|jMj*3p+=gb@N zJb`e3z)eydzpw8Gu6!%|DGS`o^G(iZ(y&pZlk;uCUoI2mPc0A5g;J*BksTb&FqyVN- zw!ArKb9~@PjCFR!xuF+TfCwh7t+6hyVpc@^g=_wnq2w|>`mPJ!FZQW(K^@^3 zQKc2ODmeA5NAG3!7swyYKz&B~qCrWteEh%;BjR(^p=C>V$gr&t^I#lo)7+IC!mQEe zB1v!#DgdPq2DDoLG_=NJMkAlUihdUi3@kZVrUoUb(~$Q3=`qU?!F~y~ko$Xw`7;YV zK5v}5RI*KpE|?kE!b2$>y)2o89NP1FOoq=%pm_Egi&Y3*uHjZQ09P2+X%Y{cwNFl9 zEN#yuL@e*cN%5--Ndf_J;HSIO%j$VRHbD<;CB)C&`=pd-qL50&`0x3z|DO)`>@Gw1 z;F$VQKJq%xfNZyRZJP=i9m`43>di|7!x-%yZ_L0Vid31Ox_o7j|1YhM(iH}}dLpUH zX<{{K`3*`~kP4^5S&Kmw{J6j?DN1_OwNmW}9fFGVMa&n_9@{W2=`ET3RA@Y{P|DAg zL+<6wnh7T8>mS$>I{Omr+@IwmF)msRQGE9~$hM;p+%=h9Bqo zC#$!(R07MEwD_*)L2-Y7THnbWQgGAit0Xt=&k#N9((EvF1aAE^bu$t#stQkeE8eOb zbplV2;SI$`*h(yZQK_$8T<7rQ*6I68;V~Fu3su}5z%BVAvL2@zrE;CNEw}g;%-C@X zfv|>>$tTr^BhAh)5&6KTz&}~J&Ge9eL0BOwgXBQalNaXDalqw|4?+98%O zEhxIh;15y9*oz68nGQ`3gvSLVHzFDAMCdE0X{;N+oAUZ?;7N+)#-RZ8W_rVSOOJ<` znt)qV;Le6pDQZIaIToKMnx&bzGNX!{>G|cqnTvf;X9p;4)E!J9Dq%dh4;I6GhAO%G z<5f*-L+=K@!0l{uiK^p2g~Y0Ue${>6(;=zxm&Gfg1*{T0l>mPv_EXTfRwG&6hjr6U zsg}Li&hF)2l7K%}3`*S;*%eS-jXX4|9hf==h1$7w!Fv4$J~=6J>pjApuiLvyJFl}` z81xfC(5?{&=`U?TLOhT_Cyho~Zt2ybA)DStiTb!nR){if)P{5-m)O&aSQk`sO7Y_z zImUK%6F<+o1c!w**s@=4v9PQR(faT|53`k6K+E7kJTqe9fEEW?~C z@YX8;fbI^lSv_iaH6N_l$EO7EvBblZ`jZ9mFvK#lBaPNnlZ$N{V^gJUX^{OPMQ=h>*FA z{zrg7^j^d-LiLm{@h)kEAGI>5(AhvcCOJ83RM1%zbvz^< ziSuaf8j5)r&IG1XCIg1w03`c% z6#vtXqU-*kqs!WK9ZX3q=c)8gUwIsd@%A>fP}89lEAA8CL#|53SJ`&DX1=ymqpX>d#|NDdYpHf$Q>Hel*h)%%xMBE%EfLYPZ9{dg8dz7`JRSIsI7Rn=gS zmW*X0?p5CP8ygG>< zdFTEVGsU1x_4%)qRNZ}PFEv5s0$-QOOA{+}y91g0C1r{VI$bnjwH#&jU$g5r&pwgM z=u^2CYwe;HdweQo7S7u0^!MtUN;suq+aMd{UJJj+G~*=&Oii4W2VBT4M~odXAU439 zb7xB@#tOlG@=dW}`3aq6=l;-CxQ%LO1T&zjtASIU%!2v;Ckud5d3~g{?8!O*nvb*o zI?V9kWqWn6YN^lI{Jbb$V3wP=x95YC;pq?8kKD|zIxq8x#}%RZw3pztLLc{`de=d>71Oidwg$sld2cJn!G{p`5I?RkoqS6KMNk8gf*`A}zv z7oM^vF_q#GE8;AVBo5dQK598T;BdG?9AeQ0rvz`cTc&a8|9m(Q2JoKNpLYn2f*le} z3mYDf@`CF@P(ePaUX)dzLLBKmVhx`hWuPg<5gh{#2KBIVI`{z|v28%;D3l!79r7VqYi918U(VAYma zNV;&=v;mBF+dz{PA3u7YO8EYF0`TAFy%?;O<#?1B`7lhqk{PtloY)F!8WgE4d4>ss zai_lbX(BlqqY0LZn&39TiufwFMC9)hl**7B{K#R2uSc~((gH_`aah0Tov2wBuElB* zSO12psvVbH2+AXUmlM8t>o1pvfY5TTkgTH&aKyoB<;+SX(o2#Ax9=fzE91gJAi2y+ zf8asy=EW-Y(zWVk22wkc!ceHj@j7v&n`p)`O5}Pc=HQS8tcl38$b$pQYlY^}ztr|; zkFr)@QwbDSwhC}--s_Nc2xi4e;iNA!3U`>(lAY0PR5lYUkVq#BNYoC*xd{xVn5gP}7vnH?Hc#_(uz$+-We5;0O6P++Q^m?_kdIL20&_(o2X zTryKSEdy7n&NZe#BQf4dm2rZbyy!;mS~6VHzPdnslOhn7@g~1wBUhuM;YL~@gX#P^ z2Cd_j&N+r+daztzIxxhm)pt{Z9;uCA!nb^J7hq}=wgy?3mJ#4S;!8410UxWmTA(Rz zFJiJk43e!z{KCGZweD3fYDRT=;0A3qNLJG@9mRhroNpM5p84$+MKEWX>40s}c;{IH zpT$tiPo_qAA9DEdk&s~VbCbmasUoh?_lR?|=jPBxUoWQL>HMX+&QE~A4`c4SZ+4qFPUA|~4OfH=)3S<&<1Ap|lYd5|RwiPi_S&g~<)JmN6v$9%ajIV2Hvfl@9v;@QnjX zPTb%qn5pfW8Ga1_43WIrQ;yvygwUyFnlpDd9c~+`wTOP!?)7$hXjd z^xTylFrkb!G=k@dJ%N+=?I6H;4%Y}F%|%}1Zsf1m3AW!B;gx+eV{jL!JmIbwRt`vr z1&Uo@NTETs`YYjUwx+KOF0kgKNELYbcp}T(y`9ViG-{u z_9rS`^KWl}pAe+71lM0+0y2$H9;RI)g`l6f;{}F00MGlwW|KB7Lk0rJ_5{oG`CLyE7n}F!t$7`SHFZp}Hnx4qh?mN>_wC1NFtS@y12FZ2l?J0!L^|{} zUsQA}>7S(4gN{r7@HzD9+IUfo=+&vU)qW$V&FxXA0FBk$v32VZ-U2=mv`lEeMU=mE&*^?nPzvNfd`pt8JI}W49vB6UOuGZi(zLd7E3`(;Ttm~bD>z`Be=q3= zR4Avm^;}qGxbqA8#)iC3P#c{1SCfu5xs2(eqc*0elgxe!t-PcuyoZzUB++DW#~(j! z`LqCL?Grwj0D{FwaosxtKd1%d?w`)Pg;DUF5WK{C!t@>U*;2_}ctXW^m6k=z5Wv;yXtfm-Juk;Ay`*_&Vy+ z_Fx5*{CHb$lrsGw{G#T}UQL7{!6LimxrhtcS=!pMBCO&`mmQv8tr=hMnuYU43PAhx zoc)|!*La#w8iqO|`wP%*4RAB@Ecx74Ake{`jIjnJ*WWN{s~o}!rYgj}Sp<)2IlR9% z=gfaXM=J}-zKVy~u+-AoHCw0jLYbX8t9@neYzZ12`r5+W#)>tlh;)Qzhhu9zdb@U)qf*FXk|9g?r1TkM?LlJ>@TMrKsFBf$TN|9ZxrTb>q zK~~tf;V^xo|I@L3-D-q({fxELbkY`7Pyy3u^@(@gnuA7gG2Ma{wloe=ujBvddZ*}0 zqb_Ybw(X>1+fK!{wPV{(#i`hK#kOtRuGn@Z`F4--clUen_t`#tPWD)9-E&^ot(-yl zqNb`wv&f8hxS9||$>xVe^*NuYRG9*#u0+D?HTx6P%Y|JrLht&ei6gReI`529q=+tJ zcj{4$enQcv8xYj&ZOiN#ohO6%z9GiEk>2b3^f1?3Fh3YQ!b$zNEkXR>D8YZA4^6Mn ztz*Oo&2ZX1v8pkf2rC^y0iYrh8D%_&uW}_#H0{)vuMk~*azN|=zSY35#yTnPA)OB5 zuesw|7@2hofL)>)E`_TmqZ5`+bRV>cU7A;E-gO>wJFaz3b{&m^v&XRvix^gm3A*rH z$zFBF5hsb(E7ckaW(SK+_i-%>AY8mpzLWC@4LsZ84F{3)h?!zCo<^}x421i32ys=Z zd3#|inp9N+gy&c8cLXGhT~~0m~pG(0Bu7!JMau)ozz_Ln@tT=24j1|nA4P5>XW(fc zU0PRCkqo?va6-0ti{)`OjN%S?W1^MY@e(9ttdO0od|x;n5;E5mVK!^=-|f9EG%r>GHv_%J={-=r+*FD zXqqPeYb74~jF368YsJqo=lFpSE!%(%F-M`x9+*@L_+71oyVSf*ZP?k=+`SFT7>m95 zZQA-0$4Ts3aV*q%(!EVp3YkAX?T#2u3Q`_?XWNG~_Ik%Z+I;n8>h8$d_gF~iIBU*8 z{YGSI%W*4Rn*C>cALBcEO}kJTR=8W>`LV5OeL!e^XcUAuU_$43+}FvhG-fM81lpic zN8{)Vq@mxGD@(l!8ioT`hWSQ9Lu7ndoL{#xnVB>iV-8o2bC1?b@1wKtbwB7G)gq=P@)kHr~^>VOIn*oa>n4fJ{jcE5}KVre-0N!lfhO4yemo>Nb?H2WJ3dMCyS1B z_7Ei+|FJR5DOX=Yl8;kXW-v$33wpAYxN{=U|HLTuM6Xn$Q#~5&H$B!mUI#>L3tT9U zk?=`73UT73qOh%4sXJx8Plkw{H#e9iKKk&(|DVLW`zA`7FRIzueoz+}m@Zv%8e~o% zqNuuBOawk`xIVg+W)Ih~!%?G&=)@}%MF14f?=<#!(=H=Qd$iFXYE;g8mNfOHAXXe) z>la?RBBD*lz!`{b0}Eh-za zXzlC~C>`;HsCJON>+(NUe)OxMk5go`188tl!UGUXWVMv3mveVSSVxl8Gwt#(a>N7X1uf$HS*=%3a zuC?+HNUWSsGXq(6ia5S0*>}cE)gr`~vL_zWzG{l_qiyrg?y<|L(BVewU5tdxrLwN# z*Hxh$mVst?Qxl%8;Eh&p`4KixB@Jrx-&ug`IHCAq)|R=%jaCQWR(0lYjc1tXG1%r{ zSSt6&ovP+B)&q4=q}QFnqS!S32daS4*9R3&Spie&Bj}{xF3dFBt%gw!{w}O39F3P5 z=2y>}0r4fh&xg9mNmtj^0eeea%T$P#H|tKwuFE*?y&wJao1$#f#Vg1&1K%S(Z}=L_ zosY$j3ptYAxBU+XyYEMBC=S^GID>&12yq!K;u>*)SdB5{Y({icyV&>=9K`zm>9yaVxn0DSRwb@WW z%Q_mB9g+otCUfD{5KX-n@WCZ_HgI`%3##sQ(x3KP`0-`{vz0ybNyI2DU?~}8 zv~?tX%Jw`4S1=(m6TcFFliRzwho*lBK{uS5SdMuw{gsjA{IirsU(90Fz4f zy!g-hDwND-P~H9w1^=nQh`RaeDRBeDf*Y6obEp8^@ zs69VEwKf@;it5^5SNfgF5cl&)J{z0Mgu3AfZnyA0cyA9g3eak&A}zWVm~|I%@5t;- z78E8*&NbDfw>pMM{Fi{6_INVWto~0BY1%rY-_NWAv}p`4RTyZ%s=NUOvb*BU+zo(PUC_$j*qRn112(vb{7 zQ`na83_*c7v$J4N|?V0TYYOUrX8zPaCxl$U^W`~|PhV0L*y)3n!@rvy z|98vu8rkaktNj54gOB0&nAP5gokgLK`S8HW90^Rdc~{w|KQC?AvqccxXmtx_BfRNT zT<0lX7zacRcPVH9>@5^qj3H*}2B5D@&8Sw5Cqt`S>FX%LV=fCkxZ(#Gs7Izc$>dYR zFEuIVTmR3P$s?J!aidnDOvqfWA3Zb){F(!@pj?#{$lnn4kk=64kj)T?-{ajDmcL0Z zCF~p;oq&b4DLKH)ZpX{xW0#PKV57M2feJKR;2|-wn~1mvpS;pj;};HLIhcp=(1)(P z<2mdkr|C z=CY3)r!mB;JlT()cLO|_@;OFSc(lQ;kt;i<#O0Db8d4s#ZFNHM7$#olEoM&`EGZ0O zIT2TEwq6C-O`vEadG9)%RE|57qR3jsG)kf9=Mfw>s=1sU+DdO{HLw1t6WH;b3q8tv zuZzX#|85E>{HJZu_v9sV>&fJuw>QXmI|A?+lw*h4rD}G8!7({@kt&C#l`?f|cNX8* zg@!?&(7yR=E-uh{h2VghT}`=%)}NHfac)9_>%h~QFRiUq zE~Zaz`&IoCFXk$E0eP`DlJ2ibdyNRgA}11O^|EQLlbI?V`R014H$-s4)HKM0ww!dg z(XbkOD*mWCnpFjii6qbv)G3bor*QyS#HVhNYY^>&A0_G^j(-5% z<(rzqJVv>dEAuCCF)d>(H9C4`5dAMcw!du!Q6gYs^)~YkA!X9+B<8i_sSC z9h^44@T}eyuFXdVm|gIKr~`;Gv_4d7jiEuN$hbsh2c>qS&fI?P8|WLsuSMd3wi(|v z&?axe-2aN#eSL2)ms%J`S%DKYkc0!~2iamEdsVmh)IE)R=7?SGtqtQsB=KjDV&aT` zKrG|Ip1oqP7bxEk6c=7D(Ejdj9Z~Fzdb++v2|TO*tUf9IG=t^4mDwAS$XQwhDcL*g z%M7f>kAZu4rjM6wNEZ(1%mPaP60+*Pn;G7w6>hp~(1A<)iKq~DH`9|@>HmbjzMzZB zud$0HKK|6zK#@%Ltphr7j?@3;Fv#JJHJl`@vwQ!$J!3H-k={Eq6A-{0JJsxQ?gozR zs)1O*2~{vd3wn8~EbyA|3LOT&7PIp!%L#a}kHVIF*!5}eEkz*6dG4gjGC)Lda{J?q zk{p2a?;T4)sh+HfnOj9UA?*#znM`sBnwO=>=C|&(LmYu4zdWu_4gHz$r^qHAf{jdg zIv1;_nYvOquw@=O(4t`v9fkyhk{FFP+UA>vyB?JwB|}<-P#V!qr)wAP{#-!(&+s4Qe;{njyDNvg0F;&_nH}9$ z*los(7MdZAdYCdA!fX1JPpy46ry|?yls;X^vWsNv&kVzg_#~(c$Ba&Gom^kEqY+fr z@WwwHoSQQfGsfA8aQN)Y=$7%mJl+WlgF&@$8jZj8;|#LJ4=?u<1XysI>g4;g)mV6G zO}WT~5S`(jvST$AY>j|{fX&@vS6Fitfowh27qN%->`T3~o z5`ecP>Spv%ItX*vw_rg{JG;p`fHbS4>DW>taCx#pox1dxc^a27SbTCRP>VUOiuoAW zKCtL3j!`spTRbH|;K@y)Dr&H+Bam{`)NN{|R`F-iH9p?T*}6u=p!u3{&`do@asSeG z8eFG9aX10fQX>|3(%3^*5{afcJ7aiEtz%A)%?WE{qRI>QVm0ARg}y3P_-vX2KY5cD zT9hvNN{^&gE)UaDu~@EMtFU0ZSn~-gw4iu*V95fF)nd^*mGz3aFqS%X7hKAPu*vG2 zHq=v8J6^J@9&MQDWJ@!}9$rjxvSWFGD0)|Jogo@9JE)G)joKKGuSAh7d}ky2-D* zySaP0A_uWV*o`D?FB-W2?nRduaGNzxtUF$XikK%aP}CeCnEtQdW5@5MUnJF!^uRnV za(LCS6Yd^{#M6@#q8tLp&6gJ6djTJ`ASf>gHV6ldEAL6dDpOsCXz#e+idYWo8)8SC zav7M$VVK^;BbFvGGu-}7>i{Y^*K_f6b0Gj0Ar2&zz< zsZ@EbqGQc6$qVK*60~qJ|IpaH&mh6K_)^k{*DMR^h^d|^{a3XHCVnYj_O%<{OKvVm z7LkYKrCGu+Jk51gFg8eq-(E1V)JgMfC67%)1Id5m3^Qe(lj|-pN!!!=bSPf;_E{JU z39IHD`Fow(gE7w#Elj6bko*5K-82C!em6j|NB&H&FX0o;=jp1-Vb@RnasE3Z{s(#o z5hK=VU;Fa6jSpdyBA)ebKmERV0DEypZHoRX*csJkL86CMrI%GFZxyyCcXk5dC@DF-Ra&+Le;OqytO-=#O1&>PKZu6?>cj&z=sNTt zgIfi*wNrv%R_z2tsTdmdk~JVj^x;62zv`>|=W*$OqgTuz0C*T+Yk^(%&xpe)hTRqU6E zD%VbBlROTdz}9j%NyH>eiV$D_9UP^Xk9PtE1EjH!{gTuwt37;+WHKz75<)PmP6H;3 z&>|4S=crFxL?1K4z?WtWu`R;kbXT`Tjp2{~;)sv``9%;O(!{`8QNp9l)3FS%O7ECA*8@KCLmP-2mVCv)GBz zNWsO!WL3{em#Z~bDkIfcj3JG?M25+{nHx=uSI9C6S~RLQB_+tJrmP09fmJ@0M_Ys9 zb?TqU;2f{(pjKqgQ3FcS_Fz~17|z41S4jR6+Ana zr__Y3UoZs|6!+KD!vkSq^JpI|9FLyrhUPs&MN3kv$BS4zu2>yRba@a_C)(OZrYf4z z^xAm57sk=XDS-AG@e@mDki{hRy_FG~HeO zRB#ofg%+@~_Bf0Fb#4wME3i(b|Ak9uPo3n~7lkJ7s!k0&t{iRWD1g_3AI~&9!{Wwg z-R=AICOrk=KmKc-$>*Jw142)vY3yt`$&3`r zH~D8RvxDKz#-=U8NR-dwJ+T10yNCPvGElwe6Bb$6;p^|g{dT$@Suq*DBK%Webpsx& z6na)sVm^GftbwG)B)#a2p!VZHJG;d4;ms)z3R5D#sW0aO&Tabk0kDFRQjj{L zRqfGkVVkxHM@J|?hT20s?)yR(erKaHU6Dt$Cf0ul!T;mBu9bf65oz#5s$5^DwwL}z z>;o_xXgFa3Wm2uGLYpF3w)2885E-2zTaPN2BC*_{rhKr>?-u<^p=!FFnFJ}!%w(Lb@1d$&PrQfMdH=P&vYc;32Q10SN4 zlJC&5vgESJs0_1d;WQ}Y%S2N^(|4*dwc@B8%|)QaAV*|Fq)1sFL2FB^Rxc1&-;zJp zn0H1DqJxf39EZGn{hgw@8O2)NuAx}2mh#+Xlr*z#_?~n)OX<8^Wn~GC9GoY!mi6<9 z<{ory0%1c*+FBHW?xjbID$#r=YUz2avLX-66m{hkIaCaU;CnG*#d}kaZ@)QOb?ilppHt?z4x16<~ z)$@x1@W8IY_7tb>n0v>ngK!fyTClrEO-?hibPwhd$t+fjy=*+DCyt_En3M+m4F>L# zTfxOlwk&S{_Ow|cnraTe(I9&rsrfwhbmZ0R3W)-JH8=9TxKEw#v+tkj9qg}jzu$Lw z{_5iTeX|m<-uAHhc^>0@bM49+P-#JXR%W9M1Xw$jL2$K8j9~wp?-2 z(Hz?ss|Y+K_j-XA$wzoBev>#DlyP9e3U{;K{jJnQ&p4c_#AOF?wfv#cVs%s~7n-j{ z)7#gx=TcTWw^GCkbu@_v^UepDq1AC8hkMrFER4(^_OJIfLBP;h*7oCI!~tCVo@OXA zaCd!9_QMqw28Oy^On~zeDrkLScSpOeFyi>r9mkITbMp$<6F#SGqURGTm&Rr5pey5% zIWm>2*b-E9m3L0@ZZHIS4scn)#C~dtOG(>XxZqbltaS+?zVo17-OFH5wT|tY8;4dw zZ*MS?PKXs1;3^ID$S_!nUa1acgRdYCoyqTM_p6m+`9MvQ)hwXq-waqDi!JV&!14@} z{<^%qvTN1z&6o8O??<5bOyKd>3V~Zlw#b_BgAC9PGyVtvQO`$M*Boawf1wSyh<^>P zC@FpaS{7bBG~XYgi5rc>u*a)XtP*Xt0SnD`@5nOR7}4fsuzg8|7bzYRm8@h)X141T544f2&L#%1HoN#MBcM;(fCe4pPu~(AtPf zmo^#FMW%5txvjWPMpXH`C)9;#|I$c3t2DER-`}xMt>$XCHn@>;INR4{XR#O*hA~#B z{q%bJafRX_8!;%pntAu+?eMkxF{;d_Wxc|=M%ObQk?tf$oUQ6>>#6XXlZ=rzK-hyC z8u3&#s`fkF@CU{w1*7e`KbgBYOa@3;dDtJE9^*_*T~!lT)Wi!&uV6_{%|hKcEo+CQkm1Hi)(DjM-zr>m`gW;&gqt?8h%#MMC5RIg zT8f@6?n09t+8o&*tb7w`xDM4$QWV?jvgXI?(CVhy$x~00#?>SRljxQinO}6ubrc#+ znxWPc2I#l6uamS^F{^1-^uO9roX5lD>k}0!hZUT$@{V?f)~PnQmEsuQ-hrQQt?9M$tHWgOYhLy?&i2w5(oDKJjDEm~((>EYMtXna^_ zo~NMsJ{DI0Tsn1*@yfQcxCI)`Dpk?#W@gB8>Q)373|Or7QY`;MKII|!&UG`{d40Ei z-g?O1%ucQN1Y>jk0ABdu5Hh1zDQ3O?J>GKVeO1;z`M-K9dpjRFWVQBKt@UWq68>qf z4Ret1jwvmwQfC1Fh%I%A*Pasw4qkQK`owCo!tpiyryr=1d~eRLp*&B=fjb}BGFT!& zwH=5EKN6|*oHmRZNOj`+6?+VQyWscfjd+0XGCyy6`;ly|057*@DtvxSwKpXHU@_P>n0!kX=06E+XsTf1UB3#Dqo9Ad zm%-?Pnvs%nNhr_RZvC%U?VMJvgE#>MYx^S6C-YVTVCHZ`k=K1jDX<*r+}99wQ1}98 zv3{?%5Pzp`Ji1%dx(J=4sCT0@Y4S-2^h*N=G;q@bL#!*)<@udLl1vM+Lz8qQ&V*%Hp4mF7ri_Bob^seEmXEe{$-dCXuC2`& zVYbc%aB6DWw^L_X zZV2@>`brshFh1=sRiQIQZ*PcCmBoga$Pmu1AcWMS!>V5u`<*TlK>Z{~izX#w5w$YR znl?;irGNpOW9Ge2Pq_`;+G}+41LS+wu?nFt6eOMuTNSvUxL~isR$|R_ta5#Zq{7x56oA^>Nc_C3>m+F z2r~k5OUW;m2Np;C~2N_&=~oyypQX>%=6OTl4&Fk zxw85<&=m|Gv=*l9ZIzTAJKOn5_u0wibJJyJh#PPq#KzQJ!XOqnO&60CdTL5VC6QI( zAOYK!mpHdVS3Dj?H2P|(zq_fn0xh;GYf!4~=f41bH{^5FhaYRv*Y8nto&RRt4w3D- zfZxuk#FcV0sGHWhX?n(t7*M(V34NB=N!mhhY}4M4?_>2Gq=tQ8jJc!Yi=<~=0Nw*6{J6b!aaO5i0K z{Y4vJGD69nHpDOSN#UYXd(OBBd2r;-;~jJG!MxD>k-3YD>5!d?`XdH=SkR+oBVk-Uf~+XZ-RH z7Zl=6T!|J30Z#T4Ro66R*wXW~zqNX$8HvTA&{0J+w*!s>EDM!(%XS4QzKLra5?0)H z5IPJ2^%Ry^5{pCN{F5`R%g>+yRX`SKn&LVpkTmd&fpjL2EwBr=z|r0xzW=SGZAvss z!|WGojgvZuG!lA%LjJGS-U0uA!2RLK{{{CU;om;K6LBmjA+b4=JsuJtAya|GoyO&x z7mW}tloTWGAuvBz@alhp${}bi&-8>^toOGi2s5K!Ufy*X%Z5xT;6p*E3=@I)D5#`6^BhX z4lx5Yt0Ynf3o3bQj9fpaJGruJyov$Z zBcSxnwsb^hfIbF$gJs2l+Xi73*s{2Y4cattG;#A&n_n_RiF~!S=~r}uiA}qXy+Cmg zVT*h{*pYK&f9S}C1k$vL5=+V31do2bkNS{`bRzH(cUd`!=1J4c0DH=|Gr$sUA|o3? zy?AlK*3$CYx-m;$IZG(Jsqfh36BNgQyq$3rE%F)AGhb4&~H1y zz|GjLPMI)<>gdWNjLxj}WQ{N9y)j8J-fY~X`mUd=^V|L8cH1M%aMJ&X80TsFNgny5OqF{RW=NrP9K*3*rHfDLgI19EuMJrY-3+#5wbU#oPXhkJ8dU3tHLAnxyhn5-Y6v*9y zFv{)qLlTi-+upX1t~@{{|0K8(l$qKYymsgxyLG=t<@;BWC<2@*E_MRZF93tl1t}o)?OdcYpjFa{A{{i_kku3##ZBbt zyd)|syh%>fT4g;vnypGW%~GBVeSoV2o;=D9OgI$E#Q<vJqr*1ret>g*deLwnw z-B=QY7(S_uzeS&eL|D&EfEx<9_UpLG&E?j=pb19Yon+R|ESxl7G+CDO#b=Gmq!|*+ zdVx7xgezLn$UG7}c5FdwXWWWtO@lb430jMvdxXPC__{U&N zg&fw*X=xht58lE@aD+e5+nvd!5YLVKNwnS$8`eXdi%}3Y_28v4tMxdN6WOPK6a^j2 z<(<(S^>&H%!J@BKOqVG%U`mt_i+xQLb_^{!j3nNQx46O-Scl_SQ8wQ-!PWJq%Ryrt zk!PWjICovZsi@DYRF7$_sc9n@iMVqYX!n_I5ik#BQ|d$#$eO*=C$AA`t82$r%l{5# zG`GBEPU12QVGOHI9<~uBB8-GNguDVH|P!&g(XPKkV(;C!*bw~?Q zyI6VfYleD06Fh=$a1Jmxxz?+!Cf4KHWnQ_=P08Irqw9>Om^2vI7;a#5D^;4om*J?A zYE4k}Z$EzBw{BrbB~zh-mKJ18S>P|oaFUyDAOx`#g&$-S5R*?b6CClXc!^G|Pg^l3 zf??Ek+0t0rJQ+w~4S)J0H|r|nty}X}NRH54|45@7V}kvrVerlh{r6uC1YTi|Rm)70 z{fP8rs!#+kx*#2x`1X2PuxwbB8B)<}fd1Q#zx%D!QisDo(asIl6|lg2K9_^Td#!1_B$i(qdGkV#-9b#lHVQE4DCL$z%L4zuWSYy^>7!B1h(+v2l8_<6*K z3|#tnYFM$?1iNVx@-I-xH|lb7!A8J|aI4fOmKWUuk%_wNP{U9RT&Tg1E9;X2%>=JO ziJ&p!L#=O|?^|0$fTbTJAtf7yZHina77(~20NV|0pN;itdCq}Z?SG>BeO}b zECXsyll$G#N!m5tH!Mq4?&D^|DJW;6ON0Ad*5%fJCyIF$1TLV_x5#lux8x?wKN|bN zV71F-wHXyDE4x9mc$IduFa`^H=wM!|Xz+H9?K;uV8IbI06sb^Ew{l;{x^K8G0%vS> zA1dv7l^TwOvT<3mH7+}OfSrvexGyk7DmFLEUvczkMGKL?xN;lbq5EE8WIHK+o0!?;@!$ zEK%_`5(WkLOi>kR5Hvt}aJ)oPf$wtmb8;#4RU)ziiyC8EZO&0)7-2Zuj}xOxZNVW$ zVrs1O$a41zchy-9hwzPyzG^G1|hk@YaOQ|jK4KS@S~v4yoR zg7^7Y3qR$}2vMmlhr<}*jW8l5Y7LN`TMZPl(`Vj)z+^kB5rRduo> zRAQ%UTw%+pr1a;!5wEIIj$2hWwHUIqyc-CLlMqAcY$?6hqw@*JHmfvBNYi#}Ui6 zXOROG3)n<)EhGS*qn3d*@&NAga(lBW>>ImXTgGPx6={^BC<7P&qbai_SX+MWezw-pkzqvQxCn#9B z=*<1N%2s*@D4?;Gm#UyvncRG5t(IwbeO~qf?A6omcyw zNdM&Y9bv_e%uu_us*$)3ZWi~~LFyXtJfoO1!gVw+IygaId{IN4jJt3^`b>jR7rA7Z zTlabwwb!ar;yOj6#&4oc4@`%gd`O%k4!N&lC||`M zN7=-u>dinxQ$WSD$!!PaDbRmSVk-yL1Nin8Y$+dih~*K#E|$tt1bJ+t`2o(wbGYZp@rnqzYmg zT-F+l` zq!mz3bCwUp+orY)(}YuV1VR$v47Uxa>GG}zhl11z^s-h>W>e3eF@jtw| zU#Oy&Os&#})8}GM^ErpcbXR26$7h?jfV~vRxd9|lp`WN)A6i*>mGU}6Hi0e5;@BO7 z*&PuxKvaiL`4uCEbulJ+v*pRLDXOlgnZT!bZCYd;Z{Ti*GJ#V;BjtICsie(CyC@=a zDA%+Hy+Wz_G;=}l0UJ>p6KctL)*OeWF5?@e@^U;&*oR$dx2&=i8xp|1TQZ0oQ+^VK zTAAbj@-#JA-?Z+1ntwPI|MKLPp=_q>rH*@UJQzhEv^B)E1wnlGdYPXO*$N>943Q`K zh&;w|=JHGN8bs22_yp7JKwfU{+IRc=d9WH1aIvoS>_t_3pAQ&g02CxvRTc1E^76m5D>1 z^_zvH+P2nA2s2A`^kmPdb;yJRU4$sYkvrZ?m(8>B9q3m-Q`9#wLp2$N`?Z!R+GgjK zd%(j9pu=Rt7%=IGp{oftAmB(MyH8S>um!|03K!1jqn$Sh!G7YFYX$+W(ww}-E_7J6V%E8i4mrk~3K z2pp@v^qE!o;NI+0n>#b2Oeh#*>AvAjX+VCA_MpJ$;%eI>t#fwZ_KN-yW5NBS4~<{w z%;X!K*P-=%ZJC>)&n~?+0vSYjpT$V46F9in8|qrA{AHJwHGQs78XJtRbQav$KfjJ5 zohoa;=i`~?joh{SrlK5D_y5T>8CCw{kk^Vx`XM&(9{~)A%1P|J}V=sc3f@GTfvv%+50a&Mp#FQzp%|Lsh zK8S@9waB3WZ%e=UC|7#Mt3ch-Xc7A@A@@8Apy!*dghy+29>XzBgma#9Jl$T%Jk;R% zLEQ@|t`r|YB9k~$2SWEDORhvpFw($jnxOKTuU$dEci%q`9CXsD82Z3fv%XZqSI`v? z2IB-$4+2Va+TjJcb|Z8yJ=4tW-(3qi136CDx~OJ&EgEf>KWM6A2%;vpkTY3|Gj!Q% z@%7S;#rdnTGn{GN?1bO`+D)u&=y;3WiicXJRjq4XOpaM-(Nz@_4J>epcE`&S<-~cs zDTW4OJEyb^meX#xhRyr>omu`^Re%>m%1=wyn+{yyh%@;dQ=yPA%Q?=l&2cf}&LO78 zZD^R%z|nE?Xx6R!WFD6>texVjI!Zi}>NdYXST_;HuShRRm8Gj=TzNdu_AksgN4S!8 zPv+zSy|jy(GBp*#nm9GdotD{A9LXWhFofiI&W;8;38(7r+10uytSVgZQuRC~^lCK~ z3qk(OYQY2gtIcn{@2ieNt1k}?y3Urll1VXPZua}vn{%MP-i}*7H=joR_qvwpgt#-} z$61ADg8trjzT|-?uh14NR5tW3^9m9_kFqKCrd422N*^nC_q+q=<$X$X3%z&Ex;f^U zt@<0*f4Q71HDt_I-#59cYFkhIDsy0v5%kpBd21EI;6qBKFqv0_ zV)1N&fEr`rj%5YLqSW3WF4}g+Wh{NM&v}HbEd4k_*BEioV!P#uHe3_}_>lUz(x}EA z%g)8qxRMLv{^%|d-~0D5a@OAZ-SxYq-E_Yj>hc_IJ}K}6NI58BCNHEC)VIJ%lQ(AK z!v>>FSy-O;j)uh%C$M*w2`5uHvDj_{rZnN@`eDLNg++D+)+4SU1s1ujDWpBDh<}z? zxvr8mb_wWBKi<)GC=nn&|H@3UdIj6Hu`ph$L}S3S>4#udUici)m_u3M$k@bXL?=PS zctES7Snt+<7Qz_)Pm>n)|IXg(;sfr5P$(7tJo`a~ZZiF%i9(!Rdn)tHzfS;!vIDKv z^1QpnS}qA_*s3MCaGOu)XiCK4a9HT&x`&5&B%QL385>5~ROgKSZRwZkW=v2@Y?K+t zt8TgwD-~p>(9DF#XzTdDyow~ubF98wy?07*=y6t&Fcsi>V*Ct z+Z^b^i)Z$o0b5IzjRE{=>mP@o7}v9;U!Uel&Ls3mx1eM8=z@)3% zi#a8~UOK?p%&8q2QN1;MY$HLTe3!}-XdFjW-4+Od@rKi0(LwcQDB zI*`U7QJHD`CxVGtabZo?+j|9C+JuKV2j*OR(4Hc?y%%70*X~p0zW94-t9zReiLrF_ zXZugS5&|mM`vPAc#|x+A=R`??@9u?*=bYUJE(gtt9ZOcjieS)#9xsMhrmWp{_tNyx z#H{s$lhJ4ORy_`>pIKWqRGQNVKKf2YcwhDhWC6?{5B?Xf)sG}CL?n9>MZB4e3gcI4 zj)yswn;_+u|Eh!x2!qnW_8PRI5uShzJVNh#u$Gj84vkm@*-yO>E1wor0)Xji^P`I# zOBNzvXVKxPq6JBvS>A>abU2a;vwdMxLd)=2!{vfTRPxx*KpUFGK{!T}OQ}ix_JdC@vO7{(iL&|6DDi41A zDrYK4S*v(6aSZRiE6@r+q#7zx(Ex+OZ+J=?ex43WXWS6yT29YCjXJD=N1qP7+@;hu<5g%? zEH~&!ZM8AbVEa?lW0D+)&3U9oC^ArzIxkw$@;~{R{9ycLoB0()vMIRT#JE$^PiR~qieZQ-(1dYO>hQDd(r`LV{qBOE zdS#;U%t%vzCI+Q|+|j4xF9dpoL_SnFMgJqm|AJd?TR@^KGPs%&-o?eHi8Mld7AN@! z?OOCW7A-#y-%Z5oOLd=%-H+~t+f4&Meg|XjoJkwWRa}wHj&L097OvGhn2U_tc#|og z;fN?v1vBkCz&HpeMhnaNOKrsxs0@3_itt3!OM2YHTRogGwvo@WJ#=8maL%0Uo6i3A znoLLq7UAI+p% zwq}OQA>~Xv+3%EKeUs(y3c`fe@qcMpYCjxyHJ)%ZIWRGOSB`OhYI(7U#$AY({A&gg zB-2DW`1rijY||=dz$k)@Y$JThR_y zHFxbP)VZdbK^|`YV)`fQbc7#v5bXba<=*Vkn>%yr|LBaj(2}j(Esr~X;PPR2^S(#- zE$#l{V9vPg?qcWDy2#B>W)t4$@%>zLX9%@x^_HMf#b?f!g`AuHsM9(#qtMIy8MW^E ztoTKHHJw;$Qon9Hr7(K;eC2aeptm?DA+199(N`N-EgbKZt)$(~-TwX9q;V(m8E*ls zV_%)fF^2^A{_aP$PgNUG<&AwBe97x_`4+Y+2Bqt_*yW2QioG-vE0PHAOEXH|=>uI?2+fT~Ln0LsFbC8trANmK876=9<3&RZ@# z01<4HSU!OYbBGKU_+FV^CU80uzR0#?!Mbb#9gE&~)mb+0c3#0}BK=fH?%R#`&19=n z`&k@pmHZ)Jgvwu*-y*%Y25C8h0PI^<>=@i}41y@bDzGy4lMd{P2+Rg8XDJ@!h(k41 zp+iTtSDVyxV+Ma62C$fTqS*SeBHjq_`F-1(dw=o&W~tuW-aCF^MmoSj2M#t1MIh&F zM68NLY6wY&E#JMcK%+Gm9>xYEJha5>R&dg#>=b?9?j!KEp|bQkBus9 z@Qp~q*{wU+DNr!RwGQ6I#Dd27_LN_y>rCZ>@^+Xx&Spa5Sg^?_n47GO4yQ1*8D-Ys ztOS3EnIC_P=db4zP_x|rMHLQX+?71SWr7}HJ7ULlp4JAF_U^bQe*2xy4^Ccgu4#$& z02f*h6b5jdsJSNOfh9m&j=)EE9M3tZo6LrmG;xX zFk$3c_TZp+jdSv7_H+i7N!UW)hxw#Ywy)Cq5!dFoeyT)oU-DJg&mwP$gd^88(Hz57 zcPyStbuq2^Z!t1|#M<>w?KAw-VkT?XZlD;8E3X6GipYH z2@W5uo!g37(tB82Ka7I8#!0v%?!^cC`()d0f{==o8bf(L&XH`21Wr)}I7YzO!9;pXc8TRSt~M7w`Rx;C1#ADmd-7yCb{Wp44*+HX1t zlvd9{6~v05uU~J9g5KZz`;PqI?}y!=U%HJk_>$c;f-zi79)0Y0^n&S@=+T&Z_tytS zlHn)T1<5El@p!#{t0FCdXOb2qXO#xRWlVOh@%YS6jYRx>*PtHu?3J^M&`yb$4$X5Y zd#q!}zNm`WKkD^Y9x6sy_7OFx{~ulN6rEYvrHjU?Se4|9Q?YH^wr$(CZC8?tZQHhO z+dMhr^xxh4jIr<6!IQ%*B`#Kzywv=RKKHwunt11b*&6J!*T?$s=Ui75uEyn?VU-ZT^ndAsvM5f7&?&~-JLHEEJ~ExN(k;JSo&Y@Ya`f< z5LA({kOk@2s|Pt+z8jX?Iw2NVp7ZIuCM}|c(S0|l#sY#_XbGsRwmM#6OOku zF1v||JRu@MsU0=I*@0Jf0mVNEo`azS0?kh;)|*G-wvzzU_B~G2uUEoa5#k<8;{pF!e+f`-m@-zeDBOZUdEhz@JSox* z$#RXa+>Mq0iOKo@ZT(y7N`%Xn0kz(~B=q4rY~3{Sw+W(Ud|i_`h8tt$XW9uPs$?xC zt5+f>mX@%^d+hE<}d|Dd6f{mE>umyLj()i%;ng$BJJ16s%UV>(aP?p#tX4Vd4ls;iAOG~h-eKUeNHd`W18KJ&N*RrEa^?fYWHj_WO zr-bgBmvb;|-KezVesMjumh;(F!?nuF_wYxvQjSTAv4ST?Mt0!tyVv$ayV3Qrxc<%; z@ky^|T(?-3EJ4#5GoLMk^HK*&bCOsDIIZLq-LHlLJef7AjRomK14%2K?g^1cY;OP& z;`p|dKqjwoMSUHF;&nam_$l?X8I~!Rq2i53nZhhmtq}8MV@01C*HKqVqtEu9?!0Xc z?e|~JJ%Z5PAAOPVOq_r}gSIA6ivR+h*g9U)t`cvtyZ{qK#utBXFf##u6;f{P&@b(t&@!zbz5@ZCgnHK!$%>VvC zdnpoE7|KlhdSCAa=!XbkwnBTvFW`NxzA7{hHCiR zX?(EOw&k};l-xzHTDx>WzpzF!KQaoy5<}Qq+M4MzrfRzYm=O69*ePDmXEvU$1;80z z->0YZiCL{3%3ML7fQ8mV^g*`Wadk+Nd?ba>`Ca^kkT$iL8Olz9Ov_CnKDq&ueudYx6DfZSk)tiyIIvI zP$UbtG8{GOIUG+G<{q@-e7t*<*#iM zdz$x(EekB>;$skOM<|vot(yU;@*9CqDzX6Ua=4L!SlYdE%D$qTu89ziir8>%v z_8IgtBR5huuxz_6Rw*L1E`-qu>yXHw&|GY=3}|h2s|d|{&GH&)AARIYads1=xX*E( zh>7RSZ;T5%TT~@0G^kurz6Sm3lv*PT^cG8rG^@ZNHB$ITJ+ZN@nf|YED8dgb#KnXD z<)a5tgPU4NX6Utzf{tu7)k|UR#TQ}wrFz>HFIHO1jp4bgE50!*-n7vCyJES;(6ejo zw^_C8*7<;_=4z`s!$?)!q$ETVIz$0K?^=hoM#^n1S*ir-aiHa$*mtI_dXfg725V9J z_E^Y>jZyPAt!s1lCl~qpDs8h!zCBdykB6+RW4)46v-@Sum~IxY^ZVszZu`qQ6_f!)-WX$$Yml^nEt`PQj0f2dpwqAK)%SXUX469# zN+hb|h5HtJ?yF1%#TJ1jzOVw(KQv;^fEhE%&87_m2&*0&zzJzLMh)J_QPX>`2o@cz zpml*}!X{H?Z=qN`l>$YX+P&R5{P7m!aaQXw`_bX|b7fezyMYJqxzg2(e$jy2Zw zbSQeDdAq!D_w;m#YCncZ3@~W1K^;&de!X9DPiBnq9x(jJ$**G`y!>zs`Cs_7hRf4-~_j+rA%X zw~;V~DPTLV^?YqWS10gh0MK^yr92jzVvi~{|VXZ5SRaNH?G_K z-nuV-l8^f^aTi2>n@poQQCpMQs!`-@O(6xT8l!*zK$oafTD4`O7=`YBg7^@UpK$@= zjfPI567(oU7e@qImBUohggt67NBr17S^pE*6%@oED9%>A|Acg zztJGc%|D!VC7y7U5*w4f3vzfxSkC6-oJ4pM|tA5Q;v*hh*S zHT}D9(Av*BfEZ|Xq6ghp!^}iLNV@wuAnD9{l)&Y?z3b(i(r(M;uG99IIi$KqJ#=2> zi~z2h@v+u1^co&~|74~&1)?;EFg0b5sgK5_5_Oy5TH%NWqa`#-v^HB9?+J!@f%9J9 zWb+&)H%fNmZ}=Q_JzCL}=~aIv;(y}$8tFF*QaH{xeM9WK`x6c~Rk zo1Y77Tqj-9a!xPBM~!p)?PR-ncW-l@H1g&8KCIpr(^mJm2h#DZS>x$Ob=?-2@_sy^ zvYD5w*sxOc#PCH&U@8XpC?QKf^&bvFl8{uWKgQ6Cx@j>CC{gI;3Erq%1W6ps*2`xF z7+g14EY=lEEV4JPlA!3@Y2pN$FO8$4`0kS0Zg2kdDr>zQuG*o@;K|ZCG`?42-W;mv zM8j&qnp(AFz3~qWVf?-#7}P@eLK+NdSr{YKuW01$@as9(IBE^_V2_t5YjwyV zhd_-}s@Y@VyDSsV zu0pm(OgJ85BgoXq%i%)~mkDD(!{Mx6Cpk3EODf(QnSa(Ua}l%H$f7@Eg0){pIboG* z1?brfSBT;8U4|^SpGgdW$#0?*GmwnKGc-M6hy}haO2c(#M%5%EtJ4jtoGBR%88Djt z1g-~E`aiZ4&o&8d4x|Qb7M`JQsP;h{6e3Aiw#MawBx^^~h;Yd~q6vzO;gXz_VlXT* z^cye)KBb9KBqGLgb4Y2Yo6SE~1~N*HI8uy__NEdCS^u)(2e=#aGLp8wQO7r?U}=%L zSRJwq{8`5U-43h_9HHcD^JbB$p9>D}sQsF;VK+Bx{SF_I{wI7@{Kp1^a=g+@eWS(D zRy25Zu=TiZ1a)3hH-3HbqbX&cLM?I1;ex5ZS2Mnd+@`35d8UQC(3%csYNYkd1BVja zy9qsd!?@kZ=*|(mLRg1NURjRm0ZSJ74+Eg`SIa+B)=YOKG2`dmSq#6fUkDPrtgN5H zd_+iMS2q1#W^m;Wfj$tKRXe}tLo-B(1C6nQn6(B_#cA^F8Lj#0==M7q#5Kbbr zCLnA)+(+7w`B4MV1kJk(XGGt(Giael3#Ro`CM!kAVqEFeM+qn{Ol>YsEI&z*1_}6K z`d(sS&2Y1A3agjF=2*Lco9tL!8dV;jAK>{{p7KLvF^dlvoyM)!v@@Ulx$(6}9bf&J z6(-R`dHbwy-AiKjZO~&+rB$HNCvfeI1<((c66hdKu6CN4 z;%|n+#1$U3z%hVLGwIxW)L1OPHE2`QuT(drey@D%m62o@QpAuN9~j_&ETE^$Y57awr);QH8UY}n zE=3(-{|>BKRA9Owkpz=|z2|Z+{5J!^`oALkZ8f~!5q=q1wAw7_VUTnwPfR3$T)Z&+ zw$9{Y3P`Gm^T!{K_i8Odwm3s5R6MHugN1gVJ80U4LNBjfxBu&P%AEl6Z%QaiIVkTEh*{6;c=MwpMfd%U-7W6^hj3IQi;a3Qq98AdRc> z-jrVoM?BqN^oqbfl?@XiRdR&#qKebl(W6rV^c*6;maHNxe*a0kCLm#VoGhdilPn}R zMczHq*f9>Eg0de^P?I1036>*5&C;ygpAlwKFji|d;6(bDH3)YiY~GNq#h_)fk2Dc1 zNuIzh*3)J?7~c$Syx1bpzqZt;HlEZZftzC<(TYUerGme*P_HbvF+WpR=4zp?%!x&l zLD~v)pE3kM?*NWQabB{ELmP-C80|Wjdn+omI}Tm>ITYQ5n?{EjUH>PV&SW4kPLjngrN|-5ao`g z<5`u!(2Uh$-y-XxJ5W;*V)eXZ>1Gzw&K`&S6{Y$v|6ybTyQpQ3ma69Eb@ZkvXY#k( z^ToA0uhlMmXVG(+a(U2z2TI88_Br3@ zS})9$>ZLoQc(u>ws|f$vHZ7HF@0W|c>F#$oHubGlYgI1Di-d@gQw~r1d9X|(DVGkQ ziLd`)0W#I3zOMzQfu|t&Z=86Y*ivY`ZeD#SiYFn!m@sCXIh9(OX9OU9XBUA#Np*H- zMi66|yAaxP#M~WVmRBs6d5L^mJz?#eA$#Kt&E$}8LVf-uvzTf(k@fL?N%My$O#)W zOvciqKH5MAcKYKC)|klTF7yB?u+d(xK)-RUHMF-u>{775meR+TGwWpH8H>n1ge@sh zAkrjQF>prJE*yE(b;lem;lb35QHGh`0&yP}tG(FMRmEwXGB5xOOEc?c!IX^?gXZ-M zrjfcIQA2sus6j8ELv0LSzZ>+uw>wXi*dG~zQ&CqJ+>7U;`@=yy2quIno$8b&EUISs z2sl7==56rSHC`MJv=06{8+BgelVEBmzXZGp@l+M5`=jtrnGe0mL!_>GiZPfKxJ=Ge zGV&16Sk${cz|Xa|=!F#gDCT_{Qn66A)$SoJ*D6@)6O<_jV$I3q{974CPC-Y?_lWSX@}me zkggvhpb=p%rU#uFN%Ps@LhDfag{5es$z|KXxSx%SQ(buomG|zzLdi&*AzW4)%o)V0 z#hskAMAIxuBg?f@L2t#K04~o%X>i45KcrfzY~{zTxjFpO)BctTlmMMOH=P1P(h+E1 zuJ4xWW8&GtA)zLfYLApCRwSG}aTA}^gF$pJ%BYfJn4@ey2%NYx8~X|(YHb!<=II3c zB@oJ)7RWQL@OM>W78rYJu~hW5_}ea7J^h2y+)F!^O!C*Pt(=Ef0RY5(`UboXoiN$< z%fhT;`htJWS3la{re2cSEDCJx64cr|_c5i!YSwn^h&b1;fUU7jx&vy~gUbb>FRKj3 z6DQBm4vd9X%04&4b6mw)W()TW8Mk*2h{u?5OOLTQol9rwxItC-(kn*Un=RAgB4bmw$=+Ahb= zU3UQ4{?0@qbF@UAs5brD52WqH``o#`*{fGYk=t}e2FTZ*#Z!GI9)qk7%df?pMsd5kntxB z`vtc@=+g|f@C)Sg;stu!IDCa*=EhC}^}~tgGwiz_){sfl-*Q+yV6dxw89rRWBop+v zbNBiQOPNIA1-nYMcn+>}etO}ubOMpYUL&6HEQBoZ8V}b+Hi8NM8go=X6X)ZYSF4XR zy~wp+JshvqqNHU0x)H0CFI#-eefC;ztR`&{u*s4r81xzYSLt0<)QJg=Pf$3=oy}E{2HR5P>Diy2=4%mI2 zb_g@elMrhp9mrQ@7IeOqY?H;AQ$B8d!EGlgU_@-zK&M!AN}$XAd*Ya| zw#hRmahK^JCtG8NF#C@p$#jKG1>DEX6(GG)PoE$y8djq#STxv$F6aQ#>M9Y%26L$_ zW*ZeRJWkjV9{u-tvWQx1F+*IT5k@pnO4MTW-^DBlvDFI&WVc!{pejS;Y+QW0fCC2< zy_*qa2)to(GA}?aiW9{rK8xWU&GP@;4~)>@PXDE3>d^nA^Fi;<&3SPKG^1{)YAlIv zn;dLV&2t{9tlr^D@g^_cV4Yv3tmvyo5)jo4BEGjh&Zk&}{evWgxt8afCmuMCj z;3}gRu6Z-iPKDrx#$yK+KETdZ;OFFE5!Mt7sm#zGcDO z#x2Y!D1S4S0OiSj{AT>gI^wak!SIWRf@)z0HU6uGzR@v)OHBHgpG4#6v0{V_P}N&R zu%^;dS+;WMl$=c_^y5b)Q2mOS*yW$qG*-)9pO2rq1qPB8vSKBR7R`QJQ^P z5$tmBEO_6#O|&ds9{`9X9?c4ZfwjqwkJc7V~@2{Frn9 zF0gZHm8~2eQpr`R-e;Brq5qMnF5}$v?d~l$hge@`fuH^TQf02=eY5@r&u1@Ndejeq z|CqYn&Z(>L%89t8F}QiTbdC3PVR8S=qxJdXwq>c@PsDw}y6((iUzOZBUk)|G07PJC zS`0i^8kkb|7tFZ!tW`c?Vnn7_3B6ZD8WbyRY@?G6k0#|SqOcBvk6N#aqE404ow~_Q zB=Z4^<&jP*$)6$p7uIjTCX!K~Y<9}9>S0G%z-8cNSrvDW znWZ*)>5H;l%)E)6zXhibY?=YNLkHN}L$NQDGq#Im#ON=m2TnLau`zG5vJiozAoqi) zRKO0JF4+m9f*KW{yd@5=*VbC)^8 z0mrcxy68SxlEWS{+mO5#HO>daz3C@ zwt%|brSt3$?`uf0ZpHVm>i?Pq;__s9k^f)T=bki7HXJsU_7uV7{3GPQhfqg76?YtH zS#%uDdt~>HKS>Y)5CR$QJYoz5_z1GvM^(S}O2Bx?roG?bCG3#mm{umlx2Y2DPecOF zF!VMaJP_vy6aHLK6rJN}QfNEo5k(7G61y8jJR<2b+#6XoDP(>y&-4q9LQozn+XGlJL$?8EXWt zMy&x-W>FHA5IoUCvkY`VG!EP0v6s?bd&mCsW*C@MK;?i~Wpon}hFcfw{xG1&lTAio zLl0Hx`!Fs?PlQ=#XzzPFTgLw5Z9F&fann1%#b1}39%d+*qku}uIi0BoJKP$h=!`(3 zETm~!$a^WpRo+UXZ_dH8889!3+VVle{uGhV?&8riR?T17uHt8hoy&|DoBGp5z&$Tl z&JkfHT}7U2-`j-imIqxzp<|7i_|`t#uG@x-a1G~EO~YdGlc!8jt$xs1mDimsHVhy2 zwpjEtj$Umco<`?x5~-PGcqCk0G(|})O9@NAuU@X~xR$A63s+1|FF8MBb9FBo#<~~N zKg-y(gP+F7cS2=zc0iwb-@xlNBOokWvrp>h&pqF-y$yYs;Z4p6)NbzQcdNZ`cMh;FMlr2OV$dfy^Tk7kVt$|v7ULG!FyFXv9bUgPV&EUf9U}FG7@0~?5 z{|=n!q~+upXq%{+z_FozX;OQR39lKX!o~?jOO67Qxnd@>iT7ZzdLe1Y8Eu1PHr@7m zxG(@Yf|-NoZ(g&E}4mlGVN>o(izixxyw?)Fh|2-1mV0v_s@l)ZfaZz541vPuI)$3kGL_Y00ixks& zxay*yvMP`j;IJ-8dw5_CruDBbe&Udczm}k8wpj5cI)>;ZprDDi0TP%B*G`~^inVuJeZDbDCCB_)%ew3Shu z!gi5;!gYs*lozLMg@*fZV~+8oQltc0fW&<(>4{5>fxn^dX(@QyE_VMc&x^P9{jl(- z(zBnT98YHJmGbsE7&EGc8Hn&*ed#imBKP~=@jP>RitYEQ?4Kv}31~4=&9Z z)mx^x^V7olimo`Yhp)kz21z z-`z-ryqy1F0lU46VM*O*Z>x_lo$s98caaE7scy$tSCRF*hjvRP zDKnn!@<Y;_=dZx3!j2EPE_UhEK2MO`XB6HT)~lX|gzwX9ZuGX2Tl4x zOGlD;O2|n=F=`{?K+uqF$Z3BgW_jwu3^ z?eKaW{Ovs9>D6)h*q3@V0A3scF{rxO$Ta#-cIe#Sm~B<4^8dv|*ed--!~U;G zlG~y|)^9($y%4C=DoNy7dm;)5)VFu7=&A)k1Mn0GCn!hYXuv%P%pP;g4bxOajkyu_ zU;GN6W+F^9Z)R$bRK$9ks1A@EB4F}N`1*-e*?I;`2^r1i5g~x9f1Aw;dXJHKX(i<` z^uLXNz|||*fp!#zLd0k)zG}8eWXXI!X6;5ZFv=LQ*j!AQiws+5n!)j)<7u;huxLlf zCNFVXq;>bEdSgU4b2EJab5y^X)taW5P7J$XcD9Siih7Wi>j&(^Q$5u&GQ=2d$ZT@S;*c zbs~%J+}-tTwNgKULwVwT(w64H- zNAcqZwb40R%=srjk>VddcFw#=0eGkK%h zWd%kNd&=R`hq*8vI9l^iwF^G6L`Pib_qyq#Gr_?$vKuJ=66Kao^PiTdweiT^*GHj* zITmobN9^}(PVd@urJ`fk!1HU1_hlcJQ#rQlOO;$$Z@E^VVt9si^Ceu|r_!JuD|X#i z;$@yS^G;7&bX#C=5dOB9K+hQ}K5DvcR^N|{(NWZ!XZ`NQvQ%n_)a$Kn%cU_Ror?3Z z65wi9pBEX?_w~0#)?NG)arr`%d@?(gzaTit~lVsvstxoAo-7Quf3WUvrG1 zKHdD_5W}OzDlsQYmSC$3)G{}u?hln7ZGkZlG78Re$yCPo4*|gwfBaGeqXGr&-hv4< z2SOM;9;|2pU+n$IDi*{uEt1>SM?GFylUjD~u9S!v4o)kQaK3m~9=W?{$D&Sg-$I);h_ zWct{8WqO#Vt4Q6-6rN@XY*~9DWtBjFuMYjLK~(d|f{r@`{|+8X>*xq(=?qN~A%X9$%4OOAN#F-YCMwBG)2Gn?nMLL007+oA(V5RZYR${}6!uvfAEoo9UAAv;5z)1B4%YPqv?Zt|QvNuU?z#$MJ5v>z_YP zpw!1Q7%DM{cKw%DQOF-|e~Q1`Je>qn%Su3dxtHljNN3oylzL3qBax@isCfo94uX+KidKF3NO!gn?)zcF9}T>=B$yk?#;>4fI6h%TZWM4Kgi zc|El2S_|^a!5@)y2xjSx>16_rzlE6D^*XH|y&hr_w`$jV?Not#ElVxU$g##i?^o~E z_H}0&;3g_`#^Gv#Cur)%pJl?g9dvXO)PgONw|R;(1#iE=Uz;qm#$1fhtWM!;Ky^^2 znX^xL&~!F>_Yg9Mq8G5?BLMZQR84oTgQtVjf@z9;=bpxuLbGatow~|FD575kFeNRA z;t5?S%8Q8ZJnGE=pzzsd8YS6((KJG5hJ|XqYt195 zZ1K-Z!{Y7X<6gfT)ycGYR+e~r)q}u{VF9{2HTgS3snRc21GfEki`{MouCCPihY$5WQWdX10+>gWT$J$@IsYqt|0ztYj{)aRsdX(qoLk zg9uv;v;EM4YnV&9c+#SENSMTx6K>{aF~b7&>s_~_{D1bp%>UZ|A;By54PDf}4M4p~ zxs?p@44|B?F{OSvb%Q6IN*lJ8f)!EW7_AZBs!rCYq<5PYl@6Z7RG-b4?xkMzsuj_jQu27ta&Iw zf1}BSzd65O)m9mMJ*y z1>|xGZw7QT%jUwFylE>Bs!gdj8JuAAs`w=vSPq+JTATAa$A7j7u7A{+@$S<@6X?pR z^XiP|1FhuqjA615qSPX^vbvb*MklMC-7SmOA5mH5zM6iL__>V;<)_Ipv5QvCP@z>H z(iKH*NX_4zl-XC`jqk5gk(nc{8n6Ep1-#!uvErm=GR-nW*2KVSsEZb4lWH!6M zDwo~{SC)KafPTowsPUXn({1ml-Hq*QgI}8_$sb|SJx@=EyuGi{FgfIjD} zQv+~_XZGh+(R6NjePt*vsA82CGbwihe-EWY` z)3t_Rg^-FSoDGt{VcXX447v-$$*u9JS%(-?T@|uIaN6QQUx^Cts51+ZXfPj4Kd9GE zo(FQfR~A)h2!@L}gC<@^3izOHFC1U$=v=x$V1)1y+M4R`uf79^o?u_TCSatK&NsOnWd3KaB$IEz?GjW*he zou$KxM^+R0u7`vQe981XXbiyJCfP5NlQ28s4!;Re2yPv zl7kNu(!ifezl-gFPbO�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 Z$oF-1OM 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 z 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 { diff --git a/render-wasm/src/render/text.rs b/render-wasm/src/render/text.rs index d972e69813..4f1307e6eb 100644 --- a/render-wasm/src/render/text.rs +++ b/render-wasm/src/render/text.rs @@ -396,6 +396,12 @@ fn paint_text( paint_text_with_emoji_overlay(canvas, shape, paragraph_builder_groups, false); } +/// Alpha mask for background blur coverage +pub fn paint_text_mask(canvas: &Canvas, shape: &Shape) { + let mut mask_builders = shape.get_text_content().paragraph_builder_group_opaque(); + paint_text(canvas, shape, &mut mask_builders); +} + fn paint_text_with_emoji_overlay( canvas: &Canvas, shape: &Shape, From 17c344b8f5fe785b1be7ae7a6e34945e17a118d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 16 Jul 2026 10:15:22 +0200 Subject: [PATCH 085/229] :bug: Fix auto-label action failing on PRs from forked repos --- .github/workflows/auto-label.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-label.yml b/.github/workflows/auto-label.yml index 27ae0f37a4..491f422d1f 100644 --- a/.github/workflows/auto-label.yml +++ b/.github/workflows/auto-label.yml @@ -3,7 +3,7 @@ name: Auto Label and Add to Project on: issues: types: [opened] - pull_request: + pull_request_target: types: [opened] jobs: From 7e361920348dba1fa8a0ad7bc218b0d5b1ab5eb1 Mon Sep 17 00:00:00 2001 From: Kobi Hikri Date: Thu, 16 Jul 2026 15:53:46 +0300 Subject: [PATCH 086/229] :wrench: Pin mattermost-notify action to its v2.1.0 commit SHA The notify steps referenced mattermost/action-mattermost-notify@master, a mutable branch that runs in CI with access to the MATTERMOST_WEBHOOK_URL secret. Pinning to the immutable commit of the latest release (v2.1.0, ae31bb6) keeps the exact reviewed code from executing, per GitHub third-party action hardening guidance, while staying easy to bump. --- .github/workflows/build-bundle.yml | 2 +- .github/workflows/build-docker-devenv.yml | 2 +- .github/workflows/build-docker.yml | 2 +- .github/workflows/build-tag.yml | 2 +- .github/workflows/plugins-deploy-api-doc.yml | 2 +- .github/workflows/plugins-deploy-package.yml | 2 +- .github/workflows/plugins-deploy-styles-doc.yml | 2 +- .github/workflows/release.yml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-bundle.yml b/.github/workflows/build-bundle.yml index e31382ccd4..441587eea3 100644 --- a/.github/workflows/build-bundle.yml +++ b/.github/workflows/build-bundle.yml @@ -85,7 +85,7 @@ jobs: - name: Notify Mattermost if: failure() - uses: mattermost/action-mattermost-notify@master + uses: mattermost/action-mattermost-notify@ae31bb6f9e26a54336e79696f108a2c91cf55b4e # v2.1.0 with: MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK }} MATTERMOST_CHANNEL: bot-alerts-cicd diff --git a/.github/workflows/build-docker-devenv.yml b/.github/workflows/build-docker-devenv.yml index f94064833e..5faafba350 100644 --- a/.github/workflows/build-docker-devenv.yml +++ b/.github/workflows/build-docker-devenv.yml @@ -40,7 +40,7 @@ jobs: cache-to: type=registry,ref=${{ env.DOCKER_IMAGE }}:buildcache,mode=max - name: Notify Mattermost - uses: mattermost/action-mattermost-notify@master + uses: mattermost/action-mattermost-notify@ae31bb6f9e26a54336e79696f108a2c91cf55b4e # v2.1.0 with: MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK }} MATTERMOST_CHANNEL: bot-alerts-cicd diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml index 0972f1e25d..e2497f3093 100644 --- a/.github/workflows/build-docker.yml +++ b/.github/workflows/build-docker.yml @@ -175,7 +175,7 @@ jobs: - name: Notify Mattermost if: failure() - uses: mattermost/action-mattermost-notify@master + uses: mattermost/action-mattermost-notify@ae31bb6f9e26a54336e79696f108a2c91cf55b4e # v2.1.0 with: MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK }} MATTERMOST_CHANNEL: bot-alerts-cicd diff --git a/.github/workflows/build-tag.yml b/.github/workflows/build-tag.yml index 58fa0413c0..c47d19570c 100644 --- a/.github/workflows/build-tag.yml +++ b/.github/workflows/build-tag.yml @@ -29,7 +29,7 @@ jobs: steps: - name: Notify Mattermost - uses: mattermost/action-mattermost-notify@master + uses: mattermost/action-mattermost-notify@ae31bb6f9e26a54336e79696f108a2c91cf55b4e # v2.1.0 with: MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK }} MATTERMOST_CHANNEL: bot-alerts-cicd diff --git a/.github/workflows/plugins-deploy-api-doc.yml b/.github/workflows/plugins-deploy-api-doc.yml index 51be85e45e..7208646c1a 100644 --- a/.github/workflows/plugins-deploy-api-doc.yml +++ b/.github/workflows/plugins-deploy-api-doc.yml @@ -131,7 +131,7 @@ jobs: - name: Notify Mattermost if: failure() - uses: mattermost/action-mattermost-notify@master + uses: mattermost/action-mattermost-notify@ae31bb6f9e26a54336e79696f108a2c91cf55b4e # v2.1.0 with: MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK }} MATTERMOST_CHANNEL: bot-alerts-cicd diff --git a/.github/workflows/plugins-deploy-package.yml b/.github/workflows/plugins-deploy-package.yml index 137ba6f7fa..cbc8e109cd 100644 --- a/.github/workflows/plugins-deploy-package.yml +++ b/.github/workflows/plugins-deploy-package.yml @@ -114,7 +114,7 @@ jobs: - name: Notify Mattermost if: failure() - uses: mattermost/action-mattermost-notify@master + uses: mattermost/action-mattermost-notify@ae31bb6f9e26a54336e79696f108a2c91cf55b4e # v2.1.0 with: MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK }} MATTERMOST_CHANNEL: bot-alerts-cicd diff --git a/.github/workflows/plugins-deploy-styles-doc.yml b/.github/workflows/plugins-deploy-styles-doc.yml index 47f0d1cc24..29d2ac4fea 100644 --- a/.github/workflows/plugins-deploy-styles-doc.yml +++ b/.github/workflows/plugins-deploy-styles-doc.yml @@ -129,7 +129,7 @@ jobs: - name: Notify Mattermost if: failure() - uses: mattermost/action-mattermost-notify@master + uses: mattermost/action-mattermost-notify@ae31bb6f9e26a54336e79696f108a2c91cf55b4e # v2.1.0 with: MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK }} MATTERMOST_CHANNEL: bot-alerts-cicd diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 76e3d91964..47305864f2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -103,7 +103,7 @@ jobs: - name: Notify Mattermost if: failure() - uses: mattermost/action-mattermost-notify@master + uses: mattermost/action-mattermost-notify@ae31bb6f9e26a54336e79696f108a2c91cf55b4e # v2.1.0 with: MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK }} MATTERMOST_CHANNEL: bot-alerts-cicd From d9511db585d593c60ff3ce817d173adf10436887 Mon Sep 17 00:00:00 2001 From: "Dr. Dominik Jain" Date: Thu, 16 Jul 2026 17:00:20 +0200 Subject: [PATCH 087/229] :wrench: Auto-confirm pnpm modules purge in MCP bootstrap #10680 (#10681) pnpm occasionally detects an incompatible node_modules directory (e.g. after a store location or pnpm major version change) and interactively asks whether to remove and recreate it, blocking the MCP bootstrap in the devenv tmux pane. Set confirmModulesPurge: false in mcp/pnpm-workspace.yaml so the purge is auto-confirmed; this file is included in the npm pack tarball (unlike .npmrc) and applies to all install invocations from a single place. AI-assisted-by: claude-fable-5 --- mcp/pnpm-workspace.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mcp/pnpm-workspace.yaml b/mcp/pnpm-workspace.yaml index 60c228aba4..14eaeefa61 100644 --- a/mcp/pnpm-workspace.yaml +++ b/mcp/pnpm-workspace.yaml @@ -1,3 +1,8 @@ +# auto-confirm node_modules purge when pnpm detects an incompatible modules +# directory (e.g. after a store location or pnpm major version change), +# preventing the interactive prompt from blocking bootstrap +confirmModulesPurge: false + allowBuilds: esbuild: true sharp: false From 33d478b53257e6601a064e16d07f7ae96299e7cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marina=20L=C3=B3pez?= Date: Thu, 16 Jul 2026 15:32:02 +0200 Subject: [PATCH 088/229] :recycle: Rename org to organization --- backend/src/app/rpc/management/nitrate.clj | 96 +++++++++---------- .../rpc_management_nitrate_test.clj | 88 ++++++++--------- frontend/src/app/main/data/nitrate.cljs | 6 +- .../src/app/main/ui/dashboard/sidebar.cljs | 4 +- .../app/main/ui/dashboard/subscription.cljs | 2 +- .../nitrate_activation_success_modal.cljs | 2 +- 6 files changed, 99 insertions(+), 99 deletions(-) diff --git a/backend/src/app/rpc/management/nitrate.clj b/backend/src/app/rpc/management/nitrate.clj index fc96d2e448..f6f5073d8a 100644 --- a/backend/src/app/rpc/management/nitrate.clj +++ b/backend/src/app/rpc/management/nitrate.clj @@ -112,24 +112,24 @@ (->> (db/exec! cfg [sql:get-teams current-user-id]) (map #(select-keys % [:id :name]))))) -;; ---- API: upload-org-logo +;; ---- API: upload-organization-logo -(def ^:private schema:upload-org-logo +(def ^:private schema:upload-organization-logo [:map [:content media/schema:upload] [:organization-id ::sm/uuid] [:previous-id {:optional true} ::sm/uuid]]) -(def ^:private schema:upload-org-logo-result +(def ^:private schema:upload-organization-logo-result [:map [:id ::sm/uuid]]) -(sv/defmethod ::upload-org-logo +(sv/defmethod ::upload-organization-logo "Store an organization logo in penpot storage and return its ID. Accepts an optional previous-id to mark the old logo for garbage collection when replacing an existing one." {::doc/added "2.17" - ::sm/params schema:upload-org-logo - ::sm/result schema:upload-org-logo-result + ::sm/params schema:upload-organization-logo + ::sm/result schema:upload-organization-logo-result ::nitrate/sso false} [{:keys [::sto/storage]} {:keys [content organization-id previous-id]}] (when previous-id @@ -441,9 +441,9 @@ RETURNING id, deleted_at;") (profile-to-map profile))) -;; ---- API: get-org-member-team-counts +;; ---- API: get-organization-member-team-counts -(def ^:private sql:get-org-member-team-counts +(def ^:private sql:get-organization-member-team-counts "SELECT tpr.profile_id, COUNT(DISTINCT t.id) AS team_count FROM team_profile_rel AS tpr JOIN team AS t ON t.id = tpr.team_id @@ -452,19 +452,19 @@ RETURNING id, deleted_at;") AND t.is_default IS FALSE GROUP BY tpr.profile_id;") -(def ^:private schema:get-org-member-team-counts-params +(def ^:private schema:get-organization-member-team-counts-params [:map [:team-ids [:or ::sm/uuid [:vector ::sm/uuid]]]]) -(def ^:private schema:get-org-member-team-counts-result +(def ^:private schema:get-organization-member-team-counts-result [:vector [:map [:profile-id ::sm/uuid] [:team-count ::sm/int]]]) -(sv/defmethod ::get-org-member-team-counts +(sv/defmethod ::get-organization-member-team-counts "Get the number of non-default teams each profile belongs to within a set of teams." {::doc/added "2.15" - ::sm/params schema:get-org-member-team-counts-params - ::sm/result schema:get-org-member-team-counts-result + ::sm/params schema:get-organization-member-team-counts-params + ::sm/result schema:get-organization-member-team-counts-result ::rpc/auth false} [cfg {:keys [team-ids]}] (let [team-ids (cond @@ -480,12 +480,12 @@ RETURNING id, deleted_at;") [] (db/run! cfg (fn [{:keys [::db/conn]}] (let [ids-array (db/create-array conn "uuid" team-ids)] - (db/exec! conn [sql:get-org-member-team-counts ids-array]))))))) + (db/exec! conn [sql:get-organization-member-team-counts ids-array]))))))) -;; API: invite-to-org +;; API: invite-to-organization -(sv/defmethod ::invite-to-org +(sv/defmethod ::invite-to-organization "Invite to organization" {::doc/added "2.15" ::sm/params [:map @@ -497,13 +497,13 @@ RETURNING id, deleted_at;") nil) -;; API: get-org-invitations +;; API: get-organization-invitations -(def ^:private schema:get-org-invitations-params +(def ^:private schema:get-organization-invitations-params [:map [:organization-id ::sm/uuid]]) -(def ^:private schema:get-org-invitations-result +(def ^:private schema:get-organization-invitations-result [:vector [:map [:id ::sm/uuid] @@ -514,11 +514,11 @@ RETURNING id, deleted_at;") [:profile-id {:optional true} [:maybe ::sm/uuid]] [:photo-url {:optional true} ::sm/uri]]]) -(sv/defmethod ::get-org-invitations +(sv/defmethod ::get-organization-invitations "Get valid invitations for an organization, returning at most one invitation per email." {::doc/added "2.16" - ::sm/params schema:get-org-invitations-params - ::sm/result schema:get-org-invitations-result + ::sm/params schema:get-organization-invitations-params + ::sm/result schema:get-organization-invitations-result ::nitrate/sso false} [cfg {:keys [organization-id]}] (let [team-ids (noh/get-org-team-ids cfg organization-id)] @@ -530,59 +530,59 @@ RETURNING id, deleted_at;") (assoc :photo-url (files/resolve-public-uri photo-id)))))))))) -;; API: delete-org-invitations +;; API: delete-organization-invitations -(def ^:private sql:delete-org-invitations +(def ^:private sql:delete-organization-invitations "DELETE FROM team_invitation AS ti WHERE ti.email_to = ? AND (ti.org_id = ? OR ti.team_id = ANY(?));") -(def ^:private schema:delete-org-invitations-params +(def ^:private schema:delete-organization-invitations-params [:map [:organization-id ::sm/uuid] [:email ::sm/email]]) -(sv/defmethod ::delete-org-invitations +(sv/defmethod ::delete-organization-invitations "Delete all invitations for one email in an organization scope (org + org teams)." {::doc/added "2.16" - ::sm/params schema:delete-org-invitations-params + ::sm/params schema:delete-organization-invitations-params ::nitrate/sso false} [cfg {:keys [organization-id email]}] (let [clean-email (profile/clean-email email) team-ids (noh/get-org-team-ids cfg organization-id)] (db/run! cfg (fn [{:keys [::db/conn]}] (let [ids-array (db/create-array conn "uuid" team-ids)] - (db/exec! conn [sql:delete-org-invitations clean-email organization-id ids-array])))) + (db/exec! conn [sql:delete-organization-invitations clean-email organization-id ids-array])))) nil)) -;; API: delete-all-org-invitations +;; API: delete-all-organization-invitations -(def ^:private sql:delete-all-org-invitations +(def ^:private sql:delete-all-organization-invitations "DELETE FROM team_invitation AS ti WHERE ti.org_id = ? OR ti.team_id = ANY(?);") -(def ^:private schema:delete-all-org-invitations-params +(def ^:private schema:delete-all-organization-invitations-params [:map [:organization-id ::sm/uuid]]) -(sv/defmethod ::delete-all-org-invitations +(sv/defmethod ::delete-all-organization-invitations "Delete every pending invitation associated with an organization (org-level + team-level). Called from Nitrate when an organization is about to be deleted, so users that click their invitation token hit the existing invalid-token landing page." {::doc/added "2.18" - ::sm/params schema:delete-all-org-invitations-params + ::sm/params schema:delete-all-organization-invitations-params ::rpc/auth false} [cfg {:keys [organization-id]}] (let [team-ids (noh/get-org-team-ids cfg organization-id)] (db/run! cfg (fn [{:keys [::db/conn]}] (let [ids-array (db/create-array conn "uuid" team-ids)] - (db/exec! conn [sql:delete-all-org-invitations organization-id ids-array])))) + (db/exec! conn [sql:delete-all-organization-invitations organization-id ids-array])))) nil)) -;; API: remove-from-org +;; API: remove-from-organization (def ^:private sql:get-reassign-to "SELECT tpr.profile_id @@ -607,7 +607,7 @@ RETURNING id, deleted_at;") (assoc team-to-transfer :reassign-to reassign-to))) -(sv/defmethod ::remove-from-org +(sv/defmethod ::remove-from-organization "Remove an user from an organization" {::doc/added "2.17" ::sm/params [:map @@ -635,16 +635,16 @@ RETURNING id, deleted_at;") (notifications/notify-user-org-change cfg profile-id organization-id organization-name "dashboard.user-no-longer-belong-org") nil)) -;; API: get-remove-from-org-summary +;; API: get-remove-from-organization-summary -(def ^:private schema:get-remove-from-org-summary-result +(def ^:private schema:get-remove-from-organization-summary-result [:map [:teams-to-delete ::sm/int] [:teams-to-transfer ::sm/int] [:teams-to-exit ::sm/int] [:teams-to-detach ::sm/int]]) -(sv/defmethod ::get-remove-from-org-summary +(sv/defmethod ::get-remove-from-organization-summary "Get a summary of the teams that would be deleted, transferred, or exited if the user were removed from the organization" {::doc/added "2.17" @@ -652,7 +652,7 @@ RETURNING id, deleted_at;") [:profile-id ::sm/uuid] [:organization-id ::sm/uuid] [:default-team-id ::sm/uuid]] - ::sm/result schema:get-remove-from-org-summary-result + ::sm/result schema:get-remove-from-organization-summary-result ::db/transaction true ::nitrate/sso false} [cfg {:keys [profile-id organization-id default-team-id]}] @@ -701,8 +701,8 @@ RETURNING id, deleted_at;") :organizations organizations})))) nil) -;; API: exists-org-team-invitations-for-non-members / -;; delete-org-team-invitations-for-non-members +;; API: exists-organization-team-invitations-for-non-members / +;; delete-organization-team-invitations-for-non-members (def ^:private sql:get-profile-emails-by-ids "SELECT email @@ -729,7 +729,7 @@ RETURNING id, deleted_at;") [:team-ids [:vector ::sm/uuid]] [:member-ids [:vector ::sm/uuid]]]) -(def ^:private schema:exists-org-team-invitations-for-non-members-result +(def ^:private schema:exists-organization-team-invitations-for-non-members-result [:map [:exists ::sm/boolean]]) (defn- org-team-invitations-for-non-members-arrays @@ -751,17 +751,17 @@ RETURNING id, deleted_at;") emails-array]) :non-member))) -(sv/defmethod ::exists-org-team-invitations-for-non-members +(sv/defmethod ::exists-organization-team-invitations-for-non-members "Return if there are any team invitations for emails that are not organization members." {::doc/added "2.18" ::sm/params schema:org-team-invitations-for-non-members-params - ::sm/result schema:exists-org-team-invitations-for-non-members-result + ::sm/result schema:exists-organization-team-invitations-for-non-members-result ::nitrate/sso false} [cfg params] (db/run! cfg (fn [{:keys [::db/conn]}] {:exists (boolean (non-member-org-team-invitations-exist? conn params))}))) -(sv/defmethod ::delete-org-team-invitations-for-non-members +(sv/defmethod ::delete-organization-team-invitations-for-non-members "Delete team invitations for emails that are not organization members." {::doc/added "2.18" ::sm/params schema:org-team-invitations-for-non-members-params @@ -914,8 +914,8 @@ RETURNING id, deleted_at;") [cfg params] {:valid (oidc/is-organization-sso-config-valid? cfg params)}) -;; ---- API: notify-org-sso-change -(sv/defmethod ::notify-org-sso-change +;; ---- API: notify-organization-sso-change +(sv/defmethod ::notify-organization-sso-change "Nitrate notifies that an organization sso values have changed" {::doc/added "2.19" ::sm/params [:map diff --git a/backend/test/backend_tests/rpc_management_nitrate_test.clj b/backend/test/backend_tests/rpc_management_nitrate_test.clj index 2691514952..bff2a59478 100644 --- a/backend/test/backend_tests/rpc_management_nitrate_test.clj +++ b/backend/test/backend_tests/rpc_management_nitrate_test.clj @@ -369,7 +369,7 @@ (t/is (= :not-found (th/ex-type (:error ko-out)))) (t/is (= :profile-not-found (th/ex-code (:error ko-out)))))) -(t/deftest get-org-invitations-returns-valid-deduped-by-email +(t/deftest get-organization-invitations-returns-valid-deduped-by-email (let [profile (th/create-profile* 1 {:is-active true}) team-1 (th/create-team* 1 {:profile-id (:id profile)}) team-2 (th/create-team* 2 {:profile-id (:id profile)}) @@ -377,7 +377,7 @@ org-summary {:id org-id :teams [{:id (:id team-1)} {:id (:id team-2)}]} - params {::th/type :get-org-invitations + params {::th/type :get-organization-invitations ::rpc/profile-id (:id profile) :organization-id org-id}] @@ -439,12 +439,12 @@ (t/is (nil? (:role dedup))) (t/is (nil? (:valid-until dedup)))))) -(t/deftest get-org-invitations-includes-org-level-invitations-when-no-teams +(t/deftest get-organization-invitations-includes-org-level-invitations-when-no-teams (let [profile (th/create-profile* 1 {:is-active true}) org-id (uuid/random) org-summary {:id org-id :teams []} - params {::th/type :get-org-invitations + params {::th/type :get-organization-invitations ::rpc/profile-id (:id profile) :organization-id org-id}] @@ -468,7 +468,7 @@ (t/is (= "org-only@example.com" (-> result first :email))) (t/is (some? (-> result first :sent-at)))))) -(t/deftest get-org-invitations-returns-existing-profile-data +(t/deftest get-organization-invitations-returns-existing-profile-data (let [profile (th/create-profile* 1 {:is-active true}) invited (th/create-profile* 2 {:is-active true :fullname "Invited User"}) @@ -479,7 +479,7 @@ org-id (uuid/random) org-summary {:id org-id :teams []} - params {::th/type :get-org-invitations + params {::th/type :get-organization-invitations ::rpc/profile-id (:id profile) :organization-id org-id}] @@ -504,7 +504,7 @@ (t/is (str/ends-with? (:photo-url invitation) (str "/assets/by-id/" photo-id)))))) -(t/deftest delete-org-invitations-removes-org-and-org-team-invitations-for-email +(t/deftest delete-organization-invitations-removes-org-and-org-team-invitations-for-email (let [profile (th/create-profile* 1 {:is-active true}) team-1 (th/create-team* 1 {:profile-id (:id profile)}) team-2 (th/create-team* 2 {:profile-id (:id profile)}) @@ -514,7 +514,7 @@ :teams [{:id (:id team-1)} {:id (:id team-2)}]} target-email "target@example.com" - params {::th/type :delete-org-invitations + params {::th/type :delete-organization-invitations ::rpc/profile-id (:id profile) :organization-id org-id :email "TARGET@example.com"}] @@ -572,7 +572,7 @@ (t/is (= (:id outside-team) (:team-id (first remaining-target)))) (t/is (= 1 (count remaining-other)))))) -(t/deftest delete-all-org-invitations-removes-org-and-org-team-invitations +(t/deftest delete-all-organization-invitations-removes-org-and-org-team-invitations (let [profile (th/create-profile* 1 {:is-active true}) team-1 (th/create-team* 1 {:profile-id (:id profile)}) team-2 (th/create-team* 2 {:profile-id (:id profile)}) @@ -581,7 +581,7 @@ org-summary {:id org-id :teams [{:id (:id team-1)} {:id (:id team-2)}]} - params {::th/type :delete-all-org-invitations + params {::th/type :delete-all-organization-invitations :organization-id org-id}] ;; Should be deleted: org-level invitation. @@ -660,10 +660,10 @@ (t/is (present? "dan@example.com")) (t/is (present? "erin@example.com"))))) -(t/deftest delete-all-org-invitations-handles-org-with-no-teams +(t/deftest delete-all-organization-invitations-handles-org-with-no-teams (let [profile (th/create-profile* 1 {:is-active true}) org-id (uuid/random) - params {::th/type :delete-all-org-invitations + params {::th/type :delete-all-organization-invitations :organization-id org-id}] ;; Org-level invitation should still be deleted. @@ -686,14 +686,14 @@ (t/is (nil? (:result out))) (t/is (empty? remaining))))) -(t/deftest exists-org-team-invitations-for-non-members-reports-invitations-to-delete +(t/deftest exists-organization-team-invitations-for-non-members-reports-invitations-to-delete (let [member1 (th/create-profile* 1 {:is-active true :email "member1@example.com"}) profile (th/create-profile* 4 {:is-active true}) team-1 (th/create-team* 1 {:profile-id (:id profile)}) team-2 (th/create-team* 2 {:profile-id (:id profile)}) outside-team (th/create-team* 3 {:profile-id (:id profile)}) org-id (uuid/random) - base-params {::th/type :exists-org-team-invitations-for-non-members + base-params {::th/type :exists-organization-team-invitations-for-non-members ::rpc/profile-id (:id profile) :organization-id org-id :team-ids [(:id team-1) (:id team-2)] @@ -744,14 +744,14 @@ :valid-until (ct/in-future "24h")}) (t/is (true? (exist!))))) -(t/deftest delete-org-team-invitations-for-non-members-removes-non-member-invitations +(t/deftest delete-organization-team-invitations-for-non-members-removes-non-member-invitations (let [member1 (th/create-profile* 1 {:is-active true :email "member1@example.com"}) profile (th/create-profile* 4 {:is-active true}) team-1 (th/create-team* 1 {:profile-id (:id profile)}) team-2 (th/create-team* 2 {:profile-id (:id profile)}) outside-team (th/create-team* 3 {:profile-id (:id profile)}) org-id (uuid/random) - params {::th/type :delete-org-team-invitations-for-non-members + params {::th/type :delete-organization-team-invitations-for-non-members ::rpc/profile-id (:id profile) :organization-id org-id :team-ids [(:id team-1) (:id team-2)] @@ -830,7 +830,7 @@ (t/is (= 1 (count (th/db-query :team-invitation {:email-to "outsider@example.com"}))))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Tests: remove-from-org +;; Tests: remove-from-organization ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defn- make-org-summary @@ -853,7 +853,7 @@ :remove-profile-from-org nil nil))) -(t/deftest remove-from-org-happy-path-no-extra-teams +(t/deftest remove-from-organization-happy-path-no-extra-teams ;; User is only in its default team (which has files); it should be ;; kept, renamed and unset as default. A notification must be sent. (let [org-owner (th/create-profile* 1 {:is-active true}) @@ -875,7 +875,7 @@ mbus/pub! (fn [_bus & {:keys [topic message]}] (swap! calls conj {:topic topic :message message}))] (management-command-with-nitrate! - {::th/type :remove-from-org + {::th/type :remove-from-organization ::rpc/profile-id (:id org-owner) :profile-id (:id user) :organization-id organization-id @@ -898,7 +898,7 @@ (t/is (= "Acme Org" (:organization-name msg))) (t/is (= "dashboard.user-no-longer-belong-org" (:notification msg)))))) -(t/deftest remove-from-org-deletes-empty-default-team +(t/deftest remove-from-organization-deletes-empty-default-team ;; When the default team has no files it should be soft-deleted. (let [org-owner (th/create-profile* 1 {:is-active true}) user (th/create-profile* 2 {:is-active true}) @@ -913,7 +913,7 @@ out (with-redefs [nitrate/call (nitrate-call-mock org-summary) mbus/pub! (fn [& _] nil)] (management-command-with-nitrate! - {::th/type :remove-from-org + {::th/type :remove-from-organization ::rpc/profile-id (:id org-owner) :profile-id (:id user) :organization-id organization-id @@ -923,7 +923,7 @@ (let [team (th/db-get :team {:id (:id org-team)} {::db/remove-deleted false})] (t/is (some? (:deleted-at team)))))) -(t/deftest remove-from-org-deletes-sole-owner-team +(t/deftest remove-from-organization-deletes-sole-owner-team ;; When the user is the sole member of an org team it should be deleted. (let [org-owner (th/create-profile* 1 {:is-active true}) user (th/create-profile* 2 {:is-active true}) @@ -939,7 +939,7 @@ out (with-redefs [nitrate/call (nitrate-call-mock org-summary) mbus/pub! (fn [& _] nil)] (management-command-with-nitrate! - {::th/type :remove-from-org + {::th/type :remove-from-organization ::rpc/profile-id (:id org-owner) :profile-id (:id user) :organization-id organization-id @@ -949,7 +949,7 @@ (let [team (th/db-get :team {:id (:id extra-team)} {::db/remove-deleted false})] (t/is (some? (:deleted-at team)))))) -(t/deftest remove-from-org-transfers-ownership-of-multi-member-team +(t/deftest remove-from-organization-transfers-ownership-of-multi-member-team ;; When the user owns a team that has another non-owner member, ownership ;; is transferred to that member by the endpoint automatically. (let [org-owner (th/create-profile* 1 {:is-active true}) @@ -970,7 +970,7 @@ out (with-redefs [nitrate/call (nitrate-call-mock org-summary) mbus/pub! (fn [& _] nil)] (management-command-with-nitrate! - {::th/type :remove-from-org + {::th/type :remove-from-organization ::rpc/profile-id (:id org-owner) :profile-id (:id user) :organization-id organization-id @@ -984,7 +984,7 @@ (let [rel (th/db-get :team-profile-rel {:team-id (:id extra-team) :profile-id (:id candidate)})] (t/is (true? (:is-owner rel)))))) -(t/deftest remove-from-org-exits-non-owned-team +(t/deftest remove-from-organization-exits-non-owned-team ;; When the user is a non-owner member of an org team, they simply leave. (let [org-owner (th/create-profile* 1 {:is-active true}) user (th/create-profile* 2 {:is-active true}) @@ -1003,7 +1003,7 @@ out (with-redefs [nitrate/call (nitrate-call-mock org-summary) mbus/pub! (fn [& _] nil)] (management-command-with-nitrate! - {::th/type :remove-from-org + {::th/type :remove-from-organization ::rpc/profile-id (:id org-owner) :profile-id (:id user) :organization-id organization-id @@ -1017,7 +1017,7 @@ (let [team (th/db-get :team {:id (:id extra-team)})] (t/is (some? team))))) -(t/deftest remove-from-org-error-nobody-to-reassign +(t/deftest remove-from-organization-error-nobody-to-reassign ;; When the user owns a multi-member team but every other member is ;; also an owner, the auto-selection query finds nobody and raises. (let [other-owner (th/create-profile* 1 {:is-active true}) @@ -1041,7 +1041,7 @@ out (with-redefs [nitrate/call (nitrate-call-mock org-summary) mbus/pub! (fn [& _] nil)] (management-command-with-nitrate! - {::th/type :remove-from-org + {::th/type :remove-from-organization ::rpc/profile-id (:id other-owner) :profile-id (:id user) :organization-id organization-id @@ -1051,10 +1051,10 @@ (t/is (= :validation (th/ex-type (:error out)))) (t/is (= :nobody-to-reassign-team (th/ex-code (:error out)))))) -;; Tests: get-remove-from-org-summary +;; Tests: get-remove-from-organization-summary ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(t/deftest get-remove-from-org-summary-no-extra-teams +(t/deftest get-remove-from-organization-summary-no-extra-teams ;; User only has a default team — nothing to delete/transfer/exit. (let [org-owner (th/create-profile* 1 {:is-active true}) user (th/create-profile* 2 {:is-active true}) @@ -1068,7 +1068,7 @@ :org-teams []) out (with-redefs [nitrate/call (nitrate-call-mock org-summary)] (management-command-with-nitrate! - {::th/type :get-remove-from-org-summary + {::th/type :get-remove-from-organization-summary ::rpc/profile-id (:id org-owner) :profile-id (:id user) :organization-id organization-id @@ -1080,7 +1080,7 @@ :teams-to-detach 0} (:result out))))) -(t/deftest get-remove-from-org-summary-with-teams-to-delete +(t/deftest get-remove-from-organization-summary-with-teams-to-delete ;; User owns a sole-member extra org team → 1 to delete. (let [org-owner (th/create-profile* 1 {:is-active true}) user (th/create-profile* 2 {:is-active true}) @@ -1095,7 +1095,7 @@ :org-teams [(:id extra-team)]) out (with-redefs [nitrate/call (nitrate-call-mock org-summary)] (management-command-with-nitrate! - {::th/type :get-remove-from-org-summary + {::th/type :get-remove-from-organization-summary ::rpc/profile-id (:id org-owner) :profile-id (:id user) :organization-id organization-id @@ -1107,7 +1107,7 @@ :teams-to-detach 0} (:result out))))) -(t/deftest get-remove-from-org-summary-with-teams-to-transfer +(t/deftest get-remove-from-organization-summary-with-teams-to-transfer ;; User owns a multi-member extra org team → 1 to transfer. (let [org-owner (th/create-profile* 1 {:is-active true}) user (th/create-profile* 2 {:is-active true}) @@ -1126,7 +1126,7 @@ :org-teams [(:id extra-team)]) out (with-redefs [nitrate/call (nitrate-call-mock org-summary)] (management-command-with-nitrate! - {::th/type :get-remove-from-org-summary + {::th/type :get-remove-from-organization-summary ::rpc/profile-id (:id org-owner) :profile-id (:id user) :organization-id organization-id @@ -1138,7 +1138,7 @@ :teams-to-detach 0} (:result out))))) -(t/deftest get-remove-from-org-summary-with-teams-to-exit +(t/deftest get-remove-from-organization-summary-with-teams-to-exit ;; User is a non-owner member of an org team → 1 to exit. (let [org-owner (th/create-profile* 1 {:is-active true}) user (th/create-profile* 2 {:is-active true}) @@ -1156,7 +1156,7 @@ :org-teams [(:id extra-team)]) out (with-redefs [nitrate/call (nitrate-call-mock org-summary)] (management-command-with-nitrate! - {::th/type :get-remove-from-org-summary + {::th/type :get-remove-from-organization-summary ::rpc/profile-id (:id org-owner) :profile-id (:id user) :organization-id organization-id @@ -1168,7 +1168,7 @@ :teams-to-detach 0} (:result out))))) -(t/deftest get-remove-from-org-summary-does-not-mutate +(t/deftest get-remove-from-organization-summary-does-not-mutate ;; Calling the summary endpoint must not modify any teams. (let [org-owner (th/create-profile* 1 {:is-active true}) user (th/create-profile* 2 {:is-active true}) @@ -1183,7 +1183,7 @@ :org-teams [(:id extra-team)]) _ (with-redefs [nitrate/call (nitrate-call-mock org-summary)] (management-command-with-nitrate! - {::th/type :get-remove-from-org-summary + {::th/type :get-remove-from-organization-summary ::rpc/profile-id (:id org-owner) :profile-id (:id user) :organization-id organization-id @@ -1201,7 +1201,7 @@ (let [rel2 (th/db-get :team-profile-rel {:team-id (:id extra-team) :profile-id (:id user)})] (t/is (some? rel2))))) -(t/deftest notify-org-sso-change-sends-setup-sso-email-once-per-recipient +(t/deftest notify-organization-sso-change-sends-setup-sso-email-once-per-recipient (let [owner (th/create-profile* 1 {:is-active true :fullname "Owner"}) member (th/create-profile* 2 {:is-active true :fullname "Member" @@ -1216,7 +1216,7 @@ :name org-name :teams [{:id (:id team)}]} sent (atom []) - params {::th/type :notify-org-sso-change + params {::th/type :notify-organization-sso-change :organization-id org-id :updated-props false :became-active true}] @@ -1269,9 +1269,9 @@ (t/is (= org-name (:organization-name email-params))) (t/is (= eml/organization-setup-sso (::eml/factory email-params))))))) -(t/deftest notify-org-sso-change-skips-email-when-not-active +(t/deftest notify-organization-sso-change-skips-email-when-not-active (let [sent (atom []) - params {::th/type :notify-org-sso-change + params {::th/type :notify-organization-sso-change :organization-id (uuid/random) :updated-props false :became-active false}] diff --git a/frontend/src/app/main/data/nitrate.cljs b/frontend/src/app/main/data/nitrate.cljs index 5abc969155..279c622934 100644 --- a/frontend/src/app/main/data/nitrate.cljs +++ b/frontend/src/app/main/data/nitrate.cljs @@ -59,7 +59,7 @@ (st/emit! (rt/nav-raw :href "/admin-console/"))) ([{:keys [organization-id organization-slug]}] (if (and organization-id organization-slug) - (let [href (dm/str "/admin-console/org/" + (let [href (dm/str "/admin-console/organization/" (u/percent-encode organization-slug) "/" (u/percent-encode (str organization-id)) @@ -67,9 +67,9 @@ (st/emit! (rt/nav-raw :href href))) (st/emit! (rt/nav-raw :href "/admin-console/"))))) -(defn go-to-nitrate-ac-create-org +(defn go-to-nitrate-ac-create-organization [] - (st/emit! (rt/nav-raw :href "/admin-console/?action=create-org"))) + (st/emit! (rt/nav-raw :href "/admin-console/?action=create-organization"))) (defn can-send-invitations? [{:keys [organization profile-id team-permissions]}] diff --git a/frontend/src/app/main/ui/dashboard/sidebar.cljs b/frontend/src/app/main/ui/dashboard/sidebar.cljs index 269e2a3793..d64063b522 100644 --- a/frontend/src/app/main/ui/dashboard/sidebar.cljs +++ b/frontend/src/app/main/ui/dashboard/sidebar.cljs @@ -320,7 +320,7 @@ (st/emit! (dnt/show-nitrate-popup :nitrate-form {:show-contact-sales-option true})) (dnt/is-valid-license? profile) - (dnt/go-to-nitrate-ac-create-org) + (dnt/go-to-nitrate-ac-create-organization) :else (st/emit! (dnt/show-nitrate-popup :nitrate-form))))) @@ -766,7 +766,7 @@ (st/emit! (dnt/show-nitrate-popup :nitrate-form {:show-contact-sales-option true})) (dnt/is-valid-license? profile) - (dnt/go-to-nitrate-ac-create-org) + (dnt/go-to-nitrate-ac-create-organization) :else (st/emit! (dnt/show-nitrate-popup :nitrate-form)))))] diff --git a/frontend/src/app/main/ui/dashboard/subscription.cljs b/frontend/src/app/main/ui/dashboard/subscription.cljs index b7a4e9a3e6..e09bea4f71 100644 --- a/frontend/src/app/main/ui/dashboard/subscription.cljs +++ b/frontend/src/app/main/ui/dashboard/subscription.cljs @@ -169,7 +169,7 @@ {:show-contact-sales-option true}))))) handle-go-to-cc - (mf/use-fn dnt/go-to-nitrate-ac-create-org) + (mf/use-fn dnt/go-to-nitrate-ac-create-organization) handle-open-renew-modal (mf/use-fn #(st/emit! (modal/show :nitrate-code-activation {:renew? true})))] diff --git a/frontend/src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs b/frontend/src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs index c0d5e0e77c..d2e1a7bd24 100644 --- a/frontend/src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs +++ b/frontend/src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs @@ -36,7 +36,7 @@ (mf/use-fn (fn [] (modal/hide!) - (dnt/go-to-nitrate-ac-create-org)))] + (dnt/go-to-nitrate-ac-create-organization)))] [:div {:class (stl/css :modal-overlay)} [:div {:class (stl/css :modal-dialog)} From 4ea83d31fc92bbfc099af24d90e9a027a1f9ac34 Mon Sep 17 00:00:00 2001 From: "Mahmoud A. Rabo" Date: Fri, 17 Jul 2026 04:16:03 +0200 Subject: [PATCH 089/229] :globe_with_meridians: Add translations for: Arabic Currently translated at 47.4% (1124 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ar/ --- frontend/translations/ar.po | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/frontend/translations/ar.po b/frontend/translations/ar.po index 51bd3a79a7..d146c1fdc1 100644 --- a/frontend/translations/ar.po +++ b/frontend/translations/ar.po @@ -1,16 +1,16 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-22 07:30+0000\n" -"Last-Translator: Youkho \n" -"Language-Team: Arabic " -"\n" +"PO-Revision-Date: 2026-07-18 03:01+0000\n" +"Last-Translator: \"Mahmoud A. Rabo\" \n" +"Language-Team: Arabic \n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 2026.7.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" #: src/app/main/ui/auth/register.cljs:214, src/app/main/ui/static.cljs:180, src/app/main/ui/viewer/login.cljs:100 msgid "auth.already-have-account" @@ -867,7 +867,7 @@ msgstr "التسجيل معطل حاليا." #: src/app/main/ui/dashboard/sidebar.cljs:469, src/app/main/ui/dashboard/team.cljs:474 msgid "errors.team-leave.insufficient-members" -msgstr "أعضاء غير كافيين لمغادرة الفريق ، ربما تريد حذفه." +msgstr "أعضاء غير كافيين لمغادرة الفريق، ربما تريد حذفه." #: src/app/main/ui/dashboard/sidebar.cljs:472, src/app/main/ui/dashboard/team.cljs:477 msgid "errors.team-leave.member-does-not-exists" @@ -4717,3 +4717,12 @@ msgstr "افتح قائمة الإصدار" #, unused msgid "workspace.viewport.click-to-close-path" msgstr "انقر لتغلق المسار" + +#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 +msgid "auth.check-email" +msgstr "راجع بريدك الإلكتروني!" + +#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 +#, unused +msgid "auth.check-mail" +msgstr "راجع بريدك الإلكتروني" From 9aac607552ae563ca32f4fa25ffc7abd4a7e5ef2 Mon Sep 17 00:00:00 2001 From: jonnysemon Date: Fri, 17 Jul 2026 04:15:49 +0200 Subject: [PATCH 090/229] :globe_with_meridians: Add translations for: Arabic Currently translated at 47.4% (1124 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ar/ --- frontend/translations/ar.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/translations/ar.po b/frontend/translations/ar.po index d146c1fdc1..9f7c8b7ca1 100644 --- a/frontend/translations/ar.po +++ b/frontend/translations/ar.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "PO-Revision-Date: 2026-07-18 03:01+0000\n" -"Last-Translator: \"Mahmoud A. Rabo\" \n" +"Last-Translator: jonnysemon \n" "Language-Team: Arabic \n" "Language: ar\n" @@ -863,7 +863,7 @@ msgstr "" #: src/app/main/data/auth.cljs:342, src/app/main/ui/auth/register.cljs:91 msgid "errors.registration-disabled" -msgstr "التسجيل معطل حاليا." +msgstr "التسجيل مُعطّل حاليًا." #: src/app/main/ui/dashboard/sidebar.cljs:469, src/app/main/ui/dashboard/team.cljs:474 msgid "errors.team-leave.insufficient-members" From 29ed79fcdc1f1ed722e535e6ec907cfeb8151c1c Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Sun, 19 Jul 2026 10:03:13 +0200 Subject: [PATCH 091/229] :globe_with_meridians: Add translations for: Hebrew Currently translated at 85.9% (2036 of 2369 strings) Translation: Penpot/frontend Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/he/ --- frontend/translations/he.po | 74 ++++++++++++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 9 deletions(-) diff --git a/frontend/translations/he.po b/frontend/translations/he.po index 691d4e25e3..6160ca2a18 100644 --- a/frontend/translations/he.po +++ b/frontend/translations/he.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2026-06-23 10:01+0000\n" +"PO-Revision-Date: 2026-07-20 08:01+0000\n" "Last-Translator: Yaron Shahrabani \n" "Language-Team: Hebrew \n" @@ -10,7 +10,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 2026.7.dev0\n" +"X-Generator: Weblate 2026.8.dev0\n" #: src/app/main/ui/auth/register.cljs:214, src/app/main/ui/static.cljs:180, src/app/main/ui/viewer/login.cljs:100 msgid "auth.already-have-account" @@ -565,7 +565,7 @@ msgstr "הורדת %s קבצים תקניים (‎.svg + .json)" #, unused msgid "dashboard.export.explain" msgstr "" -"אחד או יותר מהקבצים שברצונך לייצא משתמשים בספריות משותפות. מה לעשות עם " +"אחד או יותר מהקבצים שמיועדים להורדה משתמשים בספריות משותפות. מה לעשות עם " "המשאבים שלהן*?" #: src/app/main/ui/dashboard/file_menu.cljs:267 @@ -2098,7 +2098,6 @@ msgid "inspect.tabs.styles.active-themes" msgstr "ערכות עיצוב פעילות" #: src/app/main/ui/inspect/styles/style_box.cljs:75 -#, fuzzy msgid "inspect.tabs.styles.copy-shorthand" msgstr "העתקת קיצור CSS ללוח הגזירים" @@ -4984,7 +4983,6 @@ msgid "subscription.settings.success.dialog.title" msgstr "התוכנית שלך היא %s!" #: src/app/main/ui/settings/subscription.cljs:655 -#, fuzzy msgid "subscription.settings.support-us-since" msgstr "תמכת בנו עם התוכנית הזאת מאז: %s" @@ -7653,7 +7651,7 @@ msgstr "מסכות" #: src/app/main/ui/workspace/sidebar/layers.cljs:566 msgid "workspace.sidebar.layers.search" -msgstr "חיפוש בשכבות" +msgstr "איתור…" #: src/app/main/ui/workspace/sidebar/layers.cljs:639, src/app/main/ui/workspace/sidebar/layers.cljs:733 msgid "workspace.sidebar.layers.shapes" @@ -7982,7 +7980,6 @@ msgid "workspace.tokens.num-active-sets" msgstr "%s סדרות פעילות" #: src/app/main/ui/workspace/tokens/management/token_pill.cljs:122 -#, fuzzy msgid "workspace.tokens.original-value" msgstr "ערך מקורי: %s" @@ -8029,7 +8026,6 @@ msgid "workspace.tokens.remapping-in-progress" msgstr "הפניות האסימון (token) ממופות מחדש…" #: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:87, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:296, src/app/main/ui/workspace/tokens/management/forms/controls/color_input.cljs:489, src/app/main/ui/workspace/tokens/management/forms/controls/combobox.cljs:298, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:189, src/app/main/ui/workspace/tokens/management/forms/controls/fonts_combobox.cljs:324, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:259, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:381, src/app/main/ui/workspace/tokens/management/forms/controls/input.cljs:505, src/app/main/ui/workspace/tokens/management/token_pill.cljs:123 -#, fuzzy msgid "workspace.tokens.resolved-value" msgstr "ערך פתור: %s" @@ -8148,7 +8144,6 @@ msgid "workspace.tokens.themes-list" msgstr "רשימת ערכות עיצוב" #: src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:334, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:335 -#, fuzzy msgid "workspace.tokens.token-description" msgstr "תיאור" @@ -8557,3 +8552,64 @@ msgstr "גרסאות שנשמרו אוטומטית תישמרנה למשך %s י #, unused msgid "workspace.viewport.click-to-close-path" msgstr "לחיצה תסגור את הנתיב" + +#: src/app/main/ui/ds/controls/utilities/token_field.cljs:48 +msgid "ds.inputs.token-field.no-active-token-option" +msgstr "{%s} לא נמצא באף סדרה פעילה או שהערך שלו שגוי." + +#: src/app/main/data/common.cljs:82 +msgid "notifications.by-code.upgrade-version" +msgstr "יש גרסה חדשה." + +#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:273 +msgid "workspace.tokens.token-name-duplication-validation-error" +msgstr "כבר קיים אסימון בנתיב: %s או בקידומת תואמת." + +#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 +msgid "auth.check-email" +msgstr "נא לבדוק את תיבת הדוא״ל שלך!" + +#: src/app/main/ui/auth/verify_token.cljs:53 +msgid "auth.notifications.org-invitation-accepted" +msgstr "הצטרפת להיות חלק מ־%s" + +#: src/app/main/ui/auth/register.cljs:238 +msgid "auth.verification-sent-email" +msgstr "שלחנו לך הודעת אימות אל:" + +#: src/app/main/data/nitrate.cljs:165 +msgid "dasboard.leave-org.toast" +msgstr "אינך חלק מהארגון %s יותר." + +#, unused +msgid "dashboard.change-org-modal.accept" +msgstr "העברת צוות" + +#, unused +msgid "dashboard.change-org-modal.choose" +msgstr "העברה אל:" + +#, unused +msgid "dashboard.change-org-modal.select" +msgstr "בחירת ארגון" + +#, unused +msgid "dashboard.change-org-modal.text" +msgstr "" +"מיזמים וקבצים יישארו זמינים לחברי הצוות. הצוות יקבל את ההגדרות מהארגון החדש." + +#: src/app/main/data/nitrate.cljs:399, src/app/main/ui/dashboard/team_form.cljs:157 +msgid "dashboard.change-org-modal.title" +msgstr "החלפת ארגון הצוות" + +#: src/app/main/ui/dashboard/sidebar.cljs:376 +msgid "dashboard.go-to-admin-console" +msgstr "מעבר למסוף הניהול" + +#: src/app/main/ui/dashboard/import.cljs:505 +msgid "dashboard.import.import-error.check-error" +msgstr "לא הצלחנו לאמת את הקובץ הזה." + +#: src/app/main/ui/dashboard/import.cljs:509 +msgid "dashboard.import.import-error.corrupt-file" +msgstr "נראה שהקובץ הזה פגום." From cddbd8e8975c6e7e3546f511e66451cd0c3bf1eb Mon Sep 17 00:00:00 2001 From: Juan de la Cruz Date: Mon, 20 Jul 2026 10:06:02 +0200 Subject: [PATCH 092/229] :sparkles: Add font family preview in typography selector (#10411) Co-authored-by: alonso.torres --- frontend/package.json | 1 + frontend/scripts/_helpers.js | 43 +- frontend/scripts/build-app-assets.js | 1 + frontend/scripts/build-fonts-preview.js | 384 ++++++++++++++++++ frontend/scripts/watch.js | 1 + frontend/src/app/config.cljs | 5 + frontend/src/app/main/fonts.cljs | 108 ++++- frontend/src/app/main/ui/workspace.cljs | 9 + .../sidebar/options/menus/typography.cljs | 83 +++- .../sidebar/options/menus/typography.scss | 29 ++ frontend/src/app/util/dom.cljs | 7 + frontend/src/app/util/globals.js | 7 + 12 files changed, 670 insertions(+), 8 deletions(-) create mode 100644 frontend/scripts/build-fonts-preview.js diff --git a/frontend/package.json b/frontend/package.json index 32da31fbf9..f743baa28a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,6 +15,7 @@ }, "scripts": { "build:app:assets": "node ./scripts/build-app-assets.js", + "build:fonts-preview": "node ./scripts/build-fonts-preview.js", "build:storybook": "pnpm run build:storybook:assets && pnpm run build:storybook:cljs && storybook build", "build:storybook:assets": "node ./scripts/build-storybook-assets.js", "build:storybook:cljs": "clojure -M:dev:shadow-cljs compile storybook", diff --git a/frontend/scripts/_helpers.js b/frontend/scripts/_helpers.js index c6396f99bc..ea5a4dff0b 100644 --- a/frontend/scripts/_helpers.js +++ b/frontend/scripts/_helpers.js @@ -15,6 +15,8 @@ import pLimit from "p-limit"; import ppt from "pretty-time"; import wpool from "workerpool"; +import { buildFontsPreviewSprite } from "./build-fonts-preview.js"; + function getCoreCount() { return os.cpus().length; } @@ -48,8 +50,9 @@ async function findFiles(basePath, predicate, options = {}) { return files; } -function syncDirs(originPath, destPath) { - const command = `rsync -ar --delete ${originPath} ${destPath}`; +function syncDirs(originPath, destPath, excludes = []) { + const excludeArgs = excludes.map((p) => `--exclude=${p}`).join(" "); + const command = `rsync -ar --delete ${excludeArgs} ${originPath} ${destPath}`; return new Promise((resolve, reject) => { proc.exec(command, (cause, stdout) => { @@ -540,6 +543,36 @@ export async function compileSvgSprites() { } } +export async function compileFontsPreviewSprite() { + const start = process.hrtime(); + log.info("init: compile fonts preview sprite"); + let error = false; + let result; + + try { + result = await buildFontsPreviewSprite(); + } catch (cause) { + error = cause; + } + + const end = process.hrtime(start); + + if (error) { + log.error("error: compile fonts preview sprite", `(${ppt(end)})`); + console.error(error); + } else if (result.skipped) { + log.info( + "done: compile fonts preview sprite (up-to-date, skipped)", + `(${ppt(end)})`, + ); + } else { + log.info( + `done: compile fonts preview sprite (${result.ok} ok, ${result.failed} fallback)`, + `(${ppt(end)})`, + ); + } +} + export async function compileTemplates() { const start = process.hrtime(); let error = false; @@ -584,7 +617,11 @@ export async function copyAssets() { log.info("init: copy assets"); await syncDirs("resources/images/", "resources/public/images/"); - await syncDirs("resources/fonts/", "resources/public/fonts/"); + // The font preview sprite is generated into public/fonts/ (not committed), so + // exclude it from --delete to keep it across builds (see compileFontsPreviewSprite). + await syncDirs("resources/fonts/", "resources/public/fonts/", [ + "fonts-preview-sprite.svg", + ]); const end = process.hrtime(start); log.info("done: copy assets", `(${ppt(end)})`); diff --git a/frontend/scripts/build-app-assets.js b/frontend/scripts/build-app-assets.js index e0fe385dce..f1f5a970c8 100644 --- a/frontend/scripts/build-app-assets.js +++ b/frontend/scripts/build-app-assets.js @@ -3,6 +3,7 @@ import * as h from "./_helpers.js"; await h.ensureDirectories(); await h.compileStyles(); await h.copyAssets(); +await h.compileFontsPreviewSprite(); await h.copyWasmPlayground(); await h.compileSvgSprites(); await h.compileTranslations(); diff --git a/frontend/scripts/build-fonts-preview.js b/frontend/scripts/build-fonts-preview.js new file mode 100644 index 0000000000..b1aa7c839c --- /dev/null +++ b/frontend/scripts/build-fonts-preview.js @@ -0,0 +1,384 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// +// Copyright (c) KALEIDOS INC Sucursal en España SL + +// Builds one SVG sprite previewing every catalog (built-in + Google) font name, +// outlined in its own typeface, so the picker loads it once instead of one +// request per font. Custom uploads aren't baked in and use the runtime fallback. +// +// Part of the asset build (compileFontsPreviewSprite in _helpers.js): +// regenerates only when missing or older than the gfonts catalog. Run directly +// to force a rebuild. See the technical-guide doc for the full design. + +import { createHash } from "node:crypto"; +import fs from "node:fs/promises"; +import os from "node:os"; +import ph from "node:path"; +import url from "node:url"; + +import opentype from "opentype.js"; + +// Coordinates are emitted in CSS px (1 user unit == 1px), so the UI sizes rows +// without per-font metrics. Each name is laid out on its baseline then fitted +// into a fixed BOX_HEIGHT box (see buildSymbol). See the technical-guide doc. +const FONT_SIZE = 18; // visual cap/x-height target, matches the label typography +const BOX_HEIGHT = 28; // display box height in px; keep in sync with the scss +const VPAD = 1; // px of breathing room top/bottom before a name is scaled to fit +// Decimals of precision. 1 (≈0.1px grid) keeps glyphs smooth; 0 makes them +// wobbly. Sprite is ~2.3MB gzip at 1 with the relative encoding (serializePath). +const PATH_PRECISION = 1; + +const CACHE_DIR = ph.join(os.tmpdir(), "penpot-fonts-preview-cache"); +const CONCURRENCY = 24; +// Written straight to the served dir (like the SVG sprite), and excluded from +// copyAssets' `rsync --delete` so it survives builds — see the doc / _helpers.js. +export const OUTPUT = "resources/public/fonts/fonts-preview-sprite.svg"; + +// Color fonts (COLR/SVG glyph tables) make opentype.js take a browser-only +// DOMParser path that rejects a promise and crashes Node. We only need vector +// outlines, so swallow those rejections and the COLR warning during generation +// (restored afterwards so other build steps are unaffected). +function installFontParsingGuards() { + const onRejection = () => {}; + process.on("unhandledRejection", onRejection); + + const origWarn = console.warn; + console.warn = (msg, ...rest) => { + if (typeof msg === "string" && msg.includes("COLR")) return; + origWarn(msg, ...rest); + }; + + return () => { + process.off("unhandledRejection", onRejection); + console.warn = origWarn; + }; +} + +// Mirror of cuerdas.core/slug as used by the `parse-gfont` macro in +// src/app/main/fonts.clj so that ids match `(str "gfont-" (str/slug family))`. +function slug(value) { + return value + .normalize("NFKD") + .replace(/[̀-ͯ]/g, "") + .toLowerCase() + .replace(/[^a-z0-9]+/g, "-") + .replace(/^-+|-+$/g, ""); +} + +async function findGfontsJson() { + const dir = "resources/fonts"; + const entries = await fs.readdir(dir); + const matches = entries.filter((f) => /^gfonts\..*\.json$/.test(f)).sort(); + if (matches.length === 0) { + throw new Error(`no gfonts.*.json found in ${dir}`); + } + return ph.join(dir, matches[matches.length - 1]); +} + +async function readCatalog() { + const builtin = [ + { + id: "sourcesanspro", + name: "Source Sans Pro", + source: { + type: "file", + path: "resources/fonts/sourcesanspro-regular.ttf", + }, + }, + ]; + + const gfontsPath = await findGfontsJson(); + const raw = JSON.parse(await fs.readFile(gfontsPath, "utf-8")); + const google = (raw.items || []).map((item) => { + const family = item.family; + // Prefer the "menu" subset: a tiny TTF Google ships containing exactly the + // glyphs needed to render the family name in a font picker. + const url = + item.menu || + (item.files && (item.files.regular || Object.values(item.files)[0])); + return { + id: `gfont-${slug(family)}`, + name: family, + source: { type: "url", url }, + }; + }); + + return [...builtin, ...google]; +} + +async function fetchWithCache(url) { + const key = createHash("sha1").update(url).digest("hex") + ".ttf"; + const cached = ph.join(CACHE_DIR, key); + try { + return await fs.readFile(cached); + } catch { + // not cached yet + } + + let lastErr; + for (let attempt = 0; attempt < 3; attempt++) { + try { + const res = await fetch(url); + if (!res.ok) throw new Error(`HTTP ${res.status}`); + const buf = Buffer.from(await res.arrayBuffer()); + await fs.writeFile(cached, buf); + return buf; + } catch (err) { + lastErr = err; + } + } + throw lastErr; +} + +async function loadFontBuffer(source) { + if (source.type === "file") return fs.readFile(source.path); + if (!source.url) throw new Error("missing font url"); + return fetchWithCache(source.url); +} + +// Lay the name out glyph-by-glyph with sanitized advances, NOT via +// `font.getPath`: some menu subsets have a broken kern/NaN advance that emits +// `NaN` into the path, which makes browsers stop parsing mid-path (only the +// first glyph renders). Baseline at y=0; buildSymbol re-centers afterwards. +// `hasTofu` flags glyphs the subset lacks (.notdef → "tofu" boxes), dropping the +// font to the runtime fallback. +function renderName(font, text) { + const scale = FONT_SIZE / font.unitsPerEm; + const path = new opentype.Path(); + let x = 0; + let hasTofu = false; + for (const ch of text) { + const glyph = font.charToGlyph(ch); + if (glyph.index === 0 && ch.trim() !== "") hasTofu = true; + path.extend(glyph.getPath(x, 0, FONT_SIZE)); + const advance = glyph.advanceWidth; + x += (Number.isFinite(advance) ? advance : font.unitsPerEm * 0.5) * scale; + } + return { path, hasTofu }; +} + +// Round to PATH_PRECISION decimals (normalizing -0). Done BEFORE deltas are +// taken (serializePath) so the relative encoding never drifts. +function roundGrid(value) { + return Number(value.toFixed(PATH_PRECISION)) + 0; +} + +// Format an (already-rounded) number compactly: drop the integer "0" from +// "0.x"/"-0.x" to save bytes (".x"/"-.x" are valid SVG numbers). +function fmt(n) { + let s = n.toString(); + if (s.startsWith("0.")) s = s.slice(1); + else if (s.startsWith("-0.")) s = "-" + s.slice(2); + return s; +} + +// Serialize paths ourselves (opentype's `toPathData` separates numbers with +// spaces only — ambiguous enough that browsers bail mid-path). Format: comma +// WITHIN a pair, space BETWEEN pairs. Commands are RELATIVE (lowercase m/l/q/c) +// for much smaller, better-compressing output (~6.2MB → ~2.3MB gzip), with no +// geometry change. Curve control points are relative to the pen before the +// command, and `z` returns the pen to the subpath start — both tracked below. +// Coordinates are baked through the affine fit (scale `s`, translate tx/ty). +function serializePath(commands, s, tx, ty) { + const ax = (v) => roundGrid(v * s + tx); + const ay = (v) => roundGrid(v * s + ty); + let out = ""; + // px/py: current pen (rounded, absolute). sx/sy: start of the current subpath, + // which the pen snaps back to on `z`. + let px = 0, + py = 0, + sx = 0, + sy = 0; + // Re-round the delta: subtracting two grid values reintroduces float noise + // (13.5 - 10.9 === 2.6000000000000014). Drift-free, since the pen tracks the + // exact rounded absolute (x/y), not the emitted delta. + const d = (to, from) => fmt(roundGrid(to - from)); + for (const c of commands) { + switch (c.type) { + case "M": { + const x = ax(c.x), + y = ay(c.y); + out += `m${d(x, px)},${d(y, py)}`; + px = sx = x; + py = sy = y; + break; + } + case "L": { + const x = ax(c.x), + y = ay(c.y); + out += `l${d(x, px)},${d(y, py)}`; + px = x; + py = y; + break; + } + case "Q": { + const x1 = ax(c.x1), + y1 = ay(c.y1), + x = ax(c.x), + y = ay(c.y); + out += `q${d(x1, px)},${d(y1, py)} ${d(x, px)},${d(y, py)}`; + px = x; + py = y; + break; + } + case "C": { + const x1 = ax(c.x1), + y1 = ay(c.y1), + x2 = ax(c.x2), + y2 = ay(c.y2), + x = ax(c.x), + y = ay(c.y); + out += + `c${d(x1, px)},${d(y1, py)} ` + + `${d(x2, px)},${d(y2, py)} ${d(x, px)},${d(y, py)}`; + px = x; + py = y; + break; + } + case "Z": + out += "z"; + px = sx; + py = sy; + break; + } + } + return out; +} + +function buildSymbol({ id, name }, buffer) { + const ab = buffer.buffer.slice( + buffer.byteOffset, + buffer.byteOffset + buffer.byteLength, + ); + const font = opentype.parse(ab); + // Drop the SVG color-glyph table to force outline rendering (see above). + font.tables.svg = undefined; + + const { path, hasTofu } = renderName(font, name); + // Drop fonts whose name needs glyphs the subset lacks — they would render as + // .notdef boxes; the runtime fallback loads the real font instead. + if (hasTofu) throw new Error("missing glyphs (tofu)"); + + const bb = path.getBoundingBox(); + if (!Number.isFinite(bb.x1) || bb.x2 <= bb.x1) throw new Error("empty path"); + + // Fit into BOX_HEIGHT, centered by bounding box so tall ascenders/descenders + // aren't clipped; names taller than the box are scaled down. Left-aligned at 0. + const usable = BOX_HEIGHT - 2 * VPAD; + const height = bb.y2 - bb.y1; + const s = height > usable ? usable / height : 1; + const tx = -bb.x1 * s; + const ty = BOX_HEIGHT / 2 - ((bb.y1 + bb.y2) / 2) * s; + + const d = serializePath(path.commands, s, tx, ty); + if (!d || d.length === 0) throw new Error("empty path"); + // A stray NaN (non-finite outline point) would truncate the glyph in the + // browser; drop the font so it cleanly falls back to the runtime loader. + if (d.includes("NaN")) throw new Error("non-finite path"); + // No `fill`: the UI's provides `currentColor` so it follows the theme. + return ``; +} + +async function mapLimit(items, limit, fn) { + const results = new Array(items.length); + let cursor = 0; + async function worker() { + while (cursor < items.length) { + const index = cursor++; + results[index] = await fn(items[index], index); + } + } + await Promise.all( + Array.from({ length: Math.min(limit, items.length) }, worker), + ); + return results; +} + +// True when the sprite exists and is at least as new as the gfonts catalog, so +// the build can skip the expensive, network-bound regeneration. +export async function isSpriteUpToDate(outputPath = OUTPUT) { + try { + const gfontsPath = await findGfontsJson(); + const [outStat, gfontsStat] = await Promise.all([ + fs.stat(outputPath), + fs.stat(gfontsPath), + ]); + return outStat.mtimeMs >= gfontsStat.mtimeMs; + } catch { + // output missing (or no catalog) → not up to date + return false; + } +} + +// Regenerate the sprite into `outputPath`. Skips (returns `{ skipped: true }`) +// when the output is already up to date, unless `force` is set. On a real +// rebuild it returns `{ skipped:false, ok, failed, bytes }`. +export async function buildFontsPreviewSprite({ + outputPath = OUTPUT, + force = false, +} = {}) { + if (!force && (await isSpriteUpToDate(outputPath))) { + return { skipped: true }; + } + + const restoreGuards = installFontParsingGuards(); + try { + await fs.mkdir(CACHE_DIR, { recursive: true }); + + const catalog = await readCatalog(); + console.log(`building font preview sprite for ${catalog.length} fonts…`); + + let ok = 0; + const failed = []; + const symbols = await mapLimit(catalog, CONCURRENCY, async (font) => { + try { + const buffer = await loadFontBuffer(font.source); + const symbol = buildSymbol(font, buffer); + ok++; + if (ok % 200 === 0) console.log(` …${ok}/${catalog.length}`); + return symbol; + } catch (err) { + failed.push({ id: font.id, reason: err.message }); + return null; + } + }); + + const body = symbols.filter(Boolean).join(""); + const sprite = + `\n`; + + await fs.mkdir(ph.dirname(outputPath), { recursive: true }); + await fs.writeFile(outputPath, sprite); + + if (failed.length) { + console.log( + `font preview sprite: ${failed.length} fonts will use the runtime fallback:`, + ); + for (const f of failed.slice(0, 40)) + console.log(` - ${f.id}: ${f.reason}`); + if (failed.length > 40) console.log(` …and ${failed.length - 40} more`); + } + + return { skipped: false, ok, failed: failed.length, bytes: sprite.length }; + } finally { + restoreGuards(); + } +} + +// When invoked directly (`node scripts/build-fonts-preview.js`), force a full +// rebuild regardless of the up-to-date check. +const isDirectRun = + process.argv[1] && + import.meta.url === url.pathToFileURL(process.argv[1]).href; + +if (isDirectRun) { + const res = await buildFontsPreviewSprite({ force: true }); + const mb = (res.bytes / 1024 / 1024).toFixed(1); + console.log( + `done: ${res.ok} ok, ${res.failed} failed → ${OUTPUT} (${mb} MB, served gzipped)`, + ); +} diff --git a/frontend/scripts/watch.js b/frontend/scripts/watch.js index 38007d4454..700874be74 100644 --- a/frontend/scripts/watch.js +++ b/frontend/scripts/watch.js @@ -63,6 +63,7 @@ async function compileSass(path) { await h.ensureDirectories(); await compileSassAll(); await h.copyAssets(); +await h.compileFontsPreviewSprite(); await h.copyWasmPlayground(); await h.compileTranslations(); await h.compileSvgSprites(); diff --git a/frontend/src/app/config.cljs b/frontend/src/app/config.cljs index 359a984097..dc2c5a237a 100644 --- a/frontend/src/app/config.cljs +++ b/frontend/src/app/config.cljs @@ -196,6 +196,11 @@ (get :path) (str "?version=" version-tag))) +(def fonts-preview-sprite-uri + (-> public-uri + (u/join "fonts/fonts-preview-sprite.svg") + (str))) + (defn external-feature-flag [flag value] (let [f (obj/get global "externalFeatureFlag")] diff --git a/frontend/src/app/main/fonts.cljs b/frontend/src/app/main/fonts.cljs index 02181c3db8..761e1dbc6f 100644 --- a/frontend/src/app/main/fonts.cljs +++ b/frontend/src/app/main/fonts.cljs @@ -108,6 +108,108 @@ ;; only know if the font is needed or not (defonce ^:dynamic loaded-hints (l/atom #{})) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; PREVIEW SPRITE +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; A prebuilt SVG sprite (generated by scripts/build-fonts-preview.js) holds every +;; built-in + Google font name outlined in its own typeface, so the picker can +;; preview the whole catalog with no per-font requests. Fonts not in it (custom +;; uploads, ones that fail to bake) use the runtime fallback. +;; +;; The sprite is heavy (~2000 nodes), so we DON'T keep it in the DOM: the fetched +;; markup is cached here as a string (`:svg`) and the nodes are materialized only +;; while the picker is open (attach/detach below). `:ids` are the font ids it +;; covers, so the UI can pick sprite vs fallback. +(defonce preview-sprite (l/atom {:status :idle :ids #{} :svg nil})) + +;; Id prefix shared with the generator and the UI's ``; referenced here +;; rather than re-declared so the contract stays in one place. +(def preview-sprite-prefix "font-preview-") + +(defn- collect-preview-ids + "Set of font ids present in the sprite, read from the injected `container` + element's `` groups (prefix stripped)." + [^js container] + (let [nodes (dom/query-all container (dm/str "g[id^=\"" preview-sprite-prefix "\"]")) + plen (count preview-sprite-prefix)] + (persistent! + (reduce (fn [acc node] + (conj! acc (subs (dom/get-attribute node "id") plen))) + (transient #{}) + (array-seq nodes))))) + +(defn- reset-preview-sprite-error! + [] + ;; :error → the UI shows plain names (no previews, no per-font load storm); a + ;; later `prefetch-preview-sprite!` call can retry. + (reset! preview-sprite {:status :error :ids #{} :svg nil})) + +(defn- parse-sprite-svg + "Parse the cached sprite markup as SVG (not HTML, so no innerHTML injection + surface). Returns the root `` element, or nil if it isn't valid SVG." + [text] + (let [doc (.parseFromString (js/DOMParser.) text "image/svg+xml") + root (.-documentElement doc)] + ;; A malformed document yields a root instead of . + (when (and (= "svg" (.-tagName ^js root)) + (nil? (dom/query doc "parsererror"))) + root))) + +(defn prefetch-preview-sprite! + "Fetch the font-preview sprite markup and cache it in memory (no DOM yet — see + `attach-preview-sprite!`). Idempotent: fetches only when nothing is cached yet + (`:idle`) or a previous attempt failed (`:error`); no-op while `:loading` or + `:ready`." + [] + (when (and (globals/browser?) + (contains? #{:idle :error} (:status @preview-sprite))) + (swap! preview-sprite assoc :status :loading) + (->> (http/send! {:method :get + :uri cf/fonts-preview-sprite-uri + :response-type :text + :mode :cors}) + (rx/subs! + (fn [response] + ;; http/send! doesn't reject on non-2xx; guard so an error body isn't + ;; cached as the sprite. + (if (http/success? response) + (swap! preview-sprite assoc :status :ready :svg (:body response)) + (do + (log/wrn :hint "cannot load font preview sprite" :status (:status response)) + (reset-preview-sprite-error!)))) + (fn [cause] + (log/wrn :hint "cannot load font preview sprite" :cause cause) + (reset-preview-sprite-error!)))))) + +(defn attach-preview-sprite! + "Materialize the cached sprite into the DOM (hidden) so rows can reference its + glyph groups via ``, and record the covered font ids. Returns the injected + node (pass it to `detach-preview-sprite!` on close), or nil if not ready / the + markup is invalid. Parsing happens here, not on prefetch, so the cost is paid + only while the picker is open." + [] + (let [{:keys [status svg]} @preview-sprite] + (when (and (globals/browser?) (= :ready status) (some? svg)) + (if-let [node (some-> (parse-sprite-svg svg) (dom/import-node))] + ;; The node already carries display:none + aria-hidden from the generator. + (do + (dom/set-attribute! node "id" "font-preview-sprite") + (when-let [body-el (unchecked-get globals/document "body")] + (dom/append-child! body-el node)) + (swap! preview-sprite assoc :ids (collect-preview-ids node)) + node) + (do + (log/wrn :hint "cannot parse font preview sprite") + (reset-preview-sprite-error!) + nil))))) + +(defn detach-preview-sprite! + "Remove the sprite node injected by `attach-preview-sprite!` from the DOM. The + cached markup and `:ids` stay, so reopening re-attaches without a refetch." + [node] + (dom/remove! node)) + (defn- add-font-css! "Creates a style element and attaches it to the dom." [id css] @@ -158,7 +260,7 @@ (defmethod load-font :google [{:keys [id ::on-loaded] :as font}] - (when (exists? js/window) + (when (globals/browser?) (log/dbg :hint "load-font" :font-id id :backend "google") (let [url (generate-gfonts-url font)] (->> (fetch-gfont-css url) @@ -200,7 +302,7 @@ (defmethod load-font :custom [{:keys [id ::on-loaded] :as font}] - (when (exists? js/window) + (when (globals/browser?) (log/dbg :hint "load-font" :font-id id :backend "custom") (let [css (generate-custom-font-css font)] (add-font-css! id css) @@ -215,7 +317,7 @@ ([font-id] (ensure-loaded! font-id nil)) ([font-id variant-id] (log/dbg :action "try-ensure-loaded!" :font-id font-id :variant-id variant-id) - (if-not (exists? js/window) + (if-not (globals/browser?) ;; If we are in the worker environment, we just mark it as loaded ;; without really loading it. (do diff --git a/frontend/src/app/main/ui/workspace.cljs b/frontend/src/app/main/ui/workspace.cljs index bb69485774..e70cbe685c 100644 --- a/frontend/src/app/main/ui/workspace.cljs +++ b/frontend/src/app/main/ui/workspace.cljs @@ -8,12 +8,14 @@ (:require-macros [app.main.style :as stl]) (:require [app.common.data.macros :as dm] + [app.config :as cf] [app.main.data.common :as dcm] [app.main.data.helpers :as dsh] [app.main.data.persistence :as dps] [app.main.data.plugins :as dpl] [app.main.data.workspace :as dw] [app.main.features :as features] + [app.main.fonts :as fonts] [app.main.refs :as refs] [app.main.router :as-alias rt] [app.main.store :as st] @@ -230,6 +232,13 @@ (st/emit! (dps/initialize-persistence) (dpl/update-plugins-permissions-peek))) + ;; FLAG :font-preview — prefetch the preview sprite markup on workspace mount + ;; (kept in memory, not the DOM) so the typography selector renders previews on + ;; open with no network wait. Remove the flag check to drop the feature. + (mf/with-effect [] + (when (contains? cf/flags :font-preview) + (fonts/prefetch-preview-sprite!))) + ;; Setting the layout preset by its name (mf/with-effect [layout-name] (st/emit! (dw/initialize-workspace-layout layout-name))) diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.cljs index dc242cb19c..0f6cc60077 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.cljs @@ -12,6 +12,7 @@ [app.common.data.macros :as dm] [app.common.exceptions :as ex] [app.common.types.text :as txt] + [app.config :as cf] [app.main.constants :refer [max-input-length]] [app.main.data.common :as dcm] [app.main.data.fonts :as fts] @@ -39,6 +40,7 @@ [app.util.timers :as tm] [cuerdas.core :as str] [goog.events :as events] + [promesa.core :as p] [rumext.v2 :as mf])) (defn- attr->string [value] @@ -63,11 +65,73 @@ (or next (peek fonts))) current)) +(defn- use-font-lazy-load + "Lazily loads `font-id` for the fallback preview when `fallback?`, on idle so + fast scrolling over recycled virtualized rows doesn't storm requests (cancelled + if the row is reused first). Returns whether the font face is loaded yet." + [font-id fallback?] + (let [loaded? (mf/use-state #(and fallback? (contains? @fonts/loaded font-id)))] + (mf/use-effect + (mf/deps font-id fallback?) + (fn [] + (let [already? (and fallback? (contains? @fonts/loaded font-id))] + (reset! loaded? already?) + (if (and fallback? (not already?)) + (let [cancelled? (volatile! false) + task (tm/schedule-on-idle + (fn [] + (-> (fonts/ensure-loaded! font-id) + (p/then (fn [_] + (when-not @cancelled? + (reset! loaded? true)))) + (p/catch (fn [_] nil)))))] + (fn [] + (vreset! cancelled? true) + (tm/dispose! task))) + (constantly nil))))) + @loaded?)) + +;; --- FEATURE: font preview (flag :font-preview) ------------------------------ +;; font-item-preview* and use-font-lazy-load are the whole feature. They are only +;; rendered/called behind the `:font-preview` flag check in font-item* below, so +;; their hooks never run when the flag is off. To remove the flag, inline +;; font-item-preview* into font-item* and drop the plain-name branch. + +(mf/defc font-item-preview* + "Row content with previews: a vector preview from the shared sprite for catalog + fonts, or the font's own name lazily loaded for custom fonts the sprite doesn't + cover." + {::mf/wrap [mf/memo]} + [{:keys [font]}] + (let [font-id (:id font) + sprite (mf/deref fonts/preview-sprite) + in-sprite? (contains? (:ids sprite) font-id) + + ;; Fallback is ONLY for custom fonts: ones the (ready) sprite doesn't + ;; cover. If the sprite isn't ready (loading/error) we show the plain name + ;; rather than runtime-loading the whole catalog. + fallback? (and (= :ready (:status sprite)) + (not in-sprite?)) + loaded? (use-font-lazy-load font-id fallback?)] + (if in-sprite? + ;; `fill: currentColor` (scss) makes the sprite glyph follow the row color. + [:svg {:class (stl/css :font-item-preview) + :role "img" + :aria-label (:name font)} + [:use {:href (dm/str "#" fonts/preview-sprite-prefix font-id)}]] + [:span {:class (stl/css :font-item-label) + :style (when loaded? + #js {:fontFamily (dm/str "\"" (:family font) "\", sans-serif")})} + (:name font)]))) + (mf/defc font-item* {::mf/wrap [mf/memo]} [{:keys [font is-current on-click style]}] (let [item-ref (mf/use-ref) - on-click (mf/use-fn (mf/deps font) #(on-click font))] + on-click (mf/use-fn (mf/deps font) #(on-click font)) + ;; FLAG :font-preview — gates the feature markup AND its row styling + ;; (.font-item-preview-on in the scss). Remove this and its two uses below. + preview? (contains? cf/flags :font-preview)] (mf/use-effect (mf/deps is-current) @@ -82,8 +146,11 @@ :ref item-ref :on-click on-click} [:div {:class (stl/css-case :font-item true + :font-item-preview-on preview? :selected is-current)} - [:span {:class (stl/css :font-item-label)} (:name font)] + (if preview? + [:> font-item-preview* {:font font}] + [:span {:class (stl/css :font-item-label)} (:name font)]) (when is-current [:> icon* {:icon-id i/tick :size "s"}])]])) @@ -115,6 +182,8 @@ fonts (mf/with-memo [state fonts] (filter-fonts state fonts)) + sprite-status (:status (mf/deref fonts/preview-sprite)) + recent-fonts (mf/deref refs/recent-fonts) recent-fonts (mf/with-memo [state recent-fonts] (filter-fonts state recent-fonts)) @@ -165,6 +234,16 @@ (let [key (events/listen js/document "keydown" on-key-down)] #(events/unlistenByKey key))) + ;; FLAG :font-preview — materialize the preview sprite into the DOM only while + ;; the picker is open (markup is prefetched on workspace load), removing it on + ;; close so its ~2000 nodes aren't kept around idle. Remove the flag clause to + ;; drop the feature. + (mf/with-effect [sprite-status] + (when (and (contains? cf/flags :font-preview) + (= :ready sprite-status)) + (let [node (fonts/attach-preview-sprite!)] + #(fonts/detach-preview-sprite! node)))) + (mf/with-effect [@selected] (when-let [inst (mf/ref-val flist)] (when-let [index (:index @selected)] diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.scss index b12d3cd835..4281c18e61 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.scss +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.scss @@ -11,6 +11,10 @@ @use "ds/mixins.scss" as *; @use "ds/_utils.scss" as *; +// Must match BOX_HEIGHT in scripts/build-fonts-preview.js (the sprite bakes each +// font name into that box at 1 unit == 1px). +$font-preview-box-height: 28px; + .typography-entry { --actions-visibility: hidden; --typography-entry-background-color: var(--color-background-tertiary); @@ -392,6 +396,31 @@ min-inline-size: 0; } +// --- FLAG :font-preview row styling. Only applied when font-item* adds the +// .font-item-preview-on modifier; remove this whole block with the flag so rows +// render exactly as before. +.font-item-preview-on { + // Center & clip so a previewed font's own metrics never grow/overflow the row. + align-items: center; + overflow: hidden; + + // Match the label size to the vector previews. + .font-item-label { + @include t.use-typography("body-medium"); + + line-height: 1.2; + } +} + +// `currentColor` makes the glyph fill follow the row text color (theme + selected). +.font-item-preview { + flex-grow: 1; + min-inline-size: 0; + inline-size: 100%; + block-size: $font-preview-box-height; + fill: currentcolor; +} + .font-selector-dropdown-full-size { block-size: var(--sidebar-element-options-height); display: grid; diff --git a/frontend/src/app/util/dom.cljs b/frontend/src/app/util/dom.cljs index faf5501f37..ca2809cfba 100644 --- a/frontend/src/app/util/dom.cljs +++ b/frontend/src/app/util/dom.cljs @@ -361,6 +361,13 @@ (.appendChild ^js el child)) el) +(defn import-node + "Import `node` (e.g. parsed in another document) into the current document so + it can be inserted. Deep clone unless `deep?` is false." + ([^js node] (import-node node true)) + ([^js node deep?] + (.importNode globals/document node deep?))) + (defn insert-after! [^js el ^js ref child] (when (and (some? el) (some? ref)) diff --git a/frontend/src/app/util/globals.js b/frontend/src/app/util/globals.js index cd9d990023..2539c7a852 100644 --- a/frontend/src/app/util/globals.js +++ b/frontend/src/app/util/globals.js @@ -22,6 +22,13 @@ goog.scope(function () { self.global = globalThis; + // Whether we are running in a real browser (has a window), as opposed to a + // worker or the test environment, where the objects below are mocked. + // Exposed to ClojureScript as `globals/browser?`. + self.browser_QMARK_ = function () { + return typeof goog.global.window !== "undefined"; + }; + function createMockedEventEmitter(k) { /* Allow mocked objects to be event emitters, so other modules * may subscribe to them. From 826072c65d9124d929e153f2b18b0648315860ec Mon Sep 17 00:00:00 2001 From: Shlok Goyal Date: Mon, 20 Jul 2026 13:37:26 +0530 Subject: [PATCH 093/229] :sparkles: Remove misleading MCP config from success modal (#10415) Signed-off-by: Shlok1729 Signed-off-by: Shlok Goyal Co-authored-by: Andrey Antukh --- .../app/main/ui/settings/integrations.cljs | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/frontend/src/app/main/ui/settings/integrations.cljs b/frontend/src/app/main/ui/settings/integrations.cljs index 403893ea68..3151b73c31 100644 --- a/frontend/src/app/main/ui/settings/integrations.cljs +++ b/frontend/src/app/main/ui/settings/integrations.cljs @@ -116,25 +116,6 @@ (tr "integrations.mcp-key.will-not-expire") (tr "integrations.token.will-not-expire")))]] - (when is-mcp - [:div {:class (stl/css :modal-content)} - [:> text* {:as "div" - :typography t/body-small - :class (stl/css :color-primary)} - (tr "integrations.info.mcp-client-config")] - [:textarea {:class (stl/css :textarea) - :wrap "off" - :rows 7 - :read-only true - :value (dm/str - "{\n" - " \"mcpServers\": {\n" - " \"penpot\": {\n" - " \"url\": \"" cf/mcp-server-url "?userToken=" (:token token-created "") "\"\n" - " }\n" - " }" - "\n}")}]]) - [:div {:class (stl/css :modal-footer)} [:> button* {:variant "secondary" :on-click modal/hide!} From 8d98877ba7a4caa762a3e6bd16328de02c3b033d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elena=20Torr=C3=B3?= Date: Mon, 20 Jul 2026 10:41:07 +0200 Subject: [PATCH 094/229] :bug: Fix using SVG image file as shape fill (#10707) --- frontend/src/app/render_wasm/api.cljs | 115 ++++++++++++++-------- render-wasm/src/render/fills.rs | 134 ++++++++++++++++++++------ render-wasm/src/render/images.rs | 94 +++++++++++++++++- 3 files changed, 271 insertions(+), 72 deletions(-) diff --git a/frontend/src/app/render_wasm/api.cljs b/frontend/src/app/render_wasm/api.cljs index cf0842c01d..761734502a 100644 --- a/frontend/src/app/render_wasm/api.cljs +++ b/frontend/src/app/render_wasm/api.cljs @@ -743,56 +743,87 @@ (aset textures new-id texture) new-id)) -(defn- retrieve-image - [url] - (rx/from - (-> (js/fetch url) - (p/then (fn [^js response] (.blob response))) - (p/then (fn [^js image] (js/createImageBitmap image)))))) +(defn- svg-blob? + [^js blob] + (str/starts-with? (.-type blob) "image/svg")) + +(defn- store-svg-image + "Sends raw SVG bytes to WASM so Skia parses and rasterizes them there. + Browsers reject SVG blobs in `createImageBitmap`, so SVGs skip the + shared-texture path." + [shape-id image-id thumbnail? ^js blob] + (-> (.arrayBuffer blob) + (p/then + (fn [buffer] + (let [image-bytes (js/Uint8Array. buffer) + ;; Header: 16 bytes shape uuid + 16 bytes image uuid + ;; + 4 bytes thumbnail flag, then the raw SVG payload. + offset (mem/alloc (+ 36 (.-byteLength image-bytes))) + heap (mem/get-heap-u8) + dview (mem/get-data-view)] + (-> offset + (mem/write-uuid dview shape-id) + (mem/write-uuid dview image-id) + (mem/write-u32 dview (if thumbnail? 1 0)) + (mem/write-buffer heap image-bytes)) + (h/call wasm/internal-module "_store_image") + true))))) + +(defn- store-image-texture + "Creates a WebGL texture from a decoded image and passes the texture ID to + WASM. This avoids decoding the image twice (once in browser, once in WASM)." + [shape-id image-id thumbnail? img] + (when-let [gl (webgl/get-webgl-context)] + (let [texture (webgl/create-webgl-texture-from-image gl img) + texture-id (get-texture-id-for-gl-object texture) + width (.-width ^js img) + height (.-height ^js img) + ;; Header: 32 bytes (2 UUIDs) + 4 bytes (thumbnail) + ;; + 4 bytes (texture ID) + 8 bytes (dimensions) + total-bytes 48 + offset (mem/alloc->offset-32 total-bytes) + heap32 (mem/get-heap-u32)] + + ;; 1. Set shape id (offset + 0 to offset + 3) + (mem.h32/write-uuid offset heap32 shape-id) + + ;; 2. Set image id (offset + 4 to offset + 7) + (mem.h32/write-uuid (+ offset 4) heap32 image-id) + + ;; 3. Set thumbnail flag as u32 (offset + 8) + (aset heap32 (+ offset 8) (if thumbnail? 1 0)) + + ;; 4. Set texture ID (offset + 9) + (aset heap32 (+ offset 9) texture-id) + + ;; 5. Set width (offset + 10) + (aset heap32 (+ offset 10) width) + + ;; 6. Set height (offset + 11) + (aset heap32 (+ offset 11) height) + + (h/call wasm/internal-module "_store_image_from_texture") + true))) (defn- fetch-image - "Loads an image and creates a WebGL texture from it, passing the texture ID to WASM. - This avoids decoding the image twice (once in browser, once in WASM)." + "Loads an image and hands it to WASM. Raster images are decoded by the + browser and shared as a WebGL texture; SVG images are sent as raw bytes + so Skia rasterizes them." [shape-id image-id thumbnail?] (let [url (cf/resolve-file-media {:id image-id} thumbnail?)] {:key url :thumbnail? thumbnail? :callback (fn [] - (->> (retrieve-image url) - (rx/map - (fn [img] - (when-let [gl (webgl/get-webgl-context)] - (let [texture (webgl/create-webgl-texture-from-image gl img) - texture-id (get-texture-id-for-gl-object texture) - width (.-width ^js img) - height (.-height ^js img) - ;; Header: 32 bytes (2 UUIDs) + 4 bytes (thumbnail) - ;; + 4 bytes (texture ID) + 8 bytes (dimensions) - total-bytes 48 - offset (mem/alloc->offset-32 total-bytes) - heap32 (mem/get-heap-u32)] - - ;; 1. Set shape id (offset + 0 to offset + 3) - (mem.h32/write-uuid offset heap32 shape-id) - - ;; 2. Set image id (offset + 4 to offset + 7) - (mem.h32/write-uuid (+ offset 4) heap32 image-id) - - ;; 3. Set thumbnail flag as u32 (offset + 8) - (aset heap32 (+ offset 8) (if thumbnail? 1 0)) - - ;; 4. Set texture ID (offset + 9) - (aset heap32 (+ offset 9) texture-id) - - ;; 5. Set width (offset + 10) - (aset heap32 (+ offset 10) width) - - ;; 6. Set height (offset + 11) - (aset heap32 (+ offset 11) height) - - (h/call wasm/internal-module "_store_image_from_texture") - true)))) + (->> (rx/from (-> (js/fetch url) + (p/then (fn [^js response] (.blob response))))) + (rx/mapcat + (fn [^js blob] + (rx/from + (if (svg-blob? blob) + (store-svg-image shape-id image-id thumbnail? blob) + (p/then (js/createImageBitmap blob) + (partial store-image-texture shape-id image-id thumbnail?)))))) (rx/catch (fn [cause] (log/error :hint "Could not fetch image" diff --git a/render-wasm/src/render/fills.rs b/render-wasm/src/render/fills.rs index 45f8fc3048..a34956be4a 100644 --- a/render-wasm/src/render/fills.rs +++ b/render-wasm/src/render/fills.rs @@ -5,37 +5,13 @@ use crate::error::Result; use crate::render::get_source_rect; use crate::shapes::{merge_fills, Fill, Frame, ImageFill, Rect, Shape, Type}; -fn draw_image_fill( - render_state: &mut RenderState, +// Set the clipping area to the shape outline within the container bounds +fn clip_to_shape( + canvas: &skia::Canvas, shape: &Shape, - image_fill: &ImageFill, - paint: &Paint, + container: &crate::math::Rect, antialias: bool, - surface_id: SurfaceId, ) { - let Some(image) = render_state.images.get(&image_fill.id()) else { - return; - }; - - let size = image.dimensions(); - let canvas = render_state.surfaces.canvas_and_mark_dirty(surface_id); - let container = &shape.selrect; - let path_transform = shape.to_path_transform(); - - let src_rect = get_source_rect(size, container, image_fill); - let dest_rect = container; - - let mut image_paint = skia::Paint::default(); - image_paint.set_anti_alias(antialias); - if let Some(filter) = shape.image_filter(1.) { - image_paint.set_image_filter(filter.clone()); - } - - let layer_rec = skia::canvas::SaveLayerRec::default().paint(&image_paint); - // Save the current canvas state - canvas.save_layer(&layer_rec); - - // Set the clipping rectangle to the container bounds match &shape.shape_type { Type::Rect(Rect { corners: Some(corners), @@ -60,7 +36,7 @@ fn draw_image_fill( } shape_type @ (Type::Path(_) | Type::Bool(_)) => { if let Some(path) = shape_type.path() { - if let Some(path_transform) = path_transform { + if let Some(path_transform) = shape.to_path_transform() { canvas.clip_path( &path .to_skia_path(shape.svg_attrs.as_ref()) @@ -77,6 +53,49 @@ fn draw_image_fill( Type::Group(_) => unreachable!("A group should not have fills"), Type::Text(_) => unimplemented!("TODO"), } +} + +fn draw_image_fill( + render_state: &mut RenderState, + shape: &Shape, + image_fill: &ImageFill, + paint: &Paint, + antialias: bool, + surface_id: SurfaceId, +) { + if draw_svg_image_fill( + render_state, + shape, + image_fill, + paint, + antialias, + surface_id, + ) { + return; + } + + let Some(image) = render_state.images.get(&image_fill.id()) else { + return; + }; + + let size = image.dimensions(); + let canvas = render_state.surfaces.canvas_and_mark_dirty(surface_id); + let container = &shape.selrect; + + let src_rect = get_source_rect(size, container, image_fill); + let dest_rect = container; + + let mut image_paint = skia::Paint::default(); + image_paint.set_anti_alias(antialias); + if let Some(filter) = shape.image_filter(1.) { + image_paint.set_image_filter(filter.clone()); + } + + let layer_rec = skia::canvas::SaveLayerRec::default().paint(&image_paint); + // Save the current canvas state + canvas.save_layer(&layer_rec); + + clip_to_shape(canvas, shape, container, antialias); // Draw the image with the calculated destination rectangle canvas.draw_image_rect_with_sampling_options( @@ -91,6 +110,63 @@ fn draw_image_fill( canvas.restore(); } +// Draws an SVG image fill from its parsed DOM. The canvas transform carries +// the current zoom, so the SVG rasterizes at display resolution instead of +// being stretched from a fixed-size texture. Returns false when the stored +// image is not an SVG. +fn draw_svg_image_fill( + render_state: &mut RenderState, + shape: &Shape, + image_fill: &ImageFill, + paint: &Paint, + antialias: bool, + surface_id: SurfaceId, +) -> bool { + let Some((dom, size)) = render_state.images.get_svg(&image_fill.id()) else { + return false; + }; + + let canvas = render_state.surfaces.canvas_and_mark_dirty(surface_id); + let container = &shape.selrect; + let size = skia::ISize::new(size.width as i32, size.height as i32); + let src_rect = get_source_rect(size, container, image_fill); + if src_rect.width() <= 0.0 || src_rect.height() <= 0.0 { + return true; + } + + let mut image_paint = skia::Paint::default(); + image_paint.set_anti_alias(antialias); + if let Some(filter) = shape.image_filter(1.) { + image_paint.set_image_filter(filter.clone()); + } + + let layer_rec = skia::canvas::SaveLayerRec::default().paint(&image_paint); + canvas.save_layer(&layer_rec); + + clip_to_shape(canvas, shape, container, antialias); + + // Apply the fill paint (opacity/blend) to the whole SVG as one layer. + let fill_layer = skia::canvas::SaveLayerRec::default().paint(paint); + canvas.save_layer(&fill_layer); + + // Map the cropped source rect onto the container: cover semantics when + // keep-aspect-ratio is set, stretch otherwise (same math as the raster + // path, expressed as a canvas transform). + let scale_x = container.width() / src_rect.width(); + let scale_y = container.height() / src_rect.height(); + canvas.translate(( + container.left - src_rect.left * scale_x, + container.top - src_rect.top * scale_y, + )); + canvas.scale((scale_x, scale_y)); + dom.render(canvas); + + canvas.restore(); + canvas.restore(); + + true +} + /** * This SHOULD be the only public function in this module. */ diff --git a/render-wasm/src/render/images.rs b/render-wasm/src/render/images.rs index b567829ab7..9473573cfe 100644 --- a/render-wasm/src/render/images.rs +++ b/render-wasm/src/render/images.rs @@ -5,7 +5,7 @@ use crate::uuid::Uuid; use crate::error::Result; use crate::get_gpu_state; use skia_safe::gpu::{surfaces, Budgeted, DirectContext}; -use skia_safe::{self as skia, Codec, ISize}; +use skia_safe::{self as skia, Codec, ISize, Size}; use std::collections::HashMap; pub type Image = skia::Image; @@ -57,6 +57,13 @@ pub fn get_source_rect(size: ISize, container: &MathRect, image_fill: &ImageFill enum StoredImage { Raw(Vec), Gpu(Image), + Svg { + dom: skia::svg::Dom, + size: Size, + // Lazy raster for consumers that need a texture (stroke fills, + // exports). The shape fill path draws the DOM directly instead. + raster: Option, + }, } pub struct ImageStore { @@ -143,6 +150,61 @@ fn decode_image(context: &mut Box, raw_data: &[u8]) -> Option Option<(skia::svg::Dom, Size)> { + // An empty font manager: elements inside SVG image fills won't + // resolve typefaces. Wire the render state's font provider here if that + // ever becomes a need. + let font_mgr = skia::FontMgr::new(); + let mut dom = skia::svg::Dom::from_bytes(raw_data, font_mgr).ok()?; + + let mut size = dom.root().intrinsic_size(); + if size.is_empty() { + // SVGs without width/height attributes have no intrinsic size; + // fall back to the viewBox dimensions. + size = dom + .root() + .view_box() + .map(|vb| Size::new(vb.width(), vb.height())) + .unwrap_or_else(|| Size::new(DEFAULT_SVG_SIZE, DEFAULT_SVG_SIZE)); + } + + // Ceil so the size matches the integer dimensions used when rasterizing. + let size = Size::new(size.width.ceil(), size.height.ceil()); + if size.is_empty() { + return None; + } + dom.set_container_size(size); + + Some((dom, size)) +} + +fn rasterize_svg( + context: &mut Box, + dom: &skia::svg::Dom, + size: Size, +) -> Option { + let dimensions = ISize::new(size.width as i32, size.height as i32); + let image_info = skia::ImageInfo::new_n32_premul(dimensions, None); + let mut surface = surfaces::render_target( + context, + Budgeted::Yes, + &image_info, + None, + None, + None, + true, + false, + )?; + + dom.render(surface.canvas()); + Some(surface.image_snapshot()) +} + impl ImageStore { pub fn new() -> Self { let gpu_state = get_gpu_state(); @@ -169,7 +231,18 @@ impl ImageStore { if let Some(gpu_image) = decode_image(&mut self.context, &raw_data) { self.images.insert(key, StoredImage::Gpu(gpu_image)); + } else if let Some((dom, size)) = parse_svg(&raw_data) { + self.images.insert( + key, + StoredImage::Svg { + dom, + size, + raster: None, + }, + ); } else { + // The lazy re-decode in `get_internal` only retries raster codecs, + // so SVGs that fail to parse here stay raw. self.images.insert(key, StoredImage::Raw(raw_data)); } Ok(()) @@ -218,6 +291,19 @@ impl ImageStore { gpu_image.make_non_texture_image(self.context.as_mut()) } + /// Vector access for SVG images: the fill render path draws the DOM + /// directly so it stays crisp at any zoom level. + pub fn get_svg(&self, id: &Uuid) -> Option<(&skia::svg::Dom, Size)> { + let entry = self + .images + .get(&(*id, false)) + .or_else(|| self.images.get(&(*id, true)))?; + match entry { + StoredImage::Svg { dom, size, .. } => Some((dom, *size)), + _ => None, + } + } + fn get_internal(&mut self, id: &Uuid, is_thumbnail: bool) -> Option<&Image> { let key = (*id, is_thumbnail); // Use entry API to mutate the HashMap in-place if needed @@ -234,6 +320,12 @@ impl ImageStore { None } } + StoredImage::Svg { dom, size, raster } => { + if raster.is_none() { + *raster = rasterize_svg(&mut self.context, dom, *size); + } + raster.as_ref() + } } } else { None From 5dadda0f2b8a6dfb7499d8d8bd00a6ac2e60099a Mon Sep 17 00:00:00 2001 From: Sangeeth Thilakarathna <46221775+sanmaxdev@users.noreply.github.com> Date: Mon, 20 Jul 2026 15:25:36 +0530 Subject: [PATCH 095/229] :books: Improve plugin deployment documentation (#10544) Co-authored-by: sanmaxdev --- docs/plugins/deployment.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/plugins/deployment.md b/docs/plugins/deployment.md index d18616623f..72af7348ff 100644 --- a/docs/plugins/deployment.md +++ b/docs/plugins/deployment.md @@ -8,15 +8,15 @@ desc: Deploy your free Penpot plugins! Learn about Netlify, Cloudflare, Surge & When it comes to deploying your plugin there are several platforms to choose from. Each platform has its unique features and benefits, so the choice depends on you. -In this guide you will found some options for static sites that have free plans. +In this guide you will find some options for static sites that have free plans. ## 3.1. Building your project The building may vary between frameworks but if you had previously configured your scripts in package.json, npm run build should work. -The resulting build should be located somewhere in the dist/ folder, maybe somewhere else if you have configured so. +The resulting build should be located somewhere in the dist/ folder, or somewhere else if you configured it that way. -Be wary that some framework's builders can add additional folders like apps/project-name/, project-name/ or browser/. +Be wary that some framework builders can add additional folders like apps/project-name/, project-name/ or browser/. Examples: @@ -27,7 +27,7 @@ Examples: ### Create an account -You need a Netlify account if you don't already have one. You can sign up with Github, GItlab, BItbucket or via email and password. +You need a Netlify account if you don't already have one. You can sign up with GitHub, GitLab, Bitbucket or via email and password. ### CORS issues @@ -82,7 +82,7 @@ npm run build 2. Go to Netlify Drop. -3. Drag and drop the build folder into Netlify Sites. Dropping the whole dist may not work, you should drop the folder where the main files are located. +3. Drag and drop the build folder into Netlify Sites. Dropping the whole dist may not work; you should drop the folder where the main files are located. 4. Done! @@ -122,11 +122,11 @@ Cloudflare allows you to import an existing project from GitHub or GitLab. ![Cloudflare git installation](/img/plugins/install_cloudflare.png) -4. Configure your build settings. +3. Configure your build settings. ![Cloudflare git configuration](/img/plugins/cf_build_settings.png) -5. Save and deploy. +4. Save and deploy. ### Direct upload @@ -220,6 +220,6 @@ Success! - Published to example-plugin-penpot.surge.sh ## 3.5. Submitting to Penpot -To make your finished plugin available in our catalog, submit in on the [plugin submission page](https://penpot.app/penpothub/plugins/create-plugin). Once it becomes available any Penpot user will be able to install and use it. +To make your finished plugin available in our catalog, submit it on the [plugin submission page](https://penpot.app/penpothub/plugins/create-plugin). Once it becomes available, any Penpot user will be able to install and use it. From 5f35fdf21732a58f265c2c7c026120c57b690799 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 20 Jul 2026 12:14:44 +0200 Subject: [PATCH 096/229] :recycle: Replace uuid-ossp defaults with gen_random_uuid() and add missing :id on insert (#10591) * :paperclip: Add postgresql client tool wrapper for devenv * :recycle: Replace uuid-ossp defaults with gen_random_uuid() and add missing :id on insert - Switch all DEFAULT uuid_generate_v4() to gen_random_uuid() (built-in PG 13+, no extension required) - Add explicit :id (uuid/next) to 4 db/insert! calls that were relying on the DB default (team-profile-rel, project-profile-rel, team-project-profile-rel) - Drop uuid-ossp extension (no longer needed) - Add missing uuid require to projects.clj and srepl/binfile.clj AI-assisted-by: deepseek-v4-flash --------- Signed-off-by: Andrey Antukh --- backend/src/app/migrations.clj | 5 ++- ...prove-uuid-defaults-and-drop-extension.sql | 31 +++++++++++++++++++ backend/src/app/rpc/commands/projects.clj | 4 ++- backend/src/app/rpc/commands/teams.clj | 5 +-- backend/src/app/srepl/binfile.clj | 4 ++- 5 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 backend/src/app/migrations/sql/0152-improve-uuid-defaults-and-drop-extension.sql diff --git a/backend/src/app/migrations.clj b/backend/src/app/migrations.clj index c6fed68e39..150e69ced2 100644 --- a/backend/src/app/migrations.clj +++ b/backend/src/app/migrations.clj @@ -493,7 +493,10 @@ :fn (mg/resource "app/migrations/sql/0150-mod-storage-object-table.sql")} {:name "0151-mod-file-tagged-object-thumbnail-table" - :fn (mg/resource "app/migrations/sql/0151-mod-file-tagged-object-thumbnail-table.sql")}]) + :fn (mg/resource "app/migrations/sql/0151-mod-file-tagged-object-thumbnail-table.sql")} + + {:name "0152-improve-uuid-defaults-and-drop-extension" + :fn (mg/resource "app/migrations/sql/0152-improve-uuid-defaults-and-drop-extension.sql")}]) (defn apply-migrations! [pool name migrations] diff --git a/backend/src/app/migrations/sql/0152-improve-uuid-defaults-and-drop-extension.sql b/backend/src/app/migrations/sql/0152-improve-uuid-defaults-and-drop-extension.sql new file mode 100644 index 0000000000..c389e9430d --- /dev/null +++ b/backend/src/app/migrations/sql/0152-improve-uuid-defaults-and-drop-extension.sql @@ -0,0 +1,31 @@ +-- Migration: Replace uuid_generate_v4() defaults with gen_random_uuid() +-- and remove uuid-ossp extension. +-- +-- gen_random_uuid() is built into PostgreSQL >= 13 and requires no extension. +-- The application already generates IDs explicitly via uuid/next in all +-- code paths; this migration adds gen_random_uuid() as a safety-net default +-- instead of the extension-dependent uuid_generate_v4(). + +ALTER TABLE access_token ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE audit_log ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE comment ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE comment_thread ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE file ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE file_change ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE file_media_object ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE profile ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE project ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE project_profile_rel ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE scheduled_task_history ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE share_link ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE storage_object ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE task ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE team ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE team_access_request ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE team_font_variant ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE team_invitation ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE team_profile_rel ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE team_project_profile_rel ALTER COLUMN id SET DEFAULT gen_random_uuid(); +ALTER TABLE usage_quote ALTER COLUMN id SET DEFAULT gen_random_uuid(); + +DROP EXTENSION IF EXISTS "uuid-ossp"; diff --git a/backend/src/app/rpc/commands/projects.clj b/backend/src/app/rpc/commands/projects.clj index 0cb1b46e57..12da9bb7c5 100644 --- a/backend/src/app/rpc/commands/projects.clj +++ b/backend/src/app/rpc/commands/projects.clj @@ -10,6 +10,7 @@ [app.common.exceptions :as ex] [app.common.schema :as sm] [app.common.time :as ct] + [app.common.uuid :as uuid] [app.db :as db] [app.db.sql :as-alias sql] [app.features.logical-deletion :as ldel] @@ -184,7 +185,8 @@ timestamp (::rpc/request-at params)] (teams/create-project-role conn profile-id (:id project) :owner) (db/insert! conn :team-project-profile-rel - {:project-id (:id project) + {:id (uuid/next) + :project-id (:id project) :profile-id profile-id :created-at timestamp :modified-at timestamp diff --git a/backend/src/app/rpc/commands/teams.clj b/backend/src/app/rpc/commands/teams.clj index 5efc564daa..b091516586 100644 --- a/backend/src/app/rpc/commands/teams.clj +++ b/backend/src/app/rpc/commands/teams.clj @@ -628,7 +628,7 @@ (some? (:organization-id membership)) ;; the team do belong to an organization (not (:is-member membership))) ;; the user is not a member of the org yet (initialize-user-in-nitrate-org cfg profile-id (:organization-id membership))))) - (db/insert! conn :team-profile-rel params options))) + (db/insert! conn :team-profile-rel (assoc params :id (uuid/next)) options))) (defn create-team "This is a complete team creation process, it creates the team @@ -699,7 +699,8 @@ (defn create-project-role [conn profile-id project-id role] (let [params {:project-id project-id - :profile-id profile-id}] + :profile-id profile-id + :id (uuid/next)}] (->> (perms/assign-role-flags params role) (db/insert! conn :project-profile-rel)))) diff --git a/backend/src/app/srepl/binfile.clj b/backend/src/app/srepl/binfile.clj index c1792321f7..0fbc09c460 100644 --- a/backend/src/app/srepl/binfile.clj +++ b/backend/src/app/srepl/binfile.clj @@ -7,6 +7,7 @@ (ns app.srepl.binfile (:require [app.binfile.v2 :as binfile.v2] + [app.common.uuid :as uuid] [app.db :as db] [app.main :as main] [app.srepl.helpers :as h] @@ -30,7 +31,8 @@ (when owner (db/insert! cfg :team-profile-rel - {:team-id (:id team) + {:id (uuid/next) + :team-id (:id team) :profile-id (:id owner) :is-admin true :is-owner true From 4c21923c4a228ed620ea214c03c607d72917e558 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Mon, 20 Jul 2026 12:16:52 +0200 Subject: [PATCH 097/229] :bug: Fix accent menu (MacOS) inserting an extra character (#10637) --- .../ui/workspace/shapes/text/v3_editor.cljs | 76 ++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs b/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs index 55310b0b87..84e786d8cf 100644 --- a/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/text/v3_editor.cljs @@ -61,6 +61,20 @@ (.removeAllRanges sel) (.addRange sel range))))) +(defn- keep-input-alive + "Keeps the capture surface able to receive further input WITHOUT clearing it. + + Unlike `reset-input-node`, this does not empty the surface. The macOS + press-and-hold accent menu replaces the previously typed base character (its + 'marked text' when an accent is chosen, and that replacement only works + while the base character is still present in the surface DOM. Clearing it + drops the marked text, so the accent gets appended instead of replacing it, + producing e.g. 'oö' instead of 'ö'." + [^js node] + (when (and (some? node) + (not= (.-activeElement js/document) node)) + (.focus node))) + (defn- font-family-from-font-id [font-id] (if (str/includes? font-id "gfont-noto-sans") (let [lang (str/replace font-id #"gfont\-noto\-sans\-" "")] @@ -94,6 +108,11 @@ contenteditable-ref (mf/use-ref nil) + ;; Number of characters the browser is about to replace via marked text + ;; (macOS press-and-hold accent menu). Set on `beforeinput`, consumed on + ;; `input`. See on-before-input / on-input. + pending-replace-ref (mf/use-ref 0) + fallback-fonts (wasm.api/fonts-from-text-content (:content shape) false) fallback-families (map (fn [font] (font-family-from-font-id (:font-id font))) fallback-fonts) @@ -279,6 +298,32 @@ ;; Let contenteditable handle text input via on-input :else nil))))) + ;; Native `beforeinput` listener (see the use-effect that registers it). + ;; We use the native event, not React's synthetic `onBeforeInput`, because + ;; only the native event reliably exposes `getTargetRanges()`. + ;; + ;; The macOS press-and-hold accent menu does NOT use composition events: + ;; picking an accent arrives as a plain `insertText` whose target range + ;; spans the previously typed base character (marked text), so the browser + ;; replaces it instead of appending. We remember how many characters that + ;; range covers so `on-input` can delete them from the WASM editor before + ;; inserting the accented one. We ignore it while the WASM editor has an + ;; active selection, since that selection is replaced by `insert-text` + ;; itself and deleting extra characters would corrupt the content. + on-before-input + (mf/use-fn + (fn [^js native] + (mf/set-ref-val! pending-replace-ref 0) + (when (and (= (.-inputType native) "insertText") + (not (.-isComposing native)) + (not (text-editor/text-editor-has-selection?))) + (let [ranges (.getTargetRanges native)] + (when (pos? (.-length ranges)) + (let [range (aget ranges 0) + n (- (.-endOffset range) (.-startOffset range))] + (when (pos? n) + (mf/set-ref-val! pending-replace-ref n)))))))) + on-input (mf/use-fn (fn [^js event] @@ -289,10 +334,19 @@ (when (and (not (composing-event? event)) (not= input-type "insertCompositionText")) (when (and data (seq data)) + ;; Marked-text replacement (macOS accent menu): remove the base + ;; character(s) the browser is replacing before inserting. + (let [pending (mf/ref-val pending-replace-ref)] + (dotimes [_ pending] + (text-editor/text-editor-delete-backward))) (text-editor/text-editor-insert-text data) (sync-wasm-text-editor-content!) (wasm.api/request-render "text-input")) - (reset-input-node (mf/ref-val contenteditable-ref)))))) + (mf/set-ref-val! pending-replace-ref 0) + ;; IMPORTANT: do NOT clear the surface here (see keep-input-alive): + ;; the browser must retain the just-typed character so the macOS + ;; accent menu can replace it on the next input. + (keep-input-alive (mf/ref-val contenteditable-ref)))))) on-pointer-down (mf/use-fn @@ -345,6 +399,19 @@ "--editor-container-height" (dm/str height "px") "--fallback-families" (if (seq fallback-families) (dm/str (str/join ", " fallback-families)) "sourcesanspro")}] + ;; Register the native `beforeinput` listener. React's synthetic + ;; `onBeforeInput` does not expose `getTargetRanges()`, even with + ;; nativeEvent (it's fully synthetic, composed of other two events). + ;; We need `getTargetRranges` to detect macOS accent-menu replacements. + ;; See https://github.com/react/react/issues/11211 + (mf/use-effect + (mf/deps on-before-input) + (fn [] + (when-let [node (mf/ref-val contenteditable-ref)] + (.addEventListener node "beforeinput" on-before-input) + (fn [] + (.removeEventListener node "beforeinput" on-before-input))))) + ;; Focus contenteditable on mount (mf/use-effect (mf/deps contenteditable-ref) @@ -394,6 +461,13 @@ {:ref contenteditable-ref :contentEditable true :suppressContentEditableWarning true + ;; The surface retains typed text between keystrokes (see + ;; keep-input-alive), so disable text assistance that would otherwise + ;; rewrite that retained text and desync the WASM editor. + ;; NOTE: this was already not working in v1/v2 + :spellCheck false + :autoCorrect "off" + :autoCapitalize "off" :on-composition-start on-composition-start :on-composition-update on-composition-update :on-composition-end on-composition-end From 51c0129485b7c4cce9662f746768966a54ec9b07 Mon Sep 17 00:00:00 2001 From: "Dr. Dominik Jain" Date: Mon, 20 Jul 2026 13:08:51 +0200 Subject: [PATCH 098/229] :sparkles: Simplify MCP client setup, adding client-setup command (#10604) Add a `client-setup` command to the published `@penpot/mcp` package. When invoked as `penpot-mcp client-setup`, the bin delegates to the `add-mcp` CLI against the local MCP server URL (from `PENPOT_MCP_SERVER_PORT`, default 4401), run via npx. Update docs on MCP client configuration. Recommend calling `add-mcp` directly for now, since the `client-setup` command only becomes available once a new `@penpot/mcp` release is published to npm. AI-assisted-by: Claude Co-authored-by: Michael Panchenko --- docs/mcp/index.md | 105 ++++++++-------------------------------- mcp/README.md | 68 +++++++++++--------------- mcp/bin/client-setup.js | 70 +++++++++++++++++++++++++++ mcp/bin/mcp-local.js | 43 +++++++++++----- mcp/package.json | 1 + 5 files changed, 151 insertions(+), 136 deletions(-) create mode 100644 mcp/bin/client-setup.js diff --git a/docs/mcp/index.md b/docs/mcp/index.md index 4d2fa76fc0..8509bb7574 100644 --- a/docs/mcp/index.md +++ b/docs/mcp/index.md @@ -129,17 +129,18 @@ If you just want to try Penpot AI workflows quickly through the MCP, follow this ![MCP Server in Penpot Integrations, copy server url](/img/mcp/mcp-server-url.webp) 4. #### Add the server to your MCP client - In your MCP-aware IDE/agent (Cursor, Claude Code, etc.), add a new server pointing to that URL. - **Example (generic JSON config):** - ```json - { - "mcpServers": { - "penpot": { - "url": "https:///mcp/stream?userToken=YOUR_MCP_KEY" - } - } - } + We recommend using the [add-mcp](https://github.com/neon-solutions/add-mcp) project for connecting your MCP client to the Penpot MCP server. + With `npx` available, call + + ```shell + npx -y add-mcp -g -n penpot ``` + + and follow the interactive setup. Alternatively, follow your client's instructions for connecting + to a remote MCP server. For Claude Desktop, we recommend adding the Penpot MCP Server as a + custom [connector](http://claude.ai/customize/connectors). + See the section **Connect your MCP client** for more details on how to connect. + 5. #### Open a Penpot file and connect MCP In Penpot, open a design file and use **File → MCP Server → Connect** to connect the plugin to your current file. @@ -216,84 +217,21 @@ You can use Penpot MCP server in two main ways: ## Connect your MCP client -Use the same client setup flow for both modes. What changes is the server URL and authentication method. - -### Connection values by mode - * **Remote MCP** - * URL: `https:///mcp/stream?userToken=YOUR_MCP_KEY` - * Auth: MCP key in `userToken` + * URL (copy from your Penpot account overview): `https:///mcp/stream?userToken=YOUR_MCP_KEY` + * Configure your MCP client with `npx -y add-mcp -g -n penpot ` or by following your client's instructions for connecting to a remote MCP server. + For Claude Desktop, the server can be added as a custom [connector](http://claude.ai/customize/connectors). * **Local MCP** - * URL: `http://localhost:4401/mcp` - * Auth: none (uses your active Penpot browser session) + * Configure your MCP client with `npx -y add-mcp -g -n penpot http://localhost:4401/mcp` (adjust the port if you changed `PENPOT_MCP_SERVER_PORT`) or by following your client's instructions for connecting to an HTTP MCP server. -### Cursor - -1. Open Cursor MCP/tool configuration. -2. Add a Penpot MCP server entry: +Note: For clients that do not support HTTP servers directly (like Claude Desktop), the local MCP server can be connected via [mcp-remote](https://github.com/geelen/mcp-remote) as follows: ```json { "mcpServers": { "penpot": { - "url": "REMOTE_OR_LOCAL_URL", - "type": "http" - } - } -} -``` - -Replace `REMOTE_OR_LOCAL_URL` with the URL for your mode. - -### Claude Code - -1. Open MCP configuration in Claude Code. -2. Add a Penpot server with `http` transport and the URL for your mode. -3. Restart Claude Code or reload tools. - -```json -{ - "mcpServers": { - "penpot": { - "transport": "http", - "url": "REMOTE_OR_LOCAL_URL" - } - } -} -``` - - -### VS Code / Copilot - -1. Open external MCP server configuration in your extension/settings. -2. Add Penpot with the URL for your mode. -3. Save and reload tools. - -```json -{ - "mcp.servers": { - "penpot": { - "transport": "http", - "url": "REMOTE_OR_LOCAL_URL" - } - } -} -``` - -### Codex / OpenCode etc - -1. Use your client's "Add MCP server" flow. -2. Set the URL for your mode. -3. Reload tools and verify Penpot tools are available. - -```json -{ - "servers": { - "penpot": { - "url": "REMOTE_OR_LOCAL_URL", - "transport": { - "type": "http" - } + "command": "npx", + "args": ["-y", "mcp-remote", "", "--allow-http"] } } } @@ -326,9 +264,8 @@ Remote MCP is the easiest way to start using AI agents with Penpot. It's hosted ### Connect -For client-specific setup, use the shared section **Connect your MCP client**. - For remote mode, use the URL shown in **Your account → Integrations → MCP Server**, which includes your `userToken`. +See the section **Connect your MCP client** for details on how to connect. ### Setup videos @@ -464,9 +401,7 @@ For advanced or repository-based workflows, see the [MCP README](https://github. ### Connect -For client-specific setup, use the shared section **Connect your MCP client**. - -For local mode, use `http://localhost:4401/mcp` with HTTP transport (no MCP key; authentication uses your active Penpot browser session). +See the section **Connect your MCP client** for details on how to connect. ### Use diff --git a/mcp/README.md b/mcp/README.md index bc6b2205cb..ac99679f28 100644 --- a/mcp/README.md +++ b/mcp/README.md @@ -59,14 +59,10 @@ The project requires [Node.js](https://nodejs.org/) (tested with v22.x). The easiest way to launch the servers is to use `npx` to run the appropriate version that matches your Penpot version. -* If you are using the latest Penpot release, e.g. as served on [design.penpot.app](https://design.penpot.app), run: - ```shell - npx -y @penpot/mcp@latest - ``` -* If you are participating in the MCP beta-test, which uses [test-mcp.penpot.dev](https://test-mcp.penpot.dev), run: - ```shell - npx -y @penpot/mcp@beta - ``` +If you are using the latest Penpot release, e.g. as served on [design.penpot.app](https://design.penpot.app), run: +```shell +npx -y @penpot/mcp@latest +``` Once the servers are running, continue with step 2. @@ -78,24 +74,13 @@ On Windows, use the Git Bash terminal to ensure compatibility with the provided ##### Clone the Appropriate Branch of the Repository -> [!IMPORTANT] -> The branches are subject to change in the future. -> Be sure to check the instructions for the latest information on which branch to use. +Clone the Penpot repository, using the proper branch/tag depending on the +version of Penpot you want to use the MCP server with. +For instance, to target the latest development version, use the `develop` branch: -Clone the Penpot repository, using the proper branch depending on the -version of Penpot you want to use the MCP server with. - - * For the current Penpot release 2.14, use the `mcp-prod-2.14.1` branch: - - ```shell - git clone https://github.com/penpot/penpot.git --branch mcp-prod-2.14.1 --depth 1 - ``` - - * For the MCP beta-test, use the `staging` branch: - - ```shell - git clone https://github.com/penpot/penpot.git --branch staging --depth 1 - ``` +```shell +git clone https://github.com/penpot/penpot.git --branch develop --depth 1 +``` Then change into the `mcp` directory: @@ -180,16 +165,27 @@ By default, the server runs on port 4401 and provides: - **Modern Streamable HTTP endpoint**: `http://localhost:4401/mcp` - **Legacy SSE endpoint**: `http://localhost:4401/sse` -These endpoints can be used directly by MCP clients that support them. +You can change the port by setting the `PENPOT_MCP_SERVER_PORT` environment variable +before starting the server. These endpoints can be used directly by MCP clients that support them. Simply configure the client to connect the MCP server by providing the respective URL. -When using a client that only supports stdio transport, -a proxy like `mcp-remote` is required. +#### Configuring your client + +You can configure your client with the [add-mcp](https://github.com/neon-solutions/add-mcp) helper. +Simply call + + npx -y add-mcp -g -n penpot http://localhost:4401/mcp + +and follow the interactive dialogue to configure the clients of your choice. +The config entry name is `penpot` (override it with `-n `) and the URL points to the local http +endpoint (adjust the port if you changed `PENPOT_MCP_SERVER_PORT`). + +When using a client that only supports stdio transport like **Claude Desktop**, +a proxy like [mcp-remote](https://github.com/geelen/mcp-remote) is required. +More information on connecting your client follows below. #### Using a Proxy for stdio Transport -NOTE: only relevant if you are executing this outside of devenv - The `mcp-remote` package can proxy stdio transport to HTTP/SSE, allowing clients that support only stdio to connect to the MCP server indirectly. Use it to provide the launch command for your MCP client as follows: @@ -232,12 +228,6 @@ After updating the configuration file, restart Claude Desktop completely for the After the restart, you should see the MCP server listed when clicking on the "Search and tools" icon at the bottom of the prompt input area. -#### Example: Claude Code - -To add the Penpot MCP server to a Claude Code project, issue the command - - claude mcp add penpot -t http http://localhost:4401/mcp - ## Repository Structure This repository is a monorepo containing four main components: @@ -296,9 +286,9 @@ The Penpot MCP server can be configured using environment variables. ## Beyond Local Execution The above instructions describe how to run the MCP server and plugin server locally. -We are working on enabling remote deployments of the MCP server, particularly -in [multi-user mode](docs/multi-user-mode.md), where multiple Penpot users will -be able to connect to the same MCP server instance. + +The Penpot MCP server can also support multiple remote users simultaneously +in [multi-user mode](docs/multi-user-mode.md). To run the server remotely (even for a single user), you may set the following environment variables to configure the two servers diff --git a/mcp/bin/client-setup.js b/mcp/bin/client-setup.js new file mode 100644 index 0000000000..d078277d2d --- /dev/null +++ b/mcp/bin/client-setup.js @@ -0,0 +1,70 @@ +#!/usr/bin/env node + +// Client-setup entry point of the published @penpot/mcp package. +// Configures an MCP client to talk to the local Penpot MCP server by delegating +// to the add-mcp CLI. This launcher is deliberately independent of the server +// build/bootstrap: it only needs npx to fetch add-mcp on demand, so it does not +// require a source checkout, a prior install, or a running server. + +const { spawnSync } = require("child_process"); + +/** + * Runs the add-mcp CLI against the local Penpot MCP server URL. + * + * The server port is read from PENPOT_MCP_SERVER_PORT (default 4401), matching + * the server's own default. add-mcp is fetched via npx using @latest on + * purpose: MCP client config formats change frequently, so we always want the + * newest add-mcp rather than a pinned version. + * + * forwardedArgs are passed straight through to add-mcp so callers can pick + * agents, set headers, override the name or URL, etc. Two defaults are applied + * conditionally so caller args always win: "penpot" as the server name (dropped + * when the caller passes -n/--name) and the local server URL as the positional + * target (dropped when the caller passes their own URL). Unlike a repeated + * option, the URL is a positional, so add-mcp cannot "last-wins" two of them -- + * we must omit ours rather than append it. A caller URL is detected as an arg + * that starts with a scheme (e.g. http://, https://); matching only at the start + * avoids false positives from URLs embedded in --header/--env values. + * + * @param {string[]} forwardedArgs - additional arguments passed through to add-mcp + */ +function runClientSetup(forwardedArgs) { + const port = process.env.PENPOT_MCP_SERVER_PORT || "4401"; + const defaultUrl = `http://localhost:${port}/mcp`; + + const hasName = forwardedArgs.some( + (arg) => arg === "-n" || arg === "--name" || arg.startsWith("--name="), + ); + const nameArgs = hasName ? [] : ["-n", "penpot"]; + + const isUrl = (arg) => /^[a-zA-Z][\w+.-]*:\/\//.test(arg); + const hasUrl = forwardedArgs.some(isUrl); + const urlArgs = hasUrl ? [] : [defaultUrl]; + + const args = ["-y", "add-mcp@latest", "-g", ...nameArgs, ...forwardedArgs, ...urlArgs]; + + const result = spawnSync("npx", args, { + stdio: "inherit", + shell: process.platform === "win32", + }); + + if (result.error) { + throw result.error; + } + if (typeof result.status === "number" && result.status !== 0) { + const error = new Error(`add-mcp exited with code ${result.status}`); + error.status = result.status; + throw error; + } +} + +module.exports = { runClientSetup }; + +// run directly, e.g. via `pnpm run client-setup` or `node bin/client-setup.js` +if (require.main === module) { + try { + runClientSetup(process.argv.slice(2)); + } catch (error) { + process.exit(error.status ?? 1); + } +} diff --git a/mcp/bin/mcp-local.js b/mcp/bin/mcp-local.js index feecbc9e39..b3baf3326b 100644 --- a/mcp/bin/mcp-local.js +++ b/mcp/bin/mcp-local.js @@ -54,18 +54,37 @@ function prepareRuntimeRoot() { return runtimeRoot; } -const root = prepareRuntimeRoot(); - -// pnpm-lock.yaml is hard-excluded by npm pack; it is shipped as pnpm-lock.dist.yaml -// and restored here before bootstrap runs. -const distLock = path.join(root, "pnpm-lock.dist.yaml"); -const lock = path.join(root, "pnpm-lock.yaml"); -if (fs.existsSync(distLock)) { - fs.copyFileSync(distLock, lock); +// check arguments +const cliArgs = process.argv.slice(2); +if (cliArgs[0] === "client-setup") { + // when invoked as `penpot-mcp client-setup [...]`, configure an MCP client + // instead of bootstrapping/starting the server. This must run before the + // runtime-directory copy and bootstrap, neither of which client setup needs. + try { + require("./client-setup.js").runClientSetup(cliArgs.slice(1)); + process.exit(0); + } catch (error) { + process.exit(error.status ?? 1); + } } +else { + // regular case: run bootstrap, building and starting the servers -try { - execSync(`npx -y pnpm@${pnpmVersion()} run bootstrap`, { cwd: root, stdio: "inherit" }); -} catch (error) { - process.exit(error.status ?? 1); + // get runtime root + const root = prepareRuntimeRoot(); + + // pnpm-lock.yaml is hard-excluded by npm pack; it is shipped as pnpm-lock.dist.yaml + // and restored here before bootstrap runs. + const distLock = path.join(root, "pnpm-lock.dist.yaml"); + const lock = path.join(root, "pnpm-lock.yaml"); + if (fs.existsSync(distLock)) { + fs.copyFileSync(distLock, lock); + } + + // run the bootstrap command + try { + execSync(`npx -y pnpm@${pnpmVersion()} run bootstrap`, { cwd: root, stdio: "inherit" }); + } catch (error) { + process.exit(error.status ?? 1); + } } diff --git a/mcp/package.json b/mcp/package.json index 5f6dea413e..6607dd11b2 100644 --- a/mcp/package.json +++ b/mcp/package.json @@ -14,6 +14,7 @@ "start:multi-user": "pnpm -r --parallel run start:multi-user", "bootstrap": "pnpm -r install && pnpm run build && pnpm run start", "bootstrap:multi-user": "pnpm -r install && pnpm run build && pnpm run start:multi-user", + "client-setup": "node bin/client-setup.js", "fmt": "prettier --write packages/", "fmt:check": "prettier --check packages/", "test": "pnpm -r run test" From a0b5c23f99e31b4e48198250b4d6e8908cd7c6f5 Mon Sep 17 00:00:00 2001 From: Luis de Dios Date: Mon, 20 Jul 2026 13:10:27 +0200 Subject: [PATCH 099/229] :bug: Fix close comments panel button does not work (#10651) --- frontend/src/app/main/ui/workspace/comments.cljs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/workspace/comments.cljs b/frontend/src/app/main/ui/workspace/comments.cljs index d0cbed35fc..64882acde7 100644 --- a/frontend/src/app/main/ui/workspace/comments.cljs +++ b/frontend/src/app/main/ui/workspace/comments.cljs @@ -11,6 +11,7 @@ [app.main.data.event :as ev] [app.main.data.workspace :as dw] [app.main.data.workspace.comments :as dwcm] + [app.main.data.workspace.drawing.common :as dwdc] [app.main.refs :as refs] [app.main.store :as st] [app.main.ui.comments :as cmt] @@ -99,7 +100,8 @@ (fn [] (if from-viewer (st/emit! (dcmt/update-options {:show-sidebar? false})) - (st/emit! (dw/clear-edition-mode) + (st/emit! (dwdc/clear-drawing) + (dw/clear-edition-mode) (dw/deselect-all true))))) tgroups (->> threads From c6de3ce47b4cf27bea09d1f132c292311e89ecde Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 20 Jul 2026 14:05:04 +0200 Subject: [PATCH 100/229] :paperclip: Do not drop uuid-ossp extension on migrations Requires specific permissions --- .../sql/0152-improve-uuid-defaults-and-drop-extension.sql | 2 -- 1 file changed, 2 deletions(-) diff --git a/backend/src/app/migrations/sql/0152-improve-uuid-defaults-and-drop-extension.sql b/backend/src/app/migrations/sql/0152-improve-uuid-defaults-and-drop-extension.sql index c389e9430d..ae0fe29372 100644 --- a/backend/src/app/migrations/sql/0152-improve-uuid-defaults-and-drop-extension.sql +++ b/backend/src/app/migrations/sql/0152-improve-uuid-defaults-and-drop-extension.sql @@ -27,5 +27,3 @@ ALTER TABLE team_invitation ALTER COLUMN id SET DEFAULT gen_random_uuid ALTER TABLE team_profile_rel ALTER COLUMN id SET DEFAULT gen_random_uuid(); ALTER TABLE team_project_profile_rel ALTER COLUMN id SET DEFAULT gen_random_uuid(); ALTER TABLE usage_quote ALTER COLUMN id SET DEFAULT gen_random_uuid(); - -DROP EXTENSION IF EXISTS "uuid-ossp"; From f06339fb87f14bac50836eea0a17df76bd8a6360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Valderrama?= Date: Mon, 20 Jul 2026 16:03:40 +0200 Subject: [PATCH 101/229] :sparkles: Update enterprise modals illustration (#10759) --- .../images/assets/nitrate-welcome.svg | 53 +------------------ 1 file changed, 1 insertion(+), 52 deletions(-) diff --git a/frontend/resources/images/assets/nitrate-welcome.svg b/frontend/resources/images/assets/nitrate-welcome.svg index 18ced86fa1..ef9296dbcc 100644 --- a/frontend/resources/images/assets/nitrate-welcome.svg +++ b/frontend/resources/images/assets/nitrate-welcome.svg @@ -1,52 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file From f2a9dd1a080a5817d103eef68a9ad32673c13b85 Mon Sep 17 00:00:00 2001 From: AK <144495202+AKnassa@users.noreply.github.com> Date: Mon, 20 Jul 2026 10:15:29 -0400 Subject: [PATCH 102/229] :bug: Reject invalid formulas on numeric inputs (#10659) Relative operators were accepted in operand position, so "10+*3" silently evaluated to 310 instead of being rejected. Make negation a first-class operand so legitimate negative operands ("10 + -3") keep working. Fixes #9581 Signed-off-by: Akshit Nassa Co-authored-by: Akshit Nassa Co-authored-by: Andrey Antukh --- frontend/src/app/util/simple_math.cljs | 55 +++++++------ .../frontend_tests/util_simple_math_test.cljs | 78 +++++++++++++++++++ 2 files changed, 108 insertions(+), 25 deletions(-) diff --git a/frontend/src/app/util/simple_math.cljs b/frontend/src/app/util/simple_math.cljs index 19c01a0f99..9831ec3d90 100644 --- a/frontend/src/app/util/simple_math.cljs +++ b/frontend/src/app/util/simple_math.cljs @@ -9,17 +9,19 @@ [app.common.data :as d] [app.common.exceptions :as ex] [cljs.spec.alpha :as s] - [clojure.string :refer [index-of]] [cuerdas.core :as str] [instaparse.core :as insta])) (def parser (insta/parser - "opt-expr = '' | expr - expr = term ( ('+'|'-') expr)* | - ('+'|'-'|'*'|'/') factor - term = factor ( ('*'|'/') term)* - factor = number | ('(' expr ')') + ;; Note that there is ambiguity, so we don't allow relative substraction, + ;; a leading '-' is always a negation. + "opt-expr = '' | rel-expr | expr + rel-expr = ('+'|'*'|'/') factor + expr = term ( ('+'|'-') term)* + term = factor ( ('*'|'/') factor)* + factor = number | neg | ('(' expr ')') + neg = <'-'> factor number = #'[0-9]*[.,]?[0-9]+%?' spaces = ' '*")) @@ -31,26 +33,29 @@ :opt-expr (if (empty? args) nil (interpret (first args) init-value)) + :rel-expr + (let [operator (first args) + second-value (interpret (second args) init-value)] + (case operator + "+" (+ init-value second-value) + "*" (* init-value second-value) + "/" (/ init-value second-value))) + + :neg + (- (interpret (first args) init-value)) + :expr - (if (index-of "+-*/" (first args)) - (let [operator (first args) - second-value (interpret (second args) init-value)] - (case operator - "+" (+ init-value second-value) - "-" (- 0 second-value) ;; Note that there is ambiguity, so we don't allow - "*" (* init-value second-value) ;; relative substraction, it's only a negative number - "/" (/ init-value second-value))) - (let [value (interpret (first args) init-value)] - (loop [value value - rest-expr (rest args)] - (if (empty? rest-expr) - value - (let [operator (first rest-expr) - second-value (interpret (second rest-expr) init-value) - rest-expr (-> rest-expr rest rest)] - (case operator - "+" (recur (+ value second-value) rest-expr) - "-" (recur (- value second-value) rest-expr))))))) + (let [value (interpret (first args) init-value)] + (loop [value value + rest-expr (rest args)] + (if (empty? rest-expr) + value + (let [operator (first rest-expr) + second-value (interpret (second rest-expr) init-value) + rest-expr (-> rest-expr rest rest)] + (case operator + "+" (recur (+ value second-value) rest-expr) + "-" (recur (- value second-value) rest-expr)))))) :term (let [value (interpret (first args) init-value)] diff --git a/frontend/test/frontend_tests/util_simple_math_test.cljs b/frontend/test/frontend_tests/util_simple_math_test.cljs index 6b0aaecca1..c06f509d45 100644 --- a/frontend/test/frontend_tests/util_simple_math_test.cljs +++ b/frontend/test/frontend_tests/util_simple_math_test.cljs @@ -107,3 +107,81 @@ (t/testing "Partial invalid expression should return nil" (let [result (sm/expr-eval "10 + abc" 100)] (t/is (= result nil))))) + +(t/deftest test-relative-operators-only-at-top-level + (t/testing "Two consecutive operators should return nil" + (t/is (= nil (sm/expr-eval "10+*3" 100))) + (t/is (= nil (sm/expr-eval "10 + *3" 100))) + (t/is (= nil (sm/expr-eval "10+/3" 100))) + (t/is (= nil (sm/expr-eval "10 + +5" 100))) + (t/is (= nil (sm/expr-eval "10 * *5" 100))) + (t/is (= nil (sm/expr-eval "10 * /5" 100)))) + + (t/testing "Relative operators inside parentheses should return nil" + (t/is (= nil (sm/expr-eval "(*3)" 100))) + (t/is (= nil (sm/expr-eval "10 + (*3)" 100))) + (t/is (= nil (sm/expr-eval "+(10 + *3)" 100)))) + + (t/testing "A dangling operator should return nil" + (t/is (= nil (sm/expr-eval "10 +" 100))) + (t/is (= nil (sm/expr-eval "+" 100))) + (t/is (= nil (sm/expr-eval "*" 100)))) + + (t/testing "Valid relative expressions keep working" + (t/is (= 130 (sm/expr-eval "+30" 100))) + (t/is (= 300 (sm/expr-eval "*3" 100))) + (t/is (= -30 (sm/expr-eval "-30" 100))) + (t/is (= 50 (sm/expr-eval "/2" 100))))) + +(t/deftest test-negative-operands + (t/testing "A negative number is a valid operand" + (t/is (= 7 (sm/expr-eval "10 + -3" 100))) + (t/is (= 7 (sm/expr-eval "10+-3" 100))) + (t/is (= 15 (sm/expr-eval "10 - -5" 100))) + (t/is (= -30 (sm/expr-eval "10 * -3" 100))) + (t/is (= 4 (sm/expr-eval "10 + -3 * 2" 100))) + (t/is (= -20 (sm/expr-eval "-(10 + 10)" 100))) + (t/is (= 5 (sm/expr-eval "10 - -5 * 1 - 10" 100)))) + + (t/testing "A negative number is a valid relative operand" + (t/is (= 70 (sm/expr-eval "+ -30" 100))) + (t/is (= -300 (sm/expr-eval "* -3" 100)))) + + (t/testing "A negative percentage is a valid operand" + (t/is (= 75 (sm/expr-eval "100 + -25%" 100))) + (t/is (= -25 (sm/expr-eval "-25%" 100))))) + +(t/deftest test-operator-associativity + (t/testing "Chained subtraction is evaluated left to right" + (t/is (= 55 (sm/expr-eval "100 - 35 - 10" 999))) + (t/is (= 65 (sm/expr-eval "100 - 35 + 10 - 10" 999))) + (t/is (= 15 (sm/expr-eval "1 + 2 + 3 + 4 + 5" 999)))) + + (t/testing "Chained division is evaluated left to right" + (t/is (= 5 (sm/expr-eval "100 / 10 / 2" 999))) + (t/is (= 20 (sm/expr-eval "100 / 10 * 2" 999))) + (t/is (= 5 (sm/expr-eval "(100 / 10) / 2" 999)))) + + (t/testing "Precedence and parentheses are preserved" + (t/is (= 7 (sm/expr-eval "1 + 2 * 3" 999))) + (t/is (= 9 (sm/expr-eval "(1 + 2) * 3" 999))))) + +(t/deftest test-edge-cases + (t/testing "Relative division by zero returns nil" + (t/is (= nil (sm/expr-eval "/0" 100))) + (t/is (= nil (sm/expr-eval "10 / 5 / 0" 100)))) + + (t/testing "Relative operators fall back to a zero init-value" + (t/is (= 10 (sm/expr-eval "+10" nil))) + (t/is (= 0 (sm/expr-eval "*10" nil)))) + + (t/testing "Percentages of the init-value" + (t/is (= 25 (sm/expr-eval "25%" 100))) + (t/is (= 125 (sm/expr-eval "+25%" 100)))) + + (t/testing "Non numeric input returns nil" + (t/is (= nil (sm/expr-eval " " 100))) + (t/is (= nil (sm/expr-eval "10 20" 100))) + (t/is (= nil (sm/expr-eval "(10" 100))) + (t/is (= nil (sm/expr-eval "10€" 100))) + (t/is (= nil (sm/expr-eval "🙂" 100))))) From 27392abd4925df07512c37eeb431eb0b0706fc7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marina=20L=C3=B3pez?= Date: Tue, 21 Jul 2026 09:19:20 +0200 Subject: [PATCH 103/229] :bug: Increase team name abbreviation limit in invitation emails --- backend/resources/app/email/invite-to-team/en.html | 2 +- backend/resources/app/email/invite-to-team/en.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/resources/app/email/invite-to-team/en.html b/backend/resources/app/email/invite-to-team/en.html index 96fe6de59d..9035d01a70 100644 --- a/backend/resources/app/email/invite-to-team/en.html +++ b/backend/resources/app/email/invite-to-team/en.html @@ -186,7 +186,7 @@

- {{invited-by|abbreviate:25}} has invited you to join the team “{{ team|abbreviate:25 }}”{% if + {{invited-by|abbreviate:25}} has invited you to join the team “{{ team|abbreviate:50 }}”{% if organization %} part of the organization “{{ organization.name|abbreviate:50 }}”{% endif %}.
diff --git a/backend/resources/app/email/invite-to-team/en.txt b/backend/resources/app/email/invite-to-team/en.txt index c688f7d61d..8cdced742a 100644 --- a/backend/resources/app/email/invite-to-team/en.txt +++ b/backend/resources/app/email/invite-to-team/en.txt @@ -1,6 +1,6 @@ Hello! -{{invited-by|abbreviate:25}} has invited you to join the team "{{ team|abbreviate:25 }}"{% if organization %}, part of the organization "{{ organization.name|abbreviate:50 }}"{% endif %}. +{{invited-by|abbreviate:25}} has invited you to join the team "{{ team|abbreviate:50 }}"{% if organization %}, part of the organization "{{ organization.name|abbreviate:50 }}"{% endif %}. {% if organization.sso-active %} "{{ organization.name|abbreviate:50 }}" has set up single sign-on (SSO) in Penpot. Access to its teams and files goes From 4ea56e0b8900bc4860d5ae0be2021b278212a373 Mon Sep 17 00:00:00 2001 From: "Dr. Dominik Jain" Date: Tue, 21 Jul 2026 10:05:31 +0200 Subject: [PATCH 104/229] :bug: Fix propagation of geometric changes to rotated component copies (#10574) * :bug: Fix geometry sync between mains and rotated component copies Rotating a copy instance as a whole marked every shape inside it as touched for geometry, so later geometric changes in the main (e.g. a resize) were no longer propagated to that copy, while non-geometric ones (e.g. fills) still were. And on paths where geometry did get written to a rotated copy (e.g. resetting overrides), the sync engine compensated only the roots' position delta, so the written values wiped the copy's rotation back to 0. Model the instance root's transformation as inherited, overridable content, asymmetric to position (which remains free per-instance placement): - An untouched copy follows the main's transformation verbatim, including rotation and flips (preserving the BUG #13267 semantics that rotating a main propagates to its copies). - Transforming a copy as a whole overrides only its ROOT: check-delta compares the root's rotation/flips absolutely, but the descendants relative to their root, so they merely follow and stay untouched. - When a copy root's geometry is overridden, update-attrs expresses the main's geometry in the copy's own frame: reposition-shape applies the roots' relative transformation (rotation/flips) around the dest root center in addition to the position delta. Geometric changes from the main then keep propagating to the rotated copy, landing correctly in its rotated frame instead of destroying its placement. Covered by the new composable test case case-n-geometry-sync-with-rotated-instances: an 8-variant sweep over optional copy rotation, optional main rotation, and one of a fills or height edit on the main child, asserting the whole model through the real workspace events (the new rotate operation dispatches dwt/increase-rotation, whose apply-modifiers step runs the check-delta classification under test; change-height dispatches dwt/update-dimensions and implements IPropertyCheck so one-of sweeps can mix property and geometry edits). Verified by temporarily reverting the fix: the case then fails with 6 assertion failures and passes again with the fix restored. Fixes #10109 AI-assisted-by: claude-fable-5 * :bug: Fix synchronization problems --------- Co-authored-by: alonso.torres --- common/src/app/common/logic/libraries.cljc | 50 +++++++++-- .../app/main/data/workspace/modifiers.cljs | 62 +++++++++---- .../composable_tests/comp/nodes.cljs | 84 ++++++++++++++++++ .../composable_tests/comp/sync_test.cljs | 87 +++++++++++++++++++ .../composable_tests/interpreter.cljs | 14 +++ 5 files changed, 271 insertions(+), 26 deletions(-) diff --git a/common/src/app/common/logic/libraries.cljc b/common/src/app/common/logic/libraries.cljc index d18f7019ec..a89aa633ab 100644 --- a/common/src/app/common/logic/libraries.cljc +++ b/common/src/app/common/logic/libraries.cljc @@ -2505,15 +2505,49 @@ (pcb/concat-changes changes new-changes))) (defn- reposition-shape - [shape origin-root dest-root] - (let [shape-pos (fn [shape] - (gpt/point (get-in shape [:selrect :x]) - (get-in shape [:selrect :y]))) + "Expresses the shape (belonging to the origin-root instance) in the frame of the + dest-root instance, making the geometry of both instances directly comparable — + and copyable. - origin-root-pos (shape-pos origin-root) - dest-root-pos (shape-pos dest-root) - delta (gpt/subtract dest-root-pos origin-root-pos)] - (gsh/move shape delta))) + If the dest root's geometry is NOT overridden (touched), the instance follows + the origin's transformation verbatim (including rotation and flips), so a + translation by the roots' (untransformed) position delta suffices — position is + free per-instance placement. + + If the dest root's geometry IS overridden (e.g. the user rotated the copy as a + whole), the instance keeps its own placement transform, so the origin shape is + additionally transformed by the roots' relative transformation (rotation / + flips) around the dest root center — geometric changes then land expressed in + the dest instance's own frame instead of wiping its placement." + [shape origin-root dest-root] + (let [shape-pos (fn [shape] + (gpt/point (dm/get-in shape [:selrect :x]) + (dm/get-in shape [:selrect :y]))) + + origin-root-pos (shape-pos origin-root) + dest-root-pos (shape-pos dest-root) + delta (gpt/subtract dest-root-pos origin-root-pos) + + shape (gsh/move shape delta)] + (if-not (ctk/touched-group? dest-root :geometry-group) + shape + (let [origin-transform (d/nilv (:transform origin-root) (gmt/matrix)) + dest-transform (d/nilv (:transform dest-root) (gmt/matrix)) + rel-transform (gmt/multiply dest-transform (gmt/inverse origin-transform))] + (if ^boolean (gmt/unit? rel-transform) + shape + ;; The roots differ in rotation/flips: rotate the whole (already moved) + ;; shape around the dest root center by the roots' relative transform. + ;; The :rotation attribute delta is fed through the :modifiers path so + ;; apply-transform keeps it consistent with the resulting matrix. + (let [center (grc/rect->center (:selrect dest-root)) + rel-rotation (mod (- (d/nilv (:rotation dest-root) 0) + (d/nilv (:rotation origin-root) 0)) + 360)] + (-> shape + (assoc-in [:modifiers :rotation] rel-rotation) + (gsh/apply-transform (gmt/transform-in center rel-transform)) + (dissoc :modifiers)))))))) (defn- make-change [container change] diff --git a/frontend/src/app/main/data/workspace/modifiers.cljs b/frontend/src/app/main/data/workspace/modifiers.cljs index 41f14c0eea..91268a8550 100644 --- a/frontend/src/app/main/data/workspace/modifiers.cljs +++ b/frontend/src/app/main/data/workspace/modifiers.cljs @@ -117,28 +117,54 @@ ;; geometric attributes of the shapes. (defn- check-delta - "If the shape is a component instance, check its relative position and rotation respect - the root of the component, and see if it changes after applying a transformation." - [shape root transformed-shape transformed-root] - (let [shape-delta - (when root - (gpt/point (- (gsh/left-bound shape) (gsh/left-bound root)) - (- (gsh/top-bound shape) (gsh/top-bound root)))) + "If the shape is a component instance, check whether the transformation is a + free change that must not mark the shape as touched. - transformed-shape-delta - (when transformed-root - (gpt/point (- (gsh/left-bound transformed-shape) (gsh/left-bound transformed-root)) - (- (gsh/top-bound transformed-shape) (gsh/top-bound transformed-root)))) + For the instance ROOT, position is free placement, but its rotation and flips + are inherited content: transforming the copy as a whole overrides them, so a + change there marks the root as touched. + + For DESCENDANTS, position, size, rotation and flips are compared RELATIVE TO + THE ROOT: a transformation of the whole instance preserves them all and does + not mark the descendants as touched; editing an individual shape does." + [shape root transformed-shape transformed-root] + (let [is-root? (and (some? root) + (= (dm/get-prop shape :id) (dm/get-prop root :id))) + + center (fn [shape] + (grc/rect->center (:selrect shape))) + + rel-pos (fn [shape root] + (when root + ;; vector from the root center to the shape center, + ;; expressed in the root's local (untransformed) axes + (-> (gpt/subtract (center shape) (center root)) + (gpt/transform (:transform-inverse root (gmt/matrix)))))) + + orientation (fn [shape root] + ;; the shape's rotation/flip orientation taken from its + ;; transform matrix, so it is reliable regardless of how the + ;; transform was applied (the WASM apply-transform path does + ;; not refresh the :rotation attribute). For the ROOT the + ;; absolute orientation; for a DESCENDANT the orientation + ;; relative to the root — invariant when the whole instance + ;; is rotated or flipped as a unit. + (let [t (:transform shape (gmt/matrix))] + (if is-root? + t + (gmt/multiply (:transform-inverse root (gmt/matrix)) t)))) + + pos-before (rel-pos shape root) + pos-after (rel-pos transformed-shape transformed-root) distance - (if (and shape-delta transformed-shape-delta) - (gpt/distance-vector shape-delta transformed-shape-delta) + (if (and pos-before pos-after) + (gpt/distance-vector pos-before pos-after) (gpt/point 0 0)) - rotation-delta - (if (and (some? (:rotation shape)) (some? (:rotation shape))) - (- (:rotation transformed-shape) (:rotation shape)) - 0) + orientation-unchanged? + (gmt/close? (orientation shape root) + (orientation transformed-shape transformed-root)) selrect (:selrect shape) transformed-selrect (:selrect transformed-shape)] @@ -152,7 +178,7 @@ (and (and (< (:x distance) 1) (< (:y distance) 1)) (mth/close? (:width selrect) (:width transformed-selrect)) (mth/close? (:height selrect) (:height transformed-selrect)) - (mth/close? rotation-delta 0)))) + orientation-unchanged?))) (defn calculate-ignore-tree "Retrieves a map with the flag `ignore-geometry?` given a tree of modifiers" diff --git a/frontend/test/frontend_tests/composable_tests/comp/nodes.cljs b/frontend/test/frontend_tests/composable_tests/comp/nodes.cljs index 61c91d62c8..9d2089d601 100644 --- a/frontend/test/frontend_tests/composable_tests/comp/nodes.cljs +++ b/frontend/test/frontend_tests/composable_tests/comp/nodes.cljs @@ -26,15 +26,19 @@ [app.common.data :as d] [app.common.files.changes-builder :as pcb] [app.common.files.helpers :as cfh] + [app.common.geom.point :as gpt] + [app.common.geom.shapes :as gsh] [app.common.logic.libraries :as cll] [app.common.logic.shapes :as cls] [app.common.logic.variants :as clv] + [app.common.math :as mth] [app.common.test-helpers.components :as thc] [app.common.test-helpers.compositions :as tho] [app.common.test-helpers.files :as thf] [app.common.test-helpers.ids-map :as thi] [app.common.test-helpers.shapes :as ths] [app.common.types.container :as ctn] + [app.common.types.modifiers :as ctm] [frontend-tests.composable-tests.core :as tm])) ;; --------------------------------------------------------------------------- @@ -127,6 +131,86 @@ (def ^{:doc "Alias of `has-property-of`."} has-attr? has-property-of) (def ^{:doc "Alias of `applied-property`."} applied-attr applied-property) +;; --------------------------------------------------------------------------- +;; Geometry operations +;; +;; Unlike `change-property` (a raw attribute write), geometric changes must go +;; through the TRANSFORM pipeline: on the frontend, the interpreter dispatches +;; the real sidebar events (`dwt/increase-rotation`, `dwt/update-dimensions`), +;; whose apply-modifiers step also runs the placement-vs-override classification +;; for component copies (calculate-ignore-tree / check-delta) — which is part of +;; what these operations exist to exercise. The synchronous `apply-to` fallback +;; below performs the geometrically equivalent transform through the production +;; math, but cannot classify placement (that code is frontend-only), so cases +;; using these operations are meant to run through the interpreter. + +(defrecord Rotate [target angle] + tm/IOperation + (apply-to [this situation] + (let [the-file (tm/file situation) + shape-id (tm/target-shape-id situation target) + page (thf/current-page the-file) + objects (:objects page) + shape (get objects shape-id) + ;; rotating a container rotates its whole subtree, as the real event does + ids (into #{shape-id} (cfh/get-children-ids objects shape-id)) + center (gsh/shape->center shape) + rotate1 (fn [s] (gsh/transform-shape s (ctm/rotation-modifiers s center angle))) + changes (cls/generate-update-shapes (pcb/empty-changes nil (:id page)) + ids + rotate1 + objects + {}) + file' (thf/apply-changes the-file changes)] + (-> situation + (tm/with-file file') + (tm/record-application this {:target target :angle angle}))))) + +(defn rotate + "Constructor for the rotation operation: rotate the shape named by `target` + (a role, a label, or a `(situation -> id)` fn) — including its whole subtree — + by `angle` degrees around its center. On the frontend this dispatches the real + `dwt/increase-rotation` event." + [target angle] + (tm/assign-id (->Rotate target angle))) + +(defrecord ChangeHeight [target value] + tm/IOperation + (apply-to [this situation] + (let [the-file (tm/file situation) + shape-id (tm/target-shape-id situation target) + page (thf/current-page the-file) + objects (:objects page) + shape (get objects shape-id) + resize1 (fn [s] (gsh/transform-shape + s + (ctm/resize-modifiers (gpt/point 1 (/ value (:height s))) + (gpt/point (:x s) (:y s))))) + changes (cls/generate-update-shapes (pcb/empty-changes nil (:id page)) + #{(:id shape)} + resize1 + objects + {}) + file' (thf/apply-changes the-file changes)] + (-> situation + (tm/with-file file') + (tm/record-application this {:target target :value value}))))) + +(defn change-height + "Constructor for the height-change operation: resize the shape named by `target` + to height `value` (width unchanged). On the frontend this dispatches the real + `dwt/update-dimensions` event. Implements `IPropertyCheck`, so a `one-of` over + property and geometry edits can assert uniformly via `has-property-of`." + [target value] + (tm/assign-id (->ChangeHeight target value))) + +(extend-type ChangeHeight + IPropertyCheck + (applied-property [_node] :height) + (applied-value [node] (:value node)) + (has-property-of [node shape] + (mth/close? (:value node) (:height shape)))) + ;; =========================================================================== ;; Synchronisation-scenario building blocks ;; diff --git a/frontend/test/frontend_tests/composable_tests/comp/sync_test.cljs b/frontend/test/frontend_tests/composable_tests/comp/sync_test.cljs index 79a32492a4..11821550b0 100644 --- a/frontend/test/frontend_tests/composable_tests/comp/sync_test.cljs +++ b/frontend/test/frontend_tests/composable_tests/comp/sync_test.cljs @@ -27,6 +27,10 @@ Async: each deftest uses `t/async`; `ftm/check` drives the store and calls `done` when finished." (:require + [app.common.geom.matrix :as gmt] + [app.common.geom.point :as gpt] + [app.common.geom.rect :as grc] + [app.common.math :as mth] [app.common.types.component :as ctk] [app.common.types.shape-tree :as ctst] [cljs.test :as t :include-macros true] @@ -343,4 +347,87 @@ (t/is (= (expected-at s i) (level-color s m i)) (str "level " i)))))]))})))) +(t/deftest case-n-geometry-sync-with-rotated-instances + ;; Regression sweep for #10109, with #13267's semantics as its complement: an + ;; instance root's transformation is inherited, overridable content — + ;; asymmetric to position, which is free per-instance placement. + ;; + ;; On the simple component-with-copy, sweep three axes: optionally rotate the + ;; COPY as a whole (an override of its root's placement — must not block + ;; propagation), optionally rotate the MAIN as a whole (inherited content — + ;; an untouched copy must follow it), and apply ONE of a property edit + ;; (fills) or a geometry edit (height) to the main child. In EVERY variant + ;; the chosen edit must arrive at the copy child; the copy's rotation is its + ;; own 45° if the copy was rotated (override wins), else the main's 45° if + ;; the main was rotated (clean copy follows), else 0; and only a rotated + ;; copy's ROOT is touched (:geometry-group) — its child merely follows and + ;; stays untouched. + (t/async + done + (let [rotate-copy (n/rotate :copy-root 45) + rotate-main (n/rotate :main-root 45) + edits (tm/one-of + [(n/change-attr :main-instance :fills red) + (n/change-height :main-instance 80)])] + (ftm/check + done + {:setup setup/simple-component-with-labeled-copy + :operation (tm/in-sequence [(tm/optional rotate-copy) + (tm/optional rotate-main) + edits])} + (fn [situation] + (let [chosen (tm/get-choice situation edits) + copy-root (setup/copy-root situation) + copy-child (setup/copy-instance situation) + expected-rotation (cond + (tm/applied? situation rotate-copy) 45 + (tm/applied? situation rotate-main) 45 + :else 0)] + ;; the chosen main edit arrived at the copy child, in every variant + (t/is (some? chosen)) + (t/is (n/has-property-of chosen copy-child)) + ;; the copy shows the expected rotation (own override > followed main > none) + (t/is (mth/close? (or (:rotation copy-root) 0) expected-rotation)) + (t/is (mth/close? (or (:rotation copy-child) 0) expected-rotation)) + ;; only a rotated copy's ROOT is an override; the child merely follows + (t/is (= (if (tm/applied? situation rotate-copy) #{:geometry-group} nil) + (:touched copy-root))) + (t/is (nil? (:touched copy-child))))))))) + +(t/deftest case-touched-copy-child-survives-main-rotation + ;; A copy whose ROOT is rotated (a geometry override) AND whose CHILD has its + ;; own geometry override (resized) must keep the child exactly in place when the + ;; MAIN is later rotated: the child's placement is its own, shielded by its + ;; touched :geometry-group. We capture the child's position relative to the copy + ;; root before the main rotation and assert it is unchanged after. + (t/async + done + (let [before (atom nil) + rel-pos (fn [situation] + (let [child (setup/copy-instance situation) + root (setup/copy-root situation)] + (-> (gpt/subtract (grc/rect->center (:selrect child)) + (grc/rect->center (:selrect root))) + (gpt/transform (:transform-inverse root (gmt/matrix)))))) + capture (tm/test-that (fn [s] (reset! before (rel-pos s)) (t/is (some? @before))))] + (ftm/check + done + {:setup setup/simple-component-with-labeled-copy + :operation (tm/in-sequence [(n/rotate :copy-root 30) + (n/change-height :copy-instance 60) + capture + (n/rotate :main-root 40)])} + (fn [situation] + (let [copy-child (setup/copy-instance situation) + copy-root (setup/copy-root situation) + after (rel-pos situation)] + ;; both overrides are recorded as geometry touches + (t/is (contains? (:touched copy-root) :geometry-group)) + (t/is (contains? (:touched copy-child) :geometry-group)) + ;; the child keeps its own overridden height + (t/is (mth/close? (:height copy-child) 60)) + ;; and its position relative to the copy root is unchanged by the main rotation + (t/is (mth/close? (:x @before) (:x after) 0.5) (str "rel-x " (:x @before) " -> " (:x after))) + (t/is (mth/close? (:y @before) (:y after) 0.5) (str "rel-y " (:y @before) " -> " (:y after))))))))) + diff --git a/frontend/test/frontend_tests/composable_tests/interpreter.cljs b/frontend/test/frontend_tests/composable_tests/interpreter.cljs index 1890fd0faf..0a6f3b9734 100644 --- a/frontend/test/frontend_tests/composable_tests/interpreter.cljs +++ b/frontend/test/frontend_tests/composable_tests/interpreter.cljs @@ -44,6 +44,7 @@ [app.main.data.workspace.libraries :as dwl] [app.main.data.workspace.shapes :as dwsh] [app.main.data.workspace.thumbnails :as dwth] + [app.main.data.workspace.transforms :as dwt] [app.main.data.workspace.undo :as dwu] [app.main.data.workspace.variants :as dwv] [app.main.store :as st] @@ -140,6 +141,19 @@ [(dwsh/update-shapes #{(tm/target-shape-id situation target)} (fn [shape] (n/set-property shape property value)))]) + (instance? n/Rotate op) + ;; The real sidebar rotation event, absolute mode: rotates the shape (and its + ;; whole subtree) around its center. Its apply-modifiers step runs the + ;; placement-vs-override classification for component copies (check-delta), + ;; which is part of what a case using `rotate` exercises. + (let [{:keys [target angle]} op] + [(dwt/increase-rotation [(tm/target-shape-id situation target)] angle)]) + + (instance? n/ChangeHeight op) + ;; The real sidebar dimension event. + (let [{:keys [target value]} op] + [(dwt/update-dimensions [(tm/target-shape-id situation target)] :height value)]) + (instance? n/SwapComponent op) ;; Swap lineage `name`'s nesting level `level` for lineage `target`'s component ;; via the REAL swap event (dwl/component-swap), so it commits through the From 2de08f00e833eb875cc96895742c7ea3d74f4d04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Valderrama?= Date: Tue, 21 Jul 2026 10:23:03 +0200 Subject: [PATCH 105/229] :bug: Fix teams' inactive status for nitrate (#10763) --- backend/src/app/rpc/management/nitrate.clj | 20 +++++-- .../rpc_management_nitrate_test.clj | 56 +++++++++++++++++++ 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/backend/src/app/rpc/management/nitrate.clj b/backend/src/app/rpc/management/nitrate.clj index f6f5073d8a..c6178cda54 100644 --- a/backend/src/app/rpc/management/nitrate.clj +++ b/backend/src/app/rpc/management/nitrate.clj @@ -825,11 +825,21 @@ RETURNING id, deleted_at;") t.name, t.photo_id, t.created_at, - (SELECT MAX(p2.modified_at) - FROM project AS p2 - WHERE p2.team_id = t.id - AND p2.deleted_at IS NULL - AND p2.is_default IS FALSE) AS last_activity_at, + (SELECT MAX(activity.modified_at) + FROM ( + SELECT p2.modified_at + FROM project AS p2 + WHERE p2.team_id = t.id + AND p2.deleted_at IS NULL + AND p2.is_default IS FALSE + UNION ALL + SELECT f.modified_at + FROM file AS f + JOIN project AS p ON p.id = f.project_id + WHERE p.team_id = t.id + AND p.deleted_at IS NULL + AND f.deleted_at IS NULL + ) AS activity) AS last_activity_at, owner_tpr.profile_id AS owner_profile_id, owner_p.fullname AS owner_name, owner_p.photo_id AS owner_photo_id, diff --git a/backend/test/backend_tests/rpc_management_nitrate_test.clj b/backend/test/backend_tests/rpc_management_nitrate_test.clj index bff2a59478..8ca30ccfce 100644 --- a/backend/test/backend_tests/rpc_management_nitrate_test.clj +++ b/backend/test/backend_tests/rpc_management_nitrate_test.clj @@ -171,6 +171,62 @@ (t/is (= #{(:id team1) (:id team2)} (->> out :result :teams (map :id) set))))) +(t/deftest get-teams-detail-last-activity-reflects-file-modifications + (let [profile (th/create-profile* 1 {:is-active true}) + team (th/create-team* 1 {:profile-id (:id profile)}) + organization-id (uuid/random) + org-summary {:id organization-id + :teams [{:id (:id team)}]} + params {::th/type :get-teams-detail + ::rpc/profile-id (:id profile) + :organization-id organization-id} + + call! (fn [] + (with-redefs [nitrate/call (fn [_cfg method _params] + (case method + :get-org-summary org-summary + nil))] + (management-command-with-nitrate! params))) + + empty-out (call!) + empty-team (-> empty-out :result first) + + project (th/create-project* 1 {:profile-id (:id profile) + :team-id (:id team)}) + file (th/create-file* 1 {:profile-id (:id profile) + :project-id (:id project)}) + file-after-create (th/db-get :file {:id (:id file)}) + project-after-create (th/db-get :project {:id (:id project)}) + expected-activity-create (if (.isAfter (:modified-at file-after-create) + (:modified-at project-after-create)) + (:modified-at file-after-create) + (:modified-at project-after-create)) + + with-file-out (call!) + with-file (-> with-file-out :result first) + + new-activity (ct/in-future "1h") + _ (th/db-update! :file + {:modified-at new-activity} + {:id (:id file)}) + file-after-update (th/db-get :file {:id (:id file)}) + + updated-out (call!) + updated-team (-> updated-out :result first)] + + (t/is (th/success? empty-out)) + (t/is (= (:id team) (:id empty-team))) + (t/is (nil? (:last-activity-at empty-team))) + + (t/is (th/success? with-file-out)) + (t/is (= (:id team) (:id with-file))) + (t/is (= expected-activity-create (:last-activity-at with-file))) + + (t/is (th/success? updated-out)) + (t/is (= (:id team) (:id updated-team))) + (t/is (= (:modified-at file-after-update) (:last-activity-at updated-team))) + (t/is (not= (:last-activity-at with-file) (:last-activity-at updated-team))))) + (t/deftest notify-organization-deletion-prefixes-teams-and-publishes-org-deleted-event (let [profile (th/create-profile* 1 {:is-active true}) ;; One team will have files -> it will be kept and renamed. From 6c5d01283a92ea12730bff3b1953af209b3884e7 Mon Sep 17 00:00:00 2001 From: Alonso Torres Date: Tue, 21 Jul 2026 12:18:40 +0200 Subject: [PATCH 106/229] :bug: Add more test for reported bugs (#10765) --- frontend/src/app/plugins/library.cljs | 7 ++- plugins/CHANGELOG.md | 1 + .../src/tests/library.test.ts | 56 ++++++++++++++++++- 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/plugins/library.cljs b/frontend/src/app/plugins/library.cljs index 9fb646f205..5839ed57a4 100644 --- a/frontend/src/app/plugins/library.cljs +++ b/frontend/src/app/plugins/library.cljs @@ -1043,7 +1043,12 @@ ids (into #{} (map #(obj/get % "$id")) shapes)] (st/emit! (-> (dwl/add-component id-ref ids) (se/add-event plugin-id))) - (lib-component-proxy plugin-id file-id @id-ref)))) + ;; add-component only sets id-ref when it actually creates a + ;; component; an empty selection or shapes that can't form one + ;; leave it nil, so reject instead of returning a broken proxy. + (if-let [id @id-ref] + (lib-component-proxy plugin-id file-id id) + (u/not-valid plugin-id :createComponent "Cannot create a component from the given shapes"))))) ;; Plugin data :getPluginData diff --git a/plugins/CHANGELOG.md b/plugins/CHANGELOG.md index 323e8319ab..eaae151372 100644 --- a/plugins/CHANGELOG.md +++ b/plugins/CHANGELOG.md @@ -6,6 +6,7 @@ ### 🩹 Fixes +- **plugins-runtime**: `Library.createComponent()` now rejects invalid input (an empty shape list, or a shape inside a component copy) with a validation error instead of returning a component proxy pointing at nothing. - **plugins-runtime**: Setting an individual padding/margin side (`leftPadding`, `topMargin`, …) now re-derives the padding/margin type, switching to `multiple` when the four sides stop being symmetric (so the value is actually painted) and back to `simple` once top/bottom and left/right are mirrored again. ## 1.5.0 (2026-07-08) diff --git a/plugins/apps/plugin-api-test-suite/src/tests/library.test.ts b/plugins/apps/plugin-api-test-suite/src/tests/library.test.ts index 7d3a8ccf0a..32da4f5a59 100644 --- a/plugins/apps/plugin-api-test-suite/src/tests/library.test.ts +++ b/plugins/apps/plugin-api-test-suite/src/tests/library.test.ts @@ -1,6 +1,6 @@ import { expect } from '../framework/expect'; import { describe, test } from '../framework/registry'; -import type { Text } from '@penpot/plugin-types'; +import type { Board, Text } from '@penpot/plugin-types'; import type { TestContext } from '../framework/types'; import { PNG_1X1 } from './fixtures'; @@ -310,5 +310,59 @@ describe('Library', () => { expect(instance).toBeDefined(); expect(typeof instance.id).toBe('string'); }); + + // Reported (via MCP): create a page-root shape (rectangle / ellipse / text), + // save it as a component, then use it from Assets — the component root was + // said to be a plain shape instead of a board/component. This does not + // reproduce: a lone page-root shape is wrapped in a board and that board + // becomes the component (main-instance) root. Pin the invariant for the + // exact repro. + test('createComponent wraps a page-root shape in a board component root', (ctx) => { + // A genuine page-root shape: created but NOT placed inside any board. + const rect = ctx.penpot.createRectangle(); + const comp = ctx.penpot.library.local.createComponent([rect]); + + const main = comp.mainInstance() as Board; + expect(main.type).toBe('board'); + expect(main.isComponentRoot()).toBeTruthy(); + expect(main.isComponentMainInstance()).toBeTruthy(); + expect(main.children.some((c) => c.id === rect.id)).toBe(true); + + const errors = ctx.penpot.currentFile?.validate() ?? []; + expect(errors.map((e) => e.code)).toEqual([]); + + // The generated main instance lands at the page root (outside ctx.board); + // tuck it under the scratch board so teardown removes it. + ctx.board.appendChild(main); + }); + + // createComponent must reject inputs that cannot form a component rather + // than succeeding silently or crashing. Both cases below currently surface + // an INTERNAL assertion ("Assert failed: (uuid? id)"): the operation is a + // no-op, so the returned LibraryComponent proxy is built from a nil id. It + // should be a clean rejection (or a null return) instead — and in a release + // build, where the assertion is elided, the caller gets a broken component + // proxy pointing at nothing. The file must stay valid regardless. + test('createComponent with no shapes is rejected', (ctx) => { + expect(() => ctx.penpot.library.local.createComponent([])).toThrow(); + const errors = ctx.penpot.currentFile?.validate() ?? []; + expect(errors.map((e) => e.code)).toEqual([]); + }); + + test('createComponent from a shape inside a component copy is rejected', (ctx) => { + const rect = ctx.penpot.createRectangle(); + ctx.board.appendChild(rect); + const source = ctx.penpot.library.local.createComponent([rect]); + const copy = source.instance() as Board; + ctx.board.appendChild(copy); + const copyChild = copy.children[0]; + expect(copyChild).toBeDefined(); + + expect(() => + ctx.penpot.library.local.createComponent([copyChild]), + ).toThrow(); + const errors = ctx.penpot.currentFile?.validate() ?? []; + expect(errors.map((e) => e.code)).toEqual([]); + }); }); }); From 0ff73ae711f220547c96dc4c25bdb801ba5db4a9 Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Tue, 21 Jul 2026 12:31:23 +0200 Subject: [PATCH 107/229] :sparkles: Add prune-unrelated-items debug utility (#10687) --- frontend/src/app/main/data/workspace.cljs | 3 + frontend/src/debug.cljs | 114 ++++++++++++++++++++++ 2 files changed, 117 insertions(+) diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index fb6245c31c..6ed0feec97 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -1651,3 +1651,6 @@ (dm/export dwpg/duplicate-page) (dm/export dwpg/rename-page) (dm/export dwpg/delete-page) + +;; Shapes +(dm/export dwsh/delete-shapes) diff --git a/frontend/src/debug.cljs b/frontend/src/debug.cljs index 32a0bdf944..fb5cd5b5fe 100644 --- a/frontend/src/debug.cljs +++ b/frontend/src/debug.cljs @@ -9,12 +9,16 @@ [app.common.data :as d] [app.common.data.macros :as dm] [app.common.exceptions :as ex] + [app.common.files.helpers :as cfh] [app.common.files.repair :as cfr] [app.common.files.validate :as cfv] [app.common.json :as json] [app.common.logging :as l] [app.common.pprint :as pp] [app.common.transit :as t] + [app.common.types.component :as ctk] + [app.common.types.components-list :as ctkl] + [app.common.types.container :as ctn] [app.common.types.file :as ctf] [app.common.uuid :as uuid] [app.main.data.changes :as dwc] @@ -28,6 +32,7 @@ [app.main.data.workspace.path.shortcuts] [app.main.data.workspace.selection :as dws] [app.main.data.workspace.shortcuts] + [app.main.data.workspace.undo :as dwu] [app.main.errors :as errors] [app.main.repo :as rp] [app.main.store :as st] @@ -528,3 +533,112 @@ [o] (app.common.pprint/pprint o {:level 100 :length 100})) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; PRUNE UNRELATED ITEMS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defn- get-related-ids + "Given a `context` map (:pindex, :fdata) and a `[page-id id]` pair, returns + the set of `[page-id id]` pairs directly related to it, NOT recursively: + - its children (including itself) + - its ancestors + - the main instance `[page-id id]` of its component, if it's inside a + component copy of a component defined in the current file (libraries + are ignored) + + Ids are only unique within a page, so every id is always tracked together + with the page it belongs to." + [{:keys [pindex fdata]} [page-id id]] + (let [page-objects (-> (get pindex page-id) :objects) + shape (get page-objects id)] + (if (nil? shape) + #{} + (let [related (-> #{} + (into (map (partial vector page-id) (cfh/get-parent-ids page-objects id))) + (into (map (partial vector page-id) (cfh/get-children-ids-with-self page-objects id)))) + head (when (ctk/in-component-copy? shape) + (ctn/get-head-shape page-objects shape)) + component (when (and (some? head) (= (:component-file head) (:id fdata))) + (ctkl/get-component fdata (:component-id head)))] + (cond-> related + (some? component) + (conj [(:main-instance-page component) (:main-instance-id component)])))))) + +(defn ^:export prune-unrelated-items + "This function is DESTRUCTIVE. It deletes from the current file all the pages and layers unrelated to the selection. + It is used to isolate bugs" + [] + (let [state @st/state + current-pid (:current-page-id state) + selected (get-selected state) + + fdata (dsh/lookup-file-data state) + pindex (:pages-index fdata) + + context {:pindex pindex + :fdata fdata} + + related + (loop [related (into #{} (map (partial vector current-pid)) selected)] + (let [expanded (->> related + (reduce (fn [acc pair] (into acc (get-related-ids context pair))) + related) + (remove (fn [[_ id]] (= id uuid/zero))) + set)] + (if (= expanded related) + related + (recur expanded)))) + + related-by-page + (reduce (fn [acc [page-id id]] (update acc page-id (fnil conj #{}) id)) + {} + related) + + unrelated-pages + (->> (:pages fdata) + (remove (fn [page-id] (seq (get related-by-page page-id)))) + vec) + + unrelated-items-by-page + (->> (:pages fdata) + (remove (set unrelated-pages)) + (map (fn [page-id] + (let [page-related (get related-by-page page-id #{}) + ids (->> (get pindex page-id) + :objects + keys + (remove #{uuid/zero}) + (remove page-related) + set)] + [page-id ids]))) + (filter (fn [[_ ids]] (seq ids))) + vec) + + items-to-delete + (reduce + (map (comp count second) unrelated-items-by-page))] + + (js/console.log (str "Pages to delete: " (count unrelated-pages) + ", items to delete: " items-to-delete)) + (.table js/console + (->> unrelated-items-by-page + (mapcat (fn [[page-id ids]] + (let [objects (-> (get pindex page-id) :objects)] + (map (fn [id] + {:page-id (str page-id) + :id (str id) + :name (:name (get objects id))}) + ids)))) + (clj->js))) + (when (and (or (seq unrelated-pages) (pos? items-to-delete)) + (js/confirm (str "Delete " (count unrelated-pages) " unrelated page(s) and " + items-to-delete " unrelated item(s)?"))) + (let [undo-id (js/Symbol)] + (apply st/emit! + (concat + [(dwu/start-undo-transaction undo-id)] + (map dw/delete-page unrelated-pages) + (map (fn [[page-id ids]] + (dw/delete-shapes page-id ids)) + unrelated-items-by-page) + [(dwu/commit-undo-transaction undo-id)])))) + nil)) \ No newline at end of file From fa996ab240a1e24600d1c688e3664e1adf257fd7 Mon Sep 17 00:00:00 2001 From: Juan de la Cruz Date: Tue, 21 Jul 2026 13:16:10 +0200 Subject: [PATCH 108/229] :sparkles: Add list view toggle for dashboard files (#10692) * :sparkles: Add list view toggle for dashboard files * :sparkles: Add drop files visual feedback * :recycle: Use radio buttons component from DS * :recycle: Use hook to keep layout status * :recycle: Refactor code and SCSS --------- Co-authored-by: Luis de Dios --- .../src/app/main/ui/dashboard/deleted.cljs | 63 +- frontend/src/app/main/ui/dashboard/files.cljs | 25 +- frontend/src/app/main/ui/dashboard/grid.cljs | 457 +++++++------ frontend/src/app/main/ui/dashboard/grid.scss | 636 ++++++++++-------- .../app/main/ui/dashboard/layout_toggle.cljs | 32 + .../app/main/ui/dashboard/placeholder.cljs | 2 +- .../app/main/ui/dashboard/placeholder.scss | 4 +- .../src/app/main/ui/dashboard/projects.cljs | 53 +- frontend/src/app/main/ui/hooks.cljs | 4 +- frontend/translations/en.po | 8 + frontend/translations/es.po | 8 + 11 files changed, 759 insertions(+), 533 deletions(-) create mode 100644 frontend/src/app/main/ui/dashboard/layout_toggle.cljs diff --git a/frontend/src/app/main/ui/dashboard/deleted.cljs b/frontend/src/app/main/ui/dashboard/deleted.cljs index e5be919ea3..9a46b697ba 100644 --- a/frontend/src/app/main/ui/dashboard/deleted.cljs +++ b/frontend/src/app/main/ui/dashboard/deleted.cljs @@ -17,6 +17,7 @@ [app.main.store :as st] [app.main.ui.components.context-menu-a11y :refer [context-menu*]] [app.main.ui.dashboard.grid :refer [grid*]] + [app.main.ui.dashboard.layout-toggle :as lt :refer [layout-toggle*]] [app.main.ui.dashboard.subscription :refer [get-subscription-type]] [app.main.ui.ds.buttons.button :refer [button*]] [app.main.ui.ds.product.empty-placeholder :refer [empty-placeholder*]] @@ -57,10 +58,13 @@ (mf/defc header* {::mf/private true} - [] - [:header {:class (stl/css :dashboard-header) :data-testid "dashboard-header"} + [{:keys [layout on-change]}] + [:header {:class (stl/css :dashboard-header) + :data-testid "dashboard-header"} [:div#dashboard-deleted-title {:class (stl/css :dashboard-title)} - [:h1 (tr "dashboard.projects-title")]]]) + [:h1 (tr "dashboard.projects-title")]] + [:div {:class (stl/css :dashboard-header-actions)} + [:> layout-toggle* {:layout layout :on-change on-change}]]]) (mf/defc project-context-menu* {::mf/private true} @@ -87,18 +91,17 @@ :id "project-delete" :handler on-delete-project}])] - [:> context-menu* - {:on-close on-close - :show show - :fixed (or (not= top 0) (not= left 0)) - :min-width true - :top top - :left left - :options options}])) + [:> context-menu* {:on-close on-close + :show show + :fixed (or (not= top 0) (not= left 0)) + :min-width true + :top top + :left left + :options options}])) (mf/defc deleted-project-item* {::mf/private true} - [{:keys [project files]}] + [{:keys [project files layout]}] (let [project-files (filterv #(= (:project-id %) (:id project)) files) empty? (empty? project-files) @@ -176,14 +179,14 @@ :type 1 :subtitle (tr "dashboard.empty-placeholder-files-subtitle")}] - [:> grid* - {:project project - :files project-files - :origin :deleted - :can-edit false - :can-restore true - :limit limit - :selected-files selected-files}])]])) + [:> grid* {:project project + :files project-files + :origin :deleted + :can-edit false + :can-restore true + :limit limit + :layout layout + :selected-files selected-files}])]])) (mf/defc menu* {::mf/private true} @@ -217,7 +220,15 @@ (mf/defc deleted-section* [{:keys [team projects]}] - (let [deleted-map + (let [layout* (hooks/use-persisted-state lt/layout-key lt/default-layout) + layout (deref layout*) + + on-layout-change + (mf/use-fn + (fn [value] + (reset! layout* (keyword value)))) + + deleted-map (mf/deref ref:deleted-files) projects @@ -241,7 +252,7 @@ ;; Calculate deletion days based on team subscription deletion-days - (let [profile (mf/deref refs/profile) + (let [profile (mf/deref refs/profile) subscription-type (get-subscription-type (:subscription team)) nitrate-type (get-in profile [:subscription :type]) nitrate-active? (dnt/is-valid-license? profile)] @@ -286,13 +297,16 @@ (dd/clear-selected-files))) [:* - [:> header* {:team team}] + [:> header* {:team team + :layout layout + :on-change on-layout-change}] [:section {:class (stl/css :dashboard-container :no-bg) :data-testid "deleted-page-section"} [:* [:div {:class (stl/css :no-bg)} - [:> menu* {:team-id team-id :section :dashboard-deleted}] + [:> menu* {:team-id team-id + :section :dashboard-deleted}] (if (seq projects) [:* @@ -322,6 +336,7 @@ (sort-by :modified-at #(compare %2 %1))))] [:> deleted-project-item* {:project project :files files + :layout layout :key id}]))] ;; when no deleted projects diff --git a/frontend/src/app/main/ui/dashboard/files.cljs b/frontend/src/app/main/ui/dashboard/files.cljs index e602720c72..05ed77851e 100644 --- a/frontend/src/app/main/ui/dashboard/files.cljs +++ b/frontend/src/app/main/ui/dashboard/files.cljs @@ -16,6 +16,7 @@ [app.main.store :as st] [app.main.ui.dashboard.grid :refer [grid*]] [app.main.ui.dashboard.inline-edition :refer [inline-edition]] + [app.main.ui.dashboard.layout-toggle :as lt :refer [layout-toggle*]] [app.main.ui.dashboard.pin-button :refer [pin-button*]] [app.main.ui.dashboard.project-menu :refer [project-menu*]] [app.main.ui.ds.product.empty-placeholder :refer [empty-placeholder*]] @@ -32,7 +33,7 @@ (mf/defc header* {::mf/private true} - [{:keys [project create-fn can-edit]}] + [{:keys [project create-fn can-edit layout on-change]}] (let [project-id (:id project) local @@ -73,7 +74,8 @@ (dd/clear-selected-files))))] - [:header {:class (stl/css :dashboard-header) :data-testid "dashboard-header"} + [:header {:class (stl/css :dashboard-header) + :data-testid "dashboard-header"} (if (:is-default project) [:div#dashboard-drafts-title {:class (stl/css :dashboard-title)} [:h1 (tr "labels.drafts")]] @@ -95,6 +97,9 @@ (:name project)]])) [:div {:class (stl/css :dashboard-header-actions)} + [:> layout-toggle* {:layout layout + :on-change on-change}] + (when ^boolean can-edit [:a {:class (stl/css :btn-secondary :btn-small :new-file) :tab-index "0" @@ -155,6 +160,14 @@ selected-files (mf/deref refs/selected-files) + layout* (hooks/use-persisted-state lt/layout-key lt/default-layout) + layout (deref layout*) + + on-layout-change + (mf/use-fn + (fn [value] + (reset! layout* (keyword value)))) + on-file-created (mf/use-fn (fn [file-data] @@ -188,7 +201,9 @@ [:> header* {:team team :can-edit can-edit? :project project - :create-fn create-file}] + :create-fn create-file + :layout layout + :on-change on-layout-change}] [:section {:class (stl/css :dashboard-container :no-bg) :ref rowref} (if empty-state-viewer @@ -206,5 +221,5 @@ :can-edit can-edit? :origin :files :create-fn create-file - :limit limit}])]])) - + :limit limit + :layout layout}])]])) diff --git a/frontend/src/app/main/ui/dashboard/grid.cljs b/frontend/src/app/main/ui/dashboard/grid.cljs index eeec8323d1..0b19614858 100644 --- a/frontend/src/app/main/ui/dashboard/grid.cljs +++ b/frontend/src/app/main/ui/dashboard/grid.cljs @@ -31,9 +31,9 @@ [app.main.ui.dashboard.import :refer [use-import-file]] [app.main.ui.dashboard.inline-edition :refer [inline-edition]] [app.main.ui.dashboard.placeholder :refer [empty-grid-placeholder* loading-placeholder*]] + [app.main.ui.ds.foundations.assets.icon :as i :refer [icon*]] [app.main.ui.ds.product.loader :refer [loader*]] [app.main.ui.hooks :as h] - [app.main.ui.icons :as deprecated-icon] [app.main.worker :as mw] [app.util.color :as uc] [app.util.dom :as dom] @@ -108,8 +108,8 @@ :message (ex-message cause)))))] (partial rx/dispose! subscription)))) - [:div {:class (stl/css-case :grid-item-th true - :deleted-item can-restore) + [:div {:class (stl/css-case :grid-item-thumbnail true + :is-deleted can-restore) :style {:background-color bg-color} :ref container} (when visible? @@ -127,9 +127,6 @@ ;; --- Grid Item Library -(def ^:private menu-icon - (deprecated-icon/icon-xref :menu (stl/css :menu-icon))) - (mf/defc grid-item-library* [{:keys [file can-restore]}] (mf/with-effect [file] @@ -137,113 +134,115 @@ (let [font-ids (map :font-id (get-in file [:library-summary :typographies :sample] []))] (run! fonts/ensure-loaded! font-ids)))) - [:div {:class (stl/css-case :grid-item-th true - :library true - :deleted-item can-restore)} + [:div {:class (stl/css-case :library-thumbnail true + :is-deleted can-restore)} (if (nil? file) [:> loader* {:class (stl/css :grid-loader) :overlay true :title (tr "labels.loading")}] - (let [summary (:library-summary file) - components (:components summary) - colors (:colors summary) + (let [summary (:library-summary file) + components (:components summary) + colors (:colors summary) typographies (:typographies summary)] [:* (when (and (zero? (:count components)) (zero? (:count colors)) (zero? (:count typographies))) [:* - [:div {:class (stl/css :asset-section)} - [:div {:class (stl/css :asset-title)} + [:div {:class (stl/css :library-asset-section)} + [:div {:class (stl/css :library-asset-title)} [:span (tr "workspace.assets.components")] - [:span {:class (stl/css :num-assets)} (str "\u00A0(") 0 ")"]]] ;; Unicode 00A0 is non-breaking space - [:div {:class (stl/css :asset-section)} - [:div {:class (stl/css :asset-title)} + [:span {:class (stl/css :library-num-assets)} (str "\u00A0(") 0 ")"]]] ;; Unicode 00A0 is non-breaking space + [:div {:class (stl/css :library-asset-section)} + [:div {:class (stl/css :library-asset-title)} [:span (tr "workspace.assets.colors")] - [:span {:class (stl/css :num-assets)} (str "\u00A0(") 0 ")"]]] ;; Unicode 00A0 is non-breaking space - [:div {:class (stl/css :asset-section)} - [:div {:class (stl/css :asset-title)} + [:span {:class (stl/css :library-num-assets)} (str "\u00A0(") 0 ")"]]] ;; Unicode 00A0 is non-breaking space + [:div {:class (stl/css :library-asset-section)} + [:div {:class (stl/css :library-asset-title)} [:span (tr "workspace.assets.typography")] - [:span {:class (stl/css :num-assets)} (str "\u00A0(") 0 ")"]]]]) ;; Unicode 00A0 is non-breaking space + [:span {:class (stl/css :library-num-assets)} (str "\u00A0(") 0 ")"]]]]) ;; Unicode 00A0 is non-breaking space (when (pos? (:count components)) - [:div {:class (stl/css :asset-section)} - [:div {:class (stl/css :asset-title)} + [:div {:class (stl/css :library-asset-section)} + [:div {:class (stl/css :library-asset-title)} [:span (tr "workspace.assets.components")] - [:span {:class (stl/css :num-assets)} (str "\u00A0(") (:count components) ")"]] ;; Unicode 00A0 is non-breaking space - [:div {:class (stl/css :asset-list)} + [:span {:class (stl/css :library-num-assets)} (str "\u00A0(") (:count components) ")"]] ;; Unicode 00A0 is non-breaking space + [:div {:class (stl/css :library-asset-list)} (for [component (:sample components)] (let [root-id (:main-instance-id component)] - [:div {:class (stl/css :asset-list-item) + [:div {:class (stl/css :library-asset-item) :key (str "assets-component-" (:id component))} - [:& render/component-svg {:root-shape (get-in component [:objects root-id]) + [:& render/component-svg {:class (stl/css :library-asset-icon) + :root-shape (get-in component [:objects root-id]) :objects (:objects component)}] ;; Components in the summary come loaded with objects, even in v2 - [:div {:class (stl/css :name-block)} - [:span {:class (stl/css :item-name) + [:div {:class (stl/css :library-name-block)} + [:span {:class (stl/css :library-item-name) :title (:name component)} (:name component)]]])) (when (> (:count components) (count (:sample components))) - [:div {:class (stl/css :asset-list-item)} - [:div {:class (stl/css :name-block)} - [:span {:class (stl/css :item-name)} "(...)"]]])]]) + [:div {:class (stl/css :library-asset-item)} + [:div {:class (stl/css :library-name-block)} + [:span {:class (stl/css :library-item-name)} "(...)"]]])]]) (when (pos? (:count colors)) - [:div {:class (stl/css :asset-section)} - [:div {:class (stl/css :asset-title)} + [:div {:class (stl/css :library-asset-section)} + [:div {:class (stl/css :library-asset-title)} [:span (tr "workspace.assets.colors")] - [:span {:class (stl/css :num-assets)} (str "\u00A0(") (:count colors) ")"]] ;; Unicode 00A0 is non-breaking space - [:div {:class (stl/css :asset-list)} + [:span {:class (stl/css :library-num-assets)} (str "\u00A0(") (:count colors) ")"]] ;; Unicode 00A0 is non-breaking space + [:div {:class (stl/css :library-asset-list)} (for [color (:sample colors)] (let [default-name (cond (:gradient color) (uc/gradient-type->string (get-in color [:gradient :type])) (:color color) (:color color) :else (:value color))] - [:div {:class (stl/css :asset-list-item :color-item) + [:div {:class (stl/css :library-asset-item :library-color-item) :key (str "assets-color-" (:id color))} [:> bc/color-bullet* {:color {:color (:color color) :id (:id color) :opacity (:opacity color)} :mini true}] - [:div {:class (stl/css :name-block)} - [:span {:class (stl/css :color-name)} (:name color)] + [:div {:class (stl/css :library-name-block)} + [:span {:class (stl/css :library-color-name)} (:name color)] (when-not (= (:name color) default-name) - [:span {:class (stl/css :color-value)} (:color color)])]])) + [:span {:class (stl/css :library-color-value)} (:color color)])]])) (when (> (:count colors) (count (:sample colors))) - [:div {:class (stl/css :asset-list-item)} - [:div {:class (stl/css :name-block)} - [:span {:class (stl/css :item-name)} "(...)"]]])]]) + [:div {:class (stl/css :library-asset-item)} + [:div {:class (stl/css :library-name-block)} + [:span {:class (stl/css :library-item-name)} "(...)"]]])]]) (when (pos? (:count typographies)) - [:div {:class (stl/css :asset-section)} - [:div {:class (stl/css :asset-title)} + [:div {:class (stl/css :library-asset-section)} + [:div {:class (stl/css :library-asset-title)} [:span (tr "workspace.assets.typography")] - [:span {:class (stl/css :num-assets)} (str "\u00A0(") (:count typographies) ")"]] ;; Unicode 00A0 is non-breaking space - [:div {:class (stl/css :asset-list)} + [:span {:class (stl/css :library-num-assets)} (str "\u00A0(") (:count typographies) ")"]] ;; Unicode 00A0 is non-breaking space + [:div {:class (stl/css :library-asset-list)} (for [typography (:sample typographies)] - [:div {:class (stl/css :asset-list-item) + [:div {:class (stl/css :library-asset-item) :key (str "assets-typography-" (:id typography))} - [:div {:class (stl/css :typography-sample) + [:div {:class (stl/css :library-typography-sample) :style {:font-family (:font-family typography) :font-weight (:font-weight typography) :font-style (:font-style typography)}} (tr "workspace.assets.typography.sample")] - [:div {:class (stl/css :name-block)} - [:span {:class (stl/css :item-name) + [:div {:class (stl/css :library-name-block)} + [:span {:class (stl/css :library-item-name) :title (:name typography)} (:name typography)]]]) (when (> (:count typographies) (count (:sample typographies))) - [:div {:class (stl/css :asset-list-item)} - [:div {:class (stl/css :name-block)} - [:span {:class (stl/css :item-name)} "(...)"]]])]])]))]) + [:div {:class (stl/css :library-asset-item)} + [:div {:class (stl/css :library-name-block)} + [:span {:class (stl/css :library-item-name)} "(...)"]]])]])]))]) ;; --- Grid Item (mf/defc grid-item-metadata* - [{:keys [file]}] + {::mf/private true} + [{:keys [file layout]}] (let [time (ct/timeago (or (:will-be-deleted-at file) (:modified-at file)))] - [:span {:class (stl/css :date) + [:span {:class (stl/css-case :grid-item-date (= layout :grid) + :list-item-date (= layout :list)) :title (tr "dashboard.deleted.will-be-deleted-at" time)} time])) @@ -255,31 +254,32 @@ counter-el)) (mf/defc grid-item* - [{:keys [file origin can-edit selected-files can-restore]}] - (let [file-id (get file :id) - state (mf/deref refs/dashboard-local) + {::mf/private true} + [{:keys [file origin can-edit selected-files can-restore layout]}] + (let [node-ref (mf/use-ref) + menu-ref (mf/use-ref) - menu-pos - (get state :menu-pos) + state (mf/deref refs/dashboard-local) - menu-open? - (and (get state :menu-open) - (= file-id (:file-id state))) + file-id (get file :id) - selected? - (contains? selected-files file-id) + menu-pos (get state :menu-pos) + menu-open? (and (get state :menu-open) + (= file-id (:file-id state))) - selected-num - (count selected-files) + selected? (contains? selected-files file-id) + selected-num (count selected-files) - node-ref (mf/use-ref) - menu-ref (mf/use-ref) + list? (= layout :list) - is-library-view? - (= origin :libraries) + editing? (and (= file-id (:file-id state)) + (:edition state)) + + library-view? (= origin :libraries) on-menu-close - (mf/use-fn #(st/emit! (dd/hide-file-menu))) + (mf/use-fn + #(st/emit! (dd/hide-file-menu))) on-select (mf/use-fn @@ -335,29 +335,32 @@ on-menu-click (mf/use-fn - (mf/deps file selected?) + (mf/deps file selected? menu-open?) (fn [event] (dom/stop-propagation event) - (when-not selected? - (when-not (kbd/shift? event) - (st/emit! (dd/clear-selected-files))) + (if menu-open? + (st/emit! (dd/hide-file-menu)) + (do - (st/emit! (dd/toggle-file-select file)))) + (when-not selected? + (when-not (kbd/shift? event) + (st/emit! (dd/clear-selected-files))) + (st/emit! (dd/toggle-file-select file))) - (let [client-position - (dom/get-client-position event) + (let [client-position + (dom/get-client-position event) - position - (if (and (nil? (:y client-position)) (nil? (:x client-position))) - (let [target-element (dom/get-target event) - points (dom/get-bounding-rect target-element) - y (:top points) - x (:left points)] - (gpt/point x y)) - client-position)] + position + (if (and (nil? (:y client-position)) (nil? (:x client-position))) + (let [target-element (dom/get-target event) + points (dom/get-bounding-rect target-element) + y (:top points) + x (:left points)] + (gpt/point x y)) + client-position)] - (st/emit! (dd/show-file-menu-with-position file-id position))))) + (st/emit! (dd/show-file-menu-with-position file-id position))))))) on-context-menu (mf/use-fn @@ -390,7 +393,10 @@ (when (kbd/enter? event) (on-navigate event)) (when (kbd/shift? event) - (when (or (kbd/down-arrow? event) (kbd/left-arrow? event) (kbd/up-arrow? event) (kbd/right-arrow? event)) + (when (or (kbd/down-arrow? event) + (kbd/left-arrow? event) + (kbd/up-arrow? event) + (kbd/right-arrow? event)) ;; TODO Fix this (on-select event))))) @@ -401,73 +407,117 @@ (when (kbd/enter? event) (dom/stop-propagation event) (dom/prevent-default event) - (on-menu-click event))))] + (on-menu-click event)))) - [:li {:class (stl/css-case :grid-item true - :project-th true - :library is-library-view?)} - [:div - {:class (stl/css-case :selected selected? - :library is-library-view?) - :ref node-ref - :role "button" - :title (:name file) - :aria-label (:name file) - :draggable (dm/str can-edit) - :on-click on-select - :on-key-down on-key-down - :on-double-click on-navigate - :on-drag-start on-drag-start - :on-context-menu on-context-menu} + ;; The options menu is identical in both layouts, so we build it once + ;; and place it where each layout needs it. NOTE: hiccup bound in a + ;; let is not compiled by rumext, so it must be wrapped in mf/html. + menu-element + (mf/html + [:div {:class (stl/css-case :project-thumbnail-actions true + :is-force-display menu-open?)} + [:div {:class (stl/css :project-thumbnail-icon :menu) + :tab-index "0" + :role "button" + :aria-label (tr "dashboard.options") + :ref menu-ref + :id (dm/str file-id "-action-menu") + :on-click on-menu-click + :on-key-down on-menu-key-down} - [:div {:class (stl/css :overlay)}] + [:> icon* {:icon-id i/menu + :class (stl/css :menu-icon)}] - (if ^boolean is-library-view? - [:> grid-item-library* {:file file :can-restore can-restore}] - [:> grid-item-thumbnail* {:file file :can-edit can-edit :can-restore can-restore}]) + (when (and selected? menu-open?) + ;; When the menu is open we disable events in the dashboard. We need to force pointer events + ;; so the menu can be handled + [:> portal-on-document* {} + [:> file-menu* {:files (vals selected-files) + :left (+ 24 (:x menu-pos)) + :top (:y menu-pos) + :can-edit can-edit + :navigate true + :on-edit on-edit + :on-close on-menu-close + :origin origin + :parent-id (dm/str file-id "-action-menu") + :can-restore can-restore}]])]])] - (when (and (:is-shared file) (not is-library-view?)) - [:div {:class (stl/css :item-badge)} deprecated-icon/library]) + (if ^boolean list? + [:li {:class (stl/css-case :grid-item true + :list-item true + :library-item library-view?)} + [:div + {:class (stl/css-case :list-item-row true + :is-selected selected?) + :ref node-ref + :role "button" + :title (:name file) + :aria-label (:name file) + :draggable (dm/str can-edit) + :on-click on-select + :on-key-down on-key-down + :on-double-click on-navigate + :on-drag-start on-drag-start + :on-context-menu on-context-menu} - [:div {:class (stl/css :info-wrapper)} - [:div {:class (stl/css :item-info)} - (if (and (= file-id (:file-id state)) (:edition state)) + (if ^boolean editing? [:& inline-edition {:content (:name file) :on-end edit :max-length 250}] - [:h3 (:name file)]) - [:> grid-item-metadata* {:file file}]] + [:h3 {:class (stl/css :list-item-name)} (:name file)]) - [:div {:class (stl/css-case :project-th-actions true :force-display menu-open?)} - [:div - {:class (stl/css :project-th-icon :menu) - :tab-index "0" - :role "button" - :aria-label (tr "dashboard.options") - :ref menu-ref - :id (dm/str file-id "-action-menu") - :on-click on-menu-click - :on-key-down on-menu-key-down} + (when (and (:is-shared file) (not library-view?)) + [:span {:class (stl/css :list-item-badge) + :aria-label (tr "workspace.assets.shared-library") + :title (tr "workspace.assets.shared-library")} + [:> icon* {:icon-id i/library}]]) - menu-icon - (when (and selected? menu-open?) - ;; When the menu is open we disable events in the dashboard. We need to force pointer events - ;; so the menu can be handled - [:> portal-on-document* {} - [:> file-menu* {:files (vals selected-files) - :left (+ 24 (:x menu-pos)) - :top (:y menu-pos) - :can-edit can-edit - :navigate true - :on-edit on-edit - :on-close on-menu-close - :origin origin - :parent-id (dm/str file-id "-action-menu") - :can-restore can-restore}]])]]]]])) + [:> grid-item-metadata* {:file file :layout :list}] + + menu-element]] + + [:li {:class (stl/css-case :grid-item true + :project-thumbnail true + :library-item library-view?)} + [:div {:class (stl/css-case :is-selected selected?) + :ref node-ref + :role "button" + :title (:name file) + :aria-label (:name file) + :draggable (dm/str can-edit) + :on-click on-select + :on-key-down on-key-down + :on-double-click on-navigate + :on-drag-start on-drag-start + :on-context-menu on-context-menu} + + (if ^boolean library-view? + [:> grid-item-library* {:file file + :can-restore can-restore}] + [:> grid-item-thumbnail* {:file file + :can-edit can-edit + :can-restore can-restore}]) + + (when (and (:is-shared file) (not library-view?)) + [:div {:class (stl/css :grid-item-badge)} + [:> icon* {:icon-id i/library}]]) + + [:div {:class (stl/css :grid-item-info)} + [:div {:class (stl/css :grid-item-meta)} + (if ^boolean editing? + [:& inline-edition {:content (:name file) + :on-end edit + :max-length 250}] + [:h3 {:class (stl/css :grid-item-title)} (:name file)]) + [:> grid-item-metadata* {:file file :layout :grid}]] + + menu-element]]]))) (mf/defc grid* - [{:keys [files project origin limit create-fn can-edit selected-files can-restore]}] + [{:keys [files project origin limit create-fn can-edit selected-files can-restore layout]}] (let [dragging? (mf/use-state false) + list? (= layout :list) project-id (get project :id) team-id (get project :team-id) @@ -534,6 +584,19 @@ (nil? files) [:> loading-placeholder*] + (and (seq files) list?) + [:ul {:class (stl/css :grid-row :list-view)} + (when @dragging? + [:li {:class (stl/css :list-item-dragged)}]) + (for [item files] + [:> grid-item* {:file item + :key (dm/str (:id item)) + :origin origin + :selected-files selected-files + :can-edit can-edit + :can-restore can-restore + :layout :list}])] + (seq files) (for [[index slice] (d/enumerate (partition-all limit files))] @@ -541,45 +604,57 @@ (when @dragging? [:li {:class (stl/css :grid-item)}]) (for [item slice] - [:> grid-item* - {:file item - :key (dm/str (:id item)) - :origin origin - :selected-files selected-files - :can-edit can-edit - :can-restore can-restore}])]) + [:> grid-item* {:file item + :key (dm/str (:id item)) + :origin origin + :selected-files selected-files + :can-edit can-edit + :can-restore can-restore}])]) :else - [:> empty-grid-placeholder* - {:limit limit - :can-edit can-edit - :create-fn create-fn - :origin origin - :project-id project-id - :team-id team-id - :on-finish-import on-finish-import}])])) + [:> empty-grid-placeholder* {:limit limit + :can-edit can-edit + :create-fn create-fn + :origin origin + :project-id project-id + :team-id team-id + :on-finish-import on-finish-import}])])) -(mf/defc line-grid-row - [{:keys [files selected-files dragging? limit can-edit can-restore] :as props}] +(mf/defc line-grid-row* + {::mf/private true} + [{:keys [files selected-files is-dragging limit can-edit can-restore layout]}] (let [elements limit - limit (if dragging? (dec limit) limit)] - [:ul {:class (stl/css :grid-row :no-wrap) - :style {:grid-template-columns (dm/str "repeat(" elements ", 1fr)")}} + limit (if is-dragging (dec limit) limit) + list? (= layout :list)] + (if ^boolean list? + [:ul {:class (stl/css :grid-row :list-view)} + (when is-dragging + [:li {:class (stl/css :list-item-dragged)}]) + (for [item (take limit files)] + [:> grid-item* {:id (:id item) + :file item + :selected-files selected-files + :can-edit can-edit + :key (dm/str (:id item)) + :can-restore can-restore + :layout :list}])] - (when dragging? - [:li {:class (stl/css :grid-item :dragged)}]) + [:ul {:class (stl/css :grid-row :no-wrap) + :style {:grid-template-columns (dm/str "repeat(" elements ", 1fr)")}} - (for [item (take limit files)] - [:> grid-item* - {:id (:id item) - :file item - :selected-files selected-files - :can-edit can-edit - :key (dm/str (:id item)) - :can-restore can-restore}])])) + (when is-dragging + [:li {:class (stl/css :grid-item :is-dragged)}]) -(mf/defc line-grid - [{:keys [project team files limit create-fn can-edit can-restore] :as props}] + (for [item (take limit files)] + [:> grid-item* {:id (:id item) + :file item + :selected-files selected-files + :can-edit can-edit + :key (dm/str (:id item)) + :can-restore can-restore}])]))) + +(mf/defc line-grid* + [{:keys [project team files limit create-fn can-edit can-restore layout]}] (let [dragging? (mf/use-state false) project-id (:id project) team-id (:id team) @@ -672,20 +747,20 @@ [:> loading-placeholder*] (seq files) - [:& line-grid-row {:files files - :team-id team-id - :selected-files selected-files - :dragging? @dragging? - :can-edit can-edit - :limit limit - :can-restore can-restore}] + [:> line-grid-row* {:files files + :team-id team-id + :selected-files selected-files + :is-dragging @dragging? + :can-edit can-edit + :limit limit + :can-restore can-restore + :layout layout}] :else - [:> empty-grid-placeholder* - {:is-dragging @dragging? - :limit limit - :can-edit can-edit - :create-fn create-fn - :project-id project-id - :team-id team-id - :on-finish-import on-finish-import}])])) + [:> empty-grid-placeholder* {:is-dragging @dragging? + :limit limit + :can-edit can-edit + :create-fn create-fn + :project-id project-id + :team-id team-id + :on-finish-import on-finish-import}])])) diff --git a/frontend/src/app/main/ui/dashboard/grid.scss b/frontend/src/app/main/ui/dashboard/grid.scss index 66df5339f4..448600c835 100644 --- a/frontend/src/app/main/ui/dashboard/grid.scss +++ b/frontend/src/app/main/ui/dashboard/grid.scss @@ -4,247 +4,214 @@ // // Copyright (c) KALEIDOS INC Sucursal en España SL -@use "refactor/common-refactor.scss" as deprecated; +@use "ds/_borders.scss" as *; +@use "ds/_sizes.scss" as *; +@use "ds/_utils.scss" as *; +@use "ds/spacing.scss" as *; +@use "ds/typography.scss" as t; +@use "ds/z-index.scss" as *; + +// ─── VARIABLES ───────────────────────────────── -// TODO: Legacy sass variables. We should remove them in favor of DS tokens. $bp-max-1366: "(max-width: 1366px)"; -$thumbnail-default-width: deprecated.$s-252; // Default width -$thumbnail-default-height: deprecated.$s-168; // Default width +$thumbnail-default-width: $sz-252; +$thumbnail-default-height: px2rem(168); + +// ─── DASHBOARD GRID ──────────────────────────── .dashboard-grid { - font-size: deprecated.$fs-14; - height: 100%; + @include t.use-typography("body-medium"); + + block-size: 100%; overflow: hidden auto; - padding: 0 var(--sp-l) deprecated.$s-16; + padding: 0 var(--sp-l) var(--sp-l); } +// ─── GRID ROW ────────────────────────────────── + .grid-row { display: grid; grid-auto-flow: column; - grid-auto-columns: calc(deprecated.$s-12 + var(--th-width, #{$thumbnail-default-width})); - width: 100%; - gap: deprecated.$s-24; + grid-auto-columns: calc(var(--sp-m) + var(--thumbnail-width, #{$thumbnail-default-width})); + inline-size: 100%; + gap: var(--sp-xxl); + + &.list-view { + display: flex; + flex-direction: column; + grid-auto-flow: initial; + grid-auto-columns: initial; + gap: var(--sp-s); + padding: var(--sp-s) 0; + inline-size: 100%; + } } +// ─── CARD VIEW: GRID ITEM ───────────────────── + .grid-item { align-items: center; - cursor: pointer; display: flex; flex-direction: column; - margin: deprecated.$s-12 0; + margin: var(--sp-m) 0; position: relative; text-align: center; - a, - button { - width: 100%; - font-weight: deprecated.$fw400; - } - - button { - background-color: transparent; - border: none; - padding: 0 deprecated.$s-6; - } - - .grid-item-th { - border-radius: deprecated.$br-8; + &.is-dragged { + border-radius: $br-4; + outline: $br-4 solid var(--color-accent-primary); text-align: initial; - width: var(--th-width, #{$thumbnail-default-width}); - height: var(--th-height, #{$thumbnail-default-height}); - background-size: cover; - overflow: hidden; - - img { - object-fit: contain; - } - } - - &.dragged { - border-radius: deprecated.$br-4; - outline: deprecated.$br-4 solid var(--color-accent-primary); - text-align: initial; - width: calc(var(--th-width) + deprecated.$s-12); - height: var(--th-height, #{$thumbnail-default-height}); - } - - &.overlay { - border-radius: deprecated.$br-4; - border: deprecated.$s-2 solid var(--color-accent-tertiary); - height: 100%; - opacity: 0; - pointer-events: none; - position: absolute; - width: 100%; - z-index: deprecated.$z-index-1; - } - - &:hover .overlay { - display: block; - opacity: 1; - } - - .info-wrapper { - display: grid; - grid-template-columns: 1fr auto; - cursor: pointer; - max-width: var(--th-width, $thumbnail-default-width); - } - - .item-info { - display: grid; - padding: deprecated.$s-8; - text-align: left; - width: 100%; - font-size: deprecated.$fs-12; - - h3 { - border: deprecated.$s-1 solid transparent; - color: var(--color-foreground-primary); - font-size: deprecated.$fs-16; - font-weight: deprecated.$fw400; - height: deprecated.$s-28; - line-height: 1.92; - max-width: deprecated.$s-260; - overflow: hidden; - padding: 0; - text-overflow: ellipsis; - white-space: nowrap; - width: 100%; - - @media #{$bp-max-1366} { - max-width: deprecated.$s-232; - } - } - - .date { - color: var(--color-foreground-secondary); - overflow: hidden; - text-overflow: ellipsis; - width: 100%; - white-space: nowrap; - max-width: deprecated.$s-260; - - &::first-letter { - text-transform: capitalize; - } - - @media #{$bp-max-1366} { - max-width: deprecated.$s-232; - } - } - } - - .item-badge { - background-color: var(--color-accent-primary); - border: none; - border-radius: deprecated.$br-6; - position: absolute; - top: deprecated.$s-12; - right: deprecated.$s-12; - height: deprecated.$s-32; - width: deprecated.$s-32; - display: flex; - align-items: center; - justify-content: center; - - svg { - stroke: var(--color-background-secondary); - fill: none; - height: deprecated.$s-16; - width: deprecated.$s-16; - } - } - - &.add-file { - border: deprecated.$s-1 dashed var(--color-foreground-secondary); - justify-content: center; - box-shadow: none; - - span { - color: var(--color-background-primary); - font-size: deprecated.$fs-14; - } - - &:hover { - background-color: var(--color-foreground-primary); - border: deprecated.$s-2 solid var(--color-accent-tertiary); - } + inline-size: calc(var(--thumbnail-width) + var(--sp-m)); + block-size: var(--thumbnail-height, #{$thumbnail-default-height}); } } -.drag-counter { - position: absolute; - top: deprecated.$s-4; - left: deprecated.$s-4; - width: deprecated.$s-32; - height: deprecated.$s-32; - background-color: var(--color-accent-tertiary); - border-radius: deprecated.$br-circle; +.grid-item-info { + display: grid; + grid-template-columns: 1fr auto; + max-inline-size: var(--thumbnail-width, #{$thumbnail-default-width}); +} + +.grid-item-meta { + @include t.use-typography("body-small"); + + display: grid; + padding: var(--sp-s); + text-align: left; + inline-size: 100%; +} + +.grid-item-title { + @include t.use-typography("body-large"); + + border: $b-1 solid transparent; + color: var(--color-foreground-primary); + line-height: 1.92; + block-size: $sz-28; + max-inline-size: px2rem(260); + overflow: hidden; + padding: 0; + text-overflow: ellipsis; + white-space: nowrap; + inline-size: 100%; + + @media #{$bp-max-1366} { + max-inline-size: px2rem(232); + } +} + +.grid-item-date { + @include t.use-typography("body-small"); + + color: var(--color-foreground-secondary); + overflow: hidden; + text-overflow: ellipsis; + inline-size: 100%; + white-space: nowrap; + max-inline-size: px2rem(260); + + &::first-letter { + text-transform: capitalize; + } + + @media #{$bp-max-1366} { + max-inline-size: px2rem(232); + } +} + +.grid-item-badge { color: var(--color-background-secondary); - font-size: deprecated.$fs-16; + background-color: var(--color-accent-primary); + border: none; + border-radius: $br-6; + position: absolute; + inset-block-start: var(--sp-m); + inset-inline-end: var(--sp-m); + block-size: $sz-32; + inline-size: $sz-32; display: flex; - justify-content: center; align-items: center; + justify-content: center; } -// PROJECTS, ELEMENTS & ICONS GRID -.project-th { +.grid-item-thumbnail { + border-radius: $br-8; + block-size: var(--thumbnail-height, #{$thumbnail-default-height}); + inline-size: var(--thumbnail-width, #{$thumbnail-default-width}); + overflow: hidden; + position: relative; + text-align: initial; + background-size: cover; + + &.is-deleted { + opacity: 0.5; + } +} + +.grid-item-thumbnail-image { + object-fit: contain; + block-size: auto; + inline-size: 100%; +} + +// ─── CARD VIEW: PROJECT THUMBNAIL ────────────── + +.project-thumbnail { background-color: transparent; - border-radius: deprecated.$br-8; - padding-top: deprecated.$s-6; + border-radius: $br-8; + padding-block-start: $sz-6; + + &.library-item { + block-size: px2rem(612); + } &:hover, &:focus, &:focus-within { background-color: var(--color-background-tertiary); - .project-th-actions { + .project-thumbnail-actions { opacity: 1; } - - a { - text-decoration: none; - } } - .selected { - .grid-item-th { - outline: deprecated.$s-4 solid var(--color-accent-tertiary); - } + .is-selected .grid-item-thumbnail { + outline: px2rem(4) solid var(--color-accent-tertiary); } } -.project-th-actions { +.project-thumbnail-actions { align-items: center; display: flex; - height: 100%; + block-size: 100%; justify-content: center; opacity: 0; - right: deprecated.$s-6; - width: deprecated.$s-32; + inset-inline-end: $sz-6; + inline-size: $sz-32; - span { - color: var(--color-background-secondary); + &.is-force-display { + opacity: 1; } } -.project-th-icon { +.project-thumbnail-icon { align-items: center; display: flex; - margin-right: deprecated.$s-8; - margin-top: 0; + margin-inline-end: var(--sp-s); + margin-block-start: 0; } +// ─── CARD VIEW: MENU ─────────────────────────── + .menu { align-items: flex-end; display: flex; flex-direction: column; - height: deprecated.$s-32; + block-size: $sz-32; justify-content: center; - margin-right: 0; - margin-top: deprecated.$s-20; - width: 100%; + margin-inline-end: 0; + margin-block-start: var(--sp-xl); + inline-size: 100%; --menu-icon-color: var(--button-tertiary-foreground-color-rest); @@ -255,130 +222,219 @@ $thumbnail-default-height: deprecated.$s-168; // Default width } .menu-icon { - stroke: var(--menu-icon-color); - fill: none; - margin-right: 0; - height: deprecated.$s-16; - width: deprecated.$s-16; + color: var(--menu-icon-color); + margin-inline-end: 0; + block-size: $sz-16; + inline-size: $sz-16; } -.project-th-actions.force-display { - opacity: 1; -} +// ─── LIST VIEW ───────────────────────────────── -.grid-item-th { - border-radius: deprecated.$br-4; - cursor: pointer; - height: 100%; - overflow: hidden; - position: relative; - width: 100%; - display: flex; - justify-content: center; +.list-item { + align-items: stretch; flex-direction: row; + margin: 0; + text-align: initial; + inline-size: 100%; - .img-th { - height: auto; - width: 100%; - } -} - -// LIBRARY VIEW -.library { - height: deprecated.$s-580; -} - -.grid-item.project-th.library { - height: deprecated.$s-612; -} - -.grid-item-th.library { - background-color: var(--color-background-tertiary); - flex-direction: column; - height: 90%; - justify-content: flex-start; - max-height: deprecated.$s-580; - padding: deprecated.$s-32; - - .asset-section { - font-size: deprecated.$fs-12; - color: var(--color-foreground-secondary); - - &:not(:first-child) { - margin-top: deprecated.$s-16; - } + // Reuse the grid options menu, but neutralize the card-oriented offsets so + // it sits inline at the end of the row. + .project-thumbnail-actions { + flex: 0 0 auto; + block-size: auto; + opacity: 1; + inline-size: auto; } - .asset-title { - display: flex; - font-size: deprecated.$fs-12; - text-transform: uppercase; - - .num-assets { - color: var(--color-foreground-secondary); - } + .project-thumbnail-icon { + margin: 0; } - .asset-list-item { + .menu { align-items: center; - border-radius: deprecated.$br-4; - border: deprecated.$s-1 solid transparent; - color: var(--color-foreground-primary); - display: flex; - font-size: deprecated.$fs-12; - margin-top: deprecated.$s-4; - padding: deprecated.$s-2; - position: relative; - - .name-block { - color: var(--color-foreground-secondary); - width: calc(100% - deprecated.$s-24 - deprecated.$s-8); - } - - .item-name { - display: block; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - svg { - background-color: var(--color-canvas); - border-radius: deprecated.$br-4; - border: deprecated.$s-2 solid transparent; - height: deprecated.$s-24; - margin-right: deprecated.$s-8; - width: deprecated.$s-24; - } - - .color-name { - color: var(--color-foreground-primary); - } - - .color-value { - color: var(--color-foreground-secondary); - margin-left: deprecated.$s-4; - text-transform: uppercase; - } - - .typography-sample { - height: deprecated.$s-20; - margin-right: deprecated.$s-4; - width: deprecated.$s-20; - } + flex-direction: row; + block-size: $sz-32; + margin: 0; + inline-size: auto; } } -.color-item { +.list-item-dragged { + border-radius: $br-8; + block-size: $sz-48; + outline: $br-4 solid var(--color-accent-primary); + outline-offset: -$br-4; + inline-size: 100%; +} + +.list-item-row { + align-items: center; + border-radius: $br-8; + border: $b-1 solid var(--color-background-quaternary); + display: flex; + gap: var(--sp-m); + padding: var(--sp-s) var(--sp-m); + inline-size: 100%; + + &:hover, + &:focus, + &:focus-within { + background-color: var(--color-background-tertiary); + } + + &.is-selected { + background-color: var(--color-background-tertiary); + outline: $b-2 solid var(--color-accent-tertiary); + } +} + +.list-item-name { + @include t.use-typography("body-medium"); + + color: var(--color-foreground-primary); + flex: 0 1 auto; + margin: 0; + min-inline-size: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.list-item-badge { + align-items: center; + color: var(--color-background-secondary); + background-color: var(--color-accent-primary); + border-radius: $br-6; + display: flex; + flex: 0 0 auto; + justify-content: center; + block-size: $sz-24; + inline-size: $sz-24; +} + +.list-item-date { + @include t.use-typography("body-small"); + + color: var(--color-foreground-secondary); + flex: 0 0 auto; + margin-inline-start: auto; + white-space: nowrap; + + &::first-letter { + text-transform: capitalize; + } +} + +// ─── LIBRARY ─────────────────────────────────── + +.library-thumbnail { + border-radius: $br-4; + position: relative; + overflow: hidden; + background-color: var(--color-background-tertiary); + display: flex; + flex-direction: column; + block-size: 90%; + justify-content: flex-start; + max-block-size: px2rem(580); + padding: var(--sp-xxxl); +} + +.library-num-assets { + color: var(--color-foreground-secondary); +} + +.library-name-block { + color: var(--color-foreground-secondary); + inline-size: calc(100% - var(--sp-xxl) - var(--sp-s)); +} + +.library-item-name { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.library-asset-section { + @include t.use-typography("body-small"); + + color: var(--color-foreground-secondary); + + &:not(:first-child) { + margin-block-start: var(--sp-l); + } +} + +.library-asset-item { + @include t.use-typography("body-small"); + + display: flex; + align-items: center; + border-radius: $br-4; + border: $b-1 solid transparent; + color: var(--color-foreground-primary); + margin-block-start: var(--sp-xs); + padding: var(--sp-xxs); + position: relative; +} + +.library-asset-title { + @include t.use-typography("body-small"); + + display: flex; + text-transform: uppercase; +} + +.library-asset-icon { + background-color: var(--color-canvas); + border-radius: $br-4; + border: $b-2 solid transparent; + margin-inline-end: var(--sp-s); + block-size: $sz-24; + inline-size: $sz-24; +} + +.library-color-name { + color: var(--color-foreground-primary); +} + +.library-color-value { + color: var(--color-foreground-secondary); + margin-inline-start: var(--sp-xs); + text-transform: uppercase; +} + +.library-color-item { display: grid; grid-template-columns: auto 1fr; - gap: deprecated.$s-8; + gap: var(--sp-s); +} + +.library-typography-sample { + block-size: px2rem(20); + margin-inline-end: var(--sp-xs); + inline-size: px2rem(20); +} + +// ─── MISC ────────────────────────────────────── + +.drag-counter { + @include t.use-typography("body-large"); + + position: absolute; + inset-block-start: var(--sp-xs); + inset-inline-start: var(--sp-xs); + inline-size: $sz-32; + block-size: $sz-32; + background-color: var(--color-accent-tertiary); + border-radius: $br-circle; + color: var(--color-background-secondary); + display: flex; + justify-content: center; + align-items: center; } .grid-loader { - --icon-width: calc(var(--th-width, #{$thumbnail-default-width}) * 0.25); -} - -.deleted-item { - opacity: 0.5; + --icon-width: calc(var(--thumbnail-width, #{$thumbnail-default-width}) * 0.25); } diff --git a/frontend/src/app/main/ui/dashboard/layout_toggle.cljs b/frontend/src/app/main/ui/dashboard/layout_toggle.cljs new file mode 100644 index 0000000000..75bd938cbe --- /dev/null +++ b/frontend/src/app/main/ui/dashboard/layout_toggle.cljs @@ -0,0 +1,32 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns app.main.ui.dashboard.layout-toggle + "Reactive, persisted preference for how dashboard files are laid out + (as a grid of thumbnails or as a compact list). The preference is shared + between the team (projects) view and the project (files) view." + (:require + [app.main.ui.ds.controls.radio-buttons :refer [radio-buttons*]] + [app.main.ui.ds.foundations.assets.icon :as i] + [app.util.i18n :refer [tr]] + [rumext.v2 :as mf])) + +(def layout-key ::dashboard-layout) +(def default-layout :grid) + +(mf/defc layout-toggle* + [{:keys [layout on-change]}] + [:> radio-buttons* {:selected (name layout) + :on-change on-change + :name "dashboard-files-layout" + :options [{:id "dashboard-files-layout-list" + :value "list" + :icon i/view-as-list + :label (tr "dashboard.files-layout.list")} + {:id "dashboard-files-layout-grid" + :value "grid" + :icon i/view-as-icons + :label (tr "dashboard.files-layout.grid")}]}]) diff --git a/frontend/src/app/main/ui/dashboard/placeholder.cljs b/frontend/src/app/main/ui/dashboard/placeholder.cljs index 1c47e099b9..4161db7658 100644 --- a/frontend/src/app/main/ui/dashboard/placeholder.cljs +++ b/frontend/src/app/main/ui/dashboard/placeholder.cljs @@ -103,7 +103,7 @@ [:ul {:class (stl/css :grid-row :no-wrap) :style {:grid-template-columns (str "repeat(" limit ", 1fr)")}} - [:li {:class (stl/css :grid-item :grid-empty-placeholder :dragged)}]] + [:li {:class (stl/css :grid-item :grid-empty-placeholder :is-dragged)}]] (= :libraries origin) [:> empty-placeholder* diff --git a/frontend/src/app/main/ui/dashboard/placeholder.scss b/frontend/src/app/main/ui/dashboard/placeholder.scss index da0355bba4..cf17521433 100644 --- a/frontend/src/app/main/ui/dashboard/placeholder.scss +++ b/frontend/src/app/main/ui/dashboard/placeholder.scss @@ -49,8 +49,8 @@ cursor: pointer; margin: deprecated.$s-8; border: deprecated.$s-2 solid transparent; - width: var(--th-width, #{g.$thumbnail-default-width}); - height: var(--th-height, #{g.$thumbnail-default-height}); + width: var(--thumbnail-width, #{g.$thumbnail-default-width}); + height: var(--thumbnail-height, #{g.$thumbnail-default-height}); svg { width: deprecated.$s-32; diff --git a/frontend/src/app/main/ui/dashboard/projects.cljs b/frontend/src/app/main/ui/dashboard/projects.cljs index ee9ca03325..56e84ad53c 100644 --- a/frontend/src/app/main/ui/dashboard/projects.cljs +++ b/frontend/src/app/main/ui/dashboard/projects.cljs @@ -19,8 +19,9 @@ [app.main.refs :as refs] [app.main.store :as st] [app.main.ui.dashboard.deleted :as deleted] - [app.main.ui.dashboard.grid :refer [line-grid]] + [app.main.ui.dashboard.grid :refer [line-grid*]] [app.main.ui.dashboard.inline-edition :refer [inline-edition]] + [app.main.ui.dashboard.layout-toggle :as lt :refer [layout-toggle*]] [app.main.ui.dashboard.pin-button :refer [pin-button*]] [app.main.ui.dashboard.project-menu :refer [project-menu*]] [app.main.ui.ds.buttons.button :refer [button*]] @@ -50,16 +51,20 @@ (mf/defc header* {::mf/wrap [mf/memo] ::mf/private true} - [{:keys [can-edit]}] + [{:keys [can-edit layout on-change]}] (let [on-click (mf/use-fn #(st/emit! (dd/create-project)))] - [:header {:class (stl/css :dashboard-header) :data-testid "dashboard-header"} + [:header {:class (stl/css :dashboard-header) + :data-testid "dashboard-header"} [:div#dashboard-projects-title {:class (stl/css :dashboard-title)} [:h1 (tr "dashboard.projects-title")]] - (when can-edit - [:button {:class (stl/css :btn-secondary :btn-small) - :on-click on-click - :data-testid "new-project-button"} - (tr "dashboard.new-project")])])) + [:div {:class (stl/css :dashboard-header-actions)} + [:> layout-toggle* {:layout layout + :on-change on-change}] + (when can-edit + [:button {:class (stl/css :btn-secondary :btn-small) + :on-click on-click + :data-testid "new-project-button"} + (tr "dashboard.new-project")])]])) (mf/defc team-hero* {::mf/wrap [mf/memo]} @@ -99,7 +104,7 @@ (mf/defc project-item* {::mf/private true} - [{:keys [project is-first team files can-edit]}] + [{:keys [project is-first team files can-edit layout]}] (let [project-id (get project :id) team-id (get team :id) @@ -285,13 +290,13 @@ (tr "dashboard.empty-placeholder-drafts-subtitle") (tr "dashboard.empty-placeholder-files-subtitle"))}] - [:& line-grid - {:project project - :team team - :files files - :create-fn create-file - :can-edit can-edit - :limit limit}])] + [:> line-grid* {:project project + :team team + :files files + :create-fn create-file + :can-edit can-edit + :limit limit + :layout layout}])] (when (and (> limit 0) (> file-count limit)) @@ -329,6 +334,14 @@ show-deleted? (:can-edit permisions) + layout* (hooks/use-persisted-state lt/layout-key lt/default-layout) + layout (deref layout*) + + on-layout-change + (mf/use-fn + (fn [value] + (reset! layout* (keyword value)))) + projects (mf/with-memo [projects] (->> projects @@ -360,7 +373,9 @@ (when (seq projects) [:* - [:> header* {:can-edit can-edit}] + [:> header* {:can-edit can-edit + :layout layout + :on-change on-layout-change}] [:div {:class (stl/css :projects-container)} [:* (when (and show-team-hero? @@ -377,7 +392,8 @@ can-invite))} (when show-deleted? - [:> deleted/menu* {:team-id team-id :section :dashboard-recent}]) + [:> deleted/menu* {:team-id team-id + :section :dashboard-recent}]) (for [{:keys [id] :as project} projects] ;; FIXME: refactor this, looks inneficient @@ -389,5 +405,6 @@ :team team :files files :can-edit can-edit + :layout layout :is-first (= project (first projects)) :key id}]))]]]]))) diff --git a/frontend/src/app/main/ui/hooks.cljs b/frontend/src/app/main/ui/hooks.cljs index ae8ebd30d5..ed13c36e4e 100644 --- a/frontend/src/app/main/ui/hooks.cljs +++ b/frontend/src/app/main/ui/hooks.cljs @@ -438,8 +438,8 @@ [th-size] (when th-size (let [node (mf/ref-val rowref)] - (.setProperty (.-style node) "--th-width" (str th-size "px")) - (.setProperty (.-style node) "--th-height" (str (mth/ceil (* th-size (/ 2 3))) "px"))))) + (.setProperty (.-style node) "--thumbnail-width" (str th-size "px")) + (.setProperty (.-style node) "--thumbnail-height" (str (mth/ceil (* th-size (/ 2 3))) "px"))))) (mf/with-effect [] (let [node (mf/ref-val rowref) diff --git a/frontend/translations/en.po b/frontend/translations/en.po index ea0d60d7ec..19767f7192 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -490,6 +490,14 @@ msgstr "Once a project member creates a file, it will be displayed here." msgid "dashboard.empty-placeholder-files-title" msgstr "No files yet." +#: src/app/main/ui/dashboard/files_layout.cljs +msgid "dashboard.files-layout.grid" +msgstr "Grid view" + +#: src/app/main/ui/dashboard/files_layout.cljs +msgid "dashboard.files-layout.list" +msgstr "List view" + #: src/app/main/ui/dashboard/placeholder.cljs:117 #, markdown msgid "dashboard.empty-placeholder-libraries" diff --git a/frontend/translations/es.po b/frontend/translations/es.po index d117f9ca38..9bfa667435 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -495,6 +495,14 @@ msgstr "Cuando un miembro del equipo cree algún archivo, este aparecerá aquí. msgid "dashboard.empty-placeholder-files-title" msgstr "Aún no hay archivos." +#: src/app/main/ui/dashboard/files_layout.cljs +msgid "dashboard.files-layout.grid" +msgstr "Vista de cuadrícula" + +#: src/app/main/ui/dashboard/files_layout.cljs +msgid "dashboard.files-layout.list" +msgstr "Vista de lista" + #: src/app/main/ui/dashboard/placeholder.cljs:117 #, markdown msgid "dashboard.empty-placeholder-libraries" From 5dff551f3128f71f6e4318d2945ee7678a60d992 Mon Sep 17 00:00:00 2001 From: Juan de la Cruz Date: Tue, 21 Jul 2026 14:26:03 +0200 Subject: [PATCH 109/229] :tada: Add page multi-selection in the workspace sitemap (#10581) * :tada: Add page multi-selection in the workspace sitemap * :recycle: Simplify page selection state updates with single assoc * :bug: Fix SCSS issue * :recycle: Update some components to new syntax * :recycle: Adapt SCSS to the new guidelines * :recycle: SCSS cleanup --------- Co-authored-by: Luis de Dios --- frontend/src/app/main/data/workspace.cljs | 22 +- .../src/app/main/data/workspace/pages.cljs | 104 ++++++- frontend/src/app/main/refs.cljs | 4 + .../app/main/ui/workspace/context_menu.cljs | 29 +- .../main/ui/workspace/sidebar/sitemap.cljs | 187 ++++++------ .../main/ui/workspace/sidebar/sitemap.scss | 273 ++++++------------ frontend/translations/en.po | 12 + frontend/translations/es.po | 12 + 8 files changed, 372 insertions(+), 271 deletions(-) diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 6ed0feec97..fc2404f39b 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -1207,9 +1207,20 @@ (dm/assert! (gpt/point? position)) (ptk/reify ::show-page-item-context-menu ptk/WatchEvent - (watch [_ _ _] - (rx/of (show-context-menu - (-> params (assoc :kind :page :selected (:id page)))))))) + (watch [_ state _] + (let [id (:id page) + selected (dm/get-in state [:workspace-local :selected-pages]) + ;; When the right-clicked page is part of a multi-selection we + ;; keep it; otherwise the menu targets just that page. + multi? (and (contains? selected id) (> (count selected) 1))] + (rx/concat + (if multi? + (rx/empty) + (rx/of (dwpg/select-page id))) + (rx/of (show-context-menu + (-> params (assoc :kind :page + :selected id + :selected-pages (if multi? selected #{id})))))))))) (defn show-track-context-menu [{:keys [grid-id type index] :as params}] @@ -1651,6 +1662,11 @@ (dm/export dwpg/duplicate-page) (dm/export dwpg/rename-page) (dm/export dwpg/delete-page) +(dm/export dwpg/delete-pages) +(dm/export dwpg/select-page) +(dm/export dwpg/toggle-page-selection) +(dm/export dwpg/select-pages-range) +(dm/export dwpg/clear-page-selection) ;; Shapes (dm/export dwsh/delete-shapes) diff --git a/frontend/src/app/main/data/workspace/pages.cljs b/frontend/src/app/main/data/workspace/pages.cljs index 37d12730b8..0bfa559469 100644 --- a/frontend/src/app/main/data/workspace/pages.cljs +++ b/frontend/src/app/main/data/workspace/pages.cljs @@ -135,7 +135,8 @@ ptk/UpdateEvent (update [_ state] (let [local (-> (:workspace-local state) - (dissoc :edition :edit-path :selected)) + (dissoc :edition :edit-path :selected + :selected-pages :selected-pages-anchor)) exit? (not= :workspace (rt/lookup-name state)) state (-> state (update :workspace-cache assoc [file-id page-id] local) @@ -395,3 +396,104 @@ (rx/of (dch/commit-changes changes) (when (= id (:current-page-id state)) (dcm/go-to-workspace {:page-id (first pages)}))))))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Page selection (sitemap multi-selection) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defn clear-page-selection + "Clear the sitemap multi-selection state." + [] + (ptk/reify ::clear-page-selection + ptk/UpdateEvent + (update [_ state] + (update state :workspace-local dissoc :selected-pages :selected-pages-anchor)))) + +(defn select-page + "Set the sitemap selection to a single page (plain click). It also + sets the anchor used by range (shift+click) selection." + [id] + (ptk/reify ::select-page + ptk/UpdateEvent + (update [_ state] + (update state :workspace-local assoc + :selected-pages (d/ordered-set id) + :selected-pages-anchor id)))) + +(defn toggle-page-selection + "Add or remove a page from the sitemap multi-selection (ctrl/cmd + click)." + [id] + (ptk/reify ::toggle-page-selection + ptk/UpdateEvent + (update [_ state] + (let [current-id (:current-page-id state) + selected (or (not-empty (dm/get-in state [:workspace-local :selected-pages])) + (d/ordered-set current-id)) + selected (if (contains? selected id) + (disj selected id) + (conj selected id))] + (update state :workspace-local assoc + :selected-pages selected + :selected-pages-anchor id))))) + +(defn select-pages-range + "Select every page between the current anchor and `id`, both included + (shift + click). The anchor is kept unchanged." + [id] + (ptk/reify ::select-pages-range + ptk/UpdateEvent + (update [_ state] + (let [current-id (:current-page-id state) + pages (-> (dsh/lookup-file-data state) :pages vec) + anchor (or (dm/get-in state [:workspace-local :selected-pages-anchor]) + current-id) + a-idx (d/index-of pages anchor) + b-idx (d/index-of pages id)] + (if (and (some? a-idx) (some? b-idx)) + (let [start (min a-idx b-idx) + end (inc (max a-idx b-idx)) + range (subvec pages start end)] + (update state :workspace-local assoc + :selected-pages (into (d/ordered-set) range))) + state))))) + +(defn delete-pages + "Delete a collection of pages in a single change (single undo entry), + always keeping at least one page in the file." + [ids] + (ptk/reify ::delete-pages + ptk/WatchEvent + (watch [it state _] + (let [file-id (:current-file-id state) + fdata (dsh/lookup-file-data state file-id) + pindex (:pages-index fdata) + pages (:pages fdata) + + ids (set ids) + ;; A file must keep at least one page: if every page is + ;; selected, keep the first one in page order. + ids (if (>= (count ids) (count pages)) + (set (rest (filter ids pages))) + ids) + + ;; Pages to delete, in page order. + del-ids (filter ids pages) + remaining (remove ids pages) + + changes (reduce + (fn [changes id] + (let [page (-> (get pindex id) + (assoc :index (d/index-of pages id)))] + (-> changes + (delete-page-components page) + (pcb/del-page page)))) + (-> (pcb/empty-changes it) + (pcb/with-library-data fdata)) + del-ids)] + + (if (empty? del-ids) + (rx/empty) + (rx/of (dch/commit-changes changes) + (clear-page-selection) + (when (contains? ids (:current-page-id state)) + (dcm/go-to-workspace {:page-id (first remaining)})))))))) diff --git a/frontend/src/app/main/refs.cljs b/frontend/src/app/main/refs.cljs index cf6e9e17f9..08d0a3ab7a 100644 --- a/frontend/src/app/main/refs.cljs +++ b/frontend/src/app/main/refs.cljs @@ -253,6 +253,10 @@ (def editing-page-item (l/derived :page-item workspace-local)) +;; set of pages selected in the sitemap (multi-selection) +(def selected-pages + (l/derived :selected-pages workspace-local)) + (def current-hover-ids (l/derived :hover-ids context-menu)) diff --git a/frontend/src/app/main/ui/workspace/context_menu.cljs b/frontend/src/app/main/ui/workspace/context_menu.cljs index 6d1384790c..d79a194163 100644 --- a/frontend/src/app/main/ui/workspace/context_menu.cljs +++ b/frontend/src/app/main/ui/workspace/context_menu.cljs @@ -705,6 +705,8 @@ [{:keys [mdata]}] (let [page (:page mdata) deletable? (:deletable? mdata) + selected-pages (:selected-pages mdata) + multi? (> (count selected-pages) 1) id (:id page) delete-fn #(st/emit! (dw/delete-page id)) do-delete #(st/emit! (modal/show @@ -712,20 +714,31 @@ :title (tr "modals.delete-page.title") :message (tr "modals.delete-page.body") :on-accept delete-fn})) + delete-many-fn #(st/emit! (dw/delete-pages selected-pages)) + do-delete-many #(st/emit! (modal/show + {:type :confirm + :title (tr "modals.delete-pages.title") + :message (tr "modals.delete-pages.body") + :on-accept delete-many-fn})) do-duplicate #(st/emit! (dw/duplicate-page id) (ev/event {::ev/name "duplicate-page"})) do-rename #(st/emit! (dw/start-rename-page-item id))] - [:* - (when deletable? - [:> menu-entry* {:title (tr "workspace.assets.delete") - :on-click do-delete}]) + (if multi? + ;; When several pages are selected, the only available action is + ;; deleting all of them at once. + [:> menu-entry* {:title (tr "workspace.assets.delete-pages") + :on-click do-delete-many}] + [:* + (when deletable? + [:> menu-entry* {:title (tr "workspace.assets.delete") + :on-click do-delete}]) - [:> menu-entry* {:title (tr "workspace.assets.rename") - :on-click do-rename}] - [:> menu-entry* {:title (tr "workspace.assets.duplicate") - :on-click do-duplicate}]])) + [:> menu-entry* {:title (tr "workspace.assets.rename") + :on-click do-rename}] + [:> menu-entry* {:title (tr "workspace.assets.duplicate") + :on-click do-duplicate}]]))) (mf/defc viewport-context-menu* [] diff --git a/frontend/src/app/main/ui/workspace/sidebar/sitemap.cljs b/frontend/src/app/main/ui/workspace/sidebar/sitemap.cljs index 3283050d23..bcb0771477 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/sitemap.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/sitemap.cljs @@ -62,9 +62,10 @@ ;; --- Page Item -(mf/defc page-item - {::mf/wrap-props false} - [{:keys [page index deletable? selected? editing? hovering? current-page-id]}] +(mf/defc page-item* + {::mf/private true + ::mf/wrap-props false} + [{:keys [page index is-deletable is-selected is-editing is-hovering current-page-id]}] (let [input-ref (mf/use-ref) id (:id page) name (:name page "") @@ -76,38 +77,53 @@ on-click (mf/use-fn (mf/deps id current-page-id is-separator?) - (fn [] + (fn [event] (when-not is-separator? - ;; WASM page transitions: - ;; - Capture the current page (A) once - ;; - Show a blurred snapshot while the target page (B/C/...) renders - ;; - If the user clicks again during the transition, keep showing the original (A) snapshot - (if (and (features/active-feature? @st/state "render-wasm/v1") - (not= id current-page-id)) - (-> (if @wasm.api/page-transition? - (p/resolved nil) - ;; Blur with Skia, then capture the already-blurred frame. - (do (wasm.api/render-blurred-snapshot!) - (wasm.api/capture-canvas-snapshot))) - (p/finally - (fn [] - (wasm.api/apply-canvas-blur) - ;; Two RAF so the overlay paints before navigation. - (timers/raf - (fn [] - (timers/raf navigate-fn)))))) - (navigate-fn))))) + (cond + ;; Shift + click: select the range of pages from the anchor + ;; to this page (does not navigate). + (kbd/shift? event) + (st/emit! (dw/select-pages-range id)) + + ;; Ctrl/Cmd + click: add/remove this page to/from the + ;; multi-selection (does not navigate). + (kbd/mod? event) + (st/emit! (dw/toggle-page-selection id)) + + ;; Plain click: reset the selection to this page and + ;; navigate to it. + :else + (do + (st/emit! (dw/select-page id)) + ;; WASM page transitions: + ;; - Capture the current page (A) once + ;; - Show a blurred snapshot while the target page (B/C/...) renders + ;; - If the user clicks again during the transition, keep showing the original (A) snapshot + (if (and (features/active-feature? @st/state "render-wasm/v1") + (not= id current-page-id)) + (-> (if @wasm.api/page-transition? + (p/resolved nil) + ;; Blur with Skia, then capture the already-blurred frame. + (do (wasm.api/render-blurred-snapshot!) + (wasm.api/capture-canvas-snapshot))) + (p/finally + (fn [] + (wasm.api/apply-canvas-blur) + ;; Two RAF so the overlay paints before navigation. + (timers/raf + (fn [] + (timers/raf navigate-fn)))))) + (navigate-fn))))))) on-delete (mf/use-fn (mf/deps id) (fn [event] (dom/stop-propagation event) - (st/emit! (modal/show - {:type :confirm - :title (tr "modals.delete-page.title") - :message (tr "modals.delete-page.body") - :on-accept delete-fn})))) + (st/emit! (modal/show {:type :confirm + :title (tr "modals.delete-page.title") + :message (tr "modals.delete-page.body") + :on-accept delete-fn})))) on-double-click (mf/use-fn @@ -153,7 +169,7 @@ :data {:id id :index index :name (:name page)} - :draggable? (and (not read-only?) (not editing?))) + :draggable? (and (not read-only?) (not is-editing))) on-context-menu (mf/use-fn @@ -166,50 +182,49 @@ (st/emit! (dw/show-page-item-context-menu {:position position :page page - :deletable? deletable?}))))))] + :deletable? is-deletable}))))))] (mf/use-effect - (mf/deps selected?) + (mf/deps is-selected) (fn [] - (when selected? + (when is-selected (let [node (mf/ref-val dref)] (dom/scroll-into-view-if-needed! node))))) (mf/use-layout-effect - (mf/deps editing?) + (mf/deps is-editing) (fn [] - (when editing? + (when is-editing (let [edit-input (mf/ref-val input-ref)] (dom/select-text! edit-input)) nil))) - (let [selected? (and selected? (not is-separator?))] - [:li {:class (stl/css-case - :page-element true - :separator is-separator? - :selected selected? - :dnd-over-top (= (:over dprops) :top) - :dnd-over-bot (= (:over dprops) :bot)) + (let [selected? (and is-selected (not is-separator?))] + [:li {:class (stl/css-case :page-item true + :separator is-separator? + :selected selected? + :dnd-over-top (= (:over dprops) :top) + :dnd-over-bot (= (:over dprops) :bot)) :ref dref} - [:div {:class (stl/css-case - :element-list-body true - :separator-body is-separator? - :hover (and hovering? (not is-separator?)) - :selected selected?) + [:div {:class (stl/css-case :page-item-body true + :separator is-separator? + :hover (and is-hovering (not is-separator?)) + :selected selected?) :data-testid (dm/str "page-" id) :tab-index "0" :on-click on-click :on-double-click on-double-click :on-context-menu on-context-menu} - (if (and is-separator? (not editing?)) - [:div {:class (stl/css :page-separator) + (if (and is-separator? (not is-editing)) + [:div {:class (stl/css :page-divider) :data-testid "page-separator"}] [:* (when-not is-separator? - [:div {:class (stl/css :page-icon)} - [:> icon* {:icon-id i/document :size "s"}]]) - (if editing? - [:input {:class (stl/css :element-name) + [:div {:class (stl/css :page-item-icon)} + [:> icon* {:icon-id i/document + :size "s"}]]) + (if is-editing + [:input {:class (stl/css :page-item-input) :type "text" :ref input-ref :on-blur on-blur @@ -217,32 +232,35 @@ :auto-focus true :default-value name}] [:* - [:span {:class (stl/css :page-name) :title name :data-testid "page-name"} + [:span {:class (stl/css :page-item-label) + :title name + :data-testid "page-name"} name] - [:div {:class (stl/css :page-actions)} - (when (and deletable? (not read-only?)) + [:div {:class (stl/css :page-item-actions)} + (when (and is-deletable (not read-only?)) [:> icon-button* {:variant "action" :aria-label (tr "modals.delete-page.title") :on-click on-delete :icon-size "s" - :class (stl/css :page-delete-button) - :icon-class (stl/css :page-delete-button-icon) + :class (stl/css :page-delete-btn) + :icon-class (stl/css :page-delete-icon) :icon i/delete}])]])])]]))) ;; --- Page Item Wrapper -(mf/defc page-item-wrapper - {::mf/wrap-props false} - [{:keys [page-id index deletable? selected? editing? current-page-id]}] +(mf/defc page-item-wrapper* + {::mf/private true + ::mf/wrap-props false} + [{:keys [page-id index is-deletable is-selected is-editing current-page-id]}] (let [page-ref (mf/with-memo [page-id] (make-page-ref page-id)) page (mf/deref page-ref)] - [:& page-item {:page page - :index index - :current-page-id current-page-id - :deletable? deletable? - :selected? selected? - :editing? editing?}])) + [:> page-item* {:page page + :index index + :current-page-id current-page-id + :is-deletable is-deletable + :is-selected is-selected + :is-editing is-editing}])) ;; --- Pages List @@ -252,18 +270,23 @@ (let [pages (:pages file) deletable? (> (count pages) 1) editing-page-id (mf/deref refs/editing-page-item) - current-page-id (mf/use-ctx ctx/current-page-id)] - [:ul {:class (stl/css :page-list)} + selected-pages (mf/deref refs/selected-pages) + current-page-id (mf/use-ctx ctx/current-page-id) + ;; When there is no explicit multi-selection, the current page + ;; is the selected one. + selected-pages (if (seq selected-pages) + selected-pages + #{current-page-id})] + [:ul [:> hooks/sortable-container* {} (for [[index page-id] (d/enumerate pages)] - [:& page-item-wrapper - {:page-id page-id - :index index - :deletable? deletable? - :editing? (= page-id editing-page-id) - :selected? (= page-id current-page-id) - :current-page-id current-page-id - :key page-id}])]])) + [:> page-item-wrapper* {:page-id page-id + :index index + :is-deletable deletable? + :is-editing (= page-id editing-page-id) + :is-selected (contains? selected-pages page-id) + :current-page-id current-page-id + :key page-id}])]])) ;; --- Sitemap Toolbox @@ -276,7 +299,8 @@ on-create (mf/use-fn (mf/deps file-id project-id) (fn [event] - (st/emit! (dw/create-page {:file-id file-id :project-id project-id})) + (st/emit! (dw/create-page {:file-id file-id + :project-id project-id})) (-> event dom/get-current-target dom/blur!))) read-only? (mf/use-ctx ctx/workspace-read-only?) @@ -289,7 +313,7 @@ :collapsed collapsed :on-collapsed on-toggle-collapsed :title (tr "workspace.sidebar.sitemap") - :class (stl/css :title-spacing-sitemap)} + :class (stl/css :sitemap-title)} (if ^boolean read-only? (when ^boolean (:can-edit permissions) @@ -297,12 +321,11 @@ :size :small :content (tr "labels.view-only")}]) [:> icon-button* {:variant "ghost" - :class (stl/css :add-page) :aria-label (tr "workspace.sidebar.sitemap.add-page") :on-click on-create :icon i/add}])] (when-not ^boolean collapsed - [:div {:class (stl/css :tool-window-content)} - [:> pages-list* {:file file :key (dm/str (:id file))}]])])) - + [:div {:class (stl/css :sitemap-content)} + [:> pages-list* {:key (dm/str (:id file)) + :file file}]])])) diff --git a/frontend/src/app/main/ui/workspace/sidebar/sitemap.scss b/frontend/src/app/main/ui/workspace/sidebar/sitemap.scss index fb5e59cde6..4bfbe1c95d 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/sitemap.scss +++ b/frontend/src/app/main/ui/workspace/sidebar/sitemap.scss @@ -4,236 +4,155 @@ // // Copyright (c) KALEIDOS INC Sucursal en España SL -@use "refactor/common-refactor.scss" as deprecated; +@use "ds/_utils.scss" as *; @use "ds/_borders.scss" as *; +@use "ds/_sizes.scss" as *; +@use "ds/spacing.scss" as *; +@use "ds/typography.scss" as t; +@use "ds/mixins.scss" as *; .sitemap { position: relative; display: flex; flex-direction: column; flex: 1; - width: 100%; - height: var(--height, deprecated.$s-200); + inline-size: 100%; + block-size: var(--height, $sz-200); } -.title { - margin-left: deprecated.$s-2; - color: var(--title-foreground-color-hover); +.sitemap-title { + padding-inline-start: var(--sp-s); + margin-block: var(--sp-s) var(--sp-xs); } -.resize-area { - position: absolute; - bottom: calc(-1 * deprecated.$s-8); - left: 0; - width: 100%; - height: deprecated.$s-12; - border-top: deprecated.$s-2 solid var(--resize-area-border-color); - background-color: var(--resize-area-background-color); - cursor: ns-resize; - - &:hover { - border-color: var(--resize-area-border-color); - } -} - -.tool-window-content { +.sitemap-content { display: flex; flex-direction: column; - height: calc(-38px + var(--height, deprecated.$s-200)); - width: var(--left-sidebar-width); + inline-size: var(--left-sidebar-width); overflow: hidden auto; scrollbar-gutter: stable; - - .element-list { - display: grid; - } } -.pages-list { - width: 100%; - max-height: deprecated.$s-152; - margin-bottom: deprecated.$s-12; -} +.page-item { + @include t.use-typography("body-small"); -.page-delete-button { - --delete-button-display: none; -} - -.page-delete-button-icon { - display: var(--delete-button-display); -} - -.page-element { - @include deprecated.body-small-typography; - - min-height: deprecated.$s-32; - width: 100%; - cursor: pointer; + min-block-size: $sz-32; + inline-size: 100%; &.dnd-over-top { - border-top: deprecated.$s-1 solid var(--layer-row-foreground-color-drag); + border-block-start: $b-1 solid var(--layer-row-foreground-color-drag); } &.dnd-over-bot { - border-bottom: deprecated.$s-1 solid var(--layer-row-foreground-color-drag); + border-block-end: $b-1 solid var(--layer-row-foreground-color-drag); } - .dnd-over > .element-list-body { - border: deprecated.$s-1 solid var(--layer-row-foreground-color-drag); - } - - .element-list-body { + .page-item-body { display: flex; align-items: center; - height: deprecated.$s-32; - width: 100%; - padding: 0 deprecated.$s-12 0 0; + block-size: $sz-32; + inline-size: 100%; + padding: 0 var(--sp-m) 0 0; transition: none; color: var(--layer-row-foreground-color); + user-select: none; - .page-name { - @include deprecated.text-ellipsis; - - flex-grow: 1; - padding-left: deprecated.$s-2; - } - - .page-icon { - @include deprecated.flex-center; - - padding: 0 deprecated.$s-4 0 deprecated.$s-8; - } - - .page-actions { - height: deprecated.$s-32; - display: flex; - align-items: center; - } - - .element-name { - @include deprecated.text-ellipsis; - - color: var(--layer-row-foreground-color-focus); - } - - input.element-name { - @include deprecated.text-ellipsis; - @include deprecated.body-small-typography; - @include deprecated.remove-input-style; - - flex-grow: 1; - height: deprecated.$s-28; - max-width: calc(var(--parent-size) - (var(--depth) * var(--layer-indentation-size))); - padding-left: deprecated.$s-6; - margin: 0; - border-radius: deprecated.$br-8; - border: deprecated.$s-1 solid var(--input-border-color-focus); - color: var(--layer-row-foreground-color); + &.separator { + block-size: auto; + min-block-size: var(--sp-xxxl); + padding: 0; } } - &:active, - &.on-drag { - .element-list-body { - color: var(--layer-row-foreground-color-drag); - background-color: var(--layer-row-background-color-drag); + .page-item-label { + @include text-ellipsis; - .page-icon svg { - stroke: var(--layer-row-foreground-color-drag); - } - } + flex-grow: 1; + padding-inline-start: var(--sp-xxs); } - &.selected, - &.selected:hover { - .element-list-body { - color: var(--layer-row-foreground-color-selected); - background-color: var(--layer-row-background-color-selected); - box-shadow: deprecated.$s-16 deprecated.$s-0 deprecated.$s-0 deprecated.$s-0 - var(--layer-row-background-color-selected); - - .page-icon svg { - stroke: var(--layer-row-foreground-color-selected); - } - } + .page-item-icon { + display: flex; + justify-content: center; + align-items: center; + padding: 0 var(--sp-xs) 0 var(--sp-s); } - &:hover, - &.hover { - .element-list-body { - color: var(--layer-row-foreground-color-hover); - background-color: var(--layer-row-background-color-hover); - box-shadow: deprecated.$s-16 deprecated.$s-0 deprecated.$s-0 deprecated.$s-0 - var(--layer-row-background-color-hover); - - .page-actions button { - opacity: deprecated.$op-10; - - --delete-button-display: initial; - } - - .page-icon svg { - stroke: var(--layer-row-foreground-color-hover); - } - } + .page-item-actions { + block-size: $sz-32; + display: flex; + align-items: center; } - &:focus { - .element-list-body { - color: var(--layer-row-foreground-color-focus); - border: deprecated.$s-1 solid var(--layer-row-border-color-focus); - outline: none; + .page-item-input { + @include text-ellipsis; + @include t.use-typography("body-small"); - .page-actions button { - opacity: deprecated.$op-10; - } - } + background: none; + outline: none; + flex-grow: 1; + block-size: $sz-28; + max-inline-size: calc(var(--parent-size) - (var(--depth) * var(--layer-indentation-size))); + padding-inline-start: $sz-6; + margin: 0; + border-radius: $br-8; + border: $b-1 solid var(--input-border-color-focus); + color: var(--layer-row-foreground-color); } - &:focus-within { - .element-list-body { - outline: none; - - .page-actions button { - opacity: deprecated.$op-10; - } - } + &:active .page-item-body { + color: var(--layer-row-foreground-color-drag); + background-color: var(--layer-row-background-color-drag); } - &.hidden { - .element-list-body { - color: var(--layer-row-foreground-color-hidden); - background-color: var(--layer-row-background-color-hidden); - opacity: deprecated.$op-7; + &.selected .page-item-body, + &.selected:hover .page-item-body { + color: var(--layer-row-foreground-color-selected); + background-color: var(--layer-row-background-color-selected); + box-shadow: $sz-16 0 0 0 var(--layer-row-background-color-selected); + } - .page-icon svg { - stroke: var(--layer-row-foreground-color-hidden); - } - } + &:hover .page-item-body, + &.hover .page-item-body { + color: var(--layer-row-foreground-color-hover); + background-color: var(--layer-row-background-color-hover); + box-shadow: $sz-16 0 0 0 var(--layer-row-background-color-hover); + } + + &:hover .page-delete-btn, + &.hover .page-delete-btn { + --delete-button-display: initial; + } + + &:focus .page-item-body { + color: var(--layer-row-foreground-color-focus); + border: $b-1 solid var(--layer-row-border-color-focus); + outline: none; + } + + &:focus-within .page-item-body { + outline: none; + } + + &.separator:hover .page-item-body, + &.separator.hover .page-item-body { + color: var(--layer-row-foreground-color); + background-color: transparent; + box-shadow: none; } } -.element-list-body.separator-body { - height: auto; - min-height: var(--sp-xxxl); - padding: 0; -} - -.page-separator { - width: 100%; - height: $b-1; +.page-divider { + inline-size: 100%; + block-size: $b-1; margin: var(--sp-s); background-color: var(--color-background-quaternary); } -.page-element.separator:hover .element-list-body, -.page-element.separator.hover .element-list-body { - color: var(--layer-row-foreground-color); - background-color: transparent; - box-shadow: none; +.page-delete-btn { + --delete-button-display: none; } -.title-spacing-sitemap { - padding-inline-start: deprecated.$s-8; - margin-block: deprecated.$s-8 deprecated.$s-4; +.page-delete-icon { + display: var(--delete-button-display); } diff --git a/frontend/translations/en.po b/frontend/translations/en.po index 19767f7192..d54c01b33e 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -3926,6 +3926,14 @@ msgstr "Are you sure you want to delete this page?" msgid "modals.delete-page.title" msgstr "Delete page" +#: src/app/main/ui/workspace/context_menu.cljs:712 +msgid "modals.delete-pages.body" +msgstr "Are you sure you want to delete the selected pages?" + +#: src/app/main/ui/workspace/context_menu.cljs:711 +msgid "modals.delete-pages.title" +msgstr "Delete pages" + #: src/app/main/ui/dashboard/project_menu.cljs:73 msgid "modals.delete-project-confirm.accept" msgstr "Delete project" @@ -6441,6 +6449,10 @@ msgstr "Your items are going to be named automatically as \"group name / item na msgid "workspace.assets.delete" msgstr "Delete" +#: src/app/main/ui/workspace/context_menu.cljs:733 +msgid "workspace.assets.delete-pages" +msgstr "Delete pages" + #: src/app/main/ui/workspace/sidebar/assets/groups.cljs:74 msgid "workspace.assets.delete-group" msgstr "Delete group" diff --git a/frontend/translations/es.po b/frontend/translations/es.po index 9bfa667435..581aeb3551 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -3810,6 +3810,14 @@ msgstr "¿Seguro que quieres borrar esta página?" msgid "modals.delete-page.title" msgstr "Borrar página" +#: src/app/main/ui/workspace/context_menu.cljs:712 +msgid "modals.delete-pages.body" +msgstr "¿Seguro que quieres borrar las páginas seleccionadas?" + +#: src/app/main/ui/workspace/context_menu.cljs:711 +msgid "modals.delete-pages.title" +msgstr "Borrar páginas" + #: src/app/main/ui/dashboard/project_menu.cljs:73 msgid "modals.delete-project-confirm.accept" msgstr "Eliminar proyecto" @@ -6317,6 +6325,10 @@ msgstr "" msgid "workspace.assets.delete" msgstr "Borrar" +#: src/app/main/ui/workspace/context_menu.cljs:733 +msgid "workspace.assets.delete-pages" +msgstr "Borrar páginas" + #: src/app/main/ui/workspace/context_menu.cljs:721, src/app/main/ui/workspace/sidebar/assets/colors.cljs:262, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:537 msgid "workspace.assets.duplicate" msgstr "Duplicar" From b8e3089ae730de6a5d84383ede7f36fbfed0a4fa Mon Sep 17 00:00:00 2001 From: AK <144495202+AKnassa@users.noreply.github.com> Date: Wed, 22 Jul 2026 03:29:19 -0400 Subject: [PATCH 110/229] :sparkles: Make plugin API validation errors precise and crash-safe (#10667) Schema validation reported a generic "Invalid data" message. Report the expected schema and the received value, with a bounded cycle-safe renderer so the error path cannot itself crash. Fixes #10072 Signed-off-by: Akshit Nassa Co-authored-by: Akshit Nassa --- frontend/src/app/plugins/utils.cljs | 209 +++++++++++++++++- .../frontend_tests/plugins/utils_test.cljs | 204 ++++++++++++++++- frontend/translations/en.po | 10 +- 3 files changed, 420 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/plugins/utils.cljs b/frontend/src/app/plugins/utils.cljs index 0bbf358e20..49622d9710 100644 --- a/frontend/src/app/plugins/utils.cljs +++ b/frontend/src/app/plugins/utils.cljs @@ -328,10 +328,217 @@ [[(str/join "." path) (:message v)]]))) m))) +(def ^:private max-repr-length 100) +(def ^:private max-repr-depth 2) +(def ^:private max-repr-items 5) + +(defn- abbreviate + "Shorten `s` to `max-repr-length` code points. Cutting on a UTF-16 code + unit would split surrogate pairs and render astral characters as mojibake." + [s] + (if (> (count s) max-repr-length) + (let [points (js/Array.from s)] + (if (> (alength points) max-repr-length) + (dm/str (.join (.slice points 0 max-repr-length) "") "…") + s)) + s)) + +(defn- value->type + [value] + (cond + (string? value) "string" + (boolean? value) "boolean" + (number? value) "number" + (keyword? value) "keyword" + (map? value) "object" + (coll? value) "array" + (array? value) "array" + (fn? value) "function" + (instance? js/Object value) "object" + :else "unknown")) + +(defn- data-property + "Own property `k` of the JS object `o`, or `::skip` when `k` is an accessor. + Plugin proxies expose their contents through getters that read the + application state and may throw, so the error path must not run them." + [o k] + (let [descriptor (js/Object.getOwnPropertyDescriptor o k)] + (if (and (some? descriptor) + (undefined? (unchecked-get descriptor "get"))) + (unchecked-get descriptor "value") + ::skip))) + +(defn- value->repr + "Bounded representation of a value received from a plugin. Such values are + arbitrary JS data: `pr-str` never returns on a self referencing object + (`a.parent.child === a`), so the traversal is capped in depth and in width + and never descends into an ancestor." + ([value] + (value->repr value 0 [])) + ([value depth seen] + (cond + (string? value) + (pr-str (abbreviate value)) + + (or (nil? value) (number? value) (boolean? value) (keyword? value)) + (pr-str value) + + (fn? value) + "#function" + + (some #(identical? % value) seen) + "#recursive" + + (>= depth max-repr-depth) + "…" + + (map? value) + (let [seen (conj seen value)] + (dm/str "{" (->> (take max-repr-items value) + (map (fn [[k v]] + (dm/str (value->repr k (inc depth) seen) " " + (value->repr v (inc depth) seen)))) + (str/join ", ")) + (when (> (count value) max-repr-items) ", …") "}")) + + (or (array? value) (coll? value)) + (let [seen (conj seen value) + items (if (array? value) (array-seq value) (seq value))] + (dm/str "[" (->> (take max-repr-items items) + (map #(value->repr % (inc depth) seen)) + (str/join " ")) + (when (seq (drop max-repr-items items)) " …") "]")) + + (instance? js/Object value) + (let [seen (conj seen value) + ks (js/Object.keys value)] + (dm/str "{" (->> (take max-repr-items ks) + (keep (fn [k] + (let [v (data-property value k)] + (when-not (= ::skip v) + (dm/str k " " (value->repr v (inc depth) seen)))))) + (str/join ", ")) + (when (> (alength ks) max-repr-items) ", …") "}")) + + :else + (value->type value)))) + +(defn- printable? + "True when a schema form contains only data, so it can be shown to a plugin + author. `[:fn pred]` forms embed the predicate itself, which prints as an + unreadable `#object[…]` with the internal munged name." + [form] + (cond + (map? form) (every? printable? (vals form)) + (coll? form) (every? printable? form) + (keyword? form) true + (string? form) true + (number? form) true + (boolean? form) true + (symbol? form) true + (regexp? form) true + (nil? form) true + :else false)) + +(defn- simplify-form + "Drop from a schema form the properties that are not data, so a schema is + described by its shape alone: `[::sm/text {:error/fn f}]` becomes + `::sm/text`. Yields `::unprintable` when what is left cannot describe the + schema, as in `[:fn pred]`, where dropping the predicate would advertise a + schema (`fn`) that means nothing to a plugin author." + [form] + (cond + (map? form) + (not-empty (into {} (filter (comp printable? val)) form)) + + (vector? form) + (let [items (into [] (keep simplify-form) form)] + (cond + (some #(= ::unprintable %) items) ::unprintable + (= 1 (count items)) (first items) + :else items)) + + (printable? form) + form + + :else + ::unprintable)) + +(defn- expected-form + "Readable representation of the schema a problem failed against, or nil when + the schema cannot be shown." + [schema] + (let [title (or (:title (sm/properties schema)) + (:title (sm/type-properties schema)))] + (if (some? title) + title + (let [form (simplify-form (sm/form schema))] + (cond + (= ::unprintable form) nil + (keyword? form) (name form) + :else (pr-str form)))))) + +(defn- schema-message + "Message rendered by `csm/interpret-schema-problem` for a problem, or nil when + it degrades to the generic \"invalid data\": the token value schemas declare an + `:error/fn` that only speaks about empty values, so it renders nothing at all + for a wrong typed one, and saying nothing must not win over reporting what was + expected and what was received (#10072)." + [problem field] + (let [message (-> (csm/interpret-schema-problem {} problem) + (get-in field) + (get :message))] + (when (and (some? message) + (not= message (tr "errors.invalid-data"))) + message))) + +(defn- interpret-problem + "Like `csm/interpret-schema-problem`, but when the schema renders no message of + its own it reports the expected schemas together with the received value and + its type instead of a generic \"Invalid data\" (#10072). + + Malli reports one problem per `:or` branch, all on the same field, so the + branches are accumulated: reporting only one of them would tell the plugin + author that an alternative that is in fact valid is not accepted." + [acc {:keys [schema in value] :as problem}] + (let [field (or (:error/field (sm/properties schema)) in) + field (if (vector? field) field [field]) + current (when (seq field) (get-in acc field))] + (cond + (empty? field) + acc + + ;; A message the schema renders itself always wins over the generic + ;; expected/received one, and is never overwritten by it. + (and (some? current) (not (contains? current :expected))) + acc + + :else + (if-let [message (schema-message problem field)] + (assoc-in acc field {:message message}) + (let [form (expected-form schema) + complete? (and (get current :complete? true) (some? form)) + expected (if complete? + (-> (get current :expected []) + (conj form) + (distinct) + (vec)) + []) + received (value->type value) + repr (abbreviate (value->repr value)) + message (if (seq expected) + (tr "plugins.validation.invalid-value" + (abbreviate (str/join " or " expected)) + received repr) + (tr "plugins.validation.received-value" received repr))] + (assoc-in acc field {:message message + :expected expected + :complete? complete?})))))) + (defn error-messages [explain] (let [msg (->> (:errors explain) - (reduce csm/interpret-schema-problem {}) + (reduce interpret-problem {}) (flatten-error-map) (map (fn [[field message]] (tr "plugins.validation.message" field message))) diff --git a/frontend/test/frontend_tests/plugins/utils_test.cljs b/frontend/test/frontend_tests/plugins/utils_test.cljs index a2a1e98124..3c731055ea 100644 --- a/frontend/test/frontend_tests/plugins/utils_test.cljs +++ b/frontend/test/frontend_tests/plugins/utils_test.cljs @@ -6,8 +6,23 @@ (ns frontend-tests.plugins.utils-test (:require + [app.common.files.tokens :as cfo] + [app.common.schema :as sm] [app.plugins.utils :as plugins.utils] - [cljs.test :as t :include-macros true])) + [app.util.i18n :as i18n] + [cljs.test :as t :include-macros true] + [cuerdas.core :as str])) + +;; The plugin error renderer goes through `tr`, which returns the bare +;; translation code when no locale data is loaded. Load the strings this +;; namespace asserts on so the assertions exercise the real rendering. +(i18n/set-default-translations + #js {"plugins.validation.message" "Field %s is invalid: %s" + "plugins.validation.invalid-value" "expected %s, got %s (%s)" + "plugins.validation.received-value" "got %s (%s)" + "errors.invalid-data" "Invalid data" + "errors.field-missing" "Missing field" + "errors.tokens.empty-input" "Empty input"}) ;; Access the private flattener for direct testing. (def ^:private flatten-error-map @#'plugins.utils/flatten-error-map) @@ -87,3 +102,190 @@ ;; `error-messages` returns nil (not "") on an explain with no mappable ;; errors, so `handle-error` can distinguish "no message" from a real one. (t/is (nil? (plugins.utils/error-messages {:errors []})))) + +;; --------------------------------------------------------------------- +;; Issue #10072 — schema validation errors must say what was expected and +;; what was received, instead of collapsing into a generic "Invalid data". + +(t/deftest test-error-messages-reports-expected-and-received + (let [explain (sm/explain [:map [:value :string]] {:value 16}) + message (plugins.utils/error-messages explain)] + (t/is (= "Field value is invalid: expected string, got number (16)" message)))) + +(t/deftest test-error-messages-reports-nested-field-path + (let [explain (sm/explain [:map [:sets [:vector [:map [:name :string]]]]] + {:sets [{:name true}]}) + message (plugins.utils/error-messages explain)] + (t/is (= "Field sets.0.name is invalid: expected string, got boolean (true)" message)))) + +(t/deftest test-error-messages-honors-custom-schema-message + ;; A schema that declares its own `:error/message` must keep it; the + ;; expected/received rendering is only a fallback. + (let [explain (sm/explain [:map [:value [:string {:error/message "must not be empty"}]]] + {:value 16}) + message (plugins.utils/error-messages explain)] + (t/is (= "Field value is invalid: must not be empty" message)))) + +(t/deftest test-error-messages-missing-key + ;; Missing keys keep the "field missing" message: there is no received + ;; value to report. + (let [explain (sm/explain [:map [:value :string]] {}) + message (plugins.utils/error-messages explain)] + (t/is (= "Field value is invalid: Missing field" message)))) + +(t/deftest test-error-messages-never-generic + (let [explain (sm/explain [:map [:value :string]] {:value 16}) + message (plugins.utils/error-messages explain)] + (t/is (not (str/includes? message "Invalid data"))))) + +(t/deftest test-error-messages-truncates-long-values + (let [value (apply str (repeat 500 "a")) + explain (sm/explain [:map [:value :int]] {:value value}) + message (plugins.utils/error-messages explain)] + (t/is (str/includes? message "got string")) + (t/is (< (count message) 200)))) + +(t/deftest test-error-messages-unicode-value + (let [explain (sm/explain [:map [:value :int]] {:value "ñ😀"}) + message (plugins.utils/error-messages explain)] + (t/is (str/includes? message "ñ😀")))) + +(t/deftest test-error-messages-collection-value + (let [explain (sm/explain [:map [:value :string]] {:value [1 2]}) + message (plugins.utils/error-messages explain)] + (t/is (str/includes? message "got array")))) + +(defn- proxy? [value] (and (map? value) (contains? value :proxy))) + +(defn- well-formed? + "False when the string contains a lone UTF-16 surrogate." + [s] + (try + (js/encodeURIComponent s) + true + (catch :default _ false))) + +(t/deftest test-error-messages-union-reports-every-branch + ;; Malli emits one problem per `:or` branch, all sharing the same path. + ;; Reporting a single branch as if it were the only requirement is worse + ;; than saying nothing: `plugins.tokens` declares the token value setter + ;; as `[:or :string base]`, so a plugin author would be told a vector is + ;; required when a plain string is equally valid. + (let [explain (sm/explain [:map [:value [:or [:vector :string] :string]]] {:value 16}) + message (plugins.utils/error-messages explain)] + (t/is (= "Field value is invalid: expected [:vector :string] or string, got number (16)" + message)))) + +(t/deftest test-error-messages-union-reports-every-branch-nested + (let [explain (sm/explain [:map [:sets [:vector [:or :string :int]]]] {:sets [true]}) + message (plugins.utils/error-messages explain)] + (t/is (= "Field sets.0 is invalid: expected string or int, got boolean (true)" + message)))) + +(t/deftest test-error-messages-never-leaks-function-objects + ;; `[:fn pred]` schemas (used by the token-set arguments) render their form + ;; as `#object[app$plugins$tokens$token_set_proxy_QMARK_]`. That must never + ;; reach a plugin author. + (let [explain (sm/explain [:map [:value [:or [:fn proxy?] :string]]] {:value 16}) + message (plugins.utils/error-messages explain)] + (t/is (not (str/includes? message "#object"))) + (t/is (= "Field value is invalid: got number (16)" message)))) + +(t/deftest test-error-messages-function-schema-falls-back-to-custom-message + ;; When one branch of the union carries its own message, that message wins + ;; over the un-renderable `[:fn …]` branch. + (let [explain (sm/explain [:map [:value [:or [:fn proxy?] ::sm/uuid]]] {:value "nope"}) + message (plugins.utils/error-messages explain)] + (t/is (not (str/includes? message "#object"))) + (t/is (= "Field value is invalid: should be an uuid" message)))) + +(t/deftest test-error-messages-truncation-keeps-surrogate-pairs + ;; Truncating at a UTF-16 code-unit boundary splits astral characters and + ;; produces mojibake in a message whose whole purpose is legibility. + (let [value (apply str (repeat 200 "😀")) + explain (sm/explain [:map [:value :int]] {:value value}) + message (plugins.utils/error-messages explain)] + (t/is (well-formed? message)) + (t/is (str/includes? message "…")))) + +(t/deftest test-error-messages-truncation-counts-code-points + ;; 60 emoji are 120 UTF-16 code units but only 60 code points: below the + ;; limit, so the value must be reported whole. + (let [value (apply str (repeat 60 "😀")) + explain (sm/explain [:map [:value :int]] {:value value}) + message (plugins.utils/error-messages explain)] + (t/is (well-formed? message)) + (t/is (str/includes? message value)))) + +;; --------------------------------------------------------------------- +;; The value reported back to the plugin author is arbitrary JS data, so +;; rendering it must terminate and must not run plugin code. + +(t/deftest test-error-messages-self-referencing-object + ;; A plugin argument is a native JS value, and an object graph with a back + ;; reference (`a.parent.child === a`) is ordinary. `pr-str` walks it forever, + ;; so the error renderer would throw a RangeError from inside the error + ;; handler itself: the author gets a stack overflow instead of a validation + ;; error. + (let [a #js {} + b #js {} + _ (unchecked-set a "parent" b) + _ (unchecked-set b "child" a) + explain (sm/explain [:map [:value :string]] {:value a}) + message (plugins.utils/error-messages explain)] + (t/is (str/includes? message "got object")))) + +(t/deftest test-error-messages-object-with-getters + ;; Penpot's own proxies expose their contents through getters that read the + ;; application state and may throw for a stale id. Rendering a value must + ;; never invoke them. + (let [called (atom 0) + value (js/Object.defineProperty + #js {:id "x"} "children" + #js {:enumerable true + :get (fn [] (swap! called inc) (throw (js/Error. "boom")))}) + explain (sm/explain [:map [:value :string]] {:value value}) + message (plugins.utils/error-messages explain)] + (t/is (str/includes? message "got object")) + (t/is (zero? @called)))) + +(t/deftest test-error-messages-deeply-nested-object + ;; A deep graph must not produce an unbounded message. + (let [value (reduce (fn [acc _] #js {:child acc}) #js {:leaf 1} (range 200)) + explain (sm/explain [:map [:value :string]] {:value value}) + message (plugins.utils/error-messages explain)] + (t/is (str/includes? message "got object")) + (t/is (< (count message) 200)))) + +;; --------------------------------------------------------------------- +;; Issue #10072 — the reported example: `addToken` with a wrong token value. +;; +;; The token value schemas declare an `:error/fn` that only speaks about empty +;; values, so it returns nil for a wrong-typed one and `interpret-schema-problem` +;; degrades to the generic "Invalid data". A message that says nothing must not +;; win over one that says what was expected and what was received. + +(t/deftest test-error-messages-token-value-numeric + (let [schema [:map [:value (cfo/make-token-value-schema :font-size)]] + message (plugins.utils/error-messages (sm/explain schema {:value 16}))] + (t/is (= "Field value is invalid: expected string, got number (16)" message)))) + +(t/deftest test-error-messages-token-value-opacity + (let [schema [:map [:value (cfo/make-token-value-schema :opacity)]] + message (plugins.utils/error-messages (sm/explain schema {:value true}))] + (t/is (= "Field value is invalid: expected string, got boolean (true)" message)))) + +(t/deftest test-error-messages-token-value-font-family + ;; Both branches of the union are printable, so both are reported. + (let [schema [:map [:value (cfo/make-token-value-schema :font-family)]] + message (plugins.utils/error-messages (sm/explain schema {:value 16}))] + (t/is (= (str "Field value is invalid: " + "expected [:vector :app.common.schema/text] or TokenRef, got number (16)") + message)))) + +(t/deftest test-error-messages-token-value-empty-keeps-custom-message + ;; When the schema's own `:error/fn` does render a message, it still wins. + (let [schema [:map [:value (cfo/make-token-value-schema :font-size)]] + message (plugins.utils/error-messages (sm/explain schema {:value ""}))] + (t/is (= "Field value is invalid: Empty input" message)))) + diff --git a/frontend/translations/en.po b/frontend/translations/en.po index d54c01b33e..051d183632 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -5042,10 +5042,18 @@ msgstr "This token does not exist or has been deleted." msgid "options.deleted-token-with-name" msgstr "{%s} token does not exist or has been deleted." -#: src/app/plugins/utils.cljs:318 +#: src/app/plugins/utils.cljs:533 +msgid "plugins.validation.invalid-value" +msgstr "expected %s, got %s (%s)" + +#: src/app/plugins/utils.cljs:547 msgid "plugins.validation.message" msgstr "Field %s is invalid: %s" +#: src/app/plugins/utils.cljs:536 +msgid "plugins.validation.received-value" +msgstr "got %s (%s)" + #: src/app/main/ui/auth/recovery.cljs:88 msgid "profile.recovery.go-to-login" msgstr "Go to login" From d4e87ec59d58d4b55e721ae9ed0e9cd379efe8c9 Mon Sep 17 00:00:00 2001 From: "Dr. Dominik Jain" Date: Wed, 22 Jul 2026 09:35:50 +0200 Subject: [PATCH 111/229] :arrow_up: Update Serena to 1.6.1 in agentic devenv (#10770) Update project files accordingly --- .serena/project.yml | 83 +++++++++++++++++++-------- docker/devenv/Dockerfile | 2 +- docker/devenv/docker-compose.main.yml | 4 +- mcp/.serena/project.yml | 80 ++++++++++++++++++-------- 4 files changed, 120 insertions(+), 49 deletions(-) diff --git a/.serena/project.yml b/.serena/project.yml index b7e8941c75..4b63be5624 100644 --- a/.serena/project.yml +++ b/.serena/project.yml @@ -1,26 +1,31 @@ -# the name by which the project can be referenced within Serena +# the name by which the project can be referenced within Serena/when chatting with the LLM. project_name: "penpot" - -# list of languages for which language servers are started; choose from: -# al ansible bash clojure cpp -# cpp_ccls crystal csharp csharp_omnisharp dart -# elixir elm erlang fortran fsharp +# list of languages for which language servers are started (LSP backend only); choose from: +# ada al angular ansible bash +# bsl clojure cpp cpp_ccls crystal +# csharp csharp_omnisharp cue dart elixir +# elm erlang fortran fsharp gdscript # go groovy haskell haxe hlsl -# java json julia kotlin lean4 -# lua luau markdown matlab msl -# nix ocaml pascal perl php -# php_phpactor powershell python python_jedi python_ty -# r rego ruby ruby_solargraph rust -# scala solidity swift systemverilog terraform -# toml typescript typescript_vts vue yaml -# zig -# (This list may be outdated. For the current list, see values of Language enum here: -# https://github.com/oraios/serena/blob/main/src/solidlsp/ls_config.py -# For some languages, there are alternative language servers, e.g. csharp_omnisharp, ruby_solargraph.) +# html java json julia kotlin +# latex lean4 lua luau markdown +# matlab msl nix ocaml pascal +# perl php php_phpactor php_phpantom powershell +# python python_jedi python_pyrefly python_ty r +# rego ruby ruby_solargraph rust scala +# scss solidity svelte swift systemverilog +# terraform toml typescript typescript_vts vue +# yaml zig +# (This list may be outdated; generated with scripts/print_language_list.py; +# For the current list, see values of Language enum here: +# https://github.com/oraios/serena/blob/main/src/solidlsp/ls_config.py) +# For some languages, there are alternative language servers, e.g. csharp_omnisharp, ruby_solargraph.) # Note: # - For C, use cpp # - For JavaScript, use typescript +# - For Angular projects, use angular (subsumes typescript+html; requires `npm install` in the project root) +# - For Svelte projects, use svelte (subsumes typescript/javascript for .svelte projects; requires npm) +# - For SCSS / Sass / plain CSS, use scss (some-sass-language-server handles all three) # - For Free Pascal/Lazarus, use pascal # Special requirements: # Some languages require additional setup/installations. @@ -54,12 +59,19 @@ ignore_all_files_in_gitignore: true # advanced configuration option allowing to configure language server-specific options. # Maps the language key to the options. -# Have a look at the docstring of the constructors of the LS implementations within solidlsp (e.g., for C# or PHP) to see which options are available. -# No documentation on options means no options are available. +# The settings are considered only if the project is trusted (see global configuration to define trusted projects). +# See https://oraios.github.io/serena/02-usage/050_configuration.html#language-server-specific-settings ls_specific_settings: {} # list of additional paths to ignore in this project. # Same syntax as gitignore, so you can use * and **. +# Important: quote patterns that start with `*`, otherwise YAML treats them as aliases. +# Example: +# ignored_paths: +# - "examples/**" +# - ".worktrees/**" +# - "**/bin/**" +# - "**/obj/**" # Note: global ignored_paths from serena_config.yml are also applied additively. ignored_paths: [] @@ -130,13 +142,38 @@ ignored_memory_patterns: [] # See https://oraios.github.io/serena/02-usage/050_configuration.html#modes added_modes: -# list of additional workspace folder paths for cross-package reference support (e.g. in monorepos). +# list of additional workspace folder paths for cross-package reference support. # Paths can be absolute or relative to the project root. # Each folder is registered as an LSP workspace folder, enabling language servers to discover -# symbols and references across package boundaries. -# Currently supported for: TypeScript. +# symbols and references across package boundaries, but these folders are not indexed by Serena, +# i.e. the respective symbols will not be found using Serena's symbol search tools. # Example: # additional_workspace_folders: # - ../sibling-package # - ../shared-lib -additional_workspace_folders: [] +ls_additional_workspace_folders: [] + +# list of workspace folder paths (LSP backend only). +# These folders will be used to build up Serena's symbol index. +# Paths must be within the project root and should thus be relative to the project root. +# Furthermore, the paths should not be filtered by ignore settings. +# Default setting: The entire project root folder (".") is considered. +# In (large) monorepos, this can be used to index only subfolders of the project root, e.g. +# ls_workspace_folders: +# - "./subproject1" +# - "./subproject2" +ls_workspace_folders: +- . + +# optional shell command to run before the language backend (LSP or JetBrains) is initialised. +# the command runs in the project root directory and is only executed if the project is trusted +# (see trusted_project_path_patterns in the global configuration). +# serena waits for the command to exit: a non-zero exit code is logged as an error but does not +# abort activation. a per-project timeout (activation_command_timeout, default 180s) is the safety +# backstop for non-terminating commands; on expiry the process is killed and activation continues. +# example: activation_command: "npx nx run-many -t build" +activation_command: + +# maximum time in seconds to wait for activation_command to complete before killing it (default 180s). +# must be a positive number. +activation_command_timeout: 180.0 diff --git a/docker/devenv/Dockerfile b/docker/devenv/Dockerfile index 9a9201d5f5..53bbbf7a7c 100644 --- a/docker/devenv/Dockerfile +++ b/docker/devenv/Dockerfile @@ -217,7 +217,7 @@ ENV CLJKONDO_VERSION=2026.05.25 \ UV_TOOL_DIR=/opt/uv/tools \ UV_TOOL_BIN_DIR=/opt/utils/bin \ UV_PYTHON_INSTALL_DIR=/opt/uv/python \ - SERENA_VERSION=1.5.0 + SERENA_VERSION=1.6.1 RUN set -ex; \ ARCH="$(dpkg --print-architecture)"; \ diff --git a/docker/devenv/docker-compose.main.yml b/docker/devenv/docker-compose.main.yml index 944a36885c..f5cbe95620 100644 --- a/docker/devenv/docker-compose.main.yml +++ b/docker/devenv/docker-compose.main.yml @@ -89,9 +89,9 @@ services: - PENPOT_TENANT=${PENPOT_TENANT} - PENPOT_TMUX_ATTACH=${PENPOT_TMUX_ATTACH} - # Agentic devenv: set to a commit/tag to update Serena on startup, + # Agentic devenv: set to a PyPI release version/tag to update Serena on startup, # leave empty to skip update and use the version baked into the image. - - SERENA_UPDATE_VERSION=1.5.0 + - SERENA_UPDATE_VERSION=1.6.1 - SHADOW_SERVER_URL=${SHADOW_SERVER_URL} networks: diff --git a/mcp/.serena/project.yml b/mcp/.serena/project.yml index 7fac475f69..3685e20b4d 100644 --- a/mcp/.serena/project.yml +++ b/mcp/.serena/project.yml @@ -4,6 +4,13 @@ ignore_all_files_in_gitignore: true # list of additional paths to ignore in this project. # Same syntax as gitignore, so you can use * and **. +# Important: quote patterns that start with `*`, otherwise YAML treats them as aliases. +# Example: +# ignored_paths: +# - "examples/**" +# - ".worktrees/**" +# - "**/bin/**" +# - "**/obj/**" # Note: global ignored_paths from serena_config.yml are also applied additively. ignored_paths: [] @@ -21,7 +28,7 @@ excluded_tools: [] # (contrary to the memories, which are loaded on demand). initial_prompt: | CRITICAL: Always read the "project_overview" memory. -# the name by which the project can be referenced within Serena +# the name by which the project can be referenced within Serena/when chatting with the LLM. project_name: "penpot-mcp" # list of mode names to that are always to be included in the set of active modes @@ -56,23 +63,25 @@ fixed_tools: [] # For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings encoding: utf-8 - -# list of languages for which language servers are started; choose from: -# al angular ansible bash clojure -# cpp cpp_ccls crystal csharp csharp_omnisharp -# dart elixir elm erlang fortran -# fsharp go groovy haskell haxe -# hlsl html java json julia -# kotlin lean4 lua luau markdown +# list of languages for which language servers are started (LSP backend only); choose from: +# ada al angular ansible bash +# bsl clojure cpp cpp_ccls crystal +# csharp csharp_omnisharp cue dart elixir +# elm erlang fortran fsharp gdscript +# go groovy haskell haxe hlsl +# html java json julia kotlin +# latex lean4 lua luau markdown # matlab msl nix ocaml pascal -# perl php php_phpactor powershell python -# python_jedi python_ty r rego ruby -# ruby_solargraph rust scala scss solidity -# svelte swift systemverilog terraform toml -# typescript typescript_vts vue yaml zig -# (This list may be outdated. For the current list, see values of Language enum here: -# https://github.com/oraios/serena/blob/main/src/solidlsp/ls_config.py -# For some languages, there are alternative language servers, e.g. csharp_omnisharp, ruby_solargraph.) +# perl php php_phpactor php_phpantom powershell +# python python_jedi python_pyrefly python_ty r +# rego ruby ruby_solargraph rust scala +# scss solidity svelte swift systemverilog +# terraform toml typescript typescript_vts vue +# yaml zig +# (This list may be outdated; generated with scripts/print_language_list.py; +# For the current list, see values of Language enum here: +# https://github.com/oraios/serena/blob/main/src/solidlsp/ls_config.py) +# For some languages, there are alternative language servers, e.g. csharp_omnisharp, ruby_solargraph.) # Note: # - For C, use cpp # - For JavaScript, use typescript @@ -121,8 +130,8 @@ ignored_memory_patterns: [] # advanced configuration option allowing to configure language server-specific options. # Maps the language key to the options. -# Have a look at the docstring of the constructors of the LS implementations within solidlsp (e.g., for C# or PHP) to see which options are available. -# No documentation on options means no options are available. +# The settings are considered only if the project is trusted (see global configuration to define trusted projects). +# See https://oraios.github.io/serena/02-usage/050_configuration.html#language-server-specific-settings ls_specific_settings: {} # list of mode names to be activated additionally for this project, e.g. ["query-projects"] @@ -130,13 +139,38 @@ ls_specific_settings: {} # See https://oraios.github.io/serena/02-usage/050_configuration.html#modes added_modes: -# list of additional workspace folder paths for cross-package reference support (e.g. in monorepos). +# list of additional workspace folder paths for cross-package reference support. # Paths can be absolute or relative to the project root. # Each folder is registered as an LSP workspace folder, enabling language servers to discover -# symbols and references across package boundaries. -# Currently supported for: TypeScript. +# symbols and references across package boundaries, but these folders are not indexed by Serena, +# i.e. the respective symbols will not be found using Serena's symbol search tools. # Example: # additional_workspace_folders: # - ../sibling-package # - ../shared-lib -additional_workspace_folders: [] +ls_additional_workspace_folders: [] + +# list of workspace folder paths (LSP backend only). +# These folders will be used to build up Serena's symbol index. +# Paths must be within the project root and should thus be relative to the project root. +# Furthermore, the paths should not be filtered by ignore settings. +# Default setting: The entire project root folder (".") is considered. +# In (large) monorepos, this can be used to index only subfolders of the project root, e.g. +# ls_workspace_folders: +# - "./subproject1" +# - "./subproject2" +ls_workspace_folders: +- . + +# optional shell command to run before the language backend (LSP or JetBrains) is initialised. +# the command runs in the project root directory and is only executed if the project is trusted +# (see trusted_project_path_patterns in the global configuration). +# serena waits for the command to exit: a non-zero exit code is logged as an error but does not +# abort activation. a per-project timeout (activation_command_timeout, default 180s) is the safety +# backstop for non-terminating commands; on expiry the process is killed and activation continues. +# example: activation_command: "npx nx run-many -t build" +activation_command: + +# maximum time in seconds to wait for activation_command to complete before killing it (default 180s). +# must be a positive number. +activation_command_timeout: 180.0 From 08e42687d12d9f8922036da57f7803916bf19fae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elena=20Torr=C3=B3?= Date: Wed, 22 Jul 2026 09:56:21 +0200 Subject: [PATCH 112/229] :recycle: Extract GPU-free RenderResources; add headless wasm exports (#10653) --- .../src/app/main/data/exports/assets.cljs | 15 +- .../src/app/main/ui/workspace/main_menu.cljs | 2 +- frontend/src/app/render_wasm/api.cljs | 219 +++----------- frontend/src/app/render_wasm/api/fonts.cljs | 69 +---- frontend/src/app/render_wasm/api/props.cljs | 199 +++++++++++++ frontend/src/app/render_wasm/api/texts.cljs | 245 +--------------- .../src/app/render_wasm/fallback_fonts.cljs | 157 ++++++++++ frontend/src/app/render_wasm/resources.cljs | 47 +++ .../src/app/render_wasm/serialize_shape.cljs | 54 ++++ .../src/app/render_wasm/text_content.cljs | 198 +++++++++++++ render-wasm/_build_env | 2 +- render-wasm/src/globals.rs | 67 ++++- render-wasm/src/main.rs | 37 ++- render-wasm/src/render.rs | 72 ++--- render-wasm/src/render/debug.rs | 15 +- render-wasm/src/render/fills.rs | 7 +- render-wasm/src/render/filters.rs | 5 +- render-wasm/src/render/images.rs | 109 +++++-- render-wasm/src/render/options.rs | 1 + render-wasm/src/render/pdf.rs | 18 +- render-wasm/src/render/raster.rs | 59 ++++ render-wasm/src/render/resources.rs | 43 +++ render-wasm/src/render/strokes.rs | 5 +- render-wasm/src/render/surfaces.rs | 1 + render-wasm/src/render/ui.rs | 3 +- render-wasm/src/render/vector.rs | 276 +++++++++++++++--- render-wasm/src/shapes.rs | 9 + render-wasm/src/shapes/text.rs | 14 + render-wasm/src/shapes/text_paths.rs | 4 +- render-wasm/src/state.rs | 98 ++++--- render-wasm/src/utils.rs | 6 +- render-wasm/src/wasm/fills/image.rs | 9 +- render-wasm/src/wasm/fonts.rs | 42 ++- 33 files changed, 1423 insertions(+), 684 deletions(-) create mode 100644 frontend/src/app/render_wasm/api/props.cljs create mode 100644 frontend/src/app/render_wasm/fallback_fonts.cljs create mode 100644 frontend/src/app/render_wasm/resources.cljs create mode 100644 frontend/src/app/render_wasm/serialize_shape.cljs create mode 100644 frontend/src/app/render_wasm/text_content.cljs create mode 100644 render-wasm/src/render/raster.rs create mode 100644 render-wasm/src/render/resources.rs diff --git a/frontend/src/app/main/data/exports/assets.cljs b/frontend/src/app/main/data/exports/assets.cljs index 24d72e5e92..83a7cbb5fa 100644 --- a/frontend/src/app/main/data/exports/assets.cljs +++ b/frontend/src/app/main/data/exports/assets.cljs @@ -179,6 +179,15 @@ (and (wasm-export-enabled? state) (contains? wasm-export-types (:type export)))) +(defn- request-simple-export-wasm + [export] + (ptk/reify ::request-simple-export-wasm + ptk/EffectEvent + (effect [_ _ _] + (case (:type export) + :pdf (wasm.exports/export-pdf export) + (wasm.exports/export-image export))))) + (defn request-simple-export [{:keys [export]}] (ptk/reify ::request-simple-export @@ -191,11 +200,7 @@ ptk/WatchEvent (watch [_ state _] (if (use-wasm-export? state export) - (do - (case (:type export) - :pdf (wasm.exports/export-pdf export) - (wasm.exports/export-image export)) - (rx/empty)) + (rx/of (request-simple-export-wasm export)) (let [profile-id (:profile-id state) params {:exports [export] :profile-id profile-id diff --git a/frontend/src/app/main/ui/workspace/main_menu.cljs b/frontend/src/app/main/ui/workspace/main_menu.cljs index 394864c22a..7a33b98024 100644 --- a/frontend/src/app/main/ui/workspace/main_menu.cljs +++ b/frontend/src/app/main/ui/workspace/main_menu.cljs @@ -665,7 +665,7 @@ (mf/use-fn (mf/deps frames) (fn [_] - (st/emit! (de/show-workspace-export-frames-dialog (reverse frames))))) + (st/emit! (de/show-workspace-export-frames-dialog frames)))) on-export-frames-key-down (mf/use-fn diff --git a/frontend/src/app/render_wasm/api.cljs b/frontend/src/app/render_wasm/api.cljs index 765bc14eb8..82cf07cc8f 100644 --- a/frontend/src/app/render_wasm/api.cljs +++ b/frontend/src/app/render_wasm/api.cljs @@ -17,7 +17,6 @@ [app.common.math :as mth] [app.common.types.color :as clr] [app.common.types.fills :as types.fills] - [app.common.types.fills.impl :as types.fills.impl] [app.common.types.path :as path] [app.common.types.path.impl :as path.impl] [app.common.types.shape.layout :as ctl] @@ -33,7 +32,7 @@ [app.main.store :as st] [app.main.ui.shapes.text] [app.render-wasm.api.fonts :as f] - [app.render-wasm.api.shapes :as shapes] + [app.render-wasm.api.props :as props] [app.render-wasm.api.texts :as t] [app.render-wasm.api.webgl :as webgl] [app.render-wasm.deserializers :as dr] @@ -43,6 +42,7 @@ [app.render-wasm.mem.heap32 :as mem.h32] [app.render-wasm.performance :as perf] [app.render-wasm.rulers-state :as rulers-state] + [app.render-wasm.serialize-shape :as serialize-shape] [app.render-wasm.serializers :as sr] [app.render-wasm.serializers.color :as sr-clr] [app.render-wasm.svg-filters :as svg-filters] @@ -251,8 +251,6 @@ (def ^:const GRID-LAYOUT-COLUMN-U8-SIZE 8) (def ^:const GRID-LAYOUT-CELL-U8-SIZE 36) -(def ^:const MAX_BUFFER_CHUNK_SIZE (* 256 1024)) - (def ^:const DEBOUNCE_DELAY_MS 100) (defonce ^:private view-interaction-active? (atom false)) @@ -634,7 +632,7 @@ (defn set-masked [masked] - (h/call wasm/internal-module "_set_shape_masked_group" masked)) + (props/set-masked masked)) (defn set-shape-selrect [selrect] @@ -729,10 +727,6 @@ (perf/end-measure "set-shape-children") nil) -(defn- get-string-length - [string] - (+ (count string) 1)) - (defn- get-texture-id-for-gl-object "Registers a WebGL texture with Emscripten's GL object system and returns its ID" @@ -864,124 +858,49 @@ (defn set-shape-fills [shape-id fills thumbnail?] - (if (empty? fills) - (h/call wasm/internal-module "_clear_shape_fills") - (let [fills (types.fills/coerce fills) - image-ids (types.fills/get-image-ids fills) - offset (mem/alloc->offset-32 (types.fills/get-byte-size fills)) - heap (mem/get-heap-u32)] - - ;; write fills to the heap - (types.fills/write-to fills heap offset) - - ;; send fills to wasm - (h/call wasm/internal-module "_set_shape_fills") - - ;; load images for image fills if not cached - (keep (fn [id] - (let [buffer (uuid/get-u32 id) - cached-image? (h/call wasm/internal-module "_is_image_cached" - (aget buffer 0) - (aget buffer 1) - (aget buffer 2) - (aget buffer 3) - thumbnail?)] - (when (zero? cached-image?) - (fetch-image shape-id id thumbnail?)))) - - image-ids)))) + ;; Record write is shared with the headless exporter; the image fetch below is + ;; browser-only (WebGL textures). + (when-let [fills (props/write-shape-fills! fills)] + (keep (fn [id] + (let [buffer (uuid/get-u32 id) + cached-image? (h/call wasm/internal-module "_is_image_cached" + (aget buffer 0) + (aget buffer 1) + (aget buffer 2) + (aget buffer 3) + thumbnail?)] + (when (zero? cached-image?) + (fetch-image shape-id id thumbnail?)))) + (types.fills/get-image-ids fills)))) (defn set-shape-strokes [shape-id strokes thumbnail?] - (h/call wasm/internal-module "_clear_shape_strokes") - (keep (fn [stroke] - (when-not (:hidden stroke) - (let [opacity (or (:stroke-opacity stroke) 1.0) - color (:stroke-color stroke) - gradient (:stroke-color-gradient stroke) - image (:stroke-image stroke) - width (:stroke-width stroke) - align (:stroke-alignment stroke) - style (-> stroke :stroke-style sr/translate-stroke-style) - cap-start (-> stroke :stroke-cap-start sr/translate-stroke-cap) - cap-end (-> stroke :stroke-cap-end sr/translate-stroke-cap) - ;; Sentinel -1 means "unset" on the Rust side — keeps the - ;; FFI signature flat while letting the renderer fall back - ;; to its default dash pattern when no override is stored. - dash (or (:stroke-dash stroke) -1) - gap (or (:stroke-gap stroke) -1) - offset (mem/alloc types.fills.impl/FILL-U8-SIZE) - heap (mem/get-heap-u8) - dview (js/DataView. (.-buffer heap))] - (case align - :inner (h/call wasm/internal-module "_add_shape_inner_stroke" width style cap-start cap-end dash gap) - :outer (h/call wasm/internal-module "_add_shape_outer_stroke" width style cap-start cap-end dash gap) - (h/call wasm/internal-module "_add_shape_center_stroke" width style cap-start cap-end dash gap)) - - (cond - (some? gradient) - (do - (types.fills.impl/write-gradient-fill offset dview opacity gradient) - (h/call wasm/internal-module "_add_shape_stroke_fill") - nil) - - (some? image) - (let [image-id (get image :id) - buffer (uuid/get-u32 image-id) - cached-image? (h/call wasm/internal-module "_is_image_cached" - (aget buffer 0) (aget buffer 1) - (aget buffer 2) (aget buffer 3) - thumbnail?)] - (types.fills.impl/write-image-fill offset dview opacity image) - (h/call wasm/internal-module "_add_shape_stroke_fill") - (when (== cached-image? 0) - (fetch-image shape-id image-id thumbnail?))) - - (some? color) - (do - (types.fills.impl/write-solid-fill offset dview opacity color) - (h/call wasm/internal-module "_add_shape_stroke_fill") - nil))))) - - strokes)) + ;; Record write is shared with the headless exporter; the image fetch below is + ;; browser-only (WebGL textures). + (keep (fn [image-id] + (let [buffer (uuid/get-u32 image-id) + cached-image? (h/call wasm/internal-module "_is_image_cached" + (aget buffer 0) + (aget buffer 1) + (aget buffer 2) + (aget buffer 3) + thumbnail?)] + (when (zero? cached-image?) + (fetch-image shape-id image-id thumbnail?)))) + (props/write-shape-strokes! strokes))) (defn set-shape-svg-attrs [attrs] - (let [style (:style attrs) - fill-rule (-> (or (:fillRule style) (:fillRule attrs)) sr/translate-fill-rule) - stroke-linecap (-> (or (:strokeLinecap style) (:strokeLinecap attrs)) sr/translate-stroke-linecap) - stroke-linejoin (-> (or (:strokeLinejoin style) (:strokeLinejoin attrs)) sr/translate-stroke-linejoin) - fill-none (= "none" (or (:fill style) (:fill attrs)))] - (h/call wasm/internal-module "_set_shape_svg_attrs" fill-rule stroke-linecap stroke-linejoin fill-none))) + (props/set-shape-svg-attrs attrs)) (defn set-shape-path-content "Upload path content in chunks to WASM." [content] - (let [chunk-size (quot MAX_BUFFER_CHUNK_SIZE 4) - buffer-size (path/get-byte-size content) - padded-size (* 4 (mth/ceil (/ buffer-size 4))) - buffer (js/Uint8Array. padded-size)] - (path/write-to content (.-buffer buffer) 0) - (h/call wasm/internal-module "_start_shape_path_buffer") - (let [heapu32 (mem/get-heap-u32)] - (loop [offset 0] - (when (< offset padded-size) - (let [end (min padded-size (+ offset (* chunk-size 4))) - chunk (.subarray buffer offset end) - chunk-u32 (js/Uint32Array. chunk.buffer chunk.byteOffset (quot (.-length chunk) 4)) - offset-size (.-length chunk-u32) - heap-offset (mem/alloc->offset-32 (* 4 offset-size))] - (.set heapu32 chunk-u32 heap-offset) - (h/call wasm/internal-module "_set_shape_path_chunk_buffer") - (recur end))))) - (h/call wasm/internal-module "_set_shape_path_buffer"))) + (props/set-shape-path-content content)) (defn set-shape-svg-raw-content [content] - (let [size (get-string-length content) - offset (mem/alloc size)] - (h/call wasm/internal-module "stringToUTF8" content offset size) - (h/call wasm/internal-module "_set_shape_svg_raw_content"))) + (props/set-shape-svg-raw-content content)) (defn set-shape-blend-mode [blend-mode] @@ -1026,25 +945,15 @@ (defn set-shape-bool-type [bool-type] - (h/call wasm/internal-module "_set_shape_bool_type" (sr/translate-bool-type bool-type))) + (props/set-shape-bool-type bool-type)) (defn set-shape-blur [blur] - (let [type (sr/translate-blur-type :layer-blur)] - (if (some? blur) - (let [hidden (:hidden blur) - value (:value blur)] - (h/call wasm/internal-module "_set_shape_blur" type hidden value)) - (h/call wasm/internal-module "_clear_shape_blur" type)))) + (props/set-shape-blur blur)) (defn set-shape-background-blur [background-blur] - (let [type (sr/translate-blur-type :background-blur)] - (if (some? background-blur) - (let [hidden (:hidden background-blur) - value (:value background-blur)] - (h/call wasm/internal-module "_set_shape_blur" type hidden value)) - (h/call wasm/internal-module "_clear_shape_blur" type)))) + (props/set-shape-background-blur background-blur)) (defn set-shape-corners [corners] @@ -1261,27 +1170,7 @@ (defn set-shape-shadows [shadows] - (h/call wasm/internal-module "_clear_shape_shadows") - - (run! (fn [shadow] - (let [color (get shadow :color) - blur (get shadow :blur) - rgba (sr-clr/hex->u32argb (get color :color) - (get color :opacity)) - hidden (get shadow :hidden) - x (get shadow :offset-x) - y (get shadow :offset-y) - spread (get shadow :spread) - style (get shadow :style)] - (h/call wasm/internal-module "_add_shape_shadow" - rgba - blur - spread - x - y - (sr/translate-shadow-style style) - hidden))) - shadows)) + (props/set-shape-shadows shadows)) (defn fonts-from-text-content [content fallback-fonts-only?] (let [paragraph-set (first (get content :children)) @@ -1320,7 +1209,7 @@ (defn set-shape-grow-type [grow-type] - (h/call wasm/internal-module "_set_shape_grow_type" (sr/translate-grow-type grow-type))) + (props/set-shape-grow-type grow-type)) (defn get-text-dimensions ([id] @@ -1431,45 +1320,19 @@ id (dm/get-prop shape :id) type (dm/get-prop shape :type) - masked (get shape :masked-group) - fills (get shape :fills) strokes (if (= type :group) [] (get shape :strokes)) - children (get shape :shapes) content (let [content (get shape :content)] (if (= type :text) (ensure-text-content content) - content)) - bool-type (get shape :bool-type) - grow-type (get shape :grow-type) - blur (get shape :blur) - background-blur (get shape :background-blur) - svg-attrs (get shape :svg-attrs) - shadows (get shape :shadow)] + content))] - (shapes/set-shape-base-props shape) + (serialize-shape/serialize-shape! shape) - ;; Remaining properties that need separate calls (variable-length or conditional) - (set-shape-children children) - (set-shape-blur blur) - (set-shape-background-blur background-blur) - (when (= type :group) - (set-masked (boolean masked))) - (when (= type :bool) - (set-shape-bool-type bool-type)) - (when (and (some? content) - (or (= type :path) - (= type :bool))) - (set-shape-path-content content)) - (when (some? svg-attrs) - (set-shape-svg-attrs svg-attrs)) + ;; Browser-only: svg-raw markup (needs React) + workspace layout. (when (and (some? content) (= type :svg-raw)) (set-shape-svg-raw-content (get-static-markup shape))) - (set-shape-shadows shadows) - (when (= type :text) - (set-shape-grow-type grow-type)) - (set-shape-layout shape) (set-layout-data shape) (let [is-text? (= type :text) diff --git a/frontend/src/app/render_wasm/api/fonts.cljs b/frontend/src/app/render_wasm/api/fonts.cljs index 86946db5ba..5937ebc014 100644 --- a/frontend/src/app/render_wasm/api/fonts.cljs +++ b/frontend/src/app/render_wasm/api/fonts.cljs @@ -14,6 +14,7 @@ [app.config :as cf] [app.main.fonts :as fonts] [app.main.store :as st] + [app.render-wasm.fallback-fonts :as fbf] [app.render-wasm.helpers :as h] [app.render-wasm.wasm :as wasm] [app.util.http :as http] @@ -405,68 +406,6 @@ [fonts] (keep (fn [font] (store-font font)) fonts)) -(defn add-emoji-font - [fonts] - (conj fonts {:font-id "gfont-noto-color-emoji" - :font-variant-id "regular" - :style 0 - :weight 400 - :is-emoji true - :is-fallback true})) - -(def noto-fonts - {:japanese {:font-id "gfont-noto-sans-jp" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :chinese {:font-id "gfont-noto-sans-sc" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :korean {:font-id "gfont-noto-sans-kr" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :arabic {:font-id "gfont-noto-sans-arabic" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :cyrillic {:font-id "gfont-noto-sans" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :greek {:font-id "gfont-noto-sans" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :hebrew {:font-id "gfont-noto-sans-hebrew" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :thai {:font-id "gfont-noto-sans-thai" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :devanagari {:font-id "gfont-noto-sans" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :tamil {:font-id "gfont-noto-sans-tamil" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :latin-ext {:font-id "gfont-noto-sans" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :vietnamese {:font-id "gfont-noto-sans" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :armenian {:font-id "gfont-noto-sans-armenian" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :bengali {:font-id "gfont-noto-sans-bengali" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :cherokee {:font-id "gfont-noto-sans-cherokee" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :ethiopic {:font-id "gfont-noto-sans-ethiopic" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :georgian {:font-id "gfont-noto-sans-georgian" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :gujarati {:font-id "gfont-noto-sans-gujarati" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :gurmukhi {:font-id "gfont-noto-sans-gurmukhi" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :khmer {:font-id "gfont-noto-sans-khmer" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :lao {:font-id "gfont-noto-sans-lao" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :malayalam {:font-id "gfont-noto-sans-malayalam" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :myanmar {:font-id "gfont-noto-sans-myanmar" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :sinhala {:font-id "gfont-noto-sans-sinhala" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :telugu {:font-id "gfont-noto-sans-telugu" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :tibetan {:font-id "gfont-noto-serif-tibetan" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :javanese {:font-id "gfont-noto-sans-javanese" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :kannada {:font-id "gfont-noto-sans-kannada" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :oriya {:font-id "gfont-noto-sans-oriya" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :mongolian {:font-id "gfont-noto-sans-mongolian" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :syriac {:font-id "gfont-noto-sans-syriac" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :tifinagh {:font-id "gfont-noto-sans-tifinagh" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :coptic {:font-id "gfont-noto-sans-coptic" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :ol-chiki {:font-id "gfont-noto-sans-ol-chiki" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :vai {:font-id "gfont-noto-sans-vai" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :shavian {:font-id "gfont-noto-sans-shavian" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :osmanya {:font-id "gfont-noto-sans-osmanya" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :runic {:font-id "gfont-noto-sans-runic" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :old-italic {:font-id "gfont-noto-sans-old-italic" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :brahmi {:font-id "gfont-noto-sans-brahmi" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :modi {:font-id "gfont-noto-sans-modi" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :sora-sompeng {:font-id "gfont-noto-sans-sora-sompeng" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :bamum {:font-id "gfont-noto-sans-bamum" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :meroitic {:font-id "gfont-noto-sans-meroitic" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :symbols {:font-id "gfont-noto-sans-symbols" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :symbols-2 {:font-id "gfont-noto-sans-symbols-2" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} - :music {:font-id "gfont-noto-music" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true}}) - -(defn add-noto-fonts [fonts languages] - (reduce (fn [acc lang] - (if-let [font (get noto-fonts lang)] - (conj acc font) - acc)) - fonts - languages)) +(def add-emoji-font fbf/add-emoji-font) +(def noto-fonts fbf/noto-fonts) +(def add-noto-fonts fbf/add-noto-fonts) diff --git a/frontend/src/app/render_wasm/api/props.cljs b/frontend/src/app/render_wasm/api/props.cljs new file mode 100644 index 0000000000..add4496c66 --- /dev/null +++ b/frontend/src/app/render_wasm/api/props.cljs @@ -0,0 +1,199 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns app.render-wasm.api.props + "Browser-free WASM shape property setters, shared by the workspace render + orchestrator (`app.render-wasm.api`) and the headless exporter + (`app.wasm.serialize`). + + These only touch the WASM FFI (`app.render-wasm.{helpers,mem,serializers, + wasm}`) and the shared `common` byte layouts — no store/DOM/React — so they + run identically in the browser and under Node. Setters that need host-specific + data sources (fonts, image bytes, SVG static markup) stay in `app.render-wasm.api`." + (:require + [app.common.math :as mth] + [app.common.types.fills :as types.fills] + [app.common.types.fills.impl :as types.fills.impl] + [app.common.types.path :as path] + [app.render-wasm.helpers :as h] + [app.render-wasm.mem :as mem] + [app.render-wasm.mem.heap32 :as mem.h32] + [app.render-wasm.serializers :as sr] + [app.render-wasm.serializers.color :as sr-clr] + [app.render-wasm.wasm :as wasm])) + +(def ^:const MAX_BUFFER_CHUNK_SIZE (* 256 1024)) + +(def ^:const UUID-U8-SIZE 16) + +(defn set-shape-children + "Uploads the child id list via the dynamic `_set_children` path (handles any + count). The browser also has fixed-arity fast paths for the incremental edit + path; this dynamic one is the shared/batch version." + [children] + (let [children (into [] (filter uuid?) children)] + (if (empty? children) + (h/call wasm/internal-module "_set_children_0") + (let [heap (mem/get-heap-u32) + size (mem/get-alloc-size children UUID-U8-SIZE) + offset (mem/alloc->offset-32 size)] + (reduce (fn [o id] (mem.h32/write-uuid o heap id)) offset children) + (h/call wasm/internal-module "_set_children"))))) + +(defn set-shape-bool-type + [bool-type] + (h/call wasm/internal-module "_set_shape_bool_type" (sr/translate-bool-type bool-type))) + +(defn set-shape-grow-type + [grow-type] + (h/call wasm/internal-module "_set_shape_grow_type" (sr/translate-grow-type grow-type))) + +(defn write-shape-fills! + "Serializes a fill vector into WASM using the shared `common` byte layout. + Only writes the fill *records*; image fill BYTES are host-specific (the browser + fetches WebGL textures, the exporter provisions decoded bytes), so callers load + images after. Returns the coerced `Fills` (for image-id extraction) or nil when + empty." + [fills] + (if (empty? fills) + (do (h/call wasm/internal-module "_clear_shape_fills") nil) + (let [fills (types.fills/coerce fills) + offset (mem/alloc->offset-32 (types.fills/get-byte-size fills)) + heap (mem/get-heap-u32)] + (types.fills/write-to fills heap offset) + (h/call wasm/internal-module "_set_shape_fills") + fills))) + +(defn write-shape-strokes! + "Serializes the stroke vector (records only, like `write-shape-fills!`); + image stroke BYTES are host-specific, so callers load images after. Returns + the image ids referenced by the strokes' image fills." + [strokes] + (h/call wasm/internal-module "_clear_shape_strokes") + (into [] + (keep + (fn [stroke] + (when-not (:hidden stroke) + (let [opacity (or (:stroke-opacity stroke) 1.0) + color (:stroke-color stroke) + gradient (:stroke-color-gradient stroke) + image (:stroke-image stroke) + width (:stroke-width stroke) + align (:stroke-alignment stroke) + style (-> stroke :stroke-style sr/translate-stroke-style) + cap-start (-> stroke :stroke-cap-start sr/translate-stroke-cap) + cap-end (-> stroke :stroke-cap-end sr/translate-stroke-cap) + ;; Sentinel -1 means "unset" on the Rust side — keeps the + ;; FFI signature flat while letting the renderer fall back + ;; to its default dash pattern when no override is stored. + dash (or (:stroke-dash stroke) -1) + gap (or (:stroke-gap stroke) -1) + offset (mem/alloc types.fills.impl/FILL-U8-SIZE) + heap (mem/get-heap-u8) + dview (js/DataView. (.-buffer heap))] + (case align + :inner (h/call wasm/internal-module "_add_shape_inner_stroke" width style cap-start cap-end dash gap) + :outer (h/call wasm/internal-module "_add_shape_outer_stroke" width style cap-start cap-end dash gap) + (h/call wasm/internal-module "_add_shape_center_stroke" width style cap-start cap-end dash gap)) + (cond + (some? gradient) + (do (types.fills.impl/write-gradient-fill offset dview opacity gradient) + (h/call wasm/internal-module "_add_shape_stroke_fill") + nil) + + (some? image) + (do (types.fills.impl/write-image-fill offset dview opacity image) + (h/call wasm/internal-module "_add_shape_stroke_fill") + (get image :id)) + + (some? color) + (do (types.fills.impl/write-solid-fill offset dview opacity color) + (h/call wasm/internal-module "_add_shape_stroke_fill") + nil)))))) + strokes)) + +(defn- get-string-length + [string] + (+ (count string) 1)) + +(defn set-shape-blur + [blur] + (let [type (sr/translate-blur-type :layer-blur)] + (if (some? blur) + (h/call wasm/internal-module "_set_shape_blur" type (boolean (:hidden blur)) (:value blur)) + (h/call wasm/internal-module "_clear_shape_blur" type)))) + +(defn set-shape-background-blur + [background-blur] + (let [type (sr/translate-blur-type :background-blur)] + (if (some? background-blur) + (h/call wasm/internal-module "_set_shape_blur" type (boolean (:hidden background-blur)) (:value background-blur)) + (h/call wasm/internal-module "_clear_shape_blur" type)))) + +(defn set-shape-shadows + [shadows] + (h/call wasm/internal-module "_clear_shape_shadows") + (run! (fn [shadow] + (let [color (get shadow :color) + blur (get shadow :blur) + rgba (sr-clr/hex->u32argb (get color :color) + (get color :opacity)) + hidden (get shadow :hidden) + x (get shadow :offset-x) + y (get shadow :offset-y) + spread (get shadow :spread) + style (get shadow :style)] + (h/call wasm/internal-module "_add_shape_shadow" + rgba + blur + spread + x + y + (sr/translate-shadow-style style) + hidden))) + shadows)) + +(defn set-masked + [masked] + (h/call wasm/internal-module "_set_shape_masked_group" masked)) + +(defn set-shape-svg-attrs + [attrs] + (let [style (:style attrs) + fill-rule (-> (or (:fillRule style) (:fillRule attrs)) sr/translate-fill-rule) + stroke-linecap (-> (or (:strokeLinecap style) (:strokeLinecap attrs)) sr/translate-stroke-linecap) + stroke-linejoin (-> (or (:strokeLinejoin style) (:strokeLinejoin attrs)) sr/translate-stroke-linejoin) + fill-none (= "none" (or (:fill style) (:fill attrs)))] + (h/call wasm/internal-module "_set_shape_svg_attrs" fill-rule stroke-linecap stroke-linejoin fill-none))) + +(defn set-shape-svg-raw-content + [content] + (let [size (get-string-length content) + offset (mem/alloc size)] + (h/call wasm/internal-module "stringToUTF8" content offset size) + (h/call wasm/internal-module "_set_shape_svg_raw_content"))) + +(defn set-shape-path-content + "Upload path content in chunks to WASM." + [content] + (let [chunk-size (quot MAX_BUFFER_CHUNK_SIZE 4) + buffer-size (path/get-byte-size content) + padded-size (* 4 (mth/ceil (/ buffer-size 4))) + buffer (js/Uint8Array. padded-size)] + (path/write-to content (.-buffer buffer) 0) + (h/call wasm/internal-module "_start_shape_path_buffer") + (let [heapu32 (mem/get-heap-u32)] + (loop [offset 0] + (when (< offset padded-size) + (let [end (min padded-size (+ offset (* chunk-size 4))) + chunk (.subarray buffer offset end) + chunk-u32 (js/Uint32Array. chunk.buffer chunk.byteOffset (quot (.-length chunk) 4)) + offset-size (.-length chunk-u32) + heap-offset (mem/alloc->offset-32 (* 4 offset-size))] + (.set heapu32 chunk-u32 heap-offset) + (h/call wasm/internal-module "_set_shape_path_chunk_buffer") + (recur end))))) + (h/call wasm/internal-module "_set_shape_path_buffer"))) diff --git a/frontend/src/app/render_wasm/api/texts.cljs b/frontend/src/app/render_wasm/api/texts.cljs index afe26e2726..3ea55dfdb3 100644 --- a/frontend/src/app/render_wasm/api/texts.cljs +++ b/frontend/src/app/render_wasm/api/texts.cljs @@ -6,240 +6,21 @@ (ns app.render-wasm.api.texts (:require - [app.common.data :as d] - [app.common.types.fills.impl :as types.fills.impl] - [app.common.uuid :as uuid] [app.render-wasm.api.fonts :as f] - [app.render-wasm.helpers :as h] - [app.render-wasm.mem :as mem] - [app.render-wasm.serializers :as sr] - [app.render-wasm.wasm :as wasm])) - -(def ^:const PARAGRAPH-ATTR-U8-SIZE 12) -(def ^:const SPAN-ATTR-U8-SIZE 64) -(def ^:const MAX-TEXT-FILLS types.fills.impl/MAX-FILLS) - -(defn- encode-text - "Into an UTF8 buffer. Returns an ArrayBuffer instance" - [text] - (let [encoder (js/TextEncoder.)] - (.encode encoder text))) - -(defn- write-span-fills - [offset dview fills] - (let [new-ofset (reduce (fn [offset fill] - (let [opacity (get fill :fill-opacity 1.0) - color (get fill :fill-color) - gradient (get fill :fill-color-gradient) - image (get fill :fill-image)] - - (cond - (some? color) - (types.fills.impl/write-solid-fill offset dview opacity color) - - (some? gradient) - (types.fills.impl/write-gradient-fill offset dview opacity gradient) - - (some? image) - (types.fills.impl/write-image-fill offset dview opacity image)))) - - offset - fills) - padding-fills (max 0 (- MAX-TEXT-FILLS (count fills)))] - (+ new-ofset (* padding-fills types.fills.impl/FILL-U8-SIZE)))) - - -(defn- write-paragraph - [offset dview paragraph] - (let [text-align (sr/translate-text-align (get paragraph :text-align)) - text-direction (sr/translate-text-direction (get paragraph :text-direction)) - text-decoration (sr/translate-text-decoration (get paragraph :text-decoration)) - text-transform (sr/translate-text-transform (get paragraph :text-transform)) - line-height (f/serialize-line-height (get paragraph :line-height)) - letter-spacing (f/serialize-letter-spacing (get paragraph :letter-spacing))] - - (-> offset - (mem/write-u8 dview text-align) - (mem/write-u8 dview text-direction) - (mem/write-u8 dview text-decoration) - (mem/write-u8 dview text-transform) - - (mem/write-f32 dview line-height) - (mem/write-f32 dview letter-spacing) - - (mem/assert-written offset PARAGRAPH-ATTR-U8-SIZE)))) - -(defn- write-spans - [offset dview spans paragraph] - (let [paragraph-font-size (get paragraph :font-size) - paragraph-font-weight (-> paragraph :font-weight f/serialize-font-weight) - paragraph-line-height (f/serialize-line-height (get paragraph :line-height))] - (reduce (fn [offset span] - (let [font-style (sr/translate-font-style (get span :font-style "normal")) - font-size (get span :font-size paragraph-font-size) - font-size (f/serialize-font-size font-size) - - line-height (f/serialize-line-height (get span :line-height) paragraph-line-height) - letter-spacing (f/serialize-letter-spacing (get span :letter-spacing)) - - font-weight (get span :font-weight paragraph-font-weight) - font-weight (f/serialize-font-weight font-weight) - - font-id (f/normalize-font-id (get span :font-id "sourcesanspro")) - font-family (hash (get span :font-family "sourcesanspro")) - - text-buffer (encode-text (get span :text "")) - text-length (mem/size text-buffer) - fills (take MAX-TEXT-FILLS (get span :fills [])) - - font-variant-id - (get span :font-variant-id) - - font-variant-id - (if (uuid? font-variant-id) - font-variant-id - uuid/zero) - - text-decoration - (or (sr/translate-text-decoration (:text-decoration span)) - (sr/translate-text-decoration (:text-decoration paragraph)) - (sr/translate-text-decoration "none")) - - text-transform - (or (sr/translate-text-transform (:text-transform span)) - (sr/translate-text-transform (:text-transform paragraph)) - (sr/translate-text-transform "none")) - - text-direction - (or (sr/translate-text-direction (:text-direction span)) - (sr/translate-text-direction (:text-direction paragraph)) - (sr/translate-text-direction "ltr"))] - - (-> offset - (mem/write-u8 dview font-style) - (mem/write-u8 dview text-decoration) - (mem/write-u8 dview text-transform) - (mem/write-u8 dview text-direction) - - (mem/write-f32 dview font-size) - (mem/write-f32 dview line-height) - (mem/write-f32 dview letter-spacing) - (mem/write-u32 dview font-weight) - - (mem/write-uuid dview font-id) - (mem/write-i32 dview font-family) - (mem/write-uuid dview (d/nilv font-variant-id uuid/zero)) - - (mem/write-i32 dview text-length) - (mem/write-i32 dview (count fills)) - (mem/assert-written offset SPAN-ATTR-U8-SIZE) - - (write-span-fills dview fills)))) - offset - spans))) + [app.render-wasm.fallback-fonts :as fbf] + [app.render-wasm.text-content :as tc])) (defn write-shape-text - ;; buffer has the following format: - ;; [ ] + "Workspace text serialization: the byte writing is shared via + `app.render-wasm.text-content`; font resolution is the workspace's (fonts DB)." [spans paragraph text] - (let [normalized-paragraph (f/normalize-paragraph-font paragraph) - normalized-spans (map #(f/normalize-span-font % normalized-paragraph) spans) - num-spans (count normalized-spans) - fills-size (* types.fills.impl/FILL-U8-SIZE MAX-TEXT-FILLS) - metadata-size (+ PARAGRAPH-ATTR-U8-SIZE - (* num-spans (+ SPAN-ATTR-U8-SIZE fills-size))) - - text-buffer (encode-text text) - text-size (mem/size text-buffer) - - total-size (+ 4 metadata-size text-size) - heapu8 (mem/get-heap-u8) - dview (mem/get-data-view) - offset (mem/alloc total-size)] - - (-> offset - (mem/write-u32 dview num-spans) - (write-paragraph dview normalized-paragraph) - (write-spans dview normalized-spans normalized-paragraph) - (mem/write-buffer heapu8 text-buffer)) - - (h/call wasm/internal-module "_set_shape_text_content"))) - -(def ^:private emoji-pattern - #"(?:\uD83C[\uDDE6-\uDDFF]\uD83C[\uDDE6-\uDDFF])|(?:\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDEFF])|(?:\uD83E[\uDD00-\uDDFF])|(?:\uD83D[\uDE80-\uDEFF]|\uD83E[\uDC00-\uDCFF])|(?:\uD83E[\uDE70-\uDFFF])|[\u2600-\u26FF\u2700-\u27BF\u2300-\u23FF\u2B00-\u2BFF]") - -(def ^:private unicode-ranges - {:japanese #"[\u3040-\u30FF\u31F0-\u31FF\uFF66-\uFF9F]" - :chinese #"[\u4E00-\u9FFF\u3400-\u4DBF]" - :korean #"[\uAC00-\uD7AF]" - :arabic #"[\u0600-\u06FF\u0750-\u077F\u0870-\u089F\u08A0-\u08FF]" - :cyrillic #"[\u0400-\u04FF\u0500-\u052F\u2DE0-\u2DFF\uA640-\uA69F]" - :greek #"[\u0370-\u03FF\u1F00-\u1FFF]" - :hebrew #"[\u0590-\u05FF\uFB1D-\uFB4F]" - :thai #"[\u0E00-\u0E7F]" - :devanagari #"[\u0900-\u097F\uA8E0-\uA8FF]" - :tamil #"[\u0B80-\u0BFF]" - :latin-ext #"[\u0100-\u017F\u0180-\u024F]" - :vietnamese #"[\u1EA0-\u1EF9]" - :armenian #"[\u0530-\u058F\uFB13-\uFB17]" - :bengali #"[\u0980-\u09FF]" - :cherokee #"[\u13A0-\u13FF]" - :ethiopic #"[\u1200-\u137F]" - :georgian #"[\u10A0-\u10FF]" - :gujarati #"[\u0A80-\u0AFF]" - :gurmukhi #"[\u0A00-\u0A7F]" - :khmer #"[\u1780-\u17FF\u19E0-\u19FF]" - :lao #"[\u0E80-\u0EFF]" - :malayalam #"[\u0D00-\u0D7F]" - :myanmar #"[\u1000-\u109F\uAA60-\uAA7F]" - :sinhala #"[\u0D80-\u0DFF]" - :telugu #"[\u0C00-\u0C7F]" - :tibetan #"[\u0F00-\u0FFF]" - :javanese #"[\uA980-\uA9DF]" - :kannada #"[\u0C80-\u0CFF]" - :oriya #"[\u0B00-\u0B7F]" - :mongolian #"[\u1800-\u18AF]" - :syriac #"[\u0700-\u074F]" - :tifinagh #"[\u2D30-\u2D7F]" - :coptic #"[\u2C80-\u2CFF]" - :ol-chiki #"[\u1C50-\u1C7F]" - :vai #"[\uA500-\uA63F]" - :shavian #"\uD801[\uDC50-\uDC7F]" - :osmanya #"\uD801[\uDC80-\uDCAF]" - :runic #"[\u16A0-\u16FF]" - :old-italic #"\uD800[\uDF00-\uDF2F]" - :brahmi #"\uD804[\uDC00-\uDC7F]" - :modi #"\uD805[\uDE00-\uDE5F]" - :sora-sompeng #"\uD804[\uDCD0-\uDCFF]" - :bamum #"[\uA6A0-\uA6FF]" - :meroitic #"\uD802[\uDD80-\uDD9F]" - ;; Arrows, Mathematical Operators, Misc Technical, Geometric Shapes, Misc Symbols, Dingbats, Supplemental Arrows, etc. - :symbols #"[\u2190-\u21FF\u2200-\u22FF\u2300-\u23FF\u25A0-\u25FF\u2600-\u26FF\u2700-\u27BF\u2B00-\u2BFF]" - ;; Additional symbol blocks covered by Noto Sans Symbols 2: - ;; BMP: same as :symbols (arrows, math, misc symbols, dingbats, etc.) - ;; SMP: Mahjong/Domino/Playing Cards (U+1F000-1F0FF), Supplemental Arrows-C (U+1F800-1F8FF), - ;; Legacy Computing Symbols (U+1FB00-1FBFF) - :symbols-2 #"[\u2190-\u21FF\u2200-\u22FF\u2300-\u23FF\u25A0-\u25FF\u2600-\u26FF\u2700-\u27BF\u2B00-\u2BFF]|\uD83C[\uDC00-\uDCFF]|\uD83E[\uDC00-\uDCFF\uDF00-\uDFFF]" - :music #"[\u2669-\u267B]|\uD834[\uDD00-\uDD1F]"}) - -(defn contains-emoji? [text] - (let [result (re-find emoji-pattern text)] - (boolean result))) - -(defn collect-used-languages - [used text] - (reduce-kv (fn [result lang pattern] - (cond - ;; Skip regex operation if we already know that - ;; langage is present - (contains? result lang) - result - - (re-find pattern text) - (conj result lang) - - :else - result)) - used - unicode-ranges)) + (tc/write-shape-text! spans paragraph text + {:normalize-font-id f/normalize-font-id + :normalize-paragraph f/normalize-paragraph-font + :normalize-span f/normalize-span-font})) +;; Emoji/script detection lives in the host-agnostic +;; `app.render-wasm.fallback-fonts`; kept re-exported here for existing +;; workspace callers. +(def contains-emoji? fbf/contains-emoji?) +(def collect-used-languages fbf/collect-used-languages) diff --git a/frontend/src/app/render_wasm/fallback_fonts.cljs b/frontend/src/app/render_wasm/fallback_fonts.cljs new file mode 100644 index 0000000000..80f52be51c --- /dev/null +++ b/frontend/src/app/render_wasm/fallback_fonts.cljs @@ -0,0 +1,157 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns app.render-wasm.fallback-fonts + "Host-agnostic fallback-font knowledge: which scripts/emoji a text uses and + which (google) fallback fonts cover them. Pure data + pure fns — no browser + or Node dependencies — so the workspace (`api.texts`/`api.fonts`) and the + headless exporter (`app.renderer.wasm`) compute the SAME fallback set from + the same source. Anything a host must fetch/upload for text to render + belongs here, not in host code.") + +(def ^:private emoji-pattern + #"(?:\uD83C[\uDDE6-\uDDFF]\uD83C[\uDDE6-\uDDFF])|(?:\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDEFF])|(?:\uD83E[\uDD00-\uDDFF])|(?:\uD83D[\uDE80-\uDEFF]|\uD83E[\uDC00-\uDCFF])|(?:\uD83E[\uDE70-\uDFFF])|[\u2600-\u26FF\u2700-\u27BF\u2300-\u23FF\u2B00-\u2BFF]") + +(def ^:private unicode-ranges + {:japanese #"[\u3040-\u30FF\u31F0-\u31FF\uFF66-\uFF9F]" + :chinese #"[\u4E00-\u9FFF\u3400-\u4DBF]" + :korean #"[\uAC00-\uD7AF]" + :arabic #"[\u0600-\u06FF\u0750-\u077F\u0870-\u089F\u08A0-\u08FF]" + :cyrillic #"[\u0400-\u04FF\u0500-\u052F\u2DE0-\u2DFF\uA640-\uA69F]" + :greek #"[\u0370-\u03FF\u1F00-\u1FFF]" + :hebrew #"[\u0590-\u05FF\uFB1D-\uFB4F]" + :thai #"[\u0E00-\u0E7F]" + :devanagari #"[\u0900-\u097F\uA8E0-\uA8FF]" + :tamil #"[\u0B80-\u0BFF]" + :latin-ext #"[\u0100-\u017F\u0180-\u024F]" + :vietnamese #"[\u1EA0-\u1EF9]" + :armenian #"[\u0530-\u058F\uFB13-\uFB17]" + :bengali #"[\u0980-\u09FF]" + :cherokee #"[\u13A0-\u13FF]" + :ethiopic #"[\u1200-\u137F]" + :georgian #"[\u10A0-\u10FF]" + :gujarati #"[\u0A80-\u0AFF]" + :gurmukhi #"[\u0A00-\u0A7F]" + :khmer #"[\u1780-\u17FF\u19E0-\u19FF]" + :lao #"[\u0E80-\u0EFF]" + :malayalam #"[\u0D00-\u0D7F]" + :myanmar #"[\u1000-\u109F\uAA60-\uAA7F]" + :sinhala #"[\u0D80-\u0DFF]" + :telugu #"[\u0C00-\u0C7F]" + :tibetan #"[\u0F00-\u0FFF]" + :javanese #"[\uA980-\uA9DF]" + :kannada #"[\u0C80-\u0CFF]" + :oriya #"[\u0B00-\u0B7F]" + :mongolian #"[\u1800-\u18AF]" + :syriac #"[\u0700-\u074F]" + :tifinagh #"[\u2D30-\u2D7F]" + :coptic #"[\u2C80-\u2CFF]" + :ol-chiki #"[\u1C50-\u1C7F]" + :vai #"[\uA500-\uA63F]" + :shavian #"\uD801[\uDC50-\uDC7F]" + :osmanya #"\uD801[\uDC80-\uDCAF]" + :runic #"[\u16A0-\u16FF]" + :old-italic #"\uD800[\uDF00-\uDF2F]" + :brahmi #"\uD804[\uDC00-\uDC7F]" + :modi #"\uD805[\uDE00-\uDE5F]" + :sora-sompeng #"\uD804[\uDCD0-\uDCFF]" + :bamum #"[\uA6A0-\uA6FF]" + :meroitic #"\uD802[\uDD80-\uDD9F]" + ;; Arrows, Mathematical Operators, Misc Technical, Geometric Shapes, Misc Symbols, Dingbats, Supplemental Arrows, etc. + :symbols #"[\u2190-\u21FF\u2200-\u22FF\u2300-\u23FF\u25A0-\u25FF\u2600-\u26FF\u2700-\u27BF\u2B00-\u2BFF]" + ;; Additional symbol blocks covered by Noto Sans Symbols 2: + ;; BMP: same as :symbols (arrows, math, misc symbols, dingbats, etc.) + ;; SMP: Mahjong/Domino/Playing Cards (U+1F000-1F0FF), Supplemental Arrows-C (U+1F800-1F8FF), + ;; Legacy Computing Symbols (U+1FB00-1FBFF) + :symbols-2 #"[\u2190-\u21FF\u2200-\u22FF\u2300-\u23FF\u25A0-\u25FF\u2600-\u26FF\u2700-\u27BF\u2B00-\u2BFF]|\uD83C[\uDC00-\uDCFF]|\uD83E[\uDC00-\uDCFF\uDF00-\uDFFF]" + :music #"[\u2669-\u267B]|\uD834[\uDD00-\uDD1F]"}) + +(defn contains-emoji? [text] + (let [result (re-find emoji-pattern text)] + (boolean result))) + +(defn collect-used-languages + [used text] + (reduce-kv (fn [result lang pattern] + (cond + ;; Skip regex operation if we already know that + ;; langage is present + (contains? result lang) + result + + (re-find pattern text) + (conj result lang) + + :else + result)) + used + unicode-ranges)) + +(defn add-emoji-font + [fonts] + (conj fonts {:font-id "gfont-noto-color-emoji" + :font-variant-id "regular" + :style 0 + :weight 400 + :is-emoji true + :is-fallback true})) + +(def noto-fonts + {:japanese {:font-id "gfont-noto-sans-jp" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :chinese {:font-id "gfont-noto-sans-sc" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :korean {:font-id "gfont-noto-sans-kr" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :arabic {:font-id "gfont-noto-sans-arabic" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :cyrillic {:font-id "gfont-noto-sans" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :greek {:font-id "gfont-noto-sans" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :hebrew {:font-id "gfont-noto-sans-hebrew" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :thai {:font-id "gfont-noto-sans-thai" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :devanagari {:font-id "gfont-noto-sans" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :tamil {:font-id "gfont-noto-sans-tamil" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :latin-ext {:font-id "gfont-noto-sans" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :vietnamese {:font-id "gfont-noto-sans" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :armenian {:font-id "gfont-noto-sans-armenian" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :bengali {:font-id "gfont-noto-sans-bengali" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :cherokee {:font-id "gfont-noto-sans-cherokee" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :ethiopic {:font-id "gfont-noto-sans-ethiopic" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :georgian {:font-id "gfont-noto-sans-georgian" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :gujarati {:font-id "gfont-noto-sans-gujarati" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :gurmukhi {:font-id "gfont-noto-sans-gurmukhi" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :khmer {:font-id "gfont-noto-sans-khmer" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :lao {:font-id "gfont-noto-sans-lao" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :malayalam {:font-id "gfont-noto-sans-malayalam" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :myanmar {:font-id "gfont-noto-sans-myanmar" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :sinhala {:font-id "gfont-noto-sans-sinhala" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :telugu {:font-id "gfont-noto-sans-telugu" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :tibetan {:font-id "gfont-noto-serif-tibetan" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :javanese {:font-id "gfont-noto-sans-javanese" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :kannada {:font-id "gfont-noto-sans-kannada" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :oriya {:font-id "gfont-noto-sans-oriya" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :mongolian {:font-id "gfont-noto-sans-mongolian" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :syriac {:font-id "gfont-noto-sans-syriac" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :tifinagh {:font-id "gfont-noto-sans-tifinagh" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :coptic {:font-id "gfont-noto-sans-coptic" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :ol-chiki {:font-id "gfont-noto-sans-ol-chiki" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :vai {:font-id "gfont-noto-sans-vai" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :shavian {:font-id "gfont-noto-sans-shavian" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :osmanya {:font-id "gfont-noto-sans-osmanya" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :runic {:font-id "gfont-noto-sans-runic" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :old-italic {:font-id "gfont-noto-sans-old-italic" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :brahmi {:font-id "gfont-noto-sans-brahmi" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :modi {:font-id "gfont-noto-sans-modi" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :sora-sompeng {:font-id "gfont-noto-sans-sora-sompeng" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :bamum {:font-id "gfont-noto-sans-bamum" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :meroitic {:font-id "gfont-noto-sans-meroitic" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :symbols {:font-id "gfont-noto-sans-symbols" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :symbols-2 {:font-id "gfont-noto-sans-symbols-2" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true} + :music {:font-id "gfont-noto-music" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true}}) + +(defn add-noto-fonts [fonts languages] + (reduce (fn [acc lang] + (if-let [font (get noto-fonts lang)] + (conj acc font) + acc)) + fonts + languages)) diff --git a/frontend/src/app/render_wasm/resources.cljs b/frontend/src/app/render_wasm/resources.cljs new file mode 100644 index 0000000000..9f564aa990 --- /dev/null +++ b/frontend/src/app/render_wasm/resources.cljs @@ -0,0 +1,47 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns app.render-wasm.resources + "Host-agnostic enumeration of the external resources a scene needs to + render: which image bytes its shapes reference. Pure data walking — no + browser or Node dependencies — so the workspace and the headless exporter + derive the same set from the same source (sibling of + `app.render-wasm.fallback-fonts`, which does the same for fonts)." + (:require + [app.common.types.fills :as types.fills])) + +(defn- fill-image-ids + [fills] + (some-> fills not-empty types.fills/coerce types.fills/get-image-ids)) + +(defn- stroke-image-ids + [strokes] + (keep (comp :id :stroke-image) strokes)) + +(defn- text-image-ids + "Image-fill ids referenced by a text shape's span fills." + [content] + (when content + (->> (tree-seq :children :children content) + (mapcat :fills) + (keep (comp :id :fill-image))))) + +(defn shape-image-ids + "Distinct image ids referenced by one shape: its fills, its strokes' image + fills, and (for texts) its spans' image fills." + [shape] + (-> #{} + (into (fill-image-ids (:fills shape))) + (into (stroke-image-ids (:strokes shape))) + ;; `:content` is only a text tree for text shapes (paths reuse the key + ;; for geometry). + (into (when (= :text (:type shape)) + (text-image-ids (:content shape)))))) + +(defn scene-image-ids + "Distinct image ids referenced anywhere in an `objects` map." + [scene] + (into #{} (mapcat shape-image-ids) (vals scene))) diff --git a/frontend/src/app/render_wasm/serialize_shape.cljs b/frontend/src/app/render_wasm/serialize_shape.cljs new file mode 100644 index 0000000000..ffc659757e --- /dev/null +++ b/frontend/src/app/render_wasm/serialize_shape.cljs @@ -0,0 +1,54 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns app.render-wasm.serialize-shape + "Single source of truth for the host-independent part of serializing a whole + shape into the WASM design state. + + Both batch serializers call this so they can't drift: + - the workspace `app.render-wasm.api/set-object` (browser), and + - the headless exporter `app.wasm.serialize/set-shape!` (Node). + + It applies only the properties that need no host-specific resources or driver: + base props, children, blur, background blur, shadows, svg attrs, group mask, + bool type, path/bool geometry and text grow type. The parts that DO differ by + host are handled by each caller AFTER this runs: + - fills / strokes (image bytes are fetched + uploaded differently), + - text content (fonts), + - svg-raw markup (browser renders it via React), + - layout (grid/flex — workspace only). + + The incremental workspace edit path (`set-wasm-attr!`) is unaffected; it keeps + dispatching per changed key through the same underlying `props` setters." + (:require + [app.render-wasm.api.props :as props] + [app.render-wasm.api.shapes :as shapes])) + +(defn serialize-shape! + "Applies every host-independent WASM property of `shape`. `set-shape-base-props` + runs first because it selects the current shape (`use_shape`) the rest mutate." + [shape] + (let [type (get shape :type)] + (shapes/set-shape-base-props shape) + (props/set-shape-children (get shape :shapes)) + (props/set-shape-blur (get shape :blur)) + (props/set-shape-background-blur (get shape :background-blur)) + (props/set-shape-shadows (get shape :shadow)) + + (when (some? (get shape :svg-attrs)) + (props/set-shape-svg-attrs (get shape :svg-attrs))) + + (when (= type :group) + (props/set-masked (boolean (get shape :masked-group)))) + + (when (= type :bool) + (props/set-shape-bool-type (get shape :bool-type))) + + (when (and (contains? #{:path :bool} type) (some? (get shape :content))) + (props/set-shape-path-content (get shape :content))) + + (when (= type :text) + (props/set-shape-grow-type (get shape :grow-type))))) diff --git a/frontend/src/app/render_wasm/text_content.cljs b/frontend/src/app/render_wasm/text_content.cljs new file mode 100644 index 0000000000..457a633066 --- /dev/null +++ b/frontend/src/app/render_wasm/text_content.cljs @@ -0,0 +1,198 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns app.render-wasm.text-content + "Single source of truth for writing a text shape's content into the WASM design + state. The binary layout ([num-spans][paragraph attrs][span attrs][text]) is + identical for the workspace and the headless exporter — only *font resolution* + differs (the workspace uses the loaded fonts DB; the exporter uses its gfonts + catalog + custom variants). So the byte-writing lives here and font resolution + is injected via the `opts` map passed to `write-shape-text!`. + + Fully portable (no store/DOM/React), so it runs under Node too." + (:require + [app.common.data :as d] + [app.common.types.fills.impl :as types.fills.impl] + [app.common.uuid :as uuid] + [app.render-wasm.helpers :as h] + [app.render-wasm.mem :as mem] + [app.render-wasm.serializers :as sr] + [app.render-wasm.wasm :as wasm] + [cuerdas.core :as str])) + +(def ^:const PARAGRAPH-ATTR-U8-SIZE 12) +(def ^:const SPAN-ATTR-U8-SIZE 64) +(def ^:const MAX-TEXT-FILLS types.fills.impl/MAX-FILLS) + +(def ^:private default-font-size 14) +(def ^:private default-line-height 1.2) +(def ^:private default-letter-spacing 0.0) + +;; --- pure attribute serializers ------------------------------------------- + +(defn serialize-font-size + [font-size] + (cond + (number? font-size) font-size + (string? font-size) (or (d/parse-double font-size) default-font-size) + :else default-font-size)) + +(defn serialize-font-weight + [font-weight] + (if (number? font-weight) + font-weight + (let [font-weight-str (str font-weight)] + (cond + (re-matches #"\d+" font-weight-str) (js/Number font-weight-str) + (str/includes? font-weight-str "bold") 700 + (str/includes? font-weight-str "black") 900 + (str/includes? font-weight-str "extrabold") 800 + (str/includes? font-weight-str "extralight") 200 + (str/includes? font-weight-str "light") 300 + (str/includes? font-weight-str "medium") 500 + (str/includes? font-weight-str "semibold") 600 + (str/includes? font-weight-str "thin") 100 + :else 400)))) + +(defn serialize-line-height + ([line-height] (serialize-line-height line-height default-line-height)) + ([line-height default-value] + (cond + (number? line-height) line-height + (string? line-height) (or (d/parse-double line-height) default-value) + :else default-value))) + +(defn serialize-letter-spacing + [letter-spacing] + (cond + (number? letter-spacing) letter-spacing + (string? letter-spacing) (or (d/parse-double letter-spacing) default-letter-spacing) + :else default-letter-spacing)) + +;; --- binary writers -------------------------------------------------------- + +(defn- encode-text + "Into an UTF8 buffer. Returns an ArrayBuffer instance." + [text] + (let [encoder (js/TextEncoder.)] + (.encode encoder text))) + +(defn- write-span-fills + [offset dview fills] + (let [new-ofset (reduce (fn [offset fill] + (let [opacity (get fill :fill-opacity 1.0) + color (get fill :fill-color) + gradient (get fill :fill-color-gradient) + image (get fill :fill-image)] + (cond + (some? color) + (types.fills.impl/write-solid-fill offset dview opacity color) + + (some? gradient) + (types.fills.impl/write-gradient-fill offset dview opacity gradient) + + (some? image) + (types.fills.impl/write-image-fill offset dview opacity image)))) + offset + fills) + padding-fills (max 0 (- MAX-TEXT-FILLS (count fills)))] + (+ new-ofset (* padding-fills types.fills.impl/FILL-U8-SIZE)))) + +(defn- write-paragraph + [offset dview paragraph] + (let [text-align (sr/translate-text-align (get paragraph :text-align)) + text-direction (sr/translate-text-direction (get paragraph :text-direction)) + text-decoration (sr/translate-text-decoration (get paragraph :text-decoration)) + text-transform (sr/translate-text-transform (get paragraph :text-transform)) + line-height (serialize-line-height (get paragraph :line-height)) + letter-spacing (serialize-letter-spacing (get paragraph :letter-spacing))] + (-> offset + (mem/write-u8 dview text-align) + (mem/write-u8 dview text-direction) + (mem/write-u8 dview text-decoration) + (mem/write-u8 dview text-transform) + (mem/write-f32 dview line-height) + (mem/write-f32 dview letter-spacing) + (mem/assert-written offset PARAGRAPH-ATTR-U8-SIZE)))) + +(defn- write-spans + [offset dview spans paragraph normalize-font-id] + (let [paragraph-font-size (get paragraph :font-size) + paragraph-font-weight (-> paragraph :font-weight serialize-font-weight) + paragraph-line-height (serialize-line-height (get paragraph :line-height))] + (reduce + (fn [offset span] + (let [font-style (sr/translate-font-style (get span :font-style "normal")) + font-size (serialize-font-size (get span :font-size paragraph-font-size)) + line-height (serialize-line-height (get span :line-height) paragraph-line-height) + letter-spacing (serialize-letter-spacing (get span :letter-spacing)) + font-weight (serialize-font-weight (get span :font-weight paragraph-font-weight)) + font-id (normalize-font-id (get span :font-id "sourcesanspro")) + font-family (hash (get span :font-family "sourcesanspro")) + text-buffer (encode-text (get span :text "")) + text-length (mem/size text-buffer) + fills (take MAX-TEXT-FILLS (get span :fills [])) + font-variant-id (get span :font-variant-id) + font-variant-id (if (uuid? font-variant-id) font-variant-id uuid/zero) + text-decoration (or (sr/translate-text-decoration (:text-decoration span)) + (sr/translate-text-decoration (:text-decoration paragraph)) + (sr/translate-text-decoration "none")) + text-transform (or (sr/translate-text-transform (:text-transform span)) + (sr/translate-text-transform (:text-transform paragraph)) + (sr/translate-text-transform "none")) + text-direction (or (sr/translate-text-direction (:text-direction span)) + (sr/translate-text-direction (:text-direction paragraph)) + (sr/translate-text-direction "ltr"))] + (-> offset + (mem/write-u8 dview font-style) + (mem/write-u8 dview text-decoration) + (mem/write-u8 dview text-transform) + (mem/write-u8 dview text-direction) + (mem/write-f32 dview font-size) + (mem/write-f32 dview line-height) + (mem/write-f32 dview letter-spacing) + (mem/write-u32 dview font-weight) + (mem/write-uuid dview font-id) + (mem/write-i32 dview font-family) + (mem/write-uuid dview (d/nilv font-variant-id uuid/zero)) + (mem/write-i32 dview text-length) + (mem/write-i32 dview (count fills)) + (mem/assert-written offset SPAN-ATTR-U8-SIZE) + (write-span-fills dview fills)))) + offset + spans))) + +(defn write-shape-text! + "Writes one paragraph's spans + text into WASM and appends it to the current + shape via `_set_shape_text_content`. + + `opts` injects host-specific font resolution: + - `:normalize-font-id` (string font-id -> wasm uuid) — required in practice, + - `:normalize-paragraph`/`:normalize-span` — font-variant normalization from a + fonts DB (workspace); default to identity (the exporter resolves variants + differently / not at all)." + [spans paragraph text {:keys [normalize-font-id normalize-paragraph normalize-span] + :or {normalize-font-id identity + normalize-paragraph identity + normalize-span (fn [span _paragraph] span)}}] + (let [paragraph (normalize-paragraph paragraph) + spans (map #(normalize-span % paragraph) spans) + num-spans (count spans) + fills-size (* types.fills.impl/FILL-U8-SIZE MAX-TEXT-FILLS) + metadata-size (+ PARAGRAPH-ATTR-U8-SIZE + (* num-spans (+ SPAN-ATTR-U8-SIZE fills-size))) + text-buffer (encode-text text) + text-size (mem/size text-buffer) + total-size (+ 4 metadata-size text-size) + heapu8 (mem/get-heap-u8) + dview (mem/get-data-view) + offset (mem/alloc total-size)] + (-> offset + (mem/write-u32 dview num-spans) + (write-paragraph dview paragraph) + (write-spans dview spans paragraph normalize-font-id) + (mem/write-buffer heapu8 text-buffer)) + (h/call wasm/internal-module "_set_shape_text_content"))) diff --git a/render-wasm/_build_env b/render-wasm/_build_env index 70887662df..0b506e415d 100644 --- a/render-wasm/_build_env +++ b/render-wasm/_build_env @@ -41,7 +41,7 @@ export EMCC_CFLAGS="--no-entry \ -sMAX_WEBGL_VERSION=2 \ -sEXPORT_NAME=createRustSkiaModule \ -sEXPORTED_RUNTIME_METHODS=GL,UTF8ToString,stringToUTF8,HEAPU8,HEAP32,HEAPU32,HEAPF32 \ - -sENVIRONMENT=web \ + -sENVIRONMENT=web,worker,node \ -sMODULARIZE=1 \ -sDISABLE_EXCEPTION_CATCHING=1 \ -sFILESYSTEM=0 \ diff --git a/render-wasm/src/globals.rs b/render-wasm/src/globals.rs index 64e7d8c94f..cd0fcf0bbf 100644 --- a/render-wasm/src/globals.rs +++ b/render-wasm/src/globals.rs @@ -4,12 +4,16 @@ use macros::wasm_error; use crate::emscripten::init_gl; use crate::mem; -use crate::render::{gpu_state::GpuState, RenderState}; +use crate::render::{gpu_state::GpuState, RenderResources, RenderState}; use crate::state::{State, TextEditorState, UIState}; static mut DESIGN_STATE: *mut State = std::ptr::null_mut(); +static mut GPU_STATE: *mut GpuState = std::ptr::null_mut(); +static mut RENDER_STATE: *mut RenderState = std::ptr::null_mut(); +static mut UI_STATE: *mut UIState = std::ptr::null_mut(); +static mut TEXT_EDITOR_STATE: *mut TextEditorState = std::ptr::null_mut(); +static mut RENDER_RESOURCES: *mut RenderResources = std::ptr::null_mut(); -/// Design State. pub(crate) fn get_design_state() -> &'static mut State { unsafe { debug_assert!(!DESIGN_STATE.is_null(), "Design State is null"); @@ -17,20 +21,17 @@ pub(crate) fn get_design_state() -> &'static mut State { } } -/// GPU State. -static mut GPU_STATE: *mut GpuState = std::ptr::null_mut(); - #[inline(always)] pub(crate) fn get_gpu_state() -> &'static mut GpuState { unsafe { - debug_assert!(!GPU_STATE.is_null(), "GPU State is null"); + assert!( + !GPU_STATE.is_null(), + "GPU State is null (headless instance?)" + ); &mut *GPU_STATE } } -/// Render State. -static mut RENDER_STATE: *mut RenderState = std::ptr::null_mut(); - #[inline(always)] pub(crate) fn get_render_state() -> &'static mut RenderState { unsafe { @@ -39,8 +40,18 @@ pub(crate) fn get_render_state() -> &'static mut RenderState { } } -/// Text Editor State -static mut TEXT_EDITOR_STATE: *mut TextEditorState = std::ptr::null_mut(); +#[inline(always)] +pub(crate) fn has_render_state() -> bool { + unsafe { !RENDER_STATE.is_null() } +} + +#[inline(always)] +pub(crate) fn get_resources() -> &'static mut RenderResources { + unsafe { + debug_assert!(!RENDER_RESOURCES.is_null(), "Render Resources is null"); + &mut *RENDER_RESOURCES + } +} #[inline(always)] pub(crate) fn get_text_editor_state() -> &'static mut TextEditorState { @@ -50,9 +61,6 @@ pub(crate) fn get_text_editor_state() -> &'static mut TextEditorState { } } -/// UI State -static mut UI_STATE: *mut UIState = std::ptr::null_mut(); - #[inline(always)] pub(crate) fn get_ui_state() -> &'static mut UIState { unsafe { @@ -113,6 +121,23 @@ fn render_init(width: i32, height: i32) { } } +/// Initializes the interactive RenderResources (GPU image store). +fn resources_init() { + unsafe { + let resources = RenderResources::try_new().expect("Cannot initialize RenderResources"); + RENDER_RESOURCES = Box::into_raw(Box::new(resources)); + } +} + +/// Initializes GPU-free RenderResources for the headless export path. +fn resources_init_headless() { + unsafe { + let resources = RenderResources::try_new_headless() + .expect("Cannot initialize headless RenderResources"); + RENDER_RESOURCES = Box::into_raw(Box::new(resources)); + } +} + /// Initializes DesignState. fn design_init() { unsafe { @@ -143,6 +168,7 @@ pub extern "C" fn init(width: i32, height: i32) -> Result<()> { #[cfg(target_arch = "wasm32")] init_gl!(); gpu_init(); + resources_init(); render_init(width, height); text_editor_init(); design_init(); @@ -150,6 +176,19 @@ pub extern "C" fn init(width: i32, height: i32) -> Result<()> { Ok(()) } +/// Boots the engine for headless export with no GPU/WebGL context: only +/// `RenderResources` (GPU-free) + the design state. The export (raster/PDF) +/// paths render onto their own surface; the interactive render loop is not +/// available on an instance initialized this way. `width`/`height` are kept for +/// API symmetry with `init` but unused — the export sizes from shape bounds. +#[no_mangle] +#[wasm_error] +pub extern "C" fn init_headless(_width: i32, _height: i32) -> Result<()> { + resources_init_headless(); + design_init(); + Ok(()) +} + #[no_mangle] #[wasm_error] pub extern "C" fn clean_up() -> Result<()> { diff --git a/render-wasm/src/main.rs b/render-wasm/src/main.rs index ffa8d34ca3..06ad3caaad 100644 --- a/render-wasm/src/main.rs +++ b/render-wasm/src/main.rs @@ -22,7 +22,7 @@ use std::collections::HashMap; use crate::error::{Error, Result}; use crate::render::{FrameType, RenderFlag}; -use globals::{get_design_state, get_gpu_state, get_render_state}; +use globals::{get_design_state, get_gpu_state, get_render_state, get_resources, has_render_state}; use macros::wasm_error; use math::{Bounds, Matrix}; @@ -720,7 +720,7 @@ pub extern "C" fn is_image_cached( is_thumbnail: bool, ) -> Result { let id = uuid_from_u32_quartet(a, b, c, d); - let result = get_render_state().has_image(&id, is_thumbnail); + let result = get_resources().images.contains(&id, is_thumbnail); Ok(result) } @@ -734,8 +734,7 @@ pub extern "C" fn set_shape_svg_raw_content() -> Result<()> { .trim_end_matches('\0') .to_string(); - let render_state = get_render_state(); - let font_manager = skia::FontMgr::from(render_state.fonts().font_provider().clone()); + let font_manager = skia::FontMgr::from(get_resources().fonts.font_provider().clone()); shape.set_svg_raw_content(svg_raw_content); shape.update_svg_raw_content(font_manager); }); @@ -1001,6 +1000,36 @@ pub extern "C" fn render_shape_pdf(a: u32, b: u32, c: u32, d: u32, scale: f32) - }) } +/// PNG via CPU raster (no GPU/WebGL). Returns `[len][width][height][png]` (LE), +/// same layout as `render_shape_pixels`. +#[no_mangle] +#[wasm_error] +pub extern "C" fn render_shape_raster( + a: u32, + b: u32, + c: u32, + d: u32, + scale: f32, +) -> Result<*mut u8> { + let id = uuid_from_u32_quartet(a, b, c, d); + + if !scale.is_finite() { + return Err(Error::CriticalError("Scale is not finite".to_string())); + } + + with_state!(state, { + let (data, width, height) = state.render_shape_raster(&id, scale)?; + + let len = data.len() as u32; + let mut buf = Vec::with_capacity(12 + data.len()); + buf.extend_from_slice(&len.to_le_bytes()); + buf.extend_from_slice(&width.to_le_bytes()); + buf.extend_from_slice(&height.to_le_bytes()); + buf.extend_from_slice(&data); + Ok(mem::write_bytes(buf)) + }) +} + pub fn main() { // Why an empty main? // Right now with the target `wasm32-unknown-emscripten` it is not possible diff --git a/render-wasm/src/render.rs b/render-wasm/src/render.rs index 3800b7dc81..047aaaf393 100644 --- a/render-wasm/src/render.rs +++ b/render-wasm/src/render.rs @@ -7,6 +7,8 @@ pub mod grid_layout; mod images; mod options; pub mod pdf; +pub mod raster; +mod resources; mod shadows; pub mod shape_renderer; mod strokes; @@ -34,10 +36,11 @@ use crate::tiles::{self, PendingTiles, TileRect}; use crate::uuid::Uuid; use crate::view::Viewbox; use crate::wapi; -use crate::{get_gpu_state, performance}; +use crate::{get_gpu_state, get_resources, performance}; pub use fonts::*; pub use images::*; +pub(crate) use resources::RenderResources; type ClipStack = Vec<(Rect, Option, Matrix)>; @@ -348,15 +351,12 @@ pub(crate) struct RenderState { pub options: RenderOptions, stats: RenderStats, pub surfaces: Surfaces, - pub fonts: FontStore, pub viewbox: Viewbox, pub cached_viewbox: Viewbox, - pub images: ImageStore, pub background_color: skia::Color, // Stack of nodes pending to be rendered. pending_nodes: Vec, pub current_tile: Option, - pub sampling_options: skia::SamplingOptions, pub render_area: Rect, // render_area expanded by surface margins — used for visibility checks so that // shapes in the margin zone are rendered (needed for background blur sampling). @@ -546,19 +546,18 @@ impl RenderState { pub fn try_new(width: i32, height: i32) -> Result { // This needs to be done once per WebGL context. - let sampling_options = - skia::SamplingOptions::new(skia::FilterMode::Linear, skia::MipmapMode::Nearest); + let sampling_options = get_resources().sampling_options; - let fonts = FontStore::try_new()?; let surfaces = Surfaces::try_new( (width, height), sampling_options, tiles::get_tile_dimensions(), )?; - // This is used multiple times everywhere so instead of creating new instances every - // time we reuse this one. + Self::assemble(width, height, surfaces) + } + fn assemble(width: i32, height: i32, surfaces: Surfaces) -> Result { let viewbox = Viewbox::new(width as f32, height as f32); let tiles = tiles::TileHashMap::new(); let options = RenderOptions::default(); @@ -567,14 +566,11 @@ impl RenderState { options, stats: RenderStats::new(), surfaces, - fonts, viewbox, cached_viewbox: Viewbox::new(0., 0.), - images: ImageStore::new(), background_color: skia::Color::TRANSPARENT, pending_nodes: vec![], current_tile: None, - sampling_options, render_area: Rect::new_empty(), render_area_with_margins: Rect::new_empty(), tiles, @@ -811,35 +807,6 @@ impl RenderState { Ok(result) } - pub fn fonts(&self) -> &FontStore { - &self.fonts - } - - pub fn fonts_mut(&mut self) -> &mut FontStore { - &mut self.fonts - } - - pub fn add_image(&mut self, id: Uuid, is_thumbnail: bool, image_data: &[u8]) -> Result<()> { - self.images.add(id, is_thumbnail, image_data) - } - - /// Adds an image from an existing WebGL texture, avoiding re-decoding - pub fn add_image_from_gl_texture( - &mut self, - id: Uuid, - is_thumbnail: bool, - texture_id: u32, - width: i32, - height: i32, - ) -> Result<()> { - self.images - .add_image_from_gl_texture(id, is_thumbnail, texture_id, width, height) - } - - pub fn has_image(&self, id: &Uuid, is_thumbnail: bool) -> bool { - self.images.contains(id, is_thumbnail) - } - pub fn set_debug_flags(&mut self, debug: u32) { self.options.flags = debug; } @@ -854,7 +821,7 @@ impl RenderState { self.viewbox.width().floor() as i32, self.viewbox.height().floor() as i32, )?; - self.fonts.set_scale_debug_font(dpr); + get_resources().fonts.set_scale_debug_font(dpr); self.viewbox.set_dpr(dpr); self.surfaces.set_dpr(dpr); } @@ -1002,7 +969,7 @@ impl RenderState { text_paint.set_color(skia::Color::GRAY); text_paint.set_anti_alias(true); - let font = self.fonts.debug_font(); + let font = get_resources().fonts.debug_font(); // FIXME let text = "Loading…"; let (text_width, _) = font.measure_str(text, None); @@ -1431,7 +1398,7 @@ impl RenderState { } match &shape.shape_type { - Type::SVGRaw(_) => { + Type::SVGRaw(sr) => { if let Some(svg_transform) = shape.svg_transform() { matrix.pre_concat(&svg_transform); } @@ -1443,7 +1410,18 @@ impl RenderState { if let Some(svg) = shape.svg.as_ref() { svg.render(self.surfaces.canvas_and_mark_dirty(fills_surface_id)); } else { - panic!("SVG should be available"); + let font_manager = + skia::FontMgr::from(get_resources().fonts.font_provider().clone()); + let dom_result = skia::svg::Dom::from_str(&sr.content, font_manager); + match dom_result { + Ok(dom) => { + dom.render(self.surfaces.canvas_and_mark_dirty(fills_surface_id)); + shape.to_mut().set_svg(dom); + } + Err(e) => { + eprintln!("Error parsing SVG. Error: {}", e); + } + } } } @@ -3020,7 +2998,7 @@ impl RenderState { surface.draw( drop_canvas, (0.0, 0.0), - self.sampling_options, + get_resources().sampling_options, Some(&drop_paint), ); drop_canvas.restore(); @@ -3030,7 +3008,7 @@ impl RenderState { surface.draw( drop_canvas, (0.0, 0.0), - self.sampling_options, + get_resources().sampling_options, Some(&drop_paint), ); drop_canvas.restore(); diff --git a/render-wasm/src/render/debug.rs b/render-wasm/src/render/debug.rs index 0574e3ab28..d661fd2bd1 100644 --- a/render-wasm/src/render/debug.rs +++ b/render-wasm/src/render/debug.rs @@ -6,6 +6,7 @@ use macros::wasm_error; #[cfg(target_arch = "wasm32")] use crate::get_render_state; +use crate::get_resources; use skia_safe::{self as skia, Rect}; @@ -62,16 +63,16 @@ pub fn render_wasm_label(render_state: &mut RenderState) { "WebGL rendering" }; let dpr = render_state.options.dpr; - let (scalar, _) = render_state.fonts.debug_font().measure_str(str, None); + let (scalar, _) = get_resources().fonts.debug_font().measure_str(str, None); let mut p = skia::Point::new(canvas_width - (20.0 * dpr) - scalar, 50.0 * dpr); - let debug_font = render_state.fonts.debug_font(); + let debug_font = get_resources().fonts.debug_font(); canvas.draw_str(str, p, debug_font, &paint); if render_state.options.is_text_editor_v3() { str = "Text Editor v3"; - let (scalar, _) = render_state.fonts.debug_font().measure_str(str, None); + let (scalar, _) = get_resources().fonts.debug_font().measure_str(str, None); p.x = canvas_width - (20.0 * dpr) - scalar; p.y += 15.0 * dpr; canvas.draw_str(str, p, debug_font, &paint); @@ -85,7 +86,7 @@ pub fn render_debug_tiles_for_viewbox(render_state: &mut RenderState) { paint.set_color(skia::Color::RED); let str_rect = format!("{} {} {} {}", sx, sy, ex, ey); - let debug_font = render_state.fonts.debug_font(); + let debug_font = get_resources().fonts.debug_font(); canvas.draw_str(str_rect, skia::Point::new(100.0, 150.0), debug_font, &paint); } @@ -104,7 +105,7 @@ pub fn render_debug_viewbox_tiles(render_state: &mut RenderState) { let str_rect = format!("{} {} {} {}", sx, sy, ex, ey); - let debug_font = render_state.fonts.debug_font(); + let debug_font = get_resources().fonts.debug_font(); canvas.draw_str(str_rect, skia::Point::new(100.0, 100.0), debug_font, &paint); let tile_size = tiles::get_tile_size(scale); @@ -114,7 +115,7 @@ pub fn render_debug_viewbox_tiles(render_state: &mut RenderState) { let debug_rect = get_debug_rect(rect); let p = skia::Point::new(debug_rect.x(), debug_rect.y() - 1.); let str = format!("{}:{}", x, y); - let debug_font = render_state.fonts.debug_font(); + let debug_font = get_resources().fonts.debug_font(); paint.set_style(skia::PaintStyle::Fill); canvas.draw_str(str, p, debug_font, &paint); canvas.draw_rect(debug_rect, &paint); @@ -153,7 +154,7 @@ pub fn render_workspace_current_tile( let tile_position_origin = skia::Point::new(rect.x() + 10., rect.y() + 20.); p.set_style(skia::PaintStyle::Fill); let str = format!("{prefix} {}:{}", tile.x(), tile.y()); - let mut debug_font = render_state.fonts.debug_font().clone(); + let mut debug_font = get_resources().fonts.debug_font().clone(); debug_font.set_size(16.); canvas.draw_str(str, tile_position_origin, &debug_font, &p); } diff --git a/render-wasm/src/render/fills.rs b/render-wasm/src/render/fills.rs index a34956be4a..d7010cc2e5 100644 --- a/render-wasm/src/render/fills.rs +++ b/render-wasm/src/render/fills.rs @@ -2,6 +2,7 @@ use skia_safe::{self as skia, Paint, RRect}; use super::{filters, RenderState, SurfaceId}; use crate::error::Result; +use crate::get_resources; use crate::render::get_source_rect; use crate::shapes::{merge_fills, Fill, Frame, ImageFill, Rect, Shape, Type}; @@ -74,7 +75,7 @@ fn draw_image_fill( return; } - let Some(image) = render_state.images.get(&image_fill.id()) else { + let Some(image) = get_resources().images.get(&image_fill.id()) else { return; }; @@ -102,7 +103,7 @@ fn draw_image_fill( image, Some((&src_rect, skia::canvas::SrcRectConstraint::Strict)), dest_rect, - render_state.sampling_options, + get_resources().sampling_options, paint, ); @@ -122,7 +123,7 @@ fn draw_svg_image_fill( antialias: bool, surface_id: SurfaceId, ) -> bool { - let Some((dom, size)) = render_state.images.get_svg(&image_fill.id()) else { + let Some((dom, size)) = get_resources().images.get_svg(&image_fill.id()) else { return false; }; diff --git a/render-wasm/src/render/filters.rs b/render-wasm/src/render/filters.rs index 34b33f403d..b4313a043d 100644 --- a/render-wasm/src/render/filters.rs +++ b/render-wasm/src/render/filters.rs @@ -2,6 +2,7 @@ use skia_safe::{self as skia, ImageFilter, Rect}; use super::{RenderState, SurfaceId}; use crate::error::Result; +use crate::get_resources; /// Composes two image filters, returning a combined filter if both are present, /// or the individual filter if only one is present, or None if neither is present. @@ -51,12 +52,12 @@ where canvas.save(); canvas.scale((1.0 / scale, 1.0 / scale)); canvas.translate((bounds.left * scale, bounds.top * scale)); - surface.draw(canvas, (0.0, 0.0), render_state.sampling_options, None); + surface.draw(canvas, (0.0, 0.0), get_resources().sampling_options, None); canvas.restore(); } else { canvas.save(); canvas.translate((bounds.left, bounds.top)); - surface.draw(canvas, (0.0, 0.0), render_state.sampling_options, None); + surface.draw(canvas, (0.0, 0.0), get_resources().sampling_options, None); canvas.restore(); } Ok(true) diff --git a/render-wasm/src/render/images.rs b/render-wasm/src/render/images.rs index 9473573cfe..a431ae5e4b 100644 --- a/render-wasm/src/render/images.rs +++ b/render-wasm/src/render/images.rs @@ -68,7 +68,8 @@ enum StoredImage { pub struct ImageStore { images: HashMap<(Uuid, bool), StoredImage>, - context: Box, + /// gpu-only + context: Option>, } /// Creates a Skia image from an existing WebGL texture. @@ -211,7 +212,17 @@ impl ImageStore { let context = &gpu_state.context; Self { images: HashMap::with_capacity(2048), - context: Box::new(context.clone()), + context: Some(Box::new(context.clone())), + } + } + + /// GPU-free image store for the headless export path: no GPU context, so + /// images are kept as encoded bytes and decoded on the CPU at draw time + /// (see `get_cpu_image`). + pub fn new_without_gpu() -> Self { + Self { + images: HashMap::with_capacity(16), + context: None, } } @@ -229,21 +240,41 @@ impl ImageStore { let raw_data = image_data.to_vec(); - if let Some(gpu_image) = decode_image(&mut self.context, &raw_data) { - self.images.insert(key, StoredImage::Gpu(gpu_image)); - } else if let Some((dom, size)) = parse_svg(&raw_data) { - self.images.insert( - key, - StoredImage::Svg { - dom, - size, - raster: None, - }, - ); - } else { - // The lazy re-decode in `get_internal` only retries raster codecs, - // so SVGs that fail to parse here stay raw. - self.images.insert(key, StoredImage::Raw(raw_data)); + match self.context.as_mut() { + Some(context) => { + if let Some(gpu_image) = decode_image(context, &raw_data) { + self.images.insert(key, StoredImage::Gpu(gpu_image)); + } else if let Some((dom, size)) = parse_svg(&raw_data) { + self.images.insert( + key, + StoredImage::Svg { + dom, + size, + raster: None, + }, + ); + } else { + // The lazy re-decode in `get_internal` only retries raster codecs, + // so SVGs that fail to parse here stay raw. + self.images.insert(key, StoredImage::Raw(raw_data)); + } + } + // GPU-free: keep the encoded bytes; decoded on the CPU at draw time. + // SVGs still get parsed up front since that needs no GPU context. + None => { + if let Some((dom, size)) = parse_svg(&raw_data) { + self.images.insert( + key, + StoredImage::Svg { + dom, + size, + raster: None, + }, + ); + } else { + self.images.insert(key, StoredImage::Raw(raw_data)); + } + } } Ok(()) } @@ -266,7 +297,12 @@ impl ImageStore { } // Create a Skia image from the existing GL texture - let image = create_image_from_gl_texture(&mut self.context, texture_id, width, height)?; + let Some(context) = self.context.as_mut() else { + return Err(crate::error::Error::CriticalError( + "Cannot register a GL texture without a GPU context".to_string(), + )); + }; + let image = create_image_from_gl_texture(context, texture_id, width, height)?; self.images.insert(key, StoredImage::Gpu(image)); Ok(()) @@ -287,8 +323,35 @@ impl ImageStore { } pub fn get_cpu_image(&mut self, id: &Uuid) -> Option { - let gpu_image = self.get(id)?.clone(); - gpu_image.make_non_texture_image(self.context.as_mut()) + // GPU path: promote to a texture, then copy to a CPU image. + if self.context.is_some() { + let gpu_image = self.get(id)?.clone(); + let context = self.context.as_mut()?; + return gpu_image.make_non_texture_image(context.as_mut()); + } + // Headless (no GPU context): decode the stored encoded bytes directly to + // a CPU image, which draws fine on a raster/PDF canvas. Try full first, + // then thumbnail. + self.decode_raw_cpu_image(id, false) + .or_else(|| self.decode_raw_cpu_image(id, true)) + } + + fn decode_raw_cpu_image(&self, id: &Uuid, is_thumbnail: bool) -> Option { + match self.images.get(&(*id, is_thumbnail))? { + StoredImage::Raw(raw_data) => { + let data = unsafe { skia::Data::new_bytes(raw_data) }; + Image::from_encoded(&data) + } + StoredImage::Gpu(img) => Some(img.clone()), + StoredImage::Svg { dom, size, .. } => { + // No GPU context in the headless path: rasterize on a CPU + // surface instead of `rasterize_svg` (which needs one). + let dimensions = ISize::new(size.width as i32, size.height as i32); + let mut surface = skia::surfaces::raster_n32_premul(dimensions)?; + dom.render(surface.canvas()); + Some(surface.image_snapshot()) + } + } } /// Vector access for SVG images: the fill render path draws the DOM @@ -311,7 +374,8 @@ impl ImageStore { match entry { StoredImage::Gpu(ref img) => Some(img), StoredImage::Raw(raw_data) => { - let gpu_image = decode_image(&mut self.context, raw_data)?; + let context = self.context.as_mut()?; + let gpu_image = decode_image(context, raw_data)?; *entry = StoredImage::Gpu(gpu_image); if let StoredImage::Gpu(ref img) = entry { @@ -322,7 +386,8 @@ impl ImageStore { } StoredImage::Svg { dom, size, raster } => { if raster.is_none() { - *raster = rasterize_svg(&mut self.context, dom, *size); + let context = self.context.as_mut()?; + *raster = rasterize_svg(context, dom, *size); } raster.as_ref() } diff --git a/render-wasm/src/render/options.rs b/render-wasm/src/render/options.rs index 7a6a3a3d39..fed66505fe 100644 --- a/render-wasm/src/render/options.rs +++ b/render-wasm/src/render/options.rs @@ -69,6 +69,7 @@ impl RenderOptions { self.fast_mode = enabled; } + #[cfg(target_arch = "wasm32")] pub fn set_capture_frames(&mut self, capture_frames: i32) { self.capture_frames = capture_frames; } diff --git a/render-wasm/src/render/pdf.rs b/render-wasm/src/render/pdf.rs index 551a451c92..c61fef322b 100644 --- a/render-wasm/src/render/pdf.rs +++ b/render-wasm/src/render/pdf.rs @@ -4,8 +4,8 @@ use crate::error::Result; use crate::state::ShapesPoolRef; use crate::uuid::Uuid; -use super::vector::{self, VectorTarget}; -use super::RenderState; +use super::vector; +use super::RenderResources; /// Renders a shape tree to a PDF document and returns the raw PDF bytes. /// @@ -16,7 +16,7 @@ use super::RenderState; /// pixel-based (blur, shadows with blur) are rasterised internally by Skia's /// PDF backend pub fn render_to_pdf( - shared: &mut RenderState, + shared: &mut RenderResources, id: &Uuid, tree: ShapesPoolRef, scale: f32, @@ -24,7 +24,15 @@ pub fn render_to_pdf( let shape = tree .get(id) .ok_or_else(|| crate::error::Error::CriticalError("Shape not found for PDF".to_string()))?; - let bounds = shape.extrect(tree, scale); + // Boards export at their own bounds (like the classic exporter, which + // screenshots exactly the board box): content overflowing a board lands + // outside the page/surface and is cropped. Other shapes keep the extended + // rect so their own shadows/blur are included. + let bounds = if matches!(shape.shape_type, crate::shapes::Type::Frame(_)) { + shape.selrect() + } else { + shape.extrect(tree, scale) + }; let page_w = bounds.width() * scale; let page_h = bounds.height() * scale; @@ -45,7 +53,7 @@ pub fn render_to_pdf( let page_canvas = on_page.canvas(); page_canvas.scale((scale, scale)); page_canvas.translate((-bounds.left(), -bounds.top())); - vector::render_tree(shared, page_canvas, id, tree, scale, VectorTarget::Pdf)?; + vector::render_tree_pdf(shared, page_canvas, id, tree, scale, bounds)?; } let document = on_page.end_page(); diff --git a/render-wasm/src/render/raster.rs b/render-wasm/src/render/raster.rs new file mode 100644 index 0000000000..34692d6ab4 --- /dev/null +++ b/render-wasm/src/render/raster.rs @@ -0,0 +1,59 @@ +use skia_safe as skia; + +use crate::error::{Error, Result}; +use crate::state::ShapesPoolRef; +use crate::uuid::Uuid; + +use super::vector; +use super::RenderResources; + +/// Renders a shape tree to PNG bytes on a CPU raster surface (no GPU/WebGL). +/// Returns `(png_bytes, width_px, height_px)`. +pub fn render_to_raster( + shared: &mut RenderResources, + id: &Uuid, + tree: ShapesPoolRef, + scale: f32, +) -> Result<(Vec, i32, i32)> { + let Some(shape) = tree.get(id) else { + return Ok((Vec::new(), 0, 0)); + }; + // Boards export at their own bounds (like the classic exporter, which + // screenshots exactly the board box): content overflowing a board lands + // outside the page/surface and is cropped. Other shapes keep the extended + // rect so their own shadows/blur are included. + let bounds = if matches!(shape.shape_type, crate::shapes::Type::Frame(_)) { + shape.selrect() + } else { + shape.extrect(tree, scale) + }; + + let width = (bounds.width() * scale).ceil() as i32; + let height = (bounds.height() * scale).ceil() as i32; + if width <= 0 || height <= 0 { + return Ok((Vec::new(), 0, 0)); + } + + let mut surface = skia::surfaces::raster_n32_premul((width, height)).ok_or_else(|| { + Error::CriticalError("Failed to create raster export surface".to_string()) + })?; + + { + let canvas = surface.canvas(); + canvas.clear(skia::Color::TRANSPARENT); + canvas.scale((scale, scale)); + canvas.translate((-bounds.left(), -bounds.top())); + vector::render_tree(shared, canvas, id, tree, scale, bounds)?; + } + + let data = surface + .image_snapshot() + .encode( + None::<&mut skia::gpu::DirectContext>, + skia::EncodedImageFormat::PNG, + 100, + ) + .ok_or_else(|| Error::CriticalError("PNG encode failed".to_string()))?; + + Ok((data.as_bytes().to_vec(), width, height)) +} diff --git a/render-wasm/src/render/resources.rs b/render-wasm/src/render/resources.rs new file mode 100644 index 0000000000..4ca9761809 --- /dev/null +++ b/render-wasm/src/render/resources.rs @@ -0,0 +1,43 @@ +use skia_safe as skia; + +use crate::error::Result; + +use super::{FontStore, ImageStore}; + +/// Render dependencies that the export (PDF) path needs independently of the +/// surface/tile/GPU machinery in [`RenderState`]: the font store, the +/// decoded-image store, and the default sampling options. +/// +/// Splitting these out keeps the vector/PDF export path (which takes +/// `&mut RenderResources`) decoupled from the interactive renderer, and gives a +/// single source of truth reached through `get_resources()`. +pub(crate) struct RenderResources { + pub fonts: FontStore, + pub images: ImageStore, + pub sampling_options: skia::SamplingOptions, +} + +impl RenderResources { + pub fn try_new() -> Result { + Ok(Self { + fonts: FontStore::try_new()?, + images: ImageStore::new(), + sampling_options: skia::SamplingOptions::new( + skia::FilterMode::Linear, + skia::MipmapMode::Nearest, + ), + }) + } + + /// Headless export resources: CPU-only image store, no GPU/WebGL. + pub fn try_new_headless() -> Result { + Ok(Self { + fonts: FontStore::try_new()?, + images: ImageStore::new_without_gpu(), + sampling_options: skia::SamplingOptions::new( + skia::FilterMode::Linear, + skia::MipmapMode::Nearest, + ), + }) + } +} diff --git a/render-wasm/src/render/strokes.rs b/render-wasm/src/render/strokes.rs index 8221cad4b6..b5a5a93518 100644 --- a/render-wasm/src/render/strokes.rs +++ b/render-wasm/src/render/strokes.rs @@ -8,6 +8,7 @@ use skia_safe::{self as skia, ImageFilter, RRect}; use super::{filters, RenderState, SurfaceId}; use crate::error::{Error, Result}; +use crate::get_resources; use crate::render::filters::compose_filters; use crate::render::{get_dest_rect, get_source_rect}; @@ -467,7 +468,7 @@ fn draw_image_stroke_in_container( surface_id: SurfaceId, ) -> Result<()> { let scale = render_state.get_scale(); - let Some(image) = render_state.images.get(&image_fill.id()) else { + let Some(image) = get_resources().images.get(&image_fill.id()) else { return Ok(()); }; @@ -575,7 +576,7 @@ fn draw_image_stroke_in_container( image, Some((&src_rect, skia::canvas::SrcRectConstraint::Strict)), dest_rect, - render_state.sampling_options, + get_resources().sampling_options, &image_paint, ); diff --git a/render-wasm/src/render/surfaces.rs b/render-wasm/src/render/surfaces.rs index dc91011abc..e68c0df0c3 100644 --- a/render-wasm/src/render/surfaces.rs +++ b/render-wasm/src/render/surfaces.rs @@ -106,6 +106,7 @@ impl DocAtlas { }) } + // TODO: delete one docatlas is optional pub fn is_empty(&self) -> bool { self.size.width <= 0 || self.size.height <= 0 } diff --git a/render-wasm/src/render/ui.rs b/render-wasm/src/render/ui.rs index 19854df768..4ba350ba1a 100644 --- a/render-wasm/src/render/ui.rs +++ b/render-wasm/src/render/ui.rs @@ -1,6 +1,7 @@ use skia_safe::{self as skia, Color4f}; use super::{RenderState, ShapesPoolRef, SurfaceId}; +use crate::get_resources; use crate::globals::get_ui_state; use crate::render::grid_layout; use crate::shapes::{Layout, Type}; @@ -67,7 +68,7 @@ pub fn render(render_state: &mut RenderState, shapes: ShapesPoolRef) { rulers::render( canvas, viewbox, - &render_state.fonts, + &get_resources().fonts, get_ui_state().ruler_state(), ); diff --git a/render-wasm/src/render/vector.rs b/render-wasm/src/render/vector.rs index 04d91552d9..cf17a55b8e 100644 --- a/render-wasm/src/render/vector.rs +++ b/render-wasm/src/render/vector.rs @@ -9,19 +9,9 @@ use crate::uuid::Uuid; use super::shape_renderer::ShapeRenderer; use super::text; -use super::RenderState; +use super::RenderResources; use super::{get_dest_rect, get_source_rect}; -// --------------------------------------------------------------------------- -// VectorTarget — vector export backend selector -// --------------------------------------------------------------------------- - -/// Vector export backend selector (PDF today; SVG could be added as a variant). -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub(super) enum VectorTarget { - Pdf, -} - // --------------------------------------------------------------------------- // VectorRenderer — implements ShapeRenderer for canvas-based vector export // --------------------------------------------------------------------------- @@ -29,23 +19,16 @@ pub(super) enum VectorTarget { /// Canvas-based vector render backend (CPU Skia canvas, no GPU surfaces). pub(super) struct VectorRenderer<'a> { canvas: &'a Canvas, - shared: &'a mut RenderState, + shared: &'a mut RenderResources, scale: f32, - _target: VectorTarget, } impl<'a> VectorRenderer<'a> { - pub fn new( - canvas: &'a Canvas, - shared: &'a mut RenderState, - scale: f32, - target: VectorTarget, - ) -> Self { + pub fn new(canvas: &'a Canvas, shared: &'a mut RenderResources, scale: f32) -> Self { Self { canvas, shared, scale, - _target: target, } } } @@ -364,15 +347,88 @@ impl ShapeRenderer for VectorRenderer<'_> { // Tree traversal // --------------------------------------------------------------------------- -/// Depth-first render of the shape tree rooted at `id`. +/// Options threaded through the whole traversal. Carries the export root/page +/// (needed to re-render the backdrop for background blur) and the background +/// blur strategy for the active canvas. +struct TreeOpts<'a> { + /// The exported root shape id — the backdrop for any shape is re-rendered + /// from here. + root: &'a Uuid, + /// Root's export bounds (shape space); sizes/positions the offscreen + /// backdrop surface to match the page. + page: skia::Rect, + /// `true` on a PDF canvas (which ignores Skia backdrop filters): background + /// blur is produced by rendering the backdrop onto an offscreen raster + /// surface and embedding the blurred result as an image. `false` on a raster + /// canvas, where a plain Skia backdrop filter works directly. + embed_bg_blur: bool, + /// When rendering a backdrop, the shape whose own subtree must be omitted + /// (so the blur samples only what is *behind* it). + skip: Option<&'a Uuid>, +} + +/// Depth-first render of the shape tree rooted at `id`. Used for raster export +/// (PNG/webp), where background blur is applied with a direct Skia backdrop +/// filter (raster surfaces support it). `page` must be the same bounds the +/// caller used to size/translate its surface — the embedded background-blur +/// backdrop is drawn device-aligned against it. pub(super) fn render_tree( - shared: &mut RenderState, + shared: &mut RenderResources, canvas: &Canvas, id: &Uuid, tree: ShapesPoolRef, scale: f32, - target: VectorTarget, + page: skia::Rect, ) -> Result<()> { + render_tree_dispatch(shared, canvas, id, tree, scale, page, false) +} + +/// Like [`render_tree`], but for a PDF canvas: background blur is embedded as a +/// rasterised image (the PDF backend ignores backdrop filters). +pub(super) fn render_tree_pdf( + shared: &mut RenderResources, + canvas: &Canvas, + id: &Uuid, + tree: ShapesPoolRef, + scale: f32, + page: skia::Rect, +) -> Result<()> { + render_tree_dispatch(shared, canvas, id, tree, scale, page, true) +} + +#[allow(clippy::too_many_arguments)] +fn render_tree_dispatch( + shared: &mut RenderResources, + canvas: &Canvas, + id: &Uuid, + tree: ShapesPoolRef, + scale: f32, + page: skia::Rect, + embed_bg_blur: bool, +) -> Result<()> { + let opts = TreeOpts { + root: id, + page, + embed_bg_blur, + skip: None, + }; + render_tree_inner(shared, canvas, id, tree, scale, &opts) +} + +fn render_tree_inner( + shared: &mut RenderResources, + canvas: &Canvas, + id: &Uuid, + tree: ShapesPoolRef, + scale: f32, + opts: &TreeOpts, +) -> Result<()> { + // When re-rendering a backdrop, omit the blur shape's own subtree so it only + // samples what is behind it. + if opts.skip == Some(id) { + return Ok(()); + } + let Some(element) = tree.get(id) else { return Ok(()); }; @@ -381,12 +437,27 @@ pub(super) fn render_tree( return Ok(()); } + // Background blur samples already-drawn content behind the shape, so it must + // run before the shape (and its subtree) paints. Text/SVGRaw are excluded, + // matching the GPU path. + if !matches!(element.shape_type, Type::Text(_) | Type::SVGRaw(_)) { + if let Some(blur) = element.visible_background_blur() { + if blur.value > 0.0 { + if opts.embed_bg_blur { + render_background_blur_image(shared, canvas, element, tree, scale, opts)?; + } else { + render_background_blur_backdrop(canvas, element, blur.value * scale); + } + } + } + } + match &element.shape_type { Type::Group(group) => { - render_group(shared, canvas, element, group.masked, tree, scale, target)?; + render_group(shared, canvas, element, group.masked, tree, scale, opts)?; } Type::Frame(_) => { - render_frame(shared, canvas, element, tree, scale, target)?; + render_frame(shared, canvas, element, tree, scale, opts)?; } // Leaf types listed explicitly (no `_`) so a new Type must be handled. Type::Rect(_) @@ -395,25 +466,135 @@ pub(super) fn render_tree( | Type::Bool(_) | Type::Text(_) | Type::SVGRaw(_) => { - render_leaf(shared, canvas, element, scale, target)?; + render_leaf(shared, canvas, element, scale)?; } } Ok(()) } +// --------------------------------------------------------------------------- +// Background blur +// --------------------------------------------------------------------------- + +/// Background blur on a canvas that supports Skia backdrop filters (raster). +/// Blurs the current device contents within the shape silhouette and stamps the +/// result back with `Src`. `sigma_radius` is the blur radius already multiplied +/// by the export scale. +fn render_background_blur_backdrop(canvas: &Canvas, shape: &Shape, sigma_radius: f32) { + let sigma = radius_to_sigma(sigma_radius); + let Some(blur_filter) = + skia::image_filters::blur((sigma, sigma), skia::TileMode::Clamp, None, None) + else { + return; + }; + + let matrix = shape.centered_transform(); + canvas.save(); + canvas.concat(&matrix); + clip_to_shape(canvas, shape, true); + // Apply the blur in device space (sigma already includes the export scale); + // the clip, set with the full transform, survives reset_matrix. + canvas.reset_matrix(); + + let mut paint = Paint::default(); + paint.set_blend_mode(skia::BlendMode::Src); + let layer_rec = skia::canvas::SaveLayerRec::default() + .backdrop(&blur_filter) + .backdrop_tile_mode(skia::TileMode::Clamp) + .paint(&paint); + canvas.save_layer(&layer_rec); + canvas.restore(); // composite the blurred-backdrop layer + canvas.restore(); // pop the clip + transform +} + +/// Background blur for a PDF canvas (backdrop filters unsupported): render the +/// backdrop — the whole page minus this shape's own subtree — onto an offscreen +/// raster surface, blur it, and embed the result as an image clipped to the +/// shape. The rest of the page stays vector. +/// +/// LIMITATION: the backdrop omits only this shape's subtree, not shapes painted +/// *after* it. For content stacked on top of the blur shape the foreground would +/// bleed into the blur; correct for the common case (nothing above the panel). +fn render_background_blur_image( + shared: &mut RenderResources, + canvas: &Canvas, + shape: &Shape, + tree: ShapesPoolRef, + scale: f32, + opts: &TreeOpts, +) -> Result<()> { + let bounds = opts.page; + let width = (bounds.width() * scale).ceil() as i32; + let height = (bounds.height() * scale).ceil() as i32; + if width <= 0 || height <= 0 { + return Ok(()); + } + + // Render the backdrop into an offscreen raster surface, in the same + // coordinate space as the PDF page (see `render/pdf.rs`). + let Some(mut surface) = skia::surfaces::raster_n32_premul((width, height)) else { + return Ok(()); + }; + { + let oc = surface.canvas(); + oc.clear(skia::Color::TRANSPARENT); + oc.scale((scale, scale)); + oc.translate((-bounds.left(), -bounds.top())); + let sub = TreeOpts { + root: opts.root, + page: opts.page, + embed_bg_blur: false, + skip: Some(&shape.id), + }; + render_tree_inner(shared, oc, opts.root, tree, scale, &sub)?; + } + let image = surface.image_snapshot(); + + // Bake the blur into a raster bitmap. The PDF backend ignores image filters + // at draw time (same limitation as backdrop filters), so we must blur on a + // raster surface — where filters work — and embed the pre-blurred result. + let sigma = radius_to_sigma(shape.visible_background_blur().map_or(0.0, |b| b.value) * scale); + let blurred = { + let Some(mut blur_surface) = skia::surfaces::raster_n32_premul((width, height)) else { + return Ok(()); + }; + let bc = blur_surface.canvas(); + bc.clear(skia::Color::TRANSPARENT); + let mut paint = Paint::default(); + if let Some(filter) = + skia::image_filters::blur((sigma, sigma), skia::TileMode::Clamp, None, None) + { + paint.set_image_filter(filter); + } + bc.draw_image(&image, (0.0, 0.0), Some(&paint)); + blur_surface.image_snapshot() + }; + + let matrix = shape.centered_transform(); + canvas.save(); + canvas.concat(&matrix); + clip_to_shape(canvas, shape, true); + // Draw the pre-blurred full-page bitmap in device space (1 image px per + // device unit) so it aligns with the page regardless of the shape transform. + canvas.reset_matrix(); + canvas.draw_image(&blurred, (0.0, 0.0), None); + canvas.restore(); + Ok(()) +} + // --------------------------------------------------------------------------- // Groups // --------------------------------------------------------------------------- fn render_group( - shared: &mut RenderState, + shared: &mut RenderResources, canvas: &Canvas, element: &Shape, masked: bool, tree: ShapesPoolRef, scale: f32, - target: VectorTarget, + opts: &TreeOpts, ) -> Result<()> { // A group has no geometry of its own and does NOT propagate a transform to // its children: child shapes are stored in absolute coordinates and each @@ -422,7 +603,7 @@ fn render_group( canvas.save(); // Group drop shadow: subtree silhouette, below the opacity/clip layer. - render_container_drop_shadows(shared, canvas, element, tree, scale, target, false)?; + render_container_drop_shadows(shared, canvas, element, tree, scale, false, opts)?; // Layer for opacity / blend mode (and group-level layer blur) let needs_layer = element.needs_layer(); @@ -455,21 +636,21 @@ fn render_group( canvas.save_layer(&skia::canvas::SaveLayerRec::default().paint(&paint)); for child_id in &children { - render_tree(shared, canvas, child_id, tree, scale, target)?; + render_tree_inner(shared, canvas, child_id, tree, scale, opts)?; } if let Some(mask_id) = element.mask_id() { let mut mask_paint = Paint::default(); mask_paint.set_blend_mode(skia::BlendMode::DstIn); canvas.save_layer(&skia::canvas::SaveLayerRec::default().paint(&mask_paint)); - render_tree(shared, canvas, mask_id, tree, scale, target)?; + render_tree_inner(shared, canvas, mask_id, tree, scale, opts)?; canvas.restore(); // mask layer } canvas.restore(); // composition layer } else { for child_id in &children { - render_tree(shared, canvas, child_id, tree, scale, target)?; + render_tree_inner(shared, canvas, child_id, tree, scale, opts)?; } } @@ -485,12 +666,12 @@ fn render_group( // --------------------------------------------------------------------------- fn render_frame( - shared: &mut RenderState, + shared: &mut RenderResources, canvas: &Canvas, element: &Shape, tree: ShapesPoolRef, scale: f32, - target: VectorTarget, + opts: &TreeOpts, ) -> Result<()> { // A frame's own geometry (background, clip, strokes) is placed by its // `centered_transform`, but — like groups — it does NOT propagate that @@ -503,7 +684,7 @@ fn render_frame( // Frame drop shadow: background + subtree silhouette, below the clip layer // so it extends outside the frame bounds. - render_container_drop_shadows(shared, canvas, element, tree, scale, target, true)?; + render_container_drop_shadows(shared, canvas, element, tree, scale, true, opts)?; let needs_layer = element.needs_layer(); @@ -542,7 +723,7 @@ fn render_frame( if !element.fills.is_empty() { canvas.save(); canvas.concat(&matrix); - let mut renderer = VectorRenderer::new(canvas, shared, scale, target); + let mut renderer = VectorRenderer::new(canvas, shared, scale); renderer.draw_fills(element, &element.fills)?; renderer.draw_fill_inner_shadows(element)?; canvas.restore(); @@ -551,7 +732,7 @@ fn render_frame( // Children (absolute coords, no frame transform). let children: Vec = element.children_ids_iter_forward(false).copied().collect(); for child_id in &children { - render_tree(shared, canvas, child_id, tree, scale, target)?; + render_tree_inner(shared, canvas, child_id, tree, scale, opts)?; } // Strokes over children (clipped frames), in the frame's space. @@ -559,7 +740,7 @@ fn render_frame( if !visible_strokes.is_empty() { canvas.save(); canvas.concat(&matrix); - let mut renderer = VectorRenderer::new(canvas, shared, scale, target); + let mut renderer = VectorRenderer::new(canvas, shared, scale); renderer.draw_strokes(element, &visible_strokes)?; canvas.restore(); } @@ -575,13 +756,13 @@ fn render_frame( /// layer (its alpha becomes the shadow). `draw_fills` includes the frame /// background in the silhouette. fn render_container_drop_shadows( - shared: &mut RenderState, + shared: &mut RenderResources, canvas: &Canvas, element: &Shape, tree: ShapesPoolRef, scale: f32, - target: VectorTarget, draw_fills: bool, + opts: &TreeOpts, ) -> Result<()> { for shadow in element.drop_shadows_visible() { let Some(filter) = shadow.get_drop_shadow_filter() else { @@ -592,13 +773,13 @@ fn render_container_drop_shadows( canvas.save_layer(&skia::canvas::SaveLayerRec::default().paint(&paint)); if draw_fills && !element.fills.is_empty() { - let mut renderer = VectorRenderer::new(canvas, shared, scale, target); + let mut renderer = VectorRenderer::new(canvas, shared, scale); renderer.draw_fills(element, &element.fills)?; } let children: Vec = element.children_ids_iter_forward(false).copied().collect(); for child_id in &children { - render_tree(shared, canvas, child_id, tree, scale, target)?; + render_tree_inner(shared, canvas, child_id, tree, scale, opts)?; } canvas.restore(); @@ -611,11 +792,10 @@ fn render_container_drop_shadows( // --------------------------------------------------------------------------- fn render_leaf( - shared: &mut RenderState, + shared: &mut RenderResources, canvas: &Canvas, element: &Shape, scale: f32, - target: VectorTarget, ) -> Result<()> { let needs_layer = element.needs_layer(); @@ -633,7 +813,7 @@ fn render_leaf( canvas.save_layer(&layer_rec); } - let mut renderer = VectorRenderer::new(canvas, shared, scale, target); + let mut renderer = VectorRenderer::new(canvas, shared, scale); // Layer blur (non-text shapes) let blur_layer = if !matches!(element.shape_type, Type::Text(_)) { @@ -695,7 +875,7 @@ fn render_leaf_content(renderer: &mut R, shape: &Shap // --------------------------------------------------------------------------- fn draw_image_fill( - shared: &mut RenderState, + shared: &mut RenderResources, canvas: &Canvas, shape: &Shape, image_fill: &crate::shapes::ImageFill, @@ -737,7 +917,7 @@ fn draw_image_fill( fn draw_single_stroke( canvas: &Canvas, - shared: &mut RenderState, + shared: &mut RenderResources, scale: f32, shape: &Shape, stroke: &Stroke, @@ -848,7 +1028,7 @@ fn draw_stroke_kind_aware(canvas: &Canvas, shape: &Shape, stroke: &Stroke, paint /// CPU image over it with `SrcIn` so only the stroke area shows the image. fn draw_image_stroke( canvas: &Canvas, - shared: &mut RenderState, + shared: &mut RenderResources, scale: f32, shape: &Shape, stroke: &Stroke, diff --git a/render-wasm/src/shapes.rs b/render-wasm/src/shapes.rs index 5dfbe9e384..7ae9fd8cef 100644 --- a/render-wasm/src/shapes.rs +++ b/render-wasm/src/shapes.rs @@ -1289,6 +1289,15 @@ impl Shape { }) } + /// Font families used by this shape (the text spans' families), or an + /// empty vec for non-text shapes. + pub fn font_families(&self) -> Vec { + match &self.shape_type { + Type::Text(content) => content.font_families(), + _ => Vec::new(), + } + } + #[allow(dead_code)] pub fn mask_filter(&self, scale: f32) -> Option { self.blur diff --git a/render-wasm/src/shapes/text.rs b/render-wasm/src/shapes/text.rs index 1ba1381172..f5f58f5a80 100644 --- a/render-wasm/src/shapes/text.rs +++ b/render-wasm/src/shapes/text.rs @@ -391,6 +391,20 @@ impl TextContent { self.bounds = Rect::from_xywh(x, y, w, h); } + /// Distinct font families referenced by this content's spans, in first-seen + /// order. + pub fn font_families(&self) -> Vec { + let mut seen: Vec = Vec::new(); + for paragraph in &self.paragraphs { + for span in paragraph.children() { + if !seen.contains(&span.font_family) { + seen.push(span.font_family); + } + } + } + seen + } + pub fn add_paragraph(&mut self, paragraph: Paragraph) { self.paragraphs.push(paragraph); self.content_version = self.content_version.wrapping_add(1); diff --git a/render-wasm/src/shapes/text_paths.rs b/render-wasm/src/shapes/text_paths.rs index 38cf30226f..c0d48c2e9e 100644 --- a/render-wasm/src/shapes/text_paths.rs +++ b/render-wasm/src/shapes/text_paths.rs @@ -1,4 +1,4 @@ -use crate::get_render_state; +use crate::get_resources; use crate::shapes::text::TextContent; use skia_safe::{ self as skia, textlayout::Paragraph as SkiaParagraph, FontMetrics, Point, Rect, TextBlob, @@ -174,7 +174,7 @@ impl TextPaths { ) -> Option<(skia::Path, skia::Rect)> { let utf16_text = span_text.encode_utf16().collect::>(); let text = unsafe { skia_safe::as_utf16_unchecked(&utf16_text) }; - let emoji_font = get_render_state().fonts().get_emoji_font(font.size()); + let emoji_font = get_resources().fonts.get_emoji_font(font.size()); let use_font = emoji_font.as_ref().unwrap_or(font); if let Some(mut text_blob) = TextBlob::from_text(text, use_font) { diff --git a/render-wasm/src/state.rs b/render-wasm/src/state.rs index c38b604592..136f5b52ba 100644 --- a/render-wasm/src/state.rs +++ b/render-wasm/src/state.rs @@ -11,9 +11,9 @@ pub use ui::UIState; use crate::error::{Error, Result}; use crate::render::FrameType; -use crate::shapes::{grid_layout::grid_cell_data, Shape}; +use crate::shapes::{grid_layout::grid_cell_data, FontFamily, Shape}; use crate::uuid::Uuid; -use crate::{get_render_state, tiles}; +use crate::{get_render_state, get_resources, has_render_state, tiles}; /// This struct holds the state of the Rust application between JS calls. /// @@ -96,7 +96,33 @@ impl State { } pub fn render_shape_pdf(&mut self, id: &Uuid, scale: f32) -> Result> { - crate::render::pdf::render_to_pdf(get_render_state(), id, &self.shapes, scale) + crate::render::pdf::render_to_pdf(get_resources(), id, &self.shapes, scale) + } + + /// GPU-free counterpart of [`State::render_shape_pixels`]: PNG on a CPU + /// raster surface, no GPU/WebGL. + pub fn render_shape_raster(&mut self, id: &Uuid, scale: f32) -> Result<(Vec, i32, i32)> { + crate::render::raster::render_to_raster(get_resources(), id, &self.shapes, scale) + } + + /// Distinct font families used by the (visible) subtree rooted at `id`, in + /// first-seen order — the on-demand set the headless exporter provisions. + pub fn fonts_used_by_shape(&self, id: &Uuid) -> Vec { + let Some(root) = self.shapes.get(id) else { + return Vec::new(); + }; + + let mut result: Vec = Vec::new(); + for child_id in root.all_children_iter(&self.shapes, false, true) { + if let Some(shape) = self.shapes.get(&child_id) { + for family in shape.font_families() { + if !result.contains(&family) { + result.push(family); + } + } + } + } + result } pub fn start_render_loop(&mut self, timestamp: i32) -> Result { @@ -150,8 +176,6 @@ impl State { } pub fn delete_shape_children(&mut self, parent_id: Uuid, id: Uuid) { - let render_state = get_render_state(); - // We don't really do a self.shapes.remove so that redo/undo keep working let Some(shape) = self.shapes.get(&id) else { return; @@ -159,23 +183,28 @@ impl State { // Only remove the children when is being deleted from the owner if shape.parent_id.is_none() || shape.parent_id == Some(parent_id) { - // IMPORTANT: - // Do NOT use `get_tiles_for_shape` here. That method intersects the shape - // tiles with the current interest area, which means we'd only invalidate - // the subset currently near the viewport. When the user later pans/zooms - // to reveal previously cached tiles, stale pixels could reappear. - // - // Instead, remove the shape from *all* tiles where it was indexed, and - // drop cached tiles for those entries. - let indexed_tiles: Vec = render_state - .tiles - .get_tiles_of(shape.id) - .map(|t| t.iter().copied().collect()) - .unwrap_or_default(); + // Tile invalidation only applies to the on-screen render state; the + // headless export path has none, so skip it there. + if has_render_state() { + let render_state = get_render_state(); + // IMPORTANT: + // Do NOT use `get_tiles_for_shape` here. That method intersects the shape + // tiles with the current interest area, which means we'd only invalidate + // the subset currently near the viewport. When the user later pans/zooms + // to reveal previously cached tiles, stale pixels could reappear. + // + // Instead, remove the shape from *all* tiles where it was indexed, and + // drop cached tiles for those entries. + let indexed_tiles: Vec = render_state + .tiles + .get_tiles_of(shape.id) + .map(|t| t.iter().copied().collect()) + .unwrap_or_default(); - for tile in indexed_tiles { - render_state.remove_cached_tile(tile); - render_state.tiles.remove_shape_at(tile, shape.id); + for tile in indexed_tiles { + render_state.remove_cached_tile(tile); + render_state.tiles.remove_shape_at(tile, shape.id); + } } if let Some(shape_to_delete) = self.shapes.get(&id) { @@ -184,8 +213,8 @@ impl State { if let Some(shape_to_delete) = self.shapes.get_mut(&shape_id) { shape_to_delete.set_deleted(true); } - if render_state.show_grid == Some(shape_id) { - render_state.show_grid = None; + if has_render_state() && get_render_state().show_grid == Some(shape_id) { + get_render_state().show_grid = None; } } } @@ -215,7 +244,8 @@ impl State { /// and groups properly encompass their children. pub fn set_parent_for_current_shape(&mut self, id: Uuid) { // Reparent preview during drag is handled by structure modifiers only. - if get_render_state().options.is_interactive_transform() { + // Headless export has no render state and never runs interactive drags. + if has_render_state() && get_render_state().options.is_interactive_transform() { return; } @@ -265,7 +295,7 @@ impl State { } pub fn font_collection(&self) -> &FontCollection { - get_render_state().fonts().font_collection() + get_resources().fonts.font_collection() } pub fn get_grid_coords(&self, pos_x: f32, pos_y: f32) -> Option<(i32, i32)> { @@ -298,18 +328,20 @@ impl State { } pub fn touch_current(&mut self) { - let render_state = get_render_state(); - if !self.loading { - if let Some(current_id) = self.current_id { - render_state.mark_touched(current_id); - } + // `mark_touched` only drives incremental on-screen tile invalidation; + // the headless export path has no render state, so skip it there. + if self.loading || !has_render_state() { + return; + } + if let Some(current_id) = self.current_id { + get_render_state().mark_touched(current_id); } } pub fn touch_shape(&mut self, id: Uuid) { - let render_state = get_render_state(); - if !self.loading { - render_state.mark_touched(id); + if self.loading || !has_render_state() { + return; } + get_render_state().mark_touched(id); } } diff --git a/render-wasm/src/utils.rs b/render-wasm/src/utils.rs index 206b91dbb0..2301846c10 100644 --- a/render-wasm/src/utils.rs +++ b/render-wasm/src/utils.rs @@ -1,4 +1,4 @@ -use crate::get_render_state; +use crate::get_resources; use crate::skia::textlayout::FontCollection; use crate::skia::Image; use crate::uuid::Uuid; @@ -25,12 +25,12 @@ pub fn uuid_from_u32(id: [u32; 4]) -> Uuid { } pub fn get_image(image_id: &Uuid) -> Option<&Image> { - get_render_state().images.get(image_id) + get_resources().images.get(image_id) } // FIXME: move to a different place ? pub fn get_fallback_fonts() -> &'static HashSet { - get_render_state().fonts().get_fallback() + get_resources().fonts.get_fallback() } pub fn get_font_collection() -> &'static FontCollection { diff --git a/render-wasm/src/wasm/fills/image.rs b/render-wasm/src/wasm/fills/image.rs index 65a4697181..778b80bf92 100644 --- a/render-wasm/src/wasm/fills/image.rs +++ b/render-wasm/src/wasm/fills/image.rs @@ -1,5 +1,5 @@ use crate::error::{Error, Result}; -use crate::get_render_state; +use crate::get_resources; use crate::mem; use crate::shapes::Fill; use crate::state::State; @@ -104,7 +104,10 @@ pub extern "C" fn store_image() -> Result<()> { let image_bytes = &bytes[IMAGE_HEADER_SIZE..]; with_state!(state, { - if let Err(msg) = get_render_state().add_image(ids.image_id, is_thumbnail, image_bytes) { + if let Err(msg) = get_resources() + .images + .add(ids.image_id, is_thumbnail, image_bytes) + { eprintln!("{}", msg); } touch_shapes_with_image(state, ids.image_id); @@ -174,7 +177,7 @@ pub extern "C" fn store_image_from_texture() -> Result<()> { ); with_state!(state, { - if let Err(msg) = get_render_state().add_image_from_gl_texture( + if let Err(msg) = get_resources().images.add_image_from_gl_texture( ids.image_id, is_thumbnail, texture_id, diff --git a/render-wasm/src/wasm/fonts.rs b/render-wasm/src/wasm/fonts.rs index 21c4e6a797..112d523035 100644 --- a/render-wasm/src/wasm/fonts.rs +++ b/render-wasm/src/wasm/fonts.rs @@ -1,9 +1,11 @@ use macros::{wasm_error, ToJs}; -use crate::get_render_state; +use crate::get_resources; use crate::mem; +use crate::render::FontStore; use crate::shapes::{FontFamily, FontStyle}; use crate::utils::uuid_from_u32_quartet; +use crate::with_state; #[derive(Debug, PartialEq, Clone, Copy, ToJs)] #[repr(u8)] @@ -45,14 +47,44 @@ pub extern "C" fn store_font( let font_style = RawFontStyle::from(style); let family = FontFamily::new(id, weight, font_style.into()); - let _ = get_render_state() - .fonts_mut() + let _ = get_resources() + .fonts .add(family, &font_bytes, is_emoji, is_fallback); mem::free_bytes()?; Ok(()) } +/// Resets the font store to its default state, dropping every font uploaded via +/// `store_font`. A headless host that reuses a single WASM instance across +/// requests must call this per render so fonts don't accumulate unbounded. +#[no_mangle] +#[wasm_error] +pub extern "C" fn clear_fonts() -> Result<()> { + get_resources().fonts = FontStore::try_new()?; + Ok(()) +} + +/// Distinct font families used by the subtree, for on-demand provisioning by a +/// headless host. Buffer (LE): `[count u32]` then `count` × +/// `[uuid 16B][weight u32][style u32]` (0=normal, 1=italic); uuid bytes match +/// the quartet `store_font` consumes. +#[no_mangle] +pub extern "C" fn get_fonts_for_shape(a: u32, b: u32, c: u32, d: u32) -> *mut u8 { + let id = uuid_from_u32_quartet(a, b, c, d); + let families = with_state!(state, { state.fonts_used_by_shape(&id) }); + + let mut buf = Vec::with_capacity(4 + families.len() * 24); + buf.extend_from_slice(&(families.len() as u32).to_le_bytes()); + for family in families { + let id_bytes: [u8; 16] = family.id().into(); + buf.extend_from_slice(&id_bytes); + buf.extend_from_slice(&family.weight().to_le_bytes()); + buf.extend_from_slice(&(family.style() as u32).to_le_bytes()); + } + mem::write_bytes(buf) +} + #[no_mangle] pub extern "C" fn is_font_uploaded( a: u32, @@ -66,7 +98,5 @@ pub extern "C" fn is_font_uploaded( let id = uuid_from_u32_quartet(a, b, c, d); let font_style = RawFontStyle::from(style); let family = FontFamily::new(id, weight, font_style.into()); - let res = get_render_state().fonts().has_family(&family, is_emoji); - - res + get_resources().fonts.has_family(&family, is_emoji) } From 3a0aca52c3674d63ba1c912063de8b9c65283799 Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Wed, 22 Jul 2026 10:49:18 +0200 Subject: [PATCH 113/229] :sparkles: Add new debugger tool components-debugger (#10757) --- .../src/app/main/ui/hooks/floating_drag.cljs | 105 ++ frontend/src/app/main/ui/workspace.cljs | 2 + .../ui/workspace/components_debugger.cljs | 1189 +++++++++++++++++ .../ui/workspace/components_debugger.scss | 224 ++++ .../app/main/ui/workspace/sidebar/debug.cljs | 3 +- .../main/ui/workspace/sidebar/layer_name.cljs | 2 +- frontend/src/app/util/debug.cljs | 3 + 7 files changed, 1526 insertions(+), 2 deletions(-) create mode 100644 frontend/src/app/main/ui/hooks/floating_drag.cljs create mode 100644 frontend/src/app/main/ui/workspace/components_debugger.cljs create mode 100644 frontend/src/app/main/ui/workspace/components_debugger.scss diff --git a/frontend/src/app/main/ui/hooks/floating_drag.cljs b/frontend/src/app/main/ui/hooks/floating_drag.cljs new file mode 100644 index 0000000000..f5f4481923 --- /dev/null +++ b/frontend/src/app/main/ui/hooks/floating_drag.cljs @@ -0,0 +1,105 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns app.main.ui.hooks.floating-drag + "Pointer drag hook for floating panels, mirroring the plugin modal drag + handler in plugins-runtime." + (:require + [app.common.geom.point :as gpt] + [app.util.dom :as dom] + [rumext.v2 :as mf])) + +(defn- parse-translate + "Reads the current translate offset from an element's computed transform." + [^js el] + (if (and el (.-DOMMatrixReadOnly js/window)) + (let [cs (.getComputedStyle js/window el nil) + matrix (js/DOMMatrixReadOnly. (.-transform cs))] + {:x (.-m41 matrix) + :y (.-m42 matrix)}) + {:x 0 :y 0})) + +(defn- set-dragging-class! + "Toggle `dragging-class` on `target` while a drag is active." + [^js target dragging-class dragging?] + (when (and target dragging-class) + (if dragging? + (dom/add-class! target dragging-class) + (dom/remove-class! target dragging-class)))) + +(defn use-floating-drag + "Returns pointer handlers to drag `target-ref` by its header. + + Optional `on-move` is called on pointer down (e.g. to raise z-index). + Optional `dragging-class` is toggled on `target-ref` while dragging." + ([target-ref] + (use-floating-drag target-ref nil nil)) + ([target-ref on-move] + (use-floating-drag target-ref on-move nil)) + ([target-ref on-move dragging-class] + (let [dragging-ref (mf/use-ref false) + pointer-id-ref (mf/use-ref nil) + initial-translate-ref (mf/use-ref {:x 0 :y 0}) + initial-client-ref (mf/use-ref (gpt/point 0 0)) + + end-drag + (mf/use-fn + (mf/deps dragging-class) + (fn [event] + (when (mf/ref-val dragging-ref) + (mf/set-ref-val! dragging-ref false) + (mf/set-ref-val! pointer-id-ref nil) + (set-dragging-class! (mf/ref-val target-ref) dragging-class false) + (when event (dom/release-pointer event))))) + + handle-lost-pointer-capture + (mf/use-fn + (fn [event] + (end-drag event))) + + handle-pointer-up + (mf/use-fn + (fn [event] + (when (= (.-pointerId event) (mf/ref-val pointer-id-ref)) + (end-drag event)))) + + handle-pointer-move + (mf/use-fn + (fn [event] + (when (and (mf/ref-val dragging-ref) + (= (.-pointerId event) (mf/ref-val pointer-id-ref))) + (let [target (mf/ref-val target-ref) + start (mf/ref-val initial-client-ref) + pos (dom/get-client-position event) + {:keys [x y]} (mf/ref-val initial-translate-ref) + delta-x (+ x (- (:x pos) (:x start))) + delta-y (+ y (- (:y pos) (:y start)))] + (when target + (dom/set-css-property! target "transform" + (str "translate(" delta-x "px, " delta-y "px)"))))))) + + handle-pointer-down + (mf/use-fn + (mf/deps on-move dragging-class) + (fn [event] + (when (and (= (.-button event) 0) + (not (and (instance? js/Element (.-target event)) + (.closest (.-target event) "button")))) + (dom/prevent-default event) + (let [target (mf/ref-val target-ref)] + (when target + (mf/set-ref-val! pointer-id-ref (.-pointerId event)) + (mf/set-ref-val! initial-client-ref (dom/get-client-position event)) + (mf/set-ref-val! initial-translate-ref (parse-translate target)) + (mf/set-ref-val! dragging-ref true) + (set-dragging-class! target dragging-class true) + (dom/capture-pointer event) + (when on-move (on-move)))))))] + + {:on-pointer-down handle-pointer-down + :on-pointer-move handle-pointer-move + :on-pointer-up handle-pointer-up + :on-lost-pointer-capture handle-lost-pointer-capture}))) diff --git a/frontend/src/app/main/ui/workspace.cljs b/frontend/src/app/main/ui/workspace.cljs index 4c1c1de5b4..5aa885e9a9 100644 --- a/frontend/src/app/main/ui/workspace.cljs +++ b/frontend/src/app/main/ui/workspace.cljs @@ -25,6 +25,7 @@ [app.main.ui.hooks.resize :refer [use-resize-observer]] [app.main.ui.modal :refer [modal-container*]] [app.main.ui.workspace.colorpicker] + [app.main.ui.workspace.components-debugger :refer [components-debugger*]] [app.main.ui.workspace.context-menu :refer [context-menu*]] [app.main.ui.workspace.coordinates :as coordinates] [app.main.ui.workspace.libraries] @@ -271,6 +272,7 @@ [:> (mf/provider ctx/design-tokens) {:value design-tokens?} [:> (mf/provider ctx/workspace-read-only?) {:value read-only?} [:> modal-container*] + [:> components-debugger*] [:section {:class (stl/css :workspace) :style {:background-color background-color :touch-action "none" diff --git a/frontend/src/app/main/ui/workspace/components_debugger.cljs b/frontend/src/app/main/ui/workspace/components_debugger.cljs new file mode 100644 index 0000000000..d4aee9d90b --- /dev/null +++ b/frontend/src/app/main/ui/workspace/components_debugger.cljs @@ -0,0 +1,1189 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC Sucursal en España SL + +(ns app.main.ui.workspace.components-debugger + (:require-macros [app.main.style :as stl]) + (:require + [app.common.data.macros :as dm] + [app.common.files.helpers :as cfh] + [app.common.thumbnails :as thc] + [app.common.types.component :as ctk] + [app.common.types.container :as ctn] + [app.common.types.file :as ctf] + [app.main.data.workspace.thumbnails :as dwt] + [app.main.refs :as refs] + [app.main.store :as st] + [app.main.ui.ds.buttons.icon-button :refer [icon-button*]] + [app.main.ui.ds.foundations.assets.icon :as i :refer [icon*]] + [app.main.ui.hooks :as hooks] + [app.main.ui.hooks.floating-drag :as fd] + [app.util.debug :as dbg] + [app.util.dom :as dom] + [app.util.i18n :refer [tr]] + [app.util.shape-icon :as usi] + [app.util.timers :as tm] + [app.util.webapi :as wapi] + [cuerdas.core :as str] + [rumext.v2 :as mf])) + +(def ^:private panel-width 1024) +(def ^:private panel-height 768) +(def ^:private sidebar-offset 290) +(def ^:private min-z-index 300) + +(def ^:private preview-x 16) +(def ^:private preview-y 16) +(def ^:private preview-width 400) +(def ^:private panels-gap 56) +(def ^:private marker-radius 11) +(def ^:private marker-dot-radius 4) +(def ^:private text-padding 8) +(def ^:private text-line-height 16) +(def ^:private icon-size 16) +(def ^:private labels-title-gap 12) +(def ^:private thumbnail-height 80) +(def ^:private thumbnail-margin 8) +(def ^:private inner-padding 8) +(def ^:private child-gap 20) +(def ^:private box-min-height 40) +(def ^:private legend-gap 20) +(def ^:private legend-row-gap 24) +(def ^:private legend-line-width 36) +(def ^:private legend-width 220) +(def ^:private legend-padding-x 12) +(def ^:private legend-padding-y 10) +(def ^:private deleted-banner-height (+ text-padding text-line-height text-padding)) + +(defn- canvas-content-width + "Total SVG canvas width for the given number of panel columns." + [column-count] + (let [column-count (max 1 column-count) + column-step (+ preview-x preview-width panels-gap)] + (+ (* (dec column-count) column-step) + preview-width + (* 2 preview-x)))) + +(defn- column-x + "Left x coordinate of the panel column at `column-idx`." + [column-idx] + (+ preview-x (* column-idx (+ preview-width panels-gap)))) + +(defn- legend-total-height + "Height of the arrows legend (fixed two-row layout)." + [] + (+ (* 2 legend-padding-y) legend-row-gap (* 2 marker-radius))) + +(defn- initial-position + "Default fixed position for the floating debugger panel." + [] + {:top 40 + :left (- (:width (dom/get-window-size)) panel-width sidebar-offset)}) + +(defn- shape-box-labels + "Build footer info labels for a panel root (file/page name and ids)." + [_shape & {:keys [file-id page-id file-name page-name]}] + (cond-> [] + file-name + (conj (str "File: " file-name)) + + file-id + (conj (str "File Id: " file-id)) + + page-name + (conj (str "Page: " page-name)) + + page-id + (conj (str "Page Id: " page-id)))) + +(defn- thumbnail-slot-height + "Vertical space reserved for a shape thumbnail, including margins." + [] + (+ thumbnail-margin thumbnail-height thumbnail-margin)) + +(defn- shape-thumbnail-slot? + "Whether `shape` can show a thumbnail given file/page context." + [shape {:keys [file-id page-id]}] + (and file-id page-id + (or (cfh/frame-shape? shape) + (ctk/instance-root? shape) + (ctk/main-instance? shape) + ;; Swapped nested heads are not instance-roots, but still need a slot. + (some? (ctk/get-swap-slot shape))))) + +(defn- box-thumbnail-slot? + "A box reserves a thumbnail slot when it is the root of a panel or the + highlighted shape, and the shape itself qualifies for a thumbnail." + [shape root? highlight-id thumbnail-context] + (and (some? thumbnail-context) + (or root? (= (:id shape) highlight-id)) + (shape-thumbnail-slot? shape thumbnail-context))) + +(defn- labels-bg-height + "Height of the labels footer background, or nil when there are no labels." + [label-count] + (when (pos? label-count) + (+ text-padding + (* label-count text-line-height) + text-padding))) + +(defn- context-deleted-banner-height + "Extra top banner height when the panel marks a deleted component." + [thumbnail-context] + (if (:deleted-banner thumbnail-context) + deleted-banner-height + 0)) + +(defn- child-thumbnail-context + "Thumbnail context for nested boxes; deleted banner applies only to the root." + [thumbnail-context] + (dissoc thumbnail-context :deleted-banner)) + +(defn- box-header-height + "Height of the box header (optional deleted banner, thumbnail, title row)." + [_label-count thumbnail-slot? thumbnail-context] + (+ (context-deleted-banner-height thumbnail-context) + (if thumbnail-slot? + (+ thumbnail-margin + (thumbnail-slot-height) + labels-title-gap) + text-padding) + icon-size + text-padding)) + +(defn- labels-footer-height + "Height of the labels footer including the gap above it." + [label-count] + (if (pos? label-count) + (+ labels-title-gap + (labels-bg-height label-count)) + 0)) + +(defn- header-thumbnail-y + "Y coordinate of the thumbnail slot within a box header." + [y _label-count thumbnail-context] + (+ y + (context-deleted-banner-height thumbnail-context) + thumbnail-margin)) + +(defn- header-title-y + "Y coordinate of the title/icon row within a box header." + [y _label-count thumbnail-slot? thumbnail-context] + (+ y + (context-deleted-banner-height thumbnail-context) + (if thumbnail-slot? + (+ thumbnail-margin + (thumbnail-slot-height) + labels-title-gap) + text-padding))) + +(defn- shape-children + "Child shapes of `shape` looked up in `objects`, skipping missing ids." + [objects shape] + (->> (:shapes shape) + (map #(get objects %)) + (remove nil?))) + +(defn- shape-display-label + "Short label combining truncated shape name and trailing id digits." + [shape] + (let [name (:name shape) + short-name (if (< (count name) 24) + name + (str (str/slice name 0 22) "...")) + short-id (str/slice (str (:id shape)) 24)] + (str short-name " | " short-id))) + +(defn- near-match-source-shape + "Shape used to resolve the near component match." + [objects shape] + (if (and (not (ctk/in-component-copy? shape)) + (ctn/has-any-copy-parent? objects shape)) + (last (ctn/get-parent-copy-heads objects shape)) + shape)) + +(defn- ref-shape->component-head + "Walk from a ref shape to its component head, preserving context metadata." + [ref-shape] + (when ref-shape + (let [meta' (meta ref-shape) + container (:container meta') + objects (:objects container) + head (or (last (ctn/get-parent-heads objects ref-shape)) + ref-shape)] + (cond-> head + meta' (with-meta meta'))))) + +(defn- near-component-render-data + "Panel render data for a near-component head and its highlighted ref." + [near-head ref-shape] + (when near-head + (let [container (-> near-head meta :container)] + {:shape near-head + :objects (:objects container) + :highlight-id (:id ref-shape)}))) + + +(defn- resolve-near-component-shape + "Resolve near-match (or ref-shape fallback) render data for `shape`. + Includes deleted components so the chain can surface them." + [file page libraries objects shape] + (when-let [source (near-match-source-shape objects shape)] + (when-let [ref-shape (or (ctf/find-near-match file page libraries source + :with-context? true + :include-deleted? true) + (ctf/find-ref-shape file page libraries source + :with-context? true + :include-deleted? true))] + (near-component-render-data (ref-shape->component-head ref-shape) + ref-shape)))) + +(defn- resolve-file-name + "File objects from with-context metadata often lack :name; look it up." + [file libraries] + (or (:name file) + (when-let [file-id (:id file)] + (get-in libraries [file-id :name])))) + +(defn- deleted-component-container? + "True when the container is a deleted component (not a live page)." + [container] + (boolean (or (:deleted container) + (ctn/component? container)))) + +(defn- enrich-near-component-data + "Attach root shape, file/page ids and display names to near-match data." + [near-data {:keys [file page]} libraries] + (when near-data + (let [shape (:shape near-data) + objects (:objects near-data) + meta' (meta shape) + ;; Prefer the matched shape's file/page (where the tree lives). + match-file (or (:file meta') file) + match-page (or (:container meta') page) + deleted? (deleted-component-container? match-page) + file-id (:id match-file) + root-shape (or (ctn/get-instance-root objects shape) + (when deleted? + (ctk/get-deleted-component-root match-page)) + shape)] + (assoc near-data + :root-shape root-shape + :file match-file + :page match-page + :deleted deleted? + :file-name (resolve-file-name match-file libraries) + :file-id file-id + :page-name (:name match-page) + :page-id (:id match-page))))) + +(defn- resolve-swap-slot-main-data + "When the highlighted shape has a swap-slot, return its component main tree." + [file page libraries objects highlight-id] + (when-let [shape (get objects highlight-id)] + (when (ctk/get-swap-slot shape) + (when-let [component (ctf/find-ref-component file page libraries shape + :include-deleted? true)] + (let [head (ctn/get-head-shape objects shape) + component-file (ctf/find-component-file file libraries (:component-file head)) + file-data (:data component-file) + container (ctf/get-component-container file-data component) + root-shape (ctf/get-component-root file-data component) + component-page (ctf/get-component-page file-data component) + highlight-main-id + (or (ctf/find-ref-id-for-swapped shape page libraries) + (some-> (ctf/get-ref-shape file-data component shape) :id) + (ctk/get-swap-slot shape))] + (when root-shape + {:root-shape root-shape + :objects (:objects container) + :highlight-id highlight-main-id + :file component-file + :deleted (boolean (:deleted component)) + :file-name (resolve-file-name component-file libraries) + :file-id (:id component-file) + :page-name (:name component-page) + :page-id (:id component-page)})))))) + +(defn- near-match-context + "Resolve file/page/objects for near-match lookup from shape metadata, + falling back to the workspace context." + [shape workspace-file workspace-page workspace-objects] + (let [meta' (meta shape)] + (if-let [container (:container meta')] + {:file (or (:file meta') workspace-file) + :page container + :objects (:objects container)} + {:file workspace-file + :page workspace-page + :objects workspace-objects}))) + +(defn- near-component-data-chain + "Resolve near-component matches recursively until no more matches. + Stops if a shape id repeats to avoid cycles, and does not walk past + a deleted component." + [workspace-file workspace-page libraries workspace-objects initial-shape] + (loop [shape initial-shape + result [] + seen #{}] + (if (or (nil? shape) (contains? seen (:id shape))) + result + (let [seen (conj seen (:id shape)) + {:keys [file page objects]} + (near-match-context shape workspace-file workspace-page workspace-objects)] + (if-let [near-data (when (and file page) + (enrich-near-component-data + (resolve-near-component-shape file page libraries objects shape) + {:file file :page page} + libraries))] + (if (:deleted near-data) + (conj result near-data) + (recur (:shape near-data) (conj result near-data) seen)) + result))))) + +(defn- child-insets + "Left/right padding applied around nested child boxes." + [] + {:left (* 2 inner-padding) + :right inner-padding}) + +(defn- child-content-width + "Inner width available for child boxes inside a parent of `width`." + [width] + (let [{:keys [left right]} (child-insets)] + (- width left right))) + +(defn- shape-box-height + "Computed height of a shape box including nested children." + ([objects shape width] + (shape-box-height objects shape width nil nil nil false)) + ([objects shape width labels thumbnail-context highlight-id root?] + (let [thumbnail-slot? (box-thumbnail-slot? shape root? highlight-id thumbnail-context) + label-count (count labels) + header (box-header-height label-count thumbnail-slot? thumbnail-context) + footer (labels-footer-height label-count) + children (shape-children objects shape)] + (if (empty? children) + (max box-min-height (+ header footer)) + (let [child-width (child-content-width width) + children-height + (->> children + (map #(shape-box-height objects % child-width nil + (child-thumbnail-context thumbnail-context) + highlight-id false)) + (interpose child-gap) + (reduce + 0))] + (+ header (* 2 inner-padding) children-height footer)))))) + +(defn- shape-child-layouts + "Layout descriptors for each child box under `shape`." + [objects shape x y width labels thumbnail-context highlight-id root?] + (let [thumbnail-slot? (box-thumbnail-slot? shape root? highlight-id thumbnail-context) + header (box-header-height (count labels) thumbnail-slot? thumbnail-context) + children (reverse (shape-children objects shape)) + {:keys [left]} (child-insets) + inner-x (+ x left) + inner-w (child-content-width width) + start-y (+ y header inner-padding) + child-ctx (child-thumbnail-context thumbnail-context)] + (loop [cy start-y + [child & rest] children + result []] + (if child + (let [child-height (shape-box-height objects child inner-w nil child-ctx highlight-id false)] + (recur (+ cy child-height child-gap) + rest + (conj result {:shape child :x inner-x :y cy :width inner-w}))) + result)))) + +(defn- root-panel-height + "Height of a top-level panel rooted at `root-shape`." + [objects root-shape labels thumbnail-context highlight-id] + (shape-box-height objects root-shape preview-width labels thumbnail-context highlight-id true)) + +(defn- swap-slot-panel + "Build a swap-main panel for the highlight at `column-idx`. + The panel is drawn one column to the right (`(inc column-idx)`), so + arrows pair it with `highlight-panels` via `(dec column-idx)`." + [column-idx swap-row-y file page libraries objects highlight-id] + (when-let [{:keys [root-shape objects highlight-id file deleted + file-id page-id file-name page-name]} + (resolve-swap-slot-main-data file page libraries objects highlight-id)] + {:column-idx (inc column-idx) + :y swap-row-y + :root-shape root-shape + :objects objects + :highlight-id highlight-id + :file file + :deleted deleted + :file-name file-name + :file-id file-id + :page-name page-name + :page-id page-id + :labels (shape-box-labels root-shape + :file-name file-name + :file-id file-id + :page-name page-name + :page-id page-id)})) + +(defn- shape-highlight-anchor + "Return {:left :right :y} for the highlighted shape box." + [objects shape x y width labels thumbnail-context highlight-id root?] + (if (= (:id shape) highlight-id) + (let [height (shape-box-height objects shape width labels thumbnail-context highlight-id root?)] + {:left x + :right (+ x width) + :y (+ y (/ height 2))}) + (some (fn [{:keys [shape x y width]}] + (shape-highlight-anchor objects shape x y width nil thumbnail-context highlight-id false)) + (shape-child-layouts objects shape x y width labels thumbnail-context highlight-id root?)))) + +(defn- panel-highlight-anchor + "Highlight anchor for a panel map used when drawing connection arrows." + [{:keys [objects root-shape highlight-id labels thumbnail-context panel-x panel-y]}] + (when highlight-id + (shape-highlight-anchor objects root-shape panel-x panel-y preview-width + labels thumbnail-context highlight-id true))) + +(defn- navigate-arrow-path + "SVG path data for the arrowhead drawn at connection endpoints." + [] + "M -6.5 0 L 5.5 0 M 6.715 0.715 L -0.5 -6.5 M 6.715 -0.715 L -0.365 6.635") + +(defn- highlight-arrow-path + "Cubic SVG path from `from-anchor` to `to-anchor` for a connection arrow." + [from-anchor to-anchor] + (let [x1 (+ (:right from-anchor) marker-dot-radius) + y1 (:y from-anchor) + x2 (- (:left to-anchor) marker-radius) + y2 (:y to-anchor) + mid-x (/ (+ x1 x2) 2)] + (dm/str "M " x1 " " y1 + " C " mid-x " " y1 ", " + mid-x " " y2 ", " + x2 " " y2))) + +(defn- arrow-marker-styles + "CSS module classes for arrow markers of the given variant (:swap or default)." + [variant] + (case variant + :swap {:circle (stl/css :swap-arrow-marker-circle) + :icon (stl/css :swap-arrow-marker-icon) + :path (stl/css :swap-arrow)} + {:circle (stl/css :highlight-arrow-marker-circle) + :icon (stl/css :highlight-arrow-marker-icon) + :path (stl/css :highlight-arrow)})) + +(defn- swap-panel-as-highlight-panel + "Adapt a swap panel map into the highlight-panel shape used for anchors." + [{:keys [column-idx y objects root-shape labels file-id page-id]}] + {:objects objects + :root-shape root-shape + :highlight-id (:id root-shape) + :labels labels + :thumbnail-context {:file-id file-id :page-id page-id} + :panel-x (column-x column-idx) + :panel-y y}) + +(defn- build-swap-panel-pairs + "Pair each swap panel with its source highlight panel for arrow drawing." + [highlight-panels swap-panels] + (keep (fn [swap] + (when-let [from (nth highlight-panels (dec (:column-idx swap)) nil)] + [from (swap-panel-as-highlight-panel swap)])) + swap-panels)) + +(mf/defc highlight-arrow-marker* + "Endpoint marker for a connection arrow (dot or arrowhead)." + {::mf/private true} + [{:keys [x y show-arrow circle-class icon-class]}] + [:g {:transform (dm/str "translate(" x "," y ")")} + [:circle {:cx 0 + :cy 0 + :r (if show-arrow marker-radius marker-dot-radius) + :class circle-class}] + (when show-arrow + [:path {:d (navigate-arrow-path) + :class icon-class}])]) + +(mf/defc connection-arrows* + "Draw curved arrows between consecutive panel pairs for a given variant." + {::mf/private true} + [{:keys [panel-pairs variant]}] + (let [{:keys [circle icon path]} (arrow-marker-styles variant)] + (for [[idx [from-panel to-panel]] (map-indexed vector panel-pairs) + :let [from (panel-highlight-anchor from-panel) + to (panel-highlight-anchor to-panel)] + :when (and from to)] + ^{:key (dm/str (name variant) "-arrow-" idx)} + [:g + [:path {:d (highlight-arrow-path from to) + :class path + :fill "none"}] + [:> highlight-arrow-marker* + {:x (+ (:right from) marker-dot-radius) + :y (:y from) + :circle-class circle}] + [:> highlight-arrow-marker* + {:x (- (:left to) marker-radius 2) + :y (:y to) + :show-arrow true + :circle-class circle + :icon-class icon}]]))) + +(mf/defc highlight-arrows* + "Near-match and swap connection arrows overlaid on the canvas." + {::mf/private true} + [{:keys [highlight-pairs swap-pairs]}] + [:g {:class (stl/css :highlight-arrows)} + [:> connection-arrows* {:panel-pairs highlight-pairs :variant :highlight}] + [:> connection-arrows* {:panel-pairs swap-pairs :variant :swap}]]) + +(mf/defc arrows-legend* + "Legend explaining near-match vs swap arrow colors." + {::mf/private true} + [{:keys [x y]}] + (let [rows [{:variant :highlight :label "Near shape ref"} + {:variant :swap :label "Swapped by"}] + row-count (count rows) + row-start-y (+ y legend-padding-y marker-radius) + marker-start-x (+ x legend-padding-x) + marker-end-x (+ marker-start-x legend-line-width) + legend-height (+ (* 2 legend-padding-y) + (* (dec row-count) legend-row-gap) + (* 2 marker-radius))] + [:g {:class (stl/css :highlight-arrows)} + [:rect {:x x + :y y + :width legend-width + :height legend-height + :rx 6 + :ry 6 + :class (stl/css :legend-bg)}] + (for [[idx {:keys [variant label]}] (map-indexed vector rows) + :let [row-y (+ row-start-y (* idx legend-row-gap)) + {:keys [circle icon path]} (arrow-marker-styles variant) + marker-x marker-end-x]] + ^{:key (dm/str "legend-" (name variant))} + [:g + [:path {:d (dm/str "M " marker-start-x " " row-y " L " marker-x " " row-y) + :class path + :fill "none"}] + [:> highlight-arrow-marker* + {:x marker-start-x + :y row-y + :circle-class circle}] + [:> highlight-arrow-marker* + {:x marker-x + :y row-y + :show-arrow true + :circle-class circle + :icon-class icon}] + [:text {:x (+ marker-x 18) + :y row-y + :dominant-baseline "middle" + :class (stl/css :legend-text)} + label]])])) + +(mf/defc labeled-rect* + "Single shape box: border, optional thumbnail, title, and footer labels." + {::mf/private true} + [{:keys [x y width height name labels icon-id icon-component? selected? + thumbnail-uri thumbnail-slot? thumbnail-unavailable + swap-variant deleted-variant root?]}] + (let [has-icon? (some? icon-id) + label-count (count labels) + labels-height (labels-bg-height label-count) + labels-y (when labels-height + (- (+ y height) labels-height)) + text-x (+ x text-padding) + deleted-root? (and deleted-variant root?) + banner-context (when deleted-root? {:deleted-banner true}) + thumbnail-slot-y (header-thumbnail-y y label-count banner-context) + thumbnail-y (+ thumbnail-slot-y thumbnail-margin) + thumbnail-w (- width (* 2 text-padding)) + title-y (header-title-y y label-count thumbnail-slot? banner-context)] + [:g + [:rect {:x x + :y y + :width width + :height height + :class (stl/css-case :selection-preview-box true + :selected selected? + :swap (and swap-variant (or root? selected?)) + :deleted (and deleted-variant (or root? selected?)))}] + + (when deleted-root? + [:g + [:rect {:x (+ x 1) + :y (+ y 1) + :width (- width 2) + :height (- deleted-banner-height 1) + :class (stl/css :deleted-header-bg)}] + [:text {:x text-x + :y (+ y text-padding) + :dominant-baseline "hanging" + :class (stl/css :deleted-header-text)} + "Deleted component"]]) + + (when labels-y + ;; Inset 1px so the box stroke isn't covered by the labels fill. + [:rect {:x (+ x 1) + :y labels-y + :width (- width 2) + :height (- labels-height 1) + :class (stl/css :info-labels-bg)}]) + + (for [[idx label] (map-indexed vector labels) + :let [text (if (string? label) label (str label))]] + ^{:key idx} + [:text {:x text-x + :y (+ labels-y text-padding (* idx text-line-height)) + :text-anchor "start" + :dominant-baseline "hanging" + :class (stl/css :info-text)} + text]) + + (when thumbnail-slot? + [:g + [:rect {:x (+ x text-padding) + :y thumbnail-y + :width thumbnail-w + :height thumbnail-height + :class (stl/css-case :shape-thumbnail-bg true + :is-loading (and (nil? thumbnail-uri) + (not thumbnail-unavailable)) + :unavailable thumbnail-unavailable)}] + (cond + thumbnail-uri + [:image {:x (+ x text-padding) + :y thumbnail-y + :width thumbnail-w + :height thumbnail-height + :href thumbnail-uri + :preserveAspectRatio "xMidYMid meet" + :class (stl/css :shape-thumbnail-image)}] + + thumbnail-unavailable + [:text {:x (+ x text-padding (/ thumbnail-w 2)) + :y (+ thumbnail-y (/ thumbnail-height 2)) + :text-anchor "middle" + :dominant-baseline "middle" + :class (stl/css :shape-thumbnail-unavailable)} + "No thumbnail available"] + + :else + [:text {:x (+ x text-padding (/ thumbnail-w 2)) + :y (+ thumbnail-y (/ thumbnail-height 2)) + :text-anchor "middle" + :dominant-baseline "middle" + :class (stl/css :shape-thumbnail-loading)} + "Loading…"])]) + + (when has-icon? + [:g {:transform (dm/str "translate(" text-x "," title-y ")")} + [:> icon* {:icon-id icon-id + :size "m" + :class (stl/css-case :selection-preview-icon true + :component icon-component?)}]]) + [:text {:x (+ text-x 20) + :y title-y + :dominant-baseline "hanging" + :class (stl/css :selection-preview-text)} + name]])) + +(defn- shape-thumbnail-tag + "Object-id tag used for a shape's own thumbnail: root frames render under + \"frame\", every other shape under \"component\"." + [shape] + (if (cfh/frame-shape? shape) "frame" "component")) + +;; Debugger-owned thumbnail URIs (object-id -> blob uri). After generation we +;; copy the workspace thumbnail here and clear it from workspace state so the +;; canvas is not left with a debugger-only render. +(defonce ^:private local-thumbnails (atom {})) + +;; Object-ids we have already asked to generate in this session (once each). +(defonce ^:private thumbnail-request-cache (atom #{})) + +;; Workspace uri present when a generation was requested; ignored on capture so +;; a swapped shape's stale thumbnail is never stored as the local result. +(defonce ^:private thumbnail-request-baseline (atom {})) + +(when-not (map? @local-thumbnails) + (reset! local-thumbnails {})) + +(when-not (set? @thumbnail-request-cache) + (reset! thumbnail-request-cache #{})) + +(when-not (map? @thumbnail-request-baseline) + (reset! thumbnail-request-baseline {})) + +(defn- clear-local-thumbnails! + "Revoke and drop all debugger-owned thumbnails (call when the debugger closes)." + [] + (doseq [uri (vals @local-thumbnails)] + (when (string? uri) + (wapi/revoke-uri uri))) + (reset! local-thumbnails {}) + (reset! thumbnail-request-cache #{}) + (reset! thumbnail-request-baseline {})) + +(defn- mark-thumbnail-requested! + "Mark `object-id` as requested with the current workspace `baseline-uri`. + Returns true on the first mark." + [object-id baseline-uri] + (let [first?* (atom false)] + (swap! thumbnail-request-cache + (fn [ids] + (let [ids (if (set? ids) ids #{})] + (if (contains? ids object-id) + ids + (do + (reset! first?* true) + (conj ids object-id)))))) + (when @first?* + (swap! thumbnail-request-baseline assoc object-id baseline-uri)) + @first?*)) + +(defn- store-local-thumbnail! + "Keep a private copy of `uri` for `object-id`, then clear the workspace + thumbnail (which would revoke the original blob URL)." + [file-id page-id shape-id tag object-id uri] + (when (and uri (nil? (get @local-thumbnails object-id))) + ;; Reserve the slot so concurrent captures do not race. + (swap! local-thumbnails assoc object-id :pending) + (-> (js/fetch uri) + (.then (fn [response] (.blob response))) + (.then (fn [blob] + (let [local-uri (wapi/create-uri blob)] + (swap! local-thumbnails assoc object-id local-uri) + (swap! thumbnail-request-baseline dissoc object-id) + (st/emit! (dwt/clear-thumbnail file-id page-id shape-id tag))))) + (.catch (fn [_] + (swap! local-thumbnails dissoc object-id)))))) + +(defn- use-shape-thumbnail + "URI of `shape`'s thumbnail for the debugger. + + Prefers a locally stored URI. Missing thumbnails and swapped shapes are + generated once into workspace state, then copied into `local-thumbnails` + and cleared from the workspace. Non-swapped shapes that already have a + workspace thumbnail keep using it. When `enabled?` is false (e.g. deleted + shapes) nothing is generated and nil is returned." + [shape file-id page-id enabled?] + (let [shape-id (:id shape) + tag (shape-thumbnail-tag shape) + swapped? (some? (ctk/get-swap-slot shape)) + object-id (mf/with-memo [file-id page-id shape-id tag] + (thc/fmt-object-id file-id page-id shape-id tag)) + thumb-ref (mf/with-memo [object-id] + (refs/workspace-thumbnail-by-id object-id)) + workspace-uri (:uri (mf/deref thumb-ref)) + local-entry (get @local-thumbnails object-id) + local-uri (when (string? local-entry) local-entry) + missing? (nil? workspace-uri)] + + ;; Request generation once for missing or swapped shapes with no local uri. + (mf/with-effect [object-id enabled? swapped? local-entry missing? workspace-uri] + (when (and enabled? file-id page-id shape-id (nil? local-entry)) + (cond + swapped? + (when (mark-thumbnail-requested! object-id workspace-uri) + (st/emit! (dwt/clear-thumbnail file-id page-id shape-id tag)) + (tm/schedule-on-idle + #(st/emit! (dwt/update-thumbnail file-id page-id shape-id tag + "components-debugger")))) + + missing? + (when (mark-thumbnail-requested! object-id nil) + (tm/schedule-on-idle + #(st/emit! (dwt/update-thumbnail file-id page-id shape-id tag + "components-debugger"))))))) + + ;; Once workspace has a freshly generated uri, keep it locally and clear. + (mf/with-effect [object-id enabled? workspace-uri] + (when (and enabled? workspace-uri (nil? local-entry) + (contains? @thumbnail-request-cache object-id) + (not= workspace-uri (get @thumbnail-request-baseline object-id))) + (store-local-thumbnail! file-id page-id shape-id tag object-id workspace-uri))) + + (when enabled? + (or local-uri + ;; Swapped workspace uris are stale until regenerated into local. + (when-not swapped? + workspace-uri))))) + +(mf/defc shape-box* + "Recursive shape tree box with thumbnails and nested children." + {::mf/private true} + [{:keys [shape objects x y width selected-id labels thumbnail-context root? + swap-variant deleted-variant]}] + (let [labels (or labels (shape-box-labels shape)) + thumbnail-slot? (box-thumbnail-slot? shape root? selected-id thumbnail-context) + file-id (:file-id thumbnail-context) + page-id (:page-id thumbnail-context) + thumbnail-unavailable? deleted-variant + thumbnail-uri (use-shape-thumbnail shape file-id page-id + (and thumbnail-slot? + (not thumbnail-unavailable?))) + height (shape-box-height objects shape width labels thumbnail-context selected-id root?) + child-layouts (shape-child-layouts objects shape x y width labels thumbnail-context selected-id root?) + selected? (= (:id shape) selected-id) + icon-component? (or (ctk/instance-head? shape) + (ctk/is-variant-container? shape))] + [:g + [:> labeled-rect* + {:x x + :y y + :width width + :height height + :name (shape-display-label shape) + :labels labels + :icon-id (usi/get-shape-icon shape) + :icon-component? icon-component? + :selected? selected? + :swap-variant swap-variant + :deleted-variant deleted-variant + :root? root? + :thumbnail-uri thumbnail-uri + :thumbnail-unavailable thumbnail-unavailable? + :thumbnail-slot? thumbnail-slot?}] + (for [{:keys [shape x y width]} child-layouts] + ^{:key (dm/str (:id shape))} + [:> shape-box* + {:shape shape + :objects objects + :x x + :y y + :width width + :selected-id selected-id + :swap-variant swap-variant + :deleted-variant deleted-variant + :thumbnail-context (child-thumbnail-context thumbnail-context)}])])) + +(mf/defc components-debugger-content* + "Floating debugger UI: selection, near-match chain, and swap panels." + {::mf/private true} + [] + (let [container (hooks/use-portal-container :popup) + + wrapper-ref (mf/use-ref nil) + z-index-ref (mf/use-ref min-z-index) + + selected (mf/deref refs/selected-shapes) + objects (mf/deref refs/workspace-page-objects) + file (mf/deref refs/file) + page (mf/deref refs/workspace-page) + libraries (mf/deref refs/files) + + selected-id + (when (= 1 (count selected)) + (first selected)) + + selected-shape + (when selected-id + (get objects selected-id)) + + root-shape + (when selected-shape + (ctn/get-instance-root objects selected-shape)) + + near-component-chain + (when (and selected-shape file page) + (near-component-data-chain file page libraries objects selected-shape)) + + selection-labels + (when root-shape + (shape-box-labels root-shape + :file-name (:name file) + :file-id (:id file) + :page-name (:name page) + :page-id (:id page))) + + selection-panel-height + (when root-shape + (root-panel-height objects root-shape selection-labels + {:file-id (:id file) :page-id (:id page)} + selected-id)) + + legend-x + (+ preview-x (/ (- preview-width legend-width) 2)) + + ;; When any near panel is deleted, shift non-deleted first-row panels + ;; down so their content lines up with the area below the deleted banner. + first-row-align-offset + (if (some :deleted near-component-chain) + deleted-banner-height + 0) + + selection-panel-y + (+ preview-y first-row-align-offset) + + legend-y + (when selection-panel-height + (+ selection-panel-y selection-panel-height legend-gap)) + + first-row-heights + (cond-> [] + selection-panel-height + (conj (+ selection-panel-height first-row-align-offset)) + + near-component-chain + (into (map (fn [{:keys [root-shape objects highlight-id deleted + file-name file-id page-name page-id]}] + (let [height (root-panel-height objects root-shape + (shape-box-labels root-shape + :file-name file-name + :file-id file-id + :page-name page-name + :page-id page-id) + {:file-id file-id + :page-id page-id + :deleted-banner deleted} + highlight-id)] + (if deleted + height + (+ height first-row-align-offset)))) + near-component-chain))) + + swap-row-y + (when (seq first-row-heights) + (+ preview-y (apply max first-row-heights) panels-gap)) + + selection-swap-panel + (when (and root-shape selected-id swap-row-y) + (swap-slot-panel 0 swap-row-y + file page libraries objects selected-id)) + + near-swap-panels + (when (and near-component-chain swap-row-y) + (keep-indexed + ;; Near columns are 1-based (selection is column 0), matching + ;; swap-slot-panel's (inc column-idx) placement and arrow pairing. + (fn [idx {:keys [highlight-id file page objects]}] + (swap-slot-panel (inc idx) swap-row-y + file page libraries objects highlight-id)) + near-component-chain)) + + swap-panels* + (cond-> [] + selection-swap-panel (conj selection-swap-panel) + (seq near-swap-panels) (into near-swap-panels)) + + swap-row-align-offset + (if (some :deleted swap-panels*) + deleted-banner-height + 0) + + swap-panels + (mapv (fn [panel] + (cond-> panel + (not (:deleted panel)) + (update :y + swap-row-align-offset))) + swap-panels*) + + primary-column-count + (if near-component-chain + (inc (count near-component-chain)) + (if root-shape 1 0)) + + max-column-idx + (reduce max (dec primary-column-count) + (map :column-idx swap-panels)) + + canvas-width + (canvas-content-width (inc max-column-idx)) + + swap-panel-heights + (map (fn [{:keys [objects root-shape labels highlight-id file-id page-id deleted]}] + (let [height (root-panel-height objects root-shape labels + {:file-id file-id + :page-id page-id + :deleted-banner deleted} + highlight-id)] + (if deleted + height + (+ height swap-row-align-offset)))) + swap-panels) + + canvas-height + (let [first-row-bottom (when (seq first-row-heights) + (+ preview-y (apply max first-row-heights))) + legend-bottom (when legend-y + (+ legend-y (legend-total-height))) + swap-bottom (when (and swap-row-y (seq swap-panel-heights)) + (+ swap-row-y (apply max swap-panel-heights))) + bottoms (remove nil? [first-row-bottom legend-bottom swap-bottom])] + (when (seq bottoms) + (+ (apply max bottoms) preview-y))) + + highlight-panels + (cond-> [] + (and root-shape selected-id) + (conj {:objects objects + :root-shape root-shape + :highlight-id selected-id + :labels selection-labels + :thumbnail-context {:file-id (:id file) :page-id (:id page)} + :panel-x preview-x + :panel-y selection-panel-y}) + + near-component-chain + (into (map-indexed + (fn [idx {:keys [root-shape objects highlight-id deleted + file-name file-id page-name page-id]}] + {:objects objects + :root-shape root-shape + :highlight-id highlight-id + :labels (shape-box-labels root-shape + :file-name file-name + :file-id file-id + :page-name page-name + :page-id page-id) + :thumbnail-context {:file-id file-id + :page-id page-id + :deleted-banner deleted} + :panel-x (column-x (inc idx)) + :panel-y (if deleted + preview-y + (+ preview-y first-row-align-offset))}) + near-component-chain))) + + bring-to-front + (mf/use-fn + (fn [] + (let [target (mf/ref-val wrapper-ref)] + (when target + (mf/set-ref-val! z-index-ref (inc (mf/ref-val z-index-ref))) + (dom/set-css-property! target "z-index" + (dm/str (mf/ref-val z-index-ref))))))) + + {:keys [on-pointer-down on-pointer-move on-pointer-up on-lost-pointer-capture]} + (fd/use-floating-drag wrapper-ref + bring-to-front + (stl/css :is-dragging)) + + {:keys [top left]} + (initial-position) + + handle-close + (mf/use-fn + (fn [] + (clear-local-thumbnails!) + (dbg/disable! :components-debugger)))] + + ;; Also clear if the debugger unmounts without using the close button + ;; (e.g. debug flag toggled elsewhere). + (mf/with-effect [] + (fn [] + (clear-local-thumbnails!))) + + (mf/portal + (mf/html + [:div {:ref wrapper-ref + :class (stl/css :wrapper) + :style {:position "fixed" + :top (dm/str top "px") + :left (dm/str left "px") + :width (dm/str panel-width "px") + :height (dm/str panel-height "px") + :z-index min-z-index}} + [:div {:class (stl/css :inner)} + [:div {:class (stl/css :header) + :on-pointer-down on-pointer-down + :on-pointer-move on-pointer-move + :on-pointer-up on-pointer-up + :on-lost-pointer-capture on-lost-pointer-capture} + [:h1 {:class (stl/css :title)} "COMPONENTS DEBUGGER (BETA)"] + [:> icon-button* {:variant "ghost" + :aria-label (tr "labels.close") + :on-click handle-close + :icon i/close}]] + + [:div {:class (stl/css :canvas)} + [:svg {:class (stl/css :canvas-svg) + :width canvas-width + :height (if canvas-height (dm/str canvas-height "px") "100%")} + (when (some? root-shape) + [:g + [:> shape-box* + {:shape root-shape + :objects objects + :selected-id selected-id + :root? true + :thumbnail-context {:file-id (:id file) + :page-id (:id page) + :file file + :libraries libraries} + :labels selection-labels + :x preview-x + :y selection-panel-y + :width preview-width}] + (for [[idx {:keys [root-shape objects highlight-id file deleted + file-name file-id page-name page-id]}] + (map-indexed vector near-component-chain) + :let [column-x (column-x (inc idx)) + panel-y (if deleted + preview-y + (+ preview-y first-row-align-offset))]] + ^{:key (dm/str "near-" (inc idx) "-" (:id root-shape))} + [:> shape-box* + {:shape root-shape + :objects objects + :selected-id highlight-id + :root? true + :deleted-variant deleted + :thumbnail-context {:file-id file-id + :page-id page-id + :file file + :libraries libraries + :deleted-banner deleted} + :labels (shape-box-labels root-shape + :file-name file-name + :file-id file-id + :page-name page-name + :page-id page-id) + :x column-x + :y panel-y + :width preview-width}]) + (for [{:keys [column-idx y root-shape objects highlight-id + file file-id page-id labels deleted]} + swap-panels + :let [swap-x (column-x column-idx)]] + ^{:key (dm/str "swap-" column-idx "-" (:id root-shape))} + [:> shape-box* + {:shape root-shape + :objects objects + :selected-id highlight-id + :root? true + :swap-variant true + :deleted-variant deleted + :thumbnail-context {:file-id file-id + :page-id page-id + :file file + :libraries libraries + :deleted-banner deleted} + :labels labels + :x swap-x + :y y + :width preview-width}]) + (when legend-y + [:> arrows-legend* {:x legend-x + :y legend-y}]) + [:> highlight-arrows* + {:highlight-pairs (map vector highlight-panels (rest highlight-panels)) + :swap-pairs (build-swap-panel-pairs highlight-panels swap-panels)}]])]]]]) + container))) + +(mf/defc components-debugger* + "Mounts the components debugger when the debug flag is enabled." + [] + (let [;; Subscribe to dbg/state so the component re-renders when + ;; debug options are toggled without a page reload. + _dbg (mf/deref dbg/state) + visible? (dbg/enabled? :components-debugger)] + (when visible? + [:> components-debugger-content*]))) diff --git a/frontend/src/app/main/ui/workspace/components_debugger.scss b/frontend/src/app/main/ui/workspace/components_debugger.scss new file mode 100644 index 0000000000..2dd49527a7 --- /dev/null +++ b/frontend/src/app/main/ui/workspace/components_debugger.scss @@ -0,0 +1,224 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// +// Copyright (c) KALEIDOS INC Sucursal en España SL + +@use "ds/_borders.scss" as *; +@use "ds/_sizes.scss" as *; +@use "ds/_utils.scss" as *; +@use "ds/typography.scss" as t; + +.wrapper { + position: fixed; + padding: var(--sp-s); + border-radius: $br-8; + border: $b-2 solid var(--color-background-quaternary); + box-shadow: 0 0 var(--sp-s) 0 var(--color-shadow-light); + overflow: hidden; + min-inline-size: $sz-24; + min-block-size: $sz-200; + max-inline-size: 90vw; + max-block-size: 90vh; + resize: both; + user-select: none; + background-color: var(--color-background-primary); + color: var(--color-foreground-secondary); + z-index: var(--z-index-set); +} + +.inner { + box-sizing: border-box; + display: flex; + flex-direction: column; + overflow: hidden; + block-size: 100%; + padding: var(--sp-s); +} + +.header { + align-items: center; + display: flex; + flex-shrink: 0; + justify-content: space-between; + border-block-end: $b-1 solid var(--color-background-quaternary); + padding-block-end: var(--sp-xxs); + cursor: grab; + touch-action: none; +} + +.wrapper.is-dragging .header { + cursor: grabbing; +} + +.title { + @include t.use-typography("body-small"); + + font-weight: var(--font-weight-medium); + margin: 0; + margin-inline-end: var(--sp-xxs); +} + +.canvas { + flex: 1; + min-block-size: 0; + overflow: auto; + padding-block-start: var(--sp-s); +} + +.canvas-svg { + display: block; + min-block-size: 100%; + min-inline-size: 100%; +} + +.selection-preview-box { + --stroke-color: var(--color-background-quaternary); + + fill: var(--color-background-primary); + stroke: var(--stroke-color); + stroke-width: $b-2; + + &.selected { + --stroke-color: var(--color-accent-secondary); + } + + &.swap { + --stroke-color: var(--color-accent-success); + } + + &.deleted { + --stroke-color: var(--color-accent-error); + } +} + +.selection-preview-icon { + --icon-stroke-color: var(--color-foreground-secondary); + + display: block; + + &.component { + --icon-stroke-color: var(--color-accent-secondary); + } +} + +.selection-preview-text { + @include t.use-typography("body-small"); + + fill: var(--color-foreground-primary); + user-select: text; +} + +.deleted-header-bg { + fill: var(--color-accent-error); +} + +.deleted-header-text { + @include t.use-typography("body-small"); + + fill: var(--color-static-white); + font-weight: var(--font-weight-medium); +} + +.info-labels-bg { + fill: var(--color-background-quaternary); +} + +.info-text { + @include t.use-typography("body-small"); + + fill: var(--color-foreground-primary); + text-anchor: start; + user-select: text; +} + +.shape-thumbnail-bg { + fill: var(--color-background-primary); + stroke: var(--color-background-quaternary); + stroke-width: $b-1; + + &.is-loading { + animation: thumbnail-loading-pulse 1.2s ease-in-out infinite; + } + + &.unavailable { + fill: var(--color-background-quaternary); + } +} + +.shape-thumbnail-image { + opacity: 0.95; +} + +.shape-thumbnail-loading { + @include t.use-typography("body-small"); + + fill: var(--color-foreground-secondary); + pointer-events: none; +} + +.shape-thumbnail-unavailable { + @include t.use-typography("body-small"); + + fill: var(--color-foreground-secondary); + pointer-events: none; +} + +@keyframes thumbnail-loading-pulse { + 0%, + 100% { + fill: var(--color-background-primary); + } + + 50% { + fill: var(--color-background-quaternary); + } +} + +.highlight-arrows { + pointer-events: none; +} + +.highlight-arrow { + stroke: var(--color-accent-secondary); + stroke-width: $b-2; +} + +.highlight-arrow-marker-circle { + fill: var(--color-accent-secondary); +} + +.highlight-arrow-marker-icon { + fill: var(--color-accent-secondary); + stroke: var(--color-background-primary); + stroke-width: $b-2; +} + +.swap-arrow { + stroke: var(--color-accent-success); + stroke-width: $b-2; +} + +.swap-arrow-marker-circle { + fill: var(--color-accent-success); +} + +.swap-arrow-marker-icon { + fill: var(--color-accent-success); + stroke: var(--color-background-primary); + stroke-width: $b-2; +} + +.legend-text { + @include t.use-typography("body-small"); + + fill: var(--color-foreground-primary); +} + +.legend-bg { + fill: var(--color-background-quaternary); +} + +::-webkit-resizer { + display: none; +} diff --git a/frontend/src/app/main/ui/workspace/sidebar/debug.cljs b/frontend/src/app/main/ui/workspace/sidebar/debug.cljs index 9e46f48c41..a7f6c48db0 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/debug.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/debug.cljs @@ -23,7 +23,8 @@ These options are handled reactively via okulary subscriptions." #{:shape-panel :show-ids - :show-touched}) + :show-touched + :components-debugger}) (mf/defc debug-panel* [{:keys [class]}] diff --git a/frontend/src/app/main/ui/workspace/sidebar/layer_name.cljs b/frontend/src/app/main/ui/workspace/sidebar/layer_name.cljs index 3e4b1ee570..3cd2038675 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/layer_name.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/layer_name.cljs @@ -27,7 +27,7 @@ variant-id variant-name variant-properties variant-error on-tab-press ref]}] (let [;; Subscribe to dbg/state so the component re-renders when - ;; :show-ids or :show-touched are toggled without a page reload. + ;; debug options are toggled without a page reload. _dbg (mf/deref dbg/state) edition* (mf/use-state false) diff --git a/frontend/src/app/util/debug.cljs b/frontend/src/app/util/debug.cljs index 0f8d4471f2..8eb7dfaffe 100644 --- a/frontend/src/app/util/debug.cljs +++ b/frontend/src/app/util/debug.cljs @@ -89,6 +89,9 @@ ;; Show info about shapes :shape-panel + ;; Show the floating components debugger window + :components-debugger + ;; Show what is touched in copies :display-touched From 9f029de578ef128328499decaac67612a121ed52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marina=20L=C3=B3pez?= Date: Thu, 2 Jul 2026 13:48:42 +0200 Subject: [PATCH 114/229] :sparkles: Handle penpot events from nitrate --- backend/src/app/rpc/management/nitrate.clj | 1 + .../rpc_management_nitrate_test.clj | 1 + frontend/src/app/main/data/nitrate.cljs | 48 ++++++++++++++----- .../src/app/main/ui/dashboard/sidebar.cljs | 6 ++- .../app/main/ui/dashboard/subscription.cljs | 4 +- .../nitrate_activation_success_modal.cljs | 3 +- .../src/app/main/ui/nitrate/nitrate_form.cljs | 8 ++-- .../app/main/ui/settings/subscription.cljs | 13 +++-- .../frontend_tests/data/nitrate_test.cljs | 21 ++++++++ 9 files changed, 84 insertions(+), 21 deletions(-) diff --git a/backend/src/app/rpc/management/nitrate.clj b/backend/src/app/rpc/management/nitrate.clj index c6178cda54..ecb52d139f 100644 --- a/backend/src/app/rpc/management/nitrate.clj +++ b/backend/src/app/rpc/management/nitrate.clj @@ -45,6 +45,7 @@ {:id (:id profile) :name (:fullname profile) :email (:email profile) + :created-at (:created-at profile) :photo-url (files/resolve-public-uri (get profile :photo-id))}) ;; ---- API: authenticate diff --git a/backend/test/backend_tests/rpc_management_nitrate_test.clj b/backend/test/backend_tests/rpc_management_nitrate_test.clj index 8ca30ccfce..cf7596d99e 100644 --- a/backend/test/backend_tests/rpc_management_nitrate_test.clj +++ b/backend/test/backend_tests/rpc_management_nitrate_test.clj @@ -38,6 +38,7 @@ (t/is (= (:id profile) (-> out :result :id))) (t/is (= "Nitrate User" (-> out :result :name))) (t/is (= (:email profile) (-> out :result :email))) + (t/is (= (:created-at profile) (-> out :result :created-at))) (t/is (nil? (-> out :result :photo-url))))) (t/deftest authenticate-requires-authentication diff --git a/frontend/src/app/main/data/nitrate.cljs b/frontend/src/app/main/data/nitrate.cljs index 279c622934..62f045ea63 100644 --- a/frontend/src/app/main/data/nitrate.cljs +++ b/frontend/src/app/main/data/nitrate.cljs @@ -6,6 +6,7 @@ [app.common.uuid :as uuid] [app.config :as cf] [app.main.data.common :as dcm] + [app.main.data.event :as ev] [app.main.data.modal :as modal] [app.main.data.notifications :as ntf] [app.main.data.team :as dt] @@ -54,22 +55,35 @@ (rx/map (fn [connectivity] (modal/show popup-type (merge (or connectivity {}) extra-props))))))))) +(defn build-admin-console-url + ([path] + (build-admin-console-url cf/public-uri path nil)) + ([path query-params] + (build-admin-console-url cf/public-uri path query-params)) + ([public-uri path query-params] + (dm/str + (cond-> (u/join public-uri "admin-console/" path) + (seq query-params) (assoc :query (u/map->query-string query-params)))))) + (defn go-to-nitrate-ac ([] - (st/emit! (rt/nav-raw :href "/admin-console/"))) + (st/emit! (rt/nav-raw :href (build-admin-console-url "")))) ([{:keys [organization-id organization-slug]}] (if (and organization-id organization-slug) - (let [href (dm/str "/admin-console/organization/" + (let [path (dm/str "organization/" (u/percent-encode organization-slug) "/" (u/percent-encode (str organization-id)) - "/people/")] + "/people/") + href (build-admin-console-url path)] (st/emit! (rt/nav-raw :href href))) - (st/emit! (rt/nav-raw :href "/admin-console/"))))) + (st/emit! (rt/nav-raw :href (build-admin-console-url "")))))) (defn go-to-nitrate-ac-create-organization - [] - (st/emit! (rt/nav-raw :href "/admin-console/?action=create-organization"))) + [event-origin] + (let [href (build-admin-console-url "" {:action "create-organization" + :origin event-origin})] + (st/emit! (rt/nav-raw :href href)))) (defn can-send-invitations? [{:keys [organization profile-id team-permissions]}] @@ -81,11 +95,12 @@ (def go-to-subscription-url (u/join cf/public-uri "#/settings/subscriptions")) -(def go-to-ac-url "/admin-console/") +(def go-to-ac-url (build-admin-console-url "")) (defn go-to-nitrate-billing [] - (let [href (dm/str "/admin-console/licenses/billing?callback=" (js/encodeURIComponent go-to-subscription-url))] + (let [href (build-admin-console-url "licenses/billing" + {:callback go-to-subscription-url})] (st/emit! (rt/nav-raw :href href)))) (def nitrate-checkout-error-token "nitrate-checkout-error") @@ -104,7 +119,7 @@ :cancel-callback (build nitrate-checkout-cancelled-token)})) (defn go-to-buy-nitrate-license - [subscription base-url] + [subscription base-url event-origin subscription-mode] (let [{:keys [success-callback error-callback finish-error-callback cancel-callback]} (build-nitrate-callback-urls base-url) params {:subscription subscription @@ -112,8 +127,19 @@ :error_callback error-callback :finish_error_callback finish-error-callback :cancel_callback cancel-callback} - href (dm/str "/admin-console/licenses/start?" (u/map->query-string params))] - (st/emit! (rt/nav-raw :href href)))) + href (build-admin-console-url "licenses/start" params) + event (ev/event {::ev/name "start-nitrate-checkout" + ::ev/origin event-origin + :product "nitrate:enterprise" + :billing-period subscription + :subscription-mode subscription-mode})] + (->> st/stream + (rx/filter (ptk/type? ::ev/chunk-persisted)) + (rx/take 1) + (rx/timeout 2000 (rx/of :timeout)) + (rx/subs! (fn [_] + (st/emit! (rt/nav-raw :href href))))) + (st/emit! event (ptk/data-event ::ev/force-persist {})))) (defn fetch-connectivity [] diff --git a/frontend/src/app/main/ui/dashboard/sidebar.cljs b/frontend/src/app/main/ui/dashboard/sidebar.cljs index d64063b522..f828134445 100644 --- a/frontend/src/app/main/ui/dashboard/sidebar.cljs +++ b/frontend/src/app/main/ui/dashboard/sidebar.cljs @@ -320,7 +320,8 @@ (st/emit! (dnt/show-nitrate-popup :nitrate-form {:show-contact-sales-option true})) (dnt/is-valid-license? profile) - (dnt/go-to-nitrate-ac-create-organization) + (dnt/go-to-nitrate-ac-create-organization + "dashboard:organization-switcher") :else (st/emit! (dnt/show-nitrate-popup :nitrate-form))))) @@ -766,7 +767,8 @@ (st/emit! (dnt/show-nitrate-popup :nitrate-form {:show-contact-sales-option true})) (dnt/is-valid-license? profile) - (dnt/go-to-nitrate-ac-create-organization) + (dnt/go-to-nitrate-ac-create-organization + "dashboard:organization-switcher") :else (st/emit! (dnt/show-nitrate-popup :nitrate-form)))))] diff --git a/frontend/src/app/main/ui/dashboard/subscription.cljs b/frontend/src/app/main/ui/dashboard/subscription.cljs index e09bea4f71..95b83aa221 100644 --- a/frontend/src/app/main/ui/dashboard/subscription.cljs +++ b/frontend/src/app/main/ui/dashboard/subscription.cljs @@ -169,7 +169,9 @@ {:show-contact-sales-option true}))))) handle-go-to-cc - (mf/use-fn dnt/go-to-nitrate-ac-create-organization) + (mf/use-fn + #(dnt/go-to-nitrate-ac-create-organization + "dashboard:first-organization-promotional-banner")) handle-open-renew-modal (mf/use-fn #(st/emit! (modal/show :nitrate-code-activation {:renew? true})))] diff --git a/frontend/src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs b/frontend/src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs index d2e1a7bd24..41978b71e7 100644 --- a/frontend/src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs +++ b/frontend/src/app/main/ui/nitrate/nitrate_activation_success_modal.cljs @@ -36,7 +36,8 @@ (mf/use-fn (fn [] (modal/hide!) - (dnt/go-to-nitrate-ac-create-organization)))] + (dnt/go-to-nitrate-ac-create-organization + "admin-console:after-payment-organization-naming-form")))] [:div {:class (stl/css :modal-overlay)} [:div {:class (stl/css :modal-dialog)} diff --git a/frontend/src/app/main/ui/nitrate/nitrate_form.cljs b/frontend/src/app/main/ui/nitrate/nitrate_form.cljs index ef973f111f..24361df2c3 100644 --- a/frontend/src/app/main/ui/nitrate/nitrate_form.cljs +++ b/frontend/src/app/main/ui/nitrate/nitrate_form.cljs @@ -30,7 +30,11 @@ on-click (mf/use-fn (fn [] - (dnt/go-to-buy-nitrate-license "monthly" dnt/go-to-ac-url))) + (dnt/go-to-buy-nitrate-license + "monthly" + dnt/go-to-ac-url + "dashboard:plan-confirmation-modal" + (if (:subscription profile) "paid" "trial")))) on-activate-click (mf/use-fn @@ -101,5 +105,3 @@ [:a {:class (stl/css :link) :on-click on-activate-click} (tr "nitrate.form.enter-code")]]]])]]]])) - - diff --git a/frontend/src/app/main/ui/settings/subscription.cljs b/frontend/src/app/main/ui/settings/subscription.cljs index e1b13d9ce8..bdd82bb890 100644 --- a/frontend/src/app/main/ui/settings/subscription.cljs +++ b/frontend/src/app/main/ui/settings/subscription.cljs @@ -477,7 +477,10 @@ (st/emit! (ev/event {::ev/name "open-subscription-modal" ::ev/origin "settings"})) (if (= subscription-type "nitrate") - (st/emit! (dnt/show-nitrate-popup :nitrate-dialog {:nitrate-license nitrate-license})) + (st/emit! (dnt/show-nitrate-popup + :nitrate-dialog + {:nitrate-license nitrate-license + :event-origin "settings:plan-confirmation-modal"})) (st/emit! (modal/show :management-dialog {:subscription-type subscription-type @@ -749,7 +752,7 @@ (mf/defc subscribe-nitrate-dialog {::mf/register modal/components ::mf/register-as :nitrate-dialog} - [{:keys [nitrate-license show-contact-sales-option] :as connectivity}] + [{:keys [nitrate-license show-contact-sales-option event-origin] :as connectivity}] ;; TODO add translations for this texts when we have the definitive ones (let [online? (:licenses connectivity) handle-close-dialog @@ -760,7 +763,11 @@ on-subscribe-click (mf/use-fn (fn [] - (dnt/go-to-buy-nitrate-license "monthly" (rt/get-current-href))))] + (dnt/go-to-buy-nitrate-license + "monthly" + (rt/get-current-href) + event-origin + (if nitrate-license "paid" "trial"))))] [:div {:class (stl/css :modal-overlay)} [:div {:class (stl/css :modal-dialog)} diff --git a/frontend/test/frontend_tests/data/nitrate_test.cljs b/frontend/test/frontend_tests/data/nitrate_test.cljs index bd5175f277..744f8f1b16 100644 --- a/frontend/test/frontend_tests/data/nitrate_test.cljs +++ b/frontend/test/frontend_tests/data/nitrate_test.cljs @@ -10,6 +10,27 @@ [app.main.data.nitrate :as dnt] [cljs.test :as t :include-macros true])) +(t/deftest build-admin-console-url-preserves-public-uri-subpath + (t/testing "builds admin console routes below the configured Penpot subpath" + (let [public-uri (u/uri "https://example.com/penpot/")] + (t/is (= "https://example.com/penpot/admin-console/" + (dnt/build-admin-console-url public-uri "" nil))) + (t/is (= "https://example.com/penpot/admin-console/organization/my-org/organization-id/people/" + (dnt/build-admin-console-url + public-uri + "organization/my-org/organization-id/people/" + nil))) + (t/is (= {:action "create-organization" + :origin "dashboard:organization-switcher"} + (-> (dnt/build-admin-console-url + public-uri + "" + {:action "create-organization" + :origin "dashboard:organization-switcher"}) + u/uri + :query + u/query-string->map)))))) + (t/deftest build-nitrate-callback-urls-preserves-hash-query (t/testing "appends subscription to an existing query inside the hash route" (let [callbacks (dnt/build-nitrate-callback-urls From 9cb039070f612085a96b565ab760fd3e8d48c50b Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 9 Jul 2026 14:30:32 +0200 Subject: [PATCH 115/229] :recycle: Refactor nitrate audit method and tests Keep the audit refactor lint-clean after rebasing onto develop. AI-assisted-by: gpt-5 --- backend/src/app/loggers/audit.clj | 8 +- backend/src/app/rpc/management/nitrate.clj | 49 +- backend/test/backend_tests/helpers.clj | 141 +- .../rpc_management_nitrate_test.clj | 2591 ++++++++++------- 4 files changed, 1593 insertions(+), 1196 deletions(-) diff --git a/backend/src/app/loggers/audit.clj b/backend/src/app/loggers/audit.clj index c1b63c9aff..bbf9f3a44b 100644 --- a/backend/src/app/loggers/audit.clj +++ b/backend/src/app/loggers/audit.clj @@ -154,7 +154,7 @@ ;; COLLECTOR API ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(declare ^:private prepare-context-from-request) +(declare prepare-context-from-request) ;; Defines a service that collects the audit/activity log using ;; internal database. Later this audit log can be transferred to @@ -183,7 +183,7 @@ (def valid-event? (sm/validator schema:event)) -(defn- prepare-context-from-request +(defn prepare-context-from-request "Prepare backend event context from request" [request] (let [client-event-origin (get-client-event-origin request) @@ -412,7 +412,7 @@ (update :ip-addr d/nilv "0.0.0.0") (update :props d/nilv {}) (update :context d/nilv {}) - (assoc :source "backend") + (update :source d/nilv "backend") (d/without-nils))] (submit* cfg event))) @@ -429,7 +429,7 @@ (update :profile-id d/nilv uuid/zero) (update :props d/nilv {}) (update :context d/nilv {}) - (assoc :source "backend") + (update :source d/nilv "backend") (select-keys event-keys) (check-event))] (db/run! cfg append-audit-entry event)))) diff --git a/backend/src/app/rpc/management/nitrate.clj b/backend/src/app/rpc/management/nitrate.clj index ecb52d139f..5b0fe91d4b 100644 --- a/backend/src/app/rpc/management/nitrate.clj +++ b/backend/src/app/rpc/management/nitrate.clj @@ -20,6 +20,7 @@ [app.config :as cf] [app.db :as db] [app.email :as eml] + [app.http :as-alias http] [app.http.session :as session] [app.loggers.audit :as audit] [app.media :as media] @@ -783,38 +784,42 @@ RETURNING id, deleted_at;") [:map {:title "NitrateAuditEvent"} [:name [:and [:string {:max 250}] [:re #"[\d\w-]{1,50}"]]] + [:type {:optional true} ::sm/text] [:profile-id ::sm/uuid] - [:props {:optional true} [:map-of :keyword :any]]]) + [:props {:optional true} [:map-of :keyword :any]] + [:context {:optional true} [:map-of :keyword :any]]]) (def ^:private schema:push-audit-events-params [:map {:title "PushAuditEventsParams"} [:events [:vector schema:nitrate-audit-event]]]) -(defn- submit-nitrate-audit-event - [cfg {:keys [name profile-id props]}] - (let [now (ct/now)] - (audit/submit* cfg {:type "action" - :name name - :profile-id profile-id - :props (or props {}) - :context {} - :tracked-at now - :created-at now - :source "nitrate" - :ip-addr "0.0.0.0"}))) - (sv/defmethod ::push-audit-events - "Push audit events from Nitrate to Penpot audit log" + "Push audit events from nitrate (strictly for nitrate backend + events)" + {::doc/added "2.19" + ::audit/skip true ::sm/params schema:push-audit-events-params ::rpc/auth false} - [{:keys [::db/pool] :as cfg} {:keys [events]}] - (let [telemetry? (contains? cf/flags :telemetry) - audit-log? (contains? cf/flags :audit-log) - enabled? (and (not (db/read-only? pool)) - (or audit-log? telemetry?))] - (when (and enabled? (seq events)) - (run! (partial submit-nitrate-audit-event cfg) events)) + [cfg {:keys [::rpc/request-at events] :as params}] + (let [request (-> params meta ::http/request) + context' (-> (audit/prepare-context-from-request request) + (assoc :request-id (::rpc/request-id params))) + + ip-addr (::rpc/ip-addr params)] + + (run! (fn [{:keys [type name profile-id props context] :as event}] + (let [context (-> (merge context context') + (d/without-nils))] + (audit/submit cfg {:type (d/nilv type "action") + :name name + :profile-id profile-id + :props (or props {}) + :context context + :tracked-at request-at + :ip-addr ip-addr}))) + events) + nil)) diff --git a/backend/test/backend_tests/helpers.clj b/backend/test/backend_tests/helpers.clj index 247b27a699..f839f222b9 100644 --- a/backend/test/backend_tests/helpers.clj +++ b/backend/test/backend_tests/helpers.clj @@ -79,59 +79,66 @@ :enable-auto-file-snapshot :disable-file-validation]) -(defn state-init +(defn init-config + ([next] + (init-config nil next)) + ([extra-flags next] + (let [flags (into default-flags extra-flags)] + (with-redefs [app.config/flags (flags/parse flags/default flags) + app.config/config config + app.loggers.audit/submit (constantly nil) + app.auth/derive-password identity + app.auth/verify-password (fn [a b] {:valid (= a b)}) + app.common.features/get-enabled-features + (fn [& _] app.common.features/supported-features)] + (cf/validate! :exit-on-error? false) + (fs/create-dir "/tmp/penpot") + (next))))) + +(defn init-system [next] - (with-redefs [app.config/flags (flags/parse flags/default default-flags) - app.config/config config - app.loggers.audit/submit (constantly nil) - app.auth/derive-password identity - app.auth/verify-password (fn [a b] {:valid (= a b)}) - app.common.features/get-enabled-features (fn [& _] app.common.features/supported-features)] + (let [templates [{:id "test" + :name "test" + :file-uri "test" + :thumbnail-uri "test" + :path (-> "backend_tests/test_files/template.penpot" io/resource fs/path)}] + system (-> (merge main/system-config main/worker-config) + (assoc-in [:app.redis/client :app.redis/uri] (:redis-uri config)) + (assoc-in [::db/pool ::db/uri] (:database-uri config)) + (assoc-in [::db/pool ::db/username] (:database-username config)) + (assoc-in [::db/pool ::db/password] (:database-password config)) + (assoc-in [:app.rpc/methods :app.setup/templates] templates) + (assoc-in [:app.rpc/methods :app.setup/templates] templates) + (update :app.rpc/rlimit assoc + :app.loggers.mattermost/reporter nil + :app.loggers.database/reporter nil) + (update :app.rpc/methods assoc + :app.setup/templates templates + :app.loggers.mattermost/reporter nil + :app.loggers.database/reporter nil) + (dissoc :app.srepl/server + :app.http/server + :app.http/route + :app.setup/templates + :app.http.oauth/handler + :app.notifications/handler + :app.loggers.mattermost/reporter + :app.loggers.database/reporter + :app.worker/cron + :app.worker/dispatcher + [:app.main/default :app.worker/runner] + [:app.main/webhook :app.worker/runner])) + _ (ig/load-namespaces system) + system (-> (ig/expand system) (ig/init))] + (try + (binding [*system* system + *pool* (:app.db/pool system)] + (next)) + (finally + (ig/halt! system))))) - (cf/validate! :exit-on-error? false) - - (fs/create-dir "/tmp/penpot") - - (let [templates [{:id "test" - :name "test" - :file-uri "test" - :thumbnail-uri "test" - :path (-> "backend_tests/test_files/template.penpot" io/resource fs/path)}] - system (-> (merge main/system-config main/worker-config) - (assoc-in [:app.redis/client :app.redis/uri] (:redis-uri config)) - (assoc-in [::db/pool ::db/uri] (:database-uri config)) - (assoc-in [::db/pool ::db/username] (:database-username config)) - (assoc-in [::db/pool ::db/password] (:database-password config)) - (assoc-in [:app.rpc/methods :app.setup/templates] templates) - (assoc-in [:app.rpc/methods :app.setup/templates] templates) - (update :app.rpc/rlimit assoc - :app.loggers.mattermost/reporter nil - :app.loggers.database/reporter nil) - (update :app.rpc/methods assoc - :app.setup/templates templates - :app.loggers.mattermost/reporter nil - :app.loggers.database/reporter nil) - (dissoc :app.srepl/server - :app.http/server - :app.http/route - :app.setup/templates - :app.http.oauth/handler - :app.notifications/handler - :app.loggers.mattermost/reporter - :app.loggers.database/reporter - :app.worker/cron - :app.worker/dispatcher - [:app.main/default :app.worker/runner] - [:app.main/webhook :app.worker/runner])) - _ (ig/load-namespaces system) - system (-> (ig/expand system) - (ig/init))] - (try - (binding [*system* system - *pool* (:app.db/pool system)] - (next)) - (finally - (ig/halt! system)))))) +(def state-init + (t/compose-fixtures init-config init-system)) (defn database-reset [next] @@ -386,29 +393,15 @@ (assoc :app.rpc/request-at (ct/now))))))) (defn management-command! - ([data] - (management-command! data nil)) - ([{:keys [::type] :as data} flags-to-add] - (let [flags (reduce conj cf/flags (or flags-to-add [])) - - resolve-management-methods - (requiring-resolve 'app.rpc/resolve-management-methods) - - methods - (with-redefs [cf/flags flags] - (resolve-management-methods *system*)) - - [_ method-fn] - (get methods type)] - - (when-not method-fn - (ex/raise :type :assertion - :code :rpc-method-not-found - :hint (str/ffmt "management rpc method '%' not found" (name type)))) - - (try-on! (method-fn (-> data - (dissoc ::type) - (assoc :app.rpc/request-at (ct/now)))))))) + [{:keys [::type] :as data}] + (let [[_ method-fn] (get-in *system* [:app.rpc/management-methods type])] + (when-not method-fn + (ex/raise :type :assertion + :code :rpc-method-not-found + :hint (str/ffmt "management rpc method '%' not found" (name type)))) + (try-on! (method-fn (-> data + (dissoc ::type) + (assoc :app.rpc/request-at (ct/now))))))) (defn run-task! ([name] diff --git a/backend/test/backend_tests/rpc_management_nitrate_test.clj b/backend/test/backend_tests/rpc_management_nitrate_test.clj index cf7596d99e..e629c61193 100644 --- a/backend/test/backend_tests/rpc_management_nitrate_test.clj +++ b/backend/test/backend_tests/rpc_management_nitrate_test.clj @@ -11,8 +11,9 @@ [app.common.time :as ct] [app.common.uuid :as uuid] [app.config :as cf] - [app.db :as-alias db] + [app.db :as db] [app.email :as eml] + [app.http :as-alias http] [app.msgbus :as mbus] [app.nitrate :as nitrate] [app.rpc :as-alias rpc] @@ -20,35 +21,36 @@ [backend-tests.helpers :as th] [clojure.set :as set] [clojure.test :as t] - [cuerdas.core :as str])) + [cuerdas.core :as str] + [mockery.core :refer [with-mocks]])) + +(t/use-fixtures :once (t/compose-fixtures + (partial th/init-config [:enable-nitrate]) + th/init-system)) -(t/use-fixtures :once th/state-init) (t/use-fixtures :each th/database-reset) -(defn- management-command-with-nitrate! - [data] - (th/management-command! data [:nitrate])) - (t/deftest authenticate-success - (let [profile (th/create-profile* 1 {:is-active true - :fullname "Nitrate User"}) - out (management-command-with-nitrate! {::th/type :authenticate - ::rpc/profile-id (:id profile)})] - (t/is (th/success? out)) - (t/is (= (:id profile) (-> out :result :id))) - (t/is (= "Nitrate User" (-> out :result :name))) - (t/is (= (:email profile) (-> out :result :email))) - (t/is (= (:created-at profile) (-> out :result :created-at))) - (t/is (nil? (-> out :result :photo-url))))) + (with-mocks [nitrate-mock {:target 'app.nitrate/call :return nil}] + (let [profile (th/create-profile* 1 {:is-active true + :fullname "Nitrate User"}) + out (th/management-command! {::th/type :authenticate + ::rpc/profile-id (:id profile)})] + (t/is (th/success? out)) + (t/is (= (:id profile) (-> out :result :id))) + (t/is (= "Nitrate User" (-> out :result :name))) + (t/is (= (:email profile) (-> out :result :email))) + (t/is (= (:created-at profile) (-> out :result :created-at))) + (t/is (nil? (-> out :result :photo-url)))))) (t/deftest authenticate-requires-authentication - (let [out (management-command-with-nitrate! {::th/type :authenticate})] + (let [out (th/management-command! {::th/type :authenticate})] (t/is (not (th/success? out))) (t/is (= :authentication (th/ex-type (:error out)))) (t/is (= :authentication-required (th/ex-code (:error out)))))) (t/deftest get-penpot-version - (let [out (management-command-with-nitrate! {::th/type :get-penpot-version}) + (let [out (th/management-command! {::th/type :get-penpot-version}) version (-> out :result :version)] (t/is (th/success? out)) (t/is (= #{:full :branch :base :main :major :minor :patch :modifier :commit :commit-hash} @@ -59,24 +61,25 @@ (t/is (= cf/version version)))) (t/deftest get-teams-returns-only-owned-non-default-non-deleted - (let [profile (th/create-profile* 1 {:is-active true}) - other (th/create-profile* 2 {:is-active true}) - owned-team (th/create-team* 1 {:profile-id (:id profile)}) - deleted-team (th/create-team* 2 {:profile-id (:id profile)}) - _ (th/db-update! :team - {:deleted-at (ct/now)} - {:id (:id deleted-team)}) - other-team (th/create-team* 3 {:profile-id (:id other)}) - _ (th/create-team-role* {:team-id (:id other-team) - :profile-id (:id profile) - :role :editor}) - out (management-command-with-nitrate! {::th/type :get-teams - ::rpc/profile-id (:id profile)})] - (t/is (th/success? out)) - (t/is (= #{(:id owned-team)} - (->> out :result (map :id) set))) - (t/is (= #{(:name owned-team)} - (->> out :result (map :name) set))))) + (with-mocks [nitrate-mock {:target 'app.nitrate/call :return nil}] + (let [profile (th/create-profile* 1 {:is-active true}) + other (th/create-profile* 2 {:is-active true}) + owned-team (th/create-team* 1 {:profile-id (:id profile)}) + deleted-team (th/create-team* 2 {:profile-id (:id profile)}) + _ (th/db-update! :team + {:deleted-at (ct/now)} + {:id (:id deleted-team)}) + other-team (th/create-team* 3 {:profile-id (:id other)}) + _ (th/create-team-role* {:team-id (:id other-team) + :profile-id (:id profile) + :role :editor}) + out (th/management-command! {::th/type :get-teams + ::rpc/profile-id (:id profile)})] + (t/is (th/success? out)) + (t/is (= #{(:id owned-team)} + (->> out :result (map :id) set))) + (t/is (= #{(:name owned-team)} + (->> out :result (map :name) set)))))) (t/deftest notify-team-change-publishes-event (let [team-id (uuid/random) @@ -90,10 +93,10 @@ out (with-redefs [mbus/pub! (fn [_cfg & {:keys [topic message]}] (swap! calls conj {:topic topic :message message}))] - (management-command-with-nitrate! {::th/type :notify-team-change - :id team-id - :is-your-penpot false - :organization organization}))] + (th/management-command! {::th/type :notify-team-change + :id team-id + :is-your-penpot false + :organization organization}))] (t/is (th/success? out)) (t/is (= 1 (count @calls))) (t/is (= uuid/zero (-> @calls first :topic))) @@ -109,782 +112,912 @@ (t/is (= (:avatar-bg-url organization) (str (-> msg :team :organization :avatar-bg-url))))))) (t/deftest notify-user-added-to-organization-creates-default-org-team - (let [profile (th/create-profile* 1 {:is-active true}) - before-teams (->> (th/db-query :team-profile-rel {:profile-id (:id profile) - :is-owner true}) - (map :team-id) - set) - out (management-command-with-nitrate! {::th/type :notify-user-added-to-organization - :profile-id (:id profile) - :organization-id (uuid/random) - :role "owner"}) - after-teams (->> (th/db-query :team-profile-rel {:profile-id (:id profile) - :is-owner true}) - (map :team-id) - set) - new-team-id (first (set/difference after-teams before-teams)) - new-team (th/db-get :team {:id new-team-id})] - (t/is (th/success? out)) - (t/is (= 1 (count (set/difference after-teams before-teams)))) - (t/is (= "Your Penpot" (:name new-team))) - (t/is (true? (:is-default new-team))))) + (with-mocks [nitrate-mock {:target 'app.nitrate/call + :return (fn [_ m _] + (case m + :set-team-org {:success true} + nil))}] + (let [profile (th/create-profile* 1 {:is-active true}) + before-teams (->> (th/db-query :team-profile-rel {:profile-id (:id profile) + :is-owner true}) + (map :team-id) + set) + out (th/management-command! {::th/type :notify-user-added-to-organization + :profile-id (:id profile) + :organization-id (uuid/random) + :role "owner"}) + after-teams (->> (th/db-query :team-profile-rel {:profile-id (:id profile) + :is-owner true}) + (map :team-id) + set) + new-team-id (first (set/difference after-teams before-teams)) + new-team (th/db-get :team {:id new-team-id})] + (t/is (th/success? out)) + (t/is (= 1 (count (set/difference after-teams before-teams)))) + (t/is (= "Your Penpot" (:name new-team))) + (t/is (true? (:is-default new-team)))))) (t/deftest get-managed-profiles-returns-unique-members-for-owned-teams - (let [owner (th/create-profile* 1 {:is-active true}) - member1 (th/create-profile* 2 {:is-active true}) - member2 (th/create-profile* 3 {:is-active true}) - team1 (th/create-team* 1 {:profile-id (:id owner)}) - team2 (th/create-team* 2 {:profile-id (:id owner)}) - _ (th/create-team-role* {:team-id (:id team1) - :profile-id (:id member1) - :role :editor}) - _ (th/create-team-role* {:team-id (:id team1) - :profile-id (:id member2) - :role :editor}) - _ (th/create-team-role* {:team-id (:id team2) - :profile-id (:id member1) - :role :editor}) - out (management-command-with-nitrate! {::th/type :get-managed-profiles - ::rpc/profile-id (:id owner)})] - (t/is (th/success? out)) - (t/is (= #{(:id member1) (:id member2)} - (->> out :result (map :id) set))) - (t/is (= #{(:email member1) (:email member2)} - (->> out :result (map :email) set))))) + (with-mocks [nitrate-mock {:target 'app.nitrate/call :return nil}] + (let [owner (th/create-profile* 1 {:is-active true}) + member1 (th/create-profile* 2 {:is-active true}) + member2 (th/create-profile* 3 {:is-active true}) + team1 (th/create-team* 1 {:profile-id (:id owner)}) + team2 (th/create-team* 2 {:profile-id (:id owner)}) + _ (th/create-team-role* {:team-id (:id team1) + :profile-id (:id member1) + :role :editor}) + _ (th/create-team-role* {:team-id (:id team1) + :profile-id (:id member2) + :role :editor}) + _ (th/create-team-role* {:team-id (:id team2) + :profile-id (:id member1) + :role :editor}) + out (th/management-command! {::th/type :get-managed-profiles + ::rpc/profile-id (:id owner)})] + (t/is (th/success? out)) + (t/is (= #{(:id member1) (:id member2)} + (->> out :result (map :id) set))) + (t/is (= #{(:email member1) (:email member2)} + (->> out :result (map :email) set)))))) (t/deftest get-teams-summary-returns-teams-and-files-count - (let [profile (th/create-profile* 1 {:is-active true}) - team1 (th/create-team* 1 {:profile-id (:id profile)}) - team2 (th/create-team* 2 {:profile-id (:id profile)}) - proj1 (th/create-project* 1 {:profile-id (:id profile) - :team-id (:id team1)}) - proj2 (th/create-project* 2 {:profile-id (:id profile) - :team-id (:id team2)}) - _ (th/create-file* 1 {:profile-id (:id profile) - :project-id (:id proj1)}) - _ (th/create-file* 2 {:profile-id (:id profile) - :project-id (:id proj2)}) - out (management-command-with-nitrate! {::th/type :get-teams-summary - ::rpc/profile-id (:id profile) - :ids [(:id team1) (:id team2)]})] - (t/is (th/success? out)) - (t/is (= 2 (-> out :result :num-files))) - (t/is (= #{(:id team1) (:id team2)} - (->> out :result :teams (map :id) set))))) + (with-mocks [nitrate-mock {:target 'app.nitrate/call :return nil}] + (let [profile (th/create-profile* 1 {:is-active true}) + team1 (th/create-team* 1 {:profile-id (:id profile)}) + team2 (th/create-team* 2 {:profile-id (:id profile)}) + proj1 (th/create-project* 1 {:profile-id (:id profile) + :team-id (:id team1)}) + proj2 (th/create-project* 2 {:profile-id (:id profile) + :team-id (:id team2)}) + _ (th/create-file* 1 {:profile-id (:id profile) + :project-id (:id proj1)}) + _ (th/create-file* 2 {:profile-id (:id profile) + :project-id (:id proj2)}) + out (th/management-command! {::th/type :get-teams-summary + ::rpc/profile-id (:id profile) + :ids [(:id team1) (:id team2)]})] + (t/is (th/success? out)) + (t/is (= 2 (-> out :result :num-files))) + (t/is (= #{(:id team1) (:id team2)} + (->> out :result :teams (map :id) set)))))) (t/deftest get-teams-detail-last-activity-reflects-file-modifications - (let [profile (th/create-profile* 1 {:is-active true}) - team (th/create-team* 1 {:profile-id (:id profile)}) - organization-id (uuid/random) - org-summary {:id organization-id - :teams [{:id (:id team)}]} - params {::th/type :get-teams-detail - ::rpc/profile-id (:id profile) - :organization-id organization-id} + (let [org-summary-ref (atom nil)] + (with-mocks [nitrate-mock {:target 'app.nitrate/call + :return (fn [_cfg method _params] + (case method + :get-org-summary @org-summary-ref + nil))}] + (let [profile (th/create-profile* 1 {:is-active true}) + team (th/create-team* 1 {:profile-id (:id profile)}) + organization-id (uuid/random) + org-summary {:id organization-id + :teams [{:id (:id team)}]} + _ (reset! org-summary-ref org-summary) + params {::th/type :get-teams-detail + ::rpc/profile-id (:id profile) + :organization-id organization-id} + call! (fn [] (th/management-command! params)) - call! (fn [] - (with-redefs [nitrate/call (fn [_cfg method _params] - (case method - :get-org-summary org-summary - nil))] - (management-command-with-nitrate! params))) + empty-out (call!) + empty-team (-> empty-out :result first) - empty-out (call!) - empty-team (-> empty-out :result first) + project (th/create-project* 1 {:profile-id (:id profile) + :team-id (:id team)}) + file (th/create-file* 1 {:profile-id (:id profile) + :project-id (:id project)}) + file-after-create (th/db-get :file {:id (:id file)}) + project-after-create (th/db-get :project {:id (:id project)}) + expected-activity-create (if (.isAfter (:modified-at file-after-create) + (:modified-at project-after-create)) + (:modified-at file-after-create) + (:modified-at project-after-create)) - project (th/create-project* 1 {:profile-id (:id profile) - :team-id (:id team)}) - file (th/create-file* 1 {:profile-id (:id profile) - :project-id (:id project)}) - file-after-create (th/db-get :file {:id (:id file)}) - project-after-create (th/db-get :project {:id (:id project)}) - expected-activity-create (if (.isAfter (:modified-at file-after-create) - (:modified-at project-after-create)) - (:modified-at file-after-create) - (:modified-at project-after-create)) + with-file-out (call!) + with-file (-> with-file-out :result first) - with-file-out (call!) - with-file (-> with-file-out :result first) + new-activity (ct/in-future "1h") + _ (th/db-update! :file + {:modified-at new-activity} + {:id (:id file)}) + file-after-update (th/db-get :file {:id (:id file)}) - new-activity (ct/in-future "1h") - _ (th/db-update! :file - {:modified-at new-activity} - {:id (:id file)}) - file-after-update (th/db-get :file {:id (:id file)}) + updated-out (call!) + updated-team (-> updated-out :result first)] - updated-out (call!) - updated-team (-> updated-out :result first)] + (t/is (th/success? empty-out)) + (t/is (= (:id team) (:id empty-team))) + (t/is (nil? (:last-activity-at empty-team))) - (t/is (th/success? empty-out)) - (t/is (= (:id team) (:id empty-team))) - (t/is (nil? (:last-activity-at empty-team))) + (t/is (th/success? with-file-out)) + (t/is (= (:id team) (:id with-file))) + (t/is (= expected-activity-create (:last-activity-at with-file))) - (t/is (th/success? with-file-out)) - (t/is (= (:id team) (:id with-file))) - (t/is (= expected-activity-create (:last-activity-at with-file))) - - (t/is (th/success? updated-out)) - (t/is (= (:id team) (:id updated-team))) - (t/is (= (:modified-at file-after-update) (:last-activity-at updated-team))) - (t/is (not= (:last-activity-at with-file) (:last-activity-at updated-team))))) + (t/is (th/success? updated-out)) + (t/is (= (:id team) (:id updated-team))) + (t/is (= (:modified-at file-after-update) (:last-activity-at updated-team))) + (t/is (not= (:last-activity-at with-file) (:last-activity-at updated-team))))))) (t/deftest notify-organization-deletion-prefixes-teams-and-publishes-org-deleted-event - (let [profile (th/create-profile* 1 {:is-active true}) - ;; One team will have files -> it will be kept and renamed. - team-with-files (th/db-get :team {:id (:default-team-id profile)}) - project (th/create-project* 1 {:profile-id (:id profile) - :team-id (:id team-with-files)}) - _ (th/create-file* 1 {:profile-id (:id profile) - :project-id (:id project)}) + ;; --- Deferred org-summary: nil during setup, filled before RPC --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: return nil during profile/team creation, + ;; then serve the computed org-summary once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [_cfg method params] + (if @org-summary-ref + @org-summary-ref + nil))} + ;; --- Worker mock: capture delete-task submission --- + wrk-mock {:target 'app.worker/submit! :return nil} + ;; --- Message bus mock: capture published events --- + mbus-mock {:target 'app.msgbus/pub! :return nil}] - ;; One team will be empty -> it will be soft-deleted. - empty-team (th/create-team* 1 {:profile-id (:id profile)}) + ;; --- Setup: create a profile with two teams --- + (let [profile (th/create-profile* 1 {:is-active true}) + ;; --- Team with files: should be kept and renamed --- + team-with-files (th/db-get :team {:id (:default-team-id profile)}) + project (th/create-project* 1 {:profile-id (:id profile) + :team-id (:id team-with-files)}) + _ (th/create-file* 1 {:profile-id (:id profile) + :project-id (:id project)}) + ;; --- Empty team: should be soft-deleted --- + empty-team (th/create-team* 1 {:profile-id (:id profile)}) - organization-id (uuid/random) - organization-name "Acme / Design" - expected-start (str "[" (d/sanitize-string organization-name) "] ") - org-summary {:id organization-id - :name organization-name - :teams [{:id (:id team-with-files) - :is-your-penpot true} - {:id (:id empty-team) - :is-your-penpot true}]} - calls (atom []) - submitted (atom []) - out (with-redefs [nitrate/call (fn [_cfg method params] - (t/is (= :get-org-summary method)) - (t/is (= {:organization-id organization-id} params)) - org-summary) - wrk/submit! (fn [task] - (swap! submitted conj task) - nil) - mbus/pub! (fn [_cfg & {:keys [topic message]}] - (swap! calls conj {:topic topic - :message message}))] - (management-command-with-nitrate! {::th/type :notify-organization-deletion - ::rpc/profile-id (:id profile) - :organization-id organization-id})) - updated-with-files (th/db-get :team {:id (:id team-with-files)} {::db/remove-deleted false}) - updated-empty (th/db-get :team {:id (:id empty-team)} {::db/remove-deleted false})] - (t/is (th/success? out)) - (t/is (nil? (:result out))) + ;; --- Data needed by the RPC call --- + organization-id (uuid/random) + organization-name "Acme / Design" + expected-start (str "[" (d/sanitize-string organization-name) "] ") + ;; --- Org-summary that nitrate would return --- + org-summary {:id organization-id + :name organization-name + :teams [{:id (:id team-with-files) + :is-your-penpot true} + {:id (:id empty-team) + :is-your-penpot true}]} + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) - ;; Team with files is kept, unset as default, and renamed with org prefix. - (t/is (false? (:is-default updated-with-files))) - (t/is (str/starts-with? (:name updated-with-files) expected-start)) - (t/is (nil? (:deleted-at updated-with-files))) + ;; --- Exercise: notify Penpot that an organization is deleted --- + out (th/management-command! {::th/type :notify-organization-deletion + ::rpc/profile-id (:id profile) + :organization-id organization-id}) - ;; Empty team is soft-deleted and a delete task is submitted. - (t/is (some? (:deleted-at updated-empty))) - (t/is (= 1 (count @submitted))) + ;; --- Fetch teams post-deletion to verify mutations --- + updated-with-files (th/db-get :team {:id (:id team-with-files)} {::db/remove-deleted false}) + updated-empty (th/db-get :team {:id (:id empty-team)} {::db/remove-deleted false})] - ;; A single organization-deleted event is published. - (t/is (= 1 (count @calls))) - (let [{:keys [topic message]} (first @calls)] - (t/is (= uuid/zero topic)) - (t/is (= :organization-deleted (:type message))) - (t/is (= organization-id (:organization-id message))) - (t/is (= organization-name (:organization-name message))) - (t/is (= #{(:id team-with-files) (:id empty-team)} - (set (:teams message)))) - (t/is (= #{(:id empty-team)} - (set (:deleted-teams message))))))) + ;; --- Verify: nitrate was queried for the org summary --- + (let [[_ method params] (:call-args @nitrate-mock)] + (t/is (= :get-org-summary method)) + (t/is (= {:organization-id organization-id} params))) + + ;; --- Verify: RPC returns success with no result payload --- + (t/is (th/success? out)) + (t/is (nil? (:result out))) + + ;; --- Verify: team with files is kept, default flag removed, name prefixed --- + (t/is (false? (:is-default updated-with-files))) + (t/is (str/starts-with? (:name updated-with-files) expected-start)) + (t/is (nil? (:deleted-at updated-with-files))) + + ;; --- Verify: empty team is soft-deleted and a background delete task is enqueued --- + (t/is (some? (:deleted-at updated-empty))) + (t/is (:called? @wrk-mock)) + (t/is (= 1 (:call-count @wrk-mock))) + + ;; --- Verify: exactly one organization-deleted event is published on the message bus --- + (t/is (:called? @mbus-mock)) + (let [msg (apply hash-map (rest (:call-args @mbus-mock)))] + (t/is (= uuid/zero (:topic msg))) + (t/is (= :organization-deleted (:type (:message msg)))) + (t/is (= organization-id (:organization-id (:message msg)))) + (t/is (= organization-name (:organization-name (:message msg)))) + (t/is (= #{(:id team-with-files) (:id empty-team)} + (set (:teams (:message msg))))) + (t/is (= #{(:id empty-team)} + (set (:deleted-teams (:message msg)))))))))) (t/deftest notify-user-organizations-deletion-renames-or-deletes-teams-and-publishes-per-org-events - (let [profile (th/create-profile* 1 {:is-active true}) - ;; org-1: one team with files, one empty - org-1-team-files (th/db-get :team {:id (:default-team-id profile)}) - org-1-proj (th/create-project* 1 {:profile-id (:id profile) - :team-id (:id org-1-team-files)}) - _ (th/create-file* 1 {:profile-id (:id profile) - :project-id (:id org-1-proj)}) - org-1-team-empty (th/create-team* 1 {:profile-id (:id profile)}) + ;; --- Deferred owned-orgs: nil during setup, filled before RPC --- + (let [owned-orgs-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: return nil during profile/team creation, + ;; then serve the computed owned-orgs once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [_cfg method _params] + (case method + :get-owned-orgs @owned-orgs-ref + nil))} + ;; --- Worker mock: capture delete-task submissions --- + wrk-mock {:target 'app.worker/submit! :return nil} + ;; --- Message bus mock: capture published events --- + mbus-mock {:target 'app.msgbus/pub! :return nil}] - ;; org-2: one team with files, one empty - org-2-team-files (th/create-team* 2 {:profile-id (:id profile)}) - org-2-proj (th/create-project* 2 {:profile-id (:id profile) - :team-id (:id org-2-team-files)}) - _ (th/create-file* 2 {:profile-id (:id profile) - :project-id (:id org-2-proj)}) - org-2-team-empty (th/create-team* 3 {:profile-id (:id profile)}) + ;; --- Setup: create a profile with teams across two orgs --- + (let [profile (th/create-profile* 1 {:is-active true}) + ;; --- Org-1: team with files: kept and renamed --- + org-1-team-files (th/db-get :team {:id (:default-team-id profile)}) + org-1-proj (th/create-project* 1 {:profile-id (:id profile) + :team-id (:id org-1-team-files)}) + _ (th/create-file* 1 {:profile-id (:id profile) + :project-id (:id org-1-proj)}) + ;; --- Org-1: empty team: soft-deleted --- + org-1-team-empty (th/create-team* 1 {:profile-id (:id profile)}) - org-1-id (uuid/random) - org-2-id (uuid/random) - org-1-name "Org One / Design" - org-2-name "Org Two" - org-1-prefix (str "[" (d/sanitize-string org-1-name) "] ") - org-2-prefix (str "[" (d/sanitize-string org-2-name) "] ") - owned-orgs [{:id org-1-id - :name org-1-name - :teams [{:id (:id org-1-team-files) - :is-your-penpot true} - {:id (:id org-1-team-empty) - :is-your-penpot true}]} - {:id org-2-id - :name org-2-name - :teams [{:id (:id org-2-team-files) - :is-your-penpot true} - {:id (:id org-2-team-empty) - :is-your-penpot true}]}] - calls (atom []) - submitted (atom []) - out (with-redefs [nitrate/call (fn [_cfg method params] - (case method - :get-owned-orgs - (do - (t/is (= {:profile-id (:id profile)} params)) - owned-orgs) - nil)) - wrk/submit! (fn [task] - (swap! submitted conj task) - nil) - mbus/pub! (fn [_cfg & {:keys [topic message]}] - (swap! calls conj {:topic topic - :message message}))] - (management-command-with-nitrate! {::th/type :notify-user-organizations-deletion - ::rpc/profile-id (:id profile) - :profile-id (:id profile)})) - org-1-updated-files (th/db-get :team {:id (:id org-1-team-files)} {::db/remove-deleted false}) - org-1-updated-empty (th/db-get :team {:id (:id org-1-team-empty)} {::db/remove-deleted false}) - org-2-updated-files (th/db-get :team {:id (:id org-2-team-files)} {::db/remove-deleted false}) - org-2-updated-empty (th/db-get :team {:id (:id org-2-team-empty)} {::db/remove-deleted false}) - msgs (->> @calls (map :message) vec) - org-msg (fn [org-name] - (first (filter #(= org-name (:organization-name %)) msgs)))] - (t/is (th/success? out)) - (t/is (nil? (:result out))) + ;; --- Org-2: team with files: kept and renamed --- + org-2-team-files (th/create-team* 2 {:profile-id (:id profile)}) + org-2-proj (th/create-project* 2 {:profile-id (:id profile) + :team-id (:id org-2-team-files)}) + _ (th/create-file* 2 {:profile-id (:id profile) + :project-id (:id org-2-proj)}) + ;; --- Org-2: empty team: soft-deleted --- + org-2-team-empty (th/create-team* 3 {:profile-id (:id profile)}) - ;; org-1: team with files renamed; empty team deleted - (t/is (false? (:is-default org-1-updated-files))) - (t/is (str/starts-with? (:name org-1-updated-files) org-1-prefix)) - (t/is (nil? (:deleted-at org-1-updated-files))) - (t/is (some? (:deleted-at org-1-updated-empty))) + ;; --- Data needed by the RPC call --- + org-1-id (uuid/random) + org-2-id (uuid/random) + org-1-name "Org One / Design" + org-2-name "Org Two" + org-1-prefix (str "[" (d/sanitize-string org-1-name) "] ") + org-2-prefix (str "[" (d/sanitize-string org-2-name) "] ") + ;; --- Owned-orgs that nitrate would return --- + owned-orgs [{:id org-1-id + :name org-1-name + :teams [{:id (:id org-1-team-files) + :is-your-penpot true} + {:id (:id org-1-team-empty) + :is-your-penpot true}]} + {:id org-2-id + :name org-2-name + :teams [{:id (:id org-2-team-files) + :is-your-penpot true} + {:id (:id org-2-team-empty) + :is-your-penpot true}]}] + ;; --- Publish owned-orgs so the mock can serve it --- + _ (reset! owned-orgs-ref owned-orgs) - ;; org-2: team with files renamed; empty team deleted - (t/is (false? (:is-default org-2-updated-files))) - (t/is (str/starts-with? (:name org-2-updated-files) org-2-prefix)) - (t/is (nil? (:deleted-at org-2-updated-files))) - (t/is (some? (:deleted-at org-2-updated-empty))) + ;; --- Exercise: notify Penpot that the user's orgs are deleted --- + out (th/management-command! {::th/type :notify-user-organizations-deletion + ::rpc/profile-id (:id profile) + :profile-id (:id profile)}) - ;; two delete tasks (one per empty team) - (t/is (= 2 (count @submitted))) + ;; --- Fetch teams post-deletion to verify mutations --- + org-1-updated-files (th/db-get :team {:id (:id org-1-team-files)} {::db/remove-deleted false}) + org-1-updated-empty (th/db-get :team {:id (:id org-1-team-empty)} {::db/remove-deleted false}) + org-2-updated-files (th/db-get :team {:id (:id org-2-team-files)} {::db/remove-deleted false}) + org-2-updated-empty (th/db-get :team {:id (:id org-2-team-empty)} {::db/remove-deleted false}) - ;; one organization-deleted event per org - (t/is (= 2 (count @calls))) - (t/is (every? #(= uuid/zero (:topic %)) @calls)) - (t/is (= #{:organization-deleted} - (set (map (comp :type :message) @calls)))) + ;; --- Extract published messages from the message bus mock --- + msgs (->> (:call-args-list @mbus-mock) + (map #(apply hash-map (rest %))) + (map :message) + vec) + org-msg (fn [org-name] + (first (filter #(= org-name (:organization-name %)) msgs)))] - (let [m1 (org-msg org-1-name) - m2 (org-msg org-2-name)] - (t/is (some? m1)) - (t/is (some? m2)) - (t/is (= org-1-id (:organization-id m1))) - (t/is (= org-2-id (:organization-id m2))) - (t/is (= #{(:id org-1-team-files) (:id org-1-team-empty)} - (set (:teams m1)))) - (t/is (= #{(:id org-1-team-empty)} - (set (:deleted-teams m1)))) - (t/is (= #{(:id org-2-team-files) (:id org-2-team-empty)} - (set (:teams m2)))) - (t/is (= #{(:id org-2-team-empty)} - (set (:deleted-teams m2))))))) + ;; --- Verify: nitrate was queried for owned orgs with correct params --- + (let [[_ method params] (:call-args @nitrate-mock)] + (t/is (= :get-owned-orgs method)) + (t/is (= {:profile-id (:id profile)} params))) + + ;; --- Verify: RPC returns success with no result payload --- + (t/is (th/success? out)) + (t/is (nil? (:result out))) + + ;; --- Verify: org-1 team with files kept, renamed, default flag removed --- + (t/is (false? (:is-default org-1-updated-files))) + (t/is (str/starts-with? (:name org-1-updated-files) org-1-prefix)) + (t/is (nil? (:deleted-at org-1-updated-files))) + ;; --- Verify: org-1 empty team soft-deleted --- + (t/is (some? (:deleted-at org-1-updated-empty))) + + ;; --- Verify: org-2 team with files kept, renamed, default flag removed --- + (t/is (false? (:is-default org-2-updated-files))) + (t/is (str/starts-with? (:name org-2-updated-files) org-2-prefix)) + (t/is (nil? (:deleted-at org-2-updated-files))) + ;; --- Verify: org-2 empty team soft-deleted --- + (t/is (some? (:deleted-at org-2-updated-empty))) + + ;; --- Verify: two delete tasks submitted (one per empty team) --- + (t/is (:called? @wrk-mock)) + (t/is (= 2 (:call-count @wrk-mock))) + + ;; --- Verify: one organization-deleted event per org, all on correct topic --- + (t/is (= 2 (count msgs))) + (t/is (every? #(= uuid/zero (:topic %)) + (->> (:call-args-list @mbus-mock) + (map #(apply hash-map (rest %)))))) + (t/is (= #{:organization-deleted} (set (map :type msgs)))) + + ;; --- Verify: each org-deleted event has correct org-specific payload --- + (let [m1 (org-msg org-1-name) + m2 (org-msg org-2-name)] + (t/is (some? m1)) + (t/is (some? m2)) + (t/is (= org-1-id (:organization-id m1))) + (t/is (= org-2-id (:organization-id m2))) + (t/is (= #{(:id org-1-team-files) (:id org-1-team-empty)} + (set (:teams m1)))) + (t/is (= #{(:id org-1-team-empty)} + (set (:deleted-teams m1)))) + (t/is (= #{(:id org-2-team-files) (:id org-2-team-empty)} + (set (:teams m2)))) + (t/is (= #{(:id org-2-team-empty)} + (set (:deleted-teams m2))))))))) (t/deftest get-profile-by-email-success-and-not-found - (let [profile (th/create-profile* 1 {:is-active true - :fullname "Lookup by Email"}) - ok-out (management-command-with-nitrate! {::th/type :get-profile-by-email - ::rpc/profile-id (:id profile) - :email (:email profile)}) - ko-out (management-command-with-nitrate! {::th/type :get-profile-by-email - ::rpc/profile-id (:id profile) - :email "not-found@example.com"})] - (t/is (th/success? ok-out)) - (t/is (= (:id profile) (-> ok-out :result :id))) - (t/is (= "Lookup by Email" (-> ok-out :result :name))) - (t/is (nil? (-> ok-out :result :photo-url))) + (with-mocks [nitrate-mock {:target 'app.nitrate/call :return nil}] + (let [profile (th/create-profile* 1 {:is-active true + :fullname "Lookup by Email"}) + ok-out (th/management-command! {::th/type :get-profile-by-email + ::rpc/profile-id (:id profile) + :email (:email profile)}) + ko-out (th/management-command! {::th/type :get-profile-by-email + ::rpc/profile-id (:id profile) + :email "not-found@example.com"})] + (t/is (th/success? ok-out)) + (t/is (= (:id profile) (-> ok-out :result :id))) + (t/is (= "Lookup by Email" (-> ok-out :result :name))) + (t/is (nil? (-> ok-out :result :photo-url))) - (t/is (not (th/success? ko-out))) - (t/is (= :not-found (th/ex-type (:error ko-out)))) - (t/is (= :profile-not-found (th/ex-code (:error ko-out)))))) + (t/is (not (th/success? ko-out))) + (t/is (= :not-found (th/ex-type (:error ko-out)))) + (t/is (= :profile-not-found (th/ex-code (:error ko-out))))))) (t/deftest get-profile-by-id-success-and-not-found - (let [profile (th/create-profile* 1 {:is-active true - :fullname "Lookup by Id"}) - ok-out (management-command-with-nitrate! {::th/type :get-profile-by-id - ::rpc/profile-id (:id profile) - :id (:id profile)}) - ko-out (management-command-with-nitrate! {::th/type :get-profile-by-id - ::rpc/profile-id (:id profile) - :id (uuid/random)})] - (t/is (th/success? ok-out)) - (t/is (= (:id profile) (-> ok-out :result :id))) - (t/is (= "Lookup by Id" (-> ok-out :result :name))) - (t/is (nil? (-> ok-out :result :photo-url))) + (with-mocks [nitrate-mock {:target 'app.nitrate/call :return nil}] + (let [profile (th/create-profile* 1 {:is-active true + :fullname "Lookup by Id"}) + ok-out (th/management-command! {::th/type :get-profile-by-id + ::rpc/profile-id (:id profile) + :id (:id profile)}) + ko-out (th/management-command! {::th/type :get-profile-by-id + ::rpc/profile-id (:id profile) + :id (uuid/random)})] + (t/is (th/success? ok-out)) + (t/is (= (:id profile) (-> ok-out :result :id))) + (t/is (= "Lookup by Id" (-> ok-out :result :name))) + (t/is (nil? (-> ok-out :result :photo-url))) - (t/is (not (th/success? ko-out))) - (t/is (= :not-found (th/ex-type (:error ko-out)))) - (t/is (= :profile-not-found (th/ex-code (:error ko-out)))))) + (t/is (not (th/success? ko-out))) + (t/is (= :not-found (th/ex-type (:error ko-out)))) + (t/is (= :profile-not-found (th/ex-code (:error ko-out))))))) (t/deftest get-organization-invitations-returns-valid-deduped-by-email - (let [profile (th/create-profile* 1 {:is-active true}) - team-1 (th/create-team* 1 {:profile-id (:id profile)}) - team-2 (th/create-team* 2 {:profile-id (:id profile)}) - org-id (uuid/random) - org-summary {:id org-id - :teams [{:id (:id team-1)} - {:id (:id team-2)}]} - params {::th/type :get-organization-invitations - ::rpc/profile-id (:id profile) - :organization-id org-id}] + ;; --- Deferred org-summary: nil during setup, filled before RPC --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: return nil during profile/team creation, + ;; then serve the computed org-summary when the handler queries it --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [_cfg method _params] + (case method + :get-org-summary @org-summary-ref + nil))}] - ;; Same email appears in org and team invitations; only one should be returned. - (th/db-insert! :team-invitation - {:id (uuid/random) - :org-id org-id - :team-id nil - :email-to "dup@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; --- Setup: create profile, teams, and invitation data --- + (let [profile (th/create-profile* 1 {:is-active true}) + team-1 (th/create-team* 1 {:profile-id (:id profile)}) + team-2 (th/create-team* 2 {:profile-id (:id profile)}) - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team-1) - :org-id nil - :email-to "dup@example.com" - :created-by (:id profile) - :role "admin" - :valid-until (ct/in-future "72h")}) + ;; --- Data needed by the RPC call --- + org-id (uuid/random) + org-summary {:id org-id + :teams [{:id (:id team-1)} + {:id (:id team-2)}]} + params {::th/type :get-organization-invitations + ::rpc/profile-id (:id profile) + :organization-id org-id} + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team-2) - :org-id nil - :email-to "valid@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "48h")}) + ;; --- Insert invitation records --- + ;; Same email appears in org and team invitations; only one should be returned. + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :org-id org-id + :team-id nil + :email-to "dup@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team-1) + :org-id nil + :email-to "dup@example.com" + :created-by (:id profile) + :role "admin" + :valid-until (ct/in-future "72h")}) + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team-2) + :org-id nil + :email-to "valid@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "48h")}) + ;; Expired invitation should be ignored. + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :org-id org-id + :team-id nil + :email-to "expired@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-past "1h")}) - ;; Expired invitation should be ignored. - (th/db-insert! :team-invitation - {:id (uuid/random) - :org-id org-id - :team-id nil - :email-to "expired@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-past "1h")}) + ;; --- Exercise: query org invitations --- + out (th/management-command! params) - (let [out (with-redefs [nitrate/call (fn [_cfg method _params] - (case method - :get-org-summary org-summary - nil))] - (management-command-with-nitrate! params)) - result (:result out) - emails (->> result (map :email) set) - dedup (->> result - (filter #(= "dup@example.com" (:email %))) - first)] - (t/is (th/success? out)) - (t/is (= #{"dup@example.com" "valid@example.com"} emails)) - (t/is (= 2 (count result))) - (t/is (some? (:id dedup))) - (t/is (some? (:sent-at dedup))) - (t/is (nil? (:organization-id dedup))) - (t/is (nil? (:team-id dedup))) - (t/is (nil? (:role dedup))) - (t/is (nil? (:valid-until dedup)))))) + ;; --- Extract results --- + result (:result out) + emails (->> result (map :email) set) + dedup (->> result + (filter #(= "dup@example.com" (:email %))) + first)] + + ;; --- Verify: nitrate was queried for the org summary --- + (let [[_ method params'] (:call-args @nitrate-mock)] + (t/is (= :get-org-summary method)) + (t/is (= {:organization-id org-id} params'))) + + ;; --- Verify: RPC returns success with deduplicated invitations --- + (t/is (th/success? out)) + (t/is (= #{"dup@example.com" "valid@example.com"} emails)) + (t/is (= 2 (count result))) + ;; --- Verify: deduplicated invitation has id/sent-at but no team-specific fields --- + (t/is (some? (:id dedup))) + (t/is (some? (:sent-at dedup))) + (t/is (nil? (:organization-id dedup))) + (t/is (nil? (:team-id dedup))) + (t/is (nil? (:role dedup))) + (t/is (nil? (:valid-until dedup))))))) (t/deftest get-organization-invitations-includes-org-level-invitations-when-no-teams - (let [profile (th/create-profile* 1 {:is-active true}) - org-id (uuid/random) - org-summary {:id org-id - :teams []} + ;; --- Org-summary has no teams — computable before with-mocks, no deferral needed --- + (let [org-id (uuid/random) + org-summary {:id org-id :teams []} params {::th/type :get-organization-invitations - ::rpc/profile-id (:id profile) :organization-id org-id}] + (with-mocks + [;; --- Nitrate mock: return the org-summary when the handler queries it --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [_cfg method _params] + (case method + :get-org-summary org-summary + nil))}] - (th/db-insert! :team-invitation - {:id (uuid/random) - :org-id org-id - :team-id nil - :email-to "org-only@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; --- Setup: create profile and insert an org-level invitation --- + (let [profile (th/create-profile* 1 {:is-active true}) + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :org-id org-id + :team-id nil + :email-to "org-only@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) - (let [out (with-redefs [nitrate/call (fn [_cfg method _params] - (case method - :get-org-summary org-summary - nil))] - (management-command-with-nitrate! params)) - result (:result out)] - (t/is (th/success? out)) - (t/is (= 1 (count result))) - (t/is (= "org-only@example.com" (-> result first :email))) - (t/is (some? (-> result first :sent-at)))))) + ;; --- Exercise: query org invitations --- + out (th/management-command! (assoc params ::rpc/profile-id (:id profile))) + result (:result out)] + + ;; --- Verify: nitrate was queried for the org summary --- + (let [[_ method params'] (:call-args @nitrate-mock)] + (t/is (= :get-org-summary method)) + (t/is (= {:organization-id org-id} params'))) + + ;; --- Verify: the org-level invitation is returned --- + (t/is (th/success? out)) + (t/is (= 1 (count result))) + (t/is (= "org-only@example.com" (-> result first :email))) + (t/is (some? (-> result first :sent-at))))))) (t/deftest get-organization-invitations-returns-existing-profile-data - (let [profile (th/create-profile* 1 {:is-active true}) - invited (th/create-profile* 2 {:is-active true - :fullname "Invited User"}) - photo-id (uuid/random) - _ (th/db-insert! :storage-object {:id photo-id - :backend "assets-fs"}) - _ (th/db-update! :profile {:photo-id photo-id} {:id (:id invited)}) - org-id (uuid/random) - org-summary {:id org-id - :teams []} - params {::th/type :get-organization-invitations - ::rpc/profile-id (:id profile) - :organization-id org-id}] + ;; --- Org-summary has no teams — computable before with-mocks, no deferral needed --- + (let [org-id (uuid/random) + org-summary {:id org-id :teams []}] + (with-mocks + [;; --- Nitrate mock: return the org-summary when the handler queries it --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [_cfg method _params] + (case method + :get-org-summary org-summary + nil))}] - (th/db-insert! :team-invitation - {:id (uuid/random) - :org-id org-id - :team-id nil - :email-to (:email invited) - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; --- Setup: create profiles, set photo on invited user, insert invitation --- + (let [profile (th/create-profile* 1 {:is-active true}) + invited (th/create-profile* 2 {:is-active true + :fullname "Invited User"}) + photo-id (uuid/random) + _ (th/db-insert! :storage-object {:id photo-id + :backend "assets-fs"}) + _ (th/db-update! :profile {:photo-id photo-id} {:id (:id invited)}) + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :org-id org-id + :team-id nil + :email-to (:email invited) + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) - (let [out (with-redefs [nitrate/call (fn [_cfg method _params] - (case method - :get-org-summary org-summary - nil))] - (management-command-with-nitrate! params)) - invitation (-> out :result first)] - (t/is (th/success? out)) - (t/is (= "Invited User" (:name invitation))) - (t/is (some? (:sent-at invitation))) - (t/is (str/ends-with? (:photo-url invitation) - (str "/assets/by-id/" photo-id)))))) + ;; --- Exercise: query org invitations --- + out (th/management-command! {::th/type :get-organization-invitations + ::rpc/profile-id (:id profile) + :organization-id org-id}) + invitation (-> out :result first)] + + ;; --- Verify: nitrate was queried for the org summary --- + (let [[_ method params'] (:call-args @nitrate-mock)] + (t/is (= :get-org-summary method)) + (t/is (= {:organization-id org-id} params'))) + + ;; --- Verify: invitation includes the invited user's existing profile data --- + (t/is (th/success? out)) + (t/is (= "Invited User" (:name invitation))) + (t/is (some? (:sent-at invitation))) + (t/is (str/ends-with? (:photo-url invitation) + (str "/assets/by-id/" photo-id))))))) (t/deftest delete-organization-invitations-removes-org-and-org-team-invitations-for-email - (let [profile (th/create-profile* 1 {:is-active true}) - team-1 (th/create-team* 1 {:profile-id (:id profile)}) - team-2 (th/create-team* 2 {:profile-id (:id profile)}) - outside-team (th/create-team* 3 {:profile-id (:id profile)}) - org-id (uuid/random) - org-summary {:id org-id - :teams [{:id (:id team-1)} - {:id (:id team-2)}]} - target-email "target@example.com" - params {::th/type :delete-organization-invitations - ::rpc/profile-id (:id profile) - :organization-id org-id - :email "TARGET@example.com"}] + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil) + target-email "target@example.com"] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary when handler queries it --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [_cfg method _params] + (case method + :get-org-summary @org-summary-ref + nil))}] - ;; Should be deleted: org-level invitation for same org+email. - (th/db-insert! :team-invitation - {:id (uuid/random) - :org-id org-id - :team-id nil - :email-to target-email - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; --- Setup: create profile, teams, and invitation data --- + (let [profile (th/create-profile* 1 {:is-active true}) + team-1 (th/create-team* 1 {:profile-id (:id profile)}) + team-2 (th/create-team* 2 {:profile-id (:id profile)}) + outside-team (th/create-team* 3 {:profile-id (:id profile)}) + org-id (uuid/random) + org-summary {:id org-id + :teams [{:id (:id team-1)} + {:id (:id team-2)}]} + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) - ;; Should be deleted: team-level invitation for teams belonging to org summary. - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team-1) - :org-id nil - :email-to target-email - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-past "1h")}) + ;; --- Insert invitation records --- + ;; Should be deleted: org-level invitation for same org+email. + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :org-id org-id + :team-id nil + :email-to target-email + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) + ;; Should be deleted: team-level invitation for teams in org summary. + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team-1) + :org-id nil + :email-to target-email + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-past "1h")}) + ;; Should remain: different email. + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team-2) + :org-id nil + :email-to "other@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) + ;; Should remain: same email but outside org scope. + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id outside-team) + :org-id nil + :email-to target-email + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) - ;; Should remain: different email. - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team-2) - :org-id nil - :email-to "other@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; --- Exercise: delete org invitations for target email --- + out (th/management-command! {::th/type :delete-organization-invitations + ::rpc/profile-id (:id profile) + :organization-id org-id + :email "TARGET@example.com"}) + remaining-target (th/db-query :team-invitation {:email-to target-email}) + remaining-other (th/db-query :team-invitation {:email-to "other@example.com"})] - ;; Should remain: same email but outside org scope. - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id outside-team) - :org-id nil - :email-to target-email - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; --- Verify: nitrate was queried for the org summary --- + (let [[_ method params'] (:call-args @nitrate-mock)] + (t/is (= :get-org-summary method)) + (t/is (= {:organization-id org-id} params'))) - (let [out (with-redefs [nitrate/call (fn [_cfg method _params] - (case method - :get-org-summary org-summary - nil))] - (management-command-with-nitrate! params)) - remaining-target (th/db-query :team-invitation {:email-to target-email}) - remaining-other (th/db-query :team-invitation {:email-to "other@example.com"})] - (t/is (th/success? out)) - (t/is (nil? (:result out))) - (t/is (= 1 (count remaining-target))) - (t/is (= (:id outside-team) (:team-id (first remaining-target)))) - (t/is (= 1 (count remaining-other)))))) + ;; --- Verify: RPC returns success with no result payload --- + (t/is (th/success? out)) + (t/is (nil? (:result out))) + ;; --- Verify: only the outside-team invitation remains for target email --- + (t/is (= 1 (count remaining-target))) + (t/is (= (:id outside-team) (:team-id (first remaining-target)))) + ;; --- Verify: other-email invitation is untouched --- + (t/is (= 1 (count remaining-other))))))) (t/deftest delete-all-organization-invitations-removes-org-and-org-team-invitations - (let [profile (th/create-profile* 1 {:is-active true}) - team-1 (th/create-team* 1 {:profile-id (:id profile)}) - team-2 (th/create-team* 2 {:profile-id (:id profile)}) - outside-team (th/create-team* 3 {:profile-id (:id profile)}) - org-id (uuid/random) - org-summary {:id org-id - :teams [{:id (:id team-1)} - {:id (:id team-2)}]} - params {::th/type :delete-all-organization-invitations - :organization-id org-id}] + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary when handler queries it --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [_cfg method _params] + (case method + :get-org-summary @org-summary-ref + nil))}] - ;; Should be deleted: org-level invitation. - (th/db-insert! :team-invitation - {:id (uuid/random) - :org-id org-id - :team-id nil - :email-to "alice@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; --- Setup: create profile, teams, and invitation data --- + (let [profile (th/create-profile* 1 {:is-active true}) + team-1 (th/create-team* 1 {:profile-id (:id profile)}) + team-2 (th/create-team* 2 {:profile-id (:id profile)}) + outside-team (th/create-team* 3 {:profile-id (:id profile)}) + org-id (uuid/random) + org-summary {:id org-id + :teams [{:id (:id team-1)} + {:id (:id team-2)}]} + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) - ;; Should be deleted: team-level invitation in team-1 (belongs to org). - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team-1) - :org-id nil - :email-to "bob@example.com" - :created-by (:id profile) - :role "admin" - :valid-until (ct/in-future "48h")}) + ;; --- Insert invitation records --- + ;; Should be deleted: org-level invitation. + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :org-id org-id + :team-id nil + :email-to "alice@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) + ;; Should be deleted: team-level invitation in team-1 (belongs to org). + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team-1) + :org-id nil + :email-to "bob@example.com" + :created-by (:id profile) + :role "admin" + :valid-until (ct/in-future "48h")}) + ;; Should be deleted: team-level invitation in team-2 (belongs to org), + ;; even if expired. + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team-2) + :org-id nil + :email-to "carol@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-past "1h")}) + ;; Should remain: invitation to a team outside the org. + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id outside-team) + :org-id nil + :email-to "dan@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) + ;; Should remain: invitation to a different organization. + _ (th/db-insert! :team-invitation + {:id (uuid/random) + :org-id (uuid/random) + :team-id nil + :email-to "erin@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) - ;; Should be deleted: team-level invitation in team-2 (belongs to org), - ;; even if expired. - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team-2) - :org-id nil - :email-to "carol@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-past "1h")}) + ;; --- Exercise: delete all invitations in the org --- + out (th/management-command! {::th/type :delete-all-organization-invitations + ::rpc/profile-id (:id profile) + :organization-id org-id}) + present? (fn [email] (seq (th/db-query :team-invitation {:email-to email})))] - ;; Should remain: invitation to a team outside the org. - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id outside-team) - :org-id nil - :email-to "dan@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; --- Verify: the handler's nitrate call was :get-org-summary with correct params --- + ;; (The mock also recorded setup-phase calls from add-profile-to-team!, + ;; so :call-args reflects the LAST call — which is the handler's.) + (let [[_ method params'] (:call-args @nitrate-mock)] + (t/is (= :get-org-summary method)) + (t/is (= {:organization-id org-id} params'))) - ;; Should remain: invitation to a different organization. - (th/db-insert! :team-invitation - {:id (uuid/random) - :org-id (uuid/random) - :team-id nil - :email-to "erin@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; --- Verify: RPC returns success with no result payload --- + (t/is (th/success? out)) + (t/is (nil? (:result out))) - (let [calls (atom []) - out (with-redefs [nitrate/call (fn [_cfg method params] - (swap! calls conj {:method method :params params}) - (case method - :get-org-summary org-summary - nil))] - (management-command-with-nitrate! params)) - present? (fn [email] (seq (th/db-query :team-invitation {:email-to email})))] - (t/is (th/success? out)) - (t/is (nil? (:result out))) + ;; --- Verify: org-level + team-in-org invitations are deleted --- + (t/is (not (present? "alice@example.com"))) + (t/is (not (present? "bob@example.com"))) + (t/is (not (present? "carol@example.com"))) - ;; get-org-summary was called with the right organization-id. - (t/is (= 1 (count @calls))) - (t/is (= :get-org-summary (-> @calls first :method))) - (t/is (= {:organization-id org-id} (-> @calls first :params))) - - ;; Org-level + team-in-org invitations are deleted. - (t/is (not (present? "alice@example.com"))) - (t/is (not (present? "bob@example.com"))) - (t/is (not (present? "carol@example.com"))) - - ;; Invitations outside the org survive. - (t/is (present? "dan@example.com")) - (t/is (present? "erin@example.com"))))) + ;; --- Verify: invitations outside the org survive --- + (t/is (present? "dan@example.com")) + (t/is (present? "erin@example.com")))))) (t/deftest delete-all-organization-invitations-handles-org-with-no-teams - (let [profile (th/create-profile* 1 {:is-active true}) - org-id (uuid/random) + (let [org-id (uuid/random) params {::th/type :delete-all-organization-invitations :organization-id org-id}] + (with-mocks [audit-mock {:target 'app.loggers.audit/submit :return nil} + nitrate-fn {:target 'app.nitrate/call + :return (fn [_cfg method _params] + (case method + :get-org-summary {:id org-id :teams []} + nil))}] + (let [profile (th/create-profile* 1 {:is-active true})] - ;; Org-level invitation should still be deleted. - (th/db-insert! :team-invitation - {:id (uuid/random) - :org-id org-id - :team-id nil - :email-to "alice@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) - (let [out (with-redefs [nitrate/call (fn [_cfg method _params] - (case method - :get-org-summary {:id org-id :teams []} - nil))] - (management-command-with-nitrate! params)) - remaining (th/db-query :team-invitation {:org-id org-id})] - (t/is (th/success? out)) - (t/is (nil? (:result out))) - (t/is (empty? remaining))))) + ;; Org-level invitation should still be deleted. + (th/db-insert! :team-invitation + {:id (uuid/random) + :org-id org-id + :team-id nil + :email-to "alice@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) + + (let [out (th/management-command! params) + remaining (th/db-query :team-invitation {:org-id org-id})] + (t/is (th/success? out)) + (t/is (nil? (:result out))) + (t/is (empty? remaining))))))) (t/deftest exists-organization-team-invitations-for-non-members-reports-invitations-to-delete - (let [member1 (th/create-profile* 1 {:is-active true :email "member1@example.com"}) - profile (th/create-profile* 4 {:is-active true}) - team-1 (th/create-team* 1 {:profile-id (:id profile)}) - team-2 (th/create-team* 2 {:profile-id (:id profile)}) - outside-team (th/create-team* 3 {:profile-id (:id profile)}) - org-id (uuid/random) - base-params {::th/type :exists-organization-team-invitations-for-non-members - ::rpc/profile-id (:id profile) - :organization-id org-id - :team-ids [(:id team-1) (:id team-2)] - :member-ids [(:id member1)]} - exist! (fn [] (-> (management-command-with-nitrate! base-params) - :result - :exists))] + (with-mocks [nitrate-mock {:target 'app.nitrate/call :return nil}] + (let [member1 (th/create-profile* 1 {:is-active true :email "member1@example.com"}) + profile (th/create-profile* 4 {:is-active true}) + team-1 (th/create-team* 1 {:profile-id (:id profile)}) + team-2 (th/create-team* 2 {:profile-id (:id profile)}) + outside-team (th/create-team* 3 {:profile-id (:id profile)}) + org-id (uuid/random) + base-params {::th/type :exists-organization-team-invitations-for-non-members + ::rpc/profile-id (:id profile) + :organization-id org-id + :team-ids [(:id team-1) (:id team-2)] + :member-ids [(:id member1)]} + exist! (fn [] (-> (th/management-command! base-params) + :result + :exists))] - (t/is (false? (exist!))) + (t/is (false? (exist!))) - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team-1) - :org-id nil - :email-to "member1@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) - (t/is (false? (exist!))) + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team-1) + :org-id nil + :email-to "member1@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) + (t/is (false? (exist!))) - (th/db-insert! :team-invitation - {:id (uuid/random) - :org-id org-id - :team-id nil - :email-to "pending@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) - (t/is (false? (exist!))) + (th/db-insert! :team-invitation + {:id (uuid/random) + :org-id org-id + :team-id nil + :email-to "pending@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) + (t/is (false? (exist!))) - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id outside-team) - :org-id nil - :email-to "outsider@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) - (t/is (false? (exist!))) + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id outside-team) + :org-id nil + :email-to "outsider@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) + (t/is (false? (exist!))) - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team-2) - :org-id nil - :email-to "orphan@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) - (t/is (true? (exist!))))) + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team-2) + :org-id nil + :email-to "orphan@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) + (t/is (true? (exist!)))))) (t/deftest delete-organization-team-invitations-for-non-members-removes-non-member-invitations - (let [member1 (th/create-profile* 1 {:is-active true :email "member1@example.com"}) - profile (th/create-profile* 4 {:is-active true}) - team-1 (th/create-team* 1 {:profile-id (:id profile)}) - team-2 (th/create-team* 2 {:profile-id (:id profile)}) - outside-team (th/create-team* 3 {:profile-id (:id profile)}) - org-id (uuid/random) - params {::th/type :delete-organization-team-invitations-for-non-members - ::rpc/profile-id (:id profile) - :organization-id org-id - :team-ids [(:id team-1) (:id team-2)] - :member-ids [(:id member1)]}] + (with-mocks [nitrate-mock {:target 'app.nitrate/call :return nil}] + (let [member1 (th/create-profile* 1 {:is-active true :email "member1@example.com"}) + profile (th/create-profile* 4 {:is-active true}) + team-1 (th/create-team* 1 {:profile-id (:id profile)}) + team-2 (th/create-team* 2 {:profile-id (:id profile)}) + outside-team (th/create-team* 3 {:profile-id (:id profile)}) + org-id (uuid/random) + params {::th/type :delete-organization-team-invitations-for-non-members + ::rpc/profile-id (:id profile) + :organization-id org-id + :team-ids [(:id team-1) (:id team-2)] + :member-ids [(:id member1)]}] - ;; Should remain: member1 is an org member. - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team-1) - :org-id nil - :email-to "member1@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; Should remain: member1 is an org member. + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team-1) + :org-id nil + :email-to "member1@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) - ;; Org-level invitation remains (out of team cleanup scope). - (th/db-insert! :team-invitation - {:id (uuid/random) - :org-id org-id - :team-id nil - :email-to "pending@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; Org-level invitation remains (out of team cleanup scope). + (th/db-insert! :team-invitation + {:id (uuid/random) + :org-id org-id + :team-id nil + :email-to "pending@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) - ;; Should be deleted: team invitation for non-member - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team-2) - :org-id nil - :email-to "pending@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; Should be deleted: team invitation for non-member + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team-2) + :org-id nil + :email-to "pending@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) - ;; Should be deleted: orphaned invitation - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team-2) - :org-id nil - :email-to "orphan@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; Should be deleted: orphaned invitation + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team-2) + :org-id nil + :email-to "orphan@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) - ;; Should be deleted: expired invitation. - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team-1) - :org-id nil - :email-to "expired@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-past "1h")}) + ;; Should be deleted: expired invitation. + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team-1) + :org-id nil + :email-to "expired@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-past "1h")}) - ;; Should remain: outside org scope. - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id outside-team) - :org-id nil - :email-to "outsider@example.com" - :created-by (:id profile) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; Should remain: outside org scope. + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id outside-team) + :org-id nil + :email-to "outsider@example.com" + :created-by (:id profile) + :role "editor" + :valid-until (ct/in-future "24h")}) - (let [out (management-command-with-nitrate! params)] + (let [out (th/management-command! params)] - (t/is (th/success? out)) - (t/is (nil? (:result out))) + (t/is (th/success? out)) + (t/is (nil? (:result out))) - ;; Verify remaining invitations. - (t/is (= 1 (count (th/db-query :team-invitation {:email-to "member1@example.com"})))) - (t/is (= 1 (count (th/db-query :team-invitation {:email-to "pending@example.com"})))) - (t/is (= 0 (count (th/db-query :team-invitation {:email-to "orphan@example.com"})))) - (t/is (= 0 (count (th/db-query :team-invitation {:email-to "expired@example.com"})))) - (t/is (= 1 (count (th/db-query :team-invitation {:email-to "outsider@example.com"}))))))) + ;; Verify remaining invitations. + (t/is (= 1 (count (th/db-query :team-invitation {:email-to "member1@example.com"})))) + (t/is (= 1 (count (th/db-query :team-invitation {:email-to "pending@example.com"})))) + (t/is (= 0 (count (th/db-query :team-invitation {:email-to "orphan@example.com"})))) + (t/is (= 0 (count (th/db-query :team-invitation {:email-to "expired@example.com"})))) + (t/is (= 1 (count (th/db-query :team-invitation {:email-to "outsider@example.com"})))))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Tests: remove-from-organization @@ -913,418 +1046,599 @@ (t/deftest remove-from-organization-happy-path-no-extra-teams ;; User is only in its default team (which has files); it should be ;; kept, renamed and unset as default. A notification must be sent. - (let [org-owner (th/create-profile* 1 {:is-active true}) - user (th/create-profile* 2 {:is-active true}) - org-team (th/create-team* 1 {:profile-id (:id user)}) - project (th/create-project* 1 {:profile-id (:id user) - :team-id (:id org-team)}) - _ (th/create-file* 1 {:profile-id (:id user) - :project-id (:id project)}) - organization-id (uuid/random) - org-summary (make-org-summary - :organization-id organization-id - :organization-name "Acme Org" - :owner-id (:id org-owner) - :your-penpot-teams [(:id org-team)] - :org-teams []) - calls (atom []) - out (with-redefs [nitrate/call (nitrate-call-mock org-summary) - mbus/pub! (fn [_bus & {:keys [topic message]}] - (swap! calls conj {:topic topic :message message}))] - (management-command-with-nitrate! - {::th/type :remove-from-organization - ::rpc/profile-id (:id org-owner) - :profile-id (:id user) - :organization-id organization-id - :organization-name "Acme Org" - :default-team-id (:id org-team)}))] - (t/is (th/success? out)) - (t/is (nil? (:result out))) + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [& args] + (apply (nitrate-call-mock @org-summary-ref) args))} + ;; --- Message bus mock: capture published events --- + mbus-mock {:target 'app.msgbus/pub! :return nil}] - ;; default team preserved, renamed and unset as default - (let [team (th/db-get :team {:id (:id org-team)})] - (t/is (false? (:is-default team))) - (t/is (str/starts-with? (:name team) "[Acme Org] "))) + ;; --- Setup: create profiles, team with files, org-summary --- + (let [org-owner (th/create-profile* 1 {:is-active true}) + user (th/create-profile* 2 {:is-active true}) + org-team (th/create-team* 1 {:profile-id (:id user)}) + project (th/create-project* 1 {:profile-id (:id user) + :team-id (:id org-team)}) + _ (th/create-file* 1 {:profile-id (:id user) + :project-id (:id project)}) + organization-id (uuid/random) + org-summary (make-org-summary + :organization-id organization-id + :organization-name "Acme Org" + :owner-id (:id org-owner) + :your-penpot-teams [(:id org-team)] + :org-teams []) + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) - ;; exactly one notification sent to the user - (t/is (= 1 (count @calls))) - (let [msg (-> @calls first :message)] - (t/is (= :user-org-change (:type msg))) - (t/is (= (:id user) (:topic msg))) - (t/is (= organization-id (:organization-id msg))) - (t/is (= "Acme Org" (:organization-name msg))) - (t/is (= "dashboard.user-no-longer-belong-org" (:notification msg)))))) + ;; --- Exercise: remove the user from the org --- + out (th/management-command! + {::th/type :remove-from-organization + ::rpc/profile-id (:id org-owner) + :profile-id (:id user) + :organization-id organization-id + :organization-name "Acme Org" + :default-team-id (:id org-team)})] + + ;; --- Verify: nitrate was called (via nitrate-call-mock delegating) --- + (t/is (:called? @nitrate-mock)) + + ;; --- Verify: RPC returns success with no result payload --- + (t/is (th/success? out)) + (t/is (nil? (:result out))) + + ;; --- Verify: default team preserved, renamed and unset as default --- + (let [team (th/db-get :team {:id (:id org-team)})] + (t/is (false? (:is-default team))) + (t/is (str/starts-with? (:name team) "[Acme Org] "))) + + ;; --- Verify: exactly one notification sent to the user --- + (t/is (:called? @mbus-mock)) + (let [msg (apply hash-map (rest (:call-args @mbus-mock)))] + (t/is (= :user-org-change (:type (:message msg)))) + (t/is (= (:id user) (:topic msg))) + (t/is (= organization-id (:organization-id (:message msg)))) + (t/is (= "Acme Org" (:organization-name (:message msg)))) + (t/is (= "dashboard.user-no-longer-belong-org" (:notification (:message msg))))))))) (t/deftest remove-from-organization-deletes-empty-default-team ;; When the default team has no files it should be soft-deleted. - (let [org-owner (th/create-profile* 1 {:is-active true}) - user (th/create-profile* 2 {:is-active true}) - org-team (th/create-team* 2 {:profile-id (:id user)}) - organization-id (uuid/random) - org-summary (make-org-summary - :organization-id organization-id - :organization-name "Acme Org" - :owner-id (:id org-owner) - :your-penpot-teams [(:id org-team)] - :org-teams []) - out (with-redefs [nitrate/call (nitrate-call-mock org-summary) - mbus/pub! (fn [& _] nil)] - (management-command-with-nitrate! - {::th/type :remove-from-organization - ::rpc/profile-id (:id org-owner) - :profile-id (:id user) - :organization-id organization-id - :organization-name "Acme Org" - :default-team-id (:id org-team)}))] - (t/is (th/success? out)) - (let [team (th/db-get :team {:id (:id org-team)} {::db/remove-deleted false})] - (t/is (some? (:deleted-at team)))))) + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [& args] + (apply (nitrate-call-mock @org-summary-ref) args))} + ;; --- Message bus mock: swallow notifications --- + mbus-mock {:target 'app.msgbus/pub! :return nil}] + + ;; --- Setup: create profiles, empty default team, org-summary --- + (let [org-owner (th/create-profile* 1 {:is-active true}) + user (th/create-profile* 2 {:is-active true}) + org-team (th/create-team* 2 {:profile-id (:id user)}) + organization-id (uuid/random) + org-summary (make-org-summary + :organization-id organization-id + :organization-name "Acme Org" + :owner-id (:id org-owner) + :your-penpot-teams [(:id org-team)] + :org-teams []) + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) + + ;; --- Exercise: remove the user from the org --- + out (th/management-command! + {::th/type :remove-from-organization + ::rpc/profile-id (:id org-owner) + :profile-id (:id user) + :organization-id organization-id + :organization-name "Acme Org" + :default-team-id (:id org-team)})] + + ;; --- Verify: RPC returns success --- + (t/is (th/success? out)) + ;; --- Verify: empty default team is soft-deleted --- + (let [team (th/db-get :team {:id (:id org-team)} {::db/remove-deleted false})] + (t/is (some? (:deleted-at team)))))))) (t/deftest remove-from-organization-deletes-sole-owner-team ;; When the user is the sole member of an org team it should be deleted. - (let [org-owner (th/create-profile* 1 {:is-active true}) - user (th/create-profile* 2 {:is-active true}) - extra-team (th/create-team* 3 {:profile-id (:id user)}) - org-team (th/create-team* 99 {:profile-id (:id user)}) - organization-id (uuid/random) - org-summary (make-org-summary - :organization-id organization-id - :organization-name "Acme Org" - :owner-id (:id org-owner) - :your-penpot-teams [(:id org-team)] - :org-teams [(:id extra-team)]) - out (with-redefs [nitrate/call (nitrate-call-mock org-summary) - mbus/pub! (fn [& _] nil)] - (management-command-with-nitrate! - {::th/type :remove-from-organization - ::rpc/profile-id (:id org-owner) - :profile-id (:id user) - :organization-id organization-id - :organization-name "Acme Org" - :default-team-id (:id org-team)}))] - (t/is (th/success? out)) - (let [team (th/db-get :team {:id (:id extra-team)} {::db/remove-deleted false})] - (t/is (some? (:deleted-at team)))))) + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [& args] + (apply (nitrate-call-mock @org-summary-ref) args))} + ;; --- Message bus mock: swallow notifications --- + mbus-mock {:target 'app.msgbus/pub! :return nil}] + + ;; --- Setup: create profiles, teams, org-summary --- + (let [org-owner (th/create-profile* 1 {:is-active true}) + user (th/create-profile* 2 {:is-active true}) + extra-team (th/create-team* 3 {:profile-id (:id user)}) + org-team (th/create-team* 99 {:profile-id (:id user)}) + organization-id (uuid/random) + org-summary (make-org-summary + :organization-id organization-id + :organization-name "Acme Org" + :owner-id (:id org-owner) + :your-penpot-teams [(:id org-team)] + :org-teams [(:id extra-team)]) + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) + + ;; --- Exercise: remove the user from the org --- + out (th/management-command! + {::th/type :remove-from-organization + ::rpc/profile-id (:id org-owner) + :profile-id (:id user) + :organization-id organization-id + :organization-name "Acme Org" + :default-team-id (:id org-team)})] + + ;; --- Verify: RPC returns success --- + (t/is (th/success? out)) + ;; --- Verify: extra team (sole-owner team) is deleted --- + (let [team (th/db-get :team {:id (:id extra-team)} {::db/remove-deleted false})] + (t/is (some? (:deleted-at team)))))))) (t/deftest remove-from-organization-transfers-ownership-of-multi-member-team ;; When the user owns a team that has another non-owner member, ownership ;; is transferred to that member by the endpoint automatically. - (let [org-owner (th/create-profile* 1 {:is-active true}) - user (th/create-profile* 2 {:is-active true}) - candidate (th/create-profile* 3 {:is-active true}) - extra-team (th/create-team* 4 {:profile-id (:id user)}) - _ (th/create-team-role* {:team-id (:id extra-team) - :profile-id (:id candidate) - :role :editor}) - org-team (th/create-team* 99 {:profile-id (:id user)}) - organization-id (uuid/random) - org-summary (make-org-summary - :organization-id organization-id - :organization-name "Acme Org" - :owner-id (:id org-owner) - :your-penpot-teams [(:id org-team)] - :org-teams [(:id extra-team)]) - out (with-redefs [nitrate/call (nitrate-call-mock org-summary) - mbus/pub! (fn [& _] nil)] - (management-command-with-nitrate! - {::th/type :remove-from-organization - ::rpc/profile-id (:id org-owner) - :profile-id (:id user) - :organization-id organization-id - :organization-name "Acme Org" - :default-team-id (:id org-team)}))] - (t/is (th/success? out)) - ;; user no longer in extra-team - (let [rel (th/db-get :team-profile-rel {:team-id (:id extra-team) :profile-id (:id user)})] - (t/is (nil? rel))) - ;; candidate promoted to owner - (let [rel (th/db-get :team-profile-rel {:team-id (:id extra-team) :profile-id (:id candidate)})] - (t/is (true? (:is-owner rel)))))) + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [& args] + (apply (nitrate-call-mock @org-summary-ref) args))} + ;; --- Message bus mock: swallow notifications --- + mbus-mock {:target 'app.msgbus/pub! :return nil}] + + ;; --- Setup: create profiles, teams, org-summary --- + (let [org-owner (th/create-profile* 1 {:is-active true}) + user (th/create-profile* 2 {:is-active true}) + candidate (th/create-profile* 3 {:is-active true}) + extra-team (th/create-team* 4 {:profile-id (:id user)}) + _ (th/create-team-role* {:team-id (:id extra-team) + :profile-id (:id candidate) + :role :editor}) + org-team (th/create-team* 99 {:profile-id (:id user)}) + organization-id (uuid/random) + org-summary (make-org-summary + :organization-id organization-id + :organization-name "Acme Org" + :owner-id (:id org-owner) + :your-penpot-teams [(:id org-team)] + :org-teams [(:id extra-team)]) + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) + + ;; --- Exercise: remove the user from the org --- + out (th/management-command! + {::th/type :remove-from-organization + ::rpc/profile-id (:id org-owner) + :profile-id (:id user) + :organization-id organization-id + :organization-name "Acme Org" + :default-team-id (:id org-team)})] + + ;; --- Verify: RPC returns success --- + (t/is (th/success? out)) + ;; --- Verify: user no longer a member of extra-team --- + (let [rel (th/db-get :team-profile-rel {:team-id (:id extra-team) :profile-id (:id user)})] + (t/is (nil? rel))) + ;; --- Verify: candidate promoted to owner --- + (let [rel (th/db-get :team-profile-rel {:team-id (:id extra-team) :profile-id (:id candidate)})] + (t/is (true? (:is-owner rel)))))))) (t/deftest remove-from-organization-exits-non-owned-team ;; When the user is a non-owner member of an org team, they simply leave. - (let [org-owner (th/create-profile* 1 {:is-active true}) - user (th/create-profile* 2 {:is-active true}) - extra-team (th/create-team* 5 {:profile-id (:id org-owner)}) - _ (th/create-team-role* {:team-id (:id extra-team) - :profile-id (:id user) - :role :editor}) - org-team (th/create-team* 99 {:profile-id (:id user)}) - organization-id (uuid/random) - org-summary (make-org-summary - :organization-id organization-id - :organization-name "Acme Org" - :owner-id (:id org-owner) - :your-penpot-teams [(:id org-team)] - :org-teams [(:id extra-team)]) - out (with-redefs [nitrate/call (nitrate-call-mock org-summary) - mbus/pub! (fn [& _] nil)] - (management-command-with-nitrate! - {::th/type :remove-from-organization - ::rpc/profile-id (:id org-owner) - :profile-id (:id user) - :organization-id organization-id - :organization-name "Acme Org" - :default-team-id (:id org-team)}))] - (t/is (th/success? out)) - ;; user no longer a member of extra-team - (let [rel (th/db-get :team-profile-rel {:team-id (:id extra-team) :profile-id (:id user)})] - (t/is (nil? rel))) - ;; team still exists for the owner - (let [team (th/db-get :team {:id (:id extra-team)})] - (t/is (some? team))))) + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [& args] + (apply (nitrate-call-mock @org-summary-ref) args))} + ;; --- Message bus mock: swallow notifications --- + mbus-mock {:target 'app.msgbus/pub! :return nil}] + + ;; --- Setup: create profiles, teams, org-summary --- + (let [org-owner (th/create-profile* 1 {:is-active true}) + user (th/create-profile* 2 {:is-active true}) + extra-team (th/create-team* 5 {:profile-id (:id org-owner)}) + _ (th/create-team-role* {:team-id (:id extra-team) + :profile-id (:id user) + :role :editor}) + org-team (th/create-team* 99 {:profile-id (:id user)}) + organization-id (uuid/random) + org-summary (make-org-summary + :organization-id organization-id + :organization-name "Acme Org" + :owner-id (:id org-owner) + :your-penpot-teams [(:id org-team)] + :org-teams [(:id extra-team)]) + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) + + ;; --- Exercise: remove the user from the org --- + out (th/management-command! + {::th/type :remove-from-organization + ::rpc/profile-id (:id org-owner) + :profile-id (:id user) + :organization-id organization-id + :organization-name "Acme Org" + :default-team-id (:id org-team)})] + + ;; --- Verify: RPC returns success --- + (t/is (th/success? out)) + ;; --- Verify: user no longer a member of extra-team --- + (let [rel (th/db-get :team-profile-rel {:team-id (:id extra-team) :profile-id (:id user)})] + (t/is (nil? rel))) + ;; --- Verify: team still exists for the owner --- + (let [team (th/db-get :team {:id (:id extra-team)})] + (t/is (some? team))))))) (t/deftest remove-from-organization-error-nobody-to-reassign ;; When the user owns a multi-member team but every other member is ;; also an owner, the auto-selection query finds nobody and raises. - (let [other-owner (th/create-profile* 1 {:is-active true}) - user (th/create-profile* 2 {:is-active true}) - extra-team (th/create-team* 6 {:profile-id (:id user)}) - ;; add other-owner to the team and make them co-owner directly in DB - _ (th/create-team-role* {:team-id (:id extra-team) - :profile-id (:id other-owner) - :role :editor}) - _ (th/db-update! :team-profile-rel - {:is-owner true :is-admin false} - {:team-id (:id extra-team) :profile-id (:id other-owner)}) - org-team (th/create-team* 99 {:profile-id (:id user)}) - organization-id (uuid/random) - org-summary (make-org-summary - :organization-id organization-id - :organization-name "Acme Org" - :owner-id (:id other-owner) - :your-penpot-teams [(:id org-team)] - :org-teams [(:id extra-team)]) - out (with-redefs [nitrate/call (nitrate-call-mock org-summary) - mbus/pub! (fn [& _] nil)] - (management-command-with-nitrate! - {::th/type :remove-from-organization - ::rpc/profile-id (:id other-owner) - :profile-id (:id user) - :organization-id organization-id - :organization-name "Acme Org" - :default-team-id (:id org-team)}))] - (t/is (not (th/success? out))) - (t/is (= :validation (th/ex-type (:error out)))) - (t/is (= :nobody-to-reassign-team (th/ex-code (:error out)))))) + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [& args] + (apply (nitrate-call-mock @org-summary-ref) args))} + ;; --- Message bus mock: swallow notifications --- + mbus-mock {:target 'app.msgbus/pub! :return nil}] + + ;; --- Setup: create profiles, teams, org-summary --- + (let [other-owner (th/create-profile* 1 {:is-active true}) + user (th/create-profile* 2 {:is-active true}) + extra-team (th/create-team* 6 {:profile-id (:id user)}) + _ (th/create-team-role* {:team-id (:id extra-team) + :profile-id (:id other-owner) + :role :editor}) + _ (th/db-update! :team-profile-rel + {:is-owner true :is-admin false} + {:team-id (:id extra-team) :profile-id (:id other-owner)}) + org-team (th/create-team* 99 {:profile-id (:id user)}) + organization-id (uuid/random) + org-summary (make-org-summary + :organization-id organization-id + :organization-name "Acme Org" + :owner-id (:id other-owner) + :your-penpot-teams [(:id org-team)] + :org-teams [(:id extra-team)]) + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) + + ;; --- Exercise: remove the user from the org --- + out (th/management-command! + {::th/type :remove-from-organization + ::rpc/profile-id (:id other-owner) + :profile-id (:id user) + :organization-id organization-id + :organization-name "Acme Org" + :default-team-id (:id org-team)})] + + ;; --- Verify: RPC returns error --- + (t/is (not (th/success? out))) + (t/is (= :validation (th/ex-type (:error out)))) + (t/is (= :nobody-to-reassign-team (th/ex-code (:error out)))))))) ;; Tests: get-remove-from-organization-summary ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (t/deftest get-remove-from-organization-summary-no-extra-teams ;; User only has a default team — nothing to delete/transfer/exit. - (let [org-owner (th/create-profile* 1 {:is-active true}) - user (th/create-profile* 2 {:is-active true}) - org-team (th/create-team* 1 {:profile-id (:id user)}) - organization-id (uuid/random) - org-summary (make-org-summary - :organization-id organization-id - :organization-name "Acme Org" - :owner-id (:id org-owner) - :your-penpot-teams [(:id org-team)] - :org-teams []) - out (with-redefs [nitrate/call (nitrate-call-mock org-summary)] - (management-command-with-nitrate! - {::th/type :get-remove-from-organization-summary - ::rpc/profile-id (:id org-owner) - :profile-id (:id user) - :organization-id organization-id - :default-team-id (:id org-team)}))] - (t/is (th/success? out)) - (t/is (= {:teams-to-delete 0 - :teams-to-transfer 0 - :teams-to-exit 0 - :teams-to-detach 0} - (:result out))))) + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [& args] + (apply (nitrate-call-mock @org-summary-ref) args))}] + + ;; --- Setup: create profiles, team, org-summary --- + (let [org-owner (th/create-profile* 1 {:is-active true}) + user (th/create-profile* 2 {:is-active true}) + org-team (th/create-team* 1 {:profile-id (:id user)}) + organization-id (uuid/random) + org-summary (make-org-summary + :organization-id organization-id + :organization-name "Acme Org" + :owner-id (:id org-owner) + :your-penpot-teams [(:id org-team)] + :org-teams []) + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) + + ;; --- Exercise: get the summary --- + out (th/management-command! + {::th/type :get-remove-from-organization-summary + ::rpc/profile-id (:id org-owner) + :profile-id (:id user) + :organization-id organization-id + :default-team-id (:id org-team)})] + + ;; --- Verify: RPC returns success with all-zero summary --- + (t/is (th/success? out)) + (t/is (= {:teams-to-delete 0 + :teams-to-transfer 0 + :teams-to-exit 0 + :teams-to-detach 0} + (:result out))))))) (t/deftest get-remove-from-organization-summary-with-teams-to-delete ;; User owns a sole-member extra org team → 1 to delete. - (let [org-owner (th/create-profile* 1 {:is-active true}) - user (th/create-profile* 2 {:is-active true}) - extra-team (th/create-team* 3 {:profile-id (:id user)}) - org-team (th/create-team* 99 {:profile-id (:id user)}) - organization-id (uuid/random) - org-summary (make-org-summary - :organization-id organization-id - :organization-name "Acme Org" - :owner-id (:id org-owner) - :your-penpot-teams [(:id org-team)] - :org-teams [(:id extra-team)]) - out (with-redefs [nitrate/call (nitrate-call-mock org-summary)] - (management-command-with-nitrate! - {::th/type :get-remove-from-organization-summary - ::rpc/profile-id (:id org-owner) - :profile-id (:id user) - :organization-id organization-id - :default-team-id (:id org-team)}))] - (t/is (th/success? out)) - (t/is (= {:teams-to-delete 1 - :teams-to-transfer 0 - :teams-to-exit 0 - :teams-to-detach 0} - (:result out))))) + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [& args] + (apply (nitrate-call-mock @org-summary-ref) args))}] + + ;; --- Setup: create profiles, teams, org-summary --- + (let [org-owner (th/create-profile* 1 {:is-active true}) + user (th/create-profile* 2 {:is-active true}) + extra-team (th/create-team* 3 {:profile-id (:id user)}) + org-team (th/create-team* 99 {:profile-id (:id user)}) + organization-id (uuid/random) + org-summary (make-org-summary + :organization-id organization-id + :organization-name "Acme Org" + :owner-id (:id org-owner) + :your-penpot-teams [(:id org-team)] + :org-teams [(:id extra-team)]) + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) + + ;; --- Exercise: get the summary --- + out (th/management-command! + {::th/type :get-remove-from-organization-summary + ::rpc/profile-id (:id org-owner) + :profile-id (:id user) + :organization-id organization-id + :default-team-id (:id org-team)})] + + ;; --- Verify: RPC returns success with 1 team to delete --- + (t/is (th/success? out)) + (t/is (= {:teams-to-delete 1 + :teams-to-transfer 0 + :teams-to-exit 0 + :teams-to-detach 0} + (:result out))))))) (t/deftest get-remove-from-organization-summary-with-teams-to-transfer ;; User owns a multi-member extra org team → 1 to transfer. - (let [org-owner (th/create-profile* 1 {:is-active true}) - user (th/create-profile* 2 {:is-active true}) - candidate (th/create-profile* 3 {:is-active true}) - extra-team (th/create-team* 4 {:profile-id (:id user)}) - _ (th/create-team-role* {:team-id (:id extra-team) - :profile-id (:id candidate) - :role :editor}) - org-team (th/create-team* 99 {:profile-id (:id user)}) - organization-id (uuid/random) - org-summary (make-org-summary - :organization-id organization-id - :organization-name "Acme Org" - :owner-id (:id org-owner) - :your-penpot-teams [(:id org-team)] - :org-teams [(:id extra-team)]) - out (with-redefs [nitrate/call (nitrate-call-mock org-summary)] - (management-command-with-nitrate! - {::th/type :get-remove-from-organization-summary - ::rpc/profile-id (:id org-owner) - :profile-id (:id user) - :organization-id organization-id - :default-team-id (:id org-team)}))] - (t/is (th/success? out)) - (t/is (= {:teams-to-delete 0 - :teams-to-transfer 1 - :teams-to-exit 0 - :teams-to-detach 0} - (:result out))))) + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [& args] + (apply (nitrate-call-mock @org-summary-ref) args))}] + + ;; --- Setup: create profiles, teams, org-summary --- + (let [org-owner (th/create-profile* 1 {:is-active true}) + user (th/create-profile* 2 {:is-active true}) + candidate (th/create-profile* 3 {:is-active true}) + extra-team (th/create-team* 4 {:profile-id (:id user)}) + _ (th/create-team-role* {:team-id (:id extra-team) + :profile-id (:id candidate) + :role :editor}) + org-team (th/create-team* 99 {:profile-id (:id user)}) + organization-id (uuid/random) + org-summary (make-org-summary + :organization-id organization-id + :organization-name "Acme Org" + :owner-id (:id org-owner) + :your-penpot-teams [(:id org-team)] + :org-teams [(:id extra-team)]) + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) + + ;; --- Exercise: get the summary --- + out (th/management-command! + {::th/type :get-remove-from-organization-summary + ::rpc/profile-id (:id org-owner) + :profile-id (:id user) + :organization-id organization-id + :default-team-id (:id org-team)})] + + ;; --- Verify: RPC returns success with 1 team to transfer --- + (t/is (th/success? out)) + (t/is (= {:teams-to-delete 0 + :teams-to-transfer 1 + :teams-to-exit 0 + :teams-to-detach 0} + (:result out))))))) (t/deftest get-remove-from-organization-summary-with-teams-to-exit ;; User is a non-owner member of an org team → 1 to exit. - (let [org-owner (th/create-profile* 1 {:is-active true}) - user (th/create-profile* 2 {:is-active true}) - extra-team (th/create-team* 5 {:profile-id (:id org-owner)}) - _ (th/create-team-role* {:team-id (:id extra-team) - :profile-id (:id user) - :role :editor}) - org-team (th/create-team* 99 {:profile-id (:id user)}) - organization-id (uuid/random) - org-summary (make-org-summary - :organization-id organization-id - :organization-name "Acme Org" - :owner-id (:id org-owner) - :your-penpot-teams [(:id org-team)] - :org-teams [(:id extra-team)]) - out (with-redefs [nitrate/call (nitrate-call-mock org-summary)] - (management-command-with-nitrate! - {::th/type :get-remove-from-organization-summary - ::rpc/profile-id (:id org-owner) - :profile-id (:id user) - :organization-id organization-id - :default-team-id (:id org-team)}))] - (t/is (th/success? out)) - (t/is (= {:teams-to-delete 0 - :teams-to-transfer 0 - :teams-to-exit 1 - :teams-to-detach 0} - (:result out))))) + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [& args] + (apply (nitrate-call-mock @org-summary-ref) args))}] + + ;; --- Setup: create profiles, teams, org-summary --- + (let [org-owner (th/create-profile* 1 {:is-active true}) + user (th/create-profile* 2 {:is-active true}) + extra-team (th/create-team* 5 {:profile-id (:id org-owner)}) + _ (th/create-team-role* {:team-id (:id extra-team) + :profile-id (:id user) + :role :editor}) + org-team (th/create-team* 99 {:profile-id (:id user)}) + organization-id (uuid/random) + org-summary (make-org-summary + :organization-id organization-id + :organization-name "Acme Org" + :owner-id (:id org-owner) + :your-penpot-teams [(:id org-team)] + :org-teams [(:id extra-team)]) + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) + + ;; --- Exercise: get the summary --- + out (th/management-command! + {::th/type :get-remove-from-organization-summary + ::rpc/profile-id (:id org-owner) + :profile-id (:id user) + :organization-id organization-id + :default-team-id (:id org-team)})] + + ;; --- Verify: RPC returns success with 1 team to exit --- + (t/is (th/success? out)) + (t/is (= {:teams-to-delete 0 + :teams-to-transfer 0 + :teams-to-exit 1 + :teams-to-detach 0} + (:result out))))))) (t/deftest get-remove-from-organization-summary-does-not-mutate ;; Calling the summary endpoint must not modify any teams. - (let [org-owner (th/create-profile* 1 {:is-active true}) - user (th/create-profile* 2 {:is-active true}) - extra-team (th/create-team* 6 {:profile-id (:id user)}) - org-team (th/create-team* 99 {:profile-id (:id user)}) - organization-id (uuid/random) - org-summary (make-org-summary - :organization-id organization-id - :organization-name "Acme Org" - :owner-id (:id org-owner) - :your-penpot-teams [(:id org-team)] - :org-teams [(:id extra-team)]) - _ (with-redefs [nitrate/call (nitrate-call-mock org-summary)] - (management-command-with-nitrate! - {::th/type :get-remove-from-organization-summary - ::rpc/profile-id (:id org-owner) - :profile-id (:id user) - :organization-id organization-id - :default-team-id (:id org-team)}))] - ;; Both teams must still exist and be undeleted - (let [t1 (th/db-get :team {:id (:id org-team)})] - (t/is (some? t1)) - (t/is (nil? (:deleted-at t1)))) - (let [t2 (th/db-get :team {:id (:id extra-team)})] - (t/is (some? t2)) - (t/is (nil? (:deleted-at t2)))) - ;; User must still be a member of both teams - (let [rel1 (th/db-get :team-profile-rel {:team-id (:id org-team) :profile-id (:id user)})] - (t/is (some? rel1))) - (let [rel2 (th/db-get :team-profile-rel {:team-id (:id extra-team) :profile-id (:id user)})] - (t/is (some? rel2))))) + ;; --- Deferred org-summary: depends on team IDs from setup --- + (let [org-summary-ref (atom nil)] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve org-summary once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [& args] + (apply (nitrate-call-mock @org-summary-ref) args))}] + + ;; --- Setup: create profiles, teams, org-summary --- + (let [org-owner (th/create-profile* 1 {:is-active true}) + user (th/create-profile* 2 {:is-active true}) + extra-team (th/create-team* 6 {:profile-id (:id user)}) + org-team (th/create-team* 99 {:profile-id (:id user)}) + organization-id (uuid/random) + org-summary (make-org-summary + :organization-id organization-id + :organization-name "Acme Org" + :owner-id (:id org-owner) + :your-penpot-teams [(:id org-team)] + :org-teams [(:id extra-team)]) + ;; --- Publish org-summary so the mock can serve it --- + _ (reset! org-summary-ref org-summary) + + ;; --- Exercise: call the summary endpoint --- + _ (th/management-command! + {::th/type :get-remove-from-organization-summary + ::rpc/profile-id (:id org-owner) + :profile-id (:id user) + :organization-id organization-id + :default-team-id (:id org-team)})] + + ;; --- Verify: both teams still exist and are undeleted --- + (let [t1 (th/db-get :team {:id (:id org-team)})] + (t/is (some? t1)) + (t/is (nil? (:deleted-at t1)))) + (let [t2 (th/db-get :team {:id (:id extra-team)})] + (t/is (some? t2)) + (t/is (nil? (:deleted-at t2)))) + ;; --- Verify: user is still a member of both teams --- + (let [rel1 (th/db-get :team-profile-rel {:team-id (:id org-team) :profile-id (:id user)})] + (t/is (some? rel1))) + (let [rel2 (th/db-get :team-profile-rel {:team-id (:id extra-team) :profile-id (:id user)})] + (t/is (some? rel2))))))) (t/deftest notify-organization-sso-change-sends-setup-sso-email-once-per-recipient - (let [owner (th/create-profile* 1 {:is-active true :fullname "Owner"}) - member (th/create-profile* 2 {:is-active true - :fullname "Member" - :email "member@example.com"}) - invited (th/create-profile* 3 {:is-active true - :fullname "Invited User" - :email "invited@example.com"}) - org-id (uuid/random) - org-name "Acme Inc" - team (th/create-team* 1 {:profile-id (:id owner)}) - org-summary {:id org-id - :name org-name - :teams [{:id (:id team)}]} - sent (atom []) - params {::th/type :notify-organization-sso-change - :organization-id org-id - :updated-props false - :became-active true}] + ;; --- Deferred mock data: depends on profile/team IDs from setup --- + (let [mock-data-ref (atom nil) + sent (atom [])] + (with-mocks + [;; --- Nitrate mock: nil during setup, serve data once available --- + nitrate-mock {:target 'app.nitrate/call + :return (fn [_cfg method _params] + (if-let [data @mock-data-ref] + (let [{:keys [owner-id member-id org-summary]} data] + (case method + :get-org-members [owner-id member-id] + :get-org-summary org-summary + nil)) + nil))} + ;; --- Email mock: capture sent emails --- + email-mock {:target 'app.email/send! + :return (fn [params] (swap! sent conj params) nil)}] - ;; Member also has a pending invitation: should still receive only one email. - (th/db-insert! :team-invitation - {:id (uuid/random) - :org-id org-id - :team-id nil - :email-to (:email member) - :created-by (:id owner) - :role "editor" - :valid-until (ct/in-future "24h")}) + ;; --- Setup: create profiles, team, org-summary --- + (let [owner (th/create-profile* 1 {:is-active true :fullname "Owner"}) + member (th/create-profile* 2 {:is-active true + :fullname "Member" + :email "member@example.com"}) + invited (th/create-profile* 3 {:is-active true + :fullname "Invited User" + :email "invited@example.com"}) + org-id (uuid/random) + org-name "Acme Inc" + team (th/create-team* 1 {:profile-id (:id owner)}) + org-summary {:id org-id + :name org-name + :teams [{:id (:id team)}]} + params {::th/type :notify-organization-sso-change + :organization-id org-id + :updated-props false + :became-active true}] - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team) - :org-id nil - :email-to (:email invited) - :created-by (:id owner) - :role "editor" - :valid-until (ct/in-future "48h")}) + ;; --- Setup: insert invitations --- + ;; Member also has a pending invitation: should still receive only one email. + (th/db-insert! :team-invitation + {:id (uuid/random) + :org-id org-id + :team-id nil + :email-to (:email member) + :created-by (:id owner) + :role "editor" + :valid-until (ct/in-future "24h")}) - ;; Invite without an existing profile. - (th/db-insert! :team-invitation - {:id (uuid/random) - :team-id (:id team) - :org-id nil - :email-to "external@example.com" - :created-by (:id owner) - :role "editor" - :valid-until (ct/in-future "72h")}) + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team) + :org-id nil + :email-to (:email invited) + :created-by (:id owner) + :role "editor" + :valid-until (ct/in-future "48h")}) - (with-redefs [nitrate/call (fn [_cfg method _params] - (case method - :get-org-members [(:id owner) (:id member)] - :get-org-summary org-summary - nil)) - eml/send! (fn [params] (swap! sent conj params))] - (management-command-with-nitrate! params)) + ;; --- Invite without an existing profile --- + (th/db-insert! :team-invitation + {:id (uuid/random) + :team-id (:id team) + :org-id nil + :email-to "external@example.com" + :created-by (:id owner) + :role "editor" + :valid-until (ct/in-future "72h")}) - (let [emails (->> @sent (map :to) set)] - (t/is (= 4 (count @sent))) - (t/is (= #{"member@example.com" - (:email owner) - "invited@example.com" - "external@example.com"} - emails)) - (doseq [email-params @sent] - (t/is (= org-name (:organization-name email-params))) - (t/is (= eml/organization-setup-sso (::eml/factory email-params))))))) + ;; --- Publish mock data so the mock can serve it --- + (reset! mock-data-ref {:owner-id (:id owner) + :member-id (:id member) + :org-summary org-summary}) + + ;; --- Exercise: notify SSO change --- + (th/management-command! params) + + ;; --- Verify: 4 emails sent to correct recipients --- + (let [emails (->> @sent (map :to) set)] + (t/is (= 4 (count @sent))) + (t/is (= #{"member@example.com" + (:email owner) + "invited@example.com" + "external@example.com"} + emails)) + (doseq [email-params @sent] + (t/is (= org-name (:organization-name email-params))) + (t/is (= eml/organization-setup-sso (::eml/factory email-params))))))))) (t/deftest notify-organization-sso-change-skips-email-when-not-active (let [sent (atom []) @@ -1333,13 +1647,13 @@ :updated-props false :became-active false}] (with-redefs [eml/send! (fn [params] (swap! sent conj params))] - (management-command-with-nitrate! params)) + (th/management-command! params)) (t/is (empty? @sent)))) (t/deftest check-organization-sso-returns-valid-true (let [org-id (uuid/random) out (with-redefs [oidc/is-organization-sso-config-valid? (constantly true)] - (management-command-with-nitrate! + (th/management-command! {::th/type :check-organization-sso :organization-id org-id :client-id "test-client" @@ -1349,7 +1663,7 @@ (t/is (true? (-> out :result :valid))))) (t/deftest check-organization-sso-returns-valid-false-on-invalid-config - (let [out (management-command-with-nitrate! + (let [out (th/management-command! {::th/type :check-organization-sso :organization-id (uuid/random) :client-id "test-client" @@ -1363,7 +1677,7 @@ (fn [_cfg sso] (and (= "test-client" (:client-id sso)) (= "https://idp.example.com/" (:issuer sso))))] - (management-command-with-nitrate! + (th/management-command! {::th/type :check-organization-sso :organization-id org-id :client-id "test-client" @@ -1372,3 +1686,88 @@ :issuer "https://idp.example.com/"}))] (t/is (th/success? out)) (t/is (true? (-> out :result :valid))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; PUSH AUDIT EVENTS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(def ^:private http-request + {:headers {"x-forwarded-for" "192.168.1.10" + "x-real-ip" "192.168.1.10"}}) + +(t/deftest push-audit-events-stores-backend-source + (with-mocks [audit-mock {:target 'app.loggers.audit/submit :return nil}] + (binding [cf/flags #{:audit-log}] + (let [prof (th/create-profile* 1 {:is-active true}) + params {::th/type :push-audit-events + :events [{:name "test-action" + :profile-id (:id prof) + :props {:key "val"} + :type "action"}]} + params (with-meta params + {::http/request http-request}) + out (th/management-command! params)] + (t/is (nil? (:error out))) + (t/is (:called? @audit-mock)) + (t/is (= 1 (:call-count @audit-mock))) + (let [[_ event] (:call-args @audit-mock)] + (t/is (= "test-action" (:name event))) + (t/is (= "action" (:type event))) + (t/is (= (:id prof) (:profile-id event))) + (t/is (= "val" (get-in event [:props :key]))) + (t/is (some? (:tracked-at event)))))))) + +(t/deftest push-audit-events-type-defaults-to-action + (with-mocks [audit-mock {:target 'app.loggers.audit/submit :return nil}] + (binding [cf/flags #{:audit-log}] + (let [prof (th/create-profile* 1 {:is-active true}) + params {::th/type :push-audit-events + :events [{:name "no-type-event" + :profile-id (:id prof)}]} + params (with-meta params + {::http/request http-request}) + out (th/management-command! params)] + (t/is (nil? (:error out))) + (let [[_ event] (:call-args @audit-mock)] + (t/is (= "action" (:type event))) + (t/is (= "no-type-event" (:name event)))))))) + +(t/deftest push-audit-events-multiple-events + (with-mocks [audit-mock {:target 'app.loggers.audit/submit :return nil}] + (binding [cf/flags #{:audit-log}] + (let [prof (th/create-profile* 1 {:is-active true}) + params {::th/type :push-audit-events + :events [{:name "event-a" + :profile-id (:id prof) + :type "action"} + {:name "event-b" + :profile-id (:id prof) + :type "action"}]} + params (with-meta params + {::http/request http-request}) + out (th/management-command! params)] + (t/is (nil? (:error out))) + (t/is (= 2 (:call-count @audit-mock))) + (let [events (mapv second (:call-args-list @audit-mock))] + (t/is (= "event-a" (:name (first events)))) + (t/is (= "event-b" (:name (second events))))))))) + +(t/deftest push-audit-events-merges-context + (with-mocks [audit-mock {:target 'app.loggers.audit/submit :return nil}] + (binding [cf/flags #{:audit-log}] + (let [prof (th/create-profile* 1 {:is-active true}) + params {::th/type :push-audit-events + :events [{:name "context-test" + :profile-id (:id prof) + :type "action" + :context {:custom-key "custom-val" + :foo "bar"}}]} + params (with-meta params + {::http/request http-request}) + out (th/management-command! params)] + (t/is (nil? (:error out))) + (let [[_ event] (:call-args @audit-mock)] + (t/is (= "custom-val" (get-in event [:context :custom-key]))) + (t/is (= "bar" (get-in event [:context :foo]))) + (t/is (= (:full cf/version) (get-in event [:context :version]))) + (t/is (= "app" (get-in event [:context :initiator])))))))) From f20e4280fc8b259d9aa50e080f19161a9ea81dfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Valderrama?= Date: Wed, 22 Jul 2026 14:44:26 +0200 Subject: [PATCH 116/229] :bug: Fix theme-aware illustration in nitrate modal (#10773) --- .../images/assets/nitrate-welcome-light.svg | 1 + .../resources/images/assets/nitrate-welcome.svg | 2 +- .../main/ui/ds/foundations/assets/raw_svg.cljs | 1 + frontend/src/app/main/ui/icons.cljs | 1 + .../src/app/main/ui/nitrate/nitrate_form.cljs | 6 ++++-- .../src/app/main/ui/nitrate/nitrate_form.scss | 16 ++++++++++++++++ 6 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 frontend/resources/images/assets/nitrate-welcome-light.svg diff --git a/frontend/resources/images/assets/nitrate-welcome-light.svg b/frontend/resources/images/assets/nitrate-welcome-light.svg new file mode 100644 index 0000000000..2ee4fbd363 --- /dev/null +++ b/frontend/resources/images/assets/nitrate-welcome-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/resources/images/assets/nitrate-welcome.svg b/frontend/resources/images/assets/nitrate-welcome.svg index ef9296dbcc..2956031d64 100644 --- a/frontend/resources/images/assets/nitrate-welcome.svg +++ b/frontend/resources/images/assets/nitrate-welcome.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/app/main/ui/ds/foundations/assets/raw_svg.cljs b/frontend/src/app/main/ui/ds/foundations/assets/raw_svg.cljs index f30c5e5bc4..e856a2a1c5 100644 --- a/frontend/src/app/main/ui/ds/foundations/assets/raw_svg.cljs +++ b/frontend/src/app/main/ui/ds/foundations/assets/raw_svg.cljs @@ -22,6 +22,7 @@ (def ^:svg-id logo-subscription "logo-subscription") (def ^:svg-id logo-subscription-light "logo-subscription-light") (def ^:svg-id nitrate-welcome "nitrate-welcome") +(def ^:svg-id nitrate-welcome-light "nitrate-welcome-light") (def ^:svg-id marketing-arrows "marketing-arrows") (def ^:svg-id marketing-exchange "marketing-exchange") (def ^:svg-id marketing-file "marketing-file") diff --git a/frontend/src/app/main/ui/icons.cljs b/frontend/src/app/main/ui/icons.cljs index 1ef023a079..5a68b70933 100644 --- a/frontend/src/app/main/ui/icons.cljs +++ b/frontend/src/app/main/ui/icons.cljs @@ -21,6 +21,7 @@ (def ^:icon logo-subscription (icon-xref :logo-subscription)) (def ^:icon logo-subscription-light (icon-xref :logo-subscription-light)) (def ^:icon nitrate-welcome (icon-xref :nitrate-welcome)) +(def ^:icon nitrate-welcome-light (icon-xref :nitrate-welcome-light)) (def ^:icon brand-openid (icon-xref :brand-openid)) (def ^:icon brand-github (icon-xref :brand-github)) diff --git a/frontend/src/app/main/ui/nitrate/nitrate_form.cljs b/frontend/src/app/main/ui/nitrate/nitrate_form.cljs index 24361df2c3..65d0cd528c 100644 --- a/frontend/src/app/main/ui/nitrate/nitrate_form.cljs +++ b/frontend/src/app/main/ui/nitrate/nitrate_form.cljs @@ -48,8 +48,10 @@ :size "m"}]] [:div {:class (stl/css :modal-success-content)} [:div {:class (stl/css :modal-start)} - ;; TODO this svg is a placeholder. Use the proper one when created - [:> raw-svg* {:id "nitrate-welcome"}]] + [:> raw-svg* {:id "nitrate-welcome-light" + :class (stl/css :welcome-illustration-light)}] + [:> raw-svg* {:id "nitrate-welcome" + :class (stl/css :welcome-illustration-dark)}]] [:div {:class (stl/css :modal-end)} [:div {:class (stl/css :modal-title)} diff --git a/frontend/src/app/main/ui/nitrate/nitrate_form.scss b/frontend/src/app/main/ui/nitrate/nitrate_form.scss index 74872c0265..5de76305e5 100644 --- a/frontend/src/app/main/ui/nitrate/nitrate_form.scss +++ b/frontend/src/app/main/ui/nitrate/nitrate_form.scss @@ -101,6 +101,22 @@ block-size: auto; } +.welcome-illustration-light { + display: none; + + :global(.light) & { + display: block; + } +} + +.welcome-illustration-dark { + display: block; + + :global(.light) & { + display: none; + } +} + .radio-btns { display: flex; flex-direction: column; From 396d799c715287ca9ebe2f3f75d46de8eb505b04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marina=20L=C3=B3pez?= Date: Tue, 21 Jul 2026 15:51:13 +0200 Subject: [PATCH 117/229] :bug: Redesign my penpot review --- .../resources/images/icons/logo-files.svg | 1 - .../src/app/main/ui/dashboard/sidebar.cljs | 24 +++++++++++++----- .../src/app/main/ui/dashboard/sidebar.scss | 25 ++++++++++++++++--- frontend/src/app/main/ui/icons.cljs | 1 - frontend/translations/en.po | 5 +++- frontend/translations/es.po | 5 +++- frontend/translations/it.po | 2 +- 7 files changed, 48 insertions(+), 15 deletions(-) delete mode 100644 frontend/resources/images/icons/logo-files.svg diff --git a/frontend/resources/images/icons/logo-files.svg b/frontend/resources/images/icons/logo-files.svg deleted file mode 100644 index 55b707b557..0000000000 --- a/frontend/resources/images/icons/logo-files.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/src/app/main/ui/dashboard/sidebar.cljs b/frontend/src/app/main/ui/dashboard/sidebar.cljs index f828134445..5acdc06b84 100644 --- a/frontend/src/app/main/ui/dashboard/sidebar.cljs +++ b/frontend/src/app/main/ui/dashboard/sidebar.cljs @@ -349,7 +349,7 @@ [:> dropdown-menu-item* {:on-click on-org-click :data-value default-team-id - :class (stl/css :org-dropdown-item)} + :class (stl/css :org-dropdown-item :org-dropdown-item-default-logo)} [:span {:class (stl/css :my-teams-icon)} [:> raw-svg* {:id penpot-logo-icon-subtle}]] [:span {:class (stl/css :team-text) @@ -413,13 +413,22 @@ [:> dropdown-menu* props [:> dropdown-menu-item* {:on-click on-team-click :data-value default-team-id - :class (stl/css :team-dropdown-item)} - [:span {:class (stl/css :penpot-icon)} (if (contains? cf/flags :nitrate) deprecated-icon/logo-files deprecated-icon/logo-icon)] + :class (stl/css-case :team-dropdown-item true + :team-dropdown-item-no-logo (contains? cf/flags :nitrate))} + (when-not (contains? cf/flags :nitrate) + [:span {:class (stl/css :penpot-icon)} deprecated-icon/logo-icon]) [:span {:class (stl/css :team-text)} (if (contains? cf/flags :nitrate) (tr "dashboard.my-files") (tr "dashboard.your-penpot"))] (when (= default-team-id (:id team)) tick-icon)] + (when (and (contains? cf/flags :nitrate) + (seq (remove :is-default (vals teams)))) + [:* + [:hr {:role "separator" :class (stl/css :team-separator)}] + [:li {:role "presentation" :class (stl/css :org-section-label)} + (tr "dashboard.section.teams")]]) + (for [team-item (remove :is-default (vals teams))] [:> dropdown-menu-item* {:on-click on-team-click :data-value (:id team-item) @@ -780,7 +789,8 @@ :on-key-down on-show-orgs-keydown :aria-expanded show-orgs-menu? :aria-haspopup "menu"} - [:div {:class (stl/css :team-name)} + [:div {:class (stl/css-case :team-name true + :team-name-default-logo default-org?)} (if default-org? [:* [:span {:class (stl/css :my-teams-icon-xxxl)} @@ -919,8 +929,10 @@ :aria-haspopup "menu"} (cond is-default? - [:div {:class (stl/css :team-name)} - [:span {:class (stl/css :penpot-icon)} (if nitrate? deprecated-icon/logo-files deprecated-icon/logo-icon)] + [:div {:class (stl/css-case :team-name true + :team-name-no-logo nitrate?)} + (when-not nitrate? + [:span {:class (stl/css :penpot-icon)} deprecated-icon/logo-icon]) [:span {:class (stl/css :team-text)} (if nitrate? (tr "dashboard.my-files") (tr "dashboard.default-team-name"))]] (and (contains? cf/flags :subscriptions) diff --git a/frontend/src/app/main/ui/dashboard/sidebar.scss b/frontend/src/app/main/ui/dashboard/sidebar.scss index 7f0a8b983a..0d9223bc77 100644 --- a/frontend/src/app/main/ui/dashboard/sidebar.scss +++ b/frontend/src/app/main/ui/dashboard/sidebar.scss @@ -94,17 +94,25 @@ grid-template-columns: 1fr auto; gap: var(--sp-s); height: 100%; - padding: 0 var(--sp-m); + padding: 0 var(--sp-m) 0 var(--sp-l); } .team-name { display: grid; align-items: center; grid-template-columns: auto 1fr; - gap: var(--sp-m); + gap: var(--sp-s); height: $sz-40; } +.team-name-no-logo { + grid-template-columns: 1fr; +} + +.team-name-default-logo { + gap: var(--sp-xs); +} + .team-text { @include deprecated.text-ellipsis; @include t.use-typography("title-small"); @@ -185,6 +193,11 @@ grid-template-columns: var(--sp-xxl) 1fr auto; gap: var(--sp-s); height: $sz-40; + padding-inline-start: var(--sp-m); +} + +.team-dropdown-item-no-logo { + grid-template-columns: 1fr auto; } .org-dropdown-item { @@ -194,6 +207,11 @@ grid-template-columns: auto 1fr auto; gap: var(--sp-s); height: $sz-40; + padding-inline-start: var(--sp-m); +} + +.org-dropdown-item-default-logo { + gap: var(--sp-xs); } .action { @@ -211,7 +229,6 @@ width: var(--sp-xxl); height: var(--sp-xxl); - margin-right: var(--sp-m); border-radius: 50%; background-color: var(--sidebar-icon-backgroun-color); } @@ -234,7 +251,7 @@ color: var(--color-foreground-secondary); list-style: none; - padding: var(--sp-m) $sz-6 $sz-6; + padding: var(--sp-m) $sz-6 $sz-6 var(--sp-m); text-transform: uppercase; } diff --git a/frontend/src/app/main/ui/icons.cljs b/frontend/src/app/main/ui/icons.cljs index 5a68b70933..ee405fa7f8 100644 --- a/frontend/src/app/main/ui/icons.cljs +++ b/frontend/src/app/main/ui/icons.cljs @@ -17,7 +17,6 @@ (def ^:icon logo (icon-xref :penpot-logo)) (def ^:icon logo-icon (icon-xref :penpot-logo-icon)) (def ^:icon logo-error-screen (icon-xref :logo-error-screen)) -(def ^:icon logo-files (icon-xref :logo-files)) (def ^:icon logo-subscription (icon-xref :logo-subscription)) (def ^:icon logo-subscription-light (icon-xref :logo-subscription-light)) (def ^:icon nitrate-welcome (icon-xref :nitrate-welcome)) diff --git a/frontend/translations/en.po b/frontend/translations/en.po index 051d183632..fd5440a167 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -869,7 +869,7 @@ msgstr "Move to other team" #: src/app/main/ui/dashboard/sidebar.cljs:348, src/app/main/ui/dashboard/sidebar.cljs:349, src/app/main/ui/dashboard/sidebar.cljs:761 msgid "dashboard.my-teams" -msgstr "My teams" +msgstr "My Teams" #: src/app/main/ui/dashboard/files.cljs:106, src/app/main/ui/dashboard/projects.cljs:253, src/app/main/ui/dashboard/projects.cljs:254 msgid "dashboard.new-file" @@ -1086,6 +1086,9 @@ msgstr "Searching for “%s“…" msgid "dashboard.section.organizations" msgstr "Organizations" +msgid "dashboard.section.teams" +msgstr "Teams" + #, unused msgid "dashboard.select-org-modal.accept" msgstr "ADD TO ORGANIZATION" diff --git a/frontend/translations/es.po b/frontend/translations/es.po index 581aeb3551..c075237bdd 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -877,7 +877,7 @@ msgstr "Mover a otro equipo" #: src/app/main/ui/dashboard/sidebar.cljs:348, src/app/main/ui/dashboard/sidebar.cljs:349, src/app/main/ui/dashboard/sidebar.cljs:761 msgid "dashboard.my-teams" -msgstr "Mis equipos" +msgstr "Mis Equipos" #: src/app/main/ui/dashboard/files.cljs:106, src/app/main/ui/dashboard/projects.cljs:253, src/app/main/ui/dashboard/projects.cljs:254 msgid "dashboard.new-file" @@ -1096,6 +1096,9 @@ msgstr "Buscando “%s“…" msgid "dashboard.section.organizations" msgstr "Organizaciones" +msgid "dashboard.section.teams" +msgstr "Equipos" + #, unused msgid "dashboard.select-org-modal.accept" msgstr "AÑADIR A UNA ORGANIZACIÓN" diff --git a/frontend/translations/it.po b/frontend/translations/it.po index 227eb4e24f..f4f0a13bb2 100644 --- a/frontend/translations/it.po +++ b/frontend/translations/it.po @@ -875,7 +875,7 @@ msgstr "Sposta in un altro team" #: src/app/main/ui/dashboard/sidebar.cljs:348, src/app/main/ui/dashboard/sidebar.cljs:349, src/app/main/ui/dashboard/sidebar.cljs:761 msgid "dashboard.my-teams" -msgstr "I miei team" +msgstr "I miei Team" #: src/app/main/ui/dashboard/files.cljs:106, src/app/main/ui/dashboard/projects.cljs:253, src/app/main/ui/dashboard/projects.cljs:254 msgid "dashboard.new-file" From ef3511e519155b24fcf24327a28a20d259f072b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elena=20Torr=C3=B3?= Date: Wed, 22 Jul 2026 16:13:38 +0200 Subject: [PATCH 118/229] :sparkles: Add basic individual strokes implementation (#10648) --- common/src/app/common/flags.cljc | 3 +- common/src/app/common/types/shape.cljc | 6 + .../resources/images/icons/stroke-bottom.svg | 4 + .../images/icons/stroke-extended.svg | 4 + .../resources/images/icons/stroke-left.svg | 4 + .../resources/images/icons/stroke-right.svg | 4 + .../resources/images/icons/stroke-top.svg | 4 + .../src/app/main/data/workspace/colors.cljs | 5 + .../main/ui/ds/foundations/assets/icon.cljs | 5 + .../main/ui/inspect/attributes/geometry.cljs | 4 + .../main/ui/inspect/attributes/stroke.cljs | 24 +++- .../ui/inspect/styles/panels/geometry.cljs | 5 + .../main/ui/inspect/styles/panels/stroke.cljs | 28 ++++- .../sidebar/options/menus/stroke.cljs | 53 +++++++++ .../sidebar/options/rows/stroke_row.cljs | 112 +++++++++++++++++- .../sidebar/options/rows/stroke_row.scss | 29 +++++ frontend/src/app/render_wasm/api/props.cljs | 12 ++ frontend/src/app/util/code_gen/style_css.cljs | 4 + .../app/util/code_gen/style_css_formats.cljs | 4 + .../app/util/code_gen/style_css_values.cljs | 25 ++++ frontend/translations/en.po | 24 ++++ frontend/translations/es.po | 24 ++++ render-wasm/src/render/strokes.rs | 94 +++++++++++++++ render-wasm/src/shapes.rs | 11 +- render-wasm/src/shapes/strokes.rs | 81 ++++++++++++- render-wasm/src/wasm/strokes.rs | 9 ++ 26 files changed, 567 insertions(+), 15 deletions(-) create mode 100644 frontend/resources/images/icons/stroke-bottom.svg create mode 100644 frontend/resources/images/icons/stroke-extended.svg create mode 100644 frontend/resources/images/icons/stroke-left.svg create mode 100644 frontend/resources/images/icons/stroke-right.svg create mode 100644 frontend/resources/images/icons/stroke-top.svg diff --git a/common/src/app/common/flags.cljc b/common/src/app/common/flags.cljc index 62ce48aa9a..61edd184c5 100644 --- a/common/src/app/common/flags.cljc +++ b/common/src/app/common/flags.cljc @@ -170,7 +170,8 @@ :mcp :background-blur :available-viewer-wasm - :stroke-path}) + :stroke-path + :stroke-per-side}) (def all-flags (set/union email login varia)) diff --git a/common/src/app/common/types/shape.cljc b/common/src/app/common/types/shape.cljc index c7334d1717..cec7844fab 100644 --- a/common/src/app/common/types/shape.cljc +++ b/common/src/app/common/types/shape.cljc @@ -139,6 +139,12 @@ [:stroke-style {:optional true} [::sm/one-of #{:solid :dotted :dashed :mixed}]] [:stroke-width {:optional true} ::sm/safe-number] + ;; wasm-render only, backwards compatible + [:stroke-per-side {:optional true} :boolean] + [:stroke-width-top {:optional true} ::sm/safe-number] + [:stroke-width-right {:optional true} ::sm/safe-number] + [:stroke-width-bottom {:optional true} ::sm/safe-number] + [:stroke-width-left {:optional true} ::sm/safe-number] [:stroke-dash {:optional true} ::sm/safe-number] [:stroke-gap {:optional true} ::sm/safe-number] [:stroke-alignment {:optional true} diff --git a/frontend/resources/images/icons/stroke-bottom.svg b/frontend/resources/images/icons/stroke-bottom.svg new file mode 100644 index 0000000000..3a6e044748 --- /dev/null +++ b/frontend/resources/images/icons/stroke-bottom.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/resources/images/icons/stroke-extended.svg b/frontend/resources/images/icons/stroke-extended.svg new file mode 100644 index 0000000000..1326c5718c --- /dev/null +++ b/frontend/resources/images/icons/stroke-extended.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/resources/images/icons/stroke-left.svg b/frontend/resources/images/icons/stroke-left.svg new file mode 100644 index 0000000000..24c05ddf03 --- /dev/null +++ b/frontend/resources/images/icons/stroke-left.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/resources/images/icons/stroke-right.svg b/frontend/resources/images/icons/stroke-right.svg new file mode 100644 index 0000000000..248417c737 --- /dev/null +++ b/frontend/resources/images/icons/stroke-right.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/resources/images/icons/stroke-top.svg b/frontend/resources/images/icons/stroke-top.svg new file mode 100644 index 0000000000..170ac1e2ab --- /dev/null +++ b/frontend/resources/images/icons/stroke-top.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/app/main/data/workspace/colors.cljs b/frontend/src/app/main/data/workspace/colors.cljs index c145a203b7..f8c916f881 100644 --- a/frontend/src/app/main/data/workspace/colors.cljs +++ b/frontend/src/app/main/data/workspace/colors.cljs @@ -332,6 +332,11 @@ [:stroke-style :stroke-alignment :stroke-width + :stroke-per-side + :stroke-width-top + :stroke-width-right + :stroke-width-bottom + :stroke-width-left :stroke-cap-start :stroke-cap-end]) diff --git a/frontend/src/app/main/ui/ds/foundations/assets/icon.cljs b/frontend/src/app/main/ui/ds/foundations/assets/icon.cljs index 44e44e075f..d0634e21b1 100644 --- a/frontend/src/app/main/ui/ds/foundations/assets/icon.cljs +++ b/frontend/src/app/main/ui/ds/foundations/assets/icon.cljs @@ -245,19 +245,24 @@ (def ^:icon-id status-update "status-update") (def ^:icon-id status-wrong "status-wrong") (def ^:icon-id stroke-arrow "stroke-arrow") +(def ^:icon-id stroke-bottom "stroke-bottom") (def ^:icon-id stroke-center "stroke-center") (def ^:icon-id stroke-circle "stroke-circle") (def ^:icon-id stroke-dashed "stroke-dashed") (def ^:icon-id stroke-diamond "stroke-diamond") (def ^:icon-id stroke-dotted "stroke-dotted") +(def ^:icon-id stroke-extended "stroke-extended") (def ^:icon-id stroke-inside "stroke-inside") +(def ^:icon-id stroke-left "stroke-left") (def ^:icon-id stroke-mixed "stroke-mixed") (def ^:icon-id stroke-outside "stroke-outside") (def ^:icon-id stroke-rectangle "stroke-rectangle") +(def ^:icon-id stroke-right "stroke-right") (def ^:icon-id stroke-rounded "stroke-rounded") (def ^:icon-id stroke-size "stroke-size") (def ^:icon-id stroke-squared "stroke-squared") (def ^:icon-id stroke-solid "stroke-solid") +(def ^:icon-id stroke-top "stroke-top") (def ^:icon-id stroke-triangle "stroke-triangle") (def ^:icon-id svg "svg") (def ^:icon-id swatches "swatches") diff --git a/frontend/src/app/main/ui/inspect/attributes/geometry.cljs b/frontend/src/app/main/ui/inspect/attributes/geometry.cljs index dbfa79a52c..8a6c255d50 100644 --- a/frontend/src/app/main/ui/inspect/attributes/geometry.cljs +++ b/frontend/src/app/main/ui/inspect/attributes/geometry.cljs @@ -22,6 +22,10 @@ :left :top :border-radius + :border-block-start-width ; top + :border-inline-end-width ; right + :border-block-end-width ; bottom + :border-inline-start-width ; left :transform]) (mf/defc geometry-block diff --git a/frontend/src/app/main/ui/inspect/attributes/stroke.cljs b/frontend/src/app/main/ui/inspect/attributes/stroke.cljs index bee02622cc..da2d1acb6a 100644 --- a/frontend/src/app/main/ui/inspect/attributes/stroke.cljs +++ b/frontend/src/app/main/ui/inspect/attributes/stroke.cljs @@ -13,11 +13,27 @@ [app.main.ui.components.title-bar :refer [inspect-title-bar*]] [app.main.ui.inspect.attributes.common :as cmm] [app.util.code-gen.style-css :as css] + [app.util.code-gen.style-css-values :as cssv] [app.util.i18n :refer [tr]] [rumext.v2 :as mf])) (def ^:private properties [:border-style :border-width]) +(def ^:private per-side-properties + [:border-style + :border-block-start-width + :border-inline-end-width + :border-block-end-width + :border-inline-start-width]) + +(defn- stroke-properties + "Logical per-side width properties when the stroke uses differing + per-side widths; the regular border-style/width pair otherwise." + [stroke] + (if (some? (cssv/stroke-per-side-widths stroke)) + per-side-properties + properties)) + (defn- stroke->color [shape] {:color (:stroke-color shape) :opacity (:stroke-opacity shape) @@ -41,7 +57,7 @@ (fn [format] (reset! format* format)))] [:div {:class (stl/css :attributes-fill-block)} - (for [property properties] + (for [property (stroke-properties stroke)] (let [property-name (cmm/get-css-rule-humanized property) property-value (css/get-css-value objects stroke property)] [:div {:class (stl/css :stroke-row) :key (str "stroke-" (:id shape) "-" property)} @@ -56,7 +72,7 @@ :property "Border color" :format format :on-change-format on-change - :copy-data (css/get-shape-properties-css objects {:strokes [shape]} properties)}]])) + :copy-data (css/get-shape-properties-css objects {:strokes [shape]} (stroke-properties stroke))}]])) ;; New implementation of stroke-block using the new color format selector ;; This component is used when the flag :inspect-styles is enabled. Update when flag no longer needed. @@ -64,7 +80,7 @@ [{:keys [objects shape stroke color-space]}] (let [color (stroke->color stroke)] [:div {:class (stl/css :attributes-fill-block)} - (for [property properties] + (for [property (stroke-properties stroke)] (let [property-name (cmm/get-css-rule-humanized property) property-value (css/get-css-value objects stroke property)] [:div {:class (stl/css :stroke-row) :key (str "stroke-" (:id shape) "-" property)} @@ -78,7 +94,7 @@ {:color color :property "Border color" :format (d/nilv (keyword color-space) :hex) - :copy-data (css/get-shape-properties-css objects {:strokes [shape]} properties {:format (keyword color-space)})}]])) + :copy-data (css/get-shape-properties-css objects {:strokes [shape]} (stroke-properties stroke) {:format (keyword color-space)})}]])) (mf/defc stroke-panel* [{:keys [shapes color-space]}] diff --git a/frontend/src/app/main/ui/inspect/styles/panels/geometry.cljs b/frontend/src/app/main/ui/inspect/styles/panels/geometry.cljs index 6888f99921..d008bf6f84 100644 --- a/frontend/src/app/main/ui/inspect/styles/panels/geometry.cljs +++ b/frontend/src/app/main/ui/inspect/styles/panels/geometry.cljs @@ -22,6 +22,11 @@ :border-start-end-radius :border-end-start-radius :border-end-end-radius + ;; side strokes + :border-block-start-width + :border-inline-end-width + :border-block-end-width + :border-inline-start-width :transform]) (def ^:private shape-prop->border-radius-prop diff --git a/frontend/src/app/main/ui/inspect/styles/panels/stroke.cljs b/frontend/src/app/main/ui/inspect/styles/panels/stroke.cljs index 200a9d8138..2398eaede9 100644 --- a/frontend/src/app/main/ui/inspect/styles/panels/stroke.cljs +++ b/frontend/src/app/main/ui/inspect/styles/panels/stroke.cljs @@ -15,11 +15,28 @@ [app.main.ui.inspect.styles.rows.color-properties-row :refer [color-properties-row*]] [app.main.ui.inspect.styles.rows.properties-row :refer [properties-row*]] [app.util.code-gen.style-css :as css] + [app.util.code-gen.style-css-values :as cssv] [app.util.color :as uc] [rumext.v2 :as mf])) (def ^:private properties [:border-color :border-style :border-width]) +(def ^:private per-side-properties + [:border-color + :border-style + :border-block-start-width + :border-inline-end-width + :border-block-end-width + :border-inline-start-width]) + +(defn- stroke-properties + "Logical per-side width properties when the stroke uses differing + per-side widths; the regular property set otherwise." + [stroke] + (if (some? (cssv/stroke-per-side-widths stroke)) + per-side-properties + properties)) + (def ^:private shape-prop->stroke-prop {:border-style :stroke-style :border-width :stroke-width @@ -71,7 +88,14 @@ color-value (dm/str "border: " stroke-width "px " (d/name stroke-style) " " formatted-color-value ";") color-gradient (dm/str "border-image: " (uc/gradient->css gradient-data) " 100 / " stroke-width "px;") color-image (dm/str "border-image: url(" (cfg/resolve-file-media color-image) ") 100 / " stroke-width "px;") - :else "")] + :else "") + value (if-let [[top right bottom left] (cssv/stroke-per-side-widths stroke)] + (dm/str value + " border-block-start-width: " top "px;" + " border-inline-end-width: " right "px;" + " border-block-end-width: " bottom "px;" + " border-inline-start-width: " left "px;") + value)] (if (empty? acc) value (str acc " " value)))) @@ -92,7 +116,7 @@ (for [shape shapes] [:div {:key (:id shape) :class (stl/css :stroke-shape)} (for [[idx stroke] (map-indexed vector (:strokes shape))] - (for [property properties] + (for [property (stroke-properties stroke)] (let [value (css/get-css-value objects stroke property) stroke-type (ctc/stroke->color stroke) property-name (cmm/get-css-rule-humanized property) diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs index 29e4151880..d671e7294c 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs @@ -10,10 +10,12 @@ [app.common.data :as d] [app.common.data.macros :as dm] [app.common.types.stroke :as cts] + [app.config :as cf] [app.main.data.workspace :as udw] [app.main.data.workspace.colors :as dc] [app.main.data.workspace.shapes :as dwsh] [app.main.data.workspace.tokens.application :as dwta] + [app.main.features :as features] [app.main.store :as st] [app.main.ui.components.title-bar :refer [title-bar*]] [app.main.ui.ds.buttons.icon-button :refer [icon-button*]] @@ -136,6 +138,53 @@ (st/emit! (udw/trigger-bounding-box-cloaking ids)) (st/emit! (dc/change-stroke-attrs ids {:stroke-width value} index)))) + wasm-render? + (features/use-feature "render-wasm/v1") + + per-side-available? + (and (contains? cf/flags :stroke-per-side) + (or (= type :rect) (= type :frame))) + + per-side-disabled? + (not wasm-render?) + + on-stroke-per-side-toggle + (fn [index] + (let [stroke (get-in values [:strokes index]) + active? (:stroke-per-side stroke) + width (:stroke-width stroke) + width (if (number? width) width 1)] + (st/emit! (udw/trigger-bounding-box-cloaking ids)) + (if active? + (st/emit! (dc/change-stroke-attrs ids {:stroke-per-side false} index)) + ;; Entering per-side mode seeds any missing side from the + ;; uniform width, so previous per-side edits are preserved. + ;; The top value doubles as the global :stroke-width. + (let [top (d/nilv (:stroke-width-top stroke) width)] + (st/emit! (dc/change-stroke-attrs + ids + {:stroke-per-side true + :stroke-width top + :stroke-width-top top + :stroke-width-right (d/nilv (:stroke-width-right stroke) width) + :stroke-width-bottom (d/nilv (:stroke-width-bottom stroke) width) + :stroke-width-left (d/nilv (:stroke-width-left stroke) width)} + index)))))) + + on-stroke-width-side-change + (fn [index attr value] + (when (number? value) + (st/emit! (udw/trigger-bounding-box-cloaking ids)) + ;; Code paths that don't know about per-side data (old render, + ;; global width input, exports) keep reading :stroke-width, and + ;; per spec they must see the TOP side there. So editing the top + ;; side also writes :stroke-width; the other sides only write + ;; their own attr. + (let [attrs (cond-> {attr value} + (= attr :stroke-width-top) + (assoc :stroke-width value))] + (st/emit! (dc/change-stroke-attrs ids attrs index))))) + on-stroke-dash-change (fn [index value] (when-not (str/empty? value) @@ -237,6 +286,10 @@ :on-color-detach on-color-detach :on-remove on-remove :on-stroke-width-change on-stroke-width-change + :per-side-available per-side-available? + :per-side-disabled per-side-disabled? + :on-stroke-per-side-toggle on-stroke-per-side-toggle + :on-stroke-width-side-change on-stroke-width-side-change :on-stroke-dash-change on-stroke-dash-change :on-stroke-gap-change on-stroke-gap-change :on-stroke-style-change on-stroke-style-change diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs index 8e21f18232..1f2ede3f39 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs @@ -35,6 +35,10 @@ on-color-detach on-remove on-stroke-width-change + per-side-available + per-side-disabled + on-stroke-per-side-toggle + on-stroke-width-side-change on-stroke-dash-change on-stroke-gap-change on-stroke-style-change @@ -98,6 +102,42 @@ stroke-width (:stroke-width stroke) + per-side? (and per-side-available + (not per-side-disabled) + (true? (:stroke-per-side stroke))) + + per-side-toggle-label + (if per-side-disabled + (tr "workspace.options.stroke.per-side-disabled") + (tr "workspace.options.stroke.per-side")) + + on-per-side-toggle + (mf/use-fn + (mf/deps index on-stroke-per-side-toggle) + (fn [] + (when on-stroke-per-side-toggle + (on-stroke-per-side-toggle index)))) + + on-width-top-change + (mf/use-fn + (mf/deps index on-stroke-width-side-change) + #(on-stroke-width-side-change index :stroke-width-top %)) + + on-width-right-change + (mf/use-fn + (mf/deps index on-stroke-width-side-change) + #(on-stroke-width-side-change index :stroke-width-right %)) + + on-width-bottom-change + (mf/use-fn + (mf/deps index on-stroke-width-side-change) + #(on-stroke-width-side-change index :stroke-width-bottom %)) + + on-width-left-change + (mf/use-fn + (mf/deps index on-stroke-width-side-change) + #(on-stroke-width-side-change index :stroke-width-left %)) + on-width-change (mf/use-fn (mf/deps index on-stroke-width-change ids) @@ -264,7 +304,8 @@ ;; Stroke Width, Alignment & Style (if token-numeric-inputs - [:div {:class (stl/css :stroke-options-tokens)} + [:div {:class (stl/css-case :stroke-options-tokens true + :stroke-options-tokens-with-toggle per-side-available)} [:> numeric-input-wrapper* {:on-change on-width-change :on-detach on-detach-token-width :icon i/stroke-size @@ -275,6 +316,7 @@ :class (stl/css :numeric-input-wrapper) :property (tr "workspace.options.stroke-width") :applied-token (get applied-tokens :stroke-width) + :disabled per-side? :value stroke-width}] [:> select* {:default-selected (d/name stroke-alignment) :options stroke-alignment-options @@ -292,7 +334,15 @@ :variant "icon-only" :disabled (if (= :multiple hidden?) true hidden?) :dropdown-alignment :right - :on-change on-style-change}])] + :on-change on-style-change}]) + (when per-side-available + [:> icon-button* {:variant "ghost" + :class (stl/css-case :per-side-toggle-selected per-side?) + :aria-label per-side-toggle-label + :disabled per-side-disabled + :on-click on-per-side-toggle + :icon i/stroke-extended + :data-testid "stroke.per-side-toggle"}])] [:div {:class (stl/css :stroke-options)} [:div {:class (stl/css :stroke-width-input) @@ -305,6 +355,7 @@ :on-change on-width-change :on-focus on-focus :select-on-focus select-on-focus + :is-disabled per-side? :on-blur on-blur}]] [:div {:class (stl/css :stroke-alignment-select) :data-testid "stroke.alignment"} @@ -314,12 +365,65 @@ :on-change on-alignment-change}]] (when-not disable-stroke-style - [:div {:class (stl/css :stroke-style-select) + [:div {:class (stl/css-case :stroke-style-select true + :stroke-style-select-compact per-side-available) :data-testid "stroke.style"} [:& select {:default-value stroke-style :options stroke-style-options :disabled hidden? - :on-change on-style-change}]])]) + :on-change on-style-change}]]) + (when per-side-available + [:> icon-button* {:variant "ghost" + :class (stl/css-case :per-side-toggle-selected per-side?) + :aria-label per-side-toggle-label + :disabled per-side-disabled + :on-click on-per-side-toggle + :icon i/stroke-extended + :data-testid "stroke.per-side-toggle"}])]) + + (when per-side? + [:div {:class (stl/css :stroke-sides-options) + :data-testid "stroke.per-side-options"} + [:div {:class (stl/css :stroke-side-input) + :title (tr "workspace.options.stroke-width-top")} + [:> icon* {:icon-id i/stroke-top + :size "s"}] + [:> deprecated-input/numeric-input* {:value (d/nilv (:stroke-width-top stroke) stroke-width) + :min 0 + :on-change on-width-top-change + :on-focus on-focus + :select-on-focus select-on-focus + :on-blur on-blur}]] + [:div {:class (stl/css :stroke-side-input) + :title (tr "workspace.options.stroke-width-right")} + [:> icon* {:icon-id i/stroke-right + :size "s"}] + [:> deprecated-input/numeric-input* {:value (d/nilv (:stroke-width-right stroke) stroke-width) + :min 0 + :on-change on-width-right-change + :on-focus on-focus + :select-on-focus select-on-focus + :on-blur on-blur}]] + [:div {:class (stl/css :stroke-side-input) + :title (tr "workspace.options.stroke-width-bottom")} + [:> icon* {:icon-id i/stroke-bottom + :size "s"}] + [:> deprecated-input/numeric-input* {:value (d/nilv (:stroke-width-bottom stroke) stroke-width) + :min 0 + :on-change on-width-bottom-change + :on-focus on-focus + :select-on-focus select-on-focus + :on-blur on-blur}]] + [:div {:class (stl/css :stroke-side-input) + :title (tr "workspace.options.stroke-width-left")} + [:> icon* {:icon-id i/stroke-left + :size "s"}] + [:> deprecated-input/numeric-input* {:value (d/nilv (:stroke-width-left stroke) stroke-width) + :min 0 + :on-change on-width-left-change + :on-focus on-focus + :select-on-focus select-on-focus + :on-blur on-blur}]]]) ;; Stroke Dash / Gap (only visible for dashed style) (when (= stroke-style :dashed) diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.scss b/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.scss index bc452ce0ad..9e34244454 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.scss +++ b/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.scss @@ -98,3 +98,32 @@ .stroke-style-icon-select { --dropdown-width: var(--four-columns-width); } + +.per-side-toggle-selected { + border-color: var(--button-icon-border-color-selected); + background-color: var(--button-icon-background-color-selected); + color: var(--color-accent-primary); +} + +.stroke-options-tokens-with-toggle { + grid-template-columns: + 1fr var(--grid-exception-input-width-small) + var(--grid-exception-input-width-small) auto; +} + +.stroke-style-select-compact { + grid-column: span 2; +} + +.stroke-sides-options { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: var(--sp-xs) var(--sp-xs); +} + +.stroke-side-input { + @extend %input-element; + @include t.use-typography("body-small"); + + padding-inline-start: var(--sp-xs); +} diff --git a/frontend/src/app/render_wasm/api/props.cljs b/frontend/src/app/render_wasm/api/props.cljs index add4496c66..26bbdadc3a 100644 --- a/frontend/src/app/render_wasm/api/props.cljs +++ b/frontend/src/app/render_wasm/api/props.cljs @@ -98,6 +98,18 @@ :inner (h/call wasm/internal-module "_add_shape_inner_stroke" width style cap-start cap-end dash gap) :outer (h/call wasm/internal-module "_add_shape_outer_stroke" width style cap-start cap-end dash gap) (h/call wasm/internal-module "_add_shape_center_stroke" width style cap-start cap-end dash gap)) + + ;; Per-side widths (rects/frames). Sides falling back to the + ;; uniform width; skipped when all sides end up equal, so the + ;; renderer keeps the uniform path (with dash/dot support). + (when (:stroke-per-side stroke) + (let [top (or (:stroke-width-top stroke) width) + right (or (:stroke-width-right stroke) width) + bottom (or (:stroke-width-bottom stroke) width) + left (or (:stroke-width-left stroke) width)] + (when-not (= top right bottom left) + (h/call wasm/internal-module "_set_shape_stroke_sides" top right bottom left)))) + (cond (some? gradient) (do (types.fills.impl/write-gradient-fill offset dview opacity gradient) diff --git a/frontend/src/app/util/code_gen/style_css.cljs b/frontend/src/app/util/code_gen/style_css.cljs index f2b8e76418..85cf87ee0b 100644 --- a/frontend/src/app/util/code_gen/style_css.cljs +++ b/frontend/src/app/util/code_gen/style_css.cljs @@ -76,6 +76,10 @@ body { :transform :background :border + :border-block-start-width + :border-inline-end-width + :border-block-end-width + :border-inline-start-width :border-start-start-radius :border-start-end-radius :border-end-start-radius diff --git a/frontend/src/app/util/code_gen/style_css_formats.cljs b/frontend/src/app/util/code_gen/style_css_formats.cljs index 85e305fa4d..5f3741a638 100644 --- a/frontend/src/app/util/code_gen/style_css_formats.cljs +++ b/frontend/src/app/util/code_gen/style_css_formats.cljs @@ -34,6 +34,10 @@ :border-end-start-radius :string-or-size-array :border-end-end-radius :string-or-size-array :border-width :border-width + :border-block-start-width :border-width + :border-inline-end-width :border-width + :border-block-end-width :border-width + :border-inline-start-width :border-width :border-style :border-style :border-color :border-color :box-shadow :shadows diff --git a/frontend/src/app/util/code_gen/style_css_values.cljs b/frontend/src/app/util/code_gen/style_css_values.cljs index 9f53bea5ed..7bfda75b53 100644 --- a/frontend/src/app/util/code_gen/style_css_values.cljs +++ b/frontend/src/app/util/code_gen/style_css_values.cljs @@ -213,11 +213,32 @@ (when (and (not (cgc/svg-markup? shape)) (not (cfh/group-shape? shape)) single-fill?) (fill->color (first fills))))) +(defn stroke-per-side-widths + "Returns [top right bottom left] when the stroke has per-side widths + enabled and the sides actually differ; nil otherwise." + [stroke] + (when (:stroke-per-side stroke) + (let [width (:stroke-width stroke) + top (d/nilv (:stroke-width-top stroke) width) + right (d/nilv (:stroke-width-right stroke) width) + bottom (d/nilv (:stroke-width-bottom stroke) width) + left (d/nilv (:stroke-width-left stroke) width)] + (when-not (= top right bottom left) + [top right bottom left])))) + (defn- get-border [shape] (when-not (cgc/svg-markup? shape) (get-stroke-data (first (:strokes shape))))) +(defn- get-border-side-width + [shape-or-stroke index] + (let [stroke (if (contains? shape-or-stroke :strokes) + (first (:strokes shape-or-stroke)) + shape-or-stroke)] + (when-let [widths (stroke-per-side-widths stroke)] + {:width (nth widths index)}))) + (defn- get-border-radius [{:keys [rx r1 r2 r3 r4] :as shape}] (cond @@ -565,6 +586,10 @@ :border-style (get-border-style shape) :border-width (get-border-width shape) :border-color (get-border-color shape) + :border-block-start-width (get-border-side-width shape 0) + :border-inline-end-width (get-border-side-width shape 1) + :border-block-end-width (get-border-side-width shape 2) + :border-inline-start-width (get-border-side-width shape 3) :border-radius (get-border-radius shape) :border-start-start-radius (get-border-start-start-radius shape) :border-start-end-radius (get-border-start-end-radius shape) diff --git a/frontend/translations/en.po b/frontend/translations/en.po index fd5440a167..82e3f9a11d 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -8410,6 +8410,30 @@ msgstr "Gap" msgid "workspace.options.stroke-width" msgstr "Stroke width" +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +msgid "workspace.options.stroke-width-top" +msgstr "Top (block start)" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +msgid "workspace.options.stroke-width-right" +msgstr "Right (inline end)" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +msgid "workspace.options.stroke-width-bottom" +msgstr "Bottom (block end)" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +msgid "workspace.options.stroke-width-left" +msgstr "Left (inline start)" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +msgid "workspace.options.stroke.per-side" +msgstr "Stroke per side" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +msgid "workspace.options.stroke.per-side-disabled" +msgstr "Strokes per side feature is only available in the new render. Switch render to use it." + #: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:209 msgid "workspace.options.stroke.add-stroke" msgstr "Add stroke color" diff --git a/frontend/translations/es.po b/frontend/translations/es.po index c075237bdd..ca27370228 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -8183,6 +8183,30 @@ msgstr "Color del trazo" msgid "workspace.options.stroke-width" msgstr "Ancho del trazo" +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +msgid "workspace.options.stroke-width-top" +msgstr "Superior (block start)" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +msgid "workspace.options.stroke-width-right" +msgstr "Derecha (inline end)" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +msgid "workspace.options.stroke-width-bottom" +msgstr "Inferior (block end)" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +msgid "workspace.options.stroke-width-left" +msgstr "Izquierda (inline start)" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +msgid "workspace.options.stroke.per-side" +msgstr "Trazo Por Lado" + +#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs +msgid "workspace.options.stroke.per-side-disabled" +msgstr "Strokes per side feature is only available in the new render. Switch render to use it." + #: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:209 msgid "workspace.options.stroke.add-stroke" msgstr "Añadir color de borde" diff --git a/render-wasm/src/render/strokes.rs b/render-wasm/src/render/strokes.rs index b5a5a93518..5e5901d53a 100644 --- a/render-wasm/src/render/strokes.rs +++ b/render-wasm/src/render/strokes.rs @@ -31,6 +31,12 @@ pub(super) fn draw_stroke_on_rect( let filter = compose_filters(blur, shadow); paint.set_image_filter(filter); + // Per-side widths render as a band between an outer and an inner rect. + if let Some(widths) = stroke.per_side_widths() { + draw_per_side_stroke_on_rect(canvas, stroke, rect, corners, &paint, widths, antialias); + return; + } + // By default just draw the rect. Only dotted inner/outer strokes need // clipping to prevent the dotted pattern from appearing in wrong areas. let draw_stroke = || match corners { @@ -97,6 +103,93 @@ pub(super) fn draw_stroke_on_rect( } } +/// Draws a rect/frame stroke whose sides have different widths as the area +/// between an outer and an inner (rounded) rect, mitered like CSS borders. +/// The band is filled with the stroke fill; dashed/dotted patterns are not +/// supported per side and render solid. +#[allow(clippy::too_many_arguments)] +fn draw_per_side_stroke_on_rect( + canvas: &skia::Canvas, + stroke: &Stroke, + rect: &Rect, + corners: &Option, + paint: &skia::Paint, + widths: [f32; 4], + antialias: bool, +) { + let [top, right, bottom, left] = widths; + + // Fraction of each side width growing outward / inward from the shape + // boundary, per stroke alignment. + let (out_f, in_f) = match stroke.kind { + StrokeKind::Inner => (0.0, 1.0), + StrokeKind::Center => (0.5, 0.5), + StrokeKind::Outer => (1.0, 0.0), + }; + + let outer = Rect::from_ltrb( + rect.left - left * out_f, + rect.top - top * out_f, + rect.right + right * out_f, + rect.bottom + bottom * out_f, + ); + let inner = Rect::from_ltrb( + rect.left + left * in_f, + rect.top + top * in_f, + rect.right - right * in_f, + rect.bottom - bottom * in_f, + ); + // When a side width exceeds the shape dimension the inner rect collapses + // and the whole outer rect is filled, like CSS collapsing borders. + let has_hole = inner.width() > 0.0 && inner.height() > 0.0; + + let mut fill_paint = paint.clone(); + fill_paint.set_style(skia::PaintStyle::Fill); + fill_paint.set_path_effect(None); + fill_paint.set_anti_alias(antialias); + + let mut pb = skia::PathBuilder::new(); + match corners { + Some(radii) => { + // Straight (zero-radius) corners stay sharp; rounded ones keep + // their curvature parallel to the shape edge, like CSS borders. + let grow = |radius: f32, delta: f32| { + if radius > 0.0 { + radius + delta + } else { + 0.0 + } + }; + let shrink = |radius: f32, delta: f32| (radius - delta).max(0.0); + // Adjacent side widths per corner, matching the Skia radii order: + // [top-left, top-right, bottom-right, bottom-left]. + let side_deltas = [(left, top), (right, top), (right, bottom), (left, bottom)]; + let mut outer_radii = *radii; + let mut inner_radii = *radii; + for (i, (dx, dy)) in side_deltas.into_iter().enumerate() { + outer_radii[i].x = grow(outer_radii[i].x, dx * out_f); + outer_radii[i].y = grow(outer_radii[i].y, dy * out_f); + inner_radii[i].x = shrink(inner_radii[i].x, dx * in_f); + inner_radii[i].y = shrink(inner_radii[i].y, dy * in_f); + } + pb.add_rrect(RRect::new_rect_radii(outer, &outer_radii), None, None); + if has_hole { + pb.add_rrect(RRect::new_rect_radii(inner, &inner_radii), None, None); + } + } + None => { + pb.add_rect(outer, None, None); + if has_hole { + pb.add_rect(inner, None, None); + } + } + } + + let mut path = pb.detach(); + path.set_fill_type(skia::PathFillType::EvenOdd); + canvas.draw_path(&path, &fill_paint); +} + #[allow(clippy::too_many_arguments)] pub(super) fn draw_stroke_on_circle( canvas: &skia::Canvas, @@ -711,6 +804,7 @@ fn strokes_share_geometry(strokes: &[&Stroke]) -> bool { strokes.windows(2).all(|pair| { pair[0].kind == pair[1].kind && pair[0].width == pair[1].width + && pair[0].widths == pair[1].widths && pair[0].style == pair[1].style && pair[0].cap_start == pair[1].cap_start && pair[0].cap_end == pair[1].cap_end diff --git a/render-wasm/src/shapes.rs b/render-wasm/src/shapes.rs index 7ae9fd8cef..75bb653e22 100644 --- a/render-wasm/src/shapes.rs +++ b/render-wasm/src/shapes.rs @@ -679,13 +679,13 @@ impl Shape { pub fn visible_strokes(&self) -> impl DoubleEndedIterator { self.strokes .iter() - .filter(|stroke| stroke.width > MIN_STROKE_WIDTH) + .filter(|stroke| stroke.max_width() > MIN_STROKE_WIDTH) } pub fn has_visible_strokes(&self) -> bool { self.strokes .iter() - .any(|stroke| stroke.width > MIN_STROKE_WIDTH) + .any(|stroke| stroke.max_width() > MIN_STROKE_WIDTH) } pub fn add_stroke(&mut self, s: Stroke) { @@ -693,6 +693,13 @@ impl Shape { self.strokes.push(s) } + pub fn set_last_stroke_widths(&mut self, widths: [f32; 4]) -> Result<(), String> { + let stroke = self.strokes.last_mut().ok_or("Shape has no strokes")?; + stroke.widths = Some(widths); + self.invalidate_extrect(); + Ok(()) + } + pub fn set_stroke_fill(&mut self, f: Fill) -> Result<(), String> { let stroke = self.strokes.last_mut().ok_or("Shape has no strokes")?; stroke.fill = f; diff --git a/render-wasm/src/shapes/strokes.rs b/render-wasm/src/shapes/strokes.rs index 48f43d975b..f774a70457 100644 --- a/render-wasm/src/shapes/strokes.rs +++ b/render-wasm/src/shapes/strokes.rs @@ -45,6 +45,9 @@ pub struct Stroke { // default `width + 10` pattern to keep existing designs visually identical. pub dash: Option, pub gap: Option, + // Per-side widths [top, right, bottom, left] for rects and frames. + // `None` means the uniform `width` applies to all sides. + pub widths: Option<[f32; 4]>, } impl Stroke { @@ -57,11 +60,34 @@ impl Stroke { } } + /// The widest side of the stroke: the uniform `width` unless per-side + /// widths are set, in which case the maximum of the four sides. + pub fn max_width(&self) -> f32 { + match self.widths { + Some(widths) => widths.into_iter().reduce(f32::max).unwrap_or(self.width), + None => self.width, + } + } + + /// Per-side widths [top, right, bottom, left] when they actually differ. + /// Returns `None` when unset or when all sides are equal, so the uniform + /// render path (which supports dashed/dotted styles) keeps handling that + /// case. + pub fn per_side_widths(&self) -> Option<[f32; 4]> { + let widths = self.widths?; + let [top, right, bottom, left] = widths; + if top == right && right == bottom && bottom == left { + None + } else { + Some(widths) + } + } + pub fn bounds_width(&self, is_open: bool) -> f32 { match self.render_kind(is_open) { StrokeKind::Inner => 0., - StrokeKind::Center => self.width / 2., - StrokeKind::Outer => self.width, + StrokeKind::Center => self.max_width() / 2., + StrokeKind::Outer => self.max_width(), } } @@ -88,6 +114,7 @@ impl Stroke { kind: StrokeKind::Center, dash, gap, + widths: None, } } @@ -108,6 +135,7 @@ impl Stroke { kind: StrokeKind::Inner, dash, gap, + widths: None, } } @@ -128,11 +156,17 @@ impl Stroke { kind: StrokeKind::Outer, dash, gap, + widths: None, } } pub fn scale_content(&mut self, value: f32) { self.width *= value; + if let Some(widths) = &mut self.widths { + for width in widths.iter_mut() { + *width *= value; + } + } if let Some(dash) = self.dash { self.dash = Some(dash * value); } @@ -417,3 +451,46 @@ fn cap_margin_for_cap(cap: Option, width: f32) -> f32 { _ => 0.0, } } + +#[cfg(test)] +mod tests { + use super::*; + + fn stroke_with_widths(widths: Option<[f32; 4]>) -> Stroke { + let mut stroke = Stroke::new_inner_stroke(2.0, StrokeStyle::Solid, None, None, None, None); + stroke.widths = widths; + stroke + } + + #[test] + fn max_width_falls_back_to_uniform_width() { + let stroke = stroke_with_widths(None); + assert_eq!(stroke.max_width(), 2.0); + } + + #[test] + fn max_width_uses_widest_side() { + let stroke = stroke_with_widths(Some([1.0, 8.0, 3.0, 0.0])); + assert_eq!(stroke.max_width(), 8.0); + } + + #[test] + fn per_side_widths_none_when_all_sides_equal() { + let stroke = stroke_with_widths(Some([4.0, 4.0, 4.0, 4.0])); + assert_eq!(stroke.per_side_widths(), None); + } + + #[test] + fn per_side_widths_returns_differing_sides() { + let stroke = stroke_with_widths(Some([1.0, 2.0, 3.0, 4.0])); + assert_eq!(stroke.per_side_widths(), Some([1.0, 2.0, 3.0, 4.0])); + } + + #[test] + fn scale_content_scales_per_side_widths() { + let mut stroke = stroke_with_widths(Some([1.0, 2.0, 3.0, 4.0])); + stroke.scale_content(2.0); + assert_eq!(stroke.widths, Some([2.0, 4.0, 6.0, 8.0])); + assert_eq!(stroke.width, 4.0); + } +} diff --git a/render-wasm/src/wasm/strokes.rs b/render-wasm/src/wasm/strokes.rs index 1c14ac1077..647510ff0b 100644 --- a/render-wasm/src/wasm/strokes.rs +++ b/render-wasm/src/wasm/strokes.rs @@ -154,6 +154,15 @@ pub extern "C" fn add_shape_outer_stroke( }); } +#[no_mangle] +pub extern "C" fn set_shape_stroke_sides(top: f32, right: f32, bottom: f32, left: f32) { + with_current_shape_mut!(state, |shape: &mut Shape| { + shape + .set_last_stroke_widths([top, right, bottom, left]) + .expect("could not set stroke side widths"); + }); +} + #[no_mangle] pub extern "C" fn add_shape_stroke_fill() { with_current_shape_mut!(state, |shape: &mut Shape| { From 7b9896ab3281da93dea57f5ab5a1cf42a8fcb974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Wed, 22 Jul 2026 16:31:20 +0200 Subject: [PATCH 119/229] :bug: Fix tabindex error (#10780) --- frontend/src/app/main/ui/workspace/top_toolbar.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/workspace/top_toolbar.cljs b/frontend/src/app/main/ui/workspace/top_toolbar.cljs index 819f41b80c..a529d33003 100644 --- a/frontend/src/app/main/ui/workspace/top_toolbar.cljs +++ b/frontend/src/app/main/ui/workspace/top_toolbar.cljs @@ -337,7 +337,7 @@ (when-not ^boolean read-only? [:div {:role "toolbar" :aria-label (tr "workspace.toolbar.label") - :tabindex "0" + :tab-index "0" :class (stl/css-case :toolbar true :no-rulers (not rulers-enabled) :hidden toolbar-hidden)} From 4383cf183aa5a15e27d6ef2c7e00427b3c4b9be5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elena=20Torr=C3=B3?= Date: Wed, 22 Jul 2026 17:07:16 +0200 Subject: [PATCH 120/229] :sparkles: Add background blur to strokes (#10716) --- .../get-file-background-blur-strokes.json | 176 ++++++++++++++++++ .../ui/render-wasm-specs/shapes.spec.js | 23 +++ ...der-strokes-on-rects-paths-and-texts-1.png | Bin 0 -> 991225 bytes render-wasm/src/render.rs | 102 +++++++--- render-wasm/src/render/text.rs | 14 +- 5 files changed, 291 insertions(+), 24 deletions(-) create mode 100644 frontend/playwright/data/render-wasm/get-file-background-blur-strokes.json create mode 100644 frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-background-blur-under-strokes-on-rects-paths-and-texts-1.png diff --git a/frontend/playwright/data/render-wasm/get-file-background-blur-strokes.json b/frontend/playwright/data/render-wasm/get-file-background-blur-strokes.json new file mode 100644 index 0000000000..69bb0d9d59 --- /dev/null +++ b/frontend/playwright/data/render-wasm/get-file-background-blur-strokes.json @@ -0,0 +1,176 @@ +{ + "~:features": { + "~#set": [ + "fdata/path-data", + "plugins/runtime", + "design-tokens/v1", + "variants/v1", + "layout/grid", + "styles/v2", + "fdata/pointer-map", + "fdata/objects-map", + "tokens/numeric-input", + "render-wasm/v1", + "components/v2", + "fdata/shape-data-type" + ] + }, + "~:team-id": "~u8b485740-3f39-8080-8008-400e7784f55a", + "~:permissions": { + "~:type": "~:membership", + "~:is-owner": true, + "~:is-admin": true, + "~:can-edit": true, + "~:can-read": true, + "~:is-logged": true + }, + "~:has-media-trimmed": false, + "~:comment-thread-seqn": 0, + "~:name": "New File 3", + "~:revn": 65, + "~:modified-at": "~m1784199941209", + "~:vern": 0, + "~:id": "~u814272d9-d3f8-812d-8008-54c11cbba219", + "~:is-shared": false, + "~:migrations": { + "~#ordered-set": [ + "legacy-2", + "legacy-3", + "legacy-5", + "legacy-6", + "legacy-7", + "legacy-8", + "legacy-9", + "legacy-10", + "legacy-11", + "legacy-12", + "legacy-13", + "legacy-14", + "legacy-16", + "legacy-17", + "legacy-18", + "legacy-19", + "legacy-25", + "legacy-26", + "legacy-27", + "legacy-28", + "legacy-29", + "legacy-31", + "legacy-32", + "legacy-33", + "legacy-34", + "legacy-36", + "legacy-37", + "legacy-38", + "legacy-39", + "legacy-40", + "legacy-41", + "legacy-42", + "legacy-43", + "legacy-44", + "legacy-45", + "legacy-46", + "legacy-47", + "legacy-48", + "legacy-49", + "legacy-50", + "legacy-51", + "legacy-52", + "legacy-53", + "legacy-54", + "legacy-55", + "legacy-56", + "legacy-57", + "legacy-59", + "legacy-62", + "legacy-65", + "legacy-66", + "legacy-67", + "0001-remove-tokens-from-groups", + "0002-normalize-bool-content-v2", + "0002-clean-shape-interactions", + "0003-fix-root-shape", + "0003-convert-path-content-v2", + "0005-deprecate-image-type", + "0006-fix-old-texts-fills", + "0008-fix-library-colors-v4", + "0009-clean-library-colors", + "0009-add-partial-text-touched-flags", + "0010-fix-swap-slots-pointing-non-existent-shapes", + "0011-fix-invalid-text-touched-flags", + "0012-fix-position-data", + "0013-fix-component-path", + "0013-clear-invalid-strokes-and-fills", + "0014-fix-tokens-lib-duplicate-ids", + "0014-clear-components-nil-objects", + "0015-fix-text-attrs-blank-strings", + "0015-clean-shadow-color", + "0016-copy-fills-from-position-data-to-text-node", + "0017-fix-layout-flex-dir", + "0018-remove-unneeded-objects-from-components", + "0019-fix-missing-swap-slots", + "0020-sync-component-id-with-near-main", + "0021-fix-shape-svg-attrs", + "0022-normalize-component-root-and-resync", + "0023-repair-token-themes-with-inexistent-sets", + "0024b-fix-stroke-cap-placement" + ] + }, + "~:version": 67, + "~:project-id": "~u8b485740-3f39-8080-8008-400e7786d1d0", + "~:created-at": "~m1784121921262", + "~:backend": "legacy-db", + "~:data": { + "~:pages": [ + "~u814272d9-d3f8-812d-8008-54c11cbba21a", + "~u844a4204-eb8d-80d3-8008-55e83b4f39e0" + ], + "~:pages-index": { + "~u814272d9-d3f8-812d-8008-54c11cbba21a": { + "~:objects": { + "~#penpot/objects-map/v2": { + "~u00000000-0000-0000-0000-000000000000": "[\"~#shape\",[\"^ \",\"~:y\",0,\"~:hide-fill-on-export\",false,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"Root Frame\",\"~:width\",0.01,\"~:type\",\"~:frame\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",0.0,\"~:y\",0.0]],[\"^:\",[\"^ \",\"~:x\",0.01,\"~:y\",0.0]],[\"^:\",[\"^ \",\"~:x\",0.01,\"~:y\",0.01]],[\"^:\",[\"^ \",\"~:x\",0.0,\"~:y\",0.01]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^3\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"~:id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",0,\"~:proportion\",1.0,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",0,\"~:y\",0,\"^6\",0.01,\"~:height\",0.01,\"~:x1\",0,\"~:y1\",0,\"~:x2\",0.01,\"~:y2\",0.01]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#FFFFFF\",\"~:fill-opacity\",1]],\"~:flip-x\",null,\"^H\",0.01,\"~:flip-y\",null,\"~:shapes\",[\"~u9f14b915-410b-8062-8008-55a1fbbd5fa4\",\"~u9f14b915-410b-8062-8008-559878019a9e\",\"~u844a4204-eb8d-80d3-8008-55e83b566c48\"]]]", + "~u9f14b915-410b-8062-8008-559878019a9e": "[\"~#shape\",[\"^ \",\"~:y\",-1863.999482267452,\"~:background-blur\",[\"^ \",\"~:id\",\"~u9f14b915-410b-8062-8008-5598c30393d7\",\"~:type\",\"^1\",\"~:value\",8,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:grow-type\",\"~:auto-width\",\"~:content\",[\"^ \",\"^3\",\"root\",\"~:key\",\"22sle9m74ka\",\"~:children\",[[\"^ \",\"^3\",\"paragraph-set\",\"^=\",[[\"^ \",\"~:line-height\",\"1.2\",\"~:font-style\",\"normal\",\"^=\",[[\"^ \",\"^?\",\"normal\",\"~:text-transform\",\"none\",\"~:font-id\",\"sourcesanspro\",\"^<\",\"1ixh2em79as\",\"~:font-size\",\"200\",\"~:font-weight\",\"900\",\"~:font-variant-id\",\"black\",\"~:text-decoration\",\"none\",\"~:letter-spacing\",\"0\",\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.12]],\"~:font-family\",\"sourcesanspro\",\"~:text\",\"blur\"]],\"^@\",\"none\",\"~:text-align\",\"left\",\"^A\",\"sourcesanspro\",\"^<\",\"1x2xz4p3kcs\",\"^B\",\"200\",\"^C\",\"900\",\"~:text-direction\",\"ltr\",\"^3\",\"paragraph\",\"^D\",\"black\",\"^E\",\"none\",\"^F\",\"0\",\"^G\",[[\"^ \",\"^H\",\"#ffffff\",\"^I\",0.12]],\"^J\",\"sourcesanspro\"]]]],\"~:vertical-align\",\"top\"],\"~:hide-in-viewer\",false,\"~:name\",\"blur\",\"~:width\",375.0000213699236,\"^3\",\"^K\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",95.49998073772147,\"~:y\",-1863.999482267452]],[\"^S\",[\"^ \",\"~:x\",470.50000210764506,\"~:y\",-1863.999482267452]],[\"^S\",[\"^ \",\"~:x\",470.50000210764506,\"~:y\",-1623.9994721448552]],[\"^S\",[\"^ \",\"~:x\",95.49998073772147,\"~:y\",-1623.9994721448552]]],\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u9f14b915-410b-8062-8008-559878019a9e\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:position-data\",[[\"^ \",\"~:y\",-1602.939453125,\"^>\",\"1.2\",\"^?\",\"normal\",\"~:typography-ref-id\",null,\"^@\",\"none\",\"^L\",\"left\",\"^A\",\"sourcesanspro\",\"^B\",\"200px\",\"^C\",\"900\",\"~:typography-ref-file\",null,\"^M\",\"ltr\",\"^Q\",374.6099853515625,\"^D\",\"regular\",\"^E\",\"none\",\"^F\",\"0px\",\"~:x\",95.4999771118164,\"^G\",[[\"^ \",\"^H\",\"#ffffff\",\"^I\",0.12]],\"~:direction\",\"ltr\",\"^J\",\"sourcesanspro\",\"~:height\",282.1201171875,\"^K\",\"blur\"]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",95.49998073772146,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",95.49998073772146,\"~:y\",-1863.999482267452,\"^Q\",375.0000213699236,\"^Z\",240.0000101225969,\"~:x1\",95.49998073772146,\"~:y1\",-1863.999482267452,\"~:x2\",470.50000210764506,\"~:y2\",-1623.9994721448552]],\"~:flip-x\",null,\"^Z\",240.0000101225969,\"~:flip-y\",null]]", + "~u9f14b915-410b-8062-8008-55a1fbbd5fa4": "[\"~#shape\",[\"^ \",\"~:y\",-2155.0001098481293,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"background_1\",\"~:width\",1004.0000579080496,\"~:type\",\"~:rect\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",-211.00000682869666,\"~:y\",-2155.0001098481293]],[\"^9\",[\"^ \",\"~:x\",793.0000510793529,\"~:y\",-2155.0001098481293]],[\"^9\",[\"^ \",\"~:x\",793.0000510793529,\"~:y\",-1150.9999568014878]],[\"^9\",[\"^ \",\"~:x\",-211.00000682869666,\"~:y\",-1150.9999568014878]]],\"~:r2\",0,\"~:proportion-lock\",true,\"~:transform-inverse\",[\"^2\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"~:id\",\"~u9f14b915-410b-8062-8008-55a1fbbd5fa4\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",-211.00000682869666,\"~:proportion\",1,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",-211.00000682869666,\"~:y\",-2155.0001098481293,\"^5\",1004.0000579080496,\"~:height\",1004.0001530466416,\"~:x1\",-211.00000682869666,\"~:y1\",-2155.0001098481293,\"~:x2\",793.0000510793529,\"~:y2\",-1150.9999568014878]],\"~:fills\",[[\"^ \",\"~:fill-opacity\",1,\"~:fill-image\",[\"^ \",\"^5\",1181,\"^G\",1181,\"~:mtype\",\"image/png\",\"^?\",\"~u814272d9-d3f8-812d-8008-55a1fb78211b\",\"~:keep-aspect-ratio\",true]]],\"~:flip-x\",null,\"^G\",1004.0001530466416,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e83b566c48": "[\"~#shape\",[\"^ \",\"~:y\",0,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"background\",\"~:width\",1400,\"~:type\",\"~:rect\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",0,\"~:y\",0]],[\"^9\",[\"^ \",\"~:x\",1400,\"~:y\",0]],[\"^9\",[\"^ \",\"~:x\",1400,\"~:y\",759.9999904632568]],[\"^9\",[\"^ \",\"~:x\",0,\"~:y\",759.9999904632568]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^2\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"~:id\",\"~u844a4204-eb8d-80d3-8008-55e83b566c48\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",0,\"~:proportion\",1,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",0,\"~:y\",0,\"^5\",1400,\"~:height\",759.9999904632568,\"~:x1\",0,\"~:y1\",0,\"~:x2\",1400,\"~:y2\",759.9999904632568]],\"~:fills\",[[\"^ \",\"~:fill-opacity\",1,\"~:fill-image\",[\"^ \",\"^?\",\"~u814272d9-d3f8-812d-8008-55a1fb78211b\",\"^5\",1181,\"^G\",1181,\"~:mtype\",\"image/png\",\"~:keep-aspect-ratio\",true]]],\"~:flip-x\",null,\"^G\",759.9999904632568,\"~:flip-y\",null]]" + } + }, + "~:id": "~u814272d9-d3f8-812d-8008-54c11cbba21a", + "~:name": "Page 1" + }, + "~u844a4204-eb8d-80d3-8008-55e83b4f39e0": { + "~:objects": { + "~#penpot/objects-map/v2": { + "~u00000000-0000-0000-0000-000000000000": "[\"~#shape\",[\"^ \",\"~:y\",0,\"~:hide-fill-on-export\",false,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"Root Frame\",\"~:width\",0.01,\"~:type\",\"~:frame\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",0.0,\"~:y\",0.0]],[\"^:\",[\"^ \",\"~:x\",0.01,\"~:y\",0.0]],[\"^:\",[\"^ \",\"~:x\",0.01,\"~:y\",0.01]],[\"^:\",[\"^ \",\"~:x\",0.0,\"~:y\",0.01]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^3\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"~:id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",0,\"~:proportion\",1.0,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",0,\"~:y\",0,\"^6\",0.01,\"~:height\",0.01,\"~:x1\",0,\"~:y1\",0,\"~:x2\",0.01,\"~:y2\",0.01]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#FFFFFF\",\"~:fill-opacity\",1]],\"~:flip-x\",null,\"^H\",0.01,\"~:flip-y\",null,\"~:shapes\",[\"~u844a4204-eb8d-80d3-8008-55e84d2ab9b9\",\"~u844a4204-eb8d-80d3-8008-55e860a88934\",\"~u844a4204-eb8d-80d3-8008-55e860b3775c\",\"~u844a4204-eb8d-80d3-8008-55e860bb5bdc\",\"~u844a4204-eb8d-80d3-8008-55e860c302cd\",\"~u844a4204-eb8d-80d3-8008-55e860ca2b3b\",\"~u844a4204-eb8d-80d3-8008-55e860d3347f\",\"~u844a4204-eb8d-80d3-8008-55e86a816bac\",\"~u844a4204-eb8d-80d3-8008-55e86a8be839\",\"~u844a4204-eb8d-80d3-8008-55e86a92f143\",\"~u844a4204-eb8d-80d3-8008-55e86a99dc08\",\"~u844a4204-eb8d-80d3-8008-55e86aa09dec\",\"~u844a4204-eb8d-80d3-8008-55e86aa7e998\",\"~u844a4204-eb8d-80d3-8008-55e86aafcb00\",\"~u844a4204-eb8d-80d3-8008-55e86ac03a3a\",\"~u844a4204-eb8d-80d3-8008-55e86acc7ab8\",\"~u844a4204-eb8d-80d3-8008-55e86ad794cf\",\"~u844a4204-eb8d-80d3-8008-55e86ae33dff\",\"~u844a4204-eb8d-80d3-8008-55e86af1cbcf\"]]]", + "~u844a4204-eb8d-80d3-8008-55e86ae33dff": "[\"~#shape\",[\"^ \",\"~:y\",560,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e888351419\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:grow-type\",\"~:auto-width\",\"~:content\",[\"^ \",\"^3\",\"root\",\"~:children\",[[\"^ \",\"^3\",\"paragraph-set\",\"^<\",[[\"^ \",\"~:line-height\",\"1.2\",\"~:font-style\",\"normal\",\"^<\",[[\"^ \",\"^=\",\"1.2\",\"^>\",\"normal\",\"~:typography-ref-id\",null,\"~:text-transform\",\"none\",\"~:text-align\",\"left\",\"~:font-id\",\"sourcesanspro\",\"~:font-size\",\"90\",\"~:font-weight\",\"700\",\"~:typography-ref-file\",null,\"~:text-direction\",\"ltr\",\"~:font-variant-id\",\"bold\",\"~:text-decoration\",\"none\",\"~:letter-spacing\",\"0\",\"~:fills\",[],\"~:font-family\",\"sourcesanspro\",\"~:text\",\"Aa\"]],\"^?\",null,\"^@\",\"none\",\"^A\",\"left\",\"^B\",\"sourcesanspro\",\"^C\",\"90\",\"^D\",\"700\",\"^E\",null,\"^F\",\"ltr\",\"^3\",\"paragraph\",\"^G\",\"bold\",\"^H\",\"none\",\"^I\",\"0\",\"^J\",[],\"^K\",\"sourcesanspro\"]]]]],\"~:name\",\"text-center-nofill\",\"~:width\",100.0001106262207,\"^3\",\"^L\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",800,\"~:y\",560]],[\"^P\",[\"^ \",\"~:x\",900.0001106262207,\"~:y\",560]],[\"^P\",[\"^ \",\"~:x\",900.0001106262207,\"~:y\",668]],[\"^P\",[\"^ \",\"~:x\",800,\"~:y\",668]]],\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u844a4204-eb8d-80d3-8008-55e86ae33dff\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:position-data\",[[\"^ \",\"~:y\",675.9400024414062,\"^=\",\"1.2\",\"^>\",\"normal\",\"^?\",null,\"^@\",\"none\",\"^A\",\"left\",\"^B\",\"sourcesanspro\",\"^C\",\"90px\",\"^D\",\"700\",\"^E\",null,\"^F\",\"ltr\",\"^N\",99.58001708984375,\"^G\",\"regular\",\"^H\",\"none\",\"^I\",\"0px\",\"~:x\",800,\"^J\",[],\"~:direction\",\"ltr\",\"^K\",\"sourcesanspro\",\"~:height\",123.8800048828125,\"^L\",\"Aa\"]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:center\",\"~:stroke-width\",12]],\"~:x\",800,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",800,\"~:y\",560,\"^N\",100.0001106262207,\"^U\",108,\"~:x1\",800,\"~:y1\",560,\"~:x2\",900.0001106262207,\"~:y2\",668]],\"~:flip-x\",null,\"^U\",108,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e860d3347f": "[\"~#shape\",[\"^ \",\"~:y\",60,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e88835141a\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"rect-outer-opaque\",\"~:width\",120.00000476837158,\"^3\",\"~:rect\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",990,\"~:y\",60]],[\"^=\",[\"^ \",\"~:x\",1110.0000047683716,\"~:y\",60]],[\"^=\",[\"^ \",\"~:x\",1110.0000047683716,\"~:y\",180.00000476837158]],[\"^=\",[\"^ \",\"~:x\",990,\"~:y\",180.00000476837158]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"^2\",\"~u844a4204-eb8d-80d3-8008-55e860d3347f\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:outer\",\"~:stroke-width\",12]],\"~:x\",990,\"~:proportion\",1,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",990,\"~:y\",60,\"^:\",120.00000476837158,\"~:height\",120.00000476837158,\"~:x1\",990,\"~:y1\",60,\"~:x2\",1110.0000047683716,\"~:y2\",180.00000476837158]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#333333\",\"~:fill-opacity\",1]],\"~:flip-x\",null,\"^Q\",120.00000476837158,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e860b3775c": "[\"~#shape\",[\"^ \",\"~:y\",60,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e88835141b\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"rect-center\",\"~:width\",120.00000476837158,\"^3\",\"~:rect\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",230,\"~:y\",60]],[\"^=\",[\"^ \",\"~:x\",350.0000047683716,\"~:y\",60]],[\"^=\",[\"^ \",\"~:x\",350.0000047683716,\"~:y\",180.00000476837158]],[\"^=\",[\"^ \",\"~:x\",230,\"~:y\",180.00000476837158]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"^2\",\"~u844a4204-eb8d-80d3-8008-55e860b3775c\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:center\",\"~:stroke-width\",12]],\"~:x\",230,\"~:proportion\",1,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",230,\"~:y\",60,\"^:\",120.00000476837158,\"~:height\",120.00000476837158,\"~:x1\",230,\"~:y1\",60,\"~:x2\",350.0000047683716,\"~:y2\",180.00000476837158]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.3]],\"~:flip-x\",null,\"^Q\",120.00000476837158,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e860bb5bdc": "[\"~#shape\",[\"^ \",\"~:y\",60,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e88835141c\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"rect-outer\",\"~:width\",120.00000476837158,\"^3\",\"~:rect\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",420,\"~:y\",60]],[\"^=\",[\"^ \",\"~:x\",540.0000047683716,\"~:y\",60]],[\"^=\",[\"^ \",\"~:x\",540.0000047683716,\"~:y\",180.00000476837158]],[\"^=\",[\"^ \",\"~:x\",420,\"~:y\",180.00000476837158]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"^2\",\"~u844a4204-eb8d-80d3-8008-55e860bb5bdc\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:outer\",\"~:stroke-width\",12]],\"~:x\",420,\"~:proportion\",1,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",420,\"~:y\",60,\"^:\",120.00000476837158,\"~:height\",120.00000476837158,\"~:x1\",420,\"~:y1\",60,\"~:x2\",540.0000047683716,\"~:y2\",180.00000476837158]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.3]],\"~:flip-x\",null,\"^Q\",120.00000476837158,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e860ca2b3b": "[\"~#shape\",[\"^ \",\"~:y\",60,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e88835141d\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"rect-center-nofill\",\"~:width\",120.00000476837158,\"^3\",\"~:rect\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",800,\"~:y\",60]],[\"^=\",[\"^ \",\"~:x\",920.0000047683716,\"~:y\",60]],[\"^=\",[\"^ \",\"~:x\",920.0000047683716,\"~:y\",180.00000476837158]],[\"^=\",[\"^ \",\"~:x\",800,\"~:y\",180.00000476837158]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"^2\",\"~u844a4204-eb8d-80d3-8008-55e860ca2b3b\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:center\",\"~:stroke-width\",12]],\"~:x\",800,\"~:proportion\",1,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",800,\"~:y\",60,\"^:\",120.00000476837158,\"~:height\",120.00000476837158,\"~:x1\",800,\"~:y1\",60,\"~:x2\",920.0000047683716,\"~:y2\",180.00000476837158]],\"~:fills\",[],\"~:flip-x\",null,\"^Q\",120.00000476837158,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e86ac03a3a": "[\"~#shape\",[\"^ \",\"~:y\",560,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e88835141e\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:grow-type\",\"~:auto-width\",\"~:content\",[\"^ \",\"^3\",\"root\",\"~:children\",[[\"^ \",\"^3\",\"paragraph-set\",\"^<\",[[\"^ \",\"~:line-height\",\"1.2\",\"~:font-style\",\"normal\",\"^<\",[[\"^ \",\"^=\",\"1.2\",\"^>\",\"normal\",\"~:typography-ref-id\",null,\"~:text-transform\",\"none\",\"~:text-align\",\"left\",\"~:font-id\",\"sourcesanspro\",\"~:font-size\",\"90\",\"~:font-weight\",\"700\",\"~:typography-ref-file\",null,\"~:text-direction\",\"ltr\",\"~:font-variant-id\",\"bold\",\"~:text-decoration\",\"none\",\"~:letter-spacing\",\"0\",\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.3]],\"~:font-family\",\"sourcesanspro\",\"~:text\",\"Aa\"]],\"^?\",null,\"^@\",\"none\",\"^A\",\"left\",\"^B\",\"sourcesanspro\",\"^C\",\"90\",\"^D\",\"700\",\"^E\",null,\"^F\",\"ltr\",\"^3\",\"paragraph\",\"^G\",\"bold\",\"^H\",\"none\",\"^I\",\"0\",\"^J\",[[\"^ \",\"^K\",\"#ffffff\",\"^L\",0.3]],\"^M\",\"sourcesanspro\"]]]]],\"~:name\",\"text-center\",\"~:width\",99.99999618530273,\"^3\",\"^N\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",230,\"~:y\",560]],[\"^R\",[\"^ \",\"~:x\",329.99999618530273,\"~:y\",560]],[\"^R\",[\"^ \",\"~:x\",329.99999618530273,\"~:y\",668]],[\"^R\",[\"^ \",\"~:x\",230,\"~:y\",668]]],\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u844a4204-eb8d-80d3-8008-55e86ac03a3a\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:position-data\",[[\"^ \",\"~:y\",675.9400024414062,\"^=\",\"1.2\",\"^>\",\"normal\",\"^?\",null,\"^@\",\"none\",\"^A\",\"left\",\"^B\",\"sourcesanspro\",\"^C\",\"90px\",\"^D\",\"700\",\"^E\",null,\"^F\",\"ltr\",\"^P\",99.58001708984375,\"^G\",\"regular\",\"^H\",\"none\",\"^I\",\"0px\",\"~:x\",230,\"^J\",[[\"^ \",\"^K\",\"#ffffff\",\"^L\",0.3]],\"~:direction\",\"ltr\",\"^M\",\"sourcesanspro\",\"~:height\",123.8800048828125,\"^N\",\"Aa\"]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:center\",\"~:stroke-width\",12]],\"~:x\",230,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",230,\"~:y\",560,\"^P\",99.99999618530273,\"^W\",108,\"~:x1\",230,\"~:y1\",560,\"~:x2\",329.99999618530273,\"~:y2\",668]],\"~:flip-x\",null,\"^W\",108,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e84d2ab9b9": "[\"~#shape\",[\"^ \",\"~:y\",0,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"background\",\"~:width\",1179.9999713897705,\"~:type\",\"~:rect\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",0,\"~:y\",0]],[\"^9\",[\"^ \",\"~:x\",1179.9999713897705,\"~:y\",0]],[\"^9\",[\"^ \",\"~:x\",1179.9999713897705,\"~:y\",759.9999904632568]],[\"^9\",[\"^ \",\"~:x\",0,\"~:y\",759.9999904632568]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^2\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"~:id\",\"~u844a4204-eb8d-80d3-8008-55e84d2ab9b9\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",0,\"~:proportion\",1,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",0,\"~:y\",0,\"^5\",1179.9999713897705,\"~:height\",759.9999904632568,\"~:x1\",0,\"~:y1\",0,\"~:x2\",1179.9999713897705,\"~:y2\",759.9999904632568]],\"~:fills\",[[\"^ \",\"~:fill-opacity\",1,\"~:fill-image\",[\"^ \",\"^?\",\"~u814272d9-d3f8-812d-8008-55a1fb78211b\",\"^5\",1181,\"^G\",1181,\"~:mtype\",\"image/png\",\"~:keep-aspect-ratio\",true]]],\"~:flip-x\",null,\"^G\",759.9999904632568,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e86a8be839": "[\"~#shape\",[\"^ \",\"~:y\",null,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e88835141f\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:content\",[\"~#penpot/path-data\",\"~bAQAAAAAAAAAAAAAAAAAAAAAAAAAAAGZDAACWQwIAAAAAAAAAAAAAAAAAAAAAAAAAAACvQwAA0kM=\"],\"~:name\",\"path-center\",\"~:width\",null,\"^3\",\"~:path\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",230,\"~:y\",300]],[\"^?\",[\"^ \",\"~:x\",350.0000047683716,\"~:y\",300]],[\"^?\",[\"^ \",\"~:x\",350.0000047683716,\"~:y\",420.0000047683716]],[\"^?\",[\"^ \",\"~:x\",230,\"~:y\",420.0000047683716]]],\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u844a4204-eb8d-80d3-8008-55e86a8be839\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:center\",\"~:stroke-width\",12]],\"~:x\",null,\"~:proportion\",1,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",230,\"~:y\",300,\"^<\",120.00000476837158,\"~:height\",120.00000476837158,\"~:x1\",230,\"~:y1\",300,\"~:x2\",350.0000047683716,\"~:y2\",420.0000047683716]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.3]],\"~:flip-x\",null,\"^O\",null,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e86acc7ab8": "[\"~#shape\",[\"^ \",\"~:y\",560,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e888351420\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:grow-type\",\"~:auto-width\",\"~:content\",[\"^ \",\"^3\",\"root\",\"~:children\",[[\"^ \",\"^3\",\"paragraph-set\",\"^<\",[[\"^ \",\"~:line-height\",\"1.2\",\"~:font-style\",\"normal\",\"^<\",[[\"^ \",\"^=\",\"1.2\",\"^>\",\"normal\",\"~:typography-ref-id\",null,\"~:text-transform\",\"none\",\"~:text-align\",\"left\",\"~:font-id\",\"sourcesanspro\",\"~:font-size\",\"90\",\"~:font-weight\",\"700\",\"~:typography-ref-file\",null,\"~:text-direction\",\"ltr\",\"~:font-variant-id\",\"bold\",\"~:text-decoration\",\"none\",\"~:letter-spacing\",\"0\",\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.3]],\"~:font-family\",\"sourcesanspro\",\"~:text\",\"Aa\"]],\"^?\",null,\"^@\",\"none\",\"^A\",\"left\",\"^B\",\"sourcesanspro\",\"^C\",\"90\",\"^D\",\"700\",\"^E\",null,\"^F\",\"ltr\",\"^3\",\"paragraph\",\"^G\",\"bold\",\"^H\",\"none\",\"^I\",\"0\",\"^J\",[[\"^ \",\"^K\",\"#ffffff\",\"^L\",0.3]],\"^M\",\"sourcesanspro\"]]]]],\"~:name\",\"text-outer\",\"~:width\",99.99999618530273,\"^3\",\"^N\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",420,\"~:y\",560]],[\"^R\",[\"^ \",\"~:x\",519.9999961853027,\"~:y\",560]],[\"^R\",[\"^ \",\"~:x\",519.9999961853027,\"~:y\",668]],[\"^R\",[\"^ \",\"~:x\",420,\"~:y\",668]]],\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u844a4204-eb8d-80d3-8008-55e86acc7ab8\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:position-data\",[[\"^ \",\"~:y\",675.9400024414062,\"^=\",\"1.2\",\"^>\",\"normal\",\"^?\",null,\"^@\",\"none\",\"^A\",\"left\",\"^B\",\"sourcesanspro\",\"^C\",\"90px\",\"^D\",\"700\",\"^E\",null,\"^F\",\"ltr\",\"^P\",99.58001708984375,\"^G\",\"regular\",\"^H\",\"none\",\"^I\",\"0px\",\"~:x\",420,\"^J\",[[\"^ \",\"^K\",\"#ffffff\",\"^L\",0.3]],\"~:direction\",\"ltr\",\"^M\",\"sourcesanspro\",\"~:height\",123.8800048828125,\"^N\",\"Aa\"]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:outer\",\"~:stroke-width\",12]],\"~:x\",420,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",420,\"~:y\",560,\"^P\",99.99999618530273,\"^W\",108,\"~:x1\",420,\"~:y1\",560,\"~:x2\",519.9999961853027,\"~:y2\",668]],\"~:flip-x\",null,\"^W\",108,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e86aa7e998": "[\"~#shape\",[\"^ \",\"~:y\",null,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e888351421\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:content\",[\"~#penpot/path-data\",\"~bAQAAAAAAAAAAAAAAAAAAAAAAAAAAgHdEAACWQwIAAAAAAAAAAAAAAAAAAAAAAAAAAMCKRAAA0kM=\"],\"~:name\",\"path-outer-opaque\",\"~:width\",null,\"^3\",\"~:path\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",990,\"~:y\",300]],[\"^?\",[\"^ \",\"~:x\",1110.0000047683716,\"~:y\",300]],[\"^?\",[\"^ \",\"~:x\",1110.0000047683716,\"~:y\",420.0000047683716]],[\"^?\",[\"^ \",\"~:x\",990,\"~:y\",420.0000047683716]]],\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u844a4204-eb8d-80d3-8008-55e86aa7e998\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:outer\",\"~:stroke-width\",12]],\"~:x\",null,\"~:proportion\",1,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",990,\"~:y\",300,\"^<\",120.00000476837158,\"~:height\",120.00000476837158,\"~:x1\",990,\"~:y1\",300,\"~:x2\",1110.0000047683716,\"~:y2\",420.0000047683716]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#333333\",\"~:fill-opacity\",1]],\"~:flip-x\",null,\"^O\",null,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e860a88934": "[\"~#shape\",[\"^ \",\"~:y\",60,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e888351422\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"rect-inner\",\"~:width\",120.00000476837158,\"^3\",\"~:rect\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",40,\"~:y\",60]],[\"^=\",[\"^ \",\"~:x\",160.00000476837158,\"~:y\",60]],[\"^=\",[\"^ \",\"~:x\",160.00000476837158,\"~:y\",180.00000476837158]],[\"^=\",[\"^ \",\"~:x\",40,\"~:y\",180.00000476837158]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"^2\",\"~u844a4204-eb8d-80d3-8008-55e860a88934\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:inner\",\"~:stroke-width\",12]],\"~:x\",40,\"~:proportion\",1,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",40,\"~:y\",60,\"^:\",120.00000476837158,\"~:height\",120.00000476837158,\"~:x1\",40,\"~:y1\",60,\"~:x2\",160.00000476837158,\"~:y2\",180.00000476837158]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.3]],\"~:flip-x\",null,\"^Q\",120.00000476837158,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e86af1cbcf": "[\"~#shape\",[\"^ \",\"~:y\",560,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e888351423\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:grow-type\",\"~:auto-width\",\"~:content\",[\"^ \",\"^3\",\"root\",\"~:children\",[[\"^ \",\"^3\",\"paragraph-set\",\"^<\",[[\"^ \",\"~:line-height\",\"1.2\",\"~:font-style\",\"normal\",\"^<\",[[\"^ \",\"^=\",\"1.2\",\"^>\",\"normal\",\"~:typography-ref-id\",null,\"~:text-transform\",\"none\",\"~:text-align\",\"left\",\"~:font-id\",\"sourcesanspro\",\"~:font-size\",\"90\",\"~:font-weight\",\"700\",\"~:typography-ref-file\",null,\"~:text-direction\",\"ltr\",\"~:font-variant-id\",\"bold\",\"~:text-decoration\",\"none\",\"~:letter-spacing\",\"0\",\"~:fills\",[[\"^ \",\"~:fill-color\",\"#333333\",\"~:fill-opacity\",1]],\"~:font-family\",\"sourcesanspro\",\"~:text\",\"Aa\"]],\"^?\",null,\"^@\",\"none\",\"^A\",\"left\",\"^B\",\"sourcesanspro\",\"^C\",\"90\",\"^D\",\"700\",\"^E\",null,\"^F\",\"ltr\",\"^3\",\"paragraph\",\"^G\",\"bold\",\"^H\",\"none\",\"^I\",\"0\",\"^J\",[[\"^ \",\"^K\",\"#333333\",\"^L\",1]],\"^M\",\"sourcesanspro\"]]]]],\"~:name\",\"text-outer-opaque\",\"~:width\",99.99999618530273,\"^3\",\"^N\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",990,\"~:y\",560]],[\"^R\",[\"^ \",\"~:x\",1089.9999961853027,\"~:y\",560]],[\"^R\",[\"^ \",\"~:x\",1089.9999961853027,\"~:y\",668]],[\"^R\",[\"^ \",\"~:x\",990,\"~:y\",668]]],\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u844a4204-eb8d-80d3-8008-55e86af1cbcf\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:position-data\",[[\"^ \",\"~:y\",675.9400024414062,\"^=\",\"1.2\",\"^>\",\"normal\",\"^?\",null,\"^@\",\"none\",\"^A\",\"left\",\"^B\",\"sourcesanspro\",\"^C\",\"90px\",\"^D\",\"700\",\"^E\",null,\"^F\",\"ltr\",\"^P\",99.5799560546875,\"^G\",\"regular\",\"^H\",\"none\",\"^I\",\"0px\",\"~:x\",990,\"^J\",[[\"^ \",\"^K\",\"#333333\",\"^L\",1]],\"~:direction\",\"ltr\",\"^M\",\"sourcesanspro\",\"~:height\",123.8800048828125,\"^N\",\"Aa\"]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:outer\",\"~:stroke-width\",12]],\"~:x\",990,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",990,\"~:y\",560,\"^P\",99.99999618530273,\"^W\",108,\"~:x1\",990,\"~:y1\",560,\"~:x2\",1089.9999961853027,\"~:y2\",668]],\"~:flip-x\",null,\"^W\",108,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e86ad794cf": "[\"~#shape\",[\"^ \",\"~:y\",560,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e888351424\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:grow-type\",\"~:auto-width\",\"~:content\",[\"^ \",\"^3\",\"root\",\"~:children\",[[\"^ \",\"^3\",\"paragraph-set\",\"^<\",[[\"^ \",\"~:line-height\",\"1.2\",\"~:font-style\",\"normal\",\"^<\",[[\"^ \",\"^=\",\"1.2\",\"^>\",\"normal\",\"~:typography-ref-id\",null,\"~:text-transform\",\"none\",\"~:text-align\",\"left\",\"~:font-id\",\"sourcesanspro\",\"~:font-size\",\"90\",\"~:font-weight\",\"700\",\"~:typography-ref-file\",null,\"~:text-direction\",\"ltr\",\"~:font-variant-id\",\"bold\",\"~:text-decoration\",\"none\",\"~:letter-spacing\",\"0\",\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.3]],\"~:font-family\",\"sourcesanspro\",\"~:text\",\"Aa\"]],\"^?\",null,\"^@\",\"none\",\"^A\",\"left\",\"^B\",\"sourcesanspro\",\"^C\",\"90\",\"^D\",\"700\",\"^E\",null,\"^F\",\"ltr\",\"^3\",\"paragraph\",\"^G\",\"bold\",\"^H\",\"none\",\"^I\",\"0\",\"^J\",[[\"^ \",\"^K\",\"#ffffff\",\"^L\",0.3]],\"^M\",\"sourcesanspro\"]]]]],\"~:name\",\"text-all\",\"~:width\",99.99999618530273,\"^3\",\"^N\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",610,\"~:y\",560]],[\"^R\",[\"^ \",\"~:x\",709.9999961853027,\"~:y\",560]],[\"^R\",[\"^ \",\"~:x\",709.9999961853027,\"~:y\",668]],[\"^R\",[\"^ \",\"~:x\",610,\"~:y\",668]]],\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u844a4204-eb8d-80d3-8008-55e86ad794cf\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:position-data\",[[\"^ \",\"~:y\",675.9400024414062,\"^=\",\"1.2\",\"^>\",\"normal\",\"^?\",null,\"^@\",\"none\",\"^A\",\"left\",\"^B\",\"sourcesanspro\",\"^C\",\"90px\",\"^D\",\"700\",\"^E\",null,\"^F\",\"ltr\",\"^P\",99.58001708984375,\"^G\",\"regular\",\"^H\",\"none\",\"^I\",\"0px\",\"~:x\",610,\"^J\",[[\"^ \",\"^K\",\"#ffffff\",\"^L\",0.3]],\"~:direction\",\"ltr\",\"^M\",\"sourcesanspro\",\"~:height\",123.8800048828125,\"^N\",\"Aa\"]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:inner\",\"~:stroke-width\",12],[\"^ \",\"^Z\",\"^[\",\"^10\",\"#ffdd88\",\"^11\",0.4,\"^12\",\"~:center\",\"^14\",12],[\"^ \",\"^Z\",\"^[\",\"^10\",\"#88ccff\",\"^11\",0.4,\"^12\",\"~:outer\",\"^14\",12]],\"~:x\",610,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",610,\"~:y\",560,\"^P\",99.99999618530273,\"^W\",108,\"~:x1\",610,\"~:y1\",560,\"~:x2\",709.9999961853027,\"~:y2\",668]],\"~:flip-x\",null,\"^W\",108,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e860c302cd": "[\"~#shape\",[\"^ \",\"~:y\",60,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e888351425\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"rect-all\",\"~:width\",120.00000476837158,\"^3\",\"~:rect\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",610,\"~:y\",60]],[\"^=\",[\"^ \",\"~:x\",730.0000047683716,\"~:y\",60]],[\"^=\",[\"^ \",\"~:x\",730.0000047683716,\"~:y\",180.00000476837158]],[\"^=\",[\"^ \",\"~:x\",610,\"~:y\",180.00000476837158]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"^2\",\"~u844a4204-eb8d-80d3-8008-55e860c302cd\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:inner\",\"~:stroke-width\",12],[\"^ \",\"^F\",\"^G\",\"^H\",\"#ffdd88\",\"^I\",0.4,\"^J\",\"~:center\",\"^L\",12],[\"^ \",\"^F\",\"^G\",\"^H\",\"#88ccff\",\"^I\",0.4,\"^J\",\"~:outer\",\"^L\",12]],\"~:x\",610,\"~:proportion\",1,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",610,\"~:y\",60,\"^:\",120.00000476837158,\"~:height\",120.00000476837158,\"~:x1\",610,\"~:y1\",60,\"~:x2\",730.0000047683716,\"~:y2\",180.00000476837158]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.3]],\"~:flip-x\",null,\"^S\",120.00000476837158,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e86a816bac": "[\"~#shape\",[\"^ \",\"~:y\",null,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e888351426\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:content\",[\"~#penpot/path-data\",\"~bAQAAAAAAAAAAAAAAAAAAAAAAAAAAACBCAACWQwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQwAA0kM=\"],\"~:name\",\"path-inner\",\"~:width\",null,\"^3\",\"~:path\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",40,\"~:y\",300]],[\"^?\",[\"^ \",\"~:x\",160.00000476837158,\"~:y\",300]],[\"^?\",[\"^ \",\"~:x\",160.00000476837158,\"~:y\",420.0000047683716]],[\"^?\",[\"^ \",\"~:x\",40,\"~:y\",420.0000047683716]]],\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u844a4204-eb8d-80d3-8008-55e86a816bac\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:inner\",\"~:stroke-width\",12]],\"~:x\",null,\"~:proportion\",1,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",40,\"~:y\",300,\"^<\",120.00000476837158,\"~:height\",120.00000476837158,\"~:x1\",40,\"~:y1\",300,\"~:x2\",160.00000476837158,\"~:y2\",420.0000047683716]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.3]],\"~:flip-x\",null,\"^O\",null,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e86aa09dec": "[\"~#shape\",[\"^ \",\"~:y\",null,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e888351427\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:content\",[\"~#penpot/path-data\",\"~bAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEhEAACWQwIAAAAAAAAAAAAAAAAAAAAAAAAAAABmRAAA0kM=\"],\"~:name\",\"path-center-nofill\",\"~:width\",null,\"^3\",\"~:path\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",800,\"~:y\",300]],[\"^?\",[\"^ \",\"~:x\",920.0000047683716,\"~:y\",300]],[\"^?\",[\"^ \",\"~:x\",920.0000047683716,\"~:y\",420.0000047683716]],[\"^?\",[\"^ \",\"~:x\",800,\"~:y\",420.0000047683716]]],\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u844a4204-eb8d-80d3-8008-55e86aa09dec\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:center\",\"~:stroke-width\",12]],\"~:x\",null,\"~:proportion\",1,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",800,\"~:y\",300,\"^<\",120.00000476837158,\"~:height\",120.00000476837158,\"~:x1\",800,\"~:y1\",300,\"~:x2\",920.0000047683716,\"~:y2\",420.0000047683716]],\"~:fills\",[],\"~:flip-x\",null,\"^O\",null,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e86a99dc08": "[\"~#shape\",[\"^ \",\"~:y\",null,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e888351428\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:content\",[\"~#penpot/path-data\",\"~bAQAAAAAAAAAAAAAAAAAAAAAAAAAAgBhEAACWQwIAAAAAAAAAAAAAAAAAAAAAAAAAAIA2RAAA0kM=\"],\"~:name\",\"path-all\",\"~:width\",null,\"^3\",\"~:path\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",610,\"~:y\",300]],[\"^?\",[\"^ \",\"~:x\",730.0000047683716,\"~:y\",300]],[\"^?\",[\"^ \",\"~:x\",730.0000047683716,\"~:y\",420.0000047683716]],[\"^?\",[\"^ \",\"~:x\",610,\"~:y\",420.0000047683716]]],\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u844a4204-eb8d-80d3-8008-55e86a99dc08\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:inner\",\"~:stroke-width\",12],[\"^ \",\"^E\",\"^F\",\"^G\",\"#ffdd88\",\"^H\",0.4,\"^I\",\"~:center\",\"^K\",12],[\"^ \",\"^E\",\"^F\",\"^G\",\"#88ccff\",\"^H\",0.4,\"^I\",\"~:outer\",\"^K\",12]],\"~:x\",null,\"~:proportion\",1,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",610,\"~:y\",300,\"^<\",120.00000476837158,\"~:height\",120.00000476837158,\"~:x1\",610,\"~:y1\",300,\"~:x2\",730.0000047683716,\"~:y2\",420.0000047683716]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.3]],\"~:flip-x\",null,\"^Q\",null,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e86a92f143": "[\"~#shape\",[\"^ \",\"~:y\",null,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e888351429\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:content\",[\"~#penpot/path-data\",\"~bAQAAAAAAAAAAAAAAAAAAAAAAAAAAANJDAACWQwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRAAA0kM=\"],\"~:name\",\"path-outer\",\"~:width\",null,\"^3\",\"~:path\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",420,\"~:y\",300]],[\"^?\",[\"^ \",\"~:x\",540.0000047683716,\"~:y\",300]],[\"^?\",[\"^ \",\"~:x\",540.0000047683716,\"~:y\",420.0000047683716]],[\"^?\",[\"^ \",\"~:x\",420,\"~:y\",420.0000047683716]]],\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u844a4204-eb8d-80d3-8008-55e86a92f143\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:outer\",\"~:stroke-width\",12]],\"~:x\",null,\"~:proportion\",1,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",420,\"~:y\",300,\"^<\",120.00000476837158,\"~:height\",120.00000476837158,\"~:x1\",420,\"~:y1\",300,\"~:x2\",540.0000047683716,\"~:y2\",420.0000047683716]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.3]],\"~:flip-x\",null,\"^O\",null,\"~:flip-y\",null]]", + "~u844a4204-eb8d-80d3-8008-55e86aafcb00": "[\"~#shape\",[\"^ \",\"~:y\",560,\"~:background-blur\",[\"^ \",\"~:id\",\"~u814272d9-d3f8-812d-8008-55e88835142a\",\"~:type\",\"^1\",\"~:value\",16,\"~:hidden\",false],\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:grow-type\",\"~:auto-width\",\"~:content\",[\"^ \",\"^3\",\"root\",\"~:children\",[[\"^ \",\"^3\",\"paragraph-set\",\"^<\",[[\"^ \",\"~:line-height\",\"1.2\",\"~:font-style\",\"normal\",\"^<\",[[\"^ \",\"^=\",\"1.2\",\"^>\",\"normal\",\"~:typography-ref-id\",null,\"~:text-transform\",\"none\",\"~:text-align\",\"left\",\"~:font-id\",\"sourcesanspro\",\"~:font-size\",\"90\",\"~:font-weight\",\"700\",\"~:typography-ref-file\",null,\"~:text-direction\",\"ltr\",\"~:font-variant-id\",\"bold\",\"~:text-decoration\",\"none\",\"~:letter-spacing\",\"0\",\"~:fills\",[[\"^ \",\"~:fill-color\",\"#ffffff\",\"~:fill-opacity\",0.3]],\"~:font-family\",\"sourcesanspro\",\"~:text\",\"Aa\"]],\"^?\",null,\"^@\",\"none\",\"^A\",\"left\",\"^B\",\"sourcesanspro\",\"^C\",\"90\",\"^D\",\"700\",\"^E\",null,\"^F\",\"ltr\",\"^3\",\"paragraph\",\"^G\",\"bold\",\"^H\",\"none\",\"^I\",\"0\",\"^J\",[[\"^ \",\"^K\",\"#ffffff\",\"^L\",0.3]],\"^M\",\"sourcesanspro\"]]]]],\"~:name\",\"text-inner\",\"~:width\",100.00000762939453,\"^3\",\"^N\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",40,\"~:y\",560]],[\"^R\",[\"^ \",\"~:x\",140.00000762939453,\"~:y\",560]],[\"^R\",[\"^ \",\"~:x\",140.00000762939453,\"~:y\",668]],[\"^R\",[\"^ \",\"~:x\",40,\"~:y\",668]]],\"~:transform-inverse\",[\"^7\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"^2\",\"~u844a4204-eb8d-80d3-8008-55e86aafcb00\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:position-data\",[[\"^ \",\"~:y\",675.9400024414062,\"^=\",\"1.2\",\"^>\",\"normal\",\"^?\",null,\"^@\",\"none\",\"^A\",\"left\",\"^B\",\"sourcesanspro\",\"^C\",\"90px\",\"^D\",\"700\",\"^E\",null,\"^F\",\"ltr\",\"^P\",99.58000183105469,\"^G\",\"regular\",\"^H\",\"none\",\"^I\",\"0px\",\"~:x\",40,\"^J\",[[\"^ \",\"^K\",\"#ffffff\",\"^L\",0.3]],\"~:direction\",\"ltr\",\"^M\",\"sourcesanspro\",\"~:height\",123.8800048828125,\"^N\",\"Aa\"]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[[\"^ \",\"~:stroke-style\",\"~:solid\",\"~:stroke-color\",\"#ffffff\",\"~:stroke-opacity\",0.4,\"~:stroke-alignment\",\"~:inner\",\"~:stroke-width\",12]],\"~:x\",40,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",40,\"~:y\",560,\"^P\",100.00000762939453,\"^W\",108,\"~:x1\",40,\"~:y1\",560,\"~:x2\",140.00000762939453,\"~:y2\",668]],\"~:flip-x\",null,\"^W\",108,\"~:flip-y\",null]]" + } + }, + "~:id": "~u844a4204-eb8d-80d3-8008-55e83b4f39e0", + "~:name": "bg-blur-strokes" + } + }, + "~:id": "~u814272d9-d3f8-812d-8008-54c11cbba219", + "~:options": { + "~:components-v2": true, + "~:base-font-size": "16px" + } + } +} diff --git a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js index 33304fe5f0..74b83d1940 100644 --- a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js +++ b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js @@ -578,5 +578,28 @@ test("Renders background blur on shapes overlapping other shapes", async ({ }); await workspace.waitForFirstRenderWithoutUI(); + await expect(workspace.canvas).toHaveScreenshot(); +}); + +test("Renders background blur under strokes on rects, paths and texts", async ({ + page, +}) => { + const workspace = new WasmWorkspacePage(page); + await workspace.setupEmptyFile(); + await workspace.mockFileMediaAsset( + "814272d9-d3f8-812d-8008-55a1fb78211b", + "render-wasm/assets/squares-background.png", + ); + await workspace.mockGetFile( + "render-wasm/get-file-background-blur-strokes.json", + ); + + await workspace.goToWorkspace({ + id: "814272d9-d3f8-812d-8008-54c11cbba219", + pageId: "844a4204-eb8d-80d3-8008-55e83b4f39e0", + pageName: "bg-blur-strokes", + }); + await workspace.waitForFirstRenderWithoutUI(); + await expect(workspace.canvas).toHaveScreenshot(); }); \ No newline at end of file diff --git a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-background-blur-under-strokes-on-rects-paths-and-texts-1.png b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-background-blur-under-strokes-on-rects-paths-and-texts-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0d2bb88bef5fe389e2c0dd2bfa165c65320daba6 GIT binary patch literal 991225 zcmeFZJ%u@LV@D$R=gDV;tnnD6emDJTZ$Jb5+Jx+fD{4*r$viv2o_Qt zf;&l&)BCLRtoM2UgY)5@FEg{h%&a}X^^-mOx}x7}t2}u~^N@&$=!u%Dq8 zyKnB_{)af$7(FKz~zg>NGdS7UF;mSHNy_^or zeEZhxXFCkE!7$MI?8bwCkNiJJAZqpQ|GE2jWkGa*?EeDzZr^qKzX0l6w?+Op@Hv*~ z7R~<#ekpw>dh)-4zf5mG6aR1E6WQyxcm6lfc>h`6t^W;J-2Lxs{2xC4%f|oV;$MjV zH#Ytk9sgzHf06Ou*!XW2{hx67Z%z3hCjN8&FB|`5;##zV!ojxEjBE~#}U&Kp8H zy-OWiXx9W}^~Y~6NZO}OF1x;L63p>%_RF3l{QK+U?Yhi~j7HTk`*MKZIb?5<%%8Y{&x$XXjRro+jOoCfdDcEIXJ}sLqQ4pkB~gGp%^Oqq zN==atS0v&j)NaNTcXHo_hGrk<%BtxY@BT#_fB@F*3xr#)>J08tP!G9cwCZ{CR?BDZyvG8;%f-VC9up*)97q#cG~mWj%;LgbQahZ#6tg4+rZI6f zw}3Tz){*->X_YO3ogE3Iuq3Wq8y3gbdrnxI@SDt&QSjM8A(gGx8ZPEy!*~u+>}IF4 zSgEX@(xFIN^yYP`kX@7gF1^r;tSyR(TnfYp7k}oNzb0m!0k;Z}G)6w7TnQT54`uVL+RA`sOC^ zjXN>mFeIVPX1$hH+(Z~ijhld-lv4iGyjzLOJ)SzT)>3NjT1Q44_$)n0E{mVm z&ktC$5rVr#v z;yn{JbeUP7ZA($2^xLRCpJRbh;%q>5_@su%y60|uKlucQMy=Zmm734i_UY?+ zFFLr}m@BS0S#vZN5-uH5NaA#4oeYn6M+Ysi;HHQU$%9OUrBh+oz0m9g>kZ+y@JKfL zf`IT+l9NRjqc5BhHV`8v!=stb(G~SkH8T*XW7F`3#GeSB31(bu*eF2#`!L8EQ07N} zWYVUEo@p#l$@TEa)Hx52l%en1el)IqF&p+>$SFf@>lTjYUn);SFwF5ZwzVFK5ET66Cd}^`^o4rq3f|LYSccX z_VMDIj`2w{_ZF>6m5!_LURx$E8M=`OJK)|gZcPu2HvkbnWM_fA74`>rrx=Z{=i(@I zzSJScMm>t?FPDNjrzOEKa=~* z;50gAd;_43klQHmKHh!gg_eC;$>eonJGS+FKL?$o`Se(r6FC4l;Y1#jr!W zah`o!H^=oR486&WH?aM|9ej@54I40cjCM#Gw%$*EwWeQV+BkDQ30=a6c3j~)#;o0} zEh_X) zPVk5hb6|>kZvOOjeHI}8I?rYQcU6&|WGrgEoz?}*61yV?52?b`PV8!V8fT`m*NR!M zK5R$SRHzov!oT0Y_U+V`6Q<;7cm=qhH zdU*9?cx&i1RBq&Q1n6T}q(tcXd8d`ut4>8`h^gic`RVK~%Qk(ONj@9n;ZjH#{;~S`X0f>`+b8??-@7i}^L-p`^qVjf zX}D9W#?TU8A}U^4dwy&GG2dF*2skJ>+cVijlo^WE)F6aDY>PMvHDXClJ-MqTv*9sB z{4?&|<-CFyq;M|I6nx*j>xXPP6Aawlo7|OB@H;s`qb-y+WiH)kBBYe^$7zdwOqaHn zJ2l)BAR$fRGwz`fTLY3(P6> z1oo>tiX4AhSZko3fb2Rd@F~ud_BXMp>2T84!pg|BgCTRC!o~0&S*NvHo}`<NbT}k;}PMZ7nPsD$bjWQl~^$TX~P9>+Q8lM}Qp< zp7v1IJVap^t+Fq*bsSA%#aM(HfI7UPEd@BGx(Hm>WyHpLeg87*jvu<>+WP5yg`{bb zZU|*%P69hoKwlD^Bc1yQIcD{>$fsi7;9dH6L%v`l`!+7(NRIMK&zgauzMm1n$mw)N z7e}oF)=@sT!xv>=1)LS^%sUfghqqxNgJEfX*T(BQk(GLmyG))chjM@A)1fEDTc{qh zfoi>xr*dcS4=SWP3Ui+rK0c+w48$sfh8Qi6w(+^b5QlBuv$U*C z0%W^mBE^{T)v@Nzmf7@-vezF~eaSoG*qD&}YgD*JqqGA~KU-}S@}wq4SC@)-TGA7N z-;V*}M>zd78y-|WvDP!VI(@$4f?ZrlZeMn4Kd|2J*wivq%N}$dwCs#;XmNX*p^5>s@OLPYeJ?)E<=^q~3>2QiUf%iZfP zD$kK6<@$0EGLjWB4Y}To*vMEG2;^91xb#K+N20 z3{pq0ur5$LEVOmwjrpEmd5xARxmf-?3w3jOQJbA=38aWU!41Ilw!1+ibMc6Zq(PRP zv|9yE3T72C{>g&aqv6rN4?69okzHtbu0w-cu$73rCooZWGzTY%@vhAcY6Xy zdkhqhKkFZwP32yyazc2>CsLhOS6NMIb6ol4W?)62#hdI7&c|_OUNaR4F8d}p()8|< zmu<$nq1Ldwsp4h1OjxA1i$xMTTe?R@6sS|FgWW623b7h6oqsc=?U&8&GRSY3|Dr{( zH0Q^JO}CSy@b9^)362N48Q`C=$QqF@6n6NLrUAOZM;h)o1X-SY-oe!I>a-wG_fAXJ z`O{o5fyXGPU3ReFG6dxeMR*3h!;c8@JpHp|Zg!4KnQ(4Ctt&SC5L$)oKRp35J_=rl zle5F|`1_ABuWgM^1GU?%^hh)w>W)_4@><%nkk>#xD6Q7!Y|79lEi@sNGgSNbXj+6B z(zY?71_#s*vB;Qz9fZmEJxgd6S+;vVylyT5cKrUMCza&^Ups>3=^HH5D^l6z!d)a| zX}V^N)?keJbC^}tW(B|s$01{6ybWQ(^m|nhzHi{SxpD!pdQ9^s69kR@<-LyKQJ;1KR;Opb9A%+_*IxBXV*MTGF(Z^P*Q3;;KPGSFVjnkY(A}oq z;y0TP#@7$b+M=i5#!>_^lY&sYxWAP6OmJoRCqwHdHV%*R${*T2P_)DST({yazgcbm z3WYW|_Kelx5v>E8UE@|bBH#6->N)b(f`8ZM_C%`sngc;>3RO1PQryt_mMeLn;tWLs zDYfj0YWCu_GRn5LgY?YO8e`Slo>Uv3^eglAsel?8UH3GLX`9*#EKPilY65nZez!A=CAHn_}j|B6GjBB7CnQ@O^Lj<&pOK9fp5{ z)JJ5WyUmbaSME*p-VihJT@$q>w8B+GbXstTA5`VgBVtWY?@Qkv7=rx;=NR(h>S#`5 z2t;nM1sf*2cW!SNUs*R7BMdxPl zEHL+9!p#0p!u<3yP&OdoBs(8TImMIuj8j!<@nmRYdbFyOD#yQR#c?ua}>3m z0sVjoYOG2Z(pkzU52sT-P;AR$tx)5&(w-vtBwpl92Juo@#g2dM=(o{m1WFH(e;vLq z{=(L=ZIf&Z2P^ab;w-u@Rp4tmc)bQS7j>wg)%HS;wp$H}H%Wb*RA>31`cT;8d-V%o z*WTRIXVeuOVu(VMDz%{at=A&ut|1RPUd$^FRU9HBPr|w97P9SFf4Ol*Qxu>w^o|q7 z(P47p#)V+x!Z!*v;5X&7A#xCog%%vtGGDp#x2gq5y&jc)!Z8cj{;%<^#L8!Q}<5dFFRpoqL#xY)E9tTHlY zt$=cO_!?~ZV^Yu8wF72vQidGnu7Nh<>m?OSY1*Ulu{qqOq$qNdEwRBo$1d9^k>2#% zo~yiz*1mfA5|cYY*RbToRLwPY%)RmiY>@XFUk~>O=xCx^-3$QrNw-Z_QPl$Oqc-Te8vE1J3QY%^c_n@;`1l&dUuO>|(B{s(G??>E5ux zIO0GbUvJRkOPIx`RqAF^1k}WlZD_ZZ^n5i%cdwv!4PYq+jOx3gyC` zm~bpMoGuutZf#3n1=Ad=nV2Jn0b-q`mMs{y=l4lbz4rnakzBcFR;X`NrsnZW;h{Oz za;E(Y-c{nK0<&j@1;<^}lDbC)@Y`5h-%m~FG{FNXM%6`|Y+nuO-z&2OJF7?dez>8o zxX+fQ!bThhaDJr8HcM59-Tts|;6_0OenPyDb62*FPfgy)}3ZZ`v}M+939%FhDZW=Rnzc56%Dc|?A+ zUG10576~RtQm6?M>LJ&Sgxrp+mfQ(P26QO=<@tZ4PtpJU^xmh*lr$5-xUiOd8rV`~ zv2KCsyOD3#eOvlw3iACQEnvszYKCXadI@4f9cMgMlSYeQR9@GU+~Df~{k_R}ZMbe! zoN;Kym2}X)%=8-$kR2`64V<)5KK#hZ=76Tld{Ek1rwD*c)qEJfT-jBv{G90mcr2CF zGb5(T*2^$yU`pO2(-xF2g7($-Fy?^z&B-WiZ0IcD5Q#2*0ATW zCYg@jGUffIz9!)o8H?n*Bszp~o3=80J$1?lRP##P);-dOJ}*@&5d0O*q4}uR za9^JORHyn^OL@O~A0#YPg7<-+T;qL(DkFVrG%_nOat}db-OA}G*?VbL%xNjg^ghnv zXI-xbyPs~i0tb5sUR=K(EO8xm)^VdyZLgyOk)vxPdJ!a_p(0>)-S}*jo^$nb!BN(L zdQkgw5yXvGBZ>UhQZ{AitUsZ%%}+05`uar4loQwN zgRVbVK3!01xml_)#}0hRx37$h8I#*_XQxoS`(R?EM zUhb@6ZGdL&12!vho`bs9yJW58>p3blgb7&@^LMWObM2YCNYC^g9uv6IjwSBk&Efpn zc3X#$5hPIUqAQM1>^+pCJW5O5 zJgjg4*@ab7l$W&_y&(h61{h0c&ivf4tb9y~8JmbYYpHv{a=(7?yoJ95#F z?m@av#}J9VQ|l$T*R?+%H6oJ)W);$pXnesw(f zXYTnNpe3w2H|jTFfWH%HH7M*h?T$Iaptp3sI=88e(cT!%GnkaAU7v z4FI+{TD6e*w@mk{7FSM}%X<2t4UB{9aM(AB4{pxzY&lln^U7doqp+RNQn z-n{KIA=jae$z}d7AK-_74;id}7BzxrH~tBmp8oBJpR$ZIz($?m%7vV!)P5OYSwnYd z8!wD4R+If`GfZ2JS0}GXFl#`ZKKjJjj%-_U^)oSQV}ti}uKz}=yCsALo)6J7RT@3WHxIdIQ)QEd>vUSv zL6G=ltCx7?zHgjYbPD(WG(R=JUnVu(_O0gdhc9qhTnf(7Iv{22k@z{+)%QiiQe&}6 zL_6gZbj)fhKcL%oTVq0In(Y1zJ{s4N%w}n!V(D|IrpHe_!-b~@BsF4SnM`QGdi8Z} z+D@C)Hh85C6m*q+;mw9T85bFy?`89y=1v8i29TBneb+Wv1My*x!L+uK<@X#tOXEB% z0@5o1DF=hw**eD-loBop#T38_r*AQn>-C>j3CW+=*>;|0%twZT=%i>xzDAwgO`PvF zny4%=ula*k``&iN(ZuAg_U^VL)F*A$A+jMd@8snHe$J}=cm?Dw;cUQ}kMiO@w2jY3 zHRlLUjxT>>Ed^ADoxB)-kh<8&S8InplwreCazj7A0db0;a#kFgGVuDYzlBH5=|pR{ zQoNo#BFkEtKx$bPDy4l13T}E(SYN%q25FPpf#JczlBlFwj@{+A=#6n@%b36Xj{6ri zvE7@7>d4#8D;)|-GCp5smC&QL)qRhT;fG19vEaumxjK7UZ-QfDJM@XE*)kmZ5<=;e z^`uw2T3J}Bvg|ImZ`<3UiSo@krRjaY>C5?ui=}I`ckpfy^vgqaE0?E`TYJ6cs8i5H zWO7OM9*={PB}BRHpQ>v)QDQDJebi4h+cKXFaq2N99rFfWSmM z-q__2zebW5jc`z@b|Mn#RSM5`bADG|#Rc(b*ETqRX&?`w=LD#`%h!Q=`JFs`gUQd2 z-!pOpsV#8LxBV0l?Fx?jP&*|_&BPI3K@-1Py2Pz2vXJr=g}Y75=YRiprMB)Yz5?J4 zaw>P|mG(rk$xQLkrcXiGfZom7AT;IT=5? zZHGPGdO=m{)n0HdXT%4ZMA|7lN1TzcJ}N-0<`k zNC5vMCi$bYM3toa4_dI{0Z%QQi8AGMU!cgkC&Pp6{DjQvdX+-b@is9CD5wyi*cIBa zsCs|RHyhXSqpNULDtq6wwZ4e^ZE>dZ9M5(|k0A=z?-mFH!u|QHUGRmpz`;$&6_$$a z$V@8sIk8zgxsILw$-cLH2^vSUi+8?<uxPzopbpptHjTcOuQUh{M^Tbo#1fo}sMfNdo>ZAHOhlTWKhiZMQizaDn zAf=WR#@J@*0S!g9aatirza!{+@~w6fNY$5xL^ z@3A1SPg?GqFAv>5USmg?pSzmK9CZ%G6jHtO*fTbd3k6oqRYg>#yV412!46+lFe);p ze1b_eqM4}H39eqxn;9k%Dst^qMsbpJJbDqPbw7+qrkuUnOB>}BB+1shJ;uE;2_i5S z$$FlO%i5p{W&fLh{vivgi55${AzJk3vf!xp0ge?2v0&xH_ zRhqMhpK);-ljyXh?_ysLMo_GoZT{+Ygd|#XkGcHOhny>Cnf~Q3O*F`%ACF?NsLMfM zECilninVzW&J{2nU+94f*`mk*o3{S-k7|j;MLr+RaEUkI!An>s(OMtz{_gC{*9PnO)b31w!;EH0=tmKkOOkC}`x4Q{6O#^Pt{v9MdcEy~TG^e! zpoSWopebj>2~>1fC|k#R9lZig8W*yq1jMd;X+qqdZvj`WE54FK@F zLj~E}mieurpZ@g1C=9)+n$DF7reW@M9$~85CL<|XnR}DlOzeyN9&z=pf6}_=}@Zo6p_Z=)N`pdD$(OL#r573zouetl)AQ5aZ_Ml4dNahyu7`un@a zs@X4S%}+D9*s1#vRE^Y)$eJbnDOyqlSbXLaUkF)4efJ3U$Ra^ZF*xX@r$`hxt?d73 z0l#|w8Ax);>V{T0_3v}+R~3J2-Zuo6)YZ5|_3PhB(=l-c6@wcL69yv%3;GNm2^CYw z*D8N-b2x}G`!>J{7*%6`M0;vM#RKAeUt;>MNt*hxSy@b!uC^tsK@GA%2XC9CZss59 z@ae3fhS#B-P1TS{-OmIPoS=QIb$)i3zMuqgp+v$}ZnBz*sM}wDFe)>UgP|(q>eyL_ zi#O_|-xLdvz@H}|^<25x`-<($mV?Hd1%#;!ovGekg`^!uY{#mXrlsEq505HtEub=g zj5m0npTa96o!(5ZEMkhPijc@gD$7}Q<1XONwU&nr2J3;9)C*lX-ENQ!Ou5%t!l{q7 zNYGJtvfZf|%8^mOe!p>MV5Xai@OWj7ZOj&RQPGwS(vSMnKCNQoBh)3?9b`@WU4tf9-SF?xpLcUdjfI*rME)l2ag#@5L<~V)NAqWE%KncZkB=r* zPiJmcGCt*K@#idPp!4UTuPAc>S2_!n@a?Hv$4Sis*m&K@XuVzCfpXZRQX{`|?)Z>B zQTSM`;Wz!A6dZZ{F$8y zx~VfL{C7&zFFzKdN7cU(?*(U{Ka#>52b7 z9};|i+iO~YM&gup+JI?_ZI9eEc$>t>G1zk#EJzt^!|%1^PJz*`l~=#~kru=+&euA| zPKys*nG}0S3byEq4-PNVVPHWono|L!I-j%r^6*AVxv1K>y&Wmoz#mFqSFHSPCXA_+IFHb;&2h>Qpt=lH;#LIxIYS zQT+S7OF8&lK6gUOy9N&mAc5r3wzPFz5(&Yg0}u}j#0Q64Dr#cI~Cy?2-U7UHyz{C87G8~c+7NpejS7qlw< z?@T2{f6QMoKcKN%{C?tIhv9nn_mmxR`j|i2pQ~DJ&lc7T`25!;!O#3?7&RIMQ}%Iq zP*~~X7$F+@+PN_de@m1)QzX`J(Yhkbq7jZUTNoUu^i-nCfMQZaLJAXk55~ZRqSX`zfWBxp3 z@}Iyk@$T#To=?V&NVr{c?AFub3dyZ36XuTqWBSkt`i}Y@Y9B0rE00`u$j1zeu$AA^ zu@|aWg=x#IbMdHApA8=~4Mzm#ykLULWR8<(6(K5V72%84fs`_ zTXUm-NJ>Ha?i%ZSOhC!k@b+d6pvnXMJ?=FuW1P<<9u?M%B%EAMDerT3UYi*sLg!$6 z@$_`*avPkHtcma%r$1G|mX^Q9pSvH%Y66QxnVe^rM&!C`hopm->XWA8n85gL8qybFH|P@4WQT&a6RxKe&cq;VOiMP1HDXwD5Ax1F!vuDq^PYZfwqYCRB=@+%?nvRU&zwOt9agm54F5C(&WOV*+;f1Zr zX;H03+r&M;D&{S*`lp3}Gy7DK&-kTnYpkgeNJd>xu{yZAI;__NR9k`dq2*#wX7DUs zP9AFKif<;jtx*qg{cE=ZPKz_#x0Z<-{4}l2w6sEuUuxieUvJ|NzY5k0yiN^S`gosY zqgl^T{N%t;)+BAa^|6ojy=BR9W*uj3zwT7J+}gYX&=<5P8mkSzc?*jwH(iei$aHkUl9>qga2chvq-PZ26Lp5c?hwA0?0!k9^MkZha7>;mq>YsHfh1O#QXGQO#YPq ziClbS_d5$EP&jL?AKt<|j^-7sE)x>s+7mj}M~11J3?btzkYQFJ#xbW>c}?spUt5?R zYy)TjCZpHRP6bcNc*-(vuS#LmN~`=L9kSSa8oJk>r^?l}?iNcqGU~X!@L(o)%Cw>O zd2p`k(~5i+c$D8e&x(#jmpdOKM2rs0kpA?dl?%V7)dc2=$^FOteUsRX%h|5FrbbM= zR;Dv@JO|SBfOShjd9bH8fzSPJSNx{ZG_N!#K%4)7&#+^92vccAsU>LGyff=ub_>b8 zXyn0o{r${GmJSmFWBMs0%WE>aVOWo(vw}}iInC0#&%eC(B)0nXY&?X4>_dFb(ED9Y zZmvvoSiE;9H%6g?n>*S0>PiO7Hu+l)72!)rvY1Y+YM}~;18P&6cqV9X&=@NB*~dTi zUEKEO?3VL}p|@4`e{l~B8!5RszuqmEpm}3B+k1>W?V36V^SgUDOVo- z#4}g24tvgC-!UZItQfw}b`x&+#dOPoPbZ`QIFIoSj_i#hje?A!?x6cL@2<$6jv_rv zHq0Ju`&-X#_H999g+9(e=AonG(Ie;e-gcQJi2-oW`{xCA@pWd>)2~{tt#g6Nrz&X# zjZj0;kx^4fRqteN5hvJ(jU)TY`=+I&nG$+{YxQe65nqyVZk=s1mDHX2Rbas?( zD)zA0UF(s>-&mZVq^UoanhNIO<9{dIUke%+A%hOlXn&D%SKNK}($_$)yFM@!;r78l zvR$}v{}}%vW(sV+kZ&f_75&K5K>vyM-`o_BSfU%88@k<=TO{n-?0oXQwM1!lah5c< zAlpcgWDozv4UJ?&eN*dgJ@ZlcdjU03NSb_Y1jp+!i+dilHAIuEb8%oW>?E1(P@pr-rwrE77yP;H&vDCj1c6=fUrq z;dU3=E`>HZGIu!)K;6YC`DRo3y6%$otfAjZ93E`YWbyEFymw-4_LpVJMCWPmomz`* zt=QbrsaK~8->5X1ET;k$#f$|R7RlR^9o2JX|J0Sr5oVq|HA3=aT_0-AqtmhG?ThIS zA92{%hw+FhBbS!uLRs6MIciJA*Vi_E{_@ueqgqKh=(TE}`+opb-O7#~ml>%)#|d!* zE#;R%>^_9u*Lz(_c$jKP4#L*_6I%W8+qn``B{0>Bd3*@)xx(9tI=k2o6-*1Ztx1Ef zqA8&!%UvnyC4oc30(zfb^-!5PuKegQLVe?mZ&55ms>n#ak=o?NGw0{gcawUm2wcla zgW8ESiG?W`=`j*>2=o9M>c_vwsis8_3e1IVs-VbSi$gcurY7HszsI`#OIoeA|5?zx zC}Y1hRJjOai*J27&qv_n$iJ*Kl@F8z|8qtEc?=V|$#mD=0F0r6)!y?R4=!XWXhnda zUgY|k6sEe^PR^e))a#UAmt@c2@XYyw=RqHu(5 zChcfG@}yjwB-aTG{-a?q2DN9+(>mahHhOZK>R08eM zdszBOHk3<;ddo7UH@~jvpo006A1zI}((IY;&^qZruXi{+g`wDa;;Vi2k}YzT1TdM7 z0Ht181#&^5JBxsSeI-`kSOU^gPjx_3YF_XADc+ua>UKSG-5vDr<9VpLIm|mH&-Y(Gcn6E-$!ddF9 zN+Go#$(IlHQsA=ZiyHM^ zO%a9J;tvtGU4QCCUTc>RxLC%^0!b^LgW4vn1m~{}WoO7`j($$jaFY=&#kRGM$vMOg zwOdeEFH=&HD$P?Jx3oQ9PktgJObM%YcX1YnYfJ{y;?}mD?u*QC|Bn{Xg&`;!^iC+L z9X4Q|Wj~fGwPn{pEI)14y9v`f;dIJ|y<(1qef#`+zJ-k%jOo(Jr zPkYVGYdvezXotDxtfkq%T~R#E+ogRp(vWF%FZmUMrIswOKwDt4Ira@Z{&a5{{+^@bzx@dgJc<8p zWbhZg;t?VCW$ghb6v%Dfn^R?{&T{x{&H$!$G<=?Fph!3rEgu;2u^7+Bl+l(q^?#@D zDZnkxod>(-m$jUrRD?(zeeP8x=~u9|?Wwd(3k(O;_Q0sS^>2J8$_D=V>B4w(?u@$T zRuAmcJ4_mZo1Ge@Om328T6w7HwiA6DX8M+VKKC#3wP#JqB7vTmfgIjiz;GK?&VtbuT|sU?T&-}gFWbjVC(Hb39e z*m>&pR?4Y$M?Y|ykPwi)tLG%#s2@i>78PWG(8qdUKm#8QK5chclxCRfK4GbeZ-8VR zCz=%^7AgbQ{c;BMHda|9k8}#($Usc>L~?T|-Hp3RiagP}mE|Wv1_8pRTtD{uuFhl& zCZ5vJ^o%$F`xnZZI&sHo+%=BvGDhx}tz@ViSLG1*%T9Q7Yhy9ot^;*2K-g3w*R(Lw zZw`i_{IBlm&QF@@!O&AdMT94_pXkppR(LBH2vmaIJ@-- zTA5#5`lAaE)wAR0IbMjcBP5C@JKkOVXt^bTOZ=xeMd630Nsu}kgcM1*MQVl^Rt{tk zJ{MrjL)!yc$0n`aU*q%2Q|(T(DCN*yuZ(5YmpFuer>pJr$Wul8ZGXx?1YM{l+LwZf zeQMHC`sY8R@~wtm%Q>^VyGwz#a$Nd}(K|dV{Q>2K;{_OAcl@Tvw?JxBc!A`ogoZOj zUb?z?l4fpS`=P+(cc*K`Df=E=&`|lxv6_O)YQ#mPoLKP~GqLzEU+|eNyNd2sA}uHT zI}-v#+HRx3A%lT0+sKT;u8UMwlRiB-$~UB6sL)?;-NBo>C#-h@-3@x3_&w4L>kq4S zmEz~mzLaqPTBvmJ23xVi=wXCHu3KxIWZ&?uKipjcmNaO(Ci)P<>IcU^6z@iSZJ78l zXPUbCQp8w;G#_mIWUmbPwkvw-qRA@Hl(XDH30z~3OldHAZpkr*w(Ii|9?3Bn4|j(q zw^gEsk-BuC{*~`fj$aD^_{veohq2Lqs3@vsN&BR+SH7kB604s>*m8!pX!Ae~nR8-k zIOP1pNIpw_S@Dd(F_wZTGPn8^?0d3%n{+0_kdOY7kIKB$rT64F_Z?&CK!@ZHDtlp` zPcnG+czae@bCF`Zxzq3;JaOlJsRk&j6M31`^^umB3x~Nad*{`5oxR5sj=Xu_I&?&O zGs+@$w|19n?(25S82Rr?J89oGPc~V=LI>g zFH1~P%*rPto?rtC+o?1Pj<=(ZJNr~5ea_6+3?mD4&rDv6v1a(Pck6nF8s4#^CQ}0# zrOM{d<1s8oL5mZJmPGk zlvLcFIZ<#yV#NUx3O4)z34}uZmK@{aGOF;_3~uj`D9sbb3{+~fx+?dvoK@u}0i_qb z51SLK=futFRCzr)U|PC+vl#&jT!UuzO)w35a@<62=pmY)vF5g#;DnPTJ%c3AFaLQb zq;CHwX?1F56yxRnkW-^-(EjmRKWUxi@*?|p!9rtNCHwC7QX9sEtz((C==Xn+8MVKj zb9i(h1Zp9N0vS!&Ypjw>>!C!G z`eVR&Pb}##lgVlJtM8^Q31WmMsetm!UUqJha+%tV< zApSLuXcS@xml;|3D%VcFl&;g+7YdB}XNe;pdW>7f0UFPyO_O}BBUgHPvOjn(eZxzP zSfo4lIZ4O(zA(qJQD?QjIy3gPt6jcS7MCVBy?^gP#3n*vE!r$5a+yn*;ee%p?%DvJDaH{h4L1 zL~+wY#9jTqJy(ZYnc+w+E{psH)sSggV+B(w{J??r}qEo zS6)SuXV;Jx-}&)We(=e@QQmtc=ZCs2`XTFscS`Z{=TKiJ-PyzTtAfSoEBE5uxyDKK zMdjlJ-4V;Z?{fwd`}Wl%BFF*cC->QA_Zz9v4MI0{z|>^lTIHba;lC0Cx^y1a{pY8f z=lheu1&+?(*-&`5<)eMJEz`!Kcf(Eprc+i#=A;a5^XCz#9l+Y&^i23B?|?~@EVJHk zpkF8lFg!)cVs=I{0OzO!rHYwShxn%1Pw|$1tkBhQWmzd5OAjWe2be7#&rK_6&oU6TWY-W=A?NOMeGPWwEIer6h{h+t3NS_XqR2GA zj`39!hkX?wV2)kr$@C`{q3EmrdS6{XKnausdycq9FVwpL!xkzx+3LOib%|qWMc2Fp z#F{$uYZR|jtY}BGz@+=S>!Gr07vLsf^v{{r;{QX`TX412c2T=ejS2+{#flbpXwjl+ zakl`$Deg{iX^Ryo?iPv!2oNX|0>N4!MS}&`;t<>&4&QsuH_lJkWA8ogb+0++HSN!x z4n#9z>kfHsUN5U#YPYqib3dJVd7P})_{K^~bd-0frL|5%cXM1IS?w0u&cjJ4_xjqc zua;Xhg8E=pj6fugcFWXelqPa$AK`IZE^RIW{8RjfP1T3)k0l6%xy*FC* z^}5gF)RjZ8GijJilEGcgZcYIeir%H}g`^l^P9|j(BMAJiTJFX0dt~dL@YXhrQ7Oc`QM&tPn z_N}jM3!cs9BRc>NS)ZD$+p_TZ>VpF56#aE_6J1YNm9NeIHjXUo-Sso>9~mn>OZ4~< z?di?|bLh6_a2;cIvNCEuGi2)Gm7I3tf67ZG+&Smtrvyo`L{F3KldPBimid`jcPL2p*8rkM$4RWl>4pAI*- z{t8nv#oa_sl=~zPxr)w`C+>8n(`>hR$m#V8oHZ}q=5W<^POoEjMMRKU6CvX9lBr5_ z-uhyI2E}7}zLuWb1?BjZI?xd!Q`f~vLFIj7OS7b5|Es+hhuuUNfi30G$kvnCXBJC) zUAW}==#}iwWxu)?A+k%J@nfdE=F8DsLx10FwRE{%^y?CCdHg)F=r#UIpprHVP2cin z7kW)g?DsbP>X)y5tIbdzyi}0Jq*C5*w~MSze=lt8;b!q_?8IJKu7Us4BiPV(^VjW_ z9bu_mS7+XacTV|?jy`;-vpLl_wJ=v?);ARoD|DYt+H$|#rWpI9bp26sO^@f# zlCyM>hM~)lR{YxBieKuMYutNrPLm#>gFW81CgYKAiCo1{BHyE6fTV&Iym) zlJ?E(NW7Hfo3Cm*08fbKgU&muhzg1&jV}6jseA5KB8gx(7SE`x=y5z% z%wH`?C1Y!S%Yb3U^UUOZFBj}Mr6Dbm4x0kis_<+i5%&1xlX^GWw}5UzY^66(IB~gn z8R})4v2J#=QpUrxE&qI3oc!$JyhA~K`K)1ENCoP2M}D{~@)x>k22$g8Q=Hl9$n)+D z0MV)6W9%WTw1w!rlbE@-lF^$f^v9MbJ2C9hnpSGD7FcJErkn9qXA#k+!M+(bkOhc# z#WTbtq3i-lszoma`fb&Oq~!hJU)vjF=Ishd@hKTCkUR7vWK;QRP!_&a^{aW5u2aCv z^-!L%GsR4TsnH<4=|ZgvU+*L~u1ibzH~Un-jIKW?*ISDE&zty*_3O21|Co1vthDQU zD;sD`u3QN+Ly9JC{n2Q^9CwM#`#I$8<&`OU;1!<3Sb+sTr$Bes)UjtmSkD`m?7n#62#(&YA-3bruk3cu2qtECr`LhBYc%7R@=6= z^XQKr%;2BLBqs&uPKN`}OGb7TZWCVI`qdhJVnJszUQzIlX$yb(l^xR=T0Sm-!~TaH zwmlfk7rw598+7ed_Z3&(Xc5VkxxZpQ!$?e^S~AIBA|=NBE(QHMzYyhI{oh@{%UG^1 z)@pW5*7Uvh17Vn&#}Am5-k!bGVEIU3WuzjfTrMm6tUc}T6*V7jA|N$hZiXk2seF6d z$Ma3~+n2eIo;Iqn|JkgGZfCf-FjafO;(+_X!snS-%IY}xd;sA-qphH<+(Dx)Hwu#U=9SU-UaaJ51gymNfk%)q#g0s-XdCj6Z-JtUl)quhQQ!F`<$?+n8^$0^OUkN zWg*h-vIqrLwILD@=BO(uF>&h&Dm{rUAHm1`ZWhhgV9$skgFcJs`LW~}eFx3Fru*KS8*C+?EVd!6?r z`I9Wm9kfYWVd}Ds8b~n&Q}l0<;CAi8EgD*Chx$C~cN%!n+SlPXdj>KVLe^TJd+5~e;Q>3_?;yT~iZNu_F*6u1}!&Db{(>ODp zB?9>n2W4V-)ZW(Eo{tW8b$Oo6*{>a}^&t==%iE5v@PA z!+d|s7R*@Qc{n{nh@F+|>PdA8U@}_!O@q(lL*-%hHeN}s{_+D6`|I60gmh=qQ3rvw zMkW{C&xJCP-wos!z6leVD^C^$j`}^fV%d$dDm}KMuhCm%K^eYtbsKoO9w7-nf`hBV z!&+Q7Zem-X=HlzSV%jh2G-$dAx@+SQc(n6Y_+&eX^g#C%^$6}PADxy@3*j;c<}rHB z#nxX9y6&b@o!C%OlY&BvD@*Q>HbINYaj<`Goo4eftOYD*J?;%MPobdldve+Hxf+h$ z^CnS_Bf9yl7UHqoQ<;a+*3}-ZHfG6LZTbVyPX5(fqFWYQ($PO2H;ru z#Aa^k(| zfSQ5$I znS(q%#p8NJ2B`oa(zQ%%rE5YwamD8{NUm|<%4W0Mv(VZiVOVO={WwK|)ThA}G!3vs zUIqp@eLL(jijuv?v12#frOe^kCk}Y+k+5sbjHY>ApwmcTt4dzLBAQa5Fp+Hw^oUlk zX77wT^QSG3t`N|9+%7w6MqU$N!crqOQh(m8ChZ<@Tm!Gny0R_u2-#=e?2LjvOuW_DIfY zYjxziGLP3=KS}Hi)0yA%Po5d2M1ME_YJ-v(`iuPK@oUdLnAAnCYEo=2DOpWQmsVf* z{_S@u>KIi{Wny$d)X1wb>tp7)5IR1|RT{_Xl#YOupV3xYQh#~5dp_RIRZI2gB6F$J zVAxx3=t}7J2k&LK+@QO2Qmu#Df@eR!E>px>t6Q0hns5(GDa+qPLv^wWf_s?=7SfSn zS#^455}WTV7pO=>Fe}Tg`}hs(>)TtlSf+GIuIEFuLvVa*p`6{#G2A%0!^lxjOBS~s z8ZtM&`SlXHtDd*?``AQdaOrU^$w(At!MJZH>fM8%9lTjszfXSomLtXmCN#|w;6R6J zZGWwAtw*PHSJqL#o{u*Es4SJ-u4UB=5&-WGdTYWnM;i+b#pz3=l$$o-!moH{56I;> zbK5>Ic>7iMPg`pDI?YKt)}SAh8j+I|HLL~+x!xEip+~@E5xWW+69eV`s7vWiaeiI9RF%Yfhg_`ouzgQeY3JaO3Ow`&0=xf4gLev z{B~%irt@;1N9rGo4dnE%Y%1=Cu){ze-jNd=74;`9E!%=8u<4Hl&4;ZA&N{XZMx%8M z{s*W-QlF%U{JZa+eBG~-{?aRt+9abkc5TcY&X+2 zdegOWn4*^m%0Q_-0=!Pe)#N$eGcN&E!^@IsnG-|g7qpu5jC$fznh54Un_$)$8O1kh z4WeC4f=7k~up<>N?TjEwZ#@o>*1B1?`WokC&E$Cpg08E()=WgmzYmgYoxzS;Bg+4v zK4iuAGdqUwg3{JwB^Comz;n~Zz-+oJg2^lQ@2d}5n8>Y4%mCej|EAt@Fp4w^0oq3I zXN!rO+7j}~vg;$0%L@WnUfpcgJi=u!=8~AF37_~i*9+N}I^~;%m^Xz&5#gNne6j>E z?z>Uv2TKVDJ6fG*wzUt+>=gaoIjWWi8Ak7@8s#jqnM35j%Yr8zQVUp60B{BEK7&F% zVMWoyKqFO8FXIO}>fhEQpYzPq>ZvULY*9WAh4al%Q1}$1yO-BjvTq#NW@;-1Q8&uQ zaPXb7$W>OG!Ss$>a!_^h`=Z;pnS-aG8m&QE3uXVHjN8Rqw^^q<Ic3MFK*t(ztty1)$iwx@+K3~n08CwEOsjV(C(HW)3SMS5o#NjXRKtJ z%y+8RYM#7y1zL(ZD8H&%$eyWEOmmGFh~*ZljddCI_X~Jw$qoLin#7{(QqJ(;I`Kt0UYYuHxStdSPej|;Gz15?yI#On5QYs@YT0J5yk}eDN zTc*51$n^@c4Up|3(LGPk=x*x8^VK`qV2@$*G~{xUa+t~a0c%M%)>Wv_tT#s1YHOYA z;zDi3V}+|NG3bv+6on&4kCZUnvHfEUQuB^PvST>B~`L{ALQJxOI%SO!cbm>h9XXB}EZdMRP z_^6}bKpfL1>0p)3@N)A;RtQzva8$KoFsWX{b7@{7pLm_$M_$8SH{2Yu)a~>~W0YPZ z{2W{#*r9Z>)%`Z+>C*TPwR+@=L1;zk84r2vEbWZPSZb?M4?}XQLrn3MiP0WH3Nij{ zZhY!|-UkfdCQcp3t24Cec?%LN6u(%t3x08>M{7H)D`itD`k za&>e02VK28-TO=ZjqYPv|RF)%mS9;>iSbCLjNaM1obGe4F;l2%!0*sD3LDl!+8 zN#_rk?$f%h^{#UL-O9>S7A$qNuVo;Wz9c2#bs~_~n38-s{HqLlGUINt7u+ny{wPLP z($q&>+Cr}OCjZxOuYQ5_a{0cMGs~89odcW&L%_`zQ7kdG@+Vr`g=!)Xk^(Y(zcDibpn2Ab zJ{oi(1Wnb6r3MqZ%^89pve}Gv55zEB&9a23lt3eSXZl?VNQXe?;f&V|X^lP3cn=ZW zY4CO7AKye>>WXW{Gwfic}5#=Dy}4HVJ^^dHZrd&YW*)4pKnv`hK_I;HolUZ z;^At7-i6U1BYI`XzJ`0MFXb(ekiwqmhM0lh3;Jo64==m6*U{&aLa8RVt?lHjiFYMN z=J%Z9vLR!VW6#!%hQAg!GKE1J*~9W8U0K2pywfY0at6Jpc*#dNpXQo2&mJ1js^MnZ z=93tSlB@<)ZMM?Ae(tjKk3)i3Y~I&cf9o-M8B&4y$wSqI>5?bBFb&nZU_Cxp;e zZ&cZSk$)Q`?kkVF*abXO=2Ie^jP{fW9$gvFFn`k9#i{q@lChqPuKX>86sGt3XV6D`@CT-<=`Zk6-~JL z15k*YI2=yJQ=N=&RrCGvhFPPSXu01`9N6M;tA?3^)0liq(fw-g;Cyy!N6d^*t+?iZ zL0k@}?fyMnt=tr<2cB-etz4QlJ*x>o`h6&=89A^C%?H#G47@)mtf^6sz-dNcQacuv|vhur>vK$dn{Ng zjrQvhINED}rv%jh{f)2 z$p+{y5|Y&R@x3mpFbi8+*Oc2pCr&oBN%l^bi{55Ekm8aoUC=ezaNCq#l-u7aF@u>z zJ!`hG_u)VWjqB~Ocao*9>Ktno#LIdN_JmyfXBto5(S^weMOM$Z4oS+TLGBb7$C@Sz ze6pkxs!5sY8-Ke`9vEb~7(z?7jRB+6gG6#+j&()$`41v@cmr(mQqF0sESL5LeW<}fX8`TbvTXdI z6T&HU*?ZlYTYJqkD)rhVTHWQHMtkx9-35eQ0#neSLANqr?6!&;_1@q#QQMl&Y~SGO zY!r&CzM~?#T)|t4V|~)+aA|4t)dO<%{82||f5XFd6|ujgFAVTK^}H(}hYGX^)|0b3 z$y>{oq|IeZ?VAMd+ATw$t_j<)@KkeeY|mDYV3x(E8`x4-glmJssmyHM6tPX?Bk1Ka zED{>lAnKgU8BgerWSLJrtumUM`DCbwJ@YK9E`zmU+{B%!83SM1vm8KZaq%__W7WKV z3-xYF*6;OFE(G)y{<+WhUMu@2P!92HXlnGM25PpS#UG0=yh@IN+Z6``Fu`JNm;wki zf`~B$kvR8@M|$!hqzRzn@vKVl_0ScI_TU{ksD2i1fZYwZb>XVJ;g)n5100VHCRe0I zxJpnMlEj##5chSvaB?DnC`HHCM0;x!5c&4f2OrjJ%peZrK#t1XhEszIj=Qw+J90B#8Z+Es@uNTkJQtY}PZk`+TiXf%!ApJ8H$Pf8SR)GSiS3JlO7vwN#O2pW zD)0^4gq1+%_h`L-1qNK2YHk&m6){f1_-W}3o%vTguMKa7;2G>t8yg2?ebV%;I22O3 zu>g2ovbSOxpj7>rvk6=G++nqN(pv!1Yzm7B;)_SSiAY@S93KDz5fS$t5WdL&d0D@| zcK>=(BKNm#etcH$c=&f&4+wto=UepU7IxaDd++^0dV`W-AuTTTw7yI)GlV z>#eUC0FtmY9={hUyJj%u$=(h)>sR)<<4}2|TVRdKqF>fYlU&qH;Rd+lCVp91{Sw*wJ%k9&WSI5ya#0L2{JINaRq7D!iy!!tfr`%yOJ z7@8BP;K>hK_%uRP{U2uQX;Y=VpsI3`Rg7Tm1qL}hONY2inZFyjZk?b~9M#G0&{+nJ zPU3km5;q8`1tQ*UiOG_^{p(rHP+I%v2h6(2iwy#N&)mOPT%`tE5ZEPZdiwNxd&xyo zJfhuv_cn*AR8caxN@HWAIN*>zi{5HaS|xr%__nB_p?Ng0Z>jsdr)}))a@rO1U**+C z6EH%ldn9Ce_E)XM+>n zJ~gizR1AV!eSa!%m*vYnz!rERbV|ZGH;a6$iGEW1#N;W?$*P2mjHD(kMFwi8OwUjp zy!qSxJF}bi8mqLqbR_`9<_mqZpEoN;>=3wiOkH`;qxwYS>iJb>;^-)ZXbc z)Uqmm>{v=C$0=MVZzx3q1P`(hebn$frHv!x*9O5^M2SjBdIGV?UvtddNra6NecuzP=B|6SgMKCXIxi-Hvo7^4YI>ZM zr3JdB`#Q1RM#<;3G=T!63Ln=5NRxQ!E&aGh3Y_Ku=ZdZ4L{%%&6I0F0_(C_wswQ13 znm6XQY&^t?`X3w=9Zh&sHzp;%_DoxX{Pg|{*x&M#HQ2pg+EEvNbh8re^sYM9*C6Pi zg{qhv8IBy2ut?mlSlYB3Em32;Z0fbw6Pka5z#h_E;qP#QLK`ZR%Sy>bu8&$iq+i$7 z>*)NpXtzr4BH5C>8m6O%&^3K?RiZsty19tuORmDX6sH?I)*XR`IaE^wF^Xoah6E)GK;59fGP>VMtZ#*&Tx|6~&QQEcAWmQ%SprPl4AF(i?bz z&J8pbGwHvzU^=TTLg#MD3K)nbo{3zrP4J(MHH&d)NBiCk8MjGtnt@rDsg@778QG(I zv-r^=GnGclF)oY9nXpG5xx*qAWyFa>e?H^jJmqORm9=A>J>Hh?Hk-k72*Vo>z(V~( zmUs{EH$B@Ex#^2B7>X-ejh$Li64s(NRMPzklvEzsBRRb>wAo$1I_}ZfOxsr?US@F4 z?R0=tuwNhpL)vh6hZTlJ=$26xk62x~NN*+&3WJr1nZgiZIkCf3Jn{?#U z^)PJMDW)xpy7rhd{j~ee`3`ez_5vL}?E@bp)K$(mePQp=sWqY1sWp7_S|)0%62h4D z*e~owdSx7pRuA>?j0I+*6~rLZ`c_TR)*wo!QaRTpgAq@0Pi3R=LsKnzoBPp0-f&(S zwOmX2ah6W3L(6!pm(C!TpAQ8B8)Q_gREXZAaFzFNjp;Qm)uUSO{C8ZXDmBZKF3dT= z3^^zwdzchY)kHkAN@zefKoEoUX`rCOC4>nZ1MR-#6HOEq@}0=EShk*(r1 zaNHbGGMnR$nTC`T&Qk(I|3uq$>ZDBf^C;y3wL!u47G4bE7N^&t8ua#C0DBSfVb^!U*G*ri!J*{PM#);2XEb;Fv)W_-0dKC*py8!`G!+@*%2xo&(|uPE(wY6oc10l; zddm8+_#g+j$$5tcO2upZl8mwwu$5Sbxyb0SdG)nY`Y|bfGYP1BUH%~XBm|kPu=x~Z z8f?@N;}f>6dEg=)S$7k7IlmCtcpGwKaf4f&{Xex|cLe_fcw25ng6`4(koeVAWmYBf z%7b8IstykCwaV=(pXh@=@OBgUkohlwljqnWT7%nqq;;&}mD!H2 zq>gJACfX&5;>4VrX!l=ER+Dv3?`)n%l_sCd86r;|A<>ATw$IfTA!Vb`>~;vwun+GU z8ER4|hLHlZ^-Er3`78KuDxX(L7=-BBq}{zb$$@pQc0yLZ8Km@c!TrkT=c1&0Z*U!I z7Z!VEozYH)dwP+LtZFP{O)6A-1sXWYQ=3ZBM`u|un`FtNj%(hz*%33L{0jf4_utTX z^LlD%sBHB+`rkw%!Efqgg3GJ%p(gAGpS|i=A+Y!($2kzkStZ>W2nC&P4md60b+R5W zEW=gfWZyVj@2s%3xQ~?n#Owq393jNIjm)#WSseTwI`s za+lNt7?zLqzS~r9Q?&7T9tCr+tLxH%lOz*09q98%B->Mh0i*@a9P#pD8+@rFPPVcz z)_@$I;GZ5Oyr|<4o;`E#r0__v*)*w#QV>S>Ye)BJs#?gecTX;4Ew*(3J;7QYyeB6c zxhumza00}$9J&+OR@OwzIsokxZ9Tl|FSE*Ac{lUQJWj*SHe=!=nP$#RSeEBj2Kix> zUa8r(b#S5+NRaM_3ZDr;Huy+RA};u(Hq|DsgS09hOu+_9e{kG53=n~pRWq`+keQiK zsngW6JfDmRB+EA~U85d4R80o?ZgOIJVG7DWqjGR6#dG0X7U+(m$&1F9d?LB6_Wo&v zp)(RkN%afyONDTyj2IPA^Y6RB4cz2q?V}W2<7*nd3*d>8aUlGD zj^G>FulT`@Hon7~)k{BRFMiC}mPBWHrLuGx#NQ#-ndTz!cr{ro3YCtNRy?`y==*;= z1xp1UbM=^KxhVJv1lQ!wDQ_xpniv~gT&Z7sh6J*x2nn{?>v4tz@on|ay83Nqt#_m~ zjpPtH4To!Unk*=q$kYa3#`_$eF7{sZAS#=(3*VnfO73HWF1A0FEd>|}KlLJknqEV< z-cjSa?&|4d7eWEe#YFYt3&VVR^DOmJg2VBZn@`a}M<@C3R}G_&FW=TO^#B@AX}V!` z-=>)EHT!46Rad^^_!d|YN8TNJ8n7Lrf?_=RBY*wV`Ri$>#yPumw z&fGUWu@$;uY*JMZ6qjoZont;WpC2qc_RJLw4D&ylBD5+8!YUf{BO@2)+7f2+u_h|_ zCbfnC!7!TEY*rU>QuuH6UK_9x$!26(%xAke@0yqPG z7QL&u`sByV1qX-AaQ`DXE@O7VORUbpKQ|UaPxGoWoo_y0+U5bmZ;-}@7 zWUMg(WZ~Y$W9;rdM=MB>PgPB9{V?WNc0v)4F35S$C9mA5pWH4fgobTO#L#siXr%zoBC6PL_AP5KRaA*~ufN-arfxr2{kUHH?9vQnvL1U0?a(N|m% zTH>dzb8%Va#iPpORzfIIq81@=wbuLMobnuPV;N>zN|my*pC=bX4{Gs3)$RQTjQP?B zo^^R$x{P!P-Qwl8OmV&{F$nFh4g$T8Z%&e?mh>r0UE`@M|B-z4Rc}>LuFVk4;9oAn z(uV5lA)^<+cvpp(_Uo0HREeU!JZSXGxfF8z$$%?!go|6AuJG~q#p)RX1uI9njxqxA zNAu5L94AP4Jj8!b-DHZBmp3U3EbbTwp8J8xhV+v`w8 z*;XjsvT$jyPz8!UQvxv=t|t|IW?>ujl6PFy@U{2+F^V5KVsW2EDjk#Q#KYxwiY!&| zY#kJdTha-x^>paWsWj@T&?97!=31kPq!#d#j|Y^s+b8e~^6yOW*;`@LPVkua{J-S3 z;=uu!JVApwx>c9Lm7q*TCH{6dy9@|COF1KOzF6>0D>VqzRjs>!c^~wI<44NJCct`W z{t*T~g}c4v?Q-eOC@rWONPHkEccz#*6Uc`lw8n`=gYLaZ&>`O+tY1IkA=6B z564*pwN4D*W;)gOw@^Fk$wyfV=Qz{RdO}_vre+w{DMNK6^>0a|Y?)1%0kt(7!7f5^S7St#BWG1s9W)xXja2BS zS^ROs;~}^!yy*!vczY11zi;(xn|yxGkLnIo#qt5H+)5OW-->O?XynzDBYZZZLk~b5 zI?^+ab(ylUQ_q=i2FX~|5B0@bsnu0ywH++V)A-|(+-85ywc~=%YVReF61LUFP>tIV zvzPy?;QF8TkmY*H+v?O!Ti9vES*hU=Xq6do@OW2*2&XI%b+<_&wpHUdX=u!3Ek7@= zb|e}SWHvve_`U9G7}@STdZm&3OuIWQai4ST&Lw0MAe^NLUOHere zwMQWXYdl@%a8lZ~%ClZEjo2SC{A0IWGwooH!ucxkToxnRviF*}lpv;R_^O89k-^4Y z;9m4TX+gg{&l|{cr9EyoM7jT*MeoENBKsa)Rc1O1t7F{0C;#z(l|_vfDM67!m~?@w zv<|6e`|4vahibs}kQMJJ#_j!4ah-1%k2GvOCNoBY=No#~C zo7>PH)DANcYK zGBN&ovzfzO5$hrJ2Ma341P-?o?v5@26OQ(!3W<@k$$}V^Pc)*ybb9<%3anVdIX~@W zB}isyN_)T&Q&XDRYBHx@9t}#ZvMj|DIxrC{aRE)BN1xys7=!&Q%Er)5QaU&0qxM5F zA7qHx*8(4-U^X_4Tz>XJfd2X+RrtL~A;&T%_xZwQ0Jox~fA zjhylvp5N=^%^%DDQuLi2sJ4)nR{EVb?9d=kS#3>KH(LdYo;fgc_MDkW5}UYX&U!Yr zmaTjGo3N1!W3Q?&*0_5A|HQ}>Rv*r8y|Z8(ex=@3zd9>luP8T(BEw)w^!4Kr3JTV5 zQs@{Jzt3I$a#+*KRZKvSS8aLMZav89&0E-W!sWx zN2~!hG(Up#K$!q>n2Pp9*SgxGb4ze@GY5*ra-grq(w?2lsaO7|&O#1339al8 zUM%wiZy>gFGt}9?`1#P_3p2!&UV)8_|GitFbthO(Kx2c|VJV8W0rF!}+D;4fn}71KNTqhMDt#P;ge@WC?aU zc%huCl0bab$C;-d+5JU)v4kX3?K&K}lgs(=px4M?HnR%Pb>ah&na|RMox1KCshJb3 zV`({buQd59%-1Gdn-CaKiWKd7J9s32Ii>b~({og{{j^bX)N!uR@-^uBf07AkzWO80 z;}#3LuIex56iY(eJH_*X%z&a+&?v+u+&=Z{?E}dT`=akF*6&WFGejl2JC$<$V)hsk z-f=9=m`jnTJ+~aiJg__vqj3Q7c-*F%UW`>=<4kFgfMMBLiEjqC9nPagvFk}hfxC~) z7MB5Ye&0S-vPg~L8-Nq%2W*?DaJyk1B3db(NI@+vcyo7It+S+Gf?J@+HDbW?TnBU+ zlx^-}sSrN?Q8Z<$cyQ9;-<{c(HY3=&lIb0|JYqVakI!WyZ|7F9?Ty*?=0*JL`*1q& zf9BoyNe8acxmRFyfvhMvYNkq1)wA2&zA5R#ANv%&%ybuNyXtdw7>{&OC65LDX53s~ zvM}am{r%JEI@p89Z$8*>p*e%&gxX{7N!NBXn~Z0>wrlUqg8%Y@O{OLDVa-PtSQJGKa4()2>U*&h z+7NjZ$tQ9=uk3Phy0N68&huS>Yrs`LN;}tLNfe`6n2B~UBCgUaSPH7;Bl6r*G`5>! zH;WQKy_vLHBJob?Tpda_VE@<@^WNb;zIvdW7r>Jha*$n^$A$?s>ioMrF1T~}X?cp4 z@x1u?&rrNhtD}y`8#V)(EB$F1l-E=X27`Tn?+>78>t*vNcRQogVv&VVa+vi=4+CK| zUlc|EEot)Dx7Z)yhs_<6aQid}KdYr$J&FJjW5rWK6WIY+ z-RD_3nQzmv84e*EkF9rd4)dTlfe9GnsDlaH2v8}`W>hg|Y$c<+=^f{Zj%3sR{#+Q(qe~cJbvAb!+t7JV6GH|Sk4UAULXEb26cPYurQXx{k&Ipv6uOr_V0-)yYBO zb4)ah{K`pc!0mNV5WCqPEaJ|;rl4E`Kgjc;8dTk|>1YdBkBv&>4NkeZw>J@r_o|)VqGo&MWow+s5ynPD^rkNHt8MeW(2Ig=H)oEJX0`i{6LQSM zvplJT2`nq$I`NtXy^LO>nk()QV27A)67pFnO(k!cY%cA2*m%IaKXF#DetTt0!r%1$ z?y01+WWL^a$|qS(gGl4qFd`xP{o#o9l_mScl~yZLjL&gV{deZ?r%ZcYn;1oUGWyow zqqpW<4QzMEtR@QQHoU*bhCE`uCI7hmY!*vdko2AWZCj(Jsob;HzfQC{2vH7C9yq=| zh4+JzS(a<-R8OFj*}2hAf-}8dQ!lh)*cu7%n%0-TVbagXTKauLym{2#&>DO1o$TF! zk$+*C$*W;T&x7R0xqLZ;%Xv?o_L~3kQVp+zL+Gf9vo|q$EjKe5g=c>r{O8;CKZz9& zvf>nhTmIMu<0e)0WVAUs(r{rWqEm_PdPm)su>OB{0ly`aqqe&?n>hj3i35Zg%P>zjrCU=%krxw z-xayAtGJWKA@SaR&P1bSgTv(1C(~R_uXmz|o(&$)%TiQjA*PulC%3P?5`G2wFqyTu zmG4L_H*#sJT)DDJ)|ojdGs0R3CTdM>wcYP_*g1xUCf}?4_Jb4d`76|@|H_^{+fk;O zXYN?J(J`f++X-TV{If8TvQ@G9{G?4nc5o3Ls?_oehLx(>{!A9hr}P$>OMb$&m6KN$ zEy}uQ>+b3-Ja}L3*tg1u%j2c5WPX6cHFoK=C8C30U*U$VpBM`QCpxh8wVwUa8v!Yq zZ??8s&0_8TfDdI~!vJb@@)yAsi)Jf^kiT*@W(<$2ha_G~ea9iD;coWI*k96Wpj)0yI*7D5M z;7kTZ6h>UrMFu9iR}j>|eXm=N@%s^AmM8sLQog@O;=%-FQq*(%5_}2sNjI!t07vGLPK?~m1~wkz;MuGeC7DQDR(Hj zWnDit3x-!=L5sxjddX^Zr%ig{X3<^&(D-Vso6YkgRr_`SCDB!_)@9|<*(&E82VB3l zmjfOR&zm6bSejpHytQ-fmu+3Kv`Up#0D^?9Jlk{^P+$2BQc=^)?>)y8kvRPk6i1*` zQjs8a#ija({^QkxJk8is;IX6yQm@&EyNl*(y?Tb_bIawwVGm~C#HittD4DCgJwd74 zSg2J(w_G3DhD4Q{Ud680tAx(RDbF)Fs$}MuNCO-_|5EKHb8S^ajC9m@ilwtb*GINa z9J>1w%u?9qKv1Yu-tyQ9+tG7C&I zC0wd%KyNX;Z!I$Yy@97iam2bE2)KWbMNm~61qA@{S+~O$ro*%ot(=kmNGs-ROP)cv1HKldP+@;c-j;+GhjGj$)QF&*@%&j7# z9SuWOVFz70r@S{*if69o>0;yx{qxpQjeB0jBN55vk)pe0thYU!`{`LxS+;#t1LYD6 z`&2xzrxAf6-#?C41eXC2DUl_fR9rH)91 zLhjM{86itsdbKZK&7UD{p~J@+8s|Yr7*Jm7-QCRbVuX}&A42%OOf8`cPX(w>Er71K z!}EbAn1rJ0dtsRM1oPmdn`1+TTBR%1!(W?>kLhj2q4f^+H0Te9Mtrc(trOH#%^Fi+l2Tva^(f0f6)%o1MD4w9ejv4gIf05{vNB>(>mXHlG`lx2xM zDAHP27Fje(R8X>{UTZ-p=o0S8 z*XFOy*dJZh)aCZ)UN{o}w7%@aB1F2#(~uUt{l?9pE}NINU?jlq<<#zH$i$)Q0o%mV z)iuVnK%^UP9W|ZirQLul`O*{Ct;1I4NPzV&^fZI)-tEj-L;kAL-GL+|6|gdL6?cIk zS8PW-6>pxsM-m0saLSm<^y?|wb^-J;M?G(=m>YrSlyW%DpuJq9+@jM?A6BQ{v|&tY zhD@ljk*u=;Wr$V5P+pWr)|6`{!C79QAK%F8e<$)NVz01SPH-B@Ykk?#)okf)();0R zDF%ESY_--1{BvfkB$C#``ERz9{-v z6lqtF!245zx&esj4cbulD`;9SvR*{bvi{|6GvGwo+}IyiUlNb|l(wWL|MSEyxm)eeRJ__({ zk+>OJ&47e|P@z-%dWjwPIL+gx14a>x_E^YQARBxAsOC}quYEs<@w_HS~YdM5-8FpaCPvD5}308&ccb)W!WK`$nde&2R5ZEUys8@ zw?p&0F@D$WQ@=8#Aqsn?XDyVWuPzB4VY(C ztq?;XZFM9F^mPu_O|soJ`Mq4*k}gzd=mG1u421F#315@XJne|Vs^w<`CQip_s#3wG zvl$C8<~m9njZb1Q7Rz$*fQfr@HpumQ%Je4F#uk>FchaCizvA4a=X`^XHg&nK7NaHW zTQ-TwgPfL)DP*!y=VzuZ9rVvU|Lc}hWgX`fousj6y`DF#ktd7eY0gP-l4L4x$kZq+ z-uThI^mQA|l})pmYs{!qXOVt*q5iOUYNVZ!PKU#}1kGVmU8G=aE1thK+@;?tsrTYoBeKNX&3jj> z7d!S=0|NakedE8UxbnbDKVaij!On6U$RlI6ZDx#a(w7&Mv`gd?*y z^1%SNFaZMVz+i{M&xF>%te!uz(azX zy+Nn^RDZ)3`v*T)HQdF%V@{S=aBj*NOc&`>wOS^dK292w04yp6>Xa+EG(YGfJ9>L% z)VQ$4aJTtdYacKJ6F}&nnu8_7O78Se%X9^IQl*LPY-w3Wa5r=y3}*U!N*b||Im+tQ zCo@7%JIz7}JhIKv@d_4?E?38fbt6&06Z!bP=?7a*J;Ej$Z-VB&o%R`$RhhQd$#KI- zLbDvS*_z+}`G0tN$Hu_ItZ6qL+qP}nwr$%<$F^HOX3OGqAlW(G(;T2$?7`;LyM9=r60a$Lk)BdwkbN?&Ti!dlCp=fxoUsVt z>08*-hlzY-TM$<#Ay{%A0fp8OQr(1{{b>)QlV(l3_xskpC`>T17{cxh0jD+4F<<%+ z8L?RwzD?46YT+za)o0-vK0TW7%HWwQ+0l5xxd+bd$@Z$^EgFUyPg2wo7e}BJzKB3| z5!o8MO(Pb-JZUv+5YF&H^|-7w#`rgO0GiaW2&rV5IjR)2$4iGe1TmvHk1_RLANUj3 zxG?^P2DVN{dPU$e&;o0G;=9_^TM!9#O+4IK=jy=RDf!9w$> zi7e(an=yUV+}b*|t&)44^E{v zlm?;6we|L$asqr9ywO=#%%u52qbqlEDT`A-;XzFs+{)l(%;p<&^UG7fATdJ>v8taK zNWRQHJ&1+Ru^J}uTVb^{(fNY+?rpfbN$B8Bn3I&V6C9|nv69T<@y!KwpJO2$L-1e?IrJkUDyN38 z*SiyrD3!br_3EWwGd7ospe_v+e|;sZHFjsJw|qyICIFDmr%4@Nz_pn2jMJMxV9>6< zFf)u99unVgXAw%{MrSQrp(THdZfN0vynK zH=5KAQf_L4PK^cuKCK|JI4B(xiCn{k*_Dq1T4m=%62Ze(Ff`gqAeg7W1}VKG01`Pz zwO@%;Z?07;he$ID*xho<^YHv`>oyFjJGdl9#$mAy47a?~4UmHtvu>kyqH1i!maZw5 zn{tgo*6EB`Wx3YF!fzfo(>LP-GSFsKVcBgf8cq^zA#~hdd2WbT-6CZk&&kGj>g4Gj zo^|A&h6BIwk&c75$`;^B=1qy6yA1MPvfnhc>y;L zxD11q`~e-@W3k25$=L)g=(S}P^Eq3xmK#8^O-dwJ)_*&mHoSr^Os}TGH`^nzX!q=z zm%Phm!eXztQeEi@HW0(=4GEL=n5_y%N9$nYjup3>@raNOsj$CA0dB2}3os_gQf6@X=2BObtBRqDF~(w8m%uEA|=Au{s-GtQauRRt(M z7YuMMUn*Ra<{vXiZ*zC&?q>MLON6m{($bP5Zoo*p+3^*$UKpBIY9Dt-$<)L|9?{BD z>_EyXAjU;`?&d`K$i5mOuu1;z*wgk&_$lC7Uz7*Uf;YYl!Mdt$zDq%q?aBoVilPm( z!sa@{6$u?!`*U{vUFG;Ik@1rWjBh{Yum}ByG(^{W-IJ?YMq%*CrAxuD31vzZenkI~ z$`^ZD^=KN&H61)>z&Z$#l2u89DIt>64L1>8Biw7%dTYBDN`1jkc-S<|KFOrEcM(Y) zhl69-y*r#p=HGN7yvo)!9yuH9@KcPdXFRXJ${T4*p=s!ryJxHQzlXONxCUA(lbSt> ze}h|O0OcTt`!BDF`7&9S5NO`fWSVT1$2>Uxb(Z-g8K^UBuWEEFjKNy*(I}1aRx&n( z%w@Gr?oZDv4MTI8mwOe0o{u*oHe=ewvDbZx6k+9T&DT#?K;p~;vV zGJz)JKK<(pHO%G>AnYxwVQ51bs`0|VG2zM`-o#rpFq~)I_036X%NvGpGe*8XL<=p^ zFi;)iXX`|t%pz{J2zFI^;fA;u8!dyi=d^HbV;jJ*U;?@6G;F7dyfBX z`e{cDX{8L}YmB6hBPN;;cWF&Mh0$RUq-}C_WQbT@IvW#>8If)7R8EF0wLEUP-|Mg~ z{2gcn87j-FLK~9auI79vQ+c0?=hHk)1!n^xHMt|b+f#5{3sP`56DO1Uzm$LZkDHq4 zBC2BdwKE8@Xv(pXnH$$;N<%9f1hRc!+KgP9N?5JWG|$*RDpdn|mev;Cwr5SS)@kiQvkhW>>i?q==H}N&KYtiwr zF_tO^?ucRORr&92Rm*RK1mlFA%MFx9PV=2I&3de2WzTAroVDDJ8<`9wI>{|G#l$YL z-Uyxa1kf+~C8FWdGat)iRWvO@?%jW`EJP2si?x*xI=u(<*rG$Emx?3Byx)7|@sMj{ z1kr_LDJN1}P+nAXl`g)%&ekv=2AImtveeH3t)xFM(mIL4d^{bN+QDbzDDbg_IUUa# z%C9A|1@u2G8?KzBsi2CFd`dMB_c5m4_mn$E^O5ZYswJ5?8Jx;j`_gnpv_ExY8&T7`T(AAdA7;SFD;igmO`W9~F zm~prI3~K*yx;ftN(TaSj?JdaJ{=3#XXzu#&UwpjBxXe#)7^byAmiHF<{iOnO4;?`E z$7q+t*SUKHOFlY`;^QhZ4t4J0WWCKde5$DXtr2!fx*!=gQJ+Hz6N|_mAx&&EJrt0N zmQxu+e4zq4Pe($jkj5m|n$b%`uI3_IHFDTs&KBST@ z8H9URrdQjE&y%$Yf@TVvTbMY@@9f7!D!G|MOgmCXm6Q2e&IT=ijpwsGw#&galF`vl z>$z=?MaeZ?B?VXtDCe^*p1Z2*I$SWa(D=3wlN}~|oAQ3QPt0*~sI;C^F-%g>F|mMR z^sq>;a@5kk2l5;_jUSkG%-zb3k#?-#v zFk#r}U5C2osC=>}GyQWd@upA2k*y)v&C?Mz=COITI+Rg>v|o=TQ=uxl2XiGFsk_CT zcV5&*bplNYbNhajLqp|6gFrXO=Pf9wR>0fqK{CCPP*aWBJnjTE()1aXh)Yv?;R7Xd zAnEH8r#`4)!~7F5!xHTcETs^X*UAgK&ZboSgEu~x--S{orY2h9Pv4$E<)Sg@W z_@HTqAXDI?4`pbsg|vLW$ATlXZ+F6Ca<0BKBOmj7D=*rp(BP9cmNg)i8%^JoGB3ud zO^PZUK0x)=Po%vD8bmeMHN6k$|ioQ~QeC>7- z^Hnz>r^&XD%)Cw*_xol!sXgfatbn?;OdklD#WW2N%YZ1M=vXW?V0J!YLDNIH^v$$P z^JC^RI6JTNF{-X#{P=Ffiww`duzl6xWjVgXj6LMmR2(N5TMsR)c~67xn5Q-qLVG-T zbeBHi)%djJM)DO!7o=(>7y51Lfs~k2P7bUY(-bDnaj9Y{-@29t6|6u!nfpv#GI3i{ zxmhzj8FN|wkpvAQ54R1gzuuky?OfW^$UN@Qfzz>+<>{Z|N3FGxDScwrYOc?ndTE*A zQ`OU@Te0XZ!2I;61*xMqTt>14hI6rDcVLnX%Z^%_|iG>?%Y^NLDe8_I;&MX^IR)shTb67X~2fg5%!mz zDDwR1;V{SSP7d{JT>0i)RP~(W)5~;fEy~0)=a_I=$#pp!-ZT*gmtZFD=!A zs8Ok?opvPOVL`8PJWtia^#+@#E|mDo*MSu3CHR50wnehQcimbwwxXQn(wkI1?*gwL zfBC%8;sV0EF=X|Y>zq#&gP5h+hy;h&GW_0Gur0c!{v6Hu*SD^u*NgHYJyaZ$bIArq z0x_x<*EeQ^9RndQO2VwY0fV8S-#oxv^QcjUWOOIy6Qw)|ZrLR`3RR7kQyEtCd*^bf zIAqD}T8(cr!?%_BDBBt0Opseg$6XSAd@_3x&VyxVG;ia{3l5ksN6Y&UPRae7E~<#F z)4SDV&fg%mdvsI+YnHIF022gmeu!a9T&4vy-%7k27V4#x6RxtA72=~ zks^jwkNx)Ec%h7{WL{Sf$A>yg;fJHQ*6W-cHD(v(@|xSiq_nC7d(|V_{IXnwi((t_aTk%f=> z9r~epi37kg<+-Fenswj)BD$=NQ=8bT8LytoaGOGxYR!ckJe_tZIHtc~63z z^bB4blG3jBSad)s=nSV;lVqcn-aDd=qqzI;LFv@&T6B{}Bamc!%F5`qhao8Z93y!Z zhLfo6>tAXlGuyK^Pdc5f(S@bbE@Gvm`%$43u}za(up(CB_H$=MZSj; zN{p=lOdxsIp=QSormSr>h(vN~SVU1vh+rr8BvIpqB8mwrv=~a5cam{}d-1xrFEz2M z{nt?jKiHF1$#2}YEK=sQxkNfS_=~SC=5O3=E7#m5)qoZ?y~5;1-8oPh6lHzQJ8q34 zL>I^RJCEWY{^gk%C5uJep+^cN<05gMNke!ftMW`w+;n4muhg0%DpmAzo*1dwtZlL^ zoTZZt#l`%g(a=-DmQ(?t;87&5K=72~eK9=6+)x18o!{*#V=)C6!8XAPSdQPJYh?@Y zqP=70q!B%EOd}=vnL9L4S0ghC)4Vr}=8QcP3C!`J!rBw2{tj&Im>e~PFHKB}5(;8n zzY9?1lv2oUvXqyZtnuc}Ek9aTvG}%trPF-aI%Z1}>0;sGTY6 zYP`^x8CP9&OL-xvGrbwK$rqO^iu|Jk;bN!iPFw4!DQuVzUbX1tCHz&}OHc7j=tWIOaKg<+95=CM3BNzL-7=>j!}F5P5A5dy&3mi?-mt*E`F8e-fjb*X5~w)J znzGBcHsM@W4PsU99xEl|6DysabuFs*e_Vj%##1+8dnbtp z%ip4_xbII0Z*m7&NgFPzQkk?Vf$fsVPwqRiogGvw#vD2g#uH3Z@m>|ztMa?HjU^&o zHS-7=vA4U=6RxxI0>g{XLr$rn(-$@uqkUE1Cm<1hGo=AM+=J4 zBDw3ZTE&nS_s70}#ZrC!{cy*!t;c2bZVGF4&s4@S#av`^8-zIZfo$ZX2GL|s z;VVh8>3w+c@{IQ;dZV;M0ga@57oVqP4@$|=I7ZK!TyK|D{-+za;gbja3<%V6eVQDa zi^ls}bWmbv?iiz=90I^{6k01pGx0Z}JsL|dU6hQB=+SEb1{@_(}P$Q|X@&swGN7(Uu##Q&^IK{CWagNDrWZY1-$Q^8# z(cWp)qMJgp^pZHcu(wsRwy7-e^A~(jua@oIvJeJAv^p=pjy@EfMSdWJxf#(EzH_bY z$N@QOVqKqL9DFqW*X_#|Io4W36p6v)?i6v4h&(q^ZO13IMa?gB&xwxpvb|i&@{Q0lp zXIJ+?u!1Z9LyjlQ>M2isRbDme+$nYNyLN~1ABMIVR(awISgO=N9wn-Y+PdZJfke=S zxIR)$`(4swDMDsX=OoVU*I>e??!IAlxMN_M<(L+hp4c{Bu)%T_@FzA)A1&8lYQnb9 ziKGCEL+jcFKh5Zp??ENCo#8)Up+}CXigF?*`&)Hl30J{Kc`4)Qh{h>xu&+BKQ3r5l=xV_7Ex7e34?|k zvX)U!d|noj<(9muC!%+Ns|g~Cazs|S_ zbGA@BAv2bS-cd}!ZMl{u^}wx3T^!ozf-%P*NO`(Rk?}vAl3VpDvp&dcj&=-3i1iA? zwa}FOQ-hM51JyBcz+q1+!FlN*a`}_j4Rd_{U}OC@U#Lksh%8eVcC5g4hqB_#ytz12 z(*#~9dew$$4I{dI(0=v0WPy7mQmWA@LA=s$SZ=nSAmPv2m>_b|%(MUCGyU^zOcisU zLYlE7hFR>bs`Sl0(L`@kbEIPd_2ZR{(oDt{?BT=a(+VKdMXWz~Zw_Hc#y37S(fNc- zFjx3&zOAP@WuMK%b)h4j5}AN2+C${QS$jj6&u6}oohZlX%v2v(a#z>fdV8M&(ztm< zcQn8kZnn3!eqe`P>@vnn$2ra|o#R5Pu^8k1_SB7RSb3wWK|Fa@Sp6z@OY?IrKw8Wf z3$XSvPNv+|;X3=4&^=LVXwW=7s4r4|=smS6mw~2W82oiAnIpdiB#_yUC%1KROl8(Q zZsPw#{yeEA1I9y=TX}2$$ozpy^`He;3WM|KeI>mF?{iY+vMFssuNPqy;hR=%`saw} zY+TG?An(aCU?Em@Jkl?37@y;N6xZ#C7V*k|` zt01`lyrh?@`tq(exglK>ff`9PN>BJc?eJ=r(!+@`Vc$Fqo3=nTYVh*FomV@aijS?= zY08RS*N{vkU3;$g?x*caU{{4Z54KEbXcw;}5QbBF2!UOb$RcBcd8VhTsIbWfbli_h3XtTBb%*J-}SLh$==qn!ouGJxW`vH>$|>IZ@J4aiMWexi+}~Gz83e|6@Sm(+X)05(0I? zs$RRk5Alw@502Fz`Kc<%-nHM2$q2zjZm{N!SPgsmeTxrP3=SQaEuQgM?*6{%HUfXB z8j^XW4^&jlf@`$F5TuJk+5{+xv+;-jtX6n=A7!??dGO>9sGh!!fi|(ziOV9RNoLnK zWetVP<62(>Yz3^DtC=BVO_u|_DK?ezI#?Uqr*6QGRq29RsQud33Ul;!R)jAg(OrcdlZs0{n-VSCwrjs(_^BTI1|M5 z@@Y|2zy5#p8EuF(Y8~ckCI*O!?|0mAH;qsW*r1(9^G!Q+{EGm$RK)p0dB%e+1KZ#k z+|xgH8MCddpKajnHXPWh^@Sk|U3!h4q-+RZCA?MA26)H7hn3VH-;?dy`~tJ5Nq8(? zkSc8xXf$l>%f#519A0d>Fa@fe;@n80?$(L}RnhR%JU!rU0~qZpP7;xdupd_tfz#*v zxK2;pVJqB7CFqw^8S=MvgH9*bk||tGruT60v_8^$N6CDwm}7f~Yr=q8JLzpwbJK)T zPu&=~Mx(J<5&yuel*XjK|KOKAQnmrZFR=9N)S-*;(iVpTWzFE?cCh13HC&T9HTv{J zQUa4VwlS%nS^I3W`~eEk_(?RHSi61OKIr`Sm6J0&_*)oeH&a0=njeg8kNS6d+b}2= zFI=*dUQONV=m5wG0#uUpbf1{-a|(o-(~G%(6zL~VL(H1s)kSnDWiBV3K`Q945aq>J zc??-Wetx=(>3(A*7mB%-6Q1DAslJ!mA}w0FS0Q(T&FZJ=}qn_RHHHzE%qd#=lX6x{jzn@3^D>RL6FJ zM~4u@MEWmqPS4ct^J^H9ve*(dF3-inZ~`bFJP%$mC zcTNI81fj2vs}9#=(D;odGja$Hixc?+Oix3Mdz<6btd;n~9KDjK zgZ%*hf97#+r5Ofcyzy13@*7mNRay!zyeOF7-M`t@SF?=%z^}S{%bpK4KhSA)+U`mp zJI*DOWmVJj+c`_1$juf*d|U`(zm+%?c%xRM9?Y<6`Np|0=tmqb>@miChD7Tcr%l#c zYYTjbURCP9<(>I^Zp_oFAD=;yRUc=MAE6i(Lo+LI25 z1BT?DH1Nx^%W^w9xCt~r<4IPlGE^%sPDV~)xcOnl`$gb z&Wy`eJL3z|GoJPduo{o%fF{z&Qr~UNMA_-h#u~GEkR%I$JVNW8vMf92jFtk#S^qAM zGoZ`ff-Svy2XNrE6Chh)*4I~UW;GA;AzUe$n6bO%@V1spz8b?WMY~^tQU{)Jow9K8 zi9WaAF%#;??B3pl=$K71SKF~Zf4kars|?FSqn8F~C>kCtX(PIW*YshfNI|}-znzzm z;#lB*5RuBF+K%r_+}j-mqh=I^H8R=%&|WN>W;7v(9buE=eT)YWE7u(@a{FA_t`M++ zz~^C)(<$g!O}jM#?crJio&?w*oXB&hnJ8`a+RiiuigNttKBDD8whs12Oko2}XSj&O zZKGlvDF&??0L!_4PWC~Ka{hERD0U~7TrPfL@z(I`UMZs45I+tE&}9xkl60d4-bVB`{~mCMrNcS=DZ`TVi>T|&)O=+8Nn=aoY1~1 zf$|^hYK6Ut4zOW%cigpbYoFn^-QLT^aiX;(nGoEzt^YXm6Cy?s9h^DVF5|YWQb;+? z&9ZM26k5bP=H5FX1A`9&Rw&`NiL zd16>LP2L-UBdr6%VFVVTB{jQ-Nk<7QM*#r)Cs0UJZp-OybtBx8-kdfpA!gm+?_Thv z>6CPVASFVoxjIxS(?%mfZ3!WEHAq*g1(&Y>VsLVr|LBf&y{T??;@6A@csK}txsS$V zNYcu3U$~uWi!beZR^Hu6Z{eL#%T>kas{-UYuy80C2<0GUAc-#0JMcYGog&h-)cEX4 z3)2q;ZvhwrBcp(IM!x_80R{`0uLjHK9#m!&ACb$9EYJSmE&$Ko7F%RdI{?mMSaQ8+ z9(#Jg2cCs9Ci;ocBCv2neJKBaF<(QBNC3T^j9)%ryym72RKyn5j$|$Xd}Gm z@6ScdjCY#wDzs+25%oeIzXwTrlT}KALT_){e$0M_@l^a^L)3$Yd0A6S zoo43Ij98J5ZYp1A)Xa=@$xRjb+5&qDujyh`MTbwXiCJSAw{`Q-1d~HBy=7q8%e|$VcJWoO!Q!c%_3pDLqO_YzyG{G?f4T);a1WnsX>Ma?U90#ov z+u4f2$O=@_tt)(5gOZ#@T&`=Sm4FU@s&a2oWld`Cd9H?}6?j%!Dy>>uVhYHCjGbr< z2$@y2`VXx%^pxhu^iW8cJxN4o_uV2xw64V`E_bgC{AEfT|HI59YxIn(Cn4;$I%NF|f73`@ZIJkz#{9Gk~e_IErrH?|1e9985{18mRk zqul7(u_T#wPNKLa4UKH5j#05TD`Mswh-1{P1KCL1nGy2P>zR)|(kQ_6$;qJwYK4Yq z8AYW%x5ne0>@_a7kn-4f)53CGxT(R5Pd#Ojddf)WA}4jQ?T1RLE`{3Sr&^Nt{^E;UXubT6*w>(Z8CB&VUGj=ReYE?X%ad@A}x6J^5USTDM=)l`;#n zREO{8Q4PvAFva0j<`?KY7M3ps{eS z*|5S<*r&g}jS7x~6zfB-;}0WQD%T3(-^UdtLTrD1R|o3xIWT{HNO4%o5}i(78;-kI z^){(RJX({A*M>2JHW8nvdjL&jwXR4ELQ&AaM*jzQa`gO{z9(@o`+}cG*+Lc(@){$P0q1d}AR=UK=joMmmTcT2YR8 z(VFtlU(zY^1jMPZSEcV zn&>u|4Gs!inIi_66T%$8S?*%$x+3JVby=59IXn^a_mx>R)0q8|AWo@C6FT^`ulPRI8LS#PZ08P6L@5CRf%>ySaftM6C6c+&YC3rd5- z#R`j>GYVP-LptwQ}k*10ekd zbMh&cZi?3de)lhC^b0XpV^#r!lv64R2z`pL`e6Sy^qg%aTd6kwrqM!z=w2^TnwilN zsGVv^EqYNtDc9)YN+(Hg~0-za5D4)5G>BHy8T8$i?dvFNkF; zyU>`8Md21qR;KY%bPfDfLN-m^tKj^xzq7}aHNPjstqk<@weQDVl$P|nQz>!IZTg?XKGMs2YVk zKqw~A(#D^u7TqZN&MA~r9&5RIJ~2x?^5j;iRIOcQv2M9!VqGt3t$<{v5R84XKDW){kvlO`}U0}?ZL z;EdD6VBKJ>n^lj{c83D|u%A`2>uYLZ<<&le94ppXxV1;%#DoUp#No{isz>l{tj9)b zfH>Pw0X50y6MAqs5Ldy5Jt(~=4#`!#Scbj2#0ZS;ME6pAPuo}88_~vb8U3wmis`zG z8LdR?3){9?<0yhdIK32-1yTOD)!qT1HJ?wI!NH&Un9t9n0~CKb3`vW!jCE<7_YkE0adys9Dx95k&N8+6nU2{cm}3|hQRgLQjK#q_!%;OJ6R`&`to%nKvGca{*03pK23U<^!C7NC_CE~q!*0lM5h%%%$nM%h@A;s5T(Mq zA8b-D{YfXB><&J>-G|wDVQmkKLegdW&zg&&Whh_FI9g*X*&fIe%$@=J?@e+w>olQN z&IKyBO)7E1Gq<`^$ukrYZqNPck|dtRLT&5Hf~*| z&4GvvWO~ZUZ}WNu;^o{|3Oet^+pXX84A%H5!t^VWqFd0g{+#}2hRuZhTp>}plZ`MR zK1>t8Eouf;-KshE!R*BMLP&oO=bNt(Mic=t5#>adG>WnudLSaMlg&sHg@_vt%MRr& zRVtxTE)FsXgdbLg_9=p-if9w6Ix{?um^jXKn>z^KK?+Lt>PafNm~G6De>>pLz&IsC z43n@>mYh0luO0S4iKZdy<5>J|i7yyqlK(@EC8Bq`)%+dR(~NJ7N-BHmL_({jN7b)i z2z4f!1&sDnI^<3iIIJmtUWO}a*m96r3V$wG=DBI+t25U}UWOiq;K0@lN{~ONR8w36 zlVtXqwdu->e&LuOP!h0y^0MfhJ~*bAuBtGX*)f}l@|Wq$2_p_Lo4B&!SjWwWCBO#i z90TvJDN-r*$_~8i7=F~$zahH{&;b5sEN=_-)KudNuWnnvl3+7N#AE_PPDN8FP(*7Te%Z69kO=udR$8zjQ z-(j*#^$kTK4f8xqp4bQXB|c-5y3)bfXtR*3K*$jNEy`Q|HZs6_lXYnv@)l?q99#37 z24QM)-4qdGgzbgxSBmLN+M^;o8$zzmwt=+f zVsbM%0rZ{&3rOCR6%wX+A6GF9Y5c5Iq_60bb$dDj z1swNWMMqYCSpj)n79{H!*briviix176YBtXO)@|x1hXbJ9rTWYqk>jML}D|bc;g|m zVoClap773gy1q&+&+WmdIy*w;f>I|HIZ<~#Jhw@|gxtOe0~n(4ib_w##=g{??3lyi zvQ`yDq;?>0y4w>~;KwHz5JD1R092BdRmI(}|Jwx|u+XCc^(DuCEu=Nsk{CJAjk(z=iUx#5tk~^u z?b%JkwMAcXlatI6wt7=d78(&|+6_sCScS(zDJjoC>3UAIbz&HO$1_5f2N$`_A;{j;v|uEda9tx^^)}VZn@F3qG=I- zA|*5@M9P@1KiiR6hjezH|NExv-1wiqYSl;3C4GIxqusor)0w#TgoJ$^=$CA~5Bz{tknISQr?}#evKi!pl!$z@9#EvdMluHK=v=r-c009WIJm^d zYVFJZBGcBoBFB_mvtUP5ahA-|YGC0Mz}FKJ>BxI3AFCZ9Ma?xv30Tf zLGjVf;tDazBTUv@M$k^_u(&&HsYsRuRmi{}=2tVsoXyy1tkaPu;u~Dw5e$WqTJ3tX z#__wR9f}sLnwa;(IT4+TN)NngKQ9|}A-`P;35bI)IIcu}xDdXLyuvS+XWQZ{ChS=C z`@R{d!#wvaKMeW+G-V;^7@YCmLEOvt0S6?6K|8B1Au(}7<(VVaj29k+n4+C};OX;* z(VMp|>VS4H5ztSu^i(5imfThgU9dje+Db?hb+TW8+EQU+sfr)=P(3Fer~=Tf77kVp zoL9m<4lu31CcZ#uhvYTv|L*k&Cz|UGyjupFs%>+!tK*Fs2)d{+c$9(IRN|=Qz?Q{W zSM4)E2$=oOyvafHU>3sn>MY6@8`CBM*eeAEXl`JI!%znZ?mgLP$ozni6`*WH#LRjJ z3M~hoG2FOKytAAi+j5h&v$Ta!@#WcJ2q%_*IWFWgLVHRpW6p9JOGJg8JeUKs5nf$9 zCVjuXV-6r5VNs>zi@ao%rxp5FOT?P#kQQ+WxXyj&Dzwr_*f(uqf0b%OKvfP5#(~%T z(2{=A%~Q%t6AEdA6Tr{Zbnu#ZV?f?#K8sfhynt>n$mCr)Oi zQeW3G_Nom=QUAJ}alNZU9ga$8WJC0?M4%i^F>fQy;+3Y|VQvmZQV>nd94Us8ETtpd z(T-GbG@KE%#4f^WT%r!~2(xk6fN%`v8%Yp!Y+hG#7wsO6j=v>d4bC4v-Z6{%_t0=f zqb&)hmHka2{DOXeO|yi{4Kr5GieuE8y71Tf)x1860!*l*(Q!|drpfkpxKB#YicHr| zM-#mmA^!?mjz~lwK3q_FW=ITSE6ANv&$(^(5jVjkK8Av@9o|)(r;Y3^krJ_-Hyr_i&3MB6qgnILk5Q~NCoYzXH zj6Y4EB08zdT)mV2OGBbo13NsT%vHnPA(c?~8-?kf(fifWU`1dh-F?GJoEHdl0Z@!P!i7%8g?JxHceHQJCiPd?3Qw z5y*fzBnZ71+maUKENs*ch7szv7NUBz1(=H#x$ej%4YVsbKKy4-1kwMR`5tm`|s#6ob> zAJRJ{e}v#-pSj{ECuXHiTXkBH!T}8{$1zi{1Ng^(hn-gh(XRneUgNmcjT%KZIK4?) z!~9NAR3ozZ$c;gXH4C|eu&?P?Z2dvr?49gg!e!l*lRGw%eaz3%07}IEqV>U?4jBu) zfMY666gw3Yrd20wY+?l~eEi~kK{^@%2KFqoD5-2V7xUC$7nHR3zK!2#oFg$UAua)y z#0SqVEtdzw2KICGU6xSxwyAZPt<5kk*iD}Z3_5JB%h*$?Ls&Ky!fERvRu^pd#ss8a zU<1G#uQ72;hb9Et$CvR80>0?HhmahY#&ncf|Ej5s)J+8{7S_yS4%YadalfVif(0PYa z{PyN(xdI<=K}{=h01u;NL6|Io8C3%eP>ji2oMEss&aDY!&}1O+YS8`tDxu$Ojf`lKc7-xcxB$lzK!$T_Pg(mWb?p(dE7c@c_ zrQjZQgJ}0c<$g0k7o>-Z;Jj}p%#a%H{qT$IBp@fk50ftrOCI%T)KC5Dx=6K0+FY`2 z36;QlbniKHvHJv2JgHBK$#4cux=gc!M70%*i${z>_`|(JaWc(a&q>(*b98djP~X?sc4lvJ?cdeTHM~F;qAr z!T^6o`GWO|2B!{pqGskbj67Uo;BU+J7MGeJtPw#i2SX|+=6RqLS3$tI^a5o| zt*1gD$5RXdm0LB3bNP|%AHtXTEd7Wz*$wF7M5D@B&YL^FoTEHYyoHS<3_maqwQ9m$=T zp>x)xVyg*}$Rf$Z94s8JPzHW(z~t6B0zpHx<^@FI6>2uYed~ ztp&FDmLw{&U*f^t9Iddxb@p?F2$_)EsDJ01>wygNqNUZ2c=ibrv-yQsX*5M0K9;b0 zqW?B+Cbxr#2tF^w>Cs@pfS*ffagGCkLMZnC7MwLUS45@Rr^4)-X}_isYPw?fgbkOJ zFfb1*Y^gT4hliD3s@SLsQm1htK+?^;vb`3=xF1%tz+*LVCU``wjXCfw&7XH-Q<9Gq z^WOO-%e}g+SA|Jv*T0O*UXLZno&W~$L7#>{|5aro3B^I{+>E|?c69DeJ{m&KkAit) zEOO;lgKgAe%%s2L+UC_%wUyX9QswUD_EwVvKV<)q7X6e-mR3y)VhZ->t^P~_I0j5x7g$yr<(ijD~%5NjMjDfo@b% zW9gV{$o;Vwz3f4-S7M9pvKe(1qafpMWiKeIA+3u;B_rAqxM2?&{_V;Qk%)|m|E5Uh zXPz^hb5p)5@_vZDdnGr!bfP$c6qIstwHG~$r{_z&<8+aj+I@+s2vgVFCEpx*0{)}W zJwGj-3y;MLl8*^>B}N}+EG)V$G2BxzGqtuOHbN%8$zklJFbMO(h>A~vMOz>X6;US= zJO5-RFXly~2=MO#_6eMeM-!gXIYL$FhiC?QF5S&)W<|CD{_NR#7=K84)L~uSp)s%* zw%UoeWnrF{lMcpUYalyJ31?Y*yR*q~KW>fggfoQa4SHS2C_OcyDDU9=o@&@a3W!RI zmTbrBfpO|P+2E>)$iEMJJ`w*kW+dq~5B8GRy&;@Z=g&seHrU+;3Da&E zI0SuP?D{j^8cY?3b`|vK&lDIS7$7}76bq7H__*gs$ehdvynin9@ESFEr2rXv>yGEn zb^SuAxbtxrO~diqP}6nq-5eDe&b6SmgROd4J@M9lg(;?}xug!y?8ae&TY_5I6T^Hl z;fbq@`~rC{ewf<({)ayg=|0+pTxHQoJ8}a9vCo5baOrCHOP-AX5l1f%>>%_1ado{l zDavc%Y`pGQD0)wCe+1m-v|$(0AcV1&QVUBB3>@D)I;DT`S@ORPSIL~kuKYQlx1y&B zxxVMRj=Y-?DZzB~gyY_B8B8%>T(&cH1o>~8Fg|7Txk%)Q$e>2X;%WZggnXYbVf5)} zd!atS{;^Isa6HqJBWVvP?;;U+uyZ#T>Q_hbu-c-emsyprAArNpyWi_)tC4m29}CF% z^XG(j6+S5Rv;iz zd`YITlGhn>C5WJSaFI%GZ=4Erye`?}k#PD`D~tH=4ln53_iVtywOoH%?_J>Sr0F_ z$UW^XN8UKGq!$Z68B%>C2NitSX9~zD6*8zLogV-U{fQoPlXE;RjH@QYX9NbY3?AlR zMNb2Qz_f5Ahs=XaL)8VA&^OY`&byne;^;88xHQBuZeST_z(AP8XrwsrZN@#=ybgZw zOTy3Z59=qd*jOgx(6#7~ZleW4icd=Z?Q#q`JA4*=;(U?aqk@x1SWRT6Q2}4!cJCO( zbPpb}y!rJp+@u*MMVP|7i3|XvOZd|v*zloS74g+P%(>YQrZJx?2GNMlE!LSczURvR zF6A_|UTK>^rw`e1jJzf01;F@7x{xgliQ|N~4=-(J72$g1tut6M->XT;MC=qYss!6l zcbrZRUL?1caYHCcd@1>go)rSlkghA9?d-OsfrTA16=XI`RDjHtQ|z*LR>ens=@H~8 z4`6%*pU(N)j?~-W}>*ATR0&mqcesn4y+isO>y4iSfWovW&6<-WP0OwGda)U29I_bY%oDGvv zR=#4_Ps=vK8Bc3iugElI=)>+22jU8}*>0h&hUDz9_qg7c-&qL!NECni?|{et-v8dp zPsSa8|NCB$+?a3~|Mu_sW8ak7{NHCGh9AHAaH<}+Go%LbRde2Z-O*A4!}AQYUG+~h z;$}NnMwLkNo}-v*ya5AeoZl*i5g0?tOp5iBtD2;8I~|Sw(>H?x*F|(-op&u(C1w(& zm$HQlni&e~_0p5OnS9=8)uU_B3xij|ST*%PImw(P`gt29{F9MAk+cyLc$g|d^ZngE z8jb?(-m6_HX#=nyz)=2JWFkh1*9La|wVfcJ1R`U`Ct0m!tD!VPTPi_{k#&ScB5u%O zH6FEs|5;IPS5&9%KzP>|Ru%NAzVVG^NB#bgJpIr)2rQ6a&x|Tw_F8|k*u*hRZYnpU zh3^;0h@4Rj51t*si2k z|74cpt?pfrnF9#g)w~Z{`sj;lLr61z18S*VXQiQS3qLh+NCbjOwQ_SEa4}TKhwxg{ zPnhwI^L3A|HN;1n=3e}W*RSUg?m)$cH7+OMn-$;G@5z~_dd&`bIE5*Avl)9p@Q@)Z z7_&UHtfnS|f-7lSt;?wQYJvt~0|9(AV$_|MBxZgHk%UPHHu@!2c{G_NwQodwiZTv* zWGRGbq9rR65}MnsD<;G`B-roO&8AupxY~Xq8UCLWoxlosWb$90^|oUKVTjf2jVus^ z+VB%dA}4FZT{&>aKdT8e+}s4wj(#op@a+4a=NiD$-gNJlHx!p%+Z-TNFNc_muNS1*dP3ojwNK(ws!~ z5#7#=&PvPY;k&-;B4@A{9SUih zbr*uVCzEK5r{}SdO|C#JqxJWIs#9MCI^b~^@n+~V#Y`$KlItaNFr4HmGcU(;q@_%% zDox1x7}@3oJ97B@?zHGKAHcf?%?hPgh0m|&WOpag@_E)j?{4LD0q}~t%zq%nr{Hgt z)J_hc&S%WQbSoyU0<$c3=5A}FTm_xu;i%?7_CpkOMo@E>9$r#BJ-z=TUQt7Y&%)4; zOC~wKz-2`GI?wi5gH*u?EcKUELeyJ~H@~wO>#mB9tCHxXyB#^!2csq!$4hMciY7&} zMi4Nb+O3QPlwh#R{B~3YxmEC*91oREBGvc`;68M-p0J)D`TN%2!x2oe)zo<25=^a^ znOpit{~-yIjZ*KzxLU9#v|OJSb}S^>FS|e8xRucKi;tV`#$<{fd&__Z)7bN~{Yg^IA zI9x>vHml$_K3T!lj_DW=>Oc)-?nFX&au*K!bgWvxmU1=G+4NdIz zV+vJ%U7}{i><2sI(rD@PGzzOrHO;brgvgtYFy6#0YMzbUedh-R?Zk(1ilxf$7tO-R zRzQa9W)jTMxQplSV5J1sLkV&oYd$1w%@B$OVzjvZ=6_-+~y>5(RVnw_-hKX+y zt5ZzFauf|?&l@U%WC>wTZ+>N;v?(t&CT(=hp=>~qu^83zV(1A+O|#;?Gk7mSJPUVg zPY$oab+q=<%|)QNywL*R`~mED9LV-3YGTUAzDT9}!)M9(70!DBLPdG!a>o)V1& zumrXz#>iwH109eV4}(O8C8^MCdqt0VE0J=c7A9cuy3!rvZ<@v^#@y+p?183D(S9nP zx?n#C54Nl@$Gi`I(b;s&PA=GsSX3Xk@W~bbiJ-Dkhw%%By_@l_t^VSwe8MYsS#hMXqI%)$=sRTv_L$_izoI_6B-i_h|VaO zS6VX7ch(@{M(G~#D`4O(GMBM4^%wC9GA==a@`@a7^Z@Ka0cL7;>Kctwy?~x(wOuI$ zW$PV=e(@$Pg(`0<4SmR$H#Xejn=d<1dVM#gNZLXDaaRt#+&I4;x=p+4C6Fd}ETPdj zu88z?5p8&9kc((7qyk5Rh1$B4CG__Nil+8hrjh;BdGZZH()Udf?Ds-X1vQ8<`Pf#C zu^CcYl`HV=DWoDo%(X8KVdxMgw)@;y9py;$_%z=C;XFMgU`(3oUDc5zHoaADo8B#A z_Bzn7!H-mvCL0T+j4giTV*GXJTt3Ez;Y;aeLxiTI&K-?_-?QE8sVvb#aiWACWjv&= z9h>dNb>}#!QtEo@+Q*+sY=%I^SJb9|$@lY;opVPx(=M+7A4;$+SUH7>>Gz+^x?SJ@ zyeE7NloegDGmS1>9G2GS6zV7p&+6$h$i@+of0uGDh`%?rjf|-Ga5wH19EAx-Hohz4 z0M8?GlczWhj82}m%KCWw)eGeh4#W_V66 zGn;Ri`=*X1>qBhPq+hMUZ1^0$2PG|gmim}ZMk>VB6LYgePyJL_u#@hQ6QP_mYd5hSqJ!m(yNhMIn+LxhaA|tOD+Dt9TUSnf6I8 z22DwJF=BL>m_Dt^ZPPmmwSa=RMiQHXYTbTgqSdOkJ@r;*0GWuS8PDOL?839X!lr%( z_UKyrfinUkGIla`SFuFA7XBiZPsLukLb9nOSq+e2JUEX_%Zgk0g38QpSF92TY4x@_Zge}3LZx|eg)FFp$7ke(@ z;>T|vTI@9T`qS^p2sC!SpJ4RvEkT7YW4{*vEgT=?g`oejfOhOzKm+JIZq#Kw^Y75) zMM$7V`j#P~-aJpd_03daXl|d55KIFIyC<_c$NK$6BQAIYC8t)FvPux2BPCK}@}z?}ab=OioKZx*h(Sh3N#^*1~h z=6vQi?faOwofcOZ*}JIkH9dR_Hs?6E6E@tCRdzb1FKRea5S?et_3mB_7R!_!$$aIy z1^=Ywj!%rlwFj_+)tWWcKB<3{%P067d7oEfx!Ce9pojcSTc`}2ghLIrl>FT_h7R7- z%qZtRQ6Mz+qP8|#-N8EM1(-Eft-o^MaY7!hV~#kA91}njbECA1l$Bh5_xy%U_g2hF zKF0z7S#P3E!Vi0&8efsf=F}^24of9m-a(tHWXZWzZBp%Vc~ zVzNk9m&J3ZgPI*>;n>%J!eFrjVIjCdym9Vg!k_()82l&#Z}~|UrDstjVq0mAdamSq zv*?f*M))7~GmItW%9>9?+CslUe1p8$G>G2en(o~-llV65jtPNTl zeK`q8l$U3u6_!)%1XFqsrl-J_$Zl`Xh&(gJ%Wy+l8Yr3;CWu}bkkTL>KsJ6&CO;pK8!K1%sS-8WlnrDiCiOt$AQGA$=5rrt8mzV`M6 zcI9q|C@-cezKR6UCGVhuQMKc4Xf9?Zrp{G~YnMLBKItP@PFn>-4W`Mt7$uqdN|khb zYDpWmsv*KucN2wF-N7EOK8K3)k!L^W?((Z>90apA;W5D;7nUFYlB^uv*s@4%TX9!s8a*iNwwMTuTw~=hL4RM-3godHDUaKPRe3a)0 z`h4Y}3rxGJC8`q>k*l)1ECDyM{bLiIQucJ!3V!}q)0Vr>4izTiv2H1eopeL@|2N5B1+r>w53w(iw$kErynp|x=10p;{D4P1v?~aYt z*{|9THp$c^J~cyl3B|fU%>`4OH8x$1p_ytq_6#QIT8|0zzp58jHnmg}G)MO!EGuH5 z`J%PBu(sLI{LKbymR%kACGP`iVOpqxepBObkxt##0fh;-^U%~YK1+R(AuNL78>e@w zf}baKlULj79KxNW$Dr0#qG7k^!J|6mhD^x|y{>NPAm&b0<4|*&PoUF(qyeDm;U2Wq zu$IpJDp{g*Uk>U$O8CG4WDJXHIY*X$))c(CoUR2px!v)VF&B8tbj}vRHGh&CBr%6> zeC|K}O5s@Y(muAph>F@=C>ket^QwQ!cAL)-Onoqm+V)SCXFu*kz5&+tXOdI~7>yRF z3_Q8aZq#}`$S~IuEVQlNP~MINvYK=PDj8HjY80`9B{;F#v*bAzh0YYNJ}+_dV#g*V zWp!4db}q%v452br&ysFwN31_bfs_Od56*Mv@0^uO;fFB%+6 zB3>caX%7l4J|VsjK7O_;VOe`dE|%AR8bQT2ujT%sPhG;GJEs)@=C>=x;OdcwLkibA z`fn2}{v5(DF$XtTV%&0uPu8d~Ay&TDHYeNMKM?!cfko7WK}(JoWY$06yjRz9c=j{LOTAqMX0a>{%}4OAZ9VoU3fU;f9!@((=b7W^ z3JdV1jzi@_mYhdnPbkABV346Xc1X>YKb`h&oBLS(s8DS!0n}{3=uAukkuMZ+s~Nt@ za~#>__6YqXrBSKT=0AHaP#rQrY?{$AerhHcE8ksFL^bejJ;2LEpZOb5JT89azJlrEXzuWKP&o?6Dxoe$Z7(@?xcqT)2!7bsFSYby6 zf8jsWB$`LJ0AvXoDR?X)C|sA%9$ZyRrEhQnst9)uNFB}1^%Co`L+Alh#jD4!PYQ-H zYBC%tl$lEii=er2+DN(g5soKn5fJfuK>rj>5LM9vCR8<(=DS1-w#p}Tgo`N~9sg}= znK~WQilRSAgyAJ!Z_e7(gF8Y%}c0w%I>=AW*l3xi?_$sMH)SD_mB&h45wF3xAeA6ujKCBW3 z#RF@>9jZ(*n0BBdq{ddY%xKZfjGOm@OO(}sHb)#7X}=H05P+q~ZGi7<*?c>Hr<(?S zE(s6qftOE$-smW_K3v;9PQ)169kj2rgpPDoNti@PdYZW#t_vl9qco2bR#IXsBw+=5 zdo&|)yCKiYAul|`-6eno>1e)|>QFd9ANEDb=XZ^oIeUK(QqrXtGaZcJvY<7<5j4xz zQc)HoEcU8(JmBjLFO*!_D^|x|V^c<-B)xF611*wQ&?oc~CE2F1HpiNy^g9O&-2XS5 zS}QgM)u|CmOhRcW4M6;s`2iQRhnk-cr6ZWr^GUgzBk4G0{FanKjdhITiZ0neRFH;2 zt6)O^oK}QIfye=Mq)>+y`f!p_>E;oVjbNRA%(>J}6aMQRd4J(0S1eI+s;l|JA+U)$(8WEq zojVT`J~hA>FVQ1y2fNGfU9oWOv6!8?9jMV$p8qHcNPTqvFqz+T9>-7G7)G3eXK^Gi zn&s;`X(v~J2SX1N^A*TRG03)UsnXU$dM|Lw)cS~i`kHt0tNu(rkUabfDKV=NrHK^1k1GuM1 zl(VDNSR5ly)0hYP4isa**qyiYAb9yIp?Ovz8Wcr?BjhQxlTKp?mG5J$lmkQ5_Ev<~ z=fQEJA%m@$rz7xR4f3{R#knh@`Hjf+sDMR{=5$c)13e!Lkn*mqiDNb$((tnJptpi% zpH!_z-9PR@ecB4esBn4<$YJkY55Xsj(zPd-o}qhSsH`6biS5%PB{lO&MwVu_)JEVo z_d6Wbp4LF~5}2*sFX`#_D&ktGooGwGi(hWpJvUwzcsv1mWR+a7f(b4;K!bR8H_%>| zG+kv?WvDVttS!K#b;qU8j5)f6EF+3~rtYD46u-(=)y`;Jq!;io-!@z@G$saJ(+z7R!2W`DppD@JL(EH)OoZXwS)cTOvtHs~WwktWyTw5spp*RBf*a{Do zh$2DNGM;b=|xhAxw^X(TxvaU(mpEkf9*{$EKONsM&E2>lVd(y+}{clhk zr3U^wSN#U9_Jb_yp(dk@)y2_-s<)HTJT&iw4+9}@wxU{}Hr6MtabO=-Rh=AdaZF#Q z4~w1c=SgF_?21XtEL(oCAmjj2ZXGhNdJ@68eK6C|idiF-Ml+P2cF$PV+WJcuk$OTO zJ`+C4Ukts&9%l5i(`7p!zJD@XV{~RDM&+5^xS6`udEIzq;rEPDno}EIevy?oIPAa=?wHjjFa9Xu)$|BnL|jPiQPm1p z_al{#Q%I>9?o$>r^L3eTNfTzFxx)L3%j937gC| zQ3?|UI|Z6EJ#OWT)aa=0gz$j*i?wvp(1VIc5H;aub4UtefyT~jcR&UCst}co)jIRq zg1WPzta*Rg-fx_S{I@$J#>^+{FF0mb{V^o`Uv4>Ck|x8a^4frOW?NjiPX~?cUlfFi zwY#6Fy>AE~l)OVRz}ut_TQtMe@Pb~+G^+F{s2e|?nc8Uu!S^6xIn6z>ZKYL->W8QS ziifg`o$q32j_E|IUV!BO1KE1L=9Htp75LKdx8C5L&i`Wp$8ql+O^o-yj!8S8rsaEfp1jgh>#$V{iV)a_lLGH8GHOr+ z-$2Go+ZgS1wxf5&i91LW`be86OXjd{K@OSYe*rT2KQ{$F=aX56zIMcS_q4+AUA6Bo zTE3)~`&2l5i8l?xLGoBw=cGVP+7-Hu4&HUtc5I;<30jLhF>o-T61|8nl))u8Yq7&% z!6t4~lW2UK2+WLET{Qx{p#=D-lCKQIW9t_F?RxMSAono^bNn}x>heG1h>?@dpD&4$ z=-gkQu(#hX@0@H06{aJ#Q>7sDb0EMys=#n}Nj@ie80id8+v3MALEH(#b<@JAKn@f7 zN)e-&oQ79CuSkng3qq49Q%qfpBuMB!s?hPl@^iy1>ol{i1*HZ_&Hdq=_=3d7X9Blc zrEa*cIlIFT+aERQ1c3Hy1zD=Yng&1q1!01zZS&zrN)?9q%ec0j=WrrWzr_4hw=y?W zD7O|RWYUNQ9Hq2=daa3Yn|9y2XQe-!MVE+I55;yyPA#fx;ym>&4oUV)0pa~+=2QQG z@5ER)BuHA1h=SpR_^D_ufF{!;!^X~gqk#`nZL{>WND~a;ggGK6nAE<9t=9%E~niM$`xBE>ZK=LtE_i6V|W7?#N(HOV>ia%9?@?M=ynb6SQBV)XDG|94|p*OtJ z%_^8Lh5Da({h%oIve$^5QZq)sc`PetUBsXZSM)I59o?jFNkMnK7Z-d@ z9MwLP56Zf_A-6*yR@Io6_?;1kM+^%bEDOYDvXEsX4al-yX>h_~- zY;)*-uaWHwZE8DvBWQQJdp;uR@RkMgUjpoK6=qB2MoJ&4|uy zbKqMoDic%hL#j6X%~o@!-$UKvGu_X|z}-h*@A0-lD(!+bYyB4?#JAsd>M86`ynXOF zj04Z>+-g9OT&&N&uy~-L7_V#B`qz0taxc~Suns2jfK%#7Q34o& ztRqb}^u=8AJY=f+2TEwB$xtF6c_YH#BbAD2ehh1UABaO*<;!pnVks6jA?xch`~O1g zy8nmP*I1^`_1Y)$X=}N#0eve}h|ykSeSOUdw^jYxCC7bzhB&|d1uFI^!>4QBoPjI9 zKeAwd#CjZ~6nphM+b9!#2cBt=A$xZyXEwY*G1lPrQC$Ls7bh|qe+yYLe@Zq-;|}D+eU*?^D)pW%@S(O z1Af=;F0G24P?$eYT5{}YKeGOCDRzj!&{39;0O2Cu%G&{sl8{$CHAx%PQCQ|^{sx+z z-(`iW>8cw3p8fEj5gT2IaGN;RaAordO+je7Ahm$E;19)x6NI#ilaJWXVfj)u)>{tp z7ee8lDJwywQKVJTHNs}dlR@ZuSrU%nl&cC+ndP$#c2d`3B0T={D`_YFEtwmFHm@2h z4pVskPPvO2r%)x^TmDzG_)m(k#IGU}7a9%;mkmf{75Bu)ENN0_H&^%jgUWnNG{8bBLQ@&zS0Ei7DNaa`Lz8Ey^`c#Lt{5gJqW?m zRah4Tj}Yphu<`n(^R|zvB+ApxS*^q(Hav+3atgR>5Lp4JJYmEJO}N4B*V-6K11!hg z{@RwgEz5qyU7{DyP|?PU({?FBE?h+exbdOX(2n<5stNlSnwz(*rK&v~nI=M~%S?@Y zDpr6TZDhFc$QpMV_JRQ4+3&>ku;M%_4yn3o$d(x#p&Gk#AOM6RE1B5ADSL946%#r? z_`)K(o=I8VFRcTC!Wak7K~S7CvUqbv>v=;PP!k23(RrSUezPwde*?TV&Xk-Gr*yG$ zD8p-Q(vh`;6}<4&=7*QH)JvbE`Hl362V>r)ycF_rct#X6ki>VbYFC0JHivKE0u8us z0WoxDapVX^9~%%#zN6Y8OLZvp9F+1LA6yRMsH-;KL7~8Cy>d?J$cx)zZ^%31?N629 z7v*4fKcmxO%ya4&fGPJvqH1=`h8B0u7^=If_epS3w*iqf?)>p$ZOfplB6lTmMLLA3 zgm{4y6>923JK;<*l>t+#9YLqzCr+@LM%{bicSuU@t}|qp_p{_7;PLqqmLsqlw|78a zaRoljI~iWQq@Xmk%cJ8>>=WT=u*3xr7Okh7Tf}7y9H$*2ddhPP@@GQh+_L%ggvDb&@z0R=6-V?b3}#qLSTA@ zzuX0a(G1$t5Q3hqC-{kiTUKeYc zo2FPRV?FeJ7N??l`x`4})i*eCjkoFwnMx4*x9n>I@Vpvea{oYKLUtN9e_6c zshp-LGjoiWQ#o^{rw2^{Y_#fPiO8Xks)TeBBg1Rnn2z(-(8!KJi4f1UhHHo9J@?_a zY=r`hFVkmIEuRqy4)1}p+EW<3U47c!`qPSucd~+Ybw_FoJm~nyU>$Pqxj^hhqDjmK z0b+y2B~iY_&^%SH{kzH9`9U7e&q@s1Emh;hxCyncgw&K0;MP*U+F~E1J9cFiLidP{ zHq}f`4IrE=kvVxs%-R#+g>uPOu$GYzn|Y@f3~Vu0qb1g2V2bpRI8%?+*LgZ9nkr<` zKEfL)!x#S1RRb{{GqIDIQ)NE2GOwf1;lTXCxWx49^p@%+>fcl%$o#=EoOC5TA3e`5 zlkLjT*OclnNIo)Cv*s3hsX$lU!sKHzXC9DV0x5$pJ^#*XtWbv;F*j=H6!TR3wVJ1D z)Cnc7feotnNaD@3#C6SU+dqr=abttPfu~yK!$*p9_4OF5;JP%cKdb0Db8$q+WPa8F zn=DEk;Rnic{2qT+_(n7Cp$Tv5G-XLFh8=FCEnfRq#OKprY9A$luX1lJ9Ds4Y@^3Er z>a4)0E_^YI;6MKzTSfn$HgTBZ<8iO}91JBUjM!VNODl|#3alF=uj^0P_}&ytv)RR+ z-E!#=2Eo<>CLQ#RRg_@hhKH@8n&(l`f2?K;vJUjv=mxSQoZfrIeCrX+kjsa_)ve{k ze0wd6vGVU@zJ`KJf|Av*{ibADZErt|fmw!N8b zp}p$UCo}d$DDyV6I4vmHW=<38q+NJxC6Xe$W}F|=Ig*+QAthXOWqVtdP&30kTZy5G zifR*#?fx5yxRR|~fdh=fUI!czyI1fC)V=9ym4Vv@!@cHgQ0z2&vPmnP>2ykZg#duI zT(31Ru#;D#))E~tnfGWdU(bcYGhDD#UJE=E?gf=qWM;f|HRGQAWU(A75<)~X1D_Q+ z9_q#+0Lv%s)1vxV(3f7kv^q&Tjs+Ti#r24|Igg^m8M9-8;nT^7LvlzswW(4R>rU!e zwI+;U=lvWI$zxj0k|TzPIERbqKp4^?y8~#{l8v8=tVaMrM=T&Nl4+k_TNQZ9@RZ5C zx}G~Li6>N4)BnCd%TwKc7U9y0F>&bN9op1&z{z?kM)Zz@%^5qD)b#zab4XAuc`N*7 zoZX$;(>e7wDPfA1seN=&PGE4AjVP|WL`-%g)QJw~IRUXOrmePlX#B`EG>RtU0JRyt z9#Q3-9C$+H26T*pb4QD?5~0;IrLqfS+vS0KC}skxP;%=fbFr0}sTa6J9>=6#Zja$I z!(Hf{vk%UTVTDgZ2>~O{aZq!1)rr}MVhqEA2K^u9Fh!)nF?1}K{&xX()WNaBG8Z*L zg8<-vDXhBa7UtnI;q`gNrvb#39s3MsXAZXVD(X;+2t|`Z42fb)MKumiYc|} zjl=SwSz4_%XykrXIf)&XH9GTrpJTpSgq*k*$~ODf#5L4_&`Ue6rJerMaoYhTrM2a8{NOXTp-9H%&yaD67{LbJ~Cq`PnR*(Ox(7gXeCu$}Fh1uNV+K2*v8uvAOQ*0z@fSJJc-~*G zv-$N?!qN|S@;usO5rwFRJ%HIz zRK|%H>u8%9!2`5!#u^~ zk$$~b8LK-H-iOkT6D_Ij?JdHg4U_KV%O(X8&K-jesThFF1D4FA+GL=}!qO%70(!Yf z{$v4s?D_Lv$VyKJv`R^7;b69sVXi8>yInwMJJ&;?8SMX9z}!2!mnZ^Mm15IuWa_Jz z4U*Y#KJ8NGv;rO|hyhlOSDpDgCWbeLRpP4kzid{NmhJ86X&M zZ2B|90wP;x#KAZ_zTrvXM{yX6gzjjgt7%hI8_E*H%7oEwzMkv4(i%R{d?beb53xsO z?OZAtcOO-ZjSgDai8}7>90G#UxsFmyy4Jmsbr5@-b0*gwTgBxfpRmQ_%ofm+EAYKW z*m@(PCu=c?5VtgEPW(3IJRu1)Uhk^S1+-<173~6n(O86~Xrvdo_`jN~&?v&h*BxxcDuL)V;j0 zFa~yAu)Gis~~O9DuMll22JsDrT>(+mW2sf z=z3^!q|&we&x(smymh`xmB>_myV+em1xI|9-@Lqa)oWFiuc>E%QGvKQ(KA4+%-+NUS{hk_DazK6hHRT^yvXe^A-K z75?s`te9D5y&&i10Rxj`<7VTBOQ52krWF6>bC<$> zdbbOA>p>*UL6ov0#!^3`e}XW&8J`I@sc+_P{BdhId}+*2vDCgKXBnQ;)=xIe+kX$w z_74YL|M~xxU>DOsNF?!zW@z)*zwY0&g{?;AO2KM1DP98lr0Akh1~a<)7bDnUy^{1l1gJ%?$}9XaEa+du3>XphQm^vlwv;Ft7;rT0Fov}U9sLxw5tV*saYx+ zCfa<8!L-&HA$UUB``bCti*O3_#k*ytD2T-R2T7;r*|*uJ3g+Umk@iaD;f`d^ZumVn z`<%O?JUThw;KJ!W!tEG?RpIxo8my)l$0{ypq5&xHYO8T2hR z=O8FjLbUm(_K91Im85p~=%FL4PMbBT%s<3%wVGeMQ_VJEh-6jGP+F)|47W02Mjqr*KJfc5RV*cYM zW8LZ4I&qEr?nEG~?9%}D$SMx?y3s zIt6Ri&L^0~Yr=UYlMw0_7mF%hZYTW*%#6`mXfmR|NF~uEJaNy8X;I8^Ao=7Ad9sdC zb&^Kg=3~!en|=dlyZfg%40gch&z620{(@c5?-Xv|zds z8;hLV%u15#oMw+J&>xlF27+=)e=4?~V-59cqb>nvh!!&Nn9*}*d#k@+v-y4+G%$$Y z=py3E-#}bN45db4T?JC0ky91K#KXCm7T}VkEc3|bZ8ped)(Yuh4!^++zlx-9AE#8+ zx>`s}_R+;?ogaGM{p}?%=H|`%)bO!UuCIR-}rSHD~30_i4bM1jZWAOld zmaj?V!6E3+KjTaL_kRRVqmJ~gPlhYf?3CgGKwenpY*Cg)u)?U?Idnl~Ov;53m-Qzb zcCf@+90z|gJk)TdTtY+BJXiM_=B_ADLDVe;DOuVfbJGuO()30ZQ|Als&p-odElba_ zc(n>>_+O>1%Y%2zD_j^~Pm9ePUn&%J8BlXJV2;HEm^l&~%;Pbxq6UhfyE)86KV3(j zFVl<|_?ON}C4UR&x8aBJ);CYuN4GPQYJ;L7Z$#C!R~G?7medHL(@Vi5)c`) zLxuj87QkEiImAAue2Z``)n-ugmwwoo-N4iTF2uq2;}TIEP!>vl?_7u_PxvjkUq-u2 zU+)Z#r%^r0d<)NxPVqc25n#>JachsFr?(%wH0yt0-$-aZAz}0B=keM456r3X9k^{G zjtJmh1>+9m?C}G7^`-!Sum5IoTr{kEs z-T`JHUu&sA+$Y5-luUeF#n#=I9&tAHBKQ2~&zf9-Z=mxa1up88Vxb^#x{%JE?ESJC zFbuiaPvTcnale0xWIWccW(#2)V@o*d8FC5GxSLe(Cw43rzB# zij0KotOoqeoT_^}AA(2RQO7-VhU333D%;ybW&322#F_M+iU8y zpPAkXxusQmq{85Ei2u()f>k#rAJW@fwb}TJ^)RqPvM!156c9%@i<1h`?^M{71!s!$ zr*>VHSjQN5coCePtwe?+G`;eb)|e=AUhi*8XC*93}8LZj{L@? z*uFI?SggN4gU`TQ0GL@Q^(xmZ@dXZ{Yf`PSdjF^(1R9FF+}8Gs1F@4Pespx$RB|mQ zr3@tB%^{Ie@cpIMy(n=^?UXvu{u#m#LGNR)3N5fWa=72xh^78Zsgn@(^(yUGjLX z8o`*peWU)hYhPP2>)Y_>%x5hjD)|J6%0x2q{`vCl>IKTO7uR@4gpSz>RFKCmfsX?=m~*Vy|MY&iv_aqwZZq5vTl#r^t1}g!G8B-0Js@ zM&#OlQuAu~aC?Q|d#{yXI|A+Kfc6HvIE4kK=dNpz@ZgEGJE}y|(!8&OT-)b37xrn& zUWtv;xU=-pYt>0es*OKT1(t1gM|P|AJwkT|5VZLB?wUjl81v!Q0sDQ z=%+$P_J7E3P;@2T&To$*pPfqekVX+Sf~&N8d7?k1;7!vbY4!XR0vnSti;$Z|2ygV{l7_14#i3O z(dnMF&3ol7_<(>3wRD?|!wl-bja^MwH7MV@J49os1OEc?;pkPgUmglx$C<}jJ7q2y zU`ULc0tZ1?zIY&Z0tW2{Ekb>2FzC58)hEknd;9-K)jM!kx~5&Dv2EK%#kN_oQL$}T zY}*yvTov24ZChV@ckg$c^BdM!&poe6uuUUIc*^sAY+9~c^va9cfbha#unIPTN+%^J zY~zvgi1dNW_#}1A&V}rz;rHE`nNzWABDSR9iKQv~mhC!8~HEGPM zSv@|mP(zuA%7-Z&??_3w zO9aUs@vm022(>t1%SItT#~<)l>0xoU$nknIT?>0u-u&H40ic`*-6<=s8&9YSt0^ys zx@l&YaV_zeVg20wNgW+cch9f@J>DUaw2fq8u|Hyv95AC*&smM(5vjg>p_{YBQn|Cr z`XGJzRSluF(#q1d8JVBO!K6c#J4}76Y$Qa_Q?m^=Z1z$@*>c@BoFMyaa*r<}lb(8S zRy1wm+sB!cTkLvq$V$gi6-LrfN%mW;nU0DX%2}r70Mm-1*)Ro(RJA5?n(=`etl>t% z+XVTC^=;Gsu@&EqDiP^YfU0h!N?5~aK%T^HlnJJbdw<*_vBt_ia8)xQBxoqHEBKDN z0>!nYw@$>5zgo4HP9^nApXElHsZv=uMo1{4o;HVeHbz_J1*>tkll6ie6(sEglExD7j!I>hRpSNq6i@Ehr zAz{sbxd8j)najo=3=lI9Hy;RWWuu2_Z3Ri^-b%>I-z0K=I%fQX04+043l=s*zD84U z<|+J5XaA-k-WPflRrb2Qh&y*Sh?-jCJzCxxD{bJo1|a9pVkGxf3N>Esy1{Cu18gKR zyHXUlA_#5D^O%-Ql~ygyi3{ITf)^Eg&L}x7uTtC9$E1*>T+;^mOEtT*$z!KQ znC12tTr!oVGp=JIZO+W;P~=1YlJKOk99?R8Dd;}w8P|+${^t=d zy!f|yre&k1svujn8x~c4B$fE+kR(YW*S!kSbai5j{>JNe8&ikexY}qU5Qfj{CLOvh zqvGS2$-BhV!>-t$c`g<2I!%!meyvRoTq_S8eGpJP5$;hQ0} zg$@YWAMsEK&ArZQPmbZ&10aUP2ZxoD(8k_@Z4H;K9x1dAstVfGX7%pzLFpEUESJ2{ zLhhCS%JbBign z--pE&QlQzm*~gy)MSbID$pFJV~4-{+|f3lbif$}JF2E&Bz$VQeZZ?SY>-CS&?dcy8{>kfGyydW}V&eoCBK z4b0F^?=dhJ1mo)|=u2mAa*kOzu6?=XVn=H&9J%CH&-$8m0n}{!w~E|t;+lH})wPRF zR_g};-Swo=>-`<7%!`g2Bc@}kJAWQWwNPod3Ys_Ldb;iyzPxzyb`s1Ix>$YzsH`p zq5K`rv^Tw}e7;@%j7MrncBeZZ*cB)AU|i%;%6;@8-d(ih$-(2pxz5ZNM-{=Xo^ZN# zo4szd70?YR6n6K?U{w^5x?wau%qoUMz~Ko9(x17gqS~Dvi~64v!I5wqdIeB{f6%1_ zQlM?YJQ>75xruU`Lkp|2&`f1>nH6csim_LJ zEkJ*e!1YH^$SNobT#(=eINT<4N#@E{L3ocnlhEw%D@ISK-jYn)lHaO#o#Q0xrjS)C zgv9QPTSyY=YV*mUVdJkMB<_Kyl1l_z+0Spu+LF}h(h$=y&Z;LES&&>7!WD#UbhV|j z7pe>k_%LtBKE!a@4Ags{AjgbwJ$QOrmPcjRE15pv47Gi`>KJ4_7;v71@U7yCY#MB$ z+v*0xb(;pc6_y%YqnH6xfskrIpxDukSGAoeGxnaZy-vtEbU^x-_Wnj)e*mXM*!myD zSH~a%>>f-1~ zA{*5=7LN<%S?o$e<4y*Q4=HSr;-HgsompytKeOb_vX`QTq)N-sX41S%Vqwuf7Z85E zK0K}H@?Q&#gp=DBA*k1w%EZP411-^)dM1~&0pa^g_c|K5Vz}^0)3xVq_B!+}tpUVV z#AzoK{iH+r;X1A1ZXFuEd1H6fz8fnc<_;R}2Pn(UTF>~S`ZvKgtzNFt6{Tg<=0Bi# z?b79T+lW{xH;eGN@s^$&M5_G@p4t$hIHKtxEgs2^r+em@*LFAdfn%+1Vt{B>4wzj7 z{-AM%>Y^Fp4L8eRf?3^cagVFmT9T)!WN zde?T0SV69nqUfoB8}ICCkxiqcFhCKyRwY#@5(Gn+4ikY~%(IZo{nVGjb&YUS%JBvu zlg-*qB4YK66_Yd?9s~2!85I$M-8+GHZ+)*PX0dazb-U1U1a@N$(w1`U$!ULm?NTeG z;^k%QUEmp_?zx_$W{LU`mTmz*{|>sfg+g#^Z&+ zZ#hkK=Y5?#POlMyH=@-vUTFnbe!VN{6MK2+Ql-G`>=$}6s$pVykU(_PMR!3PA;Qh~ zC*K|vk3*VT171(INO0`KZ0f!+AmsDKe7Ab&){i3AT?(0cle4bLhUs`j-12?ceMk`| zn5TOX8dxoBf&zA!fbL1-L5|%Wxy?Le&zIq%Z>nSgE=>!WN8JnOcNvbPFVYCK6u*IG zK9`P;scxuT*Q*(kDK6cX>(0~Xh7V<2b}D@WRwhp0q(dZ^5OVt|_)B`Kkc`qjAB~Ag zt;3yvH;ZTqJb(Yy5dNXIiF4W;B240NBg;)vgB`zR!s^U zzvgx2{iR8pLd+_PL!>Q2{2A zz&G7Y}|BX{`{eNiN` zo?2fKP`iQqs3k9C=F(1V3WM{)N!+!CIrWQtj^fZqWnA(BRD^fREsI4Nb4Ogn7pRWX%iVY@As%;jM0s?)%>wdtg2qwtjPxrecQ+Z z#XU9!n{J@X4N*>(LgZJdEVvvPx-P} zBeMU0w0PSg5c**z!P|h&i3Z~vNXJngS?(Fj{mR5hL~cGgZ$iguL|Sx4R|z(}#c_iV z+mTAk)uM!O?(oI+s+EZ#Z1)~tJ(IZFA!DHvaf$80a;9Jxwc!OQRZX#q@sp@SOPl60 z*W|x$#4$#H#VLR0@T5klvUfY7oLpLgUxTg?r(PO9t-^>k^HCixKdykM9zJFQ4GCy^ z*(@2t`?%(Va$2b3|Hx*WjExv)v1L*)Lp~g1rIdUV=ir6<1&v4r+|Pf(WHLbXri$zQ z^frRNH%r@{cXjy?E>*P?DBH*(O|sq8pi~YX#Xv3$5sDj{#xdFccfa?nmkICWm^p6Y zw1K!+hJKDz)$j5JaVJV?jw^;8|GTz?6VXKNy;F{s(QC4HRFrvIWJ_5c$4N!|+>){E zZGlUcOyD(-SVE=j92q|90mgm=9VB{G%j@|VD42Lh4RF#h!`?U%H3gOj$V*EXEB{w|0+hOCmE0@^)i z>PUA~-U2c&+0Pp)7jL$P?%HwD@z9szs#6~A&OEMAcA3W7QMsdqGD=#Vmp3ZPXlQJBfvgv|;>v5U#T}0`QG_X7n5&>BG;TF= zgkfY%hsX3UIe+6{Tg~AinY#cVEg(u)=;i8;$*NbkmNutJ!b*?@SQNgM>AxVcdZ!Yu zHqg#`G_7!Wu@(p9gfw^%7pCl^RJ^ILw_wbPbCo!A+p_dC%uMizmhNVOX7o?FdI+1a zDiZ_rzyLF$L4qLeS~6koAwBm5IqyFFbKL1{J-@v65Ps6ZO3=(uPM7RxR24q)UY?B( zahSu(b$fv`2y7&&l`s?kxOPs+MP^^X>CCGk)h#vd9_|c}eGB@d@75LFZe7kYR@4~M zC$L#ErGti!b!$tH5!F*-gOS~d<=6FjwQd34chc~VV)H$MVgB=BP?8O6hWe6^U~FmgH95zPOqBW>LX^>u2STS8O2@wON3UrVy|cee#Lj9m~fy^D#Z*-hxF(MKs5s zH%Y2Ij6&C)%P}kv2RI=!mfgv;8Kws@uST8w#@2xmW}SOA&EMO-knlS(Wx+{7Unj(r zCMD$0$AgAP)i{^$LC)y-8aiVGT2MYA+$M4pnYvQwc-u2U)SU3kXfTAo3`-LgV?-fR zuGJCVx`ti=81lm*Y7$1NHGFcNiZy=}>`1FfDQ0?EdN?=$p z6uk~%xK7wn?G{Ljl3_AoBawI3Gf&fLtBjYr(^8{luWI5_)ivnXE01u26oX z{=}5NoZp`>t@3R^hvpxFJ(1w>2+qor0-q{}ZJxbq^j->(LARPNUw>cG41_lCd;C7ihc zSsigA@Y!Vm_zeAu6Xgs1P8F5#$WLFsr-SYlCGwp^m7uu0xc7E0{ zO{6i=*KRY)*{A}C-A%<4W^U6;k63vEwT^TlQe%4WpTr2tie^3U+;J zEc3CtL;aFKhz&B6x##AT3IA^vPc`zz&hhk!0fm&s@B$c*`=S%b6Lv*@FD7#-U-$}j z2Y~HOaivqhlVfGa`*5Dj?zXrX-COK2J2u=O*Nq(jXG$bc!P*u$!3Ep0gH5`OD?LcY z`m?j2I!UEapCoO!Gw6Vq*#}>4$&c5(Cl=rojp&dSQ_sBcmhvFfSokjGrKaFVYqzSU z-ei4!^UUo-pTC!Eln!}qz@d>bZq&+32t>&US)MYo_jKmp@E(|3Ey;4;xCUVh$7a{`pb0qZv6BfCA)@3uKe;qogL(Y;&qo)^`5=7z7R z!&9fMAGK3JHK)EB?={SSY+v1v>3cb=XyIgv1C|W#^|N0!+0r?Wb6;ej4QG2#BneG2 z>3gLH8pct#FDClG%>YvW3wV4lxqK%1IFB9)*!AtJRke_Q#xZo6Z*T;vB#_E;c~eo1 z3ss4PRqNBQFTqlhnBb*lOUbf7d{#mG6;0&^2`O55wQzK({SJXP-7>^{Ge0WGz2-#v-%8aOE!Gqu&ik#XAp7c+fU;;<#;ja483Lz0OLGx8e%^-^7 zzF7#gRZl;qYmyw>eK`+(@fgZ)WkPiho**M%!Amy7!qr zfwiZxV$24Jg>#?Iz$$-4@&-<=#$uS)2<*C^r`s9?$GZ(=pVj%rBDXSMhZ6J*M0Eys zVVf-eJq}Y8r+|KU6`Be|JdK>PecK~L*9iL;sdtqQ8Ks`g^3(0o7q?YZM{|$Cco+9g zfgj+SDF~3fQ3$lSxYlssqy_a-Q)}VW={R+k^su7vmFyK?XDL*ZLDN0GL&)%gKu~`S zQ`o0<+ALPtyHU|-%g51H`KF` zqv;#Kh3!~uhL5-Yxn|k;fpc8jcLM9EFelt3zR)v}N*t#7XGBn+BNY98A1b%$k_&6D z*I||f5al_Ok@~B1VT0Kevb8Xx$d@jlXO1O}UX<^x`kVXB;79k zxczz?z`ZcncELNTb(w(BlX~E1z(RUdNI;DAhmc>>u-<;*_fyWhLqjEdd5p~xLsW=K z`9{1qSt*F`qMlNAPFx{Vh?Eqg(G31qe}_XRDBZ}RO(;^IAo&fI8OuBHLx;zJS{7k= z%1cK?H^gh`e0Y+4Mh-5W@KQWLl99Gntr+6SCv9W=mpB|q^@_)|yW=*h#c{LMb*BU1 zGTQvQd1PRK`(O#E%%m(v4qrP_PZccz=XNY_i=QCIb%@^Kh$F%RC@4zLeY$}tJT4@E z98GcZq%=~osTbDoQHbxQ52X-hgR-cj?0<=Y5FNtQ^(g#l;vd!1pNo35}@%T9u zdf8fl#+MNJwLv2kz3)v(UHV(6g#3ocZfZJEWVzP8WunHTu_u&v(c^)_zSd_Ii!xE< z{UX9{LIp}cHT@L)wz990P`5aYookvBovR0}OK2*I@Y^iJj;0EK*gUJC*UPoPIpFNB zRnlOjIDSYp?=`BTR(+No^Bt=7%^e)3Zvn0bv0Y2el6Pg>xS%P_%ea*tV=x$kAcEl` zfGMbt!ewvrm<}Y{*}Vnt45D#XjQ+|TrN^t*lD2bjgcTmar)+0PCHY{Ee_0sARibul z9VkTfpk3Ah_sNSZyiPLLwH&-3ufM@Z~mjBW2gG z4f8=Y`#nci{bFIY{-e_d(F+#BrvlQuk4^`_H{wK3KO@l!?iMSc1pvNgGpsP3OMZq` z9|=dS7W>-udWCZHlzPsm08nK_8{j@?_2pJjPim_;yQt6Jc%10tSksQZ8NA%_@b|P^ z)@2Lng3_PK<4bXydJ{ZHN8*-^4PUF~=tN;rO5Fe<6#fW!U>MIp{7+h?@igeV0;)Oc zQCt(pte}U&Bn(bZ-k!)*(n%xb0=lo7-K8Ye8%(?dc5w`f2nBmb7kTrUp<|%AUIp!5 zDF)PfM{GWHsGMF2AeAiLKv>F4lTQAp4Fcb; zd0&d_w10O=Ms1Bq-~8}q0~*N`{(a@cyxAAxoui8StaWCSE@=B{HrHu{*_)G1E_pkQ z*;SUSe3FX2py9g=*KK_Z%{!*RFj>Zlk;!jvMDb9SS*L*Z^pEmp`VjYMHq~8wnYGXA zozg{d0v1nP=jd|B|CfIBVt2Re&5F5;iG)w^d;d(@Wq$Xz6`(B@jZd3b2`G$UeF0PZ zJk0_}_52Y6%_WJ3q~}behr>XRwbwQ5@p?b&<2sVBOG0zGO}4>#z3kKX-QjYEt@rX! zoenm|hv7WGn>B)4-6_7!^b8bYwd4e}J!0sI&wL)+m zgzQjF0%+JFF`zE-#s2JokGaBe8N3~B@Yqi?J2M0Ud#x*Kss!Lf3|=j)6JoLM`hwi$ z)qASk{66L+b6-}>hQ5Ph^wNqJkCuOGZoPQbuj#uqw_8u$xt?70&bUsbZ*sZ2VAsh2 zaRQ5cUkb%^R+j>beH2f_jE7er^N+Tm;j#6|W-RJvG320GEnI}qGn@}Ep0KEGzlt1r zV2Qf%+y|^%(VY|(d))g=fO;ratYwAP*|t866{{M)sn?}S%Yd;m6AHUG5fL6iOFIEy^mkVk~@DU)Y-Fr2?G`J3=5}ACQ~&(OMd>ZY6x+ zxJ(;Zs{@z;n_$M!ssLqpNAF1=$-)6lhW6dm-AH(smjSjwh?Y4}k{?HF;QUuAf^dHr z5D5RGP7qer3+vwR^nVl`S?;hP-MsgziF2(Uy`l1=sddfXS(rqOecmva=v=8%xcMIS z#s3EoL^u2k2ukohPU&K&BRe<78-|?dk|B;rHnbfsgu;x%B2ef&GZ)Lnr)RGiG+69N z^pqGgstS;7i1n{*S>$}Lu#$--o*nRMEB&QT4CI7a?BvTRO+3h62Q9Ma0kJ z!Owq;zAOJT`Znxzd6*(JE}9tCJMDeFf^})_GEQ-glI&|HzF6+-<+{mZ*9_jq1?#xj zv)%i^8PjZVuP;FAzxQqFP(EY7w`1t{tZrFwb-I6vtb4q1S&NpsaUDdTSqn^@D15B~ zrk(GSCAI6@TSOS=7dTC@fDmcE(rj;jPxHOo9`FNd4bHn^JC}Ks%#e{Nr*k!DIu1aR ziSpGcVPk0&7+R%i6%k)NgB8@pScwz|3sNgl;JI0uuc$w9KK2JfaG%?(1i+c@*#ft1 z?T^(1`G@56+?$BkE5}I?adx@+Ep3Sykjv#4w49iroZeT0<9`K12wC38=n!pkzRVL+ zBoS1=UD=9Nv60Nw+0@ez9zK>-c ztG=}6HRFc8#HK#WM8wb0ivbNTAw30`7mQG-IwOa_tb~79pE=GTxIG1_6x(*Fl)+Sk zc`W6$e$}G-kVTd4Wh6#o{mTUiNrkYAa>J-yHsM}AYCDhXEyLRG`Uk9ikhhOTxPSQ4 z($@P4bMP({IJ<9ZVSJbB6p3X*y6YqLi48sRDeCM+G3gkL{tDY<5SfdmbXQ?z2b`x% zT?j9g>stPLp;0#-%*(dDc+-<8p3z&~l>?K_LdPt=X`QA`e)jH?!Yyv>tn56V%cM4+ zkfDEyWAAfsy>2eZeh6@=5y^_t<+n;hq?OT?`==zJS^Zxm5E4jG?ls3syo&GS4>?8` zW##2~kPbG1?d7bH8ZKFph=Wc6BcH}46(9e{kD3l$imGOFASQ;?`pxF8K058TxvCnH zewE6dYU%342vD^Bra)JV9#`_(HgIR{yymUEALL7AExxMEiK}JxL-Z?)6%itNhFuWa zUF*)2Zw);ktEOpzWCT>+ZO{#W`rOd6UAJKpP zDW48i&R16n`pNPaAy;+nY2RhYyyMBF6D4R9l+5R&I;g{Vng{!ZOK14^r7@~4s!OuK zBzBN(>pgQtJ)XLK4YDA1Th?vR;B7HeR!k6!P@I4RyRg&qc8nEgim~CjfhHFxrui-E zFf<-qWLL+94Nt+8+w5_*N7?W5JUE!;5tCr%E4s33CqBT>;MZqi*32+(Bo8{`z8+E~ z<5|IFE-&JlI+6|Ud*(BPc|-+m@5N$u@`sidoHXgj3bA*~|8YwHmv8l_tQQcu96NH# zkzECn;k9ya7Ji=yelzMZVK|-wyMAM@BZ^iBE5&jK*CBidy0#c2A`KD2Q?=J=kR;)f z*Ucp=ueewM>sIe)=UO4wcOR&B)tS>Zn@ANBrgiXGBZ|xidu-L-V2;F!u+?2#t7%Ne zh%D(sL`LLZ%lb-^i#+Hur*xjnUH9jr|rCy>~JieWVCSAy$063*IZpb|rJZV{}nm8Ot;qQdlw;8v>9sNArjT z@|m_^pUJ)yoZ)kJMX=hi^%iyse}={Q17E6uVmT{P;o3Y8`c~s=44j0R^ZWTu-Th-E z+a@MLsYLPAFC^Y&xn=&AG}LO&<>jeZ^nwS+{xaR9cNXlM9@FVXxdQF;_f&mdgw>U2 zArVHtTr$AGDtO^l(pCWS6|l?-%peywpCho&&AxTwACyxB5rvm#ql1*tq%>;>r8NX zPWPISpw$D*l{{RcbBvjCV ztjb|kE9xK*{miC*KaYzPV#L~&6+@`0)pq$~j|!rU_d^gTB<2DMR|nJQuUad!;Js@L zD53zrLF!ZIQBrrqqNE=(m+5SOmW4?{$Oy}{@KHdJBHDq_gmh{u-qD`el#|L@)Gm%i zxZ-s#%e|)gEs=2d{9H~Y-tREI(V;V6_gp3NEYF0~*qXDDEBtJap4n7>0_*3-JBpem z1N(sAv02a^cRvYHP~f`(8Pp?HqR%w(`Py?ZX7q@pJ{s6j0mF?w9=W4hEV)XarnxOb zv>GX?MToaOd87*$vc7&ljoLW)4x=t&MODZ_3IP1gH8r%M2%w62V#z@S3g>{GlD1;ftZZ#Wz)x zhrhB~-dAsL!fN(}^_R{xrdB$q_5A7j7U{QfF51au((t6KjkXoDT%OlppL(LKtd=rD z1?ee9E@7(ps$?PGcfbg$FYs4#cOJ}gfJbpy#)pmjE$u+0y7Ob!Q|&zL>98pW*vtEbk`tU0ofYU z3rXED8RW_1ScedXj?bkdF_STl4Q#A$;oiTo4%4r-G#+Qg0%(QF*@-#0OZTyAoa$?G1?SOrJRUwAh_C6C= z@$Kt@b6WxyvjfPr#%+kB7_&`FrST!YfbkYDr`uZa#(CbYZFwAkUq?dA zM_VxiE23$RPuxeHIv>}!KJBT~V|zwg)ooi#3jaDB->7m zs;!8Mu9d{Xp~8g2bzFcb?L>)m)S9xI42UL}DfkrUbsq!H84rO7YPP#jk?5dbOFIs@ z=IBzWSN*LS8=s}|i?pDC?{;h;wBF!`3b&SB>CU-!sv}G5(ih4#^-X{^8@xs{+}>Lh z-AU+(;KFCWw=pW(af&;EzAnwUXH{{xZn|4F^q}fwwS*mSk^OVqs{MrHntS@9Yidg= z@rRr1kY<1zKs3|Rib`Bg{=D8vpYdhy&n}+#PwY{R7<5;3iy*tyXYYZs$RHTY97}PD z0Fj!v-$SUciG=VpR|K8IZy$zmL;_?yDU{i^msgDGv!9FoKAe$grq@!=!7DdUxUIQ1 zk*6RJEHZFJB}#L*cIur|-xGG1Nr{&2;2F(W<{;lBltDjdnBQclw7hB94i2*yj{-zhWe8XswW67}n%u=2XbjZ> zL{Tp^t&2IjtDSy*&r9|@2xHaA@Vl^?bzO5jQ0h4r=OmV8@|N_nuDyQ2SBdyPKMkP~ zuGq!ST4Cn)F&=l@E3C)46`aU`(B9CFtD z!nP_?FvWA><2Q3&-{(~A6j(ukerv_+F-6xQ>-K&I?%Nb5AtKlpNU_v#!_?8I_iS&XmDT$Kd2Ubegy&Yo@@JI%Nf3Vnow5GXDLGZ_3J#^6QR1Eb5(4e+!^}9 zARvQN)}VIV{k2Ti1q?@X`4<58a%wwc?5cGmZ-vpL7#RhyNP%o_D_Bb`RTx;C0IzuY z!lw$!q!l^CmG1wLXQ zPVb@UPU@<<`5T!{T!jn zM_7R?e1*Di1aziHb%>5OK_N00pcsAqPB)Y3(hC-L1Mc>7TPVtq+Y_(Up9!bv1PkRK z7zum-K?>?0tcksOrf_&un21gCpk|+q36?Fk7?>vr& z$fy4EDnK9`0Nk)_uv%~`=W8az8U zGrtZr)xB$X!0$30s8a-&j88zJI;I_(?d=*yfW<0)kTVqF@uK4rHE(Sg_mChRCINed z%u?a4u^-_Z;?usV<5pLUV;2%Z67gzXU~nWAY5DT?QlDgT?xf}ZE~FOhxI3Xf`#n?H zjnrB|MwCRR_VMTK$wb+51-HNN*|8ZCu}?=5EDylievj4i)h*j&rX!I!5m5)M;W395 zpQ7HXEYejUSNSmG2EIwXB z{$!P+nWmNFGCka+PzXQ>y3ltqu;6{)4HI~nbi8m*jirUUBbj$IIY`lD=L;2&51u)? z>Bh99nqv5w55bV^PCUu>Q&H1vQ3(7>)`39^?NkXB8=|e-3lz;3IO@af`@h~n{_pWf zL5y`5qBK{I z%;i!u`6|1w!}xl}t{hvpHo62I>k8NL7|eh5%S$A8MKOutck{TmI^8i`q9FWF8t%|V zbXrH9jAND>g`GquH}^yuGTcV?ys=j9O-FPCc(_eYSU>ejV*aWPbDiT*+{~Ncr|oY8{T| zrH<9Q;#6>o$by;!)Ku-wZ{(bGxFe9Xp6d6i*m<>#Jxw;cM*6Xv zR_?$3kXrAW)n6{jMs}tDJjNIrP0Z(H{dDL7hs)Z~5zfWt@b-(y@Hs~A(ywCzv60MV{QKMZ-y_VE z8{-C$UzVxn*X{DFv|_m}YZG{5z`oKsr-mkD+W7^fchv7gkd-q%cVIKcZ+te`_A2a< zANgdWOKYO0)R!W5WDoAxz)?I$1yrN*=;#)FO!U0F^WaZtw_{UYi!)xEA&2>M)q9TX zE8d=NkQWNWBaC$+$wZT{rBAnb73UDu!O9s;1^o6iI6$Jz%4;hMs#3m?%XAZE6d44a zkn{|xXLe8#Waja>7x1j>fx@O~tos{MiEth*BLX!}xehi{xPCsy1p8|ex%wYPtt-fc z^0IRl#GL}YNw}E$MAlSg^-{|MV^;GZ;05!7YCu|>K0nfAL4YxWAb$LcCXFqkG#gAE z#jX4BFgj1}M7Is(M`Z5-35t1Z+db1|>DL9eM-P*xoyGT7L=`Q)f}K}xi6kf{sMz*0 zu>Z-3DiX*Dp;kS`82)R8HJ8SPe^hmzEvr<p78EW9Zmb%%N$9C8>RM zN}K+$vgG=9=J?`T7xE%HW8=G!$LSU~`@`*T?DuH;FK57xrgi46NrxhdUGnCyG^-cyxY zO6W-lONhK_!*00(ec!c^gV|wh-h`F>>`vj&k9N9_+mLsd4M0Q^vso-En6qH&;Q;+l zVv3bG!CX~4$1Ltx-!=%wL&yv6OaUb+jjax{;&7|8FN1T)t%Dkngi)$hNFP0C4@w!J zb%U%{Pwzn@uzmd-@=bWIwa%T3%1;``?n}F)3c2**L`OsKaO-t8cziSg{E(Vg`7;+C zm@~KhB-rz~S61 zcF1k|F5ACvj6171cVdM-)=FRXhuSr-JzwJRmw~^bZ*NrIxm3ywuBkmT1ZmU}6`Pb8 zaA`R-_x!lrFn8-6Ri7|@evIV$%Ni_^Q}IXfM}NC30WRcIF#1+7o(C$go@W=YRXU+h zLiq3yHQKyBgJvAkd>6UsTLYIFCjonu=9{(Xt7*WKrBWV5wbXN^+-B0F6!*5_K@$AL ztjWU5%1rowEN0?sCI5Z;U9D0=FSWpQC{xK56HJEJ3qyi&hL8T93mP-H6!jhMYxQ`? zr?fJe_#%O9D8IRJta~JW6ijgl5CSmX*CrOso*g(z5gY5MDZQe)=4}wr? z9C(a=IE}b3l}*)}PcmuqT;>Mt;~K$;m<#!xOOAX7`gKS715$0QU~_}4if#2`)pn|q zZ>N>(Y@6K#lL*&leRWhjMhWg7+48iAP_1URDkg9K4ClkHM^9#s$Qa=;gq*}m9VbE` zy~#qPyeSaGXZ}Ven-Jes2ZF-Z9s9&f+ErCWqP2K~6Z|jf>-oBA%-sURv?|s;ZRZ1{ zL!~v3>@y4bwtD4OFM7fT1u>X>5u|BF=eB)H_&Wl_p2yPHW1zkWx03bY&P9mSQ;>Ln z;g4-S236+Oixu`;rcRzj2I4Ozr2CtwOHT94ten>)`p-|0&79UJQw`d)94?IK7Z6{y zy+7w&_h*`+U0k8Dh^<8BN9R1Bw^=5JzP{rcPL%;GkI$hp&m+WBnxYuKJzqQ6v8;NB zaTfeJcn@8iha#ZP)4X;BJ`dX)0#5&!g5Ul%1^2`q4c}SUmzkMtn$e<;7>s}mmNgbm zVsLR^--(cMTx1r#6{-9(HL@;-i-aIXFb3~bAj z1647+Y_*d;ol@qleH7s9pHuxhbCMVNk>hR4YejEAD=B-{Rd-1v-0#7_gPwUvDsSjC zhCSRo58g_&i4+e4!C`SUS|0=ToH?!iiDpev$$ZM?gm;Ko5OBTN6idxprE7xSYwKJ_ zijMS%M46P1n!lMkw%yNupF<;C^_(cJ@@_DRuG3>Oc#c6T4s~tGy+5t2A6T{KFT-2E zWWdp#XE&sGd#|r95cOB|l>R1^jxdA)S)J`?(XK#V8{|mDLi)5f9d7eJ4LExltSEo! z>U^-yN)MFGDzg9JhHu~od$_<}G230f3ufz!D#_S4vego+rW-c44Kr9@xSQnDZwrm? zSQ7L#GwI*PTnif9s=$`Jj7Pbk!x8rhowmft+x?1Q4_{~PLe*?C9@sd1#`@7QHE#an zY#zz5dOJWG{Y*W zuE#n@qDaw1Cl_;NfpX_V(Tz!J^*$49AD3#i*=VhrKKY}JqsyI=NVm_&vCFB?_5UXP zX8skE>ImgFXA1{E?vV%-pz!*?4lSnFNzIRz3=&8O1tm=bM4IH-~bOZ0I{iYTEPx%N#!z>}LvjOaH>q zP~7)Lrp)OW5*xF`-DPHdmEBnh!pUjEinl6*wvFdHpeX>l@8;H&i*mx9i(r0F@fuBQI4@$~ansldir0T8otnP<~0ZMq|sd#T7JJ9qGud30M4!BK0* zGkbFBxw6|tep39oWpc)RZ5Pg*-4O|-XE*LbhqWKNtOfnnOZrpqKtJM`j_pzVN|Tcw?zZO@@xOT_y$ zI5`XG2()8f8xx}#e)SMHH5VZ-U3E2*C4c0F9p;!Hm}8rkPLRfzJm&XfX!Jf)%VG}lZqV{^eRPIWe|C*Vb`y|$h+a4>SogDY;a%PdpDTyjGMnk5W z*g8{_X!2Uj*b~d!*M>*gZavmhW4aj(St7yEb!s|WMaQ})AVr&cO10peTgB%}R4qOZ zv+dCg)u-3V-KC_j0<9p(Z5ib^C427d809syCRet?ER-I3SyQy6m}(zOsvYR(Ar;v$AFGxUq_CBG{U3< zWEUayzMiKIdKNw1aNCX!KaRV@-PPW+t3&w}U+pH8a1Zj7MR27Yfp2qJ>E?WRH}(@3 z{|<87V)B&}K&NCybHFGkCyu@4}4@0`Nvrvst|Y_ij0I zt`zv2;M8204v zztZwfm>8!5NHA7$G9Q_+?<(FmdYyML?z=nnb6T#{_Uyv&sbO?)Nrrsu z>W3nzSRbW3Wo4=Oq)R9#J7RXM*|ZCG(34FnzY#f+Vb{1Ualv1Lz6+p+hfqsvIt6)< z`}J0By<>09c1&s4!N)S)^yCR1m0e1dC=Bd?egsRE5Yy+QV5`yyW)Se3AeZOU5}9I_ zPC%glM${Aje?)y#U?7dsY;4=y*tTukPByk}+qP|MgN<$5HgCRjzH|S1oY$V|uCD5? z_SW3RnRilN#k+NpPe2Up;Q45l@UJ6{Qv=dr|A6S*n*=soy*l zd9_b(fG717^Z{yai?pt4xt?Yz>sHfDu1Ua-7P71wb^L~YN=gas@+fuvI36*QcqOhd znoEiS?xhT4W(xR_CAsf5KStm{CsZ-}?gE+IaB^iRe22`Q;dw%NXfF&XsG9fbeNlFt zrOasq_@!rCSYL-R9qz9 zJYcj`YYd~uW!<)LD^GnPR5?hAnM?>KS#6~dkcajTA+n4DRBZ~=Onx4T^N5_%+T3V` z2;D&kY6=CMd_E2A=BmX?7|P}^f#FR2a8BAd1xd;G?=dJQ*c8BZC-M~qNr2kS2%vYi zmI;f#hA))Wr0z1~6N0#9#>G?xx`UJADDKeRGx?*7E++Rk&5tb61Tzh&36WG$9-K>T z;C#Dkw|rZ<e|6q z#D|p10A~ST4-iQnxgEr$jKtH}jh@j9<$Yi%B#K&0aNIb5ez))9t6pCgD`x%Dv((3J z3=@ngPTpoV0tyWqZ7j8~oyzfem%46mW4ooRe1XNstpmncF4aaSA^XK+>x7^;Fwf&a z3S4y+(=#$5ripL-=enS3totz0_jbhWX4m&lZ}IuROG5vj%dgW7n>ITXgor`q+G2dA zcJ0)ea#j6?Y}1EM;r2rzk6hn$lz?4|{c<_wwexH|f4lFr+rF}5ci-O$K1OjBr|`c9 zT3pZ)cw*ko_S$=gLE`qOxz<)tI-)Vc2ER1V15xl1 z@Oe=hc)_D{@a+6g&II%M3>9Anrxf+hvqurFzvg>PxHp4PTbT{_j;jpooN~pnbd_wAH{0BU z?$iEL2C&~BypCI32dh5$N3dhi5JJ=O*2XL0Kmw8xR~%3My}dgd!v;gXF;s5Mh$&6h zL$q)B#~X+iw%5|up=U_=iyP4l7I=G2R|bl+2`ZirPY1cvKHe|)|Mmi&&Hp2L(6+=} zLh9344sC3dpk`(&{1=lPYcV5;e9dREgE(&Y@D7#ZCf0Qyf3!)5ojAdfQdj+q73_ew z9{~|;uw?oSr!#7zh7a-OgI10L6mg_aj&60NnB|+^3_YD+6sj05X#B%Vu`@5I z%_ahmcF>;^93Gn;X}2qRv^P#K=YCHuOiq*cq<;O8*%mkukDki5cCZVvd-hLHV}q1V z*nt2>FfR%7fE%K$)Q`Ma#1wgTZ<5Y;QZ%gQL)=c9|Et$7dlIYX*=_msXIWosVK+QB z4IU}u{K9ksfVk^TVw?Hv!CqDNM8xx)K5+MO>1|gk=EJjTnO7PS;oi?LEdn<-UG6GE z69@LUL7k#!Gh_eGlyY1L@_mL7i(qhtGeJfH*NRh%eNS*i6h|uiEEiVK$ucfo!(-db zt;?xjU{%iggY&b?P7b~Kh5_h`wE_M2t$!7=s^%f44M6-6f@F|W8Zx58?8e!j+TQ2< zTMRUZv8?n30rkMFV%yX#q2jHVJTQZ$z=6mJ)yBA{?c&M8O$8+uyAIE8ls^8PjqvY5 zrY8fZ9FWbez%gW2oltDpftYW*5-9@dr-Atx=i^_=Q=Ucn`?=e#jDfNV2Gi?bYR3~3 zZmwf@bj{KP)j^GN6!po{U*_o$bI)IfPdf$f&-w2yr>YBx*X^a>7dNR>pQ-=7TJS%A znx5*^b|XX@&MI7!P0z~7y<;9G_ProCd`jD_g+)FN1M|CclCP@)#m@sg9t}*=ioL99762ah|4$puFju zD-do1jzg5V%1E4a^V<_tJCeasvtRfgv!~2I_L87P!nt(8oWfd{Q%T!gU%>AtuzY!b z$T^_)W~JPW>0R0aW17tlPEw# zafa{bMzpSdE;d;fcPZFIRv;QI{4$O@Gte9?}JJd`iv>2V< zgtu`i<(iq@`b@Iq3ORDJaX7>GUTnQSd~C^;B;vRBT98NGvpbf)KL&{X2Ppvj*Vs@1 z0n>>2MtA@FBTWSzjb|E^c;u}W{cyq+QHRI$47^bgrFH>9_H-JGPlr(*^56uSQio!< zUaed&=##+HfX>so^~y^5hOxRreKGy?49V>szC@huq!ZPr8AIP!J~Bp$C{`A!#GxEWe_j}zz6qaOtxMx^U8!9vY5 zT8#kUx^wFLIXGXMyrUh_xDPvHnF3$C+PQVIzRZl7jEu#EYH&B~1j4WOhXs3->zFXP z+}&h%cpQe4PQzs@)vnT4Se3ZZZS(Cm3v3)(dg+Re;_)_Ku+0a0Hk&PY?3DrrvxHfg z?5M>=yD1d1zaZ`*wkS*GJiIq4c8i+24+&!+d6DDJbM$!3=z7Id0BbLtVZZTcALiEd z_D$-=Y)x)k?_X{yyM*CbiXvNPGBS;`;57#77s%E z5XPI8>jGAp+|Fa~#eAPlp1;2fK8LvY-ss?H`8c>U=^=Ps%KzyTr~jQ0s#YIxM8Q78 z@#)+H3OtZb1n!2~h~Ht@N7|JbSB@u>N)#^glMyGpFq`J~EoRxye)|y*jR@o3EU@>@pL)w% zaUd(pL{40Lk?W?{TM*?ja6Ko8Ov5yJPL?z#c=dg8VW9Qlt1bTi&62>%V zCTt2E?3rEyst;xy3g}(~4=rC9jK~lu*l_5vtY!OxZf@8#8*K#Zx-La5RZP#v{KcZ* zSurz0g($b%W54uEAM^5J<3N9{XfR#kGi=w%HlLQ5uVWw?y$Uw!M#I*hp;T@Bs_f*Q z`S=Y}`#5NW;k3~-1VT06i$BGWfppO42cK;`YiZ8`6qa6d!_xr__JZsefw|hFV$i8QI$I`++y-QrfnvrN`m!h-fUC2 z=i@dgs&|!wH5L!_c+k%ZM7^VvATz+KMVkYh{jkw`L=~2~_IkT#$Xv9D>YGW*9HzSi zhPW9pA-7cgBiq{rtLYI4LWq7>PxKUV zEf!bOG>gKvwOei8(^`XaX-_|*f(gQ&KbZBJ40f+<{(-nsuC&?sv5IN>lM2okAf?bl z149H!t8WL889I_C{7T5PTzjN_HHs>fKB)vB;yR=!BmvF*8U*_aNnWhBS9`xjFfO6t zX16G1prUgXmwc7{3wk4@Lvm*Uk0&%*jxCAmPcSeHr|)zB@MP<@_{z0~wnf{$Ad8(^ z_mcfOY5z$M-ok*MY-XO}2rO~ z#DUR_Fg7kxk|zs1+`(rLQ*%cEtanb{9X*O-4UfLZ75^(*fPCX~WgMfox91q~ zUqw>InTY4ixcWF)Yqau6CFX?@Fj7fNy&w`CuWi1!^;*^MxB0@zl+J_u$i?3GtD6I{ z-k0s&ZC)2Mz9P2uA3ewg{a>RIZ!OG4dUf};4qLRBL+x>!Kd4c@38{$43i?mmrg&G& zFcec}|;#z>R+H5ql`wJ1(aQ z-!cW8%@YKW<274)zAKEo*J2iv+;mYTLg$@3zV^4a3G(>V)9YB=)uH|_fuEJv7iI*ez$t-Tm zS*M0IhygVlQQ_4E$5h8YC}h9Z823FXzJCf*vb4wbP*4=q=}yJ+i}BH}XcY#iT&HsC ze4pp(%X`eNzV4B!ZJ+Gylo^!KtFd3ft&u%c8Ng&1#Hhz%?$G_UUr|t3RDw>gh2Gu; z7^{+efCpBKM|TL`EfFLnuk43vbENR$SE~2HKl%OWO%ViRhY{p0i}g}TdM!!%y4L_w zDqECSO?2#iwp%O9uYRx15Ipz9WNYk&0+~8ZyQ)KG_P&oPo8StExJ+8QlHCoRi-+&! z9~t%UXs~4V9zVI?iFXgA zL2!2<#DxJRI~8g*aQ^6cVn@aK>BIL&B{ zEyZuY{%+jg{#yMzKO8$X^UoJx_PpJ0YeG97{Fif2{<@vwq+~8j z+;*{P5t$Xx@6084cUTSEn}Wa(NHpwP9Vhtq^^0-o zPt;0YqWJQ@ApNOBrj&Q2672y12gzsM#CDa+gnyT;(y3aWDiewB5S{{LOZ(`pL@5J7 z$S0D&PGaTB{+LXFW#)7OO5?OgMm&fRlsl5P0Royt(m{L8`a8%2*tx!(+pJbz+|xN$ ztz+M^nxYhl#5hn3iCq(WTr0z%N0=(F(qje3{1%FL@QPEq_NK&Ag>-}6EtQ?`&{sb= zC|Ov-5!&9Y>C4-E!nG03)mumK$c)Y1ik1oBW>ubPXeGT-ZC63KCGnaWVx{${32!*@ zn=59qdlhid_lo);X};+miXg(x*L1}2HeE+C1>_BITmF2HH+xwz>hoK zc~$>@rZ=Vkb+b>`@isWm_hEM5`~DYPXaB5T>K_Tov-N*efjhqqO$Q+XSCg(-k+N@P`t9M8YhRV5Lf^zt^qVp2%xu{2@>FxcO|4Zkxss z;WHtBwaGT()S%UF`7{0$#$Dn1!)3stS{4EV9SCs@Eei<}xko785~RK-Z6>?1=y z)IkHB608u^6g)Rwd0*Jdw3c$R9ScMP^@l*j_lXZXvBM_-YKx!z`qRVM%rSmKe%|1N z9LXuT%rAYsKnaXt7}p@tGIO2jlY2^`+{d1I{4;DSYSKDS@rEf@f_#BRPFj`vm)OP{ z#qIWNzbjnm6+`2YoIowJ*KSr_3MH?-pDLGNAfhHSS~Ol4FlV9 z7M1{o`}f!t_I*vSds~bp5@-aZMWWeZJzgYoRMIuvE6-GQ0(zLb{c^yT2Jm;dZiHT7 zxpyGp=TC+=a(bHFRPH7QHRQ>Ljg^JN%hMBY!fy1*oR`bRUH45ZYDgPIoSQpo# zHosI)rMOYu+Jd|F0`r{))3@1_q)?C=b648^EF3VS85*C+ z8a$-j13j^=d3Gb4BT5aw-_EdUh>zDq+YCUmd!b?hQ3*e&kWAVzU}UgU90+O^lk;2V zNeSR_7h~?Fu&d4EHXpKoUfEatQkk+UGzHg2l{9geOAD~7j~+n&#%-i$cDI@Pm1G^E zH0Y|j>C82^`zHm~X4e6LZ95)S*@ByPS;xGF^0T)InsJEnn5B`rt4}B#mPW0K630ig zvc%tsP-(MV@+zW3dpg|_9(XG7{zLJ@`?e^0M!58B`cemLA{I}ETlMePmzhwmU5=-E zKqhxs)hBG5E@NXE`D@ZJT8%-bsLdUhU0ix@yDb#8vnjz}V0t|_x>*K(kq zRov6h>`o^R&;9_%u<9bK+@F!Cj9w?Ks;-{UG-ZPOP%vjJOS{5~OrTkW4Zu$de z0&`!1=%>08cA|G^A_{$!Dq#v0Zg(-p!QC(qHUCL^q+hLDJlN574~wH*n7p z*xnTIxS-y#N0H*CL%g(Lpv=5k#&P&m%4b5XI_n#1>JQbeJQ$91EWg=WP{`ve44fJt{d~+B$f+~Q|8ty zmOehEptvb)i8QxR(~yq_OU+iQr)naC`7-v)hZ%J{+PpF?I$d0lZXowb09vlnUIMqe zL8QHy4NxIfzPu1WUkwxlL>mGK5ElW#jzPX;T2$B>$k*J1CNJDbr(8n{Qf(<*%<`K5 zK33~DdO0!QMZw(zqihszY9%8;#%_?#+Qp1XnX6@i5A zpM{>f#2sBza*rpc!kW;L!ZEC^r zhh)sO8(R-x%$E%$E#XdId5$l{>&7&k z!yS^CGBtE#)q5$6dv%$C+CvGb-26zZ9wQ{L%?C{~ylr}pz4y&YHl)vYO7??xts_mq zHgWp*1F8@g<6|Tv^fxbOgn9Uc*G#V3j2TXr@{yJHL9{oIBm{<>?>x9J6nGJ=tEXOV z;Q8?4RHL9A{cNr7>k11 z*&M2OStB{0UL+;uS-T;8oh&DGR>+D}EjpQD0m!U9zqHYp zZa~~nLSHvbXs*Xda}6B>$JUin9U>@(a*B472bT)F@J!(^yVWiR028?cF-**64`Pd| z--?Ih{v7ejjdf@=uem)CyL8!z+hznVHuCn*Z{Mi(PnZMS=mYv1)uN<_mu6q5f41R% zGP!bC#Za07pRDRt93vMyz5F1Qt7L}2 zGrNN#(s0EYk*T~<|3!;HHrG=}5D`d)WBnMyeapBMy!bvW@hLyVE8(W*9GI23QJ#*_ zXsTGT^PC)=5Lke<$XB(0Wqf|5tc~5)#Mp3!Y(JB*EU|0-yE%tg$tx9Y-5=Un!?d0G zJdRvTj#vb8@XoXRl=K^B*@7Q@vqIV^+ev05t9m+EPME3gv9C7V|0Z2mS~kW;p7YfY9;&c{AqTKIH3}PD-e3 zu>_7|9`v|`JYBMCqQcoPLFH5sw5%?TKJ6DdQ?6NInEIbnFtve%)}VNk zyoJRH#HJ;)B~6j0F}kXYX7K|zqrcr%(woc=?}i$jd7|AyWfSR^zXDOJ6Ll@CrVe!R zM~|?LhqhZ0!CMy^@i4Q#z}61m-nGXrJ`V1+_|$jiYQF}UxWk)26diNSlpIVAW9baf zOjVPQlAADs1%&ui+5LGeiA`DazeM zsc*~t7)ZK|3?t0?suvJ~r}DB1u8!+6%aj_Sc(5on(?#`S%Ssi7fDrH}y0sDQWM-~H zfNQ309#qwlKkR^|RKu}+lzy)wu65;@mRXxE>hq8| zZ&fvvfeSNL{Q}*kIl*(IxgLNQq1Ghgb`VpVaDIrGhbQ)>xhA!~8PrmDjcYGu9~aTX z7_iIkLAd%K7vMxhS;=^9EshO!Kc-wEziC4TNb#W#N;LT#Kw08$m-=0bi zRKp?ttXwkwN&A->-?83itg4k*isWO8pD-5MjV{&;;D z#a=7&OPg(k+1Gf^8}#+#jQ}`nq9&}K{-`(HPkh<`jqgen%d^;#?AYzA5E^?V;Faqr z+c>4NXzW|1g*oa(E)i;8>x2H_eL@+BIn>m724A|2DGIAjJv*O?C(_hk-pIwSKbDcJ zU8PBmE=_SH*keh^zg7yjWC7xg8SX@F7+<`I%sfxngJ>j1&#A+u8KFJYOd_9)WY7IJ zAYJ(b1?PB5249JlD(@@ZgP^dL1AN7fck^oDZN6|3>;#xNUb4wl3I&){=nX|=o9n73 zc8Jq5mq6q-kY|#3RNaN5pcD0#AhBpKT0IVpT^og#F4VGCtB?ln`z-*% z^Sg;x%0k$`PxUq4P{c-fWFT&SQUKex$^^-)h0D1WzbZ)zQg=2a?Lm($ky6lIH>qp?2$)0&w0F5>8((4+Xj&Jp^3d*) zxqGjj(45dW?!@>@BedGu%zhF@EJX@=bjvc&tIa|V+#uC?0jvpSW1(+@nXwN><3Uct zqzDtt3o?0kI9120ukDm=FX=iMs$wF-(|j(NkYbq@4YMprF~wjD$UAog4wT8d60LRP zyF-SfhoZ8Z`)cKCXLrsfKjSTq?5fugXH0S5+kCHEKJXFJANiw-cjKHx8=nk#~$ zv!=VRm;$QE9`%D>fN{jKZeUY9Ol2rLaV|=@AWQqN4C86(4ZuhNE`w6RUio%22 zIIVl;RfEP3B;(p;LMwfykcC63uD4~!l}Xu@MpU%!nF3`5E-4DKPWVqbOi?O%##P%V zJ|ZLhgU2C$HYoV}I%XsJvDAVa1heQ$qw>`_J{@DC?q-r|llgUU;p!C*w9vopr-EY6 z-shkYk9TXJ(Z_i8Xr{bA*?kFr&!_y7m)z|%<=9IsKS9&XPUogw4EPj(1W~*~YcX}T zVA8!TQg%F8F@9TtoV60|o!ITBm85$WKgO4c{Uo%hM`6Vbn&V_AhV(dtKr}|~GFRF5 zbMyleH$|9PWgGA=nyx^6x38`%XFB(0i`{7PkZt$kU~Jg}gAU2j1zkk<^D3 z$=eie`QEoFZPiQc92INr6NWb7KLQXftkuH z8bljdc`@kxR&lHC`f0EIpoRYJuNmWGp-8g@R@DtTS!z5%M9bJ(4~QYt6$m@m4xcCK zRcVPmrG!>h)*^rPGV44HczbKTY3A>2{Db3;SQwg2On~onL zaVZ>g6ESa`<@B{@+{{hYS2?1Kk`5qT--5aB)qJz(s~|sR-Yj=!aqB2yPr}?*l@&b# zGvarO)`BmULa0KpOj3;LuOT!0K(ANJ0p8Y(eFuOozJ9MJDD%TAqTHKt)i|9#6TVC(bwZbwQkU<{Q|AB?KkTg_1xwQTMvfpC+L{v z+|K0ht5L8hPIZ&Y%8QlKIF8)9G)h$uHj=8ABWE2ac@!&l<>ywMMZ5R2XSijjf=3+| zHV7&-AbUhcIorD@L;FY^#X?h)38|KHmqmiu!gs>1^gfW4MaQh`4oDyybxx# z$`BRdi*5~xGbnS{WP9g`&h61@UzenIt%DNSZFc(cStI*U7-e!uG6k^>!@hH+SEXb@ zkHpAEfh=F9KSUeQ(SM=&`EVJ6Fh8`Ry{@S#Aqkh%9$GSC@x@Dbz*!UXb0%@;*j2Y- zlfTfzm}bDFy17U&@mJ-?kHGlgg$p)+ST}80Ejv48aEm$@CI71twZ$<1beIEU4Mh>#Ba=7(WTL$rp0iG0|}g`=B5ngougVscGVPyD=A#y4KJ3Iy#R!no7~>l zSlyH$72avceG=k95M61e&>U0ZLb!}A&|e=VC?u6W#? z?JU%%gL6U}EL%ku!7DS_zS5k0HsavqI;aGptJ37`Zg$}gB??B|pO5I+vfF!q?TI<9 z7%un}GI=tomOBJ1lWR|!UvN1@@N%7P+L`3TqOYBPUiLTt38NnMLuF91*TcDJZ-`fU zifZe!hfE!P=tE)qZN;G9lW6=s?E>@Gc@o)XT}<#r8~6afLP}kQctWV~nKz z5A`CN7UV`j7S7nD0{2}b1s=*UpW2tBX(Q+hKvC*&!<^}aRK>~=+CkYXL`ODYSjsq%h(&uEPw3T`^jIFZH zPZ_jLjMRgp5H=^NQUeioIN*mwB+-S5oZv0s7;BcXg>~Jd@;=Gg&-W z#kC64O#Wz+b|6o$k~`AloFKgGK%mJnL7NLp*eD_FF;;cTbc^Y1-Z?(`IOI&tN%?Qf zA*eyKX7ZI!j+AA{w^8+Q;cG&2t1Ag$xxg)@&Dl!I3zkIm$m0%_(6+SAL`qO#h*o!$ zD3^We{6EFJ9TDQ>C)qpipZ@X6+na)%B=O45JmXw@OIJ=IG+#hw63v*hT5RD+myl+b zL^Crdfd)v;R2tcq$OzTXOKY@?r|{85-YhB0aw&bxa53wNRMH8tWHbSMmQJR1h~sQf z$f7U{)rxeo#7!1Q*x%?7U)-qSgGh-}{aQ&%0U?7irGpdm(}Pw0Tn9qrnS9VL?8p zEMetjsVFPp2Ql>t$#wZnq(vJx1f7rhH|;&o>%4f8X^|FKHF8NQ?4ju8g%Q84`{c2O zG3Sp!q|}94 zc~e0J*i&isCH#4f`wke-%Vj@|;b@Fxhg4mYmsG?@xo%f7q}-?7eco(^)kPA)*2)XJ z1AZpO2L(N);ENn@533_kHE~^KZumGLfIm%Hr zL3Rc^+?<4q%JT_xy6iO^8Fd>4%@C11eBt^-*NZ31Z%}Z&9m>AT3+0?Xt*OS$S*rnW z;Gad~&w}7Kf_{w-JZGJekJh|>ovAuj%8Ag+pfLUZ4D9^|Jfaq*{$B*Js?>Mm+C@2i z{XhmNl{44EyU-Lf>c)l`HDM$Zv#_aEoYis)4i_nN7SqZ)uNSPN8)2WCJEFUfxEEG_ zi`NcQzr!y4=qc0R_k(MiktLo)p-Ehkp!DrT1hU!@^ea~k6cMr2Aq>H|L;=AzZ~?ft>ukdpLJ~{2=8Q?vDpOLhZu~qZa-D#|8MZ6LB36@_tx}yEH>Xp0;9$ zF)rvTM{23{D;zz~6df!xKQBlf*%^2mWKl58I75RLE0>1H`>1}eM+~7wdm2k!qbsX1 z{hS^rufXcX>HjABr;aa${fB3*!gM~;7+S3wOCr<&)2-01N+8J$E(uy0RS0?Cj9HO+ zxM-BbeAbIu0XH%bR?><(V~Hfe(_pbBtm?9Z)SoIj2qc5|FX-obUB9f$=B0Wp2;+czMk^ zF?GsSf$au|1(n`{4Tc(v@Pd>byU=hAV<9u@GeYu4zKOX7K9EhdN1xdYyh9m__+|%T zH5j(Ewp{hPC~+1Q>G%khhr;0*g}X&DVfy%%*d05yu|p_l=MAWH1{rukM71)ml8YT=v-YIU(AgJ^KAmc6+?zva)g_&DS=+d$_7|8y;s?HcULh#v_1=;%^dFl6QmL zEgt?5c|H{km??QBD%GCA`*o%hrW)~J19R8JPglAP%1mX$McqFFD(3ZF`w?U`+JJzk zYZFR}yi-~hp{GmwIcq2KiE}Yqlie(17dg4AlVhh1lu&AxtaVqFkw>1|a&y8qIf1!i zd-FePXbg0ZCiUl?Z8*~5PV5*>l4Y#5C5HV2^qYzP!@XL9v1dxTTW&{Tor~M%KcJvi z6|>On_Q&1jB`Y-N7OqjD=QK}lkd(7gvo@$LP-tyRhPrR7ZQyEg?LqSHa_|f@?ckIW z|Am%0h?eqVB)N)>xQCdt7xi>9v!r@Hg;ldy4tgvqa1*-VFglYr@wS^ENJ62rXg5Wo z_zP1G@JaCdfDwwZDjLGg8)Evf80Ky4R}@6O{CKl>=+^CVl@>U-cgXR#s>4iiYPAw@ zm!9x_O5NuPzo$}(v6As9F|A@ntnt@y0WGvBW#|CNFZ2C?pnMY7=&>hh_r{$447>fe zX`+d-f&%tkwNTdZEm(molHwr*N;*`mZdl>Ku)(~vb{B2gRwtHDW(w*{bK-nf?y?p@ z#}N-|iWwN*n0A}ckqZW<96aGcTzD?Zjh?@lVVYKw(|s6Pvy`Qac1N8dj=?f&gOn4D zQ(inH#oCYXmN611oT4@$UNRsowG$VS3gsDT(pl;Qs()Z*z#^bJ_Th~@uDxc0b^lC* z-sa^!9FN72u7xRrH8T1XxNSAt!3R?L(gQNxu$%853NK6fq=m@}lYnp)p~4M{d$Iny zJ-qyb(vg&>r;(>b6;$2+BlXi;=Qn1ex_c}8vqn+nFnN##!+R{`mSizkpBT~5eEQh# z+SVEq-c70>iy=e7l|stGzd4crCpSd=H#cC<75g&hTRqs0Fb^$uoS0jNBbRbW(Mr*B zmyy-DSP#z-C0VizOb_x#Y6!j(ahx!*I~{u}8(-ixW)@|gEw}&0jpm+1(1I)qp(s&4 zG?Wb9@kC7DWS}CG=CD^;fJ4tm4)@fNRKjIw=RQQScy!JE?U>mJj7Yj`v)|FVFP0x=3MbJ@cpqgIiv?FI24)_ zQEVQ%x|X2NP*gjepRr6JxHYfOO+xS2MN;mIGr^xhgn7;||GQGCrtUxY!Vds~Kqe#- z>qGh%c0(pqXk5vSvQh66?H$QS70OWuu3|Umuo;GBVb=!Kib^o?9{Mo(o5BG1*NeHR0g}uHxeW@&j9$%POZ;5t@KI zUaV{UW2G*TYN?!;L_Z^;`@G3Kg^Y$_k zlQTMsm`>mV?8Me>nxT0Lg`hL53MQQB*ErJrpb3*b2z3|*_YiQ74s|g5CF-7Cy&=>) zAvKdBy z)dMy3;uF!mKj*vt!A8cU=*@r@gGQj>8k>X4X7;yhqi7w})=%ChV>8verfM7mkYt*l zoJ;)zxdxdge)Eqz$kU+I1itcNW=e}%WdR#D70@e+)3;!Nb`e`+0IFFI$*sDK%(=Dr z0`ukpK2g-fU=;j7cw*)SxK3vgNn?cmN5Qo>XOE& z9tts%EiJ4LtdUF=7Qa(5+mbLpd{Qg)&a7Z~?%~~nb|p}0O)I2t#EIJ2jE9tfrC1x4 zx8E&t18}?$B$1##9RFeG{ss8JUGVy8f{bNO1|4(jeRI;rF1>%FS075~$5Cq7Lk!7{Qmg=J{*j}zX3QU=o+|mEh2>nDfm4=$KC1N&*k}>9&-Gqi(;xSJ zOlMC6e=MD&WYM)fpLq#$XS?vXz~$x1uX#nN>hgkj=>ZzcIa!HqfQE`)gk+q>QA(b* zG-5Lu1B*+;Lsc6UN1g#*I}229DC|#%#Jz3atf!WnBPa2n&VPff74T#fq@Wkb)Fqvx zilgn*ThNhZYW-_qmUEH=%K}mce3?tWp0@0^6xmo#mi+PQslS^+2^N z-$UsFl~NLr6W`s%ie8GHIY)AWDy*BsYlq1AF@Dzu$`$#3GQIOhVq6I_M}4Vfw;ddz zl)D(w{}EX8&>xr;pj*eRnWKb5UKj)6-yJneWeWi6PRCg9POYoYou4l-3NBJSaUJh~ zZfAo!%CLSbqF%y6pFd#5DHT?x$mB<>}IxG26QUNUm{zKo< z0`x^xj+q}R-lag*&7*3eMYAU7$cED{VDb-18#FkT&)_1?h!_PfZepn4xHscw;{Beq z$$~3g169>^W9YLTF}{|iypJ>L+ennLQ$qsYIFmmR2u5S(TZuJi%`JKDVzeinE#%)J zNpcim*-MM3RxeOH&Y;lK;n~<9!x+o>c_Gv&?8Rv>n{DCMJgy3Yd-o|$6ZECpv-OZ} ztdy0K-y=8zh~|@ye0mF_C4YR}rt%wO_3rmhneH>`{rn||u)nCG$*jrA z!n=h@ga6F@20|7Nv%a9Yc6dRN4$_sCEq)3Nt`tPE<)2`h;L78cGG)Ks->Y%!dr6t` zO#WNiI0*N=y4-eK34H>&s5+~0U1jXdaORv*q<*IR+x$U!VMmXwxb%+U(M1*U2`Yu# z0!4S!lZaW!Avm-u!10D9l;&(F3HYa|0BS2cI5-a;fJ{7Y401kfY#nVjfRy^ZL;Z_mr0GNxL7YMEY|R*a%?`>l6efD|VY8!z0* zWA$^UEoXx3^_)k$>~B}+C+~(_9b6ylT6`BJMyH(ljnP!K(8=n!DEUJFm+RXA$brqt z{AGh;hyTD*G;)MTed?Sjn~M&$r0+DDtL2IT^TZ0TD%Lt0W~!AD+3 z&L$B-B+Apd?R|7mBIs6%dYxyB<0|Fx20BBZ8T5lP<527{d3dnfUn74KRV1qOw41pS z%{SUj>BCX+o-p--(T0Qs-6J~MA`{^v&1b=h(Pqns+~CD*na(!OF`Hc2M?PdIp)|He z7i1~d$uuw&zLZ3#QK6mO-juZVpK_ce!#jE~SJS3>t|ZF}89}Nz1LG)lvrGD-X@hBK zFfMqR<`LY7JoHm6;yxVU4I!sci;JNTSWHypi;<|{F4S`TU1UL8pWdLKi#J7Z+;D!+ zb_;ojXyZ565V*IYw~b{5hlTHm_FiZiA^GBxfmGfEuq|y8m=o_LWNF7}()q*6%1*-R z7}P~{|6&lziIhO71KnPUOWdAIvfX{!y>|V0)${$U`~IEyV{zCuQ^9o0T-Ojh{kDoA z$)xUC#Q7Ot_#X}k>%S!e8lZu6I0#vm*iWlm{wRqtRy0^%`Oc@`aij{VlG(wmsxl9f zFuVVEw1vrpFIUMlMJWWV;oJK09FNCc&mMnlrF&|92L~LL?Vb|4BU=YO92T0dj&KhR z=V-gQ9ZfBvG_>XyrZuX-TkgR{U6A6Af#(0C>K)iCYm}zp*qC_YnTc)N6Wg{m$&NL# zGck9xW81dviEW!-?sM+*UC+CI!dmO9?yjn?jw2+f9but^UCyDJEE#5`u^8CEHbYE+C_(%$F3=Q~DL$3PQlL<}F9UDgvkzST6b4arVNFr~4w0^I5>db|Yw$ zA!Ta{-^euC*}CpL&)`0Pte&CCYRoDOyVPoqLtz%c8r8;#A<|Fw2^cI_c|ly(@#xS_ zczs_QTh>`LWWXg`c$PEJcX}3E@IO~+u|JFgJR;aUN+Ex1H=8md`spr{To^y5IM7hq z3~EQN^dnb$(%orOd~QqG%KmGu&J%96{FmxYxzADN=>k(s;kT`6#j7(I)yo{T+O{rB z{r|XtjmZAIyd+iNflmkme2J@~rLk7?IfY8rA2T~kkQm#0p~zC;z*HXpeR)=9Z5*fK zA7_U8?Is&LVu!nIMs8E=0R55LW%l@yyh&?|n4>C%Hw2P!)zDT#s}rVTpMV97Nt(mH zC;~)&8=#_mPzPcciZ=g93%#z7cdYo!?8E~o%D5TB_j>yMZ4y1uUO()7dbbir{$&K> zM5+plZCIIxYR&vpxG#LWIB$RP#rUW4oQVEgc}CE=DP{WfHMgiUeJRKgm?a`5^0L*R z&;8gYji%g1Hdh7Oqe_JfiYUdDJ0`|^I!tqaQwvRY#?gGcPWm-7+?MlUaD&^YGc+skTZ%^VumMZ8ei1_}p^YzDIlb zM1nn9w@fycb}<^bdKC9?U=I}MhJictZ&%L2W@dJly=m>Y&^Z!SXw1vX_uN-gUCI1DD)GtLaS0INYEwX?Z$nmxwh#dc`QM9=t-U&) z5dqmu!1_h(BPtEbR-lzD4)ePi_p6aJF$Zz@|DhO8#7BpcRp?ire}#_7m+sq!u;lj! zG71wcv2NU&N8jTMob{b>b+hV+d8I6y4m;vBaUZ_%oh@T~2jzQi9jOCD;T&j^P`OQ5 z1=6<_E$O=p-AE}>k!!=5ITdiyAhlWkARjVOXu@HOE0k5cs*YT5oyQqow2D`4oW&34?5GO-v}uJPgd^}4$t+{ZhP8m zziQdovxK2?@U7l=+^5)`P@1ngP1)C~svZJ-FJC?Wb>_H_BIhDcJ(2`#{_QTMD9y3YX>jFZZt!|C5hwLyF2o#Z~DtbKy~>Bn50z+=?vyfkdsRi$)5 zqD>sX1GN)+WLbF3&qf|RMU=*TR-Di_Se6;yjJ-Zb{C%xu;k5qyft=RW!5=@dbIEj%^$6$qcy_fu9|18Sa=k+912LdU2H^rRrHtVoGIL zLg#8x0ViHJ2(-R)sMdBj;e1jlenrQ(C<7>$D^#}gy=`r``Eo$a>xL1~P@&l@hy2s@ z)~oYFYh8f)KUUu=v;P^vswNm_Su~W7)Vhnx%AFwPiOR*wuW1`n!?zahe@V-;)=htM zR`zWxX!{0c5;o;P!=-*IOMQ(?%`&g<+Vrh9)l!|rn}Spw_9HG+mi{?!MZ37|Sp9?D zBx^hi9o0&wLq{TKF@IMxPav|&3QSZ}?;%3SX;|!Mpk9N15$X^doh0n53&LL}08*iL z;m|pRwJa~UaTr5^N_$9Y%_enqIE(S!e#%D?P9a*wp+pCCN5LeQsLOt<+JK;9;fLRP z9HoFmP3Jz`tK_8lB2?Y;l<~k%*SI(=-O_t^d4vxWAGO+jZ@ZimEGI1pbog%Nvam8wSoVe7Q%?e`hI|5lw&shIx}q z77b0zQB@JC%6OIH?kWUcfA93GZt~1NuT) zPeLV<@&tm9PZ+nDV0U4XRi>RAhzz%J%?H|p68d>UQD+}{4h5p^0Sy~`pWSUTWT!-t z)BQ^T=(zC1hx2IX;=CY4(S)0#dNq;x=4PkYvd)uGJm(Wu8WH|0W`NBFGT<9eQjC0# zN|{JkO*Z5V5R0U{Vk;U>!$POiIW*U0yp0g!tnQ}EvtDd-xHSokKk~OyCd?cwYe+J~ zbvQ!=3aUfB`3t4N5o;i>^4baJX3r&Owb+xgm3hYk6-}3@Z(KXOl9in_bT?oAU}gpF zXU8BX(z+;9&#{Pk#lzFZEp0{a`700nG}AKB`&6;{V>eSr|Au{sX6E5q;j*Eh$yPI+ zGj?82O^WRJ;(MwB8q!$M?=1Wo?Tkj%75`KC#^QK3{LqB!M+ZHtXLo6q_%6+XA99Z;m)&^`Q zTRlVjZVVmdgYRQkWxBW926I_Kl6+AnFV2MWR_Ze}WfQt|Qw&))bAeh{x*oWWDu5BQ zs0xkjbtCU|%5wT|4WtDg-NlW0cqcPIbyz2^RkpmwJ28_7g|gn8=o^3zFGL9@^CmhV zrP!WWzI$;f$(X)v6$PEtO87A@fu)oX&p2|rG&XNEKG|=1GgMp;S!j1G%&xxNn2l7y z;Cf;65!Ug3%H19Cx7yviHH~^=4vohAq~C1l5uG(ybx6%Xxw%}va#dpKixoeMk9lEF zQ4}eqXT~D)i0bD?+G*d;i#}lNUG06{ram;Gk52QY;Cr_Q6t8A|eF2XTK!Jh=f!EAs-zrs@}Cm)C&G3Nv%Y`4 zilJmw*Oxx$TwhFHYwWJ_rfr2qhGzuDUDpXvPKICRqcVSn$J(<_Zs|F7xD!+h!dCjTGJ6YI?IFJ)Dt@Sn z%N_CA@|7!?mrUpw8{||HSj02wtj^5CvsR|L;5;b11U}6>&4uS3v?vjWLG5u~8~!>T z#CqTVQwl8=?rYO`X{QdLsBw{Y1LlVd5sA6x0_9QTP-%W*>y{_{ssfydJv|W*fb=&X z*4mZ^CtTylMcg^sZ{l-bz=aLM{}IF@8O#2WMDfAu;mI;0=$)T~VaOaey^NPh(D_(o zQ#C!C=@pA&%Eox0Tx7BrCTb-FO3eY>C|b1A;R9Tw`*vAXS~j>Tz8bCHo9fh~GG`cXIJ0MnkK3MO;{;oD-cggNyT#c|0J=8Mq=%KN8> z=9`ICXoVvOU=Oxp5-Zaj_k~FT2eb|j<;>tN%!-<*OBKky+;qt>y);E5x3J*Vi(|q# z^!1Lv5VGMqCmo@@!{x`bRz_T4N69(>{-9k*fWRisLrVsfAGOK<@&Ye{KUSgT@#2D1 z62g~5D^VkVJz^!|nI2d0I#%s9pm|yPrR^ab7qYUA zp}FaH^$#2U`hKK3zi%Upw)2U%PkbDbI$ah-Mr&Fha0x^iR3ZVoBf_Ik81Y-RCqPu8H3v?Ak>udndb{4lk>{4?Atu zvK*(MzjGtRuuPYlI+0+y%FpDOd_FG}Md~Y-hw-Xx-&^$0e$wPg)LDsmS%UTQ1_6Ok zVzuqSFihrf9&OZ)5g)xXa}nNE`G(T1-d`uPj%^X&v++KSE#UteTZFJOBn`T+V>)oM zb*W20Kf+?}-*Bv}b4U7V`!?|&!kp~LoYShn@-yDvYj(Vd(HqMf&{>`jIkP&fjH`N2yJ57nrK>v zz1l+}eHl@TDezx}5&1?vnv+hL1bi+88J$A0C4cad;c_!jU?|3ZX7QK(4%Y<7S;MGo zE9B7sLSwU`G+ebMxfKP&4{JM!E68d14OrXP&Rivg3Vh4al`Di#`AvV!mVVu4L;~hC zHSDkIKbkQ?mc2GQlz1?ob=L(gtRfv5Ano_j5gdeX!799FZJKppgav7T)|mrYVOb4? z8*y#Gwp2=n>LYMuC^V!DvuIv;S-_4!kh9o|9x3Q85zr2+bvCO2hS2R!fJRZ1$kR|p zx}w`SOSO1)ztXp_pxo|2k?~t>nJc=ge2G#)USym)1yA_973{BpH|{9p^jM{U4aoBl zfq4^I<)hpUIIMyUaVDa(m1riu{I&XYHVa%YhuyoMR5$r!2__xq_0s-vWktQg`?hQD zIs%-eSw{P3_{0hLSLOaiQSg~jO=&4NG;Rf3kYQKopt2nbC#GkL%=(5yt5_ubtShO! zlPG(EzoZ%;5M^VP$7qf@_3H3LOFPqhu)byzh4JF%csTC(B4(*+6IR&Q2-Kkfc-hZT4AxATP9L&N3S%AdJUtQghTB+zNh zU>{-Gi$v~w*s}>5h8bSeSxw?lX@?ntr5C5Y6v^Hy8aHzld)4cs&UU-wL%r&-<~a^k zh9$zRxe^U%@SchP;{v{_fRy1GP#x*IB916>F2;rFeOAEEs`2`3Mt<8>E-SXjGT3sI z;zFZ2^j7IB)O?Q}aybtofB8{4sbX=QR?u*rrv|27FlVSfu3Gc}f0!Z0YgAA)_jklL z11O7RL3g=)pnMLvzbS{|Sr#n2JY9ryTT)e{sUF01%B>m5)}z#Ba)s}1V+r*Hu1Ia6 z7Oe|_{BJRGmr`02EvjO_9Ybm0hywZ>N&GwsRT3I&0-Z7~nda_J+Q2DL0w&lX*liHL zAotFR1OcwjH@OlSIkMA2p-YQYp-+M0)cZP8+`KP0?ek$XEmIyjl zUs)4*s(!uK{A%@RKVR@9=8brf-_hprd7GVT{s+dR{{7-^I=CH6Tu*4tS7y{&>i$Ma zF{3MfnbsuzV5mGM?iUA-l_9xB3I|v0%NmgYWD&<-cZGX>x3sWycobS*8oXPdXGx@& z4rZBj3tbTn*9dMEg?gOeQ(7F}`(>zKtxR66Zsqbbj$a5v!RBFhq+~{03NoHc5s|Da z%vH7*NqV6vadZ(-R2(M5=;Wg)_swV#IJ+AvI?n6R3uG5%S&$Fq{2rrEj4jWxl1SHJhsu7Fc7bhHu!QEcTw5NC zG?hLeyuU4MVWy0(v@S)Xr2N5Y><(EhqHiFqRYCtP3frdGk6rcZ?m0E^k-W zQZi*c*HT^Ejsh|FKE1NwlRVqa3RvA^+AQ64a zE{vFh549E_c(rQUhTxFt^LU#Bd4`>jd!QFEYv2?ExbMb^tdA<+ zdm|`{_K2*V&QH}>TWO>`YHRE2cKn2+U2f*&0ni9E3xfN6G-&=iMcNVU1$&6I=TQPe z;YFp4#8w&lh@(RRCA{lDPd0L75x&@D%c7zF8j&*!DKEzzhmZV4QXssWn8MNzz~;a4 z`~lm(T@o+f$bXNE{bE&ht3dan-sN6`uR2++jzW^GGYr8!t!Gc$%9duUc%v3wbDqAsU3?Sei(F7sGYB~-=@sii}ENuW!4+uocq z`jNJxPY1w;O3o+8ahPJ9O zan4kD(6un%GR+SX1dW1KUaoO6{JtMDtJ3PrWssU0|pozHU0c-&Zvjj8LQ z0G)T*BP6xm>{0}*#nmte4MOY}O*G#x6ln{%djU4QB(z^NH-_ z;3iAE8^PVZx{mNlZOVZ~zVSl?*l&4=}Zw7#*>L#DmG4Pvv~IwfFz%p#BlwSj<8QldboG~;$lsHw#Im~!t6 z(j@%d`JD)vH_)CE=Q6g_QW6G@ZGnbbVVQ@Vwrv{+`2xr_mJ%u8$;HWc@%6{s#+V8D zAZn^f{?9`ya8;& z`g)+vWI2u!iAA9x&^Kq_~Gt%&)GqN5CLzVWjE(K_pi2ISG_j^ z-Y+t*8@}}aF~EfUYk*<0Fon?&Tv=IVV$>vx1?$)KnIl2&Yxgf{B5?BVp$fO;dqT`V zz{f=s&!byD3yIpdXb6<5Xw>WynhZHeF??ZkLg5R+w)fEpde@zZ(vZeFIQM6v2;T31 zoIFr5sT)`2pvxsTrrv8uS)STK&yuxlsJZc&GaJb=x6e4nz|PRYzRB1_h#Jek&VE)R zNZ>CNu@pVz$|~CtBF;4Bq(4(r*l3oZneONT?E{dBH_j^^g$0Bfr;q7Z+kAd?`z`pY zFW>*FoC=tHuNQ|mSwo^*EhDf$OR=1xu(vx-=+kYe+077oQ$3rBuuMk?`@ZchG+8$# zmF7gOqFZH`q}v46Cfn8pXhO4r$zbhzxm$RP5_kd$z45quE;mM|3x7Y^8>;onuC8rz z*90aZq?vgj-CGS+acyx14zvyNQACRBy z>|%{Chm+pQa&&>vZTcXLtOxVXsLtjGlBF^Lg?td>?bFcspHTrTRFsGF za1Py6d>X1c*SlikPaOD;o=f0EVh2CZdB+<*Zk65_?e{offw?6w@|s(&mDeBaO#mLk zkGdOg1l)Y*wqey*+Ox39Us3htYC2Uep_n+@Q;89LI^4}t8T z4Z8r$iq(u*+wPLo`ZU2crY@fP6WzGl;cF|R2(OZTUm6F~MyAT%;!K5V8|gh{jB}12 zDOxkb-M8ntfxIKUsIM@?c`k37;9n&LE^_oTYF z7#KP{4-{g$<12!oal&+oE=ve4d)Op#9n4tnkh*Ct$E&wHB>O)s`g39%$PpgOX(irw zaJQs8&>O`@sh&g4MXR=RrBYFH=}fbIf?4wl?4dGub1g{(0w6^p$Y`znh6~ROX1`1% zl?_mMQ_C-tUN;}Qg=Wr4#CAZ&iQftDdO<8X!gP#TDZP`%HV4T}*n1I$2ihKkKvwvR zE}Fy~;gnTdofO((+)B%0q=u~AXme4($uBsqU%easnT}Ky!-Ai~iNPB^lRdW0{!X@Z z9I^T%HE3l`#NJyhUYuq5FHU0z(b@aHeJlPye!d7Ooyt{5l~DW|6~UdPCW&qj?ZRv27~Ho_-3JZN=rF^6<4B(F zljO)>YYj%>l~w!pxgTzc$+a88$4ftL<%IF4&+96LiEC1etzSSIVrlDnwM24I3$_+h zf=u%BW$7j856IN5>z&w`$(1cPC`5ni`SivA+=LUQG8W`T7=ry%jVYSaba)M*;s=4ExCok|&WP6!T0+Z&W)GZ&M*)t0iYejQ#X&zFiK zqg9VvEWB>I&@#GoE0zS8tQ+OiNlNq|@)|yCoh1t>6sZELM*138r&vpGKodyTJZ}{+$%ZMIQQ5C(& z0~YlF>ben_3994T**z+1aU4tX7>P z3+z>?K7#-eXUF16K7 z$unLGnd#ND<38OCJX}*0HP)kIOrXM{|M^ zj_EZ4qO~W6jnK|ExsW%#&h%*V)c@x{qQq~p8po=0@zC3v4dbM*tJl$<*a=VIs6*Or zV&1LS1A=+Y1pot2sQ|kiTxJ;*!p}%)4F$W)LA1R(El;New+LOcUVJxG-uwpdike#^ z7vYq;E#4&lVqah9+=lCs8;yrGEjhQ=0V-)c0a{s*G`f*`V+2=&;WwY#V%`F{@k%8+ z9^~Fq`1RNAmY6rA_Usio&2sD%(>%E$&+=Rcc(=>c86ZhQ2jeNcWgKUP+mZ2ZNv2{o z^+0a>YW}S<^xOGOYPq%_IBvjY^Psc7J|VVY5KOK}+#mGb(Ahs{Vm}pODKPs%MFaGO z0w;}1)Z;0j^5h{Dp*W89O&=w8Nt1GD(R$?U?{bx;IhkAQlVanU`(6}w5rxa`-Tal# zxCbrMEF#Oe+DxQA((n(sE*M{Hx*FFFRD^93fmDOSU%NAt2pI4g0>kSI2ksEz5~o{% ze$iG5nBIdmN;raRY%cS^`eWAOnkz2##Wb9z8a6sc`pyynTV$kw-7xHXFQCRY=<(R$xl`bL{iNgJ;on*0z z^W{h)J}xf%0Y##*A*AFl74!4q;bnu{m20~|2jYey0bl3cI?f=^$4TS%=-a!)lyuzT zc=sXaf85|F|5mZ6*kO~p*(ut&9!auHv-=3fJy!(M@hEd;(4Qi|4xUW8K*mT#E?sif1sBwL2JRW% zuZ*#4MswrlM-}_04z7S}#fmPj4%)63NOpgT@Dhk**Hsyw{94J|2!7mYBz2prXqG0E zgMnLj1ThV?%VzVe0BqEndu^Xl2STEWQ+X$sK-hD3Zcn1Rz)~8uqaccW4zJ(kX4#P6 zH(5fHKJVx4?Z(u^XAD8FhnjDHCBh^}CtuPz%0>I2qAu(Z#>aTEaiuz=#*iE@mZp^B zGJ}8Vladagcq_|^F4jx43gFxy7SxMXg~w5yLYJ$))iKvJQm1|PkV5g&?BqEM^)}*A zOJ9{UT!bN&YH-rY*Fi44h+Orz+#Tikj3+hVVTT!%iKCmF!IriyM9+ACjgu|2qz;CE zI>&-#bY2d)v};*U85hnGrW%P>?fogCl-Y`njKhf4?!EM;h2-n0@|rw7@H^BoXn~IA z^&N2EiR^0cDxT%+`%}z}{4#;lLsJ!G>HEBE@Ujp9d!a7evBJa6n^|(69&^8eA^$=D z)_Zn@ks9te@Y#jB2qQg88>%DkGxc@wnr+5;4A@^7rNqLVoShwCLf75VgRYfHv^N6K> z5t&E7Jh1V1;s}VJj6v+2wE2kd;337$e}P7Z)3qYsHGtIU zNQur7J`GCLwv2)&{i-WOTSfdE6mxSQ_C2=3jZm!&z9PCIF@-TWH&6dy3VdX?Gh0Kf z3)*i51H6-98fV_nu5jDFA)7e)M_Ty%=H+!wki%d0bpeu~4 z#Km6B9@sCmvlx(s{9Y~S45-~YT)tK_t4Kawx8dFHyVSjtRT%TWzt?FSsV`Z!Db$!w zv=KCj>LTE&>O$Pky)H0kN&XK(dm`~~d(2x>l+s$&Q+C+A*EP=>ILv9B1|J3EJgxG# z&Ydjb>vgiR5_a@if~sK{q%O)KX`|s$edf$l&#ag39-Mh=q(^f6eH$1gdgs?=8TvTd zu4G)c+dP}hQN6_L;}~hyx!Pf*AC1Sun1K5HTsd>K(y0ZaxeyKsrLmgawn9uFg*Wi( zicR63sc?N}KjkIQA;s zN**}qz3fHatTqKYMmSNzFs50}YH@l*L%nlqNSbM8c#%xnYbXfk<^D>zw03fvRo-9? zREj91jEscEGfAUDSJbbe!kI%+JmeChdEg&#UgOSY_XiitjpFxG$LJj1ojVQr_iO(b zL9shJ9aK`sn3$L2C~@TuBOhZToJSi3SLGiCz4*IY5VkE*mpo-F zt@RR6M%*=A-8cPhbU>eIwy!VHsu7b1U-=Mq*Th+cfIt@Fh2T@Mar_rja;W-)3vwK= zaSkDPu<%4=E;(64DSLl9$)I5k7SUOmMs()n8b>MnNyhU=_-bq*SvIb6t1VPh?{hGReIB$e4$@_yF#ZfyCEy`;ISA)~NsQLSNL3I;7^+QQxkk?Ct zdidNkRThqhz7;~}&X|*j5@7P^&-_l?_cxPqMd4dcQUPV(RB9nhMnI zx5C2}TQMGSR!UP|F50_1cBzYgU{}qpM3bEHBQ99sQ_CwH1%C)4u5PnVx!s|^Xm1}H zgDS;y6KbOpvyrl&sFCpq)SMxcn9|D%p&&b>*IZ$$pk^2bg1R4#fW|Lfhf+!bz@$+mi%SH4H1o4M{Y7U; zb3M;(GxLJr>fwaupc@WdVl!`DOD??mCP@?Y!P_unKRwa?o4P!IE=rB;0P=4;bK$Sl z3mRgWRs3#1)j;;qdCOWjLuM1Q8-Lnee;+oXdim%-lNzThixG*$hpM32W8#CJ<~2AtFQ37f;&n>}=YRbEus1o%=OG+C9Vxtp(3{TKRI{ z>7KqC0`Hp$PHZ!Xg_QMKWg3_#0>1`5U}-S3ZQJdSz-?yelQrq>wim7tubK~%HTRT& zb08K$1F>J>=D#ondPrC8AjxkES`HiG960cezzfdq(oOuD*DszEl0p( zXqtoa;K3c3MF}Y74Y`Ak9ye4`mMi6A{T>l_L>??hDiaLWV9UX#g|x%XoKpyX#Oq-M zX?$4wM^|EIRN<^#hL+E2ejdfo2%iW34VvlTeto3FvDRRNZb7;F^HyR^xRQlu3Usz= zn>C{TXZRo$YL|P4OdTw89Yo2Is^6?ZmpXuTos?5EuUr z9_xj79ty*cxs6*f)C?q4ujTu^E0G z^=_bQF1_VzdiCCpZGV&g7a0C{E{uDNso2AhHa+L@9lAfy5ENM$PqvtGlSRyGW$i>JA5G^rhMdB#ecz>%7 zQK;w0vRP#Ema|<^!3FeRwZHWY`r*i~30u2+rkXWOqyDHOSX+Axo;OpMy&oyVAu^&v zQ(Yt|HsoxkX%awF*mCM;4W06^j9e(p`U8V)s;yy_e?~gIF?|fzvpb0xledAA`$#IB zeeDw5fS>-XVD*v2<`pbW1l%K;G)fflEfoPzL1jp1Wp2(;6f(gmss4{J9xf4=F+Mrd zDJj!Rde0oSbD;xd_5w!8O?$bSBOwnw?UM_eMvq0Zg~pC!m{Wb51$j~i?hml0Mpo>H zJQU;Xh6p1cc|eputZkPQcvNwG3X!@5smjHYY@ZzjecKjETS^7)X?nj*b1volhJ9>g zlZQT~aj=M*Wuo_jr}LxUgTu_rJzJ9b+nKr8-KQkjcy|uV^WY(i^;9A}OeikJ^%X^5 zhX1wYX8Qm?rWLKdj#Ql=l-Sluz3%31+1@;(hDMsqW#RQ#Nm{iop7OQ#l=m*=k)DU_R z2Iag0FwysV>D`@m{L$w(;FIlViYr$j%}pH)APL)V#b4TZ$+ZwLa=!$>6v!>57k}}c zcJP!dWyfsMZ0_q^bfg$`zUa?@=-qnLJbf({e>H;IHrF>?1V zaTk6mS0%{X2yqm7fK#1o6oRC9@Oz=Z-f9n%{zW`gATteZd%`A#9jjfFmeZM6J(6O* zVMn(_Aq(2VU8}dutnS^qkEWw(95{F0SvnxY@tTG@$>j&F6MAP(uvP32!1#qDTm#fI zR?0-qNM+3^BvTY%b4_T(Y_nyG7n}Lhv?v9Ly3PW%e7}tAeTJ?=R+a6i%kb8XLcVy- zYuvtDii(CXJ=R{$aVl*x@_lY2JXEf~9XjB3s!U(8u;m}?fGpqNZUXcwKQ<@S()wCr zWNKb5SeFT$XGy=~Qsd_1yMA0g*YbpfTnsHLMwZx9)I5@UUuUtmNbIatt{W(9f6^UI z-~Kg?g7q@R|3(tTts(s4DK`GbWj~IqK{in%lVFusR_EH%Q$i`Ir@9f{uRbVzHJwz~ zAE3j#Z^Ta=rfdvP=7_Ma>8qz~b#{8qMNpR_Tbvrh)&jhj(hv+VM$#>Y23orJ9b=E| z?b}$ewCdIyOy=GAZTowo+2k%UIP~Gpj^N7=4~LNE{tVdcIgcsCGzcwP;eq#{+!)($ zII+u*m^(`NVU)op#2A{xz(n#U8uvIvLzppDEP`CdQD_6$Y`f@I=bi3$yrPEP4Xhj@ zfz_S)9ArXbmn1Ntr=_Q_6-24w9m4m*dFC&tivQ;eFq(ER{7^2efhh~M?zd7sgl9qf zf3LDJx)UW`&O!s=seCW^*ceKT9OjmtNjZXPkD)pw;k8% zt2|zj&S;Y569DFg7jNdid+ID|4ep#Ns=lBgA+-87>D&_gC)fK#&YuD@7{qH zl$U2YzFV>Yd|U10Ncp@#K3n(e?VuDv^#B1eC9noEybOeBjh#$NNZcu4Pv9i z-%0OCJw`IYj%Yk%+WQXyzI6ZV_^q!^;8;3tLv->(KOnJImyq>6VAFBx%=VRmqMcT~ zaaAptVc+EaBp0F!nmUI$ky_bOCR<39j*?TMIzFWatNdFjCLs0q$WO3zVLU5C*rdXC z(1z)l(3e6Xx-AdzarqU;saoyqrO7Kx@$yMW#3mrM6D9f{&-CnvoBgGg*8!@$qX(X) z5JGq1)k0NgE87yD%f-3feJlLlATiO$Uh9GW`(=g{kxRT#Wo;|hpFDih7yR@|SYqG1 z$JQ+Kn3fWZ0_qX}^u|G796q05;*XD-LklHxNz(sFfdAcr*8$4|bU9Z8NhbMWbdpxL z&_}566Y|;=%&@?8577H^q5fGzm&rg&h zQ6;S`bT1I_%gb_*)(hZZl0r$y%Pduu=@iSk>7Bb>PsRWIbo>+1WAV_^z+Rh0qToZA zN8I5#%_wPGm~dFV-8i};o97li1Q9tofzu)Jz7_^U;1=08dtTsY|P8$ zEZ-V-{jNu9&Ipd1R?)oS9STJrO*q zW9Nl;u%(xNTjUX-h!g_GjFzTZ*%unKhP$?;xzPZLL@yNr%_7vUGcrm zT0bF_d*0~iF=AU32No|%HgdeUy0SO2dwilnp`%X1-Y5sG@9Xn02*)$rZvE@+Tz6&% z_hH^u)uN&}08`?q9o84`?fCrtkdU&dl-kJS+j+S9$JY7f)9za325ErYkN@*;l;L+h z2Xk{Q=u<}WRK^bk9<-6TQHMu!7Jbn-Nf=*=>086};Wp@o9fdOhCX?FdkLF=bwfbTF zrm^><0A7g-I^m=wAFXa@o4aQ4;Z9`qOnaPMim{Etk~K#E8qT<3Ne>ECIYv$}-z%Xm zjza!E)K)bqOXG2s0zyQ4Ag<4^FfYoW2gVg3eqAXe4(%FZI23j=V3-(lWM}KQzyU1n z%uFr#NLJSy-0kQ@$GZV>Lo^k%TAaOz9@{a?eoBw9R;#%VPX*S?=&?*CJoUWy(A*Ck z@E=GWuv~Mm1+bCXI%!X)BFowGa}kw7leVuDg*c-Mkv(7KmzR3x}rhi{F5|M zHN2yAy2nc2Py5&!`?Z^LSD^wbU9NRgNqz7*U^#BgkL<7htsvBdpQRRFDIe7Bhf}aL zFsEbq@>JrOcyc2L${f_cTKe!UQc6WlYGcIx(->^EUckaE&m>3?o2dPHk!jCD?AJ&G z>{2vxt8HcomS3id!}QDzcp+rd>X$*Gm+Xs@;q$zzM1@D8{#<9)(bGss&iDC0{n-?x zFy23)Woz))oL#M}YMGj9S=wB!Y2tpxnZ{(Ey=|Qg+M`HVqT3^TzUi5#;k-zI%qzEd z*P~n7Kv#9?7@WF}ZiKgZ;4=*Lw7{?K2PB^8s!dTw>=`F6VVNrCTJS@c|P@kdD+2>x9 zHaq=*-p01Ag(FChI!iks-_X;G=Lz3wsEcVeg5#2}_4imCWRcc_ZlKZCaE|W_J z>t+VCNpOGdk5&|L2Oi|d-ILb~9~HcR7__Fv(x1j`$HaN3SGEqx&J3RP<95P=9rer& zWSBOG0!yF4^>RHg{!{wEyzE^y+t{p?DmJXE2A?PFi2a#v8NuL?Bbi%^`oszIwctcF z%H)_U*<+-YNB%=+5pmDv^+FX)OMjJRlKS#yc^bP&G}9Ku<7bktuE{?V`c^cU_$O*w zT3YKUZwJDuLEgv`DjQtpTb?l@C!+RX4I#}=_h{-k_#&JiUmgT3%?5d>sHd!`iCYBu1Sn8k7JnSyUh}Q%v6q-s%J@7_LGMhaSxCT z+CfK^&SgksDR3JC3BNLu&wA;w9jcS(C;;U&54;`kx|;R1Edk>%_EY2Rh7e{b5Yn|b zUR}A;X|9(ng3TKF6C>4yvpvw|KjQrnJEAPpN;HduH)?~rn4vv4BO_oH@n^KLgDr#RRAoQw;->N3k3MKgC2%VNA;czVK5UY)w) zOrumO8b;mm>=fgHm#hxe`Kk=*d`PrSU`qHrv<55hVoXa1tzQg6Z?_VR@{R?{>TVlx-YGblol_MjenF&Z?b2f z^yo!BP}YCN9H1^ErPYeutrFI)`2F2$%)Mqi+!5l1wyjiv43;kK^yb&Gd+<5`(`F&~ z>Pe9~%3!{t?}A-iLr%S9Ilfx6jJIT|GjppP+BG4+oT(VPDZRya^~c{y9QaobuIKTU09T_M_o`mHlL$pr>9Ow%Z;$-$Kyn21qB*c4SA7vWuwdv5bO`EJ!)(m z^q+gL!x{x61al_2;X5V1_-zeVE0Ez$D&~Rifk*CD=&{AZ*II=&NwM>bNcEhhp77*lIq=)+(=qqgoN6*M$h+_HAPdl5^ zQr$0?nh7Bg<)0-_!R39AkGYjAbL$G**SGJ&66!<`#4eq+snawp@H@u&lE~hz7VTf^ zt!em+_4&46|6Q4b``F&w3674*B5CdL)b8Gu{iU%ng{85~yHNNLkH05np9uJq4621d>#16yV>YJl$Ew{d5HV@vhYijV^<&RohORx@0AGxn#v*QMc{>e$i9_ z=iW#2WD8IpJGN#M)p<&6a*bc;qvXsK{C=S%!RN?RaM;8yoiyiVjW$(*Lx__HOL%32 zRE~Hm;Co~%Q|2rqf)Ofi8lkH9t?3%3%0$Q< zvKyBW2a&VJth>2&72oMbdwq5Lbc~=}?dyxV{mZ^#RPE^#u3fOAtP~jdVVqrap6NE%u4LdAl^cU}< z#g$1E6AFjKAF@|# zYrZEWodgy(*H;zei1`Bz9z;#neU?-^VFPWFRcMX{jH>E_xw~-1?|phS;d9kxV=RFK z4puZ)2}PUVdM6H3;ZlflHhz@q*zL`JSJbYePf=FO1Gq1;6b6%*0{zFc%<0Y@E%zL| zvi^3X9won=u22^HrdVn&B!g6s%c3}J@#&?oQ=S3+mEBA) z2DaMv(t*IxhuZpH<2b>uEj}zpkl(# zyEZos!^g#mPup$CfIiJMoDbVg;HZuNExr3UH zuzVT`_0j2bLdj8=Gy_g8ZgnzcakQ;KIsL4L@#rI^iXS#J1R$5o?=)QTw^@6;F1($~ z%TtFh*;WfU@_>N#lp4&21xzBgSb;BM%-f;3LyXsRtfAYK(d>T=+J9ZQbs;z%@ zSD$%4T{m&bp^eefY~kS@2#aIbvtv8W4Kq9()lK=gUgqzeEXC+Nv?JP|1#IE-tn^&5 z2?=yMQS=_uVUd5mx~nk%75lflFXA-^sfh0NyMKCjjeM(X4bx)^{$&|Q#r=9C#FM_r ztpSRY2wzxncabu18~kmJv1{_o{1&DdZ6XtW?SY-AZFHD=z~)@L{t)w}dld%UAGScLGgtj_&`Dsj8$=qp~NQG}`|v_;@{idr$f=3Cgw zug4Fkfx_8MiC;whP)!}^7a@qdX!~+^tKvbFPMb7M!j&8&FdxdG-q1(aH}%5&MpS2y zo150#newEAxBm#xvi51o;wMHuZSc`2fT!z)$c0XfHa!+{vt_OyMV^pW!AUQkD;)YY zu56&qyooS-jnfCuG>07oukH4${%0ZuJ{#O-h0dN%BRv{UZAJsjVCsYhJdn>Tenzi^ z@_Zu@+<(4JOouk=n9ws$d>S^e8jgm*p|v$gvYUR@n9em{F;SaEuv~b>jb~kYN5z0x zA<;dq^q5=hn!#Vkh&v2+M3G3q#*(^{QC|?-3LZ?@&c|LVyU}e-MG)69BY@?M@AwZo z%hC%x*x*8M7w5X1zPB(i=KMJU#fI`dbxmII)iszcMu(Br_~9g-;qy+VyUm$jVqdiL z=yUq>wDW2EYfEgaV~a8K*?}&tn+teeQpIXAm5%{8uERTbnMQ+ zdjY<2B|Tt|Fsu9dEx?0+{rNoI^WGiEBM#xoSF?cjRTl`l82m5k&jrRl}$D( zoHk2|Tqt)D0d*Ag>u4@aE-mA`I>=bDpd_jpv#-viyywmf0!Ld3cI8b6$N=%%V-9jGzlEIix?-9MD|MVshoXaij zg-vf_D}~COXuLe0-nZZOsnSXJlV=kgMKx9m|hHFUiwJLgi8W{Yq~5#k*jugPIPMm z5hT%*v}Vm>+I@ z_tu;KE70%B;+8%#OStoD;NrOV6=_aMP?!bLBhx(VHFeTh`2s)s^3tYE`E?i`G z|3w1UkbKy%mf}GP3vjpd{dmipNTe-GzpB)fs{#C6{sY>aI|JJ4P4tPPh1#Sp)4Cxc zz$JUNoi=Cwz1vdA-1#TVR&h#KW=c^UaRf><&23ymgpL}obV{!GUssFzDJQ9BxSQ3m zmPBYNF*w_CbAdSp#`zq_ygUEHJnGNN5-IWuZfIeWX?uxv%|Nx>0NNgO#wEKhYa4LM z#G0D+F}4Nl&@!;^YDkLQ=8W9tVtMp=lu`ti2NM=c*FF&8HkZO^+0)@WZ4EzGom3k> zVQt<1usF83vM2>DyqLO%A%bd2A|olvjqoDuH4b6 zyf(-{2%|WwsK5luw#ryor8=|{KOGZNC{Md(soq7 zE`zN#kZ~AX>|JQ`b0pkv80NuMiOk711eWGX`{w(PueMV?LZt--Xfgsp7P`WrWeT%~ z0{}LG_4=UsL#FB;q$! zEY9{Ueh>U8;3xR5|H>vN4#SE2?s|3U$w^19Zc{BPRrLHdXeRVs(=hkU7XdM)s72-- zoX3||2t)BV--er;VTtx=n7zIx&Zf(M*OC*yuI?(^5#O^_O>Ekm^bqE0~L#J@=|wUCs4fhxHRQ_7E%qAr3q$^ z<2+8x6F1cCSjX_BF@;{&7_lWMCh4b>9hWD&~qIEMYeNb9;iyqc8J$&t|oqY@pHUJatrjy6{EWd?plDyW* znT+%!tV_!ea-dsQbdi%o8=uFAv%24(od}4Q1vT>d3s?PS|FDY_7!#Wd!P^lF3vO1s-^qi+sRq(vd&_ zN;P4KEK&BY-E|_Ur~VbSUsi~-PTzwyzSLL>ll7kl*+e!o%?YfKjAY=*tQCq)Ad!TH z(gw!Jgbo%l4o@qLU>CN8m?AzTI|r9N7P<$AQPd^@y`g+DG;cOiHab)lNHsYF7K2)* zp{Ozq!|n;wx79X8Y`5gqLumZUG`f(<;AiKaWuFDVgq;$YS$7B(oE2~9tw}YyFQZcSp9a1UNvl`%Yy{{bi>+zEHky7<$X#6VnC#joxZPU>b zLDdCfFCoT|>!2n5mS^Zo-H;vwRi7}cKM5)%p=mx^yRNCCqTiWuc`8(_`Pn&XvuI1) zDjNl?pDkM`w@-xw3P;Gh?xC}Nb>WfoTw&u1N;j@H6%B zYYU#h2I#%ChX0=ykjr;Y81*Gq+rWENKgPhZW&aU-0AyxHeVFjKuHnA}FVl4qx;Fck zZh!Vy51TQc?b!a`JV@u?*mT1>Gwd~vv-3wR1`n~?+!y_XiC71M$q)3EEj5F9^%~g6 zS5Ep0JIP8Z5DCuC15$}hOP3Qiyi>TT+K>hUiw2H6#wf982RW)MRwFYS?3b#H@)xB% z#6~+Nx8t4e!|26#a>ks0u2qDXO?2`sg;~2wH=}F%+O-#l@iZsE)2dIi(WH?j9eL0D zYMVoXoQHf*$KZtBQO~ToHZv@3>Zc;I5on)P_|u)ad}tW=XtWmFz7?whX3GkH$-1bs zE-ru32q)uxCI}~iW|Oi`Qv%^4^r!0qaF>GgcK*`QSe=MuS^mMniuC*xlb&iEmT&uz zjJS<};0tO;zX+d^K5kI@RY#G=0M%58BY>8lutsErH=DQPFzv*8a*;_X0sQ>fnX^p5 z?>EwwOH6GKnyqZhh|K=dQK z{HhO3QC?N<=O?V^#+=y_+x4EL&;GHnB(HuKJQ=DuG#?RJ{xS{9HREcik@b~VqWXJH zxR)~!J}dl^mu$t+#KN)j{wR#za<5=WV0N4d9VkOt4CYK!gjJCRX&tau+mZMU9gB7l z{N!qW5q;h#Mjb>8U#Z+cM8&5+Q~oF#=3zY1HYvYqexL#w$Mn0pM=vQSG+B&q7Mr*o{>1arHrpG2=v`gixf#rGTBZ)5B@PXrl4In;f9uri_foUfV zSPD{R z52ba{zH0p34QQLUDUjGQ*iZ+G9&NZre%O_$-$}w2CcXWL2_w$V&|~Qt+39KnSd@oW zT|0bnYOB{7A347hhZ;^~@Fib!j&%QxveD+`cW)*nREaMN6~D;?vr+A&!>ud>S>WmV zi&v>tUszp^yL35~lVPbX$A|CD08;9}D%5?qw-B3QNWImZ(sbYZGBqxey@P544pCKGF zPj=EJe!iZ3xN&=VtMr~^RGOQF)7$!Q0Ga9fz@dqk4&u=KVK$tMNL&&rSqMHk%Q6n)|AO(TQh5+ zZK{&=xaBX;oL+qh(|vWf*WBn8Np~EDfa$_Gvj+S$G1{Ra{^a%_of%q5AX{r@qP!cF z8q(d*Fhhc`UP1lVL6u>>p(L$G$e&3vWH=frojdGbyFBgfm zKgrFTO00lB399Yg?CIrSDX#F?9q6GJGFZyOX9A3YZ`ka zE@4rq+dX(DY^)KRLpF4jI+onu5&H@G`fT$gth>`Qcz>F#z+>cP=co zl1&}4DGqhfa-zAz3od#6I7Xc6h84H`R@srF8IRS$bZtcOiPQn}Wl;_CUU}p_5NFEl zqdBM&swOZ%N0cyQjpmR}%e7vIES4huwJ^!|K#O{YlJpoWBlJj0sR@va1kZ^uJ8dL< zvaSMoHk{F{h9j|>k-vkTHii_TSX_;l>@Ln;>&khNu<}E?eg*zs^LG<<3t++)GB(we z@zqYRmnsQlvuf*l0)$@Y7zaEJ&b-9@GUeCC3L7fpzMbmG9H1d1Vb7Ly`MYKO^(gTS z9)fko=IhGw$(Cw-<_D3`0jopBmkzW^{O_|Y=g+zrX}&n| zJsnmzM~Y72vPfF<->vDFSI*sLL*}m;D^>OQC^Gg?wPLIpu>v8fP`RFM?2+x}cDJMO zuDl+39YqJdlAQ3vY>-jxOr3K_F-CrxCi0gq1PrSL?#!sw7*Ns!D#>(D(us zVXDmeY}=Rl^M@1>xiEH&M0>-E4otaGiCM@)XYFC6Sdb!I$1$Cuxnq#;hw{Yl=ax4N zL=NO~SD;}12;0K^dm1%Oa%p4V2FMI~-sA{SgBKPA=+mih3w#Ha(R)|fGMR}k|Ah!w z=U&wYcheC*UnWQrLw#9jayBz@B3>nzizGvlA?L7PLD3oxiWtB-wQr|hm8RJ-t*PTb z=k(SHcHtwFm(v+TvFTvhCD>Wxg`&D{J9z?>q@LB-3}q-LU8~H4mUmRLZ$ATpQYS65 z#8qmf{mS(NiR{#}s`Y11p{DwwxinnS%;cRVGtggkTvzz!DFKl|Lgiuz+j9m={e@|) zGJsUO`g!G#Hzd@>df-(n@LrWvIILradu^_?zjwW@Y{?LKhRPeTCH%xg*h1rfPL{`x z*y@~Hi{MT?hNj~yM6hcg<>PzVVTWptc&g_hB0^ZmWrNzt_Hy#cIAG8rB(?9TUuo}7 z^j`J>5?=8<|9s{vyQPiNIk;&acHO+^3%&AQzdG-5>jVzJZCCUE4UYAT3jN2H@^7h{ z8uN8?$N(XJB3ogcwU05Oe5KvbD%I$slIEt7Z(gurO`No;yA5Fmj87-AW{EuFX(W*2 zM`1%cM0$tu*=+4xQ!VFccBk5lK^gJlak#>*%J+$lS&F`2z^!u10l8*t-npSdizDVp zePXT!22lgMLi~3v%|D}(A_Kbl1wVsklz)+6eCJwH*8Z)s2=y4PlCQUM{riw*Z;q#V zWn7F%Wqy}~RpkVIsc+(*_uSD?sYVk)$EJ?g!B8VW2Knyk2YO)a1m|R0C}pW`SgAH; zB}>h|cgbX;GAl_b6h^}-o|!1F{e)H(Azi24Dz0mPn2oEs`r&95MCH^Ov6@uDBDTQEN?Poxx zjA=$!_*Tz_+k=!kV_U5rnG|$UY3>>I&!A~%+%>c)Up-qhjpPIN{6Dh}>_Qzm%s!W{ zs?Wtvk=tPPbapI-rwWxS2Sl0ae9IAtu}kpV)!4Z-TRDW)S1o_N3b3`s?52q`xG9aK z{JG5SIaQVkH?`Q7_fuvoV}t>~EI~ty`1iX=sbvX#!>4c24tLPH2)kT5S=`A)96a*j zZoMNAalWD+wcr^c52Bon`Fw7P&EMiH(Gl$lW`wFTfVt}1+#6Y%inbA6Lu^0_$*Xj2 z4(5No<{RWAb~DX?S{Xw8OxE185q&+qMHt}0sjMzlT3 zw&l4JD*TUQpZ&kL9~->n-DM5B+IeE*(G&lv5TjqH7izG^%KTZUw8BjBNHta}#I9jh z{uG>>7qR&KySvV*h3N}3Y=+BGJIXRJOH0@?ZTh_DceC1hH)W_bX%wzj^FPs8zmJkA z(kU?Y=C8ih45Wz*y^#3bb)?M`dAMQK!|ATJ_`ieEw&e+T`kkT9ngDDZ!klk8bicvK znkv7p7Aikg0yRgZLZVWz9PNujz%V5wHqjp3H_XJFaX~{#@Y-Zb!Q7;_DlY5E;J@2% zi^4g%q^S5ua~6AtE3r#m_skZaGb?^qM4dy=3Oa53Xjw+^eAfeoiC9Rr3&#FN0cXQ* zW}UxuI#D)CDi@G!*Ex#X6?|TgWNVtOi?2~JVmqv&SZ9LPJ=T#IWKgQou_kgR3YOBG zvM(@FIDx@)ete*mJxzkj@CgM+;i>!ewtUc$Oy*u7;i7}ufL#88nw(kEq80@A``QU_ zd#JF7vzft_<|_rnd0jG8fYjL>*1Q^&Q;(rX8)R*`pvX6!k=!#8eO5Iyb|%hR`PkR; zTLo(lD-^F`-0QovXfK4)51p~irDhv^;AX$pb z6Ia}^$t0fmSDu-?Pfh2KmmB3S{6mxr$w@_-4zKV0mr>0kdyjxu`}_Pl+^=(t9_(Lj z+V{dC^KS)SQ@(!^L(= z+Rjo~$rhr!X}Z^4qde`IeU;!b)Z|Rn>=^P>#fO=uOl2m`oDh~_V@>^>k|i?iY3G8} z{2Wa4{PI&CL0^Bp=_ZQrA~4OZwIi`i6-frUF8pC4(hAgtcscy$23(Fsf-^BG%Zan> zR8CocwsvDdf?kOu@&r^urfzWu$!mhw-KF?3kCG?lHLkmAda*v)dF7*za}tvkVx1Gi zSgapo@cV-ZCi!4)B@P9xVvkPesfHT%hX!G8jq#~7Q-z)dRg)vb=;-x~E#da<>kxYH zV26ej@%%fKd$5Ct8f1+Be6FJT3k*OD)Qi#mo^8AcW&kz&TH}dWYs;Q~w}u_zxUn6Q zB_E-3cz2UX(g3#)=O--ndZEG5A7$?OwHm^RWq47_1iFGvuQb3SOY>e4Lo25Soeo6N8VsgiuR4Phff!oIRh|t>WwLO3v%Zu8GDfKXa#=hJ0 z`DA;LVoi5l`hiR-p2r>7_Bi|@x@F`Vy%*)NhR8L07I8|QZ?yit-3;{_aC2p2EA!j+ zpBFvDzY~kH{8b-{q$rUyAn`l>AfLyAs#&5WzQR!3E>dFHB?|^i4>WwlMGE*;f;DTX z0HEF0JAQ(bo39e z(29=C-(f?Jisem|gz6N)SUadvBeaAiDTQ=2xg7FJ3whNV5gxNXb?u&V&&dPvQKw)i z{5ELkHdX9XoG?)c0!P~YtQMJXkEYM$a2Rdm-DMv>U3V6u8lsp^)UkQy5;QY=+wlT| zSa~bDdF~=7B8Yb&^8(S-{q&sS(@R^|xyb{_F@m-;j1LQL;wtu&vm0{wA6h4@`&gYycW$|IVV_N@fx1nn(WUiGBYH|wq%H8 zA`{}XhpMpl6hr~e6om{q&}J|A?nM9OkY%LpVtU7kMy|4|E|rOxxIHbmUJ zYDv=kt_J1=*-)$1TbwKWF7Q4CbSn2&^7UlA^kiPee&nNc_0AI2Y>U)a{vtdOV<`4$ zuL{51{SzF~qh+IYyW4IZ?e%xJd)?2{sh_9Mwzfx5vuZrVVK?uaJA3Epq8{9-c%yIE z@An5&>|O2@0HGm_K5&mM^ha;7$1d;Gw}S=JlV9_kT|T1t>7%v#!klSRh%v?DXq^&# zFYlXYx)d=@|Ir<}{@X*t3Wmn;CKI!d5Dwdom&?`;1ylq-v7o5M?)Y^o#XbDjyMq>j<;jDAt=`u;U zi&6dzSA{{}#CyXksVI3?nNZ6MVM()=sLP_>c`}0nXeKIM3f2!@_+t3bsXOTiug*iJ zt-72{`JRE!_ZxTBq z7zV&6T63h;2=`K>LsWBEDBIKaYSTlI8W~c?>RBMB^|x|znT6*-+aAkx3Z}L2QWklX z1yju4|2Vi=nN8sM)P7rxxmm*eQ8@$K_j9I?d9|c=Y>IuaPRWZL>Y4V;OYz(!AbWp} zpCR9G(O@LPfMq0F1QqD+k-v2H=d|O8v}r5j@fRY^k+zTPdd0`^`OqxOX%bMdh?;rezpE?w6}1SS^Z)+?wyz+_zA!H@;}lD9?{7ZP;#On)`j$|K~DA@$YDIQj3wA`$aP8lw_o!xLQ|*qiVkx zL-l}axpU{v&s-@vWpR;*S4B_AJq}mavYh=c`bRzr4 zFLrso3GJio=*yc0%dIdObjaL+NAbLczcD$L9U#;w|qFuYi8E1ykX` zk$4g!;N&m|Q@F9Q0wIC4Hm?9tBwmLdf8FP)<*gm-RyVqPxr$tF_9v(=;YRn;b4+uW zI2VIUM6$d943LbJ1gneIrF;48-RHzhgs zW635xD-zMA)qphHR7es?TA+X&EhMKf1SMJUg$m!ye4ux*l0TExOzk?E+cFV;XLa)zM4$MEc+ zsWg7&z;KmjtxLQz!Sf1xGU>0Vgo~FHCNLIgF=t9u%J7BS*?N8O^x!D?%Er0{bC&Ck zAbf~m&VS0rQ~5OYvpXY(o~;<9;^Ui8QsP%+(Gk%a9%l_VFx}UB1Iq61IaTD<65TIG zN3h@Fp|UHx5L(FBw}2tCa295#abECbO^NB1w~Mk|wvDN-1; zLIM#D6|1JDzy)r|F^l`!($1NdkC?A|)ox@|8Lg&Y;l>{PCPMGhQWe+5{}M+{{1CLw z(T_xlwDaU|!uP!hv==X`HmQ<#T&gcboC%F2qETE?MUR%OOH0_G`LY?NNvCcoRWv{8 z3ql~i#zD8R{YnR+JGBVx`z+UZ+7cziJV>4cB|K;@uZ$^9@BXzS@AX^0M>PM$?2kB1 za}(r-3@GypHOd$A7Flm~W#?pSYIuF=u|GO-@%{>UOVtncSmh{~- zEh%O$P-$dipRSt2uTl|}FtGH@vLIyYXuJ}YGY1NgEI{O@b4gHotwAjMjMSfLvaie{ zT5~?$8Lx| zU9iYX+xzU}r0RU#j8*Bk^>&TVeu1)+uAalP=wgf=#x}# zxW6Z2wB7KvArCjXB1{mq<34$`JSgV~CY95FUO1ODRj;hslmCllg8qSF`pfbh_;K2O zrLPple&rc!>s7UUlt)W3w|nizGjbax;OaP?s6fx}>NwLNRN8}5f)aoNJVp;#KnNA}d;8TvwLx2)wViv|%Roj|{Gs^9s$s-o@3QB3CC zNenfrT}MHUzj`x9Z?*bngi?QR{jGEhLXk@o6EWvsB9WU{P);6C>1I*ySYE>VtQj&F z>R?4mT&U2sMg%J6KVvvyjqk1&+aAthkDjFESXlksfCz`<1-CdqNAK^I#W@P7a?aG6 z`i|g`KZvK^HHCuxKTD2GF zLFJ=voaZCSvF!8LVM8U7(@BJo7a~ z+i>T->%mXdi>f@At<7WL?EcMIX9XpfeFx_`X#SQah1t{pv;b*aTg0269Si^9kdgnv zA+^3~EONt2!wJA%^NnQ86bKG#M8o>I(C5{)1hd#D9{;tGSQw%p`*=XA_eWrjG(YuX z%b(rGFgkcUV2Ak0fPIWpH#NSpJ^vSfx5S^Aq*$ZIBgub6iM8C)G^3v1N=D9$mY(z2 zXMvL1GtO{4Q-IrpJ`1Gg7Y~S~w|NtgX5c36W#HLk$w57_RcbL@f);cBj^T1iX}lov zrI~?_rczi#qWJj2UL>xPOwB&f@btvDnJd63Ui6Wq@;GmWP}@lcumESv;@z-GOkYH5 zTK{9_U9Cc^v)OM%tpfYPonOAjeSwUEH0=izIKs=VFAc3agm;+-(cy9Tu!?^Fl~~&# z_sn`N&b<(sLfE$%c94uk>`Y~!GSAFlGN1<$)K&XT29`w+`tO$msF|b`G@vfB@J!{JYj)RZ2S>_goVY0R zlmb&F9)&$P&Axca1p72v`~d+Cy|UHGt;i5 zvZpzjUR%|D2%0Um;6p=oe{TF624*c;&!k#n-XBZ)Fz#VN;rqv|Bd?=ykepdBiGL6~!V?hkz78_vJgJR8FSn#7a95r}$%|GL^{c)skQ=m$ zvxc+KL>{u?l838{ta3i4L6If)_x3jtl9V1lwfjRgyN1NJQGEfZlVbqZLk&b4apx(a z9am-eaCH`l7j?xXU-e^T%l28g+EPj+&HC-Gb;Tt!jTez%S_%1(DfXpl0a9UT`x+H% zM*1`}RV|@>W26X#AoY}0y5`Cd{$8}=b8onThS#K}%TmwD!sY6;a(z7eMbsyWuZ#II z&Vs$vC$HjT8EN#@xfP#RAWvQqcdR7h9Z^bod<4E;LBWC{SX~Jtp4Zk z2&R_J|H3(&X`$lwnABy=5S4x3s(nazyq%InPTakv!jU zyFzv*%;g;D8UFv>S!{-XydT{0Zf{7}CB&+dC5=+P3o&rUu>dtt_hVWpJD4&Oo;M>( z{&F~ioH{xyEenC};$u+Kve{RT-{X$)(QFF{eBmA(xq3h;H1aTQI-VLFDz0BSs9>lP zMk4WK@WFH9;8tWpVCb~DKdoVb{$r^R8Eo|o;qRc_`)%b}+a0Yg@V{p!NuV6XX?Pp& z1G*nvGM8-acGBV*hp|)D;T>JoDrb%g5_DC6OtEZro8d>XH0Cb;E3N2z}8YfmPgUynL%|A_P0K?7LQ;%O1U#h$)Hb3>72iIK>Q z0g3!u4S;!QjRc91K$bivH}W-$*$>LhW)z_gMn>PYktm(+5h~!n0p--v5TW^y@yLEV zntRXNVJTmny|)Hkl?fK~X*9E8xjRVfvFlo&J{2ZOja1ozVlty)+&ux<&?+DU7EIgN zVC7f(#*pQ(`|*hrXT;p?7$ZT=JqFc9sg&i5pbANfJay<$3ov1Aq1#oI9ewV9WrD!x z5rJ)tM?KQ{VlHvp zdp<9$;hch-sd7-{CizI^SHhYe>6e8}2+EraMHW4D@Lx5r{I)`6`eh@Da z1H$4M9Tga(4Q-%uUzeMue|Hx2IE@w{J;PwGfJswqXoGlmq`S8&>Q^3M_*;WzS~GHp z7ZlE+ua9m5x40~TQ127Q?7IY>ZGM_VZ6JWbgNaIpfsxQIDCJR7&ms1styd^Uo~tj7 z8JDsGBi4Y3wYg;R0adXf$C(8RNKReGNl~^8FsJ$~InZvg!n~;CVtC57S+_IV!nC6~ z*p1J)R93*t`mLwzm5k&2*mk*eMb%*PMW7#7vL+S_lA2MG#~tq_~pUZ!*| zV#w#B1Z1m{z*)MEQ4ghjK%%iYk7F6{gs78MhQ&UJ44F@XR*??=+l>PQt?tN1k2`20-x z{MF8*!GR2gka9}O<-Z{4?{&x#Hb(dCOlb8F3KhRQ`2D+_;yI2FrP>AdBQXpe_TQ>$ zG*z;t)kJP+``KGd%}YP1053A(CsNF=r(%2#iQ4G7!(b>C{c1fff~#|`ipaRAFk7SQ z-0T=;%chyHv|2wMkqZ*UNn;QZUD?p^Gp($@BZ%g+h_{`<6hfDB80!#3k(={va=5WY zb3J=>KUp75e3rf)c0Qd9wEq=gUUoq6aID)z%s2GB&M z+zGU1GP}y8Q3L>?*rufvC|Z1VFVz;hGT2NRKJ{HP()U8&)~Kw82cRP**BQiA1$2jm z-tXw8DB!6O>2`k!L;Q3WMv|8e=P?f6)mS-_G<(F|8{sx1IvizbdZ8=+@$d|FdC%UU z#_R^u!G%C1{QG;Z12_wP!i-vvv?KJOXB$2L)SSb#Exd9gh9IoaUfB4=$Izi9*u|)b2U(*qWLqUbynFPd+avP9`nuJ`v^T8G>vakW(R;7joVS@?eXCv0V{ z+^5;v`QzCDks$9lnEAM{KACX^FFkI*d4h~=u+!KMgF?kBUn2FqQ(mCP_{fud?n@>( znq%fD7pBLfK|>$dBxKDw^QqGDp~O}F=@&2KQq%0?`e~mQQzr1e-StZYnK1&m@rdsV zbf`^>*AB&-d%HPhbOP)xZ%x{1{$zi6cHC_*eBANl6MilX-F2^B@~^hNw+qTdH1QT3 zWRXQSvA3OaybkY;1~2~MP+)0!X?FbyXpYII@M)#f3H!e#(!qw=E9JwmxXkoHKNH>W zT{Gt^c#$dx0CMvReE^c=H?=9l`eD_`{T4I^CI{p#bDbd+(-Q~0tO&jAYA}dxwT@6! z_l!?kPV<_wxq-i5rCy%J5yNC%DYIF_DxzdjIY#(8;75RyNaSINwDd%t2~J2c;}ce1D&TIJ4AkEUR(dGMrh+Yb!Ui zGO0@}27`Uj@MUq#u!+M}*kt!*_^Zq*-FQ7IzeROmu0^PYhWngL%$X|vwWh&P{8>5;$deVNC(WrQQuXj&M?>J+|rD5#LSaTVFIhURGiC>&@4WD0BsEs9i%5<%vy?Ap5eSRPfV zYQ#uL(wKU_)(0=Fic}BoJiLJS!;kW6pZDWz3Q|Yds7eyWyI00fmExK2#@rV583-MYKkBO!*R_5hD_kzQ1w&@fX{`IB4{<}7E20KFx zP4W`CV$dTIi2qqq%6+FY0J}2V9&kwaz9LkNb8R zJv?WmN|#?H$SyNN-VQij)|*5d{<$ua6DVMXhp^~HKPZ!?a!d_1WP$LkL9KOT54Z2N z7L{UAOM=o$o>49F?3mxw8QjmW8AEkgbzW_>gPAX*z)R8q#iG!$wHLQO@`lEYAd_wl zj2l4h($!VcT9s6*LNX~}i$y&Uj=v?@QPO|OI?R#eHj2f7iY4cO=5EFpMv)(+sO*!! z-G6Bf%-{8bM6T2pR{VJ3*+cjFU=MBM>i0dw!u~8rYyhh#N!a+stLrpq!lIhTn~c*t zuoGKk^GjN>3b3JexLY}_d}pABAqgeDW?|E5qgc}^BwNPvggx>V)2tyteFJs)BQeZE|GoWwZF?5haBqHTzSa#KDTv9 z^F^;k^6YykK1Iod=HiL~g#h#;u^j0%NJxX8bRxyU^YqGw{1kyumpBc2A|E!T)K8ugL#6+^38q)LAjh2kEOVhciuA+(kWkbfnjzy*X z(wfwjf*~(J)j;k4FRt$&S_CJ<>R(UM%MvZNO8?EfmqpP=ZSe>CxQ-7E_BS{*{!8;f zY~ARkbD|%8Lamb$WxUtD?#I^Om6qeu>ee$gx6;I6+V8~AXLK`B3AnzWE`RYbQs5-T z%-bqK%{_e=8@R@V2F5cK3M~$zLA%D`J#a=Nvjfew+?Io&@R@WT;of#rCQG8T zZw=)Kum#t0lQKl-j=s;bOIh5L{6D77K|K&aS<+qP}np4b!HwrwX9+qP}nwzD~R z@7Zr(qVZRERmNN9gUZgP+}oo2I3ncq9pgXi7{lA}0#Zv2MkkW8=)#EKdo%Z%!11Lq zDvw>vQmTrLTs3ED)K7m4^Mb2pq$W~|-?&ocHJztUB74-9LW5KbjJY*`=AK325|(GE zM@^~6#AHSGS^IFyDi5{ym`m2)Dir-A21-G*eurLQcxZ)h?ZNs=wgkXU;GqDg;{Bl) z^4V@^^{P`wZXe6<49<-#wpF{p)*-ac;~Yn;;;EXNFZM>G00wDj>m6UYh=-8U<+9mB zS;xjgdlw7%qDVefSvgBeW8V)$O}5|DPq1C68kPVqB@TUeU(@^#m_UA@B`^&_b5^cJZ&BLT8cfmAQ^OgId2oyCM zdH>@ot-BAFd!aKd%P}$QV=(8wPKfNVxa6xU`SUz$7*Qe{5ogB9d#w=ZyMCYJmE1tJ zNgcKG7l>F$6wuI6-nxmWI8MJgAD$Rqnx;LFC+Jbrz77a5ZzVCs$QcNAD}cGjWG z#p}cX<%2f%7%8YmD`iVotoNUfpLgGBeMNr9+U45YN~Pwk(Ez07`V^0R$)_b_D_VWf z2RK>JK-RwAGPMSgU_BFduosqBt(2&;X*>22rraqL6&3eouOnY2eTInPo_DZdR|l)8 zH`hZY61z422fNF}tc7gn7Y+^_d42w$u?POIsRQ42j4nVD$aeU0_Mu03UylX)!k+b0 z_?Y3fIr9YTXX4%8bjh*%-=*!>>|t_*du;AYaB1z`B4tyk3>9LDyL{&c{}}(vr|~yt zBvSvX)9e0r&o^Bx^w-RYdXrlPr?In%Q$?3MV)xW-KD;nAbLr%Z+&9(t4)2mYZd2!i z>Gww4gXn+EoY5f}$cm^>ZBka~(#;G^DLx}6lSklwA0$8|O;NrV3DH%#YYq@nX+Vksbjj)<|4% zKucQEuEq7XM&?LY8j{Fp_oBeMY;cD_Rn=F~#z7H7VM@LiM4yO|^X{b_$N*Yi%#7*}Gz6%Et;M6eS}d1I=J`0E=Y-NiA!ni|RWX4wrPb&wWwK5i};Q3GAl|+Q% z!s)DUojArro6|)ec@Rrf8E+jNLfOz3jVpOOn)BFXJUoFEy**6ech^sI8<=e(@|XJ% z()`;0&4@b7$|RYv%{$KT_rS|!emk|Qr>5Qd zoSznf<Hs@qLn78A#gXHbY=s7d zMV~YzbtEGO-Er0Ik*(|oehYNPCn~~_$M?Pgz2|2M{%3I}MpsXS=I&t62lMMp{==f} zX>3~TW@^to0kuo+*96Br0~b&BIaUm*q00QxjvF--U(Uqrd5=QKy|(U+=HoT;;A@6W z?>p2puvEOG$5Tl*l5?h^vYZ`!#MOnZD5y}8?No$+Ys`o7br0Xg7h@0;B|DQj1{?%r z6XSnfif751svoP)@+&R16V~$ zM;WE)tiXD882^%-c~4)>jubXlK40h z6D2e@j`h3Knp)>~A6$3Oc#;nlak(H zrzdQT>GDy8ogZd(G(Zo;*45jDqoAV<*M8mE{$3WNVg3d!MX$^AqU_nt__Ocu@WI$Z zaiSXVIQ~uQ$1j3 zO+X(2%r)CS5HHX}*dkfE06J02kr*tDsOnf{pgN;wE^51%cf$mWSNZkMZFCjne0|)( zoPN^AcgyY@eZ0UGM@Jn_t1CezRYJ2wG7eWX-+Ktib!}0kGD*-OPWucM<+pOkTD2wn zhztP-&mzgQ{F5f97cMkHu&HVtvQgegvL*?{3qN;=XMr~#%rFIB2H^ZTuymL$nBtq^ ziSqzbiVQ?6kPRhn{J9sCg=_a_Y)D<|gc#w|wp^tVpAca_s7%Z&mgiM(6ePyhN>jOh zA6zv@>X?v7(}LTLLDI{-g&IzDsb&uKvwMqjx1&|X`Hr{*iZ{*}XI(W##QfBUug}-ovhkQYoF!|QNB=jDB5j*CUBTAjy;F0cqW)>k>RRlo$}0ygvJ@3&)~C95 z`cvtpVEy;IXHYb~Q9jT1Sx!p5`WXxLJbjiKy|R=u42`Q=K$4&+=bvUFo8vj=ZNYP5 znEA4+AZd=FTpk;I+cKyNtbHKIDL$YjtJ~6!$L7q_<@UTBoVokJw|WMI{*wOOblGf! zBDM8`Se3Y?N4&1(V@cP05Mb%hlFRzIJ>oOhvBxys8D8eEY1sGD*T{}DopQ+P@o(zb zqF)0*wZUs7tv{KlEV^2AsLE6Ya&*nHmUKslAoC?)w7)cX2_P0rCgPV}jqcY@jy29n z)!_bex66xex>fNe#O|US9EO36(DWjB<9H$iJv}Zo`xvr^MqK}6Vl{~gTRyQG8(ak+ zem(945ko|H$e;vuo?Hyxa7Znko03+jG)g(?f^*s9bX=DKq*3h~MvTl6B=LKF(`;Qu zKPPlc9Hov2R!Wp@E@DOx<`vZ<-~gF09J9V4$8-9b>7Snnt~*W3c1?7KK2af@r!F?P z!{r^YovRe!#-iM=*iBTog`V%dT&^LJ#$E>(3mtDZxA?C2Ep_>P$B%)50xw4nrBv>8 z(<9^0Te+L>swpZwHPon*1tR*;z-tT@&+qSoD{AYN!hn-LBgR#t)9o~$R8Tbvu z*>f#!$xhZwzSG`NyIb}|dVXy0-13%PZe6AbGEh8F*wbIwz)Jjo#}xpR{oj($qo_hD z76Kta9*`H!)%58CwZRxK%MXDe&sdB^oi;C`!eJQ9T~eip?dmMYWQHl@F6SKz9Z;ca zX{4Ve_%}UnvzDk?KzVPp-+f1pVgh5XR+pFU&N-%ee~_J+={i=L;>wXrroF*Q{8HkrXzwL#F?r?IfU$u)1NGI(k2b_-k*SuWg9ZN`@x&6ATa^AssK>9pNAqrJUf zQSreqMj&OAs~@U?z)a(!oR3USV3BQmzY&&~G3BUAl4IzJEBoIOLwVF9r~YPM`$L&3X$Dn50d10CsVYA*ZCcKnK7w0Cz9hF)=7=ce z&wNmr6YkgEd@8!PwUu?4m7)^&rnAV?LuX zXclhjb}kEYn1(iaNpk%5P^EG<>j+D!jA+#-b`?;!q=Qr7W*2qzgCNJO? zjHc=JRTxG&f@xJ}fSm2lC5l~Q0%q?HS|F|Vv*iwx^Rukrw7m=IXx2$HQOkP9Ga6-v z$3kc4Bd>%P-6>W6>*g`U9o2pNxzy9m$>Uy1IPp)41*f$41vrS_E z$Ye`6@Lv|t7pNT(n8Ga9l*E7m13!ZQ^?moybH(%h^c*2w$_nAo=@=^DBf z+p*-iHqpVcR^dYKIWzAArbVpCsTN!M|4Ye30@^7eMfd6!pH1tcslA$w5nq*M<5~L} zkr|u>%v~sA{8~_Z4Ko3hqp6srYVbtkP?7*&Fy^kGJ}}=rngsX>t=dCX5;UD?oMNyrE^+g>?wiW$34VT=zi{R z5IsU^c+UzfMQrOG!duwX)dj`rA~(BF`LD`pH8QQ5g;pvXXs0aNPGw4>!sJElqM!G1 z`g(agY3&INJLc2$l->v?Jf}f@Y0}CLpD>;@Go&=I!8lV#spwa$fSXa2F>uSxoQL=D z|FVb~yysfW=fKcM8FflyMC^gK#Og3HN7a%{O_Q0VYb6CPkla8_iaVzlwI>(17xF=M zHxsOrCD8Fm0?hW#+(i+8fMP(1elO{l44yt6m-UTmH!g38$}T3@8fMOD z$qH|gZfJ?j^TDO#c$b=W@vV+cL5t;{dC-rkV?q?Tp!xZXJ#GiYD~N;GQcIq|SX-o| zG3bR8EvoR0v273T{>w7}7yzl5;uPBv-SzQ&NS2_>kx)X+4{4o0MQpU&>qoe^vj21O zAfZTW(50TR2zer$zmY1_*WCKNrql$8`M$I*Lid;uG370S@K7mvNaIz>9{{8|EP}(} z8j_7occh@*`M2NOm>#<;<=c7|l<@EbAaLT4GRncbhrD3kz~TO#&WdbwLQ$ieU7OHW z+BW@YXWP*-kk<^j6 zTwgso6EgJjI@{!B;#YW-JmhMn<-s$F$alYB z;#7Ie@uWTs@%~RY{EtbouiWkIg_1@)LHd{j9#NHW7$Q278%;tF=$BT~(Q%Dl7TglH zk6f^+>%a5`4MOeNzvs5u4xXu zHc(gm#37?LrcJ_>Bg!&{43d+eU8lSA`Y7|n82vKp|D;;m0U&Ed33!Znj0 z!QB4SH#Ic?tL-Z>Q9F7XcV)J>$|sY*GpmE;SyN!evFqqN$$TZbUgr8=_2ITxts!fD z-mu`o8`v7RCmDVFFiG$_{xio#>ccgtZWZt?QsjHI^te-6EnJ+)3;zN(OyntVKlMFt z{2(u%38~}dv_x)LHo!>j8an~@ssI6JpJSn+=zyLf z&Tjq`0uec#i;=tCuEt^%FH`>Aec!wd*+~p->mhVTogdw%o^7yn%w-+M+2=nXMxdJU zi*aj=l}{5`h4Yi^prZ{_(sSbq!MO~Ww$cL7J}TYe!?^DggdJRl!w5H+dk%$n?Ww{QRT_3dd$HM0s4 zR75$t68Ggwzozwh!Q=U8F>zem`SJkM%(=07!oTe8IC}iPn@A-6^qBv_0uP=W(Ee-l zbmz@Mby*@+qx1OT-SmHJ1=#|a-*%DgdJ%gzi*mRx&oDalr{y^S4TKA|MN$4Ji#Ey< zkPH3sdAT8Qf_DQA=Y)=Dwe1lB0Ozat@jAmu0B#kjOBZo$wxGCe8l&bNGK9ysoe1Ay zrGJf?3Q?6LFQ&H>I#RI-nADWH?i4(fIBwk&M?p1$G#9zXtdFy*IQcS~(X5zmd|eOO z9-os$-ze)nQF9o?KV)V5JfW^A&P6`+4b5O^mncsx5P6j-bMe>AH}yaqDI;D1naxgs zdu6^-R4s9K<(Pb<_zp|bD3UTXk5vSVY`HX`$cjf~zE+#tHgW#YwToGR3obeAx+6xQ zu*oEN5XTKracQ90Hv&QsQ*St0c9`_EW)ulX!n_zRC`;g*dhKtXYEJrega%KvYP)T5qH{R}BC; zm$W+oOE^++$LLCA6%f;$Ib1RABzOhIX7c4~wL&ZyfV84?d5= zYtn%YI7!!{+CcGa;aLs3nZgF3algT)^@^a1Q(U&W9H8|N&O^#zyzt~;m<6VP^CRmOYt(ZWd0W7wtFiz`6!Q zH%p*tkq5*I@sjZP=m`y_#`9k9BWIrfHz#dgUt#p7MQ?}m1Du^sT}4^Z)08-zW*&hXsd>=Z#diV zG;Mo0%9ZEithDkKn84uaO5@?>+E~Mi7UvycgyhB+Tz>4FZONgt-3gTE?|$8H{83E4 zs`%dR^7b-wYO6W+_0jvRSs9Q{UKkt3@^y{BvhLz#da`k54Xsk2n*Ol-&v3wYCR+jv z(Dk1(@R!S;g6G}jn3RkpN-vnO6@N|q0gOK#L4BxQBY+QhAru@Zhcqj=<#|nXiV^G# zcot5FjNdpGP%twV)a$B;>QrKM4pS7U5ffJ0rgK_ z(!=W@S$8F_lB7s}mPS{fSdJEt>-8UnD*=Hc`!T`H^o>D73EZ(2qGU5D?g1jgpaBo* zWpEbzpS!h^MoN00XviwCA!n2&=&LB-^57@wbg4^^k%D+q&s9fc;we9R@=)Qyozxm=*v!tOUKjNA6f$ZC}=x z&R^Rn8ZrLHIWLu%df5b;rdSj5`7F$6kX52@MEfjqoPV9UeT8^Z)&r9t`q6H*o5&f6 z8bYhg=b+r}hiigWZhx|TO>s%DzM}doxTwe*VI7gdl}eT&WF-_q+W_$2q;$y3S=;&U zb1+|2_T|HS%P#Gl{5;>7XLN4V`7lb3Vf}DaLJfhh$~3v$3tny$<<7q|JQlC38J;`I zA<$ytyATatU&~!i#R^&i2~W!mHl>@$*8JOdjbJMz!Q{0t0)NvO`BQ_~fiW@{G=Iz!P>D+Wrk>Y&tFWYz9%~SKT|XD|I$t>GhntC@}-VCX!04F`z{SWc8V> zhl_x-Q*Wnq8|po{Tr-FRdO_Dr=O;yODv%2+D$LbRK09xIqtu->(JxGwWYdI`5R>iP zQ_}>3%o)33eah(t-=WBP57_G9$weDPV9bwGZuHl?p2{`fb-;Kb=UcL7gTS)UWHcsn zN3C23Y@l~(c;CQ=;gm~w01D)TWbVJllVR*KI5ILop(&>nXnP(M z*y5%lUKG#Tm6Gs*tf5A4fs<}j_8?`oEg~9SYIkyvtcL?8GOC;+tfRbR!ok|>isDg; zP~)Ebam2lTHn$F2cgx88YB2ir`WfS0Xc)r1J1IegbNU)$ zmduYLPYw)Cc5}vgntBPQ19w}Hif;_yoIn{|okcfIN8T{xP*(}(GBV&p$)~o(((vYB z@BLlI;l+~n`}m73`{Uu%d3rT@xBu<-&-ppGC!{CSn%;}`sN^goAwQ%=Hlu*e8EJPm0N|pz)4aO#%`yJlsl|&uhdXt0-LM^D12}R zbpaHq$T^goSNc(!^7Zq&QAH5R zLCsqeS CAfhdX;+Hi0J^z%}bE;7*5buzzt1q(r+3w*l0n{Yq0<4g!lltKSQg2<$ znb_rbHNjNA%#IYq{HSghOBkTGWil>{Zzp)(myZWS9UXSkXFZI`gAIJE#aW-^lrp|)>GIa5jwkGKNOuL5PDJTPIw`rM@gJhK>jmdT)El1~3ZNX_3> zD-6}91aPF?x;tPx@i2sGTA)HBf2wgp*?3h2msIsG4LN17f`V;^ z_~FH*0-x==x_-Npe%6Gte?rRvqL}v$T{*)4es|Us&_a-QH727LL7+63;&qp#+Sw@f zSgk*P`Zj^E`vTQ(gwfpe=C(>edJQG0(lDhuwuVPx9f;f1Ywc|1R&h+Ckd-d?#Pz0V%G}%a~7O=Wd;r!Y*M`z zWF>MQQD8nBs?4`0UaT6Ap+|T}6%>Z+cjF>Gg7&(-qXxo0(N0+hepI;{@!r6`s;5ox z`aEOzG{J_JRWR^xH$>`m22bZ%XeJ({suKtNlwzw%0nJuZs*W;tBn-TC(qC?^0otHp2SN=k0Tc?_5^~ zTtC}zKqT0wW_1Ja$`)2XTOU7LUlZUx^k&=lrmw1g6m8<&l4+_shJUce$LHfB`xD7S z>dVVbUib522%R@e$JF(EAhP4fO^q(2WMQ`f%E!0c*Ca$9UjOUZ{pRPL|KINn{+}^C zjSb+D%x0df>&#e#xL@lkSy(YYbx#e<)z7YL43$~63yoHi6iWsXXa@7oWqmkU7W?B^ zUQJincHKe5ekEdh3xR|Ayv&=TmfN6nlwP=roUtAF|~aVL2jmVA2b9vvZngoZY#AG7gTcM~j{ zmu)f~t&1ru7*~~|nRVQDU~vpF@UV7OO*g; zBwQ%UaoLDK_Gb1xh$Mw{NIk59)vJS$=E0MUZj>Y>4}|BTLA8?@nG16B%;Tj`=2*e# zxeMqPof?nw@{a7rdWBCSk-ga=`FZ`0R z27`-zROe0k%g>lO8#Fd=)e$WKVGQ17{`mO?W6QJ;p^Q(J5I( zHAGEH+u&_O=XDx87 zd=Jtl7%Vg=g%@ka6(ur-wf_=`y*!l-nm!fBi!qu8)Z7O; zx40BrH~2L3GfrbGy}|BeuguZoYQuvfa3pD1F3>G0AuF{2J!Cs0S_%bBB-q~mzR8r2vt9}=71JKX+&HsR`&SKG+3j34z#6OjP!R#pqO`p$hj@a90ZSVX zJDkyky_^U8qXHMJRvjW2#N_ zQA~Znvm|FHqkA+ab(|6Vm5y6`2R~qIW7Mvwnt$8F{&9H&z2Va^Kjdq>Z`z#WG+Td0 zZl>mBVq7k{CbwrD6MlGL+uDIOjqm5|$c#V3cYTAN(3PCl!}87cXZE|f3eMN7_UY*D z`GC0cE1uq}_9iNHxj2T75#+4ha@!JMe9)O+6+CbvKnI$ItWwpqk^?#(B01{T0iwgrL&a{x z0$BhYYQ@y%UDAOnch9sKX&Bax7d(DY6>m=XCaHY_1PrubCxL+xO6}O2=Qgt zjGdBi0Z{jkm4v^)DAHJRlL_{n8JaSmUYh2W!Gbgz&%dogPKa1DH0II)&I;z|vo=bt zdM6@$dqu`G?!!D0-E(~)kvZR#3QX!jZj9Eq$w-H8Zf-jAKC78Sqha(P$vL#}0 zu|uX^=1-z`m?e~{x(SJygAk&2WgWa<(Gs-65K0L=qF0L8R?Fc?_~-b!h6+(Z*b%h> z^OGQ|W}`GRQXJO+Pk*dR{@Ty~K%#&BxSzAdXLjh;I&^A@yT#$RW$1Ll z*v={VV7YBdl%X*mzF_typr<@Q@QpolyefsLakc@ns)4dc*c! zFl#$ysLVy+R^8Oe?cqGp`u}d(o)Z6$#)II<;U+cY)6#I8r5pXw)?)#TU1l^@w*#XZ z*%~w5|Gg1)#V_<^h~7u~CWUrj=5SNs z{M8~tkn&=igKM@8=_?!3vGi^Ul{a&GXEG8>)L04W!X^ZT1f(LZLJJ~JEC{x#27U0- zr&F-A%ZJprE0px>Ys_mt-wUM4QkO-LM8}txJSZGgseB#Cukw^s(Sf#=!`kx_Tn8Cv zZZ>4$6ao$kGHDf*@I5>r4AoAslC7~Fhh>SUwct;9V2|`Ad_6t_)%tb)VDBi zO6ZDc%&`)xW_Iyg$n!k~|I?~>I?wK2&J@@mO^cZ|*a72f=wKv4q__o<&F?5nVh<+_ z2iTXw?;H@`F;_gsTlpnL=vxh8-+FEp6)RWd0hoV;wW4GA#l`Ra-0_3%y|rK&=Zvp{ zNp1?nZoFISo|FX3bXp@Ho_W5`7FY|QH2?kTE5Sss;$eRRgi4fAO<5Y?hUU{0)Ee;G zLsooxCCfUr1XMO^^Y>`E8*~K~pa-_kkIlF>VQ5`P_>X~&8X2cv-q#6&_D$%?PyCDA z><|qs08!a8h>mQwVwIpX+a8x>S?U>^QfX;_ZvS2BShAD7$tPI>4Vey`dx1zyvOTGp ztDi}X>G0I-WY5Zb`oTjr8|f=mDWy(IjAWbXb}MXE)n*ssp+|Vz3Ipz{1>l>j)u`aJ za@(gy(cz|ZKqHIq+jKWEafh1OT-0)mXi1h^T?hI?b!hDeMV=#t%-H;&v$$ovF&mYj ztrSSps{mxnmg7}lZoMPTty{T&7&!2z0z2>ufppe25H6DB$Nst-cx&~loEBQ;lEG-A zVQAL0lty1x$ugl9Mu-~}@ts^i>gbXkZaL~@yoOd)c?Df)R%D1b=m^h4nyQ%QuBe7% zX8;HW!<|7C5?9C<=6w`}y&;;%V8UiYaV9!#OaohZm-l-Z;kf%dPLIMJp$PG6zt5wryV2x#M&mH|N;awve{O+hXF-pl-HRK!%@$^*3&n^- zBeiarXm6!VX3X~VBEWAIp&{Vufnvwgyey$xEvtcEJ=B00+E@NR39^6JO!hR$W379cC){k{yWsNw3cV6K0;4mwQ8PlWi-(TiRX( zUB}zAYsx+K5&Dj5pr%x@MO|qMF8RrNjoHb}6#Kd3Fau#xj%)lw?j9P_R-%#XE=B@! zPF%Hqi+8k45)~fcBdpE-zQbQ45;9Q1&&+l1B{ zdVyXxY(m^j)CQ2O2?o^wQXQr*)vZ@S9UM=M!!cSXTbop)cH6@ot&d-is|)&XKetR` zJlVC?9Tfw^tYVWQFp`*lL>LKHi|{VbW^b!H!J~_XfJTKKyaPgi zaNb^bj0L6=Raw+3sAq@=s5{HmYp7MW*;H7Y?TB#&67R)ro6W|S&Zn@Y7PV3Z)KE%Puy2qKl# ztl8rhl{%NCg6sTFHfpbPY{;QtHas_^{zsLLeIhnwjYWwYy?jnlx&UYSjebtmVRoe{ z;u(Y^;bBR8uED)yaVI;$_=UrO8rx2CEINKrx31I0S^fT2C4;nmuv$ohNaJ{lS(&hmR!rIm`WZ=@;Jd<6E@(cQ543_YPW`j> z)gizIpG?Zgb@pC9k`KW{6Pk{j4G_32Qgo_4%P8w6mHi;Bl4oVD3`^?Kj8cY90N}*a}=$rFs+IX{lhD1>HO*&3I;s5e}?vaO10Mb0{&jCbWhu*`E1x%|iyd4?q9j^6V z*XkeN;_BIn=Ja^`_LOIykeg`_d{aeI*+MR(#;l`}gdRD?spT9*O9GIDv=%shKFlJ4r=;QVsRB3;7 zDRZjtKBFIqRzowJTpy48oIk(1ecvVuXCJM7U0oK=&1qXI;avV~DY|r-FaC$y*vx0j z{l9@v#gYq_tDyC~_m)U+@pWl2*cKUjlSrzjoPxbB8+js`Q;nf&Y_J8bZAg+I1Bt}) zZ=-3uC=$ITJxwosJz5heOVvrOK*8hkcVqV_(*sdkW$C4^K7wH-aEzv&rgrL*R@d_x zbhoH+q_hiU?_7!^-bm=nSTUv+bz0vP=!qq66uP5>2GF~vC3;jC3tbdEAi0U_306Ag zq@F@w7Uj?%qdnMGne|ES+U*86g zke%?-Irj-Hz*{|WEr;Y5spX+pE|-}QSHTtTX>%9U5p2_8003_PY6Ef9yubVXhK-P8ecXOc&S z(W9!e8hZBI)(^FE7ef3W@@(*N={N%7pwjXl{6$Q-PY6QQn_yrlnEmx&9G`-;OlI@13TnC-=H|?}n8)|b zFPy|71#|10+ZpTCb=Yk$QHi|rbwLSHF`imZ*=R_=W+#9)LxkRQ|B-kZ_I3d8gF*65 zXcbc_Hq2Q@lY~i1?1Lh|*^~>YhJ#q1Ur~Re0iewBsw?#>fy!A5Cf4SVMhpEso+5cP zDy~=gugdtW4Ryv*qXd<5&U?*B38m#n3mTwVTS#_QFTCG4rtq4|=&E-iFbR;KP z`#VVlpDm?@xmIA?H8z&*@s}a-JxM|4IYv5^&JM&wbUA!cF_fz@rX<6d#1J=UpmUI= z_P4^L+^!9`_RVr;0}$;RXf^7qSY>F`IHg;MAMvmwVm8I^oK3o0m#vU%K0ALHO61ur z*&eDvv_6wZAnqwrGh|GZD&IQ={70u09Qs*(Dh;)5`L}F49^^2*-S5`n1>ZSm#mLd2 zXxU+!G^Z`*)NsCyhz-R=l%-tM-o@d+;3+YTc1abakLa2pq4;Pq!pnPdpk3 z>m5y?@9cDA($Qy2GY;enC8CA9@W>`@@=j?02U>#UtJD@;2bK{`bk!ew(Hpgr=E%7^ z*`XiuIYqF#F-peiwlRw_!mrL_tDs$$JCcQvDTM-3Ssr9If~2xyC5OyWF2y#5j2P_E zHUP0jIjaU#J6X0~=GJq>s_Cw|?#djxiG7$Jba2-7yhW;Q#cJjyX5ZD^O;htjglpv{ zwSy`#|3v++dpOiPPtO!sp3$a<*bS%?INv)F5k)KUpKz^1uKWHbfvvkZSAz4fHH;PT z4jpA$ekGna9DiDK#9mk!4k)5L?B>Nk!f42K0{)s)0m61Xa;a9|#O7@(CKSqH+=gk? zP>gtUd}*IKt%i|nE*N3tkC8$xN0)&NOZDh?4>28UtFno?fe9&VmB!&!;m3WuxWhxA z$SkN3br8N22IIIsiW!IxYY)4icMtqLj5F0LTWs>7kn)PPf>ld@s^NF=r z^P8&At6YgMXN`b753H2TKFQFfmp823!chVN(P+f>^()&~x!$W+Dgg5y`N7{2Yy^o=~+ zmKeAjE56ZU$X zTWO2OW6Yv5xkoP-dK)U6(AO@orGtA~bZRG^nB)R#$ z8t%1L1Wx)l4024L8CTrbZ4unD0s9Hz3CRvRUfk-a<=-B*)Zn!sNBW)t?gL2I)yT16 z-nD>sHNo|+C1AAPR|Nxv;T+1VZiqj=4gk0qPqUIzbDi9W`{jhY)ORemW1<(;Nle=u z*Qs0`wY@1R?f8h=pY*{CmF}&OFu*hINpsdW-*dzaM1igQcdFxE$iO$RR1=34+X~v8 zjZX>_hgU)s9q3Rc2tw1vXS~$~#c_Z^_q^pJ1;e_(JL7h-_b~zk&>pP8#b*4~H<0!c z9w&*Qn?IO;-JctS$Z}6`2E6`s8~KNJP4XcyYRLxIQRx;T8CWBBD~wuedak`E_iiYR z4dryC!@G(_LWXi;%FTtaq*_lJmt*snd#lQ2l;=jHIFCel-r;(Kgc@~|AOo=^8Oj`s zs~FLbjqTVX9Oz|n7&_mrkqh)7$srE8c?pB-H*^o8QcM4Ub;aBlu0`{Y*hqh#v;L|PChtPVm*TCLzAOhXcFnRxvu%L*(arv#~esUurUs=4QQWd5^J z#yAK(=V4X18qy{5YXUPO?F0+mS@_IG==nO>t(ld_vZ>}tZT65cirwyCe~a=-X|YlN zGdT0${1y%J+H$j>cw0YR?C9`8oAh57r{Yu;o5=aP{3z~%ehP3DWA?l*%f^ISurZp4)C&W@>Uj5^Lm%Ik^OzX;LS7!9+i&e4jdhvnyB7|t1 zL4jK+^c;i1-aQ*BBx1E&w`9i5E@TM6ToHyF@}?yf%5jl?l38IKjC3haz;HYUZlN3~ z+H$*Vc>IU^;bEalR*hEH%=dKATUPonz%}j;3IRiFu7O>ai;H2JqFG1F83X=JHlS4& zUFr&ak zt~QQC-_COMR_`z1#T+Ul;JVh(Y8%{6&7@3b*R!5AJ$)c74DIM`VY~URd(yTjuf26_ zdMfH2%qm77I_TkJV`Jq1;$B9Bd3QZebth1eNW~we=V%i&TU^rb;C42vYr(uPPmc<1 zqXjm<$eqJ~vuMjbG#t3U#m?OE>qnDgpi^r%MY=zA7~bwa$GV73RGmkVm4u~_#*{J% zcLrR>Q#l~rwzjdNvwpvgZcgK0$LMX3$vc&c!&l{-R9*XLd|7`cx2>cNJq>(UG#s7k z?BLqsdoAwd(kwk3IR3BFFZSQ%`u9BVK^u4ic=bH1HmV-vV_L(^Z)QT6LB7TDFT{vJ1kfhC6*py{>lEl(^0iHl;BvUukw#;S=t(ADy)x76j&x&4FD$ zSV$O>`u@T((9`SyJPX~ziuJyiejX;sz*QGbdG7DlhyC6!IJjA)8z0$BZl-z%fsn=I ze0&YELMd)NT8V*m-R$CumJ4iuwWc2txJjsGg4^mSC7>GAc!VneEtf3IZ6gB`Tx;D+ zgz^n^iDY#`fdf+(=luZjU6$*C*0JpbEO;CxRK@k-*u;MZN03xSn1a1ADMRIvVQ^K6 zynz766U6n#b@$w`4$6~g310v@iCyRb7QWzD`Z&*9V$uu!>)uTHmi4r-;+w9!5l14RHLLL-z-D z!3*LcWu@|`^DCK)s2Nyvz~)c4#|4|%w zwr<88jwRh5E@R_8GOWN=?;ZUFkMj}n(AEm`i8)Y) z;jef$rt+ynmCd3JBg?!=0|r_B8vqsF4T66WP)PXP^Ea8kS1t&(BktVoU=hx#^obGd z`Wrd*R_QdtrnXRPXep~>nb1WFAh-cg7B?-!DD0Lq`fJTy?gQ$bpeMpdNLadB&mI4PZ_w1}V$L0sv4MB>znmCSOAl9MGh0P?oRJwJR&FZsN7#PXJOr;piPP z`xA-LBiZil+ce1R4_Ey@`}A)7^dFkFW&1rSKfCnm09ei`8{D@|A04Qy!((+3wkTUehqy`POo%lC3+`Z?}sXW9YA^e3M`+_v6!e;d3Yf2%6e zm%9nWnFQ5^?Bj$1m*ZXA=EzMi+jt^_*kV69sr~L7z5NWvyGQfGj7XnKt`~SHD&M~H z3Wvh^t`yx5gAYG6(e-L>*@nSSuW(P=*q7D%z0uhTA=>@dMUDNRLc@*=QGI9(%=Bbf zT>&0;COVx2^i_%%H@ou*rMy-7SLAKvp(0g58qlT3(a%?@C^LDpFt(tm#8^;pGFTn$ z14Se&4$*S`gG9L*qhK`c%vxNFD3%FeFhTB2F`^d6Uv>QT2jDOSVN7e%C5#Nsp9C_^ zccHEZb~T(Q;XgP$aR^|L>W!U1#+CLD0Q+^AsTMvXgDE)1N3Nlyt+h_0Sf(? z)@sslDi{KWgE%|ZbgdNLM@P{k;O%V=k;Iu4GIx}ULAA+0s&suhTlm31N$_B@;Xqfs zhM$Wa-!GGmQlzX!WqB&|tt?`)8m;q$+j@5%I*rTY^ zyhJ$p)K6oI60uI+V1UL>;8X9!ly&#)D~<;SZ~i0F;-o`Xw_9OavoXMjEFyKymd2$B zK-1eXG?M@VsI7qczPJ?{5+y1@3&v14#kO#^yx{u*!azrqC2GQ~TrAA*5Xnjh*4$&L z+|@KyfzX4ED<^a92dq36n&5=}5wY~bP}V}&uU97y&Q1vF7eJYeyDwb3A3OfoeO0A7 zz_1v8#2CGcz!QJ-nFf+$&PW^k@ag{JCqood0}5li$R@VH}P2W_Qy8#wp9;BvRgE!+e6%>jl4^=F!w7j z1w1r~C;XT}2sQ^YM@9#yB3z**Cl@0#>JQ74o}2ZPQiqemD{Umm;YS}g4jKtYPjn0< z&**5{N<%RG#LFDWjP!bjDHtFz?Ijbmg$`O!K#?G$r?%P{f?K%KSVIe5;G18K@anwn z%VIh9!bO6QUZX|53w${M&~%at%+IAP!l!PBUdLUE36Px>B*~XUiZff9HbcGS7b)2{ zMFRB1B0F}_ro;~gh;)+QM-6eV%v+_N`w>LAfxc6%X2)$4Av6f!-bQhTTFeRHdfp}E`Ipq^)x#B|G3?97;kM4yfd@% zv3ADOi}mtreE9o+CX9mWhA_b)@DZpF6D_KY2Y~8uymJizZs4}+R|RSi1I8DV}(@B zJp6L-cNFR$(U^7-M7)e5(`Z_hir}#McCKhT_+>khMi|U@NfLEtLNKjqKINrcSU+a~ zB1v6Cc5ZVdVwusXU8&RA@pbOtNIX$~)7F&6?Kc1Ja=;E|3crfKBZ}BGe3+gv;IsFN zfh8ZxOciu~1=xNv(VY}_v_etVkF*zA9V8e&(Oey6pifhfPf~2UH53J}WI;JL{0e=}4%g@8MQO0sjrP802szc-WV? z;ZkpW?q0p6L(n(oUxHcL;7`}ArDoSbN>ObMHH_b*C3XkIE1~tt6V5q4AXSDzpG3?o zS{)4G?AD7OTNx2^H{vW&0y7Cx6PpQ;I}|QhM%0JA320G0U{_tAPR=sG#?3tkbwAZAx*M|z!u(XLqQLqwWf zCJ->JdZlT+1p`ZI{9p-hccnI1Pr6V*aSJ+2#@Zeo(1hbz7j;+LZNP;?a5g!>Rws}H^iaX0lA?c1pbHn%T%+i5C3(X zC<||yD=~HDq2b}Jjr{bJ*H;rd%)0@6lL2${YZo+ z!7vymhZ|b_pFK|-r7I+LQ;K9yqq7KB;PFX3EhT3#9GVb9St6!8$q0t%GJ$~r&JbAm z1{JG89gqyiKf7OdNc0e;uol~jl>6cZn%%ri5*5W#wG|z9m%cF45Is;uh2#$>GVSwL zcZ^M=2J$MJtAx2r1X3b7IHDSSqQDjkc!WbYgu6xrzm_{Dt}l1SYi~cV^Jmd<|12ZE z)|$uZ%cguhGxIWjC3)*-BTY{%5-(9_vZ1t}=D%_m7Yf;`xY^ya55Bv`k zXd=Il$LsOr;o)H;n4`Hjb+6`1dqvjcB;*vFfBW;19cTT^Q1W3dx@Il=&PN;+9wF<9 zjQONG`fBp~!^_Xib5-UHx^-<6@R66+_kP{4!PCvmjZJG$c|*Ua<86lL+i~Ubu3z)l zMInv%B0kR+@7fK1u52bML8tmrk)S8T(ry2^cA31CDrDtlluf6_%Ke~{0&o=?)v;SAE1(v))(|IKA*y5Lx(DR2Isv&$7 z8c2Zi0cQMgCZ;GPdzEhtOJ9=k1kETdIVg8;6&#cab48I2E2)WCmD~DCtJ5lhw2LZh zzX24=B=^rBifbg;)AJynKyK3Y*O!;zBnpNq(rY@koyAUFBvKI(LYf!bOAj^gSj)0U z38p`2P}%IdKK+=}F$ptPr`(XQqvaR}v%t;yNyKX{lr&%Dim=z}X;W-TBo}?FGskZ0 zRuK#MNlO13vEtj8^RdxkR8G2+&YTe5Vu-(e!7*rW8f++Q3S;!#q0KsyoL&d7z&zfF zix{kkFmAb7)Jk{bgOT>}0|FZ&e9c`3+GbE+<-o@Orc2rp*Z$}XDj~y<*#WFMhQ@hF z5T6bVePNc6p2}u=_0>EuDfazwLuEBVlqr`vlM;V*VXEB_OeVu4G}nh-tN;z8$R8qP zfs?Q7=1l!NCO%o3n8tW%vmx#i+v`vX=gJYS1h zE_a8oV#iMOQ;ov|a#P2QD!f6i%0*^WiVq}9ltJ~J7z`ARdeC^Q5VVnYm0^xE4)vZo zA%dtR^NQg^7WDGcOdKhXo#woEP_j&})K05<;^eGbM0BVP##uv<()KVXP&ATa-G|Hu zNh7#2&T5gANGqxxOAap=G8~9yIdcXsMn#~ zk&rTXS3^x6T;_9Q&TS$!rW8G*#!hbE*rL6p3%p)KfsRdaD)j6UmA3FEYS`g zOEFqvm5#Di58kSlt0}N>pDvOvAZm_OITkz_=*BuOmKdn$Od0LiShie(6R}K!t>!w9 zr-5qe;9=~SgcVca3SVIhRvMp=b*25Qgs|q`zfjqBW};7M!ZG7Xuh!n@uJoF*%M{Z0 zy(*V4`M#>gKq8bsFmsZvA@xH5L??2e(P~pBW3lS80CDqV@s4WfV*N%qc26G;`l?~l zt~{Cnzf1u(SWIYaLmkYNAworIn6!4{B6XSIZPZ*ncb^280qI0F<^g7ho-MjY;Os1| zH(i%^_@_E35RTE9bD~fmihwSX0P*f<#0fXYO_Ggpxg$@q4TvkkO|dh|2H8p`|FNh? z`5p-r=I(aQQudQVFs9qS&3!mlwA00I18l~w*d8I^DLF%yWsY@A}2LSt&|P5 zual~eV|z1?hrj0?b2Q(iY$u!R|Mo*8nOgeN7#?zeXHP&2eJg#L+w0vz8 z{ble-;jA~mZZx0t1e5RW&h=oCI(eD7>f+U{9lB@z1{@kwPgm|z@?l=A{tgv+p8U(N zPkrmIjvSqy21e)Zt-m;#etWfBX9F|GcS%tfCp0!KX(mnU-t`I)?=4ie62hG zT&Ksf4(yFzZtwHB(bur$qm7qpMujGgeoyAkI<5x6r&UXYl`s}qx0Ab0PqV6jdEVE- z$NlEyvaA-v{%`w_ zhY-?Ehc(W5$#_m7?w4Jn9~bO&N=^KzgM4jyu4dADWzAx&ra?F zXQk@b>|||4sUqkc_$nq5((YF?-`Q(gT)*E>XpBajj)>${sEJ{NEBEI0h@-_Ai%40J zG*e$JA-O3XLXVw>)3*af3egjed9=(~r3ealht|wOjx}^-Z($UrLUxEWkW#|QuKol$ z5l8?V%3ER!=RVfifgtq3M?6qh75V@(w^qd`@M+$0_=Zi*)sU6S!Y|0#jl~IhI zrw$5pDo*QZ70|tbJ9N~KiX+eXA}Po<`tcXzM@p#p+2h0@6p4~dieX1RbT@>c;4&eu zo~>pz03*qp0(a~o04aomwY|PTVaz@}x^T9$R1jaaENn+Th&5bebeH6m#E1`_IKtUo z8L+ZYUIiN8!A({A9PN$o8&RKIr3WTR6^>3Ygn{@Bn|nA&g%+`IfSqiYPkpvWE5A}VoH5XRx zW+3hgR`wPEimrXB95z6)jWnq!a6Sb=FC?O-n1fm?VKlwS1Xm-9?2vw(Mm#Qg{9K7Cj84l@@5{|VCZ&t~tX z_BUFiO#@G;cOqytk*2j=NNtNFhcNa2Ws95?20C*El-A>G^F7xK2%GKw0BL)`>3K zh)gk_(c3*I6i`i#EPICX*QYpIiwP@RE#!_x!CkCPj)pQj3OPh${4FCnxNQt55Q<=y znZPaJ0l~9?q!tcfLV@Pf$l*K$S+Mk`>4H9X{*0Xx@ zX3>|6@nPYuQIqmBtv~$wS+zB#`1}~WebMhnD(0<|g>Pyw8*6wPG_!Q%Y02*n3On1o z^>hiVrrk(JFn*=leb#gy_|9^dH&8DRez(P37K(o$WJ_dWS1Yr~AW$MXYGi#ef%Mz^Skic%*U>%=vQ(1R7Jvkn?naIRYptV$Kk0UR4e~*+ud?khtgrXWCH9>2GOErVwuY61)a4gJq z0I1Pfe`kE5iSQ3>AQ|Y}pyTQGDa}>G3pa`v`=K5N&)n{fR{oMK`vky+T|#3%gg;@y zdmV7uFyaxva^SxCwy>~gRF8wis%WO@l=6(TufoX>5#$8Y7}}3wdmV%DFUHaXki1uw zqG>MIN~c)DGAFs5+TxAn;P|v@yzp7dkJT0$@;A)c-G=Op3DDcMaueOM#xZ9<;wjBi z4}|wfxB(Jva=GY47*rN?s)wXY2vC&ao0gNz)7bFf_lc!EWoff%cyJ?XOlzL~TvkN_2dkqqNgWm057Z zYa}28az~u%YK@Oyh5B%f0G>e1?*P@7d&q&q? z083Z;1l*HC>h?4)O#~A>=czy@#jwM&%q1>Pyy>Jj?C>obUQ9$$Uc* z(4h1Z&gV0)03jZMIB`N{sG)EMuC}Kv<4LfYZ;behze$=sZUxU}q;eHRVDRf1mRi`k z86l|)yTfGG#^A^5eBUNP9T9ETE#i5~02xTNu|{m)-w279qSTWFR@59JVPNt6AgN(N z1_^!0N3Xu*_$LqVyt|lgP(;hU-$dD7sJQecc!Ke6Y45Rsn5x&ZxwTR9bZ%*0cGzD1 zmY-T3P4Cb>dm8l(b}=>gHvM{dv1rnki?}-QP-TwWCw{c8{#*P#*&AUSxX-&g)%-Yo zpT{qYt>LT1(9BeasaaEk!Y*i7`$TI-ThVQ`S@B@vt7-nZFQW`wpmYCez)1fu5V_+( zbme-ZLJ2|Gy-I%LFlf#Ik3JM&R|T5K*|iqLk=8uu*aa!~cIYj9aHqAoK~#sHayWv7 z%2KZ|j_iijFs}`vuO%%_G#|+AHPQj@a~vT1jA?pO`LNiJ8+@%NxKUZ*ZW*oxtUDknKjc8UPM~MmJW#-M0x$0qspM%547PegOv} z4myNf-p!ZmT6yzY$d;E4*&J*39d09Ng*}kf-1j6py+Y3QZ_`i&jD;Hma5DJ?kqW^{ zC1bM$>)4|y;BtcyC63D4$VJ4EKN3BKR8Bs?a)BgcjI`wic!a+A9N3&O_(nHEae&AL z*`s`{n7pW8+MEL2bt2DL*67u9EtGfU&CaH4%5k&#icF^;R_Qd4U26=y#h(p}-dZCQ zqAeyv*53OxofUAH*E%UC1XrgZV5}U-uoaepp%k}+NkDprHr zh+e!K91im$iu5>9QRSZTv2VIoCi<0Xup#(e=<{{Uc)hFc7Ue%#K)Dtm46q$7i7dcr z)ub{IrIHrw-XRm2EOuUK01W|0I^HUP*x9&a8{C~0dwS>8xx!?+PIO6F9ztLLi@PlX z+A6HQ#UNeH#5fFOYnI&(?Hc(wde|JF&r%3lYGAE1p=jC&rbiW8CIMyBpSKCijYB(| zYcEFFUcTpzczn5nTODo@A+0rt9edh%xP9q=KTf;(yDQxDvTeGv(cFeHUZWal`1zMZ zYi_d|i6+AjZM*4W3Z{M9tKjA7X@_{uP~BfzKXMIa!OUt}M+ZmJFFl{9qt%fl>S!LS z4R2>OdbxYvhF=ESCEg=ydRHxW%?iR9rj@5tF_Ar~rORQgq zP}WACmIhRaHb=M=)=*kLRkWGi~*xJ5Lvrzx29IEJ#^=e`!P{@DR@lfN_~+ z;)|lNX#_WewGLFT%M*)YeDFMVWFK&E^!8=*FmHXSIr-0~T}Tw#3?yL#GoT`5WDp1z z8iyG=Bzu&q{KNIG11%0QaW$v^HEM{VV9xNYx-Tscv#DEE0bD{BfxcNs6@Avq@>(>j z*ew(lYeQv2966^)9SEP%N2h~>fzkzHp^dbY`$TcKbrj;5kLQr932svpK6+o&Pk+jw z2O;QS4yk68NM~I7(5r;gIp57ts!R+C`Y;F3q3327j6uR?#f$jCYQ88ccpIt7;+cJOe;GWNO=d?mT2O9{R6=jFvxA2iXIDizR@hwr5Y&6 zwnN6Cu~;pLWJ{~GU@uy&)uk5C3V~L7C}`mYC!TagvAQQsMQDlEM=bMb_vJa^M%iY! zN)oYDfS7r8i$m?s-^(L~$%;RbLY{$h*)&G;w>l;+-&p&m#NZry^Bb6-w}ec&z#;;} z3gdpANtxq;+02j+VlaBSdgMGMs#yZihR+m>4x6x$#V5~hF=NqJ)O-zR@E;|5cUzVe z!om0+Ku$h$1yvk)riEkPZ0?geM$%Z?4x|AtzAEPIHMWbxz>@9Nl4mR&4Xjuo9wVe2 z%=`$J!WOZQxaz>sKEtnyAg!PlnMJ&8I#F`6*i+(?P}buVBckzyS_-Q`C7+S7tYtD4 zE<~U2Ty&UCX?hJ9#F(e!pgW%Rg7iZl&t|7G+V1PC!97euml@$;yjC$~$598cvbw}P z$W7qr-8!DS4v25$h-fkoSNA7}NJ>1oAWiMPD6Yg%q2tfOgZ(jpS>b3epTFKPqmv76 zwjBbi11s=7yh=fmW9X45Nd!$9bd0M@@~QuV^~5bGBfCQiBFG&r{;?d}q9qrT0DVfdRxE{+=Fc8$%UsjAU2 z6qjMk7E{g2F+-UZx_g^g+4|6yX9)O2Zx$!UaI#Y5i?R}WsgQzrKMaH}hn^dhKgK#_ zy`pCtnrE>23r@`4zL)t&vZ|ZhXfcAC+-Qp%RCjVV*&za!T3;5{)Ee5awanYYzKtiF zJ~t;fZC%fwV~!fQ)^2Kexv7Ki-TozRhiVpD`LQ9`qh)Cm^u^N(qib3FW@&nV`I%t% z8vf&hJHKqQf{(Y820i@O>b3Fv=NVLAZVm1%gn%ic4jwiJ0UlH0XM`6uI5x1vBUM{}&+=Jy)PbhnGjAv#xh0k05rcMA%NF zsCWy`1Y9FY3MW`%p&U~JxLFyxtY>{9GfR zQHC^t#Njm|O$Z<6dX{ZkYb&lXQz+1>PuuVJHJxCc;>k49&WDL6lqx|E>o`s%L+RWQ zF6pU9xV<8y9FH^3K|#12RyPA$HX-hvArf4sxBoCIH9pCBst;rm`Ux8MTRIyz91BD! zQXUr`MIOZL z)d}j3iU8VCspj!w$^V*fr8?JT@ou(nG9y5^Zip~U-u*=B;DGR^f1H-mnTz`QLmgx2 z+s)U(t&LU)S-&w~PfO5;uEn^)NGtTLlHZLbO2S=Bs zO3PF5GjTT^H1~!8u6t(3c(q~_LWR`It!q77P1^No?MdOCHcAXL9@RE;*76Zq*tvK# z{FGe@1)|#vf;|%vkToX;q-M$!*9wSQE0xWc6OGUwww#sFqXr2dVCnCLUBYxUS1Vzv z`w0RFy3RgVro@TGtzNc`YpLzsuo}izuLc$b*<8#;e@S=85mIY{b~FWzdBTWn=d&Qa z{d2rMNoEv|1{R(W~BS{!#54$FHIXOEz-Vpaxe@;9i>v) zb9e{pI5J8BIG$)67Isb<-=reVlD-VZrL;bcX+%rZX(sfRBnAVCh1X6i1rX3@SG163 zZtBJc$t)4uUjrwOM@la^2|)N@6;4$yT8R&7^GroSU+uoq8mEn4F(6<>L$?*;{AoaL zQmoTmYZ2lkM#6YP;;Xk|9F%0)mWjfUt&c>}F0-$EMT9_Ku6BAu7>~M$ZJhoEMeE6^@t4|lnR3>gx(At z6;K?H#QtRj+{w-bBNnw7m&1d_HgrKvCt-p5g0(wDuC}Cqe zBc8@FLkK#8!T9;9sPD*!5x2-1W2b*_iaB}w+}y~{(z2rb32qsY7=uAF4Z(|hR9C*U zN1E4lz<`-odE}n2mXc7tsrfuPjK02qm1P-f|82m4b#B7rfYEn;@bz~15S@qWe^JTl zDtJ<)JfX;GT~Cwwy>rlu>-)Tk9$mIby5pZFu)jJJT2b>4^f7RItE?WqHPuI7e^BR+ z{!#sYKYu{7+n$m8F}s}Q{s5XoS^St^pZs;Z^~<^Td$;oQ@iUb+<^Fg~TTJ@6l)0?h zy%qG9psDa`(TMxt{d}p%@X9sKAst1t=Q)!%TQ2JKcI$g7@a*+^ek>a8t>`(&*DPYe zkIU0ZzN{$Hg0 zWa0meuS35mfzk!)ckhCifgGq1m*R?7onb+a?0g=Gl~N7Zmes#dc|dTGQe=b%f<;%= zXp&o20z)h|Eokk~OW2>g%5gQ!dlJ4cj^?hHPwutX514%O^!ef=fdj+ANXzFDeqP}P z{TL{Y3H1`8-~yjhj2Y~3pm=5^G-tjN*%@a}22jkD?gT3D_8HMqQUpYRhWNaUbS-VZ zTh~bpfBq^i5RhnB<@f~+#Vp8dUu$f)h|#Bc)a%3xjumn8!FZv}*VpJ=N2+Wdj|vs%wdj+@!B7L1>!g#Is69uA4$6QMHhe!+2qhw`MtWOlpEMwT z>o^?Dgw4EoO$`$&zPNem2ouHgUTauRye}jXe$!{`pD3h8bz}5}$f{zWQqlYJkFY7m zoiCbG?uJH|nF>oV2GhP!z~fzX2H`G2DX-Rq(oa@pK*rDV(?@&3p%miS14N3fy6yzI zwDDYxM<0%{c&=vo9Sl)phs`?CV$n418+N5j+TsZ9kIFcujpib(CJdPdAi_^hx|Gj} z)NJFBkxq<}C7wVygYfjBB!#K5#x9na(wZTM)Zr3NlRQl+R21(d_~km)42CNmV`;s` z_E~{xX9TPF%FY4|-3W-=yX4hor9{@yxdz6xW_4Mf5%f~;{e4NMt|q5wP9;96xo4*O z)+z0htLt|$r)7Z&k?(Sfuwut5Zu9ZZ-}$4(kUprHHQsvyCA@57?accZs2%9q2wcIIm(oJ*#Mkl+|@x zo#7}mHTfS##Gyb6`oT0@$Orv>Seeo0|Rx9a{+ z@X`BHC<#ad#~WemiXu~CpQI>wYjI5n5%88&@C&r{Nx-8OwDQuFm6XBlEwUQ&rb~ti z5Vbp25*Koh*K~sN_M-TpC3!;MAH7j+W*E1%)EKCi$EH|w*z&;v$&7&|f|9{3FDegi z;ykDpLc^5PEXPIH}7;e7uoL0|G^4+X)QT zF}%@Ye+}+?Y^07sj`8pGg=S}u1hP>d?&9??iPoc)FA!<{zz!blX8%S?7&b1& ztyDe1fv{A>=*yF=9~D$Y&y!E9-D)a*V-UPo~)PShlM}SUz5Gj zoe#$*R&;3qqpKr#noi!YnD1BgRvwtQj0~FOI~WO^=84Q}4yx7gzOqq%B5kp@0&Dlf zU~QyfQDt@d{TPLO)Svg~Venu3oo#T^t8Mwq=hD+(iPbbR-m zsj96zfP=ftHV>EYi@(oL7JTX`sCzD}lsldN*K*Ev*(d+cwj`Uj7@Sk0xoP4i=)*i) zm-qV>dbs~jKG%({HbZu^xKjkw_Czg%QMZZTc3pBJcihyEjDE($`@>$S7Xz&w`lfq> zO|L&Ee`n^($QqSQ8FP1f#s9yNxDS%yzEcY8$E>`<(Q;SQd{v973R8z39s^CuM0cfr z%9@M36iwtrZr9jcOsnzkWLPgcN|Kp{KpwAy68*1t{l)%(Ep?r)Ab53PBe}e(MDa8rXXW-aBox9_vp0RfA zti+$`)TO}p@l4OEz9cw3KG31&{XIXC{?ut0_#6#<`WQTjh~m9=WH3NaD$MZaqHal)f2*k#E1e<* z) zbz9iaG1=gzZi@@Co5CV0sEkuukHTw}g35b5&&$24&MeQ$ySz~t#byao)z0CB>4oSh zAa0GC3$*E5s`5idGwEDPCKH$`qJCPHvIgjdG~p?bD*OpDo-Evb)3h~Cj-jIu3G%CO zM1ZhRC0yE|dw9`?;R4bDz82bN z{a$Y~yj3dcGd=NM^6U%f5Tc$ekJVb-M)cO9b9{nc`|1-kg2tmfr@2+Oe*~=K9nMAw z<(iUsa{e1{3c4z0I%GCbu}yTLYsS?hnaovY2h(VF>4&0kL*&o3&NkgVWEjbDeTpe} zpc@U@bN*j{u6L@>!uJ7{##cX$~2p7Q%->o|Te+A;lWA*%_B!o*XpImhQaMc1ANMeLcNdThAL@ zo7ai0AMW-#Rn3@iMT}z0nBlTovd4-FTWNfn8NUvXkD7Lhq+xdUXYa|f-$8KrnXH^y z`54ej$kyAG&7%I9^0t)j55xDb-+cbB8`WlC>o(>o=g)}ouY;qn4!g{P>H*pB&i`2zNc+E+at_18F7ZM$4Ue0# z%0;U1Jp-&uE>^qX(_`Ttj|XF-WvUyZ{vg#48FR}(a6U9V_CMIw*PkYFM7P`qmi+WY zgmcw+mgE^_JUwoTmGb0cbF>YnaP>`*gz^M7VT4d!zH{@1mj|V(opyt;lFzuaL)6E^ zx6MI)76S02*nA-#GDeGI5c!AkW#Z(FoZz$rWI-qx@K*rBQ}CZAU3oOa$wP(LDvloP zmtKfgHusKuY=86!5HC^mY2EadgJ)!;aO#o!K@1K141)#> zofO~9tP?R5`iqdaXUQP*Kx;gY-EmAl+z1boQ6S^dX>s+uCr!6!(xt&{G2-7(0%$V{ zuTGde6xQ63&)-~i%#xO-z6j)nq+xwr{-R)Ezf<@)h42`sh%H#KDduwM>|z?gu{n)F zqh56xRd_6z?!EA9&6f|*3+>Bzuh%V&sBrQbA2KQwsz;CgC5HinJuW#1(#F_qX@&sd zYCmj0#Cq3yDkL(L6MAF#>p^%xB^9SWM492N%uW^69R@;+yR3Er5IPY*4o5}10YRk# zvX!_G5L~Dge;*o&5O=Dq&Za2aGpfQ$?8QBSm^o)GnJ&}~xr=FUFe65bZn3|*aAhc8 z$QBoqMjXM*W3iI3t%#o{`qNxGJrzq~IT;1OHJ z02nW4FP|)Vz(v$z0wpBHIgqo8{jmaIffzohURgbtfprqbShOL)&=fd!M;XCZlar1~ zi`&4dRovyuuhJCm!A0=zTNWyF-nPPzzmpsSEKpqyatBIck)Y9(W)kyA;r;(1Q@J-Ie-~VfE78}yQ@pR zYZGhb8s`i`n!>chqOv%f@EAdqD&VE%JWWfb%YryW1YQdXjZY;%W(`N{$>Q@*_g1JC zOtkYLf%oZ|it&{hv(vxjQ_E@YbsHK%`t^=<ehxfYUQ&R5~)@6-U^chq!CD` z?kWX1fOYnBfzEF5Pw&)fZ$J`f*%m2uo;p&$2Aauz56y?d{F}Y*gnaAyOg_v3`=%hu!RQyMbz9VG&zv!@wXR*fx)@YyO-6>W@&iAGLG3l{XYrJcKxc-1`(L|Zja9^lsUUThG{|1WiphP$F zDUQCjZu@{|`LbOU{ftrGY~DA;NCL*%aK z_2r$~*}K)%cNldvAGW95T)LKU&D`#ZhC+4>d9%sO^{s&+Z*8=(l6Lm1v`yDtp#{<0 zXK5s0EtTixXP=%XX<#_#?&piFJpA8#@KJxNOVQ5vssgTGkEiKLaQyB}v^3|Y*4sF* zP0*fY@B7K%(1NbRXC24*i zJlZATxh(_FqR_=%3r{g4w(VvU5)AeeaFoQsLw6E$M2Xdml%yR+L?I?$`R7IY$S9Vy zzW7`o7cZZvXD}VFpcpo@66!)Ezs1V?r@+Ss7peE3f#q_E%4Bt8J0k-(#HSwsJ$5Au4?@vlgXevVzC79R2g| zsC}BJw=K`1<~TDWzKz3r&jD~_v6Bg%I?^k|JMb8kM{qC*I@TUx-`zVr9EU-M=S9^+ zV$byMTO>|LZkQw9H3qUTF~an;52A2j9;F&_x6VFKO1e|u5OsuDp9NNoT-QXm!5M8; z+o;kMg}a8kT|Mh~ml8{+NUz={#%!nl*^fL{xID!?m2(IGQ-Xd#)N#1S0Y5S z7*?672w$4OLkGZ96&naT4`FZypNf6t+=zYwA?T-}NsuL2=Nr|17%izV{v*6FFaB(k z)}pR(G}vQv@Nc5TmV}I;YKqCfktJkS7|Y~D09V0lOihhI zfUJ;DoYELYY7Jcw^<=&;OGJXe6*{=LzL-iqS?|hu5D1 z^^H)01y8IDK<1L@qSZ`3d$rc`vePa|h1b)ZwWlCAO@x8;m=Mx$lD&F`NJ$qqcN0Nb z_11DVU|4-mW}>iJkZ0|7sHMd!BApOLh` zo(FLA*_y9gL(9Fhy8N^e?A+#EQQ)IE2ZBc6&q+2U_OhdsGa$o`EzZQ%sQd(7V_I8x zRPBsX2uRMH;163l!R*)voDx&-oDyq2yI2yCWHD4<$GpaDd(CfNm=q}sorD*LxYewZ zyiHFlQlSdXW17JY7ifP0*uL=nvop?7IySZ&C6hzfE$F=+0(*j#g}*8v-SK*=>!Zq|!fvHyTe=w(y?4v|{pqJuU+)Rd<@x1cUC#Bp(cSEL&s-rn(qGk*fMaWI%g%63cPXWP2<|H2j};u>iv7NQWO~NufLm%S;6Dx=X<%n znyd5E#lzXt!}xy2N1k8de+}1IChzEM0L=Y2lUb@Pz_W{GG(7~~AAL+7pqwHaPhZ)B z9!`541;KMCDB7lrAZWZ0@q-%}^B15pVhxVTFj8!$f_927hs7pG<|+Q4%6X&T7iA7D zlz{DCYIJ1>70!On%Pc}Oa=L@G0uZ)Jg?k3#Nybll_o7|D(FiM68 zJqv{)g5(&8848AdE*IDuV#|hzAq9x($faASPQM=q6Q6P(H@h`A{n@9A*&y-q5lU1S zWZb{64BAO_LEuFsP_thXDBs`@JTzqWVD$nt@WNB`Gm`vZvy+%BxxWY)usP~q?Up9@ z^k&A_B2ll2qCvb@nLRKL{uO7M{Y~Aof z4%%CLR9#}PYd4UD1VtHQ8vbN8X+cVG3|$07dk{h}g2W`Fa1eR0IO#8#dL%YXl$_=m z-xJ5tP$ijj8VF(_ojW$mW-ws=}!i8Q9&Dq0>^DY(Ik@xKn< zOdrg+n7>QnX;GFBO00Ww=b)Fj(wRUVeJL^wp)NdYJ_UFi>YCV`#6_W)%p3~rzA+g1 zWkW_kHBzo`y;7&flb1I>691|A*N-GM@DmjPX0erA6S9Wh<1gzjU zqy_+n&SK2ug|l1rj_caP!q>b{#7pqTnsdjCW1Jx=1IeP#oK2aDX8D9wDOd!^_>O_u zYqBd6xK-O1arL%ho5i}B=CP-T;oY=~ftmlXN+Le)P z^ZHj3$a298=L@XZE#m=!=Nbrk9@eZoYSA$UW0))V(eg(j!^IV5nJ4?m7tcVOgBQU#A6Q#wHyU z=pb6wT8{>Mkg(qGna0f2g8oK0-x=gB|TIP>H-|4KQ#rJa6Ny&Etqf z+EkzRZH}Y0EVJR!P2>b^OP{CS>>G?ro~`LUS@Z(km9q)-Svxa?V;p$S)nK|xj>fiN zq8onC|ES0KvZ<)@R`6{9dxNuImuj5-7SwZsE0J&VYqFaMGg1eRz(v*S-A11OJC9y@=}+nwUgKAv0IyW79`{7ln&_+s^8ebv)7R2GZqmq=Yc z%!W?>>psd$SdQc(?BV#S zk5HQNk6wADbbP1gD1eC$aUm}V%l3!eoF@XKV_S*4dr zeT(G5#<9t~eiH3l1DYXz#D%6zeUGE}@anXsd7kO_=lG^fn?|w?u$Aw-q35stowN6@ zK2s{k23}e1sJg=cVGjU)+#29x!6!3y!uoD4e;4~1(St^z6U zQUwnw$(i*`aBap)YYUnr?J>>`ih@xJQyv%LFcz>;ArXLK;*_XWVKhYzp+YBxSB@5# z&&Qdw0%Uk*7>#eqcH^YzC&!Czz`6PqlQkF^x*MjSCZ1JVcqML<+V*hT)e{jOxwxr8 z17+R{k(6i`65kMN&M%6U4A8Vbl*^}cOSB}|SM|2k_zrN3WP=99_@Bh94r80$w3oao zhEi{kdrd3C*d;%HU-B*LSA8l$N=F@z!4k2ti87F3RX<2FMTR;uOp6X>hq0Ac@RI7y zezXC>=AlexoFT|cgN*oy3A8Y6(9$w*+FF>NMWS>x_N2fVH?}d2xSHI$u{2u02>jIm z8W#>W>4IK;x(HOxEeZfrm&GJj=52D^D833x*MX1Oyw7ASL5tb7Wen)unT9<72fdD4 zkM(cqPbO_Ch4?L*i!q(W`@cHWjy#scS7Mzna7^aaCE= z(FH&fCz8JZl1|kw{@PiLjpIejY8vL)6DV5saw+OsAtQ+I-pN!D;-#aJ{kMG{;3}XU45N z%!}ts=+_Vd<;j*eZ-sX5j3Q$PiNn!=&gRwk)1AEz8|HB&|A4`bWmwlFaN8!>O9ZQB zb9us>lzf)Af9dI%30c{grJqDG$&;z$Aa6*gNd04NX{z}k1MhiJaju(woxbz)QSp0e zdV(7>UHIMq^9k=uuLY<7@N=h3|9!}dGfjJ$+o$Ks(C$O&`Jmd(Yts+1@H~1Gye86F zb1sE>IeBi*-P83p{O~yV+1q9@(P;jS0h4mKGybq#^*UG`8B5EXJ!R7Sja2jD?fvRM zvj)`^=BR#U0~<426B3wXJuj?%8wD<$qHVLw<8_w^UrOuI_-NC!aL)9S%6sG6-l@5R zo}TXWw*I_ht9$W#4VhO{*TGs7yQ|JM%OH64y{(1)B({1);c1_gd$Xl+vo+na+k+G3 z!>bvU`)k6PdFcvf=NgCFUHN|3ihBGwWKf)6UzLNCvo65X)y>)HyEODo6A7#Ezr`JF z)+x#Vb5{EBNf2(f02X*mDno6RKw@aCy2t&pXY2xO6!Qr$Dhz1~ykEP7flwwo(_VwG z_SCz6XfI`_#Q^V&W3s*x09L2;O4W`q5A^L4DfwQ&pJw?TM_D&^l3N|Z0!*VTR_7U`dgC?0r`$Z18(0Ue8bL!(2;fi z8r9vOHH?dKI4661B*(aNW(0KtcMk+h-KIOPzBFR*7OZw*M3(+V@blP(xSN1?E_kB# z$}rk~Grw=FFPY!A8&SWi5crx~{{XI`J!%h<+@#I)neH!G`bP?-Yj#S9pq<`Z8sCYG zqrmkfm1H7NG?X_uea=4$&`)HC(7inm{+o0OLbYn8;M-AKBrDl@M5lo%KQ$d}-WBdX zbwo;|)h78K8!zYyItGE5${8woToW&fpMBp}F1|;UceepTziLtAn;rxjGjRH++}_y;YwxKa$PQAm@tR=$0b|Ekg;U!Sd{`I?{z`%h) zfPn2r)n~&lo7qMq96_`V&zn&2K|ER}h4gTE_a5<`bAzbS*SM)?Jibr|JpO50^|Kox zonc_El&{JmuFQqnL|@%JrQBWvg!r~3X#+c0-X}(IfiU4gi5UXBpJlHF6qm8W`x8?o zeXb|K1u*q{70SHizgob$Jj%TRx*p@g#c>4cKM*H`b?J9bk5^H7rt<_QesKpb1$t}Z z$nxJbSqku8qtHG9e*#mg^%rNaCUGH8s9uHnk^EJ<K+A`v#@ZjGaA((g1*^fzbXY zS532p9!GIZBFp}MX2Dz+&fS43_z$~9qx!c(??5IrLxG7G7d1>Un=&<`RGkUv!!bat zzCbouL0>3;Bc?4WLSlnJIOJ}Nu<)%}4Jo_iC*hCMYT9Q9zrbxkPBlFLv8MaLIc@FX zh`d5Bgc8PB3pTQSzk7>TSUI%=n4}*0FuuE3qcfTq-CD*NIIoj)AeHGD#=b zJW1S~Vs--zR4&PD)#O+PIrzEzhMlUN^TLue9a+hYs&`K1{}$5&{@v^H*AOXz({9Za z65yDdGqFpT34&oumX5l;2TEsK78c1xrpWitS{_X0Rga{?mD1-G)ydA>*&7|L+26Yc z9|z?%`S)S*XI${l&DRoK*i+i&ma#Nmy-u_O=So=)TY6AH_jM(eh32;Lmt z_wDnUErF>+?>$(gYJF3#rd}zNNa1a)tC&YAU0vPRlvPs?JEksfHLcT&m$vS7ZcX=JAPaGt8ByH;Rdc9?y;Ah zO4r@Y%W54J-rmpo)l^y^uHTTP8gLga-QO~=_oIGIQ$}y**pWEUMbpTOF9!ykBtvMy zT?}vUwI{A*&;NjMi~kda|Ft_{XEIeA-m)Zqa_dEF7nJBMos7dA1r@K(*9)z?&Q0n&rOn&u~2m5HUp#?s50l|Q;JF#uSMbl z>CP)FBu{VIs?#dpiWhC(`%MC9m0TmAs)~>JGiGydnZkhgz(&8vAdn%D#fR@Mzn6{W z>~PX?Pg;wK8-l~FMLa58-ngd87rKMw=ebX>2=5UD0@RgKL!CXkRyAdNwIbX7Lx0j84KvZU^Lb_6l4w5#_M&C<(l=nbSzS;r+M(I zBYf3AOsNb_S~8{?sdKAUlZ47-n0(WBr0#J^{-be#C*=}G&sQI5()~BW= zO$|av!8J1GfKZPFp@C9kRZ)z-Ew_g!BX$xb)K%a2~}Ak4awJQ^AL4q9PZMjTojHVG}-QhAp*44F+=Z40IU%Y@u!| z1~>x62%QMO+(8j&fe)I`QBzcV4JsZjdO@77^64kR1gJoToB$M58mh~2R;1Bh^1OU; zr>44z!ce%f1$2#6(p!}>2WzF}9;AesV3qIepV!T?F5?F>0TVGe;Y&;&A^k~dj4KAp zZjyo~^T$c8?^=V;!JiLsB(flc5j^BF-NGJ3se7(o=?iXHrZV7G^sd%Vs}ua)zdh#? zXTZ%O#fri!OaG80)w2U{KHpxd!Bj*KH<8})7(ry1HQ`R_5S6nk>;_v~SiFIkzu zFtWJ&cQOP)_e7{$ovC~zOg&fGtz;<>=juFVERA{GEp-W~L}ss`U7xZBAlab?RoX)Z zhDfC8U^-;P@cXNTq&il+r5Pj&IZy(lJ*+aydsuT49F7W(M~%0d<2gI+#-x-WZ>v}K z`y)+MO_3FS&3pXCM?dqQ=>RmPemwDK=RcERehUGBy3wi zPb=rBH+M#_w+WBA|Cr~CEtV#Oijy+F}McG>>LyxiDAQPgQC9mTkXR#+Is)q+uiIf zkNx!yQCZSyX-$juG_lFqjf+d=%kJ~fa5@WyUa>j&31*Ti>*L$pIriDzKb8R%O%K8? zOWTs!SW;x}=wk2g?Bnu%Fl@i5cnIG@9l+IED0iE#j^lDJX|3sN{*j7$Xj{VBTPf1Z zKBc2&x-hkJ!JSRxt9iq{@!7At?0d$#=y-*#ZJT}8?eXd2^IAPVqlwbrs)}Mf-}$^sQ6Rjj^U%Lrc3uK?47B^32TBsq_C> zr0$1&VuZP7$(LXz{3rB7yknlU522n317k<~4kq=aW!ViotspM4S?!vf@W?4&<;R{2 zgX0o90-_Wdrq1Tdyi>l9%YP>@QfX0*bm5vP1DkV%dHK7t;X|APd?av!JC3TDKZ`S> zpNTz}SbiU&Xe-H>!gcVI2y#xvx6oQ1PNh*r$v5-ih?l2aWoUySDAhZ)c5l${K`5f^ zp@DJM20+sEt*b>L5rkgMjk!UU1f9py;i^lzu6E8&cBf{mJ#WG^2 zdCnMJ)3Ow_nC#B?t@0_rV_LFskoD{ZFv8FXh8eX^1XjZGgfg&1Gd-30?Br3c8r%Qn z_G5ChxL-XEcpTDkQ4dnUmxk@gFr5RX9L3xQThZHq_ecOw<_Lw-AgGMYrMP-VqKU^t zX)Um@_Qv~ro!iPsBEC>If~*o zBf7*nF8BwBTA&o!=JZ?vs`g(GvF{%jPDDjA<&p)8z9N-5sb+=(pn&jk4nPTGN(9qZ zsHo)0CLk-oYzqG0EszJnzC+;2j7eC}~Z7u#;O<{>zE5qJ> z&1=>%VqZoUbk`*Cvqv{>r|H5PaTQOAnU{qey&o z%HsW<8{j+r5)^f1b`Y*`b58nFOoUt_!qaLLrfn7t4#E9xrAua(`bGq!R(SkTKCg zbk?i?7s)$$8w@~Ky)7GTof3SP$|x#6PbCkYa9xICy+DPb;+rv8(qi}Ffu`iG{%hP= znzOm#Ue{twN%EeA%OSpsYlATllcU z(h1$_*Tf%`mam!@t@W6xkRQ(OXnb$chaJq+cCSg@F`>LR_(w{FdAtjvl>bVg50pms z>G-9;v0pP+M#T4D=TNpZP3e1`P~#_m{U*%lN9A#MZ4G#C7lUqhMT+vZqpRug zV7KU|M>}k)2SBU7Jtpp@6~B zuFlrShl7h-y_>z4M|a(}=5Nndx94Y}gFCbTK5dHb*07{>d~QF?MDPyB@V6|$Gc8b)VyKk4f9?oDrZuj~EGQzot6Z=3tlrl%#nSM5ZIK64#128<}`>(1xl(|gO0 zR}>MYDo?l9>(%0~&)vLv{ii{BBNs00Bqw3FDphD0t~RdsmRIuT2u9bdZ*KH|pg@?? z|CfPp5ThT)sq(7g#owc=yQF#-lQ{mESRS!%>Ra-T>-67a!9iX3O!|2o# z0W@nE*+*4;@Df3vufdF(pNa#V3vX1QZ_A7J^~hg0%pXixsl_v}mBBxUxXMI7fY$wF z^A{2BVhi@M;20XENdYh#8nDq<>}&9bZIJ^GjNwP=T8-gl#%oeFr3x{NK53^1s-XrA zkI{&Z`2KV7crg;Jh$=zL;RnDF219$Cxx47hUcqKb6+)&VhSuR;uQXWOZ(3vdP%z&b>nBvlRBuV|XW)gE4C{Id9sWa0VwUkRW$Di| z9EtL9KEP}nalv=C)r zvPGixCdJ7t`=q9Gcu_ELr{>VtAtH7|qk-t0!h)!HM|^%^TeNI}RFBv$Ne}>asMa<5 zx6wKvPV7du5R)QM4ydw?dfs9t1fCX}W}k0d2wda{2*gYc*#fmqsFfFzllrWDky`~) z*IGAOeYdzOT-Nrf_lvG(HhM_Dmy#=dCEft zYz~g5N<~PFU?D=D1PCkYI0pyd>2DoGsjvVXj=DuM;O1OiXbKXYeDi}-Dt@?bD0D{h zn-3-RzGM!H_V${~8i_nmlMYh)XwX5A@CF3yU!P}0Ruooo1={OSs3v*aYk|*nqLv&mHRS>Sh(Trx)rg6rJ3I;^+QMRw{ zGf{yK+pkJF4567kr?KiXBv6*1LU74E~$ zZ{Ed-XfxXuqJ#2Z^3c@$rIDs27InoY-8`gUFq|xR_WV6fx9KK8Pmhb=ynG;S{ zCxelB%fSt{4*UhnwmcC;5j?%WKt+?f;-shseL(-!0!+q>%G|#v|EQ%Lhgeh2htx-* ze@{tm^tt%0v6qjs~!(*hq?9pA~xs{75D7~y2*Xc&%u zKD;=)DAxjd0jK3CW+C|mMxwy>VKnx$#HhS_B8>-%VNy|7w?MVkVrAx(QtXf@gl!_j zUB*(<`w~2?SdWDN!A&f8tp&#lMK?ay-}F?6(d~A;4PXDfviM}BZ6qCCjU-0bPIP}h zH|TPFRqeKNcVqZGjOWNyF*$~b{ysWu_}DC*&z>KQ{agkp!Nb-UWwvI2R9r|S)31$j z4w`djjJ~J9oq3G!(73X-)~2=VP~%`M8gp#{Yi$j+m4*MEj_maWI91ne9CHrwX6TJn z@J;J&qx-g%@s#Y=Rw>1WjorD%&YtoxMQx;|h0E2&$5dZxkR_eo<$1ds1a6*k`T589 zLCL)?bB{hYI^7fQ{tZrCw5S7rm7{Y$1C$IV>yW};YFUu>9f0i1;{{VQhuZlpNp($qKbT4ig|6u z)4RV>39;EzB>wZz7Mco%T-qG7Lm!^ACQ>Z3%QiPz==;jB43IaXF)D|7;0Qq)2bR@< zRA^~060HY?3P<*u?U52`PD%-tB65&x6MH_fJoPoV>e87YQys&8l|fe6REOSTmm$3sUEj)iO9K%K;WpHO5U$jzii)YY?z;#;T!Y>@(uvXa}%2}K0$FYN+wDbeV)=|t{hU;>Qo^7MB%T6qbk6lj} z;|PUT!CApd#Yh@XW0Ym<79kJQP`|32cGUhy0b&p%QgrNtHlf_%;hq&Gqtn`;X7U7I zXiP$B$jO>Ic;%{R7<<3L3h5v;PeHY5SPfuV)*N44CK+K8ouxr8iJ{7rTsEpmPZ$X4u8t)Zq&CG5d~(#bQkwjde}7uia`xbKXbuId0r)(j)Uzmv_2{SaS^a}0CdoWV#) z(g`y7c>4qS6C;fzf}|5CI)z(cX||1-3SJo9g_sjTpbcS=l+oyQ)gh)fC-cR2LU`NN z<6f?_ZkkN5Zj~?am27-PFS65{nm_`j!7NtRZ`8buG)oq=kswB9xJ>g12ADfqhPt;- zF;#b4n{0)-Y2McWXLxAVsC}0s^vBS@Pf@BZbfqYN1JW{NT$HafUDx2g$R40KMxEp4 zFUMM1025ae?U#j0X`VMcLTZ}FQmpwpUCGuC;_h{i^H1eZ*s2q1C>lUoBHjE*Ob<;t zV=w&<5PXklJ@{JtW8Pr;JE?AgbAF@*1$H=rDmGj;C%DJ6r4i@sC)vBa0sx*U997)= zYi3Fsk_3KEn9;N3)GF1(BCP>;g@vJes7D5Irm2R-K3rlP)++BuCtHAw+0?NN6(hqO zAH;P#%@3mM>GJpH0fwR=Y0V<%Z&NLDmA6hr4uZqB#hgN$R^)L9RRddJ3YpM{k4x?$ zzm39LL>Wg<#|ko1tZ^Hfm0Cq8($fyJ3c@B&f2Jif5ngl)nBg0QsmF<+)d!mR+IzzP z#I+)P-FoxhT)%>X{_P=Q z->lTxOf}embsN}vy8W)q?3C^LGN=DFWMrQ`Q4SLmtUdN&>1q9X%Qj6-G+6O{>VNZ4 z)&06RIEANOw$(vdEIJ~BZYt|#XXN~Zx3P`RUBSgZN`!BrIj#F1Ho9$p)e1V|@M9@uExea?X>LE0pJ zSY*zB0I2ced5#Qhaqz!04vJ>Z#+;z>JMLZ4t z9`{Ev$puGHCq2p_cp1vr0J=hX!OfO23Te|@k>B(<2e?epMepJS0y+aQnFIg(E$tL# zHPXW=&Vy%uj)C<1M`)yeaOG+FG&_w%UiW_VU33aFbsJ;c`WzGxnQ^5$Hi;C?EKR7u zy9vfmos8$z_8ai#X-TmgLmeoqYbPNj9mdw%lf6bW-+J5n!R3KRN`F9?G!f}+ulauA z<)mzJfx?na76L1mA}gWJwK8Q=FYrST4Zo$j-;3(yN_QsC4|SPV7ucpQA7$uVNF}_? zGthxh zUp!eTIz!Ju&p)l<3|A_{6NhQZ;hmfm>1L`xwVV_+qSwwzCN69!n52BoAywL`6Ny!f z$9#4O-3~q5J`Ji(Pdx)yt&_L>ZSvfQ>qB)uiz-Mg=bz0O79+}cxR6N zq2mj!o7p&4s6=*Fu%w)Os9a4g*#Jz}_l*=B!dx${Ypj7j`MvT1rWfE~re*9n*b+!Lhve~yLXtzLriGFH0YElhC1!P`A7_bfUl!Iw&+ zBZsXe38W`D0YU60DdO)JfvvDr_^fIp>Wz~Fa~9D}ePt{ohR8I3+I6Re8nPxKTP3c- zmy${ItWLKX0lfwwztVF6b&{UXrMTI;HDJI4ujPNQEH=;-QPRI#tEP*{VS0X!3r-{- zH%+Irf4aZBD+5(&uOUeEqxo01y(ZY$icB{9G+J7YUO(8TD7QHkU4NWdetfx9bhAy> z>D}!tR}JPSD{$Z@q$~~pmBL|;1oG0(wDz`lbaG89Js@c%SnXc_eDz{-byGB`PWJyk zINZU{?ynb>Nw*$3CEQtj92^;Va*?&%{=OT8EDowp9`tfC_i`4w1=iMpDu^$Q=b6uUw5>MjE4rg0LY>z}&B-22&S=S#%t3;VO>`F4dCkb%5* zlEh(%6+uO$S15uoX-w4I>bQr-1|t(K^W@E@J14q7;9X-Am44f3;6N2GLvMY$7k|Cc=$+s?=Tu0<&}Lf zZ=!{<(y1>}8Z2i!sEn1sAb5k-(toe349`hnTO^DZ2%M2x8X??k+MT+U=v(9)GIQd7 zaP*9=Op6u%VrT}-(n?-JU(>wY1}RrD0vY+kS$XX;uPJ<};5fp(SycjLQyO!fjrES8 zt-}lMFZA>YeXul{TOU9Jp#{(DCyP&%Cp=8nP*Yd`(A45#1ro4?<1rKr;sT>-)7$8H z)RY-~9O04qzh%&<2IUOuI#mH?g@kAw8pCRo$K&;#VNBSL0~jpDyxw}y#1f)$UgJq& z&$9owsgXggM~%;gqaC60`Tjzf(Q=*djuWvigVKE|Y{T@s&>><&@sl+UWVH2Oq z7^zoo_EU@GD8k_5lvrwW{X1O~B5OVx?%~T@vfiMQ)pHmfE~Yr1$?H9R1}L!gE+xKT zU^f7ARYFL&WOru&A=d=s9ZxV@d)UU%2y%I9hmrL7v)=8V5O?zJ?8Q=AvCg}TE+-KaL8xdaL2K-vnQxoVW=>_*#FV|SorWgB@8Zf*De+rl$ zh?*mdctN-T3Ka4Qs{{bo%<;A)$K_f)0vA@fD_5T9=Pug2hH$_#23E%OaE@O71hy!f z47THF5v|3|CDCu^>lysG@pm!s$EyAH$bkpr1%qj_VjUg+=K2=vD(bZ*baDM(l5ry~ zQwNwSrPgHmHU`Z09NhQ&d{N(7+8_MZG#eB}9ZYEVQeK+`cK&G8J^OWb`Clt%%TI1@ z`Dp2T10Y?q_ty6J^*~IY;#1W{uGyVVUpn`<`COV<@Y}OmCjf^oH%U(@|8-!kWAR-WWAdB(06>GAm78}D6zP>*icZzT11)3 z_*psFr4I98EKQ?0af37=W=qou-TR-W2QqX1=N_=O_luDFt0nfWf^Vr_yDXC6iVl+K%pqFcClC&fd}g7`oHsXIKzqYBs>WR7f)R?g?1T1#HQY# zSw^GsV0EZS;dt_5E0|cPXIc6sfE?|C&VOhA0?^f;AE*Lhok|F4WW{37Tv0~ZCD$ri zN$Ufe?x{JW&+=Ty-=nDIX_b-5#ki-Aqz@@2H*3EEP@&)?GFuV>Iu7Tti zaR<@@bWTk{v9l`)gCbBPZizj*cmnJ_K&m_6E#9@~arx)w$VBhiy1FT7RL4WEP%QKV zEucEcS>y7U=d)yFZ5_Xu*Lg|@-V8P=nFB5ggKgf!OMCA5OUy5*kp`ZVpW6_MwNUU| z6AXp-eC&(#$_Y3SSKKJ9X(X@sd)JE3^*|@<9;h-v%nq-f6!JM6A0-Q>2=d6xu_MC6 zP9u^p_&gD`q`gtRXUjHs)>N=PDlDVW$XimtEtQt#7|va_W7(W!of(JrfaroSkDf|5k8AQgSuI(n5e9*lRW^< z;V)Cz=tLy(x6qjAarjX9G){V$?J8>O;PT>~oNX><{Mm39u;Bs&YOt@x-<2gm8<;Y_ zuEnQ@{-HJ_%M?=WnDd9jnrxw~t~MowSSbUo1UOBf~{JU1LK$ceiPxXd{3oDRc^>Mt4gLd7E4z@UY~| zvz{meD^?+IGB8Pkiz@w<&S(S9An}~u^sWo(&q7~xiMVzXK6m6G0DJYQc^0F{0I~icD6S z^9kO$b)X-JUsoONz+vLP*7vHM*qpAUyEP8e>YQPJIzu*q4;jxsm;{$KP6;qTL+)^u z5;>s=n1-7TTH_ke#Mb7#{Ib-D4x3gjK(Uc2Qmp?_4RfT38->^ z-}MM0-T3`5yg9fXy6KrntTg>`u<=!E`dBJ@`pH@NeSdagajW9~up-A@V=cNZH+XaX zd<#GMef+J< z5r}K&Ig{5@CC?Qnbv#~?O_9uHkahQy%#2IgzgUi#hFZn~s=q#0j9Bs0?*d>6TPCTq zf(6S`cr-W}A%zEUPw}0C%xHkG11+|g5k_lHMQC7@wnER%4_vNvjFOsG_Y#5IdSWoR zX>+n({RV9@5TMT^PP#}m`hm;~-;U3zduk4Z2nn2RT{etJ_Q$-#?I{lJec>g22MQ?i ziEVm>LdQsix^>x^Mq~=@sG?<0c(xy;c+ye(pe1Fz`@^l}o4k5}3|Pu|s@$z8PpSz~ zm|!i(8EG~dR*rjzFf)0DpJ`q5i%V68uyMLI*+~o07^6mNG79-~cZ7QD9jMK{0+0|A zj#dz8#JzMWNzFwuxjyNII<>wqWVbX)22FNcA_WZ|WE14?YNSy{D3I-+pZB=|^#PvZ z0+_1B3o=tc*?~vl2`4(@rq`MDZ4*&!@~?~R<+m?_yK-XHTy7?8aeWn#$f7cgh|#fL z0Vjgd2u(Of1VcXmLtX$};Z=e4=s>ouT*!%gWK(d|EEu}y0(f->dx!Z=l0wLEA;;fD zqB-TYC&`IYCF6&U)V&)!K^_Gv+^myIDoz-+pbFN5BzHfq09 zZ?&I*DN#?MdR-^|b~WOs>gWl8L3*{!c#bfmzjtXUVka2n4cafzVsj-OA);Ug#)RYk z9eF3>(Vr+IxJj%5BmY!pbc#gC@0(~dKVX6TCY#}jCOi}+9w6UW|2tP8PYCymXFnCPu}p9l zszx??VAfP_vU2%AD_?EQoRYrj`Nxp((7jc2DBUK3Ao#8b;mJ#EIvpmBXRvJ~H%P3B zGq0IE1~E>$Q~*dP)E{@T!~diQ9SMmxFLO(L?#PBe%b=6gS~qgAit!Y0niHj}*{b6V zbxOUYYCsOqmlYO2%3cEaf3`duB-olb_L5;yR`)>sA(rIa!>{vXP8?HfuDiA-O3eAG z^r$NaN71sen{EB3Y*VP7iZE5n`?CO{?mGQtLrZa-q@}ONkRgtRREW7O0;Ru)=~WO{ z80+))!=sZE_v|v14Et=R9B^*Er&q+|L$Wjwk_5oDI}8x_vEM$s9UQe_y%-FVDaJ&7Vf$Vikq-(?flCU(Qc6rxi^9roLYX?uwbMHoNX$ zXSFXCm98bB>?}3@ZZLe&-RDn%{fWKpoLpH?y6ebR)0p9pq;j4PPZt(UXRvTK%FAD) zpQowOKJMFFej2T|t;3lrzB}ulVgHi&`=_Y7DjsU-Rvekh%j2Tmr@T8qCw#pDdP70m zZFBkOlTQC@Ui|#OtV<5DDw5=j;UDg8)|jo&1|GIxqB<@Gut%65mX9e!S zGAS`sWvabrHBggS-r-7n<;j;P^^F37h?af`73fm$Uz0k;k+L-n<*55Oo9q(;6^Rbh zV9W*PTe9_Zh=nPG3! zhrjIXlDAJ9t^+Nk*#g9O&_N|f4RSSTNCKiysobB;C~AsNE)^!zZ($%}PYfh7!klcO zV`B~{>5702Q(dD6@?r~WT?f0@sw?Q2XDCI<4e4os(^Xk4+NfMX78_>e1%A;(k-B&L zDspgh^HB_%mOZnpYqs#&VT@rF&8y)rHkrOqEu4e=%U_dz^eLcih_Z2l}LXqtuU$jI?2MpZ*-uUmPa{Lv%Z7zJqTplT`eaaoMWgbeHSdi4MY z449~%b@&{bO4c?Be_j(}UpD?W(~@?8Ie9YXk3|b@Xrbnl&S3`ATO@SK3BQpzwVFSs za!$%u>>(zoRKHht?KItcV3c8rMFe-Tr_$Z#?%+;T>7zIbPr19jg5*+_ZbY$AjT zP)$5*m2a;*5DsX}g=81HSMU5V6R|G_QYj-->?FFT66hb8+00-$&6N(QIr(vcjFJM#jdj^MahllfAl4`d>P+t& zLJFeO9+`(Wg>6{7m0+iFadWI5LMdK)w1-%fF5xm4M2Bxs2+nH=#+7Hb^mvbpda~#_ zDQ3VDO7xXsh}^BoU)$)F5O5Om^(p()$cR%@S9>*5r-bUtVi>8%YR{a@p6Tg~n2((_ zowwCTLELp`2uDH|G3XGL{OtV zR?kYUwrkj6w+|v=kOjIA;+77b!K1k7QNAu)bbMPk#maySv|xyJ-HH>U3AjOtEJ8TL zyM-ze`pIDhf1T+et_XbdYCfqyzVwW~9C@OhuQ5)mLMCwrjJlCQRdxuPwR(su`|ANO zdc5PgsY-fypGsj_p*;2ww)NfZ>&g~Pcb9{= zVUwR|FuN0nXt{R5Red25tbuav*U91X_dEDwy3tCnvpZ`x^?Bo6R>dgiyz>0(z{2HKud~Oymn-+1tg#kv7}cSP zGb3|7paC{=*?*eYvRD9~NdBi)M5Ek4sD;e=&g zWDJH^BjLc2dSEe1+W`+1Q4_&gIKn6_r%ba!FPKdxgzz&Tfl^IF)`>1Va%N-Ez^?Og zRm?_&Pz@Ltj3}8e#ks}iw-sRS$~Gtk<*&k7cRLB~7>blyH@___n;8%>M3I?h0(;95 ztI7PLzUkm+*n-f@#~?9kjv}DbAhyW0aPhp0L3Uat7JS@Yd~x_{UF0P7;983{@uqs; zp6nn$=r!o6)M@{aVgqP8+Ox&^SyNHu!224IE$Uxj2_k7sS#sojS-JSMlCQCN4d~0^ zmMLe!ic}5uC$6NdKneQHOotS*jHG?Kz)#|wWhMu`W3;xW6f@J#QFLOEY-Jsa7GGd6 z9<`2msKn-e^}8HgvGeb02B6kQvZVBdae8+sA~F#yVKhwjjf#7le;In=V}0miplP#Y z?5iVV=1W&ro0f_eS12^(VoOdrcTzzFs6XF&t&s8JYSn&;BzoNi3SeXRM2!kNNM7WLZELBB zE5UDyl#>CNhG|~#+m_~}f^AZK)n zM!|1Oy_9^%vh`DM$jz`e8lW~L9ny1clMp)8MU2cGgN0*DbCFh0UVp}K8oZa}*ri(3 zTloz{JH7EYYOhFKc?HE9NRK$&3v4cx0BA)E0;>p@E^)RE@!I;^_=?A)QE0)AcUSGP zSa2wkUC`VRx=wfbkz?ZqXlEF8x{IHM;H&kb&*gLA8du`sGBdl4&jmS6#MuBx=I4|n zP@5rf5gQ>6U1%N)G!>)imedasezgQ8 zC~m0+EK!ldTFA<+-m#TYy9*N+AUq?0&f05(F>$uKX31%h1d z+&|*xP>moJqiiD56gIlunTb5vY>ud+J*UUFRi`t&h4Rq$Zj>#@Q%eU|9+sY&EbUSk9Z-gs0HXFjL-g)rnhOeVceYM9)+n5&lA&o_`UjO>U^~24+``vv1oo}lrCZu ztjBTn#dqie>ggk$PPJ6f)M3Hl1|($1wE{EF2^QCouQvQR1O#|Htku;6{LgHNL?$k39>Q+_TT zTW|G#?F(5vH+&uTSD2$-&>2W&i7F+SVTt(T0f58*fG)oCzWM(*@B5V~so9}r86lUK z0nFwuaiQHY33b0Z`or4p9^1udqy*Syp4I!8B=@DA(y)C9MlIZwFftY1O=~Bjf9#$o zBEdHyK!r0LIcy(1!tlP+2`@<{kI8Wi;=x-_MWkEOUj&cqu5el5q zs!RfU36dultnP8!bU?<4NK5%tr8)ual?sbm>`6Nk+)lyasFe+~J$>)NNIiiWiD08$ zajHwS*)ZB%;6%)EGFfAtaA(D}N4au><<1O?;X1#?!C9nGKTcA0WZs25i%JxnsC{!6 ztOVr@3{BX0RjeFBVoc5kCFfO6h0 zUDfsne2(s+prpbs`k)#wr%}6+1d9ldlEiGiO*kfh<&76S?;vh6AYskHGBPuI^K<#R zv~n8TF5N-1i-C}3WO#>Wwk1KGpxq2*Hv4*UhK{@R{sklJ^n{wNAVqt`c7lrT;5S*5 z^j=xR)O zkW;wb@W=ruQiyOAKomrAebnE_g9k znT1^fBw7vZL56*)*lBr14xHmD6HEAxAqLs^# z>o*gfO|S^dwPR`czmLyA^sPGNF^;O^tS05>fIE;xo0?xuA8~(NedN+^y&*BUYCE~A zB&aP;PRU*KBW$)hk(8WSA?e=6QAqd($}A52hniEN9l=jsrM<5qGkDmeKUU= zS9_n1I2zKz+UJ6^bvb3PEv1VBI^^|()l0g6&c)p%B<^I}e_dN~p35wTJQvVf1&%X> zzyu!IU!UQ2#a)=k*gauz)-dqVdqo{{ne{wz^4E=QRmE=kOJCjG>M-g?>sL3{GI zPPkJR&r{C0dLqjqoA1;ScP2U#>nK^FwK|`waT(zunmmU&{SWTZ1=g#^>plMzc9PZ2EC5abo_KSNEIHyWQ${ZkbB3pq5c=<<8 zA)r02w;L35@5@ZM9sg`stc@0m%sGe}4TVIv?7nSwsq2zv5+hfa8rg{mk-)3hA^BEWBOg;{cbkN@R&H!Gi zv~!syisAQTa7%CZ1;B&{kAU^SqA~bvQXm5(;7c)|&i8t}v$?i*W5@Kkv=E0XJ%#Zf z{$wX9@+S@;!r`#0g~luFiSV#G(|Q+>Am$$M|19Ob*mH{Hq9b6rpvd7H9VF#ixPAZr z$l@`Bx~;1%}7VfWWaXalx-TO=l70HBkSlvGYA@c z{kUi2_-m4VnGjjvjBA$0Sz*k!qaeCAT-g*hRd8$Z(LzW_W@yM`eFCM5v87d-wzMv5 zK+gj2@6RZoPXz<3S})1v`bEhG^6h(%GkTq>*Ju9JiD*)KgHX6arS7L%D!&n4VqnqY z5)wU|6%BEKmt1rIMN4N8x+YxxD>?xPL`?DC87c9Ix1)V?$pmAP{MewCdg{Apf7!caN+XgLJ#dI*9o_)Ngt~i4?BceQL8yqr%d>kkW7JlL^jp; zCEQY9eEZF!99Kw9`PvCuKJHh-DK1I}Oh7|&r^&Q4*x6ALL^HMnL+nvXHCPenW zGh1MHm8#jI8)`w4(8q7oRA1Zc&in3qMCb$YHp0%%a*0$^ReV`5P9>kBd~D{u{}%c+ z_`Z+za$N~{t1t81ZvI1Jw!;o~ucj~v;jU+IVdHf@9>RZ3Bf#9fgIpGcJfVfDG)p*n3d1OHTuf-{Yoe6U z>rH`-p_H7#ErFm}JjM}75bWuAZ47BKVR&<@KeY8ODJV1R?SN{6>_mxR>HXv>m$)kvbf=i7JQz>cNk_eqDCzwr8lD^z3m&a24L)i<_Gr9Q z=LWlz=FN!4hpm|jV%LG5l0Ix!1?t-=C7ohC_49Kph@Is)#L$Y`P_M_`wj5^2jB27C zg()@e2j^tdhWzy+lU_HTj`a4%w3sgB+R389LI3ZVieDL;hWE~TiTeNb0-SS4L0R_2 zVdtoXAL|RdV4UOg9Itn2{|WNL^xF*Wgtgq3`Bdj)-Vag#CNhB#RNk;Sb}=fTuVueV zdZRS4pg%RFzBChuWiqFBB}LsA%dtI^yk2dY{Zq)Kv@sQ1D{I*Vz-Lw9C(GO>O$!*} zZL>Jo%?#8gK7#A)u?Ym#clYo+CyN=r&gMhRnQ?9Wjxm-HKQB$uF-7{qX_elTl`Y|ISJ~UjX_iDm3G;U!nue$gjOH`> zCS>w1iDphKReQwWGU=i8$6y|Lk^Uhwz1COez6dQv@hfzp_0@1wF77Fg)P%@|2Esdt zr-gJxOE)%C%|wQp6wUB6(!u2W<*M~wT{|xxuo%_ey7L|=KM4{Fp!T#oe__S0DXF$s z6I`}MlJ66(jyYNlXU@ij9@FOUs_ht49g4?K#Hrd7rwe=At6VaWZr7&(K8q4+ARsSn znk9{t5+A7PF8OJM}$#zf>qvh z1LDE~{_mb1cKbfkbVgB^)X|bJs@R;aRPr5!jh|L<3#}3RFtdW;_|uXUVVroL`KDzM z=cjjSJxIPIgCOFcN~xT4*Xs+^WHyH zuv$FW!+#ph~%ulSli zRDeC%RGU#DrS^?H;&2-{HVq~^{#O9|Xx{#wXnyAisNO*UWT?bPM1ecMwe0-1gVKVT|^8Z|$yJ=XG4fiH7#M@%k9Kmg6cQXUB6s-UI-Ee(hfuMPJAtwZxJZ^@{qfdRyxB(^M788ixsCraST( zjM2Iu6cviygokzOBS`My(0swrlHTp-{$AcH58W>S&J2tAgG-$P7t<09=eX3$6XS)8 zqLN9dz{#YdEe^%{&KySby94L+tu=gH<_s3gVpVk-zF4m?Aob1&v1yB{_RRh7l=}X6^g6VzZ}eU_ z&c_S)=awMaS_8xP5;9%^oBq%C)&#pj^(NqK8-)LAgp8Y3gz1ak= zmo}NIKsCB_eI zsEPUYkmjO`mV|N#5oHOBducW?7z;J$>)6LCEaZa$!Ct+*9=g>Mj@^f<&dh`YS4lG7 zEQvq31NZ0#ilqvtezvgrYIj;m`$g3mq<+n(z zU5ck%D%;0MWb>uKLdgrvrZ3KkNcL4Vi1v!UV!;Ro?q^5fpdovZqK1Eo%sZnGX>L%Q z)sZ*N_}FM0(dS>)m&+<+gY|ZQiP^(f3`mhL;d}>%Krg}{*0b(e*;>tm_YQD8kId$a zm*7tvOQtY~gQhZDVEgZqmSW&-j3FN#+lGOOb(wR;A=;{TRCvuhlv`t@?PUW?nSn`{ zW)})HtJ97qmm-BoUa{eHS73Re#2ntaSY#uP(mQ?doq@w`^P(drVUs@q;yepu5LMye zc^CR{-b|*~5(5P?*_x-S%O6x#NsiO{%fBxE4f+X$;qi6n_`{l45SCzVhBx_&oNa&F z7^F;tus2t#X$GRK)DkacDb)eo*JckznduS}y>v;YBPPPPp&gl3@V$`kS0moYz@yl0STPvuiGu1N>YM?J3~3qKg$apsbMg57WG|G1sAPmVAl z*&41(^`EC3&B5kRb)_oX>O{ z>Tf8EDTPauo`BN;6rsd5`5^&DGvMQxtz5*!&FttzQ8(51#ZP=3tQgqLxKm|NzgrqO4-X1cTHt-`UaV#Z{))mf z@eg$_^e_GCL%ykgU~VL{71d_lARLC=M`7J1qnY=J*eCBk!&T8Gl06)_nr=uz_q47~9!+}!%dW6BQ(pJ`RnNI^f3MTG4+Hi{;e@h z{r8O)L!Q6(#n+AbH`4szhBY#WpYTbYZ+ECzXP%S0|6Z6r$?rz~=-_KF5%&W6>z1`E z?eG+ODX6jqGzjt4=P#F!kApk^vGqb*8u0DFwtM!L(r;ZMete$3(z;D_u20v~Paqa~ zC|b=PkHetK-aNWNHJkm?bi_vq1FA(~S4~O&i0*Ew%L&M~-ob!%MXtf6cK=dNOG_v@ zOS1G7egmC-W?;%BxY_k@7cT$k=}ns*J@>lCtRyHfO%_|GPxaV7#3udy{<^n^CUXW3 zWd;o@)%xi!^Tt6x+TSbt)8R|qcC6)ly+@eA3p@O08?X1=N#q#KE*6O;SNMybAtnvP zplCeCWS?ZJx(D*79G*jGudv&YbjW?v0Qk*l7=d;T)CLhlU^Wit;bo<6w}?ws=f4NY zu;0c~c*Oq@0G|5WZ5J)mlS4meEQ+~67zEu&Vd#LBy2kaR^%AVm`gDDCU8rLW8>CTz zf&DS0P2>?1%L#|-#baahQMnTNNy-WkOX=IrS~e|FMofufaL)u@u)G)f0zQDGrvX8wF790`atJ%C9W&uwA4 zA+atQkder7LZOV$qAn2zY9M0&F5w6xB9;ZjckOZj z*pfXd40rHlSiP%Zvi*7sS-X9kdDtpY`-8xBpw0@BNTVQ^P7R&YM!>c792IK2bzJ)A zG5eVuG=iMJ6aE|q;`Rd*YQUm9HI;Cz7zA)rkDhZ$T(q}$Le#d*XV2(yPg_!i>njH& zd|_!o8rR20C3dxczMZB?sE)*NkIsGb4LZsp4*{x+!*O<_bKyn%Z8U&_>=m*@9oNx- z=C_WkA?X+`OxiW^>uLGnJyxI0FPre5Ay5*GIddJJSAPsuzHh-ob-Z61=X}xHE?tc;4NN!aCdibZYi6p#iVO1cq_1 z1jDn}Hj8)^!`EHvyjfr0zMd7VWi`6m1yacW66Vtok-#^H`1-*X*D0ZR#H99&B%e1l zX~`}8mpx$OiVO*E`f|UH6yfKaX#2==ng0ByXq(3r#bwrhj~Hu}3hRw`sP{qS&(`Z7 zisI0G;-VdFKw?+6LYEdavkLb>bct<^HVqA%gjP872)!#2HV-{MeY`eQ`s7eyix?jZd?M)M@U!--B+7<0 zPB&j&(4`T22Qw0flhb^OYU_hm407t@cAlWk-z8wMNalW0DwLO&IC+K1D> z*pOiF;*;$1WQVe7J62EWZI1fNvGJm4w|S=5O_}QZum!>F%U2~O4gE2n;*tfp*q*2{ zhqi?B`%Q)HZIe1Z3WafphH!RDl*m^Q3A)mdKIf!w49pKK3JZ@M zrIYJlHulDIKucEb?bz9gkCl9S`_>5H=f~SyVYU*N-0lilE~EM(JQM^lXB-(2e)Fu) zk?ntL2PamNPQbuoFb!mNtQltHu15A3 z_?dN3z!rGp)OI%?%29h@(@uxHA=OvYivy0j4!B*ti&BFO7PU&j4Aj7x8@?Sx=`Nf0BLlUgrx zNn@NnVwr$gqizR!X5anRs|PGSv{hB={D=YbpNYo>KU#ORlv`#Cb`v!2L#1qBoJs@x zg-f2PAkO{dt}iNu&XxiyB`5cJgJ?)LX4YUy3q7V8^-YOj@0+DFJ;U&Xg-_DILJ`Fr zJ42OzibEdL_iS6Ky6qBZ<2o>LJM-ioA2*z}DZO311SC*ZggEE{Wn=qQbOty@a;yh^ z^}gHEk@3CcF5KZef{qOzquE~_RN2-2D-+qinrDR2UA@z^)?t?FFODk4fh#|xvqFlJ zK|?vprplVB|Ju^m_w@}tjF(APELxe3Sp6yc(f0CRFMyZBpJfuwfgTsfOEevPWNv#0 zd+gKvPb>!FFG(~S)`#jmTr*p5!tFkDR(yBS6KZGuQC#tA?>Z&_ALm*8hFf&)-NZY( zkW8dD;}!$cf6*afdMdcxYmuC8Wc`lArdOPb3{x33cvXf zI|URa23`61AE*)moe5`%3`c_8`bT*0f8!!XGR91c8Ck>c_e@BG~YGg4hWL_Xk%bA{GjMG+T{g}kQ%9E z2ZD0lcu3joRS!*-6X_zBP-)$8nAt@ITIs-spU^rsmCAW=USa6bE|6`7Z$D)Ca)lye z$63mv%O^x1b&-B8(a1I%EffV3Ohh5co0C|&2X%!7$Fh3U(dis1+~VA7W&~3dyg%_q z-y9dWe-Rr@ef8Ti(;VEF96u5XCw+818*5HHIN5t4&-L6FB7W#nf0#qY^Bz|``74&) z>>`uSEZlx%H=5mqOTXV2J`Z;7DHM+J)O43Fdgo#29-IIPs2t4IByN5()l__WJy4%A zsd98xKoQ3=5^ZD-JpF!{Oa38*bWdRIhG@f245&KJ*jWKid&B2kB?C>rW z5odjZs|M|gc#_v(izwKO&SXC$i}ar+bmiOkB3hqJh0@|Yb|LTe`3q!Q-ohoiK=jVO zU+kGO`#qG{#*lQ*L=|l&c7A(N=k?B3dl|0!vb9)q=3LMQT&CShkGzzeXf;i*Z z96Z|(LH*NzD4l2#O*!`O7f;d_OZFeC{!EYe;?=JW_Lowwkp~&;4>6{>|5V78KVP2> zka?|UIxPpojM*?bt|{DO!Z5cIMzoGaqt=p0r(>KMAf^QfprB^vrBVeY z4PQW@lD}BtY?E^uO?aLcz8bffZ@x`qZo`^UP)C~WB;!FC>ldq`Egl1wi^sZLg5mD8 z@^)htkKfQ_JDnJSiaC2MYhI$QM@-0uOjZWg@^dVnd4dzFXUXNlWzp);2vP=wlygU@ zCSst;u!LcG(ajW5B#|+{n*kS(nVM(!8G_%+9CGMhVsX&LfCVLh#esb;SuR@=H6bXZ zMpxd`L|X^RSrb1Ta{RXhc-PFy1g^`YfR<-UGSB&{VaM-aCba-5IOzF|H`gpu?Y1HX z7GCgc-009cEzI6C-(_}#W{y3>2rV@#1YIUnr-eXOY&tVi54IKUB9lCr^{#<{6GH*U zec>Ie6AC_001cg@C$MCX_Uv-|+3o_((`H zm7X66q-_|{NTA{;KYx07PL#~9F3=^--JmZcis&sra(*O7b4t;If$(OXYD3t_EY+QR zDcs8F@(dt~ukAl#jLA4G%DSnog7gGgx^C-9EWLBQRY$BUwgij;5yp^aFevDqvA4PL zNeCUKDr@7h9(;v$(jtw#w$?z;58s3#(qbwV3c#Kef|^r;u6+k$rA{f0MLCrTTx9jD%5DYdmY%QyPtpedlc(H8q5Xz;Lq*t)6!U+*F@Qz;R4(`5@DFWow z%$BrPG-cq)T~j)9K(v4q416~mbyi^MaKTmb6xHZPx>*M=nvuw?NDG<9xtn3`Fzd8A zstt7~4@`RP(Q|>go1p{^7RfPSlfF*^gK3&ClgABdu~&{-1R*k+uB+aBUsx~(8gMfK)l`N_`mf=00!Tb?biQ$62omQ^+KC;3uo(I4~GW_0}H^;^ss z=nq7=j$U~(H!X~pO6wGSXr?lD*&5eZAJh*YDbHR9sdZ1PKz-lN)+0%~;tVTM&d4a~)r+GUd!D&q@=fBW~g%p8+XYkKOSCTCWUaaySUor&D+Rc z96m~EIyW${9-Z=P;ZycYKp=fpjFG7rfnLSu`CY8&Vd8!e(yjiy9MI3oCDE79RYIQx zP+xYWp9!UOAHgE}|JRfJ3jTkJ8({3jG?+Fl%94&vQ!qD5dC4}M|4Dc|N?(4CAiIxB z{Wm}GLdR(trexjh&RF-Ub-lynd^+HNAqrxr~r@DA{3v=9sUf6 zeD(jzkF_e!`xBXO47J)cuWP6n$x0RocAJO+howe%Gb&tHUpeVHO(Vh&(bT+Hq#f>n z1A#!u)4Vb))>;jT!~R-xiL%MtPHc;o~qRDSy+6=Efdg$6lCxWYy_ z@W#w?H-Fnp7`lg@{cI0(v(7tM;?&;TT^DFCnyby8(D2~x=Rf2Ab(#m|-SJNV-cXEp z@f8}G-zrna#>6RD|En#3rDBb6J^&HSRr77oUjwv$laB~#u@~gT(AZJ~QFG21>(j6O zgTPWBWCt!JPoR-D+r1z!g+1h_HpftE61 z*^t^8Glu(d5&kxp`Q}$iE*6o-(E_QIS$Tw7lm1zScA7YX%?jsEjqM(v6T{;?W9m^6 z19%CO7Ycaw=ygA3CZU-_ylBH?9(MzgNrp{aRxO(jmptY3c@MI+sp;8HtQu(NQQwS? z@exFAYW9*Y1NHYuqdXobeTYimqBGlYRO#22LknDT`vZY$xTb)^ag{jRt)NV)M;aSl z!!@c&x-4!xbQzW<%UWmr|yFoyz(xI5=*;!XEmXy0#H!Yibcs3IbhU=ewaynM|RC4sl3pe!o+3 zH1J90(Kv1h!Ny|$D#o(iPPM!Vb8j2o0PxGNMnn3~Hyb4?5!O7iI0nX{7C8V3F(u z;iF1rS^s8e0-2q*Nw;4xst2C>b15n41TtSIc%JS9A|;7P^LJsjBBu6}%U3#|N=yA1 zd4U$Y@%KN|Dt@b_a^^qp-st#T*j`iW9KgM%Mqe5@y*`t-q63!@puDsw3(%MmNue`0 zpWI{QKPB_(RxIlZEB`rzAnY)z0R8Uz^D9w~bUu*#>&^bk^r{!TbtNxTkSMxv^SgYt z;&uN%y)Tdw%+-H_ntHRciVwk~GrVO+Hs|bX`h)o~-R@lrB|vTFS8pQ(j#m zT@uG!5yv1sK{bot}x-W)0*z@%S+3>46o}sGn>DJf2xMzI-=d92(DK zFIA1B1^>r=G^qct)=q>!C!<-;nNcx)60Ug|gJfg6PPT7)@i3WGnCm-nNQnMq)C|eD zJ{adTl3*LKLc*2kqcm*1oX)j{5}g6dWUpgnL8%RwgGV)1>wS2?kmw1cZWh!z(Sdy@ zaX9#y^2t~LeYl0)8$LLbdq%{p*7Xmc_4~f>MM>&kr+fB!tIfh_Kp{t2y695&z)`?~ zBk%$)`l@h&Jnh~z2k9_NK!dZ5|HzAMMeu#Jufgf2GtQ~d-Zg6gf)~fSY9%8CX`Lif z(Z&h84xGK@m;q*XPGhf-PL94mvhFBc4KE`3j|Aip9dn!&g(aU8(y;YsS86E-w@U5otrIBpy_mo zOSSmW{@xm@4|IJspMi*eapKRbIjep@9@s2s1VhodXz?okBTTXgIwmCPVLfejyMoITE>XxP-FmJ(*kFo-LyYIQbLRZ(UD^h=Cw|t$E{;AKTE1G z>;lWvl@>xe^TYgSH(4nfgchg-%xaCB%7w3!A7Q}i7pPp13|gUjG@cC?If%r6N zCt7n|4n9yoeKJ(VTkyT}o)8jIz^vGY2L_d2qSg)Lq-J*9-M4bXJ@gL5%$aa?lfQ@_ zWuBJ$9_X3bR6MPYD2);_5BuP+r?piAL8rvsgAG=j<5-!NnzrQs#04|6FiK(gD}VBk zD}RZM$!@YcEntJ?{id)$$w)ThBfGnTXrR@>-%?Vk?g>drv`*jD&-IreKN*I1o`=|J zX9{-_bsVbW{s+2xl*{Al6kP#G<9np*sw8XL_-C{6rkptm08N&P$?c*vwU09aSgiXg zw!?VWhSJ|BhAxp{2-WwBd5A1QV!aR@4n zGhgt6=$?8A%~}S4_r$g@yyPjj)boeebqqM{qJu|=frcOC3+u`l)sDAYcGm9dePRUe_SU7p}9% zfW)Akcjv&I3qbVPm(Epm?xQ`MGz}L(rT3-AYOF7!$1~Ile`TXjJ$SY`x>Z#$3AR*x zNo0W@UY_p(>p7gpEkp5{(O%cj+QdAa`fdS2Smxbk+R zMO#r2QmOV@atu^|+CR49@S;lIkOa@hDdLIJ&(dW~Z6j6#C%B4zdwLoU_b&UiWu&I# zFsLz~v*PCw%;-KxEREh&nIT4&?5AEeJjF3x37CwJ2Pn-`$vTuoA5&xtT)GPo4+ z@0lcmPAorFP-91T(!$demi=H*F)seL#s#9!Rky(r4vvSag;C`8J3@ujPf$ykS>7UK zl3om-SXaOJ1)ne2UyeF~>u9(gNWtE= zGk@q7q_B;+L^XAY>o@T9qB=w*B-R0lZuDtCnllWS>7@^;oHIV#%n3ZKqRXO@55bW` zuMP`H8u4dQe96SjU7n#F@Og^y%~T=$v=t;z(Vc(V(UB0}Fs2Z6yqVdA5Ey%Sk)gBD zV8I2T>;*QEL~FE7v4};3)|yBQ=bL{VQw;Xt$%ZAjaIhLDquLyB^aSsPJVWOn>vM|l z)vG0JhdDHq6D0-{^i|TFbV^>5m152&nK7G)JpZj%MsaZZghg;+Y{CrqgCU}2!jqDN z@2Pp%QVc0PL2ZC($V)0#DaO}~m8FN>hV+9AGWZQmOJiJ;&V~avTEeE~oxnkZ&t#2d zavU+=QilDy&7Xq4T(cw1ySr33IJ_x%$`xG}ZNf&|iWD=_9@}2MDnp74TfHA-IMU=i zZwMF^_y{F&N#-(v=@in{RfJ;5+4jPuM521?fW+N=j2^GI!fgq^_ZsH$nfDd4;}#ce zp6*sFlK-#Xs00}r(J`f!+6H7*;|Bs6(#~y27FOsFG|GnF{GszuK$B%sZ4^;qqpyEP)s9eBb^yO+|Z7y8v5g5HKL{5?9 zYCbXavKzWpG4Bh>s0RhE)J2u=P^2l0F3{|7N{sGL&&q!#ick>QXux!y?s#NKfzwB(VZJYr8_oB-+RGsfw)cknhfAwj9* z6|3g-Ef^pVk^t61_aem3?fd}~5p}uC7YQVFHO+Y$pgGH?Pu>yeS*q?E5~~{tesqLt zxCF2nFm=r>Q1D`s1^N06eIr+Rv#^KCJK}e^U3#={6&&tF3r5t>f>8u$Q@1}dx-EIx zv~&cg(d0@7+B#XtD%tB{Rs&kpx5D$^U6)s&aPVg3gy(adt3PlH)pMh=5itA}y*opE z7i3azl~9swtT~$O(ceAQcR8wr^=O1%uKWFTZ4lwxrMcH=sv&8amu*sfvzXvrKj*!^ z6EX+ylkW3|BQJz6UPTrdx7#gSPjzs?X8(W}a>xcl)@J&%Q;8u_6~KaTu7K1TQGsZH zPMVLSP!Y)*&qU+4FW?Lo2M{P_v_VcFf(B}Yf!)kolw-D>3PRZ^fx0`mw7s;O9H*sA zVUssCCu_C{el4xPlr-_uDpBBx*aU55midrTSQukCxX)O`ONtnK*O@F3q${tIS(*$? zO#lNeF@W{-6=AiIDkPM`C!mVYab1GzBZbSS4j6&=D03uDL}iu!9P{4_^yz#;MZA%Hvtli9P2{elb^rJN1Vel7p67w_J? zrPE_wD&Zy4Y_>(Ehb`=a`6Qsh`RT->H96bI2}drDYDMF2!}*?j)4zo*L3{e;X7lqO z$v-E0ptr9PiTQdTB7pxqed_8WmWUt*QND9@Y;DDdqk~8lTk^X7bZp_$Te7e;)O&r1 z>_;2WqGEQdEPY46 z{k}%Gta09XARo}N+t6^8-Q>yM=g9sqpG`X4A#8=%V#B{p9$4Wu_~*IvKl3?XDx+8d z|I=(C?r_bx$#>-sg%#EF`CObstIk+-%EHa2E5(ZCzSVohhtOIiynt4f(pVSSz82mD~JRW^q0_%K%b)y$SKYzcs{paVtv@dqDfjZ zwAh-tS(lk#MoGnSr9EN1M$O`$>AAku1;Pz=r2v{M_Jp{sZb4I|%u+;rW(Nn)XolD+S3H|%&4^| zoE{6&b#<*IkaP*kWl$>y&_eW;+MIY$7?2cnKk@wP?+=aAJ%LSnlm#eS@#i{G`Ch|8VpF9$ja*;b4UNrrkP z>v#O@Anc{1Y678k6b=LY^8CcwYk}S2j+Mi|ER$69uZ=5eT52y>67}}?Qs*wVdH4E2 zr=?w{SoZuA;=w|i`RLRuNSXg9d9gs9VLGrAoQ>E-{$}Z%pm!H|k99Z=H!RS!K>d3o zb$|7|;tHK!NB!?1&Ahe4S%)7+09x%$QVe)SIkdCeH3N!Uf-JZH^Fn-``85d!4Cl6Y z40#ROk>Yh7nbGxpYFl(}D^oFJWRAZ6F|zf)tGz{_+xo^D^*u+~G&_WG9fFc$j`m>>wu6dYI7<8T{#a0PEZT*p*{^w^ zUQ8GN1ohV+2UGVSW;k~8a+p>+_1OGwb@T^8LycLUuG`r4OxWX|8udwGZIO_vl7Y24 zi9z8!N>`14u_y{T<+mWJY}PONd#HvUHDT(MT#K+6ascBu_-4E^7{D6vZGeiZ{dS_n zCCs8jS?yQ-r`~m4uE%AMPT=;>=SkuP-%vGU4O#l?PGJ|bmgk#$e-&SfL4rsW7K(9 ze|`>E20f(-2Sxe0(h*OVu+=S?%XBxB=kk{e&$aRG?FTq9zUsGX87sATyS3%YD4zkn zCq7&eKop9oA?avKXh^0E_Ok#4u0X$SjQ30&ZoNDdC6oVFE;FjB>>WJI)%Cl%ImvzX zqD6iKu(2F{NfPoZfbn*DwBfK-Mk(TjbyWzy#ciN8<)R%zI#M73X&?RB=svBI^v}ej ziFslFci2Yizt*2YTbj#mRRe;h3zm>xlyv?ZDy_(mQ`(D2EtnFaJ=92B+M-!zt~NJD z(T~`^FlLRod)f=sMg4xLps93o8__Z>XlBNYatWAz3O3{wWR)pOGLXmOGg3H$N8U0)gEOtrV0{rolW=l{2;(4%e0?Y$+ayVHS^MMfmWN z#FLjG$IWFU1{$F(BXw54R7T6K4t-?W=JV+gHIZYu*#kJ^YZiYtVqFGgpdW;Xq&1T% z$8;=*6(xJH*O4{0dhjg^A1CEN@gN6O`ChQHESB%OuwU*ZWA;O)nc0h01%(zp)plKV*3NqYBhKdyV2abVd3g~iMEAOMzedzgbUeECrMU%luCD=JSebcVv=~|I=0AJ&%@!Ls zFkhq!;DqC5_THDbeJlPp{32U`NsdtgU8s+eH64LZH>+05%HZ`#`gmsvtxzZ8$2#X} zOe3AXQkR?alOX`jIpc&$J^>?*4i}n@qyHOC#vjuSkDqG;ANx&%}g|sswkt%0U6G=*CPX; z-^81`#_$>u)J-XO4v*oV#b={sykH;(ukid++bba9(&=J(lPPliB+LRN;x%{~Y;@b) zK_Q%f9o~9l`6U7t#wPMc2(|AHo$6I8(o-^m!-UI3k_hcRpf!?Yl#{Wj5eDv|9w-_S zwrqD%uJa#lle*{%jSeI-my+x~gpaqMF<)M16J=}AjK;omJ&+W;lEn1rZ~5i_HTF7o zEmm;hM@R!drTURb`Di*>?3#(@KE^GQmGQVnqSc(~n38p%&W78O1C8hl46M z{i}aU!$CmKp4gR1K5AseC!^S8FsdyqxEi6tXJw@8!F%6)GB!fiR zz7sTeaK%&*1{N_Psj`PLBxcJ5MspGIhh`oP=c_PSzyHYl zsBjC9lKk^70}b*bByG2tbb&7an@T2qdd3r_P8TlXZt^0J%+unap23lVPSc0p{!%T8 zhI>~rL}~rjkC(j7Sb{(c5>B&9-dfD@2ZnCxGwef?i2QllbCAZMDsc3Xb~k^<{E*D# zvLe#wh(lxnka}{RUmr@g&A*Dx<80cwGXU*DVl*J*?Sdr4iLyBeC)SNzR6Lb}gdJhc zNK$-0w`l$-%=4sgbx^cm2MJHUmuH2J4k}m05eZc0cAO*VrV7FH4v73B4jJ?{u1hD4 zH8YDT#wv)Fp&_*+xG{$hUZgi^8h1M|RG%ejHm0l}nEo{f&h2^D$sYU9SOFn~10rY# zB&3_p+w9k27jYE?T=!~W@1Adv1*>FHP$5mGhTSVO-)b( z;c+4o?ls~WsUwE%W1>g6h-H%wgPyz|rjgkpg`lXiw!C9{MjDq!^@%n{)Xb0eQlt<{ zA8dGyqjo+Kb|+qx7HFKJ>s!1}MvjQ>*@X6mCfpFU$;9B%B1~g7vDFfgRmVmq<@M06 zMa8^Dy9ks41NAERni(FDOyH%qDJ07~hP6*Cq%)*H{DtR&SCo!mH)*U<`;Qs25F54V zD;5uttw_ZHOSb5T)!?e>Sd*Y|OOknx@&lkRY~;RfN{j4>|5zYN+qP}n?6U1H+qP|MYj)tDYAhFX0AG^2qR3BEwUt%7_9?UEwB+5NwyDVG;MwLz2(w;5 zFgQysn!wtg%Q-8LOwxincjz4-hxSdoFC>Lgzz}!OKOfH8ga@2<4ImdeN>Ue_#gLnI zh(^OU6R6LDhL_rB2K8%+t*X7Z2-+}Y%GRX~6cNA?+_o7}sYe>tci^%tXM}E0`I=aoFfLk-b`m zYL_C+nzrjEwVXyjqP%bWz^A{K;mHBsgJ1yfeyshi`*VN(7^mhyx9&$yyb%TlluMIZ zIX1Ph#GI4zMRp_>l%z+;o96;1VTY~{8-(}F>wVI{ExXh7xVPudIiZ)MD`MGBZ09<^ zl;2A%DtB*Q?k7JmfHRX;c`~A=*Tdf4kpt_A8)StI)3GyUTQ+eq_SxS*UB1I$CjHRv zk;+)TjV~9=rG(fB138Ag#54t#f~D7Wx-H6O=NdZmOD~IBu^X}@Do*WGF6XhBwX_jZ zoJB?uIf`ZHI*)Pt*b-6rO9R&Zf8WB$6aRS&x03_!K8GL8rHFgbiJqsjbrT>O8~sEZa-Vj3X=3V5 zZyUfZK)OrUfGJKUbP&53EAV{^bEePpA4V)jahzLw^N^K@3zu7UT*R;b(Zv^9JcW-h zDeblhS_fq)mBu84Xpl2wvD(XaUfwFMA>vu&^A`sWPrYIJ7+tnr zEl|WugM0DQZJz+3yqW-q%gBk73j|6rxT*aH0wuOMMbCU~0<{9oas-4L$6Euk($=81 z-vRtM%ldE|sw{LeM`K^PV&Nbh;B~geE7w24Y9PbYGw8X{2a6Bk?> z9d3)X8>sFb!=S0b-!X=J%r8b8uWPmWaI;X`q8i z!a^E*h*BU}^cEMDgTHsh=`TOAY*`}gLPfyd$BKkU{opJ+d_@h-`BrfC+c2y-z$`Je z?o7v&7#=^OyO6IG|5aQ$XhChq4ELcSrxes0=tTrU1kf-DCdBp|W+!U9CIu`5mNlS7 zrZs8RpJx7t8L8<$WJ;i3A29ssy?-5D3x3w{OLPyMvkI5FXWciRZ00?etf^`{tw4jy zF9|{N03LgtUG+{vtn1>!6q%abC=G+jqq?ahXuzZn^5GZ(JoxBY6xIJDi*6UpHWP}| zJk45mr7qan?kC++#%=`J5m?UHD^(LwkuBL^HgTj4x{P=Rcgc3*D6$cOon#qLNMHc@l+=NH|%y$U~n!*B>yTb?vhvcMvxtk$xtwkQg>fe2c9W`=fM5v}JWiHvmKS@{VE8*Fyi+w1L zm_AGwKHZ$F5)*l@({43o@>MZ`983RHrebElQE!e#q|M+Lh$N)8j!OC@RqmI%9xQn| z(_T{d56QY8WEGbOxU{L9Y`Hb|B8^(dC08gJ{+L8K3tB!J?~^VZGTQ<$To%kvjFY1D zXVo=A4b3*mBHD}~Y8%jl=o|iCaVLIEp{v^2{FPb`-#a<*g#8%%9_T@T!Prw7c`;5z ziwNkihD&s4qj9q0otujf1VMvMygC?M1EjbjW=K$_CJ+X3iJwJtSv!;8U8k^$K`7Ab zRpVpMq_wg;y`Sd?6MR>r6Q_6ftwkfPBWfozL*2TGE-S9=7|&daSc^Q2Mu}-h#*7}b zIk+)J&W}~%@IOFPu!;}4v^|~EbUt2lf*KKCJ5-_*X8P!*x zYYcZ_B!OKv;aJ{T1>QjFCAkc&&EcDV`(xm z7yiO}pOQ}N%TAiys!>>iiYnjGz`&H9p@e`h&s*rdV<+Me{$25aW3;m6+?^!iw&s}B zsDW=Pks%~Rg6~D=z-tDybWkU(O3%*+iBJ_wzmfGjQ7U{}aG8Th4J!o-S|;c|#$|AO z4U}BTcz<<_#Tw4ORGg98XN1;y&2|TDY$jvNyjaH}me3Iv@^A5%sw+DEw{9`2VK@X$ zhKe2lyG@pbps@$$L=n-%OB2HJmBbtjc*g*c1RO6F<+Xe_Gu)w`;2oLNB&tMD9PMSx z1D;BZ7aAptTbKzFnTkpwwxE{ZMb4#Nb7~!#U1J zU!=iuI3NHb&bGe`3M@Uk4rd2lLyD*lDq$2w%ksQBK!L@iNR2Zm$6;~9C=Q8QN)9q| z1ami1w|b~q7|Km!e+cx%0_mJgE+@fCYLR<;fOPB=#j1z8v?TShx!OP5-bqJvb8UG| zUg{I_>2QGwrHJL}mAjND^i5YM3MFS(!!(x%NpEd#%-VBw9bF}4fhvo7#2Srr2G1>q zH&9cL3QZC3Jvaqp-dgBUhtz8j(x=gQ%EfDNX*&4Sm141hO%Ny@YI_!FD<1g+uO9JD zg&I=`#cOtp2!umlRqPmuq}hbO$vPW^ugQpukRN}s@-cmgRgtN*>RV{*n*fgPd@xOe z#RIs=8*l?$xjtD*00pQ~A241$7lIiJJq0&)gYZ!$zQ`oh33sS*0%(g{PGp_w z_UO^KuZK<=sINOz=$j1_ue3~fZ>(!-%b4DlYb4LCH)60O)^PmHIFQRvoQL{Dkz^p& zyivkRSn%}d^z`zV^r|CZf~<(+vEGu*8PE!Us6ilY*_IGor8SQ(S;iAk;0Z%0E^|#Oh;AJ{{%*BC zDzZGOhP#xFpzS53luK%Sp)Y74gRm}aEBb{?r5&wS{%ja-(uNMp z3T^m$I#94joOx0dy*}&TC*APUoc|Wu@nbn;&%db7VgqRo42PvO6d`#Fs`DeOBWAY8 z3skVL;)d0+TsJVfM}g*-h1z>(j<i!;7=VAZ9>)6V6e(n#8GNd+J zh!2vyc~9Gi2j(xB&O2Y1?=mg#TN`U4l$G`%P3=Dl!_JOV5-eV+fHvPGlkGKTas_=F zRHm!0`3Ic2e24{K&^-wM(E?%%Zfr+uR7FlY(yx`~lVi_thH!vvjDA7M(mB}MkCgHD zV*5(DKyg*PdKw~(Cwc-BF?qtTf_cdpW#VD{m6IZP)YwFb zR5^`FF@in$SZIz(DZ1VcuH2wAQY5EKl{_3iU+=T@aDSZiXm%x9{ZEZ^w7 zr;UxTdb$^Mv$vMI$~u`K|0%o3dYsWEnqsKqS7pl3AO(MQQK>@c8mT(lYwL_hQE5m zs;b5@w>8U=h^M^xgKANe|0A?gf$GYdSNl6m-Usx_LPsxrE-zV#qGb3eJfJFsa6wt+ z7oZ}j6<9Q?;gT#;=>#g+L?-=;!kF!xmKhmrH3TaL8LNtJfkdkew~e|S8zOwV^-r^% zI>7QH$wt2}`#Ni0ux1)V6fiEnC$sHU+iCd*1A2<5hXfszFS+)N{=5J&=KfW79)u8s zvcaheZDG-Q3GBKk4{?31GGH!tr7@R3u)jApyqa8oOF|YpY|aZ`TA6s4AB5ZsHY$`! zygHNNBX^6M4YF-z9K*O1j%e8gtpV{92JH^U9&O9EishSzyJHyk&~Ajg0B{43I?6P~ zl2O4ZvjQMWIkx*6KY$)59z&{8l1Lm_oi2;SX=0U%d@t5yF)c#&uEb2N%3_SO$5|!b-WY={^Wl_YD0+?q0`O3?ro{ zrvu#3B}xf99>D>ycy%u#NF!F{jH|hg)hT);9E1Fp$-(_c-Kz%JbXB3jLISrD~p(n(O+NYUQ36^-m((H72p&fd*~1I|-Mi^va^yar0_Ri!3x zum@?1bYLCcQ_1h0?=A(^fszA+GKyNLQFj#Op!Pzo7}vR1Rtr%e6V7;^d4#4El-C~HgsW);a{+>&6!$o&jJ zc^8}tDgR61INgL+p67fBopiQY`&IaB*mD=B%UNnkYvPoY%T7*JG z)xVb-k>ho(G-oeM0%)}^1)koFi7aYyZ9Q#qoSx7oyTE)`ys<%**4Dg<@{A}np`f6Y zWurIr>|!l{Tr{aD279<37q4pVsi;(r*)8zcBxq9)g!zjhMrSNuCbE9d2M*RKO3H0e z3Pc_n9(NP>EFlp4C}tdKR#SQZ)aUbk6fpZ4RKVXp7Tv~15h|0HE zG#I}o;yEA&m-Pi{lc{VU11qD2c#S0&3AUqxv^-e(B3ozKZLtm}0D$xccd+nOP@zn0 zL^7|>r!(lK_I0#x_qy3wa;NLu?ESi)Sja^?+kL-0Jr`-$%oPiQiL^}a)_CrriY4tf z6QLbfqf6?~XWFjRAb$K*(cPRzJ92zy_WVlPQgiVA9vNyBsZUe@*Y~-Kxb0L+TDw@N zR5N3fpgvF^M@nR8bayHX%9>~$K~EZ@lsOP!?o z$clt9t9(24+r+gD0G%AKL?K4snaVl7c`poU+c+pFF8Y9s<~XM(o%n=U?~rOOj%tx7 zksan!`^p0>GdaO!#7-Kb1;xU4xe_AgaqILJQONc@HC#;4cf z7Z3(#uJgj@I;tn4NCP>3^$~OqjRF9Tp_qLv{|KG>w;0S#GL}JX4#>jGv$)#4X_o*$ z!g_Ns$<!S=3Gb9M3$OSOVvQE-tELdu25Bq zXeye_OB<+_?Qh#YD(2c;Aug>AKvMAg9c9b5s`gYbs`ox*V^60DJ33^6|mO4s- zFPb^(`pNCi7{T?O+o1m8@)U_|5yi#5M)dm~otd)2`bLN!D|g&JY*pmehi&!InV|a8Lk67ZZua6oy@d?l9pDX29 zyeEsN3LNJ>f+y@E`9QE-=Xs%hASu-TjXq-t-(ef{hs81Jk_=2jY%~j*&{4v;E~fJV#?7K+ zUCI2wcv|SDvq&M=!1Zz3@uZ0IJcAD|tjOZ7zlE zAIZ9^&_(H$T*oP-I%Q{=`FL*(&X0KT_%f4odMe_8-uL-m5;Y@#NmbCWkOlxGS522K# zLQBiGUB*ad)idE5%~$++6MF zCc38^N(J@`5c{@tf$|s+eeK5;jF1z4{>^fIvSH<2KUOr^h$f{Vpg1FvM4Zxe{+kEP zK+oKvi)J??ia5mw`5?v%H7SNlEU{G>CQl6Ml^gTVyiBffCY4Sr6);4=yOoZlapw-T`4M`jgoP1PMV&SFf&AZ0BzeMS> zS$zaYmp@(eO4pbx-bRplmLy6}ywb-?jjZ8y^YfmF0RIr@W{KA5o!fVqBw2^39c495 zE_S1h{Tw8w;xfXoW;cR+VsC9j6e@Q;hZ{(BX6hdD2@r+OsOJavh&zUl^PTO3EauWL z)rSK)MAbnvF-VMT9^^bvi~l?t0D6uAHvYO}u0SLLm#p$X?Apyb&h*ldh!`BNJZm8C zpy{PU30fKl&io^2tg7ok3<)=0D^j?1hHEU&e`rMNkyskFm=U%7LqnUNisbKd@Rtcw zG6%-6NAs6sjw#ZZBsl?E=Uuo37SDOu3JI;z1uJ8CkpMAZvEv(VCE6Os5IwDi5h z&kNdVvRdl6;kXH+EUhnCE)+w(&wQ($wJ=e47=aMBsi;SU2C_zlfn0>(#*Bv$sX!#K z(F>!!=-((Dj#Ue!1lP%0N%^?Ejnw&Nc9eT-MPMuNXrPVH#T4Z3`NC4B{aNBFFyXJ$ zq1XTcsANnA@dR48h*kz{LlO^m zjsFNMzN&t)T=l?L6Qw~myS#(mB>g#2a?!--7&70-FU~fDWBd=CXK05d{meFS`zUa< zkT4D#=KxO=-X)0)%qKZ#c+71n!1La~<&i0f_u)?t^_tJ~C41s|<*8X~-WC_aoiEH3 z>p2`VPi23;W#^0b$=HL)izHsD*bSX1zOurK3Lu!*N9*|kpYDmn_fbNwu(z|cxeG$` z+N7@Z;|cJM^X_87m0M8hqFSNb+-$?eumW*S>)1bmb{_K2x+W?+7O*Q$WQOsK-AJ z+&{IvPPe7U^r%~At)iZebG>-aJ>t34jr-{D@SRbWlxLfl+_1iKHviEAKAToQ{CvoI zy0m?~)--s#UzT^rahQufZqNqZkWO`eyD^1o64Z@bZhz;z5KImfGW%L_XZvIoY$VzP;pM!mS{ee30R`LN8$md#7Ie;M3go4@nxikgL}G6a)C-i(>L zlc^;1J&|xpc$FEt)8p|h-KEviqEBc?{f{|r`@iNmy3P-u|AfE6bY{*do)6R&<4S@( zecl1=qcwnulRRyTZ#@aU?20tQL1kPCDS!VbL7p?q#1iCw4evEkxHW(I#DM9?+<+<0 zJ<6QPQk_Bg1a+S4Ex)S*LHEGt(&9r9Akd~%$xamlNUMH1u!@P&r6R)UMwGKDDu{M* zR?9I%*`Z^O!Bs#b4kD*29%~!-g6yA6en+~wMJSZwQak@5J&Ul3#VW1`4$u=z)_~{` z{SNbMLl;ofLU2-TDPzKZ1P`Kj=Rfz^a|{AN6wSC1vxMq^P{zn7tSFpdRMG|s$iR&A z{-uv?Z_y5H`Q!@4Y+Ar0{nL`K=H8KKORml!Q}7FUJSh7h?1RZKHkF;|8Z|XD zyXe28qKF8m`Mk1eU-Q5Uwzq=? zZ)ETr9%ZC8_dNW~`bbq9YW*D>JD*o*Vo?K|KdVI{-odtis*}l7(&SQEe>#6Ycj2?Q&t+_0!7(_W0>763+sSZ zM-htZBFkT!f`((&BTawFpRL!a0e)k!y!m`qgkTBf#IUeK4&(vVHGi#iM*faDk2wLv zZ2a&8&ei;_wUIFkor;^?@$xfQZb!>N?YGHVnf0Twyol#zLs(jeuw=WVjCx@ZR)mii zQQ{AaidHLx190ms-~g8+0a9gLm9$&|!;P&FOE!m+G)allEH;J3=9GlQ?j;h2)pp#K zY9l1q>9zkFnZ0Cy7?!Jjii6>^oNluB@H~OtWI*+xF5GQTsEa-xKa+)^$<&od5XYt% zkga-B>4SQzQqzBas7VqWo<&|^o)$>cj4!Dn^jbkH4oXPOb|$K>3ftg&3yIeK^QfdK z*xu8G?2k{GgO;?m$(ax{XW(lt>}4bphxXX9MyLas2SVq78;I0e?30a9GjfUt9V>z~ z!}oWLQ?2le(i(~%T#c3ghm^NGXoWk9z$$NQGJklzZMB^SQbgu$C9?gHAb_$ZP^w_C zFWY;ce6!a1tkefn+R!N@rS2zSOS1EGjQY*w7Zz$r)(|)`U}G|TFr7mhSfRN%ZFj4Q z35Ld}wYO7^6cwznkLcS|Scb|l())0C z+iBd&JbT+M=e!QTky0{tom6(B@c403FRRDxFEZ%`Vj>F2-6CLAAW&30=~Sb7_TXWc ziuVVcF9&wJ+E_>?l>W2``sqQ=Zi4;8w3jPxQ{GB;iJrz{dSRqB#55L&3li+kur0XGyidk-q`MGOU$&Tv zC1!r5@>+v|JMJ2vP6pr4Az8NASq)9K7y7~eHfD0RckHg)&ePpL6^K$~GxfGAir3UB z&}XsVDE*9?No{KAE4}@}w18IMUImtyZo#iZTLv6_>{`wj&nM?)*e??9duOJI&X)M# zov&Nx>!)Xm7N6(!bxb`5pDH60be@mhTgSIyXUyPLTJ$uTKK*9{ddiwt@6WO5!w@&sG``#M+Ws^A zggc}6i`uQD+@|=mE!N_9R=dV%(cRR{a9M3G_s5`zU3LY0Xjv~tw>Mj7q=Ig?t{tmA z+-Y*GZ>pBKoW8vVZcQTD+_aX&`|Fhf!_1PK9qjw|2E|53z#4+M6=_pi3Z5ja)2v(kJ3<7v17rF?ielf;Hqac^VIVpAaYDI$p7dobK z8|8A)=(kN|u?ZFoTY>VRf9?iNu`r80<<=yo`Xd@aqXyJ{C?vn^qJNK6G?{?_-Q^-~ zL$&DC$YlRQ)wy(-UZs=b)XIxSNDNJV*OocIE8s?3%2gCOgV(o<7<#@Z0;e1|IAJ_> zRQrGuO5ZZ>nEiW1!*QA^H1zvdNx~ou$qu^O3>l zpNlg`d&O_&T*e~vsXd9h@RLUW>tN_2P+A| zRTS-sJXJdvJzSi#@F~7ew}bS&?Q*kOt?V|WJlPn0UC7w$fp*E7xFLN?;jrj4LiN-n zy{L}24AmyDn*n2o0tb?XI;D56cm=L}jOZTe;_xC6X4CtY-3N+4gC6FVZE;1Fgmn); zM$YftnKm@ME3}~!t(T??)--iT*lS3`N@usD2YZD4fuOLA z?Ui8O&Py<{$M{2f@Mnug2HV|$-?D70_wci(23zYKWWJkWEv>KCI(zc4&N!Wm_%2B` zAz7ThUMREzCD|6ns!c6EnPc`sR4Gxt3vY96a3OU}!|JJm%CnM)Eqir8N|F@L>~VmY zCI)NRLuoDD_w#tY?U8#cqfG1&NLX`d@!#vQj7cn`^kUToZ*VtC!g%_v6w{29?*q^a z{I3?LMd1qKs%nNt4jVl^F^}s8(`M0kv3j0I0L2aVo5Q?76VRFwZtS>&a*$&(n5+*N znw5E(*X}^b;gfNj*m^-NoC#_UjbM&&!{gy)WwM&Ps-$y0!jTMN@HoCG)qxk!(~PhD zF4SLw#>g1VVwU>(NNNilOAl05jjW!8J@$5vINfH1r{x(NvS z1uTKTbeVmdCafyu(=DlY@g2b{IUMI%vc5x*oq^3iag(*gik}#Vv@-F^+*)bQwBo-6UX4D##jiXVLy}R`ME`Hm7Dnr~23J zruuPi+MD;sE$zNhBw4FBu_v>}_eb)t?7eNNm(G*~=nGtIO)0ecnLu%dh#~#y;8%AS z`OHjhM}jxE&zHmf)WK<%dlwSVeO2eNm?9s}w4P3Hm-^<)olrb`#a~GsnPa+Gx?WEY zR;?=Mhjbg?oN2XgYTPHTV?e9*Unk zmv?)+D#q6j+-_*LMKR%!>jN~l_=&tL^fBjW@$T27?X$M5gJjPv0|$Fb|9s?jEYmax zN2HkP;kcu2v!!pYN@L@79=v}y+`Ph;&riZOL;uYis@3>Ue=;TVz|f*NBm4mfP_>1m zEF^8pL>~~o=nw9l#QW@h0&pkN*KYR%fdO*OZLr}r6k`T8z>Sxzx>XV=tQ6Ih0iiPMN+qf1{!O?{ICh*V^4xRK%s7TK zx}=}-_ZeDJW>QsfZzu~%^qX^wVC-rk)WB`la9#1caB*=3MI86Sm14vP!^QrkP!0(in6nvtD4f;UzUwTcVJce_A+D zr}!VLBudDdR0z)GzjuLTzkL#<#iM;LT zWwGcjLqLoDzvwwJG-Tq$Sp&MFouSEW<|M6YR}^s_?fH)iN52p<^$@8Xb_%~o6xsbP zb~mvlwYsrv+cqKO+jEs;Isf1|Htl&r8=LpMX@f@osi8lFt&!yH>$%tfi8j&}kj2mh z4OWGGLI$3k65U_WlPAT?1lr+57^`4G7A}h1(=5;I6gWIaW0xeha#OZa#bghyXCK>log6Rw=7xN<$b!DvuzUah-jTNd7m;kB!3b=|SdKa3U- znk6?EIvijSH5$=Y#apvpp5*W2OpolR!M>U=bX{ydj3$gv-@S7oyo$->S8oR>Kq~}f zdl>$c6Dq_`gnhJiq^TALd96+jksU7!a#bnx75V!yLiy4LMPRionH`+(YShbD*6h6x*bb-F$gU_)$+nx&%HQ)WdTbF(JHt_(z-z!rXsRVn?ymlbqSkNEVhS2X)kx3p=J{)Ptbej zZitShF*f{xom&C550o_nuZYN)kD3_E(o5t65m>=~AEjdgn`>Sg=HVc&F+=nNd|{D7 zYiF#kKAedLM-n5@ddvAU1|u11h7?_YArac1GhRn!L2McxTzw`6+_IheJSPlSH)-DE zahYnZrU@7WlCk9(669EvXvL%a<<{x&1J_HnpJ>88+9-s|!?rLQ>M=#hQ!9^{wGq|t z2hEM@OzhsP_gt7?_rv)gEg;F`{oX_y?)q#{&a|6MrRXlkkp6nFe-PayfqEjZwg=k< zDx*V26r`*xG%z*W^`$5M=JVrZKM{^BWnM2g<;TMt6td6adf#&Sl}u^|J0Gei*;u1d5*_D!G@35vR7@ghMn1y&E3M*(xuQFX;Mi{4HJ)k z{DN*?ViA;sOfpaqU6CW}sxkxE-H#uPYX57R%U<>C&tsO)5w`m( z=}DZb$n%Sg)0=J|->3UV6U1=|gx5}Q4^N&`mt2HVt8-glUDTtctIf~lDWqIju-RTe z_t%d3t&M{?I=_d<1Ch`2%Cw3n-wc+($US!pItssezK^TRN)guBhJHpmy*ypNkM{xo zF_RM3*yQQIS4_Jc+9-zc%rv@ZXHE4d{eaCHd~G)4W?CMrV+4tCUr%db?mFyjn0zl6@ALFdbkS-Uc=8 zr5jQc^uSy|qF%rt<3<&XynRNeVvCFhxt%DOt(GDd4&8OiSXsOsC(&T+3O`DcpcI!!gdX=c)Mcz z0z4BJ?alM(`n4xH962oiMG-jV-72{om|mmK^n-u;Y~Q^;Q0ps({c*_+&F)gw zRql|-?&6ZD?)G;txe+Kf5UgfT;4C>-)Ub0FTX%<``%@L{;wUH8VH1r}i4EVy@ghL3 zh{L-T$KU31s{geYU6@_@%ll!&fjHm2>3b*q_B}Q{P{Ac_835MkG#LO0F_XFDilrHfsI3 zvc3%lK*>#!Fs0@DtJ?Z7mbOxB=FrQABhsMrqoSLwBlA8qM%STt(}$9-!yxEj6U4jm zOc@ELq&jX4f*&O{C;AbkusrQo6FZy0Yjg1`MXD7vS;4b(a*7xKx$}j%(QS_h9Q9# zfjz1V-)Yv3%ivA!x|2itf;yIOY@vC{{r+&|%$CPDPMeVYLomo`FN@Nn6{~1bD(8<@ zHASsxFiHRylP_b6&_5XKzB#8@lkWx!-_vvT^FZ~Kr&rP_*s)enTl&D4N2*}PcD7w} z%mTg!P*v*k8#KTncqn)?uJ7v3n1l_@Yje)Az~bxjb62AMPQJW3U&v`A_;#tBkSTiV zzTV%ypJHn?LhWVII?VI&@^;`+aT{zsrkhal;L?ir%qb*CuYA`wsXO~E&F?Zw6}oeu zo>BVvW_`a8-Q(+-OdwroE1yp!4JdPXQu?x}4!SFHZ}(o|b*abx*ynb&N&3$1&@KGd zF6U8}42H|&lKqk${vQ5~)~oTy)e%deD`-~}TQOo_ahOJC7f|nMA@BrU)&rTD z$%HlUI{fBMN|>I7;u8O&b_ir4QJ-L~s+zWX7(%q8Y`Rq;21+sp|@!F&l zeQkk_4*!Kg7)Pa;W=fqUz>J11&}`Un6CoH9np!VH2i4~NVz@iJ5W$4>rCGGw>3*?r~2wgM~9QUTuWi*WUWzF$5fb0RxF z5`xOHPL!!^n{rdysANJ#MQE^xW_M3bhb`2}$s++_PgFe;))0%xm|y7$O$P9kT-v~l zYZGXh=vAAuOO8{%))J_KTMCog(7@atw=IA9t|flAv2Mw}4h{_SCAULt2kl?Ik z{Fm)(1eCA2`9c(c&O3A@++7Gkr*aXhL7-T9M*D?aKre)jD_Ed;{<=~b@{2(%tZ&XgmOpwB z5X*<22PcDNzy=PS4Lra-->g35M^ehnd@&a(8ikV9w}026+H4_QGTL7dHl1t!jq*-b zkSu%`3FpMpK`HJz_(;|V=xyqjb}$h6c6la$Oinzd{=KdYG~~6%u3B}dOoCv?`PVvR z{hbiSN-hz;W~Bi$IyFfvO;$HcD?u-f8&-fG@Tss`XblTggALshgOG1GE^viw@r$aA zY4C`@1QF0HPw}tb7*+NsIs25jlaJUdU%5FhKr7Q9ooOz) z2BGV3^V^N={#L^y(cmaam5~@2TR+K?dIm-b2R&pXL4jFg&ud-(wWykna0xorm%5Pcy60$3N%4&EM^P>(r3F;&|>&IQ5n*gGRDvJF5($y`2 z_pJ9T0q@ePy>zNUbyBB8qcnE=-BH7Me+B<^ftIY#e>bvd^7Yao*$FlT%Z1c$<;(Ty z@T%~%EBExS?qfUm_2bU%hu)VroQmf%z!6c6BO&L&(<~JXqEw0MlC(X#CUq>!0>6f=w+f@kL(xKJg9qP`gFN)CZad}k{H5GK!|wO9i8qa@6-Sbr`t}kjz`>hYuCiy z1l^91(`fmEuc!9&N|}Kkb7ac-`TBXhxA(f&|N5)DGK!_vR|ElO;^SU(bFTZiHys3+ zDoxIO9DEN=Ik%|Cyz6L0ZSXU!`gq(<6Lnx#0!=Rey92Cv$Ws80;ka+(5^lY6GM zo6sfejxf>n&WmoSm@#g-bZIcCO-cj1ZB5FpJKO)XG_;)`8>TZ2+R4rSzH4i&ItM#W zdH-Zib0mvA0w0VzBLCVi{n=Q#-Py(n3o6Ik_If1$VfV;A-+V0iHYD9XI}`FyD%p|o zl3KbF2@wZx&1p3}tre5qGmR(pI{3bFHsCa-`d9y7g)G04|0E;CX!%nqhO3dC?u_2^*au5lj#WmTB(|E(N|Z2-@Nq-dc&fbdRr z!h=h;;-+G6<+>GW3-yG(x9ZO<#WsUjW8;Nscjeb!B&iAbn?a-q&K5?xN|rq=l-?-^?r$BmW721 zp#tEx%mSZZUp^-J>;Syyefv@oU`>{dG<@t9o~g-6sC+wRzg|>lAumiHbo!l{3+lQT z-dha9Qvm#K&}h*z=C&I1i_AOERGt7apy=sc{DR)`$_YCI#LCKQ!ww0R8C`#8dH2H8 z3G>;#MhSy(>|0r8HjXCvS8Ph#+e-Qg2@IQ}4%}HV_ds1;lSM?|vlk9$^>J^xl^5ms zAtc?WI!i?T>YL!IK@mnGIyH?r#T*?_m>hGP84#iD*rY{vp~Y3*>oNH|O529`DF zBW`ek8gcG99kjN1qv^D8+?u#FcQ#Wz0>6xD?%*dQ_RM|=^b}a~tLc>gXaODPpwK(` z^k|ackT5p&WC)j5(wigg`4m@7-+i$UADFqUQ~3e!7T=tj)VxYZ+J2iGTV^m=CBe0} z2T^K%T0ZZpCn7{S9ccuhhq_J|H^TQCGs=pXaxxb3Th|iz?rLzMg5R@nHqhs(E?f^q zX1%@IxZ(SR+WVFT+HU-I-Z-~r>+YMYrp0FefD!V#o*kB`*YXKnrUBG_nx$)`RMOE zC?@xjrb(}VL!{qa<~+(nZIgaJo}X`Hzo1fVF>%D*utCn4{j#iuXVdJ%&g7g0Oisyo}ICG{NqJ}#=?Vb_B>*6+-` zDO4haar=fDJbJM`TD+MI!S88_K+B*v$b^@EB{`NbO|LXE^FJWL&Y~N{O3#m7V zMEBm2lVLotAxwhk%_( zv{d>u`(Tz=vy#+DoDJ@Xtw=W1rKm}Etcj^c+J^cS&uUFGK@bp%S;e%Rwx^1D?gF6M z%s|euJaSn1_M-P~h#9e9!EAC9i3?#-hHCZ5VN99BZv`UH#AO|u?8TD+p`@CHu!)%$ zi1H7&kg@;*zN}$-t*o16$5LeI!B!cOalU>qtVD zr4el1f#@+4z-Gi7>ML22`2)^_i!m0iA%bWVPT!YshKvz$X$K+od&wXn)WZ%D%v%^C zAZpFzfjy{3VCC}rW(Ef_e48(=Zj?K}i0YvjVkMeUG_|i#FL7 zIuy(lH2}{8a7s2L4-|(GhT!)#^kMKA)WHvMvU?`{5$oi91xf~CbkZo0KG8-UIDyHg zstmgxq7}xiiz~jd;73J|)gQ$f934telg-FfC{yI(Ev*|{*7QE?u#L%WmpBPv1I?V#G7F*%!-O1JKdybHGI7fHu?sRMMSTQuvN0kyB>GBO zmn4E<(?wMO-J!b@Tr7{jO@TDkc@3JkVzN^TX!csK4ZD=uGH*67bTqu`EV0FS1~p9^ zpn-nOnQa%-X4_HP`O4WPqgW=Nv~u~#1%excwZo=0qh(a*ouqgMc^kL*wtq0XnUQ~z z;odw$l*0p(8~9W4qdGwyhnFI)qD8i@H;P3-S?<8Ds}i5fe0Xc=D4Tv$s_oZGqLs^J zzN}4;U`_F}OSjvMX&MQABDAl#C$a7%Y#-w~h2rKv2YRRDVL`%AYgVTRqTm%ON%qx$ zgR?6YZTP9Kc$BzhtNN$3 z{*E`=;e7Bh3Q|9*-853ygVFQAKgW1jU$u_iboE6&)6Gp*J;K;7`+MQi7BGEWQP&dw z-Klz6i5F2Sh7BgX)n~=-6XqfoP$q{KGroP<0_?4^r1|A7Yd*Qo*EV}-K|L>Rw(-`b zzWpxmQJgV6Xa6#W{*bn>WbqFh5@MI`Ftce#o4IG=&RI!? z1!(WRy0UjC-0JbXOI@;kc)u=r=r;#9Z}UtqR~Ez*J715xkJczUq{d))WF{fjOG4hM zAP;4dnaIb^C0jFZnfTuF+LE$IRHUgk;I|3lV0HD(re+qSWtif!Arom6bAV!LA7 zwr$(Ctv9xPYOnQu=VI@>`3L4RpV>zrt(i^oGE`*CtB=brwyWi;kYBBl^#JBVmm)MX zX`c5#^<$sh8E}&9d{_LILl?TMsy85DCc1}kqdbu!cm6Iw7&T=@9IK}HXgVt_8S?t- zTy?d|x?Ve$kvnYdcK-|yhkguSYI>#!FW(oT90ISYg#C`aoi?)iP@5gWlJr(bYgmjt z7T}$rs62Y9U2ae`jCEz2)K4iNzs@;pA55J5M~L_GZu)rLv4!;k1Zdd?&JZ)y*qSrt zf2pq~9(^7&9GwVU^^V2;E_hOn0b;eQGt0g%R%2Btzx;eYJ@??a&Oq+Tp%3|r!2)$^ zy-8Fm>57pGBH__LRuz1qr*ZLRiMB@`x22$)IPS=k&{NyhOKQLN`!Mt99MkP9Vv34T zh;0mAU)+8*b7vW+@rZZRpL((5v3n7>L!0{mh29*+*w*39#I_7#Ar;^N)qJQ z5V&b*jW#&Zu;I0THHt@B!}*0-HK)qz(FZT{e%@ z2LjK6DzHg@b_LsGlt;N|Pi&fDl&MFq0^{cvZcHFVRtuSgVbaS>oKqCLvbnL+XThiw z9#7aw@+dIYhaH0z`vbcOcrh<&23A(G!HI`4<}a?kC{~rG)3XsM|F!+1DsN)k1iYzap1=8HDS8uPlwyUrWGF2I%JhbvpiC!ltDO}fUQrm(zYd`leL^#y!!$d zo45x`oWI}Fn$@#$j5N5N(x{|FeF=@yG_&U&IrY^g-9z&kCPm?uT_Fj^sZ8VVm>J~s zA`cTv`dDQX!N#=Q>cGY{(i;;=+_F2%NA#_p(_*`&Nqe?>Y^tmIchhqj2fxB5M}mds zuVRlvBCTZAxXsGI%qCFx(2mSef!j#J_H;M_B@!ZaM3CQMZ4!QeGghxNE{)Rkr<3G0Jbpsz&G}J66tsE^S%2zEs=tA;oW-12F=7 zo}8ZuXrCy-A9|OOB3;0~2nrJY##s!mW_&+Z`q$oY)S7tMlvCQr0w@W8Z$zV5U2>|g zkQ^MRiMYV_f3%?c%lFviCE=Vy7K9iDZ&Hnnw$o4(lG8 zUbxK2SU;8PJM%V3gK0$vT~?_ls4!$s_8;KOSK~o@NCvu4Gs3E5QQ9#QR|h62aYL85 zSYhrv{vlhbQ%E^(lnliYiU1y)554KqMS`E{z>B&x`Q4#Htq@;dtr9`maoIL!s z3rl}jJ_((3je4yKZm36I6F5@jsJ>Qil2+he2AMGz1VP}oqV#=DR|X?C!0$4vXejZ{ z*DGJo;u{IyW3}W5kl?cBn0Y7NE8JzH_k@`;;)r$U6Q7@G>nq*EeY3E2mE6!64hMTo zq8Xra(b~IuY~uw=Ts)xB=LY_A33Ae%v^tSHW68e&je?>^V*6@#CMp>|WF=ZCFO;23 zQK`P$xwU3>^>F^$fwJZ13UJbxVoK26<5oYQXRj3K&ifM+)-m7tCDrtLxj1R1?8B>) zeSZFESIh5n^QoZ8wCX_qj3UXnO_tCGzF&dYs`skI?a4Q*SM{t`__DuuNOIcE+s#bL zo`A(o<$YsonKI*C-_?_YPpkKJwf7J@uSqKTXSA;*HP~z!gP$t>;mWtd4b?U;YIy#X zx!PACDg}B?g=_)YsB*p7Cnj;~-DtT$E35Ls_vSYo`nXcZ!%WqWEg8?Q3Lh!9TZ7T# z5#s7b?Wy6S&U@9wkNOkenOvKr-vL~y@H%OwKMmks%E5n znib$6aDRjIaeYX9qs<7D+CRe!pWVe*>t`gvnMa0Eyu zG4QT$%W3Xn3Q)ONiSs|1z~+5n3LVh@@LK%7K&~&X4cRbWV+@h7zdby8y?#19v&EW4$YH0~)#2a1Vp{s?i2HeRC*W^nW8^$AV$^QYx zvT$o%B8m^|iMQ6ghaa8J4D_!=QJ}*7w=rXwmsmX7O+4{X>S1jjgqFqWRi%)o98?PU z{(RtKhb7c7G21UJTonw+2C_-v+7u;M?(0}K4`d*9w%5ca7ui$qnC4AH$EPFn4&4cR zO6{NSBuj)TPJvZZLBqc)s1&M!rB@|2>rJ-;l9VFYh=ahvq;g4tHk>7Sn@$ss;jvKZ zG1Ttz{b`VK>k^k1awq1GD*(e82W?J};ht~Up`jc28uKa!bhOx6-dvg4Wd1z3t6jgN zsl|ZhG*Henxc`-=%s0R(Gfu6hM~c(aC0A_Sx`EjaG&#nCZ0)QOJU8#uM-Z!?LDqVRw~I3F}3xSE^RzSVP5{l1cU(GLUK! zMkI)t0n?#X!7zmE+@hGfZ!+T%OGT5|Us zy*RJ`IPi7w+(@LBa=tgc$OZmpJ72%HyIKPY2iZ;sT8(u(Q3-GP(g>KRIh9oOK`vWH zaw$!{qA*;RL{s|rmtj`4@E_IJ5`kOiSCSc}=mNQK$)ORz>924ihA1=e`nBVJl27c9 z8fevKy7RL-k+U%3T%IfCjDDe5iSp}If2Kt+6831TuXujpa`D-4etCKoTeO*-%ddjIshGFbZcC?q%%qo;kHG2`h&<@o$}Sz?LXReZAY;+vJD*N6Sxxq9O6mdtEHj7(laXC5TNY=#^4F=_hen{yS-XD;eQyO=ddA?W#gP-~}54V(^pMKo%$6uK6 z5bBey0@`|y9s1EzcNVsNrZ%mMW6{lA!`-_a-(Ci4JTt^RVzBe+W7`;!*?wH(zD^C? zTR30mLU)J?k(&73T{T5Xg?g^N1U_-S-yh?tcB-wr@-zI)gWcUPkcIH$L_SRayc-j8 zkQvzWe*`LzP`!UG3A8j@z@5M8OZsGj*xtf3GBBW9;aow*(bN1uS)s0YTl70J@9Nuc7n=_s z^Mfr&q2+b`L+Wo)(K`p!WEFKNW}=n)=KZx5K{eak3eY~`#h&=P~+uT&@F%` z3D5ZM2~9g^38bblYCt!crXd+A9pu`IE)Of#=NqAgJ4%BgR%7jdk^sg^{;x%u+1T7K zzV2yK*wIj=Q|UPmLReHsz(iZw{SA?6ZX{ypTKD|xEHAbRM;bIm&S8(Ot<2^-v3}ik z+@2aPrnY}8bl!YKN)D$MmMN^dni6U#9CUa`gWJ+Z_{tbEuz=C+nv4pGjoGbd4xQ{b zI=2w}JDXH0(7H@jtWv}VtLdM50!_Fw=M2C;R*n~W00a>|jG(x#F_`3ymK1DQl~p_3 zk>Z9)vZBHmdi3N}gp$elUv&MFh-o;abnP~sIg`yXNOdC?{R9dBP|IRn5OIuwS}}NE zGI^_&*2&teG-WX=37MlG*ivCar0}*7B(|Mu+@TR20pS?z1g5Zjma*bt?%!3qgUw~x zOw}Mc6i_b5Ew$p-~Bg#=KdbaT;+574U+fQdMNxj!QY=} zERPuiXPhn+gd?{2qSx?md|lSg_um*&G;wenriQ~A9CT9CZhhnW9tAS82RyV;@N(&H zjzUwo_KVzz)%bh#%!kYb^7z$jp%-i`8~ue4q0ItYdf&3xWy8ey)@)!F`Tf(Zs76tG zQD=8NvK6|mVGyH>ah+pTo#;X+l`qy!6EeJ*`?V?)IxFmCE5ewR@T`0+h;dEDg?O5sc&E9p2Hr$AQG+Fg=ipT!MDo`P)AV)MhMt9jZy)J)v-=xfcdk z3tLD#5fTKLQe`}$g$)#@(VP`byq`%ix#b@Af-fC>0$-I8*MU(cg4PLE5)#_bU&*zeZ&?%aW_%!+0LrDzB%|s&_H+>_*$a+;TKX?2r zGKRByp1}22HlW1|#WisxOTw|Wy*=5pZ^&ogAvO$mXbR~FeYmcu zY&}}K^@(W>vd>o6(z-w)Y(`F+Do&cAX_!tJ&)f;1qv&b=ES<6GYD0*ZmVR3Xo5q{o zg#iB6;_%oX!I(y1UL+{@FyZ{1c+DEZV4JvEdgtIqIMe_M2*}6DFg4Yk0fazOb+=4S z^1j=y_-Jk=e%z>g2`oFTKC7hg@-iYFJsm$S?NwVg^#5U?abd}3Am^Aps??wH?dB0k zaThOWB7jKWdPTVb>xbNj?I@XAodUvL&khoXAWEGdCg$&nt_gkFJMA96R+uR3-S=^p z0H*pl477X5y#_QQcGfnUZ;zm$KY2jt7L_D?JTl=8PvduH70n(>{Om`+BF+wX&7D-5 zCPn#qaDE&gRxn;rNE0Ad=1MSpKflIGENXkG@kOhfudAE$ytpjqo`_M%6-d@R>HTW~ zEUq&%R2qUvq%!!rd|pVX?+$k$buV#a%KG4&d15+@fm{~R0dvH4)RyML<>u~q-Sl?F zH6B}Wo@U_CgYI!gAKFp~v7te?HWvG*Etg=DTz;^gxu~#Ijnp!p7HeW>PBhnDuJuh@ zc5PB25{UNtU?oe(yl?AKn^%6CDZ{;pZ+{S6@%@W81eTTf%!{J9y$}^9atZXl^B?Y= z*tS#;b(e5R2t1ThB2DYHWJk|mul}*USc(bg?t9k$$6@@Y^k1rAukU;k`1M1&sZjzL z82+U=6OFD0GXtmcNm0WqI5c-7lrCK+Wms@is&d0UHDd@3tWZwXSPf{)dYni;F7Jt@ zCR{70F;)^wyPI+*^lijF7(@Vm#%nD4Y_wova!eQ8bQ-g!P%ByqQdJf<5R8IEbfHzT z^{>q@NKyDr6m9v7wRP8GHHvnj<@gDccSUg59*RK(BgW^D(&Z&U5NO=g`ZBA8HVk6f zyMtt42Q@I(7AsiT_b6><*g2)lQWtvCw>CzG7xd;#1>ux5z3vu0C$!SfCyc-DB{2ii zKEcF(Hz1@@*^9WY`~b;`)slUT&$v}o)4>3<7h(KQIl6fW2R2Sprs02y`$)L#l6kbuv&RODxcJ zJKw>KnFm@u355+P$3I#$4dq67EjsV@YI^aRM_BiWXZH!R9M3?!k>1-JTcc zJTH33QyS2QN{q;aB)x(<6n@181J`LTKZM@T^~?hBT$Gc)Q;3igb10e;nEV@?SY!Q; z-IvqX5`1UDoqlb_kr0sK$$64e5cB1D6sg4rI; zQd_Z81LV%Q?zE}3R!6P}$wFpIvi>z~_Ws+XZ}?jcVK|(#(u>qjYAy1$Up`woE^?0} zgOK!6@Tm#$MKubptR?<57tr*`fR%7TJ=W^&djziC1@5iwZyM3c5|s(iIoROky(up} zl3)_~?*S0fQyqz>xhhkIBGQv?oEz-*!EFc@D+@DOCqtvE)h|L9*h_5;Eihe8l@PXK zEECohFB;&DN-A2tc47)r&YHw*Vn0o@5^1P20HD}znBGFb!OOrXHHUwai5GU(EWAxY zb)p=xag4ljugM)?n?|DL&($|HV>5^o%w?Q~21Q?5)UZvGU6YN;3%6ZpGXEP`7R!h| zI^q85?MafJSfLYQA0e?k^WPRm9_dX`+NdV)d51iP%x zuXv4PKu9)i_{#5)Mpi0U{I55w4(%y|($sh-2vD2E*GMkQ-26b?tfmY^c&gY)OLBd= z4-YmD3diEdW1Y{thL5{z*46Ned&JJ!pZph)VRCXjmgcE8{vFhl#zVW>zkWs z&jnRzrvp z%&>=eq$?|;J{$ZtEJL+=flx%O}D&o5o@M&bN$lD$cm~bh1vI$bfbMYHF|n` zYKl~j`$K_#(worIY+epWRs#)$)p zw8CE)fz4!jWIM4T;e+YH%{m?m0Nz1odugML@&U25H=_y5n{Ehf2cNhyoXb0bm}B}e z#R>FaN*+#zA1dFe`n!mlp9F??3JPpN&jwaBM(bZPm+SFPMrNAmA5Y-OuEg81RDU=G zZSEFwqUtnlxr3RWp&}LMBZLmiV%XU*@&PxuRoKI3(@O{cucwbSAQS-Dg^^>6+GJzA z7|1T=`%_eA1YrC#r+f)ah%An)SeZjbxfykb?jA&$Z;gU-EeU-`Rk!J4=tR3wrAQ}9 z6E{~S8NNwO^j(9-?U68sHeTUw$WrMTs);&v(KMOw$OO6fz+9&$ahrqP#8x_ z!;uM=w$8I0YesS%3kSiatK>)KZ+T~9AS1SGpv1)AZ7%pKYTRk0kU*XyU2XL8UpV(n z)Z1Z9b|5^i@TYrfBXK#DABqBqUs1;~%Ko+xTohaIS4Lo0_K$Pd$(b2>p!5{C9DPFa z5g5TZ;1nT~##--7NkZ=uSb1gKWeHFvLScknkPEt!)*3~Jx#vJr%k)n=Q0e72o!PE1 zNAU7Bo#`(5&7KThRpN+v4QdKRWufE{tpcz3x7#4-s7D@@&2o_v?NWEON{ZG!dC`QB z2Bw@<)==XiD8#GZ$cFL$4UI*Yu5cpSoT~2E=7qCdYs3wn4XzLY7X-5)^pfEqqSf$p zfwFFMI{1XxffXy>h{X0mP=+E3pE+@ou5&ZX(!YLrGyoKtLRVK0{+k6b z)GvC@9N!ddDOv`NMiO^CHftJT8I$xiIEDbzPb{J^I|pVt;Xia4@lM zo0yEuEYH#Zr2V+II}m_h61|k59=>L zS$wSI_2Ik8su;95abWXwOTM(7;?SUSab@%P1}yw7vg6w#fbXb&3}4gk-f{W9T)cSj z<=?zuAS)j|U9+(%8NlF@Z`U|qlAQ!YXrPuy?{F*hs#M7rU%K{mq#t?3 zzq_A!>hyS;+tVE8TxWWT!p`^7kM7Ee>vv^*@Bb+;oSLeo4TtQWTI&D1`e4eRKHYdc zu8=xAJQ>N1j!4cyOdT$WNFs2kqey6*@k~FgwS>6CLb;=*SBnBQ4!qW-gUkz z@7(;{?3u!^e;%Rad#UAX%^J57D(uWAYh!C0ZC}p5*7|n#q4Fl2D73G5zijChX30w_ zJQ7Up1h#OBj1;oG=e*uneH|K+a;L=uWxeNqm}BJZyovv}59{0Y-+ET9>MN^l`lQzC z5R={d^W54ZYAJa>ZsaJYV{0+ryS~zUl47>toWpAtD;O~bh~`$WSa@z;3?~)K+ThV8#1w};5(`mBFgR!CyA%TFu7(xO-<8+r=n{=B zC}&inTtxC&i_?NogtmqFgjFGf(*03S1d>{!1>Mo4R7DggDL6B6Fre#XE~^11=4bpC z&Dan84p?tNpo=yELqKXLTI*}}kmz}iVoSc(R0pq3*cP6XZjQ$VOPOW3L1q8c@~8)a zBNU*EDRSh0$Z-+Tpb@*~`0Qk8{0Ew+14ipO*$$1kCBGq-K$(`rsjUA+y}vlOLf>rB zS?=Rs6IP+zlZMn6R5DkYsK8+q7$B=*`FR}OG%r?HL z5S&wzZ4XNgOr5r>vry`LNMN&8;IRbVB=&?>hj`gA8yAu^c0JrAd~ER=xiHOHtd zk`RDb>T>=H=9pi3O^Ll;WG+fU-B=>Qzj_C<^*mSYNz<`2t+;gSiKe+MT8adUw7Cbu zkfpgmE#kl_?fX?4U|T40B%UPaLX2m43W7C5fV66|uQya@(1`cNEB>Luig>UnjUw81 zD{fO+4HMxeE?cH>M^Wo=?aL!bDvHDMP?tyMagK&E+-9$y_#_kiz!2zPL6>k<89>yL z_h*|Li^1!d&@tFo6u2q7Wpy&EyZ5CDNLNWnbeEz=uevyf&e;$rsq0A61^61*-(b|; zs6@#5E0%L*jr8E491u1J3GZL0{1y45+nX-Opz4|_y`4c<{X1z{B|;e&VF%wrPxFNW z#237W?`?XZ6A97w2$19K{VB;BiN z99XxoCMmV5A}TYnrWE|q9MpsQSx=o~wCZ z@ZF|x*+=KakhAF$7Cr28c4QE5rZ~dvU#R~Tnx0N>^mp`p6S}X-$*!mB5!->>SHxQTaevOrCtf;K*1VcA{ouQ2Q@T}@VnTdC z=jBf-E5~)Ho@V1Ndr5p7aOesGBORS7V~FJSst^SDl6!g3_4Oxlhu`m0DN;KJ^~9gj zr&BA3AMvxiIbQ+mX9UZ~znqhP(cln?iqzJ^FhX|aG}(Eh1qr>fuWm=&L@PCY)_r`Q z8?;d-XewolQY8@N(y7ZV0HupHD63iv$|k>OHzkfxwy6JtFyhBHRp{WTjUr=>CReRq zHoQF>%>Lf&Jiig&{W{;XDtGH?KlgF+egX*7f}~p39q=mVcDCJg1{@ z9=#_)L4hW=Pc9V%QEg^Dy8gFWu5Cfj4J1o0c&joccml{7l*;8Df1eacV!)+ok!>lG zK!^|obdCua-NGgVI&M{cyieIQ?XTf41Wi-C*|lQyN74f%=1HnuLK0Y6Xbynqbx0lw z9sbqXAl7h*y1Wv$@igskQvi4OE%Wr0G2vQFa))Y76%<(12nr&3i?y;Edo@cm{GL5iIh#k9M~15V-t~u6?oY@ z>b{!hHka^HA39j8jSiAxY4C^i`LvSFrZU87X{hyAR>)H)vVrpdC1eWjWo?1g$uELG6m!tj-D;}JX^z{5M$UNG4OqL7r4&Nt6$qA`9Y_x@q-q=@Lbg9*7 zj{@Bmk-fZPK@m+(h9ppU96oZ?GBmLa3Hv+ zn}2d9p&Y5Sg@NlupEaM!ofuWcx3zXYS@lOLg~1Xfcy7&QddTR$%%CVeV%Ae6TNQvB z0FRGMyv5(`MM^T`Mftmu0(n+Curn%&_z4wxnEiHNGyGN6A6x96Ksd!$Gz8%#tjuf+@wY@;S3g7yd`^Yiw|Wh{d0Tj zsA=K1#u&=CSl0c^6&I?fpGJH=#78ZGjEOD`-bS0jI{a-k+p_)jb5(sEm;W4o6YBx4 z&dY^wUA^=rRbQ{SCryGNyvd6%-OV;eK&tm0sAuYucD`oix|(G`gAq=J1~0yAfSZs! z;x3?=pMmjAKj3`il)5ZH-GG5TRkt=_wQ)wXorD{4Xs5IB8Vum2{`;N3XTQ3^2yMUJBp}648!LicUr=6gfL{~mXf&1nq(QW@+!}RCF?e1+V zrlx#h`s!f$%(OSts=DCd{p<2+wqy5FwUiJxJDo*p#}_9q}M=31WP;@M=-|BQNl?xgV*3U`ye7v&iw~=Upw(%}laY z6WzXiwtTfGXLkLsEen(6UNe=&#ntQM1zDn3W0#@U5lbksxmOtJ|-`!ABRL>X(%~?JruqWrXqEweIU`i zwT#)4|5POlUUs&XQY_(i9Mq4DANejl%z7t$$a6*1kjRYmUQnelFj9yE zy#iPP$bSRkVvEe^VMjNNv^4odP?^6 z%pgP9S)IF1hrQn_;Lq7MCdG)$eip93qu4edg6xSt>_N?u&_z*UsS<&<6nfLhG!kbb zKS}0dTALUUvB)haSrrsC)Fc2@f*0fKg(3a+PM`lr*%l_#mQC4(5T1~X?%S!)MQyC8u$ZTk7 z$|8jPsd(c(e&u@(3?%qU=0Il43eE<2&V!85J~L1qQCsS6sRzNTzoN)1>CZ}7fbDvj zt)W)}3`lS?ns*o|IW6l=ZGdk)Jx{@Ap^a9{1aye#LVQx@KDcsIX}u#`YEHY3z_L8I z+&81s1MLQ3`(bB1dCN05@u$FsUByoEIha&J+?^b3BFEYqBn8zYjHuALfL=Inx~6$9 z3AOv?RMuZRvP<8B?1K0|^xVC(N7H=)LsWQPC&d;M<{x>G*woa^utn*`Npo@)q?2 zvd}4_Tdxge6qv|*T)7p?nq~tooTG4KG7e&|%|?q!jeH88B*@)iB=>_ZCdQM|0c+R; z;&dCE&N~y?n5duypxV|Y8u#E?Ou~k~;Lhwa*d!|Z4g;XoXGqJ0XOTc}O*kM40e74u zZ4^#}(<1azh&CMk9NX`>L2O4Gri}m10&@E&qW_2j(FfivJ?yt4hH$fr}mzIpAmJvTKxlGM?O+}HL2)* z89kk8H`X?Y@?bCob<)Ose97XP0&Yv*yxSIdllrV(m4skES>A~Tx-v@gzg|mZ1u|pI z=7k(@oteCQqc~1*Xe-Vy@1G-2N_V?>SuDu?EW|$^9gPUjY*Vh`yc)0uO)6F{oNZrn zzxUrgDa}LASPw9Yxq=jETrElV38PQOUpJS(c6Ev%H2K^0wx-}bD`#pce51Uwomo$F zW($9AoP4}!?9`Uu`e!J+`PcM$x3P9;iQKN3RhcQ@E*2+4w}%-<82G1p&LhD2pM7Dl zPB#~_*yl|X)Nwn^5!rt`O$mGCRC37+ABDJa!!z{k*`NSSy&D*x^x###ZVf)4DkCe$ zqxQ`fSyo#c@A5h)CdG0J8=NWdoEJ%BQaqS+e?w65Z=8Lau)euFe>Q$U#7wD6LFQy= z5qv&3pP4vtUUw(b{i9Z zP^eR+wyG|3Zl<5>Dn!oOj^I5BPF6YH&Q!cCWo>+XnbhojuvO)R|1V;Zpz#mz>Hm3r zi-#3$07gA!eCXuC^C~nACNg{l#`&FA3dLGUy4fkT=?Qg3Y4NQJ=@tS+w;=!eONX6T zs=N#8U0$??(~ihyZJYdRpef+tgt5(D^_&A%ciE+!0pZLbiexQE zsExocEX=F<4p-YU^%9v@pz@ljI<*5(;JD>k^H@p7UT}M)BE70&IXQV)y6B(dNNH(r z910Y6mckm~g_SYXD4h#vp+h?^$WpB;w|SC^0xxdLMbr8toZDU)78MfZf?t?KsuCnp zh`AE(|5$Psm=$*7AQLXU=DSCLK7l>i;{|I3$ue(=oORC;fcN-o>_U1Y%(u3T5K2xm z6R5`dkv1p&Yb_yDP1Q#5o2#bH6qud%(SsvuqeN?fH%R~F~!V1K(b&Xa4 z^mQ*hW7!+U{5w(r_+d{mo)aTFI)|Ow_%~3Eh?T7Wym>)xE2#jV>lxL)V`K9t-!MHB zwAzh^-%as`oda+X%=K*7Zz*xXR}8Qp)%NnucSV~GWkM*DJt`aE#pbakH~SBvacwJi&mx|GAd3OddmS59j=ck zA`>K){fQ|4fiq5dkk&!oFSd{|g5wTg7l&Y(1-urTvCf#F?Z~NoVzm|XKG0tshD~(` zELs{x+7LVme_&oC>}j_sKJ_9q&NOH+)JgmD&#QUnPLUR|23qVjsbCjhh$90tGh<2N z#?)IyDe9M_&|`k*aPwUY`|S3R{`*c^ri{4|R(&U<2yE=aB#`VY0gUz9?{VLEb((tjYe_;!|=jlLEd%+`2My&TWK!V zE*}Yn`o`Ahf0IV;Vke{u2^Oo)XKfW@tBb;I`tAm;fs9gclgH#9TtD4OdBWq=De1w` z5STNKxq0C~V=EOzA<*0&^*uR~H&$(0qw8B3W&xhTl`S`~>6wZ*mY1RJ4Y#fQvRvYt z(tkP%2n2!~`OQvI2BVK3xuqMn5kxgjr$YavFqUmVA4pPLukiN5J> z#O|&wjBdd3>>1O~(((Pix;tAg3jTv`YAL7y+W396{zXK^5bDR)ivSr|dAylRNAG#Z zA)-VG|4*C~S0N{8q&Cs$yQNF_+g0gtM`v5!OlBEQ@4{u#%j>Y9YNm$bK~?D5?rGSi z{p0nn_pIwpAHTG;@p74sp6$2awKc8!pR0Fc*u6)_B>@ZKeo@;!*{DjYw|?JI^@0f7p5S7Pr7+*_5u3MxbU<|#3$qykZpO)bD-@Uk+H z{XxbERJ+l(xp{0lPnRYeH7#^yhT5Kru+{z^SRVzp%Ay81dH|xuQ`JwO=Bx6$@*a33 z5Yr%E#j%hy3M%Bj1DNr8L9R#`c2*)rA(M4WM{`{) zI>N10bY`wRzDPX1;zqHm3Gf~J&x}Y-(WsmSGZR^DHggC=a03#H0z?S4hHz4@^<95| z8+waS(C&+347G~3%Nj?rt_La(`ymOzV6Op@9}1r93MuZ^3CcctqTgf(za;_&0psDN zf8?AU9qL+NxC@X4xdad2TtnuqtiGv}$Pvu>sP%QR^Oul!xB2(kH1J^yQGtJ7&1Ne+ zqt;TFuJ6vsrthqr!J@u4*(L7}P~{sT?n=RCYlVnm)2Idx$5NB#dVL&QQDvY>+BpKH z;y+)w%Um4PhG3~4Y(7%nYG?IPbcV;d8{WFQ` zCDE9sMOmPPj#H1EYr(LgQ^X;hD?Ir?(%}HkBnC8RD zuSxIs^Ay}Zs|{FY>g@97{W?(Jo_%i6KH600rkjlID7`VS%*hci^T>ul#tj6AEZ+AA z)sfjG`yBe6mN=SW+zz~MuA%Vh3F+jpE2F0H@RkcO-BK_Algl^l@Nn-M(txv@gPEp! z@f^iQFs1%>c6_zdwkvhWYH5rBv40th*fTA#HGLu=w`0;V)Fx7ryPH&jQ;Ux;%kwpC z*xCwaDvE_$XnygdtG{Sd356v zD}bNFf1yJjApe2HiTw83ugpSwZbKgOBAIT=9CPLI_at!PoV4~{!*HYTo_RvgO?-8n zr29o}*=K`p=xX?AzI$6$vxl>Xnua%%2;8fKa|4guVRp-^Lt`4!4R zMOiCfJ36>?_~G@h&+(>g)AL79ht~7UN~`!Ju=_&^mm#Iy|1;Eq=s(l1rT3Mo^jZAgyd$BqoQY=2cXIqs2Lzi*(LsUDWt>Z;y=Vk|fv^0KH9|Q}WRPNo%x@ z-cS})%$UhTP-Ib8uSIW;EE)*&M;`O)Absm#6(y%z%t$yOXm5k98ew2%Bmcs8 zY3pGFypP1T=52%c*E^|%Yoq7`3ekB?Q`RxFAdb2^<%6Fn8bZL6D~mW>c(xiAcb5#RnHSC`AwNXI>RS|8ty1?| z<*F~c!d^->IR5SV648&~&YbZMn|@f%XrO)@UkQ)YWPzEz7OM zJ0)QkYNaEJzg4*OqU4K2?J}UOu(vo7xJ^8X0k^(Mfz<5>2IQ#MtfbB34<~9R^-nji zMKMcS2-hg?u1KrCE*Ie#;<_AfgFb38v|B?R7U0RU?7(Mkyzzl=RL|kiL#q|E=$9)w zVuOI=^wb1i40bvglE#c^fdYme{NJzx7(BQDw=+a@vUUU)M`6byS%0iS!I1LQzm>PE zOq$AP+mqZQ+h6LmXH^0ofPnN!WPNsLArbpfmrx$6C*)w?0OMg5!Xnk>VN)j7Kk zuHDY^_mLj8HIB~?<2<_vpXTg2E1(gT2btPrqv4>pX#z1?mlBg?_#E}OHC(w+2>HZ) zgE1P&Zq6#*zI2Lp!?0m^G34UKhSfaMjM;WnMA^hAb?f4qdlFUKXqRcncA~cGf3twJ z$k`EHQ}$+(Z&kw~6i)6ImBV6YhV{*$d|~4cF3D6b!L}klh#^)e@<`YZBYBHZ%~Rz0 zRPYXeO(tm2Od#Q(R@Y7=SwlTTrB~fG1<_QK5~r-PHj15J2fh-Q^Q?MQdoc-Mi!WzA zG{H09OE)1!;BN6wPf;=`9?;H2W~+)#6ZEi4aA)H3n-p8+I;v=M+MC@88siZ^k`eF* zIbJQy9GWA8;cFj`SYM?a#{@#Vmp#i@v$^tmLyN*wNC?-LDSnGy-B}Y1yM(|`-4C;V zE)SdgGssq)>L=k5NL$`(7m0Lr8+~*pWi1@ZGaS zur-=L|9w3 znbR5I*E&$etc7ujWfqNI=FQa?vzI^P+rrF}S5X%Sk7Rc~2A98o?v`PQw%F2*omR4@ zQnsD>FI`eR>L+CMyESVBGA{{+S95V^7#;$}h<2{^KH+kH{y5LakBHlsE3HiyFsZ?% ze^XZDdzg2jEi08NfMm(&C@zsbxt1RstFr3CF*ujD^|aw%0|@+pLT>0j@SK6vCHjJp1n@=}y8Yx6Jo zr()MkbbWvU)vX^_CnGVX+`{EiEG0$e&J(3fl8=)gIhaxADn?+hO+S*M6Ey5x+!`5& z+4Uc&v|oEyAL20!tV6Ar3-ilV?V)pLS_qr_wHlSmlsf<#;JpZ;b<_i!Q(Wxt60Pm( z1?5O3EkE{Uv-A59Q=AE5eX4j7Ix?Hqw?fe_ZX*Po;j_(&O6dv3&w$OQwq=Smcg!$s zVR=rP0IKpP3O=9F>Zq-Kru;l9Fzsn_Q5F-q1gk83O}@$_Q+{q;3x!3xzK^4lg@+Q} zRCcPGIFyx2cd!JlpSZmVrT&s3TnQMWHa&^HdL7$y?Uk+X-u;o=qH+_{9x82yOOEln zQh8Zi;cp@M&*2~EoRlyEsmUF9RR;EhWZ64gOVmikgF(Jw?N_reD_zJB5g-;JMHT@O z5BS=xVYhzo>VYuV<2Vw1c=2i&(@fBJ`A_UD{y><3>5JZb`~%xE7o4`o3o;$%Y6983N3Mk=!-dfq7z9rvAXp znNSK*6(H$I2!^FuC40XD*ZooG*Q>G`QS$IVLcVDFIXvOvTirh@=`uK)Xcly8ZnJ{gWs;<`3LOVqg@wF!}Y{>5t6KE zwpH{nvxYk+J*A{iEztW2u}lxP*(aDaLGN1lv(-#S{hmhL`J}^Lno^?yvDI@a;vUxE zO1ENYw++y-jsMmdI+)BjcBEL(RYXM0H6aIwib>1fTbk@fqOz_bp@U1-@lMze=ROaN0Tr{3RQTjr-MP9A2 zt*J1yrwXit8s~czdQQRst-4{j7oiF_wByjA9{@Q8_rmJoq6W|QMNF(kqyq>JXNdB@B(z7j;zu9Tpan7kWiTB zOCk@sXC!s3J;vgF?u>oDfz}30IM|Z=N}T5%YLK_2%PT5ebFx1&A!@Z{dByc`Y3&qr zMw!u_oaTMczU7;Lh};_VeFyYx!|tCCglZhkgacjhz}`$uO5;65{Dje6e2D{zByaf` zUE@!#^JCkALN2%d5moZx{_A3aKS=iZbIvhL;Jc!&XrQ3p*7Ovz2jEiQ?Dl1Qx^;(z ztUof5ssZ#W%41;eTI25Prlh5(oL1}(+Oxu_`0&1KZ+wOwG~jvYu%ItW{ zS$_NfNLw|Es3Bp2O{>dG8Y2#Fz1>i2hiD@Ga!B%&H5q!vd3`gALMkt^E-aR~KDz*E zVyF9VvTQr*O4xvA-+(}AjNWJGqS)jjle%8olE$wT3KDRHOUcN38fpt=x}>GN<5AnQ zA`&wQSa0;rYZA896w=;IuBYyF z?Z{XMZs+T@Vh+CnC#uOy%DWxGV!5|?)R=wCym^4Mlv%Pphji2_id+_u+DaUI9Bu`! zJkW1{vWH}ds6CE{FahiDX8X;*MYjos;ka(Kxgk=QVrUmN^l>_uB(rR)Rwmjgxz4Ak zwJQ0=gg9j=pw}tJ(Ynw9eqd9j$vGsYsreFF1H&v%66|lfTvh6#;C=ZshHxwT)M;{$ zrkA!aO~NnOybuj!fkjP* z><_EG9{v3D4nnmv!;=NFBxC_^U2|`Mg9PFxA&%Bj__^!^DoC2TZN{vo7yi3kWuAg* zOs(@+eLYOH4zWty68$fyz8@a>60YkB(!RfmaJ-?;7IGfy_BjDK3bpr`fakzdDP}~q zgFC%(=yMU9#=#YNt29AMqGcJnixsr+q`#(56u!2W&A|AImST;o5ldzRvK5*R3q?CO zv$vrmA@W(*@1R$5q$PQZJfw%89$fR~Ssb)HL}nfS!$#Bw=`S|L#fpW$Rn=96ZS*>~ z`d%okjaWX9ne(mBkN&Dm$ftt;*XD#=An}#xp;Y7z2Eq4iG^$hp9oDX$zHUqm)l{pE zxGwlQ8aJ7(!eXyjz6cH6u9<=;YE_18@!&Om#xnIUeLW*fdLsbB-$^Gc2J@EouBq*|E>%Dv=mEf~GAdKyAV{^6STxfe9IjV`v-Pwtx7xLyxu&jU-(#Bw0--?$ z)NfCQ4=A6e!A_a4$BSdst3^&C<^(E#`X{^8%`*JmvJOl$jO23a+&E=`fsc~-`zhrg ztTi}W^;rH=vQPSTDHY?db|8?@Hi>{+ZTBz?+@kBQ9IIoQEKF~=t-l^f{JZH1sW|~; z;rTL5d@C((V0XX&E?@mq6Ne=SbY-jhk@<;!r>3M)d8_)l`qpAfDpw^r#N=SFyLF)h zz@e5+aHY2j^L{*OkI~JS`{(XIj}}j=wU`GRKEW|*Wv)PI#$D`$R2BwQ+=&LU^}+La z@5%-t!Wh-CeKd7hfnJis$Cpi~1#J>Ne?|iCt$TcQb|gbmfaBEFdr+{Y%Vu-NjCtxr zkJF{m`7Yw}8EG~#y$v!(k(>fCR&aUg%X6w*gZJr#xkEedlKfj>?3326xT8S8)=#@A zqzfKoc4*`^gNjH6KOhY-C&M+x1XMvLghm0^t;72(E)dwc?w#zmt|} zcYJO@`J&$>iMDpC8Qs%~>Gc=zZJUuH@%})5^Dmn_Jkhwz!+}Jmg1lkqWJa!agy;{P zwvV0fj~$^Tm2@?SZU$DcOEVe2`%`~*;_aZ|q$2i>YoQ0zdm|Zaojt)2M%GE2(G&!~ zm{HZJ_3MzLOFq_2Pvm5wyvb}tAij zbqTuX*gps7x-i>q*=_3k{mdbAx&I@JN&D{?+*s{@6-B_ivzNjqV+3q!-oZ2QB)7t= zy>hutQ6U~p)d36lkfSsh~% ztDSj_%J7c5TG=pCM<^|!AHd!$pNiV@F{DyLc-fx|LP&W8SrBCA zmk#2l#FdZ|i0(9YB5;J3ISU`}{gj*mc9#avrl3JFSKt*DO@Y_B$L!jN>``~%Gly9s znXk_iGOjXkJ{F*$FcTm zoMI@g+L2-oe~OOp0`-gOi)emu+;!DMGMI$8@FAIsx%Xj@GN5!IzZrUjeYV8t)`1)) z`>S`vA1Ap%-Q>)0yL{ACh20>v5ll_-U~t|EPYS`I;K*@ve$1IsB26WXBnD;K?X;nh z4dRGa%YB80R)y*o3BcK@)pf4n&n@Cg^QdGy|_Lxc{z*&-sz9 z%Y&~$aT?5(o$!puwL&F$EHt_#2iumH?fScG&_o;ZNt%S9BZsS==d*u`PrdkyVh}>D ztMYd4aAe3^LXfZ{(fnJb?%`r(|JyA)Ytks^SD)AOkj-5W`TOVGdyldneB%60Cvp5l zv<5KCYFc0d$T6kP@S3sLx6AWs&i$6I-7|iW*L+)aml|=)8_h4X1#-1EUZ;C2#47XD zG0a#Th;S30o1&+%(k9exi7-`!v-iOJqs#lF!;ky=_oK)M^bvHCS8wW1>geYYP*A6A z9T~^MKgx8n)st$IfE@1C3lkey&L1l5`jaoayJsb*$H_h=4IOoCXQbYX+~d&>zi{IG zduBVQS;EoiERO(4%R82b=-HSoeWQ(#w+cW-l?X&$hK)wOQjAi zL4XpV?3eS`2YEwkRc-F)U#`)~<`Q0kT5^XB9MOAx+6ZxN$WoMl0}s9t5x^U7 z%8h0Nr!HpC6B4%@OmBwE6C5z;XLkY5DX+Z`YY}of3Y`P7czDx^mq%w!SwdS+Tc1@0 zTfCjbdO2`CJl*2+o6nsSbIz`-e>id%46JUxRw_@0w_`cY2qnKri(VYbaG~hic`wT9 zG%wvwdQL}D#azEeuoLk@bv+{O(BG z@b@G`_SMYrG2-7bAZp#yg31herXQuMWSKuBLtV1d1>+OeO6ht+;z8lOGFX&jniSFP zVyS`_(2&}OOcHz&;)x{pqu$ytOv7J`rXomiI#AsFrwmgsEW-&QQj&diOwe*sJVgnW z(&J?bDe$XU&`jK}eN|Pm&q5m671}HDm?)wKmPu7Y>hvma*klTd@%%cCQe#$-cl-QxeorPk#mp=FM|2~{EwX>OOy{5R6^U4GBsm6fc z!Uar3D&#eJWqEEeM<4tfl~o8?(xP-pJmS$7p+IoS5Lp!iJ^62W<;K8zCK2SFZ(A`! z6>>JK|CBKzx=ikw1P^7?r{BR)5tsuud9Px_;d7+ z;V`r{R?_>6%4}tCfr%_)ILi#XVPJmNv~QB_#aT~g#8h0$^12~d2+>QJr-j)DpmVJF z5m?%E8K|ymj#TB-B0Ngmp9a-J7AU41B{$r}y*MG%sw%5sdY@*bn>DhF8aN09%?{_( zNLPyq@+C)id6W7DMR^AGl-0%4_-m;&j~?Ses_%8XTtYAQHg}~_bSG+vbdM*&L^I<< z$T)7MYYNeopw|u%0<;&mJS^C#T%AkU^0Ee%RF)x?*sh#;M)knl0!sh9CbiXDs^Q|q zQ3e_hlXW8o7?&?tWrvr1iihLNxTH9t3J<|thV#5{w9r9ZhCz+HQPsr)dI^vxe|0`y zMy5j_*rE@@8ffz26DK8Mejroi3pS~;dnnmw8DWT4;&vJc6*c?Eyn<&zVs!BY1ud{C zG8&Ex!1pM*LYS;=4r`R2cFEcX@^h^sExc~TkqUNEhc0y62rL;p5&TU%H%o~E zirwrZwf|D0R|uI>)w4>mK2-s7==2zhE@A_)QbX6xPBrq7)U$w({A+vr?~Kv*(9-C* z&;XqsotTIQS^yvCx{bL53h9hgojzCU$8H`581<4CIz}>4#|6Nvc>$BO%Z^Swp=vHO z1d%hF_NlpD(chZ)BXW)H`|rJqSYaXhdbSOw4PulY!P+Gr7Q6S?Zhv+?fbDr zR$S9sz92RbGat0yXx8suYwiq0J$%nT-pDjCI{lryT(VJ3e#6`IAbhx{D?{l+zeqhQ#a~yz7ySMH6Y|Q-7_&ApPJF|l}aCeIs zstMUGt_YO7Q57dug@hk>ClKk=$ns6l{Zi`UQ^WGGG}mAFZ+iX;{dJDC%c&dZgKz9V z_o~hOyEHbCMdhSR4;!=%+&B9i-40g}7xfJliyqyh-g#xZyLD(D{P zkS5hoi8&Pr6v+{W z(?=YVsF8BRslUslT#;%cWzT__DK+TgPgIa$^A`Di#`6=0!=rUeAED(-1)(Ha4X}i1 zWK6t~w-KK1SQF%OgX9%uIEzck%6#IZhghO?6!i7=xTh?tWrf~j;4Eka%CB5C{*l@Z z;|W`s2GR&BiGO5J6-a)~A?c3^B&5>WrBOQVg~-TK?XQ>^YrguS~#JJyes+VHK1 z_lm>erW99VN#V`?NZ$xlE9luA5aBd|iwDEf?ZJGY#B$rT^Jd#y%?8ND#G|{UaK$q0 zRRzmG`QIqL8pSeCnH(a|eNGSC$l5?h!EUfBp2h>S=*og;D0INQGgg?^C!wu`E0)#$ zqe^*m{le3?e-<9E`jzC($<#Yr5K`tYD?Zu`qYV)h-b*Y}HY>iwS%8$mxP^0W<8o?m zC3uC3MxVUtEOz)MWO(_xL42-lLeeF<=gAU^50?g&3fr*f;aDb@prk=t9f-B0DXf;5 zs_AzT++Rit=C?7`Ug;CdT3ivBH72B!O*hnv)(+-9DTk)CHfJ&;FiKRXC|$o`}NgsKIE#E#Yb#M6lDW<)rcGi=ylG@ePDdnOspDE zoBP_?sqF!{l5J*6Cww2f9t<7$;zxM18b?VHa-k>)*j#TyC2uO3b9s0}SHX}s_3U}N zg_4O5kC;_X1@X8#rg%7G1vR`5=18R! zlHOiF{s2A=@0W69du;BcGhk;u*b}ZiPGb;OS$%m@LrJn-&is$lF7DRuPXp676LsQE z_5z+ozm^{|r&G}nA7E}6VcNI^gVLrJ7AhDBb~`BN_bu;oi{G`j<)QkOZbl^*7 zfMauLb`5)rfn%O|>^Svg(Zg$qSV9bdXc`DMjJjRqq6)bzEkYO?zgz=r=FK__njZpAKzXneC z`Cz+!)^Xp*$)O%IlCKi2Pco18Hk{v&Ry#0$kM)peHcI@Q8wMMoQLxK8PVV5{$%#J=mu&;!(`F33Spm!#=&z~UV#Nov|crPpa|6pdj^y_={7bIqu8;( zWR^-=Zc6*tMaaxsve@CvFX8cF+s|&T#mZpRP#AXspQ4mM{xpbZBC$X zQW&YFP@C*f=}AQuu~gEelrdcY38|3HBBF$B_Lr8Sg~(7xMbpUP)bwhkgh=4-06CtN zVZuiA6~0=n;+5hn##!R**MI{PV}(0WVwW-?sNghaxKw>Ji=uyscFH`sMQWRpoj5I@~vUUDM*Ym&g|gC*=%F zCv09r|Lp>XkdhxPgGr7TL0C@nE*AE0NDh%;?$;@6==*qzMC51J%Rme_L)Az6&(Wbu zAf{k4=2)h#`>p&nxM4~V5s;FBArPWn7<^?%s*yk3Q?lTw#md}F2Xp*XI zuqcdKwn!$IaU+(s4ys`FFZ=#=2!f~rIe*q7*6E1axE$8(+6JWp;7%t4vq(F?{6IqMBD8Wh({D{7EEZu@@MM*uEiZ~;aJI}+Cr#RV)V=9zFE2}Jk&H4yw{wAwdQH-(g-|~ zuw&Do)r8QV`du8903sPp8!BANb2S%FqS`%=kf<$Ly+*#@T0f@2Jm^luv#=}Sy_la} z;tfVuJmC1N;2o)J?hgxnU!jzn3tthF#a+$B4ft z$=kN)&LHC)mkTwR&#pTOxO_dQzI^7=%bciYl}Fgd^xgrhzAqEJJNd-mr{?<8%?LwH zY?5OCbg5lq%Od!IJvGgpR)0R~zYrn2J;^e@mAS3YK>{;BMw+Be@@*pZSo?Zxo##wi zLHFAR;BMw_te-c@(T*$(IX*J34#}8CHe5*HgfQeT2GJy-_^q&aycD{8IK1R%#tgO? zwe8rxCqe`^em}9TyXA z2oxb6W}Dnat;&|>JG`uCQn)s3_>=0LP|IooG%B9GmcI|6K0m>{IpCeTO{D{*4$nHJnkPa9?lqTf(>erLGj=aKJ2+?oZ3dl!F-*3Kv_7= z?{b7kVzmbR9M_Zz467J_7R%74doA+-_~3(A%qBgTdtODJml`g)|Fvdeo6O~8^BQQC zTurZas*|i;tGbrpf**Y-c)gJaCjJKUR_zQ8cxUVUHf;MovVNW#^yNATrpV14{ogs( zQ|ABX*mHUdbOra(cu8X6YuBMpgfc??kaLhc2V;LMF#UvNcyR%mCrjQxL9pL6iR&!= zUl^Cs+DL>$4n(3Hq|R`#0&qtVG8)3a(B?l9U-$P68$m%ueD*@BsF|BoGbsE?dPX~? zFfqgo`(R|_*hmheFLkMnizK1t-!;HTYrGv*DEtiNlp;!9OW}*aBaV_X_#^wpISJsV zG;3*rNY0l0mWXiZ49tNkeEGr3y>cxqu_T(yc?M{+MC;T=^H5rxbg!(i_hDbS`p0ia z@)0mf=1d_zUknM;(Bc>WI-dE_>7RE>6ozA@Hw+UJlhG$N#n&bm{t`RZx4|tlAUeRc zI7N1;o4T!q;uI0Ba&A7RB2Q&0QxmeIfTWe+zc-kKjhaltK}D4uh$b!UuXHNNG|-ZU zlGis<)m{f*KKcs&P2@7V%FIF7?%Z?{9=I!ClmKPgd9qklI--aSzI+ELRca$1N6eh= zubxR-5yn>(?MG=cTdfdGffpPfe+fkK#4k3+Gds&miqbC1F za5uC43!B=sJnzgpe~PYl-d7YKfkm@UG}`z@J%doUW#Z4yIrnIAUFf1G&$Fe20$YPr zYGgGcDnO|o$H^jy9-PZ!VFwp7uUUNUIVhOJ-kZkMSdP{ZI(1>$gVumxo81~x>YKFG zI^4>txFA`i4#Cew3mh%5!f#um16v%v+mX`zLi@&4aq0u2SI=tnju6D&1|k%F*-gRT zw0O1&)q$S2)XSL?bZ1qKqCtLvAgJ<7XsGD;Do>50c)Spo(o&kNJW#M8D6qmI4+S(T zR*A#^Tpdp@e4U(r_p-fCLsJahVMygywb*qW0d&~R_8*|=6T8OcS`fuMIe~v|Xp-d% ztZ8s~9G3bLlj+#n$_EYmTuSpSJL{SPyorKrQfh5JJSTrq|MaO`&m(?FDny3}cI#TP z=b@&7BixXs#sbl~*vJ`jeig^PVOt5*rEI2PtOU4oXOGr7wH+wDj3kRT^yijw)DX|^ zty~UtC@@EEmGr6!Kjlr8lK*aV*Bmbhjwj4G&j~kv&MTqM5C-e zQEVmxdCr7LVaCVO6-5iNdJG_)y~G;&d#u)%-`3(p+U)Bq`u&#t?1f`;AwMCSLDS&N z9n(DU4gfgoY1c&xXP5g6hB$tpFt_4u`VMJ*KPrD51 z$+hTqU->Xn1vqGKf(Rhb7?H9We<%MUxXj%M$wIeCF@0sGyC3>z?s#u;aU^uZj>4gF zY^X}&#HsyqqV*YB62v_+xh^ zJf5@%E@Gaw|@`Q-P+=gyQzss#O?e%lf-HxGsGjqm3Fq}0rRfeYY% z+l4=*5+{wV1$-93n4A`Fnf3xqEC@+We}I1R5!drneTXbbC0MHZ26 z3PD3peyOo5SW;+1oIyDmY6e$my;A=p3z>JP!EI3;I|w~QsHi5W>IrNjtqlo~0J~Y7 zLKuB0j;o~56eGP{Q^(w)Q#7ttOw2|BmjpPTMYEhM0R7cj(OBl_(1&J>+!DSxU%Gy& zb5@?PDsDeqF9u_3xU$fNh1NQF(n{f8#KK+lXUubGPKpl{r(LX=$EjJE5$OtQzwHO{ zLX|Zpm6VSXTu3clNR$0+yVGLUCr~|$&L3?1nuXSoCqBXqJ6GrY0CD-J{EJWSOo5;! z2BseCD^%47>q5D=L|>omwWn|qBjQgF-T<0SAvnTd-;LndP3;D3?#A=iETtf zo|CO@g(+&BJyS!*64mRg$vHj)Sz%t=2>(EL8cRJ-`A0_vqC(0-;66+n2iiS?xyO2~ zTUp{c$O#`cer~Rnu>H{WltEC2Y)8d?FuXY?T&vV%6%(hDTi%7Ekz&)vkTXbbcB001 z5ZX>RO&mZaMht4jc$m$GW{LixfgDHRo=8;uuJuNHKBo0nl$Csc+r7c9Bwn8^yawnC zpJQoo|MC?vW3|PoEoF3SduOmqOv~;%7!@Bg7(vKrBB0DQtAvDw9tYzE20>yy ze(CM`MA&=wxE*H1BD1y8aYFJ=SqfQVjC&@KdB-Hl5%LZ%M7*++!;_tIFwSiCHNRx^ z*q>+!TW+3;GCKq3?&DDu1qMDzrBwGnqUT^`=I@NOdWY$c0*p;Zcr5e$Rf9G{4ZsJI zCbasrq}SEvM;+k!|vaP;~40*LaO=3vu3Zh z-%CUvIua*Tr*;bWEeH4bw%3iX|ICb$%)&Q|^Q$>gzWyY7-3D~*(EjRG1jWckF|``2e+70Fb@ zzB6|saDB(sseOyDnJd-!vEeEbO!0e$#2ZtSfP66YehJCqAvoPrBYOGG#5I{|^woR6 zS-Sbm{59MaZ%%VhCrJ+noGoKc;?1dWkx&-i#(4Szv{mnf=SHZ0FR*f-!?94&a;FIBl1^Q}ZGei>@xHCnO#(@lIlMl7y8m-`d@fZXM z{QyJ!-mgq3*oZU^LHxJy^HMgZ7o95lX}a(|`9KSXKeYkQbV=$?2`ZylyzPtay(k+t zYIseF^O)nS)y|%%Xw(dT!k~cuCMs+U9M{$?W#9ZO-POB5K)8dCa4zC@Qf7u@A)k^~ zYWhGYzYO#qbAi1dM`3(^bsY;|We_dPDkplOwQ#QD56e>updXr#`0=vCnk2%~={~ly zw57kEVBRjWDK}XtB*&G)p!g7uYf)n;gkqGYoK&gAabCqy5W$wKcnE{;ENzLdrY2-u zTG%G3tNmti3f+qO9twP5KlUQ#B((ig=U6I!*fm>MPNC{wrrAsIPX*#t#=ZoE(H^V6 zr*Rg=$nb3+SE8~Y0J>;wKxzwJ`mqCHO6Z^Vp2K2Vagg%NkP0NWUZpf!q!1M78#DAD zoZ6^rsvi4W+bQKwS`jeA2~rBR)@~KV-Ze2mnLq{6&azjsmUP^DhCT}?H^j5Hi74_j z+Pt<(7^uWf`GmhOg$%@=8#JOWGnF~q0Fh~K{kbqq(?|uF2IzjG%4{|}y44-r;rKa~ zcTuP%I&|cU{Q?T>4hw*48OSC|+2Qq8HkvFF%PL{n?xfHIdmWoaS#sG?wxVy+5)tz8 zvq+OoF}Th{ccCoTo_{j@R%wYTIbf#5@-)~>@V{MvK@zNXvRbwC zwo-M$!yccqT1nw?JxcN9GT(Xb$sp6v$+S-8S*l_yVF8Vz#De*rky__yBZ=BnHDpzj zc41s9ksrh(Df$=A%e{-=J$la#c#^rN3HDP3(SU5E)fHSy=BOb zZ0KLQMymL)t2cruE!5f!PX4mqsT&62oR)_{#+5pWj`5rf(XPrvLGFzuja-g@Tt!i3 zDLH^|3E2RVO5rMPTj#X`-jsytzd-&bv^hk1&Bj+6Px#o1k{neMjc@LK}Gv7JrkTyWDWUU}C#|rYledUd#L*Kaq3A=K;VU zmkcphbbYKl)Gpb$zcOpl{*3D@Qg4MeF6|VKw}Fz)Qmb(EoOVfgEtM=$e~&Z~@-&1@ zQMGpH>VFT@eI1AeV%L2>CXcSr2!oxh9IT<)**t1?%ZVkLlq9kn@U1(Aj{xTlVQ;y-Kve8vBh|e@BdM+0P^WEP-sQ zu^lvTKfLH48xNz;b`{Y4UVU$M;_0O2`fg73QPdWQVZzd0coLb#Z+7)f%Ek>dncv`i zyzz2rdl+i^UGQ?y5&Qf1U-E`CJ948Qj2_wM`P*%;X96gXF8b@ndieCO%)ZQ6&J|wJ zpmb6bD|QR~cd?%5bvg;EtG}N9GX{d2(qau@D98FGa{swhe_o}m)`4dKCzp07&M?ce zQIcGj8BJp_%R`?Oy_7`3{{}jpAHtLXYf}usHqXFLoGHne97PS`njDqT)TwFnM3PLI z1Vk$DfP~z2Is+jEI$U&=vfhFm<9Ms^@t~%7<3{`{PF3F9b^B0?%M?tI$pyml(u4S9 zemVy)o70b*DfBWpw76tAVBS-Nv@4tR6!w{Gucp>m^I2TqX#9fI5>PV@DyzK@C;e7z zAz8=TgZt^K3v&V9!PL72K}w`nmXhEp_1rLd1uk4eg^LF62SSKxrP1CDsr(x0lPW~_W($Mo~NNo za05HmsAppP$*xe0$ENDHSn76Kq8Qw4HJVx{)_5h@{)$y)f@<IO+Wj?sy+q6?Fo1%rpN?10QFTTKNjf57n~k9<7{VYp@V;%OQhaH(OnDrR*R zZ(G+gt&^S_zr&Huw8saRkC^K#O&c#8@!BVNa)o0>s_&x{8%NH8gcHv}DYAYFS3!~^ zoOM+gli~ZJ~J`Jvwhy$?a;M^u4Tdw@$~kATR`Z?${-0YvdX# zNWwQe6O~`!`u|u|_>7ZnJ1iyKRW`_J4w!mV>JV|0nS{)Oh-v;&I)I-8Elj?+N{v`V zLrdAn<=l#^AcSc{85<1=fzFn6qV4tp=87z#C9T>eR;%h6_L|K3$lq3F#A(7R5ey!; zg8)dKAwa5D7VhTf_w}Hr=@TldtIfd&{zB7DEMGu>2h&`F?*UGz76awur4PD;GJmgJ zlO^PX#vP+Oc!$(t*9S(Q>AEj$`XsfrO2e|~C;Cra#p=b0SfZ`ZK8n{4!4NCZ_^E?W zIz2We$_;fOX+DN3a$|y&O!G{n-PbbCSqVua{0AZgZpmG!Y2!kg6DpE zqtG=#f`g__V7DD*+slE-)3;HF!bhLk_5*7Z{O`H^g_-`9p@9+iwa-t?R;x$!EB4Ku zbFanB@A~Kcldgwl8KURtRenK6L6S*Jv9fgpRhx)R`TbHCr6H=8g%J)(3IR>t??xvt zJeN=jH-7RRGO_0+0t24@pDHBZouoLoK4vsseV=d7qz?}?@}1Bpgdw9|woYu( zsAJE-q93*74-9o=xJ@bcoUf2D>FcE6^Tmp9CS7TbxNGNE%~eGK|7oH4vCx@C3vwR* zaVwjXGZ+O*$#aQ!UjQ)y=+M*7i7`DH5%`W>xkFd-&8qL6c?0cH8WbS^a{MB$?}TlC zzgymt#Q^9;%hB4>hAaf)wVht`A`!19%A9Vu^*lS8T_inEk0Yo8siv&3HDs1Wv4mH7 zGik*A=V9q*WY1s)`u9J))Xkw$rE{PfC;21FzP5z`Ge77jBGWoztyDMm1afXkIJ4ni z>X!UOV;*(r3?=<=1`!8(P0Bo0T?VMWDRmU0q&O)^1#}^N9W)YTpQD9oYk$G~bQ_qz zr1T{&Z7fBE^B{NT!qX>V8G12XU zX4eVw@iu}i|H9TUagSX0KlJ=q9YeTDlT5()`BPM+>m&(<#jly1;>;x}QK#nNRMgm( z!2QtxaX9C3f78^V9RTt9v!7VC(7R!4Sn9Gv;|0rZwhRiAnev+WbsV|;LH+GMfjeR?fl><#xGTCM!a^7c^8RK{7nRX}6lp(mp)$z9Ix z;VlE5qv8URJVP<28bwRM zu1Vwc?YR7ttQ4lCUh7&B{rpaUPRpAoakWl;O0P)%4?%&NL`yi!R55nr;qSA6>V&QvI6jIcc3oo1*X{tUbsAvEss9$p%co6W3sgd{=;;uJ_X(Gd#b-3j%Xk*4D$KRZM4i zSBM6Y`HMluEL=5z<%COfgf9xOFU)sFqOqXhRP?(eFRSkFxJw?&_229;J9E5}sfwmo}V18|8?hF8$ya-R{d4mJ=lL z6NV@Qj2G*6@sfvMOB@(f-8jRcTV}4;ePxqW@n2UFe+c%m!cIFXxPNF^_3aP{cix47V6$JbW`L@A+jt*92Et zZmlIrndp#5A|Mg12#`23ktxYP?zJA886y8Pd`Dl==OjJGQ!@mwFUNlJBl-d#ar$es z*n27;Tp)h@onKj|4i7>u{bII+?53|qe13@I+rjb;a&&jXlU9u<%L1(AG)TLvlR))IDRTsFpU!Q`o0))d5 zB3UwXsXzsEJv5&zr1awcPC~6$_5qB7juoMi}_+y*2xT?S%o4L^vBdlq-UfvpK8(uHNI`GOdiCF5a8qSy!2tqF5{u6cWhNeX)C2H zvUJhh@5nH%De`E$j7z?L^dhHOvmh4hG{>3qzOnV9adXTE-~HL@itIkV<4ImV`jQ}6 zEy@jh;6S@w?C1##Sb98CKYvw5J~zRanDJkSfJU}QM7<&bhno%${+BDo5*vq87x`^p z!lilr@kY}DXAt_8L4(ZC{p{-b{JYtSR*Q}*a*P{Tx&axbu|d4db>S-KM&#rY{){Kr zQ|@6pC3k0vi`8+Sre&+2KJ5M7H_fZ@KrXgF-b`;eAwegBRL}cpOfw&kIX*GT1LW!G zcS+6n6ajbo^Yn=o=Jt)`ZK-<#@Gi{gd+wn`%G<=;_9deX*>@*GPd9X8LUjdv_y7?7 z+w60FerKl!P_wNRjE!5{+7`hFdC|lV9>q7Q7kR^qyCGPkZ6V`25)d<(;63tn>nHiv;NU9+n|~F_2m1E0{z#pkkiRL-GrS z_z}xRNa_!+cS3&J7s<(#4kM()TmCABK~Yz9DXg?F8=_KuE>b*!bxGV>)i4yxB*2rDS{Sd zG))<(>kpI*$UAdI8HdR^<2mx;Tydoj=SE>UAjyWBlnys3uN+FnGA-{+MwXI3X=Pnq zN*`KfL=jBD5g!x{9m|51dM|&G2*V#Vfe5vco}f6m@wg}jThg%ET8lcn{R8mwsP8U>Y>!J$pL0GZhu~+DBKzhoy zsFt9pSO`~?q?n}v($dRcA1#5#6OLIjH+~BIRn#$+=g9=x*oOr-Yf*<*; zRkwz)o?*1}$?i0BW;ijf;C{T1sooYft zDI>9yEFchp>Nl_rfXuQ<;GRet{r2Ojq88Gi(*rCFy1YtyRbmiRFoY@Xms`X6G``L^#H*>I1s(hHfzLfZ;bhkG>8w4vU~Y19F4DjDP8&esL^n5xgKI;z z^uW(3?*^Lp3EIscCwt2S*ZUOe;9ujAjvH{4zcLm16PI+AIeE_Ek=zAV>>8^->~`2- zQu%E{&oi3Q8`k8sYV7d10Vj8NGP*u|+A|O8HMsb&{jr*C->l!~Vpj$vY8d52f)!>J z=wf29-<1RN5V2nttxl(U-=SYE_rr0+570P|Eeedbocb#^&q7BhNc5oZ0qW~5E-Kh6Gj%r&)Mef6bdp)#gAo78=auyy>7IneJ+~eKQ)Ywod#R~s7{rq(3 zf=`Qg>q4NmEPn}S?|DI3ADB8?%1|%t9ESLwr$(CZQHh!id``) z6;^C?eSP}$z2n{=vF2Fw#WO#N=f7z|LPgJz;9WwAl~^?G-^dgWl!RRkOAOYEv&b}A zXcn?jSxg$ELTxQ5Xr%2hh#S?oGoe*3)BK4MD(LhWT>>*!O1UD7gJNB}zSG}e4Ed$J z5ed^EB6W$gK;hFq6*mdX`o%1)N@UV#r%9{8sFg9nkeD)XD`rLiX!wLL~QgE@q5#7Y+3|>)f z(Lf7c%pdl0;nCG#Y%$DoJP$7LgfujEWBlQk$M)z>jDcO(&`R`!S(@ZrW7C+YncQBL zuV$`G*_ZDS0i9Hr4_*ee?Q<)(R3o4lP9A32Bh#_gS=ErZ^oL09@W%F^w=R93?d${w zcLldwJt9HDw&%(4>Z9mxeeD%BY2YKN!Q|>=V(wS8FUcL;NZm@ zURR~O7%~}nkeD*a#e+8nt}RM}XsB+D3pR+Vj3tr4af$6JhQYPTN`zx9iVlEBj$o(YjAPlMg8(^&f>*1Xsy>XveK96d`s32TJHdq1M&UiH4nzu}^Oy z8tV$z6zfEzr|dTwtvrlx6K3y?BY(>qLY9&kLX?(~sB3MlWhgyftk;Kr{}S^2#PWF3 zSKwxfC_NUag-3mwk8Y`1ETq`{^@wHB!c^fj?NFCDv7z2E%QeuMW%kQ^5DyZGec!aZ z7k{pwi{F6qwN3%cxL*?F3ld4S_P7*m&jrNNirsW<>e1F>;r5fB>10y3RBHgOqogrV zCV=|F=RX!U)c>`xd4gcx8Y!Nqt3Wd>!qf%L|HT`VD#*P`nbwKyOc`PM3#{WnM)GA%8%xX;;nLp$wY0oVW>~o`(P$-iBwj3Kr(=N?>N*V_=^EO47m4E|Nt*Q~T4qFm;LVR4s*K%sp!LlnCf}sn4ayN4v_JUWf zQ7B(+5GVd31_Qc*3!*C*B9UUzddxSKB7`z19GTC-j0P?RNr2YzklY$?gn_2>&HU-D ztwlU8myk+|lB`ZSs$chHKP`)Tm&{5({ z&Kw-DJFaQfAqy|@;}i_En<7F;7 z5w^bWtG}+dg9>4wJJu6oryJft*cuVfC@o$IarZ4kw8b+{LaDgVbVbkf#+Zyiq!C~q z3QSdACqc*M>kykV>K$sb^BIjv-^jOTjZsOCdavTN8+YAn+0$ z<)DngFG<9Gh3l9ntdSE7mp7TjtQEP7T1rmmyRhtHXNIR_&~US@VYMarE$h~Au#k9a zN{qy(b6;_5R|}O+<14-wRukwdQJRm|MzKL>p*$~iv$R&X`62F-s^`m`zeAT9$^D8> zVO@DRIA<(-Z=g5}!yzdek}^S4U&NS5gdMIeS15Lr)y_L-W?M%L5e*wf4o|7~pB9mP zaUCU<;^PuVcfPc%f(~`AQ9+KKUu1K@rAF$F0hze_HBG{NG7}lk{lflB4*DW+WcpRCC3j+*~Ah>Bxg^u zv0W?F0nDw}gO(j1fv$YU0N{h=*GD2l--YZPB0k|cQQPr_jtbvhHO5F$e1IhNFGg|e zBM@A+4Cg7Rhr@uaIE&YjZ+-9*F-H4{CqT{4RRM!HiaeOROF|7+MlC zR|f2g@{7sTfM#27U@k8YXK3~;ng^Q@v+91~)-Il_%rI8W<)w4(Z;T%GD6vuphYk0d zd&?;k1;r;nefYhk{Vpf$vb>S`3WY5poUntle`WiBC$7~Vl-|$2`*UsQ8`Kh!(+qDe zAs_oXwuy&!Iql07bg%>l?q96u#(xq;3X=Jm<>w-fXk-PrqhbDCF+2!nN@0%&v+y%W zS>g?F;lFG*x&6nInsnsVxwiKJ`0Wz70^0ez2s0o<()liZ@+bDcZ)B3E7gaEQyCuD^ z)=1?*QYin^$NA2-0u%h->+HL{;Rn80GFAyO*R8n~doYdNx|g`HwyX6!nG%;AjtQ=T z;*dopqFuzgi2dFi1=J`7@_`CKi!t;!EwRuzBp;PI4nAXHcirJ$v7&;O(vDb(N@#p&v{+SJ+Av{Hq0saOkiiJO$P0g6?VHp2_3 zf$EmQRKRINSE*y~+10tfE+&%;m5oAVVyG<%<+5BsjCoiJI0hy9BYJ+H6%iJhvv5#cYc)HH;F(-Wa0o zOjzr(pL<@WN_|PNxDVW^b1h&pY_%eN+}A!c5R*EI%LkW*2(CmhS_IhwqV5%AjS>q( zYGt*ZziZyn^Ny80fy`HRk}A}>(L{gxwiqEe(E0>j6_kj#x9gS4C-CJ z5@v~uqolq5H9%39y&J23yWLrd0MOZ2u6-tQG%9jAU)dmj7k8L&Z?ap392BjL7d_ql zpcY`5%*NLe^Wy-^xtq zo>hk~;pU_5B*;La#i>>p4}>NN$TVol>KCkn8pKaUe^?c>)p(b{Ab>PLRCtN0$@qkU8O2_-;Pccnkm z0P%VisrcplZGArL9IIN31SKk4lR`(H-MvVhb0KIqcZOqau&1~@B1woMX$CKTWuaUW zk9h+2^wfY@BIfj>FtKZ^RjUWP<-8!<-z6_m3GDATx>REMvr&P8MXwGvJbcJ?jU z)>95Wuhuv)?AdW5r}Vg{g_R=>OtWP@3Tnr*LoUUYTYB=BV>XtYCK{m+n^r%xCKcgM zl#c&P{b0zR0E>9f&Xe5RpBUYnvCEp6yMjH)VI5dDPcb^O>hE zom@x*m)I~bbO@5>Kdx}@kDt^3afQL32Ep6?`Na-EHGm~otHZECaZWT^Y@|SvInlPQ zv~hUbY_jq&&^k}jY&G?D)x$0vLYWmz+nA<^rdAZw4SS*6PABUTMjT%9#0R1&r*-lJRUSXhuN1~gqRLi@IA z`xLr!=2BoYB}b#}&qyFGT@LNQ-dy`pDHg@`X!6iFYz8Ia;)f%U4$&8t zQNe{EcuA}7z~(4JLBYrd)pZ7ug&)P6-aCef4&?lx(EXE`{ZhU;nf|@s^=DWsy+c@O za^GCe-ucl`slneW;iCqrlYwE?Mz!l&D9(8Kt)MN&jUqCS5>ta5fx}TLj;J}<7?^MA zr2o@&J)2O~;(}D-x6Uh%im_;*x(f#iGg=2?+!3*jw{6~(oLHH3?$NE65}4qH@pap1 zEGH!JLi`G51tf`<0n?!bzz3A3EyxA*Cx}~naSt&qs>XUx9M(m zq-8f&#az?~?iii>QpAc6`1}Y)uImYw?_5%yR+s3&>-Lr18p#44Rpgp$Rp1&X;BoBU}7O ziVTz*HNkkFbF(u1LmoYw<>1G|r(Fvn<3_I&pwY z<_xrZW^y+!L=6RMtjjA_|Jjb|l7#7yf;1x}X-LUG`}@~v`vnH+0<#tGr8kXfs7D-E z5XoW0G`rSef4%PfYQ zIhyfanR+f1fG^Ohy(=4`G!!g;_mY7Kmqk0zveJEO(sIgc>JQ+Nq2l={Brwri zXl6!D_m-SPUw$UhG@)c!U;wQ^_Nd0|_0x^Uch5#lhzfE!Y&PTU8RjD6_sOj3?%%cy zt0vi{t^72M6HC^;turvqUdiUR^+^r6eG!m-tVxx(H1y_N^RUq0Acly3fG&sf7&GmX zV=Rb*IW)lz3R=BXSsKs56Ct~-|2-h(ypjH&zhI+=Pgkmr7bGVW$d89=}VB6_S@{p z#j}=9lvG+Z$w1?{D9N!@s3RAp^K_8NSN6pUiK0YZ7_snZrTRpzS-oW0T;xF8M!;*b z3W1`GCa&z`!-kD81Zc<@4iKQU#-zQoJ+xJN=~l}5b2@ga&9}v0m~_5)DK8Px_f>PF zmCW8|jC+4?CKn30Lu>cLq^zb^Hpvp1DlwQqy+uWzAi85lgO{dqYF3}2`wppFjO`LuO#p+U=VXewD;$Pd9}|fkJKd$HAgYuW&?d&dK$CrX ztx+JH{UJ7tur`*9l*5(jZg|mO=C+^7Ep#3UfpgJ_>vYdja>z3gsHc&&nAnEz5W{ir z&A$R#E}3tpTsxo@IL<(~huTb-;>?H4NyxlWxVpCQrnn(z8-^o)F|g8VkU1w;pdn}x zmF1f6QpQ6Omh!mSZnuI<7SP>ss#}04w1`J;2pP-iDai(eOGE8||Gm`Q-)weni&F1! z!+KX~`1?t*>N!=~noK2vO;}q*GHj|31iWWYSs88E9=@p!ZKzB}rMk?=DcHw`-Lq!e zh>nGfRt>t27{5~qhhP+cEwNPfz*H^PKrDVfrx%a9ow-;Tweny-g61w0OmB5e!^XCJr4=FUeL|DpZ@lT0FCTja)wApiNxlg61%$}i!O`_>=$!rc4z^Q%Sy z3do{j6jlLoDN$LnOm-=~^>`*keshCAJmJU}_~n3h!kaSfwt3Wy*L)>dxIplM+gx$X0C@b&5H<1JU7b-4`?;Ye2-RBNLc98uNrLQ{=c=yY=j+RsI^vY^G{KpRu#?$z9DC)*f zJZyyRPHxbjb3&GBcq66c+!=D3g8g4DpiJ8y#LPZIXXnTMOpcg#Uwkj_4K@B(>>Fz7Ulp1ebxB`*mS2g}C3(17 zN;pMMHq(W%44qJQ#PPvS0QBSwU5jFB*53gB^iXw9L~B-f3edX65lCoZQM9o{bVI53 z)o~08Y*fYHTq^CYmDiZclbmTqxPA~u8tzQyl#{T@GPW*bwN~dQoI>_2He)xSSfCrU zG0CKO&`CC`AlKAnL}vX;=y*f_YS6+}KMK6_JC!0bs=)FJe~TA$jbUCaOtOMjvtxB3S!4MHATl3Z)KayboIR{{ z6H5awWX3IiwX;g`5QKddV>0!+i&Yp3OCwvi5YuNq42!Xbw~t-1I8P3bW@A1p z!T}tKrQVvbC9h&FzxUN&R|qye0>E6`n?PR2~=Zo+`GO z52ITa7#s0rvy})I`W&>;noAX>iD^P(VPuedjB?4lk`1|P2UV*zl(C_i9$GaeCnA?i zjUP9g46NH*o+^QzHbz8N>26H2v_c&--_HwpZ{vs#6a?QS~(yvt%s<`idbT9)=D^?ioxA zrEC>jR;c1drlu@E4Lx3s)wNZ}#w%?9>aaPdQhHSq=L&Kxm^b@$4( zkl7ZWp*<=gmC-54w`dgrg(NAFWvy(bPy=W_4dGV-Y=-k6K$Nr!Ff>3-?hv-2Ll`V_$r6ntL zFXRm;orADpfmg)Vj}&syUgg3ev24(eY52dAqn^wEk%+g`=m& z{-$og`8B&6t|6DI?!iVphxcP@R4w8i7>5kl2sL~nn_W_ah7xTUTbY$9I0A1De!T;Zbv4?zRPk%!|sd8UGJH zX^z2Zs$p#7+rdTXfgGZ+WRlYOFH=J-rp_Q__H!Ved+q#6M%?#53 z^it~TW4a(KFvjy*^1;9rw@W_L?d(Xf>1La(0m>JP%2h(RcH|1T%61Fwn>VN&$SH~0 z<&7E=Tw-p^brd9Y2>v$7y9826WX5A~&3A>5T~V9O#M^hB9!lrl!k3$ti;=s~lzrjk&7;EXcqI)k(Fwz1sjFD* zr22ME&H6Ctyf!B==<+OVBt-3)3!&kG&U|qacni|~X6ia4^2oei3uNLhzp5dZIUK+{ zg3Hv|8r;ynuIpB?3dYW@QLCcGa^dP0bw5pJ8$<1d_2Af5bj>Vmff9`3$oJRn^Rv@$ zG_X)!9T?=`G-c##s8Sdw?ac9tzyBDEC>`W!-bg1v-`~Uv2cI=pM|3*dE@V5l`&Q7a zlFJ!LnYU@S&7oOnEe}LW!Z1x7|DZkmBMi5!tU=(_^*~Vdd*zkGx!2gjgiHDx#vYo6!?r2 z59Poz$VXB>Jo%nHPR{MPlACW(a0Je?li7!psnz=qji0W4yb#1K4dG*Zc~@7v1^iL+ ze$~c(re#s3al*hbUPWk;o{JG|o20Rbq1SnLA_Jxkc0D9&GVbk|5TrjJA+J_H(Six$ z&U!)%a0-VX*W*y_8ON8+2GA_LK-3mMHKNrJI$M~)Ab$g2KMoF_o(jPRZ(bjTEZr0lE!}4iP0!tRJw30?G7FR5Z zQi^DG#M}RY?Cv(A%bI6WB}{EhVS&QNYfT$F+IWDTa|~-R+`XZ3V8A*gfy2>Q#M>0f zjsqVh0v|2JAx|Pl#yn;C%}vL_P^S2g_6Tpt%q@JuoU+;>_9ITwI1hcbvh7dlPDHk} z@gQ$)PpKPK_cx?#cxMFNo0Su@#Gwh(Fqr11@^hhUW+ zSq;nc5^M{m>c+Q~a_sF&cQ;Tv5M@*{!HNtb4TH5(<4Ds_w~De16ROBPuA~hOP9HX@OWCY|EoRBf#%30Xoab%6WlQ%R16!xR9qS>57({4Ke(R zX7UWv(y_@gn;@n}ihpV8jR=(7jHKee?z#VjyP;qRa5G~t5qN)DH=`a5gQPw-+OoGb z9qJ8l+O;ztPD1w-igs?n3=5@qjclv}aRKNsZ`)_yPH^Uzh@ZHIdJ~!)T4~DXu@w3e z@HIXTRT-MkMP*@YYY5ik6=3<=ujm~0$LqRW>72k-bnWU)&XTwH(sSx48jFzJxm=+W zlT1-G!6kij2-wg<`q*qyQ`4ouW>cyZZA^Z15~6kRG%axHISj569Q zXRVpGu4}8iK{2P|82~01wWBJ6*JB=37jxJ0hk#6Bn4K1~tVPGhOk%{Z1swR=p+XOH zw2nD(uwfJzS&)IWcxn}F!J%&H0_{veh-+mruu!tU7qxEAC0&__8e40QVUSgs;gDn|* zs5IR#Eh;e++6+j(Q0>1j+KoBu1d=zARWKVdU?xN&HH+4T-KH)ZyMu6ZXY6Mx5)|xo zcx9q8mOpJ66@_8MpM610SbreITbl$WzjSQ7q;43`4Hk}$W31R&jx2Rc(D=uGaAKNz`kwE;uV&DIVE9Qi4%lEb~>iCWEEp=g9p{5M9C!aGYyCqe&y4zBR=3N?PPZgI6(hP?(eNYs%?7z$OK)=X_Gx2Xy?b9dGEj~nCN3fa^cCr zxYpe(aN-{qx7io#uV+@;fPmTarbG|avYo?>qmYePcaM>SZ*t_asQshBbrOSS;tM9; zr>(=AZ~Nm3#q5RJEw;^=Py+^G)1}hg@8z?f^XXJ(+lWuYKOIlWtLkp^y;+2mbc_I* zcg9&9;N0lQ1+6+o+dhtz?}@&AOs_1%Dyq*50Y7` zK8o_V#pc9G{IvE&(Zj*!Yz)cY!Kl&<151g8dM`+|RXivVF;41BR{D89YPFvGG3`Znsyu#B9BvJ zHV^MY`TN67#P4)4!P+O=Xy6^S ziE?JZB&B$2dQ7y9EQ2~-_3%csQn6SWTZoe)l{7}MQ0}>;AEw9f@(FA^n!VlN@B3I` z__A3PvlEGb1rw5}o0@Rks0mR+(lBSGqCU(hcK{0s{nWr4)+*(swoDdBSFsraqC{`Tje8H**X^}0Q?CEmd*NfL`*ASSh zcWFAph5NEnQF{KB_Uzr&@X7{x)e#HcM)1kd0n8FCf}DxS-B7;OJbmnGZ42-XB};K3 ztTm5rG13?CmJseL7h^)cDY&AUImnKk`!c@KS$8~btyh#QV7h&jhm|ayCqto7=*Zwy zx;^kZvM%H-P+UX<7o#2XwCj>V+Q^jP)co-^9WeB+H{#cxZ^jM!KcuZ^D=8-PjJC05 z)LSZ(T6wuwF=kdqku=+gC(RJ1DXs4b_Jq2+Hu!_r&dwuqjW-U2EybBBJ3UkTuJAJi2PH8p?K_IQA^jv`^wwl_4xd#Je*>T z;l&XwuS;`glp(Y+$vL&K`EiOV%sgu7;$Sh-$Wl(87fXz*`+%Yrmqst zc>YaLz;W9(|A%wa<%Ivb4_=C{JY6Yogt_lU3W#{p_M<09G=!XA`V^Zlz+g8D4+PcD zMlC=xSm-sd|8pKnY41Y7oGM^b;6l+WU0(4#a=dOzoVm}x1}oj4#|5&7RKI*I&5{6W ztK>@Ja$myiuTc;21PEU02b=fi-GdI40hH?NeIYTN!%aKqOV9G!Uaz5s48t;ScG>rl z+)DZLw@WTzTZBIKxYmt3s-F0#?>E@fzSbt!aVu`{jWLua+TiryJ@vglgLlw#=T;U{ za+H8JuWZ5hsy^r6z0XGkIot}qT=2#-^^Ue>n2vY5`Db(sjmE8i@C9;(!dsmgkY`pB z@t6+{i`%2!zJiYBOnR%zr@?U#idQsd&XeH6FxO$???ImTmY%B=D^A^1^?FEM+&=f- zt9zuo8jBK*f?0#VsmeyZveOawDHVM?IZHV;Dh8@enNS2cxCF#{fS8hn1d(rJ&Z!Fq zvR~6JW7maSb`yagpx9SFyS`a~RQl9?@s1r_dCZ%?#+-Rf%3V%J_>Ahs_&6o53l2h* zUfCiE9*4{t2-5zN$xLO+gJ@7YYrIp-wk06{hmG@J2=2TTyqY5t?--59f})eLN6PdZ zNUXEHNS#t$nr~g9e!1i*lF1ZiCf4Djaw#STf~jJUk~};`SF#FVq;?-ccAN%TXwDYm zWt7lwA(>~bH%Re?TQE!qeOj76@4c3Ok@iwT0=_-*QXfF zfcAOlF)VT0QScziFwBr0XhECR2$WJ9yFkCivqoX{RM&6{C{1 z*Um~c`I_iFKI&1Te;FrHFUInghbk`kM?8U}VLh^k6;Zvnn)m5^B9NXP98EVA+||$>*%K42_oUv!WBCplOFJ0e;WTs8oRjMxNOm z0{D`1^(`+0al}j0a|$tRGO@Ry14yflY5a#rU1Y+3pRkB5Hjf(ZMamP~lIsGRXfTQk zsOi&Xs>MsG#}Da>&4j$_%uGSx*y8k3eKcgxCg*d#?Oj5g|6|>we3%OeI5bk1}{Daz*)NVDQ^JzQL!#c_vRw>oPT1+9@ zHr~OEN{VocFfp*Y63_gtwH3~Yf8-dElPzG}mb4?Y^N}}S)fGeYkqwPl%82*E1b9G)tPe}z?e`1$%6Ob)fiLz7Sto;e z(!=l!OW5D48SV^V$*5H0CA>YNVxN3riQa!!nHABOq4Rv1y@UP=mdP%rAK0l;3p3IS zF(%Ry4AS~C_QMsz_b|`&S`Vh0*HKPaLCV{}A3}NB#HgKfuS^oBx(_b=wv+(nAR%}3 zW>YN3@SMf{vP z*@=FT4#o#EGxHol9<1B^%%;}}j!>VzAUwqY>(%v#&AZ*6fyGkv`OZIQR2AEDLI_{V zfu)s792*gXM~D!jkTbDz3vtx5U75o2GUssU3R|W0=M?`+Fg+ShAG2|;8y|c&!fGm2 z$AU_6d4S+u#e-VM(UpW0{2v!9_6xC+_+a*FMZ4nF-x*^qhD? zb$*)bhK(6LNCgJ79ZO?m?r6+h{FOm3T+djp7jEs}9u>C%UT1MC=kVZ8TvA`xa@*H? z?O?LXQ<^1Q z7%@{ z*fg4QLftXV;&eK4(O>i>1vQO-?{3cI>RW`Dq5TEqj+b5ZO;F^en{@Xf?nVNmChWYF z6>hUB6!URhI%=I$u82qaZDjOWm3^cSfJxN7>?7l2*-Of&-=o+j{AN%|zV_O%wrY=} z%=Aii!gx2ywQ_CJOjYnWc9C^nik})$eilp2Yt(@COSkerOEvCAvD=k3#JaAla`~t$ zD(YF1oxGje=lzxNy}Drd7zWFja6`Hu&|zI+tY=XCIKQE>qpTRoC^peX^I_!8sOJ$5 z5MPlEaPguK_0FM4Ofoo2;8-Aj=Wd_Uy~Kz@E&Rq3RZU8zHHC@+;pAt#v?{=PnBKPx zD#lNbKF?eu!HbQHvR>&I=EHaOmum)pEu14R5C1aHO3oj?U^o^vW2UZhjXFgV_k!p( z=1^~wwlfyhsAfjvRjl}VaDQ?h=*XWq+!mfki;n|xRzuCPs}x;L-hRT6ehR8EBNz&? z9zhie8B4pIPiviGL2h8#7gec3#&@pwycRehQxS4Fr3A( z+g{7yG5fbN+pGbgU|9^#;>+KV!&l!N&r+UWO5BpvyJD63eJ6)-`$TY_@R=GIf`cR2-h4(~qznMY(rqd_SnGNwiL(I3AP_ z;D6v7QY_w&IafBRW`Fi6yLbR1R~2GC6hYnd^(~|!zDcy9o3w_M z-Knvap=@(TlHqaHa?xfkd02aO%Yj;eqgG=dBWWX)rhki*T zcHQ~X$#;OS8_)9@k?FOZbc2{5UPjrt9aATMIlz!=fGK>kGKo@BTSqaowfD^Zp^xi^ zZ~e~h8>(CIY4y4)QKx|-brMz6BKu@Z?KkzHlq1@Y|GQFPEmOwZ73InY^V~Hf+e7j~ zAN_Kx#**u3kYj09TyC zMxn3IA;YI3y)KZv&gb3qy+ql0@Nw+Q-KPEVI3`C)Hl^g(q>WTNc#^a3Q0!Iz%+uGC z+|Ayu=W;FAQX#a%#96@O8)-ndj74$V$rZmWk4G0)=Q==~SBG4hB6xs{C=ZD$V+7~p z+Ur51j*4gTcxYsMPkKx0?$^F+Z_kCt+wwMDQC~y~`IKY6P{rkw4ic1?V7dg) z64&X`8S4XuMCM20D0YuWqaR1MpGz(nZqE~LRS98OpF6(9&>8PnE+6lod??xc*ZyG-Lu?TA7Ipa)JRX?VaUzpQ4Ll>yn$F)G@8g{YWQib&mvFm z_GhJ^>!}o>G>4U77~cAI-YmCM<;p^tE$+b)VYfC?s?me#ulq8|I- zk)VC=7hoFspC?wS|8p|u|AiU{MJqE#M8#>|4)!ivz_YbJL@(mViHR1PE^7iGtQYKW z4Dv74YIc<0$hrwh)^cG=SH}_TP7&_amEIZ;rh$BO+NaVE`xLrMWgt|-aw;l;?uKM? zwqiRKF#?Y-t15?P(x-8Y?;6{8)Ty}qc;h!1zOXaXHPeOMPoH?z!~nv$aX~Dam2lI+ zxSN=cWlHfhDh7oB2>R#f=QYxxkY6>k)iSiiY?>u_$Fg5chU@49&zLaZM9gHB!Ig`Y z)QEWsDLMbE1<;_-LMC1rGpOnX@eeC!Wm#L}G)4lZkpg>CuNVpJz%v9aQPkA5gy6{| zARu#2$^~h_f;6l{HB?+_ioZu=F$KH*%3$@B@(GgQe4$lMsS+OvxQ1?Ry&_e3e-rbh z8%U)ZIY8&!X)z)XN>aQ z@$N%Ur67T1HHUR%DfN%5p8P?7LT@P>7yU{HzikHMAvPZ|jD?u35PNSfr=>=V(Hv6h zmaxXi7&qSP^JHKWTnvfUaL8d<4%9|^9p{ub0!*m-sIO6;3)UAuH93xk&~Rk-6W+SD zI<-x&48zlt)XgHjM<+YHZMAGx9_eJ;Pb)A}Z!hgTUI7p+Ez zS^ieB0aF4Kqt?3DRr)98d2OeMhGBK`m6r4L3=ALw`$>3lGGSZLV-p zcoE*uYHPH?!^jF>V`hd%p&_DtU2^tB>f)#5!Jkqa=uX5%$Z-D{7+xH)K3g$8!-?G! zM$t{N3c;H2{T{h|rN+AHvryKSbwDRh%=xEgX4+6%?l?;zBS;UZ;{Dy-d7j>O@h;&? zSd?2smOz#_6)KxI+9U1ghD|?NHhrYOk8u!Ny;^%M)lx$Zyo(4|2MxP4$~DJiL|mq@ zf0}$oS|}xTEy%8@0aMz|TL>_+;aEsGq<$090Wh6vshPWyU-ccC_cbWISsm0tKT=fb z?`&|mGx;__F&2+fusQ)*rS=O*Ctg$x%cfoRqese{I8}i|Ex(sy;u-GD8Y=OMHL&7@ z5OUfJ-O9~epC_bjNLQ$ag7TodwbHgcyi664gR9VvdvKSjEqJkS^GMW%(v3It_ASDC2Ys0O>4*5ThHXpZ3^_ zTq3KW$?-%@dmg%C$NtM2NQ;|~v8g<;kY5nWCs;6$iSTtD$2l9UKuEZY$9wk~&d7H4 z1bK9MBoJ%9IOTa-_@J#nS8UaEFW2=U%Ls?6+Rr?*Lnezl8h*_>Ap;=R8S|4*Bky9nhTon`4jE z2hdKrE_KV~Z|#}G`n;JxG5IVH=o0Sk+3NWR zG8;Dob1q{=E`wjgnh+v3+J4wFLnRao_!aMC8^4;)5pja0@iK|izmNdbqQe!qF!=hA z|6U#K!P?`!$o=m0o##p*Y?`u>xm! zD4fSVDbp|89J_fS1TVJ+aLqh3SU7T8{t!58ll? z8;NzQFuoE7Eo_qI)`l5rtIoCl=me-i#aj7pQnzeWJH6Akl#e?ovdK(!JXwk}%SUsX z#T71Pr1LOyv0;jQ85pf@b}1-fX9XixjQ2S{W`(r6ci;M3i3}Wx+{k(0t4e~PSy=e8Cts){SG`la?|5HFB+e_TmkmVst1TY5$FKIyT^^)b@UU>L0m zrIWnPeDOiJcvP?xEPJ1==(d41mY$rn>NS#{E6FL_sY8Lb55i!KQkqq3SxSh$lEF?B zqR>f6iADyY{Y>R!SV%e*vF%unEY)yP8F1(!Qe_Z@EobDZHZ5K17T;)Op#v|kH5?eV z^~ZhKd0Y*f^iXsZwHyw#8pbcR5Fe^d5&GN%&cs2b8&ZElXc(c}T1gkq&hWWzQHFyA z1Ou%=pKj2lyk{Xzds*$SPY) z^%uxp;WYiZng-jPjV0}nf~Dx<>)+z*t4Td?o1S%xI#|(mRu!nR2a1my)yfPFN14)S zf!&Ri9EJHZ7+9rRB9DV8?u9nNYTgr)Ou%_ zlcswRm1F=dni3qz1}({Vrh8;Wy4{b<&oVF-^9W0(J#ScpRxdb}uBl*On&Ed*G*NoR z?DR4qu1ZmCiRXFY)YEGA-CS8ie(XBp8i9{)I>uE*L>CTqrbYbfHPCd4>U`PG(3AN5qGU|jaPk>M0H0D+$QKmGiB06pUWI-zx%K^snt`4o{ zjFDkLsRM~A{sOjjPlz;F$W*C$})ZZyNdw#B;JufUJlc##A zPjZQJhf}v`>!L&nhs>@CUoEN?%Jxiw7*7Thl`s)fyJfR&6}4fy zaNRy$INo0W*=HSOn2Et46{ z)qV#fdwH?K?eECBA6DoB4x}FpJa`O(9h+h}Olg#8e90j_m3cUm?U_n8EM94vKee9t zuG|z7F0YuLm+bAU2ie1KvwYpBZAF7$^&Sf@7rIuw{wcd>9#%Hzn->f}5rfIKZ(Oa* zVTEG<%CY#J9>;I+JaR3`No}>wZ%s&iPPYYzqv9x>6i`pG#_g(6CpZTuVC7l?K>=?)Y@D-!Qdha^V$tC@Yv0V)t8*Lf4Wd zW`bv#o4l?Apbq&*cQ=jzn2mSa)@6f;rxla5J2Yqrf+$4yVS%rVuCVt&)bFaMTMzX) zu)1Af!r8(H2W}gUL)oYwMOukRv#`43hQbcnS?RlS zD=RJGKFc?7)JW|bMMc8U+iC)E=4V8_?fnPi5sZ7o1S~5WYbCgGAk2=~i1a8Rvf!N~ zAUttM`uL=jMA5`jrH-f@SQSHqnk)Hhk}~*JZS|Mrmbt!`xAYR2R;U)%;&>sw3;yDE z+T`?!#@%MZmU^V37jgCdMwVz*-*A-NaQw??D}3UmvS1Qg_-AFT{4nx=%Q*G-`p~9? zGBUbEdb5B#!(jP$HjivjmBlaMeTOaZHOq>Vmv*hwVb7(LoKB<36-&0FPjoLZys5*$ zE}IUGxh$fCmweL_R>?Es!476X z&Q6Nd@MvHOy4O;h>@6#{PU!m-EwT*F z%)21!XvmXVFnP5=V@EAhR?Aa z-F81*!0euA59#?q81GwTNqBu|3*?(dGvSzp%|=HNuC5e?gEOxJVb$JD@1$C}8R0l0 z?Des+o&gzoKf?^kYh~Drqr+Opgf6t4$P(KFI9e>~+&2yf#6j#8a`>=}tR_0Gahl&M zwN6SUwsVN8I8e)tmOZ@uXko%REQv`^6Rj|wNX(>2z;K04i&O5)cjx62bUm-GABRg# z$o--d^~($Qy@gd4@XTq@A1p5;6ErQgFsKv?_*V?oGGt4Bg?($Y9nHd5nS&RY@#E?Y zyMFt9Cb}zgP6ROm>I)3U_Xg^XMqNAZTk39JNJ0+HIMRf=;V&0K-_X8N3ym{!Q2*g+ z(cY{giHUS5WiA{gW_GCrr*AgWpUx|paj^1A=AF3?1u7gncihy9OobYveM`Q^>>iIE z7#2_+=SmTOSbHV)r)m{&*jS2d^x^boT z9rzV@@O60kgb+?g)Q(BhPeZV=a&;!&0bN`tRaTJn3@%O9>QXAOTlIYr)jYRl1#UCj zrNDj)ARr0u@J<;sANrm>K#|LSDH8v=DOqWzvR;JBM}kK>7$I8`Dc8Wg@5$|@ohh0F+-5JT_7A=0G)JCaD$im$Y5R0q|p@y zF!zrwYdqO#8|uTo8)Le~!Lc>-@h%~z|BSlCU_F8ufj7oCNo6?(u)7{E0x-?BN_EOD+|pK3zLA`k_&YjPMLCq*xdaNw|QG} zKxoPqu1Iq3mDahfJ1HjxZABc^uyLj(&pz`7Pw5np_RCz3dN z&KfELzD4SY4_pDmL^~I-(W~kQnQL`mH~JQb>VJ5Wz83!lnrA0qu!p9Z4m)9j3p5=^ z#EOj62lOVZkjt|Pv+IbL|5)>1 z&n%LW_|7@B=2&CHV&@Z0mHE9p;4oVDGYYz{b{j1ry*7PREU_%v`d($rZ@uC#4lbEX z(rzup!hwjBDW7(q4r-&d=Ao`~AAwopgqr_x=zp^S;m_#ezcmb2%cuqi)4I3u)y%hY z1HvHATy=@TztnySzzDVN(CK(u8H)hCh#7I^9TL= z5b-;*@f|oYcyM})$cl+js{h_c#0EOQ=% z(L=AOHGYQ0siQMMF!$C&PMC`%i$xr>aqCamIy7rnCBMEQT<^G)6emcUjuoBbRZQ5T z55QnQQ(c8Ox6|mXoNzu311p9IUwl@paRisHa{-cs(?Wh`E8yR45h~o9YOd;DxXK^> z`QWA9rO$<7Z>Gff$19@cBH6593(kAq$$6BPAa%AP#r8rkm4FnS96UE(eN-Q&IHlBy zoK7Cc9f1WD5~HS5Pza4afgPfW-GvHq#u1(DjBbp&w&JdcPzfu6-40I7sH_)?*J!8V ziu-rLZ)RRg?}F?RHE$7higWo%QKfB?puQcdQZTNyN^I&4C zVaH0dCtHY=1*&{T#`h5bE))ekv*14~WI_RbjA(xqc5y`IZP%3>#*G+;QDWyZ`=Xe()a{^>nz;w4{`xtAtRD84MNjPGu8Up^YSo%h5WDlsn5m=Y0z`mW<`+|ue{Nc zHsLJB<_gj|lf}E~R_^MY<&fSA6rUfzT}uA}2jGtM6f7NyAl&8LZ`sv@s&Tc2q&u+k zm>s-r6xe#mEdt;4Q+_hPTP$vLonQX)#r>Sny0-et7f*BAJ#HR>fJMce^^HsSRPB4f zPsnpM=&}g%&i5W-CP~}I^^&8hmny|*w`BWa_J5bdPO*J9*)*~2kE-|(>0NSnOC?L@ zOC~AL=Tv1Iaw{ifcvH|ROMUhs!rG^;J=s2Az>BZk6?*Qo_Rec4=WGLr&8vT_b@otm zRMkQ(xsg?+|LXL$ps)8GGO>AojiiqXUGc%C!k+5gGv8?PPEbjYBBng(TD#Ew`@}Sg zQjW~1l6+v%s>(yERxxUVDSfk0`>?QmnagP(RtO5FEpiJ-@H8%*-ElY8P#>%HU)U~S z(o1CD(SiF+IDa!ZoSJi?zHN>7>xIf~or+=3#d3dwd0p$s-=|aEUQaIEH)hwdgMemG zlV@{$T|?zTKLxkA{SrLdSHRoezCG8`a3OrRpg(>J%*sYk*Gyd6<2HP{-T~X5_x!_u z48YkqD@2QPTa>WC!o_Aq8U^|Bl1e*UlyQZF5rhcvtX~RePkX35ABOa^tp5k!Ch*@S zn76|2KM}hb9=hGkNRwg#H5xQP?!AnEK`9ghKG*WrR@8yr`2h%`4vUJ)stsoCK}(t$ zWGSq`(J2R=N8#U_B!iBNXbBd&FCuJM>)4Jx=hqv>20LC`id)oMx<$r3?iV{)s_rSA z9g>Gy#Gw?BNSd6>NQsw@K|_^WDiYDxruGNkVtC zQ-~4v-JgPG_F+U>HBVf^OFZ0C6UtoXuU3Y`MRIOo@c@IAcu!vdE_@-6QPc(8Kd}G` z5jie#7I>i@&4H3p%KZmrqHSs6{Rc8qRw)J*8vOH0f3%nD=4xT_q>@gk zLabIRJGiN#S`ch`NT!MoOa#r9Fp0{mt}=MVq96|KCE+#YYnv`IX7t?Cl5)65I9$U< zcxq{)Kz+Ff4I-D+{;F%3d{H78GH1ciFA`eD{EDroWjHUfT&4q574x9i4(MZd(@QGW z!o+`HV7t6`^k)8TvaK5(cDpV0b@Vqg)(+(UfbJK%(8Ef%86KW@!nW?5rH3P$ZF;WR z!z6)itTvujaMZvmw@M;ustmDCaPT#*oBgvT$U&r;PEIah4Pt01u<0Jbqe)PM1i`Ut z5+~K*M2l=3w9qhqM)#t){*_9seP8vE}w&0w&TbkCz+7gy8 z9z*hgNn_aQ?08)LaR#VwP0K4Z4=k<_!8@-*sgY>3&|ys-dic_dEU%D7|9aWE=e|4% z-8>#iwbokPjJeOS`N1Le)u7Yk^?-f&^w>h{)}AT(lXCrvkWuhQ4cRr|IdU`1aE*Kx zWJi=J7rx$|D~jrlU69%6#WP>%U`;c}WvK7ODs{Cglt{prod2aqadgi% z-3l{84oE%53hRxj7^bubuwF9p1qH2Mh19VG4P*B-{PaLO|Cn3;w4Xa>d-CL%pxD+) zr0k9p-u{YpHtcw_8C3w$PmOIxBz*=df_&sp(Fqmr_iMC=dA9BFc(2 zgHtc;q=foRe2TWud0Es0Mu}gF=8rQ=L1dk5?5D3Dcb;EDHPCT*!b5#L1x|7B_3ggk zcp~KH4CRGAh2EP!%Qsc;-REl4zHX5%MVSUn^ymx=Wtl)fvi=v|C4XcMk=N1qv-m#Q zFTrHs-e?Jk7OMpxA;0m!7Wu~F`4hDSS%TU?L9u=N53$UTqaVpnyo@%A(v(=HY_fpq zzv9X~W1ckw-ti?2CQ$JlKZSQ${NSNG9yitPEAX50YcYPNDeK!cS(KoEsfe_aw<3?I zQ^?EWz+YV^!2+R=SDxB^o1hfaCg&)|DxEN0PTjir4GJCjF_3)_{5U1!kOu(v6CR!C zPufcDTu5I8oBz#3muG@Vr>__Lu$=OBl0564Wv(o>9?jZ&8x5DZ!?zPu9B6r2PX`O` zmEiSF_=waViLap;5uoeO@k$kSPJTYgl41$EL;7ZWjf1bIkEZl!1T(b&jI@CDZnY%! zWi05Uy$?DG!DId5F9TH=Y&rVLEQ{;XDJ+Q@zEiiYQ1%5OTIf$7Z4@@NW-L2Uy^RD9 zgg2)XiY;ZZ8o`3uCuBU*9XN2Vaz9j3(F17HkhFoYlBN9SyCA-W&4xz+59hS#%7*0P zv(%cLa9Pm`@{@wOs&04}vSJYRue`vi|Sa_c+&=4n%ogLKI5@MV(g8hte zCn-Xj9*ZX*CNI6DS~IN1w4IRD!X-=qhQxwnsJHOZ1$1DXv1@Ps{kEhg2#jJP2}F(| z4H+E_HcLzTdqcvKjal{rUemu5BDvw5XITZM74s9k)V59yhxad}(J4}@2%&(X1jho= z(_u8gC5)^Q33`H%z27n%INobtv7WB zkKXx!#iV<+&fVAEkp^yr(6S!er6u6wq%1?$ioU@Yx@+fD(pj>)zsaxdZh<$Rz%Y2? zXmc2k6zqmN2~?KJY2HNZ`PHYdsfQ$-V*Axe}L4f2s5djOKN8SuWs@xEoYffGT5&=F2 zN$i4;&JHHGtblT2$&$<{L8AmHX3JhZ5sO=5xLdmEtdfS^)_9+rxMf_ctEgXnP z@8xS69A2cbM#qVVQW0H_r`uu~r_);Hh53m541N>3sNkRBl}(YEpN&H&^VI&gM2CXO z#ttS_ovyYFC9XY|j;zMsYY1*^F-upveizw%MgOeFkkj)x>!p$e$PYPhz$tLfBjFk4 z#h@mj3Dwrur9}$mU~E6K5|OcZW3lFaU*PnbcAf6Os$CVz=kxNC>HoAl)RU3Ll|W=` z17oq@fudxu?Esb`v`o(Nd$=q!^&ZRxx7|i3A!0Ma=8QP_+}=D3t|klVxPgpvSP5aM ze(x^h{bJLi)#FRxy}VC-jgZ4AyjozN|~h1L14 z{Nxd_KAZ#}>^L?>Y)5VB{WVxK$4k4hDgbV&nkZmIUpGO)KGzU{at}*-EdupgYVu3 zFRr3Ob#Y1`oY3rPkfP+=zXuPVP}m&BrY7Ww{BQp1_*g~LZARTg3G5-A!K9Eek9^Rn zA8Zo<_vl`L((BnxJ0_IlF+{BV|N6tK7;ZQA+tgFA(3!Nu&LjFEa>fIi5%Q`Pw-v_H z^Oz8R)5I>D7}wCRf@jffz!kH5a=@rq__C`tJ8O^T9zuoC2Q})^4@={jLFD+iK)v$U z(%gashpB|p@(lkJbCLd%Ipx@EQQqA~VojLp4aa&(tP^tkWC_XtZx+C412q&hk8UIV zff`l1Sp_l`aHvwRWWcvP6z*U%VsTQ_lPKk=Dxss`;X`6b(6m;{?{tG|fdp-%p;(2h z#mY|{NZulg$2xx=!kBMEom;k@b&k?&4d5dV*JM&!jZr zyJc$GtQR#0LPhTq`>?DiM9^{$tRl^qX57uU`#7)eDHjZkGiMklGKr3rqZ^)b!tS7M z*<*1-2n}flCq~11w92T_n95_mDXuxbx51(epE#a-n0(Wk)y_(rR+TK!QaaX^2_tJA zQ{D}o!;wo?d9I9Qyr;Za-AyG{h659oxZgQyIYLP^k?glT;vUX{65S@}9LE9D&Wr#& zn7iyU!x>x6B&tah{QiB3E7)%t>;Z{P6>hd*m^)gcV~T}aLY;zs;R`{hi|ndfnH+@!-Wo&+2n-*~oaZ~IV0 zAhm2UFZ(AFCTL*anI>7j81`97jn~hN&h24`Yir7-YdN!T{r@cFpR6u2iDPM91!z4v z2rJQ|gJ^Lrck2%rVT&hL5VU7fi@ChcaDk?^K<&VW)Osd39bRol_y#(Kpl-CP&D?4F z^1a3t9y8!Vcsmes$lejh16p{jnd;oRMCSs%%BcZrZU_DPDp%S5nvZkQ!MZ2gU#5o%Y(vb}M$~GTpG|$>%(}2pK#E~8Gh;D46R&6b zHmVs6L-43t*VQ(C)rK5X6I9<=bbble_GY>M`kiomYLwmJTY}MYr>@IKcaz(RwBRJ= z%}T*SczQD4JE!#G27eDU((~MJ8yMNGUwB zYjWj5EoE8G)%Y$%AK#~7)=d$^d-Nc4dO(8cHRo^?qx|M>eot(E(Gn;C;j;V{Cd#l4 zwq8hyN6|Bd%b3nkYs^^yMkb{AI z;>m<{3YkPF3{_&+n(ly!GrHd*mU#@7Xp&GWxn&S(rS}v-7jY4B?1z*N>mZ)V@LUQr zaY}o-30Y{GMyW`@Ix@_$Z<`K3hS@(Tl}#}7ln3inG#lyoIHr?SRqyH7RpPlsJfl*} z7 zwiHjxe1C7OX=_tOFouWuR!5~MMibg&v;p6Y&a508&UZ$RQ?=T^&`jc02nW%zh!<|? zCuy*$k0UlXh_%ObYe95^m70F7%Y+iF+yV?4i(KSVHsevx#GQxe*$P-P&4Mdq54F8u zz?o3nqY<~9hs#r!?$-CaUC$#ms44HWQd_;%Ei&&oLtC{C(`ajhqV4yD-Fb686kbL|(` zHV13tR?=qtsTO8KsxIf!*(+CE7(a?CnCsBWK3Lo+Xw#CeNJ^gr3nCSxk5MNMJ@sp} z7>8QL@TykNSnF!7@>Ty;;2*wc9CSJ&Fn7%I{i|qfaQA{@{4N@{&`?(DCZDQ`gOE;# z!n+@o7IwDALm5mfNnM|pI8}!G_xRChNXxC`IqZ{?CWIqfdC$fB2SU`cN?ylCWou_gw@Eud#HIXjeXTMc2{A5mow!b>1M;@mBc-)JzE-DYA1<>} z^d~8f|45Nd8!Fx4PP}Dlw?Sb5#D~g~H|gO>>Kz_?^*NV_-(dn`)*_}wN$gJ8#rr6D z;wcuxWRF_H_I20`CH)^^sy`1lkw@oiNmNl>gy;&kc2;&~Jq`Dgtr0A4Gl&{rncOo(19ke^|8 z*7p7k2QuC0j8Vv9)hqbER6aaP-kc$2nOHblbVl}T+)rkBzDAr~$7tODi%Ln};y92W z1%6EYxbeK2+~`p5;xDip>Cplgx@+&ZU>XSFwX88n6nAHRkSV|@F+GrB)^y=55I#cO z>&np+FnDI6$di|-7teOCHZ#^5W%F+WC>auDPRIDMi6$gvnu{wVes;sK|Eky$SiXGV zt#TtU^Bl#}Pz-NU{5R&k646aBH62K+gmxu)v$ogqdW6n1wSGe$UpZ{yF7ZBBpAr93 z#juKY+pzMr+UIB+QsG z2As5jr^nu~Fa{)}4DF+*K@xXUIO90Vwj8)FLOTAL7Q5fm<@~`15bDdIo22gAP|zVK z)Q;USxUg15lH(3)H-4KSq*zJfsZ1n^KC*vLnKz=bF1p3=FYP>2Cz}~fSF?gk#9jG~ z)lka=2E2C351lpC`Vk6*jgs-F^ofImVi^5;MFo*K>vQ6AEmbx^T3_}dw(FyZrc9ha&o4k;lynA1!OvX2D?O1Fn1;?SBg}ovfgwW7a)7-NX6v$oe z&y1*gx)YcheHohTK*eqnjYpFl+X@@}0*P$E8yj0$Yhd(JXUO;fn=0T*!7 zmNs8jhQV4ptWA&1JEH`~FiJUk@%%+DaRuf;JT5Zb7!Q`n$D&yGmfm+fVsd33U;Z#DAj>)D&fl1V1?4W{&rv+hO44qL08_EiYAYpnQ@*B&b)UNw}}qd z-fw*3m`f`2(v0#YJkh-+tO!nnm76Joe}=p3APyu;Ds2@{HmLerj%bKtEYq0Eu?UN% zSjKMc4FviWf8aO$2Z_Z9Ml@f3?Uw2AD>T1qNYT^oqMsd3pgFHa7maFcBLhaqUT&3u zrA=s|F%A5M25VOYDd2N&iL>i_cRPIPrLZ>7CDy|)e<}v1+FSLi<5*Hvjrlb z+utQIJ?MVZ>UA8mg&)z0?Yvb0j}0V>w)%nf9usVPnJn9|4uJk54k(pYOh8?d(@lhM zFqeI-Sw7BaS5~oI@6yeqZbNU!3pObw`{rX6)tbu!dyx|_ zF!oJEZ+3$pLwsI{Otf29l3*_H6Q+Nf7NG2f^%J*Q{A@MiN5}zwZ;b^2B{LjuE&X-5 zJpUpKIB0wV7n5T#2WTPYzBU;OPWR)Lxy2Fm7alw25q*XsxpV32(Cycci5U0BE!8g$@hC&t}|9gr{~b z6J)1JiEb6vhqx`iVmq$cJBbZc`6iNo!6U2D1H|}n#YEJF9;XfCzrRpsEDA8%t&fiZ z%8t%WJth{z?DLJY786rKbNNMiFQpuovUiyt5?;E@ePJMH%u0 zcp-hsWvJ!>#o4G64*ZDGARs1BVJa#C%bNjY)$bpP@MVU3cs+^V9T8Iy<$t@89E7u# z8PS6J;yeR09i~Rc>1FaDJPl=O@Z1rKShS+u56|c~Hk{264AVh}oMPTW-f{-l^v-0?zES$TnBCLs<{iH*6C#Zzg-uVeY{rcF;|duk*DzcTVkd4H}E`LTlZR24Km%U{_!ML zUc!O!C8Z9R<5O;LA5Kz<%uz#Rr_#rth_8q3PHt53JM_*l82Ei8*uy7o6wf;kK-iin z9t+Aw*xIlAQ5kDp3fq|GK z<`18niM&*=)GRm-+G0w-4~*Bua#Wn4TGzY+h9**3{-w4ikHOea@a>p3Ab)= zNcnN=L6M>!-ctM-J~2h>uTFK&g2(o*`87iwpI7j{Y(Ktt8fT~c;u>qK>JZ!#Ae8Gm zpKMbsIE#6)H?GMgs^He`Wf9!#WSUWv2&MVBJbRdB0a6>SG^MPxF7$)EUm#>j6i1-y_WInEF zURdxOBmEo>1Ivbp=L@a=<%N^O{2tJY1Gwjg)Ws)&9y*fcmij$B=2RyYh}VcE`+Eq)D1)>x9XsBaZKCTyTMQiapTBc5RG$LP~_{mRvB(O7LvqT zpNK!r-Wic=6U-25c`ZxOyDCncQb(5SxP?`vT@Sl&6$&dQuxd2SJ@-djY@GA{9C?`; ziG2q1OaLa%cJ>;VS%amXs8J7&zEea22vHWL37m`;buWn$tGv!ojFFqewIu3pW4T>7 zBQAWaVNe3Zz(|R3u`4jG0$>s?3r-u9kPZqxg}e~F{*fdZ1PS}wlC@HG|0G=|BKl7@ zyYWA*a_Qot5d;pQsuwydX09LP$u9JA?o2X{@wr9v&ZKHGk)lHMAzr|bO~m^^8C*zd zU31J;Yg;GmepC;+BlgWn?-BOsn=Hjd7Yfm62>mjjW#m-%LdOS zV$;`q^ivu?h4IQ5rl&Q!?{IV?7np|HRFrOPZyllO7nB`G7mE6)nby3Q^(`8LyM?O; zoojyog-IUd&ChnZ;~3E^aXz1RCWnwnLMcCL)$Prcc?8>{1Q|bG0AFBb`vCeGf`0MX zTtah{7MQjw$G*AG*E_&f`!kU(jAojh1CN}Z>bos_E_@cdb_BO<6l6gb+;aOSSL^WT zDXFdihpn&3aNF=$RNqy5@W18!1tQao1kl(S20e$)-SL8IU+OqDQz9)wmTu`^^-vj$ zfh;Z6O7vkWOkcW8G7z=19D$-4moP&a92^c87m3!vYla|KSuX?`Dq5CXqJ>#e5>*Wc za{?Gm70l#q!3nUjl$a8M!nQtlp~gciu((o^{CgQ1L|*=>r2Z0w)&+x6ti=YlNRyu= z`=>_d3_|(YN1tkZaY$bjR%()00J$h%EK8b?Ykoj|!~v zAC6J$wi?{o6+!w4HPMH81!Y%c>TtJvh8#4*QEFdIS0%fMaSLwr667^82knvvIFFvk zj|ARWkX<0BP05LGL2*v5|RwD=B)=UHX?+pU4LTzHEM1NLM7=A{%U2V_+z za5z4LrRXN}!pZTb+tWx#hiAOJnd}YWDqbCq zH$<5hg65evDN_0TpQhHE4Wh28=)j0G1;x;F^24SwQ)2vfgNegEEgx#4H(ei32i8k- zlNv_I@$_s2F50J38dR#J(`Q1*N9?w$rMu0Ob3I9_MXJ(yo3vk^gkPweQ`Z#K2@H2X zGj{#h4>)|EnG;_}g1l7GlMGjOdZ(@d1?B@hns^565;#u8GwLb0PL)R+>^z|@x|fat)+t( zJI@VdB&g_dPqxGI1jcwC_F!(9`HIkmh^auDO4PM)8HaLgfUW)lSrM$z+kATU@~@13 zbY7z;E~G#r%pii_t~0G{m0O%Y@&Gg+UUe6aObUeV|G3y0=>Km~;l3so;JpsVUP@hX zgzH9}>YS1mxoXZC%0{v|>ZZIx&BnJa=a`=c#D~qvEH+KFhC~+zM(h-l z$}As0#vQcr;V>!S%KW4*#YzK@bl#HjQv1_8r4ZzjMpC49F;kt*&PrmfS%Sef#^9qY zwME6PcriF~!D5Z|=>^46rLAfig&R8Z1AyV|b88nOFbavfMDuZgZP)UFI?H~#!kU#; zk-~uHn`umPo$t(?g(l6Iy5P310zcJ<)60Y7LmblLw@HxfM3gK|3F(rSR@R>x95ft6 zp34PjIZ|fm%xz}pHEC7xmK*9+!z8S_8?v!5D77#P(h$yyjEecodbyNv$vI0-T6P+N z1@?wxiVBOn){?9(tlN=@tPxqcz7ww5K6Ro4-r+EJ3`QW#WlkWjLPxvs@SfnrO*2`%7RiBQ3ZZ zG(`d0MY`}p=wGK9?O5R`^kbR8wV{?UwBAK9&%)>^Uvn$nad{>;0-km?7+Fl~<|!9j z<>42R@C9VGt7b`Q)xc1R4gAn=uDl*ld}OY=AC0R1CD6tus(qnSbl6Pk4CxcrL)4sJ zTmlu>GEc1Y_f#CJUXYq){xKQ0pwGDghHR}l8D(+WX?D&0EFrA0$3z2k^rpQiDjHH?Sf+YFKJ#GAa0C!zEEm}aG#rA@sz6IOE`v5fH~Ngn`gj(7AmE~5^@b%i(u zlCE$`?Qoext|qeQ;w*>*5Ax!Ijl-mf@^XOtqPdSSj4Ivm*;y!2Y1sTFb{-&fw3?~7 zhY-z6vPA&`ov(5GWgk(1fY3iKye_ul#)OP@)Oc-y!v$a+uKbV~;iW!0$9HX1in0(b z=}nZshSn9RhBv(oSV-W%h;YRxZem}g4G8_TQasQ_A4#(!ga0@!Rx#vP$xXtyQtTi( z*czp!XX(cCQe0qGRSrC0=t)h$neNeOBQLoGy!HyVcqVug(e6WeXUnYO+^(pP63Kw1 z3ICwY_Du5u@>(slhecKWlJlxjCCb+kE!V6k1zt765@g?r%Gl7~4~Y-J00A-D_8)ir z%K?|J)Y!jRKThj!D=)m17Et-E%qtkDlEa0e`Vk`>i^J(yX^b18+LzR^gHKBU2DO%{*a;ry^Zya*3rdO-(F9O#%|(=w4!cI(TP?W^if(iVEB^g2}^wH+l=;|<`Z&O|dJB>t;ML4jN5c89Z zuNm853of|bFl?)h4#q&S(f8Mg?=OWASyS@}Y0#U%rQn(13!G|$Pzv;U@Uao=KTlpA ztgNL1Q-p2aBhN`AkM3?RVg)yt4L#i0+I#-%_0YRBxJC+Se8|k!t!TH^dj*%d+gpa^ zjT<|G`xs*WPtjT_RTgKarDUOh4bfz`$}ncYN>p0QDXq_ZKD-;dwgUs^$vI9L))L~v56{suQJvHX zDE%LC(oKi4o{r1;T#|C5$GqmrEyRcaku6C1kNdM+(-4RmYlU+H4%V=64HQyMsvCK-eltOGMsm@~~Au`TTnL4c~ zd0%@gb|At-Q63cu^B_=J5215*Gy;o8&JLvaPw68YA@?A=L&dd3F@LCV1%+YG`u{t0 zMdBjeiU5m3o60<68YXO?El660AR`RrXa2<*G`rcob8EJcBWIMM*+K%raCRoaOV?h`R{aw+e$XCr7AyjHfcQeZHMavTbN^VjQKd@Dth-m7czF`6*AInR?4bl3 z6{x5ZkUbxAxR@PAmWD2Dn~d#Y9p<5)`lC!-4`@604ZBe@7{7G#xQirFFORwx>V9q- zvn$;Jh&LV@cp-H-O?$=7s84HQzfl9WUwmr^>!I|QjfyD)c_M8>>HxjNE6(*@y*Fk7 zsOoWcMdi>yLtPQS~~|NeVdE1B8;7cxGt-J|Gkb}H%8&b8*}6>`4Ol%mo-GA=uZoL>&yE1 z=fIcF2r#{0fEUS|N>KNDi8ziJ+E)ubva`7{GIwgnuwszj_+E*JBo)&zmVq2_J#{63 zN7*w#;U3q|J`pn&{L0JUO)ohouC>&BjdPc{8BsFIqGy_uY z65T7@l!W=i2%J!*NT2_>5oY69f#qeaXG!oaq7`d+*oo2OlGE zl|vi$uR4y`xsS6P_bF|A^WF`jZdhW>coji*anko4;@M=A_(vj63Ob0Plx0pgu!B`gp7A3szc837Wj>CnqaV zh_bRN_io}%?vvTaj%33I3=pW%EfTmOOF89J0`>8gPAX}@r>vXEEY>#k9lAJPo4p?> z1nBDrde=Jfw_FaT`4*c?UCRIEWV<8yQuUW_Fn}dTLCFP?4SVDINayejL z!5`}6bb<-D)&OZMmVs|xv?ZKD3gmsS0N8~?0gb)iEvo?jUj2uOK| zgX~yJ*XfPWpk=ex?psoaC9WkoebvbR_X3vg-?Uiip!vN1V=iuyRAxj4Mn`^ePbwse z@bXG{%xGlN?|}-VUNdXL<3TG`@G8gRTIh0sIdA>hGdWOo@{gcEO+qv?F-*+Il0qVD zSG)W?jp;Dkx?5NyqKL{tQtY@n8k7EsCyo_38jzpI)tNoqsQttD%D6X=A} ziKGYtQmjzdKo)K|v&XS;oh*KB)+1|gq6u&~Z(%9`VY(z_Z}iEnA7$Sp1I!0lFx8pT zM1qybPw&ejX7hJ}uF<4A=P|q_%^Xx}jaYJD)QLW!Vt8fo!f`QlxulT(2q0V$;`Jng z_+>Qrtgc%r`ap#fY8rE(CPvsSjKgmXUF%q0RWHskOq7-~T2iY$E5<=a1Ps}U@LYJI z^1ljO_SvrZPK=8u7v(wwJk8H-2|9#NGXW@cQnr&im+b}BemAoG+R{wh%&=F<&`5iO zO-3_Tuc|SY+ne`vw(~D~^^xrGif4il#Z9w~MA^6rK3TE_6L>IqV)G?qanWpaQU|zX zXp&ewipo%`s$Pt0VLsx1KiuT2V{Emr0{&*{I8@>03rWmtmOLwgo``e5xf+Qb-S|k` zg#C$*W&a~G-f+UlAbtQyXrb-399rs;`oZ1>noIa8Nxtbu#7ZZs2EV#%WFty9b+`wc zCX*<0xDIMxO;tm(*-3;+VXjV;kowt72GzC)8AB;XT$AYHZJzSw{Ly-=Vc zd--8uhcT~1O8}ivMz_leGkHZWp_-)PTg|@Hgmj8Fym;!Gv-54AWE?tqYQdQp{RK;m zDkoY#{qf=km4p?nfX53f0>pf)Nu!+p#=FE>{kVLumOu87i+fC}sZ5=KkM_hiBrj&P z&hoOgNnM}PH!oWc!RHDRSYWCu!wEWrtRx{Jv}RM^ zLi+B*=v&cYGm(NcL7yHgJj~Doo8)!>ho^IX%Pipber~cg*|u#@HQ6;;lWp6!ZP%S` z+qT`Ed*?alJnwbwAND`6*R}R%eeqsc)jFfOU}rP5C*R}ApYs|;`~bW+T~|AOfL5Wl z{ZYyuL^7)ID694yoF$wCf;A*e<$gr4hLP&qh8tZRCS}wl2F*hxvHC#`)QN(a=7tH1?u&I zcJtTgE3>k?+xKzy0lXohsAyab82J9)Xu^}>6N)UUnescN@Siw7^6oEaFvPD;QlpDz zL{|?Gp_?O4$-DVb&Lb*Gd50HH59#a;qa|D8d_S%$U^a|7yjcpZDU^6#Bk*b-Dgu!u##7NKLD;| z%-DbJyerGbt<2LnD#;oEg3cjVyib)6NySv59sElxT>llHLF~jPRI}zmSGX#yOMfcSihm8jlCWluLv0J={~jp)iNJQt*1U?W$&45* z;Q*15qDI|6|0n*t8Btf*OEND}=m%wm27+b6mtUq1K#Ig(2-MJ+kcLR;4BseMt7DxV zX7)NkX1sG)p)`4p{$`+Xtr+IFG!3o1QTimGZqCSK^Q*NgHGYVC{LAFztzAcHG8LWXvu_1UpNF(%k zbf_iH6xv-1dnnaHo_@syag|73^Drh@5U3TGd~yCi5X^e`;4a*=bp#tfzndo_WWsp0 z^Va6!ah8h3)v6+;+pu{=4FNw81#Vkn=COKE-AQWeKIE={X~ea)K&D0_r6RR^d3r+C7SrJ?7P zN0L~X9llc7Xv~k83k`FWrZHqER@D)6^nAU=`U?dAs{H1pHEW)=v;@G?2IPZ}o?*no zD*3+zEsCnG<3**#p6q4@otK59dzXpznE$?}KyJtKR%;F*7zlH}wN%4|qC`+Vu{ZM` zK!Z627Cg1W$Pe`9U4<(_!(tdmz0NpPe*}iAiyUb_%8lH<2^Boi&@wgz3@xFdJ;BD! zYZMPQZz!z_OMH@F|5gXj8=~2nw=AG=>~QE$do&q1SG+D~#|&I2H#umML&&2vO?K4J zX6Q(-b^AeQm@}~;!nR198u*FSNhx_&`z1`5swD`K8CK38j-S}XZKa5l7YTWZ^;+>*Gz_7Sc!Gf{jE^8=XtzSmA93ftUsg%XBeQ zE9?gxF5h`N8}`P@%?K(XD>z6>GhMYtDUk>_lFN>7FX#6EE}bG$-sUWRya| zOf@6nf;#A!Q_l5yHdp_CK%O5A4lSi5;gRWh$KzvdOo55}3sUWebb|T~wE4R`>Kh1W ztIYJjh%3J#E?AehY$o{Og;%%spc&A+P5h=CmsK@dqCjX(I8$|KgUjo}SU$a*9EN)dqf@IPJve;Sl0f`sO6Ol(OX02OD#p%cU z6WK`Z`GV6ggsGRV6SrDHUM6lr#2_9a(_pu*@rMLP|AG(@h8D69X$-G~_$;%%*SkK5 zJm73VxU2Q(=~iVX{>uW2U1kqjs?;f#d%~6${l;5P4QF~R#a&a}QDC=Y0;}Axpmb%( zPsyWFL?TL*PX`+-@BaBiCid8Ve3HX&8j8AX|Hrob%{vd}_djpIY`UO$d;CwR%aji0 z3pa;ce)W&dqN2JrrJt^beP=6O<5b8$UAf|v+WLzxK>zphiND{`hJokrI zF*`#eLrBpLa|Ui^50nYFOTi~34GVq6Y;X?l#Ds+}uRwa>i6H}O4o73yoc2<0cwh3Z zfQ0icCzkBTcO!5|A%#rahw}J3|KL2c!Aaffsp%)YA90FKBReWv;oRToL&E;g4s!{R zNJu~kN?KoL-(;t|ZI0y@IZLI|b|;S$SM0kz@D`A+y7g32_dek~Q8V4i8B}>|_nmdH z6Bt1*W}{zLbdrsEh+%ltyuG4xr#4m=18V-!%&i_#&A8 z|5U#D)88k1bG)rwL-YbKTpOTD3xB;;)sMD_jJ{qFbu zCN%FhujqpsU#Uz#&#$GRM>2U=tUk0!mJvkvHwBcrkPrWohYuML!Fh7LnOwIu+&Z% zQ`1#sDIo>vGBq*p5ery9?uxhbg*lJQ!+_u=D9&WmKg$0!2AM*Z;u9C8x6s9aBjJTscq z0g%k=e@m5LXHQQAoh9PTC3#m}N{_>Y#x+CC3Pu}A6<~Y}IWs@ay*0)ITziQo;VCPJ zHvepJ{cb%m6Vh@mWKZ0})!@dDWDYXR;&~&d!hVB5Jui-8*2HmjoY_&#>sJw7qz6TVQI$t~mWvti%EzVM2 zalh2Ry?-TiZRuy#IqPjiJ2Y!Rcf+|tY)@h1KO6q(PF4TcEh92rTqNqmNzy7gH=X@% zgS@VJg&rv&O)O}8^(as)@a3)L)B4`jDhqTO)vhempL%BDge^?d+hC$JF6HjwKc6(4 zyE9Sk7CHobp*S?-JH3qc_>@27o?asH7u++mr3yfUT{`%hPQ1+4eqF*1glvLe6|Bgj z$ev>(pkIKm0vE*3#(SH!GYsgfwK*jwc~u$QPc-6n4T6x{6NkBKtZ3(t%B5GIDB3;5 zKsAO3VJ12#oS>l|m7PZLvgJC(PyMTQtuuwC09OmpB$kh0q~uQWm<^_p^AjL+`6uug zA$+PS0gW@ick!D0*GT+OQ%p0hDbf2yOo`2OQ;mb|e%=C`l5{3Yi&`7%b=P-Y%}C+Y z_OApD8yhGq)}D;!q*j&i;nmKUJ(F{f>Hh3PkS+}Nc~!L(6g>yNc!iC&=nzYYmGH2 zvpB=zPNyo$BSgi)X*Rt8VI-sRU}4U-LkgCAk3?7lFSQk%WM?`ZV2T3RzOz66@6P7xP_UKB(OGW-I|{6?Q5KG%}LhG*7|h z=nKd|e|Xp8%!ly`OcKx$XDr(qe305&GNveEs}={`H@b%7AmQ(Wzi(DKwUCHHHFNnQ z5Sg|393g`ZIAs+Q`=a*w42beh9KXB4pCsTqkPP@F zsN1a%tLuM)Q=epL+9c~-_-*8->2ti$!Ga<4?;>}p;vrG>UMg~w+UeGZlqg;uN2!9F zR9jm5*^bdG*g^7`z{xb9${dYsc!oV{;_XW!1X5g8=_yojT}6;IVH7P!am$gjW!>Npp1Px=C0c!)&cy>R%#OlJZ01IKVr&g-TVD@a(w`z*fK5nC_5i4h|-nbqI~}k zZyJ~?LQ7X8*59-#FZZRpT&FZ~G|KZ$L_}9;J2wh&f)aNacWkG^f26fl^akNz zdkgxK;w>r~q;OsPy-@OmaKz${*ppy>UyqG9*Za$9yS6j5W(9R0q^eDWoUQGp*LQi# zF=3Ej9}`yuPsougUI8?XeJSHJ$nJk@n1r7vit zUc-ASZb6(?JJu?7D;Cnd5*w&3|7@DXBl{g$9SU84aV=v^5(QBbHIubz1LpMiT5-vZ*1*5Meldn1DZQD6CpE2j_TDOb90|y??yZ6Ax6}W?rkrSy5cq(R&O3g(q-G4kR(g z_g$NkH+NOAN{i(&;g`eZFUyO)@D3FJF%Wn>trq%MZ|LBv7{+uKVQAM~6-KEF7kvzs zO64+=3dD%ih8QU@1cDLgMhBs!SW?a6{66Q}tWW^rLQUQcEC>;(H1Zcl>Q2=C z1Y;ns@IH)$Jbd^?r?w{nepah4h18*0UW3-bvWu;5BloLPYXyN|UQc}AaTmRS+Khb0 zVX}@}D%k{_&%W_QcfkB0Y=jJ5qAx{g*rtCANUpq{s=Ae+IIRbkr+O>Y3`vk|Hc4T> zoWnjkY$39gf6CDi{HEoov!cwQGxmsBbS2^0=ViVET`Uu;jWXq;TmNk8YlEu<5FtGN z(PBZC_q>Ge(=b@BJt*^WaMiPS%}@5s9w#jL2AxwnHH3>|?0tXy@P`i##kyy5A5fU-QP<#*SN4Y-vE~uFDA+fg^NUS zEv|n|tJA%W68M(q|65`kEvaSxDRxDz)UjdD<_B~yUte-ORHYUBp8|UkRrvJQ_mKRV zv@$HH(47f}FGX?2x_d^jO@l9!!5{c*wNIPuB-rLUNpgi?9KAZh(sVhpplF}-d7hv+ z%N3mCZZJCk5;L(%#s^1LtVZLeL13w^qFL>znMNFfp19QgDLLll7jnXar4;8fN2^WW zLGcMCa4>p1e={x6^vGTB(6jg!FXz?o$D6z!DCV ztE6Q{ZxCy%A8)e!&dau>DlKz;5ckSbXrN>z?_9;Xm$M?K+JULNy-zcsQBbQIHE%{R zankg^EWkunG+y%4t@UCDw+(5y>(2?tot87|NhHC%*{9!26#wd$uhX4klhlpqm}Hl> zeT#-~x7M?UZ|)dX2@8*Yiw0f6<=T7S0dP|i>3pvUcx%hrGKuR&jhD;2XAs-D)HNx^ zbBYhqjZAkT;qSZKe-o4PG#Y7{ZCo^pckD1C2VGeC^^&-DiY0k?BcD}NWS`*L6`0@Z zMay@mK}^=h3>ej#02-h)eMv}nJ~+I*dfafPc8#PCsiR>IO?2>nYQ`n2emS&R`a62p zqIrbs-s>@WdU|`M7G(#vPOJ4DHMHO9pnQ-_Fq+Ah*_}>5aT41A!t8kD8#yKV6tZi5 zSp>qpUhNEWfk9wyef?Pwpt%9MU|NuvB9M_3TU(4TK4Z@UVFEk4`b>2t6IXP6c8<%s z316L2Jvu?Tzbc|UYqaT?spF1RGt3z6%tCnJ_@EnfrQ)y8Rl(V97XCB7yGoiMXaBQ9 zKkjgG&nuS{J5Y&&uSJdxpGl&T`W3Z;*CUpbG0GMTqEz83upGU~upg#eDBXN%|67`C zcQ#FD@0X<#iyN8Rxs@NekS8eRn_U~T|JgQ_SXB#2N|39_XQQPcXdt9oRSY(%m;6Ao zX+tH$_W3yUMzU8vf2gF#*lW#j@1kX-Py6qlKG>M2icfr#G1^cDx>#wrO3uSg)%yam(-f-T$^%2`oZIoiCFXA;|#Fz*Gl+xUj z2yeFl{74gPB{aVm9P3-?daiXSE3m(wCQ}La-xj;GaX-vsHkI2m!Y;6z|G{5Rwg?0_ z#mA*B0H|#e8ajsJ{N7JaB8I!Nm9`$?+9cM5jW9{K}#@L}^y@qnZK6X07Y^r3TO+o~%v)uLY;KfH+H`wz6YN!S~|`!*Z+c*VaQqkE?ec_o}D`;=@sjIUdAj4MGTa|9m2Ja zFp7$^T9T5!7?7E`af{)>ItUn-c6I(9nXZntp~7T3CH%^Lo%yEMomu1phdEt^^|nn% zt&-$aUFz>ADb!$XK37AufzZ#JY_PE3WHm+rJwB`RO!|o4=Q>Lm?!=POh)Q8{I^~cd zWnXK`ntP^4wP1_Z$xjU)a}{&rR|x;9ZR_G)K=60T*{Y_cC~Y(dw;F_EuSzXGD80@L z?v$>O!oi)|-i>C5QM0AZL+ zP_~m+(jn{SnBV>~gBn{$^N=pi{3L zp;-J^Z;Tq^Alg3KYANYA9@)8Mh&6IxAtKx_S8ry|L!ERgkTcgV>1%$4!jnS|d_kgv zR@mAR+nT>P%%14{3k7474;cVkhsh{H;-=1B!kjS!N(bnCm%+)uA~i zqS1A2p%v<6@Iqkh{o4-nbD#V5e03CDFo>GuH|fTU^njGush{Q#rIP3`o3r3atj%Wdg)Vb_}ylex%)JTPh7 zyZu&>|DZ?ENI~7ER@-IYjz{0I970#eF#z*lrdol}2Yfq<@q53$o?+&8iS>Gk^_y+R z|KGWbOq&&oNu#=i%GyX;I-50A{iGSPf_R8)vS-tO4Jp~pL@0YUE0hCwtrxw! zxhXjUk98n7MN?HxO<+<+06{TXE;c4)Jgmw_S7?yw&2c!WXjiagUXcWpVmICB4J!Z> z?ADZ#s7=^p5UJ^4VEx@s%xxhT)rj|sCDNMqXe$i5$*2fJa{h)Rn0_3baa34eLZ1}r zPsy$t3DCiU<7ZQ|(e-j* zi}r_QDqX#DQ^TR_VN9s9>)1H3tp!-e&8tfjqX-%m`_-!+81)dCZJM?;2{r!Ntq&m^ zZ3g_c4oGBoTZAV1pCZ3)2iKJJ0!SFk*p2$1wPa7cjvmVD)B}B}6h%^KF_z*e$>pf! zI9C|7oEo3v+cQX+`Qz!g50yATGoZ7q-lof#1Mmr~lH*%W{=7?+XrjEy7D3{duN}w0 zhgq;2cMx0Z8b{6N^ekGpqzH{~>&DCvN7IFvX8-8?rS2}gt@;&wEM!u|XUijUr&II2 z63~cSI_sh%XV~9>0)+fGoT2$o`hXaL-OK}vKS}6Ew?P0}u~A7>?wB5E6&z_%76CnH z)?3SFZqirj#+gvjNh6#T8;ec{4a;A*5+0FbfQ^-P4j2Bl-!E_b-ySLDnKk0`R@`7rZzOM34nGG!V!vuXY`^h~Y1yY! zJ-9G7{K6v4N1Se$-;wIlCPmT#$s<7}WQ^umB3dbF$6GSmeN4;-Q-wyw_5mq9k=2Y! z;UZLI=*@2LFY?OV%`vbOmKb-jGDs$i7b6*1WQ%CcMJ<=3(LZaBPV}sV&)>-Nu3lj@tA8KB}#J%^gSHbNH(;B>` zvudHmo{`_Vp@GSUm*KC(5#ixkT+J6nRf3MLuYg9;*e($+?b$fQv!j`}y}!Wi+~e&d z*kkL>Zqg6j;4d3NA6_XzJ>RRBL&I$a-gn{C^boMO&7*P;&%3F+amUq{B#L)bb)DT{x7|o zea~#O8z7^%nh6HCo>z8oVO?wB9sFL7yBf&E@!De?VGo)>2fj{m)AyOfhwIE{4{wQj zxse>k>k`d-=)#K)@LJ(rb3}742Yp%qKFAoS3cvRd9Iez}kp5HhY&vm&Z-=nBCl_6_ z5U8g=nbHaj0nrYIZB&tH*-F<9755js^sq&2KzcW`9WetImX8c7LpM7`>U_OSSNC5C zc8oKc^}ccrNr>4;pfYsuULK1ln{t1bbjPPIEm(YUX1_x(ozG?~F?YVgoYB3!j2Yf6 zh`Y5v61KaJT(kZJa}ssk})Z-=;-oo*5fjCL28kWD;h2b34u3`8uCXaS#iah0AK?`}pdG zF$GqjL^9a5FF6FK6ji!I6(kykI6pm``m9Hl&bMq6qYDu@fu$;Pd~5R&Rdh^!+>X0& ziGw>MXe%lZ84`VZ&UlwP_Md)f!4Btf3=*6F8AH#YU8eX1@Y{FV*xccj7y}cmZCGeb zaUQVxmn}f=(8_XP$;FK(k^-|H^Z@&PBdCbg0VnPxq4H`>suZ`0*s3r|Ua4lerKTFh zTjlb@deHbOe7l-+Yb*4ySeoi@_v^r;tFL5)&e$2IQlHLS`n*mf4|r)7N5}!@mr;t9 z8S#J?D(wpa^HxYV72`f(R9JK88I=cpzj5NaR{Lq}SPgeU##dkuvNJrVcv(?;kVWh4 zy3(421gVxk)niH?Zbvi1j$U#83)j+Z*_d9n)4VFA)@ud?Uv-Lw zPJ+VWwaL@BWZM@p{ZV+mPVe?Ryl&>3rtB_TD(rg1l9e8mvFBq7t>>a{7xI;5{9}4G zn;46S>k^RW`Bd9Z9XU;{PiWRZue^nvHXFSIiWOgPDPXA_&vg|X=m3ucO2+&d8d8Hv z-?!S=n=dRa2E~ycXXg!i*TVhRknE5a2{J?G$K}t*;-a0_IsuO=_qV^U&P|bN6^*rj zZKcb}LNUOwmb+kU=#;RPFhYJTF4r-V=r#_)q0l$9El%BbyP(7vgaYn-tt{Oc^~4Ymr08e8NgR5{YL%$eHxv+a!p5VO|TvvXwT>q zJMF{rdiXx1xX0TgGp_8n2HbuG6Fw>YyL^PRt-iv)gYEAf$`5b_&JdbOCreI$`KD&Y z%=mitXECSyBJ;bmav_@M52K~|Zo_p{?!WJ?+4}-3lYKemyBEBlx2Es(;#88d$@(-= zs~c!Cv$%XlkPa$p63Mg~Q?u_6t9MVkZp$XrSX+Q+Z?`jq$vqzO3l5GSRaQPu$)8IP zcV%h5r_~>blKxmU;<}?T&?R9LlfK=TdUacLJW{-o9v;Hy<4!env=IgEje=lacxJD! z#{P4!gUchoNBMVdum}-mwj*YCVi>{Hn)C^$dl?(q?9+G&oJu2?Xe^}N!y+MkuzOqa zl}r_;BMaU_QuFM%sm>2NzsJt)4r@fzjClhY`=NW%+x7Via^-`dzCAX*D;>Y%5=%?7 zd$`KKzuG9RO1|FsD$ncofnRQ^cpiyh$Rqzlnr(BlzJcG5g7N>^f!9k`Qcv$0%_kSZ z5=O~k=}!FC=#LO}UeZ%#r26R6+M-exp2(Omw3F9_^Rm)@1r(2JGA!b@86rQb{Wx9Q zaDM^gn*WMyMn-O1SE%PGK#TgxXI~Mr7+%0OoDdbL3oJHnSmgG zkgX7OkUZvU%vx5Al8$ZKYieuTLDN8AKtwcRW-?PtY$x_dPRYB4{`{tvrYB#HGxK6c)k1l=QaA~rJ$SdK@7j zdbRsh(TS`m8IlM#9HY*GX+Ha}vg%%gUvy6RU*uEn>uSz_w}Qo|%{x7I{*fbuAs)%* zaixI{rPmQ^mxJ@LXAY7+{?T?N^XerZZO#P};z1U^v>@`O?$s36iW1g*$HqP++*{S!SCLT7QfobN=;6yWgUkrk_yLRc1a01ghxWJVT2k7dPw+8!_`hC=pZfG z@%0{LxuC0rl%l=T<2{ySm&V1wqlR(Zb~5l~&0+eQ4vJKN&oD%HSo+S|vxldKznkNC zSzk8Ie!=!@hS|8*?ROm&%^|?neB#Ele?OFK{w*I>xLW z#({=xz8ot}lA!NS6>rwoKAf*}Mz!~sEmbIKcsQnLDFUM{=Mr;&+Mdb!7bayJ|7Vhz7ish{tOhMZRcNfF-b zO#1k!$x8<{Wx0|11O|$XY!552(Da~3L{%7ti|Hz^tP!pE6d_N;ec+F%`%AUgz45oo z!)hv3WT7|H{t8*B2Vd5ZoD;nX^c)fo;j*m2xSl^IjFy=^y9tdA+v;fJoi&p_=FU%6 zpn4#*Zu2Tl!DzZBK2u3LL*9ps|s*W{F=h8i;8RZCgO-O&} zojkYbpJCaHL*%Ed%+qfZkPi11yHU^9j=5N{HJE?UDK(xmjz>y-kk4i=g~{zzV9n1x zmhPqZwD5}OdUy=tN|9Dnt7HT6WViPWG(sR-u9g~# z(2Ckf^?0_agOn)MgF8c}d>OLo48H3Z^9uSNf3K1HWQ`PdO@A@ny|YUw7^p7k(m{3o zIRi4H{)@QCvwYt=wL|uiV*DDqHBKVDWy@7(oK+eT~lFOy4xiYMjzuh&SbLO4Xl|l$MZhm^67v zdNMKZ*%=Yrm`(d#O?x8Wp2HoZu4vmLHF|&PbN32t*YCm=h|vVA)nbb0YrFi|=j)WQ zZJFrRc8%}PWbIaE@XY?ztM*h;`mpKU6qSq7F>xx#;T7qO6hM?kzvB0Wg2o&5yl=i3 z$v?xL%fPo{f;bV`58O21^kOm<N8-L$blA z*LlGk@f3RgG{l7)}shHmHe~89P*6C6%j(Hha$3Z`PYRrs~uKh}WbBt;n96*((4Lfdx7c@LA z8YzhKzVR24*2kpLbXWe0w-mG3WHfE?b7+7tZ{hg|`ti+v_h}fvB$u9HFHiI4P<6bB zTRUdoxPgDsQATplmCW$9EG@AVv=uhGXP%ZM*hxWMFV~MjFz}kTnoJDd#^qvwQ>ZLG zBwuo+ZhN@ZWwXaS|e`z!98kuTEX6GMGYIR6f&*-DAGpNWUm8Ly)Z}l{YqQsxM zDd?|s1q?VbAr4l|QBKq+t9Ei-;j3~rR4fe>-Lla2t}lot^znmOl!$zzI9IBvW_7TN zUp>wX44rD@7>i3ksb{}ItzYJMcH%)%kG7p6d&g1jn>%g&5IvMh48qALgsPEhek45a z6d_0rO(KtdiUN1PzHP3#&vn%2F>n{%n&- z$8g!4E^n?KI+Ct^VnT}YSIAi73f@XJQwm)~U^*v)TBj;Ouc)obvtwBSqJ`BzwuSTrJVc zINJ7k7;$)txDa+bZfE%?+9=8rOLw~Y-Rz%QIFvS}MzZ~aNa4|J8+X3dM%QFg~6i9WKuIJ4x^6Lq(R~cpu#|fUu^x(jh+( zBIAv0`5;8Pn}{kTpH%A^Ys>#B1e|?3?KtF)cz&HC7;!2zdZ>D}dg{vUA&6xwV``y7 zFt6Pc@DuZ3JHx%$sY_k8krfK@VnQ)PTY_sdoc!623GNpf2A#k5GXae!g^~mOc_d|l zb=16EofYy&bom8`jLD|Q;~%Jm_U$j;ehOhdp5wF*94P)7E-?KHQV1Fp>kH~iHf08P zQgH;w>VQhXc$F^fzayq`q|kU{1Nk7t@MV0IivN`b_2`1w{JAQ9rw2dvseMl5*e_~p zRHpW4{xzU6qpte?hRRQmIV(^e)seH;A;aV;>6!31Z1Nji+WA|ho(3Y#z5yDsf52BC1Gr2s!GVr*84C>hrPDjx>$$HOVZnQ=3 zg#;iwp4pYXC@x&5$tTjcP6(Xs$_U%kp*L9D*u&$a&{h!XlPiAu1|LxE9spjdi2b#p zM_2*6Nf(z!q7dHgd(c4Rau}A6 zIJt#w|5snvwf$fAk%7klsazj&GwLj*9`Tm1Tp|5Jn^-xU!1Y?#iHyCw zXjZO)wU@wEnkKUpEVu;Lx0~KBG0@MR!c|tO~htJ~*h( zU5>Wv6O+@HNdp+a_>Myugsq!!BD!D1C&jy)%wSe)iWdQl2t!4cT~y{6j--yMxrB?;R?LrU>At0ZJmpz zdrf`H#?7XZm0~S^9GIP30+sL-!;g|JQsH`vaYLZtRF!bplbSot@4jEql}R5#Ngb*6 zKt-f?pn&as=LI^X&JI)b_%*|hEc_$~(6z&Pt~*4PW=Y2~)nL|ITsfH|lTB;5P7+zxoaI>@XEL#_(r?1SQ(^0W?wwe- zrEQ`&*#7;AW6dXBtW!P5G3Fd3TB92kzNA{l4zfNB|1sVTxdigFb!aqO)VxIn=6=>$ zMGD-e325O6XBeVmEucW#c2uSqpoDSSqFZFeU(Ad{x{mTLu{c~NvKO>EEOiH-awe^n zox|e^9U$Cu2-A3>$8viA!rh~RmLEw3G-cjfnl29GaCYY9=;On^;L26U+xfb;mQBCb zT0AYf7@m4`A!nV8;olvNri%XjBNCet>6*T}N>;R5go!hq8noOf8XBN;Kquw3B(Y(5 zp{fqibkX3{P=jVW0<&)m9=4a3;U0V9l_o#DrNZZH>4fnPgU&EggU+1RfEd6=eJ^{8 zr#NH3nYsx&x;1xpn3~J~d4K9PkjOSOQB@`pcYav(C|0=wBYt zSK^nt>q2?tOmh{3-&b~8XxB%STjVK`Qu~6(Y2x?YzfwW)759_6?}@^-2HreTGbqQL z4#KS1ZJm^%QO#g^i*2UcT+vFuq_Kzd7aFc-pjkHO*>s0E(BLYhAUlgGSAUy2=cDO+ zDRZu|mo`(o&(SVPjq)PqWTxQDy`-p9i~DZNUa%V@*|sk7{V5ph-sA|s`rzPi(+`6A zyAJUagDH{89`xl~|Apxkm{r{CYtf+*NwdT=mS9e4O;w@Xo$jUYwU-yOIV{4*84o=M z9+u9y9=!*~6+_!2RmGYvT921^3!tEY1HqJTk^t%(u?6U(`zppD<{!4EOQ(3DQbMGC z8whd?@EwmXEq&2hA^&%K03k0ScVw=L{^#W9KD{q$kWzDar2UMu)ip4Ou0P`K(`GR? zP*V$!Ue<4YfB=1zae@b)KX0ZjiWV^GCk%~4IMsN)gNKng>B!GG6-*ZC1<@83aoQ(- zp_-tOI`%hNFSd`W3Lq3?lFyQG=NKe7%2B5ck;%xSsP)+0WS?fTOXNquG*?GaQVt4SQVr2r}~NI zJMTGEM9~14myuNtBF4qfioSYlv$>lky|1b32v+R$uwEA=JcaBDDjjrEZb!~BcYa7; z)=Aoh+rVF6f_k`BI?NyO@SKcbdbIxOc-Xg}-oI|KTT$H14GN6Pq!Gi759W0b)CxBs&Ax+kT&e$VIU<~CjgKLN8k3uK|;Mr(*`tn z%Hk?()E1sgI7ubxsg2?DDyV&^l~AWd%a8cQN!H5pC7KB{TJ6wI1GsnVvD7HZO^Eri zPQ9hkRP?HT19OqSmdFX+07~+?c;Dg_mCEz7D~fe<@`!o7dE9tMdfoxtGi%5A3mS42 zvz)ERC8)wG+P*w!Ps_TtDkdfdA*fdY!^*BDxkp zjTJMfi`a36!9;KlYFP1}W#cHCg0*JC@5&oLPFai&(M>0g~$@6%GOK@It%$}Sa6+}Y_b&Xuqw9X{~3 zbLtC;+$=We&1L`MGty<*!LbvM{k{mVJcC{K8p~YQlP(CBz4PX=?`@z#xlGD(&rXw`j70i|uQoZ_*FuG$v z+rxRG6`FRz3)kq~Q4niVi|0g}8>f*%hntMF=c?kn9P<$`uOwcPGBKemv1>uvplckQ zcc)zx3=b{6H#)S|V>yhuf!{&3L}YpoZ6g z>`8(Xb?!vwevIAD)nxvb9M5^wi9oCNtJgNLO+Acp9ebbor|3FjZUN1{i_pQno=UN@LZemi1q#H zgFm+)5TuZJ-T0=q?AuDvWou&$d)OvY2j*tQc@G@^RP0Io@x23)Lz&m`x$0Zm^P&E! zfVdzFJ)l@)LiA7dD^S6-_Gr3SJrkMz{gnRj9-R7M+5-BAb7Gw8){jfU)CxecNec`1 z2M{x`yFY2qpQAt7sN?AL(uoVryS0nY_-S!}Dw(+BYxWEf)UH>RcJ(s2jg#Bu!ed}J zX>G$rB!vQeIOO!U^~U!ta_d%|(7JuW_}OBEwS^)PMwT0nm;7d?Yz>|2T+$ z)AKWMdkt&5O0&F~u56zapb^ZD>cOz01&YQR4ky0;+%@z8&+kHs{;n|5j?$wi>lQJg zLfY#GCrgM41KO`C%(~Z|s1tvk(PJ(*bd(UgjkFfSsAkVFVh7y0wM~ zK1@&JqNmh0k9LB{4*Brr=bFz(5I!m^Q@MvvuNNz1R4^?b-sHqviV{>RQ;qfN>C!yV z9Vj+N3(jga;1wg$jE3b0;$?ywMJ2^-v5+j=S;M1{_ditV==E5omns^CZ3xGGRF= ziCYKP4R2fOr%&JlTf8}HZDi67R(VR?Bm`dg)E4qhE$O6;s81_iU<4(RNT%lh>2*}AHKqMS!6-5zm6_X|K6P^O>I=x+7X}@ zcu#ffxs49xHeJ&1co6g2z;=V`KEL!{@x3)g{1Ykf688l-lzHSVT5LbRY^O*_vkjmo zRsY^IH|Bo-_vQU^Ov8c{y9H8;2p)<-Y|O}qfKLF|mkZe^KqDZaa0?%h##~sE*P#aO zS~dU!&3pPo$v?rny7M{&rC4$}hMA!dsV1uur)IAS;F??8S7J_|_xjomJAT`lyl&Rx zo1f_3b36uDm=mAa-cc&NYuff|jEw6J8tZ9ene%e;n?1N$D(Oq@A_X2t=v?S&_*}}F zAbckD;pMCWeTjCBjapdt6CAz8=xL)aYkH4Oa)b3ooWHKey^Zl4(gOq6qo5Kz`0o9i zv+(q}pyBpK(?;uXGdbt@!-*VMsi;IAg2_+N_r9ieYlrEpY^R48Zc~S9A_kt1!RYpH zu(6?8tqjz=!x=3c(A>nTMOx?rEEVUq@SXqR>-&(jQ6`Y%*Q!6A1Gq(R$E1$)5~sPq zq$S>U*X@XM@#UU6qzv}1YclFY8pO3vE3DiLyd%QmtprRP8NLuacbbA@OXi!ua3jat zy`y7QN^@4b2NXjz1NJ%;#e!_%o3Vm#6hWu zc~q3@AK+IT$;ohdC-Me24dijv>Cu$fzaO8` zW$7(G%kCLhFo%yU!tP5I)hl3Yb$cyf4YQ)a%42t|NT@N*rIm({GNc~;eMtMZGersi zlLh2DO_?VChEgm?1mCG`FUeF^pK_`f??#bA1K>Tva<+BwXk`2bwQvl=gXyW*Y`FeS z=Im0h3pR9E>tcahoJmuzP#x~nJOgY;PtXvm@zAKWj)uBH$nsRs_U7?uK;hb3W6i0lXto|1a zg6=8b<#i8tM9E$euBQC<7Pr0@R@2(Tns-tzga=Ts=eMXSbRSD|ju&`qf%&3_8@4%LSH~|Kgub6Oo05mLV6Su1DRwKVe@3t8k@FY z@eUIbPoz+!CQ+4jl)wcs7K5j@lWd9qnLvf7Q!yDYtDo{2RqP9RR#*(WIQG@?88kf0 zfY{OsJV}#Mt-d6fb)-C^6m1z~o*?%?+A_HlpdW~TnMGIn!fS5VM_&ge4XrVGs@rU% z95oTNYay(~@-x-eJ>)>?N=0qVs#Uo%qB_Qcm_U=#rO1Nc8Oa(G6^^j^7m#CA3yMnj zR(T42*gTY}0iidythQIq`&9f(jffmt{_5%L%1TX|C>Ft#quV}-wl9;;Fxj{0p8{%^ z!fu|TSEamHDJq>9rp~zK2tbZNSSz+M@!(HhrWNl6y7rjC)&W%ho%Jt&etutIo*0)= zQG3(^P&D_U-Y=LO^k)|=avVQ5-P{Ni2So+1a$sNV6^V^Hwe{Vmk#M_VLoA}j3CgZP z4ph1xR(Q3A(w`qSd$3I2kSh6#cPT{e6qWF3Vf69k_I9k@>xy-Dcudz|%Bl!s@#;V# z=qIy6fk?P3px(H|oje&KXm;Lo9;@AaJG!Pn?V7gnPk*|-wJgX+U&gA0-8Yv@+^D&! zrcHCneH9hI%1Vm$4Y~g5wg2>ab! z3SS)t3Ep$;!H^6NOzrO&=>B0h3BJ8nQ!Us&!?2pf-`x6iNoc(>Bn7#^ZZH? zLAjs!+@JSfk9oS^H!)Y+EQ{KzaF|cFU{= zv0GiX&mgt4S_RMAa4*~7TzqRA%TLk|w6~T$X~qbhNXbhRK^nUgPGhTWLp`uxS1lVq zz}08Nj+2zQ2PnGqIPWF)v5NB;(qMht&k)lfKUQN@k)P zzGKlVxyfy1zd_JNE87E3$+{q41yO8mH5%r=EZ&~vL%Qacu1Atzl>Wl1a;jDQktF1c z#SmXdWn|V@zCLdjCLE6B!6RxS#)WO{OQ~}OifwN$^@J!AWtM?waI>a)koP8Qe7rT- z9e6mrK(kcyIb3daPbd0c6*6&L#ldId?#6HwqL?e%9G2DcDcK%xCca7Oxo};6R%%gRMq$e~GTU`m>TBI5A(Z{%rwDj8vlI{;$ zDqt=vhE>mB0bb>*o7*i5Ch>95APf=+Km7?55+zp`6adc#< zW>6{eT`8_Jt0M819}smMMP-#@(H@FgofiZu00j$N`sdmZ9cpzgX}K7#j6Wt|j>Q)} zi><4CgxbRitbN$HTl3wCT1Lesn8P&)ylGvfipA~ot7w(Sl@3EN3#R5T&&TGqU^5W) zg^b9|$BG}0g}=i+3er*cSMnrbokeyW_9h7R1 z*xp$~)4)~b&8%ZHh(qeBx@4GKs+8O4ztq;d_bD)}b{6eaaR`bVNFA-!&F0j7vEy_F z>N#Sdzaw3^^BB07$_Ur;dX#(#)SLX(N@M?xT_(Ds<`y%Jhb{G0W3f(45QPNjC3A93 z46k2xHNZ)OiRstQ%M@m7PpUqSrxi*ItIfISx(9qSo|ZyXs4t6D(7$uI39tEOzFd5p zP}z<`x{!}|zn`TjsAXyTWi4`?8QymVY7t6Z{En)<6PG-QjD)2P-EP_|mb4dkEq6b! zx_x~+vTGh0(BfoJwKnosmUY*G;G_eRo0{w7WcFoIAH&{j^3i}Kn_P)Qvgh=FH0}EHP;$$-wk9m zYZKQ=ymS$~pFME&xe?#adW`OD&t0Jn8R~3ChgGozsrOXRK!MD)T7INXAHx<>#;613 z!b{tiWUCeH5#8|3*YLqEa|n)yzPX?myK9Rj7y!QGLc2N|L#1t zl@Lu@BzysK7qFP&4@HOOrC=3sNZNtF+?_aiPYog{^0+O%hV{6*svQeF&jCVVZd3$jKDDvV%C)u?yGCpUrb_erDc{3EliUGdy%*Gxl zG=Yjm)S=U0byWuSN%uSGH)H~~;fV+MKjRPS4=`LOeU|VBSn7K53NVrB2WlsUiZ;WVLy(De@4MFTa7BjI?TSkHTmzoM+Sty&E zkZlhVjqT2&_hMU1b$dMD3WBI%gK=C~FamY!MZi{{_RWx}mlO?!R%vZMJN)?Q{9t>` zf^gr0MQ*&zME;I|WK_@u0WEZ|fz+9(EN$n7wvUdSaSA)Q^|RqsKe=|g6IO_G z_STFIkQtt$160T-dzyP}V@yK`yUmydi$!|xSc$dAh#EiscOgX}<-RXwkq~jnNbyM3 zA@u+y@47mRpCPm4Jhf$^&zu7ylBR4QSrGe(lc=olK)z+ka$W%~X2+(V`Z#C24Asy` zGbRhaPVf44@mHF4l{8a^66}zM@;&#SMdFxv+P7lxrQkqq^8tOyYzqz}CfAf&H>9(c zy|WWobZ5241-@Dpei>5lKj74`2+44Q*@#IiHTmf)J^%auhuhG`Qc=fa@|CC_I#-FZ znpWx;FD5b+NrgCF5ofqml;cw>{~oil(I1&bR<1c?j2F>%F0MR~6DUgiPEA-S$zCq# z7|6a`(Vy#G)>s*8o3?`x?|z;`gW1qBnoNDzAx!X}*?KPuT7ua)f@1RpNore_%qDvw zw>&+Bf0nzyE67~4kVD}&oUo@0fp{hUvr)u4oIL+d+CIM9@13QG1=9c>CaTJ@v`aSx z&)TMQNE^W5R}dTB_HoshMJiBGE*+|1LzkBq4FTrmF{t0-v2TeSeTv0(5tkcZ1Ga?smJ4>*VETU(kYh%PgONgbEl?x5}Ve7;mu3cjSssoMcmEu zm3B-LaiFDIj?OHwMowv(Ts-qEjI11dSwVAjHs~mp_rC%`4!OwF zpGxL6#QYMNR|EMY*W@@9l7UjxfqV_e9o7}}?O^A&9#XVtAUN&c%}_SgSbd0<%LF3_ z$B2{e#epyubaTB!G=KV?^W*l){l6P+>sJiJ!;s(lc#H1w8&E@~xMp0`Xjs8ixtol& z8$Sw9A1Xg+*+%Z%-Tbsc`*WmqSIzF_ck~}>okhg+LvaJ(E2yAr zzk^G`s)Y=0Ad}XnbT}1{@c1%EP;Awy>#8aobI66U7StRr!b5zKyd@2->D$;JU2F!n zL*FFBO!qyA@wJaa|Kvuis{&?eV0-|*Z7nmlo4YNcBKwY-ES!(f3(;ai_W$zVMQoCW z{=?BS+LVW}c3C>Ewl#WH?zw2biw0b3!dTs@GZEQk#4cQzZ8%tgjy!-4q?J1@TCGQ^ zo#7W!$U$*YG_Yb@S8w8+d?iHPhHp}7N`+%3Ngc6WaU3uK-Gw-iM~S#5=;VlfZ7Ik6d*Ub&2jXK_S_s+7c`M` zz9Vo-)hzUUl%?mM)Ctop^C1^HZ=JyA1h*Q z<-07NnW`j$-x31&8&FkSnK=xJ*B_k{S)kL9>g*C zaZC4DDUpU;HQZ%EC&<-}6P$}xWHDWuu$4~jvIau(*005|*Vug<$|q5%J*vq8liyQj z-;{)7aG*NjR&E|`ob-=3O^V{+pGB~Eg&Jh&hZZ?v@db^ zL~*I`*Zt?bUcWwJjxUvKr=#if-0`$7*Te5++ppEJ6q;&#w;=5~j(%V;C-J9v_x;-Q z_7rnpAFoRRQ{Ivar|$8=B)6vrlP6SYDpSqrE@nW#r|O(B-?t2Oo9*sfkK!rt&SZc1 zawIot#l=$zDCd@kgUTVQLoZW*T74>8*bVG_^g9DP6yP zt`?6oQHDSS_J@rjNw89ckSM;V_t-p7q2}VCP3Zok`CD-^q40-e%a`yqRL zM$2gp!65zhv|-!4${SIkOw6VC&erUl4(Eg$x536*8+>!PV9qnq-qRy7?2w;qNH*33gft%ad&iFP&aiag3H?UE7-kTfM zuqAm-^Q|(1#4x%SLE4bn-oqSvh+dT#Ja(S?S$w9Fd7PzXZ*R$h-N;y9tOVWU@ zvB>I#Ayyd;=GA1Gw)!yI-iX_iyfgddCQda%v$s=*@Z5#uFFIGI6e)EDNn$93Z=lXt zUv8fH1ur1XPz1BS{Yr7bfem2^*1xL}6xBz22!}(e0X#*Pq)#D$yeYmxK_;iCXsd`c z-RPd(Rf4SVk3&VqqO;!Y01MEleVUj z*`qL`a8%OG;Th`DxRXMI$%1@-5-w+*0Opt%b|zB7FFY$t25CdvU^0}K)DaQX;<5^Sr@SCyKAiId7YJ4ps3wxRvD)m>D#h-t)vI%F72Rx2ozgQ zBVOEWOWK#0WmzbC@tv<8;VSRDqAz4+(^r58#1JyIQ1Uiyr)JEqw^+0GZDyCdL_u_* zJQQYI@SA>6lVy#g^c8eAj6>A4qIA`o8{v=94d6Yd_un0J;l}H#fo$FBueQS2N?;bx z)ZA+fSJ0>2^3Ykx*H{VlknfFa_{C$4t*8vtMOZO!I%`<{B$zgM@>mUQjqeg+p{Qd4 zs24S*vL2@V*yW2w19Zh#pz0T3h*VCWE+vS72fJ7oYUwS@Tsu{-AU8fMGQt-(7=BIcK zy0sf!6(XFfjr8|z_}rN{o}U#1&lAyK0d^&g|JTTT-<@f zsY45Drr3fQffHqEoSy82t?c%8u`no?T|g)uBMxZ5-BiwV{7ASB(l%NHsMFf%KZa@5zFz<*2z6U-h@w&NRzby`=#cGFyX; zrjZZt*2+o8<=d<4n}&Sr0+Y<*4T?Ag-_MbIBRYDT`KISc;LR>cnlYCy{4?QM8QyB9 zLsP9BooRj_?}v%CxqKz7*?`d#X0tte&hE;l|UzXj4F5@?Kd{O zui+zW(^eI<7bXW+H!2@B*sLMgH|5-XAzDqFrnd!N#<)kOi*ue-BDfVHwoRm^uD*AV zg7o}`&rt7SCHQDWsr)4wuF_1K?aL2_q{Smh@G^<8fQpx2MehT7Q7|GCu-Hh*wTi<) z!|_kl{YvF2f;78F2-YnW#<+zvsp*tO<$=3e)0=w3?TqqP$NAJ!0aogjK=3t6OMPt&58-r z7-Qy!b!?@9mgM0uOIxsEhyza90c3hUG9@JTrsC0v+0gd^0bI~fE}-vW)3)wh>O~|Q zof*eP$0XI=#;os1;?=T9IZ1KaI{(4Oc_bPt7r-j@%|VnqeMdk%^>jGFS^2irfOSHH z&P%q2*?jHNPE9JNa8^p|t%g<+StF3=AxQV}o&3T~s`8e48H|j6COU4%!QbDiodKpR zWEC|XwFrzN`c7QmUD&lVZ7*{0)vScfo6#}X#RTT^w*Pd#%>(1^xc`WmOc_!+kZ>xN zFR`jE1TQtUGPDFX)WIrp1U0+zbT-x{tx8MViG@Zr7vG@9D6xd`5hnAcd005MeJ~L& zV}Uf-kV!hLlpRG*wlms|Sfd77k0%EKqxtSLg>(&M62BebEZv}!n9Q>4j*CP|8$!lZ zAPUeyVMl+l*47sMlX*NF--c5F(8AOzn^Vz@~rB(!$ zD^(q`!^pQ1MEOY6ib;YGVX z?KI?cPSPLmM%mSj0K;)(t(^zwQ80UoeqL%)hAOF|Riw}>RmrF0-zL~bMhc4QomjZd zWjJ+15s(#)JsT>X>Sl7Ss)p6k_|oeR8p;w_Rn$IKr<4T1wHkV_aEwAOvRYrMOQq(O z66MJK$?|>}n$nL=r6?MkwXC4H=P<~OkxI8u$2R)L=CT**4~%j#nqp1|bG|h|^W)X~c6gm4r0tEYQ!nf@ zJzzrPP(j3TV^H5ouPw?+YJq*nL*%}7e$0!F{X4RE88(|-_pS9hdp_IK&BHqz=I4U< zb58QIk&>n%7YfW%N_r7D`grp*ce-JUcs@bt6mR@^WgB#T0y(_08 z0y|R8uWQz%MozvL?ZZAnaJp|>)_$9(OGf(ail;&4uqGVH)t62WEC|ZWkM}C^z3#xi z`>+4i`Ey*RP#P87Cn()Txz_>!9>!Dx*PqVccdc@H8Ch!jHa`t=>U`n?^p!x2Ez53ezPlxcG ze_gsBd7xyER>``PD#|C@+qj#nxEBe&-{9RG$-h%f%91=%G40**zY4;)&IA#+lO#aK z1oG(jx&QpR{eJ`L|E2`#IUV@D*pU__;=!iS?b$>Q`CV0k&f1m*4jfxr(86vH7BK|!AOtr7Kqz|Q8INLrk+4>^d)Omo0M7~vaHe-SHIL- zYlv1H3Mq{R$so{hd{J`&j;u??DLsv>*tT$i9c<>&?Un=B5E$nICdlU|(4)IUXU z!~dLNXPQ@p?g89VDl=)_X^e<$x-OaNb|VL)WZOVmT?*)cMZF{{Avc5pFN}>1t2L%z z!o%jlRvbxRsc0_X0P%<&mJe`-) z5fI5?CpJ}}W{7;u8L2)JZ5CKtDl@n3uI;1UN*$P_70rP#cA*HRTMc_p%9)HT?^y1D z!E)jcbTi8MiD12_N7%Nn@Fso%c88ZHf0cR#VNOV{o1OIZAg!3rG4-eP6%05#!R1ge#-^5pRIB ztNP;@)1n~M+>q#VbjM(KZ|8h5yq}xy?-^-XHuJvj#e7_r?dS5Sl zv$Rze(hugMhUV2|KPGSEEh&;K!3XH`7%G!~EABZjLdj8Owd6*X|4?1i7NSTHX`>xE zCh+?DzOUSmtaMWD{A_)jrq<@wkuY2g!NR{W_)ks9idx{k6n;A(p4~sEVWv$x=bSv6 z!X#t&LQcY!H&;?O5yH(o)uF!E@|=wXoc2Ho4(&IIJwz!G=*wb0i%;wy>#O!FOAOs~ z!n_$Z^z}Y;XwaE#C^7PHRm3 z?x3%e5{t43)}d4n16ECMN`(NbPY?v(-N4=LV&lhpPT&t}Af2h2+IToWUr9=uXnMp> zAXv(w1d1jAC-_3p#p(TcIDfz2K<5qidpP<3lpX~Ba=ZXwJ%apgje^RO#kvS1-q%>$ zk`w6gN-?X@eEz0`%wOqIW*aViM@}LU2WDCZfQUe%k%qX)Xz_U<$Z92tTK!ml8N-tx<`4PP&T5=wb7^0xGqAAEk85;Jp%aMZ3)NoA_^q3Zv{XuFd_>23zat+S)R9f z!hmx{bQ)iHeLR?YP>Q5eajPU6i>t2~8* z;NwB{owt{0gTIOnVma9+FN4xa1l(sz8!$wQ!xpwxIm!hqwSmnI`ey{Q6a0I%$CML> z&fEpfI&;seB+U|7Go<$_(;`DfbOP(QZe*a^<+L`f8$vw`{^U7Cb>%YV#YPLd?;KXI zGRZ(&no!;i71~DiqgbakuM9(ED(cd`b%#?rH4B+77w+fYTeMc|vqPhcK$n>nD{~V7 zO0oS;an`?x;5Pp~qd^ZPjMfFahH0nZ#Y^#f-;QMmL9#Pn_`a#}#CG5aMnyAT1pra} z5~$Nd<>4R-byxUn2D|}@vs9U-nN>B4W2_S5z+`DpsKU~?BGQ>oB=T#K{P9a%e#h3r z>KN6l6z++-@m#s&&Opf9iVcG8EQ5Wy&4YSA*61d1@nV=7c~veYX+nkB^G@1}Vf+U7 z=n0xmnGUhgda;(z3R`Z${>;h}zXqm6k8(JYaD5pix5^mTHa#|-tR)(A%vkf2sBo=2 zG3Lgjl&LmH^bM>dEo7<(7D9mp$`+{kODs4r{z4pFBbAF>q9c<-c`w4dE~WK>S;Gn| zySz!KLOD@7NJuQ2RXoXWm7oo|Pxwc~ruGoyycFX@U#-TVMs(CMJZFX}-YUYwSpFA4 zFf@ZZ0m@GuYBToU>%D4>R8-rG9eI#OwJ&Qgw~K#7b28>w(4FS+qJi6_P~uAcHP{`&{S0Y6gCbzz2ouKHfC%Q%J)={ zT!L|{4O2Sh!GLKE4p~)&>-woVc3z}Ma=o$_tNq)LBS_o0(~rvzPb}g@7UA0MSAOh= zYnu~a+}lo-$FV$l&&s3}7}y$c@UfvVQnz{?A~Ng3yC*jOV~^);kmp|>JzmL1BW8VI zcJOMhtFgPKOQ-`5ZF2vw`C15BH}iQ9PS>A}v-iF$zxQ9cpN!u%Pcqq)Zm&8YNVL+` zkgbPLgTI&IU$V~;59|2xbUbsL>|f<4ZWu8Cfpc8^+@#9H-k#C3%2r|!8V8ZP%DoEO z)?8|tbI~|xxS&i!f$gXJopy>{dwKPDFW!6SgV?G0Nd!1-iiG zVb)nIx*0FPnzPjmZ=9ndfi`q%7b%|*$9jAzoY!Gnag<;TI&opKQOS}QVjz1c=cWp) z!F>=w{Xe~mb_d!82%L3KN0{eT!~JMiu?@~HQ80v)3M+vP5kH0|2Cs8-5I-wW!w(c| z$H*E^tM{5BC*@KXp*w@+eNtRcT_~tRk|F)50_m;wJooQhz0Lj3UpXuPMp+#~2%^TN z32D*w+}}@5NHb~Oh%1UKHPbRYG(PA+b|%Few&GpvGnQxP2z}WPBl4Ud7pB)uUGiqj z?EgOVGSyW$wf0|bTwd6}$^R2`a}!q}A+-^6;MnT<@Pz`ndmlj)WU)#SBn%x5)B{fO zb7TU2`g%`dsc#e%2y6OzcDqUX4?pNX=ds(z^WQ=!D~U+bWY0(1B%v?=5NJr0g4eN> zL5Nz4ig|_p^as~$R5jzRFt9(l;BOqzzp_HxAmfW;uDbBdp3cmW+=$%RAzqiWDM_B%C;6HdabU}{8X22g;d49fi0P?kb}yv2~HgW?XBq$5$4saM9w&j zSe}m)H9i~9SeEU&6U;%+eMQz7dz(~?RFZ7gZD618=q=2~J!R+uW&AlsNih;!wwQ4` ze8kcYf)zBj-1^MARhcl{EBxQ z1lK2)D4R+47nu3dRk&G}ycN$bpp}32(@|mLc+{1&lHvJNb?f;TV_OK+N`^t!A?Crl z>CFPWT!ik%o?_D)30Zt`8w1rJBG376-36!lpxzO~t+pj_p{L4(@`d-6oQzAW9(r%X zB=rxY{NI($tq{#=)%})R?&5aLj7T)NvZ%^SrQ6J=Oi|Jr*A2Qlq8Od1_GF(x2Ru##oVG0e0EGP?Z5H_Axe5ps^}P z|56|&p`(rd#`=R6H`%dDe%hD}oxubi_dBN5jWNMXt8$R&8Y0D`J)Yk(r8 zNlWBAj`NM7jS&jqViiY|)z!H68HiI9gs$nJBsH3KX?|o&)LNDidOsO?H3^#)=~0%?B-=j_C{?sRr`hV~S2s_ma%f^Ck`URtF4xNlf#Zbm=eN zIc)Sn-SUJH-haEbW3r5HbN2pn$f0$EkV5*$^F*;(EEj|%7#W{Xz45+iH_}^h(Hc`q z!Xtil1pg=QSU$6c_M`zwPkReP&zK)OO7&59&2_oq<f7!u+ zu`=ud^_RLqUd4SX{2&h1y?zB7%Dsf()z5Pe^)EO4Rvd4I%Ya>yjz zd0@@3T+Gk`0sh`@j!16}W{a-NO8sK41=(!Upk9txelLC*Q}%~O`fVY&6sBGlg#i9K zf6E($E=2(#5q-=qfyHm=YgWc*qZ0TM7WaJsZ=PV{R{aYG0SmX5fb#AHQ zzL=EyZh7P4EF`SgP|&Ou7PVJTSxx&2Z)fN31Efx(K{$b}jL0e8E zeuc65pPM>*^M8K49h^g}su|HM$!wf4-Yr(YeQbc|n;Xn;B4-6j?fHF8X#ejn#XmX_ ztUzY$5Q0bpa|U{398$+77-eg@YO>R=J5hLy-K}#l1{m!$x!55SwT6&z2gn{9gnuBn ztz5=`vVc1Bj{bH}C3EtQYsB+P4hyO*sI z3VRi1B-aF)XR4r<1--Ff|C?hiitJwa8kJ?gVnK@3HM@&eRFkHlppqRZQ$mEK;#3E^ zh}7}*$BAc^(r|=nOFL54M_Q6-)ERUl=Q?U63?+_*zK&wZD_RRsauQ_K{G4(RrMyw@(*6$MAxBWk7E;NSBGhw1eV9S7!-Ur7tHd_Nl}s zkN>vM>+n;L(Vx)0Bx z#_ESdK;84e!Ti+-C-pMy@T)OY#;Twp%W;Jjy6?q)gCa8^xmBudBKJGGjoA#FNV01) zW99hj5dV=*sg!LLr(gHdFo2pw?lF0SNVvn*HhI$kT&3rYj^84=)r5~xBe*E29%f0} z`Aw@iTZxLS0g#k5c67I2#dOxgF}{*;S5VrC&iGFjEJ!DP42TPw=*E#`;}Uc8ebTqJ zDrFO->M+L>b~+cD-Z~7`6*HsoQ{z}g0Cu7oaMQ6t58@E^l#9lK#&<4kvT4e*n4mRz#g4Ot)em%B$t{0alWisTCMlCJzSn8>MAJ;}LVVqxO#E4DCd%B2 z*ZLzqgBw6n#|K$!|+JTVHG0mTJ9B&L-C`?Fo5{JEZfzX^=ULNz&X)Qh2Diw=^A z;9Zf;IY49O@Z<^}bOYsL3GC-W=05_MMq&($AUzC7esm-)a!y~^MvAn;2VRnylwaCY z;!bz@Q`*+6{d~J3@6Q3kDOq$={KDIb)oD#ZHv)!eb0<4Cx@;w*n(2+hVP6>0O;JR{ zvk8ZY8k(X=Ua+a;*=wRtk<+xxcUu#82}!tO_*EF_rIa1^ea;P=sO6^El-pkIEyyJx z9b98HrjMdOZ|-?U;H!Asjkv6s7BT{2D$bmq<-5<>Oc>_>2n7GywZHSdFwW3R$jASL ziO?c$1wBs{N{IL2{L9!y(vtQf;$}ee`fLIf3j^lHw{!FTdsrLO;M5dI`5%5=s!4Tz zA`1u2YSx82XBIceC`Iitl`{Md!zWLH!U<^JpXW1Y{Ixr2;-O6$Ea0T+>5kVRiUPmcQ1lUbXuFMT#u zN>6_nQ9g75<0eS4r~}@t zRy^iJF9&=!OjM8pQCgqIgSZWG+J_HTNro*34pBC5y-i!hu1W+3Q6VzT5d8 z0cT;^M~bqc@nQ{F4FZ-ot|H|F# zF}syHf>qSDm@=38?g*hn2}NB0n%gTx!tG72ZEV5Q0F1tLIzoXyZ%0q?mY#||q613D zv(dDr6^${>OV&09xYo$Or*peR|MN%OiRjv2Eu_VOr>KC4Y0F*7Ove~z8T^CMcHn`p zPea;qHoR*21am6oUn`LzEY;zh6feHgD8sR#^Sy=tJe{wj z`f`J6yh%Li5TS%64#+BNEZ50ijzTY(!hDZg@J5DZMrUT=UtFY)=1FoB8waF%NqbtwQse*X}Ik2b+0+c&@m)7kjm#8BuvId9kOD4ik5#Cddou= z9#?jTXj7~f)465I+Uk*QYT=^1tC@~RPQvxk0+daH>mG5?(e(y{EI$3l^D&hXGhtk1 zUGhm*7U)PNB3vg&Q}AI@+MAhNnkxfa?Xz|vZNl}Jda-y}>bO{un#KWChma^s^T|Ap z9Vyx^qICMR(n)8j3JK&sI!;v>yF1HmEimOo$sR~n_{9zT3lB6BOYn=mjSkx4Ox6;g zw7B!eZ<)sSSs0UyEx~1b6bM}dN^PrNi%Qc2u9mE4OD(FHSEnP}C5fw10{%jC#e~hZ z=O?Q=+6=#=U^m=XB_Bl}Uo@iGYtM$6A<{7#ypV00qx;Z>*T>;3%^~tUjaJe(ru5sM zIWn)#A!_VkSk^u10m-68dY?c$f}HN$;uRa+;I#LVfEV$}24BhsqYx#>p(gQ7ARL#l z;>unO*wRVFwT0cW#WiL4#BziRaKY(65$x--b0PeEpjnv1O`s~Sbw7UFIX znDScS$~>qERJB=am6Dkhliz|h)&WHD_l71drPaPhd@ zH5Vh%9WSBKg|s5EtHW{0C(LulbUst65vfy(UfhT0vQd$uIFLo?FQfDnbKvc(M?ew+ zRvADQ-+~L`%7mYSXOzeA4qdGoVAM`ZY{IBSDoS`sfDp)fcma#+(eUuM&5${<>GeuI z{q9Uc)=|=FiosReN?6-YN>M@K49I)4F$0v|<$}}YX(-WR$cn3E`%_C40Vy~2BE++t zTlIT>yHg=fgV3EQ7yOi^U90oymM|fDLvAbLthasx9k(YlG=rKn{AMCSo7?yY8$?_j7C#2z>I?uMWoiBYnQ;oF2tPBRbl9t zXRncz*Nw&so4uhbHi9=t?AI}M57fd)~XFEjUg79I(N#)KEU{uL}DVo)jECcMa{<^bG9Z?5*Aa^@fO#OFQ-&dHpmh zXhg5dDM2d@2wS5IVB}KVPHaz&n=;A<-Eh-HSN`}1g^qko$`UnWT-&`%ZVJd*u zq0EJ346ZoxoG8JdKCohuHuoLmNWk81kOowyfe^X0p{}~n1=6RYZ+9^06zS%_#qX~G zmSq{7-5OVhP8Du-2m%_Y&f_#lHBUL9f)qVIa(ecCgz`QOlKd|TbL0v5^2XhRI3QK4 zxwi9ye8iyi^l481dvAOx_y0y0-v@uDEG(HB@k6JoR>(zLs+li z<=cugziRJUDf90UqyeY}#&|{`ynw=H1Fd|=1 z!5#?`gH}=>R3MfKg-Ih^YeCMPv-WH$8=Tp<;;I`9M@|FbmTKsiq}cQuSNmm3>0h`BO~)7PO9bx=c+U6q-1;f3f|! z1GD{N@HJAZPdZI^Om0TRCz_`Cz@BcV3DCvC9gE2`CpS;7p2iu)?Ze)!r4JO5m`?e$ z1{GYi+L8h`=c-k@il3A+BK?i2xnQ;>%CIH13Gg)SQqVkwu5O>8(xJZ&| zChNnz4h@Kqvy(B)$~2QlhX8eX(`+qNJh4+Nos>D{J@ULXf6>*Fdw#ihb=$}oKT6GZd7u6q4AmDnLcLgL(U}H(PY$%3T8J@v@h7Lrnk{t8C6U+mT%Rm z<&+)fZ+hhIe97U#+quK;@g2WY#nh#0xH+zAP)w1VY5#Ufe$Z7hEJPbi)l~hk0Ms&C z<|%liholT9$D4poo$xF!yiZsEIpw#%_G`lxsNUMuLe1{Xxn8)Sy>C9LHflo^%R&37 zOdq*3a%22;!}(5-64Yi%LApb&IO_zuvw`J28YEYSQfEo@h?J-2oN7gpn9`w0W3g<# z+^K88nDzr)D4UeSr0?mcc?V3~0z>czr8W&nA-zT<*(}wr7a8XYsawp$EB$_~TKI4S+~v zhf`TwuB7dwA*p`;-D&ArGqxbyyps=$0ke{HFE2;rMp{sJ{5PIOeK5F2Nv8u9ITL+B z!Jan5e|X%V|EUbi_&zgs>@K-MBtPMqER#4&c2B*gU0BY@+x5I!^gdLXJz=DkI2hE@ z?Cot|hzf=ka79)IDhXzldH_fFqPRoi@64J74Zq?v8BuO_Lud221>W^{A}ZqA{IM4L zS?IILpAF*)JKzWMF^{69Ilef29d7n+hzw8n0)dPZHeaizbC+%Vf5u03-Tq5In~wON z{U*RV>)L-%qEd!hqQuPxhJ?BISJymJJS(!uN06bX{>p+o0P+!kh7Amf&6Wr;I6;xXDU9p@&7~z$2%Ejzz zXhLLaL6XpLgLtgTKOfpk*f$&)9)y=7?>MbxU$o1$+N|!86i* zBkz&`;*28WP^Cd-Xx%0XN^^f1xo?5%=7sYVBF=QCif|BV)@P;54~eNu)9SXQ$pX<>j8WNw%-!0| zT199Vd?uQEczWYyO;}LtjkF9Bc7{esQ|LWuiso5uJglcMFv$0!C-A3DfNiVqf=F9+ zr7qB)>eKL7oZAs3Atn$zW&HVF$6!Bqh&e6n>Pzj`Z2wNDwsruTllpbwa?;_IhUYzm zuzlitLgw}mXsaG18sSfgk*7yE=*#t#?%T&)!H#Ny^NiberE(P%GuyY}~f< zha}(~#L55aDg~uF)MJ5{E4NBww&oB5HgPoIgN$%e1bMmQ7PXBdE_S$~6E9jo0D+GZ zYI7bopY3w2RsnQP65VT#2gkB-pp1<<Uq0-eXI$>k9Vd;w8$k|XEd*T!~WRkv7W>0 z-t+Foq1U0vtM=GK*dh!a>By!77Su}%2z?#*&hT~dzFRw3WXQ{59|6I>;aC~et{Oea_)6rDZBB|`>1~y1{REGukoA4;f1`ZNKHA-NeD3X<{AgDq=OF$LahVgF;WKl!`(C~1*Te5n&d?noh;$^yV|Y^whl;ASS#VNDB$i)nn(^BMpQrzSp$RJj;Px;>Sz$Ji7i7C9KU{EDR~Rc99c+c}}Cq$^<3<_;1-E7&CD z@lkHc%iIf%ZryT`5>W&WCyb+vy5FC|yRl<7_q^hG@T=Dy>O#wdx^V`_AiV*a zX~bdOFW|-}kudYP+^b!oQuQbT5GP4}KhIgbxVYfW{>`ZW*~s(Idjl$Tr%9XDEC~Ly zER{>kwkUToN57;D_1nX>d7}vUqGhVpD1dic_2>8+JaAlXFVqMA-Hjs)LwTL8i(=%^ z{IAL@$rfS(_czum6f?&$!pglTdN;nEpbLMM)l?Kams(4I?N(1K7f&0Q{Wl?9Z0=(| z!z7Mlpig^8g?nL1Er*TwiBCluv|i`>*5A?|XV9dUI{CV-gjUD~a_ju3j*jF8`FOZ7 znv3)nohA(}%;44tia%0*MhBAHf=i{7SP)w;S$I#_r zw%M5x5EU;x%XIr^jBZfq4t;el)9GFY_QGn=#CyB5(azDQ0?ji&;~detIYI({GOJQW z)`N81)}lt~t@7!|gA)#PLT19_E(qqoWxR@+YG$1~ibv^PT-qf8I2`sUp!P-I_J-*# zo+Zz)U6u;vw~_oe(4Bk~f#=Ou}= zrNSfF&zAX~bx_Hp)!V~0lORjtEZ(F$5`b$BCo|=|u^No>xs~|T0VNQJDTMAv5iUm4 zPXFof8Zw3SSoVyR9d>d9BV{Lz_9)*uOXK5_zfvt{lK5x&VwmJmkHpUeWuH~2L_8nu z_13(}|1e zMejN3{d_}JyAwt}uf*`v*meoTPT-k9ee9s~lZ!~bL&o}du|_TVYyPpIT*Th%`sT%m znT1p8y(tI(fbA=80ouIp`L}0+6A8s!lb*d4KR1gqd>&rlxeRPECHg=0nPC?y zDQ6P>MU9RpD@~y%T~mL zW8b4f7tDib(Vu*NzqG|=F1bGf@~(;eg8)m@BY03D-)vJ$K}OqS;0#C~rfAuGYt~~d zJQ?|%yoU+3D%F-iUSuAHI4p#^uvG6cuYilefb7)_Mk(a2E&;7B}w$tcT)yWY-dS=Uous}4Ikr*lr>&Z!;8J(ytJj{&qmwlCWcL}!USWFkFF(Y zQs(G&cZab>a#Hp^%*5yu#+zVHd7Ms~pwoqEb*!`{n(S`=yN|FnqUDx2rXWPjniY?h{I$@ab$DF59=@|?Q>VJNU& zO~J;9eU#FZd^VErgk_+qwnu}Fq!fp>&fF)rbv9<-SdMVz9i<^@VwVkt0D3?pgq_kN z>VTNHjf>f-T}DtWCQIuXj@Q#W&QJ$)GAawa(p`t*miF?OPTt5Aze~nOufP#L5Y~07 zT+)%OqLb9}8y(kSa8gS*D8A-tKG}&P>{0;P(Qy zz10q0f7`2RsjRcYt*znLueHXtqq6EPX|!W>MKKsMI)&lOr=xHN(86lAMeU}K2=8c> z>Qb7A9RN17vuyRRC)vbVM?%-{P1t+JT$@y`U#W{LVZ${m=7Y3?7=JeGSJ=o^5k@5| zF$*v-A1_~)Fl zMpC}@zvB(M>sIZDjUFE=Rsb=NCKWnLA`3*X1kPgsbe01J{^oh;q($|^Al6sOk?&nY zz@83x;d$^Edbk96%BO-5%XdZKNJ2-N{PzmYC}GWq zhvsxMLg77%VhjCJPx~Wnf&9BkfLQDvNBe+nB;(4-Jrcr#Q85=${w^VEN;kpL;JdvR+07S zmZ-bqBAuEl%&A_U;beDMuLYbEz^bkJ)D!LX8C8fQe#euuZ#J&>?ftd!zE+Z@9Kq6! zyYt!gdi(Hd|Lom3`ryHOY;fYM@TK_lNU>%{Fhaqz#TG4NWyf(2*HrlS_Ogj?1_bfB zy!J8usrzGKTDM?6igO4;z-=8Zco?;Lvf8Ik7H8kt3O4U%WH_pauy~7|a|z?|_wG)EKp?S4W|pHRj7_kkI}%sbC-3Qon+~5HBF%rKXHu zt9nf&$FS?r`^GW^oTYcD#k#_R$j#YCB(}|P){Hpu85D$S*|NXBPP#5?| zx-eyf=Tw=*tREUHxF}U*u~;AY!M022Ql@I}0et)^7~SWjD=@1|W!S6X&!R~i_izpT z4uSK&*7I0RSn)=fhLBwOpWgge@3UtNtT4-9Gf+oTVilH7o=dpSp9KvjNZZN2NFYB` zkA#Tw=zZNPR=pN79(Ls2_qm7sbiw=(ZFh}+qeP75?}IYC|3frw(l4mV8cQm(P>-4q zc6expc3eN@g;wRkF8gf-TgCiFtl?{JDqM-?Q8uWRidOQk785P}xJN8eM0o+Iwx_`? zfSF-veSuR<)r76Z5P3c6FUFnms#Dne(=rzxx3HSAZY3FaQk7?Rf{3bO#{diPGp(jE zdf9Ec}lA33K&>mZL!qQ@w*9JR-1i=Ah2 z#;q`Uqzk=ETMaryq=c;Ho}=tdYcOt?(|ipHCD-ID)^KhIEdLktsd-suj+LG2*#Pc% z3Em0dEeX285t=+$D!@hvrw7WwE1%pmy>50``$#(j1#0BUQB!VI?x3G;SiOb7oZdxq z3f;8W5$93k75V(?%AIYmQYwp_@?5-msoK0*z#%DrUGW3Ymb6D`xpHO6X;?+DNt+oj zqN;ok#vO6-bgto}T6SNwqjbN?bmquL?Gz%KT@!lATgyswT7@flqm(L^Jx{?@xOVhRt<%Gxwn@8kB6E=ey##;uGljP#-cjdJ%d22h)sZb{&6I>g=X>!CqVSRcm)KA5dU z(-lozxD_oI`j4oDwx4o#{E!NZ&%Gr*I1FKY4Mo%VzG2xBE|aQCEkfZ*NCc@(xu&|( zNV6$ib8YaRc#d%Zqg;V3gb?-BrTSP`NTx4^Q$9;;+l$UEOoIX*3q%x@a0I$xqUJ}3_(gFi{7M^+09Ki>SG~#$``8^ zj@dn08EX&c{rjMQY zKfiSC4!+}mIe%%$E83jJ^LTr`?>`&|X;fKGdvCa#r}MAOQWKAP`t#QY@!mFJKrlN@ zACAl<9%g5O^%HF=vTGU{;${TAyzfufLZH}Rkg=e0iXp&oTzYu+st=44l7LBOx|v*x z)|h>K`9pM_b#{Uz>;4s%Gnh>_jpNcc>ehH-==rrh43Fk8m^W~1gi);B2JejThdu6Y zSwH66^F((@o!t&E2e6>v4=Ou6(pX4W`jhs^WY;nS%VB2o1tQt7K2bmiWp-YN@d1*>J0L-noo z$Sqw!UBx$6@@no}-|>Jp3Pgu_g*l(_$Gx>1h&?*5<^(xZ`1f9P8q`tj>n^Y|g!XXW z_6RXxKkXO1w1GY~X`l4v7o?g_f>ka)_i)}bm{k>a6TuT{Q^5NO&f0rxDo?tMTy&y9 zN|75^v|-QvZwj&J;(uL1Ils@FOfnh}a|zLCq6HNI7l^#HV+O}57K)wkPY%CwxirQ> z>Y;4FjM%y07I3_jN&6e7lK4gt9rWRa=*J`D*k1d|R_Hd3jXA!v{UJ_L4*nEEunD6A zqunFqg9-_Qr$q~%Y0>8Vg=rkY;1oHtdq{|wnOKjgvpS&#t*TmoEjA2FWN`V5gL3mZ zCgGG?T>`< z13D~-8@)(eI~5+icnZzlK#MJ?ePOe!OyW}H4OivKDBTC5)p0k`)g^2cY#5r+Ev8m0 z_B#WZHx_4d;UzSo+n9iED4T3cxcFOai}{v*4} zQL0`s7H~RvzAVhWY5<4U;TsC6Rj#UdNFH%420O(nGTEMu5b|%M;8yI+7Pj^yyqJ_) zt^}J-gI0inKv|1#w$|;|;Sj8?s+~hRvabUzn;F`-G7eEWK2VIrAES_+Lrs{##8itR zdWIqZ`)F;v>lTMcZL?eJtU^u@IhDs(`sJTHOW3y+5yz+GL}4jb%&%(QsOAzCrB%9j zU=ldbQn-$l8|^jwaBVyvK2xdh1p+0hjIIUP4uf}Q)TPpnCzwoIgNR-xfAq?nKh+BCAC6<)!lAbewpoJ}5#T!a;=SCK zJWxGdj~aHTbT43T0DUq6Yfnd+dfsFfQyPTV)4sMk#ijV_mT9YTTx}qUZ`RINIDzlb zC%#92iC!X*Bbvc8G*lYLjVrL&s#(gPq+|hJ+8-W`?_ZOC_vJse3C@zEDd^UDP0EV*cOIy4JmPi|fw@?5Fh4#|p50d+{O1ynpQG#1?fC;djWhkz%fa12yLDjgF0-Bfj*vY+ z*!?Yz^p9&X3FlZxHmc{m8s|{>?|!4cuFk`oA~ScU7v{a<%$ENGgo}qxPx3te1CgPJwZ|AONG z-{1zY|Hv}2)xYA%qy0iuWoI1+oUQxY6}Dv%W0d*=WVJ5n+hP&OJNQ$d#a{x zyqy?GFu@L2dr;Du8$=El_v0*XfByyfo&h2|8PD)k%F1}hf0+u>{h3bGeG@^@=Dr<5 znBp9+97poaNnDAr9`ybq)PEl^(D>k+N7dB@SkI6tg})N|w?Il90o1*KvSLe+#SF%3 z^Np16wb@hOa8_ip&9u344Aww@{Z!EG_q#*Bw4_0GVxX=?dgM37rEC4S0^ccGG#`cU z6jzZsw0G1qpz@DK>T`O5B8? zJTr&OmL72cAPh#y`q<(msSF_`_G;y~@G)Q*;(mj-dlv1GtehopUYs`_#wQ7F8-4vLl<@@^yTU`QLEx+6&y_dG!0IC zpB@K0M7C0xn8AwUmlk~1DIX+YlGmE*Xhmrih~b30##mcy%wEH`1`=kvAyN*=@_;g= zy!p?eW&BZhiBDa06o{(}x_#p6TB;_u;Z`4Nv4;-2iaco*y%lUpv2lf@U~?WzMGhjk zp=Iq!4ScaYoQ&eqjB+epQuIGll;;4EPn;T31Du&E!+mF0z5HPVojKl<*wKNWw^x>4 z`sDaD^4+8XFYV{q&-crj(T`o7>(N65Szkn24KvlFpqWOVU3hg};C*Q`GbFQtlB_!A zs<^vFnW;CRcF_4Gm*D`3vJ{Dz@@$HW$3z#6vYSp0_p#c=k9$k3>NvkspSRw36~V?b zsmJK;N(5iYLcFZ!o{>Xf@<*N%59OmOB&}C{N=~U^ne=+va|TaHJ;*SDSqML_2frpL zdL`(?J0EY!oBwJ7a_!eiXmbGIH3$EY*N2k}N2T0^m-g#>^GyMFr}G_M)6IxN62B9M z<2^lXu_k1f%rWM=G+nb<3WWQpav9N^;J0=Z=zN4$Yv|_OuAmM3d+QXC&aJT~)49(+ zmv{jVk>sP308nmKC)w`c*e}04+B^nIIlw&#V`+GOTd1%4YMru$%5+j-i0+B4-Sn2Z zQ0TY&{>MSm^5P+n=429Zf$m`0gEa zx7km(vYDKsX8Df-o4k1A3?UQa@ejgGNJdqDS@qeNk8T`JY3_FQ->|Qz9oPMGejR`i z_b68!hDvBpP1F|)c#~ul=5%WG=6lbuPeaTaJP0=V{2~AnTEoSBR!~G=j*D%-*>fcp zD^#~2yrG%j-;N%ha5r0&`ispav|;2?hsO1*M>lUh)P4h?60D_%?Q)u87S@Ec`b_$j z4Ag!9O%F!Segk{Ia$KqjqA>N@5KG)ABmY(5T>I9{x}mRj1zd(o)EPL?oBs>Ne^0tY`Bknz1UeL6@z6*v;`Fq61n6# z`68a)m{8w>bIAd&D)%Fnw*6(q+6OTtIpt$MUYdIJenl9fM4lYuED+w4VY~Uz$AhA)&%G8Ci zTHf^|6_R+04je;u{z{aQvZD-*4GeAo9bXGn%>j7zA3DXksEXxyU51!a@kAI1!xXP`K^rS_C#$@@H1eI{5B%sm1S zNM#Nao6d8|O_tMd5yy@tJymF9&Z$VEi22&)san^$-)p5S#||#u8q*9p1vTf=9AAId z+_Y!0u3#W^Qes9p=A*dKRwFbKH5O3xBFv@X;A-MyRWvcv?9m2FLtv;bBeF9BW5*av3qe(%MFt$^K6|M=TF1N9MM|tb12&5m6oNk)}qf= z-SZb^m(0J);UZewRcxG8Dtn1j7flX$WWw*-T1*1bmRqXz;hdYA9O(8y@Z{YjQNm~C zKw5=oJK|yA(2S7jOVAlvRW$Kc)}_Pr+2uSaAdR!o3op9^+d|+CYi&h z>}Q@>9s;R}$pzCL{6?NZ40)U}*wm92*za3OL$7LUov33O!I|QliRRxFHslV@kLj)W zu+`=HY#O&P(V~rGDx^xu;^3Oe(Ak_a4EIHc*~|$!DP-+sEMq>zhe5K`*Oko^5+5iI zZ&ff^9~*KYjXg!HWO&CM^}y*|oPjO--QKZ^GhbHMJ2u4sEmacye$sAQ(#Ga@h>B3W zwXcX|2GHSPmekk=GQdn>lE+coz;&Tnql8GLm|)XD4~r9*F3G`)+751z&zfS4jVRdd zzAJ%;{0>4(S<6CSJt%^Pr6wa0{mwa?1GneZHqaFIZI4?dv~dfXER4i(jZUWNAf<)Z z%#_W<*x$`=3#4C1$4*#IG<*?7HI|4XTsjmJO3HlKW<1R@LRP9W&BRCWiFQS(tjkOE zC^Z(hG~oGWJ`*TJ_?vT+*b}z-9vUCSAa75>5KeBAU7eKB1Qiqs7^Jwuey#q;Xy`i% zDbX32_m=Sf-gaIGn%hr0;r7xU zTYDNF!Z+$+vyX!_?vk_ci$Ld&UMFsBf=eR^&vSW;=W6F2jo{lG>Eno*zs9?uPIb9z z01INT=9N^vMv74HQ`G!V@yYT$HShJMahF}vXWZh;Psd-af0xqb>#Oi%!=%14OO2}e zo0p=>o-w-Hf$6z2yI=cGmC`i2Fl0>O)-3S(^*H5D>1*K^qW0V|qupE~bLML{^f`$xLsSvRC#W!66RZ6LK|MpG zgFHwkgFSH+j7oO^hR$ZFj@{a30Vg01q2!@{d$eQy%Z6|it_S*mqkbBYgIh%L7Y9ui zi327*2J(`DeH4?V7s35CTm5<69TKfS!=V;gx_bYO(`}ude9KL@q(|i0uAJXLbY6+M zgKF1S~7XtIxp-MJx*M4!zdkAk*Rz3?{gm{+}jk390kL(exTPYJeZ zaQ56Z@(>xPyO;!*(Az?m%JK@T07amo=9xrN<;yXhgQI{m*i#AHtcbWAC~dVvTzP;D zMU@;Yao3Z;24--q+Iq5U?FVb?bqJ1fLV;VQr^MK^qq2MUyBawg$XU5yqO#YZh4(KZ zR=L`V)>)=y2&OT!q!31ciXhhz{~>I_WNq-4t7tV)fLmb1X@Lq0$xn5xNzp#f>$ZI) z-`mKIY!o>qf+rCN32gU1BdJ#~XGTH)4U;*VozM0&5JxXYs@ zsU^h`AYDN>B{EKmLxD+RvKlga6JlJ68m?kCUp)f|oOYUj(A@d9z!R8V%hCE;QYU4? zqFew;oA#qN*$Oz+)DGihz%1C32SsDoAn3Rj7z;NSSF2=9d}>6c=Bq%^i7fTf?{rU^ zUX>S7E^qo3NwZFi;%J_mQ~e^X>DaU~bnd$o-KN$&_$U1&4K3iNjzT$WPKa1|MQ|*i zqto#H}Avj0Z_Bblwx}gq>(jFV=o}d!l1YL zn5MB{lxwDU(%=A@-aN-_Ss4!ySOkn;5}KEGvdKCyW1(g&%hYSgWzO3jz!}1FrBnCh1)WW!r~D0NaA1*`H7~GCSs|v^p2t@N zK7r%ImW*hVwT^dBjmQYJdE`c zwySwV*sP!Y8>Q#6L*I|qP1rjYM6GqrDV?XPYRX9B8BVyuI9V)-A=BI$yN;Q*{87ou zkmkSgX~;BP*&$$m08gm+;oTuevG{8HbvSx`b8QmWJsvr@F>R#S_io*yUJ})L5zKeo zZTbsdMoeQGT}s9HxjRaS-RUCoWyZ4kyTk8YK=J_8%@FyKPcTYi zcl_wz60_T#MKPnWVNxPZ^85p?e7N)PXu8_)NE=`kh||n)!4^5;TPDlA21e<68QDml&q^}pAu2Nz~Wj<$;i zByU_8Mpe8nJmJ9SqAdZ5uEJZb$fZ2aR2?#j$Uk;!2wk3PRpUuUCYr{CzJXQDJB ztGKw-VzF+Wl5#u~4(4Ad!Gv2aT%DHn`3n#=(^28I@ajs(#8Y2L76KEa6wtbmDR>K4 zSCYuK6=!-LtS%h%QrShYYCv)wYPRAaxJIJ|P!*_D4%=@yi|fuZ^D0=O@DNF;e1yhyUM3dPd=0>1tWOAVMPr*16p#g+Xa;m!y~DPvc-soGx(LDC z?B_;bT#vu>_@ow0Q63sXz*R0&WMY$7I<1R@F$dV=GE1k+WF}$6`dLbv5}ES zZ%_NMJU$XJB2yThHk@Qqc{!9nun@Tz-IB(y8x*^VOE=o2v1(IcGwW!o?rZy!>-iIV zIUv7#Lz=-*9j#DpWP~Ws2K$TW;d2nXm;S2-oMI$2YSEHs(*+e^j6^pKQ)kGQxkX9{ znEvSz%k8+3nJTS?hHfevi|Fo@UU^XI4c3sHGq_}9Ii+Qop@8Y+|5kiCdfzUZ8)vc& zLs?eqzfCH3%V?z?o{O$ZgczLP(qFp>HxFJM@KSb`e|J0GLYVxFldgko0h+p-EPBxM zb9nr)RO#`*LRaCV)0oG)?ikKb;uZv4 zla2~HFR*tKMfH2_%SU+A%VXf1#rbE%Y0xqgJbO>$DTsmo%}&2*=0q_sruarU}7|!ay>1B+OJ#nzAkIGr6BeYZpg=O7)-aai;itH zg}v_JM$j$(Q!j#>DS=3WohNeODoiV9Yf}H2CaKSkrYv6fyxu2=EdrrE`Z8%wK2+c7 zno(##k9t{OAn1-5HymWLN{Xi3oT%kww)RY3jy#cGkS!DeOu_l9XQz6a3ICLMxxKIwfQF34A^5et>^bRIvO4AWVaMh^0#XHam=Kb>TcU9gV< z{8UtQ@scX_R3incG$AZtj)~TVlJ4LIf~L9F**+HoYVjAbRFfBWiHk#Cwf3?TCv8iy zD_LG46jCiTaf%?>YHDKCKWwGy466pKbSrg|A1YKac#8S&r+sTwq}VOl3{!PwktX7F zcI2L+LeThemx^j6W$TL4a&RIyEEscm0ie-ID}`u%C{e1094Qqzr)j|Z=~`u@s1}GS znlF@j7J8yY62uElqd)N&ybXGD3jEF}+Y(~!H8LbEbG-=XU{5Hd&tjrBlX<uCbZpW-Rm;MK0Ee-st-1qwk4V#U#nj_!DFue zT(`A}xGHu@vaiv}Aj*1)RXV;M3r`ZQhq*0{VUj97yZ+@daCqVmkd2Mz>MMGDK4$WX z@o!;a=e*T|QYF*e)ZfDiO|HM}K|sfPnG5Ck?Nc3NSknf9XFN3{H7yDZosz5Ugsqja zh%R^sa5@_F+Y7rxCdbPn(-u(y$Lmy>-@`(%ddlc7Xr9S5G2caH04)P_SUTVcQd7VSu*>Sa6e4UObTsrr4nVBKl(Od z>lT_E3M}a0@R9Dfe~}u;8VQ#y5Po-8-bX}AnZG41%P!gH12?~bV?7Q#aTgm>pm#q5 zdDW_=c?b^nzV8eA?eO=b(W7LdFXKHkn|44&`cqrJAkqPl91)M{q%AttC+D$D!Ee73 zyBb9y<_hq)PVibps-*Ab; zS?MnbP3h7G-2$ZY4@tY)GrPvm5C&%j?D^v)BZos@LqT_WC|9>%-1lm0AR+q*>IVoT z|3$6Q=gH!ITOiB#@LXR*zTR%FM}&ig{P})+t>gEC-n~D{9R{+cVAG%f+G_{No=(qX zQMeqwC7DbUK%{4n|xLl%UuT|(AO8^30f zxLhZf7vcJ)GJi`t5Q+=rAg*In4z^qGuVTdPHT${mHGgtYpT4^FS^nm5a~L+9CV9Z5pnQb^0s?cn<^&e((u@d+>X(CFl|6d&_V00sCTiU+w`@MiI`7&S^WU@1 zs#bL$tgvSel)kNiF^~;{=iWw+Wm=6H*{&7Ryzv~|Hg=l8md97p-hmtB!}?7>Y<5GW z(gWiHwcCBC$mYz^sV?@vnX;<7*jWOBE`Qfx+E@G$7T_W!zMMLIzAkr1ZmQyAwoYCc zFM1;-t-+x2*Ja|4%%7)A?L!vFaVw$fIg^hr9dqe0KKs`2p2LD_dDWIHz1xSxg14nJ z#S+;>K&RCN@1tCZi!FqAuAU3!Fa^~<)a>l|^4oqihBKE^I{)qe41liYe0}+?6izv+ zQYR!irc)LpEUiPkgUtOika-Rs2>n}~xkAlZ&>#52vX{@(X2ltmc|6uq1+WYy=pNdG6PmY1GCB5%CZ2ZV=_pv<+$(!e zuDTqk^QB_1(E-t+QIMso-~=PlSS#Siz*ih`Oce09Y_@8e2gCCuw@F^WnLxzs;;<>r zLuVXfSd!H2W}#9{Q33^WV~RQ%NVqe>wDv9}7MU`|DbuX-4pc{~DoG{5K+n=J-e)(zH zZ`j9*OjA1WhV=Pswe8kKQczqgaEl*}H&YROfR(Bk-o|xN%{vKiJ!Y7dj`$v3I7`Lq zrI6QczMZ&rEXNU3bf8vxy?xqpbC4Bn|LPnW0_Q5zW|t7U8~Ydd0lpQ3AKo-ahIgZ9 zExtFvWR*!Sr)1Bc+iP_rwpob6!mlxbefJ5@@$l`ecGB_{(#j#(#@_DpJ;r05R`Ol2 zH$$T<)S`${s4nH4>~T%>N(3j4eZZlXHJR~On5P7i$i`@%?!&AKM^iLb3{Mk8yQlyL zy;Vnb<#R$WYFb~WBzZWsU@e-eVvMp4xAp}AK&yA}_)Q&Y-9{rtM>Bo5M1;;H{TQj- z%5W)zhOX(iRPc0lm%VW#R|Y}S-ly6r7bEvpBPJ_1_V36{Ox7Bl9JtyWsFk|rb>(cv zUwDpG7C_BZ{Qo?(rozVdoLyx9fV|SKuvK2J~I{)z}CLrZ9Nyn?t>&tK2ze(p0e_9; ziVP zUMQ(j2(oHzbMHh@sh;XLGilv1#VV9no}lZjqPO?G`I<*A!r2o!fwOL4OxCMz#U`MU z$u;KJtF&3)&)3Bc(ZU_=SrfJ*A=XPg=ce$|g)kv7(uz;tgpfa66nVJvs~*1;+N#eB zt-(oAnSVmQC=&7%RU3nh_INC?8zY3-U4M_&@|VLtZ#m={(xl|Re*NmB`~Y&Ot(^E@ zWSwJoCeXH}<5b1AZQH8Yb}FgZw(V4G+ZEfkZQF13MxE2+p4%V#H|#OiSbMHH=kvT} z$O#1ke~amuY0RBxgT=RVRw{V$X**ey=giOON6YsS|M2qkz{*HwtLWmBkn&NO44Z|& zOQ(7xz@(K|sYFC<4T+h~xMJ)2+Uw!!=fdLYx$la7!5uJiV!~9)E6;T)h8&6mDh@aL z*2T|qyLM$Xjgh#Zb#Ja8(D%Fa!k4Y}UFzgcVovJHg>kj(0QlJn2)*7kX{vHcX_)5Q z6nu8e^=L`>_u#JXegE>^E5Bq3U#x|$AG;EPEF&hq<=9vOjkV%>;=oP&I z6Pi&_ptP^KX+ybto2AdML2!Fh+!Ji)|Nny_fGEFO#Z>)%#f_CojQL{a-51yJ_AsL- z7;h~eE>2%h`|&C?9Xc~d>VylEe9h*FN~dkEKR*n}_C7_mNl=EJ5QE--t2U~Fn2)<; zkuazMrxmukf-qT5tz;yI@)(N=*yyC8MQ96~bb6AM6KK%`6hXps6d#M{^QEdxW3nWP zm$N+E${fIfeZ@4sNiW~oSJZkR!at9*YHNe_14ZoQI0Sn3Dv z^DBs3{toCN4=L?Vn3(KRRJ2;!$y~idxGm1-a`YAcFk(52x5?L^gE?J@IR~wXYqUy5 zMXz_%Q-Pyn(1?!FEcMqo1?ruZMPD_SH<|u0I-M8mT`+9@t{C38O6BmiWVhp(UJ(<< ze#CFTns|vx^Ak2aKR=&5yXsOL3eo=BuZ^WF&;pZ!Bb)!F!ES`iNuj$!&48diE7woj z%6o5OaDBkgRBCppX|27JbS7yfwN$Y;k8*0Ce&s@S9nqaN80h0lJuBCGEWX*9Q6oAk(?iHf+} z>i4MV%&;Aj5~-ic#N9Lr6_=(4MChF23lVEB#JxAsmW-EF^y@ZPd8cBnO@FpwDIvd! zi{WG~>N&p%2=6$uyoq8vr$@Aq73`_n?d+|SiMEOqgs6x0>}dl{q#K11BoGa5+HV`v zLOo>bDEG|lF{g?*=iAK>Gm%Q}iD2MxWanbD?e(+7FCwFPzs0-WTnmZsuEHnXp zB*HF+XH5{t+vy#tw?m*LqX)z1Nk*Hjj>71-d$fx)oVJu={&eGXUotq*r(6F9JB*3$ zK4d!y6rcoBR;xznZi)Wunm>n9!{h&rI$$UGyG{&wlbYrE#W0BncfKXaB)2sn8{AGgQMxP8VyoN6~{^K3EU46T+o z?i+VYIZO-Q_sHNXoWN2Q;R149gwL>q5z)ozCAB%n1*%{qI|qqVH_YKxo%=8DXiGgJ;vr zcTW0BJW6zi)vgANc?m4-^>@qjsdY{=`)etgv_B4bkSm`1m(nQQ-{)COFdQkGq*T3O z1a}_oZ~W%gPmHj=aoVHB_5-FkPd-FiH+kqb+-ukOEn#mfyH4KozOxIqO!{TEj`pEk zZzS&zJ>Xj3s|qKh*lzl0Kn(%!nzx>a-)+C`?weN5^T&DN-ci`yojm(N1Hf+j^(NuB z8jRduFVd%(FoWy+OR|nfsk>vwlDAxgR}GUJeHQ{uCT$NZH!jkHnHApLDxk!*0POog z<)LwXRZ%d^t%1;_;;@++tI&)AA3r!CdY{H#2+Q5SGzOIoKydoUe!Ss<`Ww7>ZGIS-Zm3IdYHC7n{yJUpj9#2D|s- z>dP=Rw&%{S8h{%Fjp#uFJoJ+0cU?8ML`a+y&d4&Z^pH zBOVHimMmwNNyj3@8n5UUT}<94>Zd7y#BPZWudO0b<|vgV*D%hV#tgZwSdl z$S%vbpIDUK(*BnhLkH0aRtEuSS>Oa5xyN`*2?N$t!#>T+=Pw$#@ezWPFz3|F}{y|rfrnu-Ex)C z^Ghs#*zhvOkA4A}<)n{{9Vz$~PIxcwxR z?Y1#OGvN_o|6!<)Cvi*P^c2V&cE+JPdT3MI(VDVRw`^UwoenvR5O8#fvFUxWeK*ia zy<6=jhWqTm9OjnE+{iZevszeeKv`%Ru4Nm)mLD%ziX(hu56uzDnlq2&=~ zrcjR@&0JJMS%NQ}?dotEs!FPH7yg6_SMDy0>c`dr71JL^_0XON?}=fBwbQK?(^*c1 zwp=R{hM&1xe=zfDv}UPQ>U8>$i<=A01GF^s-Ae2v8@+TniYc}P7zi!ihKWXvsf%Vr zI-P2+g|o;e8);0;;H-l1%foFPM*gYHKy}MeRZ!Cp!P-FeWHUwc;~nlCCAh(?*uY1G zwx}M)EtP^U*+(%bGDTGg_@lfVKWuyw{57Zufx206LvazcycRhCNaLl*3rGC3v$~RYCiJpjHk8R4e<*% zgd}P>bLZ#;0-!m+KG{FH&Qr3KiIOPva0!e&(w7q;tCBoFE!ZF6oJ^s|d^r(6rl@;< zn&|H+7eAWs@$f-0#yF8%3nF+)F+?scC7BuS#F6y%0NVfQMAoQ02qopvt^2m!OIU4t^k}>FH0T0$vr-@$ZfR~icU&sqv+x>NZ)sq}+0*$ptIrQ@jU+rHyHU6x*L zC^Bn$b`uD>A9-Jg3cR^|yE9&|mqYc>m5m*WP`G@-BD8U$)CW`dP;MjtvkjGn^Jmd4N_(*)7z>wex2MMq&;XuACK+ zjC_t+^eZw7WVS|_ZYX!0_EXbl7@r z*hego438TtCoV_t>vQZVhGa`ktKu-m{uX-caO+KiNtG{4&YOt~=p{uFbZBh&^ zh#)Ho^8_U)Fu<1aFCC*y8-rSg3(GRnwV0klqj7!=27HF_meq^~+?E6h_I^+F2A>ih zg;;5Ph9qWMoI@ciOgnu=d_&Hv(?^0@1WQfnKDm_E6pHCfdL9_95ajp2EOtT++}u6s z#6n6!r2~Xj-HM5S^B>!T4Xl+b1^%sUtun{YrnMxoh5Hm=4yN_yP~Id7mc)=rj!m%f zRWfs6U^%u+J2OQylkAunofXF)*@Q1qBD#f^n|t_U0g|Tdz=O8?eXQ$Wj873cALv-l z-l`>>FwdUDY@$Sa$)@nUcqNOwaJC@Mr?M}wx*OAfcbdAOa*O3j2PKsyn&fy)Xi8hA zCUZ-o6Rh0sp;rFDA5&$EBDzHIU0I%E^Z(gef?9Go`2_?)M(r_-uGyGQn}BtetBUq4 zO{&5$a(a-?S4paf7ro^lp@(Uh-R^+TUw=eOUa-Fi=)F0GfBWDm+QSmsX~%r)=>Iq! zn)9HC!Ut&>&Iz27~Qxo_}hV4K$&bv!lPM73=jaP{1KRhp&$^SiIs>hgL+ zf1VzU;o10c5_>EL&3-sDB-1M17-0szMie%cqKD9|NeayB35(uswNAuTHcYwdJ_9Mr zY}2>+XZmV}WO80|Wi4`jgGAvS zuiUBJ{C;dvb`CBv@KsN%S@eVDLYyBqNi%l1j=bPO&5C<XH+V0r;-kZt&_C`0QxV}P_wF;rdJ!MUD- z#W7--d*AruXsQb5%Mf1Q*{5hG()o}%lB7HSr%P%bYZL9JO1jZyOdZCUFy9xPyk@$} zHODTTolcj#4MN?o_q}~7d%7f-(A^kvd^|!&j1U9{k$_T(aQ(R3SI`&I>Z<#?1b1CB z*1f}F2WIGL0?~2_Qp!y0hpha1X)+p6!<~)sQqI(iJZr?jTXsi!Fx0K0SF@Q~-;c2e ziJ2OZL*~P|iRg)cZi3qs`b`KDj1>od=?H?l_%Z#Bj4S#|Vk}o=!Xq=?xPosF*9%Jj zKCRb$bvK_C1gJuHXg-?p8EDF(g~a;IWK33Q*R0UW^eMox2`TdhQ-X5&Qodg6IE8_5 zNKUghP5b6;W4qiql2p6WWgac~xiOxzWk;4W@(V(;0m6PC`i%XGoIO{@E5A3Zod1!B6%bj_(S&ABxFD{G8;ysB#2CW$ z@Qm)%KJb{E)Gm9kONH*OF3G6(*OJteUp?-h!nZ$WA3FLTf@|l9!L$3qW@YsINCf1D zT)uImrpenyzB1FFjc>1RI=RiOj@eO}5t>s69*&L1zB)?x|L~!;oOujCcCr}rx;Av# zRofVb3SE!8Mu9yOZ-PB%ow~pJ5hFW0GX^9oT)}MALKlPN!M1$)^(sg^R)i(P0$3=G zQRGNYk9b1#*R31Y95hcsUJ!3{4d7#-Ewom zeL~&AufQrgwu|gry{=k!Y$S$bfd4aIr&7TE1(Lo;E~lRFz1!mr*M?Fh>5lX)2lB@o zNMejr7ZGNOIMYrhx@8GOk8v@t#!A0&b+)l|FfRP*h8> z-U$M=!t-WOk$(<$RVdzB-YW6}n{H(z7sC@Mx2|F<#p;SVSpr6xjcMKU+l8hL2A`68 zDWTwyJF_77xS5Qqg4xyDSGdk=vCBa*?E~*D128~-KZ_DIqXanIqK$d$3X6%AB>YyquFEKw_QK58>gf+ zS$r&e<--Eb|9a%Vg<(^-SI4Pxhc@a_1Dra}K$SCo@>%qbP4tf#>oXiALTz)ix?WGy zwVnC#50zr#H)v?%>Q{25r%-7xHTQ7JHJw|GMEuI-1+pp^ip!ja>tFp*xL3`8GOcg6 z{av!YsfB!V2b^UEFQp?ZR%T!7&RI24i?+yUdoyaVb)CKMsxd98q`oDR$s5x@3HGWz zFR#D`0JY=rEaW7)tXQ^(a}%znBJ_lDDr2Mvu8kCVeT zLu7WU>^-8(;|{^l!%uytY{ge9IlToHGq%kOSMwHmmDp|qS|}BjjRWFK@BU0imK8ZJ zLFKxpa#smFt$_u;w~lD@FkS&aCh$GP%@)(t$5j4@oP$# zKDX8htNl+}cY^x5e}4)HV;X+XQ+G=|ijRe*c*15c2q!V{4AT$UV&`Z( zn`ZFPWXe>Vj(c&gfq547H<;?!@#{fHl)r8h2lA`3^Vzhs6s(q;``j`o)WPz}evo`* zRkDshlI$w2;mP>I_PX1)AA&g0>ow%PAk;WR9d8u{JSR(W-NDX^GAncqk{pr&A57lp zikU}8Q_krIxqess8iK9BS92e7?{cxJ2nnBXODoF1sCnOg)q|ezbjCCc*K0cecnn6z zqnSU*{5zFGd=9tSZA)Djy*S!M6@pf~ZWRP|k~faju)91LK%(VOE)WI1UMqJ5JFsT- zUTFqPI9aZr-~6cw?K%WKkiSlu{n{hfubu`RF(#@{)b#8={Pns?OO)clDRYYUlDT9g zb}*F8%x=0->V{_r*I*P4`}C{r$<1P8JH~Y8F0;+S-0w>n52A{3+#Jxd;P$4>>$dgf zF#f6KWjPde`h$uPAhzE&NJTwzkki13JzA=D`faLn|9pNvsP}zG#cq7wmbx+OzH-s| zu!RL$3U1_|{PeHvW?4hh6Dq#qf(fdqP`_|)UM=cXoY0vbH&lr5*!dYHs3Qo>_^NkP z_5|JW@g6Kq|65vUj~dCcw?=Ys6N2eC|M_0Im)NX{&euP=LJmRZet2Y9e;>MXr1k2J z@5^&n!~4{;~y?y z(~tIw-K;?WKF8_=9SWtg&gzfJiPXdxs`NBQ&e@pR^hQh^8Ia-JoVWl1K>@-WP2Yi5 z`bd;>q;e3U%fh2)P$9zce7x~YdT0CMl0AO97JEf;nd!)?gm74?=3RUB&+J=rgMIbK_$gs;DC5^@pwnZq?X873L<*W7GRxcoJC$t?FB~Z^b z2QIDaUnRFOSB5r3Is(oZbVzfy7e!o_VAMqWLi3mXl9QHVsFz+pH0$nTGty~apTOQ& zk=}*rcmj+VXsy3nOW!Ofxch#ZMZ&rWL@lOR(3q<^GDw$T^TOjETvu$dqFsvr79PL* zyOM&iNF~w&0G$b+PAdT!ZxOSvZfJfPdr@+P^+T=gn@$sDIvc8|G7A;i&_M`WYSCUPqZZ`S!|l!FZyct)o2 z{cD8Os6;JdF7ekO34>Kpqb=!bgLG02tFpz6p^aNAFpYo<(KWY#qQC>0N?#7XMzaWS zaPCyuBxv^3kHg*pUoNYDv^4i;JpqqiYV4}JDCxBIn>V)^EQVaJhnk&)BVgGLy&VFs zTjBQ*1YPGPx@%pkd-X_fTGV#`5HewcQw`E~qTf1!$vH3=W?&|-JkY5*-XgcE32A&R z|99_X^>2D=MDo*{HsnE;L2lU6%a&HYrFl+v858~(&+7W!VrL8V)R<01YX^~Zt$B76 zL5auh9S35?W(A*WE`1$fX+pOW)Dbd(jj|-N95l6!Cqp?wlGH>n`-V5ye(2#f%7>7kcNF;DB9omM`sT!KQEBPTW^wGZV=W~llrYck$iH#hWwIP%sXZ)DK zo68xvn3UHIo2p(~%|%B%x8+A@`dEm5^|m$~nL-n7Yvek^_nMTfG6vz?;z!YMhV;JB2jzFtp+IR_4?uxnhwsNW7~Gl6~x3I7)qaQMLnhhz})v3R{e4 zV23FU?|q^L+Jx_#@Lc#_TiWxnefftQX~C8E$0?W0n>jVJ8ao{NSwtWuF(Z^A@bPv{ zsJEP;%J{3DhhKqr%kigDcGF7k?Ll0MgkT5Hbo1WWlu7Hlc;=-!H~er^CbeG<+;q@e z!wap+P32Hmtw*+PvGORGvgr)vnHgg#$VI?zVw@{4!k(M^C@!YAvS%vl5<#+hT>?${ zZ#Wf%CBaHI9jfW>>HB?oo7QIu;r9cSdb;$W)YzSzo)LSHm z&xrnFA4tU{wSL^=1K59E0;rcTG8-4Ll2FufY1-rc-%-r)zoS?avQb#u(=zo;Ditir zpL%c1EaxJ*jdwRl=X|h@>ATf*-?xauHz_EGiEWaWLk;|tEeeBbO$(ZDY$wj0glpO> zxiBPQ+uk+3LJCLjY>e~3Qbpg_P`1H$T2rhDd*csO(T5IkoXM&D z;2FD^68*D6a2reHpY(vj`0^{0_+s_p&7GlDdWFaCmsyw8CO#B-C(i;)kC-N>!n{k?O++kUd^RVYfqU zamds;8=}g zQkuT$Xt67YkX9s8J!9^u)tBLZTdFDGEtLXnV9J~SV1IR$Oc_9z@gE`LD8cyG8I?HC_3t! z8NgNJCfKmAY?R`*_s=%^hF`0s1>C}F8VSxW^3uDUnv^E-017|>70M;^Z^RJZuKUYB zzCFU>*773HVjRiCbrk9Gzfivk)x!^TTrf~u)?HiEd??nD)l~=9}IA+Xoo;f#upg~Z7-8@*oZXZ%-CqLYLc6jk0F*fcw z89CxgrGusw>Hkd{V?5uuJqZ6(p7GY__kBm=q0p=5jH*8(@A{C9^N$W#GDW)4uZp^l zf_TfJ4Bc9Olh`(h)Bm)2p4*t?yRAqo?n*Q3lR9=;sBh1yNy%JX7cf4JXTEF#W<%J7 z1Qq&n!tnQIgVZZPk8yfU2wDk#0-rPzPphSaJr$b#^G&lS+seVh1uesRd>rAYxUbzf zJoM3$1JAM{@;DSN{2Tr;a#19{dNyx@K_y?pMg>1a`_Zp^o87%h9q|kLyp+4U#d~N` zw5y%JDTjFz*d3avyA)cu1I4<1>frKDpoMdyre$LV+RnaGC-zD&4u~&nEq(L}z7CFd zOJ_a|a-2@HTE;yX^?D>rd3N8c01>w!!;w2s}s zI(Ddy-%9`D+GVa9wKJ`JsQk%vD~BK)4>QaqhWr~-5q?is#*lQQ(_cRH_rTQ$4Y@UE zWS~4sX#Q8VC`$kT)piU2SKGye&9gGW23mvI<`gasqf`@&(ymcau(jLg-agXxpJEuc z7Z@*c1R*6HN!2v=&QDrcz}4^VEO@qTSSD8Gr=R`ryZ z;AZ^=wN@mTVg9)p9UQsf3`>EQ8M&bGSnp8cIG75-KCX9-==@2hy5OD(5pBVbiRhk< zLC2Xh7c3AUCyHMM)htrS%3dudIK{nggag@*A~tisb;kc%*~lMeT<0kO1+R;~?#+65 z_-`z3Ryu@=UZVNhHyhjKc9_pl=lia0QE#MM0zaB8a6qk;9Qe}8)iRwW9+d&vPAPh# z>5+%66q%_4LNs8jA!4CrYx|q5bH3d@Rk*fhjiwSkb@MTh=`mj{Rl8Ati5BD(Jd}|( zp5;}=sU&?GL5(;FO_~BDE%_y3iT_wct-eDl##I3)=#P;&@A>bMVT}dCH9!*;UUe6S z`~KgC+DtptC?;K@Wx|?CDB8rM`g*FhS?Jg*cLV!z{2cQy3sULlCI8G?)AzNEExlTe@pCvyVx}45VZMd_bC;C+`pNrWE#QGjULu$~!`zT<7e$WA)&!wn2`@EyO#EWgsC6yGj%+wY zir*3ra6x$Ne~^)aqjc`8H1Ab=P2Pc72c4IG^<^r!E0khiPSyg!2{JGxCDP%#MPFu| zaCz_2I~Kg(%4CL-@pStbswd#V4+Wpg=c8~$hUQV|f|i^&0mjV-(aEexny+LRaHd23 zsd@!qUGeku$|tq8B*02NS$|Jmsv+XFk`rq{cw(ukX*rF{+AXdUp{{c|K{^h+NzZSk zdCZP#hFXyt>I=c3Q*k;~u;JS7wC<1TI9R$C)wZ*m2J<3r!ug`FH#J0|F>P%OuPI2c zQW2<`lR9Gnfi$>*G`V9m&>ed1ibOG;aJLdvJBfM-7K#e*7lfABOM z$aMxn1ay8Oba+m`(OKRx=uFitkl%P!KMBx4CbenWoE(g;9X|VMe;o6FvfVpokJKN~ z>Tu{P5znZYXm^Q#U%QNLHTcV8Z`CO47tiv@mlOT+`TTRDI?ok!k!+T=VhN(JVrmF@ z(R~X|WFkBu_aJxp8(eh`y)os=O8*BL6!PgtWHuQE0dtKayH=Sf;f)^&a(vFHS>A~f zldyLj9+vlGPG^j7Pbbk!xP|h*B6fB1CnY^TH3qgD@Ra~rQgcJc>qgfsnG2s8Q% z@~S^{O{fI5>`t~{*LZuz2tN;&?vnX(-pm{>;~t)7YI(l^i(jd*eoExR?f`fEF96L; z>B;`kW{}WK%Ik-#x1Sela^J{UQ0ChX)%Hi8=ZkPkRyoCi7AU$8;Qf5;b#*=eH^tNC`7JJbtulTaWUYKi8`Qe--{z~A9gO1)ZGpI?^m;)mk74_NItX+RNCj2Qa{3f zj%kY9y4?SBU|SdhF+ZD!zsFF#(19HyH2XoWcOm;`te_InyDP%m^P`dT`|T^unA3)` zOL1QN8j)fklSp8d&`hUTKBFP%ey4zD_mBb_3!JbfEQe za%mIN)Y-eKqw|v4cKHqBwRF0`;NdNlof9o=VY?s_)$&moq}-&bqM7hOzSj;XCX~O9 z;BiQ(DkOAL^V|jV3%a5ECh!d`VEK%#jW0VR?rkkG;%R9Geqb)(7ya=-grQq_NC zQ#bAcYhcVI-s*J`DOc}uoa13GZ8NNX5=X=IuVvleB;&}6HU*UkGkHheqcMx#jByt+ z&$nVAv!b4i%Hqnf|K)N!u2TbS#!M3J{j+VOEi;S*lEJM7pZ-zf1URyhw#;c=3wERk2x)>{Pm@5i}6};8#e-Za^l*OA7o?`ogS_^2I418j$v<cUhm?(_ z!E(}kwnt=3i>rHlmS;)1^SN(q+HHSu~K&A7Hwb#>iDt#o^_ZPa#a zzh^Xr%`vYlW9cg|#Ro^=KJp%2s@q^yQ>>Exfsoj23XH89WF|Sf@-^z#TLMo9Vq6+< zKlT-lE2l2cKcWo2e&5@bMqz$Z6hE2)X@qk_GIsKq@Xi{5#CB}M=ZJsZUwKrvmsug- zxVA{P68~hN<_ycBm)W#%Ls=3BA~1PPFU@oY6=tLx4ircZ6X%}n)knX#lG`S_g9moz zFmzc1mzKTj=uLIBu3UI`7Y__ao(D17h`Z9n@>x#g-fM?a@#~h6l}@%3+)YR{R;=3Y zfwx>9+&Q!<_)z^~5g_I?2_5SUoM*oJf~%iv{~r3vKmhNlU8Q=02V9G=jM^_Fj8S_t zx%CFQCl5N^6&3YUFu$`$1{jbGg%&d(fx`9=SG#kFytz4^sE9L5e@zDSWC+$7&kZs- zHlMVZ09{@m%Mvqo6qWQK0JrNHiigM7M_F>Lq{wtIRd`XtCw(=yY{ZJIEmxLvH;`dd z61ccH9lIXJ4!Z~@E%eWf7T6SgiKtQ9hAe}g=$xkQkAII(aXFAZzFNiwsE^ar8pQ9P zGczxRCTSXYW&cj$r#asTE*y1EGX_++71qs+XanCLp1?n+ZZr^klz|Zs!TG)_+bjzv zd*4hD{N8KpCa45`Gda3Sd0Hh3N=R;0DXv(d(5)G7i*i-<0UCrr!xsMYmJJwsuQONN zV$K6O-==XrbQiV$0kNeEid$?fN)8pO8q9<)d9VlEGUKyLd;zdok439oxOU0`hD*rL z_vQbQadH2jjB5@;e_;{b8==0^%E2oWVJAEThzcv8gs7xfaVn>z#6|ICNw%;L)U6LG zC~}cvlePml$zz8m27zy=MGZ@-C^k>_uB%2i)`P?RW?3BXH(>+rwA#9qh^md7W?LQa zKv}`;Nui2L2NJF03Z@*C8raYgkbpO{jVPS*u6y%oh>8k8IcJiXR7v%-p-x+$Q+kwx z1=pluK1Rya?OOo*cP@SKQ;NIC$go%hRuTGQ)Ucl>nyDFL)=`)xB2C|A9JHE#5yNG? z=atSR6E=F0EMk806I`vLTG)2{x;SjQ%OTmbC%39@kFl|L%Ul#M2d_y-u6|o4$J^0P zYcY@b*@mc9*UZF~6UoF40YHZKkCyq-rJu@pvtN_J|Ueym#L4)Q9z<~>wbmR(-# zv}7_(Q;9;F)GyZNEipRvSU`h zYe0Eeu5Vrq%7loM$IGEh1ptC}vPM>>c9(U%eS}Q7IC`9*_D?0!?#KuVzV%ZQ9gZax zxZee0{cm?Q=hDimDtDwS7ISk_d&9c!_rl$So5q~Ge~;GKRT*Ps0laPrr>z%Vg8nrX z%UaZ}AOP?AxE`;@*Mrjsw};d@N7yCBC1wqOm%S-RKP2>D@jg7T6dq_0pqJCAB&ug$ zTnlhK5S?5Gw#ya__gE0WWyi`OcVxF21Yc2a3hf{jQ0kW4%!{-B28_m{2l=LAHCFLAw!#;1ckC__ zn|&OPE%DJy_vSSmLB%vob!F8Z2xDFctZiM-_}ji^7vW1_CTd|p=x|L%=sjGL>*UD z8jV1i!|i6tO@!Zu;bvqG;ljoYeBIN_UCn|sgPuAkOu?VwqJ&5+?+ApU+wtRw#t)Z{ zFzEWUURNlVV2}CJVRB80FJ(JzZks)Rn?2uYW(|zWE5z&P)$b$Nf9_zk|0}+}V?xZn zxK~j!3Y;LKeiEr;KWXdJ6PcKDK+bGR9rk_qS)Ft~@P6BwI;Iz=~< zb;X59BLMc;tz(py$sRA2e6UQZ8C%5fFTE#lKxsWRl=Su9L3vIsUFcV|rUI{$^jWg) zA|pot1MS8wRYEO4ldu*VNaxSRb5totnsaXW0AdBsy7u-+L!QZ8X`=!9LYt5u3A%x;phGyGjkS zT+^Zf`N6ggK!tM|bo}XSkzrD^n8PYvgQ|$qQYl3y_ZeF6$X`4Fm+k_=JbM0k6NuqB zxON3&bUjPE7VINCV_*p9-sJ=3vyzl$1=YpmJ6qo-XwhAb-q-x`;zx^`5(`XY<(YGJ zYeLL>&ZM&Sia#ZA3&fbr-&S5W##V_utJ}NFkX+Bs@Ix1GBJTXJ7SKha0dp)CJzCLE ze|R#GU9jf6$pN=zt> zC3A@m*yPCQol!^W`Z65w^MdvCj`dNGSKjs0TTPA7b9#iP~YwTO6nQbc^t|qo80{dB78DF0* zNUgEmx4bT_n2ZLBEAlDRwwUZTL89RUd$%jJXcgot-Z-AUTdB8Ln@L*)6O)93`{PO6;vEeKuwPacj<35?2-^9K`6FCVRsQl4AnDyu&eD2k~jF^3r zbSyMvN^2!g$kAxNRzEEv9_(b*(<{)Q z*Z|oF+h(Z^1xep~-Xi|B`#CV6!v2)4w+JRbdqY;j9Zm}@q*r422_jK+rYYk zrSg4(d?%@o%>6l}_3Ogn^$va3%e%_Id)?H(8We9pUdCp;%C_x8pAuovsQM{WtS>Kf z^G4l(f4$p}=eoH$)k-i7H`;rMkWPjIP3VE;DLrhSBn)*rYNF3-Cnt{zjp^#iIPb*au+Yf~_kIpb%DJ+g` zbruOI5bp;vRprx7DTCq6)AR;ygQ~;EvRJKx8dvQ_X=BrF+O(93ax|xa`E~1udps<_ z*~P1{TinEjjJQH^KUs&U0-Qb<$dA&z`4ayf>cEEMeh>cA;>FuHcdFVKw$icED&s#4 zat&OMwSNx}gq^$)=Q_(Mx5qm`PK{?&ShowfcZLf~e%ng4Dc_gHKf)qJl8M@cCVCXj zsE3Z(3^#ZZOaLG{FgJ(69EJrL8zr@>HAkkxDSS-DoujuiGNf$AGtyKx=mln7ekuL} zQp0(jjteb_Q{Wp#S4Xu@@u;y<%&Ee*>m53lRVc!Fy5CFt&I0&JB2qD}6M4<&|ALri z48+7h$*qVg$P8Cqgnt@2$!ZyiY?n_8Q^M$|YRicm557c_gtO@&$wE7tyA`jMu#f!v z9beT$>NwqpKNn$#$Tk%0EsD$S)Kh7GS`EPP(vdNUD5jxRFvw(e?{p2C0?@J`Ig2|j zXQ9IW2~^T5v71(D=_vM+ol2Ht^IB>$DKl_8oY_Y>D`=El$*OLI0~4Rl!U9yj2>)5C z#*|RIyzcjvABPe)<)Bjqmw?Z|;OQWpSybfdNRi(b89TqAuk46L{U~iYpV@#{<`7X= zp}hW4&~|XXO8{&7o@Al;>I&(TNZ~XhKG3b4Nx4g#ynt)#0H1e7uty^L#0Yd;+pM2p zu&FyYm5~H@;-;Am$e+6iRmK)ZDMDgjq9bnMJo~e?w6gSsqS}zPc*3?c$ zFKy$nCMeH_!IKHGm~;a{czM*alq**LRk{W-IA%q~W2{2nXHTBp4Ns?C;*Dq*XE zn@@t|#k5;SD6-M-S$M%y&)p53pLU&KlS)qn^$%wHDNl*k7iOr-+7s?|y6`P=UyEN` zD=#N^*5wtYdTq!;BQ$ta@dA|x?2Vzgy1DoTZDIp}fA`VX<&=a3RtN6f(~G(J+Arjc ztRH3Hwx~P9QE=4jULEwfNpi^PKgbndx@Pwz3kMS9)YK~5T2I&f#?5j&gRqB?yquwy56=Y&Z^^5i2_p!U< zTA)JDP7f4cHguOmO41~v*lSB6CSfBZsk^>MPJP69bU}g*Tz?3hKvy*5c*DuuN>0^& z^$OvpSFIC3=!N+ApiM?K2laW58Z8L&bn3<1UCC8yqTEkDOrrCS!dpfOjW4;chT297 zV#XuQw#g&fFYlKa1A4EoGuGFrsNX7^D8}22(z%%@&pJcAWA#@yyJPVPVoLX!Y@VGq zUjqCSUDs3XS+*<$gs|5FwEvFPR`v0h@^^1GeQcGhZFS)6g|(6jizUXIa0|K*@&a2pHD4HzykssZsdPHvW%S>Q&gz zYJIzQJ^G3Z@TzINU7>SWU zk;501o~s+?)|3>qY|xI}yW2D97)D@=J!>i+Il^j!ctjClF~K9#3S^yQRe`;aaY4rGKKW-SqZiR+{kwOCP64^3BroWC)8S zgYV|g0<2b<2S&ZsIbNlqJ0_>BU~XTW=f%lSWWpY6Tk0}#1+JSIhS8}{| z4Cyo;uduQh$Buzi*U;Qg4$iNUt9q%KyPfID59*Q_C=7AWyJoPyap_Ug#?@qWmUq{0 zCoyPO04&YZ)p%x5s2eznw>x^XPuZ*8Tj5b$q9{U*3mh^1bJBt?xG!%~PP~g0mtj08 zTVUE~I1ekiu$HyI3W&>vaJKKP1W% zzz(&`wc3=Gk=p)|1#F29e)Vb3{#(lRhPMu`9qUHd@?S3FSII8 zI5cN*G-%g4>;(28p=73BHdo^TZ}(dos08CsXg~Q(7aE}%kCB|-uI8D{-yAkLoA^r&9f=}qOgt3{71>504^=fhjiLuUoFAcpHvsneX7X!drIua;MQn^-$d zzauQFv5naxdoW++>uV9LA%`Z)8MGP#t@A>ntaf65j!fqYsnY7?`S1JG)51b%PuklU zk-IpwtsN|Z-HSQ2*93*}0}pxD@|tJD68Mhj_VrDTfuara!ex@~b#uryECgYQ;hJk* zEOstU?e0A!Zr8&)oTm|%v!P?wy{Q`Q9~nI}d^V`%fU;^KpZWuf~G<}6tRwP$- zR^3L7H!*>d+4Y^4qE4iHZioz!hu$Ms!I${F%aIZM^>Nm zYD%enk%^cbSNNK&d~($6b-O<|iIPf#fvn8fu&yJN{22c_uo^#NSW|@$zI+UFx`r5X zptBukXHqRVrVF6&*K%J8yN7b2)ndmAs4>C`h=TlcEDurebB)~Rf1puJ(~ye~qdRu4 zlfF&1nXc#O?EfFO-myK?s7u$4?TT&NM#XkgF)FrgR%|}8ZQHhO+s4k@tGm~SwSU8X zA9Kukjtl#^r(MlS#A{V?2svj$J=Sd?;VA%{?eHf~FUY;e-iX#ehfX;LJ=OuUto*O4 zTrabZw+Y9)M(4t&RQ8s!8Hdufm?`$2;~lqFi_^Lv<~OtIucpY;DvtP-o#)OJ>o1be z+Abe0k1kptHLkDyU&q&vbq#0UZu4)=uuopS)g}N{O{cX=S53f=vcX)em`fncr1D_4 z%{wjAIz&&a5kL9X{`;j%zzgt-+<#%$gR4%RW&jO^BJto=%UhN8Df#g3$^)RY#mIYf ziTSqvc(Co*-oCD0tS@VwO7USl&;HyidaTFTqW)X0J6Dl`0c5IG+)KVzb=Z_{(pzu+ z?r!ge?{mrg@s`9(-`V2$uv8JSOBS5Bz$27#lr#fJtv`bZacP=BW~XI_U^h)W?w>HF zK88@TE(fAN6P~gq=bVd?3~@0-aC9p$$m9?q?b=R5ij;?$rh8FxjTWJX? ze1PXhIKffVtX1_VXbRkG=MPIi>bYpyQF#ViqEp)bqV#m_Nq24+=Q!K1Qac9_R347j zGSsI>oaC;TRB`f}f(+%o{LnCzqu7ccd?BI(I(032BUrfUI$s z4d#SSnV>1leMT2j?#*H5ti-K`U!~7DT>90v5KWoLV`i;nqJg3AFL?uG7H=|HjtHy< zE$|ETYXnf^Cx&25hzim5%ep{n>=T`PJ%!sEP1vFULxY87nqfACr#zFU#W(_@`kWqx zd^kr{-F*c)?NyNQEOQR{&K`+8OD+rgKKK=*8O}C;nXw0rxIqw){9&gv7dTBxXE; zgdex!*2s8(Yb^&C)_g(^VXLIa8>2DhUlPayf;CDUQLJ8uvh1FD{@b5im=hnLdKIBRbrm zKyo~e<>b9Ivle0KLlzOwq6XXMO0%Pn=Zf=0ZS-#XeVlwbV_@hhNrg8z83pU;3|Nk} z?LehOSCTN1tYw3(vZ}s)lXOc}4n;V;Oohi`K_-zivXLQ&lX;t#x zhl}^z(vJ6s!-L^93y%w&h5cM^dIQ@mmmI?iLl9DIW-Lk|Y*G20T%J%6Ee%-qs~?Ls zbB($huNs~vLot^(Lh9HmergdA0&h#7b>n9J?}AGa#-Oq=*rkoI(jyp+P)&Lr^@v+v zve^_w0=BUrY~2*7gtri>0Z)tlFA?1IgJ@}Rzkit5jA|T5rpt;o9QM>hnC3aCjB@2j z+|d_6Jqpx78RR4S2 z+8Cnv*X8_wFgKRtsN<*BCdh{8$kf)+tLVlUkKrc9x$SFA%xYr}FAzs-xDa!rQ;4ug z_7xsVN_DTY;c|2G%pLC_++xzwV1GB2?pfy%S@0?3Z%H|lg7>2S;shf@(r7itFd7oBJuIcywbAVgBzok8TQ%c}F!`{5_Sljn0@yjIVM)KPen4Mjcs_tCd zG&z!Oc5-iR$H)9mzw7FL>@i$SPKN>n;gOAzIY?R zzt`Qex33zP-+NmWF828p)*acW?ZmqZZL+y!>i(Ruoh^PHwGV0E?&-lBzUF--VdIYt zG7KhC&RPZ->mZ91Kt8>g<)5A{ciTho+qQx3LD9hCk(PP z`5HO)aGIW+K%lE5gP!(sld2V@NwxYHL32Lh$^%1F%$JPU+hW3~r04zO!5znCe*3`^^W9!Jjf^bY+wiYPs!irCr&SW>~uCJG$jHJ#4w31_*=o*5rEfxQ}yrNb;Q;GVae5X zRrminoDmM4!<9r(48?ZXL|Jj;)9RX>$=SlwKYA$m4#LodXB+0Lcw7!c;}@&CAVjIa zZEWVo=7p&z_~b~O>IWNNZKo1bT)Qg zYPV!8(jN9(;P(Zxqwru0zfPe{mkSe955-QaV}u_i=adeULMjikW7GLersf$JUMXjq zNN--vXBnH0hCGR!({*aok)6Cn<*?@8iLY9j@h25#o&B4#w5t=vr>A^3N9BV@1h2UkK&GC(=9IiQ1PBWa?oD zI1Td#amwwy0Q$j6_saIP^2ZL`JWv27H+90+3}%P?$q}(Y+5n8Sz)j(eO!cJ-4^{-@wP4(>FGi z{7rrxTv?{CEmw07r^5gX8EmSj(-oE{TloZEKE`h*E@g~~?P=h6uD>QH%ElhwP*s~_ zS}Xs=6fwicH>#=sNfJ;K+j#Y}TAtrnLy{X>&8sSArA!7ql?y`63n40wC&LpvH%ZPd z*Oh%*V-9sRVQY83k)=)b2D-uq7{{pV7z~Tp*HV<3H=EYMy z+A5$u=zh-^*wx)=nU|IXMZFeKBJg}99-#gEy0txWD?ku2$@JdwrG)Uzf6r-3G6NUb z(s{&{oZkMrv@t}<$prHU>24-#p=G@xaTyE9Y_QrK0JM57y7ryv5Dv0g)T|$Zq(B^xKt( z&gc8xSDe7Nn(eR0dUI^ACW~&PXYyUo^BdjbbrNsOdh|2F#(29wO}e^UUW2}GfiL~} ztKjmm45-^DKIpCt+tK8s&RGK5CMEAJ;=K>eegI=SV>dWsPiKsC}M z(1!J_s$fn+T~I$RIj+7RX3==hfEBh? zcLxV<-Qyr{qgspxi z8vW)34N7vlmGScg(&DqUSQcOMi0U}l9d0R4)5cgTUIwmUE8jRrCLcb{rn&pe{A06w zXO`wZhcc||(e$+XTeOP3`5*47-cFfmZW+E4?Bv;_OoT<@Y>?*m3d)>EAPVDP;TZFP zlW*`;av=vz>Qav6gif^!X(CxOBY7(qej*%OO+=s9{70w-63i{*(1jAC5ZxheShp#~ zP@S%Q_cs`w-6R{Eus!fcA!Cge_N<0(I*j9Zj%ui-mw9yba6^@>J<>~6F&1l7d7oQY z8MmiYa3|ANLl7IZ5mH4jrk_p4M(;nhsCJy28Rrs2f@;}Ng9$msGtr*q!cZFzy$)`_N(nMzf#>KFz`3!4p1R^Bq1cINsl!PH-&>2Qx1FKc$> z^Gz&k48ccU0aHA1Q3@2W!kvZv?UJsv&b-3j0wSyLQsYC9sEKLT%%JJJ1!Rrp#$KL< z?C!C18CeDJ1GE9oe}h4>3M&*j%@jvNAK>jufj&B*m38RtN`$TxJEkK> zPGX}4#IiNJ5k~sD>VwAjq^UomR*O3q8x=Lv^7Isq?Jl(>wSSM9 z2MhTzjDm3%s}S5;w+<^RPip+bylz@)i(@9wZ5f- zD8hJ$pv&Q_l*tfTdJ=1+61$St_+kcrE&0ZFziqdq8sN$NmD)f4+sUxgWiC3rq04lk z?{Y5mefO3T??!m{Hl!(zklM;=SL9B%0U$Ji!w_uz>Nm~BLRnCu8ED#93;qibw)gFk z9@s0KNfGG;kz7I`LerJp$veKr`p1&s#IztcaD;?u&5%p}0!3tQ(0uI_(L2@xQO>k; zwr!>;P34^Y`^^0$Xom3UNExM5#nh%qRZ6Ux793_yxG-cXP$AdgZ#1IbX5t+RhG(WI z?FxE=?=z(D#HUC)2?Y+ECZFPoC!F#3BQg6MEc+K#IlE1B|J4kshy&<(l5R`vLqo`r z!rR~`kU=m$mFm5Nba%D1aSL!|VAMV}u3YTqdMlM-sCFUJ&+}BGyA?8c#`%ZFs<(NaV#mP-WYegl8$${uYtd9;k(?Tufzy)?4Y%>S+m z);t~2Ote)S3mcP2Bj42cKDe*=uEwBKbpCFCdbvDX4V=8kIF@e`UPT{&esx#1E*?}T z?xqO>LjTwb+#l68pVz7#D}o{lS~Ya!(=ZZ4ubg`938g=4>}!Vnpw-ZmIhfAI(6|ln z1%i42lTzK3loQ*OLxFL$>6rkc2AbiciI};KS~Gdw$KU`;HiwkTk2eXlnY$)O@(pe) zqk%za$}7pri1FtH4OFwAt~<-KhT{1T?htm*Kh*EF|1YC*%SiSogT)vai~qbtFJ~%8 z-@}pa#I_tT9}&d{k{ZU6d1Ea7-UKzuBp`OfE_t`)Q3Cj(iEI>QoZQs)>D#u*n0QN z|FD3ox;bu}v0O+V+6V`SQ-aK{CW40tsYA$lew-&hIbC9yyFSN#*(x2W6WOPX6VlOEj$G!V$jlO1#jPx3o(hGljc1|z-@PN1lmX-9bW+SOadRS3@r&&s z!4c`))fs6JMHa#~@r{32C9460#$}BL*1B1q0FjAJWYCid5nE|vMB^OA852)6dAb_5 zv#I%wVesGIsWd=rNxwl_owRJla)@%hAct-`C1L`pymRXn4KTRqaj(?>CEQ^vGA$7r z+mssNeeYDLQEfHWZDoF_PrY=Y!KWMy3d!wtygGU+k`%jYPgSSU(gwAGXF96k(B5>y zU)gRw@z|z2w5X9Lk*1*1XZ{+i4CFy+xi!`Iw0>?)sF_-tUnTG5FI~kfZ?8_~;?NXI zN@@2jtK^~vO*Gaa(5;0ybAIpY!X8QIZ*SlCd`ZH=tL^NyFOFW4O63{CTS8so=;b=& z?oh#It!VDseDQ~oEV?-S>+-R6{u9u>a@%h8h?`gaXdp#1c9r8uaYd-Jt|f&#+2E8e z(>cnR-u`LA508;1TgdX5gpir%%9rb%K{Y8DW-vH#z~w|D(}n(e20Sw?gYrbF;3UhM zkL&~vC1cYc0vX{L_@wA~$#ZMx;a%Al(0qd(uj)|xdktbKKbs+JU^ls~tYLwhEm_8Ac|;M7SYim?rAnBhkep-YwhH9>oOm;{@^p!y55*48%6;6%!p-lJOw1@Ga5l zwlwxxL-K}t%K?C zm~J-TzN1xvC~^72PUGkEj%PbgT%fLw2>x^aU0%2VbNs^d$=UI7yRP6~wXJij_}zdg z{FwLeI{c3Z>W|BUO{&4bhVFKXSY2`=3op0;Hcno=rtReWYFPpS%AsCRR?5)amsJyQEZO^6+q>SFtoQE^6>S^gZ?~HrR-C8i z@*M1ebKB-DAC9kwKf1q{ZSs{F{_VtZzGEGGjiXlbE6W@lHyQim6Z-9KRS`Q9y z-r!JttegG})gvLxdDu@=*xIqKf;ehfLtKQm$^@b3-PM~d#c#8j5P{&?k$hOlYU;yE zU`1e%`JSs>`5X+4@=AF29Xv6hzz`x$wK3kHjfP#*@{PeqVuTm@X0%?v@9eI3_WwT7 z9sk#Wm*V@Or^p&~HOly|Nhw6RBi*c~@e~EoFsH$yEj~A&)j$m}jn~8l7t3Gn#2RkPJkVIPEso=oSsJzh<`Oq93;qj| zDv?o~!J?^Z_+SAzTRRC`tV9+~6Cm6XIYWJubNi#sLS{NqlFz!#m=dPncvKaLbc}NF z*3PGn>VTC@OaC3oXv}-)Eb`T7FID;qh33$6LJYC!!M9eV0PRaTo}fiaT^a?F&cWx) zrN3P-;VE*I%9iC8FoO#tsdJe>LFcXZGN&9~iFc6{7ZaKbRFNA>G|AS~x2x=7+4Xe3 zK{bF-f;Qn-u)&z`w=B0*FoIz7m$Jg9E)8wzS)y zXBOPXiVn_ai0ZTiJ3H;ED%QXwIVS_l1VQWwi*VDR-}zqYS+UDMF-ZCdm4r8tEL9*W zwdyMkU~#Eq)1{6aSb(3OaZD=Eilzm@u0~Qg!`sSSHrpP?yf&Y_yNIPQ(B?D=WjNLj zPE4vahWs)XcgR&gcyJ~?bc9@a%YQ@$Ql*7RNDb|ZCweP>QK2Ga8T}W}y*br+M)sRk zBii3)eLdG!KPNmnxVQ$&@HBz)yCg@HbiQAKx|<8UBUiOwNac_NU&caPPkWVv5Thfl zsSxQ-^!$;FaBGc<=;Y;?EGozxWK3*i+r2_ZQYT1`-jOXs*&VrcG-Yq7O@GF8Qs^>$ zFH?<59unK0xTUEa4H3~SA$GA%u**=%kA^dVa}3!FTlZJw*3EN%HP;+1&-pjm@Hsj{ zE|{;%IMABnQl~^7rt|quTy=kYzZPW7<$yGj2{}6y)Hp(1xe{?c-Zz?j6L+HnS{Q6%ZUKX@YW32qdr7yzpT1M1zH-HG4c7P9fL4DytRmj%&yj)e*GLAbsf;! zP8O#&&_@bcro9_HD`|x3guy=>aGRf8(rxFF7Av-XP3gz*-Tb`3iMYQpd>zjB;x_Yp&lb=;rNuZovFH7d_6_gZOqr<4=DdhjVj$ z-ZY$JP~W@!*WZunbTcpO$$KvL#eAl72vp@>jOM&+@M4w^7FEzw%Sg zhF{x0swar{{Tx0Yu2rW_k{PB+?Z$2XiRaz?43&I2w{M{1B0Ol^KHI+TxYxf|GyU>8 zKk~7I*C7a2B`+WEpxN`k;oW{lVO0zfzsT3W{k%GUUSAzA%$Dj-5E<^=0px$gtOKft z9kXo(I!mkWeCEQ3O9eCzU0Z`G7adU_ct&S)?w3w)z9hfhX8h^HpN7Juoc6+glpioa zklB>NQE-1c7zPI2gpL+QdO_Xb%RE@LN{#sJIn$~WO}vUZ3c=doArF0DrnD~p573@W z`oB?a4+04s#J;JNQTH$gD1It3S^bv-ml+lQl7@2Qh5qEWV;&$@ z0?AUDicxA)%rZ4wPph0HyNDFX#)T36DHCUz;v$1Np~c~(=%P^)Q2wG8)P)ri=wb~xc~@>47E)7eS}NT=K`vS4 zPg0tGk&mO1gy|k6zl{+8Fe=_NwThMR@dYA zx*9C?rKU-(m$S86KBC-{RG9ul@?5mTrqjsdAelUPGB+cp zdrzoiV=(iA=+mqQ)9$|h6fq|G@&?!DsYGApiskefwn@GDdX@Rk_^`Sbtenx~qGBvm zrE%4R$4uk)Nx@RRW8raC7FH>dd}$WDIQ#&v!wEQ)(Q5uxhz9YVtm-Y=c)4}UTq4wJ zopbA7YYGppPc4jl{t^@hr}!ey>BZ9jCvF($>u3V2%?0)fDZWT53fbmNR`prLTZsjr zg8mLp|40>-(sZ#mN-&nAtOFbmXBlCwkqx5V|H*AdJ7L@u?{SG7T*1gB?A?bl!%)V( zZ+WsfK76^W0D<~1OBhme{a#amC>A+ZK_E3nT5{j9REBZMEMLe#-JCh|u81&mpGn68 ztumT^1rz$Xy%>7KQbo-m8v$MXCd%C=vj^qULtvZy!GPEa$f~&TiXL-bI)yX8Q0MW+ zM51R`O^LG?$5r`;%*!D*>k7sZZ$F)%g-rwvHM+xN!9BIA=JK|uWu{~T%iY;|H)=`& z(i(x;yEn@k)%Zt<{igi#qeHz2xHsgm3n-51U^j>McX|eW^a6R-a3kCh55Bno2GT5+ zZQ4N5gPhrbT|nPSK>)I8R1*J$jmksNKtFW)&HygR{BU7`4PC3MwI1X3iZv0q;QR}MD? z!XVAlQNjBi`1Pt6m6auGX&)!2zExkQ{20^W+BGY{2kJJe+v?Wi*T2MRxbN;-tSeUaf^t_hopwfS$LD@*rL8R`SHPJ4T7RKYe~X&mm?mN zaeJ@`&QW|mt&8t|DxUYA#&NpWB<|g(?5C)+NK+RwJ5t6|PQX$Y^5J<;^WZr*o7es+ zW+*y;mh;FxW}4cBEpTVtz1oNFzNnk-(o891^m&Cosz46`oBo5{i%a^Qb*9!CoG{8g(j_pFhSb=j)3L+ zcS5TurB8n@eXu~E-}{h=|35~Smus`Gf$QN5V%2%B^eP6s0H*$It~Tolhf9!&hBk2Z z5Uflv^N0(toZr3IZ42>6Aa)1%W|FM0aIri8c2T~dit|}epCAIHd6J6xG|%#tspBC3 zvA{au$HrwzdR+bTNG?AjuBY*}b2zT(f`BoZgMh=9*aO2uqm?oE^9o-@Jqbt-Juf5j z9k2CYS1J$9fk(3;-htN$t$2-*C-ms{;I4bbKgTzt>I$ zRnI7N+$;knx{RQ0sR2^v6yw}knL{A*v(|>PMt@RB7ibc?UsXolBbbr^X}mK##8SDc z5!Gb(h1BvgLoZSJyWIF$yvK$l+QkufZ@dTSSW76co4H&87lrEzCez0f%dWj1vyfuU zG~0#0GVC9cFn@QITD9z(N24?IAsMR}nHWzsS$!bc%J({6!HSFTYq4j1j(Y^0m zP1pDKCirok$47fmvAo0tUBIOA+RrV^u8s$Q}9FWN#PoB4wuGTIDlz zLJ_^2vsVi0qZ4KvCCmHKzy8e=ud%7Bz9JX zt7s}Bd&0LTfvn4YP&0<_YyAe1!BMzajJq@{IDn|JU_tWAyjq^f^0WCj@*&sE{t#S( z$1EWyr;zdNp)V- z3)Rt!W`eBAYfIzoyG_Z|IEJDq#cZs`!7zQv?WovDL1Be!(=Mb+M=!d(Re3V9!Y2RN z{Fs2-0S?E_6<01zU-RkaxNx2aWD&!HM|}k<@}!DKnA1gRdrFhD3raWKG^{QFB^mEV z^Hy!Rf_E@mYpRuK{bB6vG$sFKy#79&aI?L9TX{4ks*z;OcG8%u{IBQAmpmHe1xSQd z${4-6Yp*dRi-1>)Vts4*a~`qmN|@^RGfmgEb-7)WCP9Q`#4)R8p2Pe!xn6g-S+kVi zeR;|uLsS0kN#~2@w&d1VI26efcksUMk;YBC{p0%hUh(wH^>A<5O-7*|BNFNL)0TBL zM83?+8J9vH33FAiJlE@onx)f=oWtOZ;E>gpaIr zO&U$Ijx>o=iq{*_B*AXE^1Q$k7(P2-V3_H~gB}0@oa!yUQ?Y}=-93|I?CH$EIBt6- zcwb+GMu3#+1!%K~4Qq-Ty##1GEKwmEg#4cCroW|XepZ$kCRM20&molpSF&G4ADfUD z%y5L%myFBG93hdq+ic{k^;Be;pE%0S>DT@Snj)~fcoz4Nd7cv;|w(wpOq)? zL*QkF1UE1n(9`n25@$DWv$-B^F1srtKivH8>vrnl{G$89br)yOBejwpAH&a-8?4Pa|uPD=vJGW8;I9lDca&zYOL#`k&9E^xSgE303pa5_scy)^47?9!j@O}brBoC zlzWQpZznp$lnO&Vm470zOR;qpVBPObCVKQym5{(!b2Hy_+M#LdC|f`&^h+r+)i%3P zg#P^1?g`K^OQ~mCN*ZHpOMzvY*zJIx7W`w%M|e@$Bew+pbq}ecN`I;^jEmhVkBMtU zcHQjAI&+?@G>G^s%=M{yfqz0VTctlAd$F!RaL*uvgO--FjkkKdty&X`H8}r>o)Rr< z^bN-{v--Zl4?lb;O87<$$Pe%b!#td3AFFfF&xzjoX+P7j zo*~Z*pgt8G0JCAn+(CBvw_(Ihyd{usnD45`Cg5u~OIvere^zT~xRAm}_U6Ht>VO~> z&w7^B=fy0U=FiWG-OwTi=%92#yKCoa9 z`i^W*wIC2=ry2(e5`0KmqWJbfrZT-t(zpVK0F=$#49(GSr|gO{y=n)Y$L8GiuA{kH z;ql;pN5Yn8w)Y_qtxdf;{TW=zfdzoSJ=N=J@2KCjetO6u3AWXBs$^oD7#EMi_W1~T z`cM@iE^I;?y>lL8_lCp#?zRH6S}BQx0UDSSq|B>)@XN}HEqw0jwjE@C3uFwe>g~f2 zB}C|lKWL)II;$g_2ABBHx-w>N9=aJkjsq%QJ}kbz%(H1pB0)pnwS>VYYmc|NuK2pL zOb0PGrAN?Px2+p<=dx0c1}*9zy?twy*0yX=Kx5V5+R#8%L%D_F*>nkp1UTDXZ9`+a z*fWBK<=vm7`X+Bj3ml)yC6C3kBYZodmIvwb!TWwipb}GO*2^v3a|GmXZ6Dhcnu_vn z{oCg6YR#|)e(QJJ?)zo6;$6+=&co}=gWXJ~r_(rHJUa}SYFyST0AGM?;bL`3pq_^l zJaEr-LIH~KtaMwk72w6<<;98ixMWnIz#}}mwE~yjWHMLuPsjt>`xu=spH$-_@BLF* z29pQkmrC?|M%_twkUgZ69T#u<{to1gy7C4Y>Pr=ZR@69w&!M6G%6XwVXZY*g77z9R zxc|uiuQ~%NCyrtdb;R4RAx37d&2Dca=1Ah^!ZSMI=9v5fM%6wP=Olz{<`{|q}ugZBzEu^3!9qk)7=+gGMS zwZgfz^A4~pLx0hDO(kNkSlCEUK-o$lV~7h+>-|ld3A8dn1KaYNS1R1H%fXOOB8LW^ zdyHAJ$%dRpasnS-gOQ#>WWZLe2-zHJI&J$&C^5H+K4EF_XqQ~G=vD<oyDAI_G(Qj~yAR>^t-~6F?>%U22xkgw2)NhxqKS`)oq&|k&SS=_Cz)a5w znQI5Y(N*H2$iCM>PJL$1vAk_C8tVGm7pKr7+-cuqxvv)jyPC?zLQl45?@f|erXfzC zr&LepILr0Ty428MdW^}G$wCql;cC--(ua-2Pg#upEgN|y3*f4V_q9Z8? zQ`@3b2k3vsGc7n+IpnmQ!NBgKP;Fe(wWJX|%j*Ww;dV^yw&fEC=+Nv=GVxSi5w z|DHSrC{KW|Wh^c%sJ7iD@rUg)w@hSAhLb$`6ZGOq8hObUa*)J>4(SGwg6A-qd|cWw zfQ#w0JS0@oFM2aj--*0itHiOKIX3C9l;rX-^Fr`q1P6zGtrmbfgPR3+NL%a|Rkz%8 zn^P&Ub|w_@Rk%hS4D22QMUr!L#2+n0_1F=5{x^{YhwryOXyJ{?;AwYMes^{dNANfJ zvorM#(z0A)5V{$mV6z+z#0TUja1A09A@B7hIsnYM5eRbo9K(0Z{jGSBVtDtCH>Uh$ z1hLOshZ;!?e}KXCP;l!Ze?b~-tihYEUV$yC^U);T{rs!e%()fmVmu-M(1WF?EywTf z@!CE;?GFpe{}sSMS+jE0Ij@5_Ak`(qA!@qO`F(!!6|6i!r$kul2gIMw4NPVkOE2O#Sj;KMt4PtC(LAA z_R0;WSQHxWjb1+eHNHHHR4qamC7UCBM#dO4WK{{yI6=OM5@#4J!aoldy`F?!iZ=$d2$T5F?mjt zkPIoEzC71oRzI($!>|Ip;o7~UuI>%1+$KgPO?#DOw1=%60Fd`pV*+GxV1f|FnHQS| zzlY1?={=1ZIT-X?=0JZgNT*KHok^322a{wyZXOAYZnNqHP>6kaozn{vE5RGJps$7C zqTrdoLcia3PAZ-S>@3EK{0r{~6)(aC{t)lOxuw zr_;zcg+GR~V6^GZfI=03ai06_e@?TDg^aIFk(RF3i^_e=>NW}Yu0>^ufS|ysmK9wyP}H zSH3(h3B^mvRTj@>O9Z2bQw|xbd{V5hcQY?x9&2DDmar>Zn39tx6SfjgOUEYS1cIi9 zSc(Km&y~cB|2mNogX~g?rO&UC39*;+^VL+)LVYZRw78 zTIN(es_7Z(QrTzdCRkgF3HY%h-xrr+u_0HltGneJ0*bNn>iN>DM(^e9p zo(n7EOPYEc!p=Q5MwDt%np<4dJHLnS);pn3c!|%_1Q*BT5zSh6%m7*>m2eLA=cxpf0J1W@6EW`ZC|--u1Epu^Y9pBt`-SM<&v$z3`0FSKdO3&Ab_Lfmpdxz&}aXfrgDpq#X1pS&M+o3 zoT(nxKo)v}oy#&+yS=5%rn-TMfKLd$C@tO`RC~&zJmL2hBj=S`B+eoo%Po86!50@U7-e+{ElMGr-2 zR<_24(ksRWpcO*OKuo8Vd;yDYByAFvWL#Li#&&ZoH=JAtoO77T#_BYHY4dXf9er5s zRObELVxV3kLOz$UXPgk57B#a7i7Jc@yj;Y}+R#KcYU}^k!9k@Ow>@U4vVM+1t*)zV zWnV%#F>x@LFqkR@tKDNvZp+ge!uvL;Q0og^$26|Wu8*C_A{LYvUJJ7?j@%~)5Hn1V z1RsHTgxi&wklAG{47E`aJMx%m%+X}PAe18qkd{&8-X>Db<{`icjVRx*IIkW_8XGP@)N1<1jYRtcKrOHnj z;Nax1@zqp#{6p)10N>IyM*RgDe=cxv|66CR+Pck?rX5!xz;eQ%VIz1J$3^qj`8Yun z!Kdu?t$D3Q^O$k^wDGd^Ti^QQGvye{%85f4pN=-Zb+L~IJH2<8g_T1+g8KM5r-YWc zZt8{dg~!HjAdBEqiu(MvKr0yW$HC!?>f8gcs*E&Z&5=gSDEg?f&s)OX3B~=1I>3z1 z@&LXE^~C@aVeie5cY5{^>rWGNqdu=|htv+;p;s?g*wHS= z8BH_7Ku)&@1l*b<*>p70n)c#^R_=AD>zt?8qW+9uEb#2pZi|S2xN*U%RjsbIa`_hc z!I~|F0sydza>C+;g8zD-*M`l|tYAn2;65DBC5%ByA7^4Z1Vl(>(L%8hw zCN>@=sRQBKQeg4E(Q%Z+2W6F^=;abU|Lo98s$Uq8&Q=}XPfic>kI#?_q_Xs0yC6e> zwhD7Wsz0u72Z!b92_t`^Jl*;NV=<7d^@mCALd>Ls%!&MYrjso>6?!hH66>~#O6R^j zZ|J?$Z%@j&@tyqng?*=v&QBfSA)mirQ}j&#B)QOBET)civ1WK!SBHh;Dr&N9e``G>u`ww} zArWX0s*veH4X^|z_gd8eZId5sCD`;-Au8t}H}STLhpB#gF%bcn1q=sM^eAI>I|k@^ z;EbuEcOm>Ix`h-$QGrHtx4r0g{`MCLjOLcoVWzb z`shepIba`9 zIm%r4_16Xadg1`OsJ}*10p|+Vnrjm9TkdBR(&;zJ*rmC#!p|yM+)H6(BL|H+&9g>M z6*h^OR#d_LR2M%;aD|l@j(6c5xO%Pq@>p%BgSo{)<7Lq_w~;v4LG|hWQx7G7_}9qg zNrq|KqvNPxgXr!lodke1 zVZp5YybNa#t5}y)^*G7djRrCpn=^a%t7K=PP%T zLco(8t17Ew37l9KN*c*l)U)_;+IEO`Us3#Rz}dBW2J0@r_z@eA=X38Rb}9A4caj$w z%EI2Qv!4KH;NG}O7^EhqG*uso5~7#G?an&Z#iNp?NW0J2+MNVVU#!rLA9vDNB+l%D zd-#gT$MOP|M5sk8)sB|NR^jN{%p^>_cw4wl?@a_FI6}j%hICH0`~E0u@nA%{2m*!6 zW&w6DTer~Dbyj*qxn1V?=wtDXh?gyjX8bRhN1<}tJGuj1zA-O$K~Vv8~CPX168-n z3OzDBCyyvG9BpuqUy-FWalqbv zPQmR!qBmkVft8Poyy=NjQY1Ee*4=A!}x8yRn~@+w_Y0jaV}huoZZc})>9 z!0_8LDSLOTkjn&JuJ;vuX%XPuk^MbI^GMO?8^Oh*I3o{&y6B2%2)3$9EDm!cFeT7= z$0taz>r8b!*ycE#)TZ+|KBrC89_mX$ zUUpkzvf?I2D?v8@mKEh^xH9V57Q+IKJAe0wB(Y>5 zMI4F^B5G0>65-~s<6iWHmb2G*{euDPLL3H<-dF72f8TpOG^$;llSBM(!?e}^h7TWR ze=mnXggdb)^^;)ao)}UjRs7J>C$JROjWdgQuI$M)%>&dojvY$BF zwrjFI*>+8~YqD+I_V)ekzWc+z`(NDmd7bBR+|B1RGO!Oi7~42mJ96yY$8OfFKZyNt zwdQ&xz|5ApV_4GHYM#07;Szwa#zLFsmL#D&amLLu3}BupxevsR%t%~n(+ZVvQ@GYjzf0=d9c!277zpqba3JZ>B#|NtHQr%2)Tjx1|OYmwe-;u-@Ux z8+g~2JdK|v@w%Cko9$bdVC~-sY2@l+z{;nR)huz?*4m?3n%q1q6eOtV+m#d$P!>Y) zY~g+4_^Dh#D~zVRuy~vr{koE`saxn5K6v)eX1muV@=7~Aiu-%63z^}PvtaI*%ftS< z0ANe>jz|w)ut?3P&_3kXEr$J1{f|K#z!$lJl~XlGX=jx27`1c6Cz<4HG2IwCLwX|- z=Yt&83Gt(p!`!(mD~|OzTL}8T_gNMCK4$L*e!OVh0!Q@rgL-RJM<_9|+C5M0ftHDO zW*+nj0ZSbT{qa!u-ogUdu~UM6zMaGlXJ_dC8EcsuGuul`2LP-tI`865wUa}r(K;}x z!##)BF(=nLV}nw@q~>c)D`Eh?g@4CzAX2WZJAv<2BdED6VXijw`O(1xf?jt8?!R0! z{Z2EN=|!~Bb&>yM0nVb5sux8|qasOI!xmSjS&dpZ%;(3>?ymD^Zdzw-8RJVyXsC2U zyx$?Jm1yt|!!fhTbbL_a%jwKr#V}x)2A4F&1VeJPolLfkQyZJh0y`Lu`~Bhlcx$M$ z=SZKxx=GEwG0DTj3pun)@RZ`o>%3y*Wo_nxc$^%0v7`A{e@4fHF(IGs^9A{PML~++ z=G%GT3#eE+{jM+W~O4R-Q)0X`|wcyyfZA=iBw65B@8A@>P^*9IG%!b zkZK@`i(iRbiiDl1CAW)=snmBBp?;MDvV&woc}E&!LRu>6^b<@8Z1bX{k^={rn6jfx z>pFf7jVvVzO`t7%6weRC@3DirU_*?Oc*f9R8U(^tXu$)pd*`nsJx9{?d)H-KUpIAV zNMLXZ9Pt|97oX_S*4+$eRf{#ZFkuc^R-FtE_Y@1T|= zwZefAd#NSz_dyFWDUh}8GG$5#pq=%fCo`Xb1yB|4^V04H!s9nqsScn5-5&%h%syZQoF*|z4bb{xhOqYX;u zxD)7qgp^LX-1bMy>=v@k8*9QAu!+GWUvWoVqMyVi!QnW6J#=y%N}(Eb6X;VpB!pGa z3nA39tpA8Aq1-4ssJ$mEOr9T6^qBkw#X1TSj@O(qrA8)x1u`f zDWPM%5Z2T(o_?c+{4W(xdv|?w;bMk8M`;o&Ki;%qbCUpj{xM_NDuBd|kr=_n6SQ#q*u-rf^n{pCvZM;GAnk z9)GN6=W$ApPT<2Mjj;LeHD4?kttN_HZ%o#t3lOfG=dg#ywfl(F!EIr8xa+Lh7_r5K zK&ok`tLQ)zr*(p+c_nVz&C!J{^@~OW3^L~)9!A57=G7dxYcA+KLiHud@43OucH5?B zO)sr`(N;0j47oApd<9(fF@>yDtL*UMcAXY$mnnxzE)$Awj{)Oq@{o>tIl=`05~YA9=BjuRp_c%&@v<{ zr?#o4_d{Q3X}pda@kqv60%NJ=WA?A}zv;KfaMbwN6MA{rAab$Fr@ZzB9ixqaG;OE= zdGLRyi6Y;CCjRzL?Z+Kg3>Nd&&fUE#$EmP+tOJ=MvLXNcnX#)`GrcX+om4&JuzwW1 zNK|~E-V3kpPP9SClj@ta8to^)3@tlidvrC)JJ1fQe2+S$D7Do$0&EhgK}z8?S>+<{ zGFly1qx)=mai%m%zihm*dopFA#^J9*6aSQWi);DTEf>NsVmR0(s_mW3wtL<#q;$V; zKGbaL2_TM9#svfT!tTl7_=I-%BCf`&Q>vHNFs$xM>11obyfYaViF|yK1pU9^B@<`) zX4>e!4~Z5#HOc0h99D&z`zNKmS$5TwV=G$W83ErArSCgWuvqT`Wd~@Z08^ zq%I&rKK7NWfYIMEScZ-pNPUI)Y@VO$*uEC?t9wihju)D8Q~47kg9>1$69SJI;FnD0 zNVOwumLQ4s^XdrjJBNRdNH0RCp=&ck;QUWdF_l$oU@pzk&PnaZg2Cs~M~UCU$Gd?Q z10VB_*;M_E-Oz=f56=4={L6}5TF@>a2GBjz71IH>i{`}P$%Cd}S>9Ac5BfEF;Q4lL zn7}E-(sRKm6EcL0LOrAN^VfA&^M9AX_`bgC#rCi> znY5S3@5#l_`HZyYk7aq`IziGBnNUi%#3mS%lppA4tNm1E(8&_HUfGn}P@nfJnLyI( z)*yseb(0jY0)w{TM-&uWIV&9w5x%WgR+ZwxD|TBNLYN=L4?)vd4Vx-@CYFzpD`3D3 zwS@sR(W=1eiQ+^(X;ep(lpnWd3!hRT#_~yk|N>9V5*2ktv3Qnotc%%ke zXASGbg6u`sOG!=gs^)^oA0Vu!9%V{{Oej}P^G8Qq8KjfyWV)iR^e6@r7FKgOHnm&p zp`Hdlr5+OrzrbLJ^O;mG!z!*pWS7Vkyuy_ecq|47m7Vn1qJx{o0E$FwNm_WCaUv^G z{ONXyv#o3>V%jZnM$&`fC3bYt4&h#XrDWQ&hpAes%SsJN+DFcYuem*TXMozO#y?pS zAET*@!rhpG>eXFRsARJ2L+mn&^Fv6i7GcN%C2(~bCIg=A@TQm42m3@a*(3sw*d3>E zuj>I5#y&&w?5Fa1@_&$qFerr#!vmSRrf?gv?aZ+>+uNJ8n^YM1C>j;O77BxJKosos z+geNME${JzVN8=G;P|^D5Btx)Q&Z) z-@I*0S+}9g$Bc*Ml}W$#;Jhp>^3^z1e^vC32S;8_8(-dQvtD6wF3 z@-Pf;)ljy1=FMkd0}TF*jTl@u*%^_sNAwA`JzBaeOisT-JP3nZhozk+sJ!UTyyT4n z!J19q?caEu-_Q~N;z4K7tTB74E?;aYg9Rd40b)$`=lvGl5Pn==iydn4shgU!)a;L` zUN}eJI_*Aa8eHnpWuoN1GN1$L_+oh!#(KFtzu#AfE||!+)vG634_bnXgwyW3`wq%Y zdrTwk(m;uRGdjOUvn%+(Shfynd*ci}ntVtf2Hl8q(?jUI z48c@nLd_x#iKPke^49Y8QE3c!OD}=;FwK4M0Bh8W( zM2~`B@Gl-$hC_BN+zcgapOTT6exAD@x3nR4$*I{L8D?U_1JM-=&%&y}MX(Nj>2-YG$D`dr71}!H(GRTsW@{s%{i}7iyN{Z5Dz^^$UT`96;H+)HGJ_n@nR!nW_uengJ)S zU~OkGM$@8n+)?5M$v60Bs_Q6QK3V8EK|JQ z``GgEY5Pn(Tlu_{S?93WDx-BR*WsJ@LU_Z%Uy)u^#CSt5U8pSt{6Q9;Tq@Z zCB>>&%?(e?yVr=_ke>V2>1!4aB21*agJ$miw(*E#R?aaR>)Ie77Ls~*pRC9~&sbMc zmrRT1+jZgbd>o{tN)F^5-uozaMSvS)NY}I^5Lte|M8FQ@IDrv&V$yjI!&F{22C93z z8D&a&(TWSZLa;!Ae>3;=HEg*cFh?h&g(mqQxsv~wE-1n)4PNJ4I>M_ihu7p-US}(%n^_O38!KP-RPlCUF7!k&lxvgXoEL@ zHReGzAxsz`CoML!jkO>S{y5U1kN@Bzh3n3cAPKUvHAx0f%!izbO-chV}B2p_dT_J-;gtXu2iuwYE#q5yEbRm=H8 zxtYU(m(txIpzZI1?%lk*ba^%knqb>?vSwxO&7QBFclw>|zJKYwIX-$r^JIP#q?#b2 zyy??ErFMi>*rT}0yJP<+3rMQCX_F0%#~RWy+V(h${+mHP`b7&ep$LIEv7=K6v|T9| zB119f%4`Bjz_51i-9J1CU}KQWmQz_=?%1n zKjr)O^I5?|D^j$dxk+^H)9d-neIdq96~cIY^jM-az{)HvxpesbCDq5eojY3k)(+ne zE})-6+^;+*s)8{vW-|(UxcW3Iva3-^9!n~& z_BWv4&F?AsH8QXU`sbO+zuvgLC3X`EyxJbIv}ukgESD7_U~JM>;8Dr_`d+Q|HwRAt}D7Vm^gclpENueyn;0R7aqMIBGpjl*83b9 zDnC%*GX)snTWMdK$caEq{u-dQv&wjXAE-T~STR7yi%`k-Sd?vx7W)bVLum&^5|8n1 z(0-Xhf}|Jco^rP-;;RE-|H!6`_p{ZI{gl~|e^24U<#T6rh-I?ki9iq_hU&Z;?9JkC z9#cU4F6!Q3s^D|<;d_FZiIU8`1T2X~eUg3uh~3nyWYnir^Eyc`hcq5n8Yd{?RbEHz zV|V~;kn_G}>BAPpDzuW~56l`r#gWJh{MQrJ%nT`chEFvX^BFQMMj1y}VtvXw`)bh?o6LKg^b2EpS27P(AdL;tozdazsnAo*0{mtd{xX1GfNC#5G| zPZ3t1cFBrN85G~_Zlax`%GtpCwQ|5~kD;_QQ$;(b|Jnh0IM zL^rX06BY!TqPRct{uW=%<0Nl_m^J3L${Q93k1unhEZx+#bCE)M;Bk^SNcIQru#@~v zMKxutI>>44vZr9&W!fxdr`uoTRpoWac$LTC*u3 zx_-nr9+S;{o&K!HmZ9l3_Du0Bm#4CC6YB`q0hHW+qK)i0sY&-64 zYxFuJsTIefPx%+}nMl@*3WjGn!b>3tO z><~6JeG(&>?xQ5R=fKq-w2KH4ria0uNJ@_oL!`sGfho>OMCq?R#R(ZQ!8;GPWXY^@ z3uWI0cg&l*n?PG<&|dRmz^u*}jWL-v+fzz^Oas1%F210c*rkt?998~Vq#@x_$BZ!T*9qq zrUwh5qKL?{-L_ZC-k@p5hRcrM0vK|X8oMH?xlkm9g;5?_SS|Qp*?bhuBaVs6&{|df zc*#JksO5VssoK1K>WARJIwjK(rQE9ROHf0XHM5o^yu$0;xCFx9u63($Br&fx!46(C z-%8T0GyMklYR6gG|cy zw+k=Hj|Yyb%69#vBIajiY#v**9Rs8gf zUI6Pjs~)aFd1A*EL3+1b4G^`#h)+i5J>TAX&cNx3_MC|;(zD3QQ{ z0scT83znR@Q%MhhlkQEJ4$4Q_*49{4+pIDEw^N#t$c#HFk@jfEGsoJ4@rLx{?SL4wY2glpYZ`Ih!+)W*E#}i*&mk-pc{31 z44RI1T;g_!BOxi?0s<}+tqCr|g`r=U*Lk561U$ZKu&_90=8tiTVPtr9dicA>hgK1h z@Ditwk^GLfYtNd3K+J!+!y48Zcz$Xs+^F4XCPUK^5 zR4#OMXxGzIv0ePr3?IaT>+89}*5xo0i~J>DOMEd9_?H)vkci zp@cXEeOupBe9n18Y3+&`DyCb(+bgwYPuWsiPJU@4ed#I-ewcz;GEJUL?}=9Urgrnu(gIodZ{486edd4QJ}+v3;7Qg&UZM-N zY|E#Y4R~5&C6g6}=D|GO4-}LjMW`(eNvay;fjeTaJYXEu)4*K-!+}IC>c&=Bju;3b zo0p}K(qOw=pfPl#6+a9Ph48FJAs8z1M~6sx4FBaKS`|mwtK$J2Jat|2Val(Q^t+Ag zFKm}{s}gXoeL>#D6&T_@KP(xrum+Fjo^b?$2m&Z2TjictQa@%mL2O4`d=is=T+tdo z)UG~T{qE~6-iR2VLnGrTKAN@92(_IflXIMNZ1Pvs`Tu}W`MhnKx2=P%ZD0i`3pZMW z($|Fg|3&ssuJYshx^5qntg;?E5f(4%qQ}|Z4Rd=LYF}Y-*P^>>i2=X#Qhh6qm z!dzNNN3JfI^V5Cu7XY4oz$31Q3c2CBU(Xkpk*H+Hb_~!su_Nky-Y`2#9Q16Qn0FFG zkMgWisv!slt=(W716|c3LyD>V<|A<9ID@(-nn;rLd)K>T>j`Yf`U`9DvGABaOt)v=PDtMiQdsC3j7_uLLl>G?$!_isEZWHB-A3a;P73 zDwx8!a!` zM?%(w`Nr8S7gRM<5tsBhTp1{Z&sYRpD|i#Vi(E7W-ltsA=4!F3h>?u3@nM>GtdC}C z{!!%YGat))F(UYqNG)=S$)YPwrbtHTF_!8)epo!r&(>??^N zMkBN59SKp~C^_8EGG_Z7I=GC^2NJX#IFu#KWP>&Wn62@m@_7}ic-&QCUwA|o^L%2|ZMz8UaYlF9p- z{jO3CHX~&FF`r*tN~=Ay(<9ha7lh4>{Rvz&heINTNKnOMOwDd_U2-4X1{q0HovHZ{d@w1^t&lOvIPE;>HE!v_#q0~TiuHy~@MdHK<^ z=}J5;|LQmy*rTR{AvRQPNGI3#jmTw1<6`Xd*vvq!IeLZrjQ8SNR}F5@C`a{qh>RY( zOV8Yv5zBt0)d!DHOIUdroMa;=P75R8$LL7=sH0{aPQ;Il7h_xfL%oo{c%NVdv>afk z>KoTDtj7V}^34Epn-?J^(G$3yEhRjza6ZBBx$TqxcDw|68y~&D!}^FdJQIuox6Uz3 zXsC|Mol)>;e}XGWPAm#1X`Fnv#s*EtwW+SsdLW$o8rQO_S5f>=4cB_g$YST}aSp%q zQw|UK;pX9Bb#m-gTSY)uGR~kCNn=jbCmaC~T*|eHJ_zMvinhKk zQ5$O+J9V-{VXr8q>^Uu~(puZ7`(~n(_?SkD`RHP5=^*t3Sgy?CJusHPKLxxRlo{V= z2_!wkO3N6ZV-1kuzP!NZ3{cjv-7($Hz^S$K{N zl)KLTRaIHL=nc$be@Qc-&tXXO@Req8SX-1BcL~iJvRT6}hZ8e*KRHOU#w8EUqQ&Rn zShlY36e)U>Kz1^|uVml2NCIgI*PdN|-=#X<;(`fu*QE-j$3?eJ z=q;K(vNE3!7o}A-!A&qzqCtiC9fj)tFSZ!MqZ`_k4BAt-RiC<3%sbnEf6ea=4A_>csFFP!2ijl5UlcNrs=WUB_VKM1!Ce-Kl9qmi2D zo}x~ZGbt{gduGTT;r)si%E`m>=N9=H3zZd3nvHPde4DF#KWMnTD{Y1ybR(IQL(;# zq`n`%V;?ES$Ye0#MGBDV@Al7j01_zdnzJ2;)$;0MZ5XcmGGnbOX7~S~D;VIt)RPny zyuNyR?kw0*ssZQf(qVwxu_N@=ZdwT2uvWtot)U#{79)4?mt0i&AymmQt>^xch~0`ZSsFqOrH+jSwTJDkdEXt61^P?=Vhgchwmt) z7p#@)w|X&sa!~G=-}55)|0`a?W5gBeS3NZ;&w@MYmH73$%YfRT+9jDLJh2ujPiHC~ zRUr^BXO}BuVcOo^L6RH zpo#pENe(2O=`?wAwDZg^1V4YWiIYTP%q6B1%Bat|Hie#64)JkvhlR;GdnX6QVFJ(q z_9+bo@UHwl-tGSB3re80edDvurs`YpNkeI`iSy}Pn_M`-&@#AN$J$fW8!+>In6D(i zE%Kaf9Mr9H)?nJ<&!dwZ>C_OPOTqD=@Z)xuSA9^TsArURzQxePnL$)S)i|bJOPxP{ zjf!1vGl895f;r(fOcoTp;;zryfGp;P^LA?ETILUOA3cH6}^XJSB zK?P6uO$o_r1tNyuvKsk|c4)WxFW~%2@{bgOhct3+kP4Kv5gRB9UElt>*I!^YmimXo z$rawec#5?keSe~Pv^X4^HHD=jxZwe7GN(x(#yCTp`Y`*`78I(pZH61x&daac9ICUU zkFPXZ*Gik*i{fa=70BaagjB*NB2R`)^YCq``M|!*;cL~vYy?(RP4*SXzGMc() zt)t78)No1HJ{yXm$KS`+F?WFHtvxfBv(xLpVv`XnGR+}I#Fovz+y0*216xB})}7CUI?dS(klXGwaQ*B9}ES1#Ha&(>Ugo`S%4Vvl>0>nL*1d3Q~d!1>gokSGXc@r(jV;IR=N z`5TXud;4>byX&A+-21it^qHu-pJ+pDNgQM&0b@{WsLGZ1vAorKtQI2#6pm!yGEp8g z&J$#j*B43EhHV+#M)^KW*WF4KnF#&%?)iniJ#6+$7E~ z3#)W(-c|kH;-ZG+=T;Y7vWV-lkUni{X(L5LNy$XoY=K+LRe=%8 zF4?yYF3^{g2j?Mn>aw}b2Vg6wiEURi%%}Mm<`m2xpD_KG)2Lj5*jX%+kU8Z3UB3C? zPVLh7zJiDl86-#0(-jh0a?=O@MuI%FlY{BFQz_uQrN9uj7As6oN5SCv@UaXH7Y2b3 z?zgXG-E})As1QZo#n;hQ=YQS&<_@sF@I>u&JhB&BhN2(rlt$A zb>Wj#LI)OF_QfjM$TGE0O0!f|>dK}2aZjN&tDETwhwz!4moykd8(bIUo?~XUfN51= zjy}9fi4l6a5J0CS$50XPqKQ~=c_8Ln*C-V@QI4@#i{j$M14PE++nH_>Mh-P0xn2Od zvRfR{{Q>0KzTDogPV)`8x`i+P>Vr;o3v;hx)jsW38g8J?yqL?8Qun3whou}RIueS| zrh$Nhm3&&SLHO{Sa3E`6p-;kDT75gzJN#nR)+{)by=WxJjT?BCNrBqXblm882LZLZ zLap>3O%!BQMpC=rD!m0x4j5TMJa8~csS^r4^fR}1C1sdzC^dr|4H$0fUhkV%z@(~zR6n(AL_MNh9hQy zO%_{gv)~`S?b@zcV2iKdB)HU^&P2NDrPZA{{Ti*|ahz|&!oF|6eTUVz!5!faXJMVl z0vcg6`{beM9LW_$>Jj)b=Ts+8PMm>RZGzKxQ10+K7<5VI?5qSPjj01_7*EVmXC1Aj zWzO+u?%9^ShBUxB0^_)$HYoC(Qi}d=!(5BZ&zvA0z`fXoj~P1m=_S3O`7ma&gBoPb zEKS=aHcwlrgDapVmPNCkjmw)9bG39G7m?R6s{PiVb<+j_s@FN@3u1bN9=MhsMra8h zHlqv7M(O=5V7&g$VBg1HEsYqhyonjgzON>-3pltlcBZXD7J1H1*te~ny zR!Pn&utxaWp124;`c^3@!e|=3fvI*k~EPZS1cgd*%2|XW37+Q^%Iqc2ATG13Q(mX^G$pm+%1Fx zO!eCZVSIF8f0Lze-Be0FK`f7Wm2?h!A*A2;eb`n|6Z`wYSBAEM<`Fut1zaf{(pu$Q zm6h8vGn1XODKDr?b|(jY!-hR!?HRy!rCMEsMk>RaGe+SHEco8J_&&G=UwpiqAhUU~ zqvQ!CKA?4i6y>ma#zxyg!{9Z-O7S2_Kn^NK-l6V32_ATAd6%CpvqXHRQABZ!!HYxn z-+S5#0rV_g6{@MGDDvAj>Mf|I$GqmjGOS_6oBpW=v7Gf7-g-)Q3*O>wB%@&Zv7|&i z2Cc2)5Qqeb3t!zt2`GgBV}{0K_`jFEe_vN$krO{3>KzlnW(o=$*$ZK5`O@9ME^>ON zNA1zeTUCmJMBaTXi}m&)5pwUUAPCQZYfGm_p1D-@;=qbKF4jb5ISm3(yPp$3J?N9- zpednn~KcuFLlyZtTgAZlVv%lwFK^B{xnhQ?a zr-PpeiDN`w$$~1}u=?@BPW`#VDKZl>YjxF-5GT~}Ji{(o$Vs+RK>nubFz(#>!&%#@ zN@t0GB2HSpPtRffHSxseI7BG#B$l0K`<^3~TxvTIF44OVY*v5j*B#t!7|jl$eu?K( z3N(*jGx$qHw_4qRwx=G97X_$7%&{<{%2Dm#u8?OW-yY9<#hDVg+2U86w7WL?{&Pv{ zV_-4@NkXo7-d(CY3K41;2QtZwgozv~lbx7PttQu}v(7Hj=;Zm+%vmImv$WLG=H!5@ z_(DQeH6!P!@*Lyv(3)4E+=y>g*o$+^xmq6zO}bKyyIsWMP~x$>8PmXC`{$=I#BrOI zUb#!(b;_ZEFVXWo%Diozn=_sD}hydT)NHFCYLm)Q+!{Qz!nuwIQs!JJ^esov*R?u%{r|>Uy4s zpObqSc`;I(%moECnbjx!CBWfg2U_ZAuH?d08TKX)UU(Sv5mw>|*Eyie70H=L#8o?c zjz{w|l^`YIIvi1ZMe%twxUh3tNY!O$t|%?x!{8F%rRS=9em#O8>PJ2ReM}ff$TE1# zo!0vnvANv;InhiQZP;7ZJm9+GngjYe{-oW3Vc)ZIcpf$W1^z8~TArK22&~q5Xj{O& z(}lQN3G$T%VDHL$1s;piQ%DT9c*QdHD}U&r9y%LxtWLghU{2L)Z)@8ZzW*l+fHhV+ z9%!;q({>ybd2?B&FUz-pxU!Wyhd-UzP|R&~22AI1wP_^Eg*vUN-8klV?%QC%6L1zC zdb#`MrCJ$N+{sh9zs`<&ppDOkb5Ev^0k2_=f6czG5Tm#ex`TAf!yn@ENhO-cJCcAM zp3>+azB;DRm|G2Rc>taFo z8zSm%cIR83=yKL_#6N*LenFiM}hjiB}O1ge_&?LVI_Io5J_zB6r;tp}q8v2LcP_%*PL^nD%&2wAA*cl1DaEX$A*Cy3aa zpICNk6|0d9F0CfkK*xR+-rZ8mkc6#2s0bBVE#B?wb*~X3t{UG?t5gd3M?CPr@zY^j zX5-A4N)p`6~s0*}ed4GHo3qko{xi>DcO6cMDmt03 zdP2!nFO;{q?D%AdDnxEKTilM>yxUovg^15wpFj7$@ewA=TF-jdtyXfJ?!*r39{*K_ z0#swgP7QwtEK>$!Li;48Ad+bL@L8_TS1oR?^WfBc=S{ys2)8?I(&ezu0POW4ui!RY zAOS-Pw1FpFK^hVt@>Jp83hvp8G^9R6zj!V+%HBZzL<_!a(A^w%EkRBxPkygNv9Y8m z#d1{3@>>g(d?ec2&}tw4TYpqS#Krs#rk#J#lC{1Xr#MCNF1NfqoJu0IJE8zgeG3^Q zu&dR0k*bcRGH7=304}8b8@G~bC1p~lkp-?IH`*?h3L~(N%ogb1+T&0v#sjD3#pg`T z;F4#LIjFKqs+?QiN?i@#R9GCRMcc?m1ChK!u|ftj>Y(A}X)h{^nrH99xvh&_Pqw>W zd3NHF{?{Ph^Do%kMxN0P$qc2Tg>q3VpAv<~TrboDLmzeti~5@nyyRxZNBV@a)#5vd z@R~caP>KxW1nhmo$50q;k*iGJo(Rw1^YfZVz%KOYH=N4{F>*K#obQH@q^>RZ8f7$8gUpOqhfXJdQKFP=u85gjp@;v=M5 z5O8+42BxLe?W5Ds*KeFTZLSm3;0Kq6Gmxkni=d9k?P(WPCT_R7ECU*yI~5rj{g?tb zX_~U-x1lwVei5yq=~Sdf*DhH-E>xje;-UP#!7hvS?PpELVQEo8d{f`91S>PCmqW4w zbv7Uv2WFAaxpJC4NT+L9=UA--1&|vS{ZSvn9-!Q;%#@8X9Ye$yC7Z88HR4hJH-XW^ zX*;jw*$tjc=L1Ay(l86K+?`#QxbUDQFhd?XCC;y1oTZe4dZ1Go%+(i%w&6vnmVeqZ zJ5o@U@0+HlxXIwgc1euJ)Q(jyqu57ZKx?dTk~xz+Ly$`QDL~cNJJCeq+;T$MSk{0g zXojf9nezp=@+0t1k*^)Qa^n&RJZLGm?x*)ZFoK8cjr7y*tW=Y*3 z^#@l^#jD+6GmMl;9ln#M$t*N2@A29@9~H`UV%*fe=E?vjEgv~U#%9P32~^3T9Yl&l zfpHnjf1aaN{wK6h1-qzF&Ve}XQLs*hBHOeIFb4P*)WKyrXNI21J8DkSsPzpax_i5N z9!miZ!T&_Q_SyF^g`q)z^HOpGzBu=xWX{osQP zLidgu`Z<#Ou~Beu2c_VLE!eiC^~&Hak{bxApnol7^6L6Dk3v~yG!<%A+pwVjOx3N8 z^tBWIg{<%~7Og*`&A8_e2I>#C#!u*Smk%Q3&34?EP(tb!q_8SvUcH|hkIAFyE@HttXaf<+1QHZ_kMr+ z6bk?WWtAP_Iu@Ct0XH{1ut(nxh8`Au-dLC5Rt2Gj&3dO8#wEOHhZRkX6SHY`iOQy; z>SuK3^X@FA{jP5@{(A4Z@wH!nf(Z2ul)r5FWl2swcHrC!#Gx{GN81EbMU)HC_#D0> z{69R15l4{!jYlgU6Z`~7JnzaH@i{99MEf)4D?{m5W;R$OP#Mi`_o2?s0TJ0HA!-@J zOK&m37P+;kR~K@5A%gG>(62LNrWE>y=8=kvvC=kEjCn4S2e?UW#9kV9tS!S|ZdlMe zo06%eH}~=5*jn!~mE|56<*J^Vlzp*m54ejlR#j26f7aJwb*3X}u^#sbfXH66bB?;3)+b8SN zwoSARiZM|tC)covzHvPc#y!ks^)w3@Cu4Db(x!*r4NV)UK|RmbsJ-`3#r(lq##Lr- zVlEyZe^To;x6KGUe3NA!$c=s#FeHio0w`g zL2fasRa*^b>ln12fUfw0gVM!h%t}tCu1A?J{D6rTc4IIv4Wi^OnMCp5Z>T(lh%(;ur!%t5YUdRh-*iTvP5V1o>D>Hp z2QmE72IA+|F3O|~e|}4R+MTH_j~99+Gn*OW=4h66sH)1Z>HlF>Zt?ArF6E)W8A(x=ML%Q1MH0izy_dfUt8F{Hv#g6a^!lbaYjXQ2X1-WvtXZaC z<=2I1JpFl@7^r>u+0#D}7lR!UR00&t(0rVOnBJ6^{`hkuq42TB5$6WSLTGtcu`bej zTv01Fo0bQ(zB#ptOiu56YM(SJj{R=l0a}t47?n9sOPo}KeRMd!b6&snN#%Vo@p`NRwCO0DpIK1c)bk7h{sI_2N044yZh2i^Kgt|Ss)+B9Dz_2!`zVfb8G(z;u+ ztD9Ooq8C7A+Wpo;kvg!aa&&8|mrgk*r|~@LJcn)KOY!8MtqJ@bTh%DXC^hhUdKpg* zt{w*T@uU5g-_F~!?p!NWrxJZkYVt^r35p!l6$*b_NfLXWUO!*{ro#6%a`@7?+w1;{ z`ZzD@9_>D^uEZ~mbX>LpPr;`Kw?>2mjnz{~dGQN|!EK@Xp|G9op{Ll@OAQ0258?qG zgCpL{@)VNKMWFwBS0y8GQomf2VCm9{@l!yvzn+zJZ%zr>-V8tZ9X>zL4IQNY>v1Nr z;v|1biE)-c$@s_wSY<|46;^hH&$o2B33j2(d_1>_)}PD$$_pMET+PdSTGLG9O!n?^ zRk~$IHNF2p85j$i=rTCdV}_wTaoFiV zkF>Rwq0EcydY$Q7Cb>mn$J%j$m>M||Hq26I>JNxl-kR5irisCQCj<_g>PgF1z^bP} zkQw<&{Ee_Ij@9^|jCQf<+8@WQ2F;L#EejFJ;x2R{xqTz0&}##1Q=?FY83R8g;6pkg z1aQPZJ+(m|G|W0!dezy{u_;9^^FEk)gg7k<)coLyMAe)_$?Ed5tGqV0YE>YlaW zBV`Y6dQOTjEIF~ixY7sNLS3QWF!j!u=MMQ$$Ss>c{IZwaOzBpxh^_wm(qoh(J$*#+ z8aEC_#Z;XJf!9V8qaS)s8K_Ek8F<-%Nxl&2m&T!>^XK7vC(1p=Y_yX<%?-6A?@0Ta z(xtfogiZe1gG%`eHlt@IX7#LA7N7R&7fLNV7hif;qx zYE*ObP1U2dvr-}>W1#yJLh}==0Z1x3_iK*SLa)JRa^lpYeW0Dm;>@{b7mZma*#*;m z@==E-ZY{>i=C%UKXE0oS|GA!4+WmiV^-jT=b#2t{6Wg|J+a0?*PDdTvwmVkGdSctQ zZQHiB^X*-4?Z5u2bvBRJtTD$u?rRLZauZRCP=lDA;;0Y&#`ZNeQ^8vLVJj=pO>GTa z2UBFHf=S1LE>Rg&Ob}#Du+pW( z`g1q&UhN>G7d-16x&&YNB;K`cC^M_+euaw#8-dKtkX2qa_>%GFwL3+u%}np-*kHlQ zLVW6bsN5Q^SI_x6LqE{-e|yZsK>3IjT}Ml!@pb9|vD}R*^>bN3y(LXq@^^o|w)59A z9I>M`7wm{YXPK;VBk1Ho^eE!5#=v~F_S#oh8~(HkkF-5u*zu9cW(8aAVGoY5kQ1j- z?cuZL$Sl79ynx@N4rqWm1$48|EIdn;RWifXk>vNnW;AXVOyp4@WtH4;kP?TF_mGHa zTGA?|<8O-U0k#4o-20^pPI!;&?|qMZ0Z!jar|HX@X-V)Y4lPD8D(Fn;6zA%&3w#h( zbT@!TafA>uuCa&y)h|wbx{PKN3ax!-{+}CksdxU+Sk3(wnF${Rc_AtL0BjrmUX^uv z=lF+>QbcUI>1o3VDC&fUuZD`p*4zxt2fA@VTJEHqc;!bS?}gD+1$*fu?r5mir=L5rvefl5$r^=5|WN$Ikr?R@YvqYe{F(vGuZhQ@SFCioAWiCG6+;zBZJcAC--~&E(H1 z%-Xrlqxx=mzcyt~5lW0j>%A^K4)AJKPda5DMSMTj34&&vD)+PAz|e@-l)J#L6p|3c zz?w}}NaZ}J%n!fb3*MWKUKVQO#t;C;nn_O*7hSxqueQ8hzFb*Bxr=-NFLeTl8b`x5 z1}4_;Ei6wS?bE*s=NG|j;T6y z*AxNE`D2>L7;FFRe>G&kd`2yMoPHAjQy$VEiVVcNJ?+0q2tXzWu?x|A?7QT7GoHNUaeNMCtY+gg4Ye{;@&jKM9;1^jn1mp!8K1xu=%x$~aE`BZIMTSt(rmd3jEh_B!Nj``f4xvapd1b|xHs$dXkSboY z)0XTcETy6}^^V<0(s*#(SD2Dc^-UQ0n^^Xq&buu_pf#=qh)v-L>u+A$DFjOmf6S$` z%QS+QOb8)h6|bcS5K#+LK&kAET?_6y>w-yVWckz$J2;{0PY;<62Tn)y*?^c(DAF%T zuh$CdEBW;4jyUNw`wZ?Hr?HUElWlP2HSt_%V(yzj)3;$^GeIONHFTg%uLT+COl*&f zX8+9)(C<8Lb}R#oiwQKx_z-Z=Q)xJ=YCBKMxl(|Mj7X%ejk?KQ(e7bSZcbx-B$+}Y zYX8e8Dleyvb#^Jvr+i_Pj%UFW`**KD8PQr&zv|GvUjrRvRiCEqYSL(BLZ7vEvGY!c zczkqxB-UhBfhVVVmK31NM`QiV5rL+7)WL;7uorkh_O(j~kd}*{j>xM|xD)tW+yNcb z%ZhSv@mASUarU#mM8E*rRg(FaVc%~~QtGgxYX{LE4W;HidDD~uYJa0C(BWipxdJH- z5oc$FQlSzzEs)Wv%g((olzGhMJ%jUnX6uQ;j-@yzA;+H`JYhrq3J~0m-}KF@APB@! zH`64obkr~su~G|l0#R~Hs14rI^QL@CG~cy7C1Gczelh%%w436{vnmLtZPA+vPHJ!Bl*iYzn9R)ZRpc>mE2>m z_#~cw)Vk^V$Sh;Q)O2}PK6LF1dOCd{>{_J0GuFhRA!%%TZe}i0ch7zY=H zZV3;h%J>L;fj3U<_yFDxy-K1{aeublN%pX~iq$R9COo7z0613a>#f6^E7qD?kAZ*7scn*G)Rj!EZ1!Uig#?WCv$9xaY$$JPclY;rfhE_N@1 zf_Z2tv4RmKdHn!_xW@)+gu>7_sL0sa`|IMzv>C#>d~`^MNEKK=POOFUVh*g*PaU;= z_l`X@3pwmU+pIAW+)iqncoBw*3Yfbe5m=HAV=5ijw527}u0uKF24wHr4qEgjR?NOkBYz55F_8dN9T08bV? zE*?U%c5NRdX#2X6Ys3R+w-AI>zF8dY0LY)>cN{Y=CO6c^wqCmKN8U$_QpDk z$si+E>kvT@W(+JeLB@4A=Th0a$Sq+RuvIogmgB>RiO)UV7Z0xqV`Sy$89yJ4dsPVi zCK)^ZEkxeu_W!LJdQ3oLs*bVdag5MnQEn-=rtk0ouSmTzbcbC*Yh-ZFXTLg`y`&^3(Hp#R{Kt7bcY@T>nHa$~iEv%)$plu9G4#D?`O~sa$%#fuk`I+(?#z zfVW(ld2(|8_gm+5^SnnCzxth;u?B_)o(^-GA-}BIVt8dRws?`4P!PJ=us>*;l&tS< z%mVgs9rhDPRhdNXDy^S4!xCrfOh}{*XZ;!eQ8_^?-9HK{QW49xOxi#Kyb-{6B6|6{zP$3e#YWos*nZPN5* zQ+Z+~{eWR=;}^y+%)I5hPnwyr>dMmzgh6tvmge)g&P7u@qiLRR*6#o#*N^5~mGQK4 zS~>V`fszsi!vh1QtO(u(Atq6&s`>Sw(WX3>=8!k-Vk@aycE2RRgBz@#1>sca%0QF$ zX>}u#tVIu`D>^#%eWEy+$E@s;B_e;X5vPi#HNcW+K`iBpH|GxtALu6X;eiB?OGOOM z>q6rRPpKu}`vKd6tn}`4esb&E5V9AtjM`KoXUPhmDJJlFLa_u2#`SRBeC1R%V%HCB z^^SFs4O}(}24Y%&ljHSyj9AyG(>VOuei{1oBwE<`UbwPtEISQDicQC{b6e14nUJN; zd=Y*kwwJw$#Wc!aVKR`m>F#DZ+4%c6?cAmG>2{0krI1V%n`xRVH1jm(@X^^uQ8g0Y zui~mTBNCN)yAm5WJa+o5qj)91SB~AP))g0~kGClm_cFc+o0tBk-}K@mV8`eA)L8F` zze6bX6N6jfK%i{@T~wj$Ost*RKQfNhd^EyO-wZiT7YNTD#9W+Ah{JlX!(;{0_vjOl zhR=2^Vo2LHU4bHo9BnF;jmX2wmGrxJ+Jb22RyMfHWta?RUN;%j{-yQ&?Mkcf4?#=s z#qYzFA2Sf+TDb2g!IWS&2;8?B!vDNs4A$}KM8_8m`iR}u&Pac{hi(=_L)4F1QR{Y2 z+I6AxpNZLmgvh7nH}J+45>8(lsvTPgUx~LzLSEkHOF_cy4JLobM%YjW zks78Bp=J~Armp?qf(RGJRM}@oj$Ig_4i>0RFRENCJ#r8NNe*)V+BmwUMMg(Q$B(e# zkeY*Cb7@-x@)wcvdzc9`2oQ2+v7Kls6k|gAbYb(ac5U1{EANVw?bK8>nYkBMlsN;J zH0#QQo4(GO;q#j5Tnv0!ylxz>cdIz34jsI3C+9BI%4MZv)Cr2|k5vtXkR+4W+-hjf zTuW0xN)caarX_%b0_Y-l%l?xvO?3+vZ&5#{nU4WoS@3NFobMF9k*(@9AP$V2Z37+= zTKZRX00EG8%!Wt@AUDpC!S#0f#Ma@90nWXoWMKVT@GYo)XL=RLr0y0IlP%U$1Oi`K z_g1&|j3U2MF(2coLbwRJ=LWh1DAf9Tm5JlAICv4wG%3&*@n$G#ajnr+GQo~M4!w_g zr3|O|`t9X);b0@Z%=5X`-EqE^{tRT5K9sADW6pOtG9Xfwx`XKSLYg^dj+*Y_&#&gn z++$j*y`BqvVs}J1)DDGN*3aXdwnl8<6;w12F~Rm% zaY;(orZX_mBXK`Wn3G-Sj+aE4BBX#q3&l~9{vGej7uH|;V?*AWfRmC%v1$68o5TcG z&j1Wuq^@N4m5RQ?Gh_v^bY|dc4)L;J!j7|8@D!TcafTYXV5B@hjEFAqAGi`bS6fI4=k-x(`Qd)?H3NGX${=}rTfh~kSuJOqE5~OE`*^Se zYQsfoqlPp#aWBPg$?YO+CpZMveyrcPCTYB2jhhT9Tx`;ed$lxPD}%WKKy}0js9b}~ ze*Fhe3ov0u`DmwV3^8MQYjQ&Un`D^2w~|34c`^x0?8l!(#_$jhrOye*JpoL5hImev z@^f`sYkd9zv8X6^<FYGI|$ZfB-y3pjk{#`HNn3#-gey(C&p8cDW% zb)o1GbE;}_Y73W~#{{0_%9qBzS8VsYfOt1g3K#J_M~rMBV!Uos9m;1L(cRz$42Dp>O;bx8tW!_u2tu=jiT58 z%4I?R^8x^7uv4>5vr!GfXKa`aDNLiGR86!eq08zGY&1Myn}SwLPq=EAz*6HfBo5=z zM=z47zCfC0fu9Wxm9xtHZDu=@u<#zvvb@K7X(F;*XIy;|bZKTw>1;qd8>verV{ad@ zc+oYY$B0X*R!uL5&Yf=v^FYK!=HYsH5ZCDA_ll=nj_U)bn^#X@~PpEcJ3)ZbB8o>St<2BVHnw=<=i`FFSeHPpBluRQVy=$B_Td}3V{v&1Qg4N z!yGJNW|QzO7}73%p^Jr2_%!?zGmsbAUMe^2e(@;l@Xz?xAFy zP6CmKUQeu}jJs|Y&#?Hsc)(@}=-l5|53;TH5(S}YgCB4=8h8yl;UqhCwf?Xe2M{VTDzIYECKY};!kj2w zF7ZcwW*v0?6r!36RATzE!c;r@HN4YH=Sq!f&2WMska#IO) zUxis854CUEO#Q#%vz*8B*3z&4fJF+9%_eetq$_@{ZEO?S2FSV4G0d#(!2Dg8S3Y=s zH+tVSa$vutQnQJ4SS1FJ_3-W*C91=>hd~TYP+Bo81~1-Ae>>o0lJIsyfb{Ve(5@XD z(hcwdS2PD^+{qOUeZ)|eDWoKvz}DMk(l6Rx?Y8>j_jg4;IP!(EDji$s{3{;BV3*jO z{60#qQuoMO(9>n;^yCZ=+}_zBOB2y)%?2xI&3Qk6|1@P{8mk3$@p6v%*XUj}9kj#; z!$T}7+}#EPxgXJImYlbAw^6QI7F%LaRVQ}9{jGu zUnJ~#hOACDo4+Ls8Kxux&J(I_*0?&cs5yV(^poH*dY;S?76xg#9ML0hjyhcW7GHP) zT|C&ITKWy%8B_}Q)U?Gq@df}yI{B8qABErL$ob#W_bKCE?>&qK>U_H#@~POOFK{1< zMnQod(i$J>`JjdwrQ1)CZ1kS$ojI>_5(VE8=<-ZznfLs>hi%wfyogu2504B=xq#H6 zKqDF4E(U@iR%zp461O@K9SA2+<{sZIL@{OJ&RdGy82$@y2|?>wN6%o90-%tqPQ2;2MRa@fJgeVhm_p}HNb#;ml4lNuxtrNUe-f}kO$8{4j`6jKsTs(E#{ znuXVY(0VdHAVr!C&&W0kL7M?>&^Q5sj3GI`sUvh2+C11S$krYR@}#adel{mYnVx9p zz-e_R%5{n0SyG?Ywhp@6`$%M*2WL@*B|YUSqE&Kr`Tb8W@>$X)v+>6rzKpx%IPvSO zLg~tV{pACOStw6bDnnVD;5u|Q@xRjpQ-U0SPPdggQp{h#3CKm-x+#;8_t)K(%W7a| zZeN6KZ9Q9QIasmx&q)Vr85u`eqT>CH@ie!7l1LG%rTN=ty+dA7kWF8ty6FBJHV?;$ zviFh#M6?iWtFg`rjj z*cfAj_|fcXGmpS{<5JqW{nmSDr61)N8+N@q`-|TQY}r||^+CyEMPgz{=fvW*O`h~P>5O^odtUYO#9@@e3vyyGQyIM z4scAS={MYOT1&^$?h}gwO>^i9JXWF@ur`}Vx_mX9j=GTN_W1mc@B+W4C>*I{2$fh} zLuuBh;Z-$qM(6Wjt8Ys&)9oRV`)#rgqbshIeW5J)hMx7Q_TZ|4IS0#| zr)6l=SsLILTtsdV<2E)^^)7@xnn<1)>J)`I2r zPJ0-)TlmLRh{WS791s@>CoX|on>n74v!=d@DjHlQzQK`dF3Kzu64ZUuUgFYs@qL0b z0$vMoafvWTT890H?HV@sH*6^2t7v?9dWdCyCRm7s;OMN!3!Itd3)eQO54JXMXY!c~ zN9p%xR?UQ7ih^%g2itjC1M*3UMsz!C!7~Y>IH4W)X3KndL0t=NpBpm-PQzyvk$c!F z=b>Oa`vbgXr>H2k-n}7Fw{U$)p3Q-zg;PsRd+mOzi0Y=R1$J;fGB%Kko3ZPRU4`PdL8EAn;`t}axiLxDl z+t%_5UM3CQu>QmL17EzDjd*zd!xbUfW0xBs{LY4Iw0*?HRCSfq>;zhNitcDzGlGvf zH42M;@2VgvJ>MD26}y%`cV69x5laq$M6ko41rZdPgRe?*st6P&P=xC4%t=w=u~RNb z`%}9H4{dcov@Q>F+iU5{3_SLV<*F@OW`gVV2*Sod?)FAC^jv6`ss_J@XMZ=6oF48V7aUFMa=cUgx;-Tl((&E+kdhF<7|2X7=UWp|P%1>w4CaI| z;Xf^YDNM1QW(Kc*E-lVeFio>kNddP{CN1?`$pd#rg@g?U-_YFXNm zTeLuszLAU6CH+$MAI)Y>hqOb{ufy_;yR|Ez4iB450( z8PIjB*SrI9>t*^lXo5YVXhX|Z6M6isd+moGhn@y8%v_d%f&pRT@xu$PssO>bn`;rk zkdvxhDU*&yqn8hu7!WUP*dVDaKTOjRA^%A5LOp3y(U|;s?#_+OBR+u=N}8XVwDMCo zap4@#&HlL#$qk1vdwxXJss22OdL-<^Dfywd6Rr-SAUHKYT-;{zaP=C4$p!iFnwnLA zRS{!hv+?7xJRbzAoH4W&v>qYbiaINYJROecij^M&+^7g;a_U#)4jDD%KO;*kX_3?I zsSL_T{vJllytsYLz07Bh7yG(>{_A7Fc!w;VNQJ=V^d&aJnCH{@FKwhhs|Ab%l@n{v ziFeZ!8ACJKKaJ6&Jt3#@2d687pH--dyV7*^0hN93ATR#ZD@xc;bmu%vJ%81i2>S|m zVIT#_AV08c*hd8mcM!u^DKCSgM(EQm+rYah<`n0M787Zdso2>oLVY-9NqNF*MIuy| zC%Su9W;0jnt1t&|3vvdnEVo^hrDO?%skU7BYh1L^emMGhAXg}?E7;;PjB@o$rpshd=>OjeW! zi*T}QFHa|h?y6Zf>y4h}&+2Dyf9}K&=J?naoPslnz8<_F*|_@hiVy80X4v8!6j>Ku z(_-Y@y;#~EaLxA862Q0F8BVzRdw>^dO3e?!uE!pKxMK`#Im$ZEg}5bp#V2yXx2UqP zY;s44)JYspg9)7rYRmy>>Z;1i35_TRlw28Ts5p#*3MZ;!!>g?dcK_D!giDpn)nN*j zrRO(p&2}?alc}>CBN#j%yl#u&fTbdX^Xe$E%Dlhs7>2h_Yh`C*+aJtHzx|VKJ;4gk zu>XUQdvg&0R0j7OT=B;-D)y$R7$qYJ@p1dt?5*ITlO~1d-?T|4*KuE+D^@lOOsFt6^0g5gKv5|J^%_b#}5fzWY@Z zepTk@x@n*ykod^=K_1=-8}rGU{y9PVvcsD-2jZ^m91l&*)XL}9k0yL%w9J=^>MfZ0 zO*x(cLxL?Pq^7A>-cCo_V|3Yt<~}i+7RZE`_+TvcyGr`b#tj-!iR|sQQ~Sq>$^zad zZ;Qy6)AIHwxC&rfvn8H7kU##-v>Zn`n>M!6&AYtQA3OQ*ps@dTYFzbsJl&mG5Ks}; zToP6W0lymsF~YDY{1J+Z0RLKMX*4|%5i%Qts|1+Ba0RlH*PkI(zAdN1D609{O9D<$y zJ8lOKZC`|TBz`lHo}TUFd~>_|NI?4r+lO?TAad(PKBsWy#-9RyaCdQ5XO|Q;6j6tz zcaV_H5E4-eXUSlXZd`3tJMrfpr0N?*BwO5{>3jsl%2(!+>E}F^BXn<;{VlU%;?6|D zhUr1orDwIBV9?cPGh=6hF0%AslHB$;<3Ia>>%ZIi>R#Q~!h}o=wbcR0DLsvO%+|fK zEP+HMUYtv@29>Xlhvm;~J)`Yb7l5<3mZ?k)XVAF5ibD@umhEtk!7kJ_W?uEkA0bI(Zmd-th&30FsgwRx$4hK8LfM|;C9 z9*~#5j=x7QA2;w%VxpC+Y-^A2(^dt$e~vdL?0cb*-De{0oZ#svu^cq&XjdwWL_HYS z5lyv&;1dy_Fat&9CdYN94| zeON*K;O7BN>2EIFx@dhSY$UV_tRA{VSAeb>ZwYX*ATwVU?PT(}>--8K0adMU4NlIA zcjrx?+d9uUFLlEh$?@OnXe&-*O-*g>>{YmrY5!`&e_p_)2Ak4oP6-QT`}9b#jfyQ; z8uPgYS>|B|)jf~t_z6DEGI|Z?&uO7mN5YR4mg9?x84=G58hp`6sUE5f7WNiA$t)T6 zrHa9*5tIHNCN*IwaQl>gh{;d9HE|mYCd2&CJ&kBej~tuZegc|!3117lYF0pTPi-qt z4xO!h60~z0;p6LgUf|%ScTv#Bm(55CQ)+_RC9VdR+ky207SeV79!KTB)lK{fVzNv` zm0ISK#|CUF=XxvQaRCmQ;c+TyE)78B1-K@7Ak_D%k@8u&e2zbqXv|YMUR+E zlz+8WTAme@<-J<RpbRnw0>LlL@Z!|zIy8w((ixI<*IwkMP>VQWrrNfchWRaAVl7)> zEs@S|`#z#abjHy1PZ||GsO95q_BZT-KIKHC#1cZsFP56ffs&B z_0m#k1e$4ANa(X`c6AiZzXgf~hTo{!#qMML=} zeQ*`;3(%3DxtHTY`eEQbIDut8K^AX;j#otHsh&En)DFu5yTT@;XM(G1I6M=fw=gaW zft6~jI*BcAIgjU=B69H9LT{zELu&8E@;a$!9sT*#)Ptmp@pUM^PQpck=F7 zV!sb0JX=^=Q?cSo9($LF8j$Q_5PHe1Le1iWpOIUE%Z8 zA^Iv>x&OuM9F=VD?)8 zKzJxH19(uUPYBqyl?KrDmy$}0XB!|Wfm6uCVSQaBdg@yHdOWe zR`L(dgEl&}==M%MFK-`LHf;wVlQD+xsXIEN=ZR6!s`W7EXdlNZaBF-qJ1aUDcwutK z2ua}O#rnRxs|yL@XH3nn!aYCbwtVvR)6KRuwPJfb&j(7MPWT-)Paaa>eh+%7KN(~g zv?v6uml=G~w`p0JGRIG;%o0|QdZZ7xnqzuxq}r2{KtKqmXIF$s0X6tc=d*80S8tPH zlc8ENM^w2t?;*i-Z!cj^23&8-wNAnHUF5yd_pxu|1}pt0{el{cCH4hCG5$h1hM@_f zYd}1@Dui*r%YG5rry6^&lENvg(tQ)*&@qxz)FYJh`+CGAorwzv-K%9qBsp-@KM{r+ zHv?K;Ieat>_}z%~f6wcxzWyDV*J6=|Zp5!bn^037e-S@&>V?Kfh1h3-{Y!9-aRD0% z$>v`P#Nu{4>!1xvHBnEo+VYAR6662%$6$%^h~p^fu*dc)>kN?2X<$b+{68}BO{T_ls~#&O7WcWYkR zfb+EN5R~VUC4Vq{>f!;xwHv>*aKeSNx$B`;=R`(wS=Vb zBzYfmK^Fs|K0)Za6^(u`5>{~1=wEcm+8wf4PKqykkzzMmxX=lyI?UW2E+02NToLw6 z9K63RElKBQBnz9DCNV?yrSb^rnjTclLG|^rSQwLQ=_{;qIYlT6GyWZry?^Zz^{4*) zT2Dfc4l0oQ7c?+e`D-D!;VMh4z#MNSOh|D!F}GfU1_cF;a=wKV+}}GPwMEKYu0!n4 z0k{RrFI7z@FDAqqJ&auzNCEy5wWU9b{KiFJA@gnR_O8ZLE9+XduaHbXe8+|EM*ki( znBMf5P~MBD-n0f(xSKe(G~`yU5>6|9iPZ)x_wpt{_YE}5g6A4!dIm38OVD%>;n#S3 zxolOkP{?o77_1cdGTBkVRK(RJbXs_30SUAfVf&WKcOWbAXtXbW{(V$CJET=K{@J*p z^*9UmdfxdY%W_POox!e)|0kxRX~;$0u(H&fS5GU^<|5TzHU?#h(0EbJ_qE!oSFKiA zRj8&ygh%S40r>dup_29GXcS_~iYq*~QQ@~>2mL}c>)QKuyy{(f9Cv$lyLyX$$f%Te z9&l!9$(qGSpXn%;!bap85}#&Vcn21b7VU{iCFbv|yBke5vma(|ut$ri3?2oNpc_=6 zPdk+iT7uo9Oj4@345JD;&cmpv>@B6us#Lvt*gveprV@%Cl21GBm=c_yB}F-5iQzU1 z1u)Ls*X$eg@K?x|hlzxXh((Lp;Y%?ij=;D(%bD8Z!^y%m9mLumWmR{M==4A_Oj(kw z0A-_tb-TxDSFc71vAEk_TxHRY` zU&jv_s%M#j6RNY?SuD1e?c3Ii`f?L@E;x8rsfPuF7atm zHlq60>Pua`9ohHcN{c!T5p$dA)~1aZitd^KC4zh2IfJLU&qMXu2*rdqV(7(#W3BA> zkH_aKMqb|!+UGx*`wL{6rKPRN7C0_lT4xhrHT>_5({K|ISBG6E0qcHrf(CDFdFEHGZ}9D-CAy>KQGR`r_Y1O&7Sh zyZf-Uwdgs=c7|LDPb=+@tqr7?tssDIfU-7%!pr>8rXEOHZyiHDc16Glc(n;*91rwy z)gGfcb=n#LZoI+0i$HqA!+T&-u`n9-jrc!FqFgVoz2H_#H52Ju;X{~7gQ%nikJ~{$ zL;J=Bfm_tAt%N^w`{eZd!aW;2eue0Ul^j$Ckrv88)|Kr)mt_E?Z$xdN=ayr`X^MDsj_*-$`JY?Z< zR05_YE9XaAexDfr$MMMVZzFz72lR~b#Yrym*G7BUNgAG+Dn92L&C zTe}z=E>6jgXl*RRl8Es+@3>nP6!>g2%19?S_@vhm1>_G0nS~8A`R<>a|0plDU!Inc zd2)fC3*nKdnDGw-i$-hAiK;QI6#2QUX#k|cbDD-H$`m^cUV&&YNvjwV%UxXfmD7B^4UVtqB3PRKnB07^f>gj?&NMqu$00wMl=MueA3FK(LqXn*_7R zixjQxt0~FbFAvO?%$|nKNiV30*91f0FV+pN)Xg#{LpL#4Mo)qZWe@yG+kVH?;CaFy z-mmNDu7SSF=v9{Djg+U?pdA}#A}(%SkPy*aU8$`V-6K4y6+3gEP=V`|lFYTi`hm(5efy6@Wvb3K$v1=(J`^#LPvxj;Gy`R3a{z~n{xLYTfj2C^A5^1S? z_N_0hp=f#!lR}W*;%;y@NU?s5M}zVLOEbliL559`E*!hZ8_?~foNh|Nl#~zMu(Bmb z>2FE7@~=NDBdmHk`fWxlXYtwP*B1fnaWUG>Aw5{e1l9|lm4;;(5k#pc`^)idwu?K5 zB2|xmd9SNG6ofx0Y&bQu^dX*eV;g}JD~7VqZK?WEkMIov?mzb`#-^G33*L3~7^_S` z8nph+0QK|6%mfi)=c{^Olizh^prTJJ?`y=^=GN~YUru=Rjs@A1@Noy|j0n@$Bu5O& zQgo7F`IP{E5Qr^?r8NRtRS;0nDCZieC)5n{&eckP8BB3>aN(M%=n$f8c@W_~BI3sK zACS6mrh%^Od@WTEA3#XZu+4Y_kaX$1c!q@c+Y3s`^ z%f&n=ukeGYB-~C!s9m}+{qotO@$;puEW4|{RnGiD>0Y^`KI&z`af9{^`tR zhB<1c93;qwpSyC8H1JTd2oPlG+W^dJOOfM!Fgp$ukUE^0aj41_s z+qe1YiFg)t%v7&+td%Aw*R42!6~Uq_eTqt}p5d;dClLW{fi9g3CHb%cy1vk^uGmkv zwYrtA*n!HH)ReKt+%U0Dk+sw_THp$xLShlWH>v;=Y%ZaTp^2gNlKcqnm-#bacTGa5 z|GRd-vl2}InH5L*U$2T2+Sp`Ljg5ZEn^+@RH4+Ka6nWhvNQzU-h^U>-z==9J+m%C9 z6TaYuq}HZWW=z2I-C&WIonx;pM&&#Y%C z*E6g{T`40u!j4}Y@h@W}2M|d2B|3QO@jd;N+)CRWmb3`$6gR=jBCFF|UzKsPYm8PO=b{IxbBwN|a##74#tc=^TF z&i$@7=jJHg5W3JVGbdPTYn}k;5_`dZ&yTh!;z9q+ znEe78lewJWmUhU5RN>}}v?m+zqKduA#DI z&kDKPd8z18zgjv;w~llwc91HtWGZn^tyjzEVrS~E7h~67iwlRx(O^#jU#%1OIwda$ zv~1}r`EV&GA@onrZp^!VqZUHTh@K0@ zS=yk)D&4_z21i_!D?|u-A2-)ySI#D3pcdGfWk|l)g>ULurxs5pyepS80IkB_(a`socSL0f z4E?(9JYJD4cef1dt z)fL`}y@<({_muYX;e#@hO;l4?MYt#Of%wX(YBF-u*|NUf^Fj6OT>e?lTz@fBxCc=2 z=Dh5U;Lq5(wP~4PHB%cVd4Kh(@rQ+)UA-8r1^}8}YBoy&$d#+a5sW!MI{ia5QK9on zD^1ES;6D@_?Xc?s_4B%HHQB82B(4!0?-2yKd(1&-y>xBlJq?a&g9Z}P+%UgE7vWL= zNf~nY>l7@ufo^lt0$q6kKHWn~BzXIe7#RuNE)&VJ<}(E`le8k#f#pdU4+6#3=mk(c z(bH_iR?k%b;=DPxo36#VL6F^#vHN_&yWl}9&UAGDY%L#tja~WBe#eCWmlW3f|C7QC zzRWh0=TtzN-3jLSB55{;b=lQYTZ^(YhnoP}ndRPF{`UF=d@k7?&8Lvb?s_NHIWK8E z4+x{iT8H`BA8jH(;i=h{1{dv6_q^hlL(vrkDd9(95)*E6TdqUo$eYfg%Z)4TuSy>p z`ZL=(PPBIb&%dwUy3^#J_#GjEJdyk=S~*yf%rBUA9{ST3u>4Y67prxaY-Hl({p=)l z_G|SBp~qA%R~z$-%t3`!UK+aEqlYu5Gn{=Gw{hjI9}NNRb^hFJO0m6WTQdIYP9#tb zHvXlV=?<1`hCwTP)cx;Jn0en(UB70|t40$>O>Jc*?I=VGoXJ46w}n}>RXiA@7DU=?;Q)@D1? z*!o{Vfvq1{#2V1`-RwG5GT~;o_)|7*?56ZV0?@>k!qsfMSpCMT7T zT3vhzs0&6BQ}}#)(*^6{v(WJ*ki@QaQe2;l{cC*te?(m7`t*lUz5%SBk`{bUW>tgD z&*k=uS;d-e8^XLN^;S;(0fvO}?kJ`jo)HbRZ)8>oQf0AG1vRdJ1u`nEXM&iKlxDR4 zib4wbGGuwbGJa*du)@DyV!Vn#E#9n08A`mAO%x(;s`t3az27RiPhPD$_?qis)Vu9R zZ-b(04{a^!W};s(r&K2W?w4ADH;$s!e0Dx=5dV|76iuJ(LIp|a=!hnI z#mRSNjlC)75caNhaCnW3Z{elO)#y;gyDmu%^7fPI|1 zqN4LX@qLf;cnP9kH?CRw%$|`ML59H4DV;00aUY>R?gvh=3r10yjWfZ(6?aKsqkava z8ZC=qoz%fxpF78%8@X_56_9j}AF*x(C5U_7-@P8&V)YSi&S&dfV5Vm{H$z9C;X=%B zNH+6O{O*(!oyV%%#XdfA3Thkyi22i1HLXm>YjUqSErYRpIX5+DRV@Ap&LPy>s>qJw zwL^U(BryuiEbxq9^?|7Ohz+qdJzFpdT?qCkif9`M2|$3Q{LIHmwgX(N6;mH;C5R+5 znq^U6Yx^}$(`_e|wNV&ly_e*0%>!H|n_-bJSX?6m2_;nva@=AQ+RK3#*mHe1PB#2J z>>^$13L!eIS4!(25i(P**uHpzfeE5p`pXClYqDt6nDal=ekfzx6NqMtF=WZTQ6+RP z+wiU#^W!7D3fy;XV%YIX-CBi-iB9p9R^&u>D8MryPUFCpGvj$F?)3P#rrU0QD_yRY zuCKm8sQ)h;G4)?IA}gW&0|Z3xjZ*%XtS17%B%JhdqjPxQcm7+~Epz zmoh6DYc8{Y>x{Y8E-MNjXJfi0T%IerQ)XNvE;0Z(GMvlKDr}^vyMnY30Ukv&Jsq2i zIz#9ikrAvc>P)?uea-j-jela6{1>JuAYEq8YJyb{$^2$(bkAM|EZ%fGvGU4w;q1=N z{Q&d<(>EQYbWld^2Zd!qF5u0tSD-GPgp`R&t@aBvNgLl)NNs7=ACT zgQwx%KMq62ajSTEoviK*+>1Org9QOjVWi1_KA62~8r`wP>LX6j)$fWhF5M9oI|VfR z%4rUE-p`2kf&@TSH_;IGK-J%=Tz=U7i+m(BtSnwouVC}kT&RFKxiXka*49wOnngmK zr=DN7)Roia;>OJ2A@X;h<_)*B*Q*yh0e`7WlM;kRAbz^68|Tn?FD(|ma=1@FO9Q(! zYe63KH$2l*{lPbwa4{!LQNtrmhDbPq(~^z7_e}f}b+!^8{XXy(6C>?cs&@GT##3vJ z4=9ddNOrOCN_60WsU0F-;$~>bA@fFt(6%x5o+xp!WN1M_=4xAb-(qi>otise`4>9s zjLS#&{@ibQ+;z^VyHWS#EM9m-p48*i)Ey;%^x0F!H|0n;s$e zX4`@7jqpICawujIv{|C4^y@?~vLRiheWjpwO>(OA=uwYk%Z+mUe~X2wQGc*KYqVCb za??snFbC`Ow9hXWnIrFY8>L*!C~yf&rTb~g@TOwfG#3v)7qT+#ZPXMeg7bCI5Hc@f zmMlayIIXcB&#@`Uu;Hf$p7(4=fI=dW6TD`fKcsjMmRIqI7EgaHiv+eXRJ}PI`gAHf>kMW=AK!bM5YXx3W+=nk$V>C3DFoos_)vH0I&{kp4>5 zh4=1;&ZIILV>524*Si;6uwOG@JmFTD|;IheiykvK>ma!F;S zt=i>NwkFpvH~C-hM&R?<019G5^aVltxt<KAW*e1 z8t5x7@A=TU4(YK!2rQ78d4U$dvZXp>dlQX1Q>khrZftOSj!_UTnhvwywG>5DZQ%sA;;Js4h%Y^ z6Lx}ykd#kh4|_C48GR_+Xe<^je?h!u-H6V?4$}oXHQEDIOl|ik2=2TSv1bR8!cg~+ zfBMqOrQ0Lr@#9&3ok$wehmMFUt?-o62?era@c+ZsIdEqdu1z}08{1}gY}pb!uI8Z}NJh00Z|kfW^9r?)v?-bFV%OGGVZB49VU2nzZQ$EK~UE zcKhcTAvC|!ZIb?OXQ94>3s3lOO1Qwq4C*+)`m%Xf(zplKqx-1ya22nztfl(4bt_xe z+|P@Xw1rbhHe1G(xT&&}ufT`dqYErKsMH=CS>ZgP2}q{9L%+>u#5rIUuEnJhDy$x2 zWBK~prLv?POw2RtizS_n(-n^~)V7VV3jcM( zzsIyR4|GNGpHkjH?CGg0?H{)EF!{+C3Mg0M*}k(RNk%ToQ$z1lEylCgIy|qUv|FRx z9C08gn(!3OEUkvwXMw@3cDBtZO$|9ggZei|_ZD_lKG3^rv_;5O#hI1tlWSG5lI5q~ z^xgHz(5TZ8!jf&gECSANrWh?HAd_YiK=hiPWGmZXVkz+||2KY2cAqfG@YMjJl2 zG(QDCUcq?vhgn{cYQ4Yz>#m-cT2X_tcYk^K_@R~eCG(QBohon<5%Z!e_s~hED;zG! zyD7RBMir}y2y`GBab4lLh!Viwd^fzR*w*%E)1zHXP2E*D3E+&bw|9W}#;a)4n)ueQ3GLdA#WL@i^Q73odDYJm$#w?ysY%mB&u6*k%+JyturxU}nr z{LLkPw)^P=*m|*IvbOl;-I0j&}r9q7Z}c0&fV~n(`ot4%rNi;EdoRNjMX1qcd^2qtO~yC-7EvZ3`eek!u?En&v@c2{S1jaxvLyBN$A!Vcb4VGB+&?&+WyZt}4efh*6= zjR(jDgn0#1dVbhim?^-5^VmQzW4FP?53t~e^#qjcO&@?RMCm_5;jQbSstgs}>|b7W zkA7xxu>v_^J85;qfU1s#qfq73xBpu9|KR)oyteP#8WYhG6yA)1FT`RPlgdd->Aqc? zY&V&tbM2Gw^FCv3hOP7c@JF=6CkoMqzYVNH-o)R~^Kw%3Csps-6$uVQiZoO3HCiE$ zxME@=!)vB<7tnnX&D+ersT0_r;P#^=FIu(ul~(t0$EBcL5tWE%yZ53>qa9KvE>-lTLjT1>J4%vD1X+vvE^iJEPaoIILa`!ty|BkhB38nkK}a6i3N`43bqQIK(YV z9Qn47or2vHjYVD4f?mGKVZAmVW{c9lC0$Af^&g~}3Sn7Mmfz;UtkS-@QKgEjvssT_ zmRwUHBV}LS>D@UBGt`j@&SyLNmE^5qTSzfU{Yl6z=$>+JfXs?4?1Tb$Q7jV^OQ<1z zzfx|xOJBYVKcvRRAF(_i=48-Qa^8}ObS{2Y-D&gLt3g3IlnkMnnxSfBR!7r5B55A3 zCCmX7%>3n4B&&WLO;hXM(i!1%V__b)1+{MHuHPdZKi_^s; z0Kng7baev*U1C`eK4Zac;qdC_9Jc0q8Q*qat!mYS4;bFFt>F;xxOvt@4jRnRsHZ>{YTgA;na=s20?j8Q&K7a@fx$C}`SC&D@=8`dEu|<3F9wjfWg8@KlT5LU% zNH6sn&lR6PJvlVOuXA>-)^e|6M}wLnb+ma1JkF_jisCJ%wHS`#K)%wWXMC`73g|yK z8Y~e@MZRletCO335n;9cQz=s{O^HLuj;naw;5 z;*WEUlLwdQ1p5<)*{~Rci#+jPyM=#?V7Tz6JMO|({FfCeG4$!$Y#cT3eLE$i=TUiC zXMbr^1u}Q!3ei?<<_|oy2jDr5&zITb=jruy?X4PSX(;jbeeH$$Zqw=0&dOZ61QON(e5u_NixWZrX5dbiaP=Q1p=ZNQxas)?CT#+}HV~cv9@~SM~rl=e7KkYI+ql6~XKwHh8t|^mMmkpmLCAN&=*bBBRcv z0k!P0toLP|`ZgfK1#u%FY|W$i6}YiuRH>WL0^rCn_Ayo+G$1N|x989bB}#95B!btf zIOb6gWA9!q72BtKX`bd80!q-WoY`oRFg<{U9MQSL9~MHdmv0A$XLs5fj3CF}tYDm5 z+O`c-^ib`vnqcH`VtTeD4XQPGA_;*pVDDt^=dg^QK3yHz_5yqaiSzX*OiQs6YX=&y zr5|wR|6W?Z9v*lpj1hd$;)FrEEfR!aoZ$0-1H)EO`yUny%0)RjDOV1vwwl;hWoFSVshYkeM=ITI zmNFy=8F4k78`fa*JD>(kzcvhM%?tO3DGsx*afir8gXYox4Fdb6@AriE|30+d@~`$^ zJu$Tj7$%J;deZhw7ZjXsx+hW56se@U1%Emi==!kMB?(8=9!@@u)3E<-p|jQH7T z;D=4I_a%ws9*f+{e)}C$x@P~LjbyW8*2_*a`#XIcgBXSrH3if?$9oFW7$6Ep!8Y1 zMudvMF(S;-2xA1(w4@<*Q$5KQx?KNmt&rq#K6^T3y;r3DQOwA153owOx%jl|j66I{ zNb@jUasV0{P)e!+1jv^=-b*G17*Bn)U1rX=JB_5kt<+b>q**8;ckbSeKVy@-!T>$i z1IieEC}FeZ`6ysoej(Z#5@<5=E%1nIz;AA;^&s)5Q`uCRbSzc<)NDmaT35j3v4LFj z!Q!-cG&I8^&A10?EW!;ljT6N2Q%4CV%=3XugobaIfN!U@tP|R!-3&QXnMT3DOCAVy zOl~ehLAS>w#PU-rrG)!ZZumMoUZfyx4}u6r2x2rpm4LUve=f9|x+M z2Nn=+kgQeTb0VU8WUA$#Jy6 zU3UU0P_U%1J37sXVmta_=CPj4h&aX)nFXpe^fK&43Zh-GHW&iY$$$0$q%8 zy$py%{tP;o28H%C^r6w1u6ZdWGIi44jaq}$TO5yAqH2OHiGY?&vJ1{XYeLufO*Op5 zZMC}9&Fxxg!j|oz?(C+XEyyw23EOUKc2a?NmC}XjZaj=8XWgk}jK|AHMmYC8dCDbT z=|Vl9xHzm(t$VsZ+XyJC=;F*?H47d>EcU0^HGZh)uz5Y++9U04rFh@KXFo{qJs6^S z|KcmRIhbQBFbL)is5M#laA46{dUutIZ{IaKtVS2V&RsW!Pn%f@lX5W=jp`Sj^C-Fu z!5(_9+$V_wMaBA2aeg;irHvdQuUHx_MD@Hnf|S(zSk{{(nu!ttrD_q2eFfHt-a&J1 zuhkykA3Tu_;ZYNybT=N7h?~0>(C=>Ih`B}yrk=5Z9^fU>)yNRJouL1@wSU35Cf;Hn zd7mMeTxkl(S@(xi6Gw|c>>o4H+VW?o*#oi!g)bX*=}sQb+|_&vemon0Fk`lHkVE@s zDAJDL+AfLTAO0LPqno*#o@pt3)AjdZl1Z!BZRL!)>fUb46wLqwf!-d^G*l-P>jf(6 z`>T(3RCa8t6rL=LnXA4VWoHkPut)%B1d)130?dSA2hq5ZXlVeb1oyN39=|lBv$+|% zyIZ}TJ&^=asv)MJiS%Yt8N~^I#d8bm1I)&g(LT9w9zlLz)#D%334!Q?PQnU|TlPWxZi6IV`TKbZ91{?;(v(-#j?AU@4FoZTbutz8WM${euV5B~hO;qfu#!d((ZUGqCV*%3TKH=hy4m*1N4Pg_WuS?VLx{Vj+#phB;9~q$O&($hA@%l+of5%B-1A-|Fnig)=_6$ zKmwX*sDP*-===Eb2Kj?sL#$1MBIWlE=(($77xPNhqV>KKJkAQ@#-oE1jNn=v9`!AX;Z#+8&&&z&zY#Px58L%jbo)5p-KC{{|5J$WHtq*(gI4Dp1dMvl z2AC5i`_}cBMSsOz`4j)oGuh17U>T3dYfW?af4u(#NQ!-O3pgni%Xq@BHWiVD)8BH)MtPy5 zl(9t`!-q8%;MsA+g8IWeQVELr1C?Rn|-t5<=WUY*(d<}e9L5kDS8GQDnCxcV>#35 zCAcj4m*c4CESM{`elVN}1~)Od6FCX22IsqZ0y?1HhHtT0cQ!Mau1snex6DLjmAr_zxdxljS5#8Vp=-ZKTStTGATHknFF5CWr@a0iS3-0 zhwS$1K@bj!3$i6K(r0*rJ#1e$81?X%%0C_kpNpcN7PB=uta;@%amFP$o5-?a_QEZp zt?zdMJZbM7L=(NRdjMi%*2V0ea&*i)E^I?y4;RUJBZF?H6l0Fd3&RiRM$b9P>|-Z5?~ z5Ept*W;`^aWv!6$C&Rx)_-p^|jzV3*W>_64hbRA7;p2n^AfoE02s5IyX!yhp7Nl1 z!m=!zt01OVk-%V!XK(0(KE5-Jt+>(F zfn&o|8LHLEsh$zQp=$>y8E)GJG4xc&3Lq=eP9-(qte*>1F+g=qP-4hK4P0DcH85vj z_1Uq#**)BCs|#>fFbFF;`44iFj<}76-AE0PJ(ek*dSUfwxy}S1xqn>csh93OOi9{x z>{)G${ScEuk5byk{L}`m9(Gz-^p-T0LcZC`!K@9hg=fzfJ`IoPWdRj+5;Adg#@z+|And2w(7_DQSO z(Mih_Ja=YWi_o!ow0!{|cZsE~0;-*uYp^2j;ueq+u)YdA4VG~X1h$d|<<_u+B>BWSp0L*nw5SgkUYf{Np?)A2V49 zWd;ivE`e1@oJ_}a>{wEWi&x~tm^B`_p@W#Ia-oy_#h&_0xA-O2H7F=fZY4# z@$wzgYs!xK_+#7eB7^fkI0z9h|C9fXi101#c}IKKR@%ogEDg0`sw1`@GA&jod+#GC z(PkbDu#8{|D8cy|ro8+&Z35z0__s2&$3u;!zlC5RLijGfWKc~n{t3Bzmgn5YOJOX& z1a#$FK1#+d7lE8Oy=5`qb-$;~yOv`7z=F8*-!T3?f3VWBYx)@HX%NRM2wTnzLk?7s z<7>!K9?zya;`nZ#nHzE_Q}iK86SlKQOq@nof5k;@Ge~$ZAFU{Fl$8@2Zp8&kFw`P^ zfr7LLu|TSIjmM-;OJt;&EE&z*wCuNT3K4R3T&g9xDDta$Q}-*i)4h~)nIK`V4Iv=*2b#A1 zNRW-R30f4&TS=EKloQv!8-H~9bE=1@w?ah%x5BYGHs4YWf&IgysHwgh&_l9=O(uIG z6LiOH^@Z1gHq@dDzIJ>DHxo?9b1>A$6{y;swe2#cOD+jD(T`KG7zssX;(x4k>?B7B zG$1OJhJ8c|I_Uk^v$w~OLtKwo$z0`EX(dt+Jv3uw>h;x3rH2Po9$pr=q_VvOYJaPZ zk5m9}p`C0ug?;waPd=KL5O5z)So9}O`kr3HY>@EjoTzbO_P3e{#qj^CYiOGl^48+5 zAgY}nK040U5+qD6VBktDES|C-1A;$8jbo>vnUB$)Q$1j7(uW@e^BtPZCp4F1v|HxY z%bO#!{mXPl;;Up@PY*B%(i$yZ%p|RaZ)>qAD~wIi{ErNO&=LBMKcq}WX`1PI5rnDJ zKBMe)XU-O&L?vwEf;d|>Hy^Qtj6==-WlKWt?wyCYTWFLu3fSpxV3AOU->8}|3jo9k zq&9bEil+pmHmzWflM!Ng>I?r{z28F}{f>LrHox|{BLv&g3sLLpX!m<>G&&oIZ6~-| zuPXDc!_KkQu%3~Z{J7Kk-Zk9_%|RHzZn4!+TTE&pPKFbB<5ZcY5gN`4AWW_Vx!pO3uK03s)zjbwB~RD`L)D_fvjNK;Gb{b;!)t^^xwM~q9iWzkw?JX-Oh|x zlnb6b!ckjB6}^2L1A`sO%sDH(gt(M@j;f*g%Ed#zheLTMWj+ z1G~e#9tUXqn3rvG{xXGs1^i{0^DYBh^qCN zG8KW-4~~`xez_ysh|B6b%~r8&3WY)Y@=zWt+(cb~Y+IOgLI3q{YHFst+sD;&BnP>P z+Y{#5d-h6HbSD3EqMpA;ud^#xs1RglcoOc#|LYU(|Fucpw$ z1RHYRf`o@Xd4Qh6O?{q!%tjzHK_;$T4p{sDRaPd2mEt8L$fF{>=5rA$*^rmwO~Od$ zZXW6*a*(~V0J~~f8Dg7>uVHqs2<%EjJ>@s`A^XtvP=+{Uj?0kc&;H4ej;l-rm2A(_ zgZwju)wP_;QW~2K5$ywG>j@4pl|JNUv+X~~U_>t#1)$M>5+@eMXLM)$Q_IcfT6U6| zD?qlQ5$!@E=-qub9TO!SikENr!{-m_<}f{q+Rwx(KAB8L+PTrUbLD8Gz_|yaZ*R>> z@PJ|GlHI$$2p4O6Ae+&~*2Id+MMT?NuF*(7lCP@t2CXECq&>e)+oDcr7W&hw<7`{^ zfP}Ehs=>Ag3)>w2WK5XmUu`klAT-@pkmcsNHnT+`um_W`|5q^uDmtbQV-u1ME1hMN zeg6;aB}a*+x2z6t#qka%$wQu$VU(m6m(9X%Ix)NNUL=YlTq-RKUvS z)wuJ_ip-kwPUPda(j)X4`f6*oMb}F4nlHH!c&)>C=vdY}m%eFy*M#2Hj%{U6%#~|% zVBG+7)SsOGN@(7`r5nBhkvW3;n8I;stqFD$GfAOb$4^Nm;BkluOm4JcQ(K2_rOM>X zBFJ0Y9QaDr9&7js=~o~pwOF`Bxy2V6bTBTd!}Xk-9EK>+gc=V{u2;NjCM2O%#fPYm zQFYe_fyck{e7lYUycS-&70yAA8DETv@2B&SY+wq(&zOVkv&*&Kgg58@}ytKI&Xu6ZErwJZ-Wc>G;3zd^Yx}h)4Dlb8sjMldy$Gi{2cKrt=!| z7~nIICyI|RH4ysuXBd2By6(05&{Vk20+Ss#ZKpl-;c2IPKDTGL`yAt!ELHIfTPltm z8qtNWl$$*8{0>o#E!h6|noq&&({l!3qYP;fn$G);BzE|Eq)DzvL!0d``16gwa6!`s zfezC77xuV$1Tn~(W>>e{AYRZQ_Z|x$50)=A6zcg~i-tAJR}@m6Q?tRXY2>{>oSESu z>)~h7dTBvSQ!(IBMF)rn%C(8pDX(o$ZU+H*X(&n5>!%yaQ{@ z5LvAop{Tq~SS~afTTmBn%JRS_LnFU+H5??cQ^Vf>@fLMYWO$BVgy3neEPS8OB9s(< z^mN~1CAkc|OE5k>{s)j&hDswJ$28s-9w(Myz#Y^e_9AmVQ`A9VeEbN{_mz zC1CPS#gzM!v~yNmz92wDY0r!XeQ=|xfcIDet4hV4;2>+vSH52gQ{Z<@be>=Jt6vkV zFe$H%fM~pg`%1gj z43eJ=gdllsNDCasvu0{AHKj?Xms;k~$qzx$oY}Vc#`z$Cx>+7#XA|-{Mq_ZGL)zK+ z^g+|+_LP^PEoHR{9md7PaQ}dbw=&KPUDl&nQzc!fsQaETjbLSlW*@DpbX+m>fg@hs zN13u(>cxHB-wP26UuEMn9B)#su|s$*Rwe5&o@o9wLgu7f(60w*;_x?XUi>01skq9D zpO(G@p$Q&vb07p^1X2e70#eqfe;3cKNnEtLt!XzKb_eg${M3;`#|atj+hA zDtr)VU(?O@AEt5z-u=I8fRdEqk2tBQW#^6@DzM?Z8jjqV^uxyKojFbVqU;;*C2A09b1PwRRM%;*H?45 z0?!l4YWC6{ifwoCAisd?i1oUn?w`Ed?Uf{fH-QCPX&Sy)+IOxtn=*R;&@-qPQ5fHy zya}LOzKxyr3^C6&ri~9_P1RSJ#e{%vlS6Eidi=0^am>$`CF3%4UOvXyQWZCdAngqj z56c^0vnqDd)d^1jtkQQ5uyzJcHEp$w@Jv#BQ&V6#6C7-%8uw0}@Je=6$>Q_TXmwv} zL))4I9gW4R)LPwiOnCMAbi)so7*mOcK_k_z@eb=1tgM5XAgt&Q^OiJ^x2Q%v)$9S; zi3hdHZ<5%r?xA$FCLC5B9L#nNi%A-^{wiJ+Mg*U(s=$1+vD!zQrkqy1T)Byn>>R_{ zONc3Ic_E&%$Wl<3a@^YvGtj1f7ETIe%QdWRG!V6Ei%pIiQw9@tdXU-BQ$rNjML})9 zNvb)?e2lShE=G~%Ojk}vzWw|tzd`X7+R&a1LGLR(xmhheKNv!dSZEeAHEO+yLXNBx zeR^^KN41ZAaoUCBB7M05*V^$L!w+nv!KVs8gIjo=dsthJ+D_?4_}`qN=(kM!e?id^ zCn3p!i&RENi*tRK_0rQJuosbl?dvd3nT|5j%_RJX{w`K;gwd%XYUKWL-INoGS$rOX z&yU0V=C7=|lbYqiU*)wEO(5tsYGW7F0+<|K#2hk&b(7(RL;Jx*r+We&@_zKCABIl& zRsGCqJPj#yyiunrRY?t+8I_|1VAGfqpvc390thNVsZ3afhoP}&4`z@psLm!zqV1nx z@wkjPH^eU=V+0P1Xs&q2Ka@Xq_g%ONZCW4}?67>pf+w_lW_2_MRt8W~A^zTfw#3RxzHUrm`yDzMFN+ci--{ z2j#!p@+A*pkU>XqcrPyPvU+@YC`I&(NU%RNR3$C8&AAv53%zq?NCYUyN8j(WuVVv< z13VU30Guk@ap^Z-Sq?TjD>{xxP6uxow)Ph2VR>&>fmik8mIy?(Uu9F&~v|PzFyS_{{wFOrWMQl7Z=3y@$ofHtn^)$ zm7lQ?_D*RbXWZ&66Epm==#UG^$aXKvJp%9`+Sa;~A>pizp0;wKriC92Jc;2hymm)K z-o_e!#@0jeFQ%bjf|T5cAzcgbK*L@GL^b^JW{yQyD;;(sByB?}ZxpT=M0Zm%Z~mjD zh@D-}c&qDY-B{e zN%4@^+IFyW?N*=iq}-;d$xc1zhg_ZV*Y0H?zU%Cs{mIZAUv)KuVF5)-7t|^vpOcn= zp)N$x4Wr@S;kdKnj)Rm=MhfF42Yy*(hmNFoV?+Ca7ID?P^6%l&#ln=TbqQW||?pgJ@56bD@I{3%6H zz@}x(&|<|;Y?`&6TM3fgoWNZMB#Y-#Vo2Xx8D@*s%L4u=b-k$T`oMeYHGR$9OO^G6 zk(sL6oPx*KfJf4OrHp^AR`Iqh;QT4ut}n5^2}`$tp?H|;8GtL`R5$VhkLi6_5C88ekU@XkCfs#eggZN~0Bk%bO7>VM z&Zl>O>6=@)@=EmcY%O@T)5HD+L|&l8QCrJm0tGs+`F=>}!NOuwtHJ`&a<;NI@d2Dp z$S@j;@Zd*daggb=FnQMTGxaC3mtjGRT(2@!jJBi!RJ8(j6r-QW?>VJ`(G@f;{e3wx z@@mMcHM=ppf&wv9A>)Ljosiab2nWo!2L;hCQ=i9GtJmPD%RJq%nx)<9GOS{yoL#7# zO#`O131MDRCx`qbjoY^r(Knk9Hz>H3bTYt37Kto5sDekx^!xB)>4>T3o>lxEQFxtZ zilL*bSSfa>pjVErh8!54QwQUhuolu( zPb2kU-zSdMavYN^<}`e`=psRFqWVTQ$fN#(>^dof!U-b}NctAf`np^Cn{?lu`9iUz ziSko7RKenJPG|e_;bryw1)@Y(edRYw^L*$A=xiW!-+ps8@#g>fe(~XSCas$^i0ucr zgNGFXcK>0}5K9K}LDLf`$8J)yd~xjH;GARIu;upZ%k|MH3t3(bcEx0LXY_f}wY`@| zYQtn9NA^wZ2v~Pt3Vhvl&HuYYI!7Fg>*UW$*OV&#HT;Jj_o-`CxsLtqixb>bnjz-^E;38`1XC@E z!DU$*c?Y~Vu%vtItR%@VJbBpzhLa0;#G&pC-1lzxmilC*nBSfA5WInGNprV&L_k1# zK>7mjzwCDW-xEoG^Z%De@j?-_t*a^PqF>;4$S=_ruUvaUW^XoupJCF#^jRf0O1}CV z_ZY7!-iErXT6O_QCpR#=I$$8j8$U*DJ*xrZorAZxCpv~jH4SfQHIn5JsH3i?OJ;f7 zOeuHm^5Ci)ER8>M zty

YJ~|OdF#l^+ggaQTH1AV^`!C$Q%H)n7dc-UQ)#Pf6bVU92g?51Wo1NA7|>ga z16Hhw#g_YI)SB=S$OJQG>UZq0t=7_xCauAYaa|HsNIXdwt$JrgnYcOxhPt5GM)|2M zjek<(zbSf873fw9Bk>HUdey4T%YPEM3VZs^cqx!JR@RrxG8vrz z)=u|nWu8e#5r~-bns2Cws9%rU{pDEM6yDO}fZev6txuzhAl*U>M(oMKl0YDxJJ~I6 zk~45nOOOk^wzJ%Hqp7wroEZMIy1;^l-zRN;0ENd|l!cMgDW~UQOG21VFZ2*Zoz8ZSl+5R?)Z&SDw^2&+*D& z#KC&=l(c;cwh4;HlP~z z&1o;11dT+&Ig^iQ~2+#;kl@^`96(2c*zpogkM!3pd$`kj?@|hN;tKy$S>oKd{X1=a?VJVPWr1 zqEL7KN=mKI)KZGOoCTF8=Jz67U1twxYPyN~xg9{CkegvC!ket~1 z=YImvEv{6$w9-F*5JbB5R`v7?;+hR0+pC~93ed*uX%}MRk#u9S!)P)REW-+f&_{QcjxCN8fmR+po#*f=+-)pNuk27dM`)KRaAl3eb^zE z=1yr$N1Yr74!6iywfTg6WTm)W}n^qqkrVFOXBR=Sip+ z_O%$KUV_F8LW0Ay8~?E*1ng_fQG-7p44ME|dv>ud&u1+yX)O(U3SZ6q0+&l?mnyEW z&tg^T3l6Q=3ax@Glv?5ZkaUPue~NQ=&;K1w`kZ8s2WFF3fA}Ys}8- z*F{x7%U>fRhZL?H=W|STETr zCd_LM)WpNtZ!UorH!4{6yVg%q$JpHH^*TVix zPu_2SLYjfA=uM_ClEr2?6?c!{p5iglW3sbjMTt)32{ z-=w)9{^+U^N<0@-;8M=E#FaKQpiN>e#R$Ju61D5TjY#+-8=i&D03Cf+iTgj4qQs>}a2RhgE%-Yt z@NP$D=@Dzk!{Af%?2FH|~8Jkp~HiScSB zlQgV13!1F~TXwIRLlO7RLRL#-91&)g3=>Q+N6X?<)ILBPkzy%BFTh!cDqdTAt}-XQ zxot;VKmscs`ZEaBiAK9dKHJUm0yG()gsx#&BqOJ z7%S6R1HVe1Un8R1*h<42Wi(TlX-!wnQvQDbMbscKU1%kG2DM%C&>yX5PN?NT*F?&) zw+c;I`4Zg!XBO@TJEnNC8`*FSO+K09 zaGEA|8n$6X?e$H_z$#&;`D%SKLSzhW9fFDTNZnB!=9C+(eA8kg%h96kuA7)X;%4wL zy{ly1w(e&7Id^^q!qFvy`)s61ZRmO|FzY(YCv3a||79mmB(VSLu^_>IgfQYTZ%ScL z(bYvA$cBBK_+))^kk*^*&lK#IX8NCY^}t_RfVES}X?%FSv+A0v31uZ82Wi$~rr!6} zqB;eJ!?@LE^H4tgtR*eE%Ig~Kz6K?0$-spqDRf%y{LRa~r*!;SjhOT-S%h4%KMrzbY z(>Z4FB`=)2dSdwk(N;7cH>;RRnyF)otH~2(t#6_YQT?J9o(WI(JS=^l2%eN@s-L!n|zl1=@;Q#;VK!rBnsXf_FX+yI?Gp#j(3tRs#F z2EA>NgAfL=-;=i##-w0r=Ot2#sS;jKHD&^Vm7gwu{9j)&;}4Sb|4?fTVBd2Ks_a6I zG%>My^Z1ioi zS}G@ETKHZ=!Qgz_fZHAqUxefD?;6J}tc^fW`-$A+L6-G1;NG)oYR880@1Oafi^@+< zlm(X`R^A-?4G5!pY`w>!uuoc7^+76g8kRiI_NsS@%=>8V<|kgUK;ox`T@ABzosOP1!}Jv}+KX&kj=7GRsmKGtE{fm#&uGcBxJZ^`ToZGN z?M~IQOMww-&e-rE9jfY&ORs1E0prucl&l{6hG;tO(vpFwhmO+PA6EgJAHk-BUe8^d zhH4T|*$h>79LIWy7#Y%6o@5=kt{4nK z9>C_Q z{ZN`V$QnaamD&X%QI)kvRgKTOg*6RIfjOx5b3z$la^<<2n4okjOQQ!NY!o~4O zTV3SN(XISNKS_Z0SK~C6^uV}ohx6#TAit88U2;2LHTMd+4~XqSv8JtBR;Ew~d+J$2 z{ZV6KxHXFUMPL{Gwu_G5qvk&dmZdswRD!k8)UL3-EG#uuI2X^vi7L)7EuZJ8@3|3x z$NpHU(T%uT8~x~0#HM66-)~@T9o&xv%WG)b)S?Nu1VT^S=t5EQ1qUB*#4)l-{gvOz zhOIXB$t#JsFuOoXp4>668er~J7C zuM?_qXeDfh*&0ezt7H0tgQsRD1C zJ9lyO>y(rn+#jo6uLrb(Y_;1}D#&i+KkIm=?DlHewa*&Q$116#QZ8d-r|VId&RBcJ z8>P!mlU+u7Gr350v8j9eCLR#4&s=6d_Fw)}gu4=)i5(d!md1z3qP;5W6?4?Y zRk%8v=ul5{*R3alyj>a6Z(4#;&?Kb3H810O-?XXg&Z*i_MVY-rAyz$m4}h9a{j>h^ zI>EuA-`yqjsIB^87ep>%!TN#yTAT|qiYocqs`K%FN z$%%>HwWsWN2~oUKnC;R4@IaI!`isng77pYw!h_^ro;Xz5VHM&Q48ME86Fqv5-R&{? zn11yIz;i1!wWR**DQorj(iagpp1-llB7^a25QI!*3{eXJ0GmfbCU%9H5;hVIY_TON z2|};tO(7mOxNx81h5;HN0ZX8%-+`3R5&ayIE2~b4or?}M{p~_>uS3tooo8J4E0!BK zm@ZcE5~OR-8WP}}pnlMJ$Tt1baZ2EWyO{N2jYmaR_WMC#_lby$U|bzwVD zle-g?o|>=p&Yp&RCrt7dizc#mBwa}(PcmDa(i5K#6-+Ung>C0H1_D%kU{pgQD`_D5 zSo6nTuk7LO)my*FA|X|L*xh&owj3$XxD67+gnpP%T-@1E%o6PySp-M;fR;89Oy=yk zCG7~w8k?J@ylFs?i!;+isX+orsC+!1xv&yz;!KI1N4vbTHTtn>isG{s3mQ9x>5{Ui zVJr648k@q3+P@<>p+5I>vv>`p{wjmpvN;AzBrB<$pW>_I}Dca7% zJ$yuwJv3X@71GUz@*%QiIt1iD=s$|m!+wE&AJa-wb3_aljndZ9b z@})2r+p`T<>Q9LAm>~`))Th7v!D{fio!IXE!i&8&zQBPHA*ZbjS+eCN3ayp3X{ow0 z-X5E;Fx3JW&cnv+&j>u%su&PVY4*Qtk)vk6;|rQwCA{bkP_==rZy%cxpdm%N`|_C= z^Ia04E_?jDT)NL%meqzeYmffO7xhW;OD_50Qm`Yn7W?Q3rfRo!0+&&?1QxoV%-=;C zJ$zS7tHRwA~K^{U>-CKThfJS$*2Lb8zGwmibcOws}w7q^%1uF?W|08$Y zs_PFrF$C2p9-hY|kFH;Np=_@nt^OOFkE7y$_106WX6H?*LV2+oCY>?An|4v{%-MW=q-_tXx^8+f*v{?fJ_ zC8Mrnj!zN2twBBULRTn7#HfXFL+?#17tvIyhYnHwv?uuhaj`mWqI2Kf=3o@^#Hs$= zA6amsjf6&z!BDS|^Y1$H7e6elQik4tb+3wKe5;GOyPAOpfu57Eos`!TI)}>7a6|UU z7UtfDMd~%tc|6zKr-t3U9+GMuWg!q-oBoT_zHS`E+utrKaMi9?kDw6;In$)*aw+-mdQE{CzM!m!k}FX>LS= zD(TM{Gh+p~$Dz7pT`f~`QpM){g8^bzS5)yUTZlyZN56fc@--E}bKlIu?OpH?7vTNV zytMC{Sx7dL{uf*C*j-s0wcD=PsMxk`+qP}nM#Z*mRBTqoPQ^~ewsF>n^K7(t|A*Pe zJ=+-9)w|(cJXJ?{bJN@&_$6Tv^TyXjoacvqi%bkq6|x~)C3|0*SbVEE9I=!%HoG#< zkqxSA*pME2S#v#E@D=~|8uNmKft32!|5x6_Q0tjtowz|ZNb!z5FsZAo@-6Xnc>hQK z@33!R7E}7yw=@&2|ZH@;$ilF*)9~QA^Fri?|6oEO3 zpdhNm_>w~(xC0y)hz`~$(}8J0U+>%D+3nn&shc{Es6uW?tP_S+Ti{LehIr0qH{l-L zhZ?{Q(Zzq|>EFrbBmpQCe1F@gG}H$M*0i1{kh*RQMZXplX^el6Kkr{(&j{-G1!!!G z6Fy_+rL0LDAEu;FQ}xG%{2LEaj29jp4J8XUxjL$mUoxlx!&*NtRWdc#zV1nk7}$#J zb%Q^7_4=4^K0P%9V6}%7*JoH~OE^FLY|S&BV`Jk!x4i6i%!Xet0AUDZ!td$H2kx;s zyY1%Ae>+3RAzrQy#)JtS2cKDR&+XwAa?7czz|&xPq+rQ}Ej%`bumi^C|Ip`}fqd%~ zCrBQu3(y@bI}P~t*7W#r)GHf1_RZ|MIIS;x#NxQLNy4s1}dV*=wMBfn09nEj_!koZlxDo z@_%#jn!nchD!XA6N2xdoJ&fhbvnpC5>iW{5_l-JCCKuoG$z~7mW?^u850kX!EpXb1 zQP(+!ZfaN@J8G+OX6)T&!S^rqz5F|y4%a%2Q@1LchI!RVQW;o&2lwtaGgyOB%V2tF zbMOWofO`QKJ^s});gvuqYuHNZOVRljgN7_YU(dGe%_jS+w*#?#vl9_UCv@ zu0IT@zWaLAa$~~JQSU`467^bI!_oE|fKnIXB|g`)Y@1m3Lywxu_sMIows`uUh^W6$ z947?dEbur|CMa0Pc=b;cw1~D@aow#Bcyam&-K6gCPzn>I`Sm>^RzIC{ zI)9`$x&68Uunh~?FQtZG&ef+A90m7d>AW@clH&i}VBKKH_MIbs?mJ;=;2)zBGrcAv zG;JDEZ@|ChQZQ|dw1l_(o67H+y$(u!8bu`@1AT8i4b!T50F;q7I2cXWLKKR3v+F7u zU89-w6L_5t?NhBiFt726LGR0MXYGwbxWo9zg=z?KT+XlZPh4D?2Z5Ha_o}=|M@hot z<%+iO_K`e$mlyvAj|)`$Gi1+G>CjNir-J^VPjO9dzs_`ZgGbBAbho++=}l|rB}e|W zf@?ER_nqoNO;wS`6aacRWJ#7Y&0Ke66(L|cjpUD#4}q&1WH?nwh(cyIS5SxS- zb&D%Isyi;gC`@`!nWvhGOy|$=BGO3xh!Q2U@|cf*f_D}quj($X02^W0UZy~au!78r znASdyGr_N~F426wE!cwp`ggut;RzyBzms)WydI?xxarTaS^9~x1KV{HM8|z~wM|5E z!H>TmTe-&wAi<6GIl7`9}A=7obD{M%yW&Uw-=8%(p z6!3m?{KJ{yP7FN537DF&YE~kaDa&*jC;+n>2X<8TZ#$RWi+BWI&(0zX`ulY4f_yk(4RMqmux(S)UaD+oQ8l!~DS8BOI#g9TPy+-qe8K z9=u|d@m_l#*Gt{Zo918f3QfcUP4|j^w363yA2vH8JsiLZFqRP>UOl`&Ptdn!0tR^7 zQwM|&Wo}6)E8vj?)6))AIY9QEBU4y;Jj6igOfRC7p?zJgU(jnM3KLvWgx?)*qaj9s zEfCY)OBfG%qV=GPJy)p0)0st~W9idP?!4k#&I3FbD9T_6m~`1;Yv2}tw-+fOA{)vF zaVH#1;*%|`L>+L0|0eqQdwux7Bj5j0NArHtgPcq_cuO$C5znFw3_`v%nbZ+Yv{gO$ z&x^UFV0iBylrGW#Ur3iEOw%E9hrAnS{>u@P-{8!l;r7Jyc&>`nxwqZ1QnPI7telF>8 z+x<3w*=0kuBpODl;}>^b8$zmqzI4Zfg-3e$YBA1qav1m1<_=ZK!Z2|Ar*qGg*A!>s zNG_X7w#S@o9pT{UCRjLBEa<=ej%#J2b-Q|qLi5lKF7@K^q6a_9OnF@FKB$hgyt=ct zm(+ia(%m(~^E_)nkthu+0>-VNUA*UYMk4d?AJ$Y0Zu!!lm}u}*uApD3^i^K zt^Tq3&b`Ky9fkX){bl>JvZy|L+}Z+@)d}~f(LbG( zIYr3@UGq$%fZ!xy^0@Da?s+uvRQLLcHUb^?u^jZ58J)I$<_}QF&sBV~P%SxuACoIh z6U?kmq|Ns*h!;R$0JACa>`8-oFD+uMhJI8!`W-K$nafo&MfhVjfzX8N;9?*MTz&E4 z%Hyr!CVaq+%;gL$%U86bW!0hT2BlJm7iLN}Uz@EI169GN*cTt`LXP8#BXMwry zD4m)_nJ~C|b=I+r^#{UJj2f#;J*DsEj%V?skx%KP)^c(=y*-7pwe+H?&>+W1841q2 z6vBq`KxgdFS8=yK|KA?}=3B;VT5)1k+;JHG6^i9J#{3Jvoxi&>2l5aVFBU_Xzby>* zNxc%(heThfMw+E-B-2>npe9cqD$d7|`VhZnIrj{EXudC@j5(VSjCB{Xy0S)`v7w8* z-t__=RkrQNIXT&uZQSsxYeGquyA?4S0$4w7aAv{AhaN1jFmQ(V(f6Fn-i1^16(S4z zxV~=elHGh(8vi2OH{730?!U@DZmDni|Cn9`V6o{C1omAO@cBBkVS^8*6yK4>1GGV7 z#I8@}Ij}uOhZ%%~+RnG^ISVEl7VjMBB^e#tfMpkqVMt+sm-C!>COLU20vf4}vAPo5J7ba)}qxpVWt_&mrlo zXK>wPFh0v18vsm!t}Oiqj~}PYAd?Qwe$A7GCeNS`gQ8f-j5p?gb5ba91ggeO!2>9| z(a|B~?XJ1NWl8UO zg5)o%6MbL`fIawmu!TuPmO~N5sUryawd&iuvcVH8+6)}UJYvuQ4J{>0h$jI~Sh*lg z@dVTf>=Xa5aScp$S0QIp#)3L0ks_PjZ+Zu(NMt6~#sSuPh*)CA>-fA)562nSv1bQG z%4Sg50t@BmSk$dRKqO~ivsY=ww(YLRDrRW>^Y=iQFnQ#iXssN!m`k%pa9^8SjMuy| zy6WJgtLZ?4o)@SkB+-ys=)I{V<5+Y3$5Ir7^>^2n=c4=0?k$!rqs}ToG%%w&78-?V*4?<8zxEf{OcO7=bd%a+{w%N|=Ol@iJbmLbs&N13fvj2teDwsE{WR~D5= zfROEMCumXi3OKy&rka|rdUp-7xxE>_nCe|HnfA5sHBHO`&3x0ukL|dB75v$BAISE_ zTf;f}i1HL!Fikr(=LhAcTCX%84e9i$s@m3#4)@yB1lDL7dKt^xgnQ`GSnY1+gESD3 z{;2Q@eR+sJPI~lQ6h*X0jG%Mya4i{ublo;HL^@`TAan7>O<>1h|Lp=`H^iSy_3h9G z_NOP%*J^057V67dn3B}i{)%KC8QoS1-w&Cd*Y-V=V$g)n=a57!{N{DnOhxl$Rkyf# zNMB~#!coyq)mx4WXH)H*%Ep1YYr4kre33ZJNEyp!W_SZ)99=A$2v4b^n`OW%LIy8n0KG=UmJ(|@u#w)^k+!^pBRTk)!ww}5Nyh)Po*a9sCkE-Ahvj(k0%tU zpZR-UTF#WuSpNtp%2W|;v1_YK2xqzjopHA?6j2r;VMrg%d5|J2thv?C0U85(J59X$ zr9f?!4Zq&k^Dyfsx_HtR&tf5ix;+#l(O=Zq<5)*?Gp_u|(42#m{{Hi?(T3lFy|K$> zI_Ud?{q$d}rgPJo-Ou$VQ2h8}OSe#GAFc3G#`xZoY8?`Kgp*72)8>B{BN8^2BX<~^ zcMq#wQz`~`>9YK=e&=CUpbivDqa2z)p7rG(D{p((Q}!nl`1@o%`~0~SYamfhDE3RQ zQfIn!0}+C{u2&HX7UFIPqT3xA$J1LspvQmE7Yw#UcDsHhp~;jr(^l zg%WN-*lzwjQgr7ufCN^EaR;k`;<_&rcGG>YP1XX*N2~A)S2Q!@6VhOyBV~-x0_sl}}!rBEdO% zdF<#A6a*&zC(&PV1twxeG}xIR+YMw76!rVY?hVK>6^E>jG1)H0+v@q~Z4dNp>5Xw; zqxRGs4p`xhM1K1|>TM+5pb z9+Y#AaR&9mlI^jwJt9XRPx*;nC)?Ox4&2Z^%dRT-4)4-%`m? zgPxzYkGXIMIpFXjsV=B8^*`@|CIES7M?9bt1-238uo9z!hr?{EAW6;Pd<32+eR*3g z6V>M@Wax)qB91vS<;y<4uzlR3(c@H?6kIk@9gTnZkXesF@wiU%-RR8DYT$5wOdVg` zG-%9Ltx7T#yaP2tnjh5^9regey@>KGSDOW5*IwJl!r1n2IG1n0SRc^DvTzn;C4ime z(QWJ5*(Be*hjyUOA6A9m1vnSi$TJLIlysjxnsa_aZb#THLT{~v;)*u71;KKbe6HhgTa?NZx6M#Z$iIk>o6qFJxQoInXJPAow zXMXgDf*=_Ed`SYU{&k^tci$cELOETmIXQc$f>yR34sNxjC}ja!hhJ=rj+%%=2QKt) zIAv1GQ>KLH+J0T-q%5D@2o>K7!M00%YWg7eTB}`{4w^L+@?4UZ1VS(WFO+_nb{vNC zps;{MhOHTTHsOR_6=` z;llNtk~O-f^Q&ET?;bH1;n>ZYCSj{vwYG0$f4_FUwOuzzq!M-XHiUEJs&sQ5?TjR~ z#EQf0`5CydL9(ku-@t4<}2GYT(gVcbg7yBBV65U`FqR57eK4vY=v!0kWD5Df9K99HFG>6U;io4lLEtyA;9#u2!BsxyHsb?#< z{#dvLlGONnsGp+4y_k6Qu2v3CR(lr2yy4T`7|#QA(v1IN2V^?8#0ce(b8 zbLH$#8+D(G;s>mKOPv9!$Z6%t@#AC&%hbo=eG|LAmGLR>Gi!!D^50h?_OPxP3Bt70 zVzzEJz4cPY5ki&G9X?;mjh$-NTbVdZ7B_>c!w3tM9Q1M#dvUuovIcbvw%%>{z(Z(1 z?qdQ-BWMp8jSr_TSnP#cciz0S<(o1e7feYD%HUy-pYwe=r(xuzU!#8SCb{}Im%@T% zQe{CgP|*N~jQo>~Y4H8fqFX1hvj1!8<)h@J+>iG>3VGKr%dH}B_utH&6$=k{zJxOC z*?#w>ho^r#{4g*X7aycpam&EC+XBrl9gbl6wLkq>Gx@%6-F#GBO^l=j79`&;Mh@X@ z*7i$)z(Y_$(G5x_vpZa*J#H+{>#|ei``V!fWl~!^W2dA0LU2Wj=eH zld%$m4m5btF6h&;l3!tl+5ukqbBdG3K25*`N$c_50R0n7cGsyFy_4TLbl~~L)Uw{Kxw!Ugf%!ZYG5NZQ2?OM7b5?t41Lef3?|B)L1$Ng^= zEL#t*%<{3Oy{95=A1Zx}ZSPaMi2-X5$0j|AXps({pTVG%OLkQ|6dI}&2v>tJp!Qz{ zcT^3^xPNh^5X^KU@{*grBt?W(%kd$IeY&Q- zR758gr97hf+^A`^kkG%ijS3v=;i09g*M?+Lx*49R8%a+++~Av7l#Jtv7iE z}U2ayl#GzrWFplC0}P@+W%*n-is9N;wJutglZ@WtXlP6tUTrXRp~ zmby%9ZzEgxep$v~g)x4*=(70@6KaF)$yNCqgIs}N)!Y`1aC;5%uF6D+M>x<^5Vr?M z)pYj=Lw_m1A>^Da?m6TSWa}k2@$HG2H5IQWq9qYgnjYisfRb2NotXhoVqI)QjI#N9 zhXE7ZYa5RhI^=0m6x}FFfYgt{ssR)yL)Yj!(wxGdzE3-?k!T27)?$5E@bu|6D`hQ> zlSl?vv5)fRad0w<$^>JQT5Y6t0!^5gvN>RGq^mosCAQZ_goM}J5R;S+GJ$3Cd>vg5 zo=BGB`lsoPP!U@tCov1~dJTs)dD{bKsCUwL0%FY->M;y|o)@%>}y#r*~&3qR**5h)7+b8q>6 zQ+0NW%fo3b7aKKOxaO(@GY@=H>|ow!BgJPiE7x+5 zV)PxaaksG`KaRJbfAd56ZRuK)addvhZEJ`Q(4iG?K{~U|GtHaa!mQk^(;$O7G*3=H z#ByHNbfK_)RjmGH56$+a-C2_*l!1~k?3KJHHrteo>X+DdTw@<*7eB&1$(zkqH(liUw&&xmBU*|f{ZNwH z%UD4}+c`oyrhMG!r$GZ@7;{5nxUf?*++@z->6Uua=3`qo$%133G#gf=;^;BJ493x( zECewxQk1Lz_3`}s*7tK(K!%~vCla&Sa&p7cr>yv({h?;(q`*;)j(3#4wLwe|t`VgK z=SfAJS$|jwWFo==Ba-+7H2_-ODb#0WpBl8*7NMnOBkCVj2uIDB7#6;uPvuNLe0PeN z9}z0!*^;Hrs{!u7cSa!d64UNUsB^<;&gl^y8<< zoUTKEh7c{lq5LEyJM#6mkd`{OXt4-v60%r-kpzXv4zPoS3G-h9&hdY1oE)V<;vPCV zd`H;Fr9c=OXiG%uYWZ8pJVsb8y>dcdQRcPGQVZOi7PuH=O~k!zRLj+BRqNT$LD==K z{3xwNARe&!LomaWuv|+AHyiCv6_xO{q(L8rqtO~lYT3geSee96q2Og=6_Q8=>S)u` ztn-7M)rPr$q308AnH)WSnXS)|y{bxTK^Eaeyc@|Phi0aY#Hi{5^ym4i3vX^?(P>QP z=mo95)tX*6ruDR-rs1<2aA_cVyc9(z4#SU13fWb>fnp9s_Qsl6)(9ip7-UvDX>$1p zg35&aJ!~az0Yq}?6?URz-=@c)Wx_~_H_F=G>XeMWT4Z+J=2c=z++>D+nL#Q+3s3{Y4=XzLk=u6*-gL7 zx)>hn5^Lb$)&8jBRytw1s95jfa6J$O)lC-svD_F^L((!Zt)*=Ih7QT2=qFb|lY!Nj$Q;o^dzwS6n>9w-?w%rL;jhUAEtS{5t;k z-!4EFVIGUU@!hX1hcHajrlMNo@?P`E?x-)-9-^QvwgV#}P~TS@#lvpxxiv8%rKC5X zVm*9IR6&6Q$lo{qVJ72I)AMubF4jY^y@;|^R#nMxlcpDbk|PJTt>P5ccZPAWFoRP9 z${y1(+nhc!1y9!xYj?ikpw|NZuN-hRGuYL3v#-LAd`F`xMA<3S+R?+Hy~)l*aOYH! z!-8AFmC@1G)($Mwwf`+QrzL5d2wh+IMb2DeN$~1ok4^Rn?tn+N%TRb_s1pvuT?KPQ z`W+ALWs;Fiv-Lo`U6!OGIInV_kNeD*+_bc#l`-wHAcM8l+kZe|eTe?k&JKnhYR*^3 z;2k=2yPy4FIN!8~Yr^k4V*%c6LA~}NKz&Z9yku{^`mbjzHa8d!OnCd}5WaN=c9Rp( zJ~aG&FMrpbaVPK%F@sJeGks2T!GEox+Nx1~7Umt8xOw*V2zixuW5)L}qxChvyPuH4 z7{JCy~HU7h@U0~asnP6nZCl^2)yVrXja@WP_k z1R+>qI5ajjNF~cx-Eycn&wCRbY098NhS%JX-Z4nNvg+exU-+f;t$8$r9{+jae0boz zo4MBkA)&LNlHbw*ZZ0v17=?J2$}<5;AS!`*;qyKeHN~Vgr_FCoi0!w|scuW5oLx=T z={Xk`Z3gzNLP2$6&Jg!$N812)Rk1^LzVR$ztkdj>qSoKMO&uhUW9QLPF=0 zNTY~-0Xzv3y+||h3wvg5;h62k(Gn|5+Rg!6(WJRMi{244XO{7*Vv7qF)KUCdA140e1RCpsgz=oxweqoYXDgW+QfG$jwlL#? z7kJqOOehsRPa>#^ti@kzp5s9CuG?#}@4BCmoqWpg!4@r0n2iteoJ4YAiO-c*M~J|8 zjo+F%@!*5D^>yir{8ND92O6j~jSm4cpqJ3Sm<&)A!}OS@ZV|?gwlClssu5dmbBaaj z9^Px$zdIQ2h|u=_=h7G?C_-D;d>Vluq_k^(Gwb_?(solj)+$`jjd_BQNH(1ws#Y1j zG8a8v=vQgB9}P1&-&C-p3ndvFS8({$i0|OnL_ytcF5wIh^kK8u(9S3FXGX9poh-*h z*sQYsl6c`R<%2RgP%v7%(Vv}6=f!|7MBXn)tXbCMpn*XFI8V;38Rvjxn)O;H1}7W z&BmmPE*v}2B-?t6iNw?T4-Ngu{>j_|sqX}^lL=;?E_C~CnsudBeKsY8l3Q-Nz}_~6@+9*Pkv4|9Ue&0ItR}l|`0)~j`6d0!g&k>_7AhR53B7y8OM{T-lTn;SJdef3W)H2!zCnCM=Q z`x&Nl?x*MEy~b<#dVE1q@=q5u7Op{~2;58SX9<_mr+mTsAC-s&{vPCsnKN_1A* zl*^X-9qVwDTPm|#r#?hSb&NJtVPCCmz0Ds2w@n+tUCA$lnJNy#kq_xHFY~al9zJbv z_jxU@!~M>Nwk4+uF$W5pkCX_RO___iKH^pQ0_nHEo-%15NvU+du`<&Nzhyf9!ZL{{X+xDZ;UU&lgh6Kf!mIuS;*QoNz#g zMrZoJc}dDYUWrxporJ{gtKn~0V4@<3j~<(G%f-IGLhivS7r!d_Zv_txziM6+ppFg4 zjv2+!OwGN(BGc0a?pcG`yMl_;Qz>UlE<^^;ARI%HTgnCCe??n)pERp~^Sy}WeOYk7 zEwSMJE%lL@-ETT0BR-4a9WQZ)xZQ>gRVQb3@ivT{o0BArCYv^_?{4Bn0Et>B#pa() z7y5=hsp4ib)f(EcsGcwwn-oMAd{gU_^I`8=3V%TOn9Z!;^zTt*}CqF|_Q9|RJT09FhKh3x^|89ZDQ#;-TWa6;R?nFF> zYGynG`*?ot&d*0SPj~xYF*R$Rvm;pfx46VsAZgEg^EXSE#a{aq!IAK8@LmgM;!%SR zBm9NKL0^_N)1Q6_b;#j+S0IuaEo6x!#DykW8o>^L#ty1#1)SlvAOTHxggO}hgZcBb zt_VaJL+}Z~3(ql^t`M1XFnNhfcj)iZ{I&=P=o7FlaQw>PZAVXt1BAXITXdxy_Dj*Y zVPp-QE-Y?l@Uz}_9jE``f33_klZFNE?qNEfgr) z+Ew>}_>~wEOG2CcH6w^Cf6yXG-!_B3i9Dyp&r-Ll3@`dZ4KtS-ich~sLu(5_8I!;o zD|WOf$rI`@O1_xayb_WmSv84#XMqujI+{aqCSTL!V$ExZ#!FJ&pCawnER=^AdRQ84 zX^j4!7Q%1)dHRgjEeqRgc(Z93H{lX=ba~jnTGnlZpVfqK)w-8YC|ZIgNPXe2QIrgF z(!~lE=jbM39JfL~^ZfkVad~o6y3vLV$(V9*tpJi;1By7-8Z#)iRfBrTPbydz7n%wpO)#CT0jr&rmtQdH zg1n$H^P4TU-kWm6wD!I*G~mk=s`utGMVF7A&X+J?%8wz%awEsuO`GaFV$)e^j~b;V z1}+%&CVAmqClVxZ?>q7qfmnfGy5p}*WAg1g=dTGFn-^G#(|cmrtv4a#tu{U%F|oRFF_IJSTNl7LAdD@JnVZ&LYuj_uPMMM}G1}jSg>F zJGQSM(t5?nL&_*mwYz&HoOHrNqbW%850u<5l~-skmi~OCi1v_7(dSE^&IZv#b>SjY z|BY-|woqA*xe?=D{5~qYS$N4b07UNNfe@1Fn@7+l6%F@u-#ep;DFfJ%%wCHo(p2?V zgjj>)>Y-D?xFS&FqclN{{C#^rZa1bC8JZd_MMgibxAKtck7LSwmazK~3U)?!==Ym* z(0TBN2b$Lg?|x!E@=BH%XrBYE)m1T9k8FTtrQKrF$mbsV)}YU^Efo`6^41=7d4aZE36!b5lF_|dzYVYiz&*#ZDHOOJuW}( z1A^Ayop}8GpUFbYmBL^~VJ;|EsW|8Ac{iD$cOWqOr{O61pvd^oJQXWMjoxm={j8O} zu!wfK5Q{E&(Y725YX$$;&VDkK6#6$fPt?|KX?Cr9Y@znOR9gDCa%1?TZ}8R zEnk&|T>y2_#bN5B$xD0&h=WiA*i77j2pXNe1tIS8Tb; z0x-?U9F^S9o=6B9q@XkbE5}_E%UF~;ZQvUo)Cwczg;wP9#6pRkvGh35&DCgxGPVo3 zlsW`((PHu<4UJ-3jHNieselq@@fRUORa;YHP)U#} zh!kJz8`b^)!>H`Ka6zh=1DO-x}a5nbTP6Jaw0aIluA%7Wg^#9igZGP$Yo8W%?d((HLW zw*&r7YzX$XU7@B*=SQ)&mMe&`a+bG4_>}H8c*Q3zy6G2_&9PNdz&!EWBxM)s)@s>N z;5>Ls@h*#Y?woXT5W}`Ig}8lXiBDXF>YY+JX^UC4?gfzb^%vBx8OvUt zqRDQ(RO>75Y$9<>m%_wYk>Odek9&SsH*SaMP#N|M*VpUg4n-_6a#OK)6qkai%o(Zh zA%!5ke@>j3VT(4_E7TF2I1-o8u)8Yh&5JuewJ8b!hh2=f9ZfP*g&87EOUU?r_j_Q( zT5bQw)bVqmu)FP)mKhxNRT1oIY{ca;a8Oe~wD>(R*gIvS<*P>&wAkC2-b{OHROy!L z`dFeW5^Y7U9hDN8$qRD9jFMe^HwDan`58`1#GldH+Zu;u_fUdeeHL@n$d?nI`UhFr z(@vpx&cbaJ@==(1OqZka6=y3XFH#-I<)#f!Z=WT3GgTdhLAbjUAf>VAMBqu7&0f~b z>ndO_V7*hV)mlo8E}7XZO#;h*SkQqjeivm}5B)@z^Mu4sq46oR*W&T*jbvrs-$Q|C`2@JWGy-ko;`ektrg=yxtuPVCxUJLuNfuZ)PApsj z=@$}@csK49s|fdp4N;tgRoYX+dj4yzlLPS>+Ra_ss%|wDI&7v!3bPXmR(QoR>$TFd zuBcg3U=~J?5deb7!XvkBMRS6Lo%+z}MTA(-#^Y&8@N-R#< zn43*peDvy{?;Q&aw%aM->MIC9ff&D`?0~h9QDm<|drG|76YaP<<5)IS`p%mZZ@p(I z(K&o%Xyr@q?&OYcz;>xU`w4|$URp1t_C)R3Ud$F-Ezh4?I+-_@3^vt^n>AeTGWECA)oS2A5tFG#5{6A(~> zWucH_a2;;F2#(+Zgb?h1$%r$kMPOsa~#~04} zvy=ioi-P{a0e@*c(AENYAAYtp#PK4o!1fm%o0m5S$3t zh$nv3#(+#Wi!M03S1KJ5Bx$uLkG%AGwpbGV^P29%@0YdnHJj%4t|r=v*Lp93)5s61 zUwLsWR@vLf23}F5C77eA@Y&8x*+8FkgL{9DT5H6IsDpMgd@pn(;{hIGXp>yT33;+P zIkNHCwuk1x@eJ?bn*+=Pp#peC$ZW9Qb+E5^YyjT{VpraM4mKMCkGqmM$TKkg?QsA# z)F~P4!I@^Z`Af^**2lIOo^qubolg9QyPL{;6!+!omwU+nOk%v{2&Q$J=f`wy#iudn zU(eAF%N>QMtMJG{I<9uc&46Dobl$iwird%RLpNjuR2zvr*{EqKGsAsbnOy|7-WE2`{5@5u|TmWSl{ zukOH+1BpwN9HSSr-wt^kBG$&P$tmr%Ex94Yyps6vms5ruywA8&_AC_BhkECK!FRNq zF3F;AzMDQg;B{D}`KqFMmC@pkV;dhw(%FaVJE&r4UdrqBgKpuV*^MLRkLW76Ov)_^a=S_x!<3xw$#9GuF1YYtafDds*|A)xDw~6@ zDFYwk??+z6ZmVf&f?e*@z*75*?#TNO&zEJH21tU2^e4*NK|8|Q^Cp8&75MC4E-}#q zdEJSpvMrp1JCCVG)wsY70Xnr5@oE}#dUhMff@mPLlenvC{wy}j%l_dge#6BM?9c>k zeNvqspXW_X)>XW!$5=Q@sgLUIHdye80qhz7c`Bth60{XYWI zy%NkN=~Z}Gl&DEa-SZM2jQLEVkZ4{kr{71)uYz%g-^yRj&427O2cwflGO#^7iA%8b z8h4188_u0@;~e*qGI-=4Ia1N7o6fIHved>mn!45J-Tr-FNS4GQLex9Z)9u znSE5bQ^hDZ`4SlTx4Z60+jPeTak8PE?b|tdwD z+?1ZgTbMi~v=8_9oqty16-4pn0x2Cy7f;N5M4eiN9+`S{zq{Yb-bBCwsH}C%CWZHQ zT^+uxn2esiGJl*P0ZAv9IbuO@flrTr1OuLq&H|iSupL-FOIBjqo9V9NQHb+TyTyQE zLU1=5^y{HLp4>2!NQP1k_Z|iZ^~6WTP^xe^FuJ~+hJ}w0&CuBiJMD@^A{noHN#wCV zJ~?4Ol>SU^yk;~sFkWZmkxAfvh2?X?&av-%EkGS@oR>~MVhFu%!y=PIlm47>l}lcV`qgQwU6g9M1fy@z3 zfMTDJ&D-QCD~&p|qYfJ%bH>;%3~N3h0?v_dXao%%b_H)>{NSpwY~Y>v{^sBRHuC1W zvF#w=Q*+WXP;;^n0Ba1;@>;dijkd;OA|iDn7}$3LLidVjMFI+GMf88IVza=y*EG_w z-CZ@U*98ARhI)p(~7@c3vx6oBmqo2=z{}sJ(X;JL$_ExF9 z^bueDSE%-hw44;fK$eJxwpXpq9nJ@*?NS7}$d4l=GK!};AutDMn>2sv@QJSI7wfsySixUQ4tQFVL*KadL`3ebx z_i<5)!M-Cxypn7Jw_Ydwu!i*dDQqEa>6-^I9oB`5<qn-QdD`Z)~+3lJ;za$%+Aclq}aUrr6GlDn-wDbAWJgVx}r$ z&7@AB-DI-!#6Hd52bkHO<=Jc}hoSpWC+I%-t)8mem#)Qlv3@)>bFR&K*`XVs^9ZIDCsqn!o%ZfB(okE~vBac}zpc%d=EH7@pw6R@q&}$j+QO8C0IJ364sUIsx_tRUGfY2v@v=2O z*+tiyH67O2Z05)Tltfx_VUs79Y8EU^GKZ~k6+hoCORJ9<-;J(MTO^?hsgKm6!90uu z&7#*sv&5d^+Gd}Uf)RIC#!)t|?%nt&X_V+I7HK<&UvB&4#l-~qU$8?AdE$`T_(;d* z852#xLtT&qE1oldzWA@D-KU-31%Wtv?rO$u8bSh?Wx-oFP#UA&YHs>ycTH7?GYmj> zE&f_W&GbvcWbX|n0?tXnybmDR-$v4lWBNpdfu^b(bMublOUs=+TX+X8FQ*N=g(UAT z#`z6Oax#$j<<8UB5proJ3?nQJ%&TB6Dqu;uI2Q$a&|=gKX>ovU<^FN#`9bo z?hd8(M}~I&a>mjc6wl8v%Wma&20WFeBiD~2ja!PZUBc^Y^ZJu{y!G8*V1G($( zGyM2>>=^iP2!uXw)COU8a9vJuaw`oPw5Ob2LDjSaHmTi;rqnG_<5l7dkXJS~Ie1LOkXW6ZS6B3vN$b#xvleZ^CC$I z`gFgZPS$L^c2)lZOFK!fAEgRZ;DRI-KMviG@g2M3oi601c6>?RQUFg2;1IV6bnouy z(H|HOmJ!u``7Et|fFGUuKy_cE_uL{XF!#aCt84@_!+`BxH-k4Tf`IBxb&2O79nf{u z=w392GDTSc`M@k_dmW%CF9~CA`fnF7MM!{Pu){#eWChdj=x-QDby;g$* zz&*`TB7>3{9ggu#P-q}*V7h3@=p1W)v4u-tJow)9)mP?_o9V>iqSe6m${SVD4brEdmFJ4_qDH7NaUWk>5oQ#?+i z!=y6=gYF=b`5dK978 zV)J;E@4E^6X7=u5SJTWS(`4$McJy*2^`-ch23b!s0y%Rv=Nlp9Qjw6>g$)9sJJ^G^ z#qz*yp$!~w)4G_(=6tG)tvmrs_5zr+VY-CGv>oVfH{qaS${T$7B6ia6@pj|6flwaF zZ%p6sS36yoe9w@q&dsNzj`Il+h#;XK;6gI=(P}lK(I;2T`24ItP`8+Oj&^b~6HtrG zMOhbdq|xG_vq^-Y!&z2xOxt&SUoTe7jwV`XJO9v}o^2@LZSq)Nn=jC(^!wd;Pp*}% z9vvxR(f@%hZq-zs^Y}#Om#bCL1)K2HMz1v?!zr>4<1~|yi530-*gD7V%EEQq#w4|#s+c!$<5y=-vW?J2;Yap@@421Ugclk*r_U+8YBb(G3B$^oc{Zr|^CXEUt z2fS4!2*6}3aRSXCEfszuB)C?Ha%Ox&u=c&uQG_CjR9BzVTJwb0ue-{IB{{vXbEkP0 z?r`AwW8>h@u}Nle{>yjEJzLIkpO$W`&6+SqMpVd2gN?_i!*lFr?EDo$Q*>_Uv}gYv zx6YP~r@R=-NQO;?f?)9bFlE{jL%@6LDA@AWGgjMI1lxHbv79`nMw(S}AJnj$A$i3M zuN$Ob&Sei;dBd)s)O^UvJt%6)b*9YUZg*p5wq}wg+Dt259;YErQ!o&&pb3$SQjx{E zZEQ?4UeGRuWUYX>uGg*A)+utLfo%A2mWFtHOSnfiwK`-H$2Dh*-j}(w5_wF>S?mw| z5Z~WI_W~GmFN%p9D*UVAyjPy^jA>qvsF$u$TQ={eEv&>lt*M)az_C@C@3xozaiW_I zNg%@BOTh?XZA#|9!~--j0d5 zc<}Ide_cuHd21z8ah+1g#cs26RkRyFqY||@@P2~IRIzE5L-}IZ<_)B~t{>Tj+#Sxg zdA3$kr!ttIc*GQlFSt!P`4>hAv{aa;moMd?-18xE9I^jK-)R-xwzF4rfF;Jbo9a4k zjN7;iQSO%$*QY!7c%OgqOf->U{rh+one)_BHovxA!35ReQQNY?C%Z3iB%7;X8b(h4 z8_XR0ROdmcu=2W8cHl7=W)chJXxd4bqEb_}nuDI}wKe8;(QHy7U}RE;C4R)9Aldc( z-;40d6XBK*>$gK5757 ze7+{%hkrWOax{kv)C$hdX|6Lv09*3zOSA@;!nQ6S8?^kCP9Qco@W5IH5)MeE3dVfW zmMJ`>RX|xTrU@D&5^E+7oADUrL(yu9DhZn4*xDSHbl};sbvgL(;m#X>%`h`$er}Pc z=IW%ckjEIc&EFUBm6FUN(YMa?{k|&%9w-<1PPZ6YERQDGt66|8SwP^@a`+(C48Bkj z?B~MoV~NY2f_evg&y}zX;r9aplE>f@i@mFVI7Ad|A1W^H!UL#Rr$P<+#<+}k2eJv` zS4gl|1A<~cMuqMiM+Z}j6-v66T%ACV813REg~hDs@8zECe!MBFvW z0w{9^myOo5Y{bbB8C3o5Dv@u3k6tEH;oMPmhf%g-Lm~}wQ>1W z;R}+kx`t7qV8SD;NIT}vJrjSfx}Y&=pVl@PuNSA|mY)gxkTg8po4s4!;NU_xQnWZG z%&i)(lKoZ-)Z>Ag)33>{V(fQ!5Q)f~a=#YXZvff4@&=Uf9iMlA5hlade1DVkW=imA z=!Ee?Gv}aHnk$>;E?@}eUO%Yxyy)*Jkln3kr?88L!BMnTstkP`SarY~h|B3*RcS$& zw50yse6D7OAad~~ok+3`l(ZFuyDkZvPMWMDx7u7nX|uZ9at@i)M0r#5eurFhyVO2H#zA$>1#!; zmxvlzLQ>sh!XtgO%IHc@@e4~;>ty&uE_H=h68lptX#c5v6i}6)oK?fpv0>HId&&Im z{e}=px)7pl$otzw5SY+TrzEq1Y{^$J* zpRnhA5=w|Je_}kWyzOouReu?7<4yXzPOF|VtIDg4xZ`%q1G$US7JU~ItBXJLds*RZ ziCtEuinD_=W_`ihdd}gjjQic(LZD{S%JcPE67Vn^iSX8ZIb4YU@4-x>dc5h$x%P5; zbj05g9qgIH&?PD%P zz{NE}NfS}u)W_;1JS z;!l`PgM~MA2l&W9k-kfkEQlMzb{Sd;K2Ma%8@ZY0@=m8y37~|n8 z_A~YPS>br5U336pw9UW4(Ye&!e8>)s;|UsI`rVVpw8d*<5p)rTj>53Ujv}Wl^*~#Y zi=2SS_YMzM4DOIk%pl(-U^o8^|JV27V{V{}wWkSC!XvtQbC=A36fXY5E-vAsM0ZeG|WVvzUg0sto z7tiNrt7pccgaRnvv1an`_V(Ps@AmG)3wIP%XyjWXOKHocvs1O&upFvDlqdK0xg|oG zt7&KY40t?In1%L#rF^Tt->BKJO$-%4F@IKnjz+Km;k4AO-&V3#83FdYyK1 z<}d)y3SmV2x7BLe@5TgDOvQZ-_~m;NSq^kfOWhYnPN;^(mpUT)lm`=YZRuG@$l8eA zhaOFqrwWR-$I4#Th#p?EiCL|n9aHFAE}WRn>+A6J<>7-(|JU%G{Z*~?ShRAK+(PvA zDC_rTc7J4scn>Y)7uY89N)o=#4*dh^d*$gp)~2R)UcGo_1Jgp9JzBOP;*GJ^HMQtH zT0D7Jhd$aL3c4g(F2&Z27`WA>dkwSMDh=&Vr~u_4;zCl`gz%2DjEcioVANeT2oe|K z&`sUx*en#)vsubx19>R^_;Vw9-lt_64DKevj1Y9jt;QWk*Re%r?xmxqlQ6?Ac`D8* z*bf?9N(5^+W?c`74KDf-Nr(+<5n-@~dMD!s920b^FT3D?pe~l4sUW&2HQcuNKLL~b z|8ZSi-xmBySDONs>8;>54XK$C{>Yu`8X%qYyz=cuRHPo8OtjL^uQrMSSMsUy} zl!J^QTHsUPs0Gf!c;e#(5skKMJA1=ZH}FuJf=II7>>Gxp2xMDPU|%CW7g0x)KrT^4 zS6T)@ClH4FOocU*lGPM$rToFJ*~lKvaX^WySwSX`@!yn#MSUR{^$Zm)#IwduF zYxEI=^@E=v)b@yiOvcOh-xEUCZ#1yrqZdO{_<0%qAGk@BxhxfBhbtRc%uoWcO8M(b zW<1VA^fkQRI;VOR(K=)(QLCZGuhQ9pL@AEaj@Udodf_-OBHiF_1_@onhN16-WGL_^ z=+@OTH=)0<_B)g;ARN;`8wq5S(sHmk0M)@MRi{*P6nw7^!Zoc9jc^?CQ{ze{oE1_k z#ps;F^(Qt`1KhZ^&evzrFMEwjAg`^<*S9_FaW$wIsiwmgSn?n zvw-C_e*1~=8+1cD&UVmu&z@&-Nnfk^u&AXp=Pj-vV!ARHF}i8l)$-b-aP*PDDxUw3 zN>@cvod|!leyb$Ri7~A0G3sR&f@*Y9v>V0cw273=ROo*2-uHa5wWRX6ran@*PY=51 zJFNiL*U1v7Zik20Q`UYG|Ek6a(fLUxw(oPv{&#K5CKXb1u&S`dLMsJkK&sktWo4g? z8Ja=ByND?aw;yIS`NR3rZaL}Jmmab6Fx-HFKc9Hj!JJsAyk#Ys z$L+L`#N=LVUqb2WY-Q=rj7*;&_1gD&o$Um>X@X*vViz4Quj)oBHfEsO)5ifShx9D3FX2l;qS}Fgo4*hA4A182sjTr|aJAwA^GVoIdX9(6 zruNrvPFdS{Pw8?%li;%o^0AQ~2bCwcCik`Yf5Hxr;a#(SRNlPQZYwE-K{L8ab!N)V zV8K`EqdlW%`~L5&uUxZ-_j-S>EfkrmWy3cIpnF_2?a4d5D>`G&CNv-NDV;Fper6g# zQyfe7jmJd7LBBvw5CF=$<`vxD%76zx6rN`3M7Hef22ii!M2$$DsKU#G7WvQ2&6M$a zhCrs}H?!PEP0U=}qATy;jx|i!nMpmrL$`(lULC;EC*s!&m+b4X40^jm{1*s>w_YFj z?#y6qfx^LhAhq0F$i!DoV1|43#C@;v@!J?<3SGs1VBMW#GKO&=?;vAk;-2hRY{en> zevWEicOpJsbzg5kygFbP;GCl;)G!T7=7y`*4%G-B1&PW8@w$0oj{_^_wVI@9uheY@C6s!aozf7t<^oQ;1~I zfb46+c#_`^A{pWV#Ui-Zgt1BFA%N@o7^09npANn&Dn&Ohu@#?NLOW!N1@nf(p<+^Y zA9ceE$qKrIK5|<;{T%{>-s+h**E={ zm{iHPK6q<%0p>H2i+gX-y@?QVt1<&Z)2$%)D^#^d2$szt|AgoJV;0g&M{1ntX+@iFY|-;AV#>%Vg|R5de1SdJz}&`qt?RODk+Z~5vyYV8cUGY0b=q= zx;4TP5o9zsu*9DTx{Rv{jSbM(b12K6skDRb`xTCt{h>o9w9`jKL4=qvtZMR?)ZgSI zLcp#C1KDzruIQl@Jrj1KyehVuS1h@b@BWKne?k0g6~2=yN-Tl$ghWJDnbL2I22wUt zDZS7^=dfWyQ$I91xK`4>l0v~&r4Uf_th9V*0RHgCA7|`D^#WQ;^1ecm!GX~O-vRgo z75qD-GSCc_^tGE4{fKa>^(O06%Ug@s-k)6*+=!)j>b)Aa)KmH>HI=ig=0hFd>UT}l zDdnq(1Qf^_*3Beg@Y!D(sbBMKhPG{p-pW+&l`f46UXF`7dQA^Sv6oiGjdB;{flUe4 z<+*=1^V(_cC6bE|q22HSl~h0PUB&+@bd5@$BNqRZvCx89CPYwDFJ<^VWQYWr9E#Q&(f z=Wjd3VdV*|Z4&25uMrmhwpY|w-cb55Jd72>Q8 zjj62T0c<0m7Efsl-kR>QNXxP_goGon{QRXN-XT?9w8&sxPj?rSo^1hZ`g>v^|6yq4 zZcv*jvnNBW-Xc>qEpl1m8!)g$W(=%iF4Me-hNM_gqx7q6mf~un{QD(V(1azSiwx=t zrT=%ZIjc_6-8a1RM3Og_(%ubKmM;!!6FPZDVRTaPJTCJ(ckpa?--5$?elATm#u=T-#Wgxhy;sIHT`#@9+_2M1(^&TA2faGioLL~ zJ$D|KKE3u8>yS(EZstd)S&kgy(7^0Wf53nN`TxK-{z|1E~!gbx* zhcTx|Q$jB}0eDvBmBmWWvYvZq>BW8xNbgF5K9TK$*HKhLU9}nJT1v;bWlRr&OsB)c zIl?4-GP{h=!+C7wkNt;Oba2yl@8l6=UntvCfXhS2(uB4+-HsixT#-Sywrvw_-1tcW zI`ZIN@>Mpij{UHrn}l%0+VQXzbOBowP|+AL{rzq0=gHHjWwYA59KfJ7QUtVu7 z;NRm1h;8f4PGiV-tXLawfF?o1xot%W7XHT0;_KUz`=TfOT5P>Pt#j6b z5dU;dm(^RA95TtEhGg>>{$?M57=`0vaNjNZK=L%ln<4_c6^I5rm9{wds3)!XPY}It zosyj*L{5wq!$B5EtCNkwOIjM8nT*&h0*mhCgsm@bmNLXfi$M()cbd-GyFx}wS-D|xIWSok`(w!h*(G+xvtl-#N zo)Ne+p+q!FF!`eK6q1Q$dOO%VlZq8E@Il1S-mo_(i)PRSxOOVJI43`~Ybu0_lG)cB z48h|3IShtaWbVjA^x+<%0o1^hgv)=MRR6#09_~*=?0PtaR2K-z3KRSs{2Chbrf z{XRBzZVf3G3||P=kLQQK5Y01TCLl{=?T4jlroC`sLP#;P8;))Q>T%uE3hXCXI3({W z&JRX*&NH5I&`;Lr5t937bd!Qm)bI&PkQ5GU{dD;bO7zG?G(I>UCv5N|simK_H7AiR zGNqjQSPq>u$U|%VVauI^V{os&lL` z<=a`pvy9?uS`n05L~-G!_{NqeRk{f#kqp`1ZkP>CcofC-WK6%yOyUq1*Tf6|E~TpR zYD4ee8?_toxJVF;m!~w!M+|w}rP!M4rCuV4)ggX_#?Tn~2xf_BbAj(hGTP57hhU+= z(<+t!q#~^`oK7^rCY(D|PbhIj;q;rXX`T6nJ8cF}530T-+G?dR^m4pc`p~8#&MVDz zhd|R`U}fJ>n`L}QHKiuA8G+@h;;@On_(pp{NKfeUP)CQs`E-w1+tP$W8#k@ZgVBJ*hKZy{ zL6hZ-)6DD)qNK`pZ!SsP8>I6N1L!`@#~%9qUD?wOc~|S*v30l;%OtlBZYpK#~AT~K4^f3?Xh0U=TsyzQZ2ew4Dn@1~M%)@)c~qrpoOUZJl;AO}A< zk6KcfyIC?eYhL+cscig{6+d>*Sq$u*eerC*zJUP(oPwEeLQGZFRzi-0#e@ubm|oml%|3tR433BDK?->1XM$s5B-b{7 z;Ki$pFPfVB)8=hYGE-Eljm;H(nqLRy-*nYYzrS}*g!ZJ!zWkM|qWg#IYPedjcQQJ{ z;{dPH!dcm{63F@-Cz*h50`wlOlR0`1`H=Bj=~E@fjNF%v$SMRVAIh5Nd-yxiD;!MxbL zZG5RDAid2g?L#A`Li;?MM4=Fi1KrrZTk$Y|$BP$WRVn*@E2zi7-xGv3pOSFA2GdlZ zfLFjw2W>FBaH$XR&9E;E@LVw<;tR=;z+W9QdGo=UVT_=jJxrj*Ns(4yDUzY0$Rb?V z_7s=UZXr0hYuLOn<_aD5KX}}*vXBi?w$FIMS4D#V(fyM4bh-Rz{8YE#|3an;N_Jh0 z`W`jKLd&ozr3P=bnU4=ra=~1~>BaIYtPw-T?rDe|m?i5$$XkWyKx569Vc(x%qdL-r zn_w+5Mb*eJ=MW<~XrdKuHsFdg28at#Qavm|ns28)X0Hf#A{_S8$WFd9YSG$=`tw>* zyAldPHZE=%m9sp9hXd`KsGNXqaCt)I5!o}Ng;jpJru5-ofe_{g3=GUUa!}C5@80XF z$KwXqkvB$NR^xyVvL7#q4-hs$2~PV$HVdoCc}x>|brcdGTOsf6;#Ty@<7o(G){QyS zY7z`4)YAr$lOOHrnu;qlOT#dNO>{RzNbIQy^YG!Uub^)Uu`O8RS^|~O$wIIISz~WR zYUrJ%p~Ak6x0MC0NB%VdJ^bJur**-EcMoyd0*>9f|4xg7Lu(r#a7?CzrqrX-Yx389 zUW&}VT-w`bmDhF5t;hDv>^HzBUu`{aS$d(Zve4+l$(JamFEBd#{N?)+ZzLqQ&vx;g za<+BqO$F$xXOwYRW6Ku0luQjY$KFtK6BRt7RbDb8U7xv89_oi(rbHNAUU=wx2f1rB z`W?QL^GbUBHw!2*uh&i6&Qd*>_^kcuPkIcgWUWrXX>5zFQ|}ZlW)U2w+m`53dws&= z&AYeW!tiu9n*8gn;&bLVv&4fryboOx-pHy35dF#!Xg`ihbD~gv*>W3<<*i1$r5+RZ zGO3fFJ*C-MWpk@*N;`WVnf??m%^hD1)bGG_KxKHYT@M{dshf|PPs^kvWNwu~{Lm*C zr<+BvMYm2*)Eqil)32I=_NhnHg>NOTWZz{xt!t-zE)U|a0Z>JOqgOaEC6w7bANNa- zxwmBEAC0*je4vp|u6#Fv2!moG@ekNQU$a_71 zJv+Y9`a1^=tJWa_e5yXeX}>JrS7H05$eYtlwKKIfUuC2&@VQva%H*eG-%2R;(rn>B zT;nW6#IxRs*OGE1?@m6s(Q4Y2$JH~FHq9q~?NV2WqLrElJ9Fmmqo?f#$uPx*#1Y(y{LrTnG&g9jlha`;{c;SQeQ;j@N1hBW~$fyjfsMiDHB zc*t;8%7!T*ETn>#g~eApe4mRukM!*;{Bl=6XNtP#_p(c?=F5jp%#$bgJ-RCSxU$iN zcnSCwX(tiyL!m$`c!>(khpf^!p@1QCpuv=*L-MhA>oemfFDEu$|2%xIJvPW>_V{Lz z^6lsLxp|15K?}grp*8z#aj1_Qh@QI?m6z0=nTQZO8GDJTD)O~KKQE_?l-!viauCHZ z&+g4SwConvjZMaw12i*GL84-zY@{!#=}A*u60yn;;y$0}&Ei1HYTP0*Y_J|0!w#Y6guT#^a4)PM@Za-PP6PYENv0)y zlY4Q@FgQH;GR=1NxljQF$xlWMoI8koVtVfHmrSJ7&9eVS+~1xY!85#D*6!IU>5_`n zR_iSqNQq|?s9&+$)p}a|QHn02N}GwMR8^7i2lw<0S(p=c?)OJFixIXIgxa55G6&>A zjl_3*At57$HkJrnX?rX}1}R56DbXOtajVywwCHS#+Jn^Pg{0SvY8bikjRm9S+)+Ij zw4MapwF>0gvHOf>3aNA%7B2PEQPy~R_ZjJreJ9b{8i&*VaKT%8#k~>X z)`Qd$Qx!xl+NrqXR2VO}GkdD4$@E`NEZ3Q1V$|T!ak6ukiJ|5ewmY^i{R%`))=$CdY@PY6a*@X+^6- zQDH2Lu~wSav&0!Z0wVh7(1d>3V@}B`-#8~-6P`I71DJJ9cP9(e;tKJm#O5vp(Pw5# zDn{P?O>uADL*Q9NDOX>MM)mw8U{;}JJTIkLW29?(Y!N(nrgG@fqf!YYc+u03s56_!0+J7`&1ywqGqhQ+l3Rd#K_#>Twx zwrjXWuZf_AArN73BPPi1-p=yMe%}9wkKBB#S896v&pXDD!Xmp&FoV28Ck_&DQ`ttn z4KVC{;JrF4U(>Uf$A7v|LqomE(# zIBTlz>X9zE8y<$9NrMJJEIT6Up()~Q~oFem${OQZ`66tPV%=;Lc<&Gpo zhhs~kzXj?21;i7R*Af~-B=%>bTK9*HsiB1Y?RjM8;5HR2wB!J#`j$&&GZO#6dp_8EE)0>`;<>eMHOoCX`EmYHM&AO;PQ_dO_ zu$Pzd$#bTBJza(+f)sn8OhFn5T5E=-Ua~zC-WS+~Oc6*+UABuYA?*`d!YC=NGFiJ^ z+zA&*BH+-iV;Y1N%&&GlVl@}kffhw`41`(Tg*$Ql7gPK5o|<{%+GCl)DQLHeB}4D8 zAW=~3uhZMR_s!)l!#f+&`R=PfyFJCI7;sJSmn?X0-xDprHgE>yKglIc@1ubupdnuV zB}LS{SusR8vP3yCqnuAW`azvwCpYBA1+yw36wG!-qnz8EBLq=um zLc}v-iQ=+1QVD;Ru-@Eyy$iCfpwzC{;Q3Io4GM$QHLxYrlT7__?eEgC!(AfETjHMi zUmlk0Te5#(lQ1WweoBNQmqlto>lm{xPvkJW6MwoIPu5|-v<22_e>FC;P0bUusJtGQ z*(F;%?XHdoS9SA4F{u&45R4p~4L#FzFe4?!$3I2dl>*5xoX-RsI@;sjDkH@t?R*qT zBaA{DqB?hK2w;;-v_zuVJqRl~i@Zil*rCJ9WKIrNiPDTTndG4HV7nd8X05^>jmMmT|PIzME_H0SywrIPnOtLT0=p4(2aYe zEWkWvR$a7B=`RoNc-IHnD{CCT6!ou1)sbUdPPX?lhDl9@xqpKxxoZr8YD6hUriFx7L1zI15 z>*b+m(;WUD&9AOm^KIP1PTUAKfZ0BTt?qV-o~i_b_9Sh@adJG9=%dR^PrHHKi03>y zS7pxSg9E>>W6S5>FhzsN!hp3;3jwlMiKwkU?Fy-p(A5x6=-hgf!wbU)S_G{QSAvxq zC}TIJ`ETJji-H6UQsA>D5C@wv@^+|7qR^Jvqdl*@%NW%qz1UkLle$XV2auxCxqeAl zdFaZqF>aJ2bV)~&0rTe^Plz03+Ac}xUc@u7O7zw~{Kvr>_Zf6CHD4A{K0&OJjHfj( z3OM;OWW(bnV|WsnPJWD+P+B^M<&AuEEp9t{=xpTR{iZShg_D@T9p`C|TsU%Er&0kE zc2~N_H$4$6g2!fr^y`Y=LwsxPn?8&%$9bd0J?YcZrEgR4lyAVWC5Q{Eg=Jqndxa}W z0~ch;^t!jmVd!##=OUA|APtT z=Pdm1zIMjxDt-NEX;D1%@X-JnQ5JUV{9nstMC3IS17b)xZ>-K(h}?g8<2)-V-44k8V+g!S8+(NRvV!%SpNWCK{KowlnTP$Hz+$16VH01u&hvuqiF|q=M?eT8Az@SASj{u($x1^QU$)w^->kK@P zldaG>0%1@$Z9quY)o+Xz^la%sdZXHAZz3QN9gsR{*Ecw|Wn3A8Fhg~+9VDhP%{Yw+ zYhu>cM`vY>!RPSHPBiNX<-D*U(9briu=GSU+YXIQTC)2FKjVm&|54Usp_`-U9bsF7 zGT>BI!YkitveS$&h?5*3x+c*;@NEsj)I{(3K{>;mwZ80nDujnqB?X`95mq>1oZi|d zI!Ug*zOB^&<%_l~=ADx=o9gi?woa`NWwI=xvne(XaIMyR5Tx%1r2IDv=n7ozlat4V zI?VIx+|3r?tFD?}Y>T7kf`amee8-b6wV5M`TjdLCEqm?_lkjCU?GAN;ry;akG9Uy~q4loE#|E-{Vjt4hHa<{J!`Nv+q7 ztYmOPKTYCkoOQLJDJDC$NdHj2$~#W+m|U`L`^RvvZK37XccMT=+<#8DwZi-q#dm{O zVy_4M7z&rdQE|n_0qTDR{|(FWKC#WVsGeC4rM#> z@!rk$9Baj&?=o6@&V<=c*?ANVr@UjVzJ3+;kt<@(;AY`xW?a$Y?v&c{FPsUWafdEF zqltQmn6>r|W>OMPMebU3$?=`{zg_Q%_R}1M636JC;AL|ElzaB|yiRs{`{wfn<<@Hq z7i1xtVzDn*>p%$E5XRXPx0n#cF06Y*3Z!j|IUKR8j(d>l3!S=!5K-`^JMYcbwb4*j6-($G;5Qt%#*nRhhT*Y!Dwf9t8U#}Cz7Oc{Ad6m6?2~=siADpl2zFS&Msln z_Qq5Bx>PHk3_AMtKwNcr!>^fTavC~N&U}m)K-b3v*s&;Xjg!0%6i6qXEIz*7zJB{E zS4DB<8|C1~E_EjL7mGoGdKFKEiW>d@62_;o$l#7lKR>J@5wc`^uF7U}E;bq9{sy1! z3_rp}f&N1eaUq>O=8`G*3I8mh3p=nv{05;=i`bfoceJK0IS5t6CZD1paz)V7>52uR zgD7HE4E>ZuZ8z-v1>uVze(MQYKYPFnmJF?z$FQ>>^M)hu(D;kxf>gZ#^LjmJfJrhL z6y)lWGgP2~>>WAwTfPkE3nSw3KS%eP^S@J^^M_-9@*Kx1&&Q%=_Beb1J>n#~Ih}{P#tD<4ps7nR0ejqMx!EcF;>YOY%$>@vQja zpibPS6gNrJLU5a^K`4}26xEZ?vy(-wi|bY%^VQfE)?!-T z-i`6X7SSV4)GxKOH$R$|=^Z4vB+uun=vS z12OjWEa^?(nCY8TM1~$ZT;pTv)^|NGtscnwXJk?xRIuzt{J|@`suKoD!;f~a}mv^*T) z>#f~*uxrOb+L#32J){-Zhv5QO`cgaAep7a=M3u)62VeVCXM~Aa&-x(=>ysB8V| zidD6&-t2JF0Z&_N8pwrSV1gQ2uWEo8>`_8agWw?HFExJw zHoYpUhit;Rj&W|-Id%AG%(ji0-@EqlFb5J*!V%o+?lrxkrOCnm8MGi&RsBacW~*jW zmFnzZU;Mb(pj)~gOXsKri6S{dT_OClh#uV~A14M%ui}csuoq)Gba$2TAJPT}M zQ!bRnr7)@358Bg24?I}nJXldq^5;(c&3M>FVD@FpRf0aRC~CF3Fi!5~^>!bz;9DI5 zv3>NJSqDvDCXDvJo|ybBk=YMVHvxadh+K@#Px%dK<}B>{N4wUwB4G$ebCBGG4Mv7vQq;~~SE(~wEQddjqe7=B%>c3KXyZH;>T{Jk;v)4*Cl^5Uc=!oscuwADiw2vX*nL4tPV2|G)>-JePCh30I#OTLN$B2vRW@ z2ldQ|d2__*w`0x>7(Bx$mJ^`~^Jva-BI(9-%{pEJUy?PK($`<|Be7*fk%~ zbFq{wdlf&_m>Gyip(@Dc6mN+d#fz8>C;}%pv`GO|X(hiOjLhmPt7%C4tId zp^dURd?ivDf72%*c|)_kngQC5Dava`LA!DfOd+3+4eC8c{S6EFbA zGMX_N=V`%imZ_7a9FA`L`lg!TF{Gu$mJL{82Jl^nwrGT!(~td8YbBxBGnUH=?ns~9 zU`8I;Q^904GU$%*yv}ObSLLCNT&61UoZ!1O5VntVRlY(w$<&BwXBB2*)ARyDZ0Nbh zvA-np9r~rViqby1*l&TFo`j@$B-nV2#iq74xl_Gdib6OF^>iv*b$U`)*8DBU0`wuU za;?x4_#m{2 ztaPp266G?5C%L;rIorx~Ph?OunnyR}mDthvlHkec?iQ5)Bx9iM$gwOP}s;=7xc_ViR7GBo9$GwGz@X+EGkZ`#rW z3+2DP25*nOKit^C3B|I;^-^}Jxptj{USc{buTJj@-+L|Gn1p25wpas#W z(>>5aQd>M2(%M$tCc_j_-9i_hZEouu^hJS10WPY3QjP|VFL zgssL?K!^)!VFq=@mFPhi$pwu&x01%&kcu>A`9}^#tN2kWdz|GOh~^8^I?&uKGF}74 z@+$BmQkaX;?Eg9D|=m+g7FQ|NZ9bLyp)Uv{G@jr5?T=OGg%Qy?7a{O?*P@*dG~u-f`m-Zj)K;JBpSLI!EE$o4^b7FE?BpbM+-G zEtF05%P5Y|kQz=jOG93MQA`HPVz)Uq1Ps#O_)BVB=|1;sJNE{?kfxaR2v68>*xUafKFUO6F~j=ACiFUOg;X1&RBwl-G!B%@U%`QW5~wjKJC*iHeG*V8uQueyO>;~u4tl3Ql1x2{ zJjO_HqdhvWrau*Y0WtFg*{Yqt!>(TvY(&6g;Ko}7FgwCbFHSWwH0XOJcB3tHvia)C z3;K3`9PTf3-6M)T3zZ&JO_qYRa$mTY6$>ctYms%hc?0RldQDK`<*jXWZ2W7(pOY{ZK9}-6MSW{A($l}R*tOZj|0-7 zdbVc<38Ui!fH1{H@=CZb|CVvt-wo_CE9z<7KR){8uJ#9;Y8CTIf^^WH^N9gnH%@;> z9IuN|ZYtpzi;5zGTC+syV>BS;=7a@FfBRaT%q`KsX^d^{6J{O;#{{; zsd!yDWsdtnjc2HNa?!677(c|~_M=zVl&qLNoc9+9<4~e#DM+`-G_()wN*uJSH-BJ` zm`$%PigGv@XrTCf?p_n@3KYu6BJH;v3=hipeOkEnYlsEbK%c2FtRN*Irm()mGO*29 ztTUiwpLEUofU)Ms1$+Xwz)4ato2mm9Z2fWecc8%wZW3RtIEb7AuUA-`3*U@NK>QT? z3LCP8k%1b8oGS6q0nv{qRG)Z)%S_ zNOmxsc^_=kt!MI!DV!wae-j7!h5sZDeDX~nzX`y4eweZ#Cm2@T7-{5*jlcv!58eFm z>La_RXh$4=0PMTD0Vr6zI31m0I<-(*76cHJxiLaeubT=MYYxD65$H_rCn7}jb~YDQ zhLjJa`A0R~EJ7WzWRSQp~!f%aL2DX1=$O3eGtDOHM!yQ{R`mYhZ+J0JISJuZcPh%{?6?x*m6H1z zK@87>%jS8T*;G;lPinUfBF}$%6aP00xVsWwXV735wdcQM-Z&o40pc`Uv6vnTQy8uC z)(5#$LAuP_5;wFm(0w0`PJ^NgJfB|n6LU#)<|tmkxl$AoHT_nVEj+6jGe5>peVi!E zDmRze3)<;qI%er}<-;1ftkY66{B+RM0Vbo!FcidbTP3Bg=)Eh; zz!sf;qbqVZz8SYooPxGfwT115(CN0gmle6x^`cd^t3&Da4v1Y^Y0k%*?rps~UAU6n zG0^&Il(w~EJ=l2$z&F++uRuo{dE=T;nscRx!avRZGfqQM&$hmI=HIb86Dxw3Z!FOR z(i`6ogTH07eo`?_w9Z{0LV&a+=*eUR> zY6xS}B!HK)$D)%);5r0tbt0?OHAri;_y&n*p!paFL00*wYuz{%>N((5Zdti?thaBt zrv-hcvV)W6O;dP$@OI~GZ-FMMw*w9;^!i`QFqP zPg4=^I(-oAiSz24SJ!U&t@L<5-MkNVOyqSgZgLCSE4_ME7e}5*H=}TS)_{o%CxSG4 zrs~K2yZiGiwP*6a=j7$H&(5*9JvshXCY+DIKofhX+-J8{t7JXNVh8rkMD#1(YQI~n z`{d^^As)-sr22qXjsM5iIYnm{ZQDAw?Nn^rwr$(`W81cE+qNpUD-|adTQ~dMwqMS@ zZ}V}!tl7ruqxY{zw&CUVg~mJ;-(a4M?(z5eJRL*aGA;JLfeGrNs6Fu5#h5Y<-DlrhR!*_7Sf$opaVj(KgqB$xmTm1Y}SQ1J7?UE$Tch2D}CK z%%+_l%g%6T#CgxRBv=$Q&Ic3&Lu|-QCTzZ%3>X!bDhh4OF;bF30ILQ#^n37i3;Zi4 zZ0Xh1y~{h1>olBxRuE^XOSjS&!W9Z@hD)7Loa4(93*Z(?Pp)EmBzW}pwUl`PswA4b znWmpL!mY&>$s^>#AhD?8=430tqeF3p2~>6yd+FP{B^-QjUHcpSZ<|?Ma?i(_vD_*K8n3sQJ~Nj9wgwh#RXrnPY4R9@G7_L~wsMabPjh7rC3@7D{ zMzi!Tak)?i+oI^Rx3{cTKTh+Y;{Q0#=Bh4W*Vj_Bz8K^_xQS$0B?ofxaY3U#rRx(BY?N@1KY=2n+YiVFR&zjk4GJZx6q|f+hp^4wA)ws|@ zz)YgU+&ge&wFwI(6WO4nP`88%QMI!twLmC4u4ppaZF5+kyXe`!g ztbSgXSSAX{G>xSTcx7jW(Y3oV&?{XNT4O$KfAXzAVGPz!MDRicSxxIe-_+^9)@7I& zX>;;#OIYr7Q7tlSD|mt{u)_t<3+;MpEZ*+dv>vaqd$N8fYVO(8NxFW3cG6jMrlxa;7EY{P!3;&5=rHe5SxR=5 z(wVfv_N>;?)$RRqhDX_E+Bw16%M$U3a8r7n-$ z5FDS|Z*+ox%Xw8 z)ZRokJDOZ}vBo>wKD%DJh|kS(;R48`?Jj~_GF8eRn%NzRY*}n#von-ZBv&$EJx{tP zEicf7e5ZM)taom0Nyi~Gz95o27rHZy(jj5_Xx-9>@K2K*fVcX*F#iu;%_DOLLCZBOU!|uh({=ojU?FS-*0-2gN2P^Bx$85p9QnR- z{ud{|k6iBaZLMgiour?{176s@5ru|*T~G+P&*V({-L%>@H$SYvSESdA)DB(?* z?3)#qrM-lf49jaHJ%^fyniwWGHt&leD?uTRqtckv$*jDOPs}kQK`=WqM=QM9mFPTR zcG8LV`}lU0okq|8C!PjW3R0wZt;{Y0^whp-?wAaQ0f&XD&sb+pi6_ruG7^)ZZ8H$6 zrG#;`riJnhMYBiC4l6px6SK^53BPcy31TZIjtv&z6i77Gzr*PXaCqAX_(+qY%rh2D zzFNP(StBqaH$AYO1QiX^|Gc2VUmE}@u5gn9Eg&!oDL}~2GNVc3lx%??3NJGk`$>4c zaKVuS`+-Mj+nU`TtPs&W7|7>AM~kta|a(Zl`S4nEM(M)-eB^; zvvz;w(_7seHV-gLn&Q!~QQ;wFsJlei=coaZHFUTg!>VwZ58!tT zZ^RUOGf>p)wh1x+L=2-^o!ZJ*YSQXGdh_l4+4fX4tmWq8ew&K#B%_1pzRs6aQ8U^w zT(JHALcY(u@8M*#Tm9*Ie|R*qqc6=ITEN9S%Ppwj80CjfpGV+L2ptcgVVEdXRv)0z zQ8R_HpHzsfeFsCN^K4o?OIi)6M}*qhwrUOSua(_uVlhiwl;l~dwI}BTqMJXFu(xed)0g~P zb~@u)D5nE8RT9mB6OpEzH_|}I)!bxZkxWxpfisEE4SuvbC#r>sb4sT;%p0h&q;K!0 zjvQdlVbLxu<_Y}3*;9eu@-56~x~X{uyVbEO4bBtLw6mKZVriCRpBEK$Hdve~n|Z}u z4wD~-*E`==ni1_U5@nmEScv4~_WC6LEco{0=OKhABd82{*`= zysN~P#Cf4Fl(n*Awi{B9M{HRKk>Kmq?5^LZl-`|g%cDT6+0ID~u(+$mFj*d~$I6KR zGFo;|?nNr_)_eXF5^SXduW-VDNV9T7qxBLRBqAf7>!a~Z7BeXAJ-QKkI8c~^6sS7n zPZ;68G^jJvrI#>@+D^=AGBvDg%Dnv0=7ZyZIe6I}zO@7bFem~$4lEr;{)2<4QoMYz zJ#(oYrNeJwI*JIs@qQjN$YYq+R)Em^F>0+2aEN5dPfSDx8Eou!bA&noyY+YFB%9RR zYpAYJ{Dgo~4M>8*djH|aGYRYI!+Gr}_2WXISpMo{{4o#yb5$zB#gB)4Ru~f;27Vu^ zMT24h+Wui%Fy!S5`1-~&OrP5iviTrzap61$8tw`Zh_nUrg9bx1MIOUhL1bj}z}-xd z!6aYwk_Z+P#=qZSr2W){u|j4gzI1i$IGFyj zDZU#)&PRg#iZJ33{dHScnE&di0ZvO=#f5SK!g596?Z(R z1j~iEps8KAYFP=q+?PEtD-0y5XUDvMcOzAgOJcfLhBqH-+K+Avr!nNQjN7~hY3--f zC4Xlm*S4m&zt53Z`fYo>MhYgT}+TFP6-LnL}PDEot(dM<_)&t@8w$3emu|+ppILj|E`E z_l7)@?E@20?ZCmo)0QKtLyfV|Rxf6Jz`zDCPH6;7oA-49xD&9F`3CmZ%$l)#_WJfx zC6Ezb)k~>>Z9RwBVV_ETK437(ZLnC2w!4p2SW|Mud_MBdNM$xHO!fZ|Gl~OpQXoHo z3TUQ=wSuV6oG3SBfWzyh<4Ev6S1Gwwo>6PsbJVwpLFlVD%p3u4wO9Z~uG-{MsEKb; z+z}J;PR5da(OR*oZEhM=DPCJDYN}EGdh}V zU@QDamgr!!?D@_K)gE6CQM3uXldR>-1ouOcblNj?ro`x+V#~|iX?}IieZ11L;grLq+v zLu`TsGr0ob`G8sMcx9cpR!jAEktfEOqaEaYK%JiFA}+mz;rzo9TlMUyH^wh`k0!DA z-_@jkpwXT|n~vKx&O&HbO|$+Aj_F}~e|}x)(&_`Le7V7SeE?sE@)MXl1+%u{_A#`z z$?(Nob=x7VgO^nYBDeqrtZ(w&>xgP+OX1s<$96)X(Fr!v&#Gu}5XKEam<>~?vi zg76K#VdyZNAtxn7>^>>OP0vKY45qCLmkA0JlOsIZXp|a2nPy+15iQ3zlgHnAam&41&d(+H2WbeG!@4aAUHar89prV zV8z{k@y($8_37LAJU;q3%N~71aqY|ckSgG$-27=fkK82+O4FPa6iD<=V@rX8nHM9B zV4PO`4aeGX2O$d2$P6O=&kYr*wV~MD<*&8~fn_O-uxH6!HyU4xD?Dv0D&)Km zP;sH6B0AOsLtGmVYcbZtyxXByqgF9O2Vk2(9x}$8`8*b)cY_?ia5VgSdC7~+QHA>h zJK-5}X>gW&ujJLbmk?GdX_74m(;P(cOn2?V4x$4;(Tf6j9$`aVAr70ThnMhvg(z)%SqR|^*ME}>T5h5to?9#oUv0)Dh zkY3?3unWS+j)3lSC-Ctb^3Q+hc0ZYrQU|2ykNT`MK$M9kW*IP{ z%uI4qqk{*$+qFtYW$9Q-?KjM{`kEds`)p_!3?ke6_{%k9;ofmzPQFVP$t$pj5O%+@ zUWJ6mY_(UjJ%BeIr6MXYsI4$R4$Uj1Di2c9fbi!)+!%U0TCR*Hlh?@!#k zE%4)z3`lpv@Om<^@KJfH1@kZ0zG=V5^ht_uL2|v@S!Ff7$PPvnS9t^#^1&}8%-HzY z53T0Gx9p z;^7hyo*u_igb5h&gwFCd7lKyT8AlON&TC=Za#a^@D_*Glppsb*lOLz=5D&e>SWvvau< ztEW)|vb}FUZ2!YN7Vlbj9+i_Rkrtn@1dzl=C=QDqdcEer(2OcQJdMdZ`&Ksk8`M^F zSgTj54ZH0Vab8J(nhU|ATKvxYQ%j_qS}dQhf%$Yo>uZC9eeL(HcGtsRlofqmrg5@a zA;54!X)JB{748in-4xeLVR>ace8+Xr4VCP&4!-K1t;)Tkd3I$nMaIjMam5&+j^&(d z@132`!n5u|m6J?Qa2_LD=gm-K*avqlCdpp`A12#nCZm_=K0n5$bPwiAeps)i4YRmE z672!02aO#R=~)?21-q|8SOx)OK0At&O^_68wlaJe#!E+%2< z8r_{0ajh*C4-Ua}VUrFcbLbs0?RJ`9O-{dDP!usYIc30_%vxzL|J5ke*F?suF7Ak- zQYR&u*Lg{x!r@oboCp>f)iUBqrdq^6W@;Y z+zrfIbnQhHR;pbQWZY=F`%%%~ng*kwh8Z@V>lw zTkr1mq}X^=COG`rjV?+?+|#fS`0YiwT!rrA%u2A6BJlRW4SUh=jaEMk2cmcV+4oi0 z^%gyfY4zN}k}+cH$g5*d(BI+n^k$umQD2w#{VebS)lqG~U;$dpH4*V73R{msRksJa z+&zg!0z!jFJaa|nv>sa=Zjt;>VaW_E>L4Kw*&ZF?2Qk9e{81~8H}GvP-D_WuI{1ER-FAEkNJ6qC`I}*z!ZbWUk4~L?2q(#vX%2)J-g{H1SLn+! zu^?9(xeN_ zu!}?sP+e|W^YQ#U=!m^Huf7=Sg7A|@eQSCHCW;pi5J)8AvX%#he-7RROc6dTd<(?w zz|F*pwH@fSgGEXEG2nTfk@C}5=D2-b1UzBv;@A5jvFAN6bJ??&tAKGmT&)Jvj$AQz z2wIk8h!qC);L;-7E}${5CRL{6{;;1&-W~A<=k{2_O>95eh9F(x&e6Sp4`)u*PEjd)E{1&{6*3g?|Y- zf47m7($5P1RJajGTgs!NuE|e^d6bb}2NCTdK!%$K3<*eVgV#YA-fjqzjh|Eqy z7{5*afd(bx{mgBvzBy|sSs)g$Db5Uvd7OYCO+xsSo$m7V?Yf%tlXgL`GY9toHW}B& z%}7#i;Ne8Xly**G5vzh+6q;iQKI2esP8*GG@{)3a2vGOLE@&+`CEv0-Jd6@GMe~@N z_$j2CUiD2f)8WmMMMLQE4T~7bbamTg)G#vAIxs@}VmKajsovM#^rW_`cRBXyjf=GlH%jLJb?0oa+~!#8_~=G6U3L zNERZr)TL>-b5d__xYXsNIS_EDxo<589i7u=)AU?OXak{YLqeD>#FHEk+5CH}V*~4w z%iN)r+y_^7*^{j2Y5cV#)i#rO20+@)rE%idR$-Aq$&DVOY7X`esA*50tK z>yfKFSyocmNHIourX>$stys6kRn-%B9%ZnmU*CYg)#<_sL)GhZ4-jsKDP)E5`p0F! zvrJc?ho+&x%Y5oOk#@5xE@ulE@2bReZ)6EsX{VVw7SR?w3%Q@A7*frGb*1dJtX?#q zb)_y2e9Yj?4_#}zX~lb`VHZVZjpw56W-`rl5LY?Cn_lkHZy0`WV{T{uT5w}RN-wQ= z)pC=dyO+g+wj!Gg2WNk=APcE)yU^BSuQ#Z)!s(FNa8%w%dXKT}Omtixk<5DK?N>=f zTQJhW7UFT-7O?H`rUwt>S?{e3Ab)ko=)s0&ckI=+``p1%lu%kCySl4;MseDq>gnh4V}Ephh7}|(ZjJY|Beow!z%SSfb zz=aRqR1Vdw*r_V8|7rnhht~WMqcB1wY(Eje#rk^8C;}u$`bdZot{kt%&BCHrb#x(w z1*774;7{Qm5$Sa-_E3|$iTEIr7vRgiYF-azSCq>TtGH!!o2F>y1A;fzeG9$)+dye2 z34aA_a2WaLb7OuTd!ylWj%tZZ0Mywv9>G61CzGa7Y$`>B5dqu>hA}swTg|0mzAF-QPLvKx1rG$VT7RINJEmdL z01|_MW!wjp3Mosem*z5+fk*TtsGV7#5L0r5hbd@0| zFn#{^=h|$3^fB4_YZ-2Tja2hcs1}qMGz#$y(P96xdGRQO$wNkt3eJ=D`ZkgIB1P|_ zdD`VbTRx-o&*HG>)DZc)FH%dKL1G*I8r>Hqe2_%L;&MUl#3l%))kHC#=p83{ZDx3z zP14X+M8<%WQ5#88ne)DFOrUa8`)W~SmLwi(Un+zXH4{vN#6TeyQg~IWn)=D8oZx8L zIMmsjun1P^W9$AbXAw#A?RK$b+!UJ&Q5$~ePvfs+{u0#nCoHaD=xNiY{vN*8ZyCw_ z`h2W8fW=osx-~9)0#7X>MByfsHleA1Q^ zwn10@?N)hR7dw@HvH+VugWScDzRng}84ptxt(jDSNsD=R5o+0W7yCT+)&jbG*U!B+ zo|x^@1Ud5%y1qLoTf6k3<>R(PwG>;mvTBhv_-(k@YSQ*5qd7E9&y^u07n#57*qS^t zW>hn%;q52g1~qU?F;{wVKgL$K%yB|n_LXDFvDIO5g`-z4z{~AENjCnDr&U3txFulR z)HJ@onG0e~P}YB}DRH~Yrn6jDP;ckAtaNj44YM0&&>5C6RK4C^S78_4fua`B>}Tiv z7$$C>AvbC@rhh#l>*5KfzZG?w1=CIo2BFr1oZ5z`mfMH>Dqfxa4tHwZ$=RjIN8P7% zhC9}u%|$^u_bXTz!U|K}s<@QaMK`mswwT=qWt%?H^0Y6xjB76Kj*9*}R(tZx(c12= zg!X>~#~Y-%fqfS(|Gt3a=oSwh-wi90^!-)Ft82`IO$1frljTx;HBPk~E>^?-_!FI;e&5Ovxnp`XTK4v0 zTVT6yYBG3Wzxbf($G!FWaf|+Tg7H3)@e#q4x8=SkkQ?_NI24V9MV?|AM=<~XJjVzZ zfCUl=P6_96%dQK71;g9E7fY371Z~^c^>`i;u4dGail-p4glwBLU{vaPpCqUXyeZrb z6e70suVCDlV{ZD9eAF`FryK>x5MX{>jX4jy$i!iTUwu zxgGwgKoR^iZr2oPtSJ~6_&=gpL!)mD3=)CDd4g9~aWxU=Shj7(LFmO)LS1uieXJaP z+@G8@97f+`7cF*e*QGJgV>;AnWb65D^>RlESMUMt%`>V@c;Q_&`LylMr0W!n1*jm? zgGQ=j86-aR|9D@z0^oq^$YoIB*9oYFzy~op*oN$VSfVM#Rm@XvOr>vtG$%bd63u#E?I{3g0Ry#{R<31|7{r4M`SL z(=(eey%sFpMFa%TP4FVOnN7twY-7|6#O)0HrE5Ws3Ss=0HYB~CgBiH6d-tz|s0wWH zpv8VH^M=TR>M58_iEP08a2VlkioOoO_ImPmU_=L593CTg2muWAtc8}>wVK5+ENO~n zTqw&*&FY($xQy8;c0eyv!(2u}I4aq$H613vh)`cWeP8eNNT=_o#s7*TwkIg!(Fqv! z(m}*n+w6$Ofiw;Drt;KiZ- zTW@Ni-%w@SG0|qctmeTZg_$GCNR!?ouFw3IxJ=vJ0te*u|kd8 zIMjOO>a0b`NIDBn7i^4w2<_G+b!WrpKtg2%qoSo#;f*AXh+{<>!Gd*h61kOIzUZhe zE}fmNIN7ruOv>ndBy*EAd8+J2&Pi~!;1^7GWfi-I(D#cSZ$%GS*vm-GpoXeALJO9r zmJ)h1gr zJ#7z)tJ-d7{)H;|g5Hm8>D5|kmz3D|$R@)sE!6|BLUd!9EjQ6FkeNn&9pX5_XxgITUYTo;e`;>?S$J5F&0$^)qTP@d^w?$FA_2b-a+R>D|tN1|*X+Nhn> zwVoTN`iPm#tdR3+f&&Aq2h;YD+D1U= zVoRW`L=kc8&|{vYl$WG8X+rUT=C5<)f$02RKkgjz^DfGSxv>@$lfy<1;c|Ly`k~&usZi3&lbXWXK_i7(NkdAgCW54;O^n) zcLfs)p~XSr#-LImvf;gL$yaxg;EC?7(E3M7DgZOn#_fNea(HJ z{&&PK3x<67kwu6;F(nzjeCCDTUa5zX(Mp_R4kxpOq3$Sd#t`xcZmjh8-@ksP5CQ_z z&ZqIl_3#?(#fE=N;$VzPn|erG6gnc#vIc0`kY;xfqX)B5p;a_3Yizbw`wca6I29nF zi*PRLr(lU7_C-#dZj8$&H5PkbFSR;s3StM}c7hYzKjtn7H9%4ZvtwcJ%FOS-cuLc% zWz&JZi4m901-)^Pi^yF3qFo1M>?1Yn*@5e3B0DBd39)i3lHvFRO_hf=lEsuJmZ(J2 z*0!jxJ5kj+wK>cp(<~bvYWGVv8+@DH4fA{yL~9tNG7ug*h?i-@PJ7{8oNHsb$hL2C zlOEyVelfi%UAD;z&<~{w&u1KrYM%3)=Iy6W4+ZxGBsix0HnFuE-|C>TiP}iZn){}RhK3&DoYHJpGHZ&%61Xi|y$R+ilfzsyCx3R+Sl_Zxrb z-mDPg2g-~0uqe56HIR#*exuVj+xK?yx4YkaYo)!%BjyWQ5xRyvxlXIpNTw#%tl072 zq&*n}?nKHiTADyl%~iPc_MraG$}L-@T*%IKdwfrLb8EI#5r%RR(H(s#SVN0M#pez# znC$mLo>~MVcjy(t6i-MCWM^)P0kOnfugI-`3r+fl96Nu%L*d+zc9Y|E#by~tYVQ%Z zm1FG|P*-lF4s`Aa;WzwKPDS%GI=6!^FOx>}-15U!K?>jm?Ma<#i^JtwV3{n%$>*u` z)BCEz3SQIG{eYID`N0IfP?ZK(%&z?_uerXJxh;=8zlpSsqCd7tS2H+m*SRonmW4GE1tOO0ySN!y?|4h8!cI~%N$Hg?A!)nOMksfjPo9O0NirF6XkY;`n44JqVD*4AR z$G_8XG%Hc3$V(*Lh}!7C)v{JMLya+BLKcBqNt&^?e805^-6Mp<>l#6E^5QF4CnZYaz?pf_n*ZqAUw^wUzh2(2{Xb68 z7>Nz*r(e0ZXZD1(uEG*5n=rdNMIg_j4D zGK=G}(t!1UjHaLXKaFw$sr(AlS^)m#t)m2+tv|Q+QwSiUd_0stEeC`4@-=DMJ&iT= zr%w5|YTCO$p;&#M!HaZ?ovKq=Vo>gvEP45DlG zBJdX*t7W9z{qy0G4d`@~ddCyT@r7Z)-f8p7op@lyN}p>x{!gs^j1eg?yomZCV~BQ_ zmVLnPW6An(r3tok@{UuWjTUipv!PN+go%B58tYgDXH!1`8crT`JJ z0kCnH?jYha9FW<%b0>tCE=YiQ>q`S9%VWZ;T;lMD1Rm830-yLI@vvkD*$mnKUqP^Y z1I;~0q=}P-4oFP$7KFb`ymJ4u`AqnNE%`4GFaKr*yuh*O0bvw6sV8GJ7!1-Q-!364 z2}n9lF|{%ssvuF+9mEr(*n1e^wzQ9$HJnr;_)wY?+%=@73wy_EP9-%(!b^sI@N%Mu zBP7tlEzEJ!=~t3qeMVUF7i$;WzR-p?+2!d7!Z_tT5?(hem?-shlHr4zA`oFRTN4Jb zdHC4u)IR8Q6U=q8MrT-)N0Nwmr=ugjRvi!)LWQp~Q|)}Vv{%NkBb9IVvv#ke`b-n>#+koDS=l-`1%_$3GUkk$K zP!c{}mZS2}4HOrQQj5;PKK2QyHTkq@)1+IY1Bo&CtTN+1Lh6Dv?7|G{OKYr&w?zOn2Q_ITQjnt^bWO!zn zb+Ik>__5QPTS+#1_FKCyC84>_^;tfSm;Ax^+N0G5lqNw$IvU|9?-Sh^X=z@nGEyce zMZMCf`rnvs%YWzwHXY>7%=UkyX|ihVp%}m}JXqT?BnNbKJ}i&7A~`JV74z+ zT~P3ah}}GyrjUH@7!qNK%imVfX}{2o5I?5Z)>}>yqdMGJl)c)f=7g=LIrwP|NC>so zaPUswyqH;(eoWQ-qe!!bw^~DzQp@4=R3n&H4z3=2XZ=WjX1|`7wYYj{?7(t#q=v$E z6p91aN)vqtiuk_RM6jJC^4^snm6bXSo%OpoyUGz?D*7orjb|7$@Oj(Fy8a5z%usB# za1D$=Y*_0gg5IW{eA&6~d*{3QtNfcHUubR451IG9Q)`%X$1XNx1%GGa3AleG5P6fE z_1YTUKASNUhP2&cSlIE75GhcP`6w&Ef}>RI`*$^1944TBrJqRW_j zoWRXnvH!l0F5kCw#U-R-pG<58m1t>w9!T>*d z_G*GMfBDa>{aBITpiWCXV;BCM80Z1{VpJr_zf%c-y3)C+O^Tiz!${akQw%!HTd)57a$IM0AZzE;J%!F9xhBr zYw2S#z#4`EQ4u8%q{J%;WK&+FUz+zpw7uUsyLmPnAJvn)*bO8O`wcnU7SyRMtCMKv z(6Qg#p8|q*=he_F3gFJ8H&Cd5%pAbd1mT0jOVF3#mRLwv@6Y84zybZ2*>Ha`_pPwN z#t#R*vR|3dnPBd$IS2}HAx!br{ooduA$M3g2a-nq6LN;o;t8j58l@U0u{$o z$hG=l8A|~r(Ovf318^1qD)>1Je8B32=X%&dd(B8J@Si-r$lII(By8M&PF`zgb6*j= z{xm7Ybu`OUq0)ZyV!==zpIyIW(Loc&r6Pjyuxh1X3SH1(Gup-#16g_d=uO4ER!Eo& z9IJbP%lT!qu-tE6djw73mhCVBV&mh zWNpm4+8ig&3Z;~@P_cZ#9{aN>8U$0Stu0@O&Nw9d-G#DYZk62wPPBDS`Wj<5d&*bv zW;;3%gUD!zeN_5DzF$*lEO*!ma`W^OOc19m)y-Cko%WDXra;n-#BzKg%7gmBNSNQw zTT;&7IpR=is0@!Htq0KDpi;P5BlW=rd0;6>7Mr#yW5qvx zt}A%4vm7xN6~ahMFE%!frG5nKc{3OPKK~B z`CJGFH7-86DXgbyhXQoNkTwr(p{RBCige2jNt#_8Sg!3BHOsz9Y1Dp64YI7XyyfU{ zN++AfK}gE(aPyT4$y~pDaTQ65y?p0h1NmLXw)LLS9ATqqHjG=G8t>|{m!3`G#NGWz{~L2kNi_%=E>X*G`76{9#Pkmy=!mIgQ0>%0kna-yI9eM$NHWLwMw8p4aL#`Mc(l}&FW~5N?@jQ*u1-->(3%LqfR|ZR(Yz&ee=}9>>u*UlbsD}ww|7$h19}GApAI9M zKM4#6N$AZn$`K+j%;BIE*!LTFAPKnJ0izUfbj*Mj43nXsR2(*{;8p^g1y%u3LaX`} z&?Mqipr}}FrUjY^*@nOZzIG2k!K0id3X0|-p6xtICuI79YWc!G z+v3g>jwk_IautyJDq`t-Dm+hCP*=zX>}G-1j>Mm@2vHaDyf&6y6~-S~WOYFdLKYeY z{tLk~pv$aIPi5zcM=H(eLFfafiHP;%&i^xzr-@Y%=tdozQOuX^^lkX~i8W7-;JLBqxR6EVSYJugmY~AYJ7&~1Paxw` z(P+%EPnnG*$(U^1io=L*S#80WP+39plf7V%;o?XF4;<}5xPGi4=?Zi??+;B7CRv)eoc#)(iMYg@wzAiFW~MNtJ`2%~eAI-`w9 zbBqEeSES6W9Hf9YS0cNn`^qrHv(GG{6o_8%B|9~()mnvrbdK{;eqW3htT0aF9A$Yw#^u|clKbBra#eK;*jmt(> zhh@!(kLW#gRw`Hl9_WDV>dDEpAG9vzk|xXQG$UpeknVYr{)&>$h?F<5h_tqk1*yAA zLK5Oi(q(V7*1<2Gyfw6_@Fdz!I2+qVzwT=4C=i&@CH)!TO+~@o2lVGptj@rEPv84< ziRkQ9(QrH~df!Vm0ORPVVkIXu(kcku&br9d$#wFX>vJT-Z;H#A-g{x<&R-i=Oowz{ zVZObH_&$2xd@#USxO33d-+q1tbGRMe$Y;h_RZ5#Y$kxu^>NdPWF*c4P0g<%9PZ2Z=&+87Zph8evw-Xo%bNgF;$&k}t4KmJhn+Fe z_{Pv`7;DTj6eWTG^yuX4sRWOc-3+V1Y3p4 zn_a!A9p2PdFV5uh$`@2!$F+-?m<;=>xf0dAb82e(do=xg93IZ@F9bgS3<-e$;u>&S zGD6JI(_ok8!h0OTs;dq75a7iI#fIp^lLW}-!M&F!4^El_F@&!HxSPb} z18@oCAP^PG5$DPrH4R$@(E~O9je?41NMdp;4lPaI^mdt*= zgy}VHo=zbJg@i|a@cIgmV*@Z*y$2};$AX8#rn)MCt--S{lNkjjg&D!%q+HIZ=1Uj8 z0|ov<*v1UBs6BWIh%_2+J?csDU&kD<`4?GZr1I;xU`o3c@ZJzM@cqyCl|)a|tPWlk zvAnDFe~5YqhD-x?YdhPvrl}^|ZmP+)%{$weG}*Ro+qQ9M+s50s_w(%UPh42%TE{^E z8Pk8j9rSMd=R9H%1Mkl@3ZEF6IrhD%0i1LcZjbNk8z-Ddil^V+lP8n1XLY>b#fyV2 z6_``gAiV(o!?Zz~LGsSHGr=Y;J4o6a5C?=l0p6CByel~E#2MYgc2R!l8|N~HH2fC{ z76SK~Ge!?7uceV_rijk61o|E~1Q9~wD%UkrI)pO*GyLx5!SDiKS8W9g2fEHYqV*<$ z5mx9oa9}036tZL(#ALQfeg=ukH)@6upF(s+$Ykc~o!Ixi>;K9+`n~^yl)d6kr0Pi&$@mVER5{8!6!Q!+ub+ft%tL zpFrlGc4B@6G%Th|QU+bl;GjiyFkcdr=a^oTMiRMbY=gAqN4)-`XxDl?n^FBlz~zZT z**;`5&ANw(BXirn(NU+C09~T4Z-+{7&tmI8oYNwktln=-28bE`_$NNx^-s)sU6^|9 z6b|*dZvGFdzRyyUWui@DT~Zrp-7~V(iu{(0YC4m}MnRB?BPCF|)kgTqT(gZ)<;F_al@&jD^lh zq#PF?qJ%XvA?e2OILN?QRt+9qPO;e{r)Gz#FgaV3<0Ey?y=@o9r3p|)t7EzvF6SJ( zc8VDp>F}e24Lkcj+>x?2&NEvp1j|h}=#i%J2<>u(*!Pn4YLnvO;z#qHyk`%PD<%cu zm;&pko>hynI4hM#DAp;avIT)^LO$m$%eXA4W#1TcLvoq@GV1Z0vM1Jc2NIOcHR10J zF=OiW_7z^k05c&8pO4(cC&}3g0Y=b|Q;Kq4^nQ|c9h<2Y((?4sfy-TIW;>HT;_J?4 zauM?79j+r`)^UmgwH?mXf$pk7>@P_Zsq$qPImt27AJ&{A(3!FJ;JV>^HgP2nNSebO zs^iURDd4bn{HxFsnghr$w0w9tR05PA9-p04lhLwQdVoa-HPBQrl%%Co2g-VX0%4); z)wC@OJ$lxOx_LNKh%ue9#j0Ib^80|QJ^-8MK%ky+zFP18Q~Tgk`LIGF?h~cw4l8u< z)=)03RfHvDL8_V$`xvLno{1a#*!0^$BgElgE$FdOPN06e^z_3harV>ahtz|i%Amw7 z7Z1LZ>eeK&_)jtAK&?MLIg5;G})UV$Mh&vaMuY&khx&+8KmPIcMVTfSE6`*Pc&eTAavd8!j( zRx819M6*32s&Xl+VO)$cf=nV6_pv*HCg|!HXNMvhJmqJT>qopP5Df6cU=e{v=-f1! zVOntuCCx?C^VFZbl|$iEXFkRxC=|H`>Q`VZJ9@%8Us42jh!4AutimWY9cg zGP`@Q{%wV$dd*1(@#ZJWZ@il=ajjQZ0#C)Fgmq^-b!EOk7gRy|2A$KK;Ps|sYzVhK z8w?~Pd*siQV`rfG5I+2LlDf4$>0Jo=&kJGs|Js|Bhx~Jq(`orV9zAFd`UIwSn>v;QfrZSTl3@jm#-VW?`D?v!*82tgKm2h;0gC7k1HcAaIgz+mcJgHU(I0NNrJMFLUIg^eU*ki3T`Cu=Eu zbqV9Jhmk{g2Q3O>MO;?0-`WWtN#-MWMa*zA_qF-~MyiYWcxaj?Sj3aCk?uHNJiR{t zgo6nfD9lM>^uue-nV6OR-7MPT6$)dSJ9uXKZ}FxDV-tBvOG>v$@rLp7a}}BF?p>k) zkeR)?y*lv6@qp zl)`OV=728pQBsev7_Q($5!?|Yyk-r| zsKHWcX<-WS4-j9yBvV-Sj0Jc31mnm#w8$pNJ{fe+^NHN@zb%X`XPT^4)tEu<6PCy) zYv9aU3QOX`T%={045^GSxQ#Q7obVM6sZ8QYuGT&s8FYIOpIYyWZwQwgQ+Ohr{&1PobGq9UO zZf(!)>7wQA$?wH4ng;9_EV4F|ARUS7WTs8pYa<0BcgQG1zU_(hqOmD8*^_WzVQ( zZk(`n-oh-4s@=L}^$%Y*Fl6_+34r3@JC#OuxYr)2wov!(45_Y&Vbf=9KpmBWA08;C zjT+?zK{t_MHL9rV=4T;9ZX8su2e)89up8vj;|?LR<;axi#`tvsP~aN83Duw51#gCI z?!4l&$AJZ}67Tn}3+4VR2DSu$ud#AJc>L(*%bT9J!Da)s z><260^MwHOgK@Hc4^_jEq%cT_yP!Wv538Im2cXQc9sseQg%E*{!uIsB|>ifb|BseN7l>3anF$!A;m!> zJnC0^bnPHU5bW$mu#AaZ6>c|YThh-J(NIP1Vk?KSYS_d`8a}CUbdZb${+k70c&!wY zL{dQ%p+UDdfY~7ogK82&3gPU++hLTz0QeL+;i*Flz1*1n$9Ei>{*oDy_Y3wq!Eb0# zLH%eVW@X*SaxpOZR?Nrhdv%VVty#pxo{IoTmzKSb`kR8KgU@3C3sb#I*b;m^;3% zt|>T-w!R)~C49SyxS#A0c0=$;*FUd|!ic%q*ln_5&(N*1#0m* zi<*uzP8w*OtIkAM^G0RCESeTCM+Dn`R@Ef+G&);G78qINwD#f_Xk4OmLPe#;F*TFG z-bJAl82=ew7;3^WkmM`^HJJ;9>8k_B`NgrI4xGh}h-Yr}0O#nK#prm_-A`Loi!fy* zlKlB&?&&7rNf@4HGd4n$-ii=~6NWb1r2NJrLfF&HYogyYX~_W>JrDN!RF|e7scGT3 ziL=GKXR0zu)Io0kVskuE7?HH_C&Y|rXNtaR+!bb$Z_xW4y9SW9Ir;Bz@NjMS9TydD zXk;Gv-4uoXUeOTcO$wOYn#o?5{W${0yb`NE$pW=RE^CG6I&3#tur+AF1sSLQQQ#i? zg=Is=Mt|WlUjt)2M-)HJ>Oc9T;KhIH(RG#a%ez&&OPj;<`<7Pp6&)E3cB$-2Kbk+| zF0XjvX}UT@9fFcyc>L>X=nNeU$P^opzodfru!7%Cy_Vrgwa&jI>9aF;>SqtP>MIA53}nD~0V%tyar!#+dbl z?pv8IN=2=L+F|cPn|DY0Obi$vHJi&MH_JHqTTbAVvP9*7vGL>y89rfVO z$^Z5*(Jzsm+_R;BQE3$tgijatBnj7NYY!pQ7B~@+! zR>d_i@irME7^&Sez&pU;L>MsENIQxcK~dv*FSzT@Y>wv&ZvTMUVAR>>N?1`!cX-n@DBWQWmH*X?r)<+gj{ z*2Ar_VkJ`5KCkfg@g`pW@aQym<;qhI_`U^0q`(M(K%m;2%Cl%CZQOz?KmZ2=j>v-$ z*W@6dvD6%qXHc2L5xSVOk_mBCQFzbR#h9;rH0gt5@iuqa$& z$Yu%u_JULr{bZ)Av8j?OXN=ufq_EQOcP&BRHffiv0SYRZJ$i1acXtp}xH;4@GX#r` zKm+1V+8jI$9Zwd$Z0V31P{nPySD$ZN^3Dmw7~}{hQWx;RFU&s6|L-&{w`o8G`=ltO z{?q0S4)uZCoZL)?$kJawt9#j#^-++pToR=f$jM)lmO?FDz0IBE0V2JAg;G?HPXEg8 z0Kr#{3-o6=^dNPh2EJw^E} z6^PU9B-lwFUy5?)awz;w)CyC-dvmwn(ONu#imFKJ8}OT7Ee3v%fa}ELw+8NM`}ZXR znlk?4lFT+#VEX~g!RO030`I0SPyQd*LkUuj?+B$dq=Nbg9$b3P7!N68LlMFPqlG;y zE-gDxmS_uL)BAtrLfQYn(=Fg;opXQ*->(UqhhQH;*quSh_HSIzyiAnd;u2W^bT%6F zpUIlaCL^igfK*pIk`_(LIEoXh9y%@v6k^)E94!cXM1)c%&4vV*1bTb?on1uc`d|U* z+|8g7dVg)Rq(9XACw83PO6Eki)g5Y9;wanRD7ssR1#ZR+Y8HicSu!-#rXjJM;Wzme zV!xwyf6Z}t&_XTFw>~_wiJY-l*l#mb-n$oR7^$o`_N<9@mC>pA>*R_Op$Pl6c_g09 zIkG1f?28`BXwf^w>q}D2D?V$UrU_Fd87so(tM<%yxS_C}pCZi^*{=SoXH-h!&ohu3+4wHAV^2F_0!Nsxu&$KZmWzP(qL|KS#(>7nRs_5JB_NQVtoi{Zhg+V?_ZND)_Us?%kggN z>T}6WAP4m{d||0wwmHo?-Gqk&5U%g=ccWs%KM|k?UU4$Jzyo|C-*0-r8`?_Zq{Kdd zle3@Vt68TG`{rPI&(cv+(8W*ob`(IKH@>+gF~iu>k*C>_44`pC=1-%|s^2x#v0A>S z^BH@H?obrd7>ldwMSf=?f0{58pV}07rw!{uU%K_(?V{kcB*z_=53^nv)N>aiy~G@w z6ukR~WkMTh{=@p6?@@@ScZz^wS*c^k`y{T`uzWKhxl^wp6D}|2F9nsK^^>%==j=a%AJ=y7I9Nn7L?8NXN&wq3CW%H!0t!f<2s(M|7Zg%f3ijhm{uQ?{WaW<`ji?2%y zdAHK#kJP{2*l0BL2sRY%*4`kq;Z+>tr>*J{s2Xrj86TF+cL&zVmrk;P8E$V?%rx)` ztQ2%>EY(NK^=g>FRE@0e<*j|4Zgstw*~il-N9P1RX%{u(WNdGR5&ns^`Ot`d{3UB^ znfcBX05`}mEXGn^S@2Wo6a{~3*bc*VzJM>OFIzN6V(B_|`1{t7c>gT2FS`eO#L}}* z%#!IK@+6!wT&OzcVk(nIF!xGucPs9DHTG@24g&hIR;d6XuLlNQ)S~nX8;(Mkd&Bc> zc9x6j!~HTgUJ7ZB5J)I;-$6qQl1iA=K#AmhT{BT+9W%^b1NP5qtP|@-$N>%27q#`z z;(X$QnHS={es7KC|hMSX4| zVdb2D6%AVKdIJtPn_s;=3eTD1ls#tEM`zW`Lg3kukKDNTe*3Qtcrd>hZAe;sg0{Lj zIyLl-g+JktU?QG3Z(y#?A&oO)etP+UH@u$1bU}f<9fXf#W7n6j!r6HR?0mMB1K>nc z=3-;h*N15~#J6emGxwXc!Q(}rBKkV00i%J2%;#X{&}eX5d5PkbYYNJI$2xw7A)QG3 zpn-T)5tcBXwlyA+=C0|OF-%cdD-wnn{I)I%I9W0wTs4Pf0TY6~W{YAuoni>_=<=j6 zk3mrK@G{`)?cup_;GDE1hdz}4+CqqeK_(iYoH&xu1Yhr_VNr`9^X;Sk@i0-^$`Jtn zxg>_^BVt}oI4})`*_{P>`W99y({JA<7$t8el6;^}>M%F~C?4KFC`a&XS4t$(FL{>{ z91mmUcKK`jZck=Hgx8*^+1Ve~(B%<%+r1|^*RHiUzh~Gyq?Put?2O%r18DUZBqL=v zu3HfF#xoN=-a{RyDAK1+kGjcpb zMf4bzzJ8>rO!LrChrP_FO$LRv!2SuHL4JHR6o51;Jd1EVn67wI}dXEeO<4@&G2Yu(_r2GAqOis7 zC^Y;P9tt-S8Q#xtyKLLA;0d;dTS@I~Roxl~V|#jy+J)$uGOVUMv~eEg1=!=qxrLFV z!PHN>&Bn0B8ATj~u`a~-JiXLactjR@0%8X>9-&&*B~>jqJU-d=wS@2sB@7K?Wui#u zq|z#LSX`$X4#>6v6!94Ph!p^g)%c}6Dh;mV_elP_`E2yi^{lb4qxV{A{KSiK-^fsH zF|`qFhP^NMxvjQ#XPLh}c0q?`TK{)v5HqJPMW?_E&eXPW__t1=vsu7w?>ea_^V8gx2Z+(D0R`>?6STN^S`_pm*5;}RJRHwh5gq{a z*n{B~aS+Y3@*KSS`Nq$>z646)|CrUrZu?cEC%q+Ve3jgp|I*!juEH5%u~17_cUW;T^_Sg^-EwqijaGIpf0h*MaZ*Cz~4o2_*1wRXed zS7K9qLG^wvHc;?X3+ZQZvI3(Rgb6*3G>@KavSjox)su4t#W7~{{dxk5c9;|)UreR* zP4j}X*!qrQEILn!_1RZ)F}k zE8{1sOScsMa4CCqz&fs{J4KW!lfymB$PMQKgo#3CMVTShmRNoFS`UNHpZ#v_Ew@TC-WIqFZiLNPxfxM1K-5Y0BJszVwl|Q#?L%g znG;mOL>;;=p&>5c8-^I{oYVYyrkZoJYFq0VZqNcWm~$p>E`8P!oK|-ja*Tc`RW?7( zXDr!BYs|VzkTt^w!I4qZbi_AUKVSzF1(sjL&Np#&_JXlWCz|k|m5t2vw`g=s#P32?T?fuo^(hy3R!a!>T9G4Y32~|z3 zJ@dCcj<9P0LEN--xrRZ$&Ob@Bm7~pu=0TW1nM`BRn^#NNb%dGLcIXFKL1KLm)g5N`hW%mjC5p&AEHG4N`8J5p_TsC}fY~H?BZD<`yi(#l70l?;B zF+|nOPwLMo{3gsnIH!^+QXBQmskXW@bX0NA@5a`i0>9w5m-5I!&7u~oRS(=4(!FbJ z-o@%$Plj4|q-u>37Gu|B1*ZvTD#Y|eEsNPNJ*QP-bwNxT~FU3Nq<{6AOC2o$)&?eH#3m;AU zc6%+z=7>WNR(u=vv(r=mPZiRwYUQi14{_lI_Oq5X?il$~ENf?$YFW!q_7+Bt=> z4u@LX$@>zww#Opo7B_nP;#=I^x_e9eow^@>(-C+|!z;j&{JL>9r{HBlk`+YLjZI8e z$yD#lfU;hQ+@eI@>g6DK8<~d z70P=ZeXSA`L$H8a!$0^USvj(V&E@BS+_Ahf3fS%P-)a0PztA^PUb)^4jlg#+qXFUE zP-$n*g?*=O5uc~bUR}Rz%k}*aK7c9|9>wJb_vpA;Dm*Q{rty0fzOS@|pYKHseV4u* ztB=OP48&*58UUXe@4I;)TS^aR+2C64*<`-X-f%}Hw&()EsE7Bbkm=;_4c1`Um&DVg zz`1~L0_~YOC%oMB!)o2B>DfVb^*=qmaWjpCoxgUq$+btz<r*&b0mI{*a$9x%+aZ?`&8c@TjK>agRiA6 z$m|y1epb(m#~+vP$cG!iC>@%tjP`Hl`+OpAe$OKV0=+v?p=-MNYo&goCd!6@yxr1n zadi2eN4^s3hpOEzo;b1M<}I_Nex2T(naJ7tVhMx|EY_!2g!(R=-EXH{b6FFELS5um zgJD3Jvq7nCoDZ1tQ>)!IXfB1V83T3YNPz*&RGIq0v4P4MmncD8BLsr{I|EJ&r1ismlAf6;SY|>=tyDlDH1ZQFAr^l6li4pQbQO@vZUMC}Y5=1b@n-%`h;c$f zWjMXB9nVdK)V_WZH|dbD+2LB(;mY2TRhk}IbcwfbPF%UuQKO}zCRCDCk3ml`k0mU^ z(vKxSy$32IPfo5MGD?!>;}_6BG(&6dr=wyG>G;2K3(|khO6{_hu@ymmw#h zU{(fTE2w(&5s8qMnbEQKf6zF8bdke^2G%}N-6Dm+O<2lQq-N$Yb;P+GCC+gjEfIw{ zcOba5PTVXQ>*jK~5cHbg>X#!tiVk;ZYRk8{Sf$eZ(j^OyJ|eAX_=Mv3KKv1%N`XaL zYYgkq2r`ketFZmyqH_HQ=j5(GiUhI6Efbe!8cw2w)slys9zisk3<2sJtKc?1!StTs z@_Tb1)gpjkIK@#al+6hBf2_n-Vt#5+BirDw-+;z(1~Tk2LVgT&h!UEK%eZ z@zgl!$gV3cY`#mDPFkB(G^A^0{(asBy({8*hXc^iJ|y*n*hZTGF~px;5r8f6n9dCC zKCCG|tbFY&Q0wg*H-)d)#UJ|(>GW-*)m81j9PmDD^Z5qXId|J7-2|hU zVw@A@d%KHQ#F5ovA}SX?;vMfkSEqqf?4@uED9VU_!5)05YG2j_pG|N?Q+h~^8xWMs zy{q%*=gal`lVzLqfo6`azpgOWjlh=NZRZ5=9*QIsOu~mA^P!19SU9^n zRGl9T>N2YN-_DLYC4HE25&i#mb!6yGFAEO80#Cl%?l$4F?XJKxkh#gE^s2Hx<2I%F ztd=s97?wvf<{SI19b zz;MBU4!k(iuSMVt!6rUk$+2k~iT{T}oLTgrCGHn9 zEX=J!L_RHq97s5gM%)edWZ zRqBYgRVr}&7Wo+B_@Qv?6QJ-AF`Q=t+PaOgU(S$w9^_KCz&t2^F$yyNkR| zNSu{^r0fh-?6qu|qM5ySV!8lLo#@a?ScPGdCI@dH-sde->{lK^gb#;5N+Zh?$y~w6 zUO@V^CD4w+3`!WYN+*RP4yPXk-@C_3N}%;qB+Yu{^i_r)9-tAY|0Kdh2OvM*^;~f3K zm)z-#5{ggyqf+3D(ywUZs0siWc#o;NrwJ8XCU|7?unaoFndeKZ9TQJ1v`g7T&Zqrw zcVH*y;B$69847GPi@ZR4QZ(o+YlY`tLZ#A*oO_mKbtcsm6!-8=YK$E#YYsFrpach7 zbxQG`t?Kv6J7DTemIgG-4cN`tdIOdK`U$c?`Q;CA?qs4>{=v+!4k+BnZ)pz*3W&sS zA?1R0`b*mUxJbbivxt?xAbVp$Z?V#$3+&H5=tGBjQ^kfh!+3*$h%`On)V8(v6=`<5 zqE*85$yJqdf9)VE`~`(e%y(5CF6a7&i_5eycrA67$d%XVv*sREe$PE7vcYBYF7euM zW!dH?LDmN4)eTFYVfoYt!Dpt8cEyC5v6+VO`zuOMx?}fWjWE?sjntL?@H!81)!vO} zdq(XI--Xxkq)ZR-RGgYdGmSk43cJec_tQBllp!98zm9)CF=Rg;W!I^5u65J~bhBeG zaG`A^4XUHoxT|1X3)ejx%{lVg6MN4&EgA}aYkQ1n^6;DQZE4psP!Az_);h|+?|e0P zxDD`?#X@ZKQ&z&`eUG`78d)zb7x4k{js8OG0g|XCf``PT*k8{DZyqe4w~|+t$21({*{JH7fKJ$4VV&q{M|Z_%yeF;wN(&CVzicn3{8GM* zv;N4>=gQM*$-Lzy9^Y}lgt*!|0RMRPr)O8OZA#~lkaet?D7zTyhM(rpOxeH4499nC(avu zLFB*uWMDY#L1~vj5S$lq^M@L1cdEx*QbT@S&!O^-?|za<2r;-;`Mkzf+u6g9747`G z+RG!ftdRcE;}#6j}t%AFP}{(WlETNJ#IUJ?V~C*4xqSy{~|cJ0He1*8r~-dUq>r8 zu$*xcIxoRwL1`bFmhk;BXbf)w&ww^^nvN-XaJb(~0EFg|lQr*cQ(~=Kj{}YVq>nHwt6A?_G6(7pG`seSAl3 z4;941Y;%i*&OGoqGlNAWzBS}N?+saR02#syF;EaH^OteVnk8?up#WbQ1Z&|Uxz*A9 zZq&FGz55w-^S_b}DN5Ygcc_gOYT9fgw&Z24^YW=0N>C%6%ud#YnJ z#wUUPBNNOMUAuifK=oIRm$6!;T@znDe z0V*R`$NRzx9O$N$M35Re%$HRw#I(S80g$goSKFbq7zIDW3i*6&ppT%iHMh((=V(6s zT>~e;i({q&B7w|EKCQL0+im;U)c>_|DG5$vJ1@}uL;SL+YH7eu&;*=(p&_yZ#{xJ zMne09v*hg5=<5ROgt)@a$>nrA@>#w{01<>bZaJ*c`Dz)GyW%bWvCA2^>7ZAt*5!Ub24yh+ zyrp*yYNgk)`i{2C9eP)KX)aGiGyTiuQ7^Ezn_3$Wu1}w7;#z~=fl}agHn^#}i?Me% z7ZL-UBVE5bcXhT14zAd{t*3=S1L+MNLEXaM61!B?5+BA7Wvg@;a)GO5oCz1DKir}1 z_An{eXd5l4YfLH@h6d)YtS-TF->i?pyi{cqNf*|f`lZBp_Yc}(BT+AH4nIGpWvl`@({Qr=du$%benVTdq>>bC& z>tQUYde+SvB&I6QZu43$TLOHan|m_X_Ycm|Bqy^q*)cS|AMrPP$;luR`F1#K!^a-! zVEB-)?5KCh@n_@ij~vw|L{VqZ(flWRRb%@C9g5S3&ecj@?oPK`(%B#R;y2dVIu)90 zTKaWYnKIw!(N)X60H8e>%FDL#oJj;uP`rYz@E?q0B4bd@<~P$xF!@b)x5qqgeCTzH z1m9}6o4fFQ+Dq3rkud*lNzOxScD>2!R|DLkc@0!voiI8!^zAhcHF)0fnrSTJ%0ML% z->1&`RfkS(qe<{$qI(`3TnA>(ETrH9d!!PF?d)%gfncPaVo%OFBq#~asBM~nkMjeR z`X0Ri5poRL;?^oNUItbL=LjzNCj=&-S>>ZCgi7>D z5R%=dcW9n`iX97GzODYGM5=4?(g_C(KFeNuI(3%m_+`!=tHq~FeXB{LCdHw5<0I|+o=Cb=fvJ`5>lit%0p(fzE&@0nfU zHWIqsCydaGBBDLAaJQeux4s%L59#H~Ig+nFYS+*8yqgj~+ukga#9C!emMB^9Y79`y zCP2)ENyqSR>L(F|PSgeKR$lB zxghuFzX?7kX`%7$vkC#>ZmyQ?0F*?4pF{w@V|5v~)0L z>|BLLu-XPkD(O^2JoQ=J#Wkq+F)CEV@6hqK`L!OI^1H<~VRVbe>?+O-CeedjPAT(x zP6Rfd@+o+u^PGaHwI7s47NV65@ZVb7Lb*(9eo&MO$#`OZ1)F7x=>Fg%EUZ8W0^YeS zd1KKr)5#?4B$rm0kh#5RFKK{_Ey%F0w^jJQ7ikT{Y+~M^eF`_1UCyXMAo-ox74gQd zY9c%16sWy-GMu`HwOY6syaWhLs*g#AN~m^;R&maS2%4KI@8k@ab92L2n~7p?s0LcI zOr=5ScnZ3;4%@noBOl0V zzVG}+d}JFvJkdLr^=mrykl*axXPHjmVCGYmDjh!D*6YU2NHYj0T>*>E&cLh9UAxV5 zd8+UXq9q6J98sFjI$(hU`t4NfOu*Xb_%4k*#nN*6FmF{_OZPZisjc2kMXi~`yevwg zu>&0ah>af9{#NmzR>6pgd^2t1qHw_$NOJF%jTZa}7j8wkH11^3JEVn#s+@UrWF|bf75kR|2_UXM#13haV3w}eYx-k~ zf2JRm+!mQh0_c8kZzr~1Qj;lMe9Y3l{1v&4!S=HA%eGFxR%9Q77MY3+2T)qN)r3ss80%F6)$m{(d}B(O?ZRN^WyK zgJQjY$4v#4TiUcV&Gt4sieZ{~^KEa~GBd3hNB?)jgM1v2{IP-vWCawBkZe}z8)wx2 z*AeChX?UOjtzdv9HDl zH{|CLqeR(GH>hDq3l8jggh@;kwrzTN3_tp&7AGfjnD-!PKoW2fx~kUMmTmpvx`^b|eJf{~3KZ!aLsvO6S!ON^(IncSnBdx-Il)CfI8 z;P-3$b`{Q#9c3kjH)oQ5CLJX~Jok*T25|w_7>+_M2Q%YfFcVg`QwFqH48x7_^!E`H8Gb~`+V>7M6FW&@r3EXKG(>Rnp7EJ6C(EnxN4Ws{|^IERvBH!5t*=-iHYFv# zGEPk1_D5mUE?x2zBfc04+krC3c2Z*>fBw}50mzs+Rt)nwaNoTNE8 zOWgfNyt*E#jVW$4b2JRMj9CXAs#?wFe^C3?AFKb(0@#5G!Cs96Z;zZ-e~Nqay=xFB3KY)T<6pof~lQe+L{(ZY%&DG? ziPzw+O`PbLi{H55Q-Su=>X_R@3w8DACFJoHnwRlZO)-`N{J|;8WpAjNNUyx3*21Dw zz2P6`y9sloXvJBFDhurOhCh(TPVxzvoHU_pHTT6Qt{M7fEWs+^`Yj9hk#0EC7}$c2 z)(aw-#2352JGjhX%RPPXlam^KFUT9QJOrvrbfp7S8JWvLy(0c#f~_*6g*jmgXsAT5 z9DDn-OojjoKV_SOx#@>0s^_M|>U@@1G71ZY$U0?73`ETCjO45^R_OaOM3)Gviqb*) ze`U8ps&%lJj|H3qd2!(yG_|os-U6h^F`4MOEoOlN<%iEmcaB&ja4Nf9S;$548g|7;e>&p^e07ME0c62`u@D`T&vi=LTk8`ZpEQ5A%@o@zCzx9|frT=ArgXnN^)Ia-%qGv9HUs$q*x8NMSamnZ z5-pn0IklChPAnSdMN{C=UOt^K5?{}wv%o;AgA`<74pm>{xrsvl_+=iMLbQ8*|)FnQ5 zew5rh|GBD1wDs9ri}BOehTY4I{C-S#n$+%&}smt;3J4gx!)4lOw3hBp5MC9{qt{V zpPUcDfnt!Ii^I+<=7Q*1tFv6~>Ucdb_s>&@bH7qr$@@#U8Qh0-1_rnWQWg6Ska^^& z5Oeh;RCMS=sFgw3{TW8#(ffMULXc(vn~|N@yY?aEpzMHsJ1(2x^ob93GBpk^24__N z3pE#kQxBgIK>Xv6;+Ii?Yyy7v2DBZ z#PU1f zu!0#>FT3b%Z2+0SnK@viLIjSJFXc+@IMQZM;!L)oTGD|MAu+8(EaMoGj`Yib@|9t@ z0*3Am9gOl0&I78uV`BnBxw}hSz0DXiqYUU%Z-*Ia$GiAQ7BCqBTqpa~-{C&`#LUKb zi9Nf}lgCXr3FdxpMjAT^*we{9lU$Vf5OHivDT>z|JsyLEf>+~R=i}YNE8xf9gWLN> zom$w0dF?eU%C2p7P770Xcoz+LT*VDj}EEKL0U4m z<;t(Vz!YKF@aOJW^eCi6)3EY+5!jB`W~aDvIQx0<_(i=&NKV+Fsl#Aw+_PW%x(yX} z>h{IUgP9*n9=nwQi#!^3x!oq5!pUe%c#%miPUdm;SUQ}8I91r*1|=Z_=ZMtKS&qWi zAhm0|0ReOjm?XIqE#E3Pg&mv~s_u!Q!*8WoUk_~$x>~K~we|W0pXCWW-&$VZg=+^$ zOsi3j4n3h4c6oecCfSBA+zIDXCxqH6pq6hjd zLC$)+qjTDHnR$o_dg9g&-cALo-{IkN89b%_7CfnoI_L1X2a^WF`-{%F{8SWa&{;Lz zr+`l6138vqdw<)qmRls?1KP8E>5`H2CZG!JaBGnVy&94%lfOVujLoc+Ow2(DO>0gYXR5}#v)4DQ}eH3Z_gX*u_7UdzgWT~&bkKI_$WY$Z5 zOTO2)9Ru1xn*=$^l}>H!mg^(VPI;coE&cn!{TX(jN zW^-#c@Ko2jGkNj+Eg6YvR|y2}uZ`vldCW7tO_#6i;recD^xO;|PM=^+U9q^YLnvs4$8HAr+{ge(}$VIkM*GS z5L6hru@u31&)c58f$p_G55VKHYLr`xn0}oORS-4aL)+H5-W_yMUb3au=ozv< z3Z_yA>+tcI5tlV*VGJf(WpDuI@VMR`7$(Zmcp4qj_Ty(UF4v5@HSwN9kkV{MTtX41 z9dls>;t;W*BnG42D{M?_fTru;=Adf4xH^}XQHXcNTF=YaQ=wrd`i&*!&$d<`@%EYOc+~$8p-r>s&*L{ zWg}AY!Q{H(yvB7VF}p=t!A_k=xNCZgJx8$m&#Yu5YDbWRKn=@G?L>CP)5Mp&4yrZO zwk>2(%aiBUQ$@=0^a+R(%W@lrzUz3N-2KpXL&#Fj>(e%P&!h-%jv|MIVI% z5zXk?2#rxG`b7;9Twp8l<8uiViO z26H_-Q2mI>JxkL`AFo6^a1r%_<~wVpN)67cXlm}U4cC7XuV=jiIbq>B+$cL}KcGoT z)~YjJ6B<~bUn(ihJYQ$>!5xB|Sx(K=8C0K!GqruJ?D_pgLIQZeURZ1!J*Rzv`ao11 zwU)-((uwt1R$>lrE`<6a;buu3^|~)a#B{_ZXby1x1%$+ISHwcyZyiC5utQ{P42BH}Fzs^O&!DD?gi(uNpKVq>3eU zrds|uh<^~NAEv54N*!2MA$+$)z4m$E>F*yeJZB3Jpt*g>I+9cE>DJvWVuI@bnt46d z&|bG1DC8ZB`SK(3Z4Tp+Y5j@`?Zm=rc8y#_5qw4RxoE&O69>=X2H~k0WYX2~zBxsm za6LnWXUbr*<@DV+{!r9HAR-L;=-=ID%dW`Q(|y;vdEbhjnkM4^ID^oa150nhcpJaF zwfnbWjJ|l5N;iNJye*j2&n(dDe#ge`%a%qcY6L(ZSM_N17*Dgt88|}}eZV{^)6@1X zc6%Uh^&lQnOd0o+HQA%J6{F|l;yoKOv!#OEb}Yu|w_)1c)ZGk-p(Ntx_poDy5dQAU z{sC0Saz$@gv$)jsi)Un1Tiz2b-Vhw8ac~iRXH(PrZioCH1{;&Z^@~E)AIDDn=&g1W z(8x%(l*G}3Yqjws#5700>`ZC15LONnm=^kFceWwakAhm2-}zTis7Ty8<(M^k15{}I z{D?B6>{5!33Vth6Z5&hUFrNLF1sKUYLz8>39aki@3jRxk2?bqwZjGeD_^$1OSs+)V7oDxH>7hF41GFC!z~UG=A6{AG<{3*KGw8j^z=tmsMRrZ)j)I+kRpC<5sR5fO%~& zu^sByEd=8)9Vpvh&wA?0>|*|IDJ1tddiU9?IEN*joIwJn-9Hy5aDy-XKdhvV=_{`e zdggzz2^IzxjqT5PlmW|13O63M77k@em=9M%P3_ViRf6V!NS69jEC)r;P}UHoNF0{4 zE~-(3N+SrrW+M5<(#X~|6L#|-Vl)%UBgoUS#C$~zUz*!9^&nZ#OzJfe%Z{l&kd|Tp z(FAwK5f7;v?*E>-k?YwIR-p<>!*Y{ul**y(iSQA-qxv;y|J}L_(#{#)PjMhSW=5;Y zfNAPp;Z%-egrNjW|6mt4UU31w3-6jLL|88)B3W7`Y6cFPJ#gPtxqMp6R(>M|k%R{? z(MP>YotMEAoOfDc3`j}4(Cq1VCxOyt8C5-v>AAhmC?N_$5% z+>}s~(}Sr{J-tF(d|miXLUP6&zqK|VaxjLw=AN{)u{hM7I@?{RAK@t2L}Z;~6N70%?sWrITk1S$dQzu}mEts9LiA6PkHzznNs-@GtCBONN-+pXrBH*K$}7 zwQkdU5qD$IYDpN;52l4)@&xhj2y<^U*pvCG?VWoV7}c^GW<*$bs;rb-lV*_BG*lAZ zZ-ldZkJwX9sXWzsnjYwlLv-H7G0xo>=Y%d3i*y%NS^Y^U!5`$?l;GB~mLWJ~zc~=| zJDM@qKKs&NWJJ@XDasU986DLek!w7H+6n98@JOzN73I7F&G9RYfZzsv8mdFmt$cOs zT~qUo4b9H&gSi(8n3Jwg`7T7Kit`9m=< zVFJz5&^iXCznvQvBuly|w<#C(W>VSsc{lW_G8nWuL?4=Fl%V%!2|1T1`*S4HUsOgq z9-HC-EI+j3m$o0T0qxD_cYnB3+?!qWb@j_gqyO~&Haoi#$Fj~$T9X&P^!GXOWQVKU%E&z%_E2WmZW*ULXEoS{Z29v2(Vn0?hG1MO4swo0ZX4Y@EJJwf21Ims zNBP?K>oElcm_?U-6+9ikZB)!EVD^gIN^nJvxQQGO;E}>C1xtv&^%tAna0vwqHhkTu ztLyuoyHYEnZ$EPao@B9Q@0OJCYk<@Lc3h4BIShjc5+ZsWan8GtiG64>nF`+<%c)U7DuHTt|j>S zkNu-9qhXl4*eDRUOz}ZS{o~>vozlIrJ6@e$A8#hp``u6vGn&D1BB>@rM9P&G{}Kp`fkYIki5&{Rs~n=ewp! zG%FFy$wp%#%T{qgPUZeFdRq)C%(mznlo|;Ki*7Mww#6m>K|*4k97vQjI|&OtcO7n@ zkB_@95#WNg0$z3y3wXgpA#Uv6PP|@@&d_#I^-JHjdb|eCnBC>O+dbXc@R#^_!TG4s z+xJ@=U3Af;Ev5bN{qJ@OP(9 z_!n4Y4dm2L2Kp3lSozI8dNRC&MsHXW(?Vni(9fiY*_aCuFV&TEGPl9Tn2| zMzR1Ee<4K9_J(sobyHZJq%_daXl6v#+gV_z#&c7yyg^ocD=OYfvPVmfc_qQPg!gGl z-q)?fi0?V~EMU67OTq0<6kxQGpg=Qy?SBsWDZRTOgevpv*j)djM67cA6;f`f>;-g$ zfu2}S@ArW&zIm$dcr?-b{(QdvJNl~?3Q(nVXN5I6sFTD^WKfkt#gyz79cWEH<^oKM z)SS3GV~q)wk^a4HTo*vjY??@arKus8Epm-`R zT%uYT8D-Yhd8OM$`>76~*}`W8a9pbqvn%}Mp4DaW>kuC4Q9{h{L7zADv1z>~FCVRc zy)INJ8(TN!p3?*>IZ*lK2sM=W*pw4akCn zHzX^`T7sv({cUnq8K6+4akMadVxlUcCl>hyw4=tSRFiulSV5bYw$Sh{@anzaF-)-8 z70b*mGW{_XAO{C3a}C_KdnZSe2yAMeXy*(uGtpwFFU$6ErI?X6Zsw2P=ITK}A#=^5 zDWE$~T06wDKY+V^Tsy@fTVa9>g**cH@oD+3oFFhN^>9G9f4xwZhCuo zbC3MQ<))lJ#O15&-Z=BmbNq&S6LVWd@9+Af4fW^7_i$F3S#APs-5!R{~R3v*ED$P4;h`Gz&*8U8}T_(^) z1NW(kQ+D9E=f+4CjjdH`yw1Xqyj0QXZBqselOR&rNVY5e?pl+ZtpZb@~%NIG)i)cNBFh zRX7t~HIEX2OZ=+)Q~k2iKZl!Cm8>IYiT@yDFK7&*cDj@ zvqE@Z%5uo`$KyKZ+vb%OVx}*8Mx=ejqsK}AE>+b)DR#DsG>Hx&ev5ftO2k;xC(z@W zcAon%yFZKu-K-9_F=9ha*L?Hv@i;KICu7Xe^ZTJJCTcK=@Jqi=D|R^Wd>XCv!uu`0 zPOR^&2x7SdcidJ#9N4cC^jrc8{xasZJEzirJ{#W;UXRkFj29q49HgDOYMR--TOvv*`A`2KAIG$|_RYSu4 z0#tyc>8NqbFb;Ai3#JCj;Td0_+I%v;R=_Llecw!NTHF%b_-`rBIKAzgd~WAF-vW;x zx_=RVaEE8>F~o)xbRZbR$1U3oxhwuA(I=HfQaD$ndX4-n7clSq^+R2#iv-Ywh)7iG z5%sL^{R@^!u5Uk_3)+JpZW!hAXtXTjaF6XZ<0-2-mJ?aPiq~zd?~)b%TYPxbe54Lc zAMFDmpg{}1?3%(Q!66|fxp9#^s?@q z#6#rcw5KxaYDdjlaqG9Wq%*>ZhlowX<3Hw$4^L0qVg=FA_@!~AKvExAQ2BE8t&h&F zdqr1r(sj;B|M@@A7M*4sHPtX3* zR~uaavlRxi+YE%XbL5F+ks+=b&fjEtwkfaGEaryN({#;5>g6YRU_SfZ18mTslJ4>D zXa!%#j9u zh+ld{{j+Q#r)A!XDX6c-Ra)krm@YRc3?fKnf@5Hyg8SY!$)fr=sH7-Oz%E0%DBP_! z|4X42EK$1?!+VutR^ReWD`ufjckmd&3}}o-73#xT3*}MN>V>T2JR*1cg-b^YH07 zj+Jv0^Oq-xf<6^u(a^uzT-#BcL;gE$(a6A2#slkpP4R-b-pN<6x?Xs z;Q+vn0717!g=G)vWcvs!PnT*w8&pEwBTMts-+aZ?xl_psUWq2MuU6-Nslvou6N3ge z@j76O{L%_{IeXa>swv-(b+yZY_Eslwl13Vla#E#lu0Z$4lM3JZXj35Z2EeC~u)I3d zI*dkOxM{;!&T47nx|hW-<;tsmnp0pl`A3-4hXCRpe7;(E2^AIU3C?|)bg58)--ARK z(n=G9Y=<0X;Biq$+!8pjIj$K*Wya2RNhQjb3_MI9xvqz|F28H9eYNdj;7jxcu4!ZI-ei_!n0j>QO-&oR&ZYd1~>#=`tr?BGTUoCl4 zN-{xE9GKr(N{Y9cpT6vwiy^@F;4&4i?fvU?eglcBh#r_ASub#w@$SI=eCAmDW8=&2 z{$7A>9wl8ZaqSaRsNrFF{{8yrd9ZN`}p zl0dqO%BZOxYam#_@ruJPbl<_#NQjQP&Zyk*4e$E^^e-oc6;I*<7oOQ{x)YlXKaoFU z(0^G#Mgw7oOkQ;rD&dCrqoUD_z%%X3K6Cp^m>x8ad#R{WhV|zA=<#v6$ra^~K$|mS zT7lhW`MpU%O;^_7*AeUMi^jT@uz-_KtDLXb#z)RW&b)S3^%zrfzWB?-@NE@91Bb#3 zjcu@3A!>L3VgGTFx1~i3#GK#L4FU=gYHU*xWJ>H~O0oRe=jqn7viyq8wodrd4R!LC zaDUl;moo&03Ot8j+vf_i6w*EcGh?*+)Gfds$mu&OE^y`j?|pl(w|{uj z=gX$+^&(O_ZlL^TUHxUIaAbV^=6zqE|GcrmoGHXR(U^EDXGaqoRJTvDn?StRVG_M( z(%^?az{6ho1YB$K_`c@rR0-64D6)>+-O%HpfYVZ&4GEliJ#uYj(G6;B%kuX{SSEXt zS>}BW0RL%KG46{I0<{Hg28j9u8}A8K9^9X^3Y9KJY$7 z6o(Qk{r)y&pXQpt?cbH(Eim2*-ReYt+ssbunPi*XKT+kkJMH8fJkjGCH#Au=FFfdd zluyMH>=29yctp$@MS@xFc_S_}q-GV}@V=1hg^LJcj90fL=nT~zh95W7{mUAj%Js=S znirUe^+KF6Al#*giy5UYd`yHw1ERhktOYE@s7b@9Dy~K{tA7tnh7f__{-%&c-`fXTv$+CZ8^(xl&%iOO>wu3 zRPU9ete-KU5WxlqLH~jlYP6QMxcF9<^v?!Kao3+-OwDy zWvFx%na3B3*8mzF6bw07QrX-K5ktbDjdKu2rzq-lkX1~$C3Yh+4CY3S_FAEImbJ-6 zs0_0uDvkyW9GULwZ%@f>qn#xmu+s#XoHFqgOzd zDrJL~>g*Je-goR5V<%fOnDPL_yGkpop+DQXc*N0J((#yDr6|vfDs=WyiS4?@YrCQ^ z*lBTD+i#OAY(oD>w(%=q5lT^3(=iqs#QLqI)21!GH%7bBJDYLe809SoLXRQ~RG<*a?|)Wkq7V}Ve#-)z($xBl;S z5TvV6A|!*6saThP;Q+PGx&i)=nqw8#V~uF}_OK_yf; z)E?*BPfnRIxCtof*=gb<*h=w$O*#pVmnnKmnsf5DOn5HuKD%5WJ99i+PIPr;O(%sz ziTOTfx~%x#zdYv$I=G`x9!LgON46yTRJ*>}X5)VxGWwv(cV~C;GXM*@-rL)!m?&>e zP;K^`>M*!(PF?O?Hxyl+($GhDpJTiBn^y*z_{XX|c?+*1h*uF}u`Ylsn(yZaFIb#| zw4?KEUpvLI*%<_~S@gUrLR0~B{HU_e@HQHRul57QxLThWY~ig^T& zhpBWU0`?R2MvqIp`-?nNZnzyfNJ$1pj`vpg`^enLgq8KX-%I1}&a4bQd7-&0YdU`I zDvsplpZB=>C}BS%`ou_zBPVOtmL7%rK~&|DU(Hicaf@c);F2#ns3Mp+@n&fxl@uO- z$wa9I2H{XI3InpXWOhj0oLH>}nXUc+?>!J-R<>XJAF%~p^A~s*gU% zez$8NzEy?}Q*BqKxG^ya%5s`B9QIR&uT?@FRI9|3m}9&{`>i$u3n@2jfl;@dg!k0M z+66H%dqi&7Agf>_yXxs4G5i?;dc9#O5#}IBVCZ7QlBt^42izoC{D2&uOw;^jYlA9X zjdht!sat5Oz)8ydcmFMP2tva)?3$bnRo~aBKxPtTb906ZI2z@V~`0T+eyL z2SA8u3y%DJMR^)v5Kfk#A_AVFnw4ZpjyU2RYPjZP3rZ+63Ox}dSfcAOp+(*Q{tehR zo`c?hr)s*q)*zW1@X|~)%I--mo{A`EY0DI8sbTjED6(pkc>Wxp8}lkcNP*8!fRT0d zcIqlum{%k~=k&yX>(WKdkBOb17-)vkXCa!TvAJ2dqt5hUL|>2n0BX4uHd@-~r0PegMNU~{vrjX`&BeDfqAJ6!+EzVQO7s1a&8S2ICJ>G|hL{$WZA6*L zAQGwBw~cE){(X~}`qQMqeW)Fpkxb}U6$kZ_3Jx6m0+h+iIAIezp&W0$rfG;(4Zq#lYbeZXFyHbuX6=4$mUJr z-*v1>Tx3UkkiB?#(iw!V$oTja-O$q=zvw9Czr7rLtvDnkn3qCYCvnrAly~?kL59)S z)TXDSzN}sE55Jjw+Z7e8xjoos)^bf`NLXb;DGy?X(G1Btub@Ro(@vIpWTBrm{yXWA zBAb(Q}s zf&C++{DVl7ysaV2Pn$2SB_I*Bx|FwlUS!;>{z-0Ngn#S!(~vSQgQm7Laq>rb_B#nD zGMX2fsDEp*(*_b9&sRo;ZHnC;LrJQNC0zEH6jw0KZ0v}o2z!tZZqKg{D+I=|USEP{ zUnjh-4T#p&`}_3r0xW{3*!ZhqrgRxT*;S#{Q^tTjJqGcw<+JVKX2UXaN{}KS=hXXv ze!1ss^T)?OoA`u~+4q>%x@JXM$f_2_*`MO#uoM=l77RqOH1^4?gv#})(cMVr;Ffe? zZ5Vde))gDWD zm!B4cdag*QYBSeFk!J#Dk6l>k!v~9dE722c0!W1K^KEy|@!gTk@rhOaLVKgd#TWg+ zt17wMYTS>N^z5(ML-%?dCJ!oGt^RJFtIzkO@0wJO1Y}@mR~rxhLsmvi)zHr#di9?z zgc3Mhq;B@r7~Yz4pDm6kkpno7Y z%34N1|C1#}og4zr2QG3if;csU^bjDne`8?=7NG(Eakv0>Z3>Uc*d~ zo!ln!(c;L(Bda;l5CJLqG9$>#TN=g^=g9*Q6|G27=584EB%w0cn-X665 z!rSS^1zvELItTNk4&+1v81U^vsJKzX8VPDcF%~^&wmmE;Cov&@dzz4NR}MlD(tHVS z1VTkf!mOOJl)fPZG2Ge6Fd!0RbsYpIYkXh-2RWdqonCsZ0wz!P??a|q z^I}i9{wHzkanTsszn&jCue!~x5cQu$#K*!YkHf?LX2?i1Px|OFuNU;=G~uMDS8U9F zwAK1CxdkfmY*{vYczV_IvpIo#LI<-=P$znvcF?V}g4H`f5RV}%;qDoL-H}}TthqwG z81tWnm*_US|EzH9n7VEM9{?IBHs&}^d<0XrGLjho+0oYbu25st;brwk&X}~mxzWw&EZ3`f`o{Du`DY+j8>ISH9q0N7|@}X zUIZ*$;#D2D4L!O~qpE!;%^mos9q48PsyP~~%AGG!i_sjr)`PA)OHe98d%)k*62I+IulTtP0Rtx7_ z0F_()Y$k`%P7=B>)R0utcz8e$gTt5S+cIq4e8(xMR4{C$$d>3Elgc9+*!}P3z>`hE zex$9GSdWD7!h1o}(;x@KHZ0r^n=@)vA|vWHC;ju7ajsC*W&SS<(51HsbkVUN$H?d! zq4T3CT zA0En{>0qfLafMyNbg zR*YG_6`~EhG@dCw(D}zQu)CA-ZOI9D_;KZsg@>{AZ)W1tdc=dYih!0VOlg)y)_r|y zTNTzNbg^`zL(PiK0>I_p6|^ z^-F%OuP2h&C0Q-j6+7^cUcis88us8JX#pnOc7IogH?@ARdzxud+3S_fD85Lw&lfvonglQUPM7bZ#t zT6kL-v^8*6qw(lsQu5+c^#Otfa;c#ES{*m-u$C%6aDu(#xtama)ulw|*!EnIp(r|q zCxv7&3ztM2v3uzabx=8*OjQFy@A^(HFM=77tnz)E?R{hK$Zq zx<3UkTMO=HTrR|@Q<@3XV68w)6B|{Z@4VT{&@?DK?$*eUr*?tr>G@2TZPl2A<#^j8 zxGc~n-;R3rxVfS*-!vaPYFmEG0;$_%QHMLl7uEc~qO>SNe=D;aD2WJM7~GgkDC zE$?J1DVp!@mw}(hqtL^O#q$WZa{ObFyEm+UW?x4u+f>On(?vV<o@UbY)tQ}gJ!F~?h*HgR6jwxznrB0Q<#HoQ5-Dy~Af*=OH=ds}tDdqN-#W2%K-r62 z3IC5fr>?$1ETOoh)~uSEO@$K`KdY|t?i6X_)&ww?(Xlt?W>huGohv_h0V!d~Mla;GwRIIrKFlkq)JPY9<7c#6?R$DTg>lF_2MeL=Q^J*|?}4^Dsi(kzq#0BTSkM z=X|O>VpB(sq+2`5&-lTX$*34mBURp60WnLBM#L7WWD zTnSEJ;|%h%vn{{ML4u52UQa185*0EQOi$PTwHQ@=C$8ZFkSYkce%jmlSXEEisWv95 zU$}ZT=~C-5*WUEWV$|wJi}Jk7Oollr6PvSo6=bsw)Hj9 z-Z~_lh;it17EadH(7BA36}BIWSCO@hsibYoA`&skt0N(gbA?HnB^q0vD9VlUqR2m- zDOrd)X5QIBU!RCLnmSr(;{3Qu?r4~&S#RX}Y2Y-0s=D(r^`tuTTKTucDUDTsBNHz2 zmH8zSJ$FH!jp>0RHgarP__XR(y^nI%fg`(A+u~Kjdak1)Loksmypu|lV7x79U(+tI zo#1#MsKCuFR@7tdjinVp+r$$b0pi^4e6dWgapf!_ZFKj{9}c&(IQkuScXBn6ZRvQe ztmepRufU`4Tsfm%&}Y2E880BqLw-zUkpII)o`2n)=ztUIb3j&J1#cZOJIwZyi3Of~09}m=jnuSmK%B9uPr#<@Kb3BKx>Brk{O#wx3k<~K;51}h{H<>s%UwXH+oxe`C zd9x!5*1Iw($M3I(E4NST<+C#jVc#4yqsAVD_={aacw)`1wVnj^%Rc_DcI>X67!PFr zZ7n%HDan}d;FQUYD@>!pCx2zm8wgCF^O8KVw}m{^jsmf*$lr;2@ZmdqpT~GxyfDog z(W!!-c|5e7yJ`YS$DF;Xu0uu+cu;Iuh@G$cm-5#-B4?B^;!c1MmpA*VyNjZ5V>Snz zn?uj$UB<*+v8xTh*8y;Tb=NIu37=Zs<;D4!5Bf4B?3nCRu|e*2YkEI@SR9s@lNbM> z7L3yM8^=158*4&aY=7yQ2^T?l7C zyTE+VVa=@*~9WVEBh1shoG9e=v86?D;Pe0&dv2-5VU4I z6tYo1e`Vb0nh{A}Tz+sYZG_LN-J1d?NaKcRMhvgc8o8*Up<0B|f;GNxXs%P`K`a zj9>UYu;}@!(1A$0AKTrzQDJQaWh7EekZ9QfE9{rP-FdJ70Xyg80{Q=CJmbOL%3ms@ zL}%MeAtk8uXZTL{pH@Hp;8i7iXkK`zb9JlA1=i(tL$Ss?{)xeA&x$oFByfyoy=07P z=2&jSME>$)#wQjgBd(eRU`$Y>t1@*y1Bzmh&(pNHTjfpTKuT$$t>n<7Lv>R~mc)w@ z;WUQ09n(@Xe5`w848gJHlq^$@#cOxy;{t@Jhf|X_wz>0U9nd@>c`DHT<`J;QqZMUT zHx39FOevL^=qk0t*|Rno7+tX&fXh8}G;Xy}Y#z$3uYVh4@9m(=9I%EoGznC7a@DSx zF@K0vI@?T41?x=xVLa)P^~x@SP>&N%Y8>IQ0bn#64e&Y%cV6?`Co)%u^z|3D{k1wm zH_dnD6pe1O!#h2$rWoVqGuWK=IE25Vt&#vJIy<9W=B%|h^>8B;z*bkh2}_|Z(-ZtYrBkK}OIm>8p}p6G|p{+{qlm3x=D zT+?pIOJ|>cpgxOiHZ9XikT2X~H+AE~~h1B)pTJ`k;&Dbyj54 zYG6#3@etm54oJRx4h!fwPyWW_;X@p{Y!xY#&%W5mja0y5u+EaXgcbBe9a8IZDO%t` zpYoYiGT#?%YdXrvW*}Zo=G7;sKW^!Tbaxn3V?KZI^!_;hcW~jf@aK;B^Wkt-k=r5? z%Q~L(mQdj|v_;#u+Wv(K`IVlq#~yqEIu2UuP+T?8EPzC==#ELZ^{lwO0 zusZ3c4*iJ(#Od~B?dGQBYj)3w_*YGb9GwUHw2wjuSBf6JS!DBM@9s6v`>|xVw}H@&L5h-<8=hpVZ;UEsZJSqKZU*|AOF3!X3cm&@s zjDgDqNp+G#p>tB6l+#k4bkpnQOU@=XC{FuhCJ#e=CTR7id0+9~_huxnHNN{ta z$DLnK4WsN0x_v?WA?@W@8O8_oWr;_a^z^pmk`sWl@ZOzT6;sv4`jI*m_Xq>O^psBd zuZNw}CNayIbaiz$r{1-F_p4eu@;f3kfsvQ4;`GQbB(|9ow}*qjMc!}k?F4TQg+SKb z`2c?U0gJn1TI4z(%HNtC;*HXm03b8X6eRhB<5q89!bQ!Bp!jue$Vuxm?dm(GILPre zb%N+GEi24|uD?bu0g$fL2^zoc1<|Bo*box6W6ZFbp0Q_m@3VN(A|KQ?h3`$;H2C;& zDuGZw@OaK^vhTetiqt(Wu^}5dU9Auo9Xd?%$WY6BknVaZmzc9I6Lh?MW_J%c%lv%j zSe8xO0X0$I@{4V#g^;#XdV4sZ;FKG!j{mX%IRl?wxaXQ>3V9(#(<`_DwY*Ih8$J#2 z{E+!sdp6rla!U=1`JRx-%`W%> zr;;4*BHVu(1gcjQNPzS7|A%>qRIfc?!%FLuoWWXaU_a78iDs*`z^c<6P8UJ-;cCtW ztw&@lokYIRR2EAQ%06veKjd@k7$oUTPl@Y{5?*H%R5#IYNm+W$g&FFn(MlWHaemrs z&E;h<6mEyz1VUMN^T{V{S8vKszAz_|vnV>Kbg5W}foH#6iwveELz3uJvP2A;$rI$` zG+$bjHC-~om13PT^zA||oKjl!_R?T-wvwo|xo7l6zc3e=uDf5w9N!xJ&cg>r^@UQ@ zTg5|A)3EZXD4zb+6b_Ae{RI=#O_l1;syV0PZ@P)_GN1H<-|b#&nkDV0)vJb@^4M)% z&@8$B!%}?f+{LpOAktw(>RyTxtyAd^kCDMxctuqL3NU3<2em&GGLTKek6Cb1y{cm9 z;Lh9)eKVtDz8Bc~mE!InU0C6Tol&1@Vh3rMARQR#A$V-_T=`Y6Vn2gjq>##p8N$Tl zmuI91nLJk#j)ydI9;QEgJd@tQEJ_Kb5sbY>3SGZ5ny-F z#KI1yXg`tD*an~1!=-73kWlV~<_}uFqP`B-p|CTfcKPaO^-?NBP`~6nhO7-!)IF zaNUO2Y)u}-hEJ>_rlb6AL1)BK6lS_IZ?D=tv-^zN)WRgdiQJirjYnXe-Z>Qy{6V$w zin!C?@4}q(=UD`NvEAYZ2nI zrPqjmeah&_qLc2Ff5fVWez>x9mG0;ggwQUQdGjA{B{_rR?rHS1UOAjLUyE1bi7)RS z+cIhjcueX|{C-7xm4t$E8_M&|c>26#{Cc-^PVc&tD00ck)|>Vr?2PFv&b*veKZ`{U zY^S==s(PYeUek2kOA!Y(+iZfppqpFWWm*#0^(( zYJXkN5BK}D536lmb@1+~_nw=shfxx}3&vzc> zcnxitR!1zmGxNLscF+?BIRcfSw0ImWKl>i7{zpUP@iXt+72rb`dbruXxAzcsj|VR; zD^Y&G{j=neJfLZ@wmK^z2hXSnb&0zLS2`BMc2YnMc=?WdH73Q@!}2BN_ei#xN_MVFI(D#T2Fq{W zBcK{GtKyfF_c+yElbi2!U{BZ>dJKqUWPh-Ig55v}W`{W!80N)7ZQMBhEody}Bi@^I z8WiXAxm9%h@erC%ex%ps;prnnyO^??0#bA5)&y}2^-uIC5;Va&yQW0Y{o1aAG%S!% zl&33`fyK8+b8S+hG=NPE&SY0a%4M1S0J|B&@g;gy67v~6s4Y}>YNbH%o8 zb!^*qI=0ba$F^>gd?cB+#|$Iz`wXKU6m+2 z%Vjc-ENKVL>fiy=cO*OKp0($2qBG&3T|Bn4<}P4gXo9w^$oW_Y9Tj_rOhu&=(PQ)> zUuzTynr^}vA!wlWr*@s|*X%hV$vC{7R%PcXvCu>fH~_`EqLp;5^_y4d~vXz+lh5qy9)1Y;~4bgN(eQzVq9Hm;ZJo|Y--B29Y$|(CV7DIu$YloV*xaqZDO7%GNhhqd9FD8 zpeq%huJHz8l-4=KLv<#PzqGog{NA?1T&Mv-$CVqR!4CZ+qI<2OgP*Nb&Z1GP_6j!t zUO;4!GFJH?yg)%t2_Tjf8|aelNbeB-vvtHUbPyn`?qLZEYr3I$Vv97H$8+`MlE2}q zXO|`IZ!>g86ki0zq8n zdcFp{tm&R0Nm?|0Yp#90ZB22&Hr|h_%EDq$Zvrsgx*4l_^d}2QT7fLWQ<@}N!(%z5 z8>7S#*eQzQ6&+*A_{^!k;S%@}XRtEZCInw}ON+MZll2SoX{P3?)D7j> zJDr*7vt`S$m$dBkpsz0>;6+ETvA4Ba0DCi@)Cd|-@NZl8`p7f0JB~l=Eeb>sg#skK zbkkgaY&}pC!bq15x?7Ltnd{>a@4TxiK(D~eXI*NaZYkl;?(V+E;&xnznT|s243SahYY7y*jGu|z5mV~MJHEFw5 zwDf`I9U-*Wgu{!~{O2v_=b4uq4@HUIitUUwsPM2d2pfL$f%(+LwZ!qZweE4uR@}tP zHTtd^@)tefnHonY$8`>Nsh zo!!%U-84niRQIpC7YAnjpNfnu66=1j9S@O^2`~vLlK;nnM}uZ}cP=L|Jd!LNhZHj8 z$HfKMW%NGORxp~QA!wVBNB?%9ItTP+49F1J4!)bVPWMg$AYBIX`^eMNWrmOEj6t2$ z3}nc2<{USskHvUqJxH}!TK?uea3nt`px}U7jd&C`afa{!9vOx-lE%OY z6n=lnGWD>2U9YC`klb-evv#a&iZ-YhxPCnZqKJtv1qel8N2E4cwoq_G7TsWj(_mh; z3A?tNv^{t7mWvxQc#s*Owr{eKHz~Lgg9%%9EDL2_z>t1?g22gB8?Ll`U7B3w&<#8= z^6^`yWuAB-$}ISX8lbla>EMvvKu%`CV(*$$qfV>F$Se-*v!P_q>MCEbLwZt;KZguy zKuGy%?)l9Ej4{C3qKd&7d&9VEcIt}l-iU_ud|O_23_mvY7dek6&|djNaL|FO$)P*$ zzf!Tz|0XUUh*Ta_^PXD|-bn}{M^;@&^}!@;IqG&pA|lgq#xND~s72A>1meYlG5)o%NkZ~PNOaWWnjyP4>z&n+M5bqt z{wja7l9Tw!%dFJGlXMR59z&_))R2cY6Pi=V$O0zLUTmYF8Ace@OaG!Rx2$A7=-oOS zNeS`fr(X#V8@etSMOV}5dOLb~<|s3$tC69zmZPzz&H$#2TjA-I7qbgz8;be;nv405 z@Zp+w`Wy&o$5^D8YPcN>*>hY4RE>|n1%>86{OB;GKz0_+>9qfJcrn1u#7RaOC}Eyj z)w1y|6cE*kZ5=j5@|aBy0a-PJ{j@;Ug-qu>P?4`)3Gm8_lYyOgJDLnA<@&Vxsw{*E zBxfbjO8t~F$q(^w&6m>gQ;YmulmFUV-dY%PtYO$;^fnO<&Q(xr{EqDoX5|(O3D2^y zqe!FGtU(^3DX=Z0C8Fg%u9kK_HXt)c`-_@d%wrV4zT;aWEP_OV-ZMDZr_y_<4cw{u zB!+){M_~&O(r`IY6LRRwss(T=Gsn|lp-|)xeLw8wGqxh7G<6NHj{2i1I4QzVk)uy! ze!&+nv2;UVhYtNb2RLN2O%qoIaITy+&;8X`jU_(MUOxqCt(k4pBDfYllId-ngQI*F z%kzX!%c`OFnAFTlmjhZPS;#k^s%)?JVT9NmuL;mP1t+WWPg~c~ptSMCE#H{j_v#>tVe2GE!S$0BCaB5};X^a|3un_pnzlXAd z%kel9uU#!!59#Bpyy8sGfH7sswqb7M<;!6L`Zf-Bt4{)j?HMMV-KZP(wfMmu(?2U)A5-`F+2QQj*p z{2pz3;fB(^!kTv3c=GaYuR+xNSw=A3b2eJ>MC0%eoF?(3$@R-zqNuL)lR;2#!rpAg zz47pTqSL%Ac%u3_5DKBI&MW^|%)=$6+23pN<52VCtX6Yn6?Pg*56S`u`n8(tJ^1MS zS`>rA2rEMQDCs(qLx9)ErE{k-=3@jR;H0~w&3DOadVY%hg5opI<2t%EZlVu^tN?Rz zw!gn>%pHHL$0yZRnC9;i+LRqnYA^!O)v~=^A0LBV*)fL-M=5ES1JC>2qiZKx+#8-; z%otbI$=R$Bq8rG3@q>%uO-xM;rJPQaYC-`#?5NW5>MRhurRePbe6WNN@67+QfJ5f5 zsfS>cc1|b_9m!cl=_YkDun|{+77qLQQ{5iu;vw3e4(*MNDFR&hcip|*pVrF&HclMH z*A;l#PiS#MyH(NfqlY^I;fxxbIVy#55sRBfcmp6~_wwPo^xprt-E#s22K;nOyx{Kq zcrWlCw1JWU0U%8eW2aE}kkRR?gqiR&Qnduj${>n*3h0P&5EMoDH#E8Y?)PMW89E?v zjA%0*SL`{&`n+?{0m6k?H6tbNR?f5osu ziEyC}hDl{u=mk61)>iXaWzPNtOy)`34Py6sBu2c{-@ZEw1wulQbGXJ)Pbf$V z$_xHpDbs0;10+z>Yei6;yI4&GEs3Bj;4cf)sWV)x2s`=OYvB zJv67eNKs#O{%J2(9F&qZR8KtJa1<{wgq-!jm7*(F1CdlIC~cK@B(5JrPN`_W5&j!f z?`r8pXEY?Eo|JwQmA~We8K+vb90h<~q?DN$F5V+4QWO)MZ%)U_nM7W1VqGni4r$Z? zB#FwQOy%6V(^S(dQJ$K22O)~e{ZjirIo?|Mtt)}5+#(W}4n+eyK|3(NTFwf_P;DVA zcN?t6w7`wZ)B@AECMCj-c)}PnJnN2IR8;J$ES&?^Q1Pq1e9SqEUeeqXWFx2VVl+-w zuYX7xbDPM-j(fdQ5EF=E!BAMY4-sW4UAk)YZU4+Hfjy)`^z^UO@IEoabf&i(%ao#j z!jh1|2dlRKZ;Y1l6X@cV#HcI2jr-&N}~Avx0Rww|YwdE37_#}QOv`3j87 z=#^6%5_^}M9hX&loaxNixTN2s0QFseD3*zdyZF^OtDxy$zmHpBHz1DA6@p-%)bg`8 z%?;fPN5Tj0M4b`WKKua05su$DfnOtohAK8ZaEwUu*`rz_hi`*Jjg)=_+JMI@=4vj~u+S(Ut7mg0Zxnd?FY4!~W*2L0ED=>S_72qnv8iJmDL@zmn*? z)((n;-pD~OQ{hT>jN)BWj z%t*kvr2RP5t6&kxw04#1R`IGeR{QrlD3BY8#Ls`REiPM&f^;4r_6*|4lrnR`q=hSI zUh}K%i$}!o5LGuq+7~<8R7LkMXT1zpraa(-$9>1+`BHaE?2}I0l@1P*>XnHe-zzg& zkkzm-44AE6h|0|RHzJ*1Wbvp`udeRqYmaOyIr6}z8BR8~b=%f?vrQ&LhX;_0XH!Q}Sg#`Xz$dTPgxAMIvk4GVl8EuKd?;zEA9!CnIIEkw>e zmqx#j1dT-$aPeT*E>S_Rehy*LG9QGK4~#Bn*uw5gRQcQUeG}b+(TYGJO{N4=7zZCL?9pK_ zgLr`xVhTahk<;JV)18CD*QEE-Vk>{1o9hG*-rJx@OC1QC0@`%MSUT2N%B~p1woeOl zrpS;2K_oF+UB7XVo(yP1Dp?|~OsFnKA85I-!eYg#sKFZDR6;ETKadv`#+rjEGyJTU z!dVAlWOf|$#2C%I+zoM`c`pXFyY?@+*DPi>1PFG*`xhm!*WUfL@;YHP^p5p zjB{7XP-w*vOOX9}bnKo&;)Av_YimrmS6O2psia!WpYd=hXRKqhO;iE8mR)_8v#)Uk zIrabTzt>%mr{clh~@pL0d!BlCj zxo%shPLO|e$|eA7VMR_x4V@kOG>ylujU52XOq}b*LVpAFWeQ^?fSv|vq>0NbdEYk;uD$?{6z?Y;j zG$kCDLTHtL7HA!pP@CIZ?(jYZ(WQ5X3{~K(5shs*oQoe?=e%3yY8Ed-&p&h*v=V_0 z)#WjFmX=CpcPx|RJNINKEu9)M{{6uVO?hT#Ty7SRS?UG z0%bvGO>EL;^=$W&g~U|F)HcwXCB6MxWZA@v@@Lf2tvzeIseS5~x5ey?V;Ev+UrVY5 z9PLIY+IwCtC8&IhsJskp=yhm+8nf0PRG9?`FdT6$i^noDg(I^tgR}sPurYV-A@!!F zG#OGbVG7NJp_j%gnDyxsfChq5|XYI?38Eo3lXXg7HDZP+q+>vIm zXx94}98-uAJnNu-P#mP1xo&3f`@2ec&wrpgThIS=Wvjuc%mB}FG1q&U!OZWva@xUCNuM`o1lGRHpea+Lq&;JY1ryq8pr@dx*)K5>M+| z_Rt5tb&Yk0Y4=YyvKAgM510OQ?EXS31WEX}o%$<+$tA-0f6PwsLhF}pYj>YjGp9l{ z{E9E^NL`E^D(`yT|Ju3l-{t*f`85THZ2;Znw0QNc&d+61WrsQ`_8p~mOklsKANRU$ z8t;W~#hW2C^CN5t*gdc6G)%I6bCl}hWT;gqF$de=vL=QV!CG2Bm_%V4n|pM&Ky{2%<2E^ff5+0)Mt zb`6S?Cx^lRY4|5O*8`pdUJML`*mKWei7uxR8vqe%!DhlN{6gwWejsZ=eWAA-?w-B1 zukGOhZ24|<#S*9RA@?YFF@&TMp0sq{dcDrq>3zLT?FG$!N&&5o}%Njg)nP0dp@Md$iR3AIMrg-1yg z3zY;}V=LZ2Wzw!`pUcmS>7reKejAR5z(Y;1eJ1Gk5k66Xk!<}dnpbMuRYK{vEaXsE z$pLe52hm@}0}IRenW(6)Qn(ZNxzLf9eeAw{4tM7=x1jkevx(6%5}iM^RoyxkgI-B+ zaiI=G@pg}!W+E2dLujl2X}7cj{?}VPB-XFXC@sJ213O?>bvYOhG8UShN=}EGXlyRb zgB|DlO9xsQq_OkV4Fuq(mXP7EenudM0HRjId^{hrnZF9pk9h%mXCWceouOvoz$?~*7V4g;PiH>>J2onN8Ai^D|Fcxl z1h$BDR~OVd$3MwuuhA3+tN?&I4CHBQ3#Jt&tR#GdZyl9`2P9_@VHU>Iqmm#(th+ZU zU4#dEQ1ceqso)P&iCyv;!ln-0oy}W@PSoIDaVNw zfbj^6@xdIiSMv1HkPI71E1xlz1C+O=Gyo#DzGxKihIa}}E7G<)Hv|^~)2j8AbIy|E zXN=R-8iC99#+m}#csd9LFjynU6*UFPi#P4}zU@{O;=T2wWzwE19`AJ`6zIF9;mAwz zq4vn)Lz@Yhk5Hs(P)tJ3pZf;vZzRP zXmxR3QR#S%sVFZyVR0+LDJwm!@J<7oK`^Ub_gC&w8;_C{C=P{00j~U&rzy}MR=Tu} zk>X{T=Q^W-R+(p;y0>z)r&Cn_|78K?Axa-D6b;@N`dT_@cu>{86d`XqgtC@#aac4n64Sds#=e-2pU#8u)OX`LwM`haAKLGfXqJ=7@;@0>S~Dk1xY} zonfm7D4u9%qcMJc5KAHA5m+E^%GMEQ+QwA}hqXG+^h086+zi~qH_+ZMVOd-I!mJN< zYdNVtZ>RUP5nH8sN5^#LSUOb_^mk>;SihFE4{f#Zz@3qtpTSX*!_E8dgTY0 zHTgJWA^SWXp#UA4B^*iZ*GfR5JiWO=g>F1@21`*{r`%)c=MRsEx|lH8cRb>PENpy` z-P6NUq*5xZkb?GqHYNkT+Idgh2Prjc6FXm>5+1)SANxJNYDK3^# zc_&k|T$syz5-~wwcDl3JD9H>q!bS3>CRaZ$fLf`L=uT>I5`;@~STlHjdpPitwwp`` zatrM`YUfkKova%6F53a`fc)$&8SmUcLorvwr~RAFU%ytqXfKCn-4s?Jz?H?IF;EBE zldobrX?foymj@OOIo>~SBpm;YAUmD#@FzIBhHES=*X6i>L$o{!_h=Fr5|89mV)j{PbG{6|5p|D zqiBBi(d3VEB-shbp&2aR1uU>Z$Fd?8~1OYHRg{gT*w8+L##QgQ~Qt(im(4gCt zCPV1#8v2A|&&P*_DLs2-7l>qB$ej*O@z(gQRMHBuf-dpwlcT2x)V1j{G z{z<)s6zi$&P-*52C3n)D;Y$xE*qAIHQ>icC^ef#9YJ3MClzYdkSQR7L=D#GG+fsxI z`(oDO>_aT5;`A#Dn;gUp!EupsmQT+ZQVzg(EdN%zC~HxTQt3xh7vt0WgV-{B~ z2(c#BcskBlf>&+dj3s{KnGq%~fv$GL6p~C3@H zRkVjcN^Qr+9aBlkfYyL0w^SS#O)_Dia}8iz4wv9qKe$!lLS`umC$71m>cFZL^Rs9T zV?i{qyfS{X7GZNN(6Tc&^YtpU!K~oYYLFILou=2ji!47YzZ7Ibr9jr*c%Gtaj{sX3 zHPOZfkEG1F@yXJxt9Nc|f<|tSL0|U1VX1l9mE*o5qN_p2gDNW4QRk0~tZ}9hqrN(H zoK8$7Ju?J-L)1iDJEf;PJAUiE3lqE&1%CgY!-vu*?KhNuw!aEjbA8TQFYYLRUqGL7 z3t7ISQ!f2pI-?9pX*F{trRi4ii9d6V<%uP)Sqda+c?KaG9e16|%t-ADYSas>B!_N6 z`MNj^L5bdkC1`UEKBeb`f1W#Dcy3A3_!!Y;QN=;YMRdI@UTa z{jC1nK{UNqq9Xoo&C#oS*=fwHUgm`-zze-ppNnVl@>d=gvrmhWLg)4Ict|jbnrfGC zZ_y4I6P)P-RzUQUFbEpFa-sh^J3M)6d9fNeUVTai!YB&=s~iLXxwq_s{rk8sbzfHV zbJ8pPmv&`96cu)uc#wWca+oLWlN^`o}cmg$K!SL=8PV(uJp2S6=9#;TjJDp z{Rc7nTBP>%=6GME&P^p+rDp&l6X4_la?~xuia#Wm3;g>Tt}&x*&~<+fZLt%E7?&j& zIMudU{IcyH?$h1agk7MVM;H@!2w`uGDhu--Fz@^IIQ+Qj)1pH_@KCta_^+;x`*i}s zo_27Mn8A70kInXLv1+F`@7~e~yKKOZsuUj{|6i)1<=6ZZA~M)0d^rfcQJ*=`5{gdh)U+*FPup?h=0TSbs?SuI>AoK&-vpUfEjguaev!n zC#R_Yc?Oui7Kt`Tqo#IeB^OGwua<9*EZ#SCWzo69j1F6YdUR{rQ_7b7I{$mZ32R`h zQ%oA4Nr4sNVUy_nv*XloqN>4Uu|Z zzK2xpT&OGpOE5k6PF8&9qRp1euIv<~2WAB&UjWK4jt}g=RH@AWrAnikqTJ}j|IotO zIcQQVNB*d#hX(%YGot`oM#ipmPfQwhVkru`sDw0_nKj!WAWX^MQ2!|?-LkTzRmpl~ zJo+Fll{r@x#u;}KZsVf*oKfmh@;XOrKIl;t;^!Wkt4YQCZ2Du2jUh?WMF@}e=M7U` zcK{@${LIWV$&pSo!78+-J{YEnwU~q9&{Wu{+In5l#X?D(TiV%EwlW>j7r9+U+oIK}NM%aMw+FZ;)PSPo?3FJq9kB}kqxYzn(- zb28bXwKBYFFK8us1hnm_>{L>{D)Qh)ynby^keWL8Th!?Gz|m<9{!f zz@tgW^66=XM0u?rz_%*vMe3+?W_cQsXoqa4IYeu1nIPQM_td?1qG{36)vT|<5TY7W zdo~wreU5Vico$NrYRmp$r||?$kEhHjUjo(zGXHAVxE@oeo;e=}Ns* zULr6w=T>OJrYA3T_N}<3;rXIp;7`Rw=4^H@++$ZnTmpdkAO4VBIa)B)89wVsVyA&( zmDM64LmQjyKE}2~CaZB7Y=xP*jjc7eX71XNT@KD8rqc0&YS}xC$&Cxi#m5Af*=5hX z)J~rINwhJX(6$0pT@^cwFY07H+L}&Un&vhAG5%i4zaHWnroX{0lPPK|+@L9?0#w7Y zJT1D(H|$)(>FiP`DR;qIsOgGp2{^ge={5o{1;weqI2zZm2LS69X4d`0hjFM~Td+Kt zll-3>$!60x4a}~mSN!idk2V^Y3kZz%GGUDlrEb4ZB*#tZ0?V(Y-Gy?d zHO$Qyrxu83m4^dHb9r0s&3pUX8iA?HJRKS8 zK_7s3y*zjoA3Q}rhHYAQf_DwFeV(g^b;~{)RLGBLMs)QpiyibyLYB?b)~8e$gogfM zkD;M(SQf#4=#285>;NJUXCdb~(@mr(?-ho#2Jf&D#wO%G$S=o|u3O^p{gHq8#V9$a z*5T#8E+7JEJ^}=J#J3_p8o0q$jijGmVQ-fv{nDNuVTrgJsTN55aZr@dC;e5b|2nrH zV9Sp~b6Cg_pBXdR>2vetPJzHBaM})IouqJWhWkQX0CUQJ#pk~J?lM1xe*DJ%Sbw_1 zoY)4+@!#_=ZYNKk_rt8tDjBZLCa1@@B2&md)>-PAzV*|){B4M9ZTo2PdUd2L%J5Yy zRzb9%&yJR;vtgr6?6JZ1E7h#e^dE`>cUs1}UL}Ar%xPc6^6q zi;(W+OtUApicYI9XG-IDm+~Q-@PQwDx-)FRg{)7v^g4l0A_}fm?7B6r1wm=eTx_VS zfjAr(Ri0P8l6tyxbv9&Oop?8xrK8)J0fgZepdKLRg?F&yA)LCk)We2%50lG9es>rB z3IE!x)yd#vFrmIqgGF?(9~FnVA*z2BXmKRHK2Gt{!NB)aNkBo%6^9iz0w~((jN*6T zN8zKe9f&2X%-UY)-lC|0#iLUd&y*(Ny?%OYBN)CE1fZvZ)f|Mq9x21^ke>*$O;XO? zXa>zvOUd*NU>E#cqKBseV0B#6!q$PlO3+@S12Y}~$gV}wrNWFYR#>FWU zV0HS5yCMpTAKjQZZXEWEf2mHZZN61kgbLNHABLWCVZ;;eQuY%+oVfaom zT)1Dbh=r~kvgy%{>>b;f;q0;5HPNl1#au?ltU9Wmj?&Rwn<_czJrqpi2IfYjY89v+ajDu?Pg)Dva}H6I?D`_Bny+YCV!?QYk7L?U&Qw6 zDJ%hzy_dEq969&48ZB7-Uf|r%2EII3F5MEBnqXNm&poCl#723^Rx8p`S#w2ycEkTm zR{anDS%P*BcX|PpUB13|$QVeO3i7G4qP$oI6rm7A!2tty;24J(435DbS)OvfZgVDG zakiPyRrM5HyMdl$rft{4-kPT+C8C~=y)t}&$zR?#`wG#b9(}c8b!R{g6jsUsvV(3D zlP~YU36uzs+9Zbg<7{$dCzV0~mLkS&nOt#_;%nf#?68r$@ZLp4Bg8trSAfe!LF$Rz zILt8jhA}hQ__+ETKpa06#}w7BB;GX%_oGHKqwqU%1sx+dy84Qz^LaVmKqRe9)WL(o4+3G5(M)uOT3Il2R`5BON53?EX5EK=~l3;>o zHDpD8)$V)d6I-sMkTMMGQ>`6p5K(HDpm1|W3B8TvWmYFyxNf(4Ox{OZUg}1;5O7sw zY%TcQP^pbysx;-RAa6v#x2!qXUJfk7y=;U-n;6bXlzp_h4KI7IFj+L#N#62Vila63 z(+1S#cn{daL)JxY4XGOyB8gArdP-^}8TGejm6ZZ}Uih@sD#(%@_Qqrsn`Av5O}Sv} ztwZpHcv$AmO+w(EclK?3jsK|xkNV)Ex?C2bo@x#7+@4->&B34P7u2gJ;Es2 zLQz>QE3n6X^hMP?bh$F&NlpuikXFm9fV>v=oEC1DslZse(`K%lc)A_V>e8L`$IMf} zXG`_`xTE(Ks9dKOWM59=`pX<(Lq$>L_1A#}CQhO|jAF115dj|`Ug)C5Zyg`czx(Tj zu=AC(4H`n4j7s?wt2o1BmD=-R?_l!=>vi{da10RNxzY7vzD{Kiw zgKXk;lyAo1wg|&1vH9!nBKUg-vB>1Z2<;G(AZq^Kc$+&bEx)Ii7l%HmDRv{(6ns5P zeiP)V$OpV8dj?&v&;8NjFy4y3UY80K&dRwHFAuIumSgr|N&_U)@oU3<C4Y8$joeObLge~ur>7H8Xjo{!spoa_`SPsPsd9Gu3xS(alT!J6g zX2(yb;G9vpK|KC~aM*SUKt4~4i<_G^Y}(bOf-AuYp>VWq@hR|BPgvxK$n`%XRiK!F{*GtQTRKt;VIF$iM!hkU6+@LRTtdd$<^IdsPp@MS}xzZPd~aN)hF zM>6($nD&aTVo0KxRjwn6PRE*J#rZZ+8y6vT14u+^L>U%Jft!FuiViqeqVAc-BC6Rj zz0j8A%8KGVz6@Lx#~wF92ytq_8_M)BNLAsBdr+yo!F)bC?u#grS*e3wwWsy3;ea69DsBN?>Sg&nl4sPUH6+cnwQ)o!X)SB;O_D>NX_ z+hr&%LE6!5kNm7H5u`8)Mw<|}HB~DUI?R|dCw`~kgQ#grL05gdurgwA#g%^oWLVXx z`|c-28NBe08_>hb-GW%6GBj;5XPVV^fu(^Iga3T)w~?s8I|?KwR?q3Tu(Jk~V%!*- zq+{r{xVn+!ot8RAJfx?oDviuRtnNCU)G5E_r=Q4btqWzR7Gl#qdQ#J@caWP>Hy0&D zs{1?H5t}!M2*G1hJNRW|i{rw~!#-$X{@zwGWvpubLyW zgOBoOtn;Td)g?(+lRJEZ9_-e$9xIxmZn7{Jp`sxoG}r8z-#MFGQZKYZ%Ft%~_gMHu z>43IaOA&V??DE*2h|@FHjn9ScXJ5A(YYOwvf=%!Amx5VFwO^!+R#n_OJ?we;{5aR# z;EeqINDfI2V^e*cv}#}xZ&5K0d+l;@NYw!QIw*|KRTZkk<|6s)Dn^~YerzC>(me+Nnh}8%c0*l- zq7*HA{rCBn$>yOjZe_Uf;Rp#v2xltd0LQifrXQbePfoljs4T}x^V{Xf^ZvSkZSR}V za|en!;E$yKo~64Z-}j!GBYELy;G(JcxxW6E@9P_kfAFiNV%2aFq%??83u)vrCFUA? zF8!=rq?$Qg4j=f9omdhVUeWd=0tDVN1EJVJPA(klw6rSO3AV*f>HtvmPc+=a+Y5f0 zJGH!%+ZotYB^No*#Nl__($;0xD7W>q*YvQnvlCE5UxuI-jEukzjj>o0?PseDm)e#11#ERHT9uqFNC$q59nL!kUcHij5@-{av8$`1?odT@bcjtk!j zG^))4^MjWrE^DC33O6n38re4C8PO2{PXIOM;y;38VBT_w=B2%KsVdvvQlB>AL@k!) zV-VzsGgu{ofmO8iE2mRq(ze-MAJMcSFs+NwInUZx6{K;tu0jQu0O>zwNl4>4P&eK1 z6bOf+cwi_8*l|vS`Frq+dY4W-mM>dU)}Y;(VqV4%Rc9FtwRIY*`P%P8a1AnW-!!;1 z7lEXSk1{H`9Er0+XXAZ(c``le@>>v;GL^y~-A`?POg)+axBea&$23g`ZwayuCfj~Q zDUhe5B1yK`%%9(g_EMIEaBBPwve`a%x6YbD*08g8QOu-2Im$9HR^A9LFE@K*p_yQ! zB^|G|R~pF1NL)p$TmCx~@C|mURU4d(9lp)ve*T{?qu1L1jnTiFVY=%U+4rkJ7-5q? zyhw0@4kAeCDcWPZ_sZa<8Lv|0C#b5O!+Xk{)C0Yx z4cL#&IuXk>D*}8Gt7HBc&x~~JeaytyewUBar%~4EstU7H$=*~E5jL|1v(L3xvnav} zTDYV)d47Yrg9(jOE9&|iG%PCOi%Ab1pz~Q3Q??f4_oNcGUBt8AFBJ=yEEaxvOX~u_ zd7N1uq`LuGA=sefb)@afFl3!(lKRyd%gK7t76Cy#b93lud!wcDPnj%vt=5Ia7t{Vz z*G_1k$FHQ}9H?HRssnwRV#T#GG>O)op|F-{3Bpcgs5BZMKih1*rn;0LH}BoQglA_>n^n^fu9Vmz|JbplA8 zb+*`>>pv6qbXc5k>z{$ee0fqz#(s}nhS4|8|6NW-gG<3br72NE*kxa9Y9Pf}s@A4# zA84Lb6m#{U8(G3D6{&B2iAKo1FJskBDW5K<}5MIhP{OISOj-oMu9M=-^*S1 z&bo9k@3nn%*RqVSg2i;Vq_Z|6KO5|OFO%n|a;HvfFgvC*g&3jJVvj`1_H=yfnHDh= zqH84u5Rm&!G*-qXcB61yqn~y`RC7-)?)YEf)E^u<9^;7L-oPM*&9z}=rzTX4uJ(`n z$avp7AwFZ|S`YPB$h_CP*5YM_)iHyAmGUuFDsxDsZ#MO7+ETd6;sg{cSI}QJ{^iKIuS0Dq_`0tw_s@dd>fZO;Drbclc$(nD%J%&zlNhq@ zR&SJ{g2nPgnKxLR%9o8heEnvHI*yC|zNcZ*`>Yl61QIVBoOW#DwtS8aHTP8F_XkxM z$(WKycq8ED1X}||d;1s$XPiP5@V)z)eD*t*hwQ?S5!c94=+WD1T8&b#7jY^2N!NxO#bh zVv^{t+!70#aL<_`OCgqxFMu-~=BYl7F0)2O0JiPvRXI%AQSfF1=6t|P6`TVN5YXLHaKU7YN#h-@nN9ONeu$4W)JaTGw&9E%LyyH zPj)i~<}ZZb(fz!=9CX^)qq1eouWJ#ekhmN=Y#h0~++6m2C$xBmDd`T_eZg*W?{Kj~ zHn0r?Ei@)HxIYAxN!(|3Xxe+>B(_3`g1Yi4LfR+d%GoOQaNjRvO)uBc+uwJ6+|2&6 zAZopKoF9I>oMN4DdZ33xU_^PSLngi+j=Ephz{r1MA#8VFtEB8F3k28K`-dua02HfH zGg6eKl$a17K603DmLJph0O(iI0mVg8A85yHsOo$*%GnbMP;!u^^WUWpROm}K3{&}7 zj>V{YsNz^IKiC~Z%1g47EqmN8`U#4veghG=wX1*HT@3k}lk$rcXQfa+;`w}=n(}G(^K#=XHc1D5;p{GuzJu9`1RRUz#S)22?DPpDj+0xO!=~_&GE7L0 z)6&fF;v)7AuL6_N(NgjdlPL}TJGp=KaOBYn_>s4anA}+M+ZoDQ1ptC-&cR}2`Akh5 zoMl;9ucz29kqOa`cqwdS(8-j*D!}`u?iwgbSC~VIVMH6Trqr#|u{ReUY4B2lhWdY& z%~*kQiB#Lb^Bw=imi=6)yCV_G$e{ma0kH$Ex7qy>2CHq{X1`+_M;_FOanIiMpt%PX zAgpKRifL1!!Mg@UsTqt3$9fZyGs`#+jgpX+?T4hQl5{r7?p-74^Ba?s6rmGkG02+< zhg)gxry2j8C1VkkYLSbg^h9=19$q(Y{#W?rPW!(jJ`A`_oswurYH^DWW&*sK#L5`tM&gyswMa6v~%RA<*T_GL57z0r68cw1Q@hcN;B#CG>_}^ zjirG7+tM6#h(0z^cqb`!l?7Ao&wRkTxwNdxw{#gya>^Uaa-18k+ZrKhnoNr1%zz_z zz(fp)aual>iW=ZwAgK^@yDBNMD%;6MzzuqU9ce0brR{L4E+rFi-k#H-c||i{{%d@+ zA|>e*9Pk0Vmwd@V!vm?ZIUOyOH3XYz$)xF=>Khy@vYHQ8l>yRn60ozGAzg)d=*vYw z3vr_OjqZq#@^yjCTQLe|%$>0MSqZ;%uwww`!*NI}gWkO~o=guoeF>V(tgriQNP7zN z%rJy0v;R`66=)|$Y-KVor%ctUkeSWG6W)xL1rgETIa!SY4!}v#^62|Sgbl>9cNf>89fr6 zle8avyQYz}{`S-|NAuO~2p_rm5wnf-+vh4Bd$V;h&oo!O}&WijzaAtPM zjw4tmUX!^64gX|K#5SIMH`ipnzpE7f2}kG!Kj=N0)?L*%dyTX8nZdl8KKZ~C!FFE~ z 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∨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