From aa8e262d2b31c11faf2c22bd148a7edee96eeaef Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Thu, 31 Oct 2024 12:33:07 -0400 Subject: [PATCH 01/10] fix: workspaces query to correctly user username from users table (#15305) The subquery on the users table was incorrectly using the username from the `workspaces` table, not the `users` table. This passed `sqlc-vet` because the column did exist in the query, it just was not the correct one. (cherry picked from commit 9d03e0429fc572d18010226c37974330aa3d640b) --- coderd/database/queries.sql.go | 2 +- coderd/database/queries/workspaces.sql | 2 +- coderd/workspaces_test.go | 33 ++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index d00c4ec3bcdef..38b174272522f 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -14947,7 +14947,7 @@ WHERE -- Filter by owner_name AND CASE WHEN $8 :: text != '' THEN - workspaces.owner_id = (SELECT id FROM users WHERE lower(owner_username) = lower($8) AND deleted = false) + workspaces.owner_id = (SELECT id FROM users WHERE lower(users.username) = lower($8) AND deleted = false) ELSE true END -- Filter by template_name diff --git a/coderd/database/queries/workspaces.sql b/coderd/database/queries/workspaces.sql index 08e795d7a2402..369333a5eab9d 100644 --- a/coderd/database/queries/workspaces.sql +++ b/coderd/database/queries/workspaces.sql @@ -233,7 +233,7 @@ WHERE -- Filter by owner_name AND CASE WHEN @owner_username :: text != '' THEN - workspaces.owner_id = (SELECT id FROM users WHERE lower(owner_username) = lower(@owner_username) AND deleted = false) + workspaces.owner_id = (SELECT id FROM users WHERE lower(users.username) = lower(@owner_username) AND deleted = false) ELSE true END -- Filter by template_name diff --git a/coderd/workspaces_test.go b/coderd/workspaces_test.go index c24afc67de8ba..0a4e10670132c 100644 --- a/coderd/workspaces_test.go +++ b/coderd/workspaces_test.go @@ -1313,6 +1313,39 @@ func TestWorkspaceFilterManual(t *testing.T) { require.NoError(t, err) require.Len(t, res.Workspaces, 0) }) + t.Run("Owner", func(t *testing.T) { + t.Parallel() + client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) + user := coderdtest.CreateFirstUser(t, client) + otherUser, _ := coderdtest.CreateAnotherUser(t, client, user.OrganizationID, rbac.RoleOwner()) + version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) + coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID) + template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) + + // Add a non-matching workspace + coderdtest.CreateWorkspace(t, otherUser, template.ID) + + workspaces := []codersdk.Workspace{ + coderdtest.CreateWorkspace(t, client, template.ID), + coderdtest.CreateWorkspace(t, client, template.ID), + } + + ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) + defer cancel() + + sdkUser, err := client.User(ctx, codersdk.Me) + require.NoError(t, err) + + // match owner name + res, err := client.Workspaces(ctx, codersdk.WorkspaceFilter{ + FilterQuery: fmt.Sprintf("owner:%s", sdkUser.Username), + }) + require.NoError(t, err) + require.Len(t, res.Workspaces, len(workspaces)) + for _, found := range res.Workspaces { + require.Equal(t, found.OwnerName, sdkUser.Username) + } + }) t.Run("IDs", func(t *testing.T) { t.Parallel() client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) From d799404829ead4fbae740d9656ab768f20f139c2 Mon Sep 17 00:00:00 2001 From: Bruno Quaresma Date: Thu, 31 Oct 2024 12:26:30 -0300 Subject: [PATCH 02/10] refactor(site): refactor DAU chart to avoid seat consumption focus (#15307) Related to [https://github.com/coder/coder/issues/15297](https://github.com/coder/coder/issues/15297#issuecomment-2450052538) - Clearly display this as Daily Active Users - Remove the user limit bar at the top for licensed deployments - Explain in the tooltip that this is for measuring user activity and has no connection to license consumption (cherry picked from commit 4849b4d8ac32c4df2b0442f7fc62646814a18e98) --- .../ActiveUserChart.stories.tsx | 6 --- .../ActiveUserChart/ActiveUserChart.tsx | 49 ++++--------------- .../GeneralSettingsPageView.stories.tsx | 7 --- .../GeneralSettingsPageView.tsx | 12 +---- .../TemplateInsightsPage.stories.tsx | 8 --- .../TemplateInsightsPage.tsx | 3 +- 6 files changed, 12 insertions(+), 73 deletions(-) diff --git a/site/src/components/ActiveUserChart/ActiveUserChart.stories.tsx b/site/src/components/ActiveUserChart/ActiveUserChart.stories.tsx index d8735d3f5cf71..4f28d7243a0bf 100644 --- a/site/src/components/ActiveUserChart/ActiveUserChart.stories.tsx +++ b/site/src/components/ActiveUserChart/ActiveUserChart.stories.tsx @@ -22,9 +22,3 @@ export default meta; type Story = StoryObj; export const Example: Story = {}; - -export const UserLimit: Story = { - args: { - userLimit: 10, - }, -}; diff --git a/site/src/components/ActiveUserChart/ActiveUserChart.tsx b/site/src/components/ActiveUserChart/ActiveUserChart.tsx index f1695b0641cc5..41345ea8f03f8 100644 --- a/site/src/components/ActiveUserChart/ActiveUserChart.tsx +++ b/site/src/components/ActiveUserChart/ActiveUserChart.tsx @@ -14,7 +14,6 @@ import { Tooltip, defaults, } from "chart.js"; -import annotationPlugin from "chartjs-plugin-annotation"; import { HelpTooltip, HelpTooltipContent, @@ -36,21 +35,16 @@ ChartJS.register( Title, Tooltip, Legend, - annotationPlugin, ); -const USER_LIMIT_DISPLAY_THRESHOLD = 60; - export interface ActiveUserChartProps { data: readonly { date: string; amount: number }[]; interval: "day" | "week"; - userLimit: number | undefined; } export const ActiveUserChart: FC = ({ data, interval, - userLimit, }) => { const theme = useTheme(); @@ -64,24 +58,6 @@ export const ActiveUserChart: FC = ({ responsive: true, animation: false, plugins: { - annotation: { - annotations: [ - { - type: "line", - scaleID: "y", - display: shouldDisplayUserLimit(userLimit, chartData), - value: userLimit, - borderColor: theme.palette.secondary.contrastText, - borderWidth: 5, - label: { - content: "User limit", - color: theme.palette.primary.contrastText, - display: true, - font: { weight: "normal" }, - }, - }, - ], - }, legend: { display: false, }, @@ -103,7 +79,6 @@ export const ActiveUserChart: FC = ({ precision: 0, }, }, - x: { grid: { color: theme.palette.divider }, ticks: { @@ -138,32 +113,26 @@ export const ActiveUserChart: FC = ({ ); }; -export const ActiveUsersTitle: FC = () => { +type ActiveUsersTitleProps = { + interval: "day" | "week"; +}; + +export const ActiveUsersTitle: FC = ({ interval }) => { return (
- Active Users + {interval === "day" ? "Daily" : "Weekly"} Active Users How do we calculate active users? When a connection is initiated to a user's workspace they are - considered an active user. e.g. apps, web terminal, SSH + considered an active user. e.g. apps, web terminal, SSH. This is for + measuring user activity and has no connection to license + consumption.
); }; - -function shouldDisplayUserLimit( - userLimit: number | undefined, - activeUsers: number[], -): boolean { - if (!userLimit || activeUsers.length === 0) { - return false; - } - return ( - Math.max(...activeUsers) >= (userLimit * USER_LIMIT_DISPLAY_THRESHOLD) / 100 - ); -} diff --git a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.stories.tsx index 6f09110e77a5e..9147a1a5befff 100644 --- a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.stories.tsx @@ -50,13 +50,6 @@ type Story = StoryObj; export const Page: Story = {}; -export const WithUserLimit: Story = { - args: { - deploymentDAUs: MockDeploymentDAUResponse, - entitlements: MockEntitlementsWithUserLimit, - }, -}; - export const NoDAUs: Story = { args: { deploymentDAUs: undefined, diff --git a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.tsx index 0b4ee0c6d0c43..29edacd08d9e7 100644 --- a/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/GeneralSettingsPage/GeneralSettingsPageView.tsx @@ -49,16 +49,8 @@ export const GeneralSettingsPageView: FC = ({ )} {deploymentDAUs && (
- }> - + }> +
)} diff --git a/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.stories.tsx b/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.stories.tsx index 7fe492a1a3275..5ab6c0ea259f4 100644 --- a/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.stories.tsx +++ b/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.stories.tsx @@ -868,11 +868,3 @@ export const Loaded: Story = { }, }, }; - -export const LoadedWithUserLimit: Story = { - ...Loaded, - args: { - ...Loaded.args, - entitlements: MockEntitlementsWithUserLimit, - }, -}; diff --git a/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx b/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx index a7e0351e8ba80..f205194a1aded 100644 --- a/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx +++ b/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx @@ -249,7 +249,7 @@ const ActiveUsersPanel: FC = ({ - + @@ -258,7 +258,6 @@ const ActiveUsersPanel: FC = ({ {data && data.length > 0 && ( ({ amount: d.active_users, date: d.start_time, From 0cd5066c865f4acedb70bbafad782b81491173fa Mon Sep 17 00:00:00 2001 From: Danielle Maywood Date: Wed, 30 Oct 2024 10:06:10 +0000 Subject: [PATCH 03/10] chore(cli): drop 'notification' prefix for configuring email auth (#15270) Closes https://github.com/coder/coder/issues/14644 (cherry picked from commit 823a2ea22ef3e6c65acd8328df9d501d9f8af8e4) --- cli/testdata/coder_server_--help.golden | 72 ++++++- cli/testdata/server-config.yaml.golden | 51 ++++- coderd/notifications/dispatch/smtp.go | 4 +- codersdk/deployment.go | 178 +++++++++++++++++- codersdk/deployment_test.go | 3 + docs/admin/monitoring/notifications/index.md | 56 +++--- docs/reference/cli/server.md | 145 +++++++++++++- .../cli/testdata/coder_server_--help.golden | 72 ++++++- 8 files changed, 536 insertions(+), 45 deletions(-) diff --git a/cli/testdata/coder_server_--help.golden b/cli/testdata/coder_server_--help.golden index d5c26d98115cb..cd647d0537a93 100644 --- a/cli/testdata/coder_server_--help.golden +++ b/cli/testdata/coder_server_--help.golden @@ -106,6 +106,58 @@ Use a YAML configuration file when your server launch become unwieldy. Write out the current server config as YAML to stdout. +EMAIL OPTIONS: +Configure how emails are sent. + + --email-force-tls bool, $CODER_EMAIL_FORCE_TLS (default: false) + Force a TLS connection to the configured SMTP smarthost. + + --email-from string, $CODER_EMAIL_FROM + The sender's address to use. + + --email-hello string, $CODER_EMAIL_HELLO (default: localhost) + The hostname identifying the SMTP server. + + --email-smarthost host:port, $CODER_EMAIL_SMARTHOST (default: localhost:587) + The intermediary SMTP host through which emails are sent. + +EMAIL / EMAIL AUTHENTICATION OPTIONS: +Configure SMTP authentication options. + + --email-auth-identity string, $CODER_EMAIL_AUTH_IDENTITY + Identity to use with PLAIN authentication. + + --email-auth-password string, $CODER_EMAIL_AUTH_PASSWORD + Password to use with PLAIN/LOGIN authentication. + + --email-auth-password-file string, $CODER_EMAIL_AUTH_PASSWORD_FILE + File from which to load password for use with PLAIN/LOGIN + authentication. + + --email-auth-username string, $CODER_EMAIL_AUTH_USERNAME + Username to use with PLAIN/LOGIN authentication. + +EMAIL / EMAIL TLS OPTIONS: +Configure TLS for your SMTP server target. + + --email-tls-ca-cert-file string, $CODER_EMAIL_TLS_CACERTFILE + CA certificate file to use. + + --email-tls-cert-file string, $CODER_EMAIL_TLS_CERTFILE + Certificate file to use. + + --email-tls-cert-key-file string, $CODER_EMAIL_TLS_CERTKEYFILE + Certificate key file to use. + + --email-tls-server-name string, $CODER_EMAIL_TLS_SERVERNAME + Server name to verify against the target certificate. + + --email-tls-skip-verify bool, $CODER_EMAIL_TLS_SKIPVERIFY + Skip verification of the target server's certificate (insecure). + + --email-tls-starttls bool, $CODER_EMAIL_TLS_STARTTLS + Enable STARTTLS to upgrade insecure SMTP connections using TLS. + INTROSPECTION / HEALTH CHECK OPTIONS: --health-check-refresh duration, $CODER_HEALTH_CHECK_REFRESH (default: 10m0s) Refresh interval for healthchecks. @@ -349,54 +401,68 @@ Configure how notifications are processed and delivered. NOTIFICATIONS / EMAIL OPTIONS: Configure how email notifications are sent. - --notifications-email-force-tls bool, $CODER_NOTIFICATIONS_EMAIL_FORCE_TLS (default: false) + --notifications-email-force-tls bool, $CODER_NOTIFICATIONS_EMAIL_FORCE_TLS Force a TLS connection to the configured SMTP smarthost. + DEPRECATED: Use --email-force-tls instead. --notifications-email-from string, $CODER_NOTIFICATIONS_EMAIL_FROM The sender's address to use. + DEPRECATED: Use --email-from instead. - --notifications-email-hello string, $CODER_NOTIFICATIONS_EMAIL_HELLO (default: localhost) + --notifications-email-hello string, $CODER_NOTIFICATIONS_EMAIL_HELLO The hostname identifying the SMTP server. + DEPRECATED: Use --email-hello instead. - --notifications-email-smarthost host:port, $CODER_NOTIFICATIONS_EMAIL_SMARTHOST (default: localhost:587) + --notifications-email-smarthost host:port, $CODER_NOTIFICATIONS_EMAIL_SMARTHOST The intermediary SMTP host through which emails are sent. + DEPRECATED: Use --email-smarthost instead. NOTIFICATIONS / EMAIL / EMAIL AUTHENTICATION OPTIONS: Configure SMTP authentication options. --notifications-email-auth-identity string, $CODER_NOTIFICATIONS_EMAIL_AUTH_IDENTITY Identity to use with PLAIN authentication. + DEPRECATED: Use --email-auth-identity instead. --notifications-email-auth-password string, $CODER_NOTIFICATIONS_EMAIL_AUTH_PASSWORD Password to use with PLAIN/LOGIN authentication. + DEPRECATED: Use --email-auth-password instead. --notifications-email-auth-password-file string, $CODER_NOTIFICATIONS_EMAIL_AUTH_PASSWORD_FILE File from which to load password for use with PLAIN/LOGIN authentication. + DEPRECATED: Use --email-auth-password-file instead. --notifications-email-auth-username string, $CODER_NOTIFICATIONS_EMAIL_AUTH_USERNAME Username to use with PLAIN/LOGIN authentication. + DEPRECATED: Use --email-auth-username instead. NOTIFICATIONS / EMAIL / EMAIL TLS OPTIONS: Configure TLS for your SMTP server target. --notifications-email-tls-ca-cert-file string, $CODER_NOTIFICATIONS_EMAIL_TLS_CACERTFILE CA certificate file to use. + DEPRECATED: Use --email-tls-ca-cert-file instead. --notifications-email-tls-cert-file string, $CODER_NOTIFICATIONS_EMAIL_TLS_CERTFILE Certificate file to use. + DEPRECATED: Use --email-tls-cert-file instead. --notifications-email-tls-cert-key-file string, $CODER_NOTIFICATIONS_EMAIL_TLS_CERTKEYFILE Certificate key file to use. + DEPRECATED: Use --email-tls-cert-key-file instead. --notifications-email-tls-server-name string, $CODER_NOTIFICATIONS_EMAIL_TLS_SERVERNAME Server name to verify against the target certificate. + DEPRECATED: Use --email-tls-server-name instead. --notifications-email-tls-skip-verify bool, $CODER_NOTIFICATIONS_EMAIL_TLS_SKIPVERIFY Skip verification of the target server's certificate (insecure). + DEPRECATED: Use --email-tls-skip-verify instead. --notifications-email-tls-starttls bool, $CODER_NOTIFICATIONS_EMAIL_TLS_STARTTLS Enable STARTTLS to upgrade insecure SMTP connections using TLS. + DEPRECATED: Use --email-tls-starttls instead. NOTIFICATIONS / WEBHOOK OPTIONS: --notifications-webhook-endpoint url, $CODER_NOTIFICATIONS_WEBHOOK_ENDPOINT diff --git a/cli/testdata/server-config.yaml.golden b/cli/testdata/server-config.yaml.golden index 95486a26344b8..38b2b68c24de1 100644 --- a/cli/testdata/server-config.yaml.golden +++ b/cli/testdata/server-config.yaml.golden @@ -518,6 +518,51 @@ userQuietHoursSchedule: # compatibility reasons, this will be removed in a future release. # (default: false, type: bool) allowWorkspaceRenames: false +# Configure how emails are sent. +email: + # The sender's address to use. + # (default: , type: string) + from: "" + # The intermediary SMTP host through which emails are sent. + # (default: localhost:587, type: host:port) + smarthost: localhost:587 + # The hostname identifying the SMTP server. + # (default: localhost, type: string) + hello: localhost + # Force a TLS connection to the configured SMTP smarthost. + # (default: false, type: bool) + forceTLS: false + # Configure SMTP authentication options. + emailAuth: + # Identity to use with PLAIN authentication. + # (default: , type: string) + identity: "" + # Username to use with PLAIN/LOGIN authentication. + # (default: , type: string) + username: "" + # File from which to load password for use with PLAIN/LOGIN authentication. + # (default: , type: string) + passwordFile: "" + # Configure TLS for your SMTP server target. + emailTLS: + # Enable STARTTLS to upgrade insecure SMTP connections using TLS. + # (default: , type: bool) + startTLS: false + # Server name to verify against the target certificate. + # (default: , type: string) + serverName: "" + # Skip verification of the target server's certificate (insecure). + # (default: , type: bool) + insecureSkipVerify: false + # CA certificate file to use. + # (default: , type: string) + caCertFile: "" + # Certificate file to use. + # (default: , type: string) + certFile: "" + # Certificate key file to use. + # (default: , type: string) + certKeyFile: "" # Configure how notifications are processed and delivered. notifications: # Which delivery method to use (available options: 'smtp', 'webhook'). @@ -532,13 +577,13 @@ notifications: # (default: , type: string) from: "" # The intermediary SMTP host through which emails are sent. - # (default: localhost:587, type: host:port) + # (default: , type: host:port) smarthost: localhost:587 # The hostname identifying the SMTP server. - # (default: localhost, type: string) + # (default: , type: string) hello: localhost # Force a TLS connection to the configured SMTP smarthost. - # (default: false, type: bool) + # (default: , type: bool) forceTLS: false # Configure SMTP authentication options. emailAuth: diff --git a/coderd/notifications/dispatch/smtp.go b/coderd/notifications/dispatch/smtp.go index e18aeaef88b81..dfb628b62eb86 100644 --- a/coderd/notifications/dispatch/smtp.go +++ b/coderd/notifications/dispatch/smtp.go @@ -453,7 +453,7 @@ func (s *SMTPHandler) auth(ctx context.Context, mechs string) (sasl.Client, erro continue } if password == "" { - errs = multierror.Append(errs, xerrors.New("cannot use PLAIN auth, password not defined (see CODER_NOTIFICATIONS_EMAIL_AUTH_PASSWORD)")) + errs = multierror.Append(errs, xerrors.New("cannot use PLAIN auth, password not defined (see CODER_EMAIL_AUTH_PASSWORD)")) continue } @@ -475,7 +475,7 @@ func (s *SMTPHandler) auth(ctx context.Context, mechs string) (sasl.Client, erro continue } if password == "" { - errs = multierror.Append(errs, xerrors.New("cannot use LOGIN auth, password not defined (see CODER_NOTIFICATIONS_EMAIL_AUTH_PASSWORD)")) + errs = multierror.Append(errs, xerrors.New("cannot use LOGIN auth, password not defined (see CODER_EMAIL_AUTH_PASSWORD)")) continue } diff --git a/codersdk/deployment.go b/codersdk/deployment.go index 6a5f7c52ac8f5..3ba09bd38d1a4 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -926,6 +926,23 @@ when required by your organization's security policy.`, Name: "Config", Description: `Use a YAML configuration file when your server launch become unwieldy.`, } + deploymentGroupEmail = serpent.Group{ + Name: "Email", + Description: "Configure how emails are sent.", + YAML: "email", + } + deploymentGroupEmailAuth = serpent.Group{ + Name: "Email Authentication", + Parent: &deploymentGroupEmail, + Description: "Configure SMTP authentication options.", + YAML: "emailAuth", + } + deploymentGroupEmailTLS = serpent.Group{ + Name: "Email TLS", + Parent: &deploymentGroupEmail, + Description: "Configure TLS for your SMTP server target.", + YAML: "emailTLS", + } deploymentGroupNotifications = serpent.Group{ Name: "Notifications", YAML: "notifications", @@ -997,6 +1014,135 @@ when required by your organization's security policy.`, Group: &deploymentGroupIntrospectionLogging, YAML: "filter", } + emailFrom := serpent.Option{ + Name: "Email: From Address", + Description: "The sender's address to use.", + Flag: "email-from", + Env: "CODER_EMAIL_FROM", + Value: &c.Notifications.SMTP.From, + Group: &deploymentGroupEmail, + YAML: "from", + } + emailSmarthost := serpent.Option{ + Name: "Email: Smarthost", + Description: "The intermediary SMTP host through which emails are sent.", + Flag: "email-smarthost", + Env: "CODER_EMAIL_SMARTHOST", + Default: "localhost:587", // To pass validation. + Value: &c.Notifications.SMTP.Smarthost, + Group: &deploymentGroupEmail, + YAML: "smarthost", + } + emailHello := serpent.Option{ + Name: "Email: Hello", + Description: "The hostname identifying the SMTP server.", + Flag: "email-hello", + Env: "CODER_EMAIL_HELLO", + Default: "localhost", + Value: &c.Notifications.SMTP.Hello, + Group: &deploymentGroupEmail, + YAML: "hello", + } + emailForceTLS := serpent.Option{ + Name: "Email: Force TLS", + Description: "Force a TLS connection to the configured SMTP smarthost.", + Flag: "email-force-tls", + Env: "CODER_EMAIL_FORCE_TLS", + Default: "false", + Value: &c.Notifications.SMTP.ForceTLS, + Group: &deploymentGroupEmail, + YAML: "forceTLS", + } + emailAuthIdentity := serpent.Option{ + Name: "Email Auth: Identity", + Description: "Identity to use with PLAIN authentication.", + Flag: "email-auth-identity", + Env: "CODER_EMAIL_AUTH_IDENTITY", + Value: &c.Notifications.SMTP.Auth.Identity, + Group: &deploymentGroupEmailAuth, + YAML: "identity", + } + emailAuthUsername := serpent.Option{ + Name: "Email Auth: Username", + Description: "Username to use with PLAIN/LOGIN authentication.", + Flag: "email-auth-username", + Env: "CODER_EMAIL_AUTH_USERNAME", + Value: &c.Notifications.SMTP.Auth.Username, + Group: &deploymentGroupEmailAuth, + YAML: "username", + } + emailAuthPassword := serpent.Option{ + Name: "Email Auth: Password", + Description: "Password to use with PLAIN/LOGIN authentication.", + Flag: "email-auth-password", + Env: "CODER_EMAIL_AUTH_PASSWORD", + Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), + Value: &c.Notifications.SMTP.Auth.Password, + Group: &deploymentGroupEmailAuth, + } + emailAuthPasswordFile := serpent.Option{ + Name: "Email Auth: Password File", + Description: "File from which to load password for use with PLAIN/LOGIN authentication.", + Flag: "email-auth-password-file", + Env: "CODER_EMAIL_AUTH_PASSWORD_FILE", + Value: &c.Notifications.SMTP.Auth.PasswordFile, + Group: &deploymentGroupEmailAuth, + YAML: "passwordFile", + } + emailTLSStartTLS := serpent.Option{ + Name: "Email TLS: StartTLS", + Description: "Enable STARTTLS to upgrade insecure SMTP connections using TLS.", + Flag: "email-tls-starttls", + Env: "CODER_EMAIL_TLS_STARTTLS", + Value: &c.Notifications.SMTP.TLS.StartTLS, + Group: &deploymentGroupEmailTLS, + YAML: "startTLS", + } + emailTLSServerName := serpent.Option{ + Name: "Email TLS: Server Name", + Description: "Server name to verify against the target certificate.", + Flag: "email-tls-server-name", + Env: "CODER_EMAIL_TLS_SERVERNAME", + Value: &c.Notifications.SMTP.TLS.ServerName, + Group: &deploymentGroupEmailTLS, + YAML: "serverName", + } + emailTLSSkipCertVerify := serpent.Option{ + Name: "Email TLS: Skip Certificate Verification (Insecure)", + Description: "Skip verification of the target server's certificate (insecure).", + Flag: "email-tls-skip-verify", + Env: "CODER_EMAIL_TLS_SKIPVERIFY", + Value: &c.Notifications.SMTP.TLS.InsecureSkipVerify, + Group: &deploymentGroupEmailTLS, + YAML: "insecureSkipVerify", + } + emailTLSCertAuthorityFile := serpent.Option{ + Name: "Email TLS: Certificate Authority File", + Description: "CA certificate file to use.", + Flag: "email-tls-ca-cert-file", + Env: "CODER_EMAIL_TLS_CACERTFILE", + Value: &c.Notifications.SMTP.TLS.CAFile, + Group: &deploymentGroupEmailTLS, + YAML: "caCertFile", + } + emailTLSCertFile := serpent.Option{ + Name: "Email TLS: Certificate File", + Description: "Certificate file to use.", + Flag: "email-tls-cert-file", + Env: "CODER_EMAIL_TLS_CERTFILE", + Value: &c.Notifications.SMTP.TLS.CertFile, + Group: &deploymentGroupEmailTLS, + YAML: "certFile", + } + emailTLSCertKeyFile := serpent.Option{ + Name: "Email TLS: Certificate Key File", + Description: "Certificate key file to use.", + Flag: "email-tls-cert-key-file", + Env: "CODER_EMAIL_TLS_CERTKEYFILE", + Value: &c.Notifications.SMTP.TLS.KeyFile, + Group: &deploymentGroupEmailTLS, + YAML: "certKeyFile", + } opts := serpent.OptionSet{ { Name: "Access URL", @@ -2432,6 +2578,21 @@ Write out the current server config as YAML to stdout.`, YAML: "thresholdDatabase", Annotations: serpent.Annotations{}.Mark(annotationFormatDuration, "true"), }, + // Email options + emailFrom, + emailSmarthost, + emailHello, + emailForceTLS, + emailAuthIdentity, + emailAuthUsername, + emailAuthPassword, + emailAuthPasswordFile, + emailTLSStartTLS, + emailTLSServerName, + emailTLSSkipCertVerify, + emailTLSCertAuthorityFile, + emailTLSCertFile, + emailTLSCertKeyFile, // Notifications Options { Name: "Notifications: Method", @@ -2462,36 +2623,37 @@ Write out the current server config as YAML to stdout.`, Value: &c.Notifications.SMTP.From, Group: &deploymentGroupNotificationsEmail, YAML: "from", + UseInstead: serpent.OptionSet{emailFrom}, }, { Name: "Notifications: Email: Smarthost", Description: "The intermediary SMTP host through which emails are sent.", Flag: "notifications-email-smarthost", Env: "CODER_NOTIFICATIONS_EMAIL_SMARTHOST", - Default: "localhost:587", // To pass validation. Value: &c.Notifications.SMTP.Smarthost, Group: &deploymentGroupNotificationsEmail, YAML: "smarthost", + UseInstead: serpent.OptionSet{emailSmarthost}, }, { Name: "Notifications: Email: Hello", Description: "The hostname identifying the SMTP server.", Flag: "notifications-email-hello", Env: "CODER_NOTIFICATIONS_EMAIL_HELLO", - Default: "localhost", Value: &c.Notifications.SMTP.Hello, Group: &deploymentGroupNotificationsEmail, YAML: "hello", + UseInstead: serpent.OptionSet{emailHello}, }, { Name: "Notifications: Email: Force TLS", Description: "Force a TLS connection to the configured SMTP smarthost.", Flag: "notifications-email-force-tls", Env: "CODER_NOTIFICATIONS_EMAIL_FORCE_TLS", - Default: "false", Value: &c.Notifications.SMTP.ForceTLS, Group: &deploymentGroupNotificationsEmail, YAML: "forceTLS", + UseInstead: serpent.OptionSet{emailForceTLS}, }, { Name: "Notifications: Email Auth: Identity", @@ -2501,6 +2663,7 @@ Write out the current server config as YAML to stdout.`, Value: &c.Notifications.SMTP.Auth.Identity, Group: &deploymentGroupNotificationsEmailAuth, YAML: "identity", + UseInstead: serpent.OptionSet{emailAuthIdentity}, }, { Name: "Notifications: Email Auth: Username", @@ -2510,6 +2673,7 @@ Write out the current server config as YAML to stdout.`, Value: &c.Notifications.SMTP.Auth.Username, Group: &deploymentGroupNotificationsEmailAuth, YAML: "username", + UseInstead: serpent.OptionSet{emailAuthUsername}, }, { Name: "Notifications: Email Auth: Password", @@ -2519,6 +2683,7 @@ Write out the current server config as YAML to stdout.`, Annotations: serpent.Annotations{}.Mark(annotationSecretKey, "true"), Value: &c.Notifications.SMTP.Auth.Password, Group: &deploymentGroupNotificationsEmailAuth, + UseInstead: serpent.OptionSet{emailAuthPassword}, }, { Name: "Notifications: Email Auth: Password File", @@ -2528,6 +2693,7 @@ Write out the current server config as YAML to stdout.`, Value: &c.Notifications.SMTP.Auth.PasswordFile, Group: &deploymentGroupNotificationsEmailAuth, YAML: "passwordFile", + UseInstead: serpent.OptionSet{emailAuthPasswordFile}, }, { Name: "Notifications: Email TLS: StartTLS", @@ -2537,6 +2703,7 @@ Write out the current server config as YAML to stdout.`, Value: &c.Notifications.SMTP.TLS.StartTLS, Group: &deploymentGroupNotificationsEmailTLS, YAML: "startTLS", + UseInstead: serpent.OptionSet{emailTLSStartTLS}, }, { Name: "Notifications: Email TLS: Server Name", @@ -2546,6 +2713,7 @@ Write out the current server config as YAML to stdout.`, Value: &c.Notifications.SMTP.TLS.ServerName, Group: &deploymentGroupNotificationsEmailTLS, YAML: "serverName", + UseInstead: serpent.OptionSet{emailTLSServerName}, }, { Name: "Notifications: Email TLS: Skip Certificate Verification (Insecure)", @@ -2555,6 +2723,7 @@ Write out the current server config as YAML to stdout.`, Value: &c.Notifications.SMTP.TLS.InsecureSkipVerify, Group: &deploymentGroupNotificationsEmailTLS, YAML: "insecureSkipVerify", + UseInstead: serpent.OptionSet{emailTLSSkipCertVerify}, }, { Name: "Notifications: Email TLS: Certificate Authority File", @@ -2564,6 +2733,7 @@ Write out the current server config as YAML to stdout.`, Value: &c.Notifications.SMTP.TLS.CAFile, Group: &deploymentGroupNotificationsEmailTLS, YAML: "caCertFile", + UseInstead: serpent.OptionSet{emailTLSCertAuthorityFile}, }, { Name: "Notifications: Email TLS: Certificate File", @@ -2573,6 +2743,7 @@ Write out the current server config as YAML to stdout.`, Value: &c.Notifications.SMTP.TLS.CertFile, Group: &deploymentGroupNotificationsEmailTLS, YAML: "certFile", + UseInstead: serpent.OptionSet{emailTLSCertFile}, }, { Name: "Notifications: Email TLS: Certificate Key File", @@ -2582,6 +2753,7 @@ Write out the current server config as YAML to stdout.`, Value: &c.Notifications.SMTP.TLS.KeyFile, Group: &deploymentGroupNotificationsEmailTLS, YAML: "certKeyFile", + UseInstead: serpent.OptionSet{emailTLSCertKeyFile}, }, { Name: "Notifications: Webhook: Endpoint", diff --git a/codersdk/deployment_test.go b/codersdk/deployment_test.go index d7eca6323000c..61474a3b77ea1 100644 --- a/codersdk/deployment_test.go +++ b/codersdk/deployment_test.go @@ -78,6 +78,9 @@ func TestDeploymentValues_HighlyConfigurable(t *testing.T) { "Provisioner Daemon Pre-shared Key (PSK)": { yaml: true, }, + "Email Auth: Password": { + yaml: true, + }, "Notifications: Email Auth: Password": { yaml: true, }, diff --git a/docs/admin/monitoring/notifications/index.md b/docs/admin/monitoring/notifications/index.md index a98fa0b3e8b48..eabc09438d7b9 100644 --- a/docs/admin/monitoring/notifications/index.md +++ b/docs/admin/monitoring/notifications/index.md @@ -89,34 +89,34 @@ existing one. **Server Settings:** -| Required | CLI | Env | Type | Description | Default | -| :------: | --------------------------------- | ------------------------------------- | ----------- | ----------------------------------------- | ------------- | -| ✔️ | `--notifications-email-from` | `CODER_NOTIFICATIONS_EMAIL_FROM` | `string` | The sender's address to use. | | -| ✔️ | `--notifications-email-smarthost` | `CODER_NOTIFICATIONS_EMAIL_SMARTHOST` | `host:port` | The SMTP relay to send messages through. | localhost:587 | -| ✔️ | `--notifications-email-hello` | `CODER_NOTIFICATIONS_EMAIL_HELLO` | `string` | The hostname identifying the SMTP server. | localhost | +| Required | CLI | Env | Type | Description | Default | +| :------: | ------------------- | ----------------------- | ----------- | ----------------------------------------- | ------------- | +| ✔️ | `--email-from` | `CODER_EMAIL_FROM` | `string` | The sender's address to use. | | +| ✔️ | `--email-smarthost` | `CODER_EMAIL_SMARTHOST` | `host:port` | The SMTP relay to send messages through. | localhost:587 | +| ✔️ | `--email-hello` | `CODER_EMAIL_HELLO` | `string` | The hostname identifying the SMTP server. | localhost | **Authentication Settings:** -| Required | CLI | Env | Type | Description | -| :------: | ------------------------------------------ | ---------------------------------------------- | -------- | ------------------------------------------------------------------------- | -| - | `--notifications-email-auth-username` | `CODER_NOTIFICATIONS_EMAIL_AUTH_USERNAME` | `string` | Username to use with PLAIN/LOGIN authentication. | -| - | `--notifications-email-auth-password` | `CODER_NOTIFICATIONS_EMAIL_AUTH_PASSWORD` | `string` | Password to use with PLAIN/LOGIN authentication. | -| - | `--notifications-email-auth-password-file` | `CODER_NOTIFICATIONS_EMAIL_AUTH_PASSWORD_FILE` | `string` | File from which to load password for use with PLAIN/LOGIN authentication. | -| - | `--notifications-email-auth-identity` | `CODER_NOTIFICATIONS_EMAIL_AUTH_IDENTITY` | `string` | Identity to use with PLAIN authentication. | +| Required | CLI | Env | Type | Description | +| :------: | ---------------------------- | -------------------------------- | -------- | ------------------------------------------------------------------------- | +| - | `--email-auth-username` | `CODER_EMAIL_AUTH_USERNAME` | `string` | Username to use with PLAIN/LOGIN authentication. | +| - | `--email-auth-password` | `CODER_EMAIL_AUTH_PASSWORD` | `string` | Password to use with PLAIN/LOGIN authentication. | +| - | `--email-auth-password-file` | `CODER_EMAIL_AUTH_PASSWORD_FILE` | `string` | File from which to load password for use with PLAIN/LOGIN authentication. | +| - | `--email-auth-identity` | `CODER_EMAIL_AUTH_IDENTITY` | `string` | Identity to use with PLAIN authentication. | **TLS Settings:** -| Required | CLI | Env | Type | Description | Default | -| :------: | ----------------------------------------- | ------------------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| - | `--notifications-email-force-tls` | `CODER_NOTIFICATIONS_EMAIL_FORCE_TLS` | `bool` | Force a TLS connection to the configured SMTP smarthost. If port 465 is used, TLS will be forced. See https://datatracker.ietf.org/doc/html/rfc8314#section-3.3. | false | -| - | `--notifications-email-tls-starttls` | `CODER_NOTIFICATIONS_EMAIL_TLS_STARTTLS` | `bool` | Enable STARTTLS to upgrade insecure SMTP connections using TLS. Ignored if `CODER_NOTIFICATIONS_EMAIL_FORCE_TLS` is set. | false | -| - | `--notifications-email-tls-skip-verify` | `CODER_NOTIFICATIONS_EMAIL_TLS_SKIPVERIFY` | `bool` | Skip verification of the target server's certificate (**insecure**). | false | -| - | `--notifications-email-tls-server-name` | `CODER_NOTIFICATIONS_EMAIL_TLS_SERVERNAME` | `string` | Server name to verify against the target certificate. | | -| - | `--notifications-email-tls-cert-file` | `CODER_NOTIFICATIONS_EMAIL_TLS_CERTFILE` | `string` | Certificate file to use. | | -| - | `--notifications-email-tls-cert-key-file` | `CODER_NOTIFICATIONS_EMAIL_TLS_CERTKEYFILE` | `string` | Certificate key file to use. | | +| Required | CLI | Env | Type | Description | Default | +| :------: | --------------------------- | ----------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | +| - | `--email-force-tls` | `CODER_EMAIL_FORCE_TLS` | `bool` | Force a TLS connection to the configured SMTP smarthost. If port 465 is used, TLS will be forced. See https://datatracker.ietf.org/doc/html/rfc8314#section-3.3. | false | +| - | `--email-tls-starttls` | `CODER_EMAIL_TLS_STARTTLS` | `bool` | Enable STARTTLS to upgrade insecure SMTP connections using TLS. Ignored if `CODER_NOTIFICATIONS_EMAIL_FORCE_TLS` is set. | false | +| - | `--email-tls-skip-verify` | `CODER_EMAIL_TLS_SKIPVERIFY` | `bool` | Skip verification of the target server's certificate (**insecure**). | false | +| - | `--email-tls-server-name` | `CODER_EMAIL_TLS_SERVERNAME` | `string` | Server name to verify against the target certificate. | | +| - | `--email-tls-cert-file` | `CODER_EMAIL_TLS_CERTFILE` | `string` | Certificate file to use. | | +| - | `--email-tls-cert-key-file` | `CODER_EMAIL_TLS_CERTKEYFILE` | `string` | Certificate key file to use. | | -**NOTE:** you _MUST_ use `CODER_NOTIFICATIONS_EMAIL_FORCE_TLS` if your smarthost -supports TLS on a port other than `465`. +**NOTE:** you _MUST_ use `CODER_EMAIL_FORCE_TLS` if your smarthost supports TLS +on a port other than `465`. ### Send emails using G-Suite @@ -126,9 +126,9 @@ After setting the required fields above: account you wish to send from 2. Set the following configuration options: ``` - CODER_NOTIFICATIONS_EMAIL_SMARTHOST=smtp.gmail.com:465 - CODER_NOTIFICATIONS_EMAIL_AUTH_USERNAME=@ - CODER_NOTIFICATIONS_EMAIL_AUTH_PASSWORD="" + CODER_EMAIL_SMARTHOST=smtp.gmail.com:465 + CODER_EMAIL_AUTH_USERNAME=@ + CODER_EMAIL_AUTH_PASSWORD="" ``` See @@ -142,10 +142,10 @@ After setting the required fields above: 1. Setup an account on Microsoft 365 or outlook.com 2. Set the following configuration options: ``` - CODER_NOTIFICATIONS_EMAIL_SMARTHOST=smtp-mail.outlook.com:587 - CODER_NOTIFICATIONS_EMAIL_TLS_STARTTLS=true - CODER_NOTIFICATIONS_EMAIL_AUTH_USERNAME=@ - CODER_NOTIFICATIONS_EMAIL_AUTH_PASSWORD="" + CODER_EMAIL_SMARTHOST=smtp-mail.outlook.com:587 + CODER_EMAIL_TLS_STARTTLS=true + CODER_EMAIL_AUTH_USERNAME=@ + CODER_EMAIL_AUTH_PASSWORD="" ``` See diff --git a/docs/reference/cli/server.md b/docs/reference/cli/server.md index 981c2419cf903..42ef7f7418b45 100644 --- a/docs/reference/cli/server.md +++ b/docs/reference/cli/server.md @@ -1249,6 +1249,148 @@ Refresh interval for healthchecks. The threshold for the database health check. If the median latency of the database exceeds this threshold over 5 attempts, the database is considered unhealthy. The default value is 15ms. +### --email-from + +| | | +| ----------- | ------------------------------ | +| Type | string | +| Environment | $CODER_EMAIL_FROM | +| YAML | email.from | + +The sender's address to use. + +### --email-smarthost + +| | | +| ----------- | ----------------------------------- | +| Type | host:port | +| Environment | $CODER_EMAIL_SMARTHOST | +| YAML | email.smarthost | +| Default | localhost:587 | + +The intermediary SMTP host through which emails are sent. + +### --email-hello + +| | | +| ----------- | ------------------------------- | +| Type | string | +| Environment | $CODER_EMAIL_HELLO | +| YAML | email.hello | +| Default | localhost | + +The hostname identifying the SMTP server. + +### --email-force-tls + +| | | +| ----------- | ----------------------------------- | +| Type | bool | +| Environment | $CODER_EMAIL_FORCE_TLS | +| YAML | email.forceTLS | +| Default | false | + +Force a TLS connection to the configured SMTP smarthost. + +### --email-auth-identity + +| | | +| ----------- | --------------------------------------- | +| Type | string | +| Environment | $CODER_EMAIL_AUTH_IDENTITY | +| YAML | email.emailAuth.identity | + +Identity to use with PLAIN authentication. + +### --email-auth-username + +| | | +| ----------- | --------------------------------------- | +| Type | string | +| Environment | $CODER_EMAIL_AUTH_USERNAME | +| YAML | email.emailAuth.username | + +Username to use with PLAIN/LOGIN authentication. + +### --email-auth-password + +| | | +| ----------- | --------------------------------------- | +| Type | string | +| Environment | $CODER_EMAIL_AUTH_PASSWORD | + +Password to use with PLAIN/LOGIN authentication. + +### --email-auth-password-file + +| | | +| ----------- | -------------------------------------------- | +| Type | string | +| Environment | $CODER_EMAIL_AUTH_PASSWORD_FILE | +| YAML | email.emailAuth.passwordFile | + +File from which to load password for use with PLAIN/LOGIN authentication. + +### --email-tls-starttls + +| | | +| ----------- | -------------------------------------- | +| Type | bool | +| Environment | $CODER_EMAIL_TLS_STARTTLS | +| YAML | email.emailTLS.startTLS | + +Enable STARTTLS to upgrade insecure SMTP connections using TLS. + +### --email-tls-server-name + +| | | +| ----------- | ---------------------------------------- | +| Type | string | +| Environment | $CODER_EMAIL_TLS_SERVERNAME | +| YAML | email.emailTLS.serverName | + +Server name to verify against the target certificate. + +### --email-tls-skip-verify + +| | | +| ----------- | ---------------------------------------------- | +| Type | bool | +| Environment | $CODER_EMAIL_TLS_SKIPVERIFY | +| YAML | email.emailTLS.insecureSkipVerify | + +Skip verification of the target server's certificate (insecure). + +### --email-tls-ca-cert-file + +| | | +| ----------- | ---------------------------------------- | +| Type | string | +| Environment | $CODER_EMAIL_TLS_CACERTFILE | +| YAML | email.emailTLS.caCertFile | + +CA certificate file to use. + +### --email-tls-cert-file + +| | | +| ----------- | -------------------------------------- | +| Type | string | +| Environment | $CODER_EMAIL_TLS_CERTFILE | +| YAML | email.emailTLS.certFile | + +Certificate file to use. + +### --email-tls-cert-key-file + +| | | +| ----------- | ----------------------------------------- | +| Type | string | +| Environment | $CODER_EMAIL_TLS_CERTKEYFILE | +| YAML | email.emailTLS.certKeyFile | + +Certificate key file to use. + ### --notifications-method | | | @@ -1288,7 +1430,6 @@ The sender's address to use. | Type | host:port | | Environment | $CODER_NOTIFICATIONS_EMAIL_SMARTHOST | | YAML | notifications.email.smarthost | -| Default | localhost:587 | The intermediary SMTP host through which emails are sent. @@ -1299,7 +1440,6 @@ The intermediary SMTP host through which emails are sent. | Type | string | | Environment | $CODER_NOTIFICATIONS_EMAIL_HELLO | | YAML | notifications.email.hello | -| Default | localhost | The hostname identifying the SMTP server. @@ -1310,7 +1450,6 @@ The hostname identifying the SMTP server. | Type | bool | | Environment | $CODER_NOTIFICATIONS_EMAIL_FORCE_TLS | | YAML | notifications.email.forceTLS | -| Default | false | Force a TLS connection to the configured SMTP smarthost. diff --git a/enterprise/cli/testdata/coder_server_--help.golden b/enterprise/cli/testdata/coder_server_--help.golden index b637a0da3f74d..a6398586fa972 100644 --- a/enterprise/cli/testdata/coder_server_--help.golden +++ b/enterprise/cli/testdata/coder_server_--help.golden @@ -107,6 +107,58 @@ Use a YAML configuration file when your server launch become unwieldy. Write out the current server config as YAML to stdout. +EMAIL OPTIONS: +Configure how emails are sent. + + --email-force-tls bool, $CODER_EMAIL_FORCE_TLS (default: false) + Force a TLS connection to the configured SMTP smarthost. + + --email-from string, $CODER_EMAIL_FROM + The sender's address to use. + + --email-hello string, $CODER_EMAIL_HELLO (default: localhost) + The hostname identifying the SMTP server. + + --email-smarthost host:port, $CODER_EMAIL_SMARTHOST (default: localhost:587) + The intermediary SMTP host through which emails are sent. + +EMAIL / EMAIL AUTHENTICATION OPTIONS: +Configure SMTP authentication options. + + --email-auth-identity string, $CODER_EMAIL_AUTH_IDENTITY + Identity to use with PLAIN authentication. + + --email-auth-password string, $CODER_EMAIL_AUTH_PASSWORD + Password to use with PLAIN/LOGIN authentication. + + --email-auth-password-file string, $CODER_EMAIL_AUTH_PASSWORD_FILE + File from which to load password for use with PLAIN/LOGIN + authentication. + + --email-auth-username string, $CODER_EMAIL_AUTH_USERNAME + Username to use with PLAIN/LOGIN authentication. + +EMAIL / EMAIL TLS OPTIONS: +Configure TLS for your SMTP server target. + + --email-tls-ca-cert-file string, $CODER_EMAIL_TLS_CACERTFILE + CA certificate file to use. + + --email-tls-cert-file string, $CODER_EMAIL_TLS_CERTFILE + Certificate file to use. + + --email-tls-cert-key-file string, $CODER_EMAIL_TLS_CERTKEYFILE + Certificate key file to use. + + --email-tls-server-name string, $CODER_EMAIL_TLS_SERVERNAME + Server name to verify against the target certificate. + + --email-tls-skip-verify bool, $CODER_EMAIL_TLS_SKIPVERIFY + Skip verification of the target server's certificate (insecure). + + --email-tls-starttls bool, $CODER_EMAIL_TLS_STARTTLS + Enable STARTTLS to upgrade insecure SMTP connections using TLS. + INTROSPECTION / HEALTH CHECK OPTIONS: --health-check-refresh duration, $CODER_HEALTH_CHECK_REFRESH (default: 10m0s) Refresh interval for healthchecks. @@ -350,54 +402,68 @@ Configure how notifications are processed and delivered. NOTIFICATIONS / EMAIL OPTIONS: Configure how email notifications are sent. - --notifications-email-force-tls bool, $CODER_NOTIFICATIONS_EMAIL_FORCE_TLS (default: false) + --notifications-email-force-tls bool, $CODER_NOTIFICATIONS_EMAIL_FORCE_TLS Force a TLS connection to the configured SMTP smarthost. + DEPRECATED: Use --email-force-tls instead. --notifications-email-from string, $CODER_NOTIFICATIONS_EMAIL_FROM The sender's address to use. + DEPRECATED: Use --email-from instead. - --notifications-email-hello string, $CODER_NOTIFICATIONS_EMAIL_HELLO (default: localhost) + --notifications-email-hello string, $CODER_NOTIFICATIONS_EMAIL_HELLO The hostname identifying the SMTP server. + DEPRECATED: Use --email-hello instead. - --notifications-email-smarthost host:port, $CODER_NOTIFICATIONS_EMAIL_SMARTHOST (default: localhost:587) + --notifications-email-smarthost host:port, $CODER_NOTIFICATIONS_EMAIL_SMARTHOST The intermediary SMTP host through which emails are sent. + DEPRECATED: Use --email-smarthost instead. NOTIFICATIONS / EMAIL / EMAIL AUTHENTICATION OPTIONS: Configure SMTP authentication options. --notifications-email-auth-identity string, $CODER_NOTIFICATIONS_EMAIL_AUTH_IDENTITY Identity to use with PLAIN authentication. + DEPRECATED: Use --email-auth-identity instead. --notifications-email-auth-password string, $CODER_NOTIFICATIONS_EMAIL_AUTH_PASSWORD Password to use with PLAIN/LOGIN authentication. + DEPRECATED: Use --email-auth-password instead. --notifications-email-auth-password-file string, $CODER_NOTIFICATIONS_EMAIL_AUTH_PASSWORD_FILE File from which to load password for use with PLAIN/LOGIN authentication. + DEPRECATED: Use --email-auth-password-file instead. --notifications-email-auth-username string, $CODER_NOTIFICATIONS_EMAIL_AUTH_USERNAME Username to use with PLAIN/LOGIN authentication. + DEPRECATED: Use --email-auth-username instead. NOTIFICATIONS / EMAIL / EMAIL TLS OPTIONS: Configure TLS for your SMTP server target. --notifications-email-tls-ca-cert-file string, $CODER_NOTIFICATIONS_EMAIL_TLS_CACERTFILE CA certificate file to use. + DEPRECATED: Use --email-tls-ca-cert-file instead. --notifications-email-tls-cert-file string, $CODER_NOTIFICATIONS_EMAIL_TLS_CERTFILE Certificate file to use. + DEPRECATED: Use --email-tls-cert-file instead. --notifications-email-tls-cert-key-file string, $CODER_NOTIFICATIONS_EMAIL_TLS_CERTKEYFILE Certificate key file to use. + DEPRECATED: Use --email-tls-cert-key-file instead. --notifications-email-tls-server-name string, $CODER_NOTIFICATIONS_EMAIL_TLS_SERVERNAME Server name to verify against the target certificate. + DEPRECATED: Use --email-tls-server-name instead. --notifications-email-tls-skip-verify bool, $CODER_NOTIFICATIONS_EMAIL_TLS_SKIPVERIFY Skip verification of the target server's certificate (insecure). + DEPRECATED: Use --email-tls-skip-verify instead. --notifications-email-tls-starttls bool, $CODER_NOTIFICATIONS_EMAIL_TLS_STARTTLS Enable STARTTLS to upgrade insecure SMTP connections using TLS. + DEPRECATED: Use --email-tls-starttls instead. NOTIFICATIONS / WEBHOOK OPTIONS: --notifications-webhook-endpoint url, $CODER_NOTIFICATIONS_WEBHOOK_ENDPOINT From ced50fcf9b431d4ad2cc984e9d1a97e77bb6e075 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Fri, 1 Nov 2024 11:05:49 -0400 Subject: [PATCH 04/10] chore: fix concurrent `CommitQuota` transactions for unrelated users/orgs (#15261) The failure condition being fixed is `w1` and `w2` could belong to different users, organizations, and templates and still cause a serializable failure if run concurrently. This is because the old query did a `seq scan` on the `workspace_builds` table. Since that is the table being updated, we really want to prevent that. So before this would fail for any 2 workspaces. Now it only fails if `w1` and `w2` are owned by the same user and organization. (cherry picked from commit 854044e811de2f2a5e535d03525ef60c55173801) --- coderd/database/db.go | 33 +- coderd/database/dbauthz/dbauthz.go | 4 + coderd/database/dbauthz/dbauthz_test.go | 5 +- coderd/database/dbauthz/setup_test.go | 1 + coderd/database/dbfake/builder.go | 127 +++++ coderd/database/dbgen/dbgen.go | 2 + coderd/database/dbmem/dbmem.go | 4 + coderd/database/dbmetrics/querymetrics.go | 7 + coderd/database/dbmock/dbmock.go | 15 + coderd/database/dbtestutil/db.go | 3 +- coderd/database/dbtestutil/tx.go | 73 +++ coderd/database/pglocks.go | 119 +++++ coderd/database/queries.sql.go | 26 +- coderd/database/queries/quotas.sql | 26 +- enterprise/coderd/workspacequota_test.go | 560 ++++++++++++++++++++++ 15 files changed, 982 insertions(+), 23 deletions(-) create mode 100644 coderd/database/dbfake/builder.go create mode 100644 coderd/database/dbtestutil/tx.go create mode 100644 coderd/database/pglocks.go diff --git a/coderd/database/db.go b/coderd/database/db.go index ae2c31a566cb3..0f923a861efb4 100644 --- a/coderd/database/db.go +++ b/coderd/database/db.go @@ -28,6 +28,7 @@ type Store interface { wrapper Ping(ctx context.Context) (time.Duration, error) + PGLocks(ctx context.Context) (PGLocks, error) InTx(func(Store) error, *TxOptions) error } @@ -48,13 +49,26 @@ type DBTX interface { GetContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error } +func WithSerialRetryCount(count int) func(*sqlQuerier) { + return func(q *sqlQuerier) { + q.serialRetryCount = count + } +} + // New creates a new database store using a SQL database connection. -func New(sdb *sql.DB) Store { +func New(sdb *sql.DB, opts ...func(*sqlQuerier)) Store { dbx := sqlx.NewDb(sdb, "postgres") - return &sqlQuerier{ + q := &sqlQuerier{ db: dbx, sdb: dbx, + // This is an arbitrary number. + serialRetryCount: 3, + } + + for _, opt := range opts { + opt(q) } + return q } // TxOptions is used to pass some execution metadata to the callers. @@ -104,6 +118,10 @@ type querier interface { type sqlQuerier struct { sdb *sqlx.DB db DBTX + + // serialRetryCount is the number of times to retry a transaction + // if it fails with a serialization error. + serialRetryCount int } func (*sqlQuerier) Wrappers() []string { @@ -143,11 +161,9 @@ func (q *sqlQuerier) InTx(function func(Store) error, txOpts *TxOptions) error { // If we are in a transaction already, the parent InTx call will handle the retry. // We do not want to duplicate those retries. if !inTx && sqlOpts.Isolation == sql.LevelSerializable { - // This is an arbitrarily chosen number. - const retryAmount = 3 var err error attempts := 0 - for attempts = 0; attempts < retryAmount; attempts++ { + for attempts = 0; attempts < q.serialRetryCount; attempts++ { txOpts.executionCount++ err = q.runTx(function, sqlOpts) if err == nil { @@ -203,3 +219,10 @@ func (q *sqlQuerier) runTx(function func(Store) error, txOpts *sql.TxOptions) er } return nil } + +func safeString(s *string) string { + if s == nil { + return "" + } + return *s +} diff --git a/coderd/database/dbauthz/dbauthz.go b/coderd/database/dbauthz/dbauthz.go index ae6b307b3e7d3..9bf98aade03c4 100644 --- a/coderd/database/dbauthz/dbauthz.go +++ b/coderd/database/dbauthz/dbauthz.go @@ -603,6 +603,10 @@ func (q *querier) Ping(ctx context.Context) (time.Duration, error) { return q.db.Ping(ctx) } +func (q *querier) PGLocks(ctx context.Context) (database.PGLocks, error) { + return q.db.PGLocks(ctx) +} + // InTx runs the given function in a transaction. func (q *querier) InTx(function func(querier database.Store) error, txOpts *database.TxOptions) error { return q.db.InTx(func(tx database.Store) error { diff --git a/coderd/database/dbauthz/dbauthz_test.go b/coderd/database/dbauthz/dbauthz_test.go index 439cf1bdaec19..ae50309e96d66 100644 --- a/coderd/database/dbauthz/dbauthz_test.go +++ b/coderd/database/dbauthz/dbauthz_test.go @@ -152,7 +152,10 @@ func TestDBAuthzRecursive(t *testing.T) { for i := 2; i < method.Type.NumIn(); i++ { ins = append(ins, reflect.New(method.Type.In(i)).Elem()) } - if method.Name == "InTx" || method.Name == "Ping" || method.Name == "Wrappers" { + if method.Name == "InTx" || + method.Name == "Ping" || + method.Name == "Wrappers" || + method.Name == "PGLocks" { continue } // Log the name of the last method, so if there is a panic, it is diff --git a/coderd/database/dbauthz/setup_test.go b/coderd/database/dbauthz/setup_test.go index df9d551101a25..52e8dd42fea9c 100644 --- a/coderd/database/dbauthz/setup_test.go +++ b/coderd/database/dbauthz/setup_test.go @@ -34,6 +34,7 @@ var errMatchAny = xerrors.New("match any error") var skipMethods = map[string]string{ "InTx": "Not relevant", "Ping": "Not relevant", + "PGLocks": "Not relevant", "Wrappers": "Not relevant", "AcquireLock": "Not relevant", "TryAcquireLock": "Not relevant", diff --git a/coderd/database/dbfake/builder.go b/coderd/database/dbfake/builder.go new file mode 100644 index 0000000000000..6803374e72445 --- /dev/null +++ b/coderd/database/dbfake/builder.go @@ -0,0 +1,127 @@ +package dbfake + +import ( + "testing" + + "github.com/google/uuid" + "github.com/stretchr/testify/require" + + "github.com/coder/coder/v2/coderd/database" + "github.com/coder/coder/v2/coderd/database/dbauthz" + "github.com/coder/coder/v2/coderd/database/dbgen" + "github.com/coder/coder/v2/coderd/database/dbtime" + "github.com/coder/coder/v2/testutil" +) + +type OrganizationBuilder struct { + t *testing.T + db database.Store + seed database.Organization + allUsersAllowance int32 + members []uuid.UUID + groups map[database.Group][]uuid.UUID +} + +func Organization(t *testing.T, db database.Store) OrganizationBuilder { + return OrganizationBuilder{ + t: t, + db: db, + members: []uuid.UUID{}, + groups: make(map[database.Group][]uuid.UUID), + } +} + +type OrganizationResponse struct { + Org database.Organization + AllUsersGroup database.Group + Members []database.OrganizationMember + Groups []database.Group +} + +func (b OrganizationBuilder) EveryoneAllowance(allowance int) OrganizationBuilder { + //nolint: revive // returns modified struct + b.allUsersAllowance = int32(allowance) + return b +} + +func (b OrganizationBuilder) Seed(seed database.Organization) OrganizationBuilder { + //nolint: revive // returns modified struct + b.seed = seed + return b +} + +func (b OrganizationBuilder) Members(users ...database.User) OrganizationBuilder { + for _, u := range users { + //nolint: revive // returns modified struct + b.members = append(b.members, u.ID) + } + return b +} + +func (b OrganizationBuilder) Group(seed database.Group, members ...database.User) OrganizationBuilder { + //nolint: revive // returns modified struct + b.groups[seed] = []uuid.UUID{} + for _, u := range members { + //nolint: revive // returns modified struct + b.groups[seed] = append(b.groups[seed], u.ID) + } + return b +} + +func (b OrganizationBuilder) Do() OrganizationResponse { + org := dbgen.Organization(b.t, b.db, b.seed) + + ctx := testutil.Context(b.t, testutil.WaitShort) + //nolint:gocritic // builder code needs perms + ctx = dbauthz.AsSystemRestricted(ctx) + everyone, err := b.db.InsertAllUsersGroup(ctx, org.ID) + require.NoError(b.t, err) + + if b.allUsersAllowance > 0 { + everyone, err = b.db.UpdateGroupByID(ctx, database.UpdateGroupByIDParams{ + Name: everyone.Name, + DisplayName: everyone.DisplayName, + AvatarURL: everyone.AvatarURL, + QuotaAllowance: b.allUsersAllowance, + ID: everyone.ID, + }) + require.NoError(b.t, err) + } + + members := make([]database.OrganizationMember, 0) + if len(b.members) > 0 { + for _, u := range b.members { + newMem := dbgen.OrganizationMember(b.t, b.db, database.OrganizationMember{ + UserID: u, + OrganizationID: org.ID, + CreatedAt: dbtime.Now(), + UpdatedAt: dbtime.Now(), + Roles: nil, + }) + members = append(members, newMem) + } + } + + groups := make([]database.Group, 0) + if len(b.groups) > 0 { + for g, users := range b.groups { + g.OrganizationID = org.ID + group := dbgen.Group(b.t, b.db, g) + groups = append(groups, group) + + for _, u := range users { + dbgen.GroupMember(b.t, b.db, database.GroupMemberTable{ + UserID: u, + GroupID: group.ID, + }) + } + } + } + + return OrganizationResponse{ + Org: org, + AllUsersGroup: everyone, + Members: members, + Groups: groups, + } +} diff --git a/coderd/database/dbgen/dbgen.go b/coderd/database/dbgen/dbgen.go index 69419b98c79b1..d369d8a023ba9 100644 --- a/coderd/database/dbgen/dbgen.go +++ b/coderd/database/dbgen/dbgen.go @@ -407,6 +407,8 @@ func OrganizationMember(t testing.TB, db database.Store, orig database.Organizat } func Group(t testing.TB, db database.Store, orig database.Group) database.Group { + t.Helper() + name := takeFirst(orig.Name, testutil.GetRandomName(t)) group, err := db.InsertGroup(genCtx, database.InsertGroupParams{ ID: takeFirst(orig.ID, uuid.New()), diff --git a/coderd/database/dbmem/dbmem.go b/coderd/database/dbmem/dbmem.go index 4f54598744dd0..e38c3e107013f 100644 --- a/coderd/database/dbmem/dbmem.go +++ b/coderd/database/dbmem/dbmem.go @@ -339,6 +339,10 @@ func (*FakeQuerier) Ping(_ context.Context) (time.Duration, error) { return 0, nil } +func (*FakeQuerier) PGLocks(_ context.Context) (database.PGLocks, error) { + return []database.PGLock{}, nil +} + func (tx *fakeTx) AcquireLock(_ context.Context, id int64) error { if _, ok := tx.FakeQuerier.locks[id]; ok { return xerrors.Errorf("cannot acquire lock %d: already held", id) diff --git a/coderd/database/dbmetrics/querymetrics.go b/coderd/database/dbmetrics/querymetrics.go index 7e74aab3b9de0..e1cfec5bac9ca 100644 --- a/coderd/database/dbmetrics/querymetrics.go +++ b/coderd/database/dbmetrics/querymetrics.go @@ -66,6 +66,13 @@ func (m queryMetricsStore) Ping(ctx context.Context) (time.Duration, error) { return duration, err } +func (m queryMetricsStore) PGLocks(ctx context.Context) (database.PGLocks, error) { + start := time.Now() + locks, err := m.s.PGLocks(ctx) + m.queryLatencies.WithLabelValues("PGLocks").Observe(time.Since(start).Seconds()) + return locks, err +} + func (m queryMetricsStore) InTx(f func(database.Store) error, options *database.TxOptions) error { return m.dbMetrics.InTx(f, options) } diff --git a/coderd/database/dbmock/dbmock.go b/coderd/database/dbmock/dbmock.go index ffc9ab79f777e..27b398a062051 100644 --- a/coderd/database/dbmock/dbmock.go +++ b/coderd/database/dbmock/dbmock.go @@ -4299,6 +4299,21 @@ func (mr *MockStoreMockRecorder) OrganizationMembers(arg0, arg1 any) *gomock.Cal return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OrganizationMembers", reflect.TypeOf((*MockStore)(nil).OrganizationMembers), arg0, arg1) } +// PGLocks mocks base method. +func (m *MockStore) PGLocks(arg0 context.Context) (database.PGLocks, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PGLocks", arg0) + ret0, _ := ret[0].(database.PGLocks) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PGLocks indicates an expected call of PGLocks. +func (mr *MockStoreMockRecorder) PGLocks(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PGLocks", reflect.TypeOf((*MockStore)(nil).PGLocks), arg0) +} + // Ping mocks base method. func (m *MockStore) Ping(arg0 context.Context) (time.Duration, error) { m.ctrl.T.Helper() diff --git a/coderd/database/dbtestutil/db.go b/coderd/database/dbtestutil/db.go index 327d880f69648..bc8c571795629 100644 --- a/coderd/database/dbtestutil/db.go +++ b/coderd/database/dbtestutil/db.go @@ -135,7 +135,8 @@ func NewDB(t testing.TB, opts ...Option) (database.Store, pubsub.Pubsub) { if o.dumpOnFailure { t.Cleanup(func() { DumpOnFailure(t, connectionURL) }) } - db = database.New(sqlDB) + // Unit tests should not retry serial transaction failures. + db = database.New(sqlDB, database.WithSerialRetryCount(1)) ps, err = pubsub.New(context.Background(), o.logger, sqlDB, connectionURL) require.NoError(t, err) diff --git a/coderd/database/dbtestutil/tx.go b/coderd/database/dbtestutil/tx.go new file mode 100644 index 0000000000000..15be63dc35aeb --- /dev/null +++ b/coderd/database/dbtestutil/tx.go @@ -0,0 +1,73 @@ +package dbtestutil + +import ( + "sync" + "testing" + + "github.com/stretchr/testify/assert" + "golang.org/x/xerrors" + + "github.com/coder/coder/v2/coderd/database" +) + +type DBTx struct { + database.Store + mu sync.Mutex + done chan error + finalErr chan error +} + +// StartTx starts a transaction and returns a DBTx object. This allows running +// 2 transactions concurrently in a test more easily. +// Example: +// +// a := StartTx(t, db, opts) +// b := StartTx(t, db, opts) +// +// a.GetUsers(...) +// b.GetUsers(...) +// +// require.NoError(t, a.Done() +func StartTx(t *testing.T, db database.Store, opts *database.TxOptions) *DBTx { + done := make(chan error) + finalErr := make(chan error) + txC := make(chan database.Store) + + go func() { + t.Helper() + once := sync.Once{} + count := 0 + + err := db.InTx(func(store database.Store) error { + // InTx can be retried + once.Do(func() { + txC <- store + }) + count++ + if count > 1 { + // If you recursively call InTx, then don't use this. + t.Logf("InTx called more than once: %d", count) + assert.NoError(t, xerrors.New("InTx called more than once, this is not allowed with the StartTx helper")) + } + + <-done + // Just return nil. The caller should be checking their own errors. + return nil + }, opts) + finalErr <- err + }() + + txStore := <-txC + close(txC) + + return &DBTx{Store: txStore, done: done, finalErr: finalErr} +} + +// Done can only be called once. If you call it twice, it will panic. +func (tx *DBTx) Done() error { + tx.mu.Lock() + defer tx.mu.Unlock() + + close(tx.done) + return <-tx.finalErr +} diff --git a/coderd/database/pglocks.go b/coderd/database/pglocks.go new file mode 100644 index 0000000000000..85e1644b3825c --- /dev/null +++ b/coderd/database/pglocks.go @@ -0,0 +1,119 @@ +package database + +import ( + "context" + "fmt" + "reflect" + "sort" + "strings" + "time" + + "github.com/jmoiron/sqlx" + + "github.com/coder/coder/v2/coderd/util/slice" +) + +// PGLock docs see: https://www.postgresql.org/docs/current/view-pg-locks.html#VIEW-PG-LOCKS +type PGLock struct { + // LockType see: https://www.postgresql.org/docs/current/monitoring-stats.html#WAIT-EVENT-LOCK-TABLE + LockType *string `db:"locktype"` + Database *string `db:"database"` // oid + Relation *string `db:"relation"` // oid + RelationName *string `db:"relation_name"` + Page *int `db:"page"` + Tuple *int `db:"tuple"` + VirtualXID *string `db:"virtualxid"` + TransactionID *string `db:"transactionid"` // xid + ClassID *string `db:"classid"` // oid + ObjID *string `db:"objid"` // oid + ObjSubID *int `db:"objsubid"` + VirtualTransaction *string `db:"virtualtransaction"` + PID int `db:"pid"` + Mode *string `db:"mode"` + Granted bool `db:"granted"` + FastPath *bool `db:"fastpath"` + WaitStart *time.Time `db:"waitstart"` +} + +func (l PGLock) Equal(b PGLock) bool { + // Lazy, but hope this works + return reflect.DeepEqual(l, b) +} + +func (l PGLock) String() string { + granted := "granted" + if !l.Granted { + granted = "waiting" + } + var details string + switch safeString(l.LockType) { + case "relation": + details = "" + case "page": + details = fmt.Sprintf("page=%d", *l.Page) + case "tuple": + details = fmt.Sprintf("page=%d tuple=%d", *l.Page, *l.Tuple) + case "virtualxid": + details = "waiting to acquire virtual tx id lock" + default: + details = "???" + } + return fmt.Sprintf("%d-%5s [%s] %s/%s/%s: %s", + l.PID, + safeString(l.TransactionID), + granted, + safeString(l.RelationName), + safeString(l.LockType), + safeString(l.Mode), + details, + ) +} + +// PGLocks returns a list of all locks in the database currently in use. +func (q *sqlQuerier) PGLocks(ctx context.Context) (PGLocks, error) { + rows, err := q.sdb.QueryContext(ctx, ` + SELECT + relation::regclass AS relation_name, + * + FROM pg_locks; + `) + if err != nil { + return nil, err + } + + defer rows.Close() + + var locks []PGLock + err = sqlx.StructScan(rows, &locks) + if err != nil { + return nil, err + } + + return locks, err +} + +type PGLocks []PGLock + +func (l PGLocks) String() string { + // Try to group things together by relation name. + sort.Slice(l, func(i, j int) bool { + return safeString(l[i].RelationName) < safeString(l[j].RelationName) + }) + + var out strings.Builder + for i, lock := range l { + if i != 0 { + _, _ = out.WriteString("\n") + } + _, _ = out.WriteString(lock.String()) + } + return out.String() +} + +// Difference returns the difference between two sets of locks. +// This is helpful to determine what changed between the two sets. +func (l PGLocks) Difference(to PGLocks) (new PGLocks, removed PGLocks) { + return slice.SymmetricDifferenceFunc(l, to, func(a, b PGLock) bool { + return a.Equal(b) + }) +} diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 38b174272522f..9ec77d29bcafb 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -6736,23 +6736,33 @@ const getQuotaConsumedForUser = `-- name: GetQuotaConsumedForUser :one WITH latest_builds AS ( SELECT DISTINCT ON - (workspace_id) id, - workspace_id, - daily_cost + (wb.workspace_id) wb.workspace_id, + wb.daily_cost FROM workspace_builds wb + -- This INNER JOIN prevents a seq scan of the workspace_builds table. + -- Limit the rows to the absolute minimum required, which is all workspaces + -- in a given organization for a given user. +INNER JOIN + workspaces on wb.workspace_id = workspaces.id +WHERE + workspaces.owner_id = $1 AND + workspaces.organization_id = $2 ORDER BY - workspace_id, - created_at DESC + wb.workspace_id, + wb.created_at DESC ) SELECT coalesce(SUM(daily_cost), 0)::BIGINT FROM workspaces -JOIN latest_builds ON +INNER JOIN latest_builds ON latest_builds.workspace_id = workspaces.id -WHERE NOT - deleted AND +WHERE + NOT deleted AND + -- We can likely remove these conditions since we check above. + -- But it does not hurt to be defensive and make sure future query changes + -- do not break anything. workspaces.owner_id = $1 AND workspaces.organization_id = $2 ` diff --git a/coderd/database/queries/quotas.sql b/coderd/database/queries/quotas.sql index 48f9209783e4e..7ab6189dfe8a1 100644 --- a/coderd/database/queries/quotas.sql +++ b/coderd/database/queries/quotas.sql @@ -18,23 +18,33 @@ INNER JOIN groups ON WITH latest_builds AS ( SELECT DISTINCT ON - (workspace_id) id, - workspace_id, - daily_cost + (wb.workspace_id) wb.workspace_id, + wb.daily_cost FROM workspace_builds wb + -- This INNER JOIN prevents a seq scan of the workspace_builds table. + -- Limit the rows to the absolute minimum required, which is all workspaces + -- in a given organization for a given user. +INNER JOIN + workspaces on wb.workspace_id = workspaces.id +WHERE + workspaces.owner_id = @owner_id AND + workspaces.organization_id = @organization_id ORDER BY - workspace_id, - created_at DESC + wb.workspace_id, + wb.created_at DESC ) SELECT coalesce(SUM(daily_cost), 0)::BIGINT FROM workspaces -JOIN latest_builds ON +INNER JOIN latest_builds ON latest_builds.workspace_id = workspaces.id -WHERE NOT - deleted AND +WHERE + NOT deleted AND + -- We can likely remove these conditions since we check above. + -- But it does not hurt to be defensive and make sure future query changes + -- do not break anything. workspaces.owner_id = @owner_id AND workspaces.organization_id = @organization_id ; diff --git a/enterprise/coderd/workspacequota_test.go b/enterprise/coderd/workspacequota_test.go index ac4a77eaec8b4..13142f11e5717 100644 --- a/enterprise/coderd/workspacequota_test.go +++ b/enterprise/coderd/workspacequota_test.go @@ -2,11 +2,13 @@ package coderd_test import ( "context" + "database/sql" "encoding/json" "fmt" "net/http" "sync" "testing" + "time" "github.com/google/uuid" "github.com/stretchr/testify/assert" @@ -14,6 +16,11 @@ import ( "github.com/coder/coder/v2/coderd/coderdtest" "github.com/coder/coder/v2/coderd/database" + "github.com/coder/coder/v2/coderd/database/dbauthz" + "github.com/coder/coder/v2/coderd/database/dbfake" + "github.com/coder/coder/v2/coderd/database/dbgen" + "github.com/coder/coder/v2/coderd/database/dbtestutil" + "github.com/coder/coder/v2/coderd/database/dbtime" "github.com/coder/coder/v2/coderd/util/ptr" "github.com/coder/coder/v2/codersdk" "github.com/coder/coder/v2/enterprise/coderd/coderdenttest" @@ -295,6 +302,497 @@ func TestWorkspaceQuota(t *testing.T) { }) } +// nolint:paralleltest,tparallel // Tests must run serially +func TestWorkspaceSerialization(t *testing.T) { + t.Parallel() + + if !dbtestutil.WillUsePostgres() { + t.Skip("Serialization errors only occur in postgres") + } + + db, _ := dbtestutil.NewDB(t) + + user := dbgen.User(t, db, database.User{}) + otherUser := dbgen.User(t, db, database.User{}) + + org := dbfake.Organization(t, db). + EveryoneAllowance(20). + Members(user, otherUser). + Group(database.Group{ + QuotaAllowance: 10, + }, user, otherUser). + Group(database.Group{ + QuotaAllowance: 10, + }, user). + Do() + + otherOrg := dbfake.Organization(t, db). + EveryoneAllowance(20). + Members(user, otherUser). + Group(database.Group{ + QuotaAllowance: 10, + }, user, otherUser). + Group(database.Group{ + QuotaAllowance: 10, + }, user). + Do() + + // TX mixing tests. **DO NOT** run these in parallel. + // The goal here is to mess around with different ordering of + // transactions and queries. + + // UpdateBuildDeadline bumps a workspace deadline while doing a quota + // commit to the same workspace build. + // + // Note: This passes if the interrupt is run before 'GetQuota()' + // Passing orders: + // - BeginTX -> Bump! -> GetQuota -> GetAllowance -> UpdateCost -> EndTx + // - BeginTX -> GetQuota -> GetAllowance -> UpdateCost -> Bump! -> EndTx + t.Run("UpdateBuildDeadline", func(t *testing.T) { + t.Log("Expected to fail. As long as quota & deadline are on the same " + + " table and affect the same row, this will likely always fail.") + + // +------------------------------+------------------+ + // | Begin Tx | | + // +------------------------------+------------------+ + // | GetQuota(user) | | + // +------------------------------+------------------+ + // | | BumpDeadline(w1) | + // +------------------------------+------------------+ + // | GetAllowance(user) | | + // +------------------------------+------------------+ + // | UpdateWorkspaceBuildCost(w1) | | + // +------------------------------+------------------+ + // | CommitTx() | | + // +------------------------------+------------------+ + // pq: could not serialize access due to concurrent update + ctx := testutil.Context(t, testutil.WaitLong) + //nolint:gocritic // testing + ctx = dbauthz.AsSystemRestricted(ctx) + + myWorkspace := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ + OrganizationID: org.Org.ID, + OwnerID: user.ID, + }).Do() + + bumpDeadline := func() { + err := db.InTx(func(db database.Store) error { + err := db.UpdateWorkspaceBuildDeadlineByID(ctx, database.UpdateWorkspaceBuildDeadlineByIDParams{ + Deadline: dbtime.Now(), + MaxDeadline: dbtime.Now(), + UpdatedAt: dbtime.Now(), + ID: myWorkspace.Build.ID, + }) + return err + }, &database.TxOptions{ + Isolation: sql.LevelSerializable, + }) + assert.NoError(t, err) + } + + // Start TX + // Run order + + quota := newCommitter(t, db, myWorkspace.Workspace, myWorkspace.Build) + quota.GetQuota(ctx, t) // Step 1 + bumpDeadline() // Interrupt + quota.GetAllowance(ctx, t) // Step 2 + + err := quota.DBTx.UpdateWorkspaceBuildCostByID(ctx, database.UpdateWorkspaceBuildCostByIDParams{ + ID: myWorkspace.Build.ID, + DailyCost: 10, + }) // Step 3 + require.ErrorContains(t, err, "could not serialize access due to concurrent update") + // End commit + require.ErrorContains(t, quota.Done(), "failed transaction") + }) + + // UpdateOtherBuildDeadline bumps a user's other workspace deadline + // while doing a quota commit. + t.Run("UpdateOtherBuildDeadline", func(t *testing.T) { + // +------------------------------+------------------+ + // | Begin Tx | | + // +------------------------------+------------------+ + // | GetQuota(user) | | + // +------------------------------+------------------+ + // | | BumpDeadline(w2) | + // +------------------------------+------------------+ + // | GetAllowance(user) | | + // +------------------------------+------------------+ + // | UpdateWorkspaceBuildCost(w1) | | + // +------------------------------+------------------+ + // | CommitTx() | | + // +------------------------------+------------------+ + // Works! + ctx := testutil.Context(t, testutil.WaitLong) + //nolint:gocritic // testing + ctx = dbauthz.AsSystemRestricted(ctx) + + myWorkspace := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ + OrganizationID: org.Org.ID, + OwnerID: user.ID, + }).Do() + + // Use the same template + otherWorkspace := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ + OrganizationID: org.Org.ID, + OwnerID: user.ID, + }). + Seed(database.WorkspaceBuild{ + TemplateVersionID: myWorkspace.TemplateVersion.ID, + }). + Do() + + bumpDeadline := func() { + err := db.InTx(func(db database.Store) error { + err := db.UpdateWorkspaceBuildDeadlineByID(ctx, database.UpdateWorkspaceBuildDeadlineByIDParams{ + Deadline: dbtime.Now(), + MaxDeadline: dbtime.Now(), + UpdatedAt: dbtime.Now(), + ID: otherWorkspace.Build.ID, + }) + return err + }, &database.TxOptions{ + Isolation: sql.LevelSerializable, + }) + assert.NoError(t, err) + } + + // Start TX + // Run order + + quota := newCommitter(t, db, myWorkspace.Workspace, myWorkspace.Build) + quota.GetQuota(ctx, t) // Step 1 + bumpDeadline() // Interrupt + quota.GetAllowance(ctx, t) // Step 2 + quota.UpdateWorkspaceBuildCostByID(ctx, t, 10) // Step 3 + // End commit + require.NoError(t, quota.Done()) + }) + + t.Run("ActivityBump", func(t *testing.T) { + t.Log("Expected to fail. As long as quota & deadline are on the same " + + " table and affect the same row, this will likely always fail.") + // +---------------------+----------------------------------+ + // | W1 Quota Tx | | + // +---------------------+----------------------------------+ + // | Begin Tx | | + // +---------------------+----------------------------------+ + // | GetQuota(w1) | | + // +---------------------+----------------------------------+ + // | GetAllowance(w1) | | + // +---------------------+----------------------------------+ + // | | ActivityBump(w1) | + // +---------------------+----------------------------------+ + // | UpdateBuildCost(w1) | | + // +---------------------+----------------------------------+ + // | CommitTx() | | + // +---------------------+----------------------------------+ + // pq: could not serialize access due to concurrent update + ctx := testutil.Context(t, testutil.WaitShort) + //nolint:gocritic // testing + ctx = dbauthz.AsSystemRestricted(ctx) + + myWorkspace := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ + OrganizationID: org.Org.ID, + OwnerID: user.ID, + }). + Seed(database.WorkspaceBuild{ + // Make sure the bump does something + Deadline: dbtime.Now().Add(time.Hour * -20), + }). + Do() + + one := newCommitter(t, db, myWorkspace.Workspace, myWorkspace.Build) + + // Run order + one.GetQuota(ctx, t) + one.GetAllowance(ctx, t) + + err := db.ActivityBumpWorkspace(ctx, database.ActivityBumpWorkspaceParams{ + NextAutostart: time.Now(), + WorkspaceID: myWorkspace.Workspace.ID, + }) + + assert.NoError(t, err) + + err = one.DBTx.UpdateWorkspaceBuildCostByID(ctx, database.UpdateWorkspaceBuildCostByIDParams{ + ID: myWorkspace.Build.ID, + DailyCost: 10, + }) + require.ErrorContains(t, err, "could not serialize access due to concurrent update") + + // End commit + assert.ErrorContains(t, one.Done(), "failed transaction") + }) + + t.Run("BumpLastUsedAt", func(t *testing.T) { + // +---------------------+----------------------------------+ + // | W1 Quota Tx | | + // +---------------------+----------------------------------+ + // | Begin Tx | | + // +---------------------+----------------------------------+ + // | GetQuota(w1) | | + // +---------------------+----------------------------------+ + // | GetAllowance(w1) | | + // +---------------------+----------------------------------+ + // | | UpdateWorkspaceLastUsedAt(w1) | + // +---------------------+----------------------------------+ + // | UpdateBuildCost(w1) | | + // +---------------------+----------------------------------+ + // | CommitTx() | | + // +---------------------+----------------------------------+ + ctx := testutil.Context(t, testutil.WaitShort) + //nolint:gocritic // testing + ctx = dbauthz.AsSystemRestricted(ctx) + + myWorkspace := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ + OrganizationID: org.Org.ID, + OwnerID: user.ID, + }).Do() + + one := newCommitter(t, db, myWorkspace.Workspace, myWorkspace.Build) + + // Run order + one.GetQuota(ctx, t) + one.GetAllowance(ctx, t) + + err := db.UpdateWorkspaceLastUsedAt(ctx, database.UpdateWorkspaceLastUsedAtParams{ + ID: myWorkspace.Workspace.ID, + LastUsedAt: dbtime.Now(), + }) + assert.NoError(t, err) + + one.UpdateWorkspaceBuildCostByID(ctx, t, 10) + + // End commit + assert.NoError(t, one.Done()) + }) + + t.Run("UserMod", func(t *testing.T) { + // +---------------------+----------------------------------+ + // | W1 Quota Tx | | + // +---------------------+----------------------------------+ + // | Begin Tx | | + // +---------------------+----------------------------------+ + // | GetQuota(w1) | | + // +---------------------+----------------------------------+ + // | GetAllowance(w1) | | + // +---------------------+----------------------------------+ + // | | RemoveUserFromOrg | + // +---------------------+----------------------------------+ + // | UpdateBuildCost(w1) | | + // +---------------------+----------------------------------+ + // | CommitTx() | | + // +---------------------+----------------------------------+ + // Works! + ctx := testutil.Context(t, testutil.WaitShort) + //nolint:gocritic // testing + ctx = dbauthz.AsSystemRestricted(ctx) + var err error + + myWorkspace := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ + OrganizationID: org.Org.ID, + OwnerID: user.ID, + }).Do() + + one := newCommitter(t, db, myWorkspace.Workspace, myWorkspace.Build) + + // Run order + + one.GetQuota(ctx, t) + one.GetAllowance(ctx, t) + + err = db.DeleteOrganizationMember(ctx, database.DeleteOrganizationMemberParams{ + OrganizationID: myWorkspace.Workspace.OrganizationID, + UserID: user.ID, + }) + assert.NoError(t, err) + + one.UpdateWorkspaceBuildCostByID(ctx, t, 10) + + // End commit + assert.NoError(t, one.Done()) + }) + + // QuotaCommit 2 workspaces in different orgs. + // Workspaces do not share templates, owners, or orgs + t.Run("DoubleQuotaUnrelatedWorkspaces", func(t *testing.T) { + // +---------------------+---------------------+ + // | W1 Quota Tx | W2 Quota Tx | + // +---------------------+---------------------+ + // | Begin Tx | | + // +---------------------+---------------------+ + // | | Begin Tx | + // +---------------------+---------------------+ + // | GetQuota(w1) | | + // +---------------------+---------------------+ + // | GetAllowance(w1) | | + // +---------------------+---------------------+ + // | UpdateBuildCost(w1) | | + // +---------------------+---------------------+ + // | | UpdateBuildCost(w2) | + // +---------------------+---------------------+ + // | | GetQuota(w2) | + // +---------------------+---------------------+ + // | | GetAllowance(w2) | + // +---------------------+---------------------+ + // | CommitTx() | | + // +---------------------+---------------------+ + // | | CommitTx() | + // +---------------------+---------------------+ + ctx := testutil.Context(t, testutil.WaitLong) + //nolint:gocritic // testing + ctx = dbauthz.AsSystemRestricted(ctx) + + myWorkspace := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ + OrganizationID: org.Org.ID, + OwnerID: user.ID, + }).Do() + + myOtherWorkspace := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ + OrganizationID: otherOrg.Org.ID, // Different org! + OwnerID: otherUser.ID, + }).Do() + + one := newCommitter(t, db, myWorkspace.Workspace, myWorkspace.Build) + two := newCommitter(t, db, myOtherWorkspace.Workspace, myOtherWorkspace.Build) + + // Run order + one.GetQuota(ctx, t) + one.GetAllowance(ctx, t) + + one.UpdateWorkspaceBuildCostByID(ctx, t, 10) + + two.GetQuota(ctx, t) + two.GetAllowance(ctx, t) + two.UpdateWorkspaceBuildCostByID(ctx, t, 10) + + // End commit + assert.NoError(t, one.Done()) + assert.NoError(t, two.Done()) + }) + + // QuotaCommit 2 workspaces in different orgs. + // Workspaces do not share templates or orgs + t.Run("DoubleQuotaUserWorkspacesDiffOrgs", func(t *testing.T) { + // +---------------------+---------------------+ + // | W1 Quota Tx | W2 Quota Tx | + // +---------------------+---------------------+ + // | Begin Tx | | + // +---------------------+---------------------+ + // | | Begin Tx | + // +---------------------+---------------------+ + // | GetQuota(w1) | | + // +---------------------+---------------------+ + // | GetAllowance(w1) | | + // +---------------------+---------------------+ + // | UpdateBuildCost(w1) | | + // +---------------------+---------------------+ + // | | UpdateBuildCost(w2) | + // +---------------------+---------------------+ + // | | GetQuota(w2) | + // +---------------------+---------------------+ + // | | GetAllowance(w2) | + // +---------------------+---------------------+ + // | CommitTx() | | + // +---------------------+---------------------+ + // | | CommitTx() | + // +---------------------+---------------------+ + ctx := testutil.Context(t, testutil.WaitLong) + //nolint:gocritic // testing + ctx = dbauthz.AsSystemRestricted(ctx) + + myWorkspace := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ + OrganizationID: org.Org.ID, + OwnerID: user.ID, + }).Do() + + myOtherWorkspace := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ + OrganizationID: otherOrg.Org.ID, // Different org! + OwnerID: user.ID, + }).Do() + + one := newCommitter(t, db, myWorkspace.Workspace, myWorkspace.Build) + two := newCommitter(t, db, myOtherWorkspace.Workspace, myOtherWorkspace.Build) + + // Run order + one.GetQuota(ctx, t) + one.GetAllowance(ctx, t) + + one.UpdateWorkspaceBuildCostByID(ctx, t, 10) + + two.GetQuota(ctx, t) + two.GetAllowance(ctx, t) + two.UpdateWorkspaceBuildCostByID(ctx, t, 10) + + // End commit + assert.NoError(t, one.Done()) + assert.NoError(t, two.Done()) + }) + + // QuotaCommit 2 workspaces in the same org. + // Workspaces do not share templates + t.Run("DoubleQuotaUserWorkspaces", func(t *testing.T) { + t.Log("Setting a new build cost to a workspace in a org affects other " + + "workspaces in the same org. This is expected to fail.") + // +---------------------+---------------------+ + // | W1 Quota Tx | W2 Quota Tx | + // +---------------------+---------------------+ + // | Begin Tx | | + // +---------------------+---------------------+ + // | | Begin Tx | + // +---------------------+---------------------+ + // | GetQuota(w1) | | + // +---------------------+---------------------+ + // | GetAllowance(w1) | | + // +---------------------+---------------------+ + // | UpdateBuildCost(w1) | | + // +---------------------+---------------------+ + // | | UpdateBuildCost(w2) | + // +---------------------+---------------------+ + // | | GetQuota(w2) | + // +---------------------+---------------------+ + // | | GetAllowance(w2) | + // +---------------------+---------------------+ + // | CommitTx() | | + // +---------------------+---------------------+ + // | | CommitTx() | + // +---------------------+---------------------+ + // pq: could not serialize access due to read/write dependencies among transactions + ctx := testutil.Context(t, testutil.WaitLong) + //nolint:gocritic // testing + ctx = dbauthz.AsSystemRestricted(ctx) + + myWorkspace := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ + OrganizationID: org.Org.ID, + OwnerID: user.ID, + }).Do() + + myOtherWorkspace := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{ + OrganizationID: org.Org.ID, + OwnerID: user.ID, + }).Do() + + one := newCommitter(t, db, myWorkspace.Workspace, myWorkspace.Build) + two := newCommitter(t, db, myOtherWorkspace.Workspace, myOtherWorkspace.Build) + + // Run order + one.GetQuota(ctx, t) + one.GetAllowance(ctx, t) + + one.UpdateWorkspaceBuildCostByID(ctx, t, 10) + + two.GetQuota(ctx, t) + two.GetAllowance(ctx, t) + two.UpdateWorkspaceBuildCostByID(ctx, t, 10) + + // End commit + assert.NoError(t, one.Done()) + assert.ErrorContains(t, two.Done(), "could not serialize access due to read/write dependencies among transactions") + }) +} + func deprecatedQuotaEndpoint(ctx context.Context, client *codersdk.Client, userID string) (codersdk.WorkspaceQuota, error) { res, err := client.Request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspace-quota/%s", userID), nil) if err != nil { @@ -335,3 +833,65 @@ func applyWithCost(cost int32) []*proto.Response { }, }} } + +// committer does what the CommitQuota does, but allows +// stepping through the actions in the tx and controlling the +// timing. +// This is a nice wrapper to make the tests more concise. +type committer struct { + DBTx *dbtestutil.DBTx + w database.WorkspaceTable + b database.WorkspaceBuild +} + +func newCommitter(t *testing.T, db database.Store, workspace database.WorkspaceTable, build database.WorkspaceBuild) *committer { + quotaTX := dbtestutil.StartTx(t, db, &database.TxOptions{ + Isolation: sql.LevelSerializable, + ReadOnly: false, + }) + return &committer{DBTx: quotaTX, w: workspace, b: build} +} + +// GetQuota touches: +// - workspace_builds +// - workspaces +func (c *committer) GetQuota(ctx context.Context, t *testing.T) int64 { + t.Helper() + + consumed, err := c.DBTx.GetQuotaConsumedForUser(ctx, database.GetQuotaConsumedForUserParams{ + OwnerID: c.w.OwnerID, + OrganizationID: c.w.OrganizationID, + }) + require.NoError(t, err) + return consumed +} + +// GetAllowance touches: +// - group_members_expanded +// - users +// - groups +// - org_members +func (c *committer) GetAllowance(ctx context.Context, t *testing.T) int64 { + t.Helper() + + allowance, err := c.DBTx.GetQuotaAllowanceForUser(ctx, database.GetQuotaAllowanceForUserParams{ + UserID: c.w.OwnerID, + OrganizationID: c.w.OrganizationID, + }) + require.NoError(t, err) + return allowance +} + +func (c *committer) UpdateWorkspaceBuildCostByID(ctx context.Context, t *testing.T, cost int32) bool { + t.Helper() + + err := c.DBTx.UpdateWorkspaceBuildCostByID(ctx, database.UpdateWorkspaceBuildCostByIDParams{ + ID: c.b.ID, + DailyCost: cost, + }) + return assert.NoError(t, err) +} + +func (c *committer) Done() error { + return c.DBTx.Done() +} From 041eb991a64169dc5e62341d6f8b42fd63d63170 Mon Sep 17 00:00:00 2001 From: Colin Adler Date: Wed, 30 Oct 2024 13:41:16 -0500 Subject: [PATCH 05/10] feat: add prometheus metric for tracking user statuses (#15281) (cherry picked from commit 3de98c25dbec48cc161c82c842d7e988d36a213b) --- cli/server.go | 8 +- coderd/prometheusmetrics/prometheusmetrics.go | 56 ++++++++++- .../prometheusmetrics_test.go | 97 ++++++++++++++++++- 3 files changed, 158 insertions(+), 3 deletions(-) diff --git a/cli/server.go b/cli/server.go index b29b39b05fb4a..f19c0df86fd1b 100644 --- a/cli/server.go +++ b/cli/server.go @@ -212,10 +212,16 @@ func enablePrometheus( options.PrometheusRegistry.MustRegister(collectors.NewGoCollector()) options.PrometheusRegistry.MustRegister(collectors.NewProcessCollector(collectors.ProcessCollectorOpts{})) - closeUsersFunc, err := prometheusmetrics.ActiveUsers(ctx, options.PrometheusRegistry, options.Database, 0) + closeActiveUsersFunc, err := prometheusmetrics.ActiveUsers(ctx, options.Logger.Named("active_user_metrics"), options.PrometheusRegistry, options.Database, 0) if err != nil { return nil, xerrors.Errorf("register active users prometheus metric: %w", err) } + afterCtx(ctx, closeActiveUsersFunc) + + closeUsersFunc, err := prometheusmetrics.Users(ctx, options.Logger.Named("user_metrics"), quartz.NewReal(), options.PrometheusRegistry, options.Database, 0) + if err != nil { + return nil, xerrors.Errorf("register users prometheus metric: %w", err) + } afterCtx(ctx, closeUsersFunc) closeWorkspacesFunc, err := prometheusmetrics.Workspaces(ctx, options.Logger.Named("workspaces_metrics"), options.PrometheusRegistry, options.Database, 0) diff --git a/coderd/prometheusmetrics/prometheusmetrics.go b/coderd/prometheusmetrics/prometheusmetrics.go index ebd50ff0f42ce..ccd88a9e3fc1d 100644 --- a/coderd/prometheusmetrics/prometheusmetrics.go +++ b/coderd/prometheusmetrics/prometheusmetrics.go @@ -12,6 +12,7 @@ import ( "github.com/google/uuid" "github.com/prometheus/client_golang/prometheus" + "golang.org/x/xerrors" "tailscale.com/tailcfg" "cdr.dev/slog" @@ -22,12 +23,13 @@ import ( "github.com/coder/coder/v2/coderd/database/dbtime" "github.com/coder/coder/v2/codersdk" "github.com/coder/coder/v2/tailnet" + "github.com/coder/quartz" ) const defaultRefreshRate = time.Minute // ActiveUsers tracks the number of users that have authenticated within the past hour. -func ActiveUsers(ctx context.Context, registerer prometheus.Registerer, db database.Store, duration time.Duration) (func(), error) { +func ActiveUsers(ctx context.Context, logger slog.Logger, registerer prometheus.Registerer, db database.Store, duration time.Duration) (func(), error) { if duration == 0 { duration = defaultRefreshRate } @@ -58,6 +60,7 @@ func ActiveUsers(ctx context.Context, registerer prometheus.Registerer, db datab apiKeys, err := db.GetAPIKeysLastUsedAfter(ctx, dbtime.Now().Add(-1*time.Hour)) if err != nil { + logger.Error(ctx, "get api keys for active users prometheus metric", slog.Error(err)) continue } distinctUsers := map[uuid.UUID]struct{}{} @@ -73,6 +76,57 @@ func ActiveUsers(ctx context.Context, registerer prometheus.Registerer, db datab }, nil } +// Users tracks the total number of registered users, partitioned by status. +func Users(ctx context.Context, logger slog.Logger, clk quartz.Clock, registerer prometheus.Registerer, db database.Store, duration time.Duration) (func(), error) { + if duration == 0 { + // It's not super important this tracks real-time. + duration = defaultRefreshRate * 5 + } + + gauge := prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: "coderd", + Subsystem: "api", + Name: "total_user_count", + Help: "The total number of registered users, partitioned by status.", + }, []string{"status"}) + err := registerer.Register(gauge) + if err != nil { + return nil, xerrors.Errorf("register total_user_count gauge: %w", err) + } + + ctx, cancelFunc := context.WithCancel(ctx) + done := make(chan struct{}) + ticker := clk.NewTicker(duration) + go func() { + defer close(done) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + } + + gauge.Reset() + //nolint:gocritic // This is a system service that needs full access + //to the users table. + users, err := db.GetUsers(dbauthz.AsSystemRestricted(ctx), database.GetUsersParams{}) + if err != nil { + logger.Error(ctx, "get all users for prometheus metrics", slog.Error(err)) + continue + } + + for _, user := range users { + gauge.WithLabelValues(string(user.Status)).Inc() + } + } + }() + return func() { + cancelFunc() + <-done + }, nil +} + // Workspaces tracks the total number of workspaces with labels on status. func Workspaces(ctx context.Context, logger slog.Logger, registerer prometheus.Registerer, db database.Store, duration time.Duration) (func(), error) { if duration == 0 { diff --git a/coderd/prometheusmetrics/prometheusmetrics_test.go b/coderd/prometheusmetrics/prometheusmetrics_test.go index 1c904d9f342e2..84aeda148662e 100644 --- a/coderd/prometheusmetrics/prometheusmetrics_test.go +++ b/coderd/prometheusmetrics/prometheusmetrics_test.go @@ -38,6 +38,7 @@ import ( "github.com/coder/coder/v2/tailnet" "github.com/coder/coder/v2/tailnet/tailnettest" "github.com/coder/coder/v2/testutil" + "github.com/coder/quartz" ) func TestActiveUsers(t *testing.T) { @@ -98,7 +99,7 @@ func TestActiveUsers(t *testing.T) { t.Run(tc.Name, func(t *testing.T) { t.Parallel() registry := prometheus.NewRegistry() - closeFunc, err := prometheusmetrics.ActiveUsers(context.Background(), registry, tc.Database(t), time.Millisecond) + closeFunc, err := prometheusmetrics.ActiveUsers(context.Background(), slogtest.Make(t, nil), registry, tc.Database(t), time.Millisecond) require.NoError(t, err) t.Cleanup(closeFunc) @@ -112,6 +113,100 @@ func TestActiveUsers(t *testing.T) { } } +func TestUsers(t *testing.T) { + t.Parallel() + + for _, tc := range []struct { + Name string + Database func(t *testing.T) database.Store + Count map[database.UserStatus]int + }{{ + Name: "None", + Database: func(t *testing.T) database.Store { + return dbmem.New() + }, + Count: map[database.UserStatus]int{}, + }, { + Name: "One", + Database: func(t *testing.T) database.Store { + db := dbmem.New() + dbgen.User(t, db, database.User{Status: database.UserStatusActive}) + return db + }, + Count: map[database.UserStatus]int{database.UserStatusActive: 1}, + }, { + Name: "MultipleStatuses", + Database: func(t *testing.T) database.Store { + db := dbmem.New() + + dbgen.User(t, db, database.User{Status: database.UserStatusActive}) + dbgen.User(t, db, database.User{Status: database.UserStatusDormant}) + + return db + }, + Count: map[database.UserStatus]int{database.UserStatusActive: 1, database.UserStatusDormant: 1}, + }, { + Name: "MultipleActive", + Database: func(t *testing.T) database.Store { + db := dbmem.New() + dbgen.User(t, db, database.User{Status: database.UserStatusActive}) + dbgen.User(t, db, database.User{Status: database.UserStatusActive}) + dbgen.User(t, db, database.User{Status: database.UserStatusActive}) + return db + }, + Count: map[database.UserStatus]int{database.UserStatusActive: 3}, + }} { + tc := tc + t.Run(tc.Name, func(t *testing.T) { + t.Parallel() + ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort) + defer cancel() + + registry := prometheus.NewRegistry() + mClock := quartz.NewMock(t) + db := tc.Database(t) + closeFunc, err := prometheusmetrics.Users(context.Background(), slogtest.Make(t, nil), mClock, registry, db, time.Millisecond) + require.NoError(t, err) + t.Cleanup(closeFunc) + + _, w := mClock.AdvanceNext() + w.MustWait(ctx) + + checkFn := func() bool { + metrics, err := registry.Gather() + if err != nil { + return false + } + + // If we get no metrics and we know none should exist, bail + // early. If we get no metrics but we expect some, retry. + if len(metrics) == 0 { + return len(tc.Count) == 0 + } + + for _, metric := range metrics[0].Metric { + if tc.Count[database.UserStatus(*metric.Label[0].Value)] != int(metric.Gauge.GetValue()) { + return false + } + } + + return true + } + + require.Eventually(t, checkFn, testutil.WaitShort, testutil.IntervalFast) + + // Add another dormant user and ensure it updates + dbgen.User(t, db, database.User{Status: database.UserStatusDormant}) + tc.Count[database.UserStatusDormant]++ + + _, w = mClock.AdvanceNext() + w.MustWait(ctx) + + require.Eventually(t, checkFn, testutil.WaitShort, testutil.IntervalFast) + }) + } +} + func TestWorkspaceLatestBuildTotals(t *testing.T) { t.Parallel() From 920c275755304903155ecfb3ec846600071b3ae5 Mon Sep 17 00:00:00 2001 From: Colin Adler Date: Thu, 31 Oct 2024 17:55:42 -0500 Subject: [PATCH 06/10] feat: add audit logs for dormancy events (#15298) (cherry picked from commit 088f21965bee683bc7559b93761adaad156b012d) --- cli/server_createadminuser.go | 1 + coderd/apidoc/docs.go | 8 ++ coderd/apidoc/swagger.json | 8 ++ coderd/audit/fields.go | 33 ++++++++ coderd/audit/request.go | 13 +-- coderd/coderd.go | 1 + coderd/coderdtest/coderdtest.go | 3 + coderd/database/dbgen/dbgen.go | 1 + coderd/database/dbmem/dbmem.go | 8 +- coderd/database/queries.sql.go | 21 ++++- coderd/database/queries/users.sql | 11 ++- coderd/httpmw/apikey.go | 18 ++-- .../provisionerdserver/provisionerdserver.go | 1 + coderd/userauth.go | 84 +++++++++++++++---- coderd/userauth_test.go | 45 +++++++++- coderd/users.go | 17 +++- coderd/users_test.go | 36 ++++++++ codersdk/users.go | 2 + docs/reference/api/schemas.md | 18 ++-- docs/reference/api/users.md | 1 + enterprise/cli/server.go | 3 +- enterprise/coderd/coderd.go | 1 + enterprise/coderd/dormancy/dormantusersjob.go | 64 +++++++------- .../coderd/dormancy/dormantusersjob_test.go | 44 +++++----- site/src/api/typesGenerated.ts | 1 + .../AuditLogDescription.tsx | 2 +- 26 files changed, 340 insertions(+), 105 deletions(-) create mode 100644 coderd/audit/fields.go diff --git a/cli/server_createadminuser.go b/cli/server_createadminuser.go index 0619688468554..7ef95e7e093e6 100644 --- a/cli/server_createadminuser.go +++ b/cli/server_createadminuser.go @@ -197,6 +197,7 @@ func (r *RootCmd) newCreateAdminUserCommand() *serpent.Command { UpdatedAt: dbtime.Now(), RBACRoles: []string{rbac.RoleOwner().String()}, LoginType: database.LoginTypePassword, + Status: "", }) if err != nil { return xerrors.Errorf("insert user: %w", err) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index 83d1fdc2c492a..27aef82123db8 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -9896,6 +9896,14 @@ const docTemplate = `{ "password": { "type": "string" }, + "user_status": { + "description": "UserStatus defaults to UserStatusDormant.", + "allOf": [ + { + "$ref": "#/definitions/codersdk.UserStatus" + } + ] + }, "username": { "type": "string" } diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index 9861e195b7a69..2a19c40d979b3 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -8809,6 +8809,14 @@ "password": { "type": "string" }, + "user_status": { + "description": "UserStatus defaults to UserStatusDormant.", + "allOf": [ + { + "$ref": "#/definitions/codersdk.UserStatus" + } + ] + }, "username": { "type": "string" } diff --git a/coderd/audit/fields.go b/coderd/audit/fields.go new file mode 100644 index 0000000000000..db0879730425a --- /dev/null +++ b/coderd/audit/fields.go @@ -0,0 +1,33 @@ +package audit + +import ( + "context" + "encoding/json" + + "cdr.dev/slog" +) + +type BackgroundSubsystem string + +const ( + BackgroundSubsystemDormancy BackgroundSubsystem = "dormancy" +) + +func BackgroundTaskFields(subsystem BackgroundSubsystem) map[string]string { + return map[string]string{ + "automatic_actor": "coder", + "automatic_subsystem": string(subsystem), + } +} + +func BackgroundTaskFieldsBytes(ctx context.Context, logger slog.Logger, subsystem BackgroundSubsystem) []byte { + af := BackgroundTaskFields(subsystem) + + wriBytes, err := json.Marshal(af) + if err != nil { + logger.Error(ctx, "marshal additional fields for dormancy audit", slog.Error(err)) + return []byte("{}") + } + + return wriBytes +} diff --git a/coderd/audit/request.go b/coderd/audit/request.go index 88b637384eeda..c8b7bf17b4b96 100644 --- a/coderd/audit/request.go +++ b/coderd/audit/request.go @@ -62,12 +62,13 @@ type BackgroundAuditParams[T Auditable] struct { Audit Auditor Log slog.Logger - UserID uuid.UUID - RequestID uuid.UUID - Status int - Action database.AuditAction - OrganizationID uuid.UUID - IP string + UserID uuid.UUID + RequestID uuid.UUID + Status int + Action database.AuditAction + OrganizationID uuid.UUID + IP string + // todo: this should automatically marshal an interface{} instead of accepting a raw message. AdditionalFields json.RawMessage New T diff --git a/coderd/coderd.go b/coderd/coderd.go index bd844d7ca13c3..70101b7020890 100644 --- a/coderd/coderd.go +++ b/coderd/coderd.go @@ -702,6 +702,7 @@ func New(options *Options) *API { apiKeyMiddleware := httpmw.ExtractAPIKeyMW(httpmw.ExtractAPIKeyConfig{ DB: options.Database, + ActivateDormantUser: ActivateDormantUser(options.Logger, &api.Auditor, options.Database), OAuth2Configs: oauthConfigs, RedirectToLogin: false, DisableSessionExpiryRefresh: options.DeploymentValues.Sessions.DisableExpiryRefresh.Value(), diff --git a/coderd/coderdtest/coderdtest.go b/coderd/coderdtest/coderdtest.go index 47d9a42319d20..f1128f316abde 100644 --- a/coderd/coderdtest/coderdtest.go +++ b/coderd/coderdtest/coderdtest.go @@ -718,6 +718,9 @@ func createAnotherUserRetry(t testing.TB, client *codersdk.Client, organizationI Name: RandomName(t), Password: "SomeSecurePassword!", OrganizationIDs: organizationIDs, + // Always create users as active in tests to ignore an extra audit log + // when logging in. + UserStatus: ptr.Ref(codersdk.UserStatusActive), } for _, m := range mutators { m(&req) diff --git a/coderd/database/dbgen/dbgen.go b/coderd/database/dbgen/dbgen.go index d369d8a023ba9..4ac675309f662 100644 --- a/coderd/database/dbgen/dbgen.go +++ b/coderd/database/dbgen/dbgen.go @@ -342,6 +342,7 @@ func User(t testing.TB, db database.Store, orig database.User) database.User { UpdatedAt: takeFirst(orig.UpdatedAt, dbtime.Now()), RBACRoles: takeFirstSlice(orig.RBACRoles, []string{}), LoginType: takeFirst(orig.LoginType, database.LoginTypePassword), + Status: string(takeFirst(orig.Status, database.UserStatusDormant)), }) require.NoError(t, err, "insert user") diff --git a/coderd/database/dbmem/dbmem.go b/coderd/database/dbmem/dbmem.go index e38c3e107013f..6b447f6daacd0 100644 --- a/coderd/database/dbmem/dbmem.go +++ b/coderd/database/dbmem/dbmem.go @@ -7713,6 +7713,11 @@ func (q *FakeQuerier) InsertUser(_ context.Context, arg database.InsertUserParam } } + status := database.UserStatusDormant + if arg.Status != "" { + status = database.UserStatus(arg.Status) + } + user := database.User{ ID: arg.ID, Email: arg.Email, @@ -7721,7 +7726,7 @@ func (q *FakeQuerier) InsertUser(_ context.Context, arg database.InsertUserParam UpdatedAt: arg.UpdatedAt, Username: arg.Username, Name: arg.Name, - Status: database.UserStatusDormant, + Status: status, RBACRoles: arg.RBACRoles, LoginType: arg.LoginType, } @@ -8644,6 +8649,7 @@ func (q *FakeQuerier) UpdateInactiveUsersToDormant(_ context.Context, params dat updated = append(updated, database.UpdateInactiveUsersToDormantRow{ ID: user.ID, Email: user.Email, + Username: user.Username, LastSeenAt: user.LastSeenAt, }) } diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 9ec77d29bcafb..ad9986255ca15 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -10355,10 +10355,15 @@ INSERT INTO created_at, updated_at, rbac_roles, - login_type + login_type, + status ) VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING id, email, username, hashed_password, created_at, updated_at, status, rbac_roles, login_type, avatar_url, deleted, last_seen_at, quiet_hours_schedule, theme_preference, name, github_com_user_id, hashed_one_time_passcode, one_time_passcode_expires_at + ($1, $2, $3, $4, $5, $6, $7, $8, $9, + -- if the status passed in is empty, fallback to dormant, which is what + -- we were doing before. + COALESCE(NULLIF($10::text, '')::user_status, 'dormant'::user_status) + ) RETURNING id, email, username, hashed_password, created_at, updated_at, status, rbac_roles, login_type, avatar_url, deleted, last_seen_at, quiet_hours_schedule, theme_preference, name, github_com_user_id, hashed_one_time_passcode, one_time_passcode_expires_at ` type InsertUserParams struct { @@ -10371,6 +10376,7 @@ type InsertUserParams struct { UpdatedAt time.Time `db:"updated_at" json:"updated_at"` RBACRoles pq.StringArray `db:"rbac_roles" json:"rbac_roles"` LoginType LoginType `db:"login_type" json:"login_type"` + Status string `db:"status" json:"status"` } func (q *sqlQuerier) InsertUser(ctx context.Context, arg InsertUserParams) (User, error) { @@ -10384,6 +10390,7 @@ func (q *sqlQuerier) InsertUser(ctx context.Context, arg InsertUserParams) (User arg.UpdatedAt, arg.RBACRoles, arg.LoginType, + arg.Status, ) var i User err := row.Scan( @@ -10418,7 +10425,7 @@ SET WHERE last_seen_at < $2 :: timestamp AND status = 'active'::user_status -RETURNING id, email, last_seen_at +RETURNING id, email, username, last_seen_at ` type UpdateInactiveUsersToDormantParams struct { @@ -10429,6 +10436,7 @@ type UpdateInactiveUsersToDormantParams struct { type UpdateInactiveUsersToDormantRow struct { ID uuid.UUID `db:"id" json:"id"` Email string `db:"email" json:"email"` + Username string `db:"username" json:"username"` LastSeenAt time.Time `db:"last_seen_at" json:"last_seen_at"` } @@ -10441,7 +10449,12 @@ func (q *sqlQuerier) UpdateInactiveUsersToDormant(ctx context.Context, arg Updat var items []UpdateInactiveUsersToDormantRow for rows.Next() { var i UpdateInactiveUsersToDormantRow - if err := rows.Scan(&i.ID, &i.Email, &i.LastSeenAt); err != nil { + if err := rows.Scan( + &i.ID, + &i.Email, + &i.Username, + &i.LastSeenAt, + ); err != nil { return nil, err } items = append(items, i) diff --git a/coderd/database/queries/users.sql b/coderd/database/queries/users.sql index 013e2b8027a45..a4f8844fd2db5 100644 --- a/coderd/database/queries/users.sql +++ b/coderd/database/queries/users.sql @@ -67,10 +67,15 @@ INSERT INTO created_at, updated_at, rbac_roles, - login_type + login_type, + status ) VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *; + ($1, $2, $3, $4, $5, $6, $7, $8, $9, + -- if the status passed in is empty, fallback to dormant, which is what + -- we were doing before. + COALESCE(NULLIF(@status::text, '')::user_status, 'dormant'::user_status) + ) RETURNING *; -- name: UpdateUserProfile :one UPDATE @@ -286,7 +291,7 @@ SET WHERE last_seen_at < @last_seen_after :: timestamp AND status = 'active'::user_status -RETURNING id, email, last_seen_at; +RETURNING id, email, username, last_seen_at; -- AllUserIDs returns all UserIDs regardless of user status or deletion. -- name: AllUserIDs :many diff --git a/coderd/httpmw/apikey.go b/coderd/httpmw/apikey.go index c4d1c7f202533..f6746b95eb20e 100644 --- a/coderd/httpmw/apikey.go +++ b/coderd/httpmw/apikey.go @@ -82,6 +82,7 @@ const ( type ExtractAPIKeyConfig struct { DB database.Store + ActivateDormantUser func(ctx context.Context, u database.User) (database.User, error) OAuth2Configs *OAuth2Configs RedirectToLogin bool DisableSessionExpiryRefresh bool @@ -414,21 +415,20 @@ func ExtractAPIKey(rw http.ResponseWriter, r *http.Request, cfg ExtractAPIKeyCon }) } - if userStatus == database.UserStatusDormant { - // If coder confirms that the dormant user is valid, it can switch their account to active. - // nolint:gocritic - u, err := cfg.DB.UpdateUserStatus(dbauthz.AsSystemRestricted(ctx), database.UpdateUserStatusParams{ - ID: key.UserID, - Status: database.UserStatusActive, - UpdatedAt: dbtime.Now(), + if userStatus == database.UserStatusDormant && cfg.ActivateDormantUser != nil { + id, _ := uuid.Parse(actor.ID) + user, err := cfg.ActivateDormantUser(ctx, database.User{ + ID: id, + Username: actor.FriendlyName, + Status: userStatus, }) if err != nil { return write(http.StatusInternalServerError, codersdk.Response{ Message: internalErrorMessage, - Detail: fmt.Sprintf("can't activate a dormant user: %s", err.Error()), + Detail: fmt.Sprintf("update user status: %s", err.Error()), }) } - userStatus = u.Status + userStatus = user.Status } if userStatus != database.UserStatusActive { diff --git a/coderd/provisionerdserver/provisionerdserver.go b/coderd/provisionerdserver/provisionerdserver.go index 0a4198423e403..e4628c8c8fd28 100644 --- a/coderd/provisionerdserver/provisionerdserver.go +++ b/coderd/provisionerdserver/provisionerdserver.go @@ -1063,6 +1063,7 @@ func (s *server) FailJob(ctx context.Context, failJob *proto.FailedJob) (*proto. wriBytes, err := json.Marshal(buildResourceInfo) if err != nil { s.Logger.Error(ctx, "marshal workspace resource info for failed job", slog.Error(err)) + wriBytes = []byte("{}") } bag := audit.BaggageFromContext(ctx) diff --git a/coderd/userauth.go b/coderd/userauth.go index 13f9b088d731f..1dc399e1ac3b5 100644 --- a/coderd/userauth.go +++ b/coderd/userauth.go @@ -12,6 +12,7 @@ import ( "strconv" "strings" "sync" + "sync/atomic" "time" "github.com/coreos/go-oidc/v3/oidc" @@ -27,6 +28,7 @@ import ( "github.com/coder/coder/v2/coderd/cryptokeys" "github.com/coder/coder/v2/coderd/idpsync" "github.com/coder/coder/v2/coderd/jwtutils" + "github.com/coder/coder/v2/coderd/util/ptr" "github.com/coder/coder/v2/coderd/apikey" "github.com/coder/coder/v2/coderd/audit" @@ -565,20 +567,13 @@ func (api *API) loginRequest(ctx context.Context, rw http.ResponseWriter, req co return user, rbac.Subject{}, false } - if user.Status == database.UserStatusDormant { - //nolint:gocritic // System needs to update status of the user account (dormant -> active). - user, err = api.Database.UpdateUserStatus(dbauthz.AsSystemRestricted(ctx), database.UpdateUserStatusParams{ - ID: user.ID, - Status: database.UserStatusActive, - UpdatedAt: dbtime.Now(), + user, err = ActivateDormantUser(api.Logger, &api.Auditor, api.Database)(ctx, user) + if err != nil { + httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{ + Message: "Internal error.", + Detail: err.Error(), }) - if err != nil { - logger.Error(ctx, "unable to update user status to active", slog.Error(err)) - httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{ - Message: "Internal error occurred. Try again later, or contact an admin for assistance.", - }) - return user, rbac.Subject{}, false - } + return user, rbac.Subject{}, false } subject, userStatus, err := httpmw.UserRBACSubject(ctx, api.Database, user.ID, rbac.ScopeAll) @@ -601,6 +596,42 @@ func (api *API) loginRequest(ctx context.Context, rw http.ResponseWriter, req co return user, subject, true } +func ActivateDormantUser(logger slog.Logger, auditor *atomic.Pointer[audit.Auditor], db database.Store) func(ctx context.Context, user database.User) (database.User, error) { + return func(ctx context.Context, user database.User) (database.User, error) { + if user.ID == uuid.Nil || user.Status != database.UserStatusDormant { + return user, nil + } + + //nolint:gocritic // System needs to update status of the user account (dormant -> active). + newUser, err := db.UpdateUserStatus(dbauthz.AsSystemRestricted(ctx), database.UpdateUserStatusParams{ + ID: user.ID, + Status: database.UserStatusActive, + UpdatedAt: dbtime.Now(), + }) + if err != nil { + logger.Error(ctx, "unable to update user status to active", slog.Error(err)) + return user, xerrors.Errorf("update user status: %w", err) + } + + oldAuditUser := user + newAuditUser := user + newAuditUser.Status = database.UserStatusActive + + audit.BackgroundAudit(ctx, &audit.BackgroundAuditParams[database.User]{ + Audit: *auditor.Load(), + Log: logger, + UserID: user.ID, + Action: database.AuditActionWrite, + Old: oldAuditUser, + New: newAuditUser, + Status: http.StatusOK, + AdditionalFields: audit.BackgroundTaskFieldsBytes(ctx, logger, audit.BackgroundSubsystemDormancy), + }) + + return newUser, nil + } +} + // Clear the user's session cookie. // // @Summary Log out user @@ -1385,10 +1416,22 @@ func (p *oauthLoginParams) CommitAuditLogs() { func (api *API) oauthLogin(r *http.Request, params *oauthLoginParams) ([]*http.Cookie, database.User, database.APIKey, error) { var ( - ctx = r.Context() - user database.User - cookies []*http.Cookie - logger = api.Logger.Named(userAuthLoggerName) + ctx = r.Context() + user database.User + cookies []*http.Cookie + logger = api.Logger.Named(userAuthLoggerName) + auditor = *api.Auditor.Load() + dormantConvertAudit *audit.Request[database.User] + initDormantAuditOnce = sync.OnceFunc(func() { + dormantConvertAudit = params.initAuditRequest(&audit.RequestParams{ + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + OrganizationID: uuid.Nil, + AdditionalFields: audit.BackgroundTaskFields(audit.BackgroundSubsystemDormancy), + }) + }) ) var isConvertLoginType bool @@ -1490,6 +1533,7 @@ func (api *API) oauthLogin(r *http.Request, params *oauthLoginParams) ([]*http.C Email: params.Email, Username: params.Username, OrganizationIDs: orgIDs, + UserStatus: ptr.Ref(codersdk.UserStatusActive), }, LoginType: params.LoginType, accountCreatorName: "oauth", @@ -1501,6 +1545,11 @@ func (api *API) oauthLogin(r *http.Request, params *oauthLoginParams) ([]*http.C // Activate dormant user on sign-in if user.Status == database.UserStatusDormant { + // This is necessary because transactions can be retried, and we + // only want to add the audit log a single time. + initDormantAuditOnce() + dormantConvertAudit.UserID = user.ID + dormantConvertAudit.Old = user //nolint:gocritic // System needs to update status of the user account (dormant -> active). user, err = tx.UpdateUserStatus(dbauthz.AsSystemRestricted(ctx), database.UpdateUserStatusParams{ ID: user.ID, @@ -1511,6 +1560,7 @@ func (api *API) oauthLogin(r *http.Request, params *oauthLoginParams) ([]*http.C logger.Error(ctx, "unable to update user status to active", slog.Error(err)) return xerrors.Errorf("update user status: %w", err) } + dormantConvertAudit.New = user } debugContext, err := json.Marshal(params.DebugContext) diff --git a/coderd/userauth_test.go b/coderd/userauth_test.go index 6386be7eb8be4..843f8ec753133 100644 --- a/coderd/userauth_test.go +++ b/coderd/userauth_test.go @@ -1285,7 +1285,7 @@ func TestUserOIDC(t *testing.T) { tc.AssertResponse(t, resp) } - ctx := testutil.Context(t, testutil.WaitLong) + ctx := testutil.Context(t, testutil.WaitShort) if tc.AssertUser != nil { user, err := client.User(ctx, "me") @@ -1300,6 +1300,49 @@ func TestUserOIDC(t *testing.T) { }) } + t.Run("OIDCDormancy", func(t *testing.T) { + t.Parallel() + ctx := testutil.Context(t, testutil.WaitShort) + + auditor := audit.NewMock() + fake := oidctest.NewFakeIDP(t, + oidctest.WithRefresh(func(_ string) error { + return xerrors.New("refreshing token should never occur") + }), + oidctest.WithServing(), + ) + cfg := fake.OIDCConfig(t, nil, func(cfg *coderd.OIDCConfig) { + cfg.AllowSignups = true + }) + + logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}).Leveled(slog.LevelDebug) + owner, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{ + Auditor: auditor, + OIDCConfig: cfg, + Logger: &logger, + }) + + user := dbgen.User(t, db, database.User{ + LoginType: database.LoginTypeOIDC, + Status: database.UserStatusDormant, + }) + auditor.ResetLogs() + + client, resp := fake.AttemptLogin(t, owner, jwt.MapClaims{ + "email": user.Email, + }) + require.Equal(t, http.StatusOK, resp.StatusCode) + + auditor.Contains(t, database.AuditLog{ + ResourceType: database.ResourceTypeUser, + AdditionalFields: json.RawMessage(`{"automatic_actor":"coder","automatic_subsystem":"dormancy"}`), + }) + me, err := client.User(ctx, "me") + require.NoError(t, err) + + require.Equal(t, codersdk.UserStatusActive, me.Status) + }) + t.Run("OIDCConvert", func(t *testing.T) { t.Parallel() diff --git a/coderd/users.go b/coderd/users.go index 5e521da3a6004..445b44f334349 100644 --- a/coderd/users.go +++ b/coderd/users.go @@ -28,6 +28,7 @@ import ( "github.com/coder/coder/v2/coderd/searchquery" "github.com/coder/coder/v2/coderd/telemetry" "github.com/coder/coder/v2/coderd/userpassword" + "github.com/coder/coder/v2/coderd/util/ptr" "github.com/coder/coder/v2/coderd/util/slice" "github.com/coder/coder/v2/codersdk" ) @@ -188,10 +189,13 @@ func (api *API) postFirstUser(rw http.ResponseWriter, r *http.Request) { //nolint:gocritic // needed to create first user user, err := api.CreateUser(dbauthz.AsSystemRestricted(ctx), api.Database, CreateUserRequest{ CreateUserRequestWithOrgs: codersdk.CreateUserRequestWithOrgs{ - Email: createUser.Email, - Username: createUser.Username, - Name: createUser.Name, - Password: createUser.Password, + Email: createUser.Email, + Username: createUser.Username, + Name: createUser.Name, + Password: createUser.Password, + // There's no reason to create the first user as dormant, since you have + // to login immediately anyways. + UserStatus: ptr.Ref(codersdk.UserStatusActive), OrganizationIDs: []uuid.UUID{defaultOrg.ID}, }, LoginType: database.LoginTypePassword, @@ -1343,6 +1347,10 @@ func (api *API) CreateUser(ctx context.Context, store database.Store, req Create err := store.InTx(func(tx database.Store) error { orgRoles := make([]string, 0) + status := "" + if req.UserStatus != nil { + status = string(*req.UserStatus) + } params := database.InsertUserParams{ ID: uuid.New(), Email: req.Email, @@ -1354,6 +1362,7 @@ func (api *API) CreateUser(ctx context.Context, store database.Store, req Create // All new users are defaulted to members of the site. RBACRoles: []string{}, LoginType: req.LoginType, + Status: status, } // If a user signs up with OAuth, they can have no password! if req.Password != "" { diff --git a/coderd/users_test.go b/coderd/users_test.go index c33ca933a9d96..3c88d3e5022ac 100644 --- a/coderd/users_test.go +++ b/coderd/users_test.go @@ -30,6 +30,7 @@ import ( "github.com/coder/coder/v2/coderd/database/dbgen" "github.com/coder/coder/v2/coderd/database/dbtime" "github.com/coder/coder/v2/coderd/rbac" + "github.com/coder/coder/v2/coderd/util/ptr" "github.com/coder/coder/v2/coderd/util/slice" "github.com/coder/coder/v2/codersdk" "github.com/coder/coder/v2/testutil" @@ -695,6 +696,41 @@ func TestPostUsers(t *testing.T) { }) require.NoError(t, err) + // User should default to dormant. + require.Equal(t, codersdk.UserStatusDormant, user.Status) + + require.Len(t, auditor.AuditLogs(), numLogs) + require.Equal(t, database.AuditActionCreate, auditor.AuditLogs()[numLogs-1].Action) + require.Equal(t, database.AuditActionLogin, auditor.AuditLogs()[numLogs-2].Action) + + require.Len(t, user.OrganizationIDs, 1) + assert.Equal(t, firstUser.OrganizationID, user.OrganizationIDs[0]) + }) + + t.Run("CreateWithStatus", func(t *testing.T) { + t.Parallel() + auditor := audit.NewMock() + client := coderdtest.New(t, &coderdtest.Options{Auditor: auditor}) + numLogs := len(auditor.AuditLogs()) + + firstUser := coderdtest.CreateFirstUser(t, client) + numLogs++ // add an audit log for user create + numLogs++ // add an audit log for login + + ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) + defer cancel() + + user, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ + OrganizationIDs: []uuid.UUID{firstUser.OrganizationID}, + Email: "another@user.org", + Username: "someone-else", + Password: "SomeSecurePassword!", + UserStatus: ptr.Ref(codersdk.UserStatusActive), + }) + require.NoError(t, err) + + require.Equal(t, codersdk.UserStatusActive, user.Status) + require.Len(t, auditor.AuditLogs(), numLogs) require.Equal(t, database.AuditActionCreate, auditor.AuditLogs()[numLogs-1].Action) require.Equal(t, database.AuditActionLogin, auditor.AuditLogs()[numLogs-2].Action) diff --git a/codersdk/users.go b/codersdk/users.go index f57b8010f9229..546fcc99e9fbe 100644 --- a/codersdk/users.go +++ b/codersdk/users.go @@ -139,6 +139,8 @@ type CreateUserRequestWithOrgs struct { Password string `json:"password"` // UserLoginType defaults to LoginTypePassword. UserLoginType LoginType `json:"login_type"` + // UserStatus defaults to UserStatusDormant. + UserStatus *UserStatus `json:"user_status"` // OrganizationIDs is a list of organization IDs that the user should be a member of. OrganizationIDs []uuid.UUID `json:"organization_ids" validate:"" format:"uuid"` } diff --git a/docs/reference/api/schemas.md b/docs/reference/api/schemas.md index f4e683305029b..64df97a031543 100644 --- a/docs/reference/api/schemas.md +++ b/docs/reference/api/schemas.md @@ -1342,20 +1342,22 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in "name": "string", "organization_ids": ["497f6eca-6276-4993-bfeb-53cbbbba6f08"], "password": "string", + "user_status": "active", "username": "string" } ``` ### Properties -| Name | Type | Required | Restrictions | Description | -| ------------------ | ---------------------------------------- | -------- | ------------ | ----------------------------------------------------------------------------------- | -| `email` | string | true | | | -| `login_type` | [codersdk.LoginType](#codersdklogintype) | false | | Login type defaults to LoginTypePassword. | -| `name` | string | false | | | -| `organization_ids` | array of string | false | | Organization ids is a list of organization IDs that the user should be a member of. | -| `password` | string | false | | | -| `username` | string | true | | | +| Name | Type | Required | Restrictions | Description | +| ------------------ | ------------------------------------------ | -------- | ------------ | ----------------------------------------------------------------------------------- | +| `email` | string | true | | | +| `login_type` | [codersdk.LoginType](#codersdklogintype) | false | | Login type defaults to LoginTypePassword. | +| `name` | string | false | | | +| `organization_ids` | array of string | false | | Organization ids is a list of organization IDs that the user should be a member of. | +| `password` | string | false | | | +| `user_status` | [codersdk.UserStatus](#codersdkuserstatus) | false | | User status defaults to UserStatusDormant. | +| `username` | string | true | | | ## codersdk.CreateWorkspaceBuildRequest diff --git a/docs/reference/api/users.md b/docs/reference/api/users.md index 3979f5521b377..5e0ae3c239c04 100644 --- a/docs/reference/api/users.md +++ b/docs/reference/api/users.md @@ -86,6 +86,7 @@ curl -X POST http://coder-server:8080/api/v2/users \ "name": "string", "organization_ids": ["497f6eca-6276-4993-bfeb-53cbbbba6f08"], "password": "string", + "user_status": "active", "username": "string" } ``` diff --git a/enterprise/cli/server.go b/enterprise/cli/server.go index 930a3e4956257..1bf4f31a8506b 100644 --- a/enterprise/cli/server.go +++ b/enterprise/cli/server.go @@ -23,6 +23,7 @@ import ( "github.com/coder/coder/v2/enterprise/dbcrypt" "github.com/coder/coder/v2/enterprise/trialer" "github.com/coder/coder/v2/tailnet" + "github.com/coder/quartz" "github.com/coder/serpent" agplcoderd "github.com/coder/coder/v2/coderd" @@ -95,7 +96,7 @@ func (r *RootCmd) Server(_ func()) *serpent.Command { DefaultQuietHoursSchedule: options.DeploymentValues.UserQuietHoursSchedule.DefaultSchedule.Value(), ProvisionerDaemonPSK: options.DeploymentValues.Provisioner.DaemonPSK.Value(), - CheckInactiveUsersCancelFunc: dormancy.CheckInactiveUsers(ctx, options.Logger, options.Database), + CheckInactiveUsersCancelFunc: dormancy.CheckInactiveUsers(ctx, options.Logger, quartz.NewReal(), options.Database, options.Auditor), } if encKeys := options.DeploymentValues.ExternalTokenEncryptionKeys.Value(); len(encKeys) != 0 { diff --git a/enterprise/coderd/coderd.go b/enterprise/coderd/coderd.go index 7e59eb341411f..dddf619b34058 100644 --- a/enterprise/coderd/coderd.go +++ b/enterprise/coderd/coderd.go @@ -172,6 +172,7 @@ func New(ctx context.Context, options *Options) (_ *API, err error) { } apiKeyMiddleware := httpmw.ExtractAPIKeyMW(httpmw.ExtractAPIKeyConfig{ DB: options.Database, + ActivateDormantUser: coderd.ActivateDormantUser(options.Logger, &api.AGPL.Auditor, options.Database), OAuth2Configs: oauthConfigs, RedirectToLogin: false, DisableSessionExpiryRefresh: options.DeploymentValues.Sessions.DisableExpiryRefresh.Value(), diff --git a/enterprise/coderd/dormancy/dormantusersjob.go b/enterprise/coderd/dormancy/dormantusersjob.go index 8c8e22310c031..cae442ce07507 100644 --- a/enterprise/coderd/dormancy/dormantusersjob.go +++ b/enterprise/coderd/dormancy/dormantusersjob.go @@ -3,14 +3,17 @@ package dormancy import ( "context" "database/sql" + "net/http" "time" "golang.org/x/xerrors" "cdr.dev/slog" + "github.com/coder/coder/v2/coderd/audit" "github.com/coder/coder/v2/coderd/database" "github.com/coder/coder/v2/coderd/database/dbtime" + "github.com/coder/quartz" ) const ( @@ -22,50 +25,49 @@ const ( // CheckInactiveUsers function updates status of inactive users from active to dormant // using default parameters. -func CheckInactiveUsers(ctx context.Context, logger slog.Logger, db database.Store) func() { - return CheckInactiveUsersWithOptions(ctx, logger, db, jobInterval, accountDormancyPeriod) +func CheckInactiveUsers(ctx context.Context, logger slog.Logger, clk quartz.Clock, db database.Store, auditor audit.Auditor) func() { + return CheckInactiveUsersWithOptions(ctx, logger, clk, db, auditor, jobInterval, accountDormancyPeriod) } // CheckInactiveUsersWithOptions function updates status of inactive users from active to dormant // using provided parameters. -func CheckInactiveUsersWithOptions(ctx context.Context, logger slog.Logger, db database.Store, checkInterval, dormancyPeriod time.Duration) func() { +func CheckInactiveUsersWithOptions(ctx context.Context, logger slog.Logger, clk quartz.Clock, db database.Store, auditor audit.Auditor, checkInterval, dormancyPeriod time.Duration) func() { logger = logger.Named("dormancy") ctx, cancelFunc := context.WithCancel(ctx) - done := make(chan struct{}) - ticker := time.NewTicker(checkInterval) - go func() { - defer close(done) - defer ticker.Stop() - for { - select { - case <-ctx.Done(): - return - case <-ticker.C: - } + tf := clk.TickerFunc(ctx, checkInterval, func() error { + startTime := time.Now() + lastSeenAfter := dbtime.Now().Add(-dormancyPeriod) + logger.Debug(ctx, "check inactive user accounts", slog.F("dormancy_period", dormancyPeriod), slog.F("last_seen_after", lastSeenAfter)) - startTime := time.Now() - lastSeenAfter := dbtime.Now().Add(-dormancyPeriod) - logger.Debug(ctx, "check inactive user accounts", slog.F("dormancy_period", dormancyPeriod), slog.F("last_seen_after", lastSeenAfter)) + updatedUsers, err := db.UpdateInactiveUsersToDormant(ctx, database.UpdateInactiveUsersToDormantParams{ + LastSeenAfter: lastSeenAfter, + UpdatedAt: dbtime.Now(), + }) + if err != nil && !xerrors.Is(err, sql.ErrNoRows) { + logger.Error(ctx, "can't mark inactive users as dormant", slog.Error(err)) + return nil + } - updatedUsers, err := db.UpdateInactiveUsersToDormant(ctx, database.UpdateInactiveUsersToDormantParams{ - LastSeenAfter: lastSeenAfter, - UpdatedAt: dbtime.Now(), + for _, u := range updatedUsers { + logger.Info(ctx, "account has been marked as dormant", slog.F("email", u.Email), slog.F("last_seen_at", u.LastSeenAt)) + audit.BackgroundAudit(ctx, &audit.BackgroundAuditParams[database.User]{ + Audit: auditor, + Log: logger, + UserID: u.ID, + Action: database.AuditActionWrite, + Old: database.User{ID: u.ID, Username: u.Username, Status: database.UserStatusActive}, + New: database.User{ID: u.ID, Username: u.Username, Status: database.UserStatusDormant}, + Status: http.StatusOK, + AdditionalFields: audit.BackgroundTaskFieldsBytes(ctx, logger, audit.BackgroundSubsystemDormancy), }) - if err != nil && !xerrors.Is(err, sql.ErrNoRows) { - logger.Error(ctx, "can't mark inactive users as dormant", slog.Error(err)) - continue - } - - for _, u := range updatedUsers { - logger.Info(ctx, "account has been marked as dormant", slog.F("email", u.Email), slog.F("last_seen_at", u.LastSeenAt)) - } - logger.Debug(ctx, "checking user accounts is done", slog.F("num_dormant_accounts", len(updatedUsers)), slog.F("execution_time", time.Since(startTime))) } - }() + logger.Debug(ctx, "checking user accounts is done", slog.F("num_dormant_accounts", len(updatedUsers)), slog.F("execution_time", time.Since(startTime))) + return nil + }) return func() { cancelFunc() - <-done + _ = tf.Wait() } } diff --git a/enterprise/coderd/dormancy/dormantusersjob_test.go b/enterprise/coderd/dormancy/dormantusersjob_test.go index c752e84bc1d90..bb3e0b4170baf 100644 --- a/enterprise/coderd/dormancy/dormantusersjob_test.go +++ b/enterprise/coderd/dormancy/dormantusersjob_test.go @@ -10,10 +10,11 @@ import ( "cdr.dev/slog/sloggers/slogtest" + "github.com/coder/coder/v2/coderd/audit" "github.com/coder/coder/v2/coderd/database" "github.com/coder/coder/v2/coderd/database/dbmem" "github.com/coder/coder/v2/enterprise/coderd/dormancy" - "github.com/coder/coder/v2/testutil" + "github.com/coder/quartz" ) func TestCheckInactiveUsers(t *testing.T) { @@ -42,29 +43,34 @@ func TestCheckInactiveUsers(t *testing.T) { suspendedUser2 := setupUser(ctx, t, db, "suspended-user-2@coder.com", database.UserStatusSuspended, time.Now().Add(-dormancyPeriod).Add(-time.Hour)) suspendedUser3 := setupUser(ctx, t, db, "suspended-user-3@coder.com", database.UserStatusSuspended, time.Now().Add(-dormancyPeriod).Add(-6*time.Hour)) + mAudit := audit.NewMock() + mClock := quartz.NewMock(t) // Run the periodic job - closeFunc := dormancy.CheckInactiveUsersWithOptions(ctx, logger, db, interval, dormancyPeriod) + closeFunc := dormancy.CheckInactiveUsersWithOptions(ctx, logger, mClock, db, mAudit, interval, dormancyPeriod) t.Cleanup(closeFunc) - var rows []database.GetUsersRow - var err error - require.Eventually(t, func() bool { - rows, err = db.GetUsers(ctx, database.GetUsersParams{}) - if err != nil { - return false - } + dur, w := mClock.AdvanceNext() + require.Equal(t, interval, dur) + w.MustWait(ctx) + + rows, err := db.GetUsers(ctx, database.GetUsersParams{}) + require.NoError(t, err) - var dormant, suspended int - for _, row := range rows { - if row.Status == database.UserStatusDormant { - dormant++ - } else if row.Status == database.UserStatusSuspended { - suspended++ - } + var dormant, suspended int + for _, row := range rows { + if row.Status == database.UserStatusDormant { + dormant++ + } else if row.Status == database.UserStatusSuspended { + suspended++ } - // 6 users in total, 3 dormant, 3 suspended - return len(rows) == 9 && dormant == 3 && suspended == 3 - }, testutil.WaitShort, testutil.IntervalMedium) + } + + // 9 users in total, 3 active, 3 dormant, 3 suspended + require.Len(t, rows, 9) + require.Equal(t, 3, dormant) + require.Equal(t, 3, suspended) + + require.Len(t, mAudit.AuditLogs(), 3) allUsers := ignoreUpdatedAt(database.ConvertUserRows(rows)) diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index d687fb68ec61f..4568948595e7c 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -328,6 +328,7 @@ export interface CreateUserRequestWithOrgs { readonly name: string; readonly password: string; readonly login_type: LoginType; + readonly user_status?: UserStatus; readonly organization_ids: Readonly>; } diff --git a/site/src/pages/AuditPage/AuditLogRow/AuditLogDescription/AuditLogDescription.tsx b/site/src/pages/AuditPage/AuditLogRow/AuditLogDescription/AuditLogDescription.tsx index dd00129f935eb..51d4e8ec910d9 100644 --- a/site/src/pages/AuditPage/AuditLogRow/AuditLogDescription/AuditLogDescription.tsx +++ b/site/src/pages/AuditPage/AuditLogRow/AuditLogDescription/AuditLogDescription.tsx @@ -23,7 +23,7 @@ export const AuditLogDescription: FC = ({ target = ""; } - // This occurs when SCIM creates a user. + // This occurs when SCIM creates a user, or dormancy changes a users status. if ( auditLog.resource_type === "user" && auditLog.additional_fields?.automatic_actor === "coder" From 131cb0d8678bc43273bf60a33ee493b4668248e3 Mon Sep 17 00:00:00 2001 From: Edward Angert Date: Fri, 1 Nov 2024 12:24:35 -0400 Subject: [PATCH 07/10] docs: add new best practice doc to speed up templates and workspaces (#15296) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closes https://github.com/coder/coder/issues/14858 - [x] TODO: update `build-timeline.png` - [x] TODO: `Best practices` doesn't show up in the sidebar until you're actually in the doc 🤔 [preview](https://coder.com/docs/@bp-speed-up-templates/tutorials/best-practices/speed-up-templates) --------- Co-authored-by: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Co-authored-by: Muhammad Atif Ali Co-authored-by: Ben Potter (cherry picked from commit 18ef954a037917c93f8851d4cb6a7ee0321faeb6) --- docs/images/best-practice/build-timeline.png | Bin 0 -> 112612 bytes docs/install/kubernetes.md | 46 +++--- docs/manifest.json | 12 ++ docs/tutorials/best-practices/index.md | 5 + .../best-practices/speed-up-templates.md | 143 ++++++++++++++++++ 5 files changed, 189 insertions(+), 17 deletions(-) create mode 100644 docs/images/best-practice/build-timeline.png create mode 100644 docs/tutorials/best-practices/index.md create mode 100644 docs/tutorials/best-practices/speed-up-templates.md diff --git a/docs/images/best-practice/build-timeline.png b/docs/images/best-practice/build-timeline.png new file mode 100644 index 0000000000000000000000000000000000000000..cb1c1191ee7ccca57309218ea2e9ca74990760b4 GIT binary patch literal 112612 zcmZ^LbzB@>vNkRW5+Jy{yTf1sg1b9G0}1XjXmEE3GPpYgcXxujySv*r@7=w3-`&mk z$Najdd%C+$Rh_C+^*lWxit-Z3@9^G1KtLc%Ns1{$KtPv5KtSaqz=4lQ&0!>hH;@j> z5}zQ-#|RF9m|CJ-?PxA znb7~c50(Gd5Ah!F(I6m%A*94aR9zvD)8Rc$BoZnV>a}?bVmNYACd3r%$L8nz<_*6a zLK^#RRLLyv2xvMF9#=Equ-M$4wCTle#AvZ48+L@*b>I+m@+=uEjOF0&5H!!6c{-_0 z5=MNg|D40(Al*LO3bYAOdE;|BOyg6ViNU0wrQ#gu^nap24;e7=b^Vc+rdw35Plk*f zl-t~_l0C6+GT2j~Q(LG#wL9?o;vtbC_fyfp%%sO;Fg8zHK8b^iNWO?+fPsM_F*Nj@ zMuo4hZ~P%vh?wccrgljGmi_&CXZ)nFx4wQGgSP6{lGPrb zRY?{{AEGO(!jbxpiG+fJhBOD6KQ?1A`nI5}>-Pf7A0s0S{lt2Dgp&8`u*?V7G~xORc&MI@5Ff0vWX_!dd|*~`8pH>YpOTm`@Y!k z-@SAC&ReRP&n0hSYT8)+m3~qV^Ye~yR-}~aTEa#}3&JW{JG) zw|cXB?s!nJlBAch9voTEh|rP7)o4Vs6n)BSZqJSvwGoa)sdWW=kTr_VLu#Q?H++O2RM&r3PY|VW@|9bZQGeczPYz@ z3D9&U%3b>KG$xqP;(S1r=&(ftcPAFv1Z<1Fj7YPPJJVsGTRF@|+JGOEyN~&o-b1Fm zfXzu<*r@3zGez~xD!|=i72GgNAxvGr0Q0io#8^w+xaljq>Tf9)zb3^0X9g<;zdzh6i05 z*_el!(4?Pdhn~hihV4a(ed-VS*e{p7{76L;4%a7llnP1IKg*3jb($KJ^{~X<38hzB zKwiX`cDvVB9{-fDeM(n?XX;}|Hq%z*Zvq+;V-Z0?>MJ1P&a#u-X^jiB6wT$cW+S?z z#+b}ARyGLbOQWZcK?|SYb3-61icHOJ0=jsJJx-rWsWJHhZN!i_T@5lNa(Uz_ewB7) z;KZu-%Qdv40%}{X&v6{xVc=GM4r>kLrGsfA(#wjrHr%S}RjhhCGdAqV#M5WLL#tWbD)gY0wVKS)fAa_ZI#C*UjR(N{ElF6M3(mQDgOEd*fxJeA~R z&bEcgXBdz2S{y+UBlpPQZP?9NMpV~(67abZ>@dMS6%&?GpnD_#+m4+O z@Og3gan}|Vk)K?7?`gu0OrVjyE6U=!iUhfJ@-hEgt;G=Cn)1Og_ncPkzUqVM))NJ7 zL6#ZCC22%;U|cj=deg)FK`!F9#AD0;lguHGa*@R*Yxs-fIYOo^ria27$2m^XQgU^y zDBs`&BVkaz%vR!4p3^u+WNvVIgJWJ+lm!BA>AN`X4$jo_Xtkv0yz5`Yv15VhV}62N zut%{MHaO`qXIB?yTo!4g)w|@g#ujXVNHG(xi{#Pj$Wqh8HM6+B1qOO2m|dp)4Lge4 znvnkQiB2YrDsNn=9Ajo$MdU0ltjJO1RUkQlSxqVVx0J{FgSy zjSWCa3U922Hn|&RSf1%!PW4sWnT(O5hEDO^e2}EGb9p(`te+FI>kcjU;GxW$^zF+- z(qt(jT$8qAg3jSEJ22mw69x%VwBrNIe{85e3(qO-v#po57||AM(T9yUNIy1fn=aY3 zXO}cQacHf_AOlJ*D-)Uc)n@fCxGiVAH1O&K3rlPy$`(W3S8)gWkQyT3K>f$2$;iYNFh%TiW;0H9V6ZVWrxFr$)yR3AW*A8wtELO>HH&`S=oi8 zax?3H$oEg7^Fw_2^7p68#h2m1qoi z_Is6mE*4ahNr-akmalP@G5c@%{t`Mos-tq{;Jd<0-p|!p_XECKQ9AYXGq1(~F(uhW z*_+DUk7`m^vN#RMI~*7e^jF?e7z``4StGz>R*fAD7@4Q9_P(-1lFm`X5y! z6T-~b9y-@GZ3ZIGPQcfQ{zx$T^Y~;Vh2z%@2`7=uvHoazB;Ur*5H56Bbaj>t%*+b* z4p)0Wsp!}K^w{-W2@qv@Nw2;I^b!iKWfEs-T_wPs$fAA_KUtUokP{ZKp zXhQX*{ov40tfqs5KgA_}?jnlL&zjFwe#n1vMol;X#fren1hY8h;@TSh%gak( z#Q#V0dk7ThhzGH@(Fe<@t_|L1-Z2tQtm z%qqu}$Th3}!=eAzR)%m#+xPQ2e;)Fu4y0LLsMXLvPPJqL-}&u|ld?ZN`wH6EgpDVJ znw(s;x~3+#vQp9B-ky@3eF}|-hld6T1WwM(PzneLT={>^*-ZYx;(wF8Ueohm60+bU zxEgcv^Xo{<$mA6kN*Yy#lZTEC4aK*#0BD(*5^rx&EWUkn657D60*UiN6$D)OBF)-q zhmA!`_N-824Wpac?yBKrXjQL~|I{cm>iL%AnN>kPX0W|j$owlD6 z-4P8uxZLXMPXZ;dj}f3fz)wLU@f=oKdU{Nx`M|)>oZ3%)5l3vuFIP7~Ndq2&Up|ms zNd`|`k1=7UrQXfadq>M#cWZwrrA8wZOI;+K6smrUY?V^H=L}+-F!m8MxRW5)dDB#6?Ci};l>S`6bcc`1< z*aG9YG3{?J#JY+vZT`ue8eWWr*ojRnW$`mG`mseYtWB-=)3j$8bZ!DY=5vjIQ zoGqCB{s9WH9JDeW-$`csds}}bB&3EtjF)anYE?D0!NZx7yyj+^47Xj}bU<(v&KpKv zI_kIpR!C3gWNIVHS9#ca9Ly`(XlXwT-pGC^U)$G*yFJ#2Cq}UN{}+`y(!fRzTy-9#1gm}Z>P}fn=@bxm zY|wJi_r~b`yhWT&P9~el{oFU@t>Px3zfmg~!EAg@n9-g)MOx8v`A#oen@s3oP$81# z)l(M~^cGp~u+rodo0>`u)?_Oa@mr+5r{}3#WQ_Bymige)>aDs~n`a7MhLj%45|zQr zp~g;zhgXGLSyFxbi`7_iuWO&j{TA^WL;LHEm3=R!#y}wQ(GEHB1GV|@FURQ~r;YYE zGa7^KFH7x3Uz(GQb^(g!=N;#_zD-x22a|dB8v)o&c^%%bSD^Hm5a>{!328nm4m^DP zsE)C{ZcO8ZmWrlBI=3U8wc}G(Taf1^?L!x~b!kF?&O>pHGuc{jHe)57` zkVY^zhEeInP_*fp3wI6|)wJONW(~oSg^yuP>+=S_^|1#|>>bS7`f}VVyNk7TITJaJ zLu#Yj-qockOPDB84>jr#tU3(LUA!+#atzC|c2zaQAn*il(C|StGBLHl^m42l&g*(q z1Vr*7o-Hvvd;=zA!L=Rf{>ozx$j+3+?OCvuq8F1$S#L8+LTxC z+U|y)*4`i&YRsb!9TvuFg8P3J6QxAc}mo#SAPSf&ZRPTFYJ;4gEn_rig zNpAswyJdB^iLml`N}0rg_UGYto*d+y;{fIsUF7Cb%K^-H`sz?_=!M;zyR;G7cBe7|DN+4%Rg_EpCKKG?bOe>EAWY4Jvp)Vz?bw^#|QJ zw3I9DiJu-HJHoTMEd#WE%f8~c+qh5RJH@V}UX~cF6bIUtwd^q3*u{}@FP|gcG&u7| zF`mdZ+ZC!vNIW4}&m-0f1POOyzr3`L(T68t>kkboElE6-HZEKVXU2)5wm__XG57## ziWaK9$Z$C)J6l>>TEX-p+Sy>(+4{aG-hR8N(fHB~k2>4@(ws|~p^zFH!B$7u?{zm% z7*%phF*rV)R6HboaCj1@Nr9d~BVbn7#j>AAKbAOE{!;jHE{zOX=PZfZ`nAE4`waiU zwI~+a6(OH}j7PM*^)|tNH^rO=qn0M_McTS?2g@qCfn7{%Rihn7 zx%cW-26ctos8hAsC|={+>k}m!YAGP8H8HvX`6U~>RkGaefOFCJ+jaIfp!7Cbh?Uzs$Xn?+2WD-K~K$W>~3i<0S1P z_v*a`Cz*E%TqoR}^;CYu*m>(wdGoL1@grb6d)n(`#oB2&R(Pz9_fzwjWaDNic5$a- zY02HIl;A~(f)wzDbOz1%@M4+b?RordyCqdY=p{bCT^l*SJw6I}Y<#%k88QjVt9@;5 zIaI5NxNhPdXJxxU zF%I{Bds@>FZ4=kO2-PTLef{KiJ<%UYgXbmAI(-mg=awBORCA)YO7^M+9s8@;8n`_5a{)qTH|)@ zWuyA`r3_A5Git^OH4e(5dAYEX*klO zogPa+Te~OY88#UQ6l6@Q?1KVr9 z4kM?>8?!HoLm#UV|20{>z%7V15D> z&jT3)#{)DHdiCkSUcT(nZg~M(2c{8!t)Z#rZ`eT)t`Y zkVwdoeS5_Be_u2*5WvLB!*`Q{yMFZbtL{ew7L~3AzkAOWzqA-4JWmM$RlUyri3{g0 zcB~O;<>ABeKW?G|_eICPJsfJZYqw_JHFvuY+%>PglzX0hGte-7eE zTgO89qoLC4t0pQqykm_cJD=|8$mAQ)&pUZ7^we#A;CU_NzlFQ^d+~nVGv5YBu*OAv z^Cr_32FkviR;wkhhvhxNvv3(eBRGoG)^&>P+4Y_aJ{>!3578U!Cq}F}P9>$qMcjIB z$4Km$GJ6!cca}JjZEZCPJ<)1VxfGuGf#1L^+(WgC4@=E0<3eu~47- zg}nT~{ncPzX!VFX!jJn^Vn7rz3PXic%yW0XTT_qAd?I!*Wx326le38ZjxI??{=t6X zvSW0N!_h;N_0f#HLHW8TQ`6cvzCv&f^N0>_W}$);yXo`XmD>~ZOLY^G@p- zu>JWwXl)MpuApfB!6((KlX2YL%Zy#{I?G#e{D^sG#XH1vhu%Q_?zLI%{8=5g%WX)p zpwRX~=yGA)Oa1UL@n~d9ZY=H{tJ`6$*V@zS7FYS(jX}Gp-ZS#$E_b_HQcBAlD;MDp z_YR)7`zT_i@l)osz1ea1JhiM4vZ-;F-_&1=v&>#vi}>%PICRW^jj2OBeM@y*E2wcf zv}0_^mxseTDAlPO%d{Z6Nc56AK1xRwoE6jYEZv#?d8G;nJA z;_cn;F=j8@Qh8i-9V(bn3{UJike+UTRMu_}|MGlYAmrc%Ye#mtW96h@S2HfSgiGz} z$-2&?`z{I>QuNrRy?MzEhSiY8nYnTMp^4+x{BqRBOXcoTF!yG@3~olvnsOaHf33|) zHl$$a0gepFkw@=DuQgg6e)FpNd~PXhe;Bn%^L>52YaeIiHOpT2g(tGju=tuDBCI8% zpEG1j5xYT!%EF{&AGR^*E9#nmfn#if&QVl?>f9~n`^+lb>F;?Td5CPV(OK~Q6kL%M zl(3$u^iMmCweh??UpeOO9gLN<*=@o7VrR1NW0L9Qg(=C-UUq9uF?8KcDM;UNyInAE zjEfuu32U9B1fB`pEpH{(uX#P4TylF~%`M8Ce_Iw`Y`fcM+v}ee)Y=SJN11cq&k9YHKG z&f)%Yh@|SA5qB)1{GzUa=={AxMk(mgBe%vYES_Oy`?iA4MzX(iZyM+Q>}Ztel~UB# z4}#+2l-+(g;?~V4TuxVagIiHT<;c%MgvMRE;~uN9)>IqdMMxg>{p-`&Oo}g|vW7+h zyW+R&8ts%81MZABZCJ4&9lFjYr$lTF*Kxkr*H_5B!910k?>@M2-mxsm!y|()cS7rl zc(Jm|w7cnHD(j@IRz2amf&L6xxg<+6p|=C*I~C z_cx8aCygB&4mfpv*hxCFY;Cs>JS2X*r#3(TkWlOT0X%i@ctj7t3rNR43Y}%oHeGtB z3gQeEbx1F8jW%Ukyk<8XY;aqhR8;VQwinX#{tg^F6ud6N3<^8F@|L9gJLRXnuXaZd zgC8;{30ywk%IMoi;PK2gKFZCS#mfn3@9{06g zzQhYLoWqL7Oxf>)T{?jwBzg{;A(fdr6eLVeWd^7(pA=2q7vh~giT*wR1tNm4j`c&{ z(RBtQizll*B2FzNbi_OAJ0qr7H)}##9aw45SRKGoa#Kf}GKb2b+6mXrNUn;)F{;E( zOTwob|6dNI`2j&J&DW3ma8icZ&O?NC`uEA|dEk+g7IQ`!ih#?ulwRzE(MwBDS>o1f zig|{eJAPC49Yr=@K*Bi~Cs_N<%&K}(dO5|*5ZB|-%VvZWU*EDb+7xkoGd4Vwv0yr! z*u2xppw$;`RI#(s9hBaN(1Sw)k8(UmndEU@nK{?A)8BbHEL;)5C68@Jd5+5!q>*bNc)O9k4H_`sNL4Z-~ZL~4e#eo z=Gb6C3~w#EvA6y7W_osPRsYg=(0hzQ3B>6}Gb*qXeceBDRi4;D+>VGDFzE!33_oP2D?Y-cNV_($T++O)B&SRg6_rUpwyZj0yMhEVls*P9?lT*wtN57ISKe4i*T* z-d~H*Kbe5r6XKR8ScP96l#_^uqcqC2cg7|c>YP$li#7)Ajqi!@16sNtI^VW`x!>S{ zAzG-ZsIJMM%J6Z!R})Lj#pCFL|TCj?BY zJ@rs#V{@QfU84k^Aip{dY515-u^&}F;Nm3;R%&J7=6i#6Y5T3a{W_1i*=ZNNzG~BX zwd*Hrx3l9dvbx$eSF?rv1m%BczamI_XiqKIG9DWi`I|@p3uHK5cyC~K;z6m z53VO5gQffax_@Vg4VhWAc9|SWzWzsd`}E|B%gage)G*~!>AQnQV-S+lVbMs6dvQME7GoS2*VFruIG5I=^uylgM31-rpjR55 zX`PwEK8CZ^=Us08Gm5=zPjC^W7^NEbWPyir_PkAP^V>g3a2Mc4^BUh>)ak0lOT0rm z8fHIlK45PeUP{Pc#}EC~P5hd9Wxde|a6Qk=M{cp*_MLD(DtkMr>jb_W88`$I6hM1# zyf<*XuhcuSvhhgue4GL~<9v7nm!>iNHUa)J69qsLA(oD<{iCxrIY(HbNi@*-1&igp z0=O4m5C;RRtuBlRcMQ(-M_%lS0{!vBJ&+|-tczXlypAz~&kVZ6mqu$>*zK-y{HeQr z_(FMB6Fav7_W8)3VnjTZi3~+EC;lLpv-Yd>v&ImZV_3k-v2kAmI3tuWy?^_e6T(Hw z2uY4l9!*czf*P-|RGpL%7ny>yLBa}Xby>CxV($@pY8>ZjGvVI^SA68@FhzD89UvGg z;Y!o>x4G6+PHnU01<~i}35~W(Oh$(eT##&CF1lxPEVC&=l(Sq&WNB%d$-(8+_Q;VS zt&8VlZ){3>s&tca*jA&ggHll4Yf+Nw8MRSn$h#cl^UmHEo44Bv>)p_ZL7cSjvR-q| zud^?09}8~1Hr|6YqRCGk4a}I&GuzI9#I{JIZT{f45xq5HM>nbv5~Xz_%-o&RT-EAR zy>$qypV8i!Ub(TZ>jtcKVo+W`18>7YK669FdWHAP&DhDQxg%9JPm`aWR0iXCwq*!4tw%N_GYF!H z@BLyb;GM3{B*!gfP@=k;<#3_|i9wVb=dlK@h>gIo+p*<5^FObX)+K2uz8L8~Uw zV_!2xzR*n0O*jxxpKIwXk9bSbZJIGv2mt+dA!baVKj88D8PV6!!>XF{;1iQ9m#vf% zU~~XanEZmA$}LpFjs=>-4P0xo*Rp9h9~Ye4Z@5|Lc&-7xjBuWU>&^|c&H>N@&1{zO z2ZyF}a5OY`%z5^YRN4o$w4b#-5o}EsnF+#lku4A=y^cOU>9{vBuOk!fCyKl*;JIAZ zVDa6nhEbs0HEqVV@}*wue&8-jw_I=J!u4!W+Vr-J_KN6lo7;d(cC%-c_*a%?fr%uC z()Sjd5Vw%%?C)4#rQg<_fLB^px^9hu&|1D4+w-4{0(UMwh@V|9FHOG`MiU&8y6xs5Co7j-)6c$0tthUww~Au+oL4fU{*J*j!tGAOyaq| zBCb~LacNr006^Gh^Qd_FL3b(vECMRMa(6)CFrHTY?r32*0P21(G(OI}@j;)?=!V+* z{t-{z^F#|&OKa8M682UlxSys|7e-CMY?kaz6W8Es*BbL)4?s<%@#(&~02VqiZzRq6 zIdyIMw52$gw6!4Y>>Sn6?#w@`|ISwT(Qi)#ga!T6WAmXJC>Wi$j$^k{S27GyGF@F!`^!Uz z=gsSZkJPWOoHG)JXT7O#xg?aDeDNG{uD?OihKXqB?rW}(qb6thqPt=bc~5|ZYG6hW zVTH9|RMFvmKE1`^z`&;^*oq(tg8$4N7V0?rP#SpcHoItl{vM)tyoHX znY#es)sknc9>VX^@8=0{N_KWk-Ek(>&99kix$r8i4+NpZE&!zt)j^zko77R&CN<&ffS_8=s*QU!8spg zkj?oC&vU`DVx5F1{*^o;0fr0DhAr^Z!u-F1kniz)2OTR1SLF&OF?NzpuT+OJXvV87 z3PQPOo~j;3lg@rew2i`d*JNdhpw7@u&BTcpPX+zjR0`FC3+Hb9^-Fx}nlBxAZRPF~ zA5|YGT2I6OT_Swcf)8iw>sBSzZRaJs99E>5VJCj6syT!4$n{;(5RT4j%!lzQo2|PO zH|f$C(|-f7ZQ00u+D;=Z`K%Jicqa-{F6+5rkcF*eT9HL&V53GFeR27Z z8TAkU0bk6nxu;}|L;J_mIS9#}e4zm=f8@f9kb}*dE)nr1_m7f=|7BMiENAmSX`3Yq zOp9mXhYs6#i%4OB}YZBn92W1FUjup>%bP0|g%o3kjG-OU+EC{ZRu)EB(DVFWMZY%xeYfkjrc#>M zW6JT_Q~}wq_#xWKxjA~dGDh?;Q)yX~UAUHMNdzOez|pa>#N}mOi4j?+V8{K+hCpE) zUoo1PZ;qK54Y-YPgKIH%W<^AGdK;a!0C`mKIgXu9^<9kkPp|%k1d2D?F-r z4sL&x?Xa8r2g7AN0s>n;C2#LH)(9;xq>+&kdp@+wKF4e=i@uFdv4?pCldL%g?(R)1 zFID0AHR8OU7!#->$g_=z5D8$q0VO46Y>GuVKX;j7UZl9sSWHq9^U8|eNLTil zfu!`lfrR$AWx)W5yF>xC`8uNGYj(EL%mcgJ*a#$Q*4iZ8z|+{6GdHOa zyh*NFuEA3nAjK&O)#u`iApu69 zSU)!#sI95_F(vF%C)RE{L(GQ^bRrGVDwu^sO z9-eGrVPQogm|fOXvY?%}_$V7FD(?RP@^O*^qw6{nAq$|>dehM%$5Zto2L}hGWYm=) z+(=3kC4pWlSl`j)X<$5?*&9R2j`}NA=?=DH#}vk5K>-->kmJPR#;$wO+-)l=Wt0{Z z1r3kS%5vW>%&>eR-U?GQO=jjky{oaVgpybFRtf5y@grq1Krbyk(`D$9eOK1b}q#Y(_(5*rMDcZ;n_rIRsH+8l9yGJcRxf_f&m;xu^|CvxKlsn za^;;1$DXYg4ix(g)2&mDKDg#|ppc}X941n!!K^b29?0iM3t`Y<$y>vKq4oT6(K_Zg zlXa4Cf_n-*UW{;%gNbz-5;A)P-{Y%bM6N?(56{=J%=&*L&?S4oC>k>2K(R+b?D4>u z^Nx6~CT

0LMIPm2WzFe@F(J!r(~U03pFO;4{T6yrg}oKWpm2k-q{^cR6diDq0g%=B|A}R zHv^q#iV3)=JWfwi*^2pOXi+`V^Tu{^XHa8wHW#LUI`*mbrv3;u!iJ2D+(Ee+|J(9wbOZs!grr#!i@7{zbyfdhf1kyl6ZX48DNXkX@o?hn&Yt8;V3OoScCT`4 ztu%UjyB2!XD%E6GU?&pnc+x<^`HR>>(AJML>QL|H40>5v+ecfr0da#l-qzyt(EZ#+ z#T`pt+edl|PtxMAq+l$^;A-daddHc&k=!5L(j~t(bUuwRmj|@27WDuJq=73 zrR3+AIfJeszA-$YBc-R8p`)kI1(#}Y@LOA$F|+J^9-lv}qK9nkm|5gyfMPn|pIJz0 zrHIYQ)RE3oS7?$}S257O6t88izKpuZ1f}wAheZjHJn;t+R1nBm(ZmTHUv!F?lUxDw zp`9*0qpeqe!+F=$*Ykf@mO>>qGc}V=x~w5?QI_I9+x)HdfMnr4h?C*C)f_0vAme^C zmH?fq&m_uvBW!Yj3q#3?-nco6UZO>QLF^?v1*bz!Rg7(wo*K7xeuA@A1mB&O#*n~H zh~l!Cl}Vy87*d?JADfY(KbQZ->q3*9-rgYuwD)M9#I*Ir9(Ho-3-cwD;=+s&3s06V zxMuzxsrw^COc%cCRdDA7GJ)TJ>XiB1u+7LPobb127bM?8)KnIe`+@X&YO)l zbNnN+R6JvxzqvlOKyMhO1hsl@rYspgb3%BRcr&0CuCnTH78dEGhr2FZ zhpCRfF=ngqW<$7XSVdLtPPw}1meFnQcR=(qrljgndpGMNe?G+5v zg;xF0iu?E;X;oj3ODeVJNL7wL^+opc$vm07#zw8fBh(174MN{ezYZ5TVx(4o_@fo} zw!1y^E7o04gQ?6wzgGV5bFtn@ypWiQLvCSw3{*)q07VN&gFTx zw=?wFPy&4#Ss+?)Hck|(w6Spur_5L1b_MA<|kX@H#(ZDEP6*jnZ)dG)ld3Hs75}99cz49UYx0O9f(3NkM>Mzp$dRF2hpYnW8@av|~=~r?oDGP}a(lPqPI>-tr|( z{zp?%RC$Rr?uSJM zwR(PBkaxXdC3*%{-%e~_z(7|Xoz7-xO>Ddtc@PS5qCfoS9ij)cWJMh?&3C9MJH~6! z!9-6~G-nl7Uz>QX9^VcDfGQ}WFH;*;Ut7!Lw!79G{5U=g^_K3qt)Z=bxSg_xn~`O5 zx>UcW_i#FVVbSgO;G&A?MJ5?b7zITckzHsh2;;2Tg0h|5r94>wjPaNlGbnn_i=Cr~)Nx7epG z(a8lSSDAvbkYWHFIRy`+R<+oUq?o(&tz;XX%Wx9&Og9hIs>m#X`l<;7KbzRH37s*2 z3oi>#W;LzoldSIT@hZJn7uB-0@ltPlH~lAK(uzc^zWr{Ai>dkA-+sr&$E!8w_4!j$ zPA56rN?KY>QG$;RQwGuf(?L=OeOfj>v8#J2DY$WTgmay_#x4cBC8@bsG^munkYfW9 z*pgL9c){-`p*IGE|2Ai&ThmU=C_(0@Nb$F9Ihs!%QFi*(Al-T=BXRc`dW@p8J~axx zk1oNbC#wu6EFPzTyc1f`N>l!xt*`m9J+TJz2MQZO# zO#VYqhePZ7z{vZCM}skslI z^_6F>wW%u_PdP7rQ9Xs>9^JPqRxha@dZ?{`Lo$fkKQ84qwd*WeGR55QRve+Dw*+kz zE3EX4ICp)gp>##PxXyIN{emR2kV{`nV#PEe* zAT^FPjd5##B|)lICLzBw-%pyFzsjb})>hz{q<9Ax7uR8C`wF6-f)vSsA4=F>&97f_ zQ;EEJV=i38NhJkK2Hj^}ch~%Uv@+^wFbfNfiyNqXsEBb8)3~yOL6L*9F~n&~@*i5t z=xE@6VPFir7sWa5M1PjjP*FKSQXhiu9vkZ@(NR^+v{GIN2v1wkxp&u&2YJA#rtnex zbXw>TdgCQy1VZ-nmCty$NZhR`(pBrGTPhrE|NP_@{)GeDHB&<1qw5`cv1fL04$p=g zGZRX9G`JOIp6tU+53$bAve%5g?g{TvF^>i>-ky`QG9lAERgT0WJEF+^gS7XOg6JBWA+etcw<%lRi$D$M*DHsTScY_FMXlyUquId@+GhB6#Fc z&Je_p1Z>~;##Um>=xK%$s9AVYEb`A-Nrj2cvKh;(CyYZkTMDa{r~0=W_v(1sNCiWQ zFw9+Rl2x|_9?Z?)E#<4-v0!U!u0!_gh)9!%Dk>?X#C_IuOv@)JeBihtWVFRF;o zh}G7kWTP>CdZnOz8D(>v?bQ}gyPVSe;9uSFRVm<`gH7dTdZqy}pb)NTvSVHxpLIfd ziB;;IxBZ#hJKY#YPEO9#Cbuj0#e4?lVOy(u`x$As-IUQt=C2Nm3HD7*e1z?>g6l%+ z(g_W>`1GkXsDe439~I+Q&UvKW7t`!Q0W6va@VU4+!Od(3_~$Z#?jGT9Gt@H(QJHyu|2XwgbdbfoRFKUF7<#Q*od0GMC!4`>ajW>DY6?CYQ9(cSVU zZ6BQ`wSJ)_rNk3>eI7alMepaUmGx`oOw{>!%A)E_Gh zzeBHq$)JNn2~K<{MD}C2lcZPQzG2fR`WK%usY{Hq%d2-9?-$I&f&+9izRdZ0Hat7i zq_eA!1@&Pc46`vFJ!Xt~i)cYXWXcdUK3Ay*>bW*`SmsrSFLb%|`>YqLZm*^@BZyLm zmTSdP|M3e{pHXVed_O$wBuE8wyJllL-Pl9Z-#Z-FrBAF_%5Xd7VqVZb%2}j}~ zf`el?(Ohcb)wQM3D?HY)0&=>D+Zt+W2g%W6p9+GcptquMmk92Vb^^xyvg_S%EM1}s zYLpY|fls&mXR+g{p1{{t{E4e$tb-X87JY(E49}k%HsotSymACxKnX*X(Ym8de%h(~ zHbd%o7`@+z&SsB0qRud7b@fdE>;{iWio|5cQx&lSb%QUaTg`~yS-i;WxP=~VPD@J{ ztzV01iYYGk!-Owu6A0*Bl0Qn+$A0*O%POqnt1>h|XDbE^3HP3}Xt!qIOQbLf6VCB+ zqr?^=zJdn>07XSlfJvnn|0#pdWWT+;X>)(J)zZWEhYN>dq}FRMiHc^h-wLzN%+}8` z_((#X(LQAoK9<5cZ8t1`%w@}ONe!mdG}o?N9e7_NSn^lutd=&|M1)0&;XXhke!_{u zz~4Q{y~{7R=Zn{BQ9!})Xq`2mc#m4mwa z*Mmh`JR6BdX6H&C%)X_u?Od$LZ^+aObng_TI&*lrUq(ucDTe-ZF0tpLC_6HsX~is| zSZpzP%;pQhQcIayqYNW{$=IH=NhIBIO3>u9|0bl?_JwoEq;pDKCtHkNk?ZgW)I2t3 zmLvQy<$Ck%O9h^&7ZkFr61vtxmq)znX7+coBTXd;D;kyo;!PH_ zXl{-V@XYwgz1xICO!GEtZQUDN7ipy@W|w+674cVUX^2&)SSu>7ii-*!DMDkZ{SXGBVD^|<5n^5Gr~no%N5Z>rU_5Urb;nQ6QgPn=*HR^Ip6&aLJt>nCc?}|($L1eYoHg!Q&t4KYRX#k^7hNMfy#3I(L>WtZl zNa`BqC9;wdUNV)Seoj;S<@k7^re7`M@g5QT5hw1`fZ+C76}V z8l=JIz$M77eN58%an#I>Vb0y-zGZ}D_oD-zx1Xq{pUi8DrO4laD*^7BBZT7*Z-v>I z)*lNMg%y2CZi|Ft<9Ih;a1KgyH$@(IRh1TgH9L5rcIaLBkL_NKv1$+os39gKeYBxf zx0;Tbaifc|CogZq58kCt5z?=Q@Zpj+Lr9c`-X0Ph#+aLj+ni5!b;0f-v%ht3Q><-F zhQ{>YIB3mMV+}Y!;f#8vM&x6W3FnVlt{c>@o3DZpJbr@{ns(*mi$pbq57>IqcOB?S z!21uP|7yO*d!3*vMc1XQ<9J1*6g{tA{aNU!>oV%y;R)aAia!~v(Igg=Z?c4KR-`Mx z-&q$xsxBShd;a#O-fBMoTCbN9IXowDL!ZFj?{ztVFDN4d!4K<(NURK~L6IzMrktr6 zCUQ?C8#E;>|AoZDGOS^TaFo6v0^LNcK%^`)l@vf;YEP=5>$yV!Ei4YFBoGEh&VvgZ z&`O2wcyrR29gDfgnM+w{U?)Hxa6(^FNkWeZ&jDD9SNdusCUq2|6zC=?Irn+35y>tt zL8<4TgJ~1l^?Ec>$d8bwS-FooS*=Wb(YLG*`BE|bC z3!;4Edfak7Xn++0YYN}-!|VJ=?H%zpwtE*cO?ipk0fyU=!UfH`D!$fZ1Fev@)t!m;lr_DxaqhZfvHt zQiM!wPCb6?CiU(L%c%{-6q4u*SI^z_ZdntvwMT?U)q={Dx@Ykvh&$h{x^*1x-j}0f z6*x{ZW!d14=fTqH;XejB(B>h$6TVid)t&-?7jWSAHxXj&wON*PFvzHB-Pe(C+GPvn z-MNCDXb?bZrRtrpo7&RT@I{bqCa4#tyNP~^Q+ywdB*|H~EhIyZWEUAayL`5eRC`;R zre33}+);)RXE@un6q5s0AXTM+iH0jSNTK>NvxCiino+%6Hl!=$G|)`FO1r4zJI_zt z-nsTfQkv*rzb@{WX4K%Pf+|G7;DR=Z!rhsiFD|R%76R{zvkf;)>rd0nX^2h3`4ipo zYn?uc!@f#%xXiP6>f%sjmou^9k&-kNR6SYt@Q;CYNMwdfhD?2&TM8a*^z!YT*nans zdwW|`sqK*L_mJQr%i(v0@7Am3CH0IHhwg+= zT5raNqiC{>@`-0B2f{_(D}=#g6>_i0>-Dv{UI?@j*d=Z70R`k(3}YSM>wZ1KD~Jh6 zQP{+HKSV(Aij^IiS>M5 z-E{ea7+@^lgi=%~k=5&=NlE;JqpHVY)5WYYA4nl}@v_Y?VR1=@AY=;0{xn`qiKWt& z^oe)r0fRd^Ff2PJDrNG%mMx!*bGqQ~^TD)&SSl5h8$MvavwDs~lYQ3f#c7m=#W^2s zRND7J;EB;cBtVBQWed?B!FJX#)1Rbae%znZ$#GEjEH`XmCu<0olXtQ`XE2{br%7`Xajwv zhez{_yqlpc3Rv4|jEM=w^6ym+Uj+3S6K{%(dyG~fa!M<4{V~J+M4~q_-=abgQ;?Ca zW`3Dxd^BHw%Bq(k3qTAN{7Np0pdU$y=I;-Kp*us(B~T{i*4ZgMd1#1fNjXCyeGI)l zoyns{hxct-+A)5nLN5VN7vXPSBQ6H5kxu25Ks@d$!*`bi)@P zN7;fIWd3$}Jp`y(gc5 z@i$RkXYOE|9T#|oL_@{5^@*?4pC@?p>&DmJRCrnSq7TE$a?_skmIYUEttyors-^OW zhZ>1fh)i1~k%qWhxGLG=L|`{1pFe;g*)k2yg*Z_?EFjJr9exd30@pN(ZQsFoPXeo_ z!e%d&b|{5FsfT=qvztxDxiZV#TY6H7#@V8PA>7hr#+QLDMZl+ly<<{T8vR~mSU;23 z;r{**qV*Puc6OJ4=+V3~xw|!bo!U`R>S`A*f|Xt(;)pZ0DPv~<(e8ZWLJLkc&}?g582Lzp97lGj zU*MpqET)z%h9BUnsVgQ};3JX2(~+PESkpWI%4fqQll9$vXn{#$lO}kxeLG#M>xZbsL8u~*=RtGR|?_pWDLx7`6S{_OI2y4dl2}T#F z&PG-(FIV_{C3BEm^!(?=k81Q+?;XE72q;Z^0hMxRwMG2pg|y$<=lfGAM^bel{HG{h zQg~@8L1B4@=a8TAVP47Uo`MWHTfMts!XSzkIz+!7-=JCv0`bGcIpix0Qp5mLHY|AM zi)5wr-O`k73|txnPTJkX+~{bQ<{twyC1trW9oTk2>bw|&pI+O6T=K%rwwpyHF2LMr zE+p6-Q4N?BO$FX(%LC+%)*<@Wj8dC|J}y228wd?m2~c|<=LhfJ-#eFI7z1~V+zB*e zkCeS84&$)3jg{O>JJyo_mEn9m#eI9MWX(N!?G$e;meNBt-R6FK^L-w1-p1M8p!Ar2 zKEiLQ`9KO;#$K4ibr!n^HxB~mMeZoQKo4LYT{Tk}SK-h`0o5`7n zcK&fEfoA>JbPaumGx@35bi^(SH^KL2LC7!eb%QQx*nt(85n{d#;sr` zL#+>bpLUpa+x`%kqOIsvv-RY!8Ln-^-&%)W1y+ia&XQh4VKVX3#3FX=KE{Km2YVDm zvZp>zx$Zo6o^*NUm_2+U4eTK|;otBDk&q$sE9%jadi^TRU$S1VpKx1<<)+K_mouSawb}<%)A^qfKpb)8q_Lc0IPm3g)#mHMI?BMv@y0Zo&nO?4Z z0H$2E`!h(5p=L~dv}^25X*5TRnOgZpfw9I~fpZSGKr!bVbx#~8dMX@(AWfmrlpnzt zYR{pi>2evUk}own&66YEH0WC&fl%4~bbqGJ&5@G3t}~IjF zP7QT~ysgMFVJhTv9V>ebD^0j@JRIZP=vwTPzzVaywttJ7H84|E_3Yg&u*I|GirQxe zT;UHzOBxy8v50luZ(k7z@g)GWk~`WOdNdQ3`lrdM2Z!5fBjF~q`b|IX^lx0~OWVcD z-!J%I=R*vLz69=Hb|gxC>@{rc>_J?EDVP8qo1g)%qD@}evtG~uE{&aGvI&T87)I5P z0sIai-|BOJSxnL!(iw6Qju7NK>s6QI-G0ggk{d>bEzBv-AM`n420+*}SE=c~xIBeY z!$S@N)b1WZz-BgC9-@fR52<7iP;v(ziazmI@H9RR@8$QOiSNf6?`P`5R%ZOFmz$tO;6C>G)!J@)(|%UjIMSr^NI*u} zpzuv~Gvp_hM^CMiXl2U*#VcA4$J?(SEEQLXF5-X65Cr@__mQ~ znqR6&=H4+kHaJS{N|yXu+yJgYuJ_6NZkcU0GFO-bjx$ck@rLBlVbrz|S?FVy4MNt- zGH(>30IPE-U2i}>$^9I`~^{D+ubKMwD2@^1y%I=GumeuEtMjD3qPF{LJ0mSuQ z`H+>TPs+D@`KP6o3|~eEXG5PA7pkGFUQ+F?%Ne%9#C+?Su&D`6L{tg`a86W?0jHYD z=H0{9GNNGuJLEr9Dj3aZwM>lCy?;KFD^ICTv+G^# zak5MJ2531%HdCaopQ`oek0$kc00WEEE?o8XBiifXP&e#Q!e%+%0~R>)MJH69(?2nl`TCAj+|De6m#k^GN05eNT#3^zGd=$iQ37kP=I>dFjp)IHjwa`$=({i3-Kj` zslg#7#kCU(YNWE}(aW`tLqC0%t&XL=OpBtiMQ}@GOs-~kjC6(73g8H-44}18eZaK! z-7FXiL;$-5yQ147%dmlIua4|KDL&om&OKSK8Jk*MJ3`ye zdO4?xt$$H7W}gWx=~Ne1z4)ldA=1c*gP2)5rp(%_%*0)6jnw~hX#G0I1==Y2jH1FE zb!VXz5&khi!9N8c`t_TIr7_akfG}t;p1L>f<8FZ8mI;+tkQywY(@Ks)ez#51ERC37W)lSQ%d0eM?clhVS4??IpSW`~uaKL=Jo)tqp3ig3wu#{fHmV!QG__k4 zEA9-W`P~g_jH#t`4n`PD(}Rb`Td0^H%UwUT_DB(pbr8(83B=(%$s4XjE8tEqbVx2D z1Cawb`kBc}6lZP^!QRhMXIro)Ke;$e&sJS~+*THCM&t3=b9_~`}6A=;J1oG;al5mZbGT~~Iz zzk;1bT_tn=5!6_l)j=CK;y&(4pBJ*aUTXH~etQ}3oHRGiH=IbH4|hzsn%SkrBST%% z?iell_L_K@J#RZ=-Mn7?{DUIEJFRwp`CrzBoEzY` zdvf?^H3X*|qo3rS<>qWUgFC63pE?=(PT80gKxSWrh&>Pb!Pxn+dBzZZD{qC;QCUOYCc#%;2X%Kpj zs*=_T8ta`K7w^IG>67+AcFx1hW*M=1x)(p{_UK(i$<2=tR#CxEwmSH6oTDLY6bk6& z{kvr>>e*F;IT-W$^HpEkzYkG+xA_UPGO91g{hq|C*H7xj7(nu5|GB;06N)B;+sH|_ z0%dXz5g2K8DPFT)^?$AG=&vO|gQQN^$d6|a4IrD6`~>t~(h*1|l7Fur!eY7BW2c+b z(`mMGHhE~ecc#QdKu$zH$6mOhN7yG-6M%%-?|X_uu3bLRpT!vE-5%J=q+UHqyf&_% z%Tp^f@_vrhP=lvc;}`A4Vm>ZX>$VA1pU#k#Z?DjWOtt9=*9iF8oo5sYm3xGK3^8Dn zPoe)CtIG6s_iH&DmWuxtA}%d%i&}+0^;c5PJC~WEFc7STIewyNvdWAeBz6)!jD$4F zPzatiDr(EHT~LauNNrK<&OF_oWYzl`%6YEfP?Ht-OPc!!w8GR3+T8BOpeKf*N!s`# zh6|yf)3Qp8O=AU{6^w?f%Iu;bpxJ+p@Qc0_)9z|0iA(c19(6TFFX8<*RHf70?lfEg zIUb=0pU_W^T1x+#?#ZA_9hPqHR(mEv;J^K2_tOEY6*+o%g)Q0WgzLTQgdt@A?A!Ae ze%3u>!%6H_@%hyHdni*^i9F$?cY>2fRf;LMHi)D|zE$ZDeY!UKyIhrw9TMon7Xc0n z$jMwa`e#L*re@bxla)xEKNBjI%M~FC1y!E8Ua7vN^VDuYgKf1z1~jo`S46kp?a2Hz z^yXBvygWRu9p*&I>(z^m7dS^=cac$*`-ZK2I8=@FN3Q38`vYap@MKYhq|*xXJb}>< znR8-3)O+7 z8m*_2nqh;cY@5{%Nw?3!$*>-U`(0CIc~3MJ`rdhs^SYk`+FZLil50e_i^9y!dC%D0 zxO=S($j?`5tD}Vn_NtW&X!B|)Rsmo@1m9^ej||52{xHezhofJXmLaPdm$a!b<}*n& z3IbV`?LdV+_;E*`F_0ev&Ka-C*d)ixAOWbA$T0utl)vL3_1zZf`TU z0Fp%~PDB&Pi_NB%Fpm1w6SE0>+DC3Isp$@c?!40vaNg>nc+`JC@fo$$ex{GoXi%RllId< z>??*4RIfL6Y9ODtm@yt6HD-U5U+@DGM>64M!3IDVO+tuD6pq5JC-cwHbwKQ{U;}Vh z))T>8lr88Ins-)}G=T8&DpJfdknM36Iya#x!LJ@1wYGKOl$&!EO2iTp-Q##D^*L6S zk4-f-B?T>BqhlHXNPGwio4{J5lJwfUhd14$|GI@#T?>sJL8btNP{Nq2@msC1o#v(A{^dRX_5~D^d+3J4QkZ|e%%U>R}JMT;4F5lolk(0l7g`QV| z8eXgY?w)3%F@i{=^bEkcBMkwn>a!^{K2i-}K#w4tfM?&(y$KLO@BU> z=}JPz0GJ?B<(pS%jZ0j~wYJ5i6S?g*y-aGA*V$_LE$F#zzXO9 z9?b0+N=Hv8)0qy_)@=22is-N4nozG{tj!(draT+GFXV#guP(h(E%OGq%}8UJ6|jCb z#v&AacnS?zgdudpV3k086cbDcQV5Tm9HTTx0rJm{Py)#c;Lu9R1_cn=@*>TXF(hY+ z+cQz72Q=?!7u`Eb+Gdqw)qc#O_by|VTSd|R8O5<0&}!7f(7RzFpeuDs7?)3BaSeBB zG>MV&c`}T9swy8S;fX`L8>SM0-lTuWMBL!lD(*nY79PdiBG}g_Tf9yIQCQ1+$B#7Q zKVof>Y&fEL#WXQnV`5$rdII#f^dB%bP=K6#vOQy5z-&)g>6H`__n;afOpnJA&L^}E zz_9Kh*kCm}!6%&b+3Yo(;vtIbf`LoYtQO9_G4p6c90zA*H|H0WsP|yBdsN7)@uL*3 zY;qJWCya1#OJ;0z+=|maQIVui1UJuL)`+AK4kt>1avWCzpNIP4*Y_gy7kUGEmrh`Arh5ogaaYb~>q~BDF8+ouuUp6u@#Lp2PEzY5p#mmgqRCjctEwWV zE>nSY$!A&>nvfjf_ecD8WQy7nk}@8khc}h}@tAV=mi68<8yEdY#0?<#c7j1X2cV+Y zeIlK^+Ug--#92L*Vk~Ux&xZ}o9s38oHh!I-fT2`AlW%Zs(`vC~3U^l+pp2^YS$|U()_w=9pWsdo!aR)_v=l~!g->| z1t_iqALO#{L<^a1i=1d1sH>x5JD**`tUI-QDpZt@iHytaelc^bK>KT9ruU%+T?l5! z+-I5nIXDjT=F@w~#=wup@je(UBqlRp5M7;WsDp{;+IHGKxV~|F;Cpl96S0S2u{JNW zxgZ?g7{wu1kuLA9YR~```10z~-c1?lU`Uv3_OUUs_jTz&{P^f4M>pVO+vR!3O_9b} za@Fcy93nU+kkl$(`1H$}I#Hnx?UHlk9DUeP2$bL~Ss0nJkaCc{ly9|G!;0J2ON7VX z9-}FP_Mg&ODEoT69#QcJ0j%;FCWTqReV9d+=gYNbYH&cK?46GO{%2BgC8`eg4aXc) zzT-yLUEvCZ6RAW75;?VnHg#Q=5Z%CE)l-$Vu=_aTZQd=0z(61h!}= zwOIp{>A2j19KG^PmvVtytdCch^}U|h-XG0GqNiL>9pAGmYC?SW=bkEjNUL$CUY^Ol z#CY$!s=KVnrb-UlSreY?!2NE(fRC8r8a(|LLe_JglTEz>6j^jJ^Cb{~yKVgEuR%;& zP2Yl#n?DZ<>&HjJ#-J+~7qavUb#*cK?X|gxOPRYER`%QX-FK~r3gUU_V@wT=F$&3X zCO3zH``DPXG5buOJ#v)!qDvTGtUgU`2fnQ@9dz7*JqiA+t#GprU>UIp_>4nEotFD| zn|84drm@GN$A?vilIk>dY28PrBsRPnHuX0WjqDh&gPdoF7mw_@-E`w0dY6~4&W)K{ z$k{w(FM{vu5I~5+@HOG`(Df0`Xvl#P=!xs-$B0oAy82;&x83I=jKd-EcftYQc>xXz zaVv^+DG!mib{{Y(f%gd;oL0HT53$r>Ll;4Rbeu}U zw6{RaX_n`k@VQ<$s9FZLR(5SAUERcpe$xF_8Phb*#VC|9V$h4n{T;mYYGiR#wJ7r^ zA~*7Hm)g&OQBBL5gvx#9`0g{jxXI2Z6w~SNE5l_7fWD9m;i+$r=b(p^C8zBJwkAv= z%?c}l1S0Xpj%x)jfE6)ewz~Lv$AE4jh$3ps^pBx4sGS_?u{~Pg2JGX6*jo`T$jba}%r4SAYQA+Zm{?}n)p|5X8Eg4>i z_GO(1xlXp8t-~PE#8cgSxq1!dHW!(}2QT;hy+2 zDyG=jTg1=X3Cng(QHI*SL`UD2EBKn0RedxPy-~5nD-@r{X~-LMXh`MO&?;>kEL+U) z0I$%(l(UHJHP2GRL|zvh900+f(*H(zc)`TBI0K1MeB`1Mp()Z~{IKcO{KsX(4{kPw zBegx6WALRW<14V9%GdXom6d~RGu6ez`4TYN&ya_8NyD))A499-THYMS9p9fg%}C6w z^da>8dR*kD@lEdpWTR#Jff^&Yj*S(&r((3eKG!y9>nzY=W}TcG^Hr22TW#Cefd`$+ zNRKBMn|lnYlvgeV3Sab2_`8sBs8W&(?WWR27v~rqYvN992A&cNoD)gFbLUNeRLFX~ zfv}Y86Xyp<==IV(fnq0w{>V#ZLK2+0E<%`VJm@DQV6t@=mcX(>-L&zrXRnjYp^7&$ z_&q&Nh&cfi+++ND*z!>zgn+g{)`NCGmYC5Un$ke15sGNyGY?!eEDU6WjghOJ{2!dx z7oWQg!ItWi$!j6jZbV;xGc2_H&*7tC-*fAw;18^t*9~1f%A15Z)pX|tRofdn+qreP z+kM7Q$DKUdI_InxHP`EzmXl3PwD=Fi;__1+qmfvVMxJ23cL1yWF-puQY@-hw@E zzYhdIX6cI@xWfs-kV41!%JxugVP7Bt;ew-mc{M|#^J;qk^NauM`Xmg@hJi3@?h^wf zAN}78{^#!u4v~NX&WC^}!vCw_e}3FzBHuz^Xn-oOnf><$f}?vNo(UbsDXyhYJJ^5; zq`#-qlL7q84eB71xh~IaECAXRig}3Zu$%jX&`h5>k-RQgWX~+OBmAD|%3D)k2&T84 zr2@8?!o0d#!|L(sQ3mSCcPMl6S>>6kSCC6M=O|`$_>H96wUhCeu^@-={M;R8FqCw|yy`>oKtyJP@$xGk-VYCizHpUTCHjVA3e>H^?K zv+TQKF^1`3(QJ>~n!(EDRHO~umfA&&U$V*u`d}=9xz5{LoV4$KHRj;OAH$Q!@!?6` z_XVw*!?Mav$D+v4-f#-LmxoJn?6+2!O7KBz6jTIX4%h(#Vu0mP>HC_)HzPu~O(p^s zmBojV(hw9_F#(_nal%p878LYfx6g1F5y+Piy^p+a1wt0Ieo}QjDi8~4rBA$ z@4%&eDbf{ES{Z0faA!aC^O+pt&WDp=&ynV;pwpO)&xi#%op5JqMSWY+_c z*;7W0Bb71!mJ*E8y)>9%`iUVRVCY0n_TnDX;pWyA#QTAYaEcI^>OJX3kV@$gw$Ro3*Hn3!NmyMgfllw3J3;|80i z!gC}-Q%01Ty}!i=@NlM8@@j{`9P-~VMbE2jh$99t3(3=r^akX0jHMgd)ZRWG$RNUu zTYg8tDAM>Vo&2G!mzmk9V^S2C4e^m_na}te8|H6qug?M#) zl(M!5m9yC?zpA@OQzG>fqcjk+!Ms7o^w47=Ma5rS<2GmAnFvh{MU!0Lc&&s+RTD`H zAc=;o2m-SXTqUJvL@{9~6oYdlrQr|i4%8&2FV{RspZHa|0uy4+^d>2;Cxw|jW0Ymc z3!^TscLkN+!#_`;El7rRO!_>PW-SYj4e@~|66GLZ{-0NaCVjk6~Xq8apy6% zoBtk(gkZd|E)Xoq_+H5VXT$$QOg3%E^%L_nrXh#2o7|2sbaAGJi{L9PpEoA%xJ|NA36{S$0O>>fn_ zk7ED3F@r{OteQp3XtICp+y8h(LafpXoLl$x0a~TZV;Y4_E1$^V=tq(NUB!RR8~@Qj z4?d1xYDDV~o&y@?)Wg}M$Oy9r#s9zBR>e`AM*Mph0pVoupeyIJqZ*PML!6DD2_zt4QR?2wt!Ix?dB_&+An|Iy=Ak^j7GAdKhr zzmKNrf9mHM9MHf0*BkW1mgym?q!NPea{KqeX8uq8M4+9T|1qckfA0o~3NjY3v!OOS z{=KKTWXP*`eqL&VY+u#>y@d-TG%6T&d`Hug!5e<-6((Nm6$Oo&#gIDGF8cphi5qFL z?eB}Tvpc2=8QUCbl@a(TZbLDw|K0^#*Z?^=qylw@kISX-8Wn1~FT-)L=fm5QEX8&e z|7V#eD&L(g&bp_9op+HrBr&6;FKUf0#g=!sSz}0I`11@-+sL3F*+YIeo#)3aHNMAr z1tGe1nogIROg4|buw}an8$=%{0yQfZ-OHo(n!&$1H|=p2pHkA#Eu_Yys(ITMx<%ga z4<)x64k=IBH&WjkRq(y+JHPUO6y|DE>iluPw0SDXq|)P{JOxpzhBuwH`j&NEaO##dsv2?8ef8vheECf)H;EC8X-cSDN1DUHg8All(fIO8JSG-qL(|YM<1}d-B^AQCC4e82GUrHR~p3SKH(;sS28D}?^ ztZO%W3y+G|_M=+PIs34+xrF0=tW*kWpWXWfZf2keqb-%&GFhHRwYs8W4o-*fVA)FD zv8&I#s371GJ(HusY|62!>Uup-67fctP3m~u#PR&)I%OID5L$c3T_CIO86=Qc30VPE zU$0kcIj)VTajrvHm@h=h>viumlm4DP#yq_%gct>ii?oIRoI$k!X+(5Us%?_ z&1CKf;hCTNqpG*?JMOpIgJ?9LT@X*G{?Q zOyS`bbn4k<3Au&0U-U&pz5lfwt^oC|wj$%uw0~q|sc+5X$8k%td-P0s_%?C3)uWF= zDpX2=5Ge}*5Sf)3tL4RXd@1^7GZKI8TxGmDV=9!5MfQt`-EBZytI<3zgV(lewbe0% zh|{z(L)6D_wcDrrshEoW?@)0u4aBWR9zCYFG9%XXF;mbr`&fGigYmlJ2TP2*y9}A( zq}`W52g<^|GS!msDW=(57Y&9anR(6nc#rG--|6C6QwLSH(|f1Oj>H@{f5OD@f{h5G zm3Q5ARwZ=w$$VbobZQOi%o)vEW^lc&4!`j!c@r&T0Hx8|m3!_H$ z2TaO(4Z!UKnsMa8XeawfXL8x~da4ELdbKN=vpv6}?9Fc;NJ`bw=g!Q>#@{ABb-KCh zRoHcm*%i>Mkij#t4g@h%juH%hKks_3u$f5rh>YXmZEjh$X&(zTK@yR89VD`KPM}ph z`zrE?fzaW8JMq(@bCKdag0*XnSkrhf zlcva1o%bmfEGRI&YH^!ob?aoL8g73(_^tl=uDP2vFZiI_CKA5*7UE-pX)|Ab!u+1a zWB+68_v;{U7o$v9Pb%T!K+YN(L5}Flj3{RS^gh1cP=V`FQA!x{*pyF)HUPZ0k=P z_s8w;*RHwmf7f^oWg3D8qg;76J=-Uor^DLvWeFgP_Pnif3B@-@_)e~8zj-xrDRM{J z2)gn0J;Mn4e}HJeAohBd?DI#Ri$10eUWGriQL?l_&^K#{3gUn29A0mE%Qrh4#{sr2 z+Y6*3#JapU+)Rf0eah#OGMf%#XB^)q8|)3~46&xtx!cWjgQsE!r!GOX=^_r02VB;a zuu20l*8DKBju8=@PAp-$lks;M}8*h3<0o(_%_ZC*ah3m@$GN;VJc$y`K#9>ey zKy^!@P6Ci z-bS0C&1F`3tz(RJ4Pl+Z8p%Rit#t+;%D4W|cnID!cgH$oeql>*gXYi*t(Q zV@aq2sA+Lh`i9Y~3u=SI%iS`x4>D37hU2Jg7OS(g;nc1pSv6~iQ;BERvILu#VZ_*_ z>ZF(XTuws+fqH**Ibt}od%y5|Rw^TH%tX;QiwLAhBHl@HL65srju;wJCCU$w-BuJvlhv~MAm{Bw&ZcSO+=lm> zIp|`W>gOL>#brNi(7K@aOUr7PmwZew$(i4~*C7&{>p1+N44qiOBj!H7NhUX{*F-9N zKODHpT8Eh`;1(02X6`)sWVZ3OmVdqD4I5KQvdKu^Q770fk= zMTp6Dlth#1gl;nX)piIt?VgO4FZ}gy8K*I>Vnbw{u!oDQtavEEz)4VbCsz>o=>`yK ze+cxdvkVPGFl}e7ZqdFvZaxpd+-PXEwa&6tQWJ^Oko`TiUpM4!=IC#Peqed>@)(aj zL^vr))e1LBtB>gxjr0YcI*MOrftcSxv$1(~h4$Dt4-uV|&$na6W^vnonkJl>Bgq_N zMuf8Kuk=3hOT-)1^OG!0*blqSII56J5g?n>$60o+aWJxR`C9-+i9#CXxao?Q$Nf3` za_G#IK+o2MDd&QS76aWWIdub8>1XUtJ~|DM+c{o-8}-KvfgUh;fTZ5 z@)gVlpZeSV?Qu+z7l~?S9Q%blL5^tQ0?t^K%GHm9}hTG;g~ zZ-Y?r8Gb$1=~6X-hT{Ut1zCiR^CxJ(${ZJq4(DPSJ)nG5+7G3Bn9LHa3gdUwKC|72 zUKwD=f++p`9vq6m6L7AgBRNPlziGMsn1(o!i`X0RWTq~Lf02MG0$f}{I%+6p!XNC# z3^o;G?Q~+7Urs|l`gKF#mFa;56i3{0f|vvqSehe+d}^^-Yx#N){xG#-wyaobf$@52 zvWpGC4oC{(k&9DFU4ObITh50HhrI1{KNR)`%|3JJzLP)5vwlXD=RFlJ#ku_#2DTX3 zoNyedAjlxJ9fxSCYowD0O<#@*zg*bvJ?b1l=wXBr;XPtl9c&@4n_jALZ-pJ8#f*|* z_FA^LixAqi5V9`Yb(6I&G!p1UNdTb|{I{MkC(0#y&z&-#s}b1=)kt#G%OT4qk9!Py z8<3*7FFz0W?-uC@{C3w(Z`E-=_S{JdtWZy^5otau1-5iKEkBIpY#%>C29u;aQlFQv z%`Rupcv)Hv`|`|FbrAN2_dUc|A=NDH@QayQ$gIv_3&d_?zVmK{u?Yj=FT2mR z1x1g$RBZmzcZM&FvzuC%_|-!{k#Y1OY&8?)-oOcHi+yFGOOJ}@1syOOd`7E8tj%)$ z$nnTt`h=LfDuZ53(?TY^1)iZQA{sku2`%w!rwzL+kY%mW}$d4EOme0(^M z&}Jy3OQ61Ps~6hP;RKjSv#!q0eqw@Qglwb9NvS;RCaE9x18T{mL+WX?Ii7vy+vOG2 zc$lqAi9IUO+jKg=kF|@~^?#1?-(ci;+^;vU%d-lXAWhwla%q=~;138ooqV`nLJn4Fg zoUsL9g22&&=kcd$l>Ob5Bs(bghXvi7-aZg6AyJgG`N_!55ob_8&78D^H$>$DTD0|c zVbvsaf|m+vkN6cv((g0LBnq)wP1jStbdFu3(CuGPG32l*wNHmlM7cyv(zxCb&DF&v zE$;HKYD{XJn02_qT7!f!&f?;WCp85_Q197EeFxob)D)F^7=;^-bx=4RF{} zv+cYM_PCx{Wd0_{h2IHq3-^Y#{=lbMw?pYjnL8woVk?jDagfzK&W|Ui498`00!;wu zT=+!D%=7WbH|xCT0j?=FN@6bFO{ew@njsV}6tDzuzZ_&C%T9TQ@?Tm2DOxf(sfM}T zH?yb1F0MU3kx(!tL#>l`L*ybIopibYVkBo2e~3gM z)|xT<1-&Vj*!Rrp$A^OXt9D$!u4+>)ZOA%4Q z*&bcx(#}Eb8%6Rd1gbBG1@{B72lQ9ZR7RwQ{&lQJ8r^Nm60R}KQg?#lr@#!X^DZ=a zKXPk$1o=@CGz@CL(B5`%7d1i}ZiCQftzP?`F#7=cjxTgrA5#A^ON?+d!r@U>v)ai^%5l&&oc7 zy5^VKBxYKaO(mtG6fl>XSWD2w$`Moe#us@B;-cq)cl)FHoJuu&$tcJOjuuwtkFxhw zj>7b&=e70zQSd$llz9v>M|oF%Lrj$E7>|N80HW*3?jjeVQ=@@+?RM0d z8BOlbvxN0rR<^siEzj#b$befSoaw^dN1`VI&lyha9Na3N;R78DZp|IDn}QPnIn6)F z)M4MHaUD1uRl3;UV9d006EUk1>C$^KXRvXtiA$tBwu%16{CwW<0JoLoxX+q=>Rza9 zRc-VtLn{m5_<%QBcNq&oN>-VdE3Q&@F`LwyVsk`hB9e8~$XbN#FM8eN2{M7G3Uj9I zdaz_!zJ-2x+d}kVqE*HUlMJ5YeLb4g0d@(x+@!YO4EJZWv9mQ)5K584nKJ!v9*c zZPeRs!$cr$|CKo~6yh85ewyo^xu1l9`cq8kbQyx)xM$SWf_nun6J*C90$E>oY2TM4 zQD;Z&-Th#7GTzR?ZxQrc#wfZDBYURA5{|=B&*#tJ^pHsNTC3=4$ckv=(ByQ9{T!lt zgKbx$9Aco%GYyJ)-ykNC>Y*QAA0qWw0)im9jP?8OcPfxtCHgmOGS3T*@NZR|ZO?D_ z?|*hFZw;`fU7woVZ_)QZKkl)*YG%Cz7@5C3*f$MI2=uo~WL+B zEDktk@SiyB}p_T@vVgdm>^2UJVk}$khO)IE-s% z;3nx7cDDNw&$@D6PfPZPDUG1bzP~@3Di&~VTe&|S(T?ZULKb~93ZuZ$DBg|Z;^Svi zlh8VzW~)cB+ex0M*XQncoy+vdCfGGAv%oF1e)_8gotm__pz9pr20*@XW!;`16EcTz zGE1k}V$QTXP^WF;=iH_y4xeN)6Td#kop?LgAC)Dsz_94hEPyh9dqbN)egL$EDkT6P zcWZXJL!Ez?#^ZBn)2Pgq;=b($IDJ>+;HMU#DeZBmV1vrps5F1-$9$K$a*v$gbs7F= zdF}=A_S`IsPUJ_lLo%p{CHQ#NZ%Bi@`2)@mn_cs=!_Zg^7fYi?>;ttnvWT2?-&~+< z$Y1DGRtir_!l==*KyAA$f&Qo8ktUT6BqmtOIHZ$4uQl(kIO$WO?}(~caz~F4=P@%B zB-Hd5HzCQ>ItoHmXnd3`Q{x5$O(9Ox@jA26rP>}9A-9DT&JZzx32hb1z(vjbljyLc z%r7xHit=l>Xn8<3l*`8T%B|o)h(Q9SPGzxW?e>Y z*|n<5`l@HMtQ%a%?MF)tA0m?3=&bzv&U1*PSROsfl<<8cK{sF{Mc@1P%xLHRTL7=RGWmti}zzD4qHR z=iTJnp8lK8NX7jpe0?_U!P3Wt<}OC<`R8LP94kiO``RL!P=!yCDLoOfx_~a?HXM-v zKY#z^Z^fS*4RXZ-E`c@uNrxgc!pC{~QWPpEa;SqAvgHi*9|>ZvlZE4^Um@eBs$an$ zt>}K!M`NZZrOM_w&&!zlfdiq|l(?Xi&1@RUB1x(>710<9v8|J7Sz-Ye)Ni2E@!)x1 z;`4OSM@>PU$u(+C*v&~5)#x*bAu67Yjb4D2B;k_lahgQTh@!C%OUvgBr&JX`f|HqJ zAQOnRM~VpT6xJV+xG~p17dmae*LsjWld7)M81tC`0p~g};QU1YJ^J@Z6aGq3%(7Ji zLH#%hmqcNLvt&4*%n8JTrNmvtq@FN~MLQRQVp|5_5i@Rmk%3B;umrqK18$XK<64b| z)V*YXl{VZM11V-2Aeo;2rmWWi{g)c|H${Rv)>bE!p)X$s89mGc?E4y|?OB+!N#?Qp zMbN;sW#dLx!VNaVH{v0X)8dvY_Co|S1b57n4`@iCTf{~Y*lqM6%JN7f5rNHVRrxU> z!3|@S^5sjRT*8FCQaSS~5(bIDAzn`NAM=n~6ih>9b_80@IT81Tg{q7wgl&8)&MiH2 zV(+UxRv)!9gnM=bAQl3xkl%A#8(<1ML%z!>#=+6CVS=o&H&fOE>ct+9<9%8Wn7V$x zE@a5h{*+2Ld;j&<6Nh3LUaG!ZH$!`x+Rq)J^O2R@!iDf~+AP_*0KKgrOm@HuW zNooPV`!ZAn0;O&9=1o$3o-jIq(XdZw!-jQkrf7*&nU`OF(U>>$F>TsR{Y*3F6$qo4 znC({cV&lo<`HhOMPZzU`7HAaViN}yS5vCY8O-*T298eaxwr9^C_v>F1nIC7V;t2N- zK6qby+ip`7{;A8P2V&}H@Kgp7nIElnJSWzCwq-9O&@bEB*E>({!i zTQ*yoA%-oPC{bl)Xh?mrpJu+9OOzRmJd`l_IVo~0S6*uhHS-$qe$o+1B@3Jl$R-RB z46rGRj_s0?#k?S|i0&Lc7VJ$75k^@<@tit!ibWX|cd~X-7Ku7gb|~uq%U}M&GLWvm zdZif?$TAdJq8m8Dh?K%}h&VvgL?2?Y{njSYV)paFA30-z$VVun;BiDZSqou-=E*pq z9!QoSo@L#D17n;aXYJKjU26&+Jd@}QctOwbIStulCwv;5a0ahjxym9OVVXVd1#68| z{lM8v>g>5vnCFcfH<}X^*|A~6dQ+~!0L2%XLDm*J4GKMUfKdLK9Fyp~Fp9v;WMl7h^9VN?+H zB_j37C+jVR6vLY_5@ll@kX3}^|Epj9mW_o7d`UXmWEnwwWh`LG(nn|-gA2L+t6$w~ zbU{Dpd$ce{oPZem7;4CCu3>0H`_KYdAv4jx7z2(ZGO2)$A9yDQ9(`e(2D&BtHLttw zI^*%k=H3$U-+&k6;NcYZUb^qS@9h4@I9PYFSg;S1NHzF?9b+P5j$w-aKm-ya^LG#Z z8r8+3hV%}4<9_bL(aG7HvPRzKRa!E9DD(u2VcPW zlbxW0=JaHnKlw_t9Es(%IdH5cVc*f0j z+QRuow3cy0r?eZ=G9!RikcBOx4UA~$g8R2f=CQ6AYo$^$qn_`;!}_OZnO_WJaDg8} z7Z|ggL&JXNSnO&`TZaBA^ozE6jvpL;(Y^$C`F}?Ofe|rS87K+L?nT?5pP*YKs?KW-n{t}caIL+A+3Q$O@2K4U-}a|isJh9>n%M3 zW(!kdQ6Yd~pfJBxtFAL9N4wmQpoQpRA_!v`F9-Q_baZKv95w@*QxaMD?2&}{@Re;YUw{1-dGx+%dm$F-)ky3U zedd`b?R(}AMn#%1a}9Hap|`gm6B9nHl&QO9Y~HUqXPyJ*6!wmG@KA5wywR~=5k|+s zTj$C9h^L%1QJCaicYVni=B7;>?VgmPaUud$qt5CF?{-@o-q4Euyf07Y?RVU5G*4;@ z={X2jXcJE{dw^bg=>>UE7i$g7QU4xPJ&jLP4EyRo2ZKN$WSK)~0_7;A4}>NL28S$h z(9Yq*2Th6Mz>ue&dd%jLd*BVwWI#J1D-G&J=!MVEnl;;;TS2x+XSZ;7f^sN3vtI+eiN^#R|itK+$se$)ebkFmg!O%wE zXW%0!azqty5`+@QOq`P-mLGh)pL21HSF<1UeP{^`juA_L1KH%4)KnX95M^KgoYL`UZQ*2 zP1!6IN_MI*2Z#moYNjcyr0Uh{*Vr`_zl94qEN8s!vxdLYf9Q|47$?~w;K228-OwKW z=XH3jBkm`Xa>ETbi9a6^Pb{0mZp)UfdL}L7=IfG`>nth*-{TqZMH!`UjFHIOhEJJd;91wv4 z8_)}DmiofN^Mcjr1zm+SV2n8Q7(S^B9HVO;;|`g}9#nBD_lKvSvU|ch`D9*q@7^K( z=UUZYGg{7~IKUVokFR!}hNp#!3Jv&AzH9X?<GoY4&*<-W4IzySp&D-cDJy& z)cVL?ZPq6#&?{G7r*@BaM__|Mg&EbFo9WYMS;P>7iD(>sW4%DaXw-6vvq)=5B*!ZbeU**yL4fkc)|Lo zetyt-IOJ%8fEx4qgV`;k1DV-EhOr##;$8g-#s$4vnKP zwyNJa7I757Z*ii8{V*{7KO=^K=q>SA*>O|djO8~C+k04Jw?dL3ANyw0hZPS1Bd) zN_+09r**hU_Z~T z=NUu*rJKwMytMEk1S<*z5eDXm`G9XA%CPcwMmX>LT%~g6+40U%>My z>`y}(Yj5u~#|E?#(rRmKo6!*WBd>6z@*Sy^D4EDB9l3onw=Jl6Vq$t72~y~3BZU}`Xna}<_f?7_ip@b@r15}a^i6Y1gvRSYZA ze2EBNE5&`qiVICqe_Mykpnt$ma5{zjgnF5`UVd`OuxFkzFmYmVx;zKTKob}n$QgJR z&po)ayF;&!l%&Dh;l&_jD^S;b5A-k5nNI+X^*~y1p^D?V~+Ok6A6R& z!Dlf*f)dkOYt}OXzr#?Y4gv^mZ3~s%^o||c!!>A)gUDDX@c5Trdfp6Tj2|*o7&qfT z@4RI;7xZ^H`6X+N)0Wv=3HBI`Gcm|SM{Cyxdq=?wz2?Xp~HnX_hF9mqs7+UQ3nlae9a>WZ2hXcJmxj-iXC zOPA@S=Btgb;OxMN4GVo|jqtf(!9t@o_z#73#(Xkw-~_!g*ZcPEH$DuFwzkd}c596; za37 zt}tkzY3hQ8FoL3EiT26=J~RZNl~4#q=bZUOaDjWsS9Gh*U!Y6{Q6!#)e{dhs44z}| z!+L}7h^z$fF%0j6CPKc$2*UfJ$Dk0IgKmQRg6{)bfAUgk2Sn_ij< z(&yM(Lu4bU6WX9JD0snpCponfd4+OE6!pd%Z#6@aY!vF`Iij@CR=~4*jn%MkIP`GD za=;4PdFVr^G;$Ar^L#j_fM*6Y34MYSg|_$`oC5h6$YHMW4Ex1V+DSh}Nk<_M>Dnq7 zh5tn7BV40&lQBoX3$bQ?!{5U-8s#VOf{?aCTHt^Mtks2`p+7G4yd#LTH$XZhn#l(?6Xgq5ftqYZBqyI!gcNs`^dOi2O*~1 z1CGdGKEw8So;AYX9Qt$XEq7R;7JQArA>?B8bk1^UpIO zcA?w}phBQO;plWDW-Acm4Wxb}#*VTicTQgt-^E$t(ZNJ@tRxKFkK|@J|awc`D*-^j)KCc%*q}6AJ*ww^4g}UXz!G zW7SE&p)`7K_($toJd+4~+MG7}j%$>V-uNV1ziQPr<~WHn7-DZJQwc#wDF%#|3B?{jGo1d z&$GzlHl?e-_S%cW@UyogeOjH3zUzMt182#S<#KFXZm$TdiB5>bz4zWbX7GgL>i=AL zJ^Be<@`FJ!)beTVkpfB-m>D4b9WNKiZe*GpD-FJp`tRwvs&%7_reO{qMtp00!$!W&SQ+`8Buxfq&zU z>D+{v_Gemzb@^BR?Fd9zhhx}hrw!5tNJAwJf|M0JM5iMZ&Q5Q9t>+2?FiB1^Mk&L) zN_tJ;Nga*C@?1gH_tPWb5jYhBD1@Z^vHbvfMXK;%c+RIOc&BQ6FxP1ZLnVyz4W^DS z`ZLTmY22iC5@{N!Q7~BidTA|qT}&8_A87l-OKU;2cCcgi&wVxm7@4H4;~?NX5a?ns zbO~Kh21-w#-NU|j1U!h-*2!3C>{#pjg#YVIBY?p=T@lvV7v16B{Q1Ao`5XzCBn70b z=#DP~Lx8D3+4l}l7k%;gBK!sI*!B@l%N{J@d=Y^9v@s4w;D1_u{<|*@0-kohICJes z>JbB~KUU(rk^+zWO}G(K#=^R~`Y6fJeY1;1Tc$ zcmzBG9s!SlN8k&OfHzprWfD-TS6!#7ovBji7%pEvKL|h@XOKP`0b}%cmfL95uD>>X z2pC^D6RbgXcpfu+^EMnUoiW<@tj>Dc`7DIa`R|91mZUd%UFV#q7e9b69s;AoVC~*W z{i*PuN@4n}XL+vCJ&gn)iubA7`P9x0|CeI9E;&BqvUA3`Sh9N>8E2oLNWU1@DRAJf zcsk*7OC~hFCsNI*`nAz``ggDo9w$$3AS5H#`SsHbun@;jtM{|&Xw=6>ZT7Dx+GhVc z`u)wLso5I=B90oTn;$6~(?0 zCYrxK&Z7|1PpS6gIwLoq)aI!=*L}UGy+|G5BgWUdulK1pyx|m|x;LImxa|C~E}qkC z22R32H$-s@>+WBju5)^NYHZ47TgPa9^}pd9``hq5jXr}%qjk-rK-WlVZbVzB(bTZt zqW;HITK}!0jplCJ2s`m<_=GeR-Wz^`Rg{*Z*Y$e>+LtBKI_}bl^XvGFNgJ6A3m#6&2L70rfsZ?Wuc{h z_cyAeXKcE;|My|r(Q51(hxJGzMkU0h(Rcou zN8lVsU}SfjYthAXNtc?Eb>)M3S1a_skE#b(-4n~irR?b4lqX8AR@6P+hjzuAQf9PO z4tGD>;4rV`gtSXEr(AJQXM_<-d76=RskU*h>!rQwgbtx-PP)vLCRaXMbd}@5%h`MS zFbaQ(377QsGhKa8UOyc&TJ@gKsWMJN4D@~Vn8wnj_s{D0l)g)(otN$;n?X?Ok+t;YjTxC1y{|7@34$^R^!X1%$VxA zDh07}RQE$?!YQWrvo&8a#Z|VqyW(Eahm@hDjIZQ4y^n5Rm#g)!SI;EIh~`9#Jw@2^ zf~fKly$rh?)cdJ*^gI~+5|cr|yu~#h+N^eIEH;Ot(WzM%S6`TqglIiALG4Q7a#($6V~(sr6w>sx zW>@VjYh4t2T1idHx|-;!R@OVtW;VNogn#LuJ`q7m**MpV#-D7_J1)oRy~+DJwKnZ6i-U% zo}QvQsjG5WJdXENw&?pY&{@zXe6J!J>ths$4^!Vb(Z{5m(NFn6SMPn|ZP|HaU0wYx z>blk2qIOknwN$Y&*bC0Wy24MI6&)t$x487&u}0rX(O;suZ=a!o@*%yLz8>@;uDXqv zt395NXN9el(5iTMUG$W>VV0{tv{f`H9;<$zONIG`RuXaoAtP)I!StLo3}_-bLF-rR zs?53qkM6>-aU`V|j(1&e?(bQPTu*7efhlu6YD@Q+lUnx~IWsD+63?y|Yp!&#t4BdMJj7Gt8Sx<2pegQJcQS-=idEY6USSNHPn`8UX9d0~{!;DK_*r-2yK&J?aeueY$N02vov^K*&^;5=F0*8!t>4OV zy-qHyC(`b4{u&c@N%3y*0{^?j|S{71Ko6nG6|cajz8BMoIm~{HA_ZcHMAayM@tHm|lIZujllk5C%>s|4a z3(Vk1>E7z=2VCbq+~#*ldk?B zKak;HcFkX%@8S!nqoO*JuK36{mw#6$<8{{&bVO6cI2Md^*>5c{I*iFsOl!W&&+L&C zWltc)mnz~tx5c@SkGRxg9SQ%PMXn+vI<8aGtWC{r*CX3|4DhgSKGT;@b#as!DJm#^ z>GLPJ-0h+P8P^>@`&i0OL5fk@HQhGHB@|h&tNo1dDEw-R*4R;drb%leDdndwL0S-Q z7|t1ut!ecv*YW#pt|q0dA_cQ~`2<&z;aZk6r2jaheHv}Qqad&b;^HNGiL%QGuhOGC zHBO997Pm-B%2DP@VR^+g-6NvXLQTj3tI6Q%`rCD`+%EnjM*w(NKG1X2xpKNo-Z;y- zF4d_ytvtQkb-vNd*HBQ>n%e|)#7fiuIFssXGyjuyQU;4Ivu2)4teEKPC#009j@r%+ zR}+t`7I0|57=lM*Qc{|)o#B$J<-F2&b@7tio-U({@-8{DRB!Uq$*DHDSYl0jzC%Xue|SIO)1oiN zklu3Kb;wbIVxGHxwrIWPx}cZ5jJADw;W^!vAKfMz>)T#f?`ZsF4Q0f4vbWDMr%qa9 ztFArby2K;;Duz-%Cud#Lnz=5vV7xgBGII8G{d$Y5>=kcj$if*1M_l&>%sRN7nmfkj z{$z<9kX`P?-+pvz7?2wQDfZ=gFzp_hqThSygfCR=dwqtyC@N>7b05~jGY#YqV}Lf2 zqK)E_qB$dClBHSEeMWR&7mvzns!M;^&8KNeaMCV-(Y?cE`Mti_Y49eu}F|G-nM}~(viX?M8yKzX!$=Gz4ffGW`(#bunv#EwI0#kDTcAYi%yMXq>Ha=BmD1 zbobZ}bIP8?pXs{{xTb%x!W;?ZfB#Oeo)qG$dvNGCNjFGdKf~r1K9k+q8SohySxGtc z64y+3?zR0k=H{yJ0d2_(5%eCwdAiBH-0YBMI; zn!9C=OInoElgon&}Y*mnGW zyGyDcOr{v=bY%LE{AufRCC3L zx4VLLu%5XBe_@opYMM(4;~MKnytML^*4O*eEyRmba(?CRnB$xrownXSKI-z1?g)(9 zkPi&&=zL=yfisW52pOz0uw-mySI%(xCw98x8wXtWf{8BuWeF%56GVDo&O}w4#F**_ z@y2WLFl{ZqgoHxo#+fowH@Tve`Q}^ax@Ilbs-CNMD|pPyh)hvY#~y~s*hfRrxD(?v_cEADGV1aYKp5lMyXU)%4DZ5v z46R_I@jNHwwKPNP$?d{V-g*=@@BkN$CnE(hfx@o&$Vk8^W&C#j%}3_-&RjOlCGMQ- zlItYkBt&=s$3Xto{m#82lUoyp&WB{gR>?RcH?)+=jA@6fWMvm2?euZ_| zbE*zU4E?UWbJ!JRY!g+<%IL{R(XFbk!rH?wFX111`=HuZ^}QKM5|*(U&937=zHc7t<{M_a zw46f)ttpIIqH!HER7syoOTjKHlApO;YejTak+DiN0K*4EB(8g$=0NYG2)i-5KZQXC z=Yt|d9sjW2RSyo**LDcy-Yc;;48v}3F+AKf5L)dBEsW5L%8W&O3{D1zy<{ZN=clC7F@$^m^ znd8m4>iEf8IRf)8d)XA1mVua3y+kv~#>t3Z$1s95mta)Wnu?1T+d|aBOla<6$}H;o z#V4-xmUv7k_k>kQqdmAlcaj^qYi7DcNiJ*6Yoo$Fnaifi@ioQe|8AWtYEBdAO_EVM~dlao!nuyFq-=|jp6Q4~EUxtf==wk#S?${5RuXQm`i%RgPGCL#@q-*A6Y^jIKb ztN#M&EFE!%_{U;phcM4ZzwWbVkNEbl!gNM$`SWH_L%6d65t= z7bF2x(q)jpDb0PSoTOFhi`gsW6kVaHv~<+EqQ_Y|G0M`T$rwzDw`5r-()+5?8Db-( z<)0PYe5GG#1V)CG#WZ44@aj^osvET66e&ZnWp{Ttyk{si2uK8O{(eOj6xkRf#t553 zNlr`2B+aDoks=ye^aU}mgcQDn(s2-uC}$}x)}*|#h3EDJ(GC`WcR>-a%XlpAl7cM; zSyH5`w5`LKAt@q6BQP%eSc))r35={#SMUfUAV`zM*eFZc#jB3OPpVIyev6S5WY{Fs zR?An~B=}{}NXf{{c&W*dXhu1n(_;EdN#ia&yT_tuX?b9Ciuxra+)zjgVyFeBjRl-5 z9DzQSdWC{%X(3{0N$v4*QiPK-ge;AUsE8tQ_MD95l$6Js7=K*?1;&>Vv&$(bnd!d1YZ%&FjsZaR6wWUz%(xPE1|keN|$CWRORsL`1yJl6HT`$!p1^E z{#T_S6n?o`=|e>+GrA8)irOYctS$ux#F9zW@++OSCaDGJTqs;SADCTRhk1UfTjB_bxzv`V#>%UD-w*Z&WE)6Qk0{uKq|5fSPYde8Q3{Fo|tbZMY2f|&AQV5 z^YXe=Fjk0q);deBtp24gpQ02(rLKye=#~}6Cd0uDO+`_yuk<(gUt?A(xD=xglNMoIB>)D824gFU&zGcFVn7t+bjtnFVnv~nN{v*yq}HcX3T9D})F4tSd8G(R zT(YbxIp7o#vWb9BBgJS9W%O!A)ZuO7OI?yNWEK(O%#n4Z=p2~jf?@>R?u1WKd zm@7j^PE6*eQ-(xL#wM8nY?r~o+NrFfqMUO$OHuICGg=fPl`~I#F|Rh@qfz1@x{e`X z832+WY&n5{6jTQW4p|CBx{%d*Io}exrzQ-+EiQgoCz3|w4Xs=}B(8B~G^UuoPbixz zCV85Fa)-%4b5!fLx@eiSa>st^(NZ++7;hQL{VrwWB&KBz=e#mC>Ntpmkrh7F_n6jf z?S(x7&)21@oPTi{7cuD(G3i4k@gw92vaTcpi!^AmYuGM=V>&K}dVSjoo5zCIR#i@- z=07?wm>aE6_JC?u%z2)kuLwW7ur%I$Wzza;)*Ztb#WQUcD?5&{h~Ud zXAGvIoC>yGNHkuRBctoF?Jh^=iRfBkKQjO^M0?#R8ow~UB)*%J!`X>mY)!Hs9CZiXO>#Z0 zbaWgsN#PY2eX;w7w$q^MltWN^~)iprX)>3O2mC(Y?_jnTK` z5jevLjEupmwTMAj(Sl+xkO@*PUZNZ^dG!O1ru8ZYR*{fHIikSlFm5qSozhWE*%3n} z%2_*wae&C<`qecE1lJf za7CH1eK(V&=$cdsz8Wq6s*7ffk>*OOkr_;4_Bakucx=8P5>X0D6A^?Q*Tux^!UWGS z9)6T{aE~t<pCNEU)DSlWiYs;URg5CHTPqq{6*Q!;ERJ3hRl2sSX(y zRb40Ql~}HNq<~l*?U6bdgOt70^sE^$MDQ@K84E(cpvadQ2PijkLNNbUcuo$ECZ!Lt z2MmSN_Lk~?b2xN&u&%Mh<;+M(X+@Z$IFyeof-ixdW!+HJ6vg&9*W_tdlsF~DD5-uF zM0W`FstlY?MZt*9mbKO#20YQ+Uv9K^>9f_LdP#*Qn#TSr^H%Hm(Oz&wV9=Ge$Y4cb z!Jv}!hDaj#okai8m4ts*>1lN-k_9P^%o+2ZSTIKWpru3#3sPrI!B8FbBYC3%$6+F( z(S~(O;ea2Ys6$60A2Ay3`;=3ui8@5zbt!~}7x&tl?NxwLPIaFYyV|DExum(5H`!u#X#tg=RFo8V7?<@sc zMom?`)(msqUzP(YuAAZ*Ycg=s^7xlNQue?)@m3iqJw?tICj-goS_XU%G4|XrI)8yK zFxoOijTLE%%dt_B!?du0)V*&0ARLeB&Vh1cPTPR)<;^; zAvf42VMJiGAv%xH27N{0PK)2Bq*#}Zbh-2t@m>8+HWauOWwbYocO@1n^%O!BuPm~^ zzA8r@^di|xR!sTzgNiIpGvf$nN)PSeR7A1IIO4~MIV8%H&>G$g>Q7xVCc~a(wkT=d z%aZe?z#3ntH{gZ=B1~iA<4&p0mN_9~lr&--@9?3tBKC~0uIFt#hIohTcC3>jQJ>x9 z3eWF0!=F8!M9<9#vj$|S%0a?j(3GODX5h>5T~NAzQO*{+5Eg!Ck9AI1vn8l12S-|t ztCNdlsrWkW)Ha8FMonUfOJD1H2zeo1swiJw#xHd4%AzCPpObuK>qA_Qw}j|Auk?A0 zD04uB4Kan{L&zt#G{9$|10s)!8H(UPxY;$$UJ%fpZe@Ha$<>tTlI#yRhJDX@SCl~t zePG0=WazRYtJ;b~whO$Itt$i^LfKad(v?dEo6@|1OiZBqoZ|m0}Nw6#9bF_%L3L zN%h>Xdn5#^ipquiV9X%V!p@#ArCmyS;Wvuv;_Xu(!$QP^bm5AgD=1BmepcmecTxyR z5$4c>yi!y+5F#!Hnp9LOp?*}9ii<}+|JniV5tRo_j3u>Lo=+*ZX$cG`ZzUcv_B+X> zbWU}~B(yLTO7bpZII~|QWVF^F@mRd^vF>?8vFK15OiUhLJd6m7X6@O?Ntx-8=N2QG zR1u7{oc2Hvv8jrowMbZ%l=^FjOfgjIgTYB)jK;zg;!(7D4#lr7VrZkt+Yqed7+e+C zp-4i2uLQg3p+)-w>)R%|PT`cD*X-iboo$a1&+srxp{h#qDZ!A?yb>`%m`3q8B~xi> zDeVg_JSk7Q6bDlpy6cDuL#smuk<}rA#J-bg9e6~;bqD>?x0s@AT&qgJ7BycOu)Ri( z3z)SnHnSuBH^}7)qQBVe|g?uTy_> zfK_6l949X+iludFxGS~z1cz9O9~vzw%AIDfwTxs^&wC6@Jr8fObYB5ac1P}q=b59! z$4+ZnX99aJo|LD*9Emgt0>c413LoWp84k(m%3cxu zb%;)DI=Bf1y+#CA^ntOSQ`&e;YqBC9(|m~(Vny=pFc;xXU5u%r6Da85==>Ktfh?t z3}z8@U&F~+QQB&HN2hE0pDu72$rPNe7-*z{lP$tQRWb3*1p9b#0764@npBR+p{hu9 zRmwM5;OrB7b9F@pa~Ek}xauYKzK3pLYmvUtl@TxK3339I74<4>A101c+g>22K$&PZ zhLQ@|Pz7Yq-K`cWg=R<-u8N+>oWUTBT|UjV{P{9h=R5$SpIXPpUo{8pcZ|y!63A=u zF0kk+HY?`DZvVxGfQGaNlhPwtk9BPaDR4FcbE$$+m|mu6JdRvNO5yuf`q5o*P5qOs zgnsEW5x(pXm)PEYr>J^f4*c>#IW^&*q@9TN$jpE*BqgsfGSSBpY(ddE2q!hc+Tnja z%X1iDY^5l^eLxOG%{_)&_d`VJyW~iXE0RmL7;-(QEkaJXbt=8QqIFf3E<_fCIdjkr z=ZRttuMNdJ*uRV&>#vI zUUyP%Fj!IUEagPZg(xsWHYG-4%B8S1X0Lm~s0fEH#5q()OcNulrbujD#z0<&1Q4}l zUt~%L4wRG*oR@+UGA{;z5>OTfaqR^n#fG|xPCG?OVEB~uyGl>eo*4Ix{-AFXI2n29 z5>iBp+VhAvj)-MSf}!K_ZBl;pJPebu$HPyjMyhMc)qB)yC3Dr&<4pR6t z?A?-~YtEaViuH>gtt(Z&lQeG8mhGF;fkBxY=eY8wk9z2X^k&1pWn1D~x4^vR&&(Ez=YONS;h%#Bix^7W77>O89hlHIWoX=96ThNPl;bu zwMWm^BfN+o@H$6m#URw!;3Gw);v+{mf1p{JF+`Hfk8elYwA*kXl()6Jy7sGbU=_w% zmktt4YyTdGtpi_0N=cn0bvLExJkimT@Jef6EC<1m5t5dSveTY10w}5ngN`+3drA?W zYRj^cNFf#t*Y;KlOcAP(Hk_6N4&E*u7Q;SY&V?WiI-^K*U9yA&i84wR z?-C7^Ww6C{Ko19*rF7sM?U^%A<0CzlC{tMx*W7LMj0RK6V(OIhrbb4M#+cCB)sQ`d z002M$Nkl6D(iG&J1t(1bF=AZ@JjR?IVw5%yi;3D z;C)R>Pq!##zYcL|R6%sl9#(iplCvh*zbkoJl0(kqsXap zB;4#=$!s}%;)*OMw^#PYTu*BImy-h~rih~PMsxyYF~sCxtSHsJ2}iZ) zKdF7V@JD+~f@mqmRtL5-jAYTc=?|xc$CT-Z6CtZi3FH9>Bcd1M5aJNWs&odn8nD)J zQZ*@Ks;0F?MqW+XDn-e0_NT`cpoob-rL?cS${t;Kh|T3l4%D~p5g0fEvPN8UQ?r{k zRl&C|or*s2D$c|cT0L4+WUq1fj710}jN@(cJjUJq zJ~vJ|EGiA>__Y_qvEh$>f+S}q%0Mr_@m^RkfaVNTTPd%4q+M8 zAz`TNMBk$kwweS~RsBs9$93uUrm2SeJho8_6DQzhnTI~PUSmW9YR9BR_&Nc<% zW9fGGfYLU#o^ebS-jQb?BM!KwY_La)dW>EKHhYMgl#W@F1E5_ejiW%IR8*wsnWDjb z5w(Oaq$p;V>U2y+XSol)$9%E>eyp5Tr0kJJ0qx-wU=Ls~zBneNoI*G9wv#3Y53&pm zY#H^f%D(*G2ZEui-*zaRBBK~TMo*$gJoGlE;4b@}F|lWgJ!AGAeHPD4YhP_ikz1l2 zJ=LoU=q)X!w5Z6Oy=Fpm(XP`y*&9nF#4aEyu)Tk>nG8zF&q{pzJim| zeu~0|EE$2oIfqb@oG+vHdzEH;te>FaIg?*MIQ00jx13!O#^#lPOWeDz>zUjk>m5Yu6O*y$2Q(HdmEvVo}!N9 zEW}VlPV3K<@M*e689N(}XzR;P<0YiJ7L~HdKDva~6KTK!-_k)&DAigEWN+Bo6aBF@ zp`?TKL~_C>uMC;(=FDaL3j|1%$sA2GaC!-^r&A;I3wR0(J9QgcU`{nAw&*x*Cm~wQ z>qd;9=#%~A&``&-I^k98K88^N?y84v71{G9O8y_Q?<+E>YN`k0h5hNA7*7g*z?>To z7hR!62ltQ#p{5OEbMAsShK~AR@=Ei;VLdU?PwIP%Tzt(OrK0PQH630_)<9ivoehTDJqWh1sbb~|3Pf7XMO10|(H@-Tjz<-`bHBPQMm)=F7MpHxp(r`ix-P3!)OoN`qS zx2nDJopLI%?;81P?LtfNFC01jx*l}y?EeeDXi+L~R&tm#Bar7{9aHuT&PI%S_=>$k zPCS&fYNI7##I}{X^gPa7u|3L~Pq1Yz+8k?Lk}`ghv-HZT-Z%C%7O78kWI zm9(RlZ|ELwu?YJ_J6$9JrbS5CeK_}X-b{{+-g>>NH^)l3L6Z z7+CJBVv1Vec%Cy#y~Bf9lNXQ!5Ktm19B@(6p(QQy6gJ8DtxDk_wz;mZs0gnt;ZUWxl#MjX z5!wL?fCLYzOcnKs0}{e<+u%pZKX@BCWGSURmF&5~X@PQIk?}#qf<2UDNnL&WkflE% z^f+ZYp_6z~;ObHqOWGfj%xaF<+oMPc-c7QY*jv-A6B%RL?`J3cDn+}j{YWLH$7UqR zb6;t*^xu-&XTKFfwW9AVMOpYD7_5%fkvbINE<-npwniiNjDysjBHrIG&37r$1E(u; zQgK!DP_>j?(G3QS=*J2|N=9NvuNFXnrAav#jd9e!dBel|7>lAN&^S?=k_-g%C__{z z1KbDwXxtdZxm7Z-)sF40mT_8B1h1&{LHdY+%068Va3FHX0bMB>`mv?*`pdvYiRFN& zl<20+fj+cxE)@DHn&GgbgcKrP4S|xL)_j$;4)NfValzp;or*T`Dj8m9RNJa|4DOYp z);%S*FI4nLM4okO;};!qFiLi^PJouOo`D94%1O~oi;nR2bGkKqUU61%NR!bKbE9s- zlrd6>yfz7cB2adkr3_l4A!dAZV@y=LAcKfgft$ax*p+1z<6t3jUlczq69L5ur8(zy zGjtGMl-BE6;)=8+<(#tUgp^@UtPL_Ox+~X5T^@au%@__Bjlm*gGLA_dCW;fD$Zb4E zX{8)U=fsyvoNSEpB>LcVQB$tqVKTrn9N>kLB}Y$mEWNFc!rwG8q%mWxXN5I~9HnI# z#3i?i;wKzf)qH2GtBY2&A;G^4dCJ1fpw}`mMaZRZt$!6E2Je zmjs7k!7V@t?(Xg`AwUSh-QC^Y-QC^YEx5b8!`b}5`YwJUbuLfUd$YCg&g}N|^z=MW zPxtvI!+_I}l*DXwh?>dN#HvYF(@+-TTebe3 zni|qii^Hb8ME$h=q&G(6@HR?!hnOU^s8TC7$a?@Fd+c-{3Ssx{9 zK=dcRk(9L{6POT|%EduL^%c>qsjTy0yg)t@PttH%EVHVm&CU2hg8@z@+c^CvE$;~p zSxQqW!>`%f5=O7b==zW~w|k<+UDZJDnNylcit54H45>{F&}1|$FP!F?V%NI8nV)-t zM+E{e=IFjDbR{j>1`1HWgz~;qsZnKp`9ubLYD!`S;^(HyQ4waE@n!Cd>qHwvo8mDe zCylVb9HX0{q+@INf4k#Zg-2kE>g+N+ez z^oicthA0z8HXAdNrhN!L#!w~&pLn95_=#1v-=*dhsh8}X9J|zBemb5U(K6nZ=jRmM z${E)F{zE&=%>2y$4gOM@m3_BW_mm@BRvC`U>OH*Rh}G}5v?SAFcmU~wxn=u?x&|3mHO2#0M2+-QHjm%3 z5znZl`KLE0G`3Gm9Ewj}9{vG5C*ecHbdmT$N?;}Vw;*IbSWFwX9F3SXrAIM+!8_s) z!N_#Y^3h*(vKLZeIJIT5MO8gfb$=JT5D2{ZpLyQqQ(*_e=&yUYe{GDY(3*a9atL7a zlkFi+FA^gGt4fqw?`DA#_vXD1!1Y*9zarB@l2KSdM+7g|A49$DVn1eij#fth1o64> zQ&@deTpcN>hh4%CIA2Ls;W0m!PghO{GGgEPVEH8}v`7TMx@%`eQGra9Tu; zisDGP&q0=Wq>NoLZd%(_T0~b6Ya4aLb0rRn$$rQrwWc?NaRo``TUcuJa(HNd9EwYk z*hJVNqi8b?G?bjE(Gw1huy&?TOV&{z*=H6~{+OutA-SV?{MpuX{t~#mBEiLO^)LAj zWsH6)XHuP+JEK~9XquO2?116~<7DgQ$qlV--BuFv+$4sW;-sTRTWc}P$-pv9e6v^P zlVGg))qEa3=w}%{P(DP?)@jt=ap}^Bj63(^F{K}>Op>UE{u6%$%yv0t?+_j*z1fj~ z(p~6}!4(7wuJ%KdK{k&V6noLSUV9(Ea_yPqa5dU9$W5d~^{sckX{-p39`5JrXl1)R zrQWC(hz?YNZRR>SAJl))W?1tPN(_I18rK;hcxCB^%K9LT5J9q%ksSUZI&umn@8>=1 zwQMukf>n0)pvso@Ol9y&Cp&$9mNmwtuRUEJxH54N7JDVQ7W$kmZm^;~m|n-1-p39- zOshar3ptuo>YW*}Y*l{tvzkmqT8NLm1MAYF=ekW{bBwAC4w(a6^rMmfyfa9->#y?7 z%`{rl-M_zws4!C8I)p?F(-L~K@ETh(tzqhwZmyM9#BKEhL%)=^gzGz63>9|PMA*4 zMV7?npAn#H^&I#GYxR?OX10#?L z(d_FPEqp_{aJ{l4G-nq4CD{qG=q0H$Py4ebMK^V~R{a8=392P;@Gcw4_5!^9PHWPy zPF9%R@iVfbF&#V!;TPX)R+#%ZlK+Ece3myH-4(=>xNkegc1 zbUw+g$$CArnDKP3&k*(p7^qIHGe>40{MShv=~E{-g|v`j9$pio1iI8JpaK6XX1d>ns)G27D;oKUM@T=Dr6i4SGj@%!EH`@IP+ z1+}NhIPn;yB2UnLvUhbO+=n3^wyS=+LJ!*euZE|bAcuve)yFnLjo+`o4YcTiL+Y{B zPe>ry(4!E1@(8Err%xD&9=;t3#}gslPUB9Hpx?*hbNBwzvUp_x--~cdx>)(EpR4t(2=?ScG~5}Vb;{Rtmd|0oF0aG3~w-KTX>6|{5|KpBB(2l3nbX$ zUftpA1sanmC6HOBc?;+aP7|r&<8ymsf*%VtddBoKhZ@U)N$E1STRHhx?J-=6P{r6b zbm)Ut!q1tv)&sZoNTNI+zrT|l!=`c(&W766!LoK(%HbW`&*j9w{1!D-XesgXB^HbBXLxmU;Zw;u8`kmzvlhfq zRXn3MJolq2xmNml*}MjhNv&4)i`ZDfxt)d|Y~Sb9Tf2NpQ+b;c-85QjSv1(f@nyC7 zBIx($Rb5i?Y%WZ=w_L;DovHFT;}!G9T+yV-Se`!|lE=kqu;Hi+>|I0}ZyvqeJZMVm zosi|)=}>-XhJF(5KK8;3=PDvooISpl#rM*GzZB>#x82S~e6RxS!Va;5&Tu7*HR-_I>yyVWt{o_n4WC4_X?AdMnB4B}#O}>VlVYTR zIh)c{k6x@Y7N^j@kI7TE76LmtsR?J~FvQp%si?EOXRne3@C)VNUbOr26$pt->U!(y zHd`6gTTYg|ockVY3L+A6?gf;TK!qB{b*)~gy!UqiTknq0lgdhV!3^M2`FU&d{73!}pI`n_)_c5acw z?D`v$ne|v%YhR>f-`ZmNhE;Lhh66IoIZQCM588z_4JujSuT9nc-mj$s zJ43g@Y1TrpLo5C%KdwckPqC!2`o5N?PA2a4NmbwC58q-98%IAMWCD*2;`bANb=B1(Cj2SSkl;U65%T9_ zJl-_v4uR~!!-E2<8I$;vP{hmVZBu(f?y$zp#2o*SJ@g;hd!oie{v~*zdsE<+Eq^EY z+wTtG0oo%J@%Vqz6#-^IHOvd<-+~0>O7H<%fZ;=gh=8YqgJ5KmvJQJdI9={r0qJ~4 zh8E$Ol$**XV3v-Ik|&N&Or$X~+9!&FTupo^Pg2(cB$Do1d4eKis)3D5EiRPLMvm&@E@YqW zzm+WU_*YQMVos}d*|+2IiIm63#{XS=U({Q@mH-B1OvC;k`sNSg&7Ow;p}60BpyXe( zk1ijgd|WP?>nE(S0NPA;HY&w1Rk*p>L3(Zg64Bq&5zvZs*IrWN>3kXjHtOPmfdM%M z72=HOY8ni4zc-R}hk#7vA&90<$g(`LVmeXHEr%r5!8g>baxL-h5)I=pY~AVPHlH29HIC0;=!^Zl|37t@R0Sm-*06rhGV)-uS8$!@$HO zM)w{%(d|rz#D9$Bt*Ak{LF46Hd_10o8zkQtO&%~9K7x3HeI5FLOpJ6mK#4TX|1l&4 zve1CxL=~mOef!y(z^!9XuYbrcfDcfwOcBrhf0&j(w=i&)KD~K=5mYb*6%;{a38*)- zh6e+zLxh+xLPR~zYYB@3tfZvG>z0ly;BO7`1@-XH{m}T6j+2vr^2&_GueO${W7Qna z!(GJHH3OnNLI*SfTp~ke6XVef7jmP)AH{8=qs8pX;^eO>0*?p!LulPR@_Tm9p_$76 z%te|q3o)!{vzF6zzHDStQc`%}>cq;I_t1lP=O|Fr%QBtVACs=iDuhXne;A32ibi;P zf>BUVe5sYu`1tYg5oc^7)uP%;X5;eWf|!%@`A6LKKF)@K7BD0BZMD_Z5?c)EL}>3# z&F%lI;*bF#*4fs_NxQq-;+B?`5L8rl;@hp9;JFM4S5CZb^^YfQ5oWHJA0rbI=8HBE zwo90)bj|uAZnBo`o=(xf!0nv(Om^v}=4jsBuHI4#Gj#g`#d zH|H+rv008uI6XI)lnHA5akOJN*y{7=kwT8zc`oWm7AQd&F+|iPUth>aNrBsCQ`!=! z@SAsVJ44E?7h{!9x2CL?TmHq`ZBk>z*VYbodaA0b^tMMV_a}C3REu?Har;wwKwX0+ z!moy-;cd^0ZBZ_dH;V*Nso+%P_N+oWiP6#7u$EC@z}=3VG&)!cyuJ!arh{zaY51`u zCM8`zluM*?s7^I^Ozy;GIib69vev3T6%-gTfq-BYu@$(1y0{7m8$|xHhP1@vY!tX0 zQdxa;EFCRx1gfr1lnORO*W>N;C58);IVInwbuqH|-u5uE?5@n=UUG&f{WbT5KaCeY zD9c+#c}G=qha%P<`r~h>g0jA2mL~_3QPaTI=v$?r>vNZ~0gt?IQPb z*yd`W0aS{hY}kqv-{OAR3mU44bRzsfs}4h-a!Q&Tg5-Hap=-|B$E zmwP8eZC3xT3pQ;Rxo%+5rjEpZw4?xppVlzTXZT7n02cnTyEQd;PXUA3KgX_;QVBaZPsM8qF7RO9UbC28s zrNksJ++I&#BY^C-gD=mIiW9HgmYX5WiIXg5D;x=5cde_K_$HcP9uBvjF2|;x73BBm zL_mj*(3CZF2Y1%H{1kM5DeY)i-KndyFNazjf5v}|f4by;%~EwLDk_?J_msqx4r08c zsH{m6r)gWjao!yj8|rl0q8zg-np^G$ynaj&joNq1Zk_I&IIW*zrl+U);XpFX0U#MR zr=n@qR?DqYe@Wd6-X84%1Zhgw$(hNWWB*B-~m$n=RM&OY!1h(ANQknt$GeH zMhQ$Nh370Q&Pz^e4!-{x1F2tN>lu!mm{5{mOyBo`PCrd`N?Vr_a`&U|=Ml9i# zRqN|+n0X9<+QxJZycSLSxgWPDgz;w@N?u6|3JMM`7KwqvZF#C_%4J$4fKAS5e!gKh zu+RijU8*&V#mp4V73$MV166b^qG(a4$WraaT5oE~l6sJ>492(~e<^x0+YqBzMVUR` zm0YB~-fLg9oGu&QcOwY34?g&DKk=qI9#BXsN2r=c#L7!^s@fh8el0r2Xgw2*S(h6@ z$~oBKn60-Kz^n1F*Ns?hs*?j!hfU=km1(z$zC5p(s9 zo5gAwCiqw)*lk^0qyS04U$YR*iOKR1gFHgXQJ4PXu6TSRqx+7oG|Z{l;#kud|Dv!= zWj5F2aWdKC!9|6C-(ORx^CI&(Q(eI**rZk83{_lQT(V=S-omR9*GY`u;hskEr{%~4 zWRJn)4X&fpIBFm+yKVk8f)$$A#iTfGQO%K7mBfnM>+5emPL%*mD?&eh_e^LXnA5u+ zT36YUDD4RDmvi1K8a|3cY4;-Pcs?v&r!S}j$BTA970TO56LJ_OkcS;?`@B_F+4 zPu)zqgA+McZVSb1<>z>`bUn776m4;}q9W8Upt_+mP#Q||l{e&TzLn3=$Oill_gx3l zR$be34dwCfV)K4#YM`0x^{@Eb+ha2~VT_CW%n`;XAh&%WkWzIs_s5NL zg=JZ@@f=OkDU1H#bZA3>zJ5-j`B9xi0TdG6_`QFXLPy7j_`pFY>j?UC$Fod!EVYAz zW+3zftNI#aMuS~(K4as4&h zynCI z5;nOwkb(@>FFBxPa>*p(b?!$I1)evr?k+AYt(0$zb24v(ndf$n7wZxxgYR;sQgV%q zstz@tN=iPY96p6Q?~A*Y&CWMTQ1t157Ei<*j{LO;9%lyQ2dXT5=acnFqF55k2-gvu z0cuorQR_%0u+AQ?vDG6;$J0$HRrm-Zh|SlUEN%gVKRZ^*VFvfuj>|+#t31kfD3Q|V zn5Ncco4^<7P<-bNyCctsd^?PH?vqy!Shh>jVN+Z9W&A8s- z0uJHLwY`K;#GkgkwvJ-0?2gkca-Je^bUMdu7y=lA7iYGNU&OShFXpC9AL z;O93MfRv-XJCU840q^3={ilE;C@xm~zEt$ly^)b}DbkKrpR0ZBnM@XnXV)xK+#YBf z*~|-)tta6%CH8TKP+ULp<%)o(`khV7OH-8@ZvlDC3!5)T7Y!O*UZ0T^RF{8Rea~=q zyG+uqW32)TSXRV%cjz5VQ#6iGOPiciZ0T)LsRUOL%v9JvPIa05wTBDi5n;c%&DM_- z87LO4ypLH8!oyTx+Uw^ZSZK6KYS87g@NcogA2;ry&MNmDNo15a7)$+}m%_9d?GNPN z7u0gOR!p*T0M@wQge=@o>tPbIK43v;<{1i-vtxNWjLUq9s|2HWsBrpI7WwR85086qS?;;m&kZkRBs}SP*>f z*`34DWLA02kh-6E4#PXFUB~x;>L_j7rhV>&5UgWn{w@yj`q#cL-2Fg1K@f$c$UZQ- z?KT_2CQ+Lw#$V)wMe)M)rIF)tWQbTaCU6}+onhZkG&Azp1qtPn>f^_XaT%GI-{B+T z-bHzJ*ymVGs~7jX+T$^rRf?Y;8z{fd6uK{)(j?yreU2tCzJP^Ov$Pb$kKWJUx+;g$ zHwBVN7Dl^_>%ttbS90Nd($6o!lP-hrXm&o>7rWn@80|mYV+`ZJW6mqrO9xf5==Qr$ zg)Tp7T-%DwUX||TfoLsTn4QhEuz#dU@t^yw1flBicxOtr9b4p;_K_EsGzrbEDcxpAAm!L7#aG2VI)!&F6U}`Xlq2< zb>$K9FaV^pjQIMBE7cNNmLyL;!_yO-d4ksU-1HuBX`rgyI|y%{PhZEQ<&*ndWO&Nm z$IfX$X5*g)w>csHjn#Z3doSd-WOJj}X2PPi-+ zpt`xujfcr#8#kNJhYi`i?6VyqX6ab>tGRWC*S1T`PQ{lejeDzmk94oM>Z=d64Pd)l zTfZqg@CzU5(bF%Qo`qI1aA|MZx1~3+|j^~F1UZU_#nhH5*!(k`l&}y zP)>f1fGJ^OS98AZx9|Oo3=_xPSccOFvr&UQr$ZplUOF@eL?fYvwXR~N0kcLF{V(J$-24xAn=BGf@b@zWpzqT=2c7>~>VV7e@IQ}atHhJPeT1@j z_#aR&j3|Kb@CEt=5WWF;fG+-pD2GFE_%LRs8JZYJ@$ivG{Nq8E2^a`4&<=cSc?{3O zA~7o~uWE)_5uq1M&iRAU^SJ-``2U}fA$@qrDHJ28EVEl1D>ofFwzj^*)Xs`8cWBDd z8@E<7G210?LH-wq_#Z|J&jMPLO`5kWGP_41r`f6|Coe~W2`^S&pRZ6U*C|)Ct%>C_ zm=hVD_{pS1K@CcS!1)cd8tx9@^~msKqNDZlBqaQwi<{>9_bM$SBO?hjM2Ib=H8pE+ zsI_VL8%XGHf{Su~Ub0VWXn*$5>38-Y2>-{YY={$N_D(9nHY#K3$q#dD2l_sla)ZlpU+q9Pk z+SW;#NjlH8SM~wMH&OsMph<&+M^wN1FV7XYBnok-{DUI77UT-P66QJ`D4Q@?yP7jD z#lW;WZEEVI)lGa{+(TSK`*8c$yaFya_&`kCWMo>*$_WRh^wFGTVT)3G{nXf_6;6dT z`roQK4;VOaySzqI-;$(m4@ryW(z7kzUklkEB-6v=(|erwA6QiX&>S3m07C8S3$y!M zARsXC?}1z35U~@HZ;dPAPt=881HaOXC z>!ps?RUC1wBsW4uBN4LhytP6zTfG^F3KK5p>D>9ALg99Ycg8LRTo3<&IoIV zh~r%0?sIeJZ_k_&Lk8NHkns-sUy-R=Zw?<;^Kgq9Hdwvxi(kwI-1OI zNc3;NfB!C`sc9ln1P(4DCKiZ_9xEa)UiDJbZHy&~i5M9b1A!1iz3Kd4PP1Ql ztF_-F`h{@XuPuMmoM0s*Q@-ED>QZ5U_WyVqlbpN&h4<|#FfcHup~38)h`Wu4{;P0L zGIu){E9?9uCN#ujH#l`=)#Xvkx6fN0I^(G^(b2^?hk6ESsi_(C{93=Jn=zdnD9Fi? zmz*|YM;<^wCy~<^6zqeAx(o#M-#R$lM@B>#S%%j9BBVt}MTNT%E!IaF<4f`9-U?G0 zA|2#DD9p}|=GyM5u7;P?%V1z+>`BIut-ZK_rKZi)3TCuF7O2p|8{cK@RnTe&w*kDT z&=zH&iEF|w97M9~0I2W5j(t=~6*VZ~W&j$Uozt@-<*q6wR+v*!!+7KPfkQ@FUq9qP zk3C{~MXEa$BcgYBSR#t?fZ2Nd>`Cw48HiJVQ!CevqlJC+$PzDAQvRVT6T8)-PORkB zdbr=?WZtpayoA_+)4Tu{KW=zTjERlWpWZ(mP(Iz{NbkLz2JN`D?27^q@eFlN@1@1L;acfm)@dc|={@^<{f&aUi`z8qYV0)kYX zl#h|o)QvqkIeFdc+=O#%O>I-Y>A?nZq-Vk$6(vvYX73WK;s8;S7Rm*;aQ)kX7%Qyx zD((Elo@|S1FR{bg$IF*!)*TuI3QXXWKN|doaBp{)-UoMaX*z!hLp448!zy#!Nncnb zPk%;Coa6BfBF~9c70*5*YOKUw9XixY7k_rmG@rIsh-PU6gV+m^(1ezaa=y)T7F($9 z9H>*@TRwd}DyJ5~$o3Wc?oqrki799Q&V@LTodm442xKel58P~F`O%M&7@T-mE*tCH zf^pmry?FXnv>X~*IK`D%Y$ufg7s%@EO&P^kIll-E7_hO_cD?!fgDPT-7?Sf*9_5%K zxS}PazmS(!#A0NB*oM2!IO@j637ej7-FoD4nuiE$Ef?0DscZJX<(U`Y9Jj+WdZtcV zkh%(hx)6@6q1Afv4{7adH9IE#CZsj2!0N}h&b1ZhKC9?r#>^j!@%2}E1+Bxx`Po8c z>lsfArc=|t{Z-wsZ)+s8=1cnWmuEWBBj(V@2AOdqS1)lRT(uK4w1`6U0to_|jF|dg z^TFNsoZ8=y$5jS|w$8bQwrKk}t{iUWb*pJyH3FRsEX*2QRlMR# zg(t7eVs{FnX9skat79%}CGf3@R1cZGv$?sabw~_g7;raVwt8N6k>EkPf5L!AO5vF! z8Tp}hNx$0D(b@`%O~*u7p54&|nCvU&a@dlKl+fe<@+%&#-Bz%?Q zwsqhnFq8K9Fza{upx|=6*~D;jtQs)Z)iSqM&dr7Qd^}aF8>kfQvS5D(oqvPBxtS@3 zWcQcX_-9Gc0m%ImbvpL|o$0sB6Y+aVz|Ud$@HcS;ka)xpfVqeH1WD@oW;G{B1VNkq zLAXTr#y1jy{zHE8!An5ASzCA*fc7Q?>ZRXsdg1ROIyrMXU65efzPNqQ%k#Gne$%Bp zgdWMt%o;cut^j~EGPAow!E zvBjrII6rG192{n6eygjlt+kd_12;0l$}O+0tu0Vwlt!B+oR^oSxpo9EE=g54*O=@Q zdAqKQv_rQiV$0aA0hl=jHTk3-=zNP|-hKuPUO=^|&c)V#1e2m_SUy&5cD=-)or&_$ z&k_hPjj(`w|2J~cS%V?=iOMd|7eG^qNIbwE7#)akd88y((blH@EGZe8l0t zE~#&`w%tMYmYuCe`C)1l>jhOby^vUVNKPWEX;RV%RVQlx`qIKQz{ts|$@sgau-F$m zyCwoxvhZ(`wfT#k^?WaYej&69Py;@ATZe#or1W zG7V7H4#QEhw{A=KpLh=VaC?|H%G$n$lHSR7H+(Pf*4xAc_~H;yWZJi$6{a)r7Eo!d zX(Dg*@IAPP4)LVHYGc5^UeWX6Qlr`X(b&l7!yR)UGB6Dwyi^Pao48}0 zGRrJlr%&wV-t5`N@xjKEHqer3wyZ1cdlnf}{i~~M#k?qs>{AcS z*PVceiP_nODXDI2sjM~4_779>#hR(>{8214%{$&z>U4npp>GmcFNp_6Mq&~Zu?vcd z4kINr4yA>)wEl0P>`cgQHu~MV%^WKP+vMT5&LJ z;4CAHZRwets+kzu_>1#x4-f`%d>^cRfB(*M!N~A;q9A}b?`1CH9G5&ddQTNZMn&lZ zJRQAWuLQuM$IQ;67nGG9W?J2EUiGbWyIvi;XJ==N0jxO=i;Vv1d%MdNr%$&*5ZAO7 z%i1KUu>FSIk64N-yF&oaR2F3sg{oBX2k^E$ZMhxD;P*QseZ5S+Mw>%NN1xwXo}Na% z2WU*vwuhOr?*LjjzJOp&@P2|te*59DEXrz(QyKsaYiI($NlAq|AIPUg&uKYnjIrg9MCsqJ;x|j#B42L5C7Ih|i zv$ACR7h2Bppc2KP2$5>|X`qbIJg z#wtvWWc7>BO(0ci`19lKP@~PEf=pTb4C*;xwP2S5KG3Pr*_~)q{W@7tEbUXjc8*H1 zdd<$w9TeuWEO9=uN|V=>l+AeeeS1*x0#J+J?C2O6#=h~i#&fRu=fl-@TD3DO;^vzF`H9yqBi;jmZ$RuV@$AylpTSpyJ{A0P7Fxtiwb<$&^Cy){x_`AXEn z4kbPC7%9bdJ_xB%QQlDcVT@G53)YvH%an}mipt7HG@th_7W$XX%7!V$Ilufh!Gqs} zjhg|b*guh_Fo@d(&J-ru)261T(nOI;Dsg5=+T@h0X;mr2&Ho@HlS-zREHpM*sTAc@ z3A0}EihB3X$MT?{O1~)8D>AWw>JF%#hz67??{Z1>Jgzo2#l8P;Q|p-Y-*V13bz0A1uCo|lYEme+WkO)4A8=z_{o4f&PC zY!-Pr+SI;*e$Alid>`Xz(+%%6l`A>Nk}Ai)K~vR_heTS;W4+Yj!7HHG7aC*ca`>^3 zhpBMhA!*5OwdG)!W4Sovl!Qh!dU6AikL_0^!5vZiiuGKY3>+0IQ?GpMa-P(L@Zf<3bw zVK~ZV&4YVz(X5R~JeGqLfKt;N;JWlNh%o7*FfcF*iY{Q~buut%HR@%A2~wlm?vt7n z3%JPVG^}cJ`M*zO`p{c!*#8M*A^S5(`T+f0DB&iCHY&G0ZG`5dh;h;@!*Y(O*Bcyx z|9VGukwg2OqH3#q?jwF-Gp9*Al_wqL_B`hn<#f`}2MNt}nb35_N#EEC@i(p_B?2Zj z=SlO`=?2T7*=aLGS)$FnQIZaG@;(FWpvOS~h<<=ltaIS!WDFX?e&{Dc8d$I?QY>Q` zm}RzHNt98Mm!FahD>OTsMevM3g5>A;%1x_{V2vUHlA^p9Zi}^~{48+e3^giaRH8JuWkaia@~0&nSPx;dtF3!I3m>>5_8% z3Wl}KdKr;tBjILKe1pf4B<7*V)3WH#>P$uN?myQ+?7~E!RgL)?TLk=xf!bYNNynlD z?B>>%f|KwI|9^cL^9_`C3?Wj7R957-|Mryr{|O47D-^YOTx z`{6@W1Z>Armu)2-9TQ(1ACRwb%sv{Qcw0A3Rr)m)hx{z)sTSK43_{n;)hdv;?#O<& zT+@lcS~0&p_pWb*=$Zx?WL|ZUg68I>op9Gf_0DT4$#Pamwf4*Qf6ZmHRau%gh7fmbkgW3X&K|C8uuQJ#LBgXo+n?3SXB~!lfY$R z-|@3$9DPfr+PNjvk)lR5=>D5%1q9>X3VL{;YM4^eTRcH;x@7;D#9|Ry(&%(hV5NY+ zsLKX%1x=osI_hO&h~R@btvKi5Dqm!!kYOB*z3t$}=Qb!)ro?gC?g7sB*|KSRc4iMl zdZ&>2X#T*!xmL=@S%6EU4xOuq^FXOWZ0oMN?Zmx?Y?$S*~Me$CA;FQ@UB5t>II_BlZHt@d9L~+?v6He{mRB#M;^oIZr?^K; zx1}Ad#{|MY|`tqouWu5>L^T1Of+c3oPD%t?47WINQ=yJ zPdCE>DzCQuK-$aWHY`f5p1WeBKJXsP#ACHo35kjt_PX-HNS*1?R^Dghh%3Tll43Gl z(z(S)+N~!q76H-1MwfhQaM!!*sdP#HBae2YbpeeEV9AbNUT)iz z;Z9pTSAk-Vs>0wu9lgD+Kb5Ai+x5G>-ntEO-Y#WXNns>(`kfYTBy+Dh7LPwZUD6&T zPq!(xo&1vQIvqy)-832^WA9X0WC!ODE_MopteBj-JJgp46Mp4&aCy1kJ;KwNW3(39 z37hM=9p^_nq|})@N;$v(80`Es_WBgoDA6{}hP26;l2uS4D`qcIW_#gwxi?Pz{S7#>SU1+yjb* z;*+i>Yt0nH>jXa=+$@Vq^A17Ffu10ebRjks&ABq|Jb6-ew&<-^p1!Y|(16=2Sf2bv zqW8?oR;{jyK-M+l2S^f|P2p!#2xgTZk9RL)fMfE@MkCn|?yOjqtccEXs|$%a{~N2= zZpv)p4Y$!GaaHm+(|y28&s>c8iN2~&Q&T?uCx%c7cBKl6>O6Gvk$c+E{-nd6>m@zE z(-Te*Gc6^7%cZg5s#75J7>M#xOSH7I((m+!aU4;zdd6ioO{PhXE+s-V{=9rwJaV=F z)%xY9M=4Wt*Ul)P11`5~bHc?JY!B&~Eg+FRPCY*Ucu%rsGxO-WJexh9k{As&wT$>N z1ydy`365!pIqS)=e*mFquGfEenmTmQJat}%7ir#d*S&3{J4*cUg~QCHV}xYmTENhe5Uzzs7t~vMQ-%J7>Jq$|=sM+Zi-X6k>%O2MF$7DQ@ z%X;+3m$e=r!Cxt8=*FN9Q&=f08*Qz5EKj>m3%y^hEH9>0?28-l_#+UBET0hk+%e8j zt5Y%LIvt)^NxnR!JoPQ_nwXDFoSgT09D=OCK<+-B-_>Q61=+^*wzBWIen@ls_;{lF zvdNi4^x#k*_tyqhXA9Zf(Tiw&%C$OmB57i%sm|&lF9@ZLWjCzPt#oX0T=LqD8s29_ zN3h3~5lPv4D*X}Xi`m<_Z2}Kh6qzvPmb%5E%%YVSjb^zvyM(M0aiO zZQ{O+Sje=usMRcV<5{(~gredHEQS z-3r85;yawT!$$*g#+dX2{3oXJnvR@Y<>yvZ_y_CXG<8;f5WcbQh}9zMA4$JCxwVdc zMKI~Sv;J=b9-E{fML!)K9WiodP?e5ffN=N7tz8WB^PJ7zVQ9!e5J;uTsjt-Fb8~ZF z$`Db1^osvS2>d)Cu*T%5vA(_!p?OK2utAD8HZ?#{u2|=~OrNM}I8Ww#cgC8M&xHE= zdf7EKia_*OPje!9r!L!n&>{jvi1J!FDXCN}IZf+hbft50-w@}V zLxF+In!}~I%2t1w_y4^Fz`3{Q7Aei)L})hIiSYA#c`q(3T`ieJNag@4g1Kc>37+J%e}x!a&3F zNU>Xdd3@eAUs?7tfk-yo!w2OSH~UDf@JBD;9ZPzf$n`9q+YCX`RfCjW5q%Cu`~+ z$F!|j&*9~DE>L{O(6xrN=vyv(ZC>m(v#Ff2lZh{|v}+9x4e4JW#7r(N{n9T> zPnX#lPB5PPG^*KTYfBY1QE9FptzSol)d%j}8;nKv2VuEBL0ohJHvVxyBFAirde-)@ya5gzsYsx%dVxk?VKdctU}t$CrD(Rz z2q3spoYxGZl9Ex3#!5z96m=KJ($Wl0WNCZGOXqus(pxTlAo_6I2+0}k&UfqB^Nlt^ zU!pt%QrJcY zHy3J(ateQ@;UVpB#P6%kr4su1^eEvmn=GVXo4Ul=J1ux5Ycww3N073=K4zKOPl{Gm zYf;tEd(lJPZ*8OX@8^w01P4nL?S|qM#NMvD&7nJWJnO^)r($f5P)n4_{u~}ChR-mA zZE&FHoOwtMN4Nk#;b&I`&TCxsc77>RE}Lb$(P2(tnXg|>-SV{}QnXcZHhj3kQaVAz zW&2^1^SL`q|HC!*!zXega_JvsK)3)qW>)jgE{2+Vd}=BHYL?6y*QzhaB_|W2kV=fV ziOR{#XX!hX44_*M4Pxi$KYfoeiTyQSscI8g0ua=bAIhQ>ugs(?KNeV8xda!;=czwJ z+yKyMG!P7=&n0`-FdXuHhoP$H20-O1T{2p&QyVQul~lyc%+eoU zQJWBBFtA<9ipAm@yJED7v+FKW{o$d$N~-w{%^RlCt_Akm^o1U)ouAhFJ|7fuXL9h* zI`~?G&tf{eKgl44;<8Ht_`l;aV!S7V!7ygjC+q~^ppf<^r}V+$VRe;FBM|4H(j0yb z9N@?cy3SGAJ=%&gG$zy4^OMV#HGa}!_uReHho(81KS}KP9`j?2kL-3*9AiijL-S`! z7818c-Zo+OV^EFcXw1O@5ouD3)2*7SI;#PB-|NuCZ{{T~kJ2v&)BGFsL=?{lNS zg}dGyO})cCD=efu45!s{&e1}v;C%w-wNb)y`qQF9F2=r2*FLsc7Q&D8)mr@_QeIWT zr4yvFGayo;pUN)9g-U~Y5)3sFZZwTHui%^G*&1lcoYYh^KEu3ZJe@2}v$@AWc|$|b zmLH>*j5eYBS4dq9+SY{ww&^?>)1ewoFZvn)IA(H(@YxCeIvUyHL?uz`k74t5Fw&R| z*f$!QWJbwXA0=xvZ}Jv_mm{bW>NpXJv|gM5l0`S;f{1=^gNVk1&XLi?jR%P?y_w zc>H?AIiNFjMtu>T|A-I%)lxeP3*+o$Yg^Iu5$?ksl#xT}V`&{FJ3Oalj%hAM%(Ph} zdaRL}$!8kOMPPozWA}-@B0Dp)9HC+{M$+ z2j3~l%V(`c4-&_6O8)*ke!Sq2D1x`Zws_o4PcIMO6DDCb}Tj|C?>3eJOXRHFz2_;(6M;)>rBG$XA0nZ7;Ct^MSKL%s_^s>PkpK?$CH;`7^l*bUXW~za{G1$pqBU8)us<#X zQJy=wp6e&{zN(Jsl+3HjA3A;ZMlDai8@iTy)~o)dRL0R1Oju+ zXMFMEpWw(kH%9kv4(XO4Fsm->4!+ncS>>u@D4OA@L? ze_Zz(*I1AD!EQec0ZVBHa$DGU)IBii)?nIX5TYNLSk=_~DvT*b{NXOiMxN=0WYRtW zOcFw=Q**T2fQ^>KT0r`^5ADOZwo&Y_Lu5v#i?BOTZmZ7c7U>2IV`*LFfXY2<7gGD9 z$*njU;$iRk&dA)&D{N(l)i~dhK=^@cVPAZ!vf!!PgzM6>N!1yCYgFK*@;H7kDU{T9 zBNR&X{c&x#EtKN{xcli$a1pQn!D7s?(WTY@NmJd{nG6I=Sm0%vI6Fl4W@HyX$-fUu zW`T_@xDk4}!P2ypjc4V|EU?e>{{!>5O3dQ;^$G?H1dX{FY8al*e z)=k*UC?`o}K_p30`;dU|p!@B&fgPA#9$Cd zMlAOM9Id}*pqktT*IVhdk$D^SCJN07eZiJtdO=UeWTx6yP0o#?EFIcI>m`CLwT<+L z>&cXecG!_QSO^l6dCu!Smd3bCU?p)o4CtDqWG_JE^2D@?mHR(Aa6!mjvY5ogLPxMe zdhztQc}{~EMNCn@ESA#(lpS%Ltm^hpb5OhBU2Br7-jay zGvu2Rh;T+Cl#2}#)!XWtq3`~)JhoUU@b(PjBVb(ASC=G-QBhGb8>f@}Q5q^bQ4yMp zP&Eyl6_co>jWsP7lB27u+tiR-aeJm&oqlZI7jdfzqbR2Z6tJO6o7Zm zmhg`j@9UFA%}jL~imSFH5PEw?Dwc*Lr&u9!dPZsxDVXy+Yug_K%s)0LSv0m`&)Zi_ zgm!L?#)rM+$RI-R6f)#02}lOEjT(}pUB*a4VI(vPFWwYu0vA#=Q;r-io2cem7@pRk zNnJ_FT$lCgQHy%_BXYZxF2FcNbhuvQ=(_C=#>;inW-SPlsHw~7Ya&adavO|_R)Ly5zfL8s!HN0KwDcDfeQqy+CWny|NzW7HDQBk9{uyj5DCZKR8xzMwA zFjSr5J#5SXEPNTOGc_gM`>0h)eAS{Gx-)qVsL|jTyo#4LfF|C|5J@ z;1h^OQDJdWGBwQ(yDJIY#ZVspml3|%3MnyX50h#e>yDELv?QnFxI1!o~vh!OX znyB%m63{G{+1y-ry}!VymgKRqdPo?+F(_Z^lldiDh9)T4Usd94BjD#1$=#lS)@jhQ z+60+EWbVE*EDjXMpVQJT?WCs5g1A%UhtXX%3h7N!1U0t9e}7iS%G+XSNicbL{jO5z z?MK5h!fNHHdW{ZtUf?T3+rwV`NEkxKUDF03yIT+Y@FBBst__)vo^hNg9hSXW5Cl}6 zDl0{i>r|I&ru01JP1I$$5OBWv0Lx9Qry?@3m?;^Fko!9njva037;NlDMk3r;h`%as z*mJF`XX4*;cS^p2tDaNP-*XhrfyhM0ELaCmAxbVXjHF5Fr6LwVReW8{wt*pFULpjB z4_NoUkms}ZCqp{3HL@pGO*6BAU&G?ZF?Wfl4yk=6ZuEzG;XIPk% zvu~6I+c-sX-m{hL`LcsQ1si*LwR7qGP`(JvS?$4a$5>9ZnX|MuXi~bqguKp^ zCd2X};_Fo+g5tv`9w5im7MFRQcApBQ9dy9{;1-gU+_(7Y3-}AAbn&J;bywSaYp|MH z5lCh$3>}ZPb67@hvms^_;(l~9)>Sjp}B6IFaIGmqXbu>Db~f4Mf-SD1eS!B9uYyN6N6_P=U^=A=0jZC;U`CURx*FKJjj* zER<{%Bd*sM!2-br&NGF37#ES=JRVZ7F`AJlRWBHYxX?kWEusp28bg*SHpqn-xuU+f zKJa#-c+WJ-!?!m?!CnA0k2?vJ(GH;!>Mfv!52;Qz-6A$LMg%Qp#c#R`M`GYCwFJ#J zjxfZQLXbkH*xlppmAvVhGK%T~zzc~B$;CYmo(jgjT_&bq+>*)us2TbAf7N91RLy7- z(U8W6lm`oqdYt?+MLeZR*LPg>ee3uYPIn>drFHk++IJHqYPUF2!u$gX@&t^2y^|bY z?zv%C?{LY#Xn-iSts^GOZ)|C?OYd;w<_|n?RBBp*H5{UvP-YBOLSog%BePiP^sL zrs?A8f@)0z{PpzlRFz1V`%G$9Xm9tl#w zWCU^blrf{@A-)2_j5NBRi$d_nXiPLcG|?3s;-kWwgnfqVQ!7P!vyrz@DfD&Yap z#puaG%^_@BhWLc`s*oGUG9GD;V`PF&lDN|j@cV8Nu8+W_h_P(?uHZma_pR|vx)m|d z-axNQTrl)FZ$#%zFW?6*Wst)0y(`n(n*YNuRGh^-n8B1if*$gofzmCtkWR%7dzztV zbqweyW+{M~zmedytns_NK{j-Df>?Z8#tvQg;OA}4aeC?83Yk{V3NCdsJt`pq6zsRQn8D%xwiH_jb_gDxO4&q`^sJbIW`!I_G*~A(YIG~G}-Ya^Mh>^wIs`=2L@Ll z1z{LwT=fmWoERO2=$gd}A2E786|y0QW93mB!!P052!GSHcK1C#EFb@3*oB;#x?Sw$?t@O<7JlO z!5&?_W+VlDM}$SDObq%KY=LC~H_i?p`IPWBHa6xUMq*K2WgjyF^2bh*Ze3gXs6qb? z7xhe>KO!AnNM&!Fe~h`r%w3qc$}~C{Mn$&t8S6A$dtx8WU|(uo-^ zca5G^VY(wW*s|3G5eZBigy#zuopg zkTE}A+;YVew8zE^M=WY5;&rS;Z2tC5p49gwu-Y|B4gTKSF01Ox{bhWhH3=2>^2#R! z4l)^_BX-Fj4RwZA*1yFOtcDyTVuFncgNq}lu^`ek_}wOx7acycgOUT98IowB2}+)I z&&BwwMPCFO3s%vr(f4PP2{Md{U)%Pqkc344Z$&pulzrrGypP+^+S5dO)}C<zCUalV_z6hm-g09_Saq(fY!>R<+>dDuQhuXk5B-{l z4!3DY8)|8inEK`tg&_~!AIzu5a~T~0m1{PR&<3DVPP0;(Hkt%_HilO|V?3iB2{@(j zn&!7;a#&iUG&-*7>Tw|;H5wDb?9GcUwVgH#R-O63+@@ED#`=(4g>mn3 z=C`e+kTP?H2>4v@p)6Bm*N}n(E$#{&2e^>N<8SlgA)%)zx3CH6hY}dhhTQQx=VgCc zQGt_$XOE2=b&R1!tXsgpoU0k7>O8(Qga;dIql4K{bJ@p>Lh)vAe{PuXf=-ELZhGGU zlFc-ZeQkQj*<&a7>r`1O^s>CR(#MJ416n#n2>hn(7|=pQp?&Kf4X2V3?^F~NlBI5l zHQ5G_rt3V&W7mJv4GHf#Oc5);^ogvb9AuhGtGxs}`;IZ#XM($^9@a>zE)Y`oiA<>#uR6Zt@Ut zyO6$MaBEt*0=59%(p?R~kySN{mjSX!pf^;V*88(b@f?izZvL}jB=PP>Wd{YCeV;na z%L2cEb2tP4!5hFO6STx3ws9b3p2^6LT9{%t!p2pm>89GRx2C*fk4G^q~s#jqO zxADV5H=DbT1=iS~_t&`3d^*0p7}^)9{zm)RW@Im$@A`B`{KsJR)i*H{Pz^F8;p*EL z>1{dJyDv{~McsB`@b+zD1rc9Ho(D+8`7Vq~W}?Ip_YgojKI_3Isux^1Dtp z&TP}=`;8MS^FGG-sxtVJVt91KC0Xdw5#{Q&uD5!zAHj}63V46Q3svKbXswHdg;+`8 z{PPVZ9F~>u0KX?G`q)HCB6M;SLyQFBj>tLWcL;<>-Du$!gdMp1{`Uaw%6^{jETK`W z{1&0}5V7pf-htu9W;8}wCvl-Fdjy&i&UNMvI25!U=p}O2sp^UB@4>C)RK!DF&gT(K zUtKFh?TBZ2-iI<_8N=bJ?n}fz$D-n8sb9dT&-(+X`&4fP6ADgbv!xJ2-L<^{b)tu+y zs95;ojG^sFN<@Rnn1wbWVPLL;QU@mpWcCT8M-6;WV|jw&7C0#E^h1q?@!Y>6ZAM=~ z>J+SpU4_(t+BdEvwIHq;IwKuMh4hBL6u0~}c>4+IrwP#m?prDi4;4z0CN;X9pnU+89(@?VDa!CS#6S*fIIhD5N znsC{*{*pwS^!FbP-(p=pIcU34_zIyt@x}3YP>-Vc_2Au-jHc2x^euV>3GaO7fZ{J4 zHx@?G)-CKY4T4y7Y!q)Lb0^!0^{8(UDm`pNHj8OTxjKyDZ4h49WdY0tAwt}8xNt|Z z`q3V!hhopa2H8`1bM8i4_g_!1`rqB3?qpXy;5%sa?1Vld^d{Rxj9{nPAy=4Y5x8-A z!B!h|EOzz+5_j{TaKIWQ6^E3e&})FL@&3k8<}INDF4L){a&@}Yuo%$&Mpdc~(Tk}#(dH!nj1`!z%Ejw=JZ0Y&+d z+pk`0?o_uwKe{Te2GF6ks?q3}0pZW%u~DdJhQ#sTyRUP2wGX@T_E&FT9p1RR96SeC zR&eNEKZ*)=RcYbkz`Vx1a5+DhsZNc6a)$#0BK7kTG=6AYZO` zeH&_W&L3o4(q<>JW9z{o+O4gS*SaPJBAJtFics+p4&r|Z5Elvtp)Nc7MJA?M4kHHw z(k9I-XPaPRu-L#AXJh@r`5Zea2E#mNUOnQanD72hToa!;BsIc?$nW*V|I4vc&+Km@ zvPUAkb0U2Zy;U8kw|xZM2`}b&p?D#LEdVzc`BN{ZbH3dJ)nBoyNv*=p{G|L>@u*!> z*xg}8NTz@m=!}7irtTXVL(-n_U^)c0h8MM)0WszGDPwymIfz`V{hEFsXL7kAQAcEO zW0RUrtmsm3EXMA*(HZO?n;79d=uVEI;4Uu?lB(8DaahzUG~9D9;h`p1$L~(LlTU-o z(ibr(X4s&>e;H+*-9W^}LIU~yq6#$JmlpGShzuR;!_==IM_GZN)Dan4^2(6o%~IAb z64c!oi*_UY?_`y@vvB{Liu zDtE6{2iFS*WQF2E?ech4Z9h@pj5IcShqHcH<7|ec4f2S)-GPuK4LVp7C4eX!!l60p zzPWLWhH@Z~;G?2aK(l=J{{3I^R$USo^D`X=0{L7?aq-G01$t~tLnSGS+oY169c;Oo zZmI>@<5d_L9ZmH6xp5v2xr>cc(+G%ZiEQzHfk0qEex z^S{m!fC7m*ImMK~b(%0gPn_6fr*#NZC?&@-Ck`Tk2KUS^;wIMDvu6eCSxn^_j8~Gl zVfsR$NGL1U?CfC=mrRh&MpJzo0J5`q#Xe{XD35xcCPYLCFpB)^aZo6LngU=RnD0+k z>+b!kp=<6JP)|=yt*&QEbXeiB$^NH}rU=u&exdQG(8}d1M?{DG7B+%5%93E1#;D>fVJyEv#r^ z|9V8H>g2_KDnDb@XBKv+?`c|#AtV;4Psn|tL3S(Ci*2V{iC2j^@;6LPDqlv`z@I!& z^LznkGKH)dYT28uovpdb04qtSUGiUxW2P<^MX=)kLauv;X{W!aCl-`u{Xj%XEApZe zl)O0oZ!sl67QVk#U;d6I%?J>Gb2gz5)_9O%R=*zN_M znmSonjXL7*L1Pgj8GKPt7Pag9m)a6aj-1lHscCk0Rl+GQxSx2aH8&&*hmDEpPTrMM zv&%e`RJI?A5NEX%l}x0JqfdxDP63VngircxRLkGLE0upZ!Q>vj$20*BRnx{`X}sO# z*C!U^nv#WuNO#oA7Q?dbc9od z&R#_634O~J74IV=3YiXj@qbH3!CwH2Es5Iiy|MqYye0HpPyqk`emIKZzxAEL7}7zm z+OjFF5A^{c?ah$FKxpuJ=zq$3VMBtt^GW{*n^u3pc^5*HIPy;gBmN?^Q0RMEBZCbZeSINaK*0G6fn+hn;fx`a5SnpF-LAasA}oV(MoaiWG{Q1z>!e415#c;fIg8D`PU1E21FuX9g`Qm1VfNUIXIX z;qPp1X8Sx(d%4Rf+s}1aY`{c;8t|u#ht}Ogvd_ zTfolWN_$PrTL1c$nqj*6TYHHvoEzG=Tq0TmNOyB!7Xmhj(KBH|t_3bb>X?Jg#nQKy zCUF%FBs)O4Ju*I?1gPC;6$vxZF+T}HPMqLZi_@{nvQz>r%A~=;h`7Y2R?&0l81$le zB_$;nZI-I=iVI+jmYTaOXsT*H4N=5;KgI{YD9Xc zzOBw4@#n4EXd9E0JnF1*kflsTd372h33#YSA_0bZCanJk86NV~tFMWim(IxJoVB!m z8EyEr-E`wsUPB*E;qZXHiJxy6#vQVLW(MgU)&i+dLLqtN7Qj}sK%afa&q#J4a`t)a?3v#_Kh;22|u^@+JmMgA}J%Dmg0{`dU)}JZHH+jk4ZlXx;Lu#rLmHS4R zKGYc=n6O^x9niT!hw(ewJ^Z6*?%hf&e4S-)^*_I>Dv)Egq0vBD@q4BH%NV}+>-`xDfm;cpr21NoSS_o0lhp3fJ*B! z0+hx?fTyg^$i&pa0C^vG`227Uka%&mVw5r+|}!obiL25Eucg{^#a$74G$*( zWMZZ62OY}Y-Hsig1w`h%4@s`0vG-Ifp{3)}viEnH?Yyz9G3ID~|km~6B-QqBo zfg0~&d;66CQ4RBx8;+*|)Ta;=rD!`4Oc(_+6ms&l+hln~2UFL1;91VuQC?o=q`%X` zo0yWuhVz+cz=rT$-nrkt-@cBk%2ojmljbm>p>Y6YJ%(O?xkVFQ>iQqP?%O9+95M2{ z9VGmnz56Jea&2I}40ENNvfGpEVs3Y1Ezh9GqGU{lUHaaqXCo9So2;#hLDYKj^siP` zDlQf9GLzuOqACi6P+x1mdf-92RSmisxHQIQbV`!vDrc6PDi5`K?o3L{x!YuKmP!=* zF|e?xn|)cp$83WSvG9Ng3^F5t3wvj?H*^SjEQk>9q9o2+e@gIN$SepjY)QQWP}UC> z3&y{i?Dh}Xy$rbapnr z@ll^4>Fm|eSQs?U8*wjniPaaPB}UD5&k=OXB=U_ncY%j~z5?2V5;YxX7MOFeH$YFG z66gb`0{Bd{!GkbXE7?{|4pPg%(M z4{mV?3EAhRpR58S)u4Tf<#cB+H+T1}W(wh|vzd4%>fSNTuCN1#_Q#{j81|5CSee18 zfIpo4&YJ~G@!PE5?G z11K9T_2zP+%tqf8NxgT_mfPyb+@^un26wyvXF#W=PU?T7=3tL}88F@oWxv+gKK^SU zpOivu&09)ssNd~~c<<2+F>KCery5gL7xMxaa*^NjnCY6ta@8`EXq82vI9mnOiUue} zclWZL7GVQZ2~mHJ0<2Woe~};n2D#KLfbIUl^=u-gAMk*4L=#K2&5cVWz=J$^X^3;E zIspauXLK@`E%Ox22jDSKckL5dj<^AVBWLkD6x@;%nxJ$D5h$oom%FvMFS&%iy8uKs z{q}eY2l@E)_?UJwl$3W$O4a)A3$#F^cxCrXG;30}W4qdSfd5eD`6l0G#g?w(f8_L4 zES|Uy$*p5-E!`4 zHRvK|w#W$t;R_%@{U9Xvy*o=(@%z2)a#(y}=`X)2?7o*D#ZF2ZaF4P5?MIFle(^gE z4er^crDDUMJhv{=F~P>2<%ITD&UHpD;dCS-0&m6JIJij=$YOqAx?=!tou~qk_-9vE zn1H!eV3zOrXh_?{lyHmE`t9V3`Ke9mNO8J>=~;YKlze#^Jtyq(h4Z+VVq`>wyIwdT z-sdI{%jiklp?8b=7M-_G^=%L0JTW~I*sgP`vJn*Ry=WMxsTnee**S=Zxc1#!|)mdzoWl$w4h?QU<^M2XRz zOxLzH@Y?jrXjxodwnT=29_ifx!`p|b2`&+f;TLbc(?(g4;08&hu^83l)e=s~M)E&! z5uSWIsJ*e)Nm{ydaE~s~zgQG~JTMc$zPI!~D2&{ZBzxSTZN&>w-{eC^dF@3DpzrWF zPjt7c1*igR6?sn-W(gi{!16t`1!vpB+fBtxEYjo}B)mH9%#QVIYXDTP}?WN6_ z3g8j8z6f#mXrAlXBq5n>_-b}->D*vkMvEB`uOedBW6DR1jELMI_2VO$BZ`|3 zQ^i(8h1ew_&hggbVmU#L91KuFr0@8;)gPkd`*apPS~Q`HAitX;&n(}& z38#SM%)nEJ-zj6xu>N4aT6~%)#Hs?FGD2WwE ztYu7U5N3ajJt(}quhR+G!OFkSxHR>@&feg1)nwOd`gU3NJd)q36p7-L>M$i-Df2FM zGQ4XZS@f-sEWk?0d@(2ksVy_|30|xle(-iyLGW+#!`FPlnDs3s2S>;GhZ!<%$>1&b z@GbABQ?iu5H0np^qv_$Ed~R6k5DEj=i3P&OL!{*q40V;$ZD61+^z|vJ-v3GADly*g zU10RdMz_)HL;g7rT9Y}4#hC%R_yri5ruQWpt+TzakII%l{h&$2G_H>wxEz~bi(pn| zQ!)Q-78dis>M7Vvy#Iu-im;!_hK*SI?ZfcZF4IExH;4J6v^9L~_RrAM8L}b!m5q%b z01I2pK7tHf$fj`sqmaojR5YB$io>(BnbU`Q+XeaD>|a(Pj7xrCH?O%8yRTJMictGi zi`VV*WvA~$w=uX)iQ`}0kTva`=NGu~sQ{~*x9%NdL<(>-*CD*HVnV@MShr7J;7sca zQT90T>K(_J82?Ec>Wg^%L}|(vacxSX!A-O4yYckhZwtwYYivGD!n=KE=DpcF)0d63 zG~8sItDcuuw?j;B9xU4fo^rYcogutCb4kfASZl_a(}_VKc?5Tm{`<#`--axVj9es) z!|0?NlatEZ?$SZ*JF!og`zw6)@|z(wxvU<;Fvie!$s|54Dh0iPD?;03?UOL+T>G^@%S1h7n=Cu-%0kpFaJEB`L1cQUT{bPeySEfZ;}K#G`L_VT*A`J-8Z|z z@Vp!;oLfCI^>(-%Z5N}4GC`5X-NEu8_O?$Wia#7&5~_TxPcPM#3rel@5cG-8<}NXy z!4Kz$frNJNZ*b9GA;1SLEjXZQyhXRW;}7h#yco{w2AP*?Awal;B`G0kiXwHw1oTNP z+Vf5yXBoew;e032twf(Wlg9~EVx!i?0yfeN)u%F;a9#mqs$A#p|)uZQD~ z1uG|=v7pxlrIUl*Vp9rMPN|S<4pM+6V`@@fo?`>*vD?vM2+}B09A=$6YHme!wURBw z%mqRCb}-q&{n^nG*OZ*pwAB>|GJmn5(WB>1o=X5+%@d0!pN_&oS!V^5eK)ta@?cTX z4QQ2-h>&l{)Xt2cMQiSL&0JrE?Pwbx=pN_xSmWc%Z_lNk(xhGZ(DqP-c^{7)*tx(R zc0V?IBipk{hQft>t0q6j9)<6SJlXNX+6v@;Kx1+#>J{)UK}v_pPemH?5zzW^jb8M4 zC5dtBN0MOd>RJSp3uE;bW2MPx@idSsSaq>{Pp5}Jyu`d*{sbk_VkG)xLr2N-sCkmA z%|o-7w;+fK-O{0GsFWXP)K$4U&S!DP)&>@+5N5|&4^@656GkF-J(saiqy5K%{+CyK zSP7It7RPlfXWcgPxtR8UZ139CATDh@1R=KnbWi_nBs#kQzfzfu^!;Z=_kW5W+|Ljw zi_)N}u_Q58%*`vE^=W|{bN7KD?DgrT%lFH}#rpMUUOZ$-#(Q9o52sSq)~2?w@Y7@^zHDoI56-Zf>BvxxWI(cRN{!|b`$^|(ToWNvgAQscVxecpA_?+=SWvk!nDKSmd+tyT$$V60V< zjLLv?q=HBVoEVdRu1nU5%ahO?=0gUJ#hf}X|@{#a%r#CP>jm{hd&*-!u;~U z9v8=$H}F3nOA8jfEk|Y(gwxGgjkMF8))QwH{xbJ&)Q_Kq*Ozm8Q6HP zD3mP>(N_s#9_XqK>SRKfUVgd*?1>yRF4sCm?#*l|mue7+Z;CMoHaL_>sBv_^iG#Pr zg-hNuEUerd<-kQ}hEuA%>12kZ3+YgoP8JI>__8A9%9m0Xp7a0RPL_RVeibyfv}Bc6 zidWqZ+xIGKU7Lq`&meyD?j?9#^vl_EIUNfe4CDG&&vtztY z1WC!hBejApP6E0XM+Iuk*`);vpir+WKGx)C(4vLRKVo9=U#1nidbqC||GFKq;l;Wf z&zZb{@?Pz)wyBC5VjGLiHL*WMC~NUr2c03M{gI{wa=H|D?_&6(O32^qV7GEc@52Yc zB#bk=>hb{=4$itU4?v2H5tFTCh>R4j?oxuvBoA`LzntlR&0zS%k!!V!UB69%Bn3f& zO!XM&a zc*)ulR;|zA(9i_ukfV}SK8M9 z-nugAfSqR_fw=*gO=O5bHc=HTqAa4u8lK(3mE`wwO@d|Yv`VpYa3`WogizGH=>OR| zMF4KV!jSlmz;{X;86+}-6i$O1J$XD(ozBg}_4VgiQKY+}4X5iro{S%I(j=F^qe=+N zkS^O&&rO*4W>BdK}M(uFvi17vQ-(w`U7%PKoz%ZJ{k)eDCT>K)*(eC00CORl;!X z_p}l~HMO)Ote)w${u>h>HncrOap^ZAdvvAMdc)-J3p4lrwifll;mOV^tB-Bcq6=wI z!R7Mu@-UBM=5+_4_d)9DJ($WE20zO0v4=jk=)nVSOn7L;T-Rv*6tg2}%0v)C_*H2D zC|=(jq%4Rhz%*Yju6RaeoF9F!iFT~rH|GE4{g($yW2cbM4@JSt)6>S3r2uzVY1RKn zceU2YUiA4p>M!0b+;&E=AaR?YG*WdLFBcbeBSU$vKNQ=j6yWa_``S9IW)C(heIoB# zIy)r*v9SHpH?zpbrY0h%kAG1cx=pj=p~67_jEk2Si7=N_&e04DV8B<@%MeD!A8=BL zBvW4INCSBT_r+CJtE-XP%_IBSOE0bPU-qAAkPs2SzCT{=5qks0agBJNG=PHkJpf4Q zhZHS&qriM*n|bdR;V~EM#i*@n~wQ<|kumKr#xmPdefkul}I#fU#Se=QB^Vu|z6abD*UI_~JMYkB-tBrVQ!g zMIOs~8p34wu4<~Pl3F@|DAG@ZkO}K)RG*vIE`5Z1UEJ7nPhRv@eIw%5pXe&P9eAbRZKY8vV9ZpGBXvmOoaB={ zo-hH@(&~UdVsZO-`%?R*s}%lP;P_nAd4(9PwcECzH`jTWDUf0_t*oO>`VW$@jsyf1 zcO_$Gv4K_`d~+iY5t^O9zhoMA`~V*gB-f8)pnLgeMYK#ZE~!MV%j4AMs)+1G`}@nO zQ~cxr6B}E4_uJD{)=5M}#O_gLZCdwJ$JB5H3ek@Lxo>VIe)9JRNhDT<1_?<+apG$N=-uza*91x%xJ@HvKp7byBx7w&hL0!Fpz_8ormhp6+ zzkmuUsos8x9`sjI%H?TC zEC1Q7)}=~;RR=@Lm|s)*`QgKb)YhXSHJA!ydjq3cjR!P0D7RVyHJ>#ER35p>(sth3 z6+-YfsDpnaBCOw7{eIgNP6|8~l=@A@*&cISv$r4F*s#ag<@vM=fPpiqF%go<1WbH< zePb~mM^s*$JkI=N0IwNyywKIBwjuVg`@dnOtNwRu0)ZWpQwpP2BG&}ohs7i=3mVyt zH8?i@x`lZQ`@4c0ZCYLRcL&59jx`8^R1TMb)9wG%+rjpf3GZkXSBZYn1Rx7?ocAfjj`&b-vx#rsxv@|uz z+1XX1x(ikG`NK`LO{V(W9-!Lx6xZ=AQ|+zm7E8t*&lhDY7h8Y@=qb3pwmvt(_RiDn zB~n9x+E0|KjAjjDDf`$H3(Ke%8jhkXhD6wmW|!rXPOLGFj7sm52J{x_+Y!T_-WZ3b!LFd$z^`F4BL3DUX^bf+eu(Uxhcx!8`b+Hy|c4nsBy;wSO z+B3`KW@3Ux0J;^J4(jdzpKv(4p~;D1z=Or$v_;pZf%5;Ye-nr^+jBFcwCSaI&V8zu%Bq z((7!;K)Mlmd9S0K{X_ZA;l*a6@YFj25$e8;H{X#;9g1=cZtGBQy3wKKf1J2*K>0`ReV#KF$;6BiKw--^(u5DVqj;u0>*0c&Hl-7VAxq{6BR zDD9^j+C~VPzN3uMXe|cEd@C*0+h26x2~GhV!?B(VJgrR={>-tjV3bRl+&<4gOZ(Q- znObG+ok||3t0qFSOqx|msZ3hK010@!Q^c32+cm7`mjg#7ND$Uo3{zMe(Eb-1B?(t2 zoxHEL6^m6r)$e@~p7jwsH+@m*dT5XX!~qLxu%7r-jTIH|85u`+wju+a_6iJv=+Udk zpWVufwMI@ygB2Q;JFidOrG{E0%~cUiN(oD!Q%>DZ3IcGjrQBZcEOX%uoshNgYqc?l z81jW(KX&63$vGz3eEfWI^tV#lI}qpJFy(mLhQHwVCdPEKH%`3{%kyjhqe>_#n$Bj# z06?f6^r^map$L@9+ zf;7pi7K|YTyW(-a?jR%y&v?D+s(0(DO?14U#a~H6LL!5!U)0+Aj%d4KVz-M`t*-?&)F3ySOX~r=p@#%g&)zGpAz2gwGT6 zrJhdMo7Z=j*W&I3+qy z;UJ=MUz{FjaDk?(Z{*ChxkL~n!-vr|G%T#7JK;F>C#;IDO@~Q^Kyl_0;+(Z; zVB@pYa|ZkV>QAt3;%~we1Q~%d_nc6toX|n!$-a+evT`VlL64Cyzj)T#O;~wU-o%uT z2l7f4z$@P5n+Fpkzm)Fggs{1f>&5xuokdkf?>28oN=>`c&QMyx7y1Sd-!#;cK{?2*-`Nm){ z)_^e=lewO{ulouZmGh|~yP(PpthpCAVc}`r=$MUPsEqN}s$dGiX_Vsk;_42MHCHThC?w(@1!*AB7*9i_1QTMwE2ru~WXJXJGd)Zr@Ji z`fgq-DmE`m0B>Wprqyob`G?xY7yvOXA0Ux77KI^anEiZ3R zn}OQYpd`}K{-++(n@2F@roS18lo?R?yGh zm^7Z$)HCS7Q-3tnccAImRNTF3*kKG&Dg;9!B-dRr!1gW z>tcop6r&r-gR@X1+nksfi-6mHC8TdUaOUg2Bfn7CW8ObT+0@kZv+v)2g$pn+rbXcX zB|UD@pFvGn<9X9ZhLHjc*^n9tuProVaL{)`S-Fyw>uUzL5VSHl+yOg4^xM~52U7WU1#3cu%o1Ja2_rG= z^T3PeN(jU-yeB3Ol2lfd3(kjtSUOB_y2k9$=Ie8>WTO%Y(bV`P-EQ+E_zitb?9#)% zJcdqxj+OA*Mcr>_ro}B~(!TO&F_(#zmmHj{V*UM%D&41^1c_xE(~V9w%In!@3ZWrj zC1N<@;-Mth_^kI}rxnxc%)?EniPvX(Cb6;;D5$6@r*=Pu3<)W#s~eEEW)ohzLo)=* z;KV_3j}#Vetqf&)Ai}R_^1$rJf7;^SB-%(wODk1sUguS=F2=+dd|fRwBsuoeUZS^$ zI(kpO&M~@(7?#_ps6KbNvG;@N_r>lJG9fpy5%*wqU5+x| z`yW@upI#%!5XFq>G&sAfHGJjCEz=Dkpp3Cwt53ZNo~m$QPlZegwHD>JZW9u{C_@8H z?N1%}E}0x#10fB|RU;)Dz14E{$VHkpBJ~o)0SG?>l(|!*>Dd^0zH-NQXt6e@B6GK- z6F6|WyH#xb9=?R60Fo2#$;u~>w1DW7g3$V0S7tZB?N z2+62jTqHTpoL|E^L#zz&e8&uDu?F|m_t)>I_3#XYy^+@Z7W<08V{(r07Qjb-%Kz|e z{`;%k8G=7(&X}0TZvH*=`H`yXq~x17bn8;IX)4Y}{~TuifXWo!Xq0|_qKcX`#Fv+s zOZyw9F#`jRvgqr(|4XMY4}`En#SiF)i9XJ4Y7!L_6C=kCLk|2k*rgVdkD>GFPs{o5 zbxaUJPyQgVRN4E@3*bL`fhH8G0CBPYKR$LJDE~(@CqHEx#g$2^!X> zb|&+ad-K;qd$=yc9(SBk_*m0gx3AE_$fio+%^mVP0e9)ts=*%nPYwgO8ojYYCSo*8 z>Shi}^$9I=Qr?5F&$nJEG1CvlOZq;r9M=26&RCM3*#aNq^BYc)1 zZmHn4oWF4dLRTRp(Kv{2o9#|_=NyF5y|B7k3ve-%<>!CxO-wj%K6&yaH!CaJR>1_tP!r(p-}Uv7kb&hsMV564wR=8HrD8q$sjF%xT$8 zvpV_>f2PRJCVY^{1U=Vn!#g1}OUrmeW+oZ4_v;5!TXaqm^%XfMr40%+dC@@*d&(bY z>xo>m_ht){m85={tQO$V?V*AGM1nvWs2*(4VXm$?$Z(my+nTk%w?quY=X34CE(#KH z7Yl=RR%H6lhELBZydTd>8`tqUyTdd$;gq~*f&R}hRf9YaplZ%ea&{n3A% zjJ>50hV&c?-cn&AM0yK@W`y+BI@5+6X;f@;Ge0#AP5LmZ!B)_}rh%Rnf?DUJ=38uI z6OO)JqeQ%iMJ^Prm2o~PM?y#>`?6!rj7}cXEs=CX76qT~_w4z{bJ&;!gue0-m-?=> z1cGbaH;r793w%Hw4XT4 zadxt?Sha3(g447lzLEDV!!5svSdUdwPs!JpbEDZW$;v@EPg6Q2O~9PVae1eqRr)); z@YENve9sCkA!?40lk?!kN9TyW{;znIAD! zlYW?Kv8rV{!c$vq9fLE7BDZ2*S<9s1M~BX&Mj@zEM7ZrC`OtmNgaSm%a6MwG%gjIs z3@rLPD=XGEF~DQoV^*LZc!$u}`4oji-lxz$|s+tO+=zf!QnP!)~mik5ZUNF6M!A4|8 zgH(tL!LBZ`GQ``%hC3|2BFNN~YR2+xHPCvU-zHRIhAds(#}@fZ_90M9Pxb;IwwGRa z>qNsX$6`ow$wc9PnGJizcB{oz6Ox{szgU;tTpNtm2NHk|-2~$-QF=-=Ew@_?rtVyh z$1-fzb-Uz!+as*5gl78$5YuE}%%>X5fsfp~)}OrkK)SOZcsF;IG7B(V7~vD(t`y7B zv>DdHczcp}FB>*Ts9tN8+6cncqZ=By!DDkT~P1k9q@=R8~Lmf%@A&dfZ7&lG^v26_IoiU>(Jw*U~s z6Op_N$h+tuphUPfCr9~i{r*NtNuc?xrmQgP8rS6q4ZB4Xk7;8q6(etbzOSX_?&t7K zrNf0bVQwu(t0T20*P4Ps5a8z;%Hkd=M$^Ugd)+g{1MHNk&kA%Xh~g(=S|H`;{dy`9 z2CF#}*6z*mV9a^b{;i_AI>leiRKVfIW*F{?qp5+u6{z-^vkDyrB4AlQiFUCodoZ$$^?u;^;zfj7nUyWZw85aqR0Zq zM_t2h*Y9^s1mce;bg2@wU32X>YT!Ljkr-6f?f-#Rr_ z`^d@b9LMEs$^>k-v-YR}p8Ujpx+&+SF~H~4)CiDWmh9(%vS zZcSENOj<4Hil)9~VBqN39m$ni%}sEWAV&wT;&7LjgI*-y1N3-6Mud=NRYCr32$QSV z%`#CpfMYdp32-T~?*DkLg8|l>v^bUV1Hs5Uk3vAe(4XYN`xxM4k1SF5nZuULkp}_6 zYV6W3_el5tRQGem?DX_YfxE+q)xEF#@s#Paq(Bm0!v2XSY!Y7m7l`UPYK2AFu<6oV zIT@AX&{08@1UUYFLYdd?uN6RIRkYsGAbW(nAIRHeF)7QY7a>9Q9QQcOocP1Q0P?cv zlP$*==m&7n>A1xRN&)@>p#7ah&9UcFynOZjnb#OHq5X4hbKdfn`&%Mb=ht~SKHglv zBoce)hUD`cie#GZ;muyS+Dn_%MaVR88O=TJH&>|K(wGrU?CO+17a+6A7z>gUYc zgZ2pQ2*glzOI{c1&4cfcxAx>I^41+Q^Pb zf^+cjNKFz5$ov6JI;(kWR?SAKIvMp>!cemC{a;;9JEJ5us^mYeRS9@uFl{bpUHkkw zrrAna>qcac?T2F&bQ==r*-31EFVc3@Yv9RmwA@iN9&_b**}-uqoaSa#gpugGNRe5GyfHT7dRr3WlSDAzs8gURtOT`k>mC zXE`fRMMZSk72p70p?kMT#Bc47*0M@x&F=r=3!VCiUSmyM97e|w0XDY$zJ*^m(WM?d z<54w|@d{oD5Xxw8!2;^me!`#*6}N{jRY9 z(P`$fuTcHX5zUG(k$VdmQY}i^M+q8vAF@xs50?&x%C@H1B3AA1?y^MrAL60a+UvhT>eaNOvs_?^!!Mq$@qv6dIR}< z$bA-TK6{ZM2tYa6MavXFj-ws+oay)GznSEIJ%!ygEpN~jAB{&1lX8~vy6n~MnVCOR z8C?+ls6<=hz1aR(<{;4w zE0oeX9?IXp9d>Gbd~u3d&}Q~mIP@lmP(*3dna1+%$Hl9p!JCqT$3Y?^h{tnZoywBP z!gE2OhcIEH8<;+FJ#O>IgajY%KN6$#QHr1Ft-!Wpq$&3acRohw;4ck{LV19MWeDb~ zOlp&OLIlk?J?UfEr}YPY6i=Fdh-%Gg+tW&BYUl~z?(R@Dg>2wBUKls+V;7EG>!s|QG-vSz zR1R6TM0~Cyx>;ySMCW^RCWxwIG}sLU1iPP0OLbdx9$@B&h`Veu%q+?{x6ggVaxxC7 zK}TUG-R=kJ1@CzGze9$Gy*VL6y1Kd%X0fRkrhB$ep~o1CkF^vOO2XDFx~{FFBHpJY zLUH5Kys=gj#v<#zDCT9N;n;1fs?5oeCS82Bn+WjPy%}t)mu0GkK7n_v2nE3@jsLoH_tHsNRoj~BksZ768~Jq@{gE#)qD;zvi8r<;Cfm0WtP0I zYrQ5FU;|F>@LST@2jOxh?YrH7cMCU)Xw*MMRoG zauu;%@tM!Pm~l8RNnxFb4@OdZ4X2ik6m)BqKYfa*L}O3zUgu(%McLSBJ0H#ts2=Fw zy=59)S~on)w{ynSdm?9KRKl-xmfVmQ!^o><%3D=bWS*ue*jXb13%u{D_%ZSh2g6$ti61qI60Jp$15{CuR=#jF#FCQpq+AO<<>@OX^(p3U z#IyFugX_*ons0tofU62yUr{zung4G2E5pmHe_hK z^r2YO7m#JX=$^k_V*?7r4k7u^^0N6ZKB(23811_K33fN79rP zR?-2Ofc5xKVeV6aCW!Y`Nrg$fsH#f%reY%_DVeoq)Fn0nUT`WYeY4AIFnNHBHy*N< z<~#yzlt3B16kjy1ZpzYnr1duSy@>E*^?Ja!-%Ks>MFA!1KY+N zhQ&iAjoX9};8%=X(9Ih!)+^OC2|Pp$d`Bkc&GDaXRUZt7tiP=Y?%Dfz*{B3AxD8+HW2o{SWmL$^w`P3?0S4oGeLEOkbEll!s9%lp+?=#1oc)2`E;noI zngP|Vvf%>LD4E{2mNefJwN5+s!P-sjB=NyV(6r|P!@+@mt+@(oA2z81704#!DUaRDlPNL&0GGwG$XLpgX9^c9w{d!;ys-nxthdzFJ zo;b-k_mQMkO}AQlQYXYhj|scTv43=PEpE4y$5oi|C2o<<=&8MLpi7DS)XTDC>2|v? zhXE<>4!0*AC^6^oeK`b+O^U9%Zvkm-l0-@nMqQ@Wm2l~>4xhJL7tp81f6{Wy4{y3g zFn-5i$jeldo|LzYht^&p5KC$jQ}InvSo~?4hQ^*I0>kp6m7BxBo)-jU6I%e7re9;c zQja{+1EQz(w$w~cZnD_FPd^;Z-;&G!C0^i^Q(n2qZ|HRD6`*x~F^yg&_Q5CC*nv~C=WAg93!+=*ZzKmgK-Mt^wqJzkeCwh} z5Ew-rodPL=ansax?gnWc5_x%f;?q;9>X<;-g~lwFE*wO-oQA?_d-k7jUlLXZ->54L zzLx6Asmu~X8**7syM{_d;2%wr*V4*5rJ=fe=pR+QDJR(^q*Fjg?|KQdQS<#NZ`|AV zsgPj5`JYh7X=@oQxJC10nlFF&SDmv4ur*&6pJdHn6x)|gkVXY6zfnn!dV04O{{mnQ zi{!TFTOrZEtL4A3X+dPvgQW1IHXmp+bE{YY&L2hqV2T&S&iR?3{kygHAE0|ymN-fp zen;84?G~FX6y;wP!f&jbmfc7CI=1QxOB1j0fAh*(a{w|c8|;VozweEiEND~lXyFw6 zrZUyLYQiqK*TPwLIFVyX#L0L}v5XqUwH?=2dY+U~WxbKYsZ^>c;x#`FpX)PDhwy#Q z+M)=!q8T=kO9|qq@F(Zz-3tqP1Eq9mUP<$5;}I;gLHt<d){xdFGci=%A_X9^wL!p@BW=?fAD*_DmB1xzT{lCXe>mg)lalbm@<};li z*$1}q8sq#=vgZPKh*l5g96nsYb(E9$<9m|K6wtjvr>2VZeSDrw^_5Xi{FxiPxWd6d zW(kITK0&)gUtnbm-&bP-j%M!X&pNJdU&#|+Q$&;yIE)G5T zNMvqwwBqLW_Ap6n(4kN~v##QcBP%QHLqbI&(ZA0CKI-W5;u(jJmaczx;+ACZLV4U9 zB+v2p(irz|E@bXz+rKPH&oL8#)11-B$LZ|c`5$>~s ziWWC}ylhBB)f0h;Sy)wv~-CgmjS+0~z?r1`nW;5O+n!8epT!8e>zotWtz|120KP>x-lI28x6W3cT1)H>9=d`pphTdfS!#CWV~4uLUn9r|a2&rdO?OZ4O;ogA%@6Xx3D#cgdlsDAi13t*SG3!k zKL}^~yJE!E4A8#?wCk%^8V0%Y90Tp93~ZadBw#zzcWIXD4CaWj&?%Iefx6}s1vcVq zkPfWw4-3+O>i}iiB2}tq%A{;GKhL8f(YhdwXyP(Z91#y6#TQVl$3;>)nv2SsCulFO zPn6^mEfB>XuLRSu_kdKUY_a_e+%j>#?zmTfdQE@z!)fsWcnicx3Z)Q((}wNRm-7IQag8s%qAf&9czkR2cXT{k)O`W^JiabUz4LViO~&sJxHyi#0mLd zw8+IX=#uO^ch0N;7N@2*UV-NP)kH1!;5N{L(-~|`Oic7}t*6kS@L%vPD`-1S)EnO| z`J#BLvRk?*z2m%pyJ@-~nYoxL*;Ew*6O8qz7WnHdWJBOnF;!gpEDWYU9x7BGI|bMx zL;>Pd4+uei`GER8;F}{qoS%+8b**92B68bdV$*o~K-#4O>sO_IJDmF0GkcJG9>OH@ z>;CQ>&)V#XFfOZ{v*~21HjS!|OYY%7^UW$p7Xa@MJ6^3VEup(C`dMyO@D-*_Mh+x7 zTCot=(7K)PMu8pzLXl9)=A$%Ab(jCzX$8;FGTJ_Qa1+p>t;LfHj)W61NV>SxzniU7 zfF-#!TJ4F;_Fs2uwkx|i2oQ(_$?y!lfIK!l}pXL88~b6m>@VrkqXm3?D|KK{QR*Ib^2_7M6R$5XysK_;|RM}>d6p_ zNJr%f>e<)`HZ<^XLEN7dJH!8hJXg4(DXWWweXL4poALBazsY}W`#Cc5o_0vlk4aFe zpc)~q+U2-6PEaG@NsHsy!N)e&`9j9#1^TGtjfWv`ls`db6g6O?HD;Gc! zr`UHHyoSIb#Fq=1o0}^~?6@M0*q09I&y}R}MUUjZ12IXfACRylO-#PhTW3cNC%*R= zB#nx^yW__#=E}CkjQz9m8p{gaYGqRgu8M!t@1w+@>mX7W(E~*F2R?WgM2y>hqx=SB z&qo3IFgAm^1x@JB$cM%gyV#nx)0|~v4z?Jg!KsY3YmBRk!I2+>yHGalc@Nv?BSd?H|u~lj{)KY==!PW!R@s9UOQYI5RK^( z;GA|Dqgi48>um6_wCkxr+>KY!e-;FZXnlx_dxMMiMWQO_2RBVAJvIySUG%ZFYjCLZ{xQ<~4-X@tqQOd*$T z-(P#_GKo>cuxmR`<-X83Xh*r%X{uF2?o`+9(E&l=L^lhbpxqV4;(%?Vsv1BzNj}JX zT)mc_Q?XTf?YBfr?qjfBX*S2aU8N7?HUE6>f@i4Mrw~H7P78b#H4Xk7i*phxYR@VH zo0NGU@+_sNMMW0%CUbz9(frVHYweH5sYyDz&8;d zj%?Rw*s*1}Zi9!gf(s3yvfGMh`PLSztE-1j6#bnAMKUcM=1H+v68Y=$6{XT)eV4!M z5aMKnoF7EH824#((au*SlA_n+QH9y~<93OFjl49xFLkh_`g*HJRr2L?rkSdwj@aJM zyW}lj(qSyk7w#SJ^ZC9}wJE(wVVQTailr!l?7$K7}AIUA4J;-xBA zy~(}q%1B#oIJi|QH~4c0#tbEc0^#1(1U-n#t-)&QLguZ%E&|k^tCgstf=&UM{(FNR8h=;=YN}!%Pz1jVeG|*4+9Pm&j%xQivAXLG z%t`rL;hMS?x|$%&0X-%r<~Bw$)RgRF()+ zvxaDVlY%{tc!q$~Ue=zH)cC43&vo?lerzVfWm$Tj#G9>eSl;f$u`!{IhoYNKQel!Y z8m@>chcyE^Mirh@NF=l6V`@Q`twIezw44-lo5K-0n`Q8#mkLCls;qnx#u3FJBNKq($H5&_ zrEQ}2z6ywuH#*|S8-KhfM-HZA`P=kH_7zmSO`kYcAi-@v)(^?RdXt3lgsM6QSdV&f z7RrS0TXe_QD<(E&n(&5OeRqx_?_!q?A>n*PhgLji13Xj1v$Zym@PhBv0yb~PXarpS z587n^E$H_7K`Mwc_%>?Y0gSELSFKF13Gl|PcgFOLjB3>1f7=WL#yGJci5V27L%qvy zv~jI{T-B2r#l6!A_c!~ZuulP4W-)EY`)VwC@&wLBeR;O1Mj}VPu*d>bCI3PPjlyQ~KqVbQbzJ|R<#BMrN-=uF^Ou`7Yz=!*4+q#SOW1_JkhL@M`^lKw_j7lYrx2YAsJ4aI%7 zL6T1Kor{M6?&SyiH?gW+&9`oSk$M8I1NB;MDNM#78`n_{ zE4o_~a#4H|-&|asZ!N)ISTHwW?euJ+Y9#DRNYks4&m2*ORRq}YsV{>GhKC`ZMC$`s zEgm>IQ}u6soLBG|j&5$;gMPdvj7ogFWaM)$SDqnp zb#=uVY!Ey;pZ<#&8z^f9@9D6A#jjSc(sg>~Ky%=QP-DY2p{Hy#+}%6eP< zNE*I$!NWpdp20KY_+nr@<$G#rN%uLg4e6UA9D1Sz6da9}&g}O_Rmu_D{a?<_-n7Y4-Nj zww$#b%Emc;0P_*tRtGv(V3It1xr{dV$QPQ$l`1yDIt?5L?E;pDWNB$=5`u#Z6?{JA z8vDA+2LZ_d@cHo=$#}M_QFSgSRjGSv1F^w(9*7TuCztlcwS_;FGH>G} zP5hYbS0?wKPl+h8V^z!hX2}$RX*7%qS~U1u`?4@3pj4vJ+U)O`jwZ=|_Ir|Fq})X{oMzK}$u9 zJCMp9`Xoqd+F3aBi>GL|?~77+?n_|i2&RhVF5PFl2(%APSsdx=BXGT_BuuZ$zn+Ty z<4(Z_88KsTZOoTuPie|$3%iy(FQmkH+@#=?rVNA$GBrTJFg%lmQ=EiiI8#*@*@t<3 z^;BI&C*;2$N27$E0`Q8W<@SH+pGJ3sTb?AwywZJhtsGo^v|P8D;#BBfpZ?z$N$7=o zd+n^x-uJNXFni6=U|_@n7rIl6cmx0UU9TX$uI@bgS3mRbA*6Q(=_szoS$RaZ_n^lGgdN$ieqJ_yhUiYh>n7YR3z=9R zk$LXzzAAFLuu+g$-354PCy62Bt=2~NJ{=hwBL@%%$a|M%@!#`- zy$0$J-e#>(%FuX#J~vTxlul-nRxdj}!((V;BabxaXo*^pj79Iv=_Hu`ZY^ohO_))h1XVTGcouf&? z%JuG{9uYo5sK*ki`XwyFm2T%!Te(^W6Pq&?248XA)+KrQ-y+tB;g!W(yDt+05L`ic zUyF^HVEGiN)8hbfC|}<-D8=(CNl{DdrPHrl(bLb!5}KMJ)n6v^8O@G)lB98#&wvJ# z=0Q+R>2<`;B7)u7wj8A2#u#of#@G=#2Y7NVC!)KPydiA+EGJ*TW9O(PAPav8c@mtX zI{8rq7dNhH|zJc)#OvduF3^!@sWP+2?(nSIE(K3DPCr2gi820BjOpl)!5 zg_qaR|8@zxk3qZ2IILcW7IW0#D$Lg9;y?&zWZA}-R3DqAu{?YcFUs`Y(2DAtHx^&o zzT$;-gx1znR!+a8p`qcJK@ZA_f<>V^`;3!v69ADFY|Rss%S0%5`~X`wNA6bSPKtf6WE!L^YvtX zRf^)S@o_5oLo8LkjY=B(l27o;wRY*hGd=lIm{(a|u7=d>Zx;6*H;s>vZwtW^qwoBk zwe>hxR@lh&h`IkD|JhF>`?~!a?h_8PwQNFOXTbp;YhNZ-TPExjAVg0v8P^QT{0b<# zrS?uvy_f5{8Dge_z$f1jQJEJCOmK~+{8RJi0{W%nv$OBkK4q;t+t{>X$7$B`Q`F8L zaX0C_LdO3|156_Vaa0;TZ(Y`)E1mYOSa@-u;|~Obeq?pD>NL5QFqtw9V%q70jBaCs ztsBRf{fE47)q`#t>t@mUlh00xb_+jtH+LsU`uHkcj%ilg9`Bo!^;Pc?5~f%{+0S9RkhV?5+P3b>2dR;`1TzpxicqgoE+KaziO&k zEv}iU`3cTGb?}Y=Gw1FQ1}l~(5haWn6=`RjD4exwQc?#0@U~~cX-^R+{d@v1(|`Kw zf4%5<+;nc!ZV*mG3Qg7)_yd(Sg(qM5V^Ou!y`{BR0y55>_%qZ3U^9o^T8F$sh=apC zDN5J{q*b=`TGv1Q^S`qTyla<7!k&>}M`!YfZNF@k8`8J~kXy81g5}F4)d? zgQu`K2vSQcMPG3{Xhv_)Z3wB%2(sq%5Ys0n*39OLj%f(&1h}BnlMKQM`v46qG~9;s zl56&BBBUd27p|H{ha>&xca3KS2n*VQPL$0NgnT&;13{m>wpd)gzeN*F z6`p~NCcUJwsA=~U;JL(r=xvEK>Dzbc4Et~`z&n1Ih8LkH}`>Jz0KDTQ; zF5uuWMRIN3Pz^PotF^9mNqBVVT@5#D@Auusx$B#f*)z`>-r*StgQ4*&Z?dnya7%xp z2oHTuBkY9wZi~I;cCf%tP&iZMZ{3<=QI_PQjsMi3_UqSPV}o!%G(Ki#PdsEn!pKJm z{

vt!H<4p2yv@aAf1Sg=d`DRTm4^|E_)i>I)G2Og-zWE;FtvMiS}ndzWQOIpb7l zXQ@Mwx_i{LKUXyWlSx4?c0cILOe1rPoc)gBOkM*Wi`U)1=u&^T022v(m}qPqFZ*Vu zVsJu^9hr=Qis`?~y9Hbr{Ni2QH}a^z`-cC#@R5coJuf$Y()++))*)XIffv(be_@T* zn&K(qVp8X2y@@o!?P}ousLTvmp&k$hK24<5Q4QgxB}wa$E>z1!YyD_FeGR-6T`?2{ z(GU2cA?zWY&nQ!m_ih!9abELI>%I)AYT*`anj#P0vElNkqkSIV=!^K00w`weV&j^Nk-AD5{A9KhcDdK<)k z;|J7^&s}X>TN>0A+bt%`qur~ecY-aH6;^qf1RpFX)Fk^ZD;t43%~Wghu< z`f1bC!32#814yY7;0^heutUE|eX`5aef4&$KN%>>@;R*04oa)t2VIn$#*#x$9s6E5 z?2J`I{%$FQZk7=)#k<5hHJ9gMNG2%1VBNns%ejOPa9(v-e5!Il0tnL1FC7|jz-bD9 z^dbVJoUzEgF0md66n!}?^>T$}#B%!m*66~5cXc&;vVNOTQH~Ag1Bb=EqF%-%)&$>Y zX-RQ&qGsTs92iUlHgZ0CX(FeK2I*Y$)Ixib=3)4K1PJTm<9Ub*E>;3Ei&YX!BSR>pCfe{;@mTf&$T!r^$?IiM9IMJm4;m#~w{W>VuLbsY!^I_KQN`|wgMTkW26J<1tQkP|;DIQS*k`xW9m zQx`FdEW!*xq>PjD@@feUJvrc8N1IzzSJzS|721{W)HnpSY}rz1+mok`&dzGn_Ri&D z9Vm#GeVVg&=^^1M9jQPeq7KviE!Q>B0 z=GlC24+x?8X`1p_Uhg=-xDVEA`{LhkJ0dCY|1*jIv!npkx&o-I?UWB`{~f{b*J!It z1p?w)i@>A*Vf2KfgVtYmut~+=C@*Nk{O7B67b50MU#~6yVE4E1=AjJDZL3t&p%WbF z30q(oA^@(mPW>wm@g;aw>efU8RuxutLX%=nNYHiU}81e`C@v?{W zOTA{>O)qrhr)z(rRmmmWurGjzJxzE~HXu{7(*^K+ea<%t;S zqr&_^73SI?Nf+?XRQf^T4$aM_YGn@yKdBM3D8nt5NMZoq#boOuHLkdXgd?Zp0d<%~ zoqJHu9l&ax_l1L1h{d)REhZZ=XJwn_d3#q^`GUde2Hj@W8;wpXBsgCf9t?t4cRf8X zsTs;f&`00)tJG9!{m-iV2xdbtP~=H2FbfBafCoK1|E_Zsyi7L;~3@{s1NtMzz^f@^Hq*A78J{^ z9ssYiPnV@qaC~SZYhM|fNwhjZ4oC+dwHp^J;)-`RIehn{7Crr72i|8S8Fa@o(%Wzd7!0Bgj3r&(&MZqz~!6B8&y^)NI0ts@XsG;#$ zYT`}#fXj}f;A6Bcd_Ko{MSSk_m(|Vs{SwVUu)$-`_#ERwFs$gec9do{fxrIG9uo*P zG5q$3&?nM$^QZG!+WZjeQ^-NE30a@TbbD2FHg4l*wkU4_=i&huxihW!pJiltM;|h^ z#1?`oN87g$*c2olw!<@SH>ChzKzO<)A!9HeGHsB0oHa4TmUF+^_51|`IFl`xffjaTu{B)$)$I9E=U$IRz4IXtNr(!2>?|3!*0#0>XtYO~P=Bt|>0MJLc2R(@&Z-}ir^dd#V5X-5n= zJ>3wM&+d9yU$A(AtgocN3`#+mZO717@*z-5up)R*h4E> zp?XK*1c}&p`ziu$2(v%gUGwf2Ct%Zb$HYc^9J(0fmX!m^Z0_yn4&4}P)p+CQ=Z6c^ z*ySGC`I!H}v;K5KH6kPw$OH^Q9lyF|Q5pr>=u@>$5kO)Ynqu35^ZxdI&*8(WFmQ6vK9a0mrZ1#^lK6;fqACh8H%(=HIg zat|sE-eW*>*1(v{t*nxmH;6S6;SyerbxF(?PXU&QIU=^Iq_qCpM<~J^d4Ar4GSAbZ zRlrS&16W85uu)O3%n{P;fJo?)Q z(#`GNILcaH`kERCW4?jU9ocI?H(k|3f`h{cxvD5GQ3Td0BFtIv#6(E1OdGf2ZWolIJ^M%lk7Zc zE#8m?#Ma~Y&dw4u?6wp2j|>HlrS$8lsV#=)>}PUVTG$6cv9tlifwV%}pLP$T zU^{dUcAy)7p+u}%EmY~AG51ByVoWIXF829F*IE3H1doHw0UHg(d5#y3D`uo=e4ZuoM)u#^lWj)i&3fNhedyCRIyF_w zV8`Cdo5fA`Vt%`+iO;wYF6|m%>w0)SjLM)S@4FtmRaAN<1;xY-j4VRif;-q_IN&qL zFxzGBz1-F(mb+}{4oRo*ff{RX))6aO4?zJ{&>O?UyRidqr}jeV7x5joi&OJQ%cgCn z54w%5Viow0kr6c`cP@Se6;Dm2UPsO@mQb!M%k9b+X$SQ#o{VkYv9;=>OeH9_2oyEQ zYRjgk5h@7;$un!ee4TF6a7opMHXSI*A(HWn$kjwCAlT#P(5p`1b~8eegwLMH<0Q&$ zJ=JNYD&ohYmLrkpMWz$){;!sGnj-6#+b@P&;rpVuz#Q%k{utk8iMCVAWxrSbpuqj? z?cI4x4B@1xOBeSq&0pJmr;h})N!lZFRcjSvo*ej{jGefRG_?rsZy;^<8j(Oj!wW*e zpn5|=h~>#)IEzIUk2OcKN}i{?9|duSU~H;;40_yO-*0$c&)hqLdmA*85a|~`8K1ZS zQA?w@7oGPz{MS1yW}AHWzHO~uWyfj}5fKa#tx$md_A+C``nk8SV z9cRCf0%-g-fPco~q>c9FfT1l1WBuFv?|rS8g)H11V{U)rH=(%2tUbNJooBG1rIp}f ze78=IR9`P)L8=;iaDZ!!S!(){$G>3nRG^VSRqj*&RG0jL?|P9cDk?uD&gbe%fK_I( z!%p|;8Wnr8e%IFBi8IOPkqClUzXPKcj%Mgr{)FLCR*Fl>&PhjC8R% zN=Qmd+{yMf!q@GujbHDt=7hyN^@*-G9T2OzbbjZGNP7d6> z?PUDsJ;5^}P`#)wn`!%K;c-%)+!SD>#IU z>!;G&=q`;qbD2quO2hQ-x2TEDqo?gDZ%1sTxRdh*AyEy8v)Bpm%AeoH6A~^5z1}`* z^P-xd7tx%H2nhU9M}em__V*52P~j3hizU-v@2_i-TJuyJ!({YgxI*-&nAyDv$JfK5 zvuea(cqqO8-o$8Gb#>>h0L#esbt?_Jhga@nO|OT_T=dT!F(~CqJ(UcyYo#M#hO|*J za3X5tIl19}+YYl(dG$x=TuE#G0LDJIQ{>adYLf%mqf6(uO{2PtsH zttY2!6@x_S!_Qa`YUTvu$ zhsVQ6Ga%%O;xbmWI|9$xP?{0U#~ApaKyE?Ea6{XD@m7`l9XZ-NQ;)Nmw(5hl-w3ga ze&KsmXIozXc`ZAG>Wp6F>$~m(*Xp=%BifOck(4w;l09a)R<|z_>06MrkOkHulOHRe zx>D_4GdwriwY~q%J-@&V zRR^eFb5#{0J5^8H95;bL)*Krr?vj(Gh5rHj-?*Pdfi@}?LZcYFO$jBE9(+BUD9)+k zKVHoYUs-_qDb>2iJRvO)wLsdFh9HIWyM`rmz7{ait=aJ4@%8qI^{#D#15AvG&=6HW zevsRt5Rj(u9!&hng#M{W79f#VAhr#upjwT4`kwZ(<8s~kPZuNSEBw8xu`Wd+7(C6pn4g$E3gIVQnui~?IWyBzORu_dVLPA3XG96e^F5#9uPjEW#U!G;( z=XIu+Rw5#sq@6rphH&iTIaA8pj`Pi`)2~ilwY-Tf9OfTeUXH#P|IW(BW@s$BE?1o= z0sjHO3Of8)yS9F&s`~5Hs=$E1&QU&%(e<&ny3MJxv&uHZPLB5Wes{n490cK(tnY*E ze38ob4aC7vWeuQrW%_8`&mr&1B>@b+K|Ivm-KwJl?5S^*ImO4HfehVwcGscsUaT0Y zEp|O*(cHi48aGo;SpY|T1Nj_kE3cp{5@p$`cGSwzn|tOkn~t0L)}b#9b53w=^I`N` za|dz2o0HA1l~UMe(Dxky@q-k7>FD;S|E%Q0ds5q)M60oyNDul3w zs)(#zFXORiVm#tdUzW00I^QX)S!1*G_j-uSUQ~=G;*y4(EX8llzcUZ6Kpe!~A<$a( zySqQ_z_d!_-zRuqp$_f0TfUaap7DPn`5OnZZ*s#r%9LjZULMx_+Zp_g6a^iYC~Bms z0Q(N8lqu2nHOCS0;a!zz!)~4cs3K43d)^Y<%}W-$F8LMr?n>cdn$Fiitq}C ze^6J>L9HuM(hyqwm4yaCcYi`^Ow*# z3D%`e>plN_+qidbs{T}tG<%fq^EppIb;R#W$^=3k8qIlNNW6)E;X|X%`q8gsnM-S_ zUzY*aAwX7;!%H;mwmb)J(HSER|nb#r>|6m8wS6_5PSpCa$s4K~AOSnDk-n2Bg ze-7~}T*kIQ+mwOQ_|iXK?CgH5U*1Mqq)qzpns%ltP8v#!4* zuS%!dT##dL)D*5pl>V5qC-iqmBkj~KcUKUx#8hyd+_bW6$S?vVDp>UbM5*^91CEpp{HFcYBg{%UM1?`dq7Z@!eUEVVTUN*Wi9R z6UK0(fK59Ft*#+NymoU5g3%{gyzIp=e(b0Cjj9q?n$kwCDxP}=1+^5c@CJAK)vBqa zr=el82IZC101_MKp5lY9kNP4*B2YgLP$Ev-KsSDRHT9>USD{JvUu;xvzx1%d0I0*zPwOGOA*)5FWcc6P<29zOdFIdPd~aZhVgv< z6yZ^K6}!20Yq1#Q#^-~sV!x|ucsvhNFABa%3jYod?a#mT!UnYcCr>0Y^}^(#42`=z zmc>tR`MTD;hBzG?K6h8m(IyW3*Fzf8(0oaUQzp7TRW-c8_FlS59JLJJ*3HxhwoaD{ z=TGzCYXnT-Fw6XrQkq2Eh5HvTv-fs;L~EzV&zrKNyolDs@-m*`w&eT#mS*0zX(MN9 zC5Oz4&EwoS=9Jy(ui|rYZn`W067MJfo{*Y7%3GPc5;Y$OfmdXT&|tQGcLV*QM@st# z=kH7|@tD&MbDnFcsolY}W(zzR2(FDby}KSaA6$a-a6Cw>e6wslYIz;jFU=5d6r|JiLmf0ezCNS2F)DtvJDCjHnsKAJ9EqZxGXcX z2HTVA6^!o%NA24?=$Eu z45T>56jU@H<%B2y6YkfZY~=c5CB_gg@`6T&96(3I-kP6oM=?6%@Nr?FcywYSp>??7 zBDo%Ngp$2zw)Mw43P3Zb??*LfEuw0RtqUohSr?MT_1GetnU3%`N^ysB2RHtB5x(Yb zj#XmL`oC?0f-zGVGCfl{S#JQ9qO%)5_#Dz!u@8pZ#h?15G^XH5MVlUW&d}s zm07&jx^I-ixgYC_ar!8OGLyhBoIIq0zPP(h?P$)BG9BxZuhAsK=S6Xu(=(?(w_SwJ zs4y+HL?!3{O;qN^8x?kP!M2!Jf=9=;ptqDW&h_YQbQ$wpxRqDzTwU|wFhq&RcH?y9 zPrN&Rj%5C%%0)w&F;aNM=Jl|Yswn`X2rMhJ*tc~`o{>)VIn8uR7+X=F2iiKIiqVV6 z>(^_c1t%_@;o}oR-tcRaGO5>mBCma+5>Q1ZGn*t1c}bqhMR-C-#>QG*&*o*Q6PO!) zHk67hofEjA>jf{O5|BYbRvn!hZ_%ywsbL_c{VhaDl};u%@Z>qkAkq9bY&wsjQ!tqC zm1f4}o=rox00)}SA@lBdx2EL&tA!Vls-dk`ZnI$Ji@=le{hCI-fvefi%d=BJ`^3#T z0Tt?_gNK+xko@D9JGanU#u`v1+YaS4<=r0l?&$c?vI3C}I)zFrfpNPyU4k}g{1xVh zW3};tCdUkZt(pgvTPS?Bo&Z5N+_pnNDJMw0#si7gU1J5#>yK#h%2|`7FI3g@=K)O1 zV30lmCJl^%ULj{lq>o+Sb!SK-uDxHa-|NV9P=0(W$PgP0Db6KZSkE;FZ`HbO9^ZJi zh4b<8Q3F5LmCiUSVKfe5-D$#MMK&W0BuX00(QN(zJKu2 zXU}{xm@Ui6WJgkZR!NLXIQ!i~xZ&g3po(?;YKeU9uyfdS+Kb>g^)eI32Ox<_MTO6G zfN-D3Em!S?4?Jjccx3;LJ8=KcL!!ZWVZZWY@$M%tU#XSd$y0y$;20F`apt#kS$cw4o!e@$pMxNpX%szScsM+We&)2NGaTwcT_J~!XIfAX`!lo z)^Q02Fo-A($MqKHy<>Vou>~7uvCky_{cUA#2Pk-V&HTJo%JwonUkEFnqy}>x9VabX zyY>4H-R95_eEAS9pIcv7Hibfc>Aj;q|9j-)k7ed4QEls&;h~9>-&F%fmI#j1>g)J% zmwtxjjyzJe^d}A}ppX*vFR#FiB+e*__0@#|M2=!WJV6-q=*z~P_B{0>Ex}gOn3H&) zp^koIx0|QU{nrB|IB$*0Z))U%Mx$`v3a6Ib!7I(O7(>5nYu?GxhB+U<&_lcBNA_PL82jW|Mf9sJp*Cnn{7F!r@Bw z-v%xpC`m4SE#~5sGO(WRF5Ay@8tHHjF>p;7 zuG?0W^T0TN=x(;NFb@$@$o!~U3cDG-xH3E$_U9YXZ#aP`i!F<4yjxz^Y*nu8i9HIa V$pjQH`Li$&69Y5-VqKSr{{U11y?_7! literal 0 HcmV?d00001 diff --git a/docs/install/kubernetes.md b/docs/install/kubernetes.md index 600881ec0289f..94483b7c40b57 100644 --- a/docs/install/kubernetes.md +++ b/docs/install/kubernetes.md @@ -1,6 +1,6 @@ # Install Coder on Kubernetes -You can install Coder on Kubernetes using Helm. We run on most Kubernetes +You can install Coder on Kubernetes (K8s) using Helm. We run on most Kubernetes distributions, including [OpenShift](./openshift.md). ## Requirements @@ -121,27 +121,27 @@ coder: We support two release channels: mainline and stable - read the [Releases](./releases.md) page to learn more about which best suits your team. -For the **mainline** Coder release: +- **Mainline** Coder release: - + -```shell -helm install coder coder-v2/coder \ - --namespace coder \ - --values values.yaml \ - --version 2.15.0 -``` + ```shell + helm install coder coder-v2/coder \ + --namespace coder \ + --values values.yaml \ + --version 2.15.0 + ``` - For the **stable** Coder release: +- **Stable** Coder release: - + -```shell -helm install coder coder-v2/coder \ - --namespace coder \ - --values values.yaml \ - --version 2.15.1 -``` + ```shell + helm install coder coder-v2/coder \ + --namespace coder \ + --values values.yaml \ + --version 2.15.1 + ``` You can watch Coder start up by running `kubectl get pods -n coder`. Once Coder has started, the `coder-*` pods should enter the `Running` state. @@ -167,6 +167,18 @@ helm upgrade coder coder-v2/coder \ -f values.yaml ``` +## Coder Observability Chart + +Use the [Observability Helm chart](https://github.com/coder/observability) for a +pre-built set of dashboards to monitor your control plane over time. It includes +Grafana, Prometheus, Loki, and Alert Manager out-of-the-box, and can be deployed +on your existing Grafana instance. + +We recommend that all administrators deploying on Kubernetes set the +observability bundle up with the control plane from the start. For installation +instructions, visit the +[observability repository](https://github.com/coder/observability?tab=readme-ov-file#installation). + ## Kubernetes Security Reference Below are common requirements we see from our enterprise customers when diff --git a/docs/manifest.json b/docs/manifest.json index 05f4d5d3a7680..10f0cda33f1e9 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -723,6 +723,18 @@ "title": "FAQs", "description": "Miscellaneous FAQs from our community", "path": "./tutorials/faqs.md" + }, + { + "title": "Best practices", + "description": "Guides to help you make the most of your Coder experience", + "path": "./tutorials/best-practices/index.md", + "children": [ + { + "title": "Speed up your workspaces", + "description": "Speed up your Coder templates and workspaces", + "path": "./tutorials/best-practices/speed-up-templates.md" + } + ] } ] }, diff --git a/docs/tutorials/best-practices/index.md b/docs/tutorials/best-practices/index.md new file mode 100644 index 0000000000000..ccc12f61e5a92 --- /dev/null +++ b/docs/tutorials/best-practices/index.md @@ -0,0 +1,5 @@ +# Best practices + +Guides to help you make the most of your Coder experience. + + diff --git a/docs/tutorials/best-practices/speed-up-templates.md b/docs/tutorials/best-practices/speed-up-templates.md new file mode 100644 index 0000000000000..ddf08b5e51d75 --- /dev/null +++ b/docs/tutorials/best-practices/speed-up-templates.md @@ -0,0 +1,143 @@ +# Speed up your Coder templates and workspaces + +October 31, 2024 + +--- + +If it takes your workspace a long time to start, find out why and make some +changes to your Coder templates to help speed things up. + +## Monitoring + +You can monitor [Coder logs](../../admin/monitoring/logs.md) through the +system-native tools on your deployment platform, or stream logs to tools like +Splunk, Datadog, Grafana Loki, and others. + +### Workspace build timeline + +Use the **Build timeline** to monitor the time it takes to start specific +workspaces. Identify long scripts, resources, and other things you can +potentially optimize within the template. + +![Screenshot of a workspace and its build timeline](../../images/best-practice/build-timeline.png) + +Adjust this request to match your Coder access URL and workspace: + +```shell +curl -X GET https://coder.example.com/api/v2/workspacebuilds/{workspacebuild}/timings \ + -H 'Accept: application/json' \ + -H 'Coder-Session-Token: API_KEY' +``` + +Visit the +[API documentation](../../reference/api/builds.md#get-workspace-build-timings-by-id) +for more information. + +### Coder Observability Chart + +Use the [Observability Helm chart](https://github.com/coder/observability) for a +pre-built set of dashboards to monitor your control plane over time. It includes +Grafana, Prometheus, Loki, and Alert Manager out-of-the-box, and can be deployed +on your existing Grafana instance. + +We recommend that all administrators deploying on Kubernetes or on an existing +Prometheus or Grafana stack set the observability bundle up with the control +plane from the start. For installation instructions, visit the +[observability repository](https://github.com/coder/observability?tab=readme-ov-file#installation), +or our [Kubernetes installation guide](../../install/kubernetes.md). + +### Enable Prometheus metrics for Coder + +[Prometheus.io](https://prometheus.io/docs/introduction/overview/#what-is-prometheus) +is included as part of the [observability chart](#coder-observability-chart). It +offers a variety of +[available metrics](../../admin/integrations/prometheus.md#available-metrics), +such as `coderd_provisionerd_job_timings_seconds` and +`coderd_agentstats_startup_script_seconds`, which measure how long the workspace +takes to provision and how long the startup script takes. + +You can +[install it separately](https://prometheus.io/docs/prometheus/latest/getting_started/) +if you prefer. + +## Provisioners + +`coder server` defaults to three provisioner daemons. Each provisioner daemon +can handle one single job, such as start, stop, or delete at a time and can be +resource intensive. When all provisioners are busy, workspaces enter a "pending" +state until a provisioner becomes available. + +### Increase provisioner daemons + +Provisioners are queue-based to reduce unpredictable load to the Coder server. +However, they can be scaled up to allow more concurrent provisioners. You risk +overloading the central Coder server if you use too many built-in provisioners, +so we recommend a maximum of five provisioners. For more than five provisioners, +we recommend that you move to +[external provisioners](../../admin/provisioners.md). + +If you can’t move to external provisioners, use the `provisioner-daemons` flag +to increase the number of provisioner daemons to five: + +```shell +coder server --provisioner-daemons=5 +``` + +Visit the +[CLI documentation](../../reference/cli/server.md#--provisioner-daemons) for +more information about increasing provisioner daemons, configuring external +provisioners, and other options. + +### Adjust provisioner CPU/memory + +We recommend that you deploy Coder to its own respective Kubernetes cluster, +separate from production applications. Keep in mind that Coder runs development +workloads, so the cluster should be deployed as such, without production-level +configurations. + +Adjust the CPU and memory values as shown in +[Helm provisioner values.yaml](https://github.com/coder/coder/blob/main/helm/provisioner/values.yaml#L134-L141): + +```yaml +… + resources: + limits: + cpu: "0.25" + memory: "1Gi" + requests: + cpu: "0.25" + memory: "1Gi" +… +``` + +Visit the +[validated architecture documentation](../../admin/infrastructure/validated-architectures/index.md#workspace-nodes) +for more information. + +## Set up Terraform provider caching + +By default, Coder downloads each Terraform provider when a workspace starts. +This can create unnecessary network and disk I/O. + +`terraform init` generates a `.terraform.lock.hcl` which instructs Coder +provisioners to cache specific versions of your providers. + +To use `terraform init` to cache providers: + +1. Pull the templates to your local device: + + ```shell + coder templates pull + ``` + +1. Run `terraform init` to initialize the directory: + + ```shell + terraform init + ``` + +1. Push the templates back to your Coder deployment: + + ```shell + coder templates push + ``` From 7d44613185857847fbf78854703c0f40c55f770d Mon Sep 17 00:00:00 2001 From: Stephen Kirby <58410745+stirby@users.noreply.github.com> Date: Tue, 29 Oct 2024 20:58:26 -0500 Subject: [PATCH 08/10] chore(docs): add documentation on custom roles (#15280) These docs were overwritten in the restructure merge. (cherry picked from commit 25738388d55ed3bfc38495752a4ea044a0e3a75c) --- docs/admin/users/groups-roles.md | 24 ++++++++++++++++++ .../users/roles/assigning-custom-role.PNG | Bin 0 -> 64037 bytes .../users/roles/creating-custom-role.PNG | Bin 0 -> 84273 bytes .../images/admin/users/roles/custom-roles.PNG | Bin 0 -> 107693 bytes 4 files changed, 24 insertions(+) create mode 100644 docs/images/admin/users/roles/assigning-custom-role.PNG create mode 100644 docs/images/admin/users/roles/creating-custom-role.PNG create mode 100644 docs/images/admin/users/roles/custom-roles.PNG diff --git a/docs/admin/users/groups-roles.md b/docs/admin/users/groups-roles.md index 77dd35bf9dd89..17c0fc8b5b8b9 100644 --- a/docs/admin/users/groups-roles.md +++ b/docs/admin/users/groups-roles.md @@ -31,6 +31,30 @@ Roles determine which actions users can take within the platform. A user may have one or more roles. All users have an implicit Member role that may use personal workspaces. +## Custom Roles (Premium) (Beta) + +Starting in v2.16.0, Premium Coder deployments can configure custom roles on the +[Organization](./organizations.md) level. You can create and assign custom roles +in the dashboard under **Organizations** -> **My Organization** -> **Roles**. + +> Note: This requires a Premium license. +> [Contact your account team](https://coder.com/contact) for more details. + +![Custom roles](../../images/admin/users/roles/custom-roles.PNG) + +Clicking "Create custom role" opens a UI to select the desired permissions for a +given persona. + +![Creating a custom role](../../images/admin/users/roles/creating-custom-role.PNG) + +From there, you can assign the custom role to any user in the organization under +the **Users** settings in the dashboard. + +![Assigning a custom role](../../images/admin/users/roles/assigning-custom-role.PNG) + +Note that these permissions only apply to the scope of an +[organization](./organizations.md), not across the deployment. + ### Security notes A malicious Template Admin could write a template that executes commands on the diff --git a/docs/images/admin/users/roles/assigning-custom-role.PNG b/docs/images/admin/users/roles/assigning-custom-role.PNG new file mode 100644 index 0000000000000000000000000000000000000000..271f1bcae7781f353c1ab2db101cd508655787c0 GIT binary patch literal 64037 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 b>}wxC%TF+27Z?Pe4!|M|NU$1$ZWPS2cnV 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 literal 0 HcmV?d00001 From bc92a19a119661c0b3d33111a81135f38a5aa78f Mon Sep 17 00:00:00 2001 From: Stephen Kirby <58410745+stirby@users.noreply.github.com> Date: Wed, 30 Oct 2024 11:41:52 -0500 Subject: [PATCH 09/10] chore(docs): include custom roles examples and mention of password reset (#15294) Added example custom roles for admin inspiration, mention of headless authentication use case, and user-activated password reset. (cherry picked from commit e9fbfcc45b996e7e55f1f7a06cdedeb595b4f717) --- docs/admin/users/groups-roles.md | 19 +++++++++++++++++++ docs/admin/users/index.md | 7 ++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/docs/admin/users/groups-roles.md b/docs/admin/users/groups-roles.md index 17c0fc8b5b8b9..e40efb0bd5a10 100644 --- a/docs/admin/users/groups-roles.md +++ b/docs/admin/users/groups-roles.md @@ -42,6 +42,25 @@ in the dashboard under **Organizations** -> **My Organization** -> **Roles**. ![Custom roles](../../images/admin/users/roles/custom-roles.PNG) +### Example roles + +- The `Banking Compliance Auditor` custom role cannot create workspaces, but can + read template source code and view audit logs +- The `Organization Lead` role can access user workspaces for troubleshooting + purposes, but cannot edit templates +- The `Platform Member` role cannot edit or create workspaces as they are + created via a third-party system + +Custom roles can also be applied to +[headless user accounts](./headless-auth.md): + +- A `Health Check` role can view deployment status but cannot create workspaces, + manage templates, or view users +- A `CI` role can update manage templates but cannot create workspaces or view + users + +### Creating custom roles + Clicking "Create custom role" opens a UI to select the desired permissions for a given persona. diff --git a/docs/admin/users/index.md b/docs/admin/users/index.md index 6b500ea68ac66..a00030a514f05 100644 --- a/docs/admin/users/index.md +++ b/docs/admin/users/index.md @@ -143,7 +143,12 @@ Confirm the user activation by typing **yes** and pressing **enter**. ## Reset a password -To reset a user's via the web UI: +As of 2.17.0, users can reset their password independently on the login screen +by clicking "Forgot Password." This feature requires +[email notifications](../monitoring/notifications/index.md#smtp-email) to be +configured on the deployment. + +To reset a user's password as an administrator via the web UI: 1. Go to **Users**. 2. Find the user whose password you want to reset, click the vertical ellipsis From 48f7555e917dc352c0c861f7bf35a54707d0c01e Mon Sep 17 00:00:00 2001 From: Stephen Kirby <58410745+stirby@users.noreply.github.com> Date: Fri, 1 Nov 2024 12:17:50 -0500 Subject: [PATCH 10/10] chore(docs): add info on new build timings in docs (#15310) Adds information on workspace build timings in workspace lifecycle and template troubleshooting docs. (cherry picked from commit 399c830b513ce857596d59ffd2d0125ad71456ab) --- docs/admin/templates/troubleshooting.md | 14 ++++++++++++++ .../workspace-build-timings-ui.png | Bin 0 -> 144112 bytes docs/user-guides/workspace-lifecycle.md | 13 +++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 docs/images/admin/templates/troubleshooting/workspace-build-timings-ui.png diff --git a/docs/admin/templates/troubleshooting.md b/docs/admin/templates/troubleshooting.md index 7c61dfaa8be65..e08a422938e2f 100644 --- a/docs/admin/templates/troubleshooting.md +++ b/docs/admin/templates/troubleshooting.md @@ -154,3 +154,17 @@ the top of the script to exit on error. > **Note:** If you aren't seeing any logs, check that the `dir` directive points > to a valid directory in the file system. + +## Slow workspace startup times + +If your workspaces are taking longer to start than expected, or longer than +desired, you can diagnose which steps have the highest impact in the workspace +build timings UI (available in v2.17 and beyond). Admins can can +programmatically pull startup times for individual workspace builds using our +[build timings API endpoint](../../reference/api/builds.md#get-workspace-build-timings-by-id). + +See our +[guide on optimizing workspace build times](../../tutorials/best-practices/speed-up-templates.md) +to optimize your templates based on this data. + +![Workspace build timings UI](../../images/admin/templates/troubleshooting/workspace-build-timings-ui.png) diff --git a/docs/images/admin/templates/troubleshooting/workspace-build-timings-ui.png b/docs/images/admin/templates/troubleshooting/workspace-build-timings-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..137752ec1aa62f0275b0ea4f2d80b0fb609646af GIT binary patch literal 144112 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

=WIu>kUvR2DYN%--t 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

+zI@e` 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

(P35Q7=%kmA+ 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 bP^(Iax)AAb54M=BS#w-n|5(Pic31xeF9l+D literal 0 HcmV?d00001 diff --git a/docs/user-guides/workspace-lifecycle.md b/docs/user-guides/workspace-lifecycle.md index 12c2b021112dc..56d0c0b5ba7fd 100644 --- a/docs/user-guides/workspace-lifecycle.md +++ b/docs/user-guides/workspace-lifecycle.md @@ -109,6 +109,19 @@ your template's Terraform file and the target resources on your infrastructure. Unhealthy workspaces are usually caused by a misconfiguration in the agent or workspace startup scripts. +## Workspace build times + +After a successful build, you can see a timing breakdown of the workspace +startup process from the dashboard (starting in v2.17). We capture and display +both time taken to provision the workspace's compute and agent startup steps. +These include any +[`coder_script`](https://registry.terraform.io/providers/coder/coder/latest/docs/resources/script)s +such as [dotfiles](./workspace-dotfiles.md) or +[`coder_app`](https://registry.terraform.io/providers/coder/coder/latest/docs/resources/app) +startups. + +![Workspace build timings UI](../images/admin/templates/troubleshooting/workspace-build-timings-ui.png) + ### Next steps - [Connecting to your workspace](./index.md)