diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ee1ff064a7..9806375b86 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -3,3 +3,4 @@ # For more info, see https://help.github.com/articles/about-codeowners/ * @elastic/obs-docs +/.github/workflows/co-docs-builder.yml @elastic/docs-engineering diff --git a/.github/workflows/co-docs-builder.yml b/.github/workflows/co-docs-builder.yml new file mode 100644 index 0000000000..e37cdf4aca --- /dev/null +++ b/.github/workflows/co-docs-builder.yml @@ -0,0 +1,31 @@ +name: Elastic docs + +on: + pull_request_target: + # The paths property can be omitted entirely if the repo is mainly used for docs. Leaving it in can result in builds that + # have branch protection checks in place lose the ability to merge because the workflow is not starting. If this property + # is included, please ensure that branch protection checks are disabled for the repo. + paths: + # Preface with your docs dir if you need further specificity (optional) + - 'docs/en/serverless/**.mdx' + - 'docs/en/serverless/**.docnav.json' + - 'docs/en/serverless/**.docapi.json' + - 'docs/en/serverless/**.devdocs.json' + - 'docs/en/serverless/**.jpg' + - 'docs/en/serverless/**.jpeg' + - 'docs/en/serverless/**.svg' + - 'docs/en/serverless/**.png' + - 'docs/en/serverless/**.gif' + types: [closed, opened, synchronize, labeled] + +jobs: + publish: + if: contains(github.event.pull_request.labels.*.name, 'ci:doc-build') + uses: elastic/workflows/.github/workflows/docs-elastic-co-publish.yml@main + with: + subdirectory: 'docs/en/serverless/' + secrets: + VERCEL_GITHUB_TOKEN: ${{ secrets.VERCEL_GITHUB_TOKEN_PUBLIC }} + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN_PUBLIC }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID_PUBLIC }} + VERCEL_PROJECT_ID_DOCS_CO: ${{ secrets.VERCEL_PROJECT_ID_DOCS_CO_PUBLIC }} diff --git a/.github/workflows/opentelemetry.yml b/.github/workflows/opentelemetry.yml deleted file mode 100644 index 84a6209ff2..0000000000 --- a/.github/workflows/opentelemetry.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -# Look up results at https://ela.st/oblt-ci-cd-stats. -# There will be one service per GitHub repository, including the org name, and one Transaction per Workflow. -name: OpenTelemetry Export Trace - -on: - workflow_run: - workflows: [ "*" ] - types: [completed] - -permissions: - contents: read - -jobs: - otel-export-trace: - runs-on: ubuntu-latest - steps: - - uses: elastic/apm-pipeline-library/.github/actions/opentelemetry@current - with: - vaultUrl: ${{ secrets.VAULT_ADDR }} - vaultRoleId: ${{ secrets.VAULT_ROLE_ID }} - vaultSecretId: ${{ secrets.VAULT_SECRET_ID }} diff --git a/README.md b/README.md index 908e5cc331..87f86630c6 100644 --- a/README.md +++ b/README.md @@ -8,32 +8,70 @@ Within this repo, the `/docs/en/` directory is structured as follows: | Directory | Description | | --------------------- | ----------- | -| __integrations__ | Contains the source files for the [Integrations Developer Guide](https://www.elastic.co/guide/en/integrations-developer/current/index.html) +| __integrations__ | Contains the source files for the [Integrations Developer Guide](https://www.elastic.co/guide/en/integrations-developer/current/index.html). | __observability__ | Contains the source files for the [Observability Guide](https://www.elastic.co/guide/en/observability/current/index.html), which includes content for APM, Logs, Metrics, Synthetics, User experience, and Uptime.| +| __serverless__ | Contains the source files for the [Elastic Observability Serverless docs](https://docs.elastic.co/serverless/observability/what-is-observability-serverless). | __shared__ | Contains the source files for shared Observability content.| | __templates__ | Contains content templates.| -## Reviews - -All documentation pull requests automatically add the **[@obs-docs](https://github.com/orgs/elastic/teams/obs-docs)** team as a reviewer. +## Contributing -## Backporting +If you find any bugs in our documentation, or want to request an enhancement, then you can open an issue using our template. We also welcome contributions in the form of PRs. Before you submit a PR, make sure that you have signed our [Contributor License Agreement](https://www.elastic.co/contributor-agreement/). -Pull requests should be tagged with the target version of the Elastic Stack along with any relevant backport labels. In general, we only backport documentation changes to [live stack versions](https://github.com/elastic/docs/blob/master/conf.yaml#L74). For manual backports, we recommend using the [backport tool](https://github.com/sqren/backport) to easily open backport PRs. If you need help, ping **[@obs-docs](https://github.com/orgs/elastic/teams/obs-docs)** and we'd be happy to handle the backport process for you. +Contributing directly to the docs works differently across the doc sets in this repo. +### Observability Guide -## Build +The source files for the Observability Guide are written in [AsciiDoc](https://docs.asciidoctor.org/asciidoc/latest/) and are built using [elastic/docs](https://github.com/elastic/docs). -To build the docs: +To build the docs locally: 1. Check out the `elastic/docs` repository, along with any repositories that contain source files. - 2. Run the `build_docs` script, passing in the path to the `index.asciidoc` and resource paths to other repos that contain source files. For example, to build the Observability Guide and open it in the browser, run: + ``` + ../docs/build_docs --doc ./docs/en/observability/index.asciidoc --chunk 3 --resource ../apm-server --resource ../ingest-docs/docs --open + ``` -``` -../docs/build_docs --doc ./docs/en/observability/index.asciidoc --chunk 3 --resource ../apm-server --resource ../ingest-docs/docs --open -``` +The above command assumes that this repo, [elastic/docs](https://github.com/elastic/docs), [elastic/ingest-docs](https://github.com/elastic/ingest-docs), and [elastic/apm-server](https://github.com/elastic/apm-server) are checked out into the same parent directory. + +If you prefer to use aliases, you can load the [elastic/docs/doc_build_aliases.sh file](https://github.com/elastic/docs/blob/master/doc_build_aliases.sh), which has the resources defined for you. + +### Elastic Observability Serverless docs + +The Elastic Observability Serverless docs use a custom syntax written in [MDX](https://mdxjs.com/). In many cases, you only need to know plain Markdown to contribute. We'll add a public component reference and additional contribution guidelines in future. Elasticians can refer to our [internal syntax reference](https://docs.elastic.dev/docsmobile/syntax). + +### Integrations Developer Guide + +The source files for the Integrations Developer Guide are written in [AsciiDoc](https://docs.asciidoctor.org/asciidoc/latest/) and are built using [elastic/docs](https://github.com/elastic/docs). + +To build the docs locally: + +1. Check out the `elastic/docs` repository, along with any repositories that contain source files. +2. Run the `build_docs` script, passing in the path to the `index.asciidoc` and resource paths to other repos that contain source files. For example, to build the Observability Guide and open it in the browser, run: + ``` + ../docs/build_docs --doc ./docs/en/integrations/index.asciidoc --resource=../package-spec/versions --chunk 1 --open + ``` -The above command assumes that [elastic/docs](https://github.com/elastic/docs), [elastic/ingest-docs](https://github.com/elastic/ingest-docs), and [elastic/apm-server](https://github.com/elastic/apm-server) are checked out into the same parent directory. +The above command assumes that this repo, [elastic/docs](https://github.com/elastic/docs), and [elastic/package-spec](https://github.com/elastic/package-spec), are checked out into the same parent directory. If you prefer to use aliases, you can load the [elastic/docs/doc_build_aliases.sh file](https://github.com/elastic/docs/blob/master/doc_build_aliases.sh), which has the resources defined for you. + +## Backporting + +Backporting works differently across the doc sets in this repo. + +### Observability Guide + +Pull requests should be tagged with the target version of the Elastic Stack along with any relevant backport labels. In general, we only backport documentation changes to [live stack versions](https://github.com/elastic/docs/blob/master/conf.yaml#L74). For manual backports, we recommend using the [backport tool](https://github.com/sqren/backport) to easily open backport PRs. If you need help, ping **[@obs-docs](https://github.com/orgs/elastic/teams/obs-docs)** and we'd be happy to handle the backport process for you. + +### Elastic Observability Serverless docs + +Serverless docs are not versioned, and should never be backported. All changes should be made to the `main` branch. + +### Integrations Developer Guide + +The Integrations Developer Guide is not versioned, and should never be backported. All changes should be made to the `main` branch. + +## Reviews + +All documentation pull requests automatically add the **[@obs-docs](https://github.com/orgs/elastic/teams/obs-docs)** team as a reviewer. diff --git a/docs/en/observability/apm/data-model.asciidoc b/docs/en/observability/apm/data-model.asciidoc index 7d049cfad2..03493aa366 100644 --- a/docs/en/observability/apm/data-model.asciidoc +++ b/docs/en/observability/apm/data-model.asciidoc @@ -357,9 +357,9 @@ You can filter and group by these dimensions (some of which are optional, for ex * `host.name`: The user-defined name of the host or the detected hostname of the service that served the transaction * `host.os.platform`: The platform name of the service that served the transaction, for example `linux` * `kubernetes.pod.name`: The name of the Kubernetes pod running the service that served the transaction -* `labels`: Key-value object containing string labels set globally by the APM agents. +* `labels`: Key-value object containing string labels set globally by the APM agents. This dimension is not present for RUM agents. * `metricset.interval`: A string with the aggregation interval the metricset represents. -* `numeric_labels`: Key-value object containing numeric labels set globally by the APM agents. +* `numeric_labels`: Key-value object containing numeric labels set globally by the APM agents. This dimension is not present for RUM agents. * `service.environment`: The environment of the service that served the transaction * `service.language.name`: The language name of the service that served the transaction, for example `Go` * `service.language.version`: The language version of the service that served the transaction @@ -411,9 +411,9 @@ These metric documents can be identified by searching for `metricset.name: servi You can filter and group by these dimensions: * `agent.name`: The name of the {apm-agent} that instrumented the operation, for example `java` -* `labels`: Key-value object containing string labels set globally by the APM agents. +* `labels`: Key-value object containing string labels set globally by the APM agents. This dimension is not present for RUM agents. * `metricset.interval`: A string with the aggregation interval the metricset represents. -* `numeric_labels`: Key-value object containing numeric labels set globally by the APM agents. +* `numeric_labels`: Key-value object containing numeric labels set globally by the APM agents. This dimension is not present for RUM agents. * `service.environment`: The environment of the service that made the request * `service.language.name`: The language name of the service that served the transaction, for example `Go` * `service.name`: The name of the service that made the request @@ -456,9 +456,9 @@ You can filter and group by these dimensions: * `agent.name`: The name of the {apm-agent} that instrumented the operation, for example `java` * `event.outcome`: The outcome of the operation, for example `success` -* `labels`: Key-value object containing string labels set globally by the APM agents. +* `labels`: Key-value object containing string labels set globally by the APM agents. This dimension is not present for RUM agents. * `metricset.interval`: A string with the aggregation interval the metricset represents. -* `numeric_labels`: Key-value object containing numeric labels set globally by the APM agents. +* `numeric_labels`: Key-value object containing numeric labels set globally by the APM agents. This dimension is not present for RUM agents. * `service.environment`: The environment of the service that made the request * `service.language.name`: The language name of the service that served the transaction, for example `Go` * `service.name`: The name of the service that made the request @@ -496,9 +496,9 @@ These metric documents can be identified by searching for `metricset.name: servi You can filter and group by these dimensions: * `agent.name`: The name of the {apm-agent} that instrumented the operation, for example `java` -* `labels`: Key-value object containing string labels set globally by the APM agents. +* `labels`: Key-value object containing string labels set globally by the APM agents. This dimension is not present for RUM agents. * `metricset.interval`: A string with the aggregation interval the metricset represents. -* `numeric_labels`: Key-value object containing numeric labels set globally by the APM agents. +* `numeric_labels`: Key-value object containing numeric labels set globally by the APM agents. This dimension is not present for RUM agents. * `service.environment`: The environment of the service that made the request * `service.language.name`: The language name of the service that served the transaction, for example `Go` * `service.name`: The name of the service that made the request @@ -574,7 +574,9 @@ Once this limit is reached, any new combinations of `transaction.name`, `transac This issue can be resolved by increasing memory available to APM Server, or by ensuring that the dimensions do not use values that are based on parameters that can change. For example, user ids, product ids, order numbers, query parameters, etc., -should be stripped away from the dimensions. +should be stripped away from the dimensions. For the same reason, avoid high cardinality global labels (`labels.\*` and `numeric_labels.*`). + +Aggregated metrics do not consider global labels from RUM agents in order to protect APM server from using too much memory. // This heading is linked to from the APM UI section in Kibana [[apm-data-model-metadata]] diff --git a/docs/en/observability/cloud-monitoring/aws/images/firehose-waf-logs.png b/docs/en/observability/cloud-monitoring/aws/images/firehose-waf-logs.png new file mode 100644 index 0000000000..0e05f6fa55 Binary files /dev/null and b/docs/en/observability/cloud-monitoring/aws/images/firehose-waf-logs.png differ diff --git a/docs/en/observability/cloud-monitoring/aws/monitor-amazon-intro.asciidoc b/docs/en/observability/cloud-monitoring/aws/monitor-amazon-intro.asciidoc index f0770b9efa..928b86c0bb 100644 --- a/docs/en/observability/cloud-monitoring/aws/monitor-amazon-intro.asciidoc +++ b/docs/en/observability/cloud-monitoring/aws/monitor-amazon-intro.asciidoc @@ -38,6 +38,8 @@ include::monitor-aws-vpc-flow-logs.asciidoc[leveloffset=+2] include::monitor-aws-cloudtrail-firehose.asciidoc[leveloffset=+2] +include::monitor-aws-waf-firehose.asciidoc[leveloffset=+2] + include::monitor-aws-cloudwatch-firehose.asciidoc[leveloffset=+2] include::monitor-aws-firehose-troubleshooting.asciidoc[leveloffset=+2] diff --git a/docs/en/observability/cloud-monitoring/aws/monitor-aws-waf-firehose.asciidoc b/docs/en/observability/cloud-monitoring/aws/monitor-aws-waf-firehose.asciidoc new file mode 100644 index 0000000000..8433de4701 --- /dev/null +++ b/docs/en/observability/cloud-monitoring/aws/monitor-aws-waf-firehose.asciidoc @@ -0,0 +1,128 @@ +[[monitor-aws-waf-firehose]] += Monitor Web Application Firewall (WAF) logs + +++++ +Monitor WAF logs +++++ + +In this section, you'll learn how to send AWS WAF events from AWS to your {stack} using Amazon Data Firehose. + +You will go through the following steps: + +- Select a WAF-compatible resource (for example, a CloudFront distribution) +- Create a delivery stream in Amazon Data Firehose +- Create a web Access Control List (ACL) to generate WAF logs +- Set up logging to forward the logs to the {stack} using a Firehose stream +- Visualize your WAF logs in {kib} + +[discrete] +[[firehose-waf-prerequisites]] +== Before you begin + +We assume that you already have: + +- An AWS account with permissions to pull the necessary data from AWS. +- A deployment using our hosted {ess} on {ess-trial}[{ecloud}]. The deployment includes an {es} cluster for storing and searching your data, and {kib} for visualizing and managing your data. AWS Data Firehose works with Elastic Stack version 7.17 or greater, running on Elastic Cloud only. + +IMPORTANT: Make sure the deployment is on AWS, because the Amazon Data Firehose delivery stream connects specifically to an endpoint that needs to be on AWS. + +[discrete] +[[firehose-waf-step-one]] +== Step 1: Install the AWS integration in {kib} + +. In {kib}, navigate to *Management* > *Integrations* and browse the catalog to find the AWS integration. + +. Navigate to the *Settings* tab and click *Install AWS assets*. + +[discrete] +[[firehose-waf-step-two]] +== Step 2: Create a delivery stream in Amazon Data Firehose + +. Go to the https://console.aws.amazon.com/[AWS console] and navigate to Amazon Data Firehose. + +. Click *Create Firehose stream* and choose the source and destination of your Firehose stream. Unless you are streaming data from Kinesis Data Streams, set source to `Direct PUT` and destination to `Elastic`. + +. Provide a meaningful *Firehose stream name* that will allow you to identify this delivery stream later. Your Firehose name must start with the prefix `aws-waf-logs-` or it will not show up later. + +NOTE: For advanced use cases, source records can be transformed by invoking a custom Lambda function. When using Elastic integrations, this should not be required. + +[discrete] +[[firehose-waf-step-three]] +== Step 3: Specify the destination settings for your Firehose stream + +. From the *Destination settings* panel, specify the following settings: ++ +* *Elastic endpoint URL*: Enter the Elastic endpoint URL of your Elasticsearch cluster. To find the Elasticsearch endpoint, go to the Elastic Cloud console, navigate to the Integrations page, and select *Connection details*. Here is an example of how it looks like: `https://my-deployment.es.us-east-1.aws.elastic-cloud.com`. ++ +* *API key*: Enter the encoded Elastic API key. To create an API key, go to the Elastic Cloud console, navigate to the Integrations page, select *Connection details* and click *Create and manage API keys*. If you are using an API key with *Restrict privileges*, make sure to review the Indices privileges to provide at least "auto_configure" & "write" permissions for the indices you will be using with this delivery stream. ++ +* *Content encoding*: For a better network efficiency, leave content encoding set to GZIP. ++ +* *Retry duration*: Determines how long Firehose continues retrying the request in the event of an error. A duration of 60-300s should be suitable for most use cases. ++ +* *es_datastream_name*: `logs-aws.waf-default` + +[discrete] +[[firehose-waf-step-four]] +== Step 4: Create a web access control list + +To create a new web access control list (ACL), follow these steps: + +. Go to the https://console.aws.amazon.com/[AWS console] and navigate to the *WAF & Shield* page. + +. Describe web ACL by entering the resource type, region, and name. + +. Associate it to an AWS resource. If you don't have an existing resource, you can create and attach a web ACL to several AWS resources: ++ +- CloudFront distribution +- Application Load Balancers +- Amazon API Gateway REST APIs +- Amazon App Runner services +- AWS AppSync GraphQL APIs +- Amazon Cognito user pools +- AWS Verified Access Instances + +. Add a 1 or 2 rules to the *Free rule groups* list from the AWS managed rule groups. Keep all other settings to their default values. + +. Set the rule priority by keeping default values. + +. Configure metrics by keeping default values. + +. Review and create the web ACL. + +[discrete] +[[firehose-waf-step-five]] +== Step 5: Set up logging + +. Go to the web ACL you created in the previous step. + +. Open the *Logging and metrics* section and edit the following settings: ++ +- *Logging destination*: select "Amazon Data Firehose stream" +- *Amazon Data Firehose stream*: select the Firehose stream you created in step 2. + +WAF creates the required Identity and Access Management (IAM) role. +If your Firehose stream name doesn't appear in the list, make sure the name you chose for the stream starts with `aws-waf-logs-`, as prescribed by AWS naming conventions. + +[discrete] +[[firehose-waf-step-six]] +== Step 6: Visualize your WAF logs in {kib} + +You can now log into your {stack} to check if the WAF logs are flowing. To generate logs, you can use cURL to send HTTP requests to your testing CloudFront distribution. + +[source,console] +---- +curl -i https://.cloudfront.net +---- + +To maintain a steady flow of logs, you can use `watch -n 5` to repeat the command every 5 seconds. + +[source,console] +---- +watch -n 5 curl -i https://.cloudfront.net +---- + +Navigate to Kibana and visualize the first WAF logs in your {stack}. + +[role="screenshot"] +image::firehose-waf-logs.png[Firehose WAF logs in Kibana] diff --git a/docs/en/observability/images/hosts.png b/docs/en/observability/images/hosts.png index 31732906fc..479ba32124 100644 Binary files a/docs/en/observability/images/hosts.png and b/docs/en/observability/images/hosts.png differ diff --git a/docs/en/observability/images/log-threshold-breach.png b/docs/en/observability/images/log-threshold-breach.png new file mode 100644 index 0000000000..200ddfb875 Binary files /dev/null and b/docs/en/observability/images/log-threshold-breach.png differ diff --git a/docs/en/observability/images/metrics-overlay.png b/docs/en/observability/images/metrics-overlay.png index c04c794b48..4d40b434d4 100644 Binary files a/docs/en/observability/images/metrics-overlay.png and b/docs/en/observability/images/metrics-overlay.png differ diff --git a/docs/en/observability/index.asciidoc b/docs/en/observability/index.asciidoc index dc2be31769..a2daf4fa72 100644 --- a/docs/en/observability/index.asciidoc +++ b/docs/en/observability/index.asciidoc @@ -172,6 +172,7 @@ include::create-alerts.asciidoc[leveloffset=+1] include::aggregation-options.asciidoc[leveloffset=+2] include::view-observability-alerts.asciidoc[leveloffset=+2] include::triage-slo-burn-rate-breaches.asciidoc[leveloffset=+3] +include::triage-threshold-breaches.asciidoc[leveloffset=+3] //SLOs include::slo-overview.asciidoc[leveloffset=+1] diff --git a/docs/en/observability/monitor-infra/analyze-hosts.asciidoc b/docs/en/observability/monitor-infra/analyze-hosts.asciidoc index d9ec1e154d..8617802465 100644 --- a/docs/en/observability/monitor-infra/analyze-hosts.asciidoc +++ b/docs/en/observability/monitor-infra/analyze-hosts.asciidoc @@ -35,9 +35,9 @@ averages of key metrics, including CPU usage, memory usage, and throughput. default is 50, which means the page shows data for the top 50 hosts based on the most recent timestamps. You can increase the host limit to see data for more hosts, but doing so may impact query performance. -* The Hosts table shows a breakdown of metrics for each host. You may need to -page through the list or change the number of rows displayed on each page to see -all of your hosts. +* The Hosts table shows a breakdown of metrics for each host along with an alert count +for any hosts with active alerts. You may need to page through the list +or change the number of rows displayed on each page to see all of your hosts. * Each host name is an active link to a <> page, which includes metrics, host metadata, alerts, processes, logs, and anomalies. You can optionally open the host details in an overlay. @@ -46,6 +46,8 @@ the already returned data set. * The tabs at the bottom of the page show an overview of the metrics, logs, and alerts for all hosts returned by your search. +TIP: For more information about creating and viewing alerts, refer to <>. + [discrete] [[analyze-hosts-filter-view]] == Filter the Hosts view @@ -170,6 +172,18 @@ image::images/hosts-view-alerts.png[Screenshot showing Alerts view] To see alerts for a specific host, refer to <>. +***** +**Why are alerts missing from the Hosts page?** + +If your rules are triggering alerts that don't appear on the **Hosts** page, +edit the rules and make sure they are correctly configured to associate the host name with the alert: + +* For Metric threshold or Custom threshold rules, select `host.name` in the **Group alerts by** field. +* For Inventory rules, select **Host** for the node type under **Conditions**. + +To learn more about creating and managing rules, refer to <>. +***** + [discrete] [[view-host-details]] == View host details diff --git a/docs/en/observability/monitor-infra/host-details-partial.asciidoc b/docs/en/observability/monitor-infra/host-details-partial.asciidoc index fcce796c1c..bbd7025008 100644 --- a/docs/en/observability/monitor-infra/host-details-partial.asciidoc +++ b/docs/en/observability/monitor-infra/host-details-partial.asciidoc @@ -13,6 +13,8 @@ Change the time range to view metrics over a specific period of time. Hover over a specific time period on a chart to compare the various metrics at that given time. +Expand the **Alerts** section to see alerts related to the selected host. + ==== [%collapsible] diff --git a/docs/en/observability/triage-slo-burn-rate-breaches.asciidoc b/docs/en/observability/triage-slo-burn-rate-breaches.asciidoc index 420b0204c6..b0748e8b62 100644 --- a/docs/en/observability/triage-slo-burn-rate-breaches.asciidoc +++ b/docs/en/observability/triage-slo-burn-rate-breaches.asciidoc @@ -9,8 +9,8 @@ When this happens, you are at risk of exhausting your error budget and violating To triage issues quickly, go to the alert details page: -. Go to **{observability}** -> **Alerts** (or open the SLO and click **Alerts**.) -. From the Alerts table, click the image:images/icons/boxesHorizontal.svg[More actions icon] icon next to the alert and select **View alert details**. +. Go to **{observability}** → **Alerts** (or open the SLO and click **Alerts**). +. From the Alerts table, click the image:images/icons/boxesHorizontal.svg[More actions] icon next to the alert and select **View alert details**. The alert details page shows information about the alert, including when the alert was triggered, the duration of the alert, the source SLO, and the rule that triggered the alert. @@ -37,3 +37,5 @@ After investigating the alert, you may want to: * Click **Snooze the rule** to snooze notifications for a specific time period or indefinitely. * Click the image:images/icons/boxesVertical.svg[Actions] icon and select **Add to case** to add the alert to a new or existing case. To learn more, refer to <>. * Click the image:images/icons/boxesVertical.svg[Actions] icon and select **Mark as untracked**. +When an alert is marked as untracked, actions are no longer generated. +You can choose to move active alerts to this state when you disable or delete rules. diff --git a/docs/en/observability/triage-threshold-breaches.asciidoc b/docs/en/observability/triage-threshold-breaches.asciidoc new file mode 100644 index 0000000000..9cc1341065 --- /dev/null +++ b/docs/en/observability/triage-threshold-breaches.asciidoc @@ -0,0 +1,48 @@ +[[triage-threshold-breaches]] += Triage threshold breaches +++++ +Threshold breaches +++++ + +Threshold breaches occur when an {observability} data type reaches or exceeds the threshold set in your <>. +For example, you might have a custom threshold rule that triggers an alert when the total number of log documents with a log level of `error` reaches 100. + +To triage issues quickly, go to the alert details page: + +. Go to **{observability}** → **Alerts**. +. From the Alerts table, click the image:images/icons/boxesHorizontal.svg[More actions] icon next to the alert and select **View alert details**. + +The alert details page shows information about the alert, including when the alert was triggered, +the duration of the alert, and the last status update. +If there is a "group by" field specified in the rule, the page also includes the source. +You can follow the links to navigate to the rule definition. + +Explore charts on the page to learn more about the threshold breach: + +[role="screenshot"] +image::images/log-threshold-breach.png[Alert details for log threshold breach] + +* The page includes a chart for each condition specified in the rule. +These charts help you understand when the breach occurred and its severity. +* If your rule is intended to detect log threshold breaches +(that is, it has a single condition that uses a count aggregation), +you can run a log rate analysis, assuming you have the required license. +Running a log rate analysis is useful for detecting significant dips or spikes in the number of logs. +Notice that you can adjust the baseline and deviation, and then run the analysis again. +For more information about using the log rate analysis feature, +refer to the {kibana-ref}/xpack-ml-aiops.html#log-rate-analysis[AIOps Labs] documentation. +* The page may also include an alerts history chart that shows the number of triggered alerts per day for the last 30 days. +This chart is currently only available for rules that specify a single condition. +* Timelines on the page are annotated to show when the threshold was breached. +You can hover over an alert icon to see the timestamp of the alert. + +Analyze these charts to better understand when the breach started, it's current +state, and how the issue is trending. + +After investigating the alert, you may want to: + +* Click **Snooze the rule** to snooze notifications for a specific time period or indefinitely. +* Click the image:images/icons/boxesVertical.svg[Actions] icon and select **Add to case** to add the alert to a new or existing case. To learn more, refer to <>. +* Click the image:images/icons/boxesVertical.svg[Actions] icon and select **Mark as untracked**. +When an alert is marked as untracked, actions are no longer generated. +You can choose to move active alerts to this state when you disable or delete rules. diff --git a/docs/en/observability/uptime-intro.asciidoc b/docs/en/observability/uptime-intro.asciidoc index 3c6dc6e46e..f4d8b8732e 100644 --- a/docs/en/observability/uptime-intro.asciidoc +++ b/docs/en/observability/uptime-intro.asciidoc @@ -13,6 +13,8 @@ infrastructure with {heartbeat} natively. For browser-based monitors, a richer management and reporting experience, and more capabilities such as triaging and responding to alerts, use the <> instead of the {uptime-app}. + +Note that the {uptime-app} is hidden from the interface when there is no recent {heartbeat} data. To see the app, you may need to turn on the **Always show legacy Uptime app** setting (`observability:enableLegacyUptimeApp`) under {kib} Advanced Settings. To learn how, refer to {kibana-ref}/advanced-options.html[Advanced Settings]. ==== The {uptime-app} uses {agent} to periodically check the status of your services and applications. diff --git a/docs/en/observability/view-observability-alerts.asciidoc b/docs/en/observability/view-observability-alerts.asciidoc index 86d63a6f21..9411c94fad 100644 --- a/docs/en/observability/view-observability-alerts.asciidoc +++ b/docs/en/observability/view-observability-alerts.asciidoc @@ -34,6 +34,8 @@ An alert is "Active" when the condition defined in the rule currently matches. An alert has "Recovered" when that condition, which previously matched, is currently no longer matching. An alert is "Untracked" when its corresponding rule is disabled or you mark the alert as untracked. To mark the alert as untracked, go to the Alerts table, click the image:images/icons/boxesHorizontal.svg[More actions] icon to expand the "More actions" menu, and click *Mark as untracked*. +When an alert is marked as untracked, actions are no longer generated. +You can choose to move active alerts to this state when you disable or delete rules. NOTE: There is also a "Flapping" status, which means the alert is switching repeatedly between active and recovered states. This status is possible only if you have enabled alert flapping detection. diff --git a/docs/en/serverless/ai-assistant/ai-assistant.mdx b/docs/en/serverless/ai-assistant/ai-assistant.mdx new file mode 100644 index 0000000000..32a62d2258 --- /dev/null +++ b/docs/en/serverless/ai-assistant/ai-assistant.mdx @@ -0,0 +1,251 @@ +--- +id: serverlessObservabilityAiAssistant +slug: /serverless/observability/ai-assistant +title: AI Assistant +# description: Description to be written +tags: [ 'serverless', 'observability', 'overview' ] +--- + + +

+ +The AI Assistant uses generative AI to provide: + +* **Chat**: Have conversations with the AI Assistant. Chat uses function calling to request, analyze, and visualize your data. +* **Contextual insights**: Open prompts throughout ((observability)) that explain errors and messages and suggest remediation. + +![Observability AI assistant preview](../images/ai-assistant-overview.gif) + +The AI Assistant integrates with your large language model (LLM) provider through our supported Elastic connectors: + +* [OpenAI connector](((kibana-ref))/openai-action-type.html) for OpenAI or Azure OpenAI Service. +* [Amazon Bedrock connector](((kibana-ref))/bedrock-action-type.html) for Amazon Bedrock, specifically for the Claude models. + + +The AI Assistant is powered by an integration with your large language model (LLM) provider. +LLMs are known to sometimes present incorrect information as if it's correct. +Elastic supports configuration and connection to the LLM provider and your knowledge base, +but is not responsible for the LLM's responses. + + + +Also, the data you provide to the Observability AI assistant is _not_ anonymized, and is stored and processed by the third-party AI provider. This includes any data used in conversations for analysis or context, such as alert or event data, detection rule configurations, and queries. Therefore, be careful about sharing any confidential or sensitive details while using this feature. + + +## Requirements + +The AI assistant requires the following: + +* An account with a third-party generative AI provider that supports function calling. The Observability AI Assistant supports the following providers: + * OpenAI `gpt-4`+. + * Azure OpenAI Service `gpt-4`(0613) or `gpt-4-32k`(0613) with API version `2023-07-01-preview` or more recent. + * AWS Bedrock, specifically the Anthropic Claude models. +* The knowledge base requires a 4 GB ((ml)) node. + +## Your data and the AI Assistant + +Elastic does not use customer data for model training. This includes anything you send the model, such as alert or event data, detection rule configurations, queries, and prompts. However, any data you provide to the AI Assistant will be processed by the third-party provider you chose when setting up the OpenAI connector as part of the assistant setup. + +Elastic does not control third-party tools, and assumes no responsibility or liability for their content, operation, or use, nor for any loss or damage that may arise from your using such tools. Please exercise caution when using AI tools with personal, sensitive, or confidential information. Any data you submit may be used by the provider for AI training or other purposes. There is no guarantee that the provider will keep any information you provide secure or confidential. You should familiarize yourself with the privacy practices and terms of use of any generative AI tools prior to use. + +## Set up the AI Assistant + +To set up the AI Assistant: + +1. Create an authentication key with your AI provider to authenticate requests from the AI Assistant. You'll use this in the next step. Refer to your provider's documentation for information about creating authentication keys: + * [OpenAI API keys](https://platform.openai.com/docs/api-reference) + * [Azure OpenAI Service API keys](https://learn.microsoft.com/en-us/azure/cognitive-services/openai/reference) + * [Amazon Bedrock authentication keys and secrets](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam.html) +1. From **Project settings** → **Management** → **Connectors**, create an [OpenAI](((kibana-ref))/openai-action-type.html) or [Amazon Bedrock](((kibana-ref))/bedrock-action-type.html) connector. +1. Authenticate communication between ((observability)) and the AI provider by providing the following information: + 1. In the **URL** field, enter the AI provider's API endpoint URL. + 1. Under **Authentication**, enter the API key or access key/secret you created in the previous step. + +## Add data to the AI Assistant knowledge base + + +**If you started using the AI Assistant in technical preview**, +any knowledge base articles you created using ELSER v1 will need to be reindexed or upgraded before they can be used. +Going forward, you must create knowledge base articles using ELSER v2. +You can either: + +* Clear all old knowledge base articles manually and reindex them. +* Upgrade all knowledge base articles indexed with ELSER v1 to ELSER v2 using a [Python script](https://github.com/elastic/elasticsearch-labs/blob/main/notebooks/model-upgrades/upgrading-index-to-use-elser.ipynb). + + +The AI Assistant uses [ELSER](((ml-docs))/ml-nlp-elser.html), Elastic's semantic search engine, to recall data from its internal knowledge base index to create retrieval augmented generation (RAG) responses. Adding data such as Runbooks, GitHub issues, internal documentation, and Slack messages to the knowledge base gives the AI Assistant context to provide more specific assistance. + + +Your AI provider may collect telemetry when using the AI Assistant. Contact your AI provider for information on how data is collected. + + +You can add information to the knowledge base by asking the AI Assistant to remember something while chatting (for example, "remember this for next time"). The assistant will create a summary of the information and add it to the knowledge base. + +You can also add external data to the knowledge base either in the Project Settings UI or using the ((es)) Index API. + +### Use the UI + +To add external data to the knowledge base in the Project Settings UI: + +1. Go to **Project Settings**. +1. In the _Other_ section, click **AI assistant for Observability settings**. +1. Then select the **Elastic AI Assistant for Observability**. +1. Switch to the **Knowledge base** tab. +1. Click the **New entry** button, and choose either: + + * **Single entry**: Write content for a single entry in the UI. + * **Bulk import**: Upload a newline delimited JSON (`ndjson`) file containing a list of entries to add to the knowledge base. + Each object should conform to the following format: + + ```json + { + "id": "a_unique_human_readable_id", + "text": "Contents of item", + } + ``` + +### Use the ((es)) Index API + +1. Ingest external data (GitHub issues, Markdown files, Jira tickets, text files, etc.) into ((es)) using the ((es)) [Index API](((ref))/docs-index_.html). +1. Reindex your data into the AI Assistant's knowledge base index by completing the following query in **Developer Tools** → **Console**. Update the following fields before reindexing: + * `InternalDocsIndex`: Name of the index where your internal documents are stored. + * `text_field`: Name of the field containing your internal documents' text. + * `timestamp`: Name of the timestamp field in your internal documents. + * `public`: If `true`, the document is available to all users with access to your Observability project. If `false`, the document is restricted to the user indicated in the following `user.name` field. + * `user.name` (optional): If defined, restricts the internal document's availability to a specific user. + * You can add a query filter to index specific documents. + +```console +POST _reindex +{ + "source": { + "index": "", + "_source": [ + "", + "", + "namespace", + "is_correction", + "public", + "confidence" + ] + }, + "dest": { + "index": ".kibana-observability-ai-assistant-kb-000001", + "pipeline": ".kibana-observability-ai-assistant-kb-ingest-pipeline" + }, + "script": { + "inline": "ctx._source.text = ctx._source.remove(\"\");ctx._source.namespace=\"\";ctx._source.is_correction=false;ctx._source.public=;ctx._source.confidence=\"high\";ctx._source['@timestamp'] = ctx._source.remove(\"\");ctx._source['user.name'] = \"\"" + } +} +``` + +## Interact with the AI Assistant + +You can chat with the AI Assistant or interact with contextual insights located throughout ((observability)). +See the following sections for more on interacting with the AI Assistant. + + +After every answer the LLM provides, let us know if the answer was helpful. +Your feedback helps us improve the AI Assistant! + + +### AI Assistant chat + +Click **AI Assistant** in the upper-right corner where available to start the chat: + +![Observability AI assistant preview](../images/ai-assistant-button.png) + +This opens the AI Assistant flyout, where you can ask the assistant questions about your instance: + +![Observability AI assistant chat](../images/ai-assistant-chat.png) + +### AI Assistant functions + + + +The AI Assistant uses several functions to include relevant context in the chat conversation through text, data, and visual components. Both you and the AI Assistant can suggest functions. You can also edit the AI Assistant's function suggestions and inspect function responses. For example, you could use the `kibana` function to call a ((kib)) API on your behalf. + +You can suggest the following functions: + + + + `alerts` + Get alerts for ((observability)). + + + `elasticsearch` + Call ((es)) APIs on your behalf. + + + `kibana` + Call ((kib)) APIs on your behalf. + + + `summarize` + Summarize parts of the conversation. + + + `visualize_query` + Visualize charts for ES|QL queries. + + + +Additional functions are available when your cluster has APM data: + + + + `get_apm_correlations` + Get field values that are more prominent in the foreground set than the background set. This can be useful in determining which attributes (such as `error.message`, `service.node.name`, or `transaction.name`) are contributing to, for instance, a higher latency. Another option is a time-based comparison, where you compare before and after a change point. + + + `get_apm_downstream_dependencies` + Get the downstream dependencies (services or uninstrumented backends) for a service. Map the downstream dependency name to a service by returning both `span.destination.service.resource` and `service.name`. Use this to drill down further if needed. + + + `get_apm_error_document` + Get a sample error document based on the grouping name. This also includes the stacktrace of the error, which might hint to the cause. + + + `get_apm_service_summary` + Get a summary of a single service, including the language, service version, deployments, the environments, and the infrastructure that it is running in. For example, the number of pods and a list of their downstream dependencies. It also returns active alerts and anomalies. + + + `get_apm_services_list` + Get the list of monitored services, their health statuses, and alerts. + + + `get_apm_timeseries` + Display different APM metrics (such as throughput, failure rate, or latency) for any service or all services and any or all of their dependencies. Displayed both as a time series and as a single statistic. Additionally, the function returns any changes, such as spikes, step and trend changes, or dips. You can also use it to compare data by requesting two different time ranges, or, for example, two different service versions. + + + +### AI Assistant contextual prompts + +AI Assistant contextual prompts throughout ((observability)) provide the following information: + +- **Alerts**: Provides possible causes and remediation suggestions for log rate changes. +- **Application performance monitoring (APM)**: Explains APM errors and provides remediation suggestions. +- **Logs**: Explains log messages and generates search patterns to find similar issues. + +{/* Not included in initial serverless launch */} +{/* - **Universal Profiling**: explains the most expensive libraries and functions in your fleet and provides optimization suggestions. */} +{/* - **Infrastructure Observability**: explains the processes running on a host. */} + +For example, in the log details, you'll see prompts for **What's this message?** and **How do I find similar log messages?**: + +![Observability AI assistant example prompts for logs](../images/ai-assistant-logs-prompts.png) + +Clicking a prompt generates a message specific to that log entry. +You can continue a conversation from a contextual prompt by clicking **Start chat** to open the AI Assistant chat. + +![Observability AI assistant example](../images/ai-assistant-logs.png) + +## Known issues + +### Token limits + +Most LLMs have a set number of tokens they can manage in single a conversation. +When you reach the token limit, the LLM will throw an error, and Elastic will display a "Token limit reached" error. +The exact number of tokens that the LLM can support depends on the LLM provider and model you're using. + + diff --git a/docs/en/serverless/aiops/aiops-analyze-spikes.mdx b/docs/en/serverless/aiops/aiops-analyze-spikes.mdx new file mode 100644 index 0000000000..2538813428 --- /dev/null +++ b/docs/en/serverless/aiops/aiops-analyze-spikes.mdx @@ -0,0 +1,76 @@ +--- +id: serverlessObservabilityAiopsAnalyzeSpikes +slug: /serverless/observability/aiops-analyze-spikes +title: Analyze log spikes and drops +description: Find and investigate the causes of unusual spikes or drops in log rates. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +

+ +
+ +{/* */} + +Elastic ((observability)) provides built-in log rate analysis capabilities, +based on advanced statistical methods, +to help you find and investigate the causes of unusual spikes or drops in log rates. + +To analyze log spikes and drops: + +1. In your ((observability)) project, go to **AIOps** → **Log rate analysis**. +1. Choose a data view or saved search to access the log data you want to analyze. +1. In the histogram chart, click a spike (or drop) to start the analysis. + + ![Histogram showing log spikes and drops ](../images/log-rate-histogram.png) + + When the analysis runs, it identifies statistically significant field-value combinations that contribute to the spike or drop, + and then displays them in a table: + + ![Histogram showing log spikes and drops ](../images/log-rate-analysis-results.png) + + Notice that you can optionally turn on **Smart grouping** to summarize the results into groups. + You can also click **Filter fields** to remove fields that are not relevant. + + The table shows an indicator of the level of impact and a sparkline showing the shape of the impact in the chart. +1. Select a row to display the impact of the field on the histogram chart. +1. From the **Actions** menu in the table, you can choose to view the field in **Discover**, +view it in , +or copy the table row information to the clipboard as a query filter. + +To pin a table row, click the row, then move the cursor to the histogram chart. +It displays a tooltip with exact count values for the pinned field which enables closer investigation. + +Brushes in the chart show the baseline time range and the deviation in the analyzed data. +You can move the brushes to redefine both the baseline and the deviation and rerun the analysis with the modified values. + + +
+ +## Log pattern analysis + +{/* */} + +Use log pattern analysis to find patterns in unstructured log messages and examine your data. +When you run a log pattern analysis, it performs categorization analysis on a selected field, +creates categories based on the data, and then displays them together in a chart. +The chart shows the distribution of each category and an example document that matches the category. +Log pattern analysis is useful when you want to examine how often different types of logs appear in your data set. +It also helps you group logs in ways that go beyond what you can achieve with a terms aggregation. + +To run log pattern analysis: + +1. Follow the steps under to run a log rate analysis. +1. From the **Actions** menu, choose **View in Log Pattern Analysis**. +1. Select a category field and optionally apply any filters that you want. +1. Click **Run pattern analysis**. + + The results of the analysis are shown in a table: + + ![Log pattern analysis of the message field ](../images/log-pattern-analysis.png) + +1. From the **Actions** menu, click the plus (or minus) icon to open **Discover** and show (or filter out) the given category there, which helps you to further examine your log messages. + +{/* TODO: Question: Is the log pattern analysis only available through the log rate analysis UI? */} + +{/* TODO: Add some good examples to this topic taken from existing docs or recommendations from reviewers. */} diff --git a/docs/en/serverless/aiops/aiops-detect-anomalies.mdx b/docs/en/serverless/aiops/aiops-detect-anomalies.mdx new file mode 100644 index 0000000000..4be610691e --- /dev/null +++ b/docs/en/serverless/aiops/aiops-detect-anomalies.mdx @@ -0,0 +1,263 @@ +--- +id: serverlessObservabilityAiopsDetectAnomalies +slug: /serverless/observability/aiops-detect-anomalies +title: Detect anomalies +description: Detect anomalies by comparing real-time and historical data from different sources to look for unusual, problematic patterns. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +

+ +import Roles from '../partials/roles.mdx' + + + +The anomaly detection feature in Elastic ((observability)) automatically models the normal behavior of your time series data — learning trends, +periodicity, and more — in real time to identify anomalies, streamline root cause analysis, and reduce false positives. + +To set up anomaly detection, you create and run anomaly detection jobs. +Anomaly detection jobs use proprietary ((ml)) algorithms to detect anomalous events or patterns, such as: + +* Anomalies related to temporal deviations in values, counts, or frequencies +* Anomalies related to unusual locations in geographic data +* Statistical rarity +* Unusual behaviors for a member of a population + +To learn more about anomaly detection algorithms, refer to the [((ml))](((ml-docs))/ml-ad-algorithms.html) documentation. +Note that the ((ml)) documentation may contain details that are not valid when using a serverless project. + + + +A _datafeed_ retrieves time series data from ((es)) and provides it to an +anomaly detection job for analysis. + +The job uses _buckets_ to divide the time series into batches for processing. +For example, a job may use a bucket span of 1 hour. + +Each ((anomaly-job)) contains one or more _detectors_, which define the type of +analysis that occurs (for example, `max`, `average`, or `rare` analytical +functions) and the fields that are analyzed. Some of the analytical functions +look for single anomalous data points. For example, `max` identifies the maximum +value that is seen within a bucket. Others perform some aggregation over the +length of the bucket. For example, `mean` calculates the mean of all the data +points seen within the bucket. + +To learn more about anomaly detection, refer to the [((ml))](((ml-docs))/ml-ad-overview.html) documentation. + + + +
+ +# Create and run an anomaly detection job + +1. In your ((observability)) project, go to **AIOps** → **Anomaly detection**. +1. Click **Create anomaly detection job** (or **Create job** if other jobs exist). +1. Choose a data view or saved search to access the data you want to analyze. +1. Select the wizard for the type of job you want to create. +The following wizards are available. +You might also see specialized wizards based on the type of data you are analyzing. + +In general, it is a good idea to start with single metric anomaly detection jobs for your key performance indicators. +After you examine these simple analysis results, you will have a better idea of what the influencers might be. +Then you can create multi-metric jobs and split the data or create more complex analysis functions as necessary. + + + + Single metric + + Creates simple jobs that have a single detector. A _detector_ applies an analytical function to specific fields in your data. In addition to limiting the number of detectors, the single metric wizard omits many of the more advanced configuration options. + + Multi-metric + + Creates jobs that can have more than one detector, which is more efficient than running multiple jobs against the same data. + + Population + + Creates jobs that detect activity that is unusual compared to the behavior of the population. + + Advanced + + Creates jobs that can have multiple detectors and enables you to configure all job settings. + + Categorization + + Creates jobs that group log messages into categories and use `count` or `rare` functions to detect anomalies within them. + + Rare + + Creates jobs that detect rare occurrences in time series data. Rare jobs use the `rare` or `freq_rare` functions and also detect rare occurrences in populations. + + Geo + + Creates jobs that detect unusual occurrences in the geographic locations of your data. Your data set must contain geo data. + + + + For more information about job types, refer to the [((ml))](((ml-docs))/ml-anomaly-detection-job-types.html) documentation. + + + + Before selecting a wizard, click **Data Visualizer** to explore the fields and metrics in your data. + To get the best results, you must understand your data, including its data types and the range and distribution of values. + + In the **Data Visualizer**, use the time filter to select a time period that you’re interested in exploring, + or click **Use full data** to view the full time range of data. + Expand the fields to see details about the range and distribution of values. + When you're done, go back to the first step and create your job. + +5. Step through the instructions in the job creation wizard to configure your job. +You can accept the default settings for most settings now and later. +1. If you want the job to start immediately when the job is created, make sure that option is selected on the summary page. +1. When you're done, click **Create job**. +When the job runs, the ((ml)) features analyze the input stream of data, model its behavior, and perform analysis based on the detectors in each job. +When an event occurs outside of the baselines of normal behavior, that event is identified as an anomaly. +1. After the job is started, click **View results**. + +# View the results + +After the anomaly detection job has processed some data, +you can view the results in Elastic ((observability)). + + +Depending on the capacity of your machine, +you might need to wait a few seconds for the analysis to generate initial results. + + +If you clicked **View results** after creating the job, the results open in either the **Single Metric Viewer** or **Anomaly Explorer**. +To switch between these tools, click the icons in the upper-left corner of each tool. + +Read the following sections to learn more about these tools: + +* +* + +
+ +## View single metric job results + +The **Single Metric Viewer** contains a chart that represents the actual and expected values over time: + +![Single Metric Viewer showing analysis ](../images/anomaly-detection-single-metric-viewer.png) + +* The line in the chart represents the actual data values. +* The shaded area represents the bounds for the expected values. +* The area between the upper and lower bounds are the most likely values for the model, using a 95% confidence level. +That is to say, there is a 95% chance of the actual value falling within these bounds. +If a value is outside of this area then it will usually be identified as anomalous. + + + Expected values are available only if **Enable model plot** was selected under Job Details + when you created the job. + + +To explore your data: + +1. If the **Single Metric Explorer** is not already open, go to **AIOps** → **Anomaly detection** and click the Single Metric Explorer icon next to the job you created. +Note that the Single Metric Explorer icon will be grayed out for advanced or multi-metric jobs. +1. In the time filter, specify a time range that covers the majority of the analyzed data points. +1. Notice that the model improves as it processes more data. +At the beginning, the expected range of values is pretty broad, and the model is not capturing the periodicity in the data. +But it quickly learns and begins to reflect the patterns in your data. +The duration of the learning process heavily depends on the characteristics and complexity of the input data. +1. Look for anomaly data points, depicted by colored dots or cross symbols, and hover over a data point to see more details about the anomaly. +Note that anomalies with medium or high multi-bucket impact are depicted with a cross symbol instead of a dot. + + Any data points outside the range that was predicted by the model are marked + as anomalies. In order to provide a sensible view of the results, an + _anomaly score_ is calculated for each bucket time interval. The anomaly score + is a value from 0 to 100, which indicates the significance of the anomaly + compared to previously seen anomalies. The highly anomalous values are shown in + red and the low scored values are shown in blue. An interval with a high + anomaly score is significant and requires investigation. + For more information about anomaly scores, refer to the [((ml))](((ml-docs))/ml-ad-explain.html) documentation. + +1. (Optional) Annotate your job results by drag-selecting a period of time and entering annotation text. +Annotations are notes that refer to events in a specific time period. +They can be created by the user or generated automatically by the anomaly detection job to reflect model changes and noteworthy occurrences. +1. Under **Anomalies**, expand each anomaly to see key details, such as the time, the actual and expected ("typical") values, and their probability. +The **Anomaly explanation** section gives you further insights about each anomaly, such as its type and impact, to make it easier to interpret the job results: + + ![Single Metric Viewer showing anomaly details ](../images/anomaly-detection-details.png) + + By default, the **Anomalies** table contains all anomalies that have a severity of "warning" or higher in the selected section of the timeline. + If you are only interested in critical anomalies, for example, you can change the severity threshold for this table. + +1. (Optional) From the **Actions** menu in the **Anomalies** table, you can choose to view relevant documents in **Discover** or create a job rule. +Job rules instruct anomaly detectors to change their behavior based on domain-specific knowledge that you provide. +To learn more, refer to + +After you have identified anomalies, often the next step is to try to determine +the context of those situations. For example, are there other factors that are +contributing to the problem? Are the anomalies confined to particular +applications or servers? You can begin to troubleshoot these situations by +layering additional jobs or creating multi-metric jobs. + +
+ +## View advanced or multi-metric job results + +Conceptually, you can think of _multi-metric anomaly detection jobs_ as running multiple independent single metric jobs. +By bundling them together in a multi-metric job, however, +you can see an overall score and shared influencers for all the metrics and all the entities in the job. +Multi-metric jobs therefore scale better than having many independent single metric jobs. +They also provide better results when you have influencers that are shared across the detectors. + + +When you create an anomaly detection job, you can identify fields as _influencers_. +These are fields that you think contain information about someone or something that influences or contributes to anomalies. +As a best practice, do not pick too many influencers. +For example, you generally do not need more than three. +If you pick many influencers, the results can be overwhelming, and there is some overhead to the analysis. + +To learn more about influencers, refer to the [((ml))](((ml-docs))/ml-ad-run-jobs.html#ml-ad-influencers) documentation. + + + +You can also configure your anomaly detection jobs to split a single time series into multiple time series based on a categorical field. +For example, you could create a job for analyzing response code rates that has a single detector that splits the data based on the `response.keyword`, +and uses the `count` function to determine when the number of events is anomalous. +You might use a job like this if you want to look at both high and low request rates partitioned by response code. + +To view advanced or multi-metric results in the +**Anomaly Explorer**: + +1. If the **Anomaly Explorer** is not already open, go to **AIOps** → **Anomaly detection** and click the Anomaly Explorer icon next to the job you created. +1. In the time filter, specify a time range that covers the majority of the analyzed data points. +1. If you specified influencers during job creation, the view includes a list of the top influencers for all of the detected anomalies in that same time period. +The list includes maximum anomaly scores, which in this case are aggregated for each influencer, for each bucket, across all detectors. +There is also a total sum of the anomaly scores for each influencer. +Use this list to help you narrow down the contributing factors and focus on the most anomalous entities. +1. Under **Anomaly timeline**, click a section in the swim lanes to obtain more information about the anomalies in that time period. + ![Anomaly Explorer showing swim lanes with anomaly selected ](../images/anomaly-explorer.png) + You can see exact times when anomalies occurred. + If there are multiple detectors or metrics in the job, you can see which caught the anomaly. + You can also switch to viewing this time series in the **Single Metric Viewer** by selecting **View series** in the **Actions** menu. +1. Under **Anomalies** (in the **Anomaly Explorer**), expand an anomaly to see key details, such as the time, +the actual and expected ("typical") values, and the influencers that contributed to the anomaly: + + ![Anomaly Explorer showing anomaly details ](../images/anomaly-detection-multi-metric-details.png) + + By default, the **Anomalies** table contains all anomalies that have a severity of "warning" or higher in the selected section of the timeline. + If you are only interested in critical anomalies, for example, you can change the severity threshold for this table. + + If your job has multiple detectors, the table aggregates the anomalies to show the highest severity anomaly per detector and entity, + which is the field value that is displayed in the **found for** column. + + To view all the anomalies without any aggregation, set the **Interval** to **Show all**. + + + The anomaly scores that you see in each section of the **Anomaly Explorer** might differ slightly. + This disparity occurs because for each job there are bucket results, influencer results, and record results. + Anomaly scores are generated for each type of result. + The anomaly timeline uses the bucket-level anomaly scores. + The list of top influencers uses the influencer-level anomaly scores. + The list of anomalies uses the record-level anomaly scores. + + +## Next steps + +After setting up an anomaly detection job, you may want to: + +* +* +* diff --git a/docs/en/serverless/aiops/aiops-detect-change-points.mdx b/docs/en/serverless/aiops/aiops-detect-change-points.mdx new file mode 100644 index 0000000000..2f83f3c721 --- /dev/null +++ b/docs/en/serverless/aiops/aiops-detect-change-points.mdx @@ -0,0 +1,69 @@ +--- +id: serverlessObservabilityAiopsDetectChangePoints +slug: /serverless/observability/aiops-detect-change-points +title: Detect change points +description: Detect distribution changes, trend changes, and other statistically significant change points in a metric of your time series data. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +

+ +{/* */} + +The change point detection feature in Elastic ((observability)) detects distribution changes, +trend changes, and other statistically significant change points in time series data. +Unlike anomaly detection, change point detection does not require you to configure a job or generate a model. +Instead you select a metric and immediately see a visual representation that splits the time series into two parts, before and after the change point. + +Elastic ((observability)) uses a [change point aggregation](((ref))/search-aggregations-change-point-aggregation.html) +to detect change points. This aggregation can detect change points when: + +* a significant dip or spike occurs +* the overall distribution of values has changed significantly +* there was a statistically significant step up or down in value distribution +* an overall trend change occurs + +To detect change points: + +1. In your ((observability)) project, go to **AIOps** → **Change point detection**. +1. Choose a data view or saved search to access the data you want to analyze. +1. Select a function: **avg**, **max**, **min**, or **sum**. +1. In the time filter, specify a time range over which you want to detect change points. +1. From the **Metric field** list, select a field you want to check for change points. +1. (Optional) From the **Split field** list, select a field to split the data by. +If the cardinality of the split field exceeds 10,000, only the first 10,000 values, sorted by document count, are analyzed. +Use this option when you want to investigate the change point across multiple instances, pods, clusters, and so on. +For example, you may want to view CPU utilization split across multiple instances without having to jump across multiple dashboards and visualizations. + + + You can configure a maximum of six combinations of a function applied to a metric field, partitioned by a split field, to identify change points. + + +The change point detection feature automatically dissects the time series into multiple points within the given time window, +tests whether the behavior is statistically different before and after each point in time, and then detects a change point if one exists: + + ![Change point detection UI showing change points split by process ](../images/change-point-detection.png) + +The resulting view includes: + +* The timestamp of the change point +* A preview chart +* The type of change point and its p-value. The p-value indicates the magnitude of the change; lower values indicate more significant changes. +* The name and value of the split field, if used. + +If the analysis is split by a field, a separate chart is shown for every partition that has a detected change point. +The chart displays the type of change point, its value, and the timestamp of the bucket where the change point has been detected. + +On the **Change point detection page**, you can also: + +* Select a subset of charts and click **View selected** to view only the selected charts. + + ![View selected change point detection charts ](../images/change-point-detection-view-selected.png) + +* Filter the results by specific types of change points by using the change point type selector: + + ![Change point detection filter by type list](../images/change-point-detection-filter-by-type.png) + +* Attach change points to a chart or dashboard by using the context menu: + + ![Change point detection add to charts menu](../images/change-point-detection-attach-charts.png) diff --git a/docs/en/serverless/aiops/aiops-forecast-anomaly.mdx b/docs/en/serverless/aiops/aiops-forecast-anomaly.mdx new file mode 100644 index 0000000000..a56315e11a --- /dev/null +++ b/docs/en/serverless/aiops/aiops-forecast-anomaly.mdx @@ -0,0 +1,46 @@ +--- +id: serverlessObservabilityAiopsDetectAnomaliesForecast +slug: /serverless/observability/aiops-forecast-anomalies +title: Forecast future behavior +description: Predict future behavior of your data by creating a forecast for an anomaly detection job. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +

+ +import Roles from '../partials/roles.mdx' + + + +In addition to detecting anomalous behavior in your data, +you can use the ((ml)) features to predict future behavior. + +You can use a forecast to estimate a time series value at a specific future date. +For example, you might want to determine how much disk usage to expect +next Sunday at 09:00. + +You can also use a forecast to estimate the probability of a time series value occurring at a future date. +For example, you might want to determine how likely it is that your disk utilization will reach 100% before the end of next week. + +To create a forecast: + +1. and view the results in the **Single Metric Viewer**. +1. Click **Forecast**. +1. Specify a duration for your forecast. +This value indicates how far to extrapolate beyond the last record that was processed. +You must use time units, for example 1w, 1d, 1h, and so on. +1. Click **Run**. +1. View the forecast in the **Single Metric Viewer**: + + ![Single Metric Viewer showing forecast ](../images/anomaly-detection-forecast.png) + + * The line in the chart represents the predicted data values. + * The shaded area represents the bounds for the predicted values, which also gives an indication of the confidence of the predictions. + * Note that the bounds generally increase with time (that is to say, the confidence levels decrease), + since you are forecasting further into the future. + Eventually if the confidence levels are too low, the forecast stops. + +1. (Optional) After the job has processed more data, click the **Forecast** button again to compare the forecast to actual data. + + The resulting chart will contain the actual data values, the bounds for the expected values, the anomalies, the forecast data values, and the bounds for the forecast. + This combination of actual and forecast data gives you an indication of how well the ((ml)) features can extrapolate the future behavior of the data. diff --git a/docs/en/serverless/aiops/aiops-tune-anomaly-detection-job.mdx b/docs/en/serverless/aiops/aiops-tune-anomaly-detection-job.mdx new file mode 100644 index 0000000000..9ea318b5d4 --- /dev/null +++ b/docs/en/serverless/aiops/aiops-tune-anomaly-detection-job.mdx @@ -0,0 +1,178 @@ +--- +id: serverlessObservabilityAiopsTuneAnomalyDetectionJob +slug: /serverless/observability/aiops-tune-anomaly-detection-job +title: Tune your anomaly detection job +description: Tune your job by creating calendars, adding job rules, and defining custom URLs. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +

+ +import Roles from '../partials/roles.mdx' + + + +After you run an anomaly detection job and view the results, +you might find that you need to alter the job configuration or settings. + +To further tune your job, you can: + +* that contain a list of scheduled events for which you do not want to generate anomalies, such as planned system outages or public holidays. +* that instruct anomaly detectors to change their behavior based on domain-specific knowledge that you provide. +Your job rules can use filter lists, which contain values that you can use to include or exclude events from the ((ml)) analysis. +* to make dashboards and other resources readily available when viewing job results. + +For more information about tuning your job, +refer to the how-to guides in the [((ml))](((ml-docs))/anomaly-how-tos.html) documentation. +Note that the ((ml)) documentation may contain details that are not valid when using a fully-managed Elastic project. + + + You can also create calendars and add URLs when configuring settings during job creation, + but generally it's easier to start with a simple job and add complexity later. + + +
+ +## Create calendars + +Sometimes there are periods when you expect unusual activity to take place, +such as bank holidays, "Black Friday", or planned system outages. +If you identify these events in advance, no anomalies are generated during that period. +The ((ml)) model is not ill-affected, and you do not receive spurious results. + +To create a calendar and add scheduled events: + +1. In your ((observability)) project, go to **AIOps** → **Anomaly detection**. +1. Click **Settings**. +1. Under **Calendars**, click **Create**. +1. Enter an ID and description for the calendar. +1. Select the jobs you want to apply the calendar to, or turn on **Apply calendar to all jobs**. +1. Under **Events**, click **New event** or click **Import events** to import events from an iCalendar (ICS) file: + + ![Create new calendar page](../images/anomaly-detection-create-calendar.png) + + A scheduled event must have a start time, end time, and calendar ID. + In general, scheduled events are short in duration (typically lasting from a few hours to a day) and occur infrequently. + If you have regularly occurring events, such as weekly maintenance periods, + you do not need to create scheduled events for these circumstances; + they are already handled by the ((ml)) analytics. + If your ICS file contains recurring events, only the first occurrence is imported. + +1. When you're done adding events, save your calendar. + +You must identify scheduled events *before* your anomaly detection job analyzes the data for that time period. +((ml-cap)) results are not updated retroactively. +Bucket results are generated during scheduled events, but they have an anomaly score of zero. + + + If you use long or frequent scheduled events, + it might take longer for the ((ml)) analytics to learn to model your data, + and some anomalous behavior might be missed. + + +
+ +## Create job rules and filters + +By default, anomaly detection is unsupervised, +and the ((ml)) models have no awareness of the domain of your data. +As a result, anomaly detection jobs might identify events that are statistically significant but are uninteresting when you know the larger context. + +You can customize anomaly detection by creating custom job rules. +*Job rules* instruct anomaly detectors to change their behavior based on domain-specific knowledge that you provide. +When you create a rule, you can specify conditions, scope, and actions. +When the conditions of a rule are satisfied, its actions are triggered. + + +If you have an anomaly detector that is analyzing CPU usage, +you might decide you are only interested in anomalies where the CPU usage is greater than a certain threshold. +You can define a rule with conditions and actions that instruct the detector to refrain from generating ((ml)) results when there are anomalous events related to low CPU usage. +You might also decide to add a scope for the rule so that it applies only to certain machines. +The scope is defined by using ((ml)) filters. + + +*Filters* contain a list of values that you can use to include or exclude events from the ((ml)) analysis. +You can use the same filter in multiple anomaly detection jobs. + + +If you are analyzing web traffic, you might create a filter that contains a list of IP addresses. +The list could contain IP addresses that you trust to upload data to your website or to send large amounts of data from behind your firewall. +You can define the rule's scope so that the action triggers only when a specific field in your data matches (or doesn't match) a value in the filter. +This gives you much greater control over which anomalous events affect the ((ml)) model and appear in the ((ml)) results. + + +To create a job rule, first create any filter lists you want to use in the rule, then configure the rule: + +1. In your ((observability)) project, go to **AIOps** → **Anomaly detection**. +1. (Optional) Create one or more filter lists: + 1. Click **Settings**. + 1. Under **Filter lists**, click **Create**. + 1. Enter the filter list ID. This is the ID you will select when you want to use the filter list in a job rule. + 1. Click **Add item** and enter one item per line. + 1. Click **Add** then save the filter list: + + ![Create filter list](../images/anomaly-detection-create-filter-list.png) + +1. Open the job results in the **Single Metric Viewer** or **Anomaly Explorer**. +1. From the **Actions** menu in the **Anomalies** table, select **Configure job rules**. + + ![Configure job rules menu selection](../images/anomaly-detection-configure-job-rules.png) + +1. Choose which actions to take when the job rule matches the anomaly: **Skip result**, **Skip model update**, or both. +1. Under **Conditions**, add one or more conditions that must be met for the action to be triggered. +1. Under **Scope** (if available), add one or more filter lists to limit where the job rule applies. +1. Save the job rule. +Note that changes to job rules take effect for new results only. +To apply these changes to existing results, you must clone and rerun the job. + +
+ +## Define custom URLs + +You can optionally attach one or more custom URLs to your anomaly detection jobs. +Links for these URLs will appear in the **Actions** menu of the anomalies table when viewing job results in the **Single Metric Viewer** or **Anomaly Explorer**. +Custom URLs can point to dashboards, the Discover app, or external websites. +For example, you can define a custom URL that enables users to drill down to the source data from the results set. + +To add a custom URL to the **Actions** menu: + +1. In your ((observability)) project, go to **AIOps** → **Anomaly detection**. +1. From the **Actions** menu in the job list, select **Edit job**. +1. Select the **Custom URLs** tab, then click **Add custom URL**. +1. Enter the label to use for the link text. +1. Choose the type of resource you want to link to: + + + ((kib)) dashboard + Select the dashboard you want to link to. + + + Discover + Select the data view to use. + + + Other + Specify the URL for the external website. + + +1. Click **Test** to test your link. +1. Click **Add**, then save your changes. + +Now when you view job results in **Single Metric Viewer** or **Anomaly Explorer**, +the **Actions** menu includes the custom link: + + ![Create filter list](../images/anomaly-detection-custom-url.png) + + +It is also possible to use string substitution in custom URLs. +For example, you might have a **Raw data** URL defined as: + +`discover#/?_g=(time:(from:'$earliest$',mode:absolute,to:'$latest$'))&_a=(index:ff959d40-b880-11e8-a6d9-e546fe2bba5f,query:(language:kuery,query:'customer_full_name.keyword:"$customer_full_name.keyword$"'))`. + +The value of the `customer_full_name.keyword` field is passed to the target page when the link is clicked. + +For more information about using string substitution, +refer to the [((ml))](((ml-docs))/ml-configuring-url.html#ml-configuring-url-strings) documentation. +Note that the ((ml)) documentation may contain details that are not valid when using a fully-managed Elastic project. + + diff --git a/docs/en/serverless/aiops/aiops.mdx b/docs/en/serverless/aiops/aiops.mdx new file mode 100644 index 0000000000..e0a6934eb3 --- /dev/null +++ b/docs/en/serverless/aiops/aiops.mdx @@ -0,0 +1,28 @@ +--- +id: serverlessObservabilityAiops +slug: /serverless/observability/aiops +title: AIOps +description: Automate anomaly detection and accelerate root cause analysis with AIOps. +tags: [ 'serverless', 'observability', 'overview' ] +--- + +

+ +The AIOps capabilities available in Elastic ((observability)) enable you to consume and process large observability data sets at scale, reducing the time and effort required to detect, understand, investigate, and resolve incidents. +Built on predictive analytics and ((ml)), our AIOps capabilities require no prior experience with ((ml)). +DevOps engineers, SREs, and security analysts can get started right away using these AIOps features with little or no advanced configuration: + + + + + Detect anomalies by comparing real-time and historical data from different sources to look for unusual, problematic patterns. + + + + Find and investigate the causes of unusual spikes or drops in log rates. + + + + Detect distribution changes, trend changes, and other statistically significant change points in a metric of your time series data. + + diff --git a/docs/en/serverless/alerting/aggregation-options.mdx b/docs/en/serverless/alerting/aggregation-options.mdx new file mode 100644 index 0000000000..ad12cda703 --- /dev/null +++ b/docs/en/serverless/alerting/aggregation-options.mdx @@ -0,0 +1,49 @@ +--- +id: serverlessObservabilityAggregationOptions +slug: /serverless/observability/aggregationOptions +title: Aggregation options +description: Learn about aggregations available in alerting rules. +tags: [ 'serverless', 'observability', 'reference' ] +--- + +

+ +Aggregations summarize your data to make it easier to analyze. +In some alerting rules, you can specify aggregations to gather data for the rule. + +The following aggregations are available in some rules: + + + + Average + Average value of a numeric field. + + + Cardinality + Approximate number of unique values in a field. + + + Document count + Number of documents in the selected dataset. + + + Max + Highest value of a numeric field. + + + Min + Lowest value of a numeric field. + + + Percentile + Numeric value which represents the point at which n% of all values in the selected dataset are lower (choices are 95th or 99th). + + + Rate + Rate at which a specific field changes over time. To learn about how the rate is calculated, refer to . + + + Sum + Total of a numeric field in the selected dataset. + + diff --git a/docs/en/serverless/alerting/aiops-generate-anomaly-alerts.mdx b/docs/en/serverless/alerting/aiops-generate-anomaly-alerts.mdx new file mode 100644 index 0000000000..8de12f03e5 --- /dev/null +++ b/docs/en/serverless/alerting/aiops-generate-anomaly-alerts.mdx @@ -0,0 +1,217 @@ +--- +id: serverlessObservabilityGenerateAnomalyAlerts +slug: /serverless/observability/aiops-generate-anomaly-alerts +title: Create an anomaly detection rule +description: Get alerts when anomalies match specific conditions. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +

+ +import Connectors from './alerting-connectors.mdx' + +import Roles from '../partials/roles.mdx' + + + +import FeatureBeta from '../partials/feature-beta.mdx' + + + +Create an anomaly detection rule to check for anomalies in one or more anomaly detection jobs. +If the conditions of the rule are met, an alert is created, and any actions specified in the rule are triggered. +For example, you can create a rule to check every fifteen minutes for critical anomalies and then alert you by email when they are detected. + +To create an anomaly detection rule: + +1. In your ((observability)) project, go to **AIOps** → **Anomaly detection**. +1. In the list of anomaly detection jobs, find the job you want to check for anomalies. +Haven't created a job yet? . +1. From the **Actions** menu next to the job, select **Create alert rule**. +1. Specify a name and optional tags for the rule. You can use these tags later to filter alerts. +1. Verify that the correct job is selected and configure the alert details: + + ![Anomaly detection alert settings ](../images/anomaly-detection-alert.png) + +1. For the result type: + + + + **Bucket** + How unusual the anomaly was within the bucket of time + + + **Record** + What individual anomalies are present in a time range + + + **Influencer** + The most unusual entities in a time range + + + +1. Adjust the **Severity** to match the anomaly score that will trigger the action. +The anomaly score indicates the significance of a given anomaly compared to previous anomalies. +The default severity threshold is 75, which means every anomaly with an anomaly score of 75 or higher will trigger the associated action. + +1. (Optional) Turn on **Include interim results** to include results that are created by the anomaly detection job _before_ a bucket is finalized. These results might disappear after the bucket is fully processed. +Include interim results if you want to be notified earlier about a potential anomaly even if it might be a false positive. + +1. (Optional) Expand and change **Advanced settings**: + + + + **Lookback interval** + The interval used to query previous anomalies during each condition check. Setting the lookback interval lower than the default value might result in missed anomalies. + + + **Number of latest buckets** + The number of buckets to check to obtain the highest anomaly from all the anomalies that are found during the Lookback interval. An alert is created based on the anomaly with the highest anomaly score from the most anomalous bucket. + + +1. (Optional) Under **Check the rule condition with an interval**, specify an interval, then click **Test** to check the rule condition with the interval specified. +The button is grayed out if the datafeed is not started. +To test the rule, start the data feed. +1. (Optional) If you want to change how often the condition is evaluated, adjust the **Check every** setting. +1. (Optional) Set up **Actions**. +1. **Save** your rule. + + + Anomaly detection rules are defined as part of a job. + Alerts generated by these rules do not appear on the **Alerts** page. + + +## Add actions + +You can extend your rules with actions that interact with third-party systems, write to logs or indices, or send user notifications. You can add an action to a rule at any time. You can create rules without adding actions, and you can also define multiple actions for a single rule. + +To add actions to rules, you must first create a connector for that service (for example, an email or external incident management system), which you can then use for different rules, each with their own action frequency. + + +Connectors provide a central place to store connection information for services and integrations with third party systems. +The following connectors are available when defining actions for alerting rules: + + + +For more information on creating connectors, refer to Connectors. + + + + +After you select a connector, you must set the action frequency. You can choose to create a **Summary of alerts** on each check interval or on a custom interval. For example, you can send email notifications that summarize the new, ongoing, and recovered alerts every twelve hours. + +Alternatively, you can set the action frequency to **For each alert** and specify the conditions each alert must meet for the action to run. For example, you can send an email only when alert status changes to critical. + +![Configure when a rule is triggered](../images/alert-action-frequency.png) + +With the **Run when** menu you can choose if an action runs when the the anomaly score matched the condition or was recovered. For example, you can add a corresponding action for each state to ensure you are alerted when the anomaly score was matched and also when it recovers. + +![Choose between anomaly score matched condition or recovered](../images/alert-anomaly-action-frequency-recovered.png) + + + + +Use the default notification message or customize it. +You can add more context to the message by clicking the Add variable icon and selecting from a list of available variables. + +![Action variables list](../images/action-variables-popup.png) + +The following variables are specific to this rule type. +You can also specify [variables common to all rules](((kibana-ref))/rule-action-variables.html). + + + `context.anomalyExplorerUrl` + + URL to open in the Anomaly Explorer. + + `context.isInterim` + + Indicate if top hits contain interim results. + + `context.jobIds` + + List of job IDs that triggered the alert. + + `context.message` + + Alert info message. + + `context.score` + + Anomaly score at the time of the notification action. + + `context.timestamp` + + The bucket timestamp of the anomaly. + + `context.timestampIso8601` + + The bucket timestamp of the anomaly in ISO8601 format. + + `context.topInfluencers` + + The list of top influencers. Properties include: + + `influencer_field_name` + + The field name of the influencer. + + `influencer_field_value` + + The entity that influenced, contributed to, or was to blame for the anomaly. + + `score` + + The influencer score. A normalized score between 0-100 which shows the influencer’s overall contribution to the anomalies. + + + + `context.topRecords` + + The list of top records. Properties include: + + `actual` + + The actual value for the bucket. + + `by_field_value` + + The value of the by field. + + `field_name` + + Certain functions require a field to operate on, for example, `sum()`. For those functions, this value is the name of the field to be analyzed. + + `function` + + The function in which the anomaly occurs, as specified in the detector configuration. For example, `max`. + + `over_field_name` + + The field used to split the data. + + `partition_field_value` + + The field used to segment the analysis. + + `score` + + A normalized score between 0-100, which is based on the probability of the anomalousness of this record. + + `typical` + + The typical value for the bucket, according to analytical modeling. + + + + + + + +## Edit an anomaly detection rule + +To edit an anomaly detection rule: + +1. In your ((observability)) project, go to **AIOps** → **Anomaly detection**. +1. Expand the job that uses the rule you want to edit. +1. On the **Job settings** tab, under **Alert rules**, click the rule to edit it. diff --git a/docs/en/serverless/alerting/alerting-connectors.mdx b/docs/en/serverless/alerting/alerting-connectors.mdx new file mode 100644 index 0000000000..e8217d7bc0 --- /dev/null +++ b/docs/en/serverless/alerting/alerting-connectors.mdx @@ -0,0 +1,23 @@ +* [D3 Security](((kibana-ref))/d3security-action-type.html) +* [Email](((kibana-ref))/email-action-type.html) +* [((ibm-r))](((kibana-ref))/resilient-action-type.html) +* [Index](((kibana-ref))/index-action-type.html) +* [Jira](((kibana-ref))/jira-action-type.html) +* [Microsoft Teams](((kibana-ref))/teams-action-type.html[) +* [((opsgenie))](((kibana-ref))/opsgenie-action-type.html) +* [PagerDuty](((kibana-ref))/pagerduty-action-type.html) +* [Server log](((kibana-ref))/server-log-action-type.html) +* [((sn-itom))](((kibana-ref))/servicenow-itom-action-type.html) +* [((sn-itsm))](((kibana-ref))/servicenow-action-type.html) +* [((sn-sir))](((kibana-ref))/servicenow-sir-action-type.html) +* [Slack](((kibana-ref))/slack-action-type.html) +* [((swimlane))](((kibana-ref))/swimlane-action-type.html) +* [Torq](((kibana-ref))/torq-action-type.html) +* [((webhook))](((kibana-ref))/webhook-action-type.html) +* [xMatters](((kibana-ref))/xmatters-action-type.html) + + + Some connector types are paid commercial features, while others are free. + For a comparison of the Elastic subscription levels, go to + [the subscription page](https://www.elastic.co/subscriptions). + diff --git a/docs/en/serverless/alerting/alerting.mdx b/docs/en/serverless/alerting/alerting.mdx new file mode 100644 index 0000000000..326eedb5b9 --- /dev/null +++ b/docs/en/serverless/alerting/alerting.mdx @@ -0,0 +1,32 @@ +--- +id: serverlessObservabilityAlerting +slug: /serverless/observability/alerting +title: Alerting +description: Get alerts based on rules you define for detecting complex conditions in your applications and services. +tags: [ 'serverless', 'observability', 'overview', 'alerting' ] +--- + +

+ +Alerting enables you to define _rules_, which detect complex conditions within different apps and trigger actions when those conditions are met. Alerting provides a set of built-in connectors and rules for you to use. This page describes all of these elements and how they operate together. + +## Important concepts + +Alerting works by running checks on a schedule to detect conditions defined by a rule. You can define rules at different levels (service, environment, transaction) or use custom KQL queries. When a condition is met, the rule tracks it as an _alert_ and responds by triggering one or more _actions_. + +Actions typically involve interaction with Elastic services or third-party integrations. enable actions to talk to these services and integrations. + +Once you've defined your rules, you can monitor any alerts triggered by these rules in real time, with detailed dashboards that help you quickly identify and troubleshoot any issues that may arise. You can also extend your alerts with notifications via services or third-party incident management systems. + +## Alerts page + +On the **Alerts** page, the Alerts table provides a snapshot of alerts occurring within the specified time frame. The table includes the alert status, when it was last updated, the reason for the alert, and more. + +![Summary of Alerts on the ((observability)) overview page](../images/observability-alerts-overview.png) + +You can filter this table by alert status or time period, customize the visible columns, and search for specific alerts (for example, alerts related to a specific service or environment) using KQL. Select **View alert detail** from the **More actions** menu , or click the Reason link for any alert to in detail, and you can then either **View in app** or **View rule details**. + +## Next steps + +* +* diff --git a/docs/en/serverless/alerting/create-anomaly-alert-rule.mdx b/docs/en/serverless/alerting/create-anomaly-alert-rule.mdx new file mode 100644 index 0000000000..3e25bb7fd3 --- /dev/null +++ b/docs/en/serverless/alerting/create-anomaly-alert-rule.mdx @@ -0,0 +1,111 @@ +--- +id: serverlessObservabilityCreateAnomalyAlertRule +slug: /serverless/observability/create-anomaly-alert-rule +title: Create an APM anomaly rule +description: Get alerts when either the latency, throughput, or failed transaction rate of a service is abnormal. +tags: [ 'serverless', 'observability', 'how-to', 'alerting' ] +--- + +

+ +import Connectors from './alerting-connectors.mdx' + +import Roles from '../partials/roles.mdx' + + + +You can create an anomaly rule to alert you when either the latency, throughput, or failed transaction rate of a service is abnormal. Anomaly rules can be set at different levels: environment, service, and/or transaction type. Add actions to raise alerts via services or third-party integrations (for example, send an email or create a Jira issue). + +![Create rule for APM anomaly alert](../images/alerts-create-apm-anomaly.png) + + +These steps show how to use the **Alerts** UI. +You can also create an anomaly rule directly from any page within **Applications**. Click the **Alerts and rules** button, and select **Create anomaly rule**. When you create a rule this way, the **Name** and **Tags** fields will be prepopulated but you can still change these. + + +To create your anomaly rule: + +1. In your ((observability)) project, go to **Alerts**. +1. Select **Manage Rules** from the **Alerts** page, and select **Create rule**. +1. Enter a **Name** for your rule, and any optional **Tags** for more granular reporting (leave blank if unsure). +1. Select the **APM Anomaly** rule type. +1. Select the appropriate **Service**, **Type**, and **Environment** (or leave **ALL** to include all options). +1. Select the desired severity (critical, major, minor, warning) from **Has anomaly with severity**. +1. Define the interval to check the rule (for example, check every 1 minute). +1. (Optional) Set up **Actions**. +1. **Save** your rule. + +## Add actions + +You can extend your rules with actions that interact with third-party systems, write to logs or indices, or send user notifications. You can add an action to a rule at any time. You can create rules without adding actions, and you can also define multiple actions for a single rule. + +To add actions to rules, you must first create a connector for that service (for example, an email or external incident management system), which you can then use for different rules, each with their own action frequency. + + +Connectors provide a central place to store connection information for services and integrations with third party systems. +The following connectors are available when defining actions for alerting rules: + + + +For more information on creating connectors, refer to Connectors. + + + + +After you select a connector, you must set the action frequency. You can choose to create a **Summary of alerts** on each check interval or on a custom interval. For example, you can send email notifications that summarize the new, ongoing, and recovered alerts every twelve hours. + +Alternatively, you can set the action frequency to **For each alert** and specify the conditions each alert must meet for the action to run. For example, you can send an email only when the alert status changes to critical. + +![Configure when a rule is triggered](../images/alert-action-frequency.png) + +With the **Run when** menu you can choose if an action runs when the threshold for an alert is reached, or when the alert is recovered. For example, you can add a corresponding action for each state to ensure you are alerted when the rule is triggered and also when it recovers. + +![Choose between threshold met or recovered](../images/alert-apm-action-frequency-recovered.png) + + + + +Use the default notification message or customize it. +You can add more context to the message by clicking the Add variable icon and selecting from a list of available variables. + +![Action variables list](../images/action-variables-popup.png) + +The following variables are specific to this rule type. +You can also specify [variables common to all rules](((kibana-ref))/rule-action-variables.html). + + + `context.alertDetailsUrl` + + Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. + + `context.environment` + + The transaction type the alert is created for. + + `context.reason` + + A concise description of the reason for the alert. + + `context.serviceName` + + The service the alert is created for. + + `context.threshold` + + Any trigger value above this value will cause the alert to fire. + + `context.transactionType` + + The transaction type the alert is created for. + + `context.triggerValue` + + The value that breached the threshold and triggered the alert. + + `context.viewInAppUrl` + + Link to the alert source. + + + + diff --git a/docs/en/serverless/alerting/create-custom-threshold-alert-rule.mdx b/docs/en/serverless/alerting/create-custom-threshold-alert-rule.mdx new file mode 100644 index 0000000000..3c9356822d --- /dev/null +++ b/docs/en/serverless/alerting/create-custom-threshold-alert-rule.mdx @@ -0,0 +1,210 @@ +--- +id: serverlessObservabilityCreateCustomThresholdAlertRule +slug: /serverless/observability/create-custom-threshold-alert-rule +title: Create a custom threshold rule +description: Get alerts when an Observability data type reach a given value. +tags: [ 'serverless', 'observability', 'how-to', 'alerting' ] +--- + +

+ +import Connectors from './alerting-connectors.mdx' + +import Roles from '../partials/roles.mdx' + + + +Create a custom threshold rule to trigger an alert when an ((observability)) data type reaches or exceeds a given value. + +1. To access this page, from your project go to **Alerts**. +1. Click **Manage Rules** -> **Create rule**. +1. Under **Select rule type**, select **Custom threshold**. + +![Rule details (custom threshold)](../images/custom-threshold-rule.png) + +
+ +## Define rule data + +Specify the following settings to define the data the rule applies to: + +* **Select a data view:** Click the data view field to search for and select a data view that points to the indices or data streams that you're creating a rule for. You can also create a _new_ data view by clicking **Create a data view**. Refer to [Create a data view](((kibana-ref))/data-views.html) for more on creating data views. +* **Define query filter (optional):** Use a query filter to narrow down the data that the rule applies to. For example, set a query filter to a specific host name using the query filter `host.name:host-1` to only apply the rule to that host. + +
+ +## Set rule conditions + +Set the conditions for the rule to detect using aggregations, an equation, and a threshold. + +
+ +### Set aggregations + +Aggregations summarize your data to make it easier to analyze. +Set any of the following aggregation types to gather data to create your rule: +`Average`, `Max`, `Min`, `Cardinality`, `Count`, `Sum,` `Percentile`, or `Rate`. +For more information about these options, refer to . + +For example, to gather the total number of log documents with a log level of `warn`: + +1. Set the **Aggregation** to **Count**, and set the **KQL Filter** to `log.level: "warn"`. +1. Set the threshold to `IS ABOVE 100` to trigger an alert when the number of log documents with a log level of `warn` reaches 100. + +
+ +### Set the equation and threshold + +Set an equation using your aggregations. Based on the results of your equation, set a threshold to define when to trigger an alert. The equations use basic math or boolean logic. Refer to the following examples for possible use cases. + +
+ +### Basic math equation + +Add, subtract, multiply, or divide your aggregations to define conditions for alerting. + +**Example:** +Set an equation and threshold to trigger an alert when a metric is above a threshold. For this example, we'll use average CPU usage—the percentage of CPU time spent in states other than `idle` or `IOWait` normalized by the number of CPU cores—and trigger an alert when CPU usage is above a specific percentage. To do this, set the following aggregations, equation, and threshold: + +1. Set the following aggregations: + * **Aggregation A:** Average `system.cpu.user.pct` + * **Aggregation B:** Average `system.cpu.system.pct` + * **Aggregation C:** Max `system.cpu.cores`. +1. Set the equation to `(A + B) / C * 100` +1. Set the threshold to `IS ABOVE 95` to alert when CPU usage is above 95%. + +
+ +### Boolean logic + +Use conditional operators and comparison operators with you aggregations to define conditions for alerting. + +**Example:** +Set an equation and threshold to trigger an alert when the number of stateful pods differs from the number of desired pods. For this example, we'll use `kubernetes.statefulset.ready` and `kubernetes.statefulset.desired`, and trigger an alert when their values differ. To do this, set the following aggregations, equation, and threshold: + +1. Set the following aggregations: + * **Aggregation A:** Sum `kubernetes.statefulset.ready` + * **Aggregation B:** Sum `kubernetes.statefulset.desired` +1. Set the equation to `A == B ? 1 : 0`. If A and B are equal, the result is `1`. If they're not equal, the result is `0`. +1. Set the threshold to `IS BELOW 1` to trigger an alert when the result is `0` and the field values do not match. + +
+ +## Preview chart + +The preview chart provides a visualization of how many entries match your configuration. +The shaded area shows the threshold you've set. + +
+ +## Group alerts by (optional) + +Set one or more **group alerts by** fields for custom threshold rules to perform a composite aggregation against the selected fields. +When any of these groups match the selected rule conditions, an alert is triggered _per group_. + +When you select multiple groupings, the group name is separated by commas. + +For example, if you group alerts by the `host.name` and `host.architecture` fields, and there are two hosts (`Host A` and `Host B`) and two architectures (`Architecture A` and `Architecture B`), the composite aggregation forms multiple groups. + +If the `Host A, Architecture A` group matches the rule conditions, but the `Host B, Architecture B` group doesn't, one alert is triggered for `Host A, Architecture A`. + +If you select one field—for example, `host.name`—and `Host A` matches the conditions but `Host B` doesn't, one alert is triggered for `Host A`. +If both groups match the conditions, alerts are triggered for both groups. + +When you select **Alert me if a group stops reporting data**, the rule is triggered if a group that previously reported metrics does not report them again over the expected time period. + +## Add actions + +You can extend your rules with actions that interact with third-party systems, write to logs or indices, or send user notifications. You can add an action to a rule at any time. You can create rules without adding actions, and you can also define multiple actions for a single rule. + +To add actions to rules, you must first create a connector for that service (for example, an email or external incident management system), which you can then use for different rules, each with their own action frequency. + + +Connectors provide a central place to store connection information for services and integrations with third party systems. +The following connectors are available when defining actions for alerting rules: + + + +For more information on creating connectors, refer to Connectors. + + + + +After you select a connector, you must set the action frequency. +You can choose to create a summary of alerts on each check interval or on a custom interval. +Alternatively, you can set the action frequency such that you choose how often the action runs (for example, +at each check interval, only when the alert status changes, or at a custom action interval). +In this case, you must also select the specific threshold condition that affects when actions run: `Alert`, `No Data`, or `Recovered`. + +![Configure when a rule is triggered](../images/custom-threshold-run-when.png) + +You can also further refine the conditions under which actions run by specifying that actions only run when they match a KQL query or when an alert occurs within a specific time frame: + +- **If alert matches query**: Enter a KQL query that defines field-value pairs or query conditions that must be met for notifications to send. The query only searches alert documents in the indices specified for the rule. +- **If alert is generated during timeframe**: Set timeframe details. Notifications are only sent if alerts are generated within the timeframe you define. + +![Configure a conditional alert](../images/logs-threshold-conditional-alert.png) + + + + +Use the default notification message or customize it. +You can add more context to the message by clicking the Add variable icon and selecting from a list of available variables. + +![Action variables list](../images/action-variables-popup.png) + +The following variables are specific to this rule type. +You can also specify [variables common to all rules](((kibana-ref))/rule-action-variables.html). + + + `context.alertDetailsUrl` + + Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. + + `context.cloud` + + The cloud object defined by ECS if available in the source. + + `context.container` + + The container object defined by ECS if available in the source. + + `context.group` + + The object containing groups that are reporting data. + + `context.host` + + The host object defined by ECS if available in the source. + + `context.labels` + + List of labels associated with the entity where this alert triggered. + + `context.orchestrator` + + The orchestrator object defined by ECS if available in the source. + + `context.reason` + + A concise description of the reason for the alert. + + `context.tags` + + List of tags associated with the entity where this alert triggered. + + `context.timestamp` + + A timestamp of when the alert was detected. + + `context.value` + + List of the condition values. + + `context.viewInAppUrl` + + Link to the alert source. + + + + diff --git a/docs/en/serverless/alerting/create-elasticsearch-query-alert-rule.mdx b/docs/en/serverless/alerting/create-elasticsearch-query-alert-rule.mdx new file mode 100644 index 0000000000..b4ef591674 --- /dev/null +++ b/docs/en/serverless/alerting/create-elasticsearch-query-alert-rule.mdx @@ -0,0 +1,266 @@ +--- +id: serverlessObservabilityCreateElasticsearchQueryRule +slug: /serverless/observability/create-elasticsearch-query-rule +title: Create an Elasticsearch query rule +description: Get alerts when matches are found during the latest query run. +tags: [ 'serverless', 'observability', 'how-to', 'alerting' ] +--- + +

+ +import Connectors from './alerting-connectors.mdx' + +import Roles from '../partials/roles.mdx' + + + +
+ +The ((es)) query rule type runs a user-configured query, compares the number of +matches to a configured threshold, and schedules actions to run when the +threshold condition is met. + +1. To access this page, from your project go to **Alerts**. +1. Click **Manage Rules** → **Create rule**. +1. Under **Select rule type**, select **((es)) query**. + +An ((es)) query rule can be defined using ((es)) Query Domain Specific Language (DSL), ((es)) Query Language (ES|QL), ((kib)) Query Language (KQL), or Lucene. + +## Define the conditions + +When you create an ((es)) query rule, your choice of query type affects the information you must provide. +For example: + +![Define the condition to detect](../images/alerting-rule-types-es-query-conditions.png) +{/* NOTE: This is an autogenerated screenshot. Do not edit it directly. */} + +1. Define your query + + If you use [query DSL](((ref))/query-dsl.html), you must select an index and time field then provide your query. + Only the `query`, `fields`, `_source` and `runtime_mappings` fields are used, other DSL fields are not considered. + For example: + + ```sh + { + "query":{ + "match_all" : {} + } + } + ``` + + If you use [KQL](((kibana-ref))/kuery-query.html) or [Lucene](((kibana-ref))/lucene-query.html), you must specify a data view then define a text-based query. + For example, `http.request.referrer: "https://example.com"`. + + + If you use [ES|QL](((ref))/esql.html), you must provide a source command followed by an optional series of processing commands, separated by pipe characters (|). + For example: + + ```sh + FROM kibana_sample_data_logs + | STATS total_bytes = SUM(bytes) BY host + | WHERE total_bytes > 200000 + | SORT total_bytes DESC + | LIMIT 10 + ``` + +1. If you use query DSL, KQL, or Lucene, set the group and theshold. + + When + : Specify how to calculate the value that is compared to the threshold. The value is calculated by aggregating a numeric field within the time window. The aggregation options are: `count`, `average`, `sum`, `min`, and `max`. When using `count` the document count is used and an aggregation field is not necessary. + Over or Grouped Over + : Specify whether the aggregation is applied over all documents or split into groups using up to four grouping fields. + If you choose to use grouping, it's a [terms](((ref))/search-aggregations-bucket-terms-aggregation.html) or [multi terms aggregation](((ref))/search-aggregations-bucket-multi-terms-aggregation.html); an alert will be created for each unique set of values when it meets the condition. + To limit the number of alerts on high cardinality fields, you must specify the number of groups to check against the threshold. + Only the top groups are checked. + + Threshold + : Defines a threshold value and a comparison operator (`is above`, + `is above or equals`, `is below`, `is below or equals`, or `is between`). The value + calculated by the aggregation is compared to this threshold. + +1. Set the time window, which defines how far back to search for documents. + +1. If you use query DSL, KQL, or Lucene, set the number of documents to send to the configured actions when the threshold condition is met. + +1. If you use query DSL, KQL, or Lucene, choose whether to avoid alert duplication by excluding matches from the previous run. + This option is not available when you use a grouping field. + +1. Set the check interval, which defines how often to evaluate the rule conditions. + Generally this value should be set to a value that is smaller than the time window, to avoid gaps in + detection. + +## Test your query + +Use the **Test query** feature to verify that your query is valid. + +If you use query DSL, KQL, or Lucene, the query runs against the selected indices using the configured time window. +The number of documents that match the query is displayed. +For example: + +![Test ((es)) query returns number of matches when valid](../images/alerting-rule-types-es-query-valid.png) +{/* NOTE: This is an autogenerated screenshot. Do not edit it directly. */} + + If you use an ES|QL query, a table is displayed. For example: + +![Test ES|QL query returns a table when valid](../images/alerting-rule-types-esql-query-valid.png) + +If the query is not valid, an error occurs. + +## Add actions + +{/* TODO: Decide whether to use boiler plate text, or the text from the source docs for this rule. */} + +You can optionally send notifications when the rule conditions are met and when they are no longer met. +In particular, this rule type supports: + +* alert summaries +* actions that run when the query is matched +* recovery actions that run when the rule conditions are no longer met + +For each action, you must choose a connector, which provides connection information for a service or third party integration. + + +Connectors provide a central place to store connection information for services and integrations with third party systems. +The following connectors are available when defining actions for alerting rules: + + + +For more information on creating connectors, refer to Connectors. + + + + +After you select a connector, you must set the action frequency. You can choose to create a **Summary of alerts** on each check interval or on a custom interval. For example, you can send email notifications that summarize the new, ongoing, and recovered alerts at a custom interval: + +![UI for defining alert summary action in an ((es)) query rule](../images/alerting-es-query-rule-action-summary.png) +{/* NOTE: This is an autogenerated screenshot. Do not edit it directly. */} + +Alternatively, you can set the action frequency to **For each alert** and specify the conditions each alert must meet for the action to run. + +With the **Run when** menu you can choose how often the action runs (at each check interval, only when the alert status changes, or at a custom action interval). +You must also choose an action group, which indicates whether the action runs when the query is matched or when the alert is recovered. +Each connector supports a specific set of actions for each action group. +For example: + +![UI for defining a recovery action](../images/alerting-es-query-rule-action-query-matched.png) +{/* NOTE: This is an autogenerated screenshot. Do not edit it directly. */} + +You can further refine the conditions under which actions run by specifying that actions only run when they match a KQL query or when an alert occurs within a specific time frame. + + + + +Use the default notification message or customize it. +You can add more context to the message by clicking the Add variable icon and selecting from a list of available variables. + +![Action variables list](../images/action-variables-popup.png) + +The following variables are specific to this rule type. +You can also specify [variables common to all rules](((kibana-ref))/rule-action-variables.html). + + + `context.conditions` + + A string that describes the threshold condition. Example: + `count greater than 4`. + + `context.date` + + The date, in ISO format, that the rule met the condition. + Example: `2022-02-03T20:29:27.732Z`. + + `context.hits` + + The most recent documents that matched the query. Using the + [Mustache](https://mustache.github.io/) template array syntax, you can iterate + over these hits to get values from the ((es)) documents into your actions. + + For example, the message in an email connector action might contain: + + ``` + Elasticsearch query rule '{{rule.name}}' is active: + + {{#context.hits}} + Document with {{_id}} and hostname {{_source.host.name}} has + {{_source.system.memory.actual.free}} bytes of memory free + {{/context.hits}} + ``` + + The documents returned by `context.hits` include the [`_source`](((ref))/mapping-source-field.html) field. + If the ((es)) query search API's [`fields`](((ref))/search-fields.html#search-fields-param) parameter is used, documents will also return the `fields` field, + which can be used to access any runtime fields defined by the [`runtime_mappings`](((ref))/runtime-search-request.html) parameter. + For example: + + {/* NOTCONSOLE */} + ``` + {{#context.hits}} + timestamp: {{_source.@timestamp}} + day of the week: {{fields.day_of_week}} [^1] + {{/context.hits}} + ``` + [^1]: The `fields` parameter here is used to access the `day_of_week` runtime field. + + As the [`fields`](((ref))/search-fields.html#search-fields-response) response always returns an array of values for each field, + the [Mustache](https://mustache.github.io/) template array syntax is used to iterate over these values in your actions. + For example: + + ``` + {{#context.hits}} + Labels: + {{#fields.labels}} + - {{.}} + {{/fields.labels}} + {{/context.hits}} + ``` + {/* NOTCONSOLE */} + + `context.link` + + Link to Discover and show the records that triggered the alert. + + `context.message` + + A message for the alert. Example: + `rule 'my es-query' is active:` + `- Value: 2` + `- Conditions Met: Number of matching documents is greater than 1 over 5m` + `- Timestamp: 2022-02-03T20:29:27.732Z` + + `context.title` + + A title for the alert. Example: + `rule term match alert query matched`. + + `context.value` + + The value that met the threshold condition. + + + + + + + +## Handling multiple matches of the same document + +By default, **Exclude matches from previous run** is turned on and the rule checks +for duplication of document matches across multiple runs. If you configure the +rule with a schedule interval smaller than the time window and a document +matches a query in multiple runs, it is alerted on only once. + +The rule uses the timestamp of the matches to avoid alerting on the same match +multiple times. The timestamp of the latest match is used for evaluating the +rule conditions when the rule runs. Only matches between the latest timestamp +from the previous run and the current run are considered. + +Suppose you have a rule configured to run every minute. The rule uses a time +window of 1 hour and checks if there are more than 99 matches for the query. The +((es)) query rule type does the following: + +{/* [cols="3*<"] */} +| | | | +|---|---|---| +| `Run 1 (0:00)` | Rule finds 113 matches in the last hour: `113 > 99` | Rule is active and user is alerted. | +| `Run 2 (0:01)` | Rule finds 127 matches in the last hour. 105 of the matches are duplicates that were already alerted on previously, so you actually have 22 matches: `22 !> 99` | No alert. | +| `Run 3 (0:02)` | Rule finds 159 matches in the last hour. 88 of the matches are duplicates that were already alerted on previously, so you actually have 71 matches: `71 !> 99` | No alert. | +| `Run 4 (0:03)` | Rule finds 190 matches in the last hour. 71 of them are duplicates that were already alerted on previously, so you actually have 119 matches: `119 > 99` | Rule is active and user is alerted. | diff --git a/docs/en/serverless/alerting/create-error-count-threshold-alert-rule.mdx b/docs/en/serverless/alerting/create-error-count-threshold-alert-rule.mdx new file mode 100644 index 0000000000..eac849e1f7 --- /dev/null +++ b/docs/en/serverless/alerting/create-error-count-threshold-alert-rule.mdx @@ -0,0 +1,162 @@ +--- +id: serverlessObservabilityCreateErrorCountThresholdAlertRule +slug: /serverless/observability/create-error-count-threshold-alert-rule +title: Create an error count threshold rule +description: Get alerts when the number of errors in a service exceeds a defined threshold. +tags: [ 'serverless', 'observability', 'how-to', 'alerting' ] +--- + +

+ +import Connectors from './alerting-connectors.mdx' + +import Roles from '../partials/roles.mdx' + + + +Create an error count threshold rule to alert you when the number of errors in a service exceeds a defined threshold. Threshold rules can be set at different levels: environment, service, transaction type, and/or transaction name. + +![Create rule for error count threshold alert](../images/alerts-create-rule-error-count.png) + + +These steps show how to use the **Alerts** UI. +You can also create an error count threshold rule directly from any page within **Applications**. Click the **Alerts and rules** button, and select **Create error count rule**. When you create a rule this way, the **Name** and **Tags** fields will be prepopulated but you can still change these. + + +To create your error count threshold rule: + +1. In your ((observability)) project, go to **Alerts**. +1. Select **Manage Rules** from the **Alerts** page, and select **Create rule**. +1. Enter a **Name** for your rule, and any optional **Tags** for more granular reporting (leave blank if unsure). +1. Select the **Error count threshold** rule type from the APM use case. +1. Select the appropriate **Service**, **Environment**, and **Error Grouping Key** (or leave **ALL** to include all options). Alternatively, you can select **Use KQL Filter** and enter a KQL expression to limit the scope of your rule. +1. Enter the error threshold in **Is Above** (defaults to 25 errors). +1. Define the period to be assessed in **For the last** (defaults to last 5 minutes). +1. Choose how to **Group alerts by**. Every unique value will create an alert. +1. Define the interval to check the rule (for example, check every 1 minute). +1. (Optional) Set up **Actions**. +1. **Save** your rule. + +## Add actions + +You can extend your rules with actions that interact with third-party systems, write to logs or indices, or send user notifications. You can add an action to a rule at any time. You can create rules without adding actions, and you can also define multiple actions for a single rule. + +To add actions to rules, you must first create a connector for that service (for example, an email or external incident management system), which you can then use for different rules, each with their own action frequency. + + +Connectors provide a central place to store connection information for services and integrations with third party systems. +The following connectors are available when defining actions for alerting rules: + + + +For more information on creating connectors, refer to Connectors. + + + + +After you select a connector, you must set the action frequency. You can choose to create a **Summary of alerts** on each check interval or on a custom interval. For example, you can send email notifications that summarize the new, ongoing, and recovered alerts every twelve hours. + +Alternatively, you can set the action frequency to **For each alert** and specify the conditions each alert must meet for the action to run. For example, you can send an email only when the alert status changes to critical. + +![Configure when a rule is triggered](../images/alert-action-frequency.png) + +With the **Run when** menu you can choose if an action runs when the threshold for an alert is reached, or when the alert is recovered. For example, you can add a corresponding action for each state to ensure you are alerted when the rule is triggered and also when it recovers. + +![Choose between threshold met or recovered](../images/alert-apm-action-frequency-recovered.png) + + + + +Use the default notification message or customize it. +You can add more context to the message by clicking the Add variable icon and selecting from a list of available variables. + +![Action variables list](../images/action-variables-popup.png) + +The following variables are specific to this rule type. +You can also specify [variables common to all rules](((kibana-ref))/rule-action-variables.html). + + + `context.alertDetailsUrl` + + Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. + + `context.environment` + + The transaction type the alert is created for. + + `context.errorGroupingKey` + + The error grouping key the alert is created for. + + `context.errorGroupingName` + + The error grouping name the alert is created for. + + `context.interval` + + The length and unit of time period where the alert conditions were met. + + `context.reason` + + A concise description of the reason for the alert. + + `context.serviceName` + + The service the alert is created for. + + `context.threshold` + + Any trigger value above this value will cause the alert to fire. + + `context.transactionName` + + The transaction name the alert is created for. + + `context.triggerValue` + + The value that breached the threshold and triggered the alert. + + `context.viewInAppUrl` + + Link to the alert source. + + + + + +
+## Example + +The error count threshold alert triggers when the number of errors in a service exceeds a defined threshold. Because some errors are more important than others, this guide will focus a specific error group ID. + +Before continuing, identify the service name, environment name, and error group ID that you’d like to create an error count threshold rule for. +{/* The easiest way to find an error group ID is to select the service that you’re interested in and navigating to the Errors tab. // is there a Serverless equivalent? */} + +This guide will create an alert for an error group ID based on the following criteria: + +* Service: `{your_service.name}` +* Environment: `{your_service.environment}` +* Error Grouping Key: `{your_error.ID}` +* Error count is above 25 errors for the last five minutes +* Group alerts by `service.name` and `service.environment` +* Check every 1 minute +* Send the alert via email to the site reliability team + +From any page in **Applications**, select **Alerts and rules** → **Create threshold rule** → **Error count rule**. Change the name of the alert (if you wish), but do not edit the tags. + +Based on the criteria above, define the following rule details: + +* **Service**: `{your_service.name}` +* **Environment**: `{your_service.environment}` +* **Error Grouping Key**: `{your_error.ID}` +* **Is above:** `25 errors` +* **For the last:** `5 minutes` +* **Group alerts by:** `service.name` `service.environment` +* **Check every:** `1 minute` + +Next, select the **Email** connector and click **Create a connector**. Fill out the required details: sender, host, port, etc., and select **Save**. + +A default message is provided as a starting point for your alert. You can use the Mustache template syntax (`{{variable}}`) to pass additional alert values at the time a condition is detected to an action. A list of available variables can be accessed by clicking the Add variable icon . + +Select **Save**. The alert has been created and is now active! + diff --git a/docs/en/serverless/alerting/create-failed-transaction-rate-threshold-alert-rule.mdx b/docs/en/serverless/alerting/create-failed-transaction-rate-threshold-alert-rule.mdx new file mode 100644 index 0000000000..a5aebcbbd7 --- /dev/null +++ b/docs/en/serverless/alerting/create-failed-transaction-rate-threshold-alert-rule.mdx @@ -0,0 +1,157 @@ +--- +id: serverlessObservabilityCreateFailedTransactionRateThresholdAlertRule +slug: /serverless/observability/create-failed-transaction-rate-threshold-alert-rule +title: Create a failed transaction rate threshold rule +description: Get alerts when the rate of transaction errors in a service exceeds a defined threshold. +tags: [ 'serverless', 'observability', 'how-to', 'alerting' ] +--- + +

+ +import Connectors from './alerting-connectors.mdx' + +import Roles from '../partials/roles.mdx' + + + +You can create a failed transaction rate threshold rule to alert you when the rate of transaction errors in a service exceeds a defined threshold. Threshold rules can be set at different levels: environment, service, transaction type, and/or transaction name. Add actions to raise alerts via services or third-party integrations e.g. mail, Slack, Jira. + +![Create rule for failed transaction rate threshold alert](../images/alerts-create-rule-failed-transaction-rate.png) + + +These steps show how to use the **Alerts** UI. +You can also create a failed transaction rate threshold rule directly from any page within **Applications**. Click the **Alerts and rules** button, and select **Create threshold rule** and then **Failed transaction rate**. When you create a rule this way, the **Name** and **Tags** fields will be prepopulated but you can still change these. + + +To create your failed transaction rate threshold rule: + +1. In your ((observability)) project, go to **Alerts**. +1. Select **Manage Rules** from the **Alerts** page, and select **Create rule**. +1. Enter a **Name** for your rule, and any optional **Tags** for more granular reporting (leave blank if unsure). +1. Select the **Failed transaction rate threshold** rule type from the APM use case. +1. Select the appropriate **Service**, **Type**, **Environment** and **Name** (or leave **ALL** to include all options). Alternatively, you can select **Use KQL Filter** and enter a KQL expression to limit the scope of your rule. +1. Enter a fail rate in the **Is Above** (defaults to 30%). +1. Define the period to be assessed in **For the last** (defaults to last 5 minutes). +1. Choose how to **Group alerts by**. Every unique value will create an alert. +1. Define the interval to check the rule (for example, check every 1 minute). +1. (Optional) Set up **Actions**. +1. **Save** your rule. + +## Add actions + +You can extend your rules with actions that interact with third-party systems, write to logs or indices, or send user notifications. You can add an action to a rule at any time. You can create rules without adding actions, and you can also define multiple actions for a single rule. + +To add actions to rules, you must first create a connector for that service (for example, an email or external incident management system), which you can then use for different rules, each with their own action frequency. + + +Connectors provide a central place to store connection information for services and integrations with third party systems. +The following connectors are available when defining actions for alerting rules: + + + +For more information on creating connectors, refer to Connectors. + + + + +After you select a connector, you must set the action frequency. You can choose to create a **Summary of alerts** on each check interval or on a custom interval. For example, you can send email notifications that summarize the new, ongoing, and recovered alerts every twelve hours. + +Alternatively, you can set the action frequency to **For each alert** and specify the conditions each alert must meet for the action to run. For example, you can send an email only when the alert status changes to critical. + +![Configure when a rule is triggered](../images/alert-action-frequency.png) + +With the **Run when** menu you can choose if an action runs when the threshold for an alert is reached, or when the alert is recovered. For example, you can add a corresponding action for each state to ensure you are alerted when the rule is triggered and also when it recovers. + +![Choose between threshold met or recovered](../images/alert-apm-action-frequency-recovered.png) + + + + +Use the default notification message or customize it. +You can add more context to the message by clicking the Add variable icon and selecting from a list of available variables. + +![Action variables list](../images/action-variables-popup.png) + +The following variables are specific to this rule type. +You can also specify [variables common to all rules](((kibana-ref))/rule-action-variables.html). + + + `context.alertDetailsUrl` + + Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. + + `context.environment` + + The transaction type the alert is created for. + + `context.interval` + + The length and unit of time period where the alert conditions were met. + + `context.reason` + + A concise description of the reason for the alert. + + `context.serviceName` + + The service the alert is created for. + + `context.threshold` + + Any trigger value above this value will cause the alert to fire. + + `context.transactionName` + + The transaction name the alert is created for. + + `context.transactionType` + + The transaction type the alert is created for. + + `context.triggerValue` + + The value that breached the threshold and triggered the alert. + + `context.viewInAppUrl` + + Link to the alert source. + + + + +
+## Example + +The failed transaction rate threshold alert triggers when the number of transaction errors in a service exceeds a defined threshold. + +Before continuing, identify the service name, environment name, and transaction type that you’d like to create a failed transaction rate threshold rule for. + +This guide will create an alert for an error group ID based on the following criteria: + +* Service: `{your_service.name}` +* Transaction: `{your_transaction.name}` +* Environment: `{your_service.environment}` +* Error rate is above 30% for the last five minutes +* Group alerts by `service.name` and `service.environment` +* Check every 1 minute +* Send the alert via email to the site reliability team + +From any page in **Applications**, select **Alerts and rules** → **Create threshold rule** → **Failed transaction rate**. Change the name of the alert (if you wish), but do not edit the tags. + +Based on the criteria above, define the following rule details: + +* **Service**: `{your_service.name}` +* **Type**: `{your_transaction.name}` +* **Environment**: `{your_service.environment}` +* **Is above:** `30%` +* **For the last:** `5 minutes` +* **Group alerts by:** `service.name` `service.environment` +* **Check every:** `1 minute` + +Next, select the **Email** connector and click **Create a connector**. Fill out the required details: sender, host, port, etc., and select **Save**. + +A default message is provided as a starting point for your alert. You can use the Mustache template syntax (`{{variable}}`) to pass additional alert values at the time a condition is detected to an action. A list of available variables can be accessed by clicking the Add variable icon . + +Select **Save**. The alert has been created and is now active! + + diff --git a/docs/en/serverless/alerting/create-inventory-threshold-alert-rule.mdx b/docs/en/serverless/alerting/create-inventory-threshold-alert-rule.mdx new file mode 100644 index 0000000000..cf5713e547 --- /dev/null +++ b/docs/en/serverless/alerting/create-inventory-threshold-alert-rule.mdx @@ -0,0 +1,192 @@ +--- +id: serverlessObservabilityCreateInventoryThresholdAlertRule +slug: /serverless/observability/create-inventory-threshold-alert-rule +title: Create an inventory rule +description: Get alerts when the infrastructure inventory exceeds a defined threshold. +tags: [ 'serverless', 'observability', 'how-to', 'alerting' ] +--- + +

+ +import Connectors from './alerting-connectors.mdx' + +import Roles from '../partials/roles.mdx' + + + +
+ +Based on the resources listed on the **Inventory** page within the ((infrastructure-app)), +you can create a threshold rule to notify you when a metric has reached or exceeded a value for a specific +resource or a group of resources within your infrastructure. + +Additionally, each rule can be defined using multiple +conditions that combine metrics and thresholds to create precise notifications and reduce false positives. + +1. To access this page, go to **((observability))** -> **Infrastructure**. +1. On the **Inventory** page or the **Metrics Explorer** page, click **Alerts and rules** -> **Infrastructure**. +1. Select **Create inventory rule**. + + + +When you select **Create inventory alert**, the parameters you configured on the **Inventory** page will automatically +populate the rule. You can use the Inventory first to view which nodes in your infrastructure you'd +like to be notified about and then quickly create a rule in just a few clicks. + + + +
+ +## Inventory conditions + +Conditions for each rule can be applied to specific metrics relating to the inventory type you select. +You can choose the aggregation type, the metric, and by including a warning threshold value, you can be +alerted on multiple threshold values based on severity scores. When creating the rule, you can still get +notified if no data is returned for the specific metric or if the rule fails to query ((es)). + +In this example, Kubernetes Pods is the selected inventory type. The conditions state that you will receive +a critical alert for any pods within the `ingress-nginx` namespace with a memory usage of 95% or above +and a warning alert if memory usage is 90% or above. + +![Inventory rule](../images/inventory-alert.png) + +{/* Does the preview capability exist when creating this rule in serverless? I do not see it in the UI. */} + +Before creating a rule, you can preview whether the conditions would have triggered the alert in the last +hour, day, week, or month. + +![Preview rules](../images/alert-preview.png) + +
+ +## Add actions + +You can extend your rules with actions that interact with third-party systems, write to logs or indices, or send user notifications. You can add an action to a rule at any time. You can create rules without adding actions, and you can also define multiple actions for a single rule. + +To add actions to rules, you must first create a connector for that service (for example, an email or external incident management system), which you can then use for different rules, each with their own action frequency. + + +Connectors provide a central place to store connection information for services and integrations with third party systems. +The following connectors are available when defining actions for alerting rules: + + + +For more information on creating connectors, refer to Connectors. + + + + +After you select a connector, you must set the action frequency. You can choose to create a summary of alerts on each check interval or on a custom interval. For example, send email notifications that summarize the new, ongoing, and recovered alerts each hour: + +![Action types](../images/action-alert-summary.png) +{/* NOTE: This is an autogenerated screenshot. Do not edit it directly. */} + +Alternatively, you can set the action frequency such that you choose how often the action runs (for example, at each check interval, only when the alert status changes, or at a custom action interval). In this case, you define precisely when the alert is triggered by selecting a specific +threshold condition: `Alert`, `Warning`, or `Recovered` (a value that was once above a threshold has now dropped below it). + +![Configure when an alert is triggered](../images/inventory-threshold-run-when-selection.png) +{/* NOTE: This is an autogenerated screenshot. Do not edit it directly. */} + +You can also further refine the conditions under which actions run by specifying that actions only run when they match a KQL query or when an alert occurs within a specific time frame: + +- **If alert matches query**: Enter a KQL query that defines field-value pairs or query conditions that must be met for notifications to send. The query only searches alert documents in the indices specified for the rule. +- **If alert is generated during timeframe**: Set timeframe details. Notifications are only sent if alerts are generated within the timeframe you define. + +![Configure a conditional alert](../images/conditional-alerts.png) + + + + +Use the default notification message or customize it. +You can add more context to the message by clicking the Add variable icon and selecting from a list of available variables. + +![Action variables list](../images/action-variables-popup.png) + +The following variables are specific to this rule type. +You can also specify [variables common to all rules](((kibana-ref))/rule-action-variables.html). + + + `context.alertDetailsUrl` + + Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. + + `context.alertState` + + Current state of the alert. + + `context.cloud` + + The cloud object defined by ECS if available in the source. + + `context.container` + + The container object defined by ECS if available in the source. + + `context.group` + + Name of the group reporting data. + + `context.host` + + The host object defined by ECS if available in the source. + + `context.labels` + + List of labels associated with the entity where this alert triggered. + + `context.metric` + + The metric name in the specified condition. Usage: (`ctx.metric.condition0`, `ctx.metric.condition1`, and so on). + + `context.orchestrator` + + The orchestrator object defined by ECS if available in the source. + + `context.originalAlertState` + + The state of the alert before it recovered. This is only available in the recovery context. + + `context.originalAlertStateWasALERT` + + Boolean value of the state of the alert before it recovered. This can be used for template conditions. This is only available in the recovery context. + + `context.originalAlertStateWasWARNING` + + Boolean value of the state of the alert before it recovered. This can be used for template conditions. This is only available in the recovery context. + + `context.reason` + + A concise description of the reason for the alert. + + `context.tags` + + List of tags associated with the entity where this alert triggered. + + `context.threshold` + + The threshold value of the metric for the specified condition. Usage: (`ctx.threshold.condition0`, `ctx.threshold.condition1`, and so on) + + `context.timestamp` + + A timestamp of when the alert was detected. + + `context.value` + + The value of the metric in the specified condition. Usage: (`ctx.value.condition0`, `ctx.value.condition1`, and so on). + + `context.viewInAppUrl` + + Link to the alert source. + + + + + +
+ +## Settings + +With infrastructure threshold rules, it's not possible to set an explicit index pattern as part of the configuration. The index pattern +is instead inferred from **Metrics indices** on the Settings page of the ((infrastructure-app)). + +With each execution of the rule check, the **Metrics indices** setting is checked, but it is not stored when the rule is created. diff --git a/docs/en/serverless/alerting/create-latency-threshold-alert-rule.mdx b/docs/en/serverless/alerting/create-latency-threshold-alert-rule.mdx new file mode 100644 index 0000000000..e1e4089f5d --- /dev/null +++ b/docs/en/serverless/alerting/create-latency-threshold-alert-rule.mdx @@ -0,0 +1,160 @@ +--- +id: serverlessObservabilityCreateLatencyThresholdAlertRule +slug: /serverless/observability/create-latency-threshold-alert-rule +title: Create a latency threshold rule +description: Get alerts when the latency of a specific transaction type in a service exceeds a defined threshold. +tags: [ 'serverless', 'observability', 'how-to', 'alerting' ] +--- + +

+ +import Connectors from './alerting-connectors.mdx' + +import Roles from '../partials/roles.mdx' + + + +You can create a latency threshold rule to alert you when the latency of a specific transaction type in a service exceeds a defined threshold. Threshold rules can be set at different levels: environment, service, transaction type, and/or transaction name. Add actions to raise alerts via services or third-party integrations e.g. mail, Slack, Jira. + +![Create rule for APM latency threshold alert](../images/alerts-create-rule-apm-latency-threshold.png) + + +These steps show how to use the **Alerts** UI. +You can also create a latency threshold rule directly from any page within **Applications**. Click the **Alerts and rules** button, and select **Create threshold rule** and then **Latency**. When you create a rule this way, the **Name** and **Tags** fields will be prepopulated but you can still change these. + + +To create your latency threshold rule:: + +1. In your ((observability)) project, go to **Alerts**. +1. Select **Manage Rules** from the **Alerts** page, and select **Create rule**. +1. Enter a **Name** for your rule, and any optional **Tags** for more granular reporting (leave blank if unsure). +1. Select the **Latency threshold** rule type from the APM use case. +1. Select the appropriate **Service**, **Type**, **Environment** and **Name** (or leave **ALL** to include all options). Alternatively, you can select **Use KQL Filter** and enter a KQL expression to limit the scope of your rule. +1. Define the threshold and period: + * **When**: Choose between `Average`, `95th percentile`, or `99th percentile`. + * **Is Above**: Enter a time in milliseconds (defaults to 1500ms). + * **For the last**: Define the period to be assessed in (defaults to last 5 minutes). +1. Choose how to **Group alerts by**. Every unique value will create an alert. +1. Define the interval to check the rule (for example, check every 1 minute). +1. (Optional) Set up **Actions**. +1. **Save** your rule. + +## Add actions + +You can extend your rules with actions that interact with third-party systems, write to logs or indices, or send user notifications. You can add an action to a rule at any time. You can create rules without adding actions, and you can also define multiple actions for a single rule. + +To add actions to rules, you must first create a connector for that service (for example, an email or external incident management system), which you can then use for different rules, each with their own action frequency. + + +Connectors provide a central place to store connection information for services and integrations with third party systems. +The following connectors are available when defining actions for alerting rules: + + + +For more information on creating connectors, refer to Connectors. + + + + +After you select a connector, you must set the action frequency. You can choose to create a **Summary of alerts** on each check interval or on a custom interval. For example, you can send email notifications that summarize the new, ongoing, and recovered alerts every twelve hours. + +Alternatively, you can set the action frequency to **For each alert** and specify the conditions each alert must meet for the action to run. For example, you can send an email only when the alert status changes to critical. + +![Configure when a rule is triggered](../images/alert-action-frequency.png) + +With the **Run when** menu you can choose if an action runs when the threshold for an alert is reached, or when the alert is recovered. For example, you can add a corresponding action for each state to ensure you are alerted when the rule is triggered and also when it recovers. + +![Choose between threshold met or recovered](../images/alert-apm-action-frequency-recovered.png) + + + + +Use the default notification message or customize it. +You can add more context to the message by clicking the Add variable icon and selecting from a list of available variables. + +![Action variables list](../images/action-variables-popup.png) + +The following variables are specific to this rule type. +You can also specify [variables common to all rules](((kibana-ref))/rule-action-variables.html). + + + `context.alertDetailsUrl` + + Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. + + `context.environment` + + The transaction type the alert is created for. + + `context.interval` + + The length and unit of time period where the alert conditions were met. + + `context.reason` + + A concise description of the reason for the alert. + + `context.serviceName` + + The service the alert is created for. + + `context.threshold` + + Any trigger value above this value will cause the alert to fire. + + `context.transactionName` + + The transaction name the alert is created for. + + `context.transactionType` + + The transaction type the alert is created for. + + `context.triggerValue` + + The value that breached the threshold and triggered the alert. + + `context.viewInAppUrl` + + Link to the alert source. + + + + + +
+## Example + +The latency threshold alert triggers when the latency of a specific transaction type in a service exceeds a defined threshold. + +Before continuing, identify the service name, environment name, and transaction type that you’d like to create a latency threshold rule for. + +This guide will create an alert for an error group ID based on the following criteria: + +* Service: `{your_service.name}` +* Transaction: `{your_transaction.name}` +* Environment: `{your_service.environment}` +* Average latency is above 1500ms for last 5 minutes +* Group alerts by `service.name` and `service.environment` +* Check every 1 minute +* Send the alert via email to the site reliability team + +From any page in **Applications**, select **Alerts and rules** → **Create threshold rule** → **Latency threshold**. Change the name of the alert (if you wish), but do not edit the tags. + +Based on the criteria above, define the following rule details: + +* **Service**: `{your_service.name}` +* **Type**: `{your_transaction.name}` +* **Environment**: `{your_service.environment}` +* **When:** `Average` +* **Is above:** `1500ms` +* **For the last:** `5 minutes` +* **Group alerts by:** `service.name` `service.environment` +* **Check every:** `1 minute` + +Next, select the **Email** connector and click **Create a connector**. Fill out the required details: sender, host, port, etc., and select **Save**. + +A default message is provided as a starting point for your alert. You can use the Mustache template syntax (`{{variable}}`) to pass additional alert values at the time a condition is detected to an action. A list of available variables can be accessed by selecting the add variable button. + +Select **Save**. The alert has been created and is now active! + diff --git a/docs/en/serverless/alerting/create-manage-rules.mdx b/docs/en/serverless/alerting/create-manage-rules.mdx new file mode 100644 index 0000000000..f6774766cf --- /dev/null +++ b/docs/en/serverless/alerting/create-manage-rules.mdx @@ -0,0 +1,142 @@ +--- +id: serverlessObservabilityCreateRules +slug: /serverless/observability/create-manage-rules +title: Create and manage rules +description: Create and manage rules for alerting when conditions are met. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +

+ +import Roles from '../partials/roles.mdx' + + + +Alerting enables you to define _rules_, which detect complex conditions within different apps and trigger actions when those conditions are met. Alerting provides a set of built-in connectors and rules for you to use. + +## Observability rules + +Learn more about Observability rules and how to create them: + + + + + AIOps + Anomaly detection + Anomalies match specific conditions. + + + APM + APM anomaly + The latency, throughput, or failed transaction rate of a service is abnormal. + + + Observability + Custom threshold + An Observability data type reaches or exceeds a given value. + + + Stack + ((es)) query + Matches are found during the latest query run. + + + APM + Error count threshold + The number of errors in a service exceeds a defined threshold. + + + APM + Failed transaction rate threshold + The rate of transaction errors in a service exceeds a defined threshold. + + + Metrics + Inventory + The infrastructure inventory exceeds a defined threshold. + + + APM + Latency threshold + The latency of a specific transaction type in a service exceeds a defined threshold. + + + SLO + SLO burn rate rule + The burn rate is above a defined threshold. + + + +## Creating rules and alerts + +You start by defining the rule and how often it should be evaluated. You can extend these rules by adding an appropriate action (for example, send an email or create an issue) to be triggered when the rule conditions are met. These actions are defined within each rule and implemented by the appropriate connector for that action e.g. Slack, Jira. You can create any rules from scratch using the **Manage Rules** page, or you can create specific rule types from their respective UIs and benefit from some of the details being pre-filled (for example, Name and Tags). + +* For APM alert types, you can select **Alerts and rules** and create rules directly from the **Services**, **Traces**, and **Dependencies** UIs. + +* For SLO alert types, from the **SLOs** page open the **More actions** menu for an SLO and select **Create new alert rule**. Alternatively, when you create a new SLO, the **Create new SLO burn rate alert rule** checkbox is enabled by default and will prompt you to Create SLO burn rate rule upon saving the SLO. + +{/* +Clarify available Logs rule +*/} + +After a rule is created, you can open the **More actions** menu and select **Edit rule** to check or change the definition, and/or add or modify actions. + +![Edit rule (failed transaction rate)](../images/alerts-edit-rule.png) + +From the action menu you can also: + +* Disable or delete rule +* Clone rule +* Snooze rule notifications +* Run rule (without waiting for next scheduled check) +* Update API keys + +## View rule details + +Click on an individual rule on the **((rules-app))** page to view details including the rule name, status, definition, execution history, related alerts, and more. + +![Rule details (APM anomaly)](../images/alerts-detail-apm-anomaly.png) + +A rule can have one of the following responses: + +`failed` + : The rule ran with errors. + +`succeeded` + : The rule ran without errors. + +`warning` + : The rule ran with some non-critical errors. + +## Snooze and disable rules + +The rule listing enables you to quickly snooze, disable, enable, or delete individual rules. + +{/* ![Use the rule status dropdown to enable or disable an individual rule](images/create-and-manage-rules/user-alerting-individual-enable-disable.png) */} + +When you snooze a rule, the rule checks continue to run on a schedule but the +alert will not trigger any actions. You can snooze for a specified period of +time, indefinitely, or schedule single or recurring downtimes. + +{/* ![Snooze notifications for a rule](images/create-and-manage-rules/user-alerting-snooze-panel.png) */} + +When a rule is in a snoozed state, you can cancel or change the duration of +this state. + + To temporarily suppress notifications for _all_ rules, create a . + +{/* Remove tech preview? */} + +## Import and export rules + +To import and export rules, use ((saved-objects-app)). + +Rules are disabled on export. +You are prompted to re-enable the rule on successful import. + +{/* Can you import / export rules? */} diff --git a/docs/en/serverless/alerting/create-slo-burn-rate-alert-rule.mdx b/docs/en/serverless/alerting/create-slo-burn-rate-alert-rule.mdx new file mode 100644 index 0000000000..78ec1968d6 --- /dev/null +++ b/docs/en/serverless/alerting/create-slo-burn-rate-alert-rule.mdx @@ -0,0 +1,134 @@ +--- +id: serverlessObservabilityCreateSloBurnRateAlertRule +slug: /serverless/observability/create-slo-burn-rate-alert-rule +title: Create an SLO burn rate rule +description: Get alerts when the SLO failure rate is too high over a defined period of time. +tags: [ 'serverless', 'observability', 'how-to', 'alerting' ] +--- + +

+ +import Connectors from './alerting-connectors.mdx' + +import Roles from '../partials/roles.mdx' + + + +Create an SLO burn rate rule to get alerts when the burn rate is too high over a defined threshold for two different lookback periods: a long period and a short period that is 1/12th of the long period. For example, if your long lookback period is one hour, your short lookback period is five minutes. + +Choose which SLO to monitor and then define multiple burn rate windows with appropriate severity. For each period, the burn rate is computed as the error rate divided by the error budget. When the burn rates for both periods surpass the threshold, an alert is triggered. Add actions to raise alerts via services or third-party integrations e.g. mail, Slack, Jira. + +![Create rule for failed transaction rate threshold](../images/slo-alerts-create-rule.png) + + +These steps show how to use the **Alerts** UI. You can also create an SLO burn rate rule directly from **Observability** → **SLOs**. +Click the more options icon () to the right of the SLO you want to add a burn rate rule for, and select ** Create new alert rule** from the menu. + +When you use the UI to create an SLO, a default SLO burn rate alert rule is created automatically. +The burn rate rule will use the default configuration and no connector. +You must configure a connector if you want to receive alerts for SLO breaches. + + +To create an SLO burn rate rule: + +1. In your ((observability)) project, go to **Alerts**. +1. Select **Manage Rules** from the **Alerts** page, and select **Create rule**. +1. Enter a **Name** for your rule, and any optional **Tags** for more granular reporting (leave blank if unsure). +1. Select **SLO burn rate** from the **Select rule type** list. +1. Select the **SLO** you want to monitor. +1. Define multiple burn rate windows for each **Action Group** (defaults to 4 windows but you can edit): + * **Lookback (hours)**: Enter the lookback period for this window. A shorter period equal to 1/12th of this period will be used for faster recovery. + * **Burn rate threshold**: Enter a burn rate for this window. + * **Action Group**: Select a severity for this window. +1. Define the interval to check the rule e.g. check every 1 minute. +1. (Optional) Set up **Actions**. +1. **Save** your rule. + +## Add actions + +You can extend your rules with actions that interact with third-party systems, write to logs or indices, or send user notifications. You can add an action to a rule at any time. You can create rules without adding actions, and you can also define multiple actions for a single rule. + +To add actions to rules, you must first create a connector for that service (for example, an email or external incident management system), which you can then use for different rules, each with their own action frequency. + + +Connectors provide a central place to store connection information for services and integrations with third party systems. +The following connectors are available when defining actions for alerting rules: + + + +For more information on creating connectors, refer to Connectors. + + + + +After you select a connector, you must set the action frequency. You can choose to create a **Summary of alerts** on each check interval or on a custom interval. For example, you can send email notifications that summarize the new, ongoing, and recovered alerts every twelve hours. + +Alternatively, you can set the action frequency to **For each alert** and specify the conditions each alert must meet for the action to run. For example, you can send an email only when the alert status changes to critical. + +![Configure when a rule is triggered](../images/alert-action-frequency.png) + +With the **Run when** menu you can choose if an action runs for a specific severity (critical, high, medium, low), or when the alert is recovered. For example, you can add a corresponding action for each severity you want an alert for, and also for when the alert recovers. + +![Choose between severity or recovered](../images/slo-action-frequency.png) + + + +Use the default notification message or customize it. +You can add more context to the message by clicking the Add variable icon and selecting from a list of available variables. + +![Action variables list](../images/action-variables-popup.png) + +The following variables are specific to this rule type. +You can also specify [variables common to all rules](((kibana-ref))/rule-action-variables.html). + + + `context.alertDetailsUrl` + + Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. + + `context.burnRateThreshold` + + The burn rate threshold value. + + `context.longWindow` + + The window duration with the associated burn rate value. + + `context.reason` + + A concise description of the reason for the alert. + + `context.shortWindow` + + The window duration with the associated burn rate value. + + `context.sloId` + + The SLO unique identifier. + + `context.sloInstanceId` + + The SLO instance ID. + + `context.sloName` + + The SLO name. + + `context.timestamp` + + A timestamp of when the alert was detected. + + `context.viewInAppUrl` + + The url to the SLO details page to help with further investigation. + + + + + +## Next steps + +Learn how to view alerts and triage SLO burn rate breaches: + +* +* diff --git a/docs/en/serverless/alerting/rate-aggregation.mdx b/docs/en/serverless/alerting/rate-aggregation.mdx new file mode 100644 index 0000000000..f3c0a9aed1 --- /dev/null +++ b/docs/en/serverless/alerting/rate-aggregation.mdx @@ -0,0 +1,54 @@ +--- +id: serverlessObservabilityRateAggregation +slug: /serverless/observability/rateAggregation +title: Rate aggregation +description: Analyze the rate at which a specific field changes over time. +tags: [ 'serverless', 'observability', 'reference' ] +--- + +

+ +You can use a rate aggregation to analyze the rate at which a specific field changes over time. +This type of aggregation is useful when you want to analyze fields like counters. + +For example, imagine you have a counter field called restarts that increments each time a service restarts. +You can use rate aggregation to get an alert if the service restarts more than X times within a specific time window (for example, per day). + +## How rates are calculated + +Rates used in alerting rules are calculated by comparing the maximum value of the field in the previous bucket to the maximum value of the field in the current bucket and then dividing the result by the number of seconds in the selected interval. +For example, if the value of the restarts increases, the rate would be calculated as: + +`(max_value_in_current_bucket - max_value_in_previous_bucket)/interval_in_seconds` + +In this example, let’s assume you have one document per bucket with the following data: + + + +```json +{ +"timestamp": 0000, +"restarts": 0 +} + +{ +"timestamp": 60000, +"restarts": 1 +} +``` + +Let’s assume the timestamp is a UNIX timestamp in milliseconds, +and we started counting on Thursday, January 1, 1970 12:00:00 AM. +In that case, the rate will be calculated as follows: + +`(max_value_in_current_bucket - max_value_in_previous_bucket)/interval_in_seconds`, where: + +* `max_value_in_current_bucket` [now-1m → now]: 1 +* `max_value_in_previous_bucket` [now-2m → now-1m]: 0 +* `interval_in_seconds`: 60 + +The rate calculation would be: `(1 - 0) / 60 = 0.0166666666667` + +If you want to alert when the rate of restarts is above 1 within a 1-minute window, you would set the threshold above `0.0166666666667`. + +The calculation you need to use depends on the interval that's selected. diff --git a/docs/en/serverless/alerting/triage-slo-burn-rate-breaches.mdx b/docs/en/serverless/alerting/triage-slo-burn-rate-breaches.mdx new file mode 100644 index 0000000000..28f645f3ff --- /dev/null +++ b/docs/en/serverless/alerting/triage-slo-burn-rate-breaches.mdx @@ -0,0 +1,47 @@ +--- +id: serverlessObservabilitySloBurnRateBreaches +slug: /serverless/observability/triage-slo-burn-rate-breaches +title: Triage SLO burn rate breaches +description: Triage SLO burn rate breaches to avoid exhausting your error budget and violating your SLO. +tags: [ 'serverless', 'observability', 'how-to', 'alerting' ] +--- + +

+ +SLO burn rate breaches occur when the percentage of bad events over a specified time period exceeds the threshold set in your . +When this happens, you are at risk of exhausting your error budget and violating your SLO. + +To triage issues quickly, go to the alert details page: + +1. In your Observability project, go to **Alerts** (or open the SLO and click **Alerts**.) +2. From the Alerts table, click the +icon next to the alert and select **View alert details**. + +The alert details page shows information about the alert, including when the alert was triggered, +the duration of the alert, the source SLO, and the rule that triggered the alert. +You can follow the links to navigate to the source SLO or rule definition. + +Explore charts on the page to learn more about the SLO breach: + +![Alert details for SLO burn rate breach](../images/slo-burn-rate-breach.png) + +* The first chart shows the burn rate during the time range when the alert was active. +The line indicates how close the SLO came to breaching the threshold. +* The next chart shows the alerts history over the last 30 days. +It shows the number of alerts that were triggered and the average time it took to recover after a breach. +* Both timelines are annotated to show when the threshold was breached. +You can hover over an alert icon to see the timestamp of the alert. + +The number, duration, and frequency of these breaches over time gives you an indication of how severely the service is degrading so that you can focus on high severity issues first. + + + The contents of the alert details page may vary depending on the type of SLI that's defined in the SLO. + + +After investigating the alert, you may want to: + +* Click **Snooze the rule** to snooze notifications for a specific time period or indefinitely. +* Click the icon and select **Add to case** to add the alert to a new or existing case. To learn more, refer to . +* Click the icon and select **Mark as untracked**. +When an alert is marked as untracked, actions are no longer generated. +You can choose to move active alerts to this state when you disable or delete rules. diff --git a/docs/en/serverless/alerting/triage-threshold-breaches.mdx b/docs/en/serverless/alerting/triage-threshold-breaches.mdx new file mode 100644 index 0000000000..8c46defe83 --- /dev/null +++ b/docs/en/serverless/alerting/triage-threshold-breaches.mdx @@ -0,0 +1,51 @@ +--- +id: serverlessObservabilityThresholdBreaches +slug: /serverless/observability/triage-threshold-breaches +title: Triage threshold breaches +description: Triage threshold breaches on the alert details page. +tags: [ 'serverless', 'observability', 'how-to', 'alerting' ] +--- + +Threshold breaches occur when an ((observability)) data type reaches or exceeds the threshold set in your . +For example, you might have a custom threshold rule that triggers an alert when the total number of log documents with a log level of `error` reaches 100. + +To triage issues quickly, go to the alert details page: + +1. In your Observability project, go to **Alerts**. +2. From the Alerts table, click the +icon next to the alert and select **View alert details**. + +The alert details page shows information about the alert, including when the alert was triggered, +the duration of the alert, and the last status update. +If there is a "group by" field specified in the rule, the page also includes the source. +You can follow the links to navigate to the rule definition. + +Explore charts on the page to learn more about the threshold breach: + +![Alert details for log threshold breach](../images/log-threshold-breach.png) + + +* The page includes a chart for each condition specified in the rule. +These charts help you understand when the breach occurred and its severity. +* If your rule is intended to detect log threshold breaches +(that is, it has a single condition that uses a count aggregation), +you can run a log rate analysis, assuming you have the required license. +Running a log rate analysis is useful for detecting significant dips or spikes in the number of logs. +Notice that you can adjust the baseline and deviation, and then run the analysis again. +For more information about using the log rate analysis feature, +refer to the [AIOps Labs](((kibana-ref))/xpack-ml-aiops.html#log-rate-analysis) documentation. +* The page may also include an alerts history chart that shows the number of triggered alerts per day for the last 30 days. +This chart is currently only available for rules that specify a single condition. +* Timelines on the page are annotated to show when the threshold was breached. +You can hover over an alert icon to see the timestamp of the alert. + +Analyze these charts to better understand when the breach started, it's current +state, and how the issue is trending. + +After investigating the alert, you may want to: + +* Click **Snooze the rule** to snooze notifications for a specific time period or indefinitely. +* Click the icon and select **Add to case** to add the alert to a new or existing case. To learn more, refer to . +* Click the icon and select **Mark as untracked**. +When an alert is marked as untracked, actions are no longer generated. +You can choose to move active alerts to this state when you disable or delete rules. diff --git a/docs/en/serverless/alerting/view-alerts.mdx b/docs/en/serverless/alerting/view-alerts.mdx new file mode 100644 index 0000000000..4f8d3bcbd7 --- /dev/null +++ b/docs/en/serverless/alerting/view-alerts.mdx @@ -0,0 +1,121 @@ +--- +id: serverlessObservabilityViewAlerts +slug: /serverless/observability/view-alerts +title: View alerts +description: Track and manage alerts for your services and applications. +tags: [ 'serverless', 'observability', 'how-to', 'alerting'] +--- + +

+ +import Roles from '../partials/roles.mdx' + + + +You can track and manage alerts for your applications and SLOs from the **Alerts** page. You can filter this view by alert status or time period, or search for specific alerts using KQL. Manage your alerts by adding them to cases or viewing them within the respective UIs. + +{/* Is this a page or dashboard? */} + +![Alerts page](../images/observability-alerts-view.png) + +## Filter alerts + +To help you get started with your analysis faster, use the KQL bar to create structured queries using +[((kib)) Query Language](((kibana-ref))/kuery-query.html). +{/* TO-DO: Fix example +For example, `kibana.alert.rule.name : <>`. +*/} + +You can use the time filter to define a specific date and time range. +By default, this filter is set to search for the last 15 minutes. + +You can also filter by alert status using the buttons below the KQL bar. +By default, this filter is set to **Show all** alerts, but you can filter to show only active, recovered or untracked alerts. + +## View alert details + +There are a few ways to inspect the details for a specific alert. + +From the **Alerts** table, you can click on a specific alert to open the alert detail flyout to view a summary of the alert without leaving the page. +There you'll see the current status of the alert, its duration, and when it was last updated. +To help you determine what caused the alert, you can view the expected and actual threshold values, and the rule that produced the alert. + +![Alerts detail (APM anomaly)](../images/alert-details-flyout.png) + +There are three common alert statuses: + +`active` + : The conditions for the rule are met and actions should be generated according to the notification settings. + +`flapping` + : The alert is switching repeatedly between active and recovered states. + +`recovered` + : The conditions for the rule are no longer met and recovery actions should be generated. + +`untracked` + : The corresponding rule is disabled or you've marked the alert as untracked. To mark the alert as untracked, go to the **Alerts** table, click the icon to expand the _More actions_ menu, and click **Mark as untracked**. + When an alert is marked as untracked, actions are no longer generated. + You can choose to move active alerts to this state when you disable or delete rules. + + +The flapping state is possible only if you have enabled alert flapping detection. +Go to the **Alerts** page and click **Manage Rules** to navigate to the ((observability)) **((rules-app))** page. +Click **Settings** then set the look back window and threshold that are used to determine whether alerts are flapping. +For example, you can specify that the alert must change status at least 6 times in the last 10 runs. +If the rule has actions that run when the alert status changes, those actions are suppressed while the alert is flapping. + + +{/* ![View alert details flyout on the Alerts page](images/view-observability-alerts/-observability-view-alert-details.png) */} + +To further inspect the rule: + +* From the alert detail flyout, click **View rule details**. +* From the **Alerts** table, click the icon and select **View rule details**. + +To view the alert in the app that triggered it: + +* From the alert detail flyout, click **View in app**. +* From the **Alerts** table, click the icon. + +## Customize the alerts table + +Use the toolbar buttons in the upper-left of the alerts table to customize the columns you want displayed: + +* **Columns**: Reorder the columns. +* **_x_ fields sorted**: Sort the table by one or more columns. +* **Fields**: Select the fields to display in the table. + +For example, click **Fields** and choose the `Maintenance Windows` field. +If an alert was affected by a maintenance window, its identifier appears in the new column. +For more information about their impact on alert notifications, refer to . + +{/* ![Alerts table with toolbar buttons highlighted](images/view-observability-alerts/-observability-alert-table-toolbar-buttons.png) */} + +You can also use the toolbar buttons in the upper-right to customize the display options or view the table in full-screen mode. + +## Add alerts to cases + +From the **Alerts** table, you can add one or more alerts to a case. +Click the icon to add the alert to a new or existing case. +You can add an unlimited amount of alerts from any rule type. + + +Each case can have a maximum of 1,000 alerts. + + +### Add an alert to a new case + +To add an alert to a new case: + +1. Select **Add to new case**. +1. Enter a case name, add relevant tags, and include a case description. +1. Under **External incident management system**, select a connector. If you've previously added one, that connector displays as the default selection. Otherwise, the default setting is `No connector selected`. +1. After you've completed all of the required fields, click **Create case**. A notification message confirms you successfully created the case. To view the case details, click the notification link or go to the Cases page. + +### Add an alert to an existing case + +To add an alert to an existing case: + +1. Select **Add to existing case**. +1. Select the case where you will attach the alert. A confirmation message displays. diff --git a/docs/en/serverless/apm-agents/apm-agents-aws-lambda-functions.mdx b/docs/en/serverless/apm-agents/apm-agents-aws-lambda-functions.mdx new file mode 100644 index 0000000000..233fe5e574 --- /dev/null +++ b/docs/en/serverless/apm-agents/apm-agents-aws-lambda-functions.mdx @@ -0,0 +1,46 @@ +--- +id: serverlessObservabilityApmAgentsAwsLambdaFunctions +slug: /serverless/observability/apm-agents-aws-lambda-functions +title: AWS Lambda functions +description: Use Elastic APM to monitor your AWS Lambda functions. +tags: [ 'serverless', 'observability', 'overview' ] +--- + +

+ + +Elastic APM lets you monitor your AWS Lambda functions. +The natural integration of distributed tracing into your AWS Lambda functions provides insights into each function's execution and runtime behavior as well as its relationships and dependencies to other services. + +
+ +## AWS Lambda architecture + +{/* comes from sandbox.elastic.dev/test-books/apm/lambda/aws-lambda-arch.mdx */} +AWS Lambda uses a special execution model to provide a scalable, on-demand compute service for code execution. In particular, AWS freezes the execution environment of a lambda function when no active requests are being processed. This execution model poses additional requirements on APM in the context of AWS Lambda functions: + +1. To avoid data loss, APM data collected by APM agents needs to be flushed before the execution environment of a lambda function is frozen. +1. Flushing APM data must be fast so as not to impact the response times of lambda function requests. + +To accomplish the above, Elastic APM agents instrument AWS Lambda functions and dispatch APM data via an [AWS Lambda extension](https://docs.aws.amazon.com/lambda/latest/dg/using-extensions.html). + +Normally, during the execution of a Lambda function, there's only a single language process running in the AWS Lambda execution environment. With an AWS Lambda extension, Lambda users run a _second_ process alongside their main service/application process. + +![image showing data flow from lambda function, to extension, to the managed intake service](../images/apm-agents-aws-lambda-functions-architecture.png) + +By using an AWS Lambda extension, Elastic APM agents can send data to a local Lambda extension process, and that process will forward data on to the managed intake service asynchronously. The Lambda extension ensures that any potential latency between the Lambda function and the managed intake service instance will not cause latency in the request flow of the Lambda function itself. + +## Setup + +To get started with monitoring AWS Lambda functions, refer to the APM agent documentation: + +* [Monitor AWS Lambda Node.js functions](((apm-node-ref))/lambda.html) +* [Monitor AWS Lambda Python functions](((apm-py-ref))/lambda-support.html) +* [Monitor AWS Lambda Java functions](((apm-java-ref))/aws-lambda.html) + + + The APM agent documentation states that you can use either an APM secret token or API key to authorize requests to the managed intake service. **However, when sending data to a project, you _must_ use an API key**. + + Read more about API keys in . + + diff --git a/docs/en/serverless/apm-agents/apm-agents-elastic-apm-agents.mdx b/docs/en/serverless/apm-agents/apm-agents-elastic-apm-agents.mdx new file mode 100644 index 0000000000..a8018be983 --- /dev/null +++ b/docs/en/serverless/apm-agents/apm-agents-elastic-apm-agents.mdx @@ -0,0 +1,56 @@ +--- +id: serverlessObservabilityApmAgents +slug: /serverless/observability/apm-agents-elastic-apm-agents +title: Elastic APM agents +# description: Description to be written +tags: [ 'serverless', 'observability', 'overview' ] +--- + +

+ +import Roles from '../partials/roles.mdx' + + + +import Go from '../transclusion/apm/guide/about/go.mdx' +import Java from '../transclusion/apm/guide/about/java.mdx' +import Net from '../transclusion/apm/guide/about/net.mdx' +import Node from '../transclusion/apm/guide/about/node.mdx' +import Php from '../transclusion/apm/guide/about/php.mdx' +import Python from '../transclusion/apm/guide/about/python.mdx' +import Ruby from '../transclusion/apm/guide/about/ruby.mdx' + +Elastic APM agents automatically measure application performance and track errors. +They offer built-in support for popular frameworks and technologies, and provide easy-to-use APIs that allow you to instrument any application. + +Elastic APM agents are built and maintained by Elastic. While they are similar, different programming languages have different nuances and requirements. Select your preferred language below to learn more about how each agent works. + + + + + + + + + + + +## Minimum supported versions + +The following versions of Elastic APM agents are supported: + +| Agent name | Agent version | +|---|---| +| **APM AWS Lambda extension** | ≥`1.x` | +| **Go agent** | ≥`1.x` | +| **Java agent** | ≥`1.x` | +| **.NET agent** | ≥`1.x` | +| **Node.js agent** | ≥`4.x` | +| **PHP agent** | ≥`1.x` | +| **Python agent** | ≥`6.x` | +| **Ruby agent** | ≥`3.x` | + + +Some recently added features may require newer agent versions than those listed above. +In these instances, the required APM agent versions will be documented with the feature. + diff --git a/docs/en/serverless/apm-agents/apm-agents-opentelemetry-collect-metrics.mdx b/docs/en/serverless/apm-agents/apm-agents-opentelemetry-collect-metrics.mdx new file mode 100644 index 0000000000..f7501bd4a5 --- /dev/null +++ b/docs/en/serverless/apm-agents/apm-agents-opentelemetry-collect-metrics.mdx @@ -0,0 +1,62 @@ +--- +id: serverlessObservabilityApmAgentsOtelCollectMetrics +slug: /serverless/observability/apm-agents-opentelemetry-collect-metrics +title: Collect metrics +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +

+ + + +When collecting metrics, please note that the [`DoubleValueRecorder`](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-api/latest/io/opentelemetry/api/metrics/DoubleValueRecorder.html) +and [`LongValueRecorder`](https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-api/latest/io/opentelemetry/api/metrics/LongValueObserver.html) metrics are not yet supported. + + +Here's an example of how to capture business metrics from a Java application. + +```java +// initialize metric +Meter meter = GlobalMetricsProvider.getMeter("my-frontend"); +DoubleCounter orderValueCounter = meter.doubleCounterBuilder("order_value").build(); + +public void createOrder(HttpServletRequest request) { + + // create order in the database + ... + // increment business metrics for monitoring + orderValueCounter.add(orderPrice); +} +``` + +See the [Open Telemetry Metrics API](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/api.md) +for more information. + +
+ +## Verify OpenTelemetry metrics data + +Use **Discover** to validate that metrics are successfully reported to your project. + +1. Open your Observability project. +1. In your ((observability)) project, go to **Discover**, and select the **Logs Explorer** tab. +1. Click **All logs** → **Data Views** then select **APM**. +1. Filter the data to only show documents with metrics: `processor.name :"metric"` +1. Narrow your search with a known OpenTelemetry field. For example, if you have an `order_value` field, add `order_value: *` to your search to return + only OpenTelemetry metrics documents. + +
+ +## Visualize + +Use **Lens** to create visualizations for OpenTelemetry metrics. Lens enables you to build visualizations by dragging and dropping data fields. It makes smart visualization suggestions for your data, allowing you to switch between visualization types. + +To get started with a new Lens visualization: + +1. In your ((observability)) project, go to **Visualizations**. +1. Click **Create new visualization**. +1. Select **Lens**. + +For more information on using Lens, refer to the [Lens documentation](((kibana-ref))/lens.html). + diff --git a/docs/en/serverless/apm-agents/apm-agents-opentelemetry-limitations.mdx b/docs/en/serverless/apm-agents/apm-agents-opentelemetry-limitations.mdx new file mode 100644 index 0000000000..1200b13035 --- /dev/null +++ b/docs/en/serverless/apm-agents/apm-agents-opentelemetry-limitations.mdx @@ -0,0 +1,53 @@ +--- +id: serverlessObservabilityApmAgentsOtelLimitations +slug: /serverless/observability/apm-agents-opentelemetry-limitations +title: Limitations +# description: Description to be written +tags: [ 'serverless', 'observability', 'overview' ] +--- + +

+ +## OpenTelemetry traces + +* Traces of applications using `messaging` semantics might be wrongly displayed as `transactions` in the Applications UI, while they should be considered `spans` (see issue [#7001](https://github.com/elastic/apm-server/issues/7001)). +* Inability to see Stack traces in spans. +* Inability in APM views to view the "Time Spent by Span Type" (see issue [#5747](https://github.com/elastic/apm-server/issues/5747)). + +
+ +## OpenTelemetry metrics + +* Inability to see host metrics in the **Applications** UI when using the OpenTelemetry Collector host metrics receiver (see issue [#5310](https://github.com/elastic/apm-server/issues/5310)). + + + Even though metrics do not show up in the **Applications** view, + the metrics are available in your Observability project and can be visualized using **Dashboards**. + See for more information about visualizing OpenTelemetry metrics. + + +
+ +## OpenTelemetry logs + +* The OpenTelemetry logs intake via Elastic is in technical preview. +* The application logs data stream (`app_logs`) has dynamic mapping disabled. This means the automatic detection and mapping of new fields is disabled (see issue [#9093](https://github.com/elastic/apm-server/issues/9093)). + +
+ +## OpenTelemetry Line Protocol (OTLP) + +Elastic supports both the +[(OTLP/gRPC)](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md#otlpgrpc) and +[(OTLP/HTTP)](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md#otlphttp) protocol +with ProtoBuf payload. Elastic does not yet support JSON Encoding for OTLP/HTTP. + +
+ +## OpenTelemetry Collector exporter for Elastic + +The [OpenTelemetry Collector exporter for Elastic](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/elasticsearchexporter#legacy-opentelemetry-collector-exporter-for-elastic) +has been deprecated and replaced by the native support of the OpenTelemetry Line Protocol in Elastic Observability (OTLP). To learn more, see [migration](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/elasticsearchexporter#migration). + +The [OpenTelemetry Collector exporter for Elastic](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/elasticsearchexporter) +(which is different from the legacy exporter mentioned above) is not intended to be used with Elastic APM and Elastic Observability. Use instead. diff --git a/docs/en/serverless/apm-agents/apm-agents-opentelemetry-opentelemetry-apisdk-with-elastic-apm-agents.mdx b/docs/en/serverless/apm-agents/apm-agents-opentelemetry-opentelemetry-apisdk-with-elastic-apm-agents.mdx new file mode 100644 index 0000000000..f6d059e76f --- /dev/null +++ b/docs/en/serverless/apm-agents/apm-agents-opentelemetry-opentelemetry-apisdk-with-elastic-apm-agents.mdx @@ -0,0 +1,37 @@ +--- +id: serverlessObservabilityApmAgentsOtelApisdkWithElasticApmAgents +slug: /serverless/observability/apm-agents-opentelemetry-opentelemetry-apisdk-with-elastic-apm-agents +title: OpenTelemetry API/SDK with Elastic APM agents +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +

+ +import Roles from '../partials/roles.mdx' + + + +Use the OpenTelemetry API/SDKs with Elastic APM agents. +Supported Elastic APM agents translate OpenTelemetry API calls to Elastic APM API calls. +This allows you to reuse your existing instrumentation to create Elastic APM transactions and spans. + + +If you'd like to use OpenTelemetry to send data directly to Elastic instead, +see OpenTelemetry native support. + + +See the relevant Elastic APM agent documentation to get started: + +* [Java](((apm-java-ref))/opentelemetry-bridge.html) +* [.NET](((apm-dotnet-ref))/opentelemetry-bridge.html) +* [Node.js](((apm-node-ref))/opentelemetry-bridge.html) +* [Python](((apm-py-ref))/opentelemetry-bridge.html) + +
+ +## Next steps + +* Collect metrics +* Learn about the limitations of this integration + diff --git a/docs/en/serverless/apm-agents/apm-agents-opentelemetry-opentelemetry-native-support.mdx b/docs/en/serverless/apm-agents/apm-agents-opentelemetry-opentelemetry-native-support.mdx new file mode 100644 index 0000000000..10a861617c --- /dev/null +++ b/docs/en/serverless/apm-agents/apm-agents-opentelemetry-opentelemetry-native-support.mdx @@ -0,0 +1,167 @@ +--- +id: serverlessObservabilityApmAgentsOtelNativeSupport +slug: /serverless/observability/apm-agents-opentelemetry-opentelemetry-native-support +title: OpenTelemetry native support +# description: Description to be written +tags: [ 'serverless', 'observability', 'overview' ] +--- + +

+ +Elastic natively supports the OpenTelemetry protocol (OTLP). +This means trace data and metrics collected from your applications and infrastructure can +be sent directly to Elastic. + +* Send data to Elastic from an OpenTelemetry collector +* Send data to Elastic from an OpenTelemetry agent + +
+ +## Send data from an OpenTelemetry collector + +Connect your OpenTelemetry collector instances to Elastic ((observability)) using the OTLP exporter: + +```yaml +receivers: [^1] + # ... + otlp: + +processors: [^2] + # ... + memory_limiter: + check_interval: 1s + limit_mib: 2000 + batch: + +exporters: + logging: + loglevel: warn [^3] + otlp/elastic: [^4] + # Elastic https endpoint without the "https://" prefix + endpoint: "${ELASTIC_APM_SERVER_ENDPOINT}" <5> [^7] + headers: + # Elastic API key + Authorization: "ApiKey ${ELASTIC_APM_API_KEY}" <6> [^7] + +service: + pipelines: + traces: + receivers: [otlp] + exporters: [logging, otlp/elastic] + metrics: + receivers: [otlp] + exporters: [logging, otlp/elastic] + logs: [^8] + receivers: [otlp] + exporters: [logging, otlp/elastic] +``` +[^1]: The receivers, like the +[OTLP receiver](https://github.com/open-telemetry/opentelemetry-collector/tree/main/receiver/otlpreceiver), that forward data emitted by APM agents, or the [host metrics receiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/hostmetricsreceiver). +[^2]: We recommend using the [Batch processor](https://github.com/open-telemetry/opentelemetry-collector/blob/main/processor/batchprocessor/README.md) and the [memory limiter processor](https://github.com/open-telemetry/opentelemetry-collector/blob/main/processor/memorylimiterprocessor/README.md). For more information, see [recommended processors](https://github.com/open-telemetry/opentelemetry-collector/blob/main/processor/README.md#recommended-processors). +[^3]: The [logging exporter](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/loggingexporter) is helpful for troubleshooting and supports various logging levels, like `debug`, `info`, `warn`, and `error`. +[^4]: Elastic ((observability)) endpoint configuration. +Elastic supports a ProtoBuf payload via both the OTLP protocol over gRPC transport [(OTLP/gRPC)](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md#otlpgrpc) +and the OTLP protocol over HTTP transport [(OTLP/HTTP)](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md#otlphttp). +To learn more about these exporters, see the OpenTelemetry Collector documentation: +[OTLP/HTTP Exporter](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlphttpexporter) or +[OTLP/gRPC exporter](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlpexporter). +[^5]: Hostname and port of the Elastic endpoint. For example, `elastic-apm-server:8200`. +[^6]: Credential for Elastic APM API key authorization (`Authorization: "ApiKey an_api_key"`). +[^7]: Environment-specific configuration parameters can be conveniently passed in as environment variables documented [here](https://opentelemetry.io/docs/collector/configuration/#configuration-environment-variables) (e.g. `ELASTIC_APM_SERVER_ENDPOINT` and `ELASTIC_APM_API_KEY`). +[^8]: To send OpenTelemetry logs to your project, declare a `logs` pipeline. + +You're now ready to export traces and metrics from your services and applications. + + +When using the OpenTelemetry collector, you should always prefer sending data via the [`OTLP` exporter](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlphttpexporter). +Using other methods, like the [`elasticsearch` exporter](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/elasticsearchexporter), will bypass all of the validation and data processing that Elastic performs. +In addition, your data will not be viewable in your Observability project if you use the `elasticsearch` exporter. + + +
+ +## Send data from an OpenTelemetry agent + +To export traces and metrics to Elastic, instrument your services and applications +with the OpenTelemetry API, SDK, or both. For example, if you are a Java developer, you need to instrument your Java app with the +[OpenTelemetry agent for Java](https://github.com/open-telemetry/opentelemetry-java-instrumentation). +See the [OpenTelemetry Instrumentation guides](https://opentelemetry.io/docs/instrumentation/) to download the +OpenTelemetry Agent or SDK for your language. + +Define environment variables to configure the OpenTelemetry agent and enable communication with Elastic APM. +For example, if you are instrumenting a Java app, define the following environment variables: + +```bash +export OTEL_RESOURCE_ATTRIBUTES=service.name=checkoutService,service.version=1.1,deployment.environment=production +export OTEL_EXPORTER_OTLP_ENDPOINT=https://apm_server_url:8200 +export OTEL_EXPORTER_OTLP_HEADERS="Authorization=ApiKey an_apm_api_key" +export OTEL_METRICS_EXPORTER="otlp" \ +export OTEL_LOGS_EXPORTER="otlp" \ [^1] +java -javaagent:/path/to/opentelemetry-javaagent-all.jar \ + -classpath lib/*:classes/ \ + com.mycompany.checkout.CheckoutServiceServer +``` +[^1]: The OpenTelemetry logs intake via Elastic is currently in technical preview. + + + + + `OTEL_RESOURCE_ATTRIBUTES` + Fields that describe the service and the environment that the service runs in. See resource attributes for more information. + + + `OTEL_EXPORTER_OTLP_ENDPOINT` + Elastic URL. The host and port that Elastic listens for APM events on. + + + `OTEL_EXPORTER_OTLP_HEADERS` + + Authorization header that includes the Elastic APM API key: `"Authorization=ApiKey an_api_key"`. + + + + `OTEL_METRICS_EXPORTER` + Metrics exporter to use. See [exporter selection](https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/#exporter-selection) for more information. + + + `OTEL_LOGS_EXPORTER` + Logs exporter to use. See [exporter selection](https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/#exporter-selection) for more information. + + + +You are now ready to collect traces and metrics before verifying metrics +and visualizing metrics. + +
+ +## Proxy requests to Elastic + +Elastic supports both the [(OTLP/gRPC)](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md#otlpgrpc) and [(OTLP/HTTP)](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md#otlphttp) protocol on the same port as Elastic APM agent requests. For ease of setup, we recommend using OTLP/HTTP when proxying or load balancing requests to Elastic. + +If you use the OTLP/gRPC protocol, requests to Elastic must use either HTTP/2 over TLS or HTTP/2 Cleartext (H2C). No matter which protocol is used, OTLP/gRPC requests will have the header: `"Content-Type: application/grpc"`. + +When using a layer 7 (L7) proxy like AWS ALB, requests must be proxied in a way that ensures requests to Elastic follow the rules outlined above. For example, with ALB you can create rules to select an alternative backend protocol based on the headers of requests coming into ALB. In this example, you'd select the gRPC protocol when the `"Content-Type: application/grpc"` header exists on a request. + +For more information on how to configure an AWS ALB to support gRPC, see this AWS blog post: +[Application Load Balancer Support for End-to-End HTTP/2 and gRPC](https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/). + +For more information on how Elastic services gRPC requests, see +[Muxing gRPC and HTTP/1.1](https://github.com/elastic/apm-server/blob/main/dev_docs/otel.md#muxing-grpc-and-http11). + +
+ +## Next steps + +* Collect metrics +* Add Resource attributes +* Learn about the limitations of this integration + diff --git a/docs/en/serverless/apm-agents/apm-agents-opentelemetry-other-execution-environments.mdx b/docs/en/serverless/apm-agents/apm-agents-opentelemetry-other-execution-environments.mdx new file mode 100644 index 0000000000..4f96592903 --- /dev/null +++ b/docs/en/serverless/apm-agents/apm-agents-opentelemetry-other-execution-environments.mdx @@ -0,0 +1,22 @@ +--- +id: serverlessObservabilityOtelLambdaSupport +slug: /serverless/observability/opentelemetry-aws-lambda-support +title: AWS Lambda support +# description: Description to be written +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +

+ +AWS Lambda functions can be instrumented with OpenTelemetry and monitored with Elastic ((observability)). + +To get started, follow the official AWS Distro for OpenTelemetry Lambda [getting started documentation](https://aws-otel.github.io/docs/getting-started/lambda) and configure the OpenTelemetry Collector to output traces and metrics to your Elastic cluster. + +
+ +## Next steps + +* Collect metrics +* Add Resource attributes +* Learn about the limitations of this integration + diff --git a/docs/en/serverless/apm-agents/apm-agents-opentelemetry-resource-attributes.mdx b/docs/en/serverless/apm-agents/apm-agents-opentelemetry-resource-attributes.mdx new file mode 100644 index 0000000000..f13f8cb8d5 --- /dev/null +++ b/docs/en/serverless/apm-agents/apm-agents-opentelemetry-resource-attributes.mdx @@ -0,0 +1,49 @@ +--- +id: serverlessObservabilityApmAgentsOtelResourceAttributes +slug: /serverless/observability/apm-agents-opentelemetry-resource-attributes +title: Resource attributes +# description: Description to be written +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +

+ +A resource attribute is a key/value pair containing information about the entity producing telemetry. +Resource attributes are mapped to Elastic Common Schema (ECS) fields like `service.*`, `cloud.*`, `process.*`, etc. +These fields describe the service and the environment that the service runs in. + +The examples shown here set the Elastic (ECS) `service.environment` field for the resource, i.e. service, that is producing trace events. +Note that Elastic maps the OpenTelemetry `deployment.environment` field to +the ECS `service.environment` field on ingestion. + +**OpenTelemetry agent** + +Use the `OTEL_RESOURCE_ATTRIBUTES` environment variable to pass resource attributes at process invocation. + +```bash +export OTEL_RESOURCE_ATTRIBUTES=deployment.environment=production +``` + +**OpenTelemetry collector** + +Use the [resource processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/resourceprocessor) to set or apply changes to resource attributes. + +```yaml +... +processors: + resource: + attributes: + - key: deployment.environment + action: insert + value: production +... +``` + + + +Need to add event attributes instead? +Use attributes—not to be confused with resource attributes—to add data to span, log, or metric events. +Attributes can be added as a part of the OpenTelemetry instrumentation process or with the [attributes processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/attributesprocessor). + + + diff --git a/docs/en/serverless/apm-agents/apm-agents-opentelemetry.mdx b/docs/en/serverless/apm-agents/apm-agents-opentelemetry.mdx new file mode 100644 index 0000000000..81a44b85f0 --- /dev/null +++ b/docs/en/serverless/apm-agents/apm-agents-opentelemetry.mdx @@ -0,0 +1,57 @@ +--- +id: serverlessObservabilityApmAgentsOtel +slug: /serverless/observability/apm-agents-opentelemetry +title: OpenTelemetry +# description: Description to be written +tags: [ 'serverless', 'observability', 'overview' ] +--- + +

+ +import DiagramsApmOtelArchitecture from '../transclusion/apm/guide/diagrams/apm-otel-architecture.mdx' + +[OpenTelemetry](https://opentelemetry.io/docs/concepts/what-is-opentelemetry/) +is a set of APIs, SDKs, tooling, and integrations that enable the capture and management of +telemetry data from your services and applications. For more information about the +OpenTelemetry project, see the [spec](https://github.com/open-telemetry/opentelemetry-specification/blob/master/README.md). + +## OpenTelemetry and Elastic + +{/* TODO: Fix diagram */} + + +Elastic integrates with OpenTelemetry, allowing you to reuse your existing instrumentation +to easily send observability data to Elastic. +There are several ways to integrate OpenTelemetry with Elastic: + +**OpenTelemetry API/SDK with Elastic APM agents** + +To unlock the full power of Elastic, use the OpenTelemetry API/SDKs with Elastic APM agents, +currently supported by the Java, Python, .NET, and Node.js agents. +These Elastic APM agents translate OpenTelemetry API calls to Elastic APM API calls. +This allows you to reuse your existing instrumentation to create Elastic APM transactions and spans—avoiding vendor lock-in and having to redo manual instrumentation. + +Get started → + +**OpenTelemetry agent** + +Elastic natively supports the OpenTelemetry protocol (OTLP). +This means trace data and metrics collected from your applications and infrastructure by an +OpenTelemetry agent can be sent directly to Elastic. + +Get started → + +**OpenTelemetry collector** + +Elastic natively supports the OpenTelemetry protocol (OTLP). +This means trace data and metrics collected from your applications and infrastructure by an +OpenTelemetry collector can be sent directly to Elastic. + +Get started → + +**Lambda collector exporter** + +AWS Lambda functions can be instrumented with OpenTelemetry and monitored with Elastic ((observability)). + +Get started → + diff --git a/docs/en/serverless/apm/apm-compress-spans.mdx b/docs/en/serverless/apm/apm-compress-spans.mdx new file mode 100644 index 0000000000..5dd3f7d484 --- /dev/null +++ b/docs/en/serverless/apm/apm-compress-spans.mdx @@ -0,0 +1,72 @@ +--- +id: serverlessObservabilityApmCompressSpans +slug: /serverless/observability/apm-compress-spans +title: Compress spans +description: Compress similar or identical spans to reduce storage overhead, processing power needed, and clutter in the Applications UI. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +

+ +In some cases, APM agents may collect large amounts of very similar or identical spans in a transaction. +For example, this can happen if spans are captured inside a loop or in unoptimized SQL queries that use multiple +queries instead of joins to fetch related data. + +In such cases, the upper limit of spans per transaction (by default, 500 spans) can be reached quickly, causing the agent to stop capturing potentially more relevant spans for a given transaction. + +Capturing similar or identical spans often isn't helpful, especially if they are of very short duration. +They can also clutter the UI, and cause processing and storage overhead. + +To address this problem, APM agents can compress similar spans into a single span. +The compressed span retains most of the original span information, including the overall duration and number of spans it represents. + +Regardless of the compression strategy, a span is eligible for compression if: + +- It has not propagated its trace context. +- It is an _exit_ span (such as database query spans). +- Its outcome is not `"failure"`. + +## Compression strategies + +The ((apm-agent)) selects between two strategies to decide if adjacent spans can be compressed. +In both strategies, only one previous span needs to be kept in memory. +This ensures that the agent doesn't require large amounts of memory to enable span compression. + +### Same-Kind strategy + +The agent uses the same-kind strategy if two adjacent spans have the same: + + * span type + * span subtype + * `destination.service.resource` (e.g. database name) + +### Exact-Match strategy + +The agent uses the exact-match strategy if two adjacent spans have the same: + + * span name + * span type + * span subtype + * `destination.service.resource` (e.g. database name) + +## Settings + +You can specify the maximum span duration in the agent's configuration settings. +Spans with a duration longer than the specified value will not be compressed. + +For the "Same-Kind" strategy, the default maximum span duration is 0 milliseconds, which means that +the "Same-Kind" strategy is disabled by default. +For the "Exact-Match" strategy, the default limit is 50 milliseconds. + +### Agent support + +Support for span compression is available in the following agents and can be configured +using the options listed below: + +| Agent | Same-kind config | Exact-match config | +|---|---|---| +| **Go agent** | [`ELASTIC_APM_SPAN_COMPRESSION_SAME_KIND_MAX_DURATION`](((apm-go-ref-v))/configuration.html#config-span-compression-same-kind-duration) | [`ELASTIC_APM_SPAN_COMPRESSION_EXACT_MATCH_MAX_DURATION`](((apm-go-ref-v))/configuration.html#config-span-compression-exact-match-duration) | +| **Java agent** | [`span_compression_same_kind_max_duration`](((apm-java-ref-v))/config-huge-traces.html#config-span-compression-same-kind-max-duration) | [`span_compression_exact_match_max_duration`](((apm-java-ref-v))/config-huge-traces.html#config-span-compression-exact-match-max-duration) | +| **.NET agent** | [`SpanCompressionSameKindMaxDuration`](((apm-dotnet-ref-v))/config-core.html#config-span-compression-same-kind-max-duration) | [`SpanCompressionExactMatchMaxDuration`](((apm-dotnet-ref-v))/config-core.html#config-span-compression-exact-match-max-duration) | +| **Node.js agent** | [`spanCompressionSameKindMaxDuration`](((apm-node-ref-v))/configuration.html#span-compression-same-kind-max-duration) | [`spanCompressionExactMatchMaxDuration`](((apm-node-ref-v))/configuration.html#span-compression-exact-match-max-duration) | +| **Python agent** | [`span_compression_same_kind_max_duration`](((apm-py-ref-v))/configuration.html#config-span-compression-same-kind-max-duration) | [`span_compression_exact_match_max_duration`](((apm-py-ref-v))/configuration.html#config-span-compression-exact-match-max_duration) | diff --git a/docs/en/serverless/apm/apm-create-custom-links.mdx b/docs/en/serverless/apm/apm-create-custom-links.mdx new file mode 100644 index 0000000000..437d1f9bfb --- /dev/null +++ b/docs/en/serverless/apm/apm-create-custom-links.mdx @@ -0,0 +1,205 @@ +--- +id: serverlessObservabilityApmCreateCustomLinks +slug: /serverless/observability/apm-create-custom-links +title: Create custom links +# description: Description to be written +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +

+ +import Roles from '../partials/roles.mdx' + + + +Elastic's custom link feature allows you to easily create up to 500 dynamic links +based on your specific APM data. +Custom links can be filtered to only appear for relevant services, +environments, transaction types, or transaction names. + +Ready to dive in? Jump straight to the examples. + +## Create a link + +Each custom link consists of a label, URL, and optional filter. +The easiest way to create a custom link is from within the actions dropdown in the transaction detail page. +This method will automatically apply filters, scoping the link to that specific service, +environment, transaction type, and transaction name. + +Alternatively, you can create a custom link by navigating to any page within **Applications** and selecting **Settings** → **Custom Links** → **Create custom link**. + +### Label + +The name of your custom link. +The actions context menu displays this text, so keep it as short as possible. + + +Custom links are displayed alphabetically in the actions menu. + + +### URL + +The URL your link points to. +URLs support dynamic field name variables, encapsulated in double curly brackets: `{{field.name}}`. +These variables will be replaced with transaction metadata when the link is clicked. + +Because everyone's data is different, +you'll need to examine your traces to see what metadata is available for use. +To do this, select a trace and click **Metadata** in the **Trace Sample** table. + +![Example metadata](images/custom-links/example-metadata.png) + +### Filters + +Filter each link to only appear for specific services or transactions. +You can filter on the following fields: + +* `service.name` +* `service.env` +* `transaction.type` +* `transaction.name` + +Multiple values are allowed when comma-separated. + +## Custom link examples + +Not sure where to start with custom links? +Take a look at the examples below and customize them to your liking! + +### Email + +Email the owner of a service. + +{/* TODO: If we change these to Docsmobile tables they might look better */} + +| | | +|---|---| +| Label | `Email engineer` | +| Link | `mailto:@.com` | +| Filters | `service.name:` | + +**Example** + +This link opens an email addressed to the team or owner of `python-backend`. +It will only appear on services with the name `python-backend`. + +| | | +|---|---| +| Label | `Email python-backend engineers` | +| Link | `mailto:python_team@elastic.co` | +| Filters | `service.name:python-backend` | + +### GitHub issue + +Open a GitHub issue with prepopulated metadata from the selected trace sample. + +| | | +|---|---| +| Label | `Open an issue in ` | +| Link | `https://github.com///issues/new?title=&body=<BODY>` | +| Filters | `service.name:client` | + +**Example** + +This link opens a new GitHub issue in the apm-agent-rum repository. +It populates the issue body with relevant metadata from the currently active trace. +Clicking this link results in the following issue being created: + +![Example github issue](images/custom-links/create-github-issue.png) + +| | | +|---|---| +| Label | `Open an issue in apm-rum-js` | +| Link | `https://github.com/elastic/apm-agent-rum-js/issues/new?title=Investigate+APM+trace&body=Investigate+the+following+APM+trace%3A%0D%0A%0D%0Aservice.name%3A+{{service.name}}%0D%0Atransaction.id%3A+{{transaction.id}}%0D%0Acontainer.id%3A+{{container.id}}%0D%0Aurl.full%3A+{{url.full}}` | +| Filters | `service.name:client` | + +See the [GitHub automation documentation](https://help.github.com/en/github/managing-your-work-on-github/about-automation-for-issues-and-pull-requests-with-query-parameters) for a full list of supported query parameters. + +<div id="custom-links-examples-jira"></div> + +### Jira task + +Create a Jira task with prepopulated metadata from the selected trace sample. + +| | | +|---|---| +| Label | `Open an issue in Jira` | +| Link | `https://<JIRA_BASE_URL>/secure/CreateIssueDetails!init.jspa?<ARGUMENTS>` | + +**Example** + +This link creates a new task on the Engineering board in Jira. +It populates the issue body with relevant metadata from the currently active trace. +Clicking this link results in the following task being created in Jira: + +![Example jira issue](images/custom-links/create-jira-issue.png) + +| | | +|---|---| +| Label | `Open a task in Jira` | +| Link | `https://test-site-33.atlassian.net/secure/CreateIssueDetails!init.jspa?pid=10000&issuetype=10001&summary=Created+via+APM&description=Investigate+the+following+APM+trace%3A%0D%0A%0D%0Aservice.name%3A+{{service.name}}%0D%0Atransaction.id%3A+{{transaction.id}}%0D%0Acontainer.id%3A+{{container.id}}%0D%0Aurl.full%3A+{{url.full}}` | + +See the [Jira application administration knowledge base](https://confluence.atlassian.com/jirakb/how-to-create-issues-using-direct-html-links-in-jira-server-159474.html) +for a full list of supported query parameters. + +### Dashboards + +Link to a custom dashboard. + +| | | +|---|---| +| Label | `Open transaction in custom visualization` | +| Link | `https://kibana-instance/app/kibana#/dashboard?_g=query:(language:kuery,query:'transaction.id:{{transaction.id}}'...` | + +**Example** + +This link opens the current `transaction.id` in a custom dashboard. +There are no filters set. + +| | | +|---|---| +| Label | `Open transaction in Python drilldown viz` | +| URL | `https://kibana-instance/app/kibana#/dashboard?_g=(filters:!(),refreshInterval:(pause:!t,value:0),time:(from:now-24h,to:now))&_a=(description:'',filters:!(),fullScreenMode:!f,options:(hidePanelTitles:!f,useMargins:!t),panels:!((embeddableConfig:(),gridData:(h:15,i:cb79c1c0-1af8-472c-aaf7-d158a76946fb,w:24,x:0,y:0),id:c8c74b20-6a30-11ea-92ab-b5d3feff11df,panelIndex:cb79c1c0-1af8-472c-aaf7-d158a76946fb,type:visualization,version:'7.7')),query:(language:kuery,query:'transaction.id:{{transaction.id}}'),timeRestore:!f,title:'',viewMode:edit)` | + +### Slack channel + +Open a specified slack channel. + +| | | +|---|---| +| Label | `Open SLACK_CHANNEL` | +| Link | `https://COMPANY_SLACK.slack.com/archives/SLACK_CHANNEL` | +| Filters | `service.name` : `SERVICE_NAME` | + +**Example** + +This link opens a company slack channel, #apm-user-support. +It only appears when `transaction.name` is `GET user/login`. + +| | | +|---|---| +| Label | `Open #apm-user-support` | +| Link | `https://COMPANY_SLACK.slack.com/archives/efk52kt23k` | +| Filters | `transaction.name:GET user/login` | + +### Website + +Open an internal or external website. + +| | | +|---|---| +| Label | `Open <WEBSITE>` | +| Link | `https://<COMPANY_SLACK>.slack.com/archives/<SLACK_CHANNEL>` | +| Filters | `service.name:<SERVICE_NAME>` | + +**Example** + +This link opens more data on a specific `user.email`. +It only appears on front-end transactions. + +| | | +|---|---| +| Label | `View user internally` | +| Link | `https://internal-site.company.com/user/{{user.email}}` | +| Filters | `service.name:client` | + diff --git a/docs/en/serverless/apm/apm-data-types.mdx b/docs/en/serverless/apm/apm-data-types.mdx new file mode 100644 index 0000000000..47a031ce2c --- /dev/null +++ b/docs/en/serverless/apm/apm-data-types.mdx @@ -0,0 +1,22 @@ +--- +id: serverlessObservabilityApmDataTypes +slug: /serverless/observability/apm-data-types +title: APM data types +description: Learn about the various APM data types. +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Elastic APM agents capture different types of information from within their instrumented applications. +These are known as events, and can be spans, transactions, errors, or metrics: + +* **Spans** contain information about the execution of a specific code path. +They measure from the start to the end of an activity, and they can have a parent/child +relationship with other spans. +* **Transactions** are a special kind of _span_ that have additional attributes associated with them. +They describe an event captured by an Elastic ((apm-agent)) instrumenting a service. +You can think of transactions as the highest level of work you’re measuring within a service. +* **Errors** contain at least information about the original `exception` that occurred or about +a `log` created when the exception occurred. For simplicity, errors are represented by a unique ID. +* **Metrics** measure the state of a system by gathering information on a regular interval. diff --git a/docs/en/serverless/apm/apm-distributed-tracing.mdx b/docs/en/serverless/apm/apm-distributed-tracing.mdx new file mode 100644 index 0000000000..8e412415bd --- /dev/null +++ b/docs/en/serverless/apm/apm-distributed-tracing.mdx @@ -0,0 +1,107 @@ +--- +id: serverlessObservabilityApmDistributedTracing +slug: /serverless/observability/apm-distributed-tracing +title: Distributed tracing +description: Understand how a single request that travels through multiple services impacts your application. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import TabWidgetsDistributedTraceSendWidget from '../transclusion/apm/guide/tab-widgets/distributed-trace-send-widget.mdx' +import TabWidgetsDistributedTraceReceiveWidget from '../transclusion/apm/guide/tab-widgets/distributed-trace-receive-widget.mdx' + +A `trace` is a group of <DocLink id="serverlessObservabilityApmDataTypes">transactions</DocLink> and <DocLink id="serverlessObservabilityApmDataTypes">spans</DocLink> with a common root. +Each `trace` tracks the entirety of a single request. +When a `trace` travels through multiple services, as is common in a microservice architecture, +it is known as a distributed trace. + +## Why is distributed tracing important? + +Distributed tracing enables you to analyze performance throughout your microservice architecture +by tracing the entirety of a request — from the initial web request on your front-end service +all the way to database queries made on your back-end services. + +Tracking requests as they propagate through your services provides an end-to-end picture of +where your application is spending time, where errors are occurring, and where bottlenecks are forming. +Distributed tracing eliminates individual service's data silos and reveals what's happening outside of +service borders. + +For supported technologies, distributed tracing works out-of-the-box, with no additional configuration required. + +## How distributed tracing works + +Distributed tracing works by injecting a custom `traceparent` HTTP header into outgoing requests. +This header includes information, like `trace-id`, which is used to identify the current trace, +and `parent-id`, which is used to identify the parent of the current span on incoming requests +or the current span on an outgoing request. + +When a service is working on a request, it checks for the existence of this HTTP header. +If it's missing, the service starts a new trace. +If it exists, the service ensures the current action is added as a child of the existing trace, +and continues to propagate the trace. + +### Trace propagation examples + +In this example, Elastic's Ruby agent communicates with Elastic's Java agent. +Both support the `traceparent` header, and trace data is successfully propagated. + +![How traceparent propagation works](images/distributed-tracing/dt-trace-ex1.png) + +In this example, Elastic's Ruby agent communicates with OpenTelemetry's Java agent. +Both support the `traceparent` header, and trace data is successfully propagated. + +![How traceparent propagation works](images/distributed-tracing/dt-trace-ex2.png) + +In this example, the trace meets a piece of middleware that doesn't propagate the `traceparent` header. +The distributed trace ends and any further communication will result in a new trace. + +![How traceparent propagation works](images/distributed-tracing/dt-trace-ex3.png) + +### W3C Trace Context specification + +All Elastic agents now support the official W3C Trace Context specification and `traceparent` header. +See the table below for the minimum required agent version: + +| Agent name | Agent Version | +|---|---| +| **Go Agent** | ≥`1.6` | +| **Java Agent** | ≥`1.14` | +| **.NET Agent** | ≥`1.3` | +| **Node.js Agent** | ≥`3.4` | +| **PHP Agent** | ≥`1.0` | +| **Python Agent** | ≥`5.4` | +| **Ruby Agent** | ≥`3.5` | + +<DocCallOut title="Note"> +Older Elastic agents use a unique `elastic-apm-traceparent` header. +For backward-compatibility purposes, new versions of Elastic agents still support this header. +</DocCallOut> + +## Visualize distributed tracing + +APM's timeline visualization provides a visual deep-dive into each of your application's traces: + +![Example view of the distributed tracing in Elastic APM](images/spans/apm-distributed-tracing.png) + +## Manual distributed tracing + +Elastic agents automatically propagate distributed tracing context for supported technologies. +If your service communicates over a different, unsupported protocol, +you can manually propagate distributed tracing context from a sending service to a receiving service +with each agent's API. + +### Add the `traceparent` header to outgoing requests + +Sending services must add the `traceparent` header to outgoing requests. + +<TabWidgetsDistributedTraceSendWidget /> + +<div id="distributed-tracing-incoming"></div> + +### Parse the `traceparent` header on incoming requests + +Receiving services must parse the incoming `traceparent` header, +and start a new transaction or span as a child of the received context. + +<TabWidgetsDistributedTraceReceiveWidget /> diff --git a/docs/en/serverless/apm/apm-filter-your-data.mdx b/docs/en/serverless/apm/apm-filter-your-data.mdx new file mode 100644 index 0000000000..b8b147c08f --- /dev/null +++ b/docs/en/serverless/apm/apm-filter-your-data.mdx @@ -0,0 +1,47 @@ +--- +id: serverlessObservabilityApmFilterYourData +slug: /serverless/observability/apm-filter-your-data +title: Filter your data +# description: Description to be written +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Global filters are ways you can filter your APM data based on a specific +time range or environment. When viewing a specific service, the filter persists +as you move between tabs. + +![Global filters view](images/filters/global-filters.png) + +<DocCallOut title="Note"> + +If you prefer to use advanced queries on your data to filter on specific pieces +of information, see <DocLink id="serverlessObservabilityApmQueryYourData">Query your data</DocLink>. + +</DocCallOut> + +## Global time range + +The global time range filter restricts APM data to a specific time period. + +## Service environment filter + +The environment selector is a global filter for `service.environment`. +It allows you to view only relevant data and is especially useful for separating development from production environments. +By default, all environments are displayed. If there are no environment options, you'll see "not defined". + +Service environments are defined when configuring your APM agents. +It's vital to be consistent when naming environments in your APM agents. +To learn how to configure service environments, see the specific APM agent documentation: + +* **Go:** [`ELASTIC_APM_ENVIRONMENT`](((apm-go-ref))/configuration.html#config-environment) +* **Java:** [`environment`](((apm-java-ref))/config-core.html#config-environment) +* **.NET:** [`Environment`](((apm-dotnet-ref))/config-core.html#config-environment) +* **Node.js:** [`environment`](((apm-node-ref))/configuration.html#environment) +* **PHP:** [`environment`](((apm-php-ref))/configuration-reference.html#config-environment) +* **Python:** [`environment`](((apm-py-ref))/configuration.html#config-environment) +* **Ruby:** [`environment`](((apm-ruby-ref))/configuration.html#config-environment) +{/* * **iOS agent:** _Not yet supported_ */} +{/* * **Real User Monitoring:** [`environment`](((apm-rum-ref))/configuration.html#environment) */} + diff --git a/docs/en/serverless/apm/apm-find-transaction-latency-and-failure-correlations.mdx b/docs/en/serverless/apm/apm-find-transaction-latency-and-failure-correlations.mdx new file mode 100644 index 0000000000..36ecdad669 --- /dev/null +++ b/docs/en/serverless/apm/apm-find-transaction-latency-and-failure-correlations.mdx @@ -0,0 +1,99 @@ +--- +id: serverlessObservabilityApmFindTransactionLatencyAndFailureCorrelations +slug: /serverless/observability/apm-find-transaction-latency-and-failure-correlations +title: Find transaction latency and failure correlations +# description: Description to be written +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Correlations surface attributes of your data that are potentially correlated +with high-latency or erroneous transactions. For example, if you are a site +reliability engineer who is responsible for keeping production systems up and +running, you want to understand what is causing slow transactions. Identifying +attributes that are responsible for higher latency transactions can potentially +point you toward the root cause. You may find a correlation with a particular +piece of hardware, like a host or pod. Or, perhaps a set of users, based on IP +address or region, is facing increased latency due to local data center issues. + +To find correlations: + +1. In your ((observability)) project, go to **Applications** → **Services**. +1. Select a service. +1. Select the **Transactions** tab. +1. Select a transaction group in the **Transactions** table. + +<DocCallOut title="Note"> +Active queries _are_ applied to correlations. +</DocCallOut> + +## Find high transaction latency correlations + +The correlations on the **Latency correlations** tab help you discover which +attributes are contributing to increased transaction latency. + +![APM latency correlations](images/transactions/correlations-hover.png) + +The progress bar indicates the status of the asynchronous analysis, which +performs statistical searches across a large number of attributes. For large +time ranges and services with high transaction throughput, this might take some +time. To improve performance, reduce the time range. + +The latency distribution chart visualizes the overall latency of the +transactions in the transaction group. If there are attributes that have a +statistically significant correlation with slow response times, they are listed +in a table below the chart. The table is sorted by correlation coefficients that +range from 0 to 1. Attributes with higher correlation values are more likely to +contribute to high latency transactions. By default, the attribute with the +highest correlation value is added to the chart. To see the latency distribution +for other attributes, select their row in the table. + +If a correlated attribute seems noteworthy, use the **Filter** quick links: + +* `+` creates a new query in the Applications UI for filtering transactions containing + the selected value. + +* `-` creates a new query in the Applications UI to filter out transactions containing + the selected value. + +You can also click the icon beside the field name to view and filter its most +popular values. + +In this example screenshot, there are transactions that are skewed to the right +with slower response times than the overall latency distribution. If you select +the `+` filter in the appropriate row of the table, it creates a new query in +the Applications UI for transactions with this attribute. With the "noise" now +filtered out, you can begin viewing sample traces to continue your investigation. + +<div id="correlations-error-rate"></div> + +## Find failed transaction correlations + +The correlations on the **Failed transaction correlations** tab help you discover +which attributes are most influential in distinguishing between transaction +failures and successes. In this context, the success or failure of a transaction +is determined by its [event.outcome](((ecs-ref))/ecs-event.html#field-event-outcome) +value. For example, APM agents set the `event.outcome` to `failure` when an HTTP +transaction returns a `5xx` status code. + +The chart highlights the failed transactions in the overall latency distribution +for the transaction group. If there are attributes that have a statistically +significant correlation with failed transactions, they are listed in a table. +The table is sorted by scores, which are mapped to high, medium, or low impact +levels. Attributes with high impact levels are more likely to contribute to +failed transactions. By default, the attribute with the highest score is added +to the chart. To see a different attribute in the chart, select its row in the +table. + +For example, in the screenshot below, there are attributes such as a specific +node and pod name that have medium impact on the failed transactions. + +![Failed transaction correlations](images/correlations/correlations-failed-transactions.png) + +Select the `+` filter to create a new query in the Applications UI for transactions +with one or more of these attributes. If you are unfamiliar with a field, click +the icon beside its name to view its most popular values and optionally filter +on those values too. Each time that you add another attribute, it is filtering +out more and more noise and bringing you closer to a diagnosis. + diff --git a/docs/en/serverless/apm/apm-get-started.mdx b/docs/en/serverless/apm/apm-get-started.mdx new file mode 100644 index 0000000000..3bc8b79533 --- /dev/null +++ b/docs/en/serverless/apm/apm-get-started.mdx @@ -0,0 +1,138 @@ +--- +id: serverlessObservabilityApmGetStarted +slug: /serverless/observability/apm-get-started +title: Get started with traces and APM +description: Learn how to collect Application Performance Monitoring (APM) data and visualize it in real time. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Admin" goal="send APM data to Elastic" /> + +<div id="ingest-traces"></div> + +import Go from '../transclusion/apm/guide/install-agents/go.mdx' +import Java from '../transclusion/apm/guide/install-agents/java.mdx' +import Net from '../transclusion/apm/guide/install-agents/net.mdx' +import Node from '../transclusion/apm/guide/install-agents/node.mdx' +import Php from '../transclusion/apm/guide/install-agents/php.mdx' +import Python from '../transclusion/apm/guide/install-agents/python.mdx' +import Ruby from '../transclusion/apm/guide/install-agents/ruby.mdx' +import OpenTelemetry from '../transclusion/apm/guide/open-telemetry/otel-get-started.mdx' + +In this guide you'll learn how to collect and send Application Performance Monitoring (APM) data +to Elastic, then explore and visualize the data in real time. + +<div id="add-apm-integration-agents"></div> + +## Step 1: Add data + +You'll use APM agents to send APM data from your application to Elastic. Elastic offers APM agents +written in several languages and supports OpenTelemetry. Which agent you'll use depends on the language used in your service. + +To send APM data to Elastic, you must install an APM agent and configure it to send data to +your project: + +1. <DocLink id="serverlessObservabilityCreateAnObservabilityProject">Create a new ((observability)) project</DocLink>, or open an existing one. +1. To install and configure one or more APM agents, do one of following: + * In your Observability project, go to **Add data** → **Monitor my application performance** → **Elastic APM** and follow the prompts. + * Use the following instructions: + + <DocTabs hasBorder> + <DocTab name="Go"><Go /></DocTab> + <DocTab name="Java"><Java /></DocTab> + <DocTab name=".NET"><Net /></DocTab> + <DocTab name="Node.js"><Node /></DocTab> + <DocTab name="PHP"><Php /></DocTab> + <DocTab name="Python"><Python /></DocTab> + <DocTab name="Ruby"><Ruby /></DocTab> + <DocTab name="OpenTelemetry"><OpenTelemetry /></DocTab> + </DocTabs> + + <br /> + + While there are many configuration options, all APM agents require: + + <DocTable columns={[ + { title: 'Option', width: '25%' }, + { title: 'Description', width: '75%' } + ]}> + <DocRow> + <DocCell>**Service name**</DocCell> + <DocCell> + The APM integration maps an instrumented service's name — defined in + each ((apm-agent))'s configuration — to the index where its data is stored. + Service names are case-insensitive and must be unique. + + For example, you cannot have a service named `Foo` and another named `foo`. + Special characters will be removed from service names and replaced with underscores (`_`). + </DocCell> + </DocRow> + <DocRow> + <DocCell>**Server URL**</DocCell> + <DocCell> + The host and port that the managed intake service listens for events on. + + To find the URL for your project: + + 1. Go to the [Cloud console](https://cloud.elastic.co/). + 1. Next to your project, select **Manage**. + 1. Next to _Endpoints_, select **View**. + 1. Copy the _APM endpoint_. + </DocCell> + </DocRow> + <DocRow> + <DocCell>**API key**</DocCell> + <DocCell> + Authentication method for communication between ((apm-agent)) and the managed intake service. + + You can create and delete API keys in Applications Settings: + 1. Go to any page in the _Applications_ section of the main menu. + 1. Click **Settings** in the top bar. + 1. Go to the **Agent keys** tab. + </DocCell> + </DocRow> + <DocRow> + <DocCell>**Environment**</DocCell> + <DocCell> + The name of the environment this service is deployed in, for example "production" or "staging". + + Environments allow you to easily filter data on a global level in the UI. + It's important to be consistent when naming environments across agents. + </DocCell> + </DocRow> + </DocTable> + +1. If you're using the step-by-step instructions in the UI, after you've installed and configured an agent, +you can click **Check Agent Status** to verify that the agent is sending data. + +To learn more about APM agents, including how to fine-tune how agents send traces to Elastic, +refer to <DocLink id="serverlessObservabilityApmSendTracesToElastic" />. + +<div id="view-apm-integration-data"></div> + +## Step 2: View your data + +After one or more APM agents are installed and successfully sending data, you can view +application performance monitoring data in the UI. + +In the _Applications_ section of the main menu, select **Services**. +This will show a high-level overview of the health and general performance of all your services. + +Learn more about visualizing APM data in <DocLink id="serverlessObservabilityApmViewAndAnalyzeTraces" />. + +{/* TO DO: ADD SCREENSHOT */} + +<DocCallOut title="Tip"> +Not seeing any data? Find helpful tips in <DocLink id="serverlessObservabilityApmTroubleshooting">Troubleshooting</DocLink>. +</DocCallOut> + +## Next steps + +Now that data is streaming into your project, take your investigation to a +deeper level. Learn how to use <DocLink id="serverlessObservabilityApmViewAndAnalyzeTraces">Elastic's built-in visualizations for APM data</DocLink>, +<DocLink id="serverlessObservabilityAlerting">alert on APM data</DocLink>, +or <DocLink id="serverlessObservabilityApmSendTracesToElastic">fine-tune how agents send traces to Elastic</DocLink>. diff --git a/docs/en/serverless/apm/apm-integrate-with-machine-learning.mdx b/docs/en/serverless/apm/apm-integrate-with-machine-learning.mdx new file mode 100644 index 0000000000..e4f6a362e3 --- /dev/null +++ b/docs/en/serverless/apm/apm-integrate-with-machine-learning.mdx @@ -0,0 +1,70 @@ +--- +id: serverlessObservabilityApmIntegrateWithMachineLearning +slug: /serverless/observability/apm-integrate-with-machine-learning +title: Integrate with machine learning +# description: Description to be written +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +The Machine learning integration initiates a new job predefined to calculate anomaly scores on APM transaction durations. +With this integration, you can quickly pinpoint anomalous transactions and see the health of +any upstream and downstream services. + +Machine learning jobs are created per environment and are based on a service's average response time. +Because jobs are created at the environment level, +you can add new services to your existing environments without the need for additional machine learning jobs. + +Results from machine learning jobs are shown in multiple places throughout the Applications UI: + +* The **Services overview** provides a quick-glance view of the general health of all of your services. + + {/* TODO: Take this screenshot (no data in oblt now) + ![Example view of anomaly scores on response times in the Applications UI](images/machine-learning-integration/apm-service-quick-health.png) */} + +* The transaction duration chart will show the expected bounds and add an annotation when the anomaly score is 75 or above. + + {/* TODO: Take this screenshot (no data in oblt now) + ![Example view of anomaly scores on response times in the Applications UI](images/machine-learning-integration/apm-apm-ml-integration.png) */} + +* Service Maps will display a color-coded anomaly indicator based on the detected anomaly score. + + ![Example view of anomaly scores on service maps in the Applications UI](images/service-maps/service-map-anomaly.png) + +## Enable anomaly detection + +To enable machine learning anomaly detection: + +1. In your ((observability)) project, go to any **Applications** page. + +1. Click **Anomaly detection**. + +1. Click **Create Job**. + +1. Machine learning jobs are created at the environment level. + Select all of the service environments that you want to enable anomaly detection in. + Anomalies will surface for all services and transaction types within the selected environments. + +1. Click **Create Jobs**. + +That's it! After a few minutes, the job will begin calculating results; +it might take additional time for results to appear on your service maps. +To manage existing jobs, click **Manage jobs** (or go to **AIOps** → **Anomaly detection**). + +## Anomaly detection warning + +To make machine learning as easy as possible to set up, +Elastic will warn you when filtered to an environment without a machine learning job. + +{/* TODO: Take this screenshot (no data in oblt now) +![Example view of anomaly alert in the Applications UI](images/machine-learning-integration/apm-apm-anomaly-alert.png) */} + +## Unknown service health + +After enabling anomaly detection, service health may display as "Unknown". Here are some reasons why this can occur: + +1. No machine learning job exists. See <DocLink id="serverlessObservabilityApmIntegrateWithMachineLearning" section="enable-anomaly-detection">Enable anomaly detection</DocLink> to enable anomaly detection and create a machine learning job. +1. There is no machine learning data for the job. If you just created the machine learning job you'll need to wait a few minutes for data to be available. Alternatively, if the service or its environment are new, you'll need to wait for more trace data. +1. No "request" or "page-load" transaction type exists for this service; service health is only available for these transaction types. + diff --git a/docs/en/serverless/apm/apm-keep-data-secure.mdx b/docs/en/serverless/apm/apm-keep-data-secure.mdx new file mode 100644 index 0000000000..c7cb0ff6fc --- /dev/null +++ b/docs/en/serverless/apm/apm-keep-data-secure.mdx @@ -0,0 +1,80 @@ +--- +id: serverlessObservabilityApmKeepDataSecure +slug: /serverless/observability/apm-keep-data-secure +title: Keep APM data secure +description: Make sure APM data is sent to Elastic securely and sensitive data is protected. +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Editor" goal="create and manage API keys" /> + +{/* TODO: Find out whether Editor or Admin is required to create and manage API keys. */} + +When setting up Elastic APM, it's essential to ensure that the data collected by +APM agents is sent to Elastic securely and that sensitive data is protected. + +## Secure communication with APM agents + +Communication between APM agents and the managed intake service is both encrypted and authenticated. +Requests without a valid API key will be denied. + +### Create a new API key + +To create a new API key: + +1. In your ((observability)) project, go to any **Applications** page. +1. Click **Settings**. +1. Select the **APM agent keys** tab. +1. Click **Create APM agent key**. +1. Name the key and assign privileges to it. +1. Click **Create APM agent key**. +1. Copy the key now. You will not be able to see it again. API keys do not expire. + +### Delete an API key + +To delete an API key: + +1. From any of the **Application** pages, click **Settings**. +1. Select the **APM agent keys** tab. +1. Search for the API key you want to delete. +1. Click the trash can icon to delete the selected API key. + +### View existing API keys + +To view all API keys for your project: + +1. Expand **Project settings**. +1. Select **Management**. +1. Select **API keys**. + +## Data security + +When setting up Elastic APM, it's essential to review all captured data carefully to ensure it doesn't contain sensitive information like passwords, credit card numbers, or health data. + +Some APM agents offer a way to manipulate or drop APM events _before_ they leave your services. +Refer to the relevant agent's documentation for more information and examples: + +### Java + +**`include_process_args`**: Remove process arguments from transactions. This option is disabled by default. Read more in the [Java agent configuration docs](((apm-java-ref-v))/config-reporter.html#config-include-process-args). + +### .NET + +**Filter API**: Drop APM events _before_ they are sent to Elastic. Read more in the [.NET agent Filter API docs](((apm-dotnet-ref-v))/public-api.html#filter-api). + +### Node.js + +* **`addFilter()`**: Drop APM events _before_ they are sent to Elastic. Read more in the [Node.js agent API docs](((apm-node-ref-v))/agent-api.html#apm-add-filter). +* **`captureExceptions`**: Remove errors raised by the server-side process by disabling the `captureExceptions` configuration option. Read more in [the Node.js agent configuration docs](((apm-node-ref-v))/configuration.html#capture-exceptions). + +### Python + +**Custom processors**: Drop APM events _before_ they are sent to Elastic. Read more in the [Python agent Custom processors docs](((apm-py-ref-v))/sanitizing-data.html). + +### Ruby + +**`add_filter()`**: Drop APM events _before_ they are sent to Elastic. Read more in the [Ruby agent API docs](((apm-ruby-ref-v))/api.html#api-agent-add-filter). diff --git a/docs/en/serverless/apm/apm-kibana-settings.mdx b/docs/en/serverless/apm/apm-kibana-settings.mdx new file mode 100644 index 0000000000..004f68dedd --- /dev/null +++ b/docs/en/serverless/apm/apm-kibana-settings.mdx @@ -0,0 +1,92 @@ +--- +id: serverlessObservabilityApmKibanaSettings +slug: /serverless/observability/apm-kibana-settings +title: Settings +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Editor" goal="modify settings" /> + +You can adjust Application settings to fine-tune your experience in the Applications UI. + +## General settings + +To change APM settings, select **Settings** from any **Applications** page. +The following settings are available. + +`observability:apmAgentExplorerView` + +: <DocBadge template="beta" /> Enables the Agent explorer view. + +`observability:apmAWSLambdaPriceFactor` + +: Set the price per Gb-second for your AWS Lambda functions. + +`observability:apmAWSLambdaRequestCostPerMillion` + +: Set the AWS Lambda cost per million requests. + +`observability:apmEnableContinuousRollups` + +: <DocBadge template="beta" /> When continuous rollups are enabled, the UI will select metrics with the appropriate resolution. +On larger time ranges, lower resolution metrics will be used, which will improve loading times. + +`observability:apmEnableServiceMetrics` + +: <DocBadge template="beta" /> Enables the usage of service transaction metrics, which are low cardinality metrics that can be used by certain views like the service inventory for faster loading times. + +`observability:apmLabsButton` + +: Enable or disable the APM Labs button — a quick way to enable and disable technical preview features in APM. + +{/* [[observability-apm-critical-path]]`observability:apmEnableCriticalPath` +When enabled, displays the critical path of a trace. */} + +{/* [[observability-enable-progressive-loading]]`observability:apmProgressiveLoading` +preview:[] When enabled, uses progressive loading of some APM views. +Data may be requested with a lower sampling rate first, with lower accuracy but faster response times, +while the unsampled data loads in the background. */} + +`observability:apmServiceGroupMaxNumberOfServices` + +: Limit the number of services in a given service group. + +{/* [[observability-apm-optimized-sort]]`observability:apmServiceInventoryOptimizedSorting` +preview:[] Sorts services without anomaly detection rules on the APM Service inventory page by service name. */} + +`observability:apmDefaultServiceEnvironment` + +: Set the default environment for APM. When left empty, data from all environments will be displayed by default. + +`observability:apmEnableProfilingIntegration` + +: Enable the Universal Profiling integration in APM. + +{/* [[observability-enable-aws-lambda-metrics]]`observability:enableAwsLambdaMetrics` +preview:[] Display Amazon Lambda metrics in the service metrics tab. */} + +`observability:enableComparisonByDefault` + +: Enable the comparison feature by default. + +`observability:enableInspectEsQueries` + +: When enabled, allows you to inspect Elasticsearch queries in API responses. + +{/* [[observability-apm-trace-explorer-tab]]`observability:apmTraceExplorerTab` +preview:[] Enable the APM Trace Explorer feature, that allows you to search and inspect traces with KQL or EQL. */} + +## APM Labs + +**APM Labs** allows you to easily try out new features that are technical preview. + +To enable APM labs, go to **Applications** → **Settings** → **General settings** and toggle **Enable labs button in APM**. +Select **Save changes** and refresh the page. + +After enabling **APM Labs** select **Labs** in the toolbar to see the technical preview features available to try out. + diff --git a/docs/en/serverless/apm/apm-observe-lambda-functions.mdx b/docs/en/serverless/apm/apm-observe-lambda-functions.mdx new file mode 100644 index 0000000000..2dd456f9c0 --- /dev/null +++ b/docs/en/serverless/apm/apm-observe-lambda-functions.mdx @@ -0,0 +1,49 @@ +--- +id: serverlessObservabilityApmObserveLambdaFunctions +slug: /serverless/observability/apm-observe-lambda-functions +title: Observe Lambda functions +# description: Description to be written +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Elastic APM provides performance and error monitoring for AWS Lambda functions. +See how your Lambda functions relate to and depend on other services, and +get insight into function execution and runtime behavior, like lambda duration, cold start rate, cold start duration, compute usage, memory usage, and more. + +To set up Lambda monitoring, refer to <DocLink id="serverlessObservabilityApmAgentsAwsLambdaFunctions" />. + +![lambda overview](images/apm-lambda/lambda-overview.png) + +## Cold starts + +A cold start occurs when a Lambda function has not been used for a certain period of time. A lambda worker receives a request to run the function and prepares an execution environment. + +Cold starts are an unavoidable byproduct of the serverless world, but visibility into how they impact your services can help you make better decisions about factors like how much memory to allocate to a function, whether to enable provisioned concurrency, or if it's time to consider removing a large dependency. + +### Cold start rate + +The cold start rate (i.e. proportion of requests that experience a cold start) is displayed per service and per transaction. + +Cold start is also displayed in the trace waterfall, where you can drill-down into individual traces and see trace metadata like AWS request ID, trigger type, and trigger request ID. + +{/* TODO: RETAKE +![lambda cold start trace](images/apm-lambda/lambda-cold-start-trace.png) */} + +### Latency distribution correlation + +The <DocLink id="serverlessObservabilityApmFindTransactionLatencyAndFailureCorrelations" section="find-high-transaction-latency-correlations">latency correlations</DocLink> feature can be used to visualize the impact of Lambda cold starts on latency—just select the `faas.coldstart` field. + +{/* TODO: RETAKE +![lambda correlations example](images/apm-lambda/lambda-correlations.png) */} + +## AWS Lambda function grouping + +The default APM agent configuration results in one APM service per AWS Lambda function, +where the Lambda function name is the service name. + +In some use cases, it makes more sense to logically group multiple lambda functions under a single +APM service. You can achieve this by setting the `ELASTIC_APM_SERVICE_NAME` environment variable +on related Lambda functions to the same value. + diff --git a/docs/en/serverless/apm/apm-query-your-data.mdx b/docs/en/serverless/apm/apm-query-your-data.mdx new file mode 100644 index 0000000000..aa29e21546 --- /dev/null +++ b/docs/en/serverless/apm/apm-query-your-data.mdx @@ -0,0 +1,75 @@ +--- +id: serverlessObservabilityApmQueryYourData +slug: /serverless/observability/apm-query-your-data +title: Query your data +# description: Description to be written +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Querying your APM data is an essential tool that can make finding bottlenecks in your code even more straightforward. + +Using the query bar, a powerful data query feature, you can pass advanced queries on your data +to filter on specific pieces of information you’re interested in. +APM queries entered into the query bar are added as parameters to the URL, so it’s easy to share a specific query or view with others. + +The query bar comes with a handy autocomplete that helps find the fields and even provides suggestions to the data they include. +You can select the query bar and hit the down arrow on your keyboard to begin scanning recommendations. + +When you type, you can begin to see some of the fields available for filtering: + +![Example of the Kibana Query bar in the Applications UI](images/advanced-queries/apm-query-bar.png) + +<DocCallOut title="Tip"> + +To learn more about the ((kib)) query language capabilities, see the [Kibana Query Language Enhancements](((kibana-ref))/kuery-query.html) documentation. + +</DocCallOut> + +## APM queries + +APM queries can be handy for removing noise from your data in the <DocLink id="serverlessObservabilityApmServices">Services</DocLink>, <DocLink id="serverlessObservabilityApmTransactions">Transactions</DocLink>, +<DocLink id="serverlessObservabilityApmErrors">Errors</DocLink>, <DocLink id="serverlessObservabilityApmMetrics">Metrics</DocLink>, and <DocLink id="serverlessObservabilityApmTraces">Traces</DocLink> views. + +For example, in the **Services** view, you can quickly view a list of all the instrumented services running on your production +environment: `service.environment : production`. Or filter the list by including the APM agent's name and the host it’s running on: +`service.environment : "production" and agent.name : "java" and host.name : "prod-server1"`. + +On the **Traces** view, you might want to view failed transaction results from any of your running containers: +`transaction.result :"FAILURE" and container.id : *`. + +On the **Transactions** view, you may want to list only the slower transactions than a specified time threshold: `transaction.duration.us > 2000000`. +Or filter the list by including the service version and the Kubernetes pod it's running on: +`transaction.duration.us > 2000000 and service.version : "7.12.0" and kubernetes.pod.name : "pod-5468b47f57-pqk2m"`. + +## Querying in Discover + +Alternatively, you can query your APM documents in [*Discover*](((kibana-ref))/discover.html). +Querying documents in **Discover** works the same way as queries in the Applications UI, +and **Discover** supports all of the example APM queries shown on this page. + +### Discover queries + +One example where you may want to make use of **Discover** +is to view _all_ transactions for an endpoint instead of just a sample. + +Use the Applications UI to find a transaction name and time bucket that you're interested in learning more about. +Then, switch to **Discover** and make a search: + +```shell +processor.event: "transaction" AND transaction.name: "<TRANSACTION_NAME_HERE>" and transaction.duration.us > 13000 and transaction.duration.us < 14000 +``` + +In this example, we're interested in viewing all of the `APIRestController#customers` transactions +that took between 13 and 14 milliseconds. Here's what Discover returns: + +![View all transactions in bucket](images/advanced-queries/advanced-discover.png) + +You can now explore the data until you find a specific transaction that you're interested in. +Copy that transaction's `transaction.id` and paste it into APM to view the data in the context of the APM: + +![View specific transaction in the Applications UI](images/advanced-queries/specific-transaction-search.png) + +![View specific transaction in the Applications UI](images/advanced-queries/specific-transaction.png) + diff --git a/docs/en/serverless/apm/apm-reduce-your-data-usage.mdx b/docs/en/serverless/apm/apm-reduce-your-data-usage.mdx new file mode 100644 index 0000000000..b35ba25589 --- /dev/null +++ b/docs/en/serverless/apm/apm-reduce-your-data-usage.mdx @@ -0,0 +1,21 @@ +--- +id: serverlessObservabilityApmReduceYourDataUsage +slug: /serverless/observability/apm-reduce-your-data-usage +title: Reduce your data usage +description: Implement strategies for reducing your data usage without compromising the ability to analyze APM data. +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +The richness and volume of APM data provides unique insights into your applications, but it can +also mean higher costs and more noise when analyzing data. There are a couple strategies you can +use to reduce your data usage while continuing to get the full value of APM data. Read more about +these strategies: + +* <DocLink id="serverlessObservabilityApmTransactionSampling" />: Reduce data storage, costs, and +noise by ingesting only a percentage of all traces that you can extrapolate from in your analysis. +* <DocLink id="serverlessObservabilityApmCompressSpans" />: Compress similar or identical spans to +reduce storage overhead, processing power needed, and clutter in the Applications UI. +* <DocLink id="serverlessObservabilityApmReduceStackTrace" />: Reduce the stacktrace information +collected by your APM agents. diff --git a/docs/en/serverless/apm/apm-reference.mdx b/docs/en/serverless/apm/apm-reference.mdx new file mode 100644 index 0000000000..67a217fb8a --- /dev/null +++ b/docs/en/serverless/apm/apm-reference.mdx @@ -0,0 +1,18 @@ +--- +id: serverlessObservabilityApmReference +slug: /serverless/observability/apm-reference +title: Reference +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +The following reference documentation is available: + +* <DocLink id="serverlessObservabilityApmKibanaSettings" text="Settings reference"/> +* [API reference](https://docs.elastic.co/api-reference/observability/post_api-apm-agent-keys) + +In addition to the public API above, the APM managed intake service offers an +<DocLink id="serverlessObservabilityApmServerApi" text="event intake API"/>. +This API is exclusively for APM agent developers. The vast majority of users should have no reason to interact with this API. diff --git a/docs/en/serverless/apm/apm-send-traces-to-elastic.mdx b/docs/en/serverless/apm/apm-send-traces-to-elastic.mdx new file mode 100644 index 0000000000..ec5c75d42f --- /dev/null +++ b/docs/en/serverless/apm/apm-send-traces-to-elastic.mdx @@ -0,0 +1,26 @@ +--- +id: serverlessObservabilityApmSendTracesToElastic +slug: /serverless/observability/apm-send-data-to-elastic +title: Send APM data to Elastic +# description: Description to be written +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Admin" goal="send APM data to Elastic" /> + +<DocCallOut> +<DocIcon type="documentation" title="documentation icon" /> Want to get started quickly? See <DocLink id="serverlessObservabilityApmGetStarted">Get started with traces and APM</DocLink>. +</DocCallOut> + +Send APM data to Elastic with: + +* **<DocLink id="serverlessObservabilityApmAgents" text="Elastic APM agents"/>:** Elastic APM agents are lightweight libraries you install in your applications and services. They automatically instrument supported technologies, and offer APIs for custom code instrumentation. +* **<DocLink id="serverlessObservabilityApmAgentsOtel" text="OpenTelemetry"/>:** OpenTelemetry is a set of APIs, SDKs, tooling, and integrations that enable the capture and management of telemetry data from your services and applications. + +Elastic also supports instrumentation of <DocLink id="serverlessObservabilityApmAgentsAwsLambdaFunctions" text="AWS Lambda functions"/>. + +{/* To do: We should put a diagram here showing how high-level arch */} diff --git a/docs/en/serverless/apm/apm-server-api.mdx b/docs/en/serverless/apm/apm-server-api.mdx new file mode 100644 index 0000000000..16334822d6 --- /dev/null +++ b/docs/en/serverless/apm/apm-server-api.mdx @@ -0,0 +1,59 @@ +--- +id: serverlessObservabilityApmServerApi +slug: /serverless/observability/apm-server-api +title: Managed intake service event API +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Api from './apm-server-api/api.mdx' +import ApiError from './apm-server-api/api-error.mdx' +import ApiEvents from './apm-server-api/api-events.mdx' +import ApiInfo from './apm-server-api/api-info.mdx' +import ApiMetadata from './apm-server-api/api-metadata.mdx' +import ApiMetricset from './apm-server-api/api-metricset.mdx' +import ApiSpan from './apm-server-api/api-span.mdx' +import ApiTransaction from './apm-server-api/api-transaction.mdx' +import OtelAPI from './apm-server-api/otel-api.mdx' + + +<DocCallOut color="warning" title="Warning"> + This API is exclusively for APM agent developers. The vast majority of users should have no reason to interact with this API. +</DocCallOut> + +<Api /> + +## Server information API + +<ApiInfo /> + +## Events intake API + +<ApiEvents /> + +### Metadata + +<ApiMetadata /> + +### Transactions + +<ApiTransaction /> + +### Spans + +<ApiSpan /> + +### Errors + +<ApiError /> + +### Metrics + +<ApiMetricset /> + +## OpenTelemetry API + +<OtelAPI /> + diff --git a/docs/en/serverless/apm/apm-server-api/api-error.mdx b/docs/en/serverless/apm/apm-server-api/api-error.mdx new file mode 100644 index 0000000000..a0a97086d8 --- /dev/null +++ b/docs/en/serverless/apm/apm-server-api/api-error.mdx @@ -0,0 +1,18 @@ + + +import V2Error from '../../transclusion/apm/guide/spec/v2/error.mdx' + +<div id="api-error"></div> + +An error or a logged error message captured by an agent occurring in a monitored service. + +<div id="api-error-schema"></div> + +#### Error Schema + +The managed intake service uses a JSON Schema to validate requests. The specification for errors is defined on +[GitHub](https://github.com/elastic/apm-server/blob/main/docs/spec/v2/error.json) and included below. + +<DocAccordion buttonContent="Click to expand the schema"> + <V2Error /> +</DocAccordion> diff --git a/docs/en/serverless/apm/apm-server-api/api-events.mdx b/docs/en/serverless/apm/apm-server-api/api-events.mdx new file mode 100644 index 0000000000..4e35108231 --- /dev/null +++ b/docs/en/serverless/apm/apm-server-api/api-events.mdx @@ -0,0 +1,138 @@ + + +<div id="api-events"></div> + +<DocCallOut title="Note"> +Most users do not need to interact directly with the events intake API. +</DocCallOut> + +The events intake API is what we call the internal protocol that APM agents use to talk to the managed intake service. +Agents communicate with the Server by sending events — captured pieces of information — in an HTTP request. +Events can be: + +* Transactions +* Spans +* Errors +* Metrics + +Each event is sent as its own line in the HTTP request body. +This is known as [newline delimited JSON (NDJSON)](http://ndjson.org). + +With NDJSON, agents can open an HTTP POST request and use chunked encoding to stream events to the managed intake service +as soon as they are recorded in the agent. +This makes it simple for agents to serialize each event to a stream of newline delimited JSON. +The managed intake service also treats the HTTP body as a compressed stream and thus reads and handles each event independently. + +Refer to <DocLink id="serverlessObservabilityApmDataTypes" /> to learn more about the different types of events. + +<div id="api-events-endpoint"></div> + +### Endpoints + +The managed intake service exposes the following endpoints for Elastic APM agent data intake: + +| Name | Endpoint | +|---|---| +| APM agent event intake | `/intake/v2/events` | + +{/* | RUM event intake (v2) | `/intake/v2/rum/events` | +| RUM event intake (v3) | `/intake/v3/rum/events` | */} + +<div id="api-events-example"></div> + +### Request + +Send an `HTTP POST` request to the managed intake service `intake/v2/events` endpoint: + +```bash +https://{hostname}:{port}/intake/v2/events +``` + +The managed intake service supports asynchronous processing of batches. +To request asynchronous processing the `async` query parameter can be set in the POST request +to the `intake/v2/events` endpoint: + +```bash +https://{hostname}:{port}/intake/v2/events?async=true +``` + +<DocCallOut title="Note"> +Since asynchronous processing defers some of the event processing to the +background and takes place after the client has closed the request, some errors +can't be communicated back to the client and are logged by the managed intake service. +Furthermore, asynchronous processing requests will only be scheduled if the managed intake service can +service the incoming request, requests that cannot be serviced will receive an internal error +`503` "queue is full" error. +</DocCallOut> + +{/* For <DocLink id="enApmGuideApmRum">RUM</DocLink> send an `HTTP POST` request to the managed intake service `intake/v3/rum/events` endpoint instead: + +```bash +http(s)://{hostname}:{port}/intake/v3/rum/events +``` */} + +<div id="api-events-response"></div> + +### Response + +On success, the server will respond with a 202 Accepted status code and no body. + +Keep in mind that events can succeed and fail independently of each other. Only if all events succeed does the server respond with a 202. + +<div id="api-events-errors"></div> + +### API Errors + +There are two types of errors that the managed intake service may return to an agent: + +* Event related errors (typically validation errors) +* Non-event related errors + +The managed intake service processes events one after the other. +If an error is encountered while processing an event, +the error encountered as well as the document causing the error are added to an internal array. +The managed intake service will only save 5 event related errors. +If it encounters more than 5 event related errors, +the additional errors will not be returned to agent. +Once all events have been processed, +the error response is sent. + +Some errors, not relating to specific events, +may terminate the request immediately. +For example: IP rate limit reached, wrong metadata, etc. +If at any point one of these errors is encountered, +it is added to the internal array and immediately returned. + +An example error response might look something like this: + +```json +{ + "errors": [ + { + "message": "<json-schema-err>", [^1] + "document": "<ndjson-obj>" [^2] + },{ + "message": "<json-schema-err>", + "document": "<ndjson-obj>" + },{ + "message": "<json-decoding-err>", + "document": "<ndjson-obj>" + },{ + "message": "too many requests" [^3] + }, + ], + "accepted": 2320 [^4] +} +``` +[^1]: An event related error +[^2]: The document causing the error +[^3]: An immediately returning non-event related error +[^4]: The number of accepted events + +If you're developing an agent, these errors can be useful for debugging. + +<div id="api-events-schema-definition"></div> + +### Event API Schemas + +The managed intake service uses a collection of JSON Schemas for validating requests to the intake API. diff --git a/docs/en/serverless/apm/apm-server-api/api-info.mdx b/docs/en/serverless/apm/apm-server-api/api-info.mdx new file mode 100644 index 0000000000..244d44a4bb --- /dev/null +++ b/docs/en/serverless/apm/apm-server-api/api-info.mdx @@ -0,0 +1,38 @@ + + +<div id="api-info"></div> + +The managed intake service exposes an API endpoint to query general server information. +This lightweight endpoint is useful as a server up/down health check. + +<div id="api-info-endpoint"></div> + +### Server Information endpoint + +Send an `HTTP GET` request to the server information endpoint: + +```bash +https://{hostname}:{port}/ +``` + +This endpoint always returns an HTTP 200. + +Requests to this endpoint must be authenticated. + +<div id="api-info-examples"></div> + +#### Example + +Example managed intake service information request: + +```sh +curl -X POST http://127.0.0.1:8200/ \ + -H "Authorization: ApiKey api_key" + +{ + "build_date": "2021-12-18T19:59:06Z", + "build_sha": "24fe620eeff5a19e2133c940c7e5ce1ceddb1445", + "publish_ready": true, + "version": "((version))" +} +``` diff --git a/docs/en/serverless/apm/apm-server-api/api-metadata.mdx b/docs/en/serverless/apm/apm-server-api/api-metadata.mdx new file mode 100644 index 0000000000..1faa07dc72 --- /dev/null +++ b/docs/en/serverless/apm/apm-server-api/api-metadata.mdx @@ -0,0 +1,60 @@ + + +import V2Metadata from '../../transclusion/apm/guide/spec/v2/metadata.mdx' + +<div id="api-metadata"></div> + +Every new connection to the managed intake service starts with a `metadata` stanza. +This provides general metadata concerning the other objects in the stream. + +Rather than send this metadata information from the agent multiple times, +the managed intake service hangs on to this information and applies it to other objects in the stream as necessary. + +<DocCallOut title="Tip"> +Metadata is stored under `context` when viewing documents in ((es)). +</DocCallOut> + +#### Metadata Schema + +The managed intake service uses JSON Schema to validate requests. The specification for metadata is defined on +[GitHub](https://github.com/elastic/apm-server/blob/main/docs/spec/v2/metadata.json) and included below. + +<DocAccordion buttonContent="Click to expand the schema"> + <V2Metadata /> +</DocAccordion> + +#### Kubernetes data + +APM agents automatically read Kubernetes data and send it to the managed intake service. +In most instances, agents are able to read this data from inside the container. +If this is not the case, or if you wish to override this data, you can set environment variables for the agents to read. +These environment variable are set via the Kubernetes [Downward API](https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/#use-pod-fields-as-values-for-environment-variables). +Here's how you would add the environment variables to your Kubernetes pod spec: + +```yaml + - name: KUBERNETES_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: KUBERNETES_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: KUBERNETES_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: KUBERNETES_POD_UID + valueFrom: + fieldRef: + fieldPath: metadata.uid +``` + +The table below maps these environment variables to the APM metadata event field: + +| Environment variable | Metadata field name | +|---|---| +| `KUBERNETES_NODE_NAME` | system.kubernetes.node.name | +| `KUBERNETES_POD_NAME` | system.kubernetes.pod.name | +| `KUBERNETES_NAMESPACE` | system.kubernetes.namespace | +| `KUBERNETES_POD_UID` | system.kubernetes.pod.uid | diff --git a/docs/en/serverless/apm/apm-server-api/api-metricset.mdx b/docs/en/serverless/apm/apm-server-api/api-metricset.mdx new file mode 100644 index 0000000000..ea9031f136 --- /dev/null +++ b/docs/en/serverless/apm/apm-server-api/api-metricset.mdx @@ -0,0 +1,18 @@ + + +import V2Metricset from '../../transclusion/apm/guide/spec/v2/metricset.mdx' + +<div id="api-metricset"></div> + +Metrics contain application metric data captured by an ((apm-agent)). + +<div id="api-metricset-schema"></div> + +#### Metric Schema + +The managed intake service uses JSON Schema to validate requests. The specification for metrics is defined on +[GitHub](https://github.com/elastic/apm-server/blob/main/docs/spec/v2/metricset.json) and included below. + +<DocAccordion buttonContent="Click to expand the schema"> + <V2Metricset /> +</DocAccordion> diff --git a/docs/en/serverless/apm/apm-server-api/api-span.mdx b/docs/en/serverless/apm/apm-server-api/api-span.mdx new file mode 100644 index 0000000000..eac1803c2b --- /dev/null +++ b/docs/en/serverless/apm/apm-server-api/api-span.mdx @@ -0,0 +1,18 @@ + + +import V2Span from '../../transclusion/apm/guide/spec/v2/span.mdx' + +<div id="api-span"></div> + +Spans are events captured by an agent occurring in a monitored service. + +<div id="api-span-schema"></div> + +#### Span Schema + +The managed intake service uses JSON Schema to validate requests. The specification for spans is defined on +[GitHub](https://github.com/elastic/apm-server/blob/main/docs/spec/v2/span.json) and included below. + +<DocAccordion buttonContent="Click to expand the schema"> + <V2Span /> +</DocAccordion> diff --git a/docs/en/serverless/apm/apm-server-api/api-transaction.mdx b/docs/en/serverless/apm/apm-server-api/api-transaction.mdx new file mode 100644 index 0000000000..943c30623c --- /dev/null +++ b/docs/en/serverless/apm/apm-server-api/api-transaction.mdx @@ -0,0 +1,18 @@ + + +import V2Transaction from '../../transclusion/apm/guide/spec/v2/transaction.mdx' + +<div id="api-transaction"></div> + +Transactions are events corresponding to an incoming request or similar task occurring in a monitored service. + +<div id="api-transaction-schema"></div> + +#### Transaction Schema + +The managed intake service uses JSON Schema to validate requests. The specification for transactions is defined on +[GitHub](https://github.com/elastic/apm-server/blob/main/docs/spec/v2/transaction.json) and included below. + +<DocAccordion buttonContent="Click to expand the schema"> + <V2Transaction /> +</DocAccordion> \ No newline at end of file diff --git a/docs/en/serverless/apm/apm-server-api/api.mdx b/docs/en/serverless/apm/apm-server-api/api.mdx new file mode 100644 index 0000000000..d3a68255b7 --- /dev/null +++ b/docs/en/serverless/apm/apm-server-api/api.mdx @@ -0,0 +1,9 @@ + + +<div id="api"></div> + +The managed intake service exposes endpoints for: + +* <DocLink id="serverlessObservabilityApmServerApi" section="server-information-api">The managed intake service information API</DocLink> +* <DocLink id="serverlessObservabilityApmServerApi" section="events-intake-api">Elastic APM events intake API</DocLink> +* <DocLink id="serverlessObservabilityApmServerApi" section="opentelemetry-api">OpenTelemetry intake API</DocLink> diff --git a/docs/en/serverless/apm/apm-server-api/otel-api.mdx b/docs/en/serverless/apm/apm-server-api/otel-api.mdx new file mode 100644 index 0000000000..6445c28858 --- /dev/null +++ b/docs/en/serverless/apm/apm-server-api/otel-api.mdx @@ -0,0 +1,29 @@ + +Elastic supports receiving traces, metrics, and logs over the +[OpenTelemetry Protocol (OTLP)](https://opentelemetry.io/docs/specs/otlp/). +OTLP is the default transfer protocol for OpenTelemetry and is supported natively by the managed intake service. + +The managed intake service supports two OTLP communication protocols on the same port: + +* OTLP/HTTP (protobuf) +* OTLP/gRPC + +### OTLP/gRPC paths + +| Name | Endpoint | +|---|---| +|OTLP metrics intake |`/opentelemetry.proto.collector.metrics.v1.MetricsService/Export` +|OTLP trace intake |`/opentelemetry.proto.collector.trace.v1.TraceService/Export` +|OTLP logs intake |`/opentelemetry.proto.collector.logs.v1.LogsService/Export` + +### OTLP/HTTP paths + +| Name | Endpoint | +|---|---| +|OTLP metrics intake |`/v1/metrics` +|OTLP trace intake |`/v1/traces` +|OTLP logs intake |`/v1/logs` + +<DocCallOut title="Tip"> + See our <DocLink id="serverlessObservabilityApmAgentsOtelNativeSupport" text="OpenTelemetry docs" /> to learn how to send data to the managed intake service from an OpenTelemetry agent OpenTelemetry collector. +</DocCallOut> \ No newline at end of file diff --git a/docs/en/serverless/apm/apm-stacktrace-collection.mdx b/docs/en/serverless/apm/apm-stacktrace-collection.mdx new file mode 100644 index 0000000000..7b02d1f1df --- /dev/null +++ b/docs/en/serverless/apm/apm-stacktrace-collection.mdx @@ -0,0 +1,15 @@ +--- +id: serverlessObservabilityApmReduceStackTrace +slug: /serverless/observability/apm-stacktrace-collection +title: Stacktrace collection +description: Reduce data storage and costs by reducing stacktrace collection +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Elastic APM agents collect `stacktrace` information under certain circumstances. This can be very helpful in identifying issues in your code, but it also comes with an overhead at collection time and increases your storage usage. + +Stack trace collection settings are managed in each APM agent. You can enable and disable this feature, or set specific configuration limits, like the maximum number of stacktrace frames to collect, or the minimum duration of a stacktrace to collect. + +See the relevant [((apm-agent)) documentation](((apm-agents-ref))/index.html) to learn how to customize stacktrace collection. diff --git a/docs/en/serverless/apm/apm-track-deployments-with-annotations.mdx b/docs/en/serverless/apm/apm-track-deployments-with-annotations.mdx new file mode 100644 index 0000000000..53dfa70cc6 --- /dev/null +++ b/docs/en/serverless/apm/apm-track-deployments-with-annotations.mdx @@ -0,0 +1,56 @@ +--- +id: serverlessObservabilityApmTrackDeploymentsWithAnnotations +slug: /serverless/observability/apm-track-deployments-with-annotations +title: Track deployments with annotations +# description: Description to be written +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Admin" goal="create and manage annotations" /> + +![Example view of transactions annotation in the Applications UI](images/annotations/apm-transaction-annotation.png) + +For enhanced visibility into your deployments, we offer deployment annotations on all transaction charts. +This feature enables you to easily determine if your deployment has increased response times for an end-user, +or if the memory/CPU footprint of your application has changed. +Being able to quickly identify bad deployments enables you to rollback and fix issues without causing costly outages. + +By default, automatic deployment annotations are enabled. +This means APM will create an annotation on your data when the `service.version` of your application changes. + +Alternatively, you can explicitly create deployment annotations with our annotation API. +The API can integrate into your CI/CD pipeline, +so that each time you deploy, a POST request is sent to the annotation API endpoint: + +{/* TODO: This is commented out for now, but it might be nice to add a working example? */} +{/* ```shell +curl -X POST \ + http://localhost:5601/api/apm/services/${SERVICE_NAME}/annotation \ [^1] +-H 'Content-Type: application/json' \ +-H 'kbn-xsrf: true' \ +-H 'Authorization: Basic ${API_KEY}' \ [^2] +-d '{ + "@timestamp": "${DEPLOY_TIME}", [^3] + "service": { + "version": "${SERVICE_VERSION}" [^4] + }, + "message": "${MESSAGE}" [^5] + }' +``` +[^1]: The `service.name` of your application +[^2]: An APM API key with sufficient privileges +[^3]: The time of the deployment +[^4]: The `service.version` to be displayed in the annotation +[^5]: A custom message to be displayed in the annotation */} + +{/* Todo: Link to API docs */} +See the Annotation API reference for more information. + +<DocCallOut title="Note"> +If custom annotations have been created for the selected time period, any derived annotations, i.e., those created automatically when `service.version` changes, will not be shown. +</DocCallOut> + diff --git a/docs/en/serverless/apm/apm-transaction-sampling.mdx b/docs/en/serverless/apm/apm-transaction-sampling.mdx new file mode 100644 index 0000000000..0700bbfc7e --- /dev/null +++ b/docs/en/serverless/apm/apm-transaction-sampling.mdx @@ -0,0 +1,92 @@ +--- +id: serverlessObservabilityApmTransactionSampling +slug: /serverless/observability/apm-transaction-sampling +title: Transaction sampling +description: Reduce data storage, costs, and noise by ingesting only a percentage of all traces that you can extrapolate from in your analysis. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import ConfigureHeadBasedSampling from './apm-transaction-sampling/configure-head-based-sampling.mdx' + +<DocLink id="serverlessObservabilityApmDistributedTracing">Distributed tracing</DocLink> can +generate a substantial amount of data. More data can mean higher costs and more noise. +Sampling aims to lower the amount of data ingested and the effort required to analyze that data — +all while still making it easy to find anomalous patterns in your applications, detect outages, track errors, +and lower mean time to recovery (MTTR). + +## Head-based sampling + +In head-based sampling, the sampling decision for each trace is made when the trace is initiated. +Each trace has a defined and equal probability of being sampled. + +For example, a sampling value of `.2` indicates a transaction sample rate of `20%`. +This means that only `20%` of traces will send and retain all of their associated information. +The remaining traces will drop contextual information to reduce the transfer and storage size of the trace. + +Head-based sampling is quick and easy to set up. +Its downside is that it's entirely random — interesting +data might be discarded purely due to chance. + +### Distributed tracing with head-based sampling + +In a _distributed_ trace, the sampling decision is still made when the trace is initiated. +Each subsequent service respects the initial service's sampling decision, regardless of its configured sample rate; +the result is a sampling percentage that matches the initiating service. + +In this example, `Service A` initiates four transactions and has sample rate of `.5` (`50%`). +The sample rates of `Service B` and `Service C` are ignored. + +![Distributed tracing and head based sampling example one](../images/apm-dt-sampling-example-1.png) + +In this example, `Service A` initiates four transactions and has a sample rate of `1` (`100%`). +Again, the sample rates of `Service B` and `Service C` are ignored. + +![Distributed tracing and head based sampling example two](../images/apm-dt-sampling-example-2.png) + +### OpenTelemetry with head-based sampling + +Head-based sampling is implemented directly in the APM agents and SDKs. +The sample rate must be propagated between services and the managed intake service in order to produce accurate metrics. + +OpenTelemetry offers multiple samplers. However, most samplers do not propagate the sample rate. +This results in inaccurate span-based metrics, like APM throughput, latency, and error metrics. + +For accurate span-based metrics when using head-based sampling with OpenTelemetry, you must use +a [consistent probability sampler](https://opentelemetry.io/docs/specs/otel/trace/tracestate-probability-sampling/). +These samplers propagate the sample rate between services and the managed intake service, resulting in accurate metrics. + +<DocCallOut title="Note"> + OpenTelemetry does not offer consistent probability samplers in all languages. Refer to the documentation of your favorite OpenTelemetry agent or SDK for more information. +</DocCallOut> + +## Sampled data and visualizations + +A sampled trace retains all data associated with it. +A non-sampled trace drops all <DocLink id="serverlessObservabilityApmDataTypes">span</DocLink> and <DocLink id="serverlessObservabilityApmDataTypes">transaction</DocLink> data. +Regardless of the sampling decision, all traces retain <DocLink id="serverlessObservabilityApmDataTypes">error</DocLink> data. + +Some visualizations in the Applications UI, like latency, are powered by aggregated transaction and span <DocLink id="serverlessObservabilityApmDataTypes">metrics</DocLink>. +Metrics are based on sampled traces and weighted by the inverse sampling rate. +For example, if you sample at 5%, each trace is counted as 20. +As a result, as the variance of latency increases, or the sampling rate decreases, your level of error will increase. + +## Sample rates + +What's the best sampling rate? Unfortunately, there isn't one. +Sampling is dependent on your data, the throughput of your application, data retention policies, and other factors. +A sampling rate from `.1%` to `100%` would all be considered normal. +You'll likely decide on a unique sample rate for different scenarios. +Here are some examples: + +* Services with considerably more traffic than others might be safe to sample at lower rates +* Routes that are more important than others might be sampled at higher rates +* A production service environment might warrant a higher sampling rate than a development environment +* Failed trace outcomes might be more interesting than successful traces — thus requiring a higher sample rate + +Regardless of the above, cost conscious customers are likely to be fine with a lower sample rate. + +## Configure head-based sampling + +<ConfigureHeadBasedSampling /> diff --git a/docs/en/serverless/apm/apm-transaction-sampling/configure-head-based-sampling.mdx b/docs/en/serverless/apm/apm-transaction-sampling/configure-head-based-sampling.mdx new file mode 100644 index 0000000000..313a8f73b7 --- /dev/null +++ b/docs/en/serverless/apm/apm-transaction-sampling/configure-head-based-sampling.mdx @@ -0,0 +1,26 @@ + + +{/* There are three ways to adjust the head-based sampling rate of your APM agents: + +### Dynamic configuration + +The transaction sample rate can be changed dynamically (no redeployment necessary) on a per-service and per-environment +basis with [((apm-agent)) Configuration](((kibana-ref))/agent-configuration.html) in ((kib)). */} + +{/* ### ((kib)) API configuration + +((apm-agent)) configuration exposes an API that can be used to programmatically change +your agents' sampling rate. +An example is provided in the [Agent configuration API reference](((kibana-ref))/agent-config-api.html). */} + +Each APM agent provides a configuration value used to set the transaction sample rate. +Refer to the relevant agent's documentation for more details: + +* Go: [`ELASTIC_APM_TRANSACTION_SAMPLE_RATE`](((apm-go-ref-v))/configuration.html#config-transaction-sample-rate) +* Java: [`transaction_sample_rate`](((apm-java-ref-v))/config-core.html#config-transaction-sample-rate) +* .NET: [`TransactionSampleRate`](((apm-dotnet-ref-v))/config-core.html#config-transaction-sample-rate) +* Node.js: [`transactionSampleRate`](((apm-node-ref-v))/configuration.html#transaction-sample-rate) +* PHP: [`transaction_sample_rate`](((apm-php-ref))/configuration-reference.html#config-transaction-sample-rate) +* Python: [`transaction_sample_rate`](((apm-py-ref-v))/configuration.html#config-transaction-sample-rate) +* Ruby: [`transaction_sample_rate`](((apm-ruby-ref-v))/configuration.html#config-transaction-sample-rate) + diff --git a/docs/en/serverless/apm/apm-troubleshooting.mdx b/docs/en/serverless/apm/apm-troubleshooting.mdx new file mode 100644 index 0000000000..28f3cedeab --- /dev/null +++ b/docs/en/serverless/apm/apm-troubleshooting.mdx @@ -0,0 +1,50 @@ +--- +id: serverlessObservabilityApmTroubleshooting +slug: /serverless/observability/apm-troubleshooting +title: Troubleshooting +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import CommonProblems from './apm-troubleshooting/common-problems.mdx' +import CommonResponseCodes from './apm-troubleshooting/common-response-codes.mdx' + +<div id="troubleshoot-apm"></div> + +This section provides solutions to common questions and problems, +and processing and performance guidance. + +## Common problems + +<CommonProblems /> + +## Common response codes + +<CommonResponseCodes /> + +## Related troubleshooting resources + +For additional help with other APM components, see the links below. +((agent)) and each ((apm-agent)) has its own troubleshooting guide: + +* [((fleet)) and ((agent)) troubleshooting](((fleet-guide))/troubleshooting-intro.html) +* [.NET agent troubleshooting](((apm-dotnet-ref))/troubleshooting.html) +* [Go agent troubleshooting](((apm-go-ref))/troubleshooting.html) +* [Java agent troubleshooting](((apm-java-ref))/trouble-shooting.html) +* [Node.js agent troubleshooting](((apm-node-ref))/troubleshooting.html) +* [PHP agent troubleshooting](((apm-php-ref))/troubleshooting.html) +* [Python agent troubleshooting](((apm-py-ref))/troubleshooting.html) +* [Ruby agent troubleshooting](((apm-ruby-ref))/debugging.html) + +## Elastic Support + +We offer a support experience unlike any other. +Our team of professionals 'speak human and code' and love making your day. +[Learn more about subscriptions](https://www.elastic.co/subscriptions). + +{/* ### Discussion forum + +For additional questions and feature requests, +visit our [discussion forum](https://discuss.elastic.co/c/apm). */} diff --git a/docs/en/serverless/apm/apm-troubleshooting/common-problems.mdx b/docs/en/serverless/apm/apm-troubleshooting/common-problems.mdx new file mode 100644 index 0000000000..1cf40cb07b --- /dev/null +++ b/docs/en/serverless/apm/apm-troubleshooting/common-problems.mdx @@ -0,0 +1,69 @@ + + +import NoDataIndexed from '../../transclusion/apm/guide/tab-widgets/no-data-indexed/fleet-managed.mdx' + +This section describes common problems you might encounter. + +{/* * <DocLink id="serverlessObservabilityApmTroubleshooting" section="no-data-is-indexed">No data is indexed</DocLink> +* <DocLink id="serverlessObservabilityApmTroubleshooting">APM Server response codes</DocLink> +* <DocLink id="serverlessObservabilityApmTroubleshooting" section="common-ssl-related-problems">Common SSL-related problems</DocLink> +* <DocLink id="serverlessObservabilityApmTroubleshooting" section="io-timeout">I/O Timeout</DocLink> +* <DocLink id="serverlessObservabilityApmTroubleshooting" section="field-limit-exceeded">Field limit exceeded</DocLink> */} + +### No data is indexed + +If no data shows up, first make sure that your APM components are properly connected. + +<NoDataIndexed /> + +<div id="data-indexed-no-apm-legacy"></div> + +### Data is indexed but doesn't appear in the Applications UI + +Elastic APM relies on default index mappings, data streams, and pipelines to query and display data. +If your APM data isn't showing up in the Applications UI, but is elsewhere in Elastic, like Discover, +you've likely made a change that overwrote a default. +If you've manually changed a data stream, index template, or index pipeline, +please verify you are not interfering with the default APM setup. + +{/* ### I/O Timeout + +I/O Timeouts can occur when your timeout settings across the stack are not configured correctly, +especially when using a load balancer. + +You may see an error like the one below in the ((apm-agent)) logs, and/or a similar error on the intake side: + +```logs +[ElasticAPM] APM Server responded with an error: +"read tcp 123.34.22.313:8200->123.34.22.40:41602: i/o timeout" +``` + +To fix this error, ensure timeouts are incrementing from the ((apm-agent)), +through your load balancer, to the Elastic APM intake. + +By default, Elastic APM agent timeouts are set at 10 seconds, and the Elastic intake timeout is set at 60 seconds. +Your load balancer should be set somewhere between these numbers. + +For example: + +```txt +APM agent --> Load Balancer --> Elastic APM intake + 10s 15s 60s +``` */} + +<div id="field-limit-exceeded-legacy"></div> + +### Field limit exceeded + +When adding too many distinct tag keys on a transaction or span, +you risk creating a [mapping explosion](((ref))/mapping.html#mapping-limit-settings). + +For example, you should avoid that user-specified data, +like URL parameters, is used as a tag key. +Likewise, using the current timestamp or a user ID as a tag key is not a good idea. +However, tag **values** with a high cardinality are not a problem. +Just try to keep the number of distinct tag keys at a minimum. + +The symptom of a mapping explosion is that transactions and spans are not indexed anymore after a certain time. Usually, on the next day, +the spans and transactions will be indexed again because a new index is created each day. +But as soon as the field limit is reached, indexing stops again. diff --git a/docs/en/serverless/apm/apm-troubleshooting/common-response-codes.mdx b/docs/en/serverless/apm/apm-troubleshooting/common-response-codes.mdx new file mode 100644 index 0000000000..8e1415a401 --- /dev/null +++ b/docs/en/serverless/apm/apm-troubleshooting/common-response-codes.mdx @@ -0,0 +1,19 @@ + +<div id="bad-request"></div> + +### HTTP 400: Data decoding error / Data validation error + +The most likely cause for this error is using an incompatible version of an ((apm-agent)). +See <DocLink id="serverlessObservabilityApmAgents" section="minimum-supported-versions">minimum supported APM agent versions</DocLink> to verify compatibility. + +<div id="event-too-large"></div> + +### HTTP 400: Event too large + +APM agents communicate with the Managed intake service by sending events in an HTTP request. Each event is sent as its own line in the HTTP request body. If events are too large, you can reduce the size of the events that your APM agents send by: <DocLink id="serverlessObservabilityApmCompressSpans" text="enabling span compression" /> or <DocLink id="serverlessObservabilityApmReduceStackTrace" text="reducing collected stack trace information" />. + +<div id="unauthorized"></div> + +### HTTP 401: Invalid token + +The API key is invalid. diff --git a/docs/en/serverless/apm/apm-ui-dependencies.mdx b/docs/en/serverless/apm/apm-ui-dependencies.mdx new file mode 100644 index 0000000000..d1ed6409b8 --- /dev/null +++ b/docs/en/serverless/apm/apm-ui-dependencies.mdx @@ -0,0 +1,51 @@ +--- +id: serverlessObservabilityApmDependencies +slug: /serverless/observability/apm-dependencies +title: Dependencies +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import FeatureBeta from '../partials/feature-beta.mdx' + +APM agents collect details about external calls made from instrumented services. +Sometimes, these external calls resolve into a downstream service that's instrumented — in these cases, +you can utilize <DocLink id="serverlessObservabilityApmTraceSampleTimeline" section="distributed-tracing">distributed tracing</DocLink> to drill down into problematic downstream services. +Other times, though, it's not possible to instrument a downstream dependency — +like with a database or third-party service. +**Dependencies** gives you a window into these uninstrumented, downstream dependencies. + +![Dependencies view in the Applications UI](images/dependencies/dependencies.png) + +Many application issues are caused by slow or unresponsive downstream dependencies. +And because a single, slow dependency can significantly impact the end-user experience, +it's important to be able to quickly identify these problems and determine the root cause. + +Select a dependency to see detailed latency, throughput, and failed transaction rate metrics. + +![Dependencies drilldown view in the Applications UI](images/dependencies/dependencies-drilldown.png) + +When viewing a dependency, consider your pattern of usage with that dependency. +If your usage pattern _hasn't_ increased or decreased, +but the experience has been negatively affected—either with an increase in latency or errors—there's +likely a problem with the dependency that needs to be addressed. + +If your usage pattern _has_ changed, the dependency view can quickly show you whether +that pattern change exists in all upstream services, or just a subset of your services. +You might then start digging into traces coming from +impacted services to determine why that pattern change has occurred. + +## Operations + +<FeatureBeta feature="Dependency operations" /> + +**Dependency operations** provides a granular breakdown of the operations/queries a dependency is executing. + +![operations view in the Applications UI](images/dependencies/operations.png) + +Selecting an operation displays the operation's impact and performance trends over time, via key metrics like latency, throughput, and failed transaction rate. In addition, the <DocLink id="serverlessObservabilityApmTraceSampleTimeline">**Trace sample timeline**</DocLink> provides a visual drill-down into an end-to-end trace sample. + +![operations detail view in the Applications UI](images/dependencies/operations-detail.png) + diff --git a/docs/en/serverless/apm/apm-ui-errors.mdx b/docs/en/serverless/apm/apm-ui-errors.mdx new file mode 100644 index 0000000000..841d3a4a55 --- /dev/null +++ b/docs/en/serverless/apm/apm-ui-errors.mdx @@ -0,0 +1,40 @@ +--- +id: serverlessObservabilityApmErrors +slug: /serverless/observability/apm-errors +title: Errors +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +_Errors_ are groups of exceptions with a similar exception or log message. +The **Errors** overview provides a high-level view of the exceptions that APM agents catch, +or that users manually report with APM agent APIs. +Like errors are grouped together to make it easy to quickly see which errors are affecting your services, +and to take actions to rectify them. + +A service returning a 5xx code from a request handler, controller, etc., will not create +an exception that an APM agent can catch, and will therefore not show up in this view. + +![APM Errors overview](images/errors/apm-errors-overview.png) + +Selecting an error group ID or error message brings you to the **Error group**. + +![APM Error group](images/errors/apm-error-group.png) + +The error group details page visualizes the number of error occurrences over time and compared to a recent time range. +This allows you to quickly determine if the error rate is changing or remaining constant. +You'll also see the top 5 affected transactions—enabling you to quickly narrow down which transactions are most impacted +by the selected error. + +Further down, you'll see an Error sample. +The error shown is always the most recent to occur. +The sample includes the exception message, culprit, stack trace where the error occurred, +and additional contextual information to help debug the issue—all of which can be copied with the click of a button. + +In some cases, you might also see a Transaction sample ID. +This feature allows you to make a connection between the errors and transactions, +by linking you to the specific transaction where the error occurred. +This allows you to see the whole trace, including which services the request went through. + diff --git a/docs/en/serverless/apm/apm-ui-infrastructure.mdx b/docs/en/serverless/apm/apm-ui-infrastructure.mdx new file mode 100644 index 0000000000..84b9516cf4 --- /dev/null +++ b/docs/en/serverless/apm/apm-ui-infrastructure.mdx @@ -0,0 +1,22 @@ +--- +id: serverlessObservabilityApmInfrastructure +slug: /serverless/observability/apm-infrastructure +title: Infrastructure +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import FeatureBeta from '../partials/feature-beta.mdx' + +<FeatureBeta feature="Applications UI Infrastructure" /> + +The **Infrastructure** tab provides information about the containers, pods, and hosts +that the selected service is linked to. + +![Example view of the Infrastructure tab in the Applications UI](images/infrastructure/infra.png) + +IT ops and software reliability engineers (SREs) can use this tab +to quickly find a service's underlying infrastructure resources when debugging a problem. +Knowing what infrastructure is related to a service allows you to remediate issues by restarting, killing hanging instances, changing configuration, rolling back deployments, scaling up, scaling out, and so on. diff --git a/docs/en/serverless/apm/apm-ui-logs.mdx b/docs/en/serverless/apm/apm-ui-logs.mdx new file mode 100644 index 0000000000..303d6aa4e5 --- /dev/null +++ b/docs/en/serverless/apm/apm-ui-logs.mdx @@ -0,0 +1,22 @@ +--- +id: serverlessObservabilityApmLogs +slug: /serverless/observability/apm-logs +title: Logs +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import LogOverview from '../transclusion/kibana/logs/log-overview.mdx' + +The **Logs** tab shows contextual logs for the selected service. + +<LogOverview /> + +![Example view of the Logs tab in the Applications UI](images/logs/logs.png) + +<DocCallOut title="Tip"> +Logs displayed on this page are filtered on `service.name` +</DocCallOut> + diff --git a/docs/en/serverless/apm/apm-ui-metrics.mdx b/docs/en/serverless/apm/apm-ui-metrics.mdx new file mode 100644 index 0000000000..2f70687da1 --- /dev/null +++ b/docs/en/serverless/apm/apm-ui-metrics.mdx @@ -0,0 +1,28 @@ +--- +id: serverlessObservabilityApmMetrics +slug: /serverless/observability/apm-metrics +title: Metrics +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +The **Metrics** overview provides APM agent-specific metrics, +which lets you perform more in-depth root cause analysis investigations within the Applications UI. + +If you're experiencing a problem with your service, you can use this page to attempt to find the underlying cause. +For example, you might be able to correlate a high number of errors with a long transaction duration, high CPU usage, or a memory leak. + +![Example view of the Metrics overview in the Applications UI](images/metrics/apm-metrics.png) + +If you're using the Java APM agent, you can view metrics for each JVM. + +![Example view of the Metrics overview for the Java Agent](images/metrics/jvm-metrics-overview.png) + +Breaking down metrics by JVM makes it much easier to analyze the provided metrics: +CPU usage, memory usage, heap or non-heap memory, +thread count, garbage collection rate, and garbage collection time spent per minute. + +![Example view of the Metrics overview for the Java Agent](images/metrics/jvm-metrics.png) + diff --git a/docs/en/serverless/apm/apm-ui-overview.mdx b/docs/en/serverless/apm/apm-ui-overview.mdx new file mode 100644 index 0000000000..72741b4d24 --- /dev/null +++ b/docs/en/serverless/apm/apm-ui-overview.mdx @@ -0,0 +1,28 @@ +--- +id: serverlessObservabilityApmUiOverview +slug: /serverless/observability/apm-ui-overview +title: Navigate the Applications UI +description: Learn how to navigate the Applications UI. +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +For a quick, high-level overview of the health and performance of your application, +start with: + +* <DocLink id="serverlessObservabilityApmServices">Services</DocLink> +* <DocLink id="serverlessObservabilityApmTraces">Traces</DocLink> +* <DocLink id="serverlessObservabilityApmDependencies">Dependencies</DocLink> +* <DocLink id="serverlessObservabilityApmServiceMap">Service Map</DocLink> + +Notice something awry? Select a service or trace and dive deeper with: + +* <DocLink id="serverlessObservabilityApmServiceOverview">Service overview</DocLink> +* <DocLink id="serverlessObservabilityApmTransactions">Transactions</DocLink> +* <DocLink id="serverlessObservabilityApmTraceSampleTimeline">Trace sample timeline</DocLink> +* <DocLink id="serverlessObservabilityApmErrors">Errors</DocLink> +* <DocLink id="serverlessObservabilityApmMetrics">Metrics</DocLink> +* <DocLink id="serverlessObservabilityApmInfrastructure">Infrastructure</DocLink> +* <DocLink id="serverlessObservabilityApmLogs">Logs</DocLink> + diff --git a/docs/en/serverless/apm/apm-ui-service-map.mdx b/docs/en/serverless/apm/apm-ui-service-map.mdx new file mode 100644 index 0000000000..598393f795 --- /dev/null +++ b/docs/en/serverless/apm/apm-ui-service-map.mdx @@ -0,0 +1,114 @@ +--- +id: serverlessObservabilityApmServiceMap +slug: /serverless/observability/apm-service-map +title: Service map +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +A service map is a real-time visual representation of the instrumented services in your application's architecture. +It shows you how these services are connected, along with high-level metrics like average transaction duration, +requests per minute, and errors per minute. +If enabled, service maps also integrate with machine learning—for real-time health indicators based on anomaly detection scores. +All of these features can help you quickly and visually assess your services' status and health. + +We currently surface two types of service maps: + +* **Global**: All services instrumented with APM agents and the connections between them are shown. +* **Service-specific**: Highlight connections for a selected service. + +## How do service maps work? + +Service Maps rely on distributed traces to draw connections between services. +As [distributed tracing](((apm-guide-ref))/apm-distributed-tracing.html) is enabled out-of-the-box for supported technologies, so are service maps. +However, if a service isn't instrumented, +or a `traceparent` header isn't being propagated to it, +distributed tracing will not work, and the connection will not be drawn on the map. + +## Visualize your architecture + +From **Services**, switch to the **Service Map** tab to get started. +By default, all instrumented services and connections are shown. +Whether you're onboarding a new engineer, or just trying to grasp the big picture, +drag things around, zoom in and out, and begin to visualize how your services are connected. + +Customize what the service map displays using either the query bar or the environment selector. +The query bar enables you to use <DocLink id="serverlessObservabilityApmQueryYourData">advanced queries</DocLink> to customize the service map based on your needs. +The environment selector allows you to narrow displayed results to a specific environment. +This can be useful if you have two or more services, in separate environments, but with the same name. +Use the environment drop-down to only see the data you're interested in, like `dev` or `production`. + +If there's a specific service that interests you, select that service to highlight its connections. +Click **Focus map** to refocus the map on the selected service and lock the connection highlighting. +Click the **Transactions** tab to jump to the Transaction overview for the selected service. +You can also use the tabs at the top of the page to easily jump to the **Errors** or **Metrics** overview. + +![Example view of service maps in the Applications UI](images/service-maps/service-maps-java.png) + +## Anomaly detection with machine learning + +You can create machine learning jobs to calculate anomaly scores on APM transaction durations within the selected service. +When these jobs are active, service maps will display a color-coded anomaly indicator based on the detected anomaly score: + +<DocTable columns={[ + { title: "", width: "25%" }, + { title: "", width: "75%" } +]}> + <DocRow> + <DocCell> + <DocImage flatImage alt="APM green service" url="images/service-maps/green-service.png" /> + </DocCell> + <DocCell> + Max anomaly score **≤25**. Service is healthy. + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <DocImage flatImage alt="APM yellow service" url="images/service-maps/yellow-service.png" /> + </DocCell> + <DocCell> + Max anomaly score **26-74**. Anomalous activity detected. Service may be degraded. + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <DocImage flatImage alt="APM red service" url="images/service-maps/red-service.png" /> + </DocCell> + <DocCell> + Max anomaly score **≥75**. Anomalous activity detected. Service is unhealthy. + </DocCell> + </DocRow> +</DocTable> + +![Example view of anomaly scores on service maps in the Applications UI](images/service-maps/service-map-anomaly.png) + +If an anomaly has been detected, click **View anomalies** to view the anomaly detection metric viewer. +This time series analysis will display additional details on the severity and time of the detected anomalies. + +To learn how to create a machine learning job, refer to <DocLink id="serverlessObservabilityApmIntegrateWithMachineLearning" />. + +## Legend + +Nodes appear on the map in one of two shapes: + +* **Circle**: Instrumented services. Interior icons are based on the language of the APM agent used. +* **Diamond**: Databases, external, and messaging. Interior icons represent the generic type, + with specific icons for known entities, like Elasticsearch. + Type and subtype are based on `span.type`, and `span.subtype`. + +## Supported APM agents + +Service Maps are supported for the following APM agent versions: + +| | | +|---|---| +| Go agent | ≥ v1.7.0 | +| Java agent | ≥ v1.13.0 | +| .NET agent | ≥ v1.3.0 | +| Node.js agent | ≥ v3.6.0 | +| PHP agent | ≥ v1.2.0 | +| Python agent | ≥ v5.5.0 | +| Ruby agent | ≥ v3.6.0 | + diff --git a/docs/en/serverless/apm/apm-ui-service-overview.mdx b/docs/en/serverless/apm/apm-ui-service-overview.mdx new file mode 100644 index 0000000000..dba11ec117 --- /dev/null +++ b/docs/en/serverless/apm/apm-ui-service-overview.mdx @@ -0,0 +1,135 @@ +--- +id: serverlessObservabilityApmServiceOverview +slug: /serverless/observability/apm-service-overview +title: Service Overview +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import ThroughputTransactions from '../transclusion/kibana/apm/service-overview/throughput-transactions.mdx' +import Ftr from '../transclusion/kibana/apm/service-overview/ftr.mdx' +import Dependencies from '../transclusion/kibana/apm/service-overview/dependencies.mdx' + +Selecting a {/* non-mobile */} <DocLink id="serverlessObservabilityApmServices">**service**</DocLink> brings you to the **Service overview**. +The **Service overview** contains a wide variety of charts and tables that provide +high-level visibility into how a service is performing across your infrastructure: + +* Service details like service version, runtime version, framework, and APM agent name and version +* Container and orchestration information +* Cloud provider, machine type, service name, region, and availability zone +* Serverless function names and event trigger type +* Latency, throughput, and errors over time +* Service dependencies + +## Time series and expected bounds comparison + +For insight into the health of your services, you can compare how a service +performs relative to a previous time frame or to the expected bounds from the +corresponding ((anomaly-job)). For example, has latency been slowly increasing +over time, did the service experience a sudden spike, is the throughput similar +to what the ((ml)) job expects — enabling a comparison can provide the answer. + +![Time series and expected bounds comparison](images/services/time-series-expected-bounds-comparison.png) + +Select the **Comparison** box to apply a time-based or expected bounds comparison. +The time-based comparison options are based on the selected time filter range: + +| Time filter | Time comparison options | +|---|---| +| ≤ 24 hours | One day or one week | +| \> 24 hours and ≤ 7 days | One week | +| \> 7 days | An identical amount of time immediately before the selected time range | + +The expected bounds comparison is powered by <DocLink id="serverlessObservabilityApmIntegrateWithMachineLearning">machine learning</DocLink> and requires anomaly detection to be enabled. + +## Latency + +Response times for the service. You can filter the **Latency** chart to display the average, +95th, or 99th percentile latency times for the service. + +![Service latency](images/services/latency.png) + +## Throughput and transactions + +<ThroughputTransactions /> + +## Failed transaction rate and errors + +<Ftr /> + +The **Errors** table provides a high-level view of each error message when it first and last occurred, +along with the total number of occurrences. This makes it very easy to quickly see which errors affect +your services and take actions to rectify them. To do so, click **View errors**. + +![failed transaction rate and errors](images/services/error-rate.png) + +## Span types average duration and dependencies + +The **Time spent by span type** chart visualizes each span type's average duration and helps you determine +which spans could be slowing down transactions. The "app" label displayed under the +chart indicates that something was happening within the application. This could signal that the APM +agent does not have auto-instrumentation for whatever was happening during that time or that the time was spent in the +application code and not in database or external requests. + +<Dependencies /> + +## Cold start rate + +The cold start rate chart is specific to serverless services, and displays the +percentage of requests that trigger a cold start of a serverless function. +A cold start occurs when a serverless function has not been used for a certain period of time. +Analyzing the cold start rate can be useful for deciding how much memory to allocate to a function, +or when to remove a large dependency. + +The cold start rate chart is currently supported for <DocLink id="serverlessObservabilityApmObserveLambdaFunctions" section="cold-starts">AWS Lambda</DocLink> +functions and Azure functions. + +## Instances + +The **Instances** table displays a list of all the available service instances within the selected time range. +Depending on how the service runs, the instance could be a host or a container. The table displays latency, throughput, +failed transaction, CPU usage, and memory usage for each instance. By default, instances are sorted by _Throughput_. + +![All instances](images/services/all-instances.png) + +## Service metadata + +To view metadata relating to the service agent, and if relevant, the container and cloud provider, +click on each icon located at the top of the page beside the service name. + +![Service metadata](images/services/metadata-icons.png) + +**Service information** + +* Service version +* Runtime name and version +* Framework name +* APM agent name and version + +**Container information** + +* Operating system +* Containerized (yes or no) +* Total number of instances +* Orchestration + +**Cloud provider information** + +* Cloud provider +* Cloud service name +* Availability zones +* Machine types +* Project ID +* Region + +**Serverless information** + +* Function name(s) +* Event trigger type + +**Alerts** + +* Recently fired alerts + diff --git a/docs/en/serverless/apm/apm-ui-services.mdx b/docs/en/serverless/apm/apm-ui-services.mdx new file mode 100644 index 0000000000..b703e61780 --- /dev/null +++ b/docs/en/serverless/apm/apm-ui-services.mdx @@ -0,0 +1,66 @@ +--- +id: serverlessObservabilityApmServices +slug: /serverless/observability/apm-services +title: Services +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import FeatureBeta from '../partials/feature-beta.mdx' + +The **Services** inventory provides a quick, high-level overview of the health and general +performance of all instrumented services. + +To help surface potential issues, services are sorted by their health status: +**critical** → **warning** → **healthy** → **unknown**. +Health status is powered by <DocLink id="serverlessObservabilityApmIntegrateWithMachineLearning">machine learning</DocLink> +and requires anomaly detection to be enabled. + +In addition to health status, active alerts for each service are prominently displayed in the service inventory table. Selecting an active alert badge brings you to the **Alerts** tab where you can learn more about the active alert and take action. + +![Example view of services table the Applications UI](images/services/apm-services-overview.png) + +## Service groups + +import Roles from '../partials/roles.mdx' + +<Roles role="Editor" goal="create and manage service groups" /> + +<FeatureBeta feature="Service grouping" /> + +Group services together to build meaningful views that remove noise, simplify investigations across services, +and combine related alerts. + +{/* This screenshot is reused in the alerts docs */} +{/* Ensure it has an active alert showing */} +![Example view of service group in the Applications UI](images/services/apm-service-group.png) + +To create a service group: + +1. In your ((observability)) project, go to **Applications** → **Services**. +1. Switch to **Service groups**. +1. Click **Create group**. +1. Specify a name, color, and description. +1. Click **Select services**. +1. Specify a [Kibana Query Language (KQL)](((kibana-ref))/kuery-query.html) query to select + services for the group. Services that match the query within the last 24 hours will be assigned to the group. + +<DocCallOut title="Note"> + +Once a service group has been saved, this list of services within it is static. +If a newly added service matches the KQL query, it will not be automatically added to the service group. +Similarly, if a service stops matching the KQL query, it will not be removed from the group. + +To update the list of services within a group, +edit the service group, click **Refresh** next to the KQL query, and click **Save group**. + +</DocCallOut> + +### Examples + +Not sure where to get started? Here are some sample queries you can build from: + +* **Group services by environment**: To group "production" services, use `service.environment : "production"`. +* **Group services by name**: To group all services that end in "beat", use `service.name : *beat`. This will match services named "Auditbeat", "Heartbeat", "Filebeat", and so on. diff --git a/docs/en/serverless/apm/apm-ui-trace-sample-timeline.mdx b/docs/en/serverless/apm/apm-ui-trace-sample-timeline.mdx new file mode 100644 index 0000000000..be06a53d4a --- /dev/null +++ b/docs/en/serverless/apm/apm-ui-trace-sample-timeline.mdx @@ -0,0 +1,76 @@ +--- +id: serverlessObservabilityApmTraceSampleTimeline +slug: /serverless/observability/apm-trace-sample-timeline +title: Trace sample timeline +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +The trace sample timeline visualization is a high-level view of what your application was doing while it was trying to respond to a request. +This makes it useful for visualizing where a selected transaction spent most of its time. + +![Example view of transactions sample](images/transactions/apm-transaction-sample.png) + +View a span in detail by clicking on it in the timeline waterfall. +For example, when you click on an SQL Select database query, +the information displayed includes the actual SQL that was executed, how long it took, +and the percentage of the trace's total time. +You also get a stack trace, which shows the SQL query in your code. +Finally, APM knows which files are your code and which are just modules or libraries that you've installed. +These library frames will be minimized by default in order to show you the most relevant stack trace. + +<DocCallOut title="Tip"> +A [span](((apm-guide-ref))/data-model-spans.html) is the duration of a single event. +Spans are automatically captured by APM agents, and you can also define custom spans. +Each span has a type and is defined by a different color in the timeline/waterfall visualization. +</DocCallOut> + +![Example view of a span detail in the Applications UI](images/spans/apm-span-detail.png) + +## Investigate + +The trace sample timeline features an **Investigate** button which provides a quick way to jump +to other areas of the Elastic Observability UI while maintaining the context of the currently selected trace sample. +For example, quickly view: + +* logs and metrics for the selected pod +* logs and metrics for the selected host +* trace logs for the selected `trace.id` +* uptime status of the selected domain +* the <DocLink id="serverlessObservabilityApmServiceMap">service map</DocLink> filtered by the selected trace +* the selected transaction in **Discover** +* your <DocLink id="serverlessObservabilityApmCreateCustomLinks">custom links</DocLink> + +## Distributed tracing + +When a trace travels through multiple services it is known as a _distributed trace_. +In the Applications UI, the colors in a distributed trace represent different services and +are listed in the order they occur. + +![Example of distributed trace colors in the Applications UI](images/spans/apm-services-trace.png) + +As application architectures are shifting from monolithic to more distributed, service-based architectures, +distributed tracing has become a crucial feature of modern application performance monitoring. +It allows you to trace requests through your service architecture automatically, and visualize those traces in one single view in the Applications UI. +From initial web requests to your front-end service, to queries made to your back-end services, +this makes finding possible bottlenecks throughout your application much easier and faster. + +![Example view of the distributed tracing in the Applications UI](images/spans/apm-distributed-tracing.png) + +Don't forget; by definition, a distributed trace includes more than one transaction. +When viewing distributed traces in the timeline waterfall, +you'll see this icon: <DocIcon type="merge" title="Merge" />, +which indicates the next transaction in the trace. +For easier problem isolation, transactions can be collapsed in the waterfall by clicking +the icon to the left of the transactions. +Transactions can also be expanded and viewed in detail by clicking on them. + +After exploring these traces, +you can return to the full trace by clicking **View full trace**. + +<DocCallOut title="Tip"> +Distributed tracing is supported by all APM agents, and there's no additional configuration needed. +</DocCallOut> + diff --git a/docs/en/serverless/apm/apm-ui-traces.mdx b/docs/en/serverless/apm/apm-ui-traces.mdx new file mode 100644 index 0000000000..7b52277cd0 --- /dev/null +++ b/docs/en/serverless/apm/apm-ui-traces.mdx @@ -0,0 +1,41 @@ +--- +id: serverlessObservabilityApmTraces +slug: /serverless/observability/apm-traces +title: Traces +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + + +<DocCallOut title="Tip"> +Traces link together related transactions to show an end-to-end performance of how a request was served +and which services were part of it. +In addition to the Traces overview, you can view your application traces in the <DocLink id="serverlessObservabilityApmTraceSampleTimeline">trace sample timeline waterfall</DocLink>. +</DocCallOut> + +**Traces** displays your application's entry (root) transactions. +Transactions with the same name are grouped together and only shown once in this table. +If you're using <DocLink id="serverlessObservabilityApmTraceSampleTimeline" section="distributed-tracing">distributed tracing</DocLink>, +this view is key to finding the critical paths within your application. + +By default, transactions are sorted by _Impact_. +Impact helps show the most used and slowest endpoints in your service — in other words, +it's the collective amount of pain a specific endpoint is causing your users. +If there's a particular endpoint you're worried about, select it to view its +<DocLink id="serverlessObservabilityApmTransactions" section="transaction-details">transaction details</DocLink>. + +You can also use queries to filter and search the transactions shown on this page. Note that only properties available on root transactions are searchable. For example, you can't search for `label.tier: 'high'`, as that field is only available on non-root transactions. + +![Example view of the Traces overview in the Applications UI](images/traces/apm-traces.png) + +## Trace explorer + +{/* <DocCallOut template="technical preview" /> */} +**Trace explorer** is an experimental top-level search tool that allows you to query your traces using [Kibana Query Language (KQL)](((kibana-ref))/kuery-query.html) or [Event Query Language (EQL)](((ref))/eql.html). + +Curate your own custom queries, or use the <DocLink id="serverlessObservabilityApmServiceMap" /> to find and select edges to automatically generate queries based on your selection: + +![Trace explorer](images/traces/trace-explorer.png) + diff --git a/docs/en/serverless/apm/apm-ui-transactions.mdx b/docs/en/serverless/apm/apm-ui-transactions.mdx new file mode 100644 index 0000000000..d304798abb --- /dev/null +++ b/docs/en/serverless/apm/apm-ui-transactions.mdx @@ -0,0 +1,179 @@ +--- +id: serverlessObservabilityApmTransactions +slug: /serverless/observability/apm-transactions +title: Transactions +# description: Description to be written +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import LogOverview from '../transclusion/kibana/logs/log-overview.mdx' + +A _transaction_ describes an event captured by an Elastic APM agent instrumenting a service. +APM agents automatically collect performance metrics on HTTP requests, database queries, and much more. +The **Transactions** tab shows an overview of all transactions. + +![Example view of transactions table in the Applications UI](images/transactions/apm-transactions-overview.png) + +The **Latency**, **Throughput**, **Failed transaction rate**, **Time spent by span type**, and **Cold start rate** +charts display information on all transactions associated with the selected service: + +<DocDefList> + <DocDefTerm>**Latency**</DocDefTerm> + <DocDefDescription> + Response times for the service. Options include average, 95th, and 99th percentile. + If there's a weird spike that you'd like to investigate, + you can simply zoom in on the graph — this will adjust the specific time range, + and all of the data on the page will update accordingly. + </DocDefDescription> + <DocDefTerm>**Throughput**</DocDefTerm> + <DocDefDescription> + Visualize response codes: `2xx`, `3xx`, `4xx`, and so on. + Useful for determining if more responses than usual are being served with a particular response code. + Like in the latency graph, you can zoom in on anomalies to further investigate them. + </DocDefDescription> + <DocDefTerm>**Failed transaction rate**</DocDefTerm> + <DocDefDescription> + The failed transaction rate represents the percentage of failed transactions from the perspective of the selected service. + It's useful for visualizing unexpected increases, decreases, or irregular patterns in a service's transactions. + + <DocCallOut title="Tip"> + + HTTP **transactions** from the HTTP server perspective do not consider a `4xx` status code (client error) as a failure + because the failure was caused by the caller, not the HTTP server. Thus, `event.outcome=success` and there will be no increase in failed transaction rate. + + HTTP **spans** from the client perspective however, are considered failures if the HTTP status code is ≥ 400. + These spans will set `event.outcome=failure` and increase the failed transaction rate. + + If there is no HTTP status, both transactions and spans are considered successful unless an error is reported. + + </DocCallOut> + </DocDefDescription> + <DocDefTerm>**Time spent by span type**</DocDefTerm> + <DocDefDescription> + Visualize where your application is spending most of its time. + For example, is your app spending time in external calls, database processing, or application code execution? + + The time a transaction took to complete is also recorded and displayed on the chart under the "app" label. + "app" indicates that something was happening within the application, but we're not sure exactly what. + This could be a sign that the APM agent does not have auto-instrumentation for whatever was happening during that time. + + It's important to note that if you have asynchronous spans, the sum of all span times may exceed the duration of the transaction. + </DocDefDescription> + <DocDefTerm>**Cold start rate**</DocDefTerm> + <DocDefDescription> + Only applicable to serverless transactions, this chart displays the percentage of requests that trigger a cold start of a serverless function. + See <DocLink id="serverlessObservabilityApmObserveLambdaFunctions" section="cold-starts">Cold starts</DocLink> for more information. + </DocDefDescription> +</DocDefList> + +## Transactions table + +The **Transactions** table displays a list of _transaction groups_ for the selected service. +In other words, this view groups all transactions of the same name together, +and only displays one entry for each group. + +![Example view of the transactions table in the Applications UI](images/transactions/apm-transactions-table.png) + +By default, transaction groups are sorted by _Impact_. +Impact helps show the most used and slowest endpoints in your service — in other words, +it's the collective amount of pain a specific endpoint is causing your users. +If there's a particular endpoint you're worried about, you can click on it to view the <DocLink id="serverlessObservabilityApmTransactions" section="transaction-details">transaction details</DocLink>. + +<DocCallOut title="Important" color="warning"> + +If you only see one route in the Transactions table, or if you have transactions named "unknown route", +it could be a symptom that the APM agent either wasn't installed correctly or doesn't support your framework. + +For further details, including troubleshooting and custom implementation instructions, +refer to the documentation for each <DocLink id="serverlessObservabilityApmAgents">APM Agent</DocLink> you've implemented. + +</DocCallOut> + +<div id="transaction-details"></div> + +## Transaction details + +Selecting a transaction group will bring you to the **transaction** details. +This page is visually similar to the transaction overview, but it shows data from all transactions within +the selected transaction group. + +![Example view of transactions table in the Applications UI](images/transactions/apm-transactions-overview.png) + +<div id="transaction-duration-distribution"></div> + +### Latency distribution + +The latency distribution shows a plot of all transaction durations for the given time period. +The following screenshot shows a typical distribution +and indicates most of our requests were served quickly — awesome! +The requests on the right are taking longer than average; we probably need to focus on them. + +![Example view of latency distribution graph](images/transactions/apm-transaction-duration-dist.png) + +Click and drag to select a latency duration _bucket_ to display up to 500 trace samples. + +<div id="transaction-trace-sample"></div> + +### Trace samples + +Trace samples are based on the _bucket_ selection in the **Latency distribution** chart; +update the samples by selecting a new _bucket_. +The number of requests per bucket is displayed when hovering over the graph, +and the selected bucket is highlighted to stand out. + +Each bucket presents up to ten trace samples in a **timeline**, trace sample **metadata**, +and any related **logs**. + +**Trace sample timeline** + +Each sample has a trace timeline waterfall that shows how a typical request in that bucket executed. +This waterfall is useful for understanding the parent/child hierarchy of transactions and spans, +and ultimately determining _why_ a request was slow. +For large waterfalls, expand problematic transactions and collapse well-performing ones +for easier problem isolation and troubleshooting. + +![Example view of transactions sample](images/transactions/apm-transaction-sample.png) + +<DocCallOut title="Note"> +More information on timeline waterfalls is available in <DocLink id="serverlessObservabilityApmTraceSampleTimeline">spans</DocLink>. +</DocCallOut> + +**Trace sample metadata** + +Learn more about a trace sample in the **Metadata** tab: + +* Labels: Custom labels added by APM agents +* HTTP request/response information +* Host information +* Container information +* Service: The service/application runtime, APM agent, name, etc.. +* Process: The process id that served up the request. +* APM agent information +* URL +* User: Requires additional configuration, but allows you to see which user experienced the current transaction. +* FaaS information, like cold start, AWS request ID, trigger type, and trigger request ID + +<DocCallOut title="Tip"> +All of this data is stored in documents in Elasticsearch. +This means you can select "Actions - View transaction in Discover" to see the actual Elasticsearch document under the discover tab. +</DocCallOut> + +**Trace sample logs** + +The **Logs** tab displays logs related to the sampled trace. + +<LogOverview /> + +![APM logs tab](images/transactions/apm-logs-tab.png) + +<div id="transaction-latency-correlations"></div> + +### Correlations + +Correlations surface attributes of your data that are potentially correlated with high-latency or erroneous transactions. +To learn more, see <DocLink id="serverlessObservabilityApmFindTransactionLatencyAndFailureCorrelations">Find transaction latency and failure correlations</DocLink>. + +![APM latency correlations](images/transactions/correlations-hover.png) + diff --git a/docs/en/serverless/apm/apm-view-and-analyze-traces.mdx b/docs/en/serverless/apm/apm-view-and-analyze-traces.mdx new file mode 100644 index 0000000000..ff7bca15e2 --- /dev/null +++ b/docs/en/serverless/apm/apm-view-and-analyze-traces.mdx @@ -0,0 +1,27 @@ +--- +id: serverlessObservabilityApmViewAndAnalyzeTraces +slug: /serverless/observability/apm-view-and-analyze-traces +title: View and analyze traces +# description: Description to be written +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +APM allows you to monitor your software services and applications in real time; +visualize detailed performance information on your services, +identify and analyze errors, +and monitor host-level and APM agent-specific metrics like JVM and Go runtime metrics. + +## Visualizing application bottlenecks + +Having access to application-level insights with just a few clicks can drastically decrease the time you spend +debugging errors, slow response times, and crashes. + +For example, you can see information about response times, requests per minute, and status codes per endpoint. +You can even dive into a specific request sample and get a complete waterfall view of what your application is spending its time on. +You might see that your bottlenecks are in database queries, cache calls, or external requests. +For each incoming request and each application error, +you can also see contextual information such as the request header, user information, +system values, or custom data that you manually attached to the request. + diff --git a/docs/en/serverless/apm/apm.mdx b/docs/en/serverless/apm/apm.mdx new file mode 100644 index 0000000000..8d8680f2cc --- /dev/null +++ b/docs/en/serverless/apm/apm.mdx @@ -0,0 +1,28 @@ +--- +id: serverlessObservabilityApm +slug: /serverless/observability/apm +title: Application performance monitoring (APM) +# description: Description to be written +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Elastic APM is an application performance monitoring system. +It allows you to monitor software services and applications in real time, by +collecting detailed performance information on response time for incoming requests, +database queries, calls to caches, external HTTP requests, and more. +This makes it easy to pinpoint and fix performance problems quickly. + +Elastic APM also automatically collects unhandled errors and exceptions. +Errors are grouped based primarily on the stack trace, +so you can identify new errors as they appear and keep an eye on how many times specific errors happen. + +Metrics are another vital source of information when debugging production systems. +Elastic APM agents automatically pick up basic host-level metrics and agent-specific metrics, +like JVM metrics in the Java Agent, and Go runtime metrics in the Go Agent. + +## Give Elastic APM a try + +Ready to give Elastic APM a try? See <DocLink id="serverlessObservabilityApmGetStarted">Get started with traces and APM</DocLink>. + diff --git a/docs/en/serverless/apm/images/advanced-queries/advanced-discover.png b/docs/en/serverless/apm/images/advanced-queries/advanced-discover.png new file mode 100644 index 0000000000..5291526783 Binary files /dev/null and b/docs/en/serverless/apm/images/advanced-queries/advanced-discover.png differ diff --git a/docs/en/serverless/apm/images/advanced-queries/apm-query-bar.png b/docs/en/serverless/apm/images/advanced-queries/apm-query-bar.png new file mode 100644 index 0000000000..457573f485 Binary files /dev/null and b/docs/en/serverless/apm/images/advanced-queries/apm-query-bar.png differ diff --git a/docs/en/serverless/apm/images/advanced-queries/specific-transaction-search.png b/docs/en/serverless/apm/images/advanced-queries/specific-transaction-search.png new file mode 100644 index 0000000000..4ed548f015 Binary files /dev/null and b/docs/en/serverless/apm/images/advanced-queries/specific-transaction-search.png differ diff --git a/docs/en/serverless/apm/images/advanced-queries/specific-transaction.png b/docs/en/serverless/apm/images/advanced-queries/specific-transaction.png new file mode 100644 index 0000000000..52073bf765 Binary files /dev/null and b/docs/en/serverless/apm/images/advanced-queries/specific-transaction.png differ diff --git a/docs/en/serverless/apm/images/annotations/apm-transaction-annotation.png b/docs/en/serverless/apm/images/annotations/apm-transaction-annotation.png new file mode 100644 index 0000000000..b9360db2ff Binary files /dev/null and b/docs/en/serverless/apm/images/annotations/apm-transaction-annotation.png differ diff --git a/docs/en/serverless/apm/images/apm-lambda/lambda-overview.png b/docs/en/serverless/apm/images/apm-lambda/lambda-overview.png new file mode 100644 index 0000000000..9d0558949f Binary files /dev/null and b/docs/en/serverless/apm/images/apm-lambda/lambda-overview.png differ diff --git a/docs/en/serverless/apm/images/correlations/correlations-failed-transactions.png b/docs/en/serverless/apm/images/correlations/correlations-failed-transactions.png new file mode 100644 index 0000000000..19221e751e Binary files /dev/null and b/docs/en/serverless/apm/images/correlations/correlations-failed-transactions.png differ diff --git a/docs/en/serverless/apm/images/custom-links/create-github-issue.png b/docs/en/serverless/apm/images/custom-links/create-github-issue.png new file mode 100644 index 0000000000..81ea4e5e78 Binary files /dev/null and b/docs/en/serverless/apm/images/custom-links/create-github-issue.png differ diff --git a/docs/en/serverless/apm/images/custom-links/create-jira-issue.png b/docs/en/serverless/apm/images/custom-links/create-jira-issue.png new file mode 100644 index 0000000000..962c98df3f Binary files /dev/null and b/docs/en/serverless/apm/images/custom-links/create-jira-issue.png differ diff --git a/docs/en/serverless/apm/images/custom-links/example-metadata.png b/docs/en/serverless/apm/images/custom-links/example-metadata.png new file mode 100644 index 0000000000..2a5bda7f08 Binary files /dev/null and b/docs/en/serverless/apm/images/custom-links/example-metadata.png differ diff --git a/docs/en/serverless/apm/images/dependencies/dependencies-drilldown.png b/docs/en/serverless/apm/images/dependencies/dependencies-drilldown.png new file mode 100644 index 0000000000..af82ee3d93 Binary files /dev/null and b/docs/en/serverless/apm/images/dependencies/dependencies-drilldown.png differ diff --git a/docs/en/serverless/apm/images/dependencies/dependencies.png b/docs/en/serverless/apm/images/dependencies/dependencies.png new file mode 100644 index 0000000000..543908274e Binary files /dev/null and b/docs/en/serverless/apm/images/dependencies/dependencies.png differ diff --git a/docs/en/serverless/apm/images/dependencies/operations-detail.png b/docs/en/serverless/apm/images/dependencies/operations-detail.png new file mode 100644 index 0000000000..64a1c65508 Binary files /dev/null and b/docs/en/serverless/apm/images/dependencies/operations-detail.png differ diff --git a/docs/en/serverless/apm/images/dependencies/operations.png b/docs/en/serverless/apm/images/dependencies/operations.png new file mode 100644 index 0000000000..119f8bdf99 Binary files /dev/null and b/docs/en/serverless/apm/images/dependencies/operations.png differ diff --git a/docs/en/serverless/apm/images/distributed-tracing/dt-trace-ex1.png b/docs/en/serverless/apm/images/distributed-tracing/dt-trace-ex1.png new file mode 100644 index 0000000000..ca97955ee8 Binary files /dev/null and b/docs/en/serverless/apm/images/distributed-tracing/dt-trace-ex1.png differ diff --git a/docs/en/serverless/apm/images/distributed-tracing/dt-trace-ex2.png b/docs/en/serverless/apm/images/distributed-tracing/dt-trace-ex2.png new file mode 100644 index 0000000000..3df0827f58 Binary files /dev/null and b/docs/en/serverless/apm/images/distributed-tracing/dt-trace-ex2.png differ diff --git a/docs/en/serverless/apm/images/distributed-tracing/dt-trace-ex3.png b/docs/en/serverless/apm/images/distributed-tracing/dt-trace-ex3.png new file mode 100644 index 0000000000..1bb666b030 Binary files /dev/null and b/docs/en/serverless/apm/images/distributed-tracing/dt-trace-ex3.png differ diff --git a/docs/en/serverless/apm/images/errors/apm-error-group.png b/docs/en/serverless/apm/images/errors/apm-error-group.png new file mode 100644 index 0000000000..22bceb9d81 Binary files /dev/null and b/docs/en/serverless/apm/images/errors/apm-error-group.png differ diff --git a/docs/en/serverless/apm/images/errors/apm-errors-overview.png b/docs/en/serverless/apm/images/errors/apm-errors-overview.png new file mode 100644 index 0000000000..c390b7ddc0 Binary files /dev/null and b/docs/en/serverless/apm/images/errors/apm-errors-overview.png differ diff --git a/docs/en/serverless/apm/images/filters/global-filters.png b/docs/en/serverless/apm/images/filters/global-filters.png new file mode 100644 index 0000000000..dc9b36277a Binary files /dev/null and b/docs/en/serverless/apm/images/filters/global-filters.png differ diff --git a/docs/en/serverless/apm/images/infrastructure/infra.png b/docs/en/serverless/apm/images/infrastructure/infra.png new file mode 100644 index 0000000000..e139012270 Binary files /dev/null and b/docs/en/serverless/apm/images/infrastructure/infra.png differ diff --git a/docs/en/serverless/apm/images/logs/logs.png b/docs/en/serverless/apm/images/logs/logs.png new file mode 100644 index 0000000000..94d77b4749 Binary files /dev/null and b/docs/en/serverless/apm/images/logs/logs.png differ diff --git a/docs/en/serverless/apm/images/metrics/apm-metrics.png b/docs/en/serverless/apm/images/metrics/apm-metrics.png new file mode 100644 index 0000000000..c2d609c7c4 Binary files /dev/null and b/docs/en/serverless/apm/images/metrics/apm-metrics.png differ diff --git a/docs/en/serverless/apm/images/metrics/jvm-metrics-overview.png b/docs/en/serverless/apm/images/metrics/jvm-metrics-overview.png new file mode 100644 index 0000000000..c6f28f7bdf Binary files /dev/null and b/docs/en/serverless/apm/images/metrics/jvm-metrics-overview.png differ diff --git a/docs/en/serverless/apm/images/metrics/jvm-metrics.png b/docs/en/serverless/apm/images/metrics/jvm-metrics.png new file mode 100644 index 0000000000..70f7965b72 Binary files /dev/null and b/docs/en/serverless/apm/images/metrics/jvm-metrics.png differ diff --git a/docs/en/serverless/apm/images/service-maps/green-service.png b/docs/en/serverless/apm/images/service-maps/green-service.png new file mode 100644 index 0000000000..bbc00a3543 Binary files /dev/null and b/docs/en/serverless/apm/images/service-maps/green-service.png differ diff --git a/docs/en/serverless/apm/images/service-maps/red-service.png b/docs/en/serverless/apm/images/service-maps/red-service.png new file mode 100644 index 0000000000..be7a62b177 Binary files /dev/null and b/docs/en/serverless/apm/images/service-maps/red-service.png differ diff --git a/docs/en/serverless/apm/images/service-maps/service-map-anomaly.png b/docs/en/serverless/apm/images/service-maps/service-map-anomaly.png new file mode 100644 index 0000000000..cd59f86690 Binary files /dev/null and b/docs/en/serverless/apm/images/service-maps/service-map-anomaly.png differ diff --git a/docs/en/serverless/apm/images/service-maps/service-maps-java.png b/docs/en/serverless/apm/images/service-maps/service-maps-java.png new file mode 100644 index 0000000000..aa8e5dc505 Binary files /dev/null and b/docs/en/serverless/apm/images/service-maps/service-maps-java.png differ diff --git a/docs/en/serverless/apm/images/service-maps/yellow-service.png b/docs/en/serverless/apm/images/service-maps/yellow-service.png new file mode 100644 index 0000000000..43afd6250b Binary files /dev/null and b/docs/en/serverless/apm/images/service-maps/yellow-service.png differ diff --git a/docs/en/serverless/apm/images/services/all-instances.png b/docs/en/serverless/apm/images/services/all-instances.png new file mode 100644 index 0000000000..70028b5a9b Binary files /dev/null and b/docs/en/serverless/apm/images/services/all-instances.png differ diff --git a/docs/en/serverless/apm/images/services/apm-service-group.png b/docs/en/serverless/apm/images/services/apm-service-group.png new file mode 100644 index 0000000000..44a0191411 Binary files /dev/null and b/docs/en/serverless/apm/images/services/apm-service-group.png differ diff --git a/docs/en/serverless/apm/images/services/apm-services-overview.png b/docs/en/serverless/apm/images/services/apm-services-overview.png new file mode 100644 index 0000000000..0badeea3be Binary files /dev/null and b/docs/en/serverless/apm/images/services/apm-services-overview.png differ diff --git a/docs/en/serverless/apm/images/services/error-rate.png b/docs/en/serverless/apm/images/services/error-rate.png new file mode 100644 index 0000000000..845fa2af07 Binary files /dev/null and b/docs/en/serverless/apm/images/services/error-rate.png differ diff --git a/docs/en/serverless/apm/images/services/latency.png b/docs/en/serverless/apm/images/services/latency.png new file mode 100644 index 0000000000..1c220c1a4b Binary files /dev/null and b/docs/en/serverless/apm/images/services/latency.png differ diff --git a/docs/en/serverless/apm/images/services/metadata-icons.png b/docs/en/serverless/apm/images/services/metadata-icons.png new file mode 100644 index 0000000000..0509e9c12a Binary files /dev/null and b/docs/en/serverless/apm/images/services/metadata-icons.png differ diff --git a/docs/en/serverless/apm/images/services/time-series-expected-bounds-comparison.png b/docs/en/serverless/apm/images/services/time-series-expected-bounds-comparison.png new file mode 100644 index 0000000000..6e705064e6 Binary files /dev/null and b/docs/en/serverless/apm/images/services/time-series-expected-bounds-comparison.png differ diff --git a/docs/en/serverless/apm/images/spans/apm-distributed-tracing.png b/docs/en/serverless/apm/images/spans/apm-distributed-tracing.png new file mode 100644 index 0000000000..4d1b8cde20 Binary files /dev/null and b/docs/en/serverless/apm/images/spans/apm-distributed-tracing.png differ diff --git a/docs/en/serverless/apm/images/spans/apm-services-trace.png b/docs/en/serverless/apm/images/spans/apm-services-trace.png new file mode 100644 index 0000000000..083c69318e Binary files /dev/null and b/docs/en/serverless/apm/images/spans/apm-services-trace.png differ diff --git a/docs/en/serverless/apm/images/spans/apm-span-detail.png b/docs/en/serverless/apm/images/spans/apm-span-detail.png new file mode 100644 index 0000000000..d0b6a4de3d Binary files /dev/null and b/docs/en/serverless/apm/images/spans/apm-span-detail.png differ diff --git a/docs/en/serverless/apm/images/traces/apm-traces.png b/docs/en/serverless/apm/images/traces/apm-traces.png new file mode 100644 index 0000000000..c8b8d40b01 Binary files /dev/null and b/docs/en/serverless/apm/images/traces/apm-traces.png differ diff --git a/docs/en/serverless/apm/images/traces/trace-explorer.png b/docs/en/serverless/apm/images/traces/trace-explorer.png new file mode 100644 index 0000000000..70c13f650e Binary files /dev/null and b/docs/en/serverless/apm/images/traces/trace-explorer.png differ diff --git a/docs/en/serverless/apm/images/transactions/apm-logs-tab.png b/docs/en/serverless/apm/images/transactions/apm-logs-tab.png new file mode 100644 index 0000000000..c79be8b5eb Binary files /dev/null and b/docs/en/serverless/apm/images/transactions/apm-logs-tab.png differ diff --git a/docs/en/serverless/apm/images/transactions/apm-transaction-duration-dist.png b/docs/en/serverless/apm/images/transactions/apm-transaction-duration-dist.png new file mode 100644 index 0000000000..9c7ab5dd67 Binary files /dev/null and b/docs/en/serverless/apm/images/transactions/apm-transaction-duration-dist.png differ diff --git a/docs/en/serverless/apm/images/transactions/apm-transaction-sample.png b/docs/en/serverless/apm/images/transactions/apm-transaction-sample.png new file mode 100644 index 0000000000..a9490fc20d Binary files /dev/null and b/docs/en/serverless/apm/images/transactions/apm-transaction-sample.png differ diff --git a/docs/en/serverless/apm/images/transactions/apm-transactions-overview.png b/docs/en/serverless/apm/images/transactions/apm-transactions-overview.png new file mode 100644 index 0000000000..34cd0219b8 Binary files /dev/null and b/docs/en/serverless/apm/images/transactions/apm-transactions-overview.png differ diff --git a/docs/en/serverless/apm/images/transactions/apm-transactions-table.png b/docs/en/serverless/apm/images/transactions/apm-transactions-table.png new file mode 100644 index 0000000000..8a3415bc9a Binary files /dev/null and b/docs/en/serverless/apm/images/transactions/apm-transactions-table.png differ diff --git a/docs/en/serverless/apm/images/transactions/correlations-hover.png b/docs/en/serverless/apm/images/transactions/correlations-hover.png new file mode 100644 index 0000000000..9731517b32 Binary files /dev/null and b/docs/en/serverless/apm/images/transactions/correlations-hover.png differ diff --git a/docs/en/serverless/cases/cases.mdx b/docs/en/serverless/cases/cases.mdx new file mode 100644 index 0000000000..982c17407f --- /dev/null +++ b/docs/en/serverless/cases/cases.mdx @@ -0,0 +1,18 @@ +--- +id: serverlessObservabilityCases +slug: /serverless/observability/cases +title: Cases +description: Use cases to track progress toward solving problems detected in Elastic Observability. +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Collect and share information about observability issues by creating a case. +Cases allow you to track key investigation details, +add assignees and tags to your cases, set their severity and status, and add alerts, +comments, and visualizations. You can also send cases to third-party systems by +<DocLink id="serverlessObservabilitySendCasesToAnExternalSystem">configuring external connectors</DocLink>. + +![Cases page](../images/cases.png) +{/* NOTE: This is an autogenerated screenshot. Do not edit it directly. */} \ No newline at end of file diff --git a/docs/en/serverless/cases/create-manage-cases.mdx b/docs/en/serverless/cases/create-manage-cases.mdx new file mode 100644 index 0000000000..c114ffde67 --- /dev/null +++ b/docs/en/serverless/cases/create-manage-cases.mdx @@ -0,0 +1,107 @@ +--- +id: serverlessObservabilityCreateANewCase +slug: /serverless/observability/create-a-new-case +title: Create and manage cases +description: Learn how to create a case, add files, and manage the case over time. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Editor" goal="create and manage cases" /> + +Open a new case to keep track of issues and share the details with colleagues. +To create a case in your Observability project: + +1. In your ((observability)) project, go to **Cases**. +1. Click **Create case**. +1. Give the case a name, severity, and description. + + <DocCallOut title="Tip"> + In the `Description` area, you can use + [Markdown](https://www.markdownguide.org/cheat-sheet) syntax to create formatted text. + </DocCallOut> + +1. (Optional) Add a category, assignees, and tags. + {/* To do: Need to verify that a viewer cannot be assigned to a case + (all I know is that they can _view_ the case) */} + You can add users who are assigned the Editor user role (or a more permissive role) for the project. + +1. (Optional) Under External incident management system, you can select a connector to send cases to an external system. + If you've created any connectors previously, they will be listed here. + If there are no connectors listed, you can <DocLink id="serverlessObservabilitySendCasesToAnExternalSystem">create one</DocLink>. + +1. After you've completed all of the required fields, click **Create case**. + +<DocCallOut title="Tip"> +You can also create a case from an alert or add an alert to an existing case. From the **Alerts** page, click the **More options** <DocIcon type="boxesHorizontal" title="More actions" /> icon and choose either **Add to existing case** or **Create new case**, and select or complete the details as required. +</DocCallOut> + +## Add files + +After you create a case, you can upload and manage files on the **Files** tab: + +![A list of files attached to a case](../images/cases-files-tab.png) +{/* NOTE: This is an autogenerated screenshot. Do not edit it directly. */} + +To download or delete the file or copy the file hash to your clipboard, open the action menu (…). +The available hash functions are MD5, SHA-1, and SHA-256. + +When you upload a file, a comment is added to the case activity log. +To view an image, click its name in the activity or file list. + +<DocCallOut title="Note"> +Uploaded files are also accessible under **Project settings** → **Management** → **Files**. +When you export cases as [saved objects](((kibana-ref))/managing-saved-objects.html), the case files are not exported. +</DocCallOut> + +You can add images and text, CSV, JSON, PDF, or ZIP files. +For the complete list, check [`mime_types.ts`](https://github.com/elastic/kibana/blob/main/x-pack/plugins/cases/common/constants/mime_types.ts). + +<DocCallOut title="File size limits"> +There is a 10 MiB size limit for images. For all other MIME types, the limit is 100 MiB. +</DocCallOut> + +{/* + +NOTE: Email notifications are not available in Observability projects yet. + +## Add email notifications + +You can configure email notifications that occur when users are assigned to +cases. + +To do this, add the email addresses to the monitoring email allowlist. +Follow the steps in [Send alerts by email](((cloud))/ec-watcher.html#ec-watcher-allowlist). + +You do not need to configure an email connector or update +user settings, since the preconfigured Elastic-Cloud-SMTP connector is +used by default. + +When you subsequently add assignees to cases, they receive an email. + +*/} + +## Manage existing cases + +You can search existing cases and filter them by attributes such as assignees, +categories, severity, status, and tags. You can also select multiple cases and use bulk +actions to delete cases or change their attributes. + +To view a case, click on its name. You can then: + +* Add a new comment. +* Edit existing comments and the description. +* Add or remove assignees. +* Add a <DocLink id="serverlessObservabilitySendCasesToAnExternalSystem">connector</DocLink> (if you did not select one while creating the case). +* Send updates to external systems (if external connections are configured). +* Edit the category and tags. +* Change the status. +* Change the severity. +* Remove an alert. +* Refresh the case to retrieve the latest updates. +* Close the case. +* Reopen a closed case. + diff --git a/docs/en/serverless/cases/send-cases-to-an-external-system.mdx b/docs/en/serverless/cases/send-cases-to-an-external-system.mdx new file mode 100644 index 0000000000..9daf88cade --- /dev/null +++ b/docs/en/serverless/cases/send-cases-to-an-external-system.mdx @@ -0,0 +1,87 @@ +--- +id: serverlessObservabilitySendCasesToAnExternalSystem +slug: /serverless/observability/send-cases-to-an-external-system +title: Send cases to an external system +description: Connectors allow you track Elastic Observability cases in external systems. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Editor" goal="create and edit connectors" /> + +If you are using an external incident management system, you can integrate Elastic Observability +cases with this system using connectors. These third-party systems are supported: + +* ((ibm-r)) +* ((jira)) (including ((jira)) Service Desk) +* ((sn-itsm)) +* ((sn-sir)) +* ((swimlane)) +* ((webhook-cm)) + +You need to create a connector to send cases, which stores the information required to interact +with an external system. For each case, you can send the title, description, and comment when +you choose to push the case — for the **Webhook - Case Management** connector, you can also +send the status and severity fields. + +<DocCallOut title="Important" color="warning"> +{/* TODO: Verify user roles needed to create connectors... */} +To add, modify, or delete a connector, you must have the Admin user role for the project +(or a more permissive role). +</DocCallOut> + +After creating a connector, you can set your cases to +automatically close when they are sent to an external system. + +## Create a connector + +1. In your ((observability)) project, go to **Cases** → **Settings**. +1. From the **Incident management system** list, select **Add new connector**. +1. Select the system to send cases to: **((sn))**, **((jira))**, **((ibm-r))**, **((swimlane))**, + or **((webhook-cm))**. + + ![Add a connector to send cases to an external source](../images/cases-add-connector.png) + +1. Enter your required settings. For connector configuration details, refer to: + - [((ibm-r)) connector](((kibana-ref))/resilient-action-type.html) + - [((jira)) connector](((kibana-ref))/jira-action-type.html) + - [((sn-itsm)) connector](((kibana-ref))/servicenow-action-type.html) + - [((sn-sir)) connector](((kibana-ref))/servicenow-sir-action-type.html) + - [((swimlane)) connector](((kibana-ref))/swimlane-action-type.html) + - [((webhook-cm)) connector](((kibana-ref))/cases-webhook-action-type.html) + + {/* Should we be linking out to kibana docs for this info? */} + +1. Click **Save**. + +## Edit a connector + +You can create additional connectors, update existing connectors, and change the connector used to send cases to external systems. + +<DocCallOut title="Tip"> +You can also configure which connector is used for each case individually. Refer to <DocLink id="serverlessObservabilityCreateANewCase"/>. +</DocCallOut> + +To change the default connector used to send cases to external systems: + +1. Go to **Cases** → **Settings**. +1. Select the required connector from the **Incident management system** list. + +To update an existing connector: + +1. Click **Update \<connector name>**. +1. Update the connector fields as required. + +## Sending and closing cases + +To send a case to an external system, click the **Push as \<connector name> incident** <DocIcon type="importAction" title="push" /> button from the individual case page. +This information is not sent automatically — if you make further changes to the shared case fields, you should push the case again. + +If you close cases in your external incident management system, the cases will remain open in Elastic Observability until you close them +manually (the information is only sent in one direction). + +To close cases when they are sent to an external system, select +**Automatically close cases when pushing new incident to external system** from **Cases** → **Settings**. diff --git a/docs/en/serverless/dashboards/dashboards-and-visualizations.mdx b/docs/en/serverless/dashboards/dashboards-and-visualizations.mdx new file mode 100644 index 0000000000..8d96ea6c79 --- /dev/null +++ b/docs/en/serverless/dashboards/dashboards-and-visualizations.mdx @@ -0,0 +1,45 @@ +--- +id: serverlessObservabilityDashboards +slug: /serverless/observability/dashboards +title: Dashboards +description: Visualize your observability data using pre-built dashboards or create your own. +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Elastic provides a wide range of pre-built dashboards for visualizing observability data from a variety of sources. +These dashboards are loaded automatically when you install [Elastic integrations](https://docs.elastic.co/integrations). + +You can also create new dashboards and visualizations based on your data views to get a full picture of your data. + +In your Observability project, go to **Dashboards** to see installed dashboards or create your own. +This example shows dashboards loaded by the System integration: + +![Screenshot showing list of System dashboards](../images/dashboards.png) + +Notice you can filter the list of dashboards: + +* Use the text search field to filter by name or description. +* Use the **Tags** menu to filter by tag. To create a new tag or edit existing tags, click **Manage tags**. +* Click a dashboard's tags to toggle filtering for each tag. + +## Create new dashboards + +To create a new dashboard, click **Create Dashboard** and begin adding visualizations. +You can create charts, graphs, maps, tables, and other types of visualizations from your data, +or you can add visualizations from the library. + +You can also add other types of panels — such as filters, links, and text — and add +controls like time sliders. + +For more information about creating dashboards, +refer to [Create your first dashboard](((kibana-ref))/create-a-dashboard-of-panels-with-web-server-data.html). + +<DocCallOut title="Note"> + The tutorial about creating your first dashboard is written for ((kib)) users, + but the steps for serverless are very similar. + To load the sample data in serverless, go to **Project Settings** → **Integrations** in the navigation pane, + then search for "sample data". +</DocCallOut> + diff --git a/docs/en/serverless/images/action-alert-summary.png b/docs/en/serverless/images/action-alert-summary.png new file mode 100644 index 0000000000..89157d6629 Binary files /dev/null and b/docs/en/serverless/images/action-alert-summary.png differ diff --git a/docs/en/serverless/images/action-variables-popup.png b/docs/en/serverless/images/action-variables-popup.png new file mode 100644 index 0000000000..ffd3723cb3 Binary files /dev/null and b/docs/en/serverless/images/action-variables-popup.png differ diff --git a/docs/en/serverless/images/add-custom-metric.png b/docs/en/serverless/images/add-custom-metric.png new file mode 100644 index 0000000000..c807ab2f7b Binary files /dev/null and b/docs/en/serverless/images/add-custom-metric.png differ diff --git a/docs/en/serverless/images/ai-assistant-button.png b/docs/en/serverless/images/ai-assistant-button.png new file mode 100644 index 0000000000..4adcd34a48 Binary files /dev/null and b/docs/en/serverless/images/ai-assistant-button.png differ diff --git a/docs/en/serverless/images/ai-assistant-chat.png b/docs/en/serverless/images/ai-assistant-chat.png new file mode 100644 index 0000000000..80cc50b4e7 Binary files /dev/null and b/docs/en/serverless/images/ai-assistant-chat.png differ diff --git a/docs/en/serverless/images/ai-assistant-logs-prompts.png b/docs/en/serverless/images/ai-assistant-logs-prompts.png new file mode 100644 index 0000000000..86316298b8 Binary files /dev/null and b/docs/en/serverless/images/ai-assistant-logs-prompts.png differ diff --git a/docs/en/serverless/images/ai-assistant-logs.png b/docs/en/serverless/images/ai-assistant-logs.png new file mode 100644 index 0000000000..2de48a6e6c Binary files /dev/null and b/docs/en/serverless/images/ai-assistant-logs.png differ diff --git a/docs/en/serverless/images/ai-assistant-overview.gif b/docs/en/serverless/images/ai-assistant-overview.gif new file mode 100644 index 0000000000..7393bd53c9 Binary files /dev/null and b/docs/en/serverless/images/ai-assistant-overview.gif differ diff --git a/docs/en/serverless/images/alert-action-frequency.png b/docs/en/serverless/images/alert-action-frequency.png new file mode 100644 index 0000000000..2936ed2247 Binary files /dev/null and b/docs/en/serverless/images/alert-action-frequency.png differ diff --git a/docs/en/serverless/images/alert-action-types.png b/docs/en/serverless/images/alert-action-types.png new file mode 100644 index 0000000000..e38f98b3bb Binary files /dev/null and b/docs/en/serverless/images/alert-action-types.png differ diff --git a/docs/en/serverless/images/alert-anomaly-action-frequency-recovered.png b/docs/en/serverless/images/alert-anomaly-action-frequency-recovered.png new file mode 100644 index 0000000000..82aa544123 Binary files /dev/null and b/docs/en/serverless/images/alert-anomaly-action-frequency-recovered.png differ diff --git a/docs/en/serverless/images/alert-apm-action-frequency-recovered.png b/docs/en/serverless/images/alert-apm-action-frequency-recovered.png new file mode 100644 index 0000000000..ae25379628 Binary files /dev/null and b/docs/en/serverless/images/alert-apm-action-frequency-recovered.png differ diff --git a/docs/en/serverless/images/alert-details-flyout.png b/docs/en/serverless/images/alert-details-flyout.png new file mode 100644 index 0000000000..362ed053bc Binary files /dev/null and b/docs/en/serverless/images/alert-details-flyout.png differ diff --git a/docs/en/serverless/images/alert-preview.png b/docs/en/serverless/images/alert-preview.png new file mode 100644 index 0000000000..aac5279d0e Binary files /dev/null and b/docs/en/serverless/images/alert-preview.png differ diff --git a/docs/en/serverless/images/alerting-es-query-rule-action-query-matched.png b/docs/en/serverless/images/alerting-es-query-rule-action-query-matched.png new file mode 100644 index 0000000000..cafa6e82e2 Binary files /dev/null and b/docs/en/serverless/images/alerting-es-query-rule-action-query-matched.png differ diff --git a/docs/en/serverless/images/alerting-es-query-rule-action-summary.png b/docs/en/serverless/images/alerting-es-query-rule-action-summary.png new file mode 100644 index 0000000000..1e098d77fc Binary files /dev/null and b/docs/en/serverless/images/alerting-es-query-rule-action-summary.png differ diff --git a/docs/en/serverless/images/alerting-rule-types-es-query-conditions.png b/docs/en/serverless/images/alerting-rule-types-es-query-conditions.png new file mode 100644 index 0000000000..2151709ada Binary files /dev/null and b/docs/en/serverless/images/alerting-rule-types-es-query-conditions.png differ diff --git a/docs/en/serverless/images/alerting-rule-types-es-query-example-action-variable.png b/docs/en/serverless/images/alerting-rule-types-es-query-example-action-variable.png new file mode 100644 index 0000000000..8cb5c07543 Binary files /dev/null and b/docs/en/serverless/images/alerting-rule-types-es-query-example-action-variable.png differ diff --git a/docs/en/serverless/images/alerting-rule-types-es-query-invalid.png b/docs/en/serverless/images/alerting-rule-types-es-query-invalid.png new file mode 100644 index 0000000000..0d36e33741 Binary files /dev/null and b/docs/en/serverless/images/alerting-rule-types-es-query-invalid.png differ diff --git a/docs/en/serverless/images/alerting-rule-types-es-query-valid.png b/docs/en/serverless/images/alerting-rule-types-es-query-valid.png new file mode 100644 index 0000000000..6c63f777df Binary files /dev/null and b/docs/en/serverless/images/alerting-rule-types-es-query-valid.png differ diff --git a/docs/en/serverless/images/alerting-rule-types-esql-query-valid.png b/docs/en/serverless/images/alerting-rule-types-esql-query-valid.png new file mode 100644 index 0000000000..59f3fdfc22 Binary files /dev/null and b/docs/en/serverless/images/alerting-rule-types-esql-query-valid.png differ diff --git a/docs/en/serverless/images/alerts-create-apm-anomaly.png b/docs/en/serverless/images/alerts-create-apm-anomaly.png new file mode 100644 index 0000000000..10c9661093 Binary files /dev/null and b/docs/en/serverless/images/alerts-create-apm-anomaly.png differ diff --git a/docs/en/serverless/images/alerts-create-rule-apm-latency-threshold.png b/docs/en/serverless/images/alerts-create-rule-apm-latency-threshold.png new file mode 100644 index 0000000000..3841f736e1 Binary files /dev/null and b/docs/en/serverless/images/alerts-create-rule-apm-latency-threshold.png differ diff --git a/docs/en/serverless/images/alerts-create-rule-error-count.png b/docs/en/serverless/images/alerts-create-rule-error-count.png new file mode 100644 index 0000000000..94d3621c97 Binary files /dev/null and b/docs/en/serverless/images/alerts-create-rule-error-count.png differ diff --git a/docs/en/serverless/images/alerts-create-rule-failed-transaction-rate.png b/docs/en/serverless/images/alerts-create-rule-failed-transaction-rate.png new file mode 100644 index 0000000000..14f12518be Binary files /dev/null and b/docs/en/serverless/images/alerts-create-rule-failed-transaction-rate.png differ diff --git a/docs/en/serverless/images/alerts-detail-apm-anomaly.png b/docs/en/serverless/images/alerts-detail-apm-anomaly.png new file mode 100644 index 0000000000..17b5345efc Binary files /dev/null and b/docs/en/serverless/images/alerts-detail-apm-anomaly.png differ diff --git a/docs/en/serverless/images/alerts-edit-rule.png b/docs/en/serverless/images/alerts-edit-rule.png new file mode 100644 index 0000000000..062e6771e1 Binary files /dev/null and b/docs/en/serverless/images/alerts-edit-rule.png differ diff --git a/docs/en/serverless/images/alerts-rules-logs.png b/docs/en/serverless/images/alerts-rules-logs.png new file mode 100644 index 0000000000..dbaea790b4 Binary files /dev/null and b/docs/en/serverless/images/alerts-rules-logs.png differ diff --git a/docs/en/serverless/images/anomalies-overlay.png b/docs/en/serverless/images/anomalies-overlay.png new file mode 100644 index 0000000000..096de18ceb Binary files /dev/null and b/docs/en/serverless/images/anomalies-overlay.png differ diff --git a/docs/en/serverless/images/anomaly-detection-alert.png b/docs/en/serverless/images/anomaly-detection-alert.png new file mode 100644 index 0000000000..acf67aa4e0 Binary files /dev/null and b/docs/en/serverless/images/anomaly-detection-alert.png differ diff --git a/docs/en/serverless/images/anomaly-detection-configure-job-rules.png b/docs/en/serverless/images/anomaly-detection-configure-job-rules.png new file mode 100644 index 0000000000..0094a82dae Binary files /dev/null and b/docs/en/serverless/images/anomaly-detection-configure-job-rules.png differ diff --git a/docs/en/serverless/images/anomaly-detection-create-calendar.png b/docs/en/serverless/images/anomaly-detection-create-calendar.png new file mode 100644 index 0000000000..30c0feaec2 Binary files /dev/null and b/docs/en/serverless/images/anomaly-detection-create-calendar.png differ diff --git a/docs/en/serverless/images/anomaly-detection-create-filter-list.png b/docs/en/serverless/images/anomaly-detection-create-filter-list.png new file mode 100644 index 0000000000..226491d7ea Binary files /dev/null and b/docs/en/serverless/images/anomaly-detection-create-filter-list.png differ diff --git a/docs/en/serverless/images/anomaly-detection-custom-url.png b/docs/en/serverless/images/anomaly-detection-custom-url.png new file mode 100644 index 0000000000..4914589ce1 Binary files /dev/null and b/docs/en/serverless/images/anomaly-detection-custom-url.png differ diff --git a/docs/en/serverless/images/anomaly-detection-details.png b/docs/en/serverless/images/anomaly-detection-details.png new file mode 100644 index 0000000000..7cf20c4c44 Binary files /dev/null and b/docs/en/serverless/images/anomaly-detection-details.png differ diff --git a/docs/en/serverless/images/anomaly-detection-forecast.png b/docs/en/serverless/images/anomaly-detection-forecast.png new file mode 100644 index 0000000000..c745c7285a Binary files /dev/null and b/docs/en/serverless/images/anomaly-detection-forecast.png differ diff --git a/docs/en/serverless/images/anomaly-detection-multi-metric-details.png b/docs/en/serverless/images/anomaly-detection-multi-metric-details.png new file mode 100644 index 0000000000..2e91875bcd Binary files /dev/null and b/docs/en/serverless/images/anomaly-detection-multi-metric-details.png differ diff --git a/docs/en/serverless/images/anomaly-detection-single-metric-viewer.png b/docs/en/serverless/images/anomaly-detection-single-metric-viewer.png new file mode 100644 index 0000000000..b89e5e0181 Binary files /dev/null and b/docs/en/serverless/images/anomaly-detection-single-metric-viewer.png differ diff --git a/docs/en/serverless/images/anomaly-explorer.png b/docs/en/serverless/images/anomaly-explorer.png new file mode 100644 index 0000000000..dd46c11cfa Binary files /dev/null and b/docs/en/serverless/images/anomaly-explorer.png differ diff --git a/docs/en/serverless/images/apm-agents-aws-lambda-functions-architecture.png b/docs/en/serverless/images/apm-agents-aws-lambda-functions-architecture.png new file mode 100644 index 0000000000..22de0b5c6a Binary files /dev/null and b/docs/en/serverless/images/apm-agents-aws-lambda-functions-architecture.png differ diff --git a/docs/en/serverless/images/apm-alert.png b/docs/en/serverless/images/apm-alert.png new file mode 100644 index 0000000000..92b6f5dde9 Binary files /dev/null and b/docs/en/serverless/images/apm-alert.png differ diff --git a/docs/en/serverless/images/apm-dt-sampling-example-1.png b/docs/en/serverless/images/apm-dt-sampling-example-1.png new file mode 100644 index 0000000000..a3def0c7bf Binary files /dev/null and b/docs/en/serverless/images/apm-dt-sampling-example-1.png differ diff --git a/docs/en/serverless/images/apm-dt-sampling-example-2.png b/docs/en/serverless/images/apm-dt-sampling-example-2.png new file mode 100644 index 0000000000..d7f87bcd89 Binary files /dev/null and b/docs/en/serverless/images/apm-dt-sampling-example-2.png differ diff --git a/docs/en/serverless/images/cases-add-connector.png b/docs/en/serverless/images/cases-add-connector.png new file mode 100644 index 0000000000..8a344bae93 Binary files /dev/null and b/docs/en/serverless/images/cases-add-connector.png differ diff --git a/docs/en/serverless/images/cases-files-tab.png b/docs/en/serverless/images/cases-files-tab.png new file mode 100644 index 0000000000..a11287b060 Binary files /dev/null and b/docs/en/serverless/images/cases-files-tab.png differ diff --git a/docs/en/serverless/images/cases.png b/docs/en/serverless/images/cases.png new file mode 100644 index 0000000000..b8b11abdad Binary files /dev/null and b/docs/en/serverless/images/cases.png differ diff --git a/docs/en/serverless/images/change-point-detection-attach-charts.png b/docs/en/serverless/images/change-point-detection-attach-charts.png new file mode 100644 index 0000000000..9609d7ebd3 Binary files /dev/null and b/docs/en/serverless/images/change-point-detection-attach-charts.png differ diff --git a/docs/en/serverless/images/change-point-detection-filter-by-type.png b/docs/en/serverless/images/change-point-detection-filter-by-type.png new file mode 100644 index 0000000000..093980424d Binary files /dev/null and b/docs/en/serverless/images/change-point-detection-filter-by-type.png differ diff --git a/docs/en/serverless/images/change-point-detection-view-selected.png b/docs/en/serverless/images/change-point-detection-view-selected.png new file mode 100644 index 0000000000..409e7f5158 Binary files /dev/null and b/docs/en/serverless/images/change-point-detection-view-selected.png differ diff --git a/docs/en/serverless/images/change-point-detection.png b/docs/en/serverless/images/change-point-detection.png new file mode 100644 index 0000000000..4e6afccff9 Binary files /dev/null and b/docs/en/serverless/images/change-point-detection.png differ diff --git a/docs/en/serverless/images/conditional-alerts.png b/docs/en/serverless/images/conditional-alerts.png new file mode 100644 index 0000000000..7e9d32fd20 Binary files /dev/null and b/docs/en/serverless/images/conditional-alerts.png differ diff --git a/docs/en/serverless/images/custom-logs-advanced-options.png b/docs/en/serverless/images/custom-logs-advanced-options.png new file mode 100644 index 0000000000..cc1bc3d0f5 Binary files /dev/null and b/docs/en/serverless/images/custom-logs-advanced-options.png differ diff --git a/docs/en/serverless/images/custom-threshold-rule.png b/docs/en/serverless/images/custom-threshold-rule.png new file mode 100644 index 0000000000..4290d3a426 Binary files /dev/null and b/docs/en/serverless/images/custom-threshold-rule.png differ diff --git a/docs/en/serverless/images/custom-threshold-run-when.png b/docs/en/serverless/images/custom-threshold-run-when.png new file mode 100644 index 0000000000..6fee51ccfd Binary files /dev/null and b/docs/en/serverless/images/custom-threshold-run-when.png differ diff --git a/docs/en/serverless/images/dashboards.png b/docs/en/serverless/images/dashboards.png new file mode 100644 index 0000000000..b709f2a291 Binary files /dev/null and b/docs/en/serverless/images/dashboards.png differ diff --git a/docs/en/serverless/images/es-query-rule-action-summary.png b/docs/en/serverless/images/es-query-rule-action-summary.png new file mode 100644 index 0000000000..1e098d77fc Binary files /dev/null and b/docs/en/serverless/images/es-query-rule-action-summary.png differ diff --git a/docs/en/serverless/images/expand-icon.png b/docs/en/serverless/images/expand-icon.png new file mode 100644 index 0000000000..c69ffcc559 Binary files /dev/null and b/docs/en/serverless/images/expand-icon.png differ diff --git a/docs/en/serverless/images/hosts-dashed-and-missing.png b/docs/en/serverless/images/hosts-dashed-and-missing.png new file mode 100644 index 0000000000..856e50e4b4 Binary files /dev/null and b/docs/en/serverless/images/hosts-dashed-and-missing.png differ diff --git a/docs/en/serverless/images/hosts-dashed.png b/docs/en/serverless/images/hosts-dashed.png new file mode 100644 index 0000000000..5034d23d01 Binary files /dev/null and b/docs/en/serverless/images/hosts-dashed.png differ diff --git a/docs/en/serverless/images/hosts-inspect.png b/docs/en/serverless/images/hosts-inspect.png new file mode 100644 index 0000000000..f71598bd2d Binary files /dev/null and b/docs/en/serverless/images/hosts-inspect.png differ diff --git a/docs/en/serverless/images/hosts-logs.png b/docs/en/serverless/images/hosts-logs.png new file mode 100644 index 0000000000..3d846415bb Binary files /dev/null and b/docs/en/serverless/images/hosts-logs.png differ diff --git a/docs/en/serverless/images/hosts-missing-data.png b/docs/en/serverless/images/hosts-missing-data.png new file mode 100644 index 0000000000..a57be2d66a Binary files /dev/null and b/docs/en/serverless/images/hosts-missing-data.png differ diff --git a/docs/en/serverless/images/hosts-open-in-lens.png b/docs/en/serverless/images/hosts-open-in-lens.png new file mode 100644 index 0000000000..cd37372e80 Binary files /dev/null and b/docs/en/serverless/images/hosts-open-in-lens.png differ diff --git a/docs/en/serverless/images/hosts-view-alerts.png b/docs/en/serverless/images/hosts-view-alerts.png new file mode 100644 index 0000000000..3b3e18eab6 Binary files /dev/null and b/docs/en/serverless/images/hosts-view-alerts.png differ diff --git a/docs/en/serverless/images/hosts.png b/docs/en/serverless/images/hosts.png new file mode 100644 index 0000000000..479ba32124 Binary files /dev/null and b/docs/en/serverless/images/hosts.png differ diff --git a/docs/en/serverless/images/inventory-alert.png b/docs/en/serverless/images/inventory-alert.png new file mode 100644 index 0000000000..a0508106d5 Binary files /dev/null and b/docs/en/serverless/images/inventory-alert.png differ diff --git a/docs/en/serverless/images/inventory-threshold-run-when-selection.png b/docs/en/serverless/images/inventory-threshold-run-when-selection.png new file mode 100644 index 0000000000..f9cfa2c854 Binary files /dev/null and b/docs/en/serverless/images/inventory-threshold-run-when-selection.png differ diff --git a/docs/en/serverless/images/kubernetes-filter.png b/docs/en/serverless/images/kubernetes-filter.png new file mode 100644 index 0000000000..06b9f03f6e Binary files /dev/null and b/docs/en/serverless/images/kubernetes-filter.png differ diff --git a/docs/en/serverless/images/log-copy-es-endpoint.png b/docs/en/serverless/images/log-copy-es-endpoint.png new file mode 100644 index 0000000000..0a52a33989 Binary files /dev/null and b/docs/en/serverless/images/log-copy-es-endpoint.png differ diff --git a/docs/en/serverless/images/log-explorer-overview.png b/docs/en/serverless/images/log-explorer-overview.png new file mode 100644 index 0000000000..41448ef2ca Binary files /dev/null and b/docs/en/serverless/images/log-explorer-overview.png differ diff --git a/docs/en/serverless/images/log-explorer-select-syslogs.png b/docs/en/serverless/images/log-explorer-select-syslogs.png new file mode 100644 index 0000000000..b49e1665d5 Binary files /dev/null and b/docs/en/serverless/images/log-explorer-select-syslogs.png differ diff --git a/docs/en/serverless/images/log-explorer.png b/docs/en/serverless/images/log-explorer.png new file mode 100644 index 0000000000..92b9b2bb96 Binary files /dev/null and b/docs/en/serverless/images/log-explorer.png differ diff --git a/docs/en/serverless/images/log-help-icon.png b/docs/en/serverless/images/log-help-icon.png new file mode 100644 index 0000000000..e33d8b59a4 Binary files /dev/null and b/docs/en/serverless/images/log-help-icon.png differ diff --git a/docs/en/serverless/images/log-menu.png b/docs/en/serverless/images/log-menu.png new file mode 100644 index 0000000000..db61571ca2 Binary files /dev/null and b/docs/en/serverless/images/log-menu.png differ diff --git a/docs/en/serverless/images/log-pattern-analysis.png b/docs/en/serverless/images/log-pattern-analysis.png new file mode 100644 index 0000000000..fa6eecc8e7 Binary files /dev/null and b/docs/en/serverless/images/log-pattern-analysis.png differ diff --git a/docs/en/serverless/images/log-rate-analysis-results.png b/docs/en/serverless/images/log-rate-analysis-results.png new file mode 100644 index 0000000000..8027968858 Binary files /dev/null and b/docs/en/serverless/images/log-rate-analysis-results.png differ diff --git a/docs/en/serverless/images/log-rate-analysis.png b/docs/en/serverless/images/log-rate-analysis.png new file mode 100644 index 0000000000..15855c8b9a Binary files /dev/null and b/docs/en/serverless/images/log-rate-analysis.png differ diff --git a/docs/en/serverless/images/log-rate-histogram.png b/docs/en/serverless/images/log-rate-histogram.png new file mode 100644 index 0000000000..436ceafeae Binary files /dev/null and b/docs/en/serverless/images/log-rate-histogram.png differ diff --git a/docs/en/serverless/images/log-threshold-breach.png b/docs/en/serverless/images/log-threshold-breach.png new file mode 100644 index 0000000000..200ddfb875 Binary files /dev/null and b/docs/en/serverless/images/log-threshold-breach.png differ diff --git a/docs/en/serverless/images/logs-end-date.png b/docs/en/serverless/images/logs-end-date.png new file mode 100644 index 0000000000..1d2932cd09 Binary files /dev/null and b/docs/en/serverless/images/logs-end-date.png differ diff --git a/docs/en/serverless/images/logs-kql-filter.png b/docs/en/serverless/images/logs-kql-filter.png new file mode 100644 index 0000000000..6eab1d1710 Binary files /dev/null and b/docs/en/serverless/images/logs-kql-filter.png differ diff --git a/docs/en/serverless/images/logs-overlay.png b/docs/en/serverless/images/logs-overlay.png new file mode 100644 index 0000000000..8b2e538cb2 Binary files /dev/null and b/docs/en/serverless/images/logs-overlay.png differ diff --git a/docs/en/serverless/images/logs-start-date.png b/docs/en/serverless/images/logs-start-date.png new file mode 100644 index 0000000000..6d8f8c6dd7 Binary files /dev/null and b/docs/en/serverless/images/logs-start-date.png differ diff --git a/docs/en/serverless/images/logs-stream-logs-api-key-beats.png b/docs/en/serverless/images/logs-stream-logs-api-key-beats.png new file mode 100644 index 0000000000..a080b23e8e Binary files /dev/null and b/docs/en/serverless/images/logs-stream-logs-api-key-beats.png differ diff --git a/docs/en/serverless/images/logs-stream-logs-config.png b/docs/en/serverless/images/logs-stream-logs-config.png new file mode 100644 index 0000000000..4ef18a221d Binary files /dev/null and b/docs/en/serverless/images/logs-stream-logs-config.png differ diff --git a/docs/en/serverless/images/logs-stream-logs-service-name.png b/docs/en/serverless/images/logs-stream-logs-service-name.png new file mode 100644 index 0000000000..c48b639679 Binary files /dev/null and b/docs/en/serverless/images/logs-stream-logs-service-name.png differ diff --git a/docs/en/serverless/images/logs-threshold-conditional-alert.png b/docs/en/serverless/images/logs-threshold-conditional-alert.png new file mode 100644 index 0000000000..73f6bfc5bc Binary files /dev/null and b/docs/en/serverless/images/logs-threshold-conditional-alert.png differ diff --git a/docs/en/serverless/images/metadata-overlay.png b/docs/en/serverless/images/metadata-overlay.png new file mode 100644 index 0000000000..71a61f565e Binary files /dev/null and b/docs/en/serverless/images/metadata-overlay.png differ diff --git a/docs/en/serverless/images/metrics-app.png b/docs/en/serverless/images/metrics-app.png new file mode 100644 index 0000000000..63975743d5 Binary files /dev/null and b/docs/en/serverless/images/metrics-app.png differ diff --git a/docs/en/serverless/images/metrics-history-chart.png b/docs/en/serverless/images/metrics-history-chart.png new file mode 100644 index 0000000000..cc62326f9f Binary files /dev/null and b/docs/en/serverless/images/metrics-history-chart.png differ diff --git a/docs/en/serverless/images/metrics-ml-jobs.png b/docs/en/serverless/images/metrics-ml-jobs.png new file mode 100644 index 0000000000..052984f98d Binary files /dev/null and b/docs/en/serverless/images/metrics-ml-jobs.png differ diff --git a/docs/en/serverless/images/metrics-overlay.png b/docs/en/serverless/images/metrics-overlay.png new file mode 100644 index 0000000000..4d40b434d4 Binary files /dev/null and b/docs/en/serverless/images/metrics-overlay.png differ diff --git a/docs/en/serverless/images/observability-action-alert-summary.png b/docs/en/serverless/images/observability-action-alert-summary.png new file mode 100644 index 0000000000..89157d6629 Binary files /dev/null and b/docs/en/serverless/images/observability-action-alert-summary.png differ diff --git a/docs/en/serverless/images/observability-alerts-overview.png b/docs/en/serverless/images/observability-alerts-overview.png new file mode 100644 index 0000000000..b7dd3aba62 Binary files /dev/null and b/docs/en/serverless/images/observability-alerts-overview.png differ diff --git a/docs/en/serverless/images/observability-alerts-view.png b/docs/en/serverless/images/observability-alerts-view.png new file mode 100644 index 0000000000..eeaa164cbc Binary files /dev/null and b/docs/en/serverless/images/observability-alerts-view.png differ diff --git a/docs/en/serverless/images/pod-metrics.png b/docs/en/serverless/images/pod-metrics.png new file mode 100644 index 0000000000..3dc367a5a6 Binary files /dev/null and b/docs/en/serverless/images/pod-metrics.png differ diff --git a/docs/en/serverless/images/private-locations-monitor-locations.png b/docs/en/serverless/images/private-locations-monitor-locations.png new file mode 100644 index 0000000000..fc4dad9414 Binary files /dev/null and b/docs/en/serverless/images/private-locations-monitor-locations.png differ diff --git a/docs/en/serverless/images/processes-overlay.png b/docs/en/serverless/images/processes-overlay.png new file mode 100644 index 0000000000..eefb054392 Binary files /dev/null and b/docs/en/serverless/images/processes-overlay.png differ diff --git a/docs/en/serverless/images/run-log-pattern-analysis.png b/docs/en/serverless/images/run-log-pattern-analysis.png new file mode 100644 index 0000000000..eb4e9ae908 Binary files /dev/null and b/docs/en/serverless/images/run-log-pattern-analysis.png differ diff --git a/docs/en/serverless/images/serverless-capabilities.svg b/docs/en/serverless/images/serverless-capabilities.svg new file mode 100644 index 0000000000..559a5aae29 --- /dev/null +++ b/docs/en/serverless/images/serverless-capabilities.svg @@ -0,0 +1,20 @@ +<svg width="1052" height="1091" viewBox="0 0 1052 1091" fill="none" xmlns="http://www.w3.org/2000/svg"> +<rect x="173" y="737" width="705" height="354" fill="#FEC514"/> +<rect x="2" width="1048" height="428" fill="#F04E98"/> +<rect x="55" y="73" width="280" height="305" rx="6" fill="white"/> +<rect x="2" y="530" width="1048" height="115" rx="6" fill="#0077CC" stroke="#0077CC" stroke-width="4" stroke-miterlimit="0" stroke-linecap="round"/> +<path d="M297.485 605V570.091H321.007V576.176H304.865V584.494H319.797V590.58H304.865V598.915H321.076V605H297.485ZM332.944 570.091V605H325.683V570.091H332.944ZM345.171 605.494C343.501 605.494 342.012 605.205 340.705 604.625C339.398 604.034 338.364 603.165 337.603 602.017C336.853 600.858 336.478 599.415 336.478 597.688C336.478 596.233 336.745 595.011 337.279 594.023C337.813 593.034 338.54 592.239 339.461 591.636C340.381 591.034 341.427 590.58 342.597 590.273C343.779 589.966 345.018 589.75 346.313 589.625C347.836 589.466 349.063 589.318 349.995 589.182C350.927 589.034 351.603 588.818 352.023 588.534C352.444 588.25 352.654 587.83 352.654 587.273V587.17C352.654 586.091 352.313 585.256 351.631 584.665C350.961 584.074 350.006 583.778 348.768 583.778C347.461 583.778 346.421 584.068 345.648 584.648C344.876 585.216 344.364 585.932 344.114 586.795L337.398 586.25C337.739 584.659 338.41 583.284 339.41 582.125C340.41 580.955 341.699 580.057 343.279 579.432C344.87 578.795 346.711 578.477 348.802 578.477C350.256 578.477 351.648 578.648 352.978 578.989C354.319 579.33 355.506 579.858 356.54 580.574C357.586 581.29 358.41 582.21 359.012 583.335C359.614 584.449 359.915 585.784 359.915 587.341V605H353.029V601.369H352.824C352.404 602.188 351.841 602.909 351.137 603.534C350.432 604.148 349.586 604.631 348.597 604.983C347.609 605.324 346.466 605.494 345.171 605.494ZM347.251 600.483C348.319 600.483 349.262 600.273 350.08 599.852C350.898 599.42 351.54 598.841 352.006 598.114C352.472 597.386 352.705 596.562 352.705 595.642V592.864C352.478 593.011 352.165 593.148 351.768 593.273C351.381 593.386 350.944 593.494 350.455 593.597C349.966 593.687 349.478 593.773 348.989 593.852C348.501 593.92 348.057 593.983 347.66 594.04C346.807 594.165 346.063 594.364 345.427 594.636C344.79 594.909 344.296 595.278 343.944 595.744C343.591 596.199 343.415 596.767 343.415 597.449C343.415 598.438 343.773 599.193 344.489 599.716C345.216 600.227 346.137 600.483 347.251 600.483ZM386.277 586.284L379.629 586.693C379.516 586.125 379.271 585.614 378.896 585.159C378.521 584.693 378.027 584.324 377.413 584.051C376.811 583.767 376.089 583.625 375.249 583.625C374.124 583.625 373.175 583.864 372.402 584.341C371.629 584.807 371.243 585.432 371.243 586.216C371.243 586.841 371.493 587.369 371.993 587.801C372.493 588.233 373.351 588.58 374.567 588.841L379.305 589.795C381.851 590.318 383.749 591.159 384.999 592.318C386.249 593.477 386.874 595 386.874 596.886C386.874 598.602 386.368 600.108 385.356 601.403C384.356 602.699 382.981 603.71 381.231 604.438C379.493 605.153 377.487 605.511 375.214 605.511C371.749 605.511 368.987 604.79 366.93 603.347C364.885 601.892 363.686 599.915 363.334 597.415L370.476 597.04C370.692 598.097 371.214 598.903 372.044 599.46C372.874 600.006 373.936 600.278 375.231 600.278C376.504 600.278 377.527 600.034 378.3 599.545C379.084 599.045 379.481 598.403 379.493 597.619C379.481 596.96 379.203 596.42 378.658 596C378.112 595.568 377.271 595.239 376.135 595.011L371.601 594.108C369.044 593.597 367.141 592.71 365.891 591.449C364.652 590.187 364.033 588.58 364.033 586.625C364.033 584.943 364.487 583.494 365.396 582.278C366.317 581.062 367.606 580.125 369.266 579.466C370.936 578.807 372.891 578.477 375.129 578.477C378.436 578.477 381.038 579.176 382.936 580.574C384.845 581.972 385.959 583.875 386.277 586.284ZM404.316 578.818V584.273H388.549V578.818H404.316ZM392.129 572.545H399.39V596.955C399.39 597.625 399.492 598.148 399.697 598.523C399.901 598.886 400.185 599.142 400.549 599.29C400.924 599.437 401.356 599.511 401.845 599.511C402.185 599.511 402.526 599.483 402.867 599.426C403.208 599.358 403.47 599.307 403.651 599.273L404.793 604.676C404.43 604.79 403.918 604.92 403.259 605.068C402.6 605.227 401.799 605.324 400.856 605.358C399.106 605.426 397.572 605.193 396.254 604.659C394.947 604.125 393.93 603.295 393.202 602.17C392.475 601.045 392.117 599.625 392.129 597.909V572.545ZM407.99 605V578.818H415.252V605H407.99ZM411.638 575.443C410.558 575.443 409.632 575.085 408.86 574.369C408.098 573.642 407.717 572.773 407.717 571.761C407.717 570.761 408.098 569.903 408.86 569.188C409.632 568.46 410.558 568.097 411.638 568.097C412.717 568.097 413.638 568.46 414.399 569.188C415.172 569.903 415.558 570.761 415.558 571.761C415.558 572.773 415.172 573.642 414.399 574.369C413.638 575.085 412.717 575.443 411.638 575.443ZM431.842 605.511C429.16 605.511 426.853 604.943 424.921 603.807C423.001 602.659 421.524 601.068 420.49 599.034C419.467 597 418.956 594.659 418.956 592.011C418.956 589.33 419.473 586.977 420.507 584.955C421.552 582.92 423.035 581.335 424.956 580.199C426.876 579.051 429.16 578.477 431.808 578.477C434.092 578.477 436.092 578.892 437.808 579.722C439.524 580.551 440.882 581.716 441.882 583.216C442.882 584.716 443.433 586.477 443.535 588.5H436.683C436.49 587.193 435.978 586.142 435.149 585.347C434.331 584.54 433.257 584.136 431.927 584.136C430.802 584.136 429.819 584.443 428.978 585.057C428.149 585.659 427.501 586.54 427.035 587.699C426.569 588.858 426.336 590.261 426.336 591.909C426.336 593.58 426.563 595 427.018 596.17C427.484 597.341 428.137 598.233 428.978 598.847C429.819 599.46 430.802 599.767 431.927 599.767C432.757 599.767 433.501 599.597 434.16 599.256C434.831 598.915 435.382 598.42 435.813 597.773C436.257 597.114 436.546 596.324 436.683 595.403H443.535C443.421 597.403 442.876 599.165 441.899 600.688C440.933 602.199 439.598 603.381 437.893 604.233C436.188 605.085 434.171 605.511 431.842 605.511ZM489.398 587.545C489.398 591.352 488.676 594.591 487.233 597.261C485.801 599.932 483.846 601.972 481.369 603.381C478.903 604.778 476.13 605.477 473.051 605.477C469.949 605.477 467.165 604.773 464.699 603.364C462.233 601.955 460.284 599.915 458.852 597.244C457.42 594.574 456.704 591.341 456.704 587.545C456.704 583.739 457.42 580.5 458.852 577.83C460.284 575.159 462.233 573.125 464.699 571.727C467.165 570.318 469.949 569.614 473.051 569.614C476.13 569.614 478.903 570.318 481.369 571.727C483.846 573.125 485.801 575.159 487.233 577.83C488.676 580.5 489.398 583.739 489.398 587.545ZM481.915 587.545C481.915 585.08 481.545 583 480.807 581.307C480.079 579.614 479.051 578.33 477.721 577.455C476.392 576.58 474.835 576.142 473.051 576.142C471.267 576.142 469.71 576.58 468.38 577.455C467.051 578.33 466.017 579.614 465.278 581.307C464.551 583 464.187 585.08 464.187 587.545C464.187 590.011 464.551 592.091 465.278 593.784C466.017 595.477 467.051 596.761 468.38 597.636C469.71 598.511 471.267 598.949 473.051 598.949C474.835 598.949 476.392 598.511 477.721 597.636C479.051 596.761 480.079 595.477 480.807 593.784C481.545 592.091 481.915 590.011 481.915 587.545ZM493.809 605V570.091H501.07V583.216H501.292C501.61 582.511 502.07 581.795 502.672 581.068C503.286 580.33 504.082 579.716 505.059 579.227C506.047 578.727 507.275 578.477 508.741 578.477C510.65 578.477 512.411 578.977 514.025 579.977C515.638 580.966 516.928 582.46 517.894 584.46C518.86 586.449 519.343 588.943 519.343 591.943C519.343 594.864 518.871 597.33 517.928 599.341C516.996 601.341 515.724 602.858 514.11 603.892C512.508 604.915 510.712 605.426 508.724 605.426C507.315 605.426 506.116 605.193 505.127 604.727C504.15 604.261 503.349 603.676 502.724 602.972C502.099 602.256 501.621 601.534 501.292 600.807H500.968V605H493.809ZM500.917 591.909C500.917 593.466 501.133 594.824 501.565 595.983C501.996 597.142 502.621 598.045 503.44 598.693C504.258 599.33 505.252 599.648 506.422 599.648C507.604 599.648 508.604 599.324 509.422 598.676C510.241 598.017 510.86 597.108 511.28 595.949C511.712 594.778 511.928 593.432 511.928 591.909C511.928 590.398 511.718 589.068 511.297 587.92C510.877 586.773 510.258 585.875 509.44 585.227C508.621 584.58 507.616 584.256 506.422 584.256C505.241 584.256 504.241 584.568 503.422 585.193C502.616 585.818 501.996 586.705 501.565 587.852C501.133 589 500.917 590.352 500.917 591.909ZM544.916 586.284L538.268 586.693C538.155 586.125 537.911 585.614 537.536 585.159C537.161 584.693 536.666 584.324 536.053 584.051C535.45 583.767 534.729 583.625 533.888 583.625C532.763 583.625 531.814 583.864 531.041 584.341C530.268 584.807 529.882 585.432 529.882 586.216C529.882 586.841 530.132 587.369 530.632 587.801C531.132 588.233 531.99 588.58 533.206 588.841L537.945 589.795C540.49 590.318 542.388 591.159 543.638 592.318C544.888 593.477 545.513 595 545.513 596.886C545.513 598.602 545.007 600.108 543.996 601.403C542.996 602.699 541.621 603.71 539.871 604.438C538.132 605.153 536.126 605.511 533.854 605.511C530.388 605.511 527.626 604.79 525.57 603.347C523.524 601.892 522.325 599.915 521.973 597.415L529.115 597.04C529.331 598.097 529.854 598.903 530.683 599.46C531.513 600.006 532.575 600.278 533.871 600.278C535.143 600.278 536.166 600.034 536.939 599.545C537.723 599.045 538.121 598.403 538.132 597.619C538.121 596.96 537.842 596.42 537.297 596C536.751 595.568 535.911 595.239 534.774 595.011L530.24 594.108C527.683 593.597 525.78 592.71 524.53 591.449C523.291 590.187 522.672 588.58 522.672 586.625C522.672 584.943 523.126 583.494 524.036 582.278C524.956 581.062 526.246 580.125 527.905 579.466C529.575 578.807 531.53 578.477 533.768 578.477C537.075 578.477 539.678 579.176 541.575 580.574C543.484 581.972 544.598 583.875 544.916 586.284ZM560.961 605.511C558.268 605.511 555.95 604.966 554.006 603.875C552.075 602.773 550.586 601.216 549.541 599.205C548.495 597.182 547.972 594.79 547.972 592.028C547.972 589.335 548.495 586.972 549.541 584.938C550.586 582.903 552.058 581.318 553.955 580.182C555.864 579.045 558.103 578.477 560.671 578.477C562.399 578.477 564.006 578.756 565.495 579.312C566.995 579.858 568.302 580.682 569.416 581.784C570.541 582.886 571.416 584.273 572.041 585.943C572.666 587.602 572.978 589.545 572.978 591.773V593.767H550.87V589.267H566.143C566.143 588.222 565.916 587.295 565.461 586.489C565.006 585.682 564.376 585.051 563.569 584.597C562.774 584.131 561.847 583.898 560.791 583.898C559.688 583.898 558.711 584.153 557.859 584.665C557.018 585.165 556.359 585.841 555.881 586.693C555.404 587.534 555.16 588.472 555.149 589.506V593.784C555.149 595.08 555.387 596.199 555.864 597.142C556.353 598.085 557.041 598.812 557.927 599.324C558.813 599.835 559.864 600.091 561.08 600.091C561.887 600.091 562.626 599.977 563.296 599.75C563.967 599.523 564.541 599.182 565.018 598.727C565.495 598.273 565.859 597.716 566.109 597.057L572.825 597.5C572.484 599.114 571.785 600.523 570.728 601.727C569.683 602.92 568.33 603.852 566.671 604.523C565.024 605.182 563.12 605.511 560.961 605.511ZM576.661 605V578.818H583.701V583.386H583.973C584.451 581.761 585.252 580.534 586.377 579.705C587.502 578.864 588.797 578.443 590.263 578.443C590.627 578.443 591.019 578.466 591.439 578.511C591.86 578.557 592.229 578.619 592.547 578.699V585.142C592.206 585.04 591.735 584.949 591.132 584.869C590.53 584.79 589.979 584.75 589.479 584.75C588.411 584.75 587.456 584.983 586.615 585.449C585.786 585.903 585.127 586.54 584.638 587.358C584.161 588.176 583.922 589.119 583.922 590.188V605H576.661ZM620.451 578.818L611.298 605H603.116L593.963 578.818H601.633L607.071 597.551H607.343L612.764 578.818H620.451ZM629.874 605.494C628.204 605.494 626.715 605.205 625.408 604.625C624.101 604.034 623.067 603.165 622.306 602.017C621.556 600.858 621.181 599.415 621.181 597.688C621.181 596.233 621.448 595.011 621.982 594.023C622.516 593.034 623.243 592.239 624.164 591.636C625.084 591.034 626.13 590.58 627.3 590.273C628.482 589.966 629.721 589.75 631.016 589.625C632.539 589.466 633.766 589.318 634.698 589.182C635.63 589.034 636.306 588.818 636.726 588.534C637.147 588.25 637.357 587.83 637.357 587.273V587.17C637.357 586.091 637.016 585.256 636.334 584.665C635.664 584.074 634.709 583.778 633.471 583.778C632.164 583.778 631.124 584.068 630.351 584.648C629.579 585.216 629.067 585.932 628.817 586.795L622.101 586.25C622.442 584.659 623.113 583.284 624.113 582.125C625.113 580.955 626.402 580.057 627.982 579.432C629.573 578.795 631.414 578.477 633.505 578.477C634.959 578.477 636.351 578.648 637.681 578.989C639.022 579.33 640.209 579.858 641.243 580.574C642.289 581.29 643.113 582.21 643.715 583.335C644.317 584.449 644.618 585.784 644.618 587.341V605H637.732V601.369H637.527C637.107 602.188 636.544 602.909 635.84 603.534C635.135 604.148 634.289 604.631 633.3 604.983C632.312 605.324 631.169 605.494 629.874 605.494ZM631.954 600.483C633.022 600.483 633.965 600.273 634.783 599.852C635.601 599.42 636.243 598.841 636.709 598.114C637.175 597.386 637.408 596.562 637.408 595.642V592.864C637.181 593.011 636.868 593.148 636.471 593.273C636.084 593.386 635.647 593.494 635.158 593.597C634.669 593.687 634.181 593.773 633.692 593.852C633.204 593.92 632.76 593.983 632.363 594.04C631.51 594.165 630.766 594.364 630.13 594.636C629.493 594.909 628.999 595.278 628.647 595.744C628.294 596.199 628.118 596.767 628.118 597.449C628.118 598.438 628.476 599.193 629.192 599.716C629.919 600.227 630.84 600.483 631.954 600.483ZM649.332 605V570.091H656.594V583.216H656.815C657.133 582.511 657.594 581.795 658.196 581.068C658.809 580.33 659.605 579.716 660.582 579.227C661.571 578.727 662.798 578.477 664.264 578.477C666.173 578.477 667.934 578.977 669.548 579.977C671.162 580.966 672.452 582.46 673.417 584.46C674.383 586.449 674.866 588.943 674.866 591.943C674.866 594.864 674.395 597.33 673.452 599.341C672.52 601.341 671.247 602.858 669.633 603.892C668.031 604.915 666.236 605.426 664.247 605.426C662.838 605.426 661.639 605.193 660.65 604.727C659.673 604.261 658.872 603.676 658.247 602.972C657.622 602.256 657.145 601.534 656.815 600.807H656.491V605H649.332ZM656.44 591.909C656.44 593.466 656.656 594.824 657.088 595.983C657.52 597.142 658.145 598.045 658.963 598.693C659.781 599.33 660.775 599.648 661.946 599.648C663.128 599.648 664.128 599.324 664.946 598.676C665.764 598.017 666.383 597.108 666.804 595.949C667.236 594.778 667.452 593.432 667.452 591.909C667.452 590.398 667.241 589.068 666.821 587.92C666.4 586.773 665.781 585.875 664.963 585.227C664.145 584.58 663.139 584.256 661.946 584.256C660.764 584.256 659.764 584.568 658.946 585.193C658.139 585.818 657.52 586.705 657.088 587.852C656.656 589 656.44 590.352 656.44 591.909ZM678.655 605V578.818H685.917V605H678.655ZM682.303 575.443C681.224 575.443 680.298 575.085 679.525 574.369C678.763 573.642 678.383 572.773 678.383 571.761C678.383 570.761 678.763 569.903 679.525 569.188C680.298 568.46 681.224 568.097 682.303 568.097C683.383 568.097 684.303 568.46 685.065 569.188C685.837 569.903 686.224 570.761 686.224 571.761C686.224 572.773 685.837 573.642 685.065 574.369C684.303 575.085 683.383 575.443 682.303 575.443ZM697.939 570.091V605H690.678V570.091H697.939ZM702.7 605V578.818H709.961V605H702.7ZM706.347 575.443C705.268 575.443 704.342 575.085 703.569 574.369C702.808 573.642 702.427 572.773 702.427 571.761C702.427 570.761 702.808 569.903 703.569 569.188C704.342 568.46 705.268 568.097 706.347 568.097C707.427 568.097 708.347 568.46 709.109 569.188C709.882 569.903 710.268 570.761 710.268 571.761C710.268 572.773 709.882 573.642 709.109 574.369C708.347 575.085 707.427 575.443 706.347 575.443ZM728.648 578.818V584.273H712.881V578.818H728.648ZM716.46 572.545H723.722V596.955C723.722 597.625 723.824 598.148 724.029 598.523C724.233 598.886 724.517 599.142 724.881 599.29C725.256 599.437 725.688 599.511 726.176 599.511C726.517 599.511 726.858 599.483 727.199 599.426C727.54 599.358 727.801 599.307 727.983 599.273L729.125 604.676C728.762 604.79 728.25 604.92 727.591 605.068C726.932 605.227 726.131 605.324 725.188 605.358C723.438 605.426 721.904 605.193 720.585 604.659C719.279 604.125 718.262 603.295 717.534 602.17C716.807 601.045 716.449 599.625 716.46 597.909V572.545ZM736.805 614.818C735.885 614.818 735.021 614.744 734.214 614.597C733.419 614.46 732.76 614.284 732.237 614.068L733.873 608.648C734.726 608.909 735.493 609.051 736.174 609.074C736.868 609.097 737.464 608.938 737.964 608.597C738.476 608.256 738.89 607.676 739.208 606.858L739.635 605.75L730.243 578.818H737.879L743.299 598.045H743.572L749.044 578.818H756.731L746.555 607.83C746.066 609.239 745.402 610.466 744.561 611.511C743.731 612.568 742.68 613.381 741.407 613.949C740.135 614.528 738.601 614.818 736.805 614.818Z" fill="white"/> +<rect x="385" y="73" width="280" height="305" rx="6" fill="white"/> +<rect x="716" y="73" width="278" height="305" rx="6" fill="white"/> +<path d="M166.569 131H161.626L169.158 109.182H175.102L182.623 131H177.68L172.215 114.168H172.045L166.569 131ZM166.26 122.424H177.936V126.025H166.26V122.424ZM184.68 131V109.182H193.287C194.942 109.182 196.352 109.498 197.517 110.13C198.682 110.755 199.569 111.625 200.18 112.74C200.798 113.848 201.107 115.126 201.107 116.575C201.107 118.024 200.795 119.303 200.17 120.411C199.545 121.518 198.639 122.381 197.453 122.999C196.274 123.617 194.846 123.926 193.17 123.926H187.684V120.229H192.425C193.312 120.229 194.044 120.077 194.619 119.771C195.202 119.459 195.635 119.029 195.919 118.482C196.21 117.928 196.356 117.293 196.356 116.575C196.356 115.851 196.21 115.219 195.919 114.679C195.635 114.132 195.202 113.71 194.619 113.411C194.037 113.106 193.298 112.953 192.403 112.953H189.292V131H184.68ZM203.533 109.182H209.222L215.231 123.841H215.486L221.495 109.182H227.184V131H222.709V116.799H222.528L216.882 130.893H213.835L208.189 116.746H208.008V131H203.533V109.182ZM120.795 149.545H123.318L129.249 164.034H129.454L135.386 149.545H137.909V167H135.931V153.739H135.761L130.306 167H128.397L122.943 153.739H122.772V167H120.795V149.545ZM141.418 167V153.909H143.429V167H141.418ZM142.441 151.727C142.048 151.727 141.71 151.594 141.426 151.327C141.148 151.06 141.009 150.739 141.009 150.364C141.009 149.989 141.148 149.668 141.426 149.401C141.71 149.134 142.048 149 142.441 149C142.833 149 143.168 149.134 143.446 149.401C143.73 149.668 143.872 149.989 143.872 150.364C143.872 150.739 143.73 151.06 143.446 151.327C143.168 151.594 142.833 151.727 142.441 151.727ZM151.975 167.273C150.748 167.273 149.691 166.983 148.805 166.403C147.918 165.824 147.237 165.026 146.759 164.009C146.282 162.991 146.043 161.83 146.043 160.523C146.043 159.193 146.288 158.02 146.776 157.003C147.271 155.98 147.958 155.182 148.839 154.608C149.725 154.028 150.759 153.739 151.941 153.739C152.862 153.739 153.691 153.909 154.43 154.25C155.168 154.591 155.774 155.068 156.245 155.682C156.717 156.295 157.009 157.011 157.123 157.83H155.112C154.958 157.233 154.617 156.705 154.089 156.244C153.566 155.778 152.862 155.545 151.975 155.545C151.191 155.545 150.504 155.75 149.913 156.159C149.328 156.562 148.87 157.134 148.541 157.872C148.217 158.605 148.055 159.466 148.055 160.455C148.055 161.466 148.214 162.347 148.532 163.097C148.856 163.847 149.311 164.429 149.896 164.844C150.487 165.259 151.18 165.466 151.975 165.466C152.498 165.466 152.972 165.375 153.399 165.193C153.825 165.011 154.186 164.75 154.481 164.409C154.776 164.068 154.987 163.659 155.112 163.182H157.123C157.009 163.955 156.728 164.651 156.279 165.27C155.836 165.884 155.248 166.372 154.515 166.736C153.788 167.094 152.941 167.273 151.975 167.273ZM159.607 167V153.909H161.551V155.886H161.687C161.926 155.239 162.357 154.713 162.982 154.31C163.607 153.906 164.312 153.705 165.096 153.705C165.244 153.705 165.428 153.707 165.65 153.713C165.872 153.719 166.039 153.727 166.153 153.739V155.784C166.085 155.767 165.928 155.741 165.684 155.707C165.445 155.668 165.193 155.648 164.926 155.648C164.289 155.648 163.721 155.781 163.221 156.048C162.727 156.31 162.335 156.673 162.045 157.139C161.761 157.599 161.619 158.125 161.619 158.716V167H159.607ZM173.001 167.273C171.819 167.273 170.782 166.991 169.89 166.429C169.004 165.866 168.31 165.08 167.81 164.068C167.316 163.057 167.069 161.875 167.069 160.523C167.069 159.159 167.316 157.969 167.81 156.952C168.31 155.935 169.004 155.145 169.89 154.582C170.782 154.02 171.819 153.739 173.001 153.739C174.183 153.739 175.217 154.02 176.103 154.582C176.995 155.145 177.688 155.935 178.183 156.952C178.683 157.969 178.933 159.159 178.933 160.523C178.933 161.875 178.683 163.057 178.183 164.068C177.688 165.08 176.995 165.866 176.103 166.429C175.217 166.991 174.183 167.273 173.001 167.273ZM173.001 165.466C173.899 165.466 174.637 165.236 175.217 164.776C175.796 164.315 176.225 163.71 176.504 162.96C176.782 162.21 176.921 161.398 176.921 160.523C176.921 159.648 176.782 158.832 176.504 158.077C176.225 157.321 175.796 156.71 175.217 156.244C174.637 155.778 173.899 155.545 173.001 155.545C172.103 155.545 171.364 155.778 170.785 156.244C170.205 156.71 169.776 157.321 169.498 158.077C169.22 158.832 169.08 159.648 169.08 160.523C169.08 161.398 169.22 162.21 169.498 162.96C169.776 163.71 170.205 164.315 170.785 164.776C171.364 165.236 172.103 165.466 173.001 165.466ZM190.82 156.841L189.013 157.352C188.899 157.051 188.732 156.759 188.51 156.474C188.294 156.185 187.999 155.946 187.624 155.759C187.249 155.571 186.769 155.477 186.183 155.477C185.382 155.477 184.715 155.662 184.18 156.031C183.652 156.395 183.388 156.858 183.388 157.42C183.388 157.92 183.57 158.315 183.933 158.605C184.297 158.895 184.865 159.136 185.638 159.33L187.581 159.807C188.751 160.091 189.624 160.526 190.197 161.111C190.771 161.69 191.058 162.437 191.058 163.352C191.058 164.102 190.842 164.773 190.411 165.364C189.984 165.955 189.388 166.42 188.621 166.761C187.854 167.102 186.962 167.273 185.945 167.273C184.609 167.273 183.504 166.983 182.629 166.403C181.754 165.824 181.2 164.977 180.967 163.864L182.876 163.386C183.058 164.091 183.402 164.619 183.908 164.972C184.419 165.324 185.087 165.5 185.911 165.5C186.848 165.5 187.592 165.301 188.144 164.903C188.7 164.5 188.979 164.017 188.979 163.455C188.979 163 188.82 162.619 188.501 162.312C188.183 162 187.695 161.767 187.036 161.614L184.854 161.102C183.655 160.818 182.774 160.378 182.212 159.781C181.655 159.179 181.376 158.426 181.376 157.523C181.376 156.784 181.584 156.131 181.999 155.562C182.419 154.994 182.99 154.548 183.712 154.224C184.439 153.901 185.263 153.739 186.183 153.739C187.479 153.739 188.496 154.023 189.234 154.591C189.979 155.159 190.507 155.909 190.82 156.841ZM199.119 167.273C197.857 167.273 196.769 166.994 195.854 166.438C194.945 165.875 194.244 165.091 193.749 164.085C193.261 163.074 193.016 161.898 193.016 160.557C193.016 159.216 193.261 158.034 193.749 157.011C194.244 155.983 194.931 155.182 195.812 154.608C196.698 154.028 197.732 153.739 198.914 153.739C199.596 153.739 200.269 153.852 200.934 154.08C201.599 154.307 202.204 154.676 202.749 155.188C203.295 155.693 203.729 156.364 204.053 157.199C204.377 158.034 204.539 159.062 204.539 160.284V161.136H194.448V159.398H202.494C202.494 158.659 202.346 158 202.05 157.42C201.761 156.841 201.346 156.384 200.806 156.048C200.272 155.713 199.641 155.545 198.914 155.545C198.113 155.545 197.42 155.744 196.835 156.142C196.255 156.534 195.809 157.045 195.496 157.676C195.184 158.307 195.028 158.983 195.028 159.705V160.864C195.028 161.852 195.198 162.69 195.539 163.378C195.886 164.06 196.366 164.58 196.979 164.938C197.593 165.29 198.306 165.466 199.119 165.466C199.647 165.466 200.124 165.392 200.55 165.244C200.982 165.091 201.354 164.864 201.667 164.562C201.979 164.256 202.221 163.875 202.391 163.42L204.335 163.966C204.13 164.625 203.786 165.205 203.303 165.705C202.82 166.199 202.224 166.585 201.513 166.864C200.803 167.136 200.005 167.273 199.119 167.273ZM207.143 167V153.909H209.086V155.886H209.222C209.461 155.239 209.893 154.713 210.518 154.31C211.143 153.906 211.847 153.705 212.631 153.705C212.779 153.705 212.964 153.707 213.185 153.713C213.407 153.719 213.575 153.727 213.688 153.739V155.784C213.62 155.767 213.464 155.741 213.219 155.707C212.981 155.668 212.728 155.648 212.461 155.648C211.825 155.648 211.256 155.781 210.756 156.048C210.262 156.31 209.87 156.673 209.58 157.139C209.296 157.599 209.154 158.125 209.154 158.716V167H207.143ZM226.719 153.909L221.878 167H219.833L214.992 153.909H217.174L220.788 164.341H220.924L224.538 153.909H226.719ZM228.918 167V153.909H230.93V167H228.918ZM229.941 151.727C229.549 151.727 229.211 151.594 228.927 151.327C228.648 151.06 228.509 150.739 228.509 150.364C228.509 149.989 228.648 149.668 228.927 149.401C229.211 149.134 229.549 149 229.941 149C230.333 149 230.668 149.134 230.947 149.401C231.231 149.668 231.373 149.989 231.373 150.364C231.373 150.739 231.231 151.06 230.947 151.327C230.668 151.594 230.333 151.727 229.941 151.727ZM239.476 167.273C238.248 167.273 237.192 166.983 236.305 166.403C235.419 165.824 234.737 165.026 234.26 164.009C233.783 162.991 233.544 161.83 233.544 160.523C233.544 159.193 233.788 158.02 234.277 157.003C234.771 155.98 235.459 155.182 236.339 154.608C237.226 154.028 238.26 153.739 239.442 153.739C240.362 153.739 241.192 153.909 241.93 154.25C242.669 154.591 243.274 155.068 243.746 155.682C244.217 156.295 244.51 157.011 244.623 157.83H242.612C242.459 157.233 242.118 156.705 241.589 156.244C241.067 155.778 240.362 155.545 239.476 155.545C238.692 155.545 238.004 155.75 237.413 156.159C236.828 156.562 236.371 157.134 236.041 157.872C235.717 158.605 235.555 159.466 235.555 160.455C235.555 161.466 235.714 162.347 236.033 163.097C236.356 163.847 236.811 164.429 237.396 164.844C237.987 165.259 238.68 165.466 239.476 165.466C239.998 165.466 240.473 165.375 240.899 165.193C241.325 165.011 241.686 164.75 241.981 164.409C242.277 164.068 242.487 163.659 242.612 163.182H244.623C244.51 163.955 244.229 164.651 243.78 165.27C243.337 165.884 242.748 166.372 242.015 166.736C241.288 167.094 240.442 167.273 239.476 167.273ZM252.596 167.273C251.335 167.273 250.247 166.994 249.332 166.438C248.423 165.875 247.721 165.091 247.227 164.085C246.738 163.074 246.494 161.898 246.494 160.557C246.494 159.216 246.738 158.034 247.227 157.011C247.721 155.983 248.409 155.182 249.29 154.608C250.176 154.028 251.21 153.739 252.392 153.739C253.074 153.739 253.747 153.852 254.412 154.08C255.077 154.307 255.682 154.676 256.227 155.188C256.773 155.693 257.207 156.364 257.531 157.199C257.855 158.034 258.017 159.062 258.017 160.284V161.136H247.926V159.398H255.971C255.971 158.659 255.824 158 255.528 157.42C255.238 156.841 254.824 156.384 254.284 156.048C253.75 155.713 253.119 155.545 252.392 155.545C251.591 155.545 250.898 155.744 250.312 156.142C249.733 156.534 249.287 157.045 248.974 157.676C248.662 158.307 248.506 158.983 248.506 159.705V160.864C248.506 161.852 248.676 162.69 249.017 163.378C249.363 164.06 249.844 164.58 250.457 164.938C251.071 165.29 251.784 165.466 252.596 165.466C253.125 165.466 253.602 165.392 254.028 165.244C254.46 165.091 254.832 164.864 255.145 164.562C255.457 164.256 255.699 163.875 255.869 163.42L257.812 163.966C257.608 164.625 257.264 165.205 256.781 165.705C256.298 166.199 255.702 166.585 254.991 166.864C254.281 167.136 253.483 167.273 252.596 167.273ZM269.893 156.841L268.086 157.352C267.973 157.051 267.805 156.759 267.584 156.474C267.368 156.185 267.072 155.946 266.697 155.759C266.322 155.571 265.842 155.477 265.257 155.477C264.456 155.477 263.788 155.662 263.254 156.031C262.726 156.395 262.461 156.858 262.461 157.42C262.461 157.92 262.643 158.315 263.007 158.605C263.371 158.895 263.939 159.136 264.711 159.33L266.655 159.807C267.825 160.091 268.697 160.526 269.271 161.111C269.845 161.69 270.132 162.437 270.132 163.352C270.132 164.102 269.916 164.773 269.484 165.364C269.058 165.955 268.461 166.42 267.694 166.761C266.927 167.102 266.035 167.273 265.018 167.273C263.683 167.273 262.578 166.983 261.703 166.403C260.828 165.824 260.274 164.977 260.041 163.864L261.95 163.386C262.132 164.091 262.476 164.619 262.981 164.972C263.493 165.324 264.16 165.5 264.984 165.5C265.922 165.5 266.666 165.301 267.217 164.903C267.774 164.5 268.052 164.017 268.052 163.455C268.052 163 267.893 162.619 267.575 162.312C267.257 162 266.768 161.767 266.109 161.614L263.927 161.102C262.728 160.818 261.848 160.378 261.285 159.781C260.728 159.179 260.45 158.426 260.45 157.523C260.45 156.784 260.657 156.131 261.072 155.562C261.493 154.994 262.064 154.548 262.785 154.224C263.513 153.901 264.336 153.739 265.257 153.739C266.552 153.739 267.569 154.023 268.308 154.591C269.052 155.159 269.581 155.909 269.893 156.841ZM140.566 191H138.452C138.327 190.392 138.108 189.858 137.796 189.398C137.489 188.938 137.114 188.551 136.671 188.239C136.233 187.92 135.747 187.682 135.213 187.523C134.679 187.364 134.122 187.284 133.543 187.284C132.486 187.284 131.529 187.551 130.671 188.085C129.818 188.619 129.139 189.406 128.634 190.446C128.134 191.486 127.884 192.761 127.884 194.273C127.884 195.784 128.134 197.06 128.634 198.099C129.139 199.139 129.818 199.926 130.671 200.46C131.529 200.994 132.486 201.261 133.543 201.261C134.122 201.261 134.679 201.182 135.213 201.023C135.747 200.864 136.233 200.628 136.671 200.315C137.114 199.997 137.489 199.608 137.796 199.148C138.108 198.682 138.327 198.148 138.452 197.545H140.566C140.406 198.437 140.117 199.236 139.696 199.94C139.276 200.645 138.753 201.244 138.128 201.739C137.503 202.227 136.801 202.599 136.023 202.855C135.25 203.111 134.423 203.239 133.543 203.239C132.054 203.239 130.73 202.875 129.571 202.148C128.412 201.42 127.5 200.386 126.835 199.045C126.171 197.705 125.838 196.114 125.838 194.273C125.838 192.432 126.171 190.841 126.835 189.5C127.5 188.159 128.412 187.125 129.571 186.398C130.73 185.67 132.054 185.307 133.543 185.307C134.423 185.307 135.25 185.435 136.023 185.69C136.801 185.946 137.503 186.321 138.128 186.815C138.753 187.304 139.276 187.901 139.696 188.605C140.117 189.304 140.406 190.102 140.566 191ZM145.264 185.545V203H143.252V185.545H145.264ZM153.81 203.273C152.628 203.273 151.591 202.991 150.699 202.429C149.813 201.866 149.119 201.08 148.619 200.068C148.125 199.057 147.878 197.875 147.878 196.523C147.878 195.159 148.125 193.969 148.619 192.952C149.119 191.935 149.813 191.145 150.699 190.582C151.591 190.02 152.628 189.739 153.81 189.739C154.992 189.739 156.026 190.02 156.912 190.582C157.804 191.145 158.497 191.935 158.992 192.952C159.492 193.969 159.742 195.159 159.742 196.523C159.742 197.875 159.492 199.057 158.992 200.068C158.497 201.08 157.804 201.866 156.912 202.429C156.026 202.991 154.992 203.273 153.81 203.273ZM153.81 201.466C154.708 201.466 155.446 201.236 156.026 200.776C156.605 200.315 157.034 199.71 157.313 198.96C157.591 198.21 157.73 197.398 157.73 196.523C157.73 195.648 157.591 194.832 157.313 194.077C157.034 193.321 156.605 192.71 156.026 192.244C155.446 191.778 154.708 191.545 153.81 191.545C152.912 191.545 152.173 191.778 151.594 192.244C151.014 192.71 150.585 193.321 150.307 194.077C150.029 194.832 149.889 195.648 149.889 196.523C149.889 197.398 150.029 198.21 150.307 198.96C150.585 199.71 151.014 200.315 151.594 200.776C152.173 201.236 152.912 201.466 153.81 201.466ZM170.606 197.648V189.909H172.617V203H170.606V200.784H170.47C170.163 201.449 169.685 202.014 169.038 202.48C168.39 202.94 167.572 203.17 166.583 203.17C165.765 203.17 165.038 202.991 164.401 202.634C163.765 202.27 163.265 201.724 162.901 200.997C162.538 200.264 162.356 199.341 162.356 198.227V189.909H164.367V198.091C164.367 199.045 164.634 199.807 165.168 200.375C165.708 200.943 166.396 201.227 167.231 201.227C167.731 201.227 168.239 201.099 168.756 200.844C169.279 200.588 169.717 200.196 170.069 199.668C170.427 199.139 170.606 198.466 170.606 197.648ZM180.788 203.273C179.698 203.273 178.734 202.997 177.899 202.446C177.064 201.889 176.411 201.105 175.939 200.094C175.467 199.077 175.232 197.875 175.232 196.489C175.232 195.114 175.467 193.92 175.939 192.909C176.411 191.898 177.067 191.116 177.908 190.565C178.749 190.014 179.72 189.739 180.822 189.739C181.675 189.739 182.348 189.881 182.842 190.165C183.342 190.443 183.723 190.761 183.984 191.119C184.251 191.472 184.459 191.761 184.607 191.989H184.777V185.545H186.788V203H184.845V200.989H184.607C184.459 201.227 184.249 201.528 183.976 201.892C183.703 202.25 183.314 202.571 182.808 202.855C182.303 203.134 181.629 203.273 180.788 203.273ZM181.061 201.466C181.868 201.466 182.55 201.256 183.107 200.835C183.663 200.409 184.087 199.821 184.376 199.071C184.666 198.315 184.811 197.443 184.811 196.455C184.811 195.477 184.669 194.622 184.385 193.889C184.101 193.151 183.68 192.577 183.124 192.168C182.567 191.753 181.879 191.545 181.061 191.545C180.209 191.545 179.499 191.764 178.93 192.202C178.368 192.634 177.945 193.222 177.661 193.966C177.382 194.705 177.243 195.534 177.243 196.455C177.243 197.386 177.385 198.233 177.669 198.994C177.959 199.75 178.385 200.352 178.948 200.801C179.516 201.244 180.22 201.466 181.061 201.466ZM197.795 194.58V196.455H190.159V194.58H197.795ZM202.89 195.125V203H200.879V189.909H202.822V191.955H202.992C203.299 191.29 203.765 190.756 204.39 190.352C205.015 189.943 205.822 189.739 206.81 189.739C207.697 189.739 208.472 189.92 209.137 190.284C209.802 190.642 210.319 191.188 210.688 191.92C211.058 192.648 211.242 193.568 211.242 194.682V203H209.231V194.818C209.231 193.79 208.964 192.989 208.43 192.415C207.896 191.835 207.163 191.545 206.231 191.545C205.589 191.545 205.015 191.685 204.509 191.963C204.009 192.241 203.614 192.648 203.325 193.182C203.035 193.716 202.89 194.364 202.89 195.125ZM218.314 203.307C217.484 203.307 216.731 203.151 216.055 202.838C215.379 202.52 214.842 202.062 214.445 201.466C214.047 200.864 213.848 200.136 213.848 199.284C213.848 198.534 213.996 197.926 214.291 197.46C214.587 196.989 214.981 196.619 215.476 196.352C215.97 196.085 216.516 195.886 217.112 195.756C217.714 195.619 218.32 195.511 218.928 195.432C219.723 195.33 220.368 195.253 220.862 195.202C221.362 195.145 221.726 195.051 221.953 194.92C222.186 194.79 222.303 194.562 222.303 194.239V194.17C222.303 193.33 222.072 192.676 221.612 192.21C221.158 191.744 220.467 191.511 219.541 191.511C218.581 191.511 217.828 191.722 217.283 192.142C216.737 192.562 216.354 193.011 216.132 193.489L214.223 192.807C214.564 192.011 215.018 191.392 215.587 190.949C216.16 190.5 216.785 190.187 217.462 190.011C218.143 189.83 218.814 189.739 219.473 189.739C219.893 189.739 220.376 189.79 220.922 189.892C221.473 189.989 222.004 190.19 222.516 190.497C223.033 190.804 223.462 191.267 223.803 191.886C224.143 192.506 224.314 193.335 224.314 194.375V203H222.303V201.227H222.2C222.064 201.511 221.837 201.815 221.518 202.139C221.2 202.463 220.777 202.739 220.249 202.966C219.72 203.193 219.075 203.307 218.314 203.307ZM218.621 201.5C219.416 201.5 220.087 201.344 220.632 201.031C221.183 200.719 221.598 200.315 221.876 199.821C222.16 199.327 222.303 198.807 222.303 198.261V196.42C222.217 196.523 222.03 196.616 221.74 196.702C221.456 196.781 221.126 196.852 220.751 196.915C220.382 196.972 220.021 197.023 219.669 197.068C219.322 197.108 219.041 197.142 218.825 197.17C218.303 197.239 217.814 197.349 217.359 197.503C216.91 197.651 216.547 197.875 216.268 198.176C215.996 198.472 215.859 198.875 215.859 199.386C215.859 200.085 216.118 200.614 216.635 200.972C217.158 201.324 217.82 201.5 218.621 201.5ZM233.222 189.909V191.614H226.438V189.909H233.222ZM228.415 186.773H230.427V199.25C230.427 199.818 230.509 200.244 230.674 200.528C230.844 200.807 231.06 200.994 231.322 201.091C231.589 201.182 231.87 201.227 232.165 201.227C232.387 201.227 232.569 201.216 232.711 201.193C232.853 201.165 232.967 201.142 233.052 201.125L233.461 202.932C233.324 202.983 233.134 203.034 232.89 203.085C232.646 203.142 232.336 203.17 231.961 203.17C231.393 203.17 230.836 203.048 230.29 202.804C229.751 202.56 229.302 202.188 228.944 201.688C228.592 201.188 228.415 200.557 228.415 199.795V186.773ZM235.792 203V189.909H237.803V203H235.792ZM236.815 187.727C236.422 187.727 236.084 187.594 235.8 187.327C235.522 187.06 235.383 186.739 235.383 186.364C235.383 185.989 235.522 185.668 235.8 185.401C236.084 185.134 236.422 185 236.815 185C237.207 185 237.542 185.134 237.82 185.401C238.104 185.668 238.246 185.989 238.246 186.364C238.246 186.739 238.104 187.06 237.82 187.327C237.542 187.594 237.207 187.727 236.815 187.727ZM251.736 189.909L246.895 203H244.849L240.008 189.909H242.19L245.804 200.341H245.94L249.554 189.909H251.736ZM258.954 203.273C257.693 203.273 256.605 202.994 255.69 202.438C254.781 201.875 254.079 201.091 253.585 200.085C253.096 199.074 252.852 197.898 252.852 196.557C252.852 195.216 253.096 194.034 253.585 193.011C254.079 191.983 254.767 191.182 255.648 190.608C256.534 190.028 257.568 189.739 258.75 189.739C259.432 189.739 260.105 189.852 260.77 190.08C261.434 190.307 262.04 190.676 262.585 191.188C263.13 191.693 263.565 192.364 263.889 193.199C264.213 194.034 264.375 195.062 264.375 196.284V197.136H254.284V195.398H262.329C262.329 194.659 262.182 194 261.886 193.42C261.596 192.841 261.182 192.384 260.642 192.048C260.108 191.713 259.477 191.545 258.75 191.545C257.949 191.545 257.255 191.744 256.67 192.142C256.091 192.534 255.645 193.045 255.332 193.676C255.02 194.307 254.863 194.983 254.863 195.705V196.864C254.863 197.852 255.034 198.69 255.375 199.378C255.721 200.06 256.202 200.58 256.815 200.938C257.429 201.29 258.142 201.466 258.954 201.466C259.483 201.466 259.96 201.392 260.386 201.244C260.818 201.091 261.19 200.864 261.503 200.562C261.815 200.256 262.057 199.875 262.227 199.42L264.17 199.966C263.966 200.625 263.622 201.205 263.139 201.705C262.656 202.199 262.059 202.585 261.349 202.864C260.639 203.136 259.841 203.273 258.954 203.273ZM127.987 230.273C127.987 232.114 127.655 233.705 126.99 235.045C126.325 236.386 125.413 237.42 124.254 238.148C123.095 238.875 121.771 239.239 120.283 239.239C118.794 239.239 117.47 238.875 116.311 238.148C115.152 237.42 114.24 236.386 113.575 235.045C112.91 233.705 112.578 232.114 112.578 230.273C112.578 228.432 112.91 226.841 113.575 225.5C114.24 224.159 115.152 223.125 116.311 222.398C117.47 221.67 118.794 221.307 120.283 221.307C121.771 221.307 123.095 221.67 124.254 222.398C125.413 223.125 126.325 224.159 126.99 225.5C127.655 226.841 127.987 228.432 127.987 230.273ZM125.942 230.273C125.942 228.761 125.689 227.486 125.183 226.446C124.683 225.406 124.004 224.619 123.146 224.085C122.294 223.551 121.339 223.284 120.283 223.284C119.226 223.284 118.268 223.551 117.41 224.085C116.558 224.619 115.879 225.406 115.373 226.446C114.873 227.486 114.623 228.761 114.623 230.273C114.623 231.784 114.873 233.06 115.373 234.099C115.879 235.139 116.558 235.926 117.41 236.46C118.268 236.994 119.226 237.261 120.283 237.261C121.339 237.261 122.294 236.994 123.146 236.46C124.004 235.926 124.683 235.139 125.183 234.099C125.689 233.06 125.942 231.784 125.942 230.273ZM130.812 243.909V225.909H132.755V227.989H132.994C133.142 227.761 133.346 227.472 133.608 227.119C133.875 226.761 134.255 226.443 134.75 226.165C135.25 225.881 135.926 225.739 136.778 225.739C137.88 225.739 138.852 226.014 139.693 226.565C140.534 227.116 141.19 227.898 141.662 228.909C142.133 229.92 142.369 231.114 142.369 232.489C142.369 233.875 142.133 235.077 141.662 236.094C141.19 237.105 140.537 237.889 139.702 238.446C138.866 238.997 137.903 239.273 136.812 239.273C135.971 239.273 135.298 239.134 134.792 238.855C134.287 238.571 133.898 238.25 133.625 237.892C133.352 237.528 133.142 237.227 132.994 236.989H132.824V243.909H130.812ZM132.79 232.455C132.79 233.443 132.934 234.315 133.224 235.071C133.514 235.821 133.937 236.409 134.494 236.835C135.051 237.256 135.733 237.466 136.54 237.466C137.38 237.466 138.082 237.244 138.645 236.801C139.213 236.352 139.639 235.75 139.923 234.994C140.213 234.233 140.358 233.386 140.358 232.455C140.358 231.534 140.216 230.705 139.932 229.966C139.653 229.222 139.23 228.634 138.662 228.202C138.099 227.764 137.392 227.545 136.54 227.545C135.721 227.545 135.034 227.753 134.477 228.168C133.92 228.577 133.5 229.151 133.216 229.889C132.932 230.622 132.79 231.477 132.79 232.455ZM150.47 239.273C149.209 239.273 148.121 238.994 147.206 238.438C146.297 237.875 145.595 237.091 145.101 236.085C144.612 235.074 144.368 233.898 144.368 232.557C144.368 231.216 144.612 230.034 145.101 229.011C145.595 227.983 146.282 227.182 147.163 226.608C148.049 226.028 149.084 225.739 150.265 225.739C150.947 225.739 151.621 225.852 152.285 226.08C152.95 226.307 153.555 226.676 154.101 227.188C154.646 227.693 155.081 228.364 155.405 229.199C155.728 230.034 155.89 231.062 155.89 232.284V233.136H145.799V231.398H153.845C153.845 230.659 153.697 230 153.402 229.42C153.112 228.841 152.697 228.384 152.157 228.048C151.623 227.713 150.993 227.545 150.265 227.545C149.464 227.545 148.771 227.744 148.186 228.142C147.606 228.534 147.16 229.045 146.848 229.676C146.535 230.307 146.379 230.983 146.379 231.705V232.864C146.379 233.852 146.549 234.69 146.89 235.378C147.237 236.06 147.717 236.58 148.331 236.938C148.944 237.29 149.657 237.466 150.47 237.466C150.998 237.466 151.476 237.392 151.902 237.244C152.334 237.091 152.706 236.864 153.018 236.562C153.331 236.256 153.572 235.875 153.743 235.42L155.686 235.966C155.481 236.625 155.138 237.205 154.655 237.705C154.172 238.199 153.575 238.585 152.865 238.864C152.155 239.136 151.356 239.273 150.47 239.273ZM160.505 231.125V239H158.494V225.909H160.437V227.955H160.608C160.915 227.29 161.38 226.756 162.005 226.352C162.63 225.943 163.437 225.739 164.426 225.739C165.312 225.739 166.088 225.92 166.753 226.284C167.417 226.642 167.934 227.188 168.304 227.92C168.673 228.648 168.858 229.568 168.858 230.682V239H166.846V230.818C166.846 229.79 166.579 228.989 166.045 228.415C165.511 227.835 164.778 227.545 163.846 227.545C163.204 227.545 162.63 227.685 162.125 227.963C161.625 228.241 161.23 228.648 160.94 229.182C160.65 229.716 160.505 230.364 160.505 231.125ZM170.294 223.42V221.545H183.385V223.42H177.896V239H175.782V223.42H170.294ZM189.508 239.273C188.247 239.273 187.159 238.994 186.244 238.438C185.335 237.875 184.633 237.091 184.139 236.085C183.65 235.074 183.406 233.898 183.406 232.557C183.406 231.216 183.65 230.034 184.139 229.011C184.633 227.983 185.321 227.182 186.201 226.608C187.088 226.028 188.122 225.739 189.304 225.739C189.985 225.739 190.659 225.852 191.324 226.08C191.988 226.307 192.593 226.676 193.139 227.188C193.684 227.693 194.119 228.364 194.443 229.199C194.767 230.034 194.929 231.062 194.929 232.284V233.136H184.838V231.398H192.883C192.883 230.659 192.735 230 192.44 229.42C192.15 228.841 191.735 228.384 191.196 228.048C190.662 227.713 190.031 227.545 189.304 227.545C188.503 227.545 187.809 227.744 187.224 228.142C186.645 228.534 186.199 229.045 185.886 229.676C185.574 230.307 185.417 230.983 185.417 231.705V232.864C185.417 233.852 185.588 234.69 185.929 235.378C186.275 236.06 186.755 236.58 187.369 236.938C187.983 237.29 188.696 237.466 189.508 237.466C190.037 237.466 190.514 237.392 190.94 237.244C191.372 237.091 191.744 236.864 192.056 236.562C192.369 236.256 192.61 235.875 192.781 235.42L194.724 235.966C194.52 236.625 194.176 237.205 193.693 237.705C193.21 238.199 192.613 238.585 191.903 238.864C191.193 239.136 190.395 239.273 189.508 239.273ZM199.544 221.545V239H197.532V221.545H199.544ZM208.26 239.273C206.999 239.273 205.911 238.994 204.996 238.438C204.087 237.875 203.385 237.091 202.891 236.085C202.402 235.074 202.158 233.898 202.158 232.557C202.158 231.216 202.402 230.034 202.891 229.011C203.385 227.983 204.073 227.182 204.953 226.608C205.84 226.028 206.874 225.739 208.056 225.739C208.738 225.739 209.411 225.852 210.076 226.08C210.74 226.307 211.345 226.676 211.891 227.188C212.436 227.693 212.871 228.364 213.195 229.199C213.519 230.034 213.681 231.062 213.681 232.284V233.136H203.59V231.398H211.635C211.635 230.659 211.488 230 211.192 229.42C210.902 228.841 210.488 228.384 209.948 228.048C209.414 227.713 208.783 227.545 208.056 227.545C207.255 227.545 206.561 227.744 205.976 228.142C205.397 228.534 204.951 229.045 204.638 229.676C204.326 230.307 204.169 230.983 204.169 231.705V232.864C204.169 233.852 204.34 234.69 204.681 235.378C205.027 236.06 205.507 236.58 206.121 236.938C206.735 237.29 207.448 237.466 208.26 237.466C208.789 237.466 209.266 237.392 209.692 237.244C210.124 237.091 210.496 236.864 210.809 236.562C211.121 236.256 211.363 235.875 211.533 235.42L213.476 235.966C213.272 236.625 212.928 237.205 212.445 237.705C211.962 238.199 211.365 238.585 210.655 238.864C209.945 239.136 209.147 239.273 208.26 239.273ZM216.284 239V225.909H218.228V227.955H218.398C218.671 227.256 219.111 226.713 219.719 226.327C220.327 225.935 221.057 225.739 221.909 225.739C222.773 225.739 223.492 225.935 224.066 226.327C224.645 226.713 225.097 227.256 225.421 227.955H225.557C225.892 227.278 226.395 226.741 227.066 226.344C227.736 225.94 228.54 225.739 229.478 225.739C230.648 225.739 231.605 226.105 232.35 226.838C233.094 227.565 233.466 228.699 233.466 230.239V239H231.455V230.239C231.455 229.273 231.191 228.582 230.662 228.168C230.134 227.753 229.512 227.545 228.796 227.545C227.875 227.545 227.162 227.824 226.657 228.381C226.151 228.932 225.898 229.631 225.898 230.477V239H223.853V230.034C223.853 229.29 223.611 228.69 223.128 228.236C222.645 227.776 222.023 227.545 221.262 227.545C220.739 227.545 220.25 227.685 219.796 227.963C219.347 228.241 218.983 228.628 218.705 229.122C218.432 229.611 218.296 230.176 218.296 230.818V239H216.284ZM242.176 239.273C240.915 239.273 239.827 238.994 238.912 238.438C238.003 237.875 237.301 237.091 236.807 236.085C236.318 235.074 236.074 233.898 236.074 232.557C236.074 231.216 236.318 230.034 236.807 229.011C237.301 227.983 237.989 227.182 238.87 226.608C239.756 226.028 240.79 225.739 241.972 225.739C242.654 225.739 243.327 225.852 243.992 226.08C244.657 226.307 245.262 226.676 245.807 227.188C246.353 227.693 246.787 228.364 247.111 229.199C247.435 230.034 247.597 231.062 247.597 232.284V233.136H237.506V231.398H245.551C245.551 230.659 245.404 230 245.108 229.42C244.818 228.841 244.404 228.384 243.864 228.048C243.33 227.713 242.699 227.545 241.972 227.545C241.171 227.545 240.478 227.744 239.892 228.142C239.313 228.534 238.867 229.045 238.554 229.676C238.242 230.307 238.085 230.983 238.085 231.705V232.864C238.085 233.852 238.256 234.69 238.597 235.378C238.943 236.06 239.424 236.58 240.037 236.938C240.651 237.29 241.364 237.466 242.176 237.466C242.705 237.466 243.182 237.392 243.608 237.244C244.04 237.091 244.412 236.864 244.725 236.562C245.037 236.256 245.279 235.875 245.449 235.42L247.392 235.966C247.188 236.625 246.844 237.205 246.361 237.705C245.878 238.199 245.282 238.585 244.571 238.864C243.861 239.136 243.063 239.273 242.176 239.273ZM255.894 225.909V227.614H249.11V225.909H255.894ZM251.087 222.773H253.098V235.25C253.098 235.818 253.181 236.244 253.345 236.528C253.516 236.807 253.732 236.994 253.993 237.091C254.26 237.182 254.541 237.227 254.837 237.227C255.058 237.227 255.24 237.216 255.382 237.193C255.524 237.165 255.638 237.142 255.723 237.125L256.132 238.932C255.996 238.983 255.806 239.034 255.561 239.085C255.317 239.142 255.007 239.17 254.632 239.17C254.064 239.17 253.507 239.048 252.962 238.804C252.422 238.56 251.973 238.188 251.615 237.688C251.263 237.188 251.087 236.557 251.087 235.795V222.773ZM258.463 239V225.909H260.406V227.886H260.543C260.781 227.239 261.213 226.713 261.838 226.31C262.463 225.906 263.168 225.705 263.952 225.705C264.1 225.705 264.284 225.707 264.506 225.713C264.727 225.719 264.895 225.727 265.009 225.739V227.784C264.941 227.767 264.784 227.741 264.54 227.707C264.301 227.668 264.048 227.648 263.781 227.648C263.145 227.648 262.577 227.781 262.077 228.048C261.583 228.31 261.191 228.673 260.901 229.139C260.617 229.599 260.475 230.125 260.475 230.716V239H258.463ZM268.631 243.909C268.29 243.909 267.986 243.881 267.719 243.824C267.452 243.773 267.267 243.722 267.165 243.67L267.676 241.898C268.165 242.023 268.597 242.068 268.972 242.034C269.347 242 269.679 241.832 269.969 241.531C270.264 241.236 270.534 240.756 270.779 240.091L271.154 239.068L266.313 225.909H268.494L272.108 236.341H272.244L275.858 225.909H278.04L272.483 240.909C272.233 241.585 271.923 242.145 271.554 242.588C271.185 243.037 270.756 243.369 270.267 243.585C269.784 243.801 269.239 243.909 268.631 243.909ZM149.145 261.909C149.042 261.045 148.628 260.375 147.9 259.898C147.173 259.42 146.281 259.182 145.224 259.182C144.452 259.182 143.775 259.307 143.196 259.557C142.622 259.807 142.173 260.151 141.849 260.588C141.531 261.026 141.372 261.523 141.372 262.08C141.372 262.545 141.483 262.946 141.704 263.281C141.932 263.611 142.221 263.886 142.574 264.108C142.926 264.324 143.295 264.503 143.682 264.645C144.068 264.781 144.423 264.892 144.747 264.977L146.52 265.455C146.974 265.574 147.48 265.739 148.037 265.949C148.599 266.159 149.136 266.446 149.648 266.81C150.165 267.168 150.591 267.628 150.926 268.19C151.261 268.753 151.429 269.443 151.429 270.261C151.429 271.205 151.182 272.057 150.687 272.818C150.199 273.58 149.483 274.185 148.54 274.634C147.602 275.082 146.463 275.307 145.122 275.307C143.872 275.307 142.79 275.105 141.875 274.702C140.966 274.298 140.25 273.736 139.727 273.014C139.21 272.293 138.917 271.455 138.849 270.5H141.031C141.088 271.159 141.309 271.705 141.696 272.136C142.088 272.562 142.582 272.881 143.179 273.091C143.781 273.295 144.429 273.398 145.122 273.398C145.929 273.398 146.653 273.267 147.295 273.006C147.937 272.739 148.446 272.369 148.821 271.898C149.196 271.42 149.383 270.864 149.383 270.227C149.383 269.648 149.221 269.176 148.898 268.812C148.574 268.449 148.148 268.153 147.619 267.926C147.091 267.699 146.52 267.5 145.906 267.33L143.758 266.716C142.395 266.324 141.315 265.764 140.52 265.037C139.724 264.31 139.327 263.358 139.327 262.182C139.327 261.205 139.591 260.352 140.119 259.625C140.653 258.892 141.369 258.324 142.267 257.92C143.17 257.511 144.179 257.307 145.292 257.307C146.417 257.307 147.417 257.509 148.292 257.912C149.167 258.31 149.861 258.855 150.372 259.548C150.889 260.241 151.162 261.028 151.19 261.909H149.145ZM159.664 275.273C158.402 275.273 157.314 274.994 156.4 274.438C155.491 273.875 154.789 273.091 154.295 272.085C153.806 271.074 153.562 269.898 153.562 268.557C153.562 267.216 153.806 266.034 154.295 265.011C154.789 263.983 155.476 263.182 156.357 262.608C157.243 262.028 158.277 261.739 159.459 261.739C160.141 261.739 160.814 261.852 161.479 262.08C162.144 262.307 162.749 262.676 163.295 263.188C163.84 263.693 164.275 264.364 164.598 265.199C164.922 266.034 165.084 267.062 165.084 268.284V269.136H154.993V267.398H163.039C163.039 266.659 162.891 266 162.596 265.42C162.306 264.841 161.891 264.384 161.351 264.048C160.817 263.713 160.187 263.545 159.459 263.545C158.658 263.545 157.965 263.744 157.38 264.142C156.8 264.534 156.354 265.045 156.042 265.676C155.729 266.307 155.573 266.983 155.573 267.705V268.864C155.573 269.852 155.743 270.69 156.084 271.378C156.431 272.06 156.911 272.58 157.525 272.938C158.138 273.29 158.851 273.466 159.664 273.466C160.192 273.466 160.67 273.392 161.096 273.244C161.527 273.091 161.9 272.864 162.212 272.562C162.525 272.256 162.766 271.875 162.937 271.42L164.88 271.966C164.675 272.625 164.331 273.205 163.848 273.705C163.366 274.199 162.769 274.585 162.059 274.864C161.348 275.136 160.55 275.273 159.664 275.273ZM167.688 275V261.909H169.631V263.886H169.767C170.006 263.239 170.438 262.713 171.063 262.31C171.688 261.906 172.392 261.705 173.177 261.705C173.324 261.705 173.509 261.707 173.731 261.713C173.952 261.719 174.12 261.727 174.233 261.739V263.784C174.165 263.767 174.009 263.741 173.765 263.707C173.526 263.668 173.273 263.648 173.006 263.648C172.37 263.648 171.802 263.781 171.302 264.048C170.807 264.31 170.415 264.673 170.125 265.139C169.841 265.599 169.699 266.125 169.699 266.716V275H167.688ZM187.265 261.909L182.424 275H180.378L175.537 261.909H177.719L181.333 272.341H181.469L185.083 261.909H187.265ZM194.483 275.273C193.222 275.273 192.134 274.994 191.219 274.438C190.31 273.875 189.608 273.091 189.114 272.085C188.625 271.074 188.381 269.898 188.381 268.557C188.381 267.216 188.625 266.034 189.114 265.011C189.608 263.983 190.296 263.182 191.177 262.608C192.063 262.028 193.097 261.739 194.279 261.739C194.961 261.739 195.634 261.852 196.299 262.08C196.963 262.307 197.569 262.676 198.114 263.188C198.659 263.693 199.094 264.364 199.418 265.199C199.742 266.034 199.904 267.062 199.904 268.284V269.136H189.813V267.398H197.858C197.858 266.659 197.711 266 197.415 265.42C197.125 264.841 196.711 264.384 196.171 264.048C195.637 263.713 195.006 263.545 194.279 263.545C193.478 263.545 192.784 263.744 192.199 264.142C191.62 264.534 191.174 265.045 190.861 265.676C190.549 266.307 190.392 266.983 190.392 267.705V268.864C190.392 269.852 190.563 270.69 190.904 271.378C191.25 272.06 191.73 272.58 192.344 272.938C192.958 273.29 193.671 273.466 194.483 273.466C195.012 273.466 195.489 273.392 195.915 273.244C196.347 273.091 196.719 272.864 197.032 272.562C197.344 272.256 197.586 271.875 197.756 271.42L199.699 271.966C199.495 272.625 199.151 273.205 198.668 273.705C198.185 274.199 197.588 274.585 196.878 274.864C196.168 275.136 195.37 275.273 194.483 275.273ZM202.507 275V261.909H204.451V263.886H204.587C204.826 263.239 205.257 262.713 205.882 262.31C206.507 261.906 207.212 261.705 207.996 261.705C208.144 261.705 208.328 261.707 208.55 261.713C208.772 261.719 208.939 261.727 209.053 261.739V263.784C208.985 263.767 208.828 263.741 208.584 263.707C208.346 263.668 208.093 263.648 207.826 263.648C207.189 263.648 206.621 263.781 206.121 264.048C205.627 264.31 205.235 264.673 204.945 265.139C204.661 265.599 204.519 266.125 204.519 266.716V275H202.507ZM212.993 257.545V275H210.981V257.545H212.993ZM221.709 275.273C220.448 275.273 219.36 274.994 218.445 274.438C217.536 273.875 216.834 273.091 216.34 272.085C215.851 271.074 215.607 269.898 215.607 268.557C215.607 267.216 215.851 266.034 216.34 265.011C216.834 263.983 217.522 263.182 218.402 262.608C219.289 262.028 220.323 261.739 221.505 261.739C222.186 261.739 222.86 261.852 223.524 262.08C224.189 262.307 224.794 262.676 225.34 263.188C225.885 263.693 226.32 264.364 226.644 265.199C226.968 266.034 227.13 267.062 227.13 268.284V269.136H217.039V267.398H225.084C225.084 266.659 224.936 266 224.641 265.42C224.351 264.841 223.936 264.384 223.397 264.048C222.862 263.713 222.232 263.545 221.505 263.545C220.703 263.545 220.01 263.744 219.425 264.142C218.845 264.534 218.399 265.045 218.087 265.676C217.774 266.307 217.618 266.983 217.618 267.705V268.864C217.618 269.852 217.789 270.69 218.13 271.378C218.476 272.06 218.956 272.58 219.57 272.938C220.184 273.29 220.897 273.466 221.709 273.466C222.237 273.466 222.715 273.392 223.141 273.244C223.573 273.091 223.945 272.864 224.257 272.562C224.57 272.256 224.811 271.875 224.982 271.42L226.925 271.966C226.72 272.625 226.377 273.205 225.894 273.705C225.411 274.199 224.814 274.585 224.104 274.864C223.394 275.136 222.595 275.273 221.709 275.273ZM239.006 264.841L237.199 265.352C237.085 265.051 236.918 264.759 236.696 264.474C236.48 264.185 236.185 263.946 235.81 263.759C235.435 263.571 234.955 263.477 234.37 263.477C233.568 263.477 232.901 263.662 232.367 264.031C231.838 264.395 231.574 264.858 231.574 265.42C231.574 265.92 231.756 266.315 232.12 266.605C232.483 266.895 233.051 267.136 233.824 267.33L235.767 267.807C236.938 268.091 237.81 268.526 238.384 269.111C238.958 269.69 239.245 270.437 239.245 271.352C239.245 272.102 239.029 272.773 238.597 273.364C238.171 273.955 237.574 274.42 236.807 274.761C236.04 275.102 235.148 275.273 234.131 275.273C232.796 275.273 231.691 274.983 230.816 274.403C229.941 273.824 229.387 272.977 229.154 271.864L231.063 271.386C231.245 272.091 231.588 272.619 232.094 272.972C232.605 273.324 233.273 273.5 234.097 273.5C235.034 273.5 235.779 273.301 236.33 272.903C236.887 272.5 237.165 272.017 237.165 271.455C237.165 271 237.006 270.619 236.688 270.312C236.37 270 235.881 269.767 235.222 269.614L233.04 269.102C231.841 268.818 230.96 268.378 230.398 267.781C229.841 267.179 229.563 266.426 229.563 265.523C229.563 264.784 229.77 264.131 230.185 263.562C230.605 262.994 231.176 262.548 231.898 262.224C232.625 261.901 233.449 261.739 234.37 261.739C235.665 261.739 236.682 262.023 237.421 262.591C238.165 263.159 238.693 263.909 239.006 264.841ZM251.089 264.841L249.282 265.352C249.169 265.051 249.001 264.759 248.779 264.474C248.563 264.185 248.268 263.946 247.893 263.759C247.518 263.571 247.038 263.477 246.453 263.477C245.651 263.477 244.984 263.662 244.45 264.031C243.921 264.395 243.657 264.858 243.657 265.42C243.657 265.92 243.839 266.315 244.203 266.605C244.566 266.895 245.134 267.136 245.907 267.33L247.85 267.807C249.021 268.091 249.893 268.526 250.467 269.111C251.041 269.69 251.328 270.437 251.328 271.352C251.328 272.102 251.112 272.773 250.68 273.364C250.254 273.955 249.657 274.42 248.89 274.761C248.123 275.102 247.231 275.273 246.214 275.273C244.879 275.273 243.774 274.983 242.899 274.403C242.024 273.824 241.47 272.977 241.237 271.864L243.146 271.386C243.328 272.091 243.671 272.619 244.177 272.972C244.688 273.324 245.356 273.5 246.18 273.5C247.117 273.5 247.862 273.301 248.413 272.903C248.97 272.5 249.248 272.017 249.248 271.455C249.248 271 249.089 270.619 248.771 270.312C248.453 270 247.964 269.767 247.305 269.614L245.123 269.102C243.924 268.818 243.044 268.378 242.481 267.781C241.924 267.179 241.646 266.426 241.646 265.523C241.646 264.784 241.853 264.131 242.268 263.562C242.688 262.994 243.259 262.548 243.981 262.224C244.708 261.901 245.532 261.739 246.453 261.739C247.748 261.739 248.765 262.023 249.504 262.591C250.248 263.159 250.776 263.909 251.089 264.841Z" fill="black"/> +<path d="M492.126 130V108.182H496.739V126.197H506.093V130H492.126ZM515.886 130.32C514.231 130.32 512.8 129.968 511.593 129.265C510.392 128.555 509.466 127.567 508.812 126.303C508.159 125.032 507.832 123.558 507.832 121.882C507.832 120.192 508.159 118.714 508.812 117.45C509.466 116.179 510.392 115.192 511.593 114.489C512.8 113.778 514.231 113.423 515.886 113.423C517.541 113.423 518.968 113.778 520.169 114.489C521.376 115.192 522.306 116.179 522.96 117.45C523.613 118.714 523.94 120.192 523.94 121.882C523.94 123.558 523.613 125.032 522.96 126.303C522.306 127.567 521.376 128.555 520.169 129.265C518.968 129.968 517.541 130.32 515.886 130.32ZM515.907 126.804C516.66 126.804 517.289 126.591 517.793 126.165C518.297 125.732 518.677 125.142 518.933 124.396C519.196 123.651 519.327 122.802 519.327 121.85C519.327 120.898 519.196 120.05 518.933 119.304C518.677 118.558 518.297 117.969 517.793 117.536C517.289 117.102 516.66 116.886 515.907 116.886C515.147 116.886 514.508 117.102 513.99 117.536C513.478 117.969 513.091 118.558 512.828 119.304C512.573 120.05 512.445 120.898 512.445 121.85C512.445 122.802 512.573 123.651 512.828 124.396C513.091 125.142 513.478 125.732 513.99 126.165C514.508 126.591 515.147 126.804 515.907 126.804ZM533.693 136.477C532.223 136.477 530.962 136.275 529.911 135.87C528.867 135.472 528.036 134.929 527.418 134.24C526.8 133.551 526.399 132.777 526.214 131.918L530.412 131.353C530.54 131.68 530.742 131.985 531.019 132.269C531.296 132.553 531.662 132.781 532.116 132.951C532.578 133.129 533.139 133.217 533.8 133.217C534.787 133.217 535.6 132.976 536.239 132.493C536.886 132.017 537.209 131.218 537.209 130.096V127.102H537.017C536.818 127.557 536.52 127.987 536.122 128.391C535.724 128.796 535.213 129.126 534.588 129.382C533.963 129.638 533.217 129.766 532.351 129.766C531.122 129.766 530.004 129.482 528.995 128.913C527.994 128.338 527.195 127.461 526.598 126.282C526.008 125.096 525.714 123.597 525.714 121.786C525.714 119.933 526.016 118.384 526.619 117.141C527.223 115.898 528.026 114.968 529.027 114.35C530.035 113.732 531.14 113.423 532.34 113.423C533.256 113.423 534.023 113.58 534.641 113.892C535.259 114.197 535.756 114.581 536.133 115.043C536.516 115.497 536.811 115.945 537.017 116.385H537.187V113.636H541.694V130.16C541.694 131.552 541.353 132.717 540.671 133.654C539.989 134.592 539.045 135.295 537.837 135.763C536.637 136.239 535.256 136.477 533.693 136.477ZM533.789 126.357C534.521 126.357 535.138 126.175 535.643 125.813C536.154 125.444 536.545 124.918 536.815 124.237C537.092 123.548 537.23 122.724 537.23 121.765C537.23 120.806 537.095 119.975 536.825 119.272C536.555 118.562 536.165 118.011 535.653 117.621C535.142 117.23 534.521 117.035 533.789 117.035C533.043 117.035 532.415 117.237 531.903 117.642C531.392 118.04 531.005 118.594 530.742 119.304C530.479 120.014 530.348 120.835 530.348 121.765C530.348 122.71 530.479 123.526 530.742 124.215C531.012 124.897 531.399 125.426 531.903 125.803C532.415 126.172 533.043 126.357 533.789 126.357ZM558.35 118.303L554.196 118.558C554.125 118.203 553.972 117.884 553.737 117.599C553.503 117.308 553.194 117.077 552.811 116.907C552.434 116.729 551.983 116.641 551.458 116.641C550.755 116.641 550.162 116.79 549.679 117.088C549.196 117.379 548.954 117.77 548.954 118.26C548.954 118.651 549.11 118.981 549.423 119.251C549.735 119.521 550.272 119.737 551.032 119.901L553.993 120.497C555.584 120.824 556.77 121.349 557.551 122.074C558.333 122.798 558.723 123.75 558.723 124.929C558.723 126.001 558.407 126.942 557.775 127.752C557.15 128.562 556.291 129.194 555.197 129.648C554.11 130.096 552.857 130.32 551.436 130.32C549.27 130.32 547.544 129.869 546.259 128.967C544.98 128.058 544.231 126.822 544.011 125.259L548.475 125.025C548.61 125.685 548.936 126.19 549.455 126.538C549.973 126.879 550.637 127.049 551.447 127.049C552.242 127.049 552.882 126.896 553.365 126.591C553.855 126.278 554.103 125.877 554.11 125.387C554.103 124.975 553.929 124.638 553.588 124.375C553.247 124.105 552.722 123.899 552.012 123.757L549.178 123.192C547.58 122.873 546.39 122.319 545.609 121.531C544.835 120.742 544.448 119.737 544.448 118.516C544.448 117.464 544.732 116.559 545.3 115.799C545.875 115.039 546.681 114.453 547.718 114.041C548.762 113.629 549.984 113.423 551.383 113.423C553.45 113.423 555.076 113.86 556.262 114.734C557.456 115.607 558.152 116.797 558.35 118.303ZM466.828 166H464.612L471.021 148.545H473.203L479.612 166H477.396L472.181 151.307H472.044L466.828 166ZM467.646 159.182H476.578V161.057H467.646V159.182ZM481.602 170.909V152.909H483.546V154.989H483.784C483.932 154.761 484.136 154.472 484.398 154.119C484.665 153.761 485.046 153.443 485.54 153.165C486.04 152.881 486.716 152.739 487.568 152.739C488.671 152.739 489.642 153.014 490.483 153.565C491.324 154.116 491.98 154.898 492.452 155.909C492.923 156.92 493.159 158.114 493.159 159.489C493.159 160.875 492.923 162.077 492.452 163.094C491.98 164.105 491.327 164.889 490.492 165.446C489.656 165.997 488.693 166.273 487.602 166.273C486.761 166.273 486.088 166.134 485.583 165.855C485.077 165.571 484.688 165.25 484.415 164.892C484.142 164.528 483.932 164.227 483.784 163.989H483.614V170.909H481.602ZM483.58 159.455C483.58 160.443 483.725 161.315 484.014 162.071C484.304 162.821 484.727 163.409 485.284 163.835C485.841 164.256 486.523 164.466 487.33 164.466C488.171 164.466 488.872 164.244 489.435 163.801C490.003 163.352 490.429 162.75 490.713 161.994C491.003 161.233 491.148 160.386 491.148 159.455C491.148 158.534 491.006 157.705 490.722 156.966C490.443 156.222 490.02 155.634 489.452 155.202C488.889 154.764 488.182 154.545 487.33 154.545C486.511 154.545 485.824 154.753 485.267 155.168C484.71 155.577 484.29 156.151 484.006 156.889C483.722 157.622 483.58 158.477 483.58 159.455ZM495.771 170.909V152.909H497.715V154.989H497.953C498.101 154.761 498.305 154.472 498.567 154.119C498.834 153.761 499.215 153.443 499.709 153.165C500.209 152.881 500.885 152.739 501.737 152.739C502.84 152.739 503.811 153.014 504.652 153.565C505.493 154.116 506.149 154.898 506.621 155.909C507.092 156.92 507.328 158.114 507.328 159.489C507.328 160.875 507.092 162.077 506.621 163.094C506.149 164.105 505.496 164.889 504.661 165.446C503.825 165.997 502.862 166.273 501.771 166.273C500.93 166.273 500.257 166.134 499.752 165.855C499.246 165.571 498.857 165.25 498.584 164.892C498.311 164.528 498.101 164.227 497.953 163.989H497.783V170.909H495.771ZM497.749 159.455C497.749 160.443 497.894 161.315 498.183 162.071C498.473 162.821 498.896 163.409 499.453 163.835C500.01 164.256 500.692 164.466 501.499 164.466C502.34 164.466 503.041 164.244 503.604 163.801C504.172 163.352 504.598 162.75 504.882 161.994C505.172 161.233 505.317 160.386 505.317 159.455C505.317 158.534 505.175 157.705 504.891 156.966C504.612 156.222 504.189 155.634 503.621 155.202C503.058 154.764 502.351 154.545 501.499 154.545C500.68 154.545 499.993 154.753 499.436 155.168C498.879 155.577 498.459 156.151 498.175 156.889C497.891 157.622 497.749 158.477 497.749 159.455ZM511.952 148.545V166H509.94V148.545H511.952ZM515.18 166V152.909H517.191V166H515.18ZM516.202 150.727C515.81 150.727 515.472 150.594 515.188 150.327C514.91 150.06 514.771 149.739 514.771 149.364C514.771 148.989 514.91 148.668 515.188 148.401C515.472 148.134 515.81 148 516.202 148C516.594 148 516.93 148.134 517.208 148.401C517.492 148.668 517.634 148.989 517.634 149.364C517.634 149.739 517.492 150.06 517.208 150.327C516.93 150.594 516.594 150.727 516.202 150.727ZM525.737 166.273C524.51 166.273 523.453 165.983 522.567 165.403C521.68 164.824 520.999 164.026 520.521 163.009C520.044 161.991 519.805 160.83 519.805 159.523C519.805 158.193 520.05 157.02 520.538 156.003C521.033 154.98 521.72 154.182 522.601 153.608C523.487 153.028 524.521 152.739 525.703 152.739C526.624 152.739 527.453 152.909 528.192 153.25C528.93 153.591 529.536 154.068 530.007 154.682C530.479 155.295 530.771 156.011 530.885 156.83H528.874C528.72 156.233 528.379 155.705 527.851 155.244C527.328 154.778 526.624 154.545 525.737 154.545C524.953 154.545 524.266 154.75 523.675 155.159C523.089 155.562 522.632 156.134 522.303 156.872C521.979 157.605 521.817 158.466 521.817 159.455C521.817 160.466 521.976 161.347 522.294 162.097C522.618 162.847 523.072 163.429 523.658 163.844C524.249 164.259 524.942 164.466 525.737 164.466C526.26 164.466 526.734 164.375 527.161 164.193C527.587 164.011 527.947 163.75 528.243 163.409C528.538 163.068 528.749 162.659 528.874 162.182H530.885C530.771 162.955 530.49 163.651 530.041 164.27C529.598 164.884 529.01 165.372 528.277 165.736C527.55 166.094 526.703 166.273 525.737 166.273ZM537.222 166.307C536.392 166.307 535.639 166.151 534.963 165.838C534.287 165.52 533.75 165.062 533.352 164.466C532.955 163.864 532.756 163.136 532.756 162.284C532.756 161.534 532.903 160.926 533.199 160.46C533.494 159.989 533.889 159.619 534.383 159.352C534.878 159.085 535.423 158.886 536.02 158.756C536.622 158.619 537.227 158.511 537.835 158.432C538.631 158.33 539.276 158.253 539.77 158.202C540.27 158.145 540.633 158.051 540.861 157.92C541.094 157.79 541.21 157.562 541.21 157.239V157.17C541.21 156.33 540.98 155.676 540.52 155.21C540.065 154.744 539.375 154.511 538.449 154.511C537.489 154.511 536.736 154.722 536.19 155.142C535.645 155.562 535.261 156.011 535.04 156.489L533.131 155.807C533.472 155.011 533.926 154.392 534.494 153.949C535.068 153.5 535.693 153.187 536.369 153.011C537.051 152.83 537.722 152.739 538.381 152.739C538.801 152.739 539.284 152.79 539.83 152.892C540.381 152.989 540.912 153.19 541.423 153.497C541.94 153.804 542.369 154.267 542.71 154.886C543.051 155.506 543.222 156.335 543.222 157.375V166H541.21V164.227H541.108C540.972 164.511 540.744 164.815 540.426 165.139C540.108 165.463 539.685 165.739 539.156 165.966C538.628 166.193 537.983 166.307 537.222 166.307ZM537.528 164.5C538.324 164.5 538.994 164.344 539.54 164.031C540.091 163.719 540.506 163.315 540.784 162.821C541.068 162.327 541.21 161.807 541.21 161.261V159.42C541.125 159.523 540.937 159.616 540.648 159.702C540.364 159.781 540.034 159.852 539.659 159.915C539.29 159.972 538.929 160.023 538.577 160.068C538.23 160.108 537.949 160.142 537.733 160.17C537.21 160.239 536.722 160.349 536.267 160.503C535.818 160.651 535.455 160.875 535.176 161.176C534.903 161.472 534.767 161.875 534.767 162.386C534.767 163.085 535.026 163.614 535.543 163.972C536.065 164.324 536.727 164.5 537.528 164.5ZM552.13 152.909V154.614H545.346V152.909H552.13ZM547.323 149.773H549.334V162.25C549.334 162.818 549.417 163.244 549.582 163.528C549.752 163.807 549.968 163.994 550.229 164.091C550.496 164.182 550.778 164.227 551.073 164.227C551.295 164.227 551.476 164.216 551.619 164.193C551.761 164.165 551.874 164.142 551.959 164.125L552.369 165.932C552.232 165.983 552.042 166.034 551.798 166.085C551.553 166.142 551.244 166.17 550.869 166.17C550.3 166.17 549.744 166.048 549.198 165.804C548.658 165.56 548.209 165.188 547.851 164.688C547.499 164.188 547.323 163.557 547.323 162.795V149.773ZM554.699 166V152.909H556.711V166H554.699ZM555.722 150.727C555.33 150.727 554.992 150.594 554.708 150.327C554.43 150.06 554.29 149.739 554.29 149.364C554.29 148.989 554.43 148.668 554.708 148.401C554.992 148.134 555.33 148 555.722 148C556.114 148 556.449 148.134 556.728 148.401C557.012 148.668 557.154 148.989 557.154 149.364C557.154 149.739 557.012 150.06 556.728 150.327C556.449 150.594 556.114 150.727 555.722 150.727ZM565.257 166.273C564.075 166.273 563.038 165.991 562.146 165.429C561.26 164.866 560.567 164.08 560.067 163.068C559.572 162.057 559.325 160.875 559.325 159.523C559.325 158.159 559.572 156.969 560.067 155.952C560.567 154.935 561.26 154.145 562.146 153.582C563.038 153.02 564.075 152.739 565.257 152.739C566.439 152.739 567.473 153.02 568.359 153.582C569.251 154.145 569.944 154.935 570.439 155.952C570.939 156.969 571.189 158.159 571.189 159.523C571.189 160.875 570.939 162.057 570.439 163.068C569.944 164.08 569.251 164.866 568.359 165.429C567.473 165.991 566.439 166.273 565.257 166.273ZM565.257 164.466C566.155 164.466 566.893 164.236 567.473 163.776C568.052 163.315 568.481 162.71 568.76 161.96C569.038 161.21 569.177 160.398 569.177 159.523C569.177 158.648 569.038 157.832 568.76 157.077C568.481 156.321 568.052 155.71 567.473 155.244C566.893 154.778 566.155 154.545 565.257 154.545C564.359 154.545 563.621 154.778 563.041 155.244C562.462 155.71 562.033 156.321 561.754 157.077C561.476 157.832 561.337 158.648 561.337 159.523C561.337 160.398 561.476 161.21 561.754 161.96C562.033 162.71 562.462 163.315 563.041 163.776C563.621 164.236 564.359 164.466 565.257 164.466ZM575.814 158.125V166H573.803V152.909H575.746V154.955H575.917C576.224 154.29 576.689 153.756 577.314 153.352C577.939 152.943 578.746 152.739 579.735 152.739C580.621 152.739 581.397 152.92 582.062 153.284C582.726 153.642 583.243 154.188 583.613 154.92C583.982 155.648 584.167 156.568 584.167 157.682V166H582.155V157.818C582.155 156.79 581.888 155.989 581.354 155.415C580.82 154.835 580.087 154.545 579.155 154.545C578.513 154.545 577.939 154.685 577.434 154.963C576.934 155.241 576.539 155.648 576.249 156.182C575.959 156.716 575.814 157.364 575.814 158.125ZM508.907 190H506.793C506.668 189.392 506.45 188.858 506.137 188.398C505.83 187.938 505.455 187.551 505.012 187.239C504.575 186.92 504.089 186.682 503.555 186.523C503.021 186.364 502.464 186.284 501.884 186.284C500.827 186.284 499.87 186.551 499.012 187.085C498.16 187.619 497.481 188.406 496.975 189.446C496.475 190.486 496.225 191.761 496.225 193.273C496.225 194.784 496.475 196.06 496.975 197.099C497.481 198.139 498.16 198.926 499.012 199.46C499.87 199.994 500.827 200.261 501.884 200.261C502.464 200.261 503.021 200.182 503.555 200.023C504.089 199.864 504.575 199.628 505.012 199.315C505.455 198.997 505.83 198.608 506.137 198.148C506.45 197.682 506.668 197.148 506.793 196.545H508.907C508.748 197.437 508.458 198.236 508.038 198.94C507.617 199.645 507.095 200.244 506.47 200.739C505.845 201.227 505.143 201.599 504.364 201.855C503.592 202.111 502.765 202.239 501.884 202.239C500.396 202.239 499.072 201.875 497.913 201.148C496.754 200.42 495.842 199.386 495.177 198.045C494.512 196.705 494.18 195.114 494.18 193.273C494.18 191.432 494.512 189.841 495.177 188.5C495.842 187.159 496.754 186.125 497.913 185.398C499.072 184.67 500.396 184.307 501.884 184.307C502.765 184.307 503.592 184.435 504.364 184.69C505.143 184.946 505.845 185.321 506.47 185.815C507.095 186.304 507.617 186.901 508.038 187.605C508.458 188.304 508.748 189.102 508.907 190ZM513.605 184.545V202H511.594V184.545H513.605ZM522.151 202.273C520.969 202.273 519.933 201.991 519.04 201.429C518.154 200.866 517.461 200.08 516.961 199.068C516.467 198.057 516.219 196.875 516.219 195.523C516.219 194.159 516.467 192.969 516.961 191.952C517.461 190.935 518.154 190.145 519.04 189.582C519.933 189.02 520.969 188.739 522.151 188.739C523.333 188.739 524.367 189.02 525.254 189.582C526.146 190.145 526.839 190.935 527.333 191.952C527.833 192.969 528.083 194.159 528.083 195.523C528.083 196.875 527.833 198.057 527.333 199.068C526.839 200.08 526.146 200.866 525.254 201.429C524.367 201.991 523.333 202.273 522.151 202.273ZM522.151 200.466C523.049 200.466 523.788 200.236 524.367 199.776C524.947 199.315 525.376 198.71 525.654 197.96C525.933 197.21 526.072 196.398 526.072 195.523C526.072 194.648 525.933 193.832 525.654 193.077C525.376 192.321 524.947 191.71 524.367 191.244C523.788 190.778 523.049 190.545 522.151 190.545C521.254 190.545 520.515 190.778 519.935 191.244C519.356 191.71 518.927 192.321 518.648 193.077C518.37 193.832 518.231 194.648 518.231 195.523C518.231 196.398 518.37 197.21 518.648 197.96C518.927 198.71 519.356 199.315 519.935 199.776C520.515 200.236 521.254 200.466 522.151 200.466ZM538.947 196.648V188.909H540.959V202H538.947V199.784H538.811C538.504 200.449 538.027 201.014 537.379 201.48C536.732 201.94 535.913 202.17 534.925 202.17C534.107 202.17 533.379 201.991 532.743 201.634C532.107 201.27 531.607 200.724 531.243 199.997C530.879 199.264 530.697 198.341 530.697 197.227V188.909H532.709V197.091C532.709 198.045 532.976 198.807 533.51 199.375C534.05 199.943 534.737 200.227 535.572 200.227C536.072 200.227 536.581 200.099 537.098 199.844C537.621 199.588 538.058 199.196 538.41 198.668C538.768 198.139 538.947 197.466 538.947 196.648ZM549.13 202.273C548.039 202.273 547.076 201.997 546.241 201.446C545.405 200.889 544.752 200.105 544.28 199.094C543.809 198.077 543.573 196.875 543.573 195.489C543.573 194.114 543.809 192.92 544.28 191.909C544.752 190.898 545.408 190.116 546.249 189.565C547.09 189.014 548.062 188.739 549.164 188.739C550.016 188.739 550.69 188.881 551.184 189.165C551.684 189.443 552.065 189.761 552.326 190.119C552.593 190.472 552.8 190.761 552.948 190.989H553.119V184.545H555.13V202H553.187V199.989H552.948C552.8 200.227 552.59 200.528 552.317 200.892C552.045 201.25 551.655 201.571 551.15 201.855C550.644 202.134 549.971 202.273 549.13 202.273ZM549.403 200.466C550.209 200.466 550.891 200.256 551.448 199.835C552.005 199.409 552.428 198.821 552.718 198.071C553.008 197.315 553.153 196.443 553.153 195.455C553.153 194.477 553.011 193.622 552.726 192.889C552.442 192.151 552.022 191.577 551.465 191.168C550.908 190.753 550.221 190.545 549.403 190.545C548.55 190.545 547.84 190.764 547.272 191.202C546.709 191.634 546.286 192.222 546.002 192.966C545.724 193.705 545.584 194.534 545.584 195.455C545.584 196.386 545.726 197.233 546.011 197.994C546.3 198.75 546.726 199.352 547.289 199.801C547.857 200.244 548.562 200.466 549.403 200.466ZM487.635 226H485.522C485.397 225.392 485.178 224.858 484.866 224.398C484.559 223.938 484.184 223.551 483.741 223.239C483.303 222.92 482.817 222.682 482.283 222.523C481.749 222.364 481.192 222.284 480.613 222.284C479.556 222.284 478.599 222.551 477.741 223.085C476.888 223.619 476.209 224.406 475.704 225.446C475.204 226.486 474.954 227.761 474.954 229.273C474.954 230.784 475.204 232.06 475.704 233.099C476.209 234.139 476.888 234.926 477.741 235.46C478.599 235.994 479.556 236.261 480.613 236.261C481.192 236.261 481.749 236.182 482.283 236.023C482.817 235.864 483.303 235.628 483.741 235.315C484.184 234.997 484.559 234.608 484.866 234.148C485.178 233.682 485.397 233.148 485.522 232.545H487.635C487.476 233.437 487.187 234.236 486.766 234.94C486.346 235.645 485.823 236.244 485.198 236.739C484.573 237.227 483.871 237.599 483.093 237.855C482.32 238.111 481.493 238.239 480.613 238.239C479.124 238.239 477.8 237.875 476.641 237.148C475.482 236.42 474.57 235.386 473.905 234.045C473.241 232.705 472.908 231.114 472.908 229.273C472.908 227.432 473.241 225.841 473.905 224.5C474.57 223.159 475.482 222.125 476.641 221.398C477.8 220.67 479.124 220.307 480.613 220.307C481.493 220.307 482.32 220.435 483.093 220.69C483.871 220.946 484.573 221.321 485.198 221.815C485.823 222.304 486.346 222.901 486.766 223.605C487.187 224.304 487.476 225.102 487.635 226ZM495.64 238.273C494.459 238.273 493.422 237.991 492.53 237.429C491.643 236.866 490.95 236.08 490.45 235.068C489.956 234.057 489.709 232.875 489.709 231.523C489.709 230.159 489.956 228.969 490.45 227.952C490.95 226.935 491.643 226.145 492.53 225.582C493.422 225.02 494.459 224.739 495.64 224.739C496.822 224.739 497.856 225.02 498.743 225.582C499.635 226.145 500.328 226.935 500.822 227.952C501.322 228.969 501.572 230.159 501.572 231.523C501.572 232.875 501.322 234.057 500.822 235.068C500.328 236.08 499.635 236.866 498.743 237.429C497.856 237.991 496.822 238.273 495.64 238.273ZM495.64 236.466C496.538 236.466 497.277 236.236 497.856 235.776C498.436 235.315 498.865 234.71 499.143 233.96C499.422 233.21 499.561 232.398 499.561 231.523C499.561 230.648 499.422 229.832 499.143 229.077C498.865 228.321 498.436 227.71 497.856 227.244C497.277 226.778 496.538 226.545 495.64 226.545C494.743 226.545 494.004 226.778 493.424 227.244C492.845 227.71 492.416 228.321 492.138 229.077C491.859 229.832 491.72 230.648 491.72 231.523C491.72 232.398 491.859 233.21 492.138 233.96C492.416 234.71 492.845 235.315 493.424 235.776C494.004 236.236 494.743 236.466 495.64 236.466ZM506.198 230.125V238H504.187V224.909H506.13V226.955H506.3C506.607 226.29 507.073 225.756 507.698 225.352C508.323 224.943 509.13 224.739 510.118 224.739C511.005 224.739 511.78 224.92 512.445 225.284C513.11 225.642 513.627 226.188 513.996 226.92C514.365 227.648 514.55 228.568 514.55 229.682V238H512.539V229.818C512.539 228.79 512.272 227.989 511.738 227.415C511.204 226.835 510.471 226.545 509.539 226.545C508.897 226.545 508.323 226.685 507.817 226.963C507.317 227.241 506.922 227.648 506.633 228.182C506.343 228.716 506.198 229.364 506.198 230.125ZM523.463 224.909V226.614H516.679V224.909H523.463ZM518.656 221.773H520.667V234.25C520.667 234.818 520.75 235.244 520.914 235.528C521.085 235.807 521.301 235.994 521.562 236.091C521.829 236.182 522.11 236.227 522.406 236.227C522.628 236.227 522.809 236.216 522.951 236.193C523.093 236.165 523.207 236.142 523.292 236.125L523.701 237.932C523.565 237.983 523.375 238.034 523.13 238.085C522.886 238.142 522.576 238.17 522.201 238.17C521.633 238.17 521.076 238.048 520.531 237.804C519.991 237.56 519.542 237.188 519.184 236.688C518.832 236.188 518.656 235.557 518.656 234.795V221.773ZM529.885 238.307C529.055 238.307 528.302 238.151 527.626 237.838C526.95 237.52 526.413 237.062 526.015 236.466C525.618 235.864 525.419 235.136 525.419 234.284C525.419 233.534 525.566 232.926 525.862 232.46C526.157 231.989 526.552 231.619 527.047 231.352C527.541 231.085 528.086 230.886 528.683 230.756C529.285 230.619 529.89 230.511 530.498 230.432C531.294 230.33 531.939 230.253 532.433 230.202C532.933 230.145 533.297 230.051 533.524 229.92C533.757 229.79 533.873 229.562 533.873 229.239V229.17C533.873 228.33 533.643 227.676 533.183 227.21C532.728 226.744 532.038 226.511 531.112 226.511C530.152 226.511 529.399 226.722 528.853 227.142C528.308 227.562 527.924 228.011 527.703 228.489L525.794 227.807C526.135 227.011 526.589 226.392 527.157 225.949C527.731 225.5 528.356 225.187 529.032 225.011C529.714 224.83 530.385 224.739 531.044 224.739C531.464 224.739 531.947 224.79 532.493 224.892C533.044 224.989 533.575 225.19 534.086 225.497C534.603 225.804 535.032 226.267 535.373 226.886C535.714 227.506 535.885 228.335 535.885 229.375V238H533.873V236.227H533.771C533.635 236.511 533.407 236.815 533.089 237.139C532.771 237.463 532.348 237.739 531.819 237.966C531.291 238.193 530.646 238.307 529.885 238.307ZM530.191 236.5C530.987 236.5 531.657 236.344 532.203 236.031C532.754 235.719 533.169 235.315 533.447 234.821C533.731 234.327 533.873 233.807 533.873 233.261V231.42C533.788 231.523 533.6 231.616 533.311 231.702C533.027 231.781 532.697 231.852 532.322 231.915C531.953 231.972 531.592 232.023 531.24 232.068C530.893 232.108 530.612 232.142 530.396 232.17C529.873 232.239 529.385 232.349 528.93 232.503C528.481 232.651 528.118 232.875 527.839 233.176C527.566 233.472 527.43 233.875 527.43 234.386C527.43 235.085 527.689 235.614 528.206 235.972C528.728 236.324 529.39 236.5 530.191 236.5ZM539.1 238V224.909H541.111V238H539.1ZM540.122 222.727C539.73 222.727 539.392 222.594 539.108 222.327C538.83 222.06 538.691 221.739 538.691 221.364C538.691 220.989 538.83 220.668 539.108 220.401C539.392 220.134 539.73 220 540.122 220C540.515 220 540.85 220.134 541.128 220.401C541.412 220.668 541.554 220.989 541.554 221.364C541.554 221.739 541.412 222.06 541.128 222.327C540.85 222.594 540.515 222.727 540.122 222.727ZM546.35 230.125V238H544.339V224.909H546.282V226.955H546.453C546.76 226.29 547.225 225.756 547.85 225.352C548.475 224.943 549.282 224.739 550.271 224.739C551.157 224.739 551.933 224.92 552.598 225.284C553.262 225.642 553.779 226.188 554.149 226.92C554.518 227.648 554.703 228.568 554.703 229.682V238H552.691V229.818C552.691 228.79 552.424 227.989 551.89 227.415C551.356 226.835 550.623 226.545 549.691 226.545C549.049 226.545 548.475 226.685 547.97 226.963C547.47 227.241 547.075 227.648 546.785 228.182C546.495 228.716 546.35 229.364 546.35 230.125ZM563.411 238.273C562.149 238.273 561.061 237.994 560.147 237.438C559.237 236.875 558.536 236.091 558.041 235.085C557.553 234.074 557.308 232.898 557.308 231.557C557.308 230.216 557.553 229.034 558.041 228.011C558.536 226.983 559.223 226.182 560.104 225.608C560.99 225.028 562.024 224.739 563.206 224.739C563.888 224.739 564.561 224.852 565.226 225.08C565.891 225.307 566.496 225.676 567.041 226.188C567.587 226.693 568.022 227.364 568.345 228.199C568.669 229.034 568.831 230.062 568.831 231.284V232.136H558.74V230.398H566.786C566.786 229.659 566.638 229 566.343 228.42C566.053 227.841 565.638 227.384 565.098 227.048C564.564 226.713 563.933 226.545 563.206 226.545C562.405 226.545 561.712 226.744 561.127 227.142C560.547 227.534 560.101 228.045 559.789 228.676C559.476 229.307 559.32 229.983 559.32 230.705V231.864C559.32 232.852 559.49 233.69 559.831 234.378C560.178 235.06 560.658 235.58 561.272 235.938C561.885 236.29 562.598 236.466 563.411 236.466C563.939 236.466 564.416 236.392 564.843 236.244C565.274 236.091 565.647 235.864 565.959 235.562C566.272 235.256 566.513 234.875 566.683 234.42L568.627 234.966C568.422 235.625 568.078 236.205 567.595 236.705C567.112 237.199 566.516 237.585 565.806 237.864C565.095 238.136 564.297 238.273 563.411 238.273ZM571.435 238V224.909H573.378V226.886H573.514C573.753 226.239 574.185 225.713 574.81 225.31C575.435 224.906 576.139 224.705 576.924 224.705C577.071 224.705 577.256 224.707 577.477 224.713C577.699 224.719 577.867 224.727 577.98 224.739V226.784C577.912 226.767 577.756 226.741 577.512 226.707C577.273 226.668 577.02 226.648 576.753 226.648C576.117 226.648 575.549 226.781 575.049 227.048C574.554 227.31 574.162 227.673 573.872 228.139C573.588 228.599 573.446 229.125 573.446 229.716V238H571.435ZM480.119 274H474.733V256.545H480.358C482.051 256.545 483.5 256.895 484.705 257.594C485.909 258.287 486.833 259.284 487.475 260.585C488.117 261.881 488.438 263.432 488.438 265.239C488.438 267.057 488.114 268.622 487.466 269.935C486.818 271.241 485.875 272.247 484.636 272.952C483.398 273.651 481.892 274 480.119 274ZM476.847 272.125H479.983C481.426 272.125 482.622 271.847 483.571 271.29C484.52 270.733 485.227 269.94 485.693 268.912C486.159 267.884 486.392 266.659 486.392 265.239C486.392 263.83 486.162 262.616 485.702 261.599C485.242 260.577 484.554 259.793 483.639 259.247C482.725 258.696 481.585 258.42 480.222 258.42H476.847V272.125ZM495.107 274.307C494.277 274.307 493.524 274.151 492.848 273.838C492.172 273.52 491.635 273.062 491.237 272.466C490.84 271.864 490.641 271.136 490.641 270.284C490.641 269.534 490.788 268.926 491.084 268.46C491.379 267.989 491.774 267.619 492.269 267.352C492.763 267.085 493.308 266.886 493.905 266.756C494.507 266.619 495.112 266.511 495.72 266.432C496.516 266.33 497.161 266.253 497.655 266.202C498.155 266.145 498.519 266.051 498.746 265.92C498.979 265.79 499.095 265.562 499.095 265.239V265.17C499.095 264.33 498.865 263.676 498.405 263.21C497.95 262.744 497.26 262.511 496.334 262.511C495.374 262.511 494.621 262.722 494.075 263.142C493.53 263.562 493.146 264.011 492.925 264.489L491.016 263.807C491.357 263.011 491.811 262.392 492.379 261.949C492.953 261.5 493.578 261.187 494.254 261.011C494.936 260.83 495.607 260.739 496.266 260.739C496.686 260.739 497.169 260.79 497.715 260.892C498.266 260.989 498.797 261.19 499.308 261.497C499.825 261.804 500.254 262.267 500.595 262.886C500.936 263.506 501.107 264.335 501.107 265.375V274H499.095V272.227H498.993C498.857 272.511 498.629 272.815 498.311 273.139C497.993 273.463 497.57 273.739 497.041 273.966C496.513 274.193 495.868 274.307 495.107 274.307ZM495.413 272.5C496.209 272.5 496.879 272.344 497.425 272.031C497.976 271.719 498.391 271.315 498.669 270.821C498.953 270.327 499.095 269.807 499.095 269.261V267.42C499.01 267.523 498.823 267.616 498.533 267.702C498.249 267.781 497.919 267.852 497.544 267.915C497.175 267.972 496.814 268.023 496.462 268.068C496.115 268.108 495.834 268.142 495.618 268.17C495.095 268.239 494.607 268.349 494.152 268.503C493.703 268.651 493.34 268.875 493.061 269.176C492.788 269.472 492.652 269.875 492.652 270.386C492.652 271.085 492.911 271.614 493.428 271.972C493.95 272.324 494.612 272.5 495.413 272.5ZM510.015 260.909V262.614H503.231V260.909H510.015ZM505.208 257.773H507.22V270.25C507.22 270.818 507.302 271.244 507.467 271.528C507.637 271.807 507.853 271.994 508.114 272.091C508.381 272.182 508.663 272.227 508.958 272.227C509.18 272.227 509.362 272.216 509.504 272.193C509.646 272.165 509.759 272.142 509.845 272.125L510.254 273.932C510.117 273.983 509.927 274.034 509.683 274.085C509.438 274.142 509.129 274.17 508.754 274.17C508.185 274.17 507.629 274.048 507.083 273.804C506.543 273.56 506.095 273.188 505.737 272.688C505.384 272.188 505.208 271.557 505.208 270.795V257.773ZM516.437 274.307C515.607 274.307 514.854 274.151 514.178 273.838C513.502 273.52 512.965 273.062 512.567 272.466C512.17 271.864 511.971 271.136 511.971 270.284C511.971 269.534 512.119 268.926 512.414 268.46C512.71 267.989 513.104 267.619 513.599 267.352C514.093 267.085 514.639 266.886 515.235 266.756C515.837 266.619 516.442 266.511 517.05 266.432C517.846 266.33 518.491 266.253 518.985 266.202C519.485 266.145 519.849 266.051 520.076 265.92C520.309 265.79 520.425 265.562 520.425 265.239V265.17C520.425 264.33 520.195 263.676 519.735 263.21C519.281 262.744 518.59 262.511 517.664 262.511C516.704 262.511 515.951 262.722 515.406 263.142C514.86 263.562 514.477 264.011 514.255 264.489L512.346 263.807C512.687 263.011 513.141 262.392 513.71 261.949C514.283 261.5 514.908 261.187 515.585 261.011C516.266 260.83 516.937 260.739 517.596 260.739C518.016 260.739 518.499 260.79 519.045 260.892C519.596 260.989 520.127 261.19 520.639 261.497C521.156 261.804 521.585 262.267 521.925 262.886C522.266 263.506 522.437 264.335 522.437 265.375V274H520.425V272.227H520.323C520.187 272.511 519.96 272.815 519.641 273.139C519.323 273.463 518.9 273.739 518.371 273.966C517.843 274.193 517.198 274.307 516.437 274.307ZM516.744 272.5C517.539 272.5 518.21 272.344 518.755 272.031C519.306 271.719 519.721 271.315 519.999 270.821C520.283 270.327 520.425 269.807 520.425 269.261V267.42C520.34 267.523 520.153 267.616 519.863 267.702C519.579 267.781 519.249 267.852 518.874 267.915C518.505 267.972 518.144 268.023 517.792 268.068C517.445 268.108 517.164 268.142 516.948 268.17C516.425 268.239 515.937 268.349 515.482 268.503C515.033 268.651 514.67 268.875 514.391 269.176C514.119 269.472 513.982 269.875 513.982 270.386C513.982 271.085 514.241 271.614 514.758 271.972C515.281 272.324 515.942 272.5 516.744 272.5ZM525.925 274V256.545H527.936V262.989H528.107C528.254 262.761 528.459 262.472 528.72 262.119C528.987 261.761 529.368 261.443 529.862 261.165C530.362 260.881 531.038 260.739 531.891 260.739C532.993 260.739 533.964 261.014 534.805 261.565C535.646 262.116 536.303 262.898 536.774 263.909C537.246 264.92 537.482 266.114 537.482 267.489C537.482 268.875 537.246 270.077 536.774 271.094C536.303 272.105 535.649 272.889 534.814 273.446C533.979 273.997 533.016 274.273 531.925 274.273C531.084 274.273 530.41 274.134 529.905 273.855C529.399 273.571 529.01 273.25 528.737 272.892C528.464 272.528 528.254 272.227 528.107 271.989H527.868V274H525.925ZM527.902 267.455C527.902 268.443 528.047 269.315 528.337 270.071C528.626 270.821 529.05 271.409 529.607 271.835C530.163 272.256 530.845 272.466 531.652 272.466C532.493 272.466 533.195 272.244 533.757 271.801C534.325 271.352 534.751 270.75 535.035 269.994C535.325 269.233 535.47 268.386 535.47 267.455C535.47 266.534 535.328 265.705 535.044 264.966C534.766 264.222 534.342 263.634 533.774 263.202C533.212 262.764 532.504 262.545 531.652 262.545C530.834 262.545 530.146 262.753 529.589 263.168C529.033 263.577 528.612 264.151 528.328 264.889C528.044 265.622 527.902 266.477 527.902 267.455ZM543.955 274.307C543.125 274.307 542.372 274.151 541.696 273.838C541.02 273.52 540.483 273.062 540.085 272.466C539.687 271.864 539.489 271.136 539.489 270.284C539.489 269.534 539.636 268.926 539.932 268.46C540.227 267.989 540.622 267.619 541.116 267.352C541.611 267.085 542.156 266.886 542.753 266.756C543.355 266.619 543.96 266.511 544.568 266.432C545.364 266.33 546.008 266.253 546.503 266.202C547.003 266.145 547.366 266.051 547.594 265.92C547.827 265.79 547.943 265.562 547.943 265.239V265.17C547.943 264.33 547.713 263.676 547.253 263.21C546.798 262.744 546.108 262.511 545.182 262.511C544.222 262.511 543.469 262.722 542.923 263.142C542.378 263.562 541.994 264.011 541.773 264.489L539.864 263.807C540.205 263.011 540.659 262.392 541.227 261.949C541.801 261.5 542.426 261.187 543.102 261.011C543.784 260.83 544.455 260.739 545.114 260.739C545.534 260.739 546.017 260.79 546.562 260.892C547.114 260.989 547.645 261.19 548.156 261.497C548.673 261.804 549.102 262.267 549.443 262.886C549.784 263.506 549.955 264.335 549.955 265.375V274H547.943V272.227H547.841C547.705 272.511 547.477 272.815 547.159 273.139C546.841 273.463 546.418 273.739 545.889 273.966C545.361 274.193 544.716 274.307 543.955 274.307ZM544.261 272.5C545.057 272.5 545.727 272.344 546.273 272.031C546.824 271.719 547.239 271.315 547.517 270.821C547.801 270.327 547.943 269.807 547.943 269.261V267.42C547.858 267.523 547.67 267.616 547.381 267.702C547.097 267.781 546.767 267.852 546.392 267.915C546.023 267.972 545.662 268.023 545.31 268.068C544.963 268.108 544.682 268.142 544.466 268.17C543.943 268.239 543.455 268.349 543 268.503C542.551 268.651 542.187 268.875 541.909 269.176C541.636 269.472 541.5 269.875 541.5 270.386C541.5 271.085 541.758 271.614 542.276 271.972C542.798 272.324 543.46 272.5 544.261 272.5ZM562.442 263.841L560.636 264.352C560.522 264.051 560.354 263.759 560.133 263.474C559.917 263.185 559.621 262.946 559.246 262.759C558.871 262.571 558.391 262.477 557.806 262.477C557.005 262.477 556.337 262.662 555.803 263.031C555.275 263.395 555.011 263.858 555.011 264.42C555.011 264.92 555.192 265.315 555.556 265.605C555.92 265.895 556.488 266.136 557.261 266.33L559.204 266.807C560.374 267.091 561.246 267.526 561.82 268.111C562.394 268.69 562.681 269.437 562.681 270.352C562.681 271.102 562.465 271.773 562.033 272.364C561.607 272.955 561.011 273.42 560.244 273.761C559.476 274.102 558.584 274.273 557.567 274.273C556.232 274.273 555.127 273.983 554.252 273.403C553.377 272.824 552.823 271.977 552.59 270.864L554.499 270.386C554.681 271.091 555.025 271.619 555.53 271.972C556.042 272.324 556.709 272.5 557.533 272.5C558.471 272.5 559.215 272.301 559.766 271.903C560.323 271.5 560.601 271.017 560.601 270.455C560.601 270 560.442 269.619 560.124 269.312C559.806 269 559.317 268.767 558.658 268.614L556.476 268.102C555.278 267.818 554.397 267.378 553.834 266.781C553.278 266.179 552.999 265.426 552.999 264.523C552.999 263.784 553.207 263.131 553.621 262.562C554.042 261.994 554.613 261.548 555.334 261.224C556.062 260.901 556.886 260.739 557.806 260.739C559.101 260.739 560.119 261.023 560.857 261.591C561.601 262.159 562.13 262.909 562.442 263.841ZM570.741 274.273C569.48 274.273 568.392 273.994 567.477 273.438C566.568 272.875 565.866 272.091 565.372 271.085C564.883 270.074 564.639 268.898 564.639 267.557C564.639 266.216 564.883 265.034 565.372 264.011C565.866 262.983 566.554 262.182 567.435 261.608C568.321 261.028 569.355 260.739 570.537 260.739C571.219 260.739 571.892 260.852 572.557 261.08C573.221 261.307 573.827 261.676 574.372 262.188C574.917 262.693 575.352 263.364 575.676 264.199C576 265.034 576.162 266.062 576.162 267.284V268.136H566.071V266.398H574.116C574.116 265.659 573.969 265 573.673 264.42C573.383 263.841 572.969 263.384 572.429 263.048C571.895 262.713 571.264 262.545 570.537 262.545C569.736 262.545 569.042 262.744 568.457 263.142C567.878 263.534 567.432 264.045 567.119 264.676C566.807 265.307 566.65 265.983 566.65 266.705V267.864C566.65 268.852 566.821 269.69 567.162 270.378C567.508 271.06 567.989 271.58 568.602 271.938C569.216 272.29 569.929 272.466 570.741 272.466C571.27 272.466 571.747 272.392 572.173 272.244C572.605 272.091 572.977 271.864 573.29 271.562C573.602 271.256 573.844 270.875 574.014 270.42L575.957 270.966C575.753 271.625 575.409 272.205 574.926 272.705C574.443 273.199 573.846 273.585 573.136 273.864C572.426 274.136 571.628 274.273 570.741 274.273ZM455.094 292.545V310H452.98V292.545H455.094ZM460.614 302.125V310H458.603V296.909H460.546V298.955H460.716C461.023 298.29 461.489 297.756 462.114 297.352C462.739 296.943 463.546 296.739 464.535 296.739C465.421 296.739 466.197 296.92 466.861 297.284C467.526 297.642 468.043 298.188 468.412 298.92C468.782 299.648 468.966 300.568 468.966 301.682V310H466.955V301.818C466.955 300.79 466.688 299.989 466.154 299.415C465.62 298.835 464.887 298.545 463.955 298.545C463.313 298.545 462.739 298.685 462.233 298.963C461.733 299.241 461.339 299.648 461.049 300.182C460.759 300.716 460.614 301.364 460.614 302.125ZM478.015 296.909V298.614H470.959V296.909H478.015ZM473.072 310V295.102C473.072 294.352 473.248 293.727 473.601 293.227C473.953 292.727 474.41 292.352 474.973 292.102C475.535 291.852 476.129 291.727 476.754 291.727C477.248 291.727 477.652 291.767 477.964 291.847C478.277 291.926 478.51 292 478.663 292.068L478.084 293.807C477.981 293.773 477.839 293.73 477.657 293.679C477.481 293.628 477.248 293.602 476.959 293.602C476.294 293.602 475.814 293.77 475.518 294.105C475.228 294.44 475.084 294.932 475.084 295.58V310H473.072ZM480.378 310V296.909H482.321V298.886H482.458C482.696 298.239 483.128 297.713 483.753 297.31C484.378 296.906 485.083 296.705 485.867 296.705C486.015 296.705 486.199 296.707 486.421 296.713C486.643 296.719 486.81 296.727 486.924 296.739V298.784C486.856 298.767 486.699 298.741 486.455 298.707C486.216 298.668 485.964 298.648 485.696 298.648C485.06 298.648 484.492 298.781 483.992 299.048C483.498 299.31 483.106 299.673 482.816 300.139C482.532 300.599 482.39 301.125 482.39 301.716V310H480.378ZM492.704 310.307C491.875 310.307 491.122 310.151 490.446 309.838C489.77 309.52 489.233 309.062 488.835 308.466C488.437 307.864 488.238 307.136 488.238 306.284C488.238 305.534 488.386 304.926 488.682 304.46C488.977 303.989 489.372 303.619 489.866 303.352C490.361 303.085 490.906 302.886 491.503 302.756C492.105 302.619 492.71 302.511 493.318 302.432C494.113 302.33 494.758 302.253 495.253 302.202C495.753 302.145 496.116 302.051 496.343 301.92C496.576 301.79 496.693 301.562 496.693 301.239V301.17C496.693 300.33 496.463 299.676 496.003 299.21C495.548 298.744 494.858 298.511 493.932 298.511C492.971 298.511 492.218 298.722 491.673 299.142C491.128 299.562 490.744 300.011 490.522 300.489L488.613 299.807C488.954 299.011 489.409 298.392 489.977 297.949C490.551 297.5 491.176 297.187 491.852 297.011C492.534 296.83 493.204 296.739 493.863 296.739C494.284 296.739 494.767 296.79 495.312 296.892C495.863 296.989 496.395 297.19 496.906 297.497C497.423 297.804 497.852 298.267 498.193 298.886C498.534 299.506 498.704 300.335 498.704 301.375V310H496.693V308.227H496.591C496.454 308.511 496.227 308.815 495.909 309.139C495.591 309.463 495.167 309.739 494.639 309.966C494.111 310.193 493.466 310.307 492.704 310.307ZM493.011 308.5C493.807 308.5 494.477 308.344 495.022 308.031C495.574 307.719 495.988 307.315 496.267 306.821C496.551 306.327 496.693 305.807 496.693 305.261V303.42C496.608 303.523 496.42 303.616 496.13 303.702C495.846 303.781 495.517 303.852 495.142 303.915C494.772 303.972 494.412 304.023 494.059 304.068C493.713 304.108 493.432 304.142 493.216 304.17C492.693 304.239 492.204 304.349 491.75 304.503C491.301 304.651 490.937 304.875 490.659 305.176C490.386 305.472 490.25 305.875 490.25 306.386C490.25 307.085 490.508 307.614 491.025 307.972C491.548 308.324 492.21 308.5 493.011 308.5ZM511.192 299.841L509.385 300.352C509.272 300.051 509.104 299.759 508.883 299.474C508.667 299.185 508.371 298.946 507.996 298.759C507.621 298.571 507.141 298.477 506.556 298.477C505.755 298.477 505.087 298.662 504.553 299.031C504.025 299.395 503.76 299.858 503.76 300.42C503.76 300.92 503.942 301.315 504.306 301.605C504.669 301.895 505.238 302.136 506.01 302.33L507.954 302.807C509.124 303.091 509.996 303.526 510.57 304.111C511.144 304.69 511.431 305.437 511.431 306.352C511.431 307.102 511.215 307.773 510.783 308.364C510.357 308.955 509.76 309.42 508.993 309.761C508.226 310.102 507.334 310.273 506.317 310.273C504.982 310.273 503.877 309.983 503.002 309.403C502.127 308.824 501.573 307.977 501.34 306.864L503.249 306.386C503.431 307.091 503.775 307.619 504.28 307.972C504.792 308.324 505.459 308.5 506.283 308.5C507.221 308.5 507.965 308.301 508.516 307.903C509.073 307.5 509.351 307.017 509.351 306.455C509.351 306 509.192 305.619 508.874 305.312C508.556 305 508.067 304.767 507.408 304.614L505.226 304.102C504.027 303.818 503.147 303.378 502.584 302.781C502.027 302.179 501.749 301.426 501.749 300.523C501.749 299.784 501.956 299.131 502.371 298.562C502.792 297.994 503.363 297.548 504.084 297.224C504.811 296.901 505.635 296.739 506.556 296.739C507.851 296.739 508.868 297.023 509.607 297.591C510.351 298.159 510.88 298.909 511.192 299.841ZM519.696 296.909V298.614H512.912V296.909H519.696ZM514.889 293.773H516.9V306.25C516.9 306.818 516.983 307.244 517.147 307.528C517.318 307.807 517.534 307.994 517.795 308.091C518.062 308.182 518.343 308.227 518.639 308.227C518.86 308.227 519.042 308.216 519.184 308.193C519.326 308.165 519.44 308.142 519.525 308.125L519.934 309.932C519.798 309.983 519.608 310.034 519.363 310.085C519.119 310.142 518.809 310.17 518.434 310.17C517.866 310.17 517.309 310.048 516.764 309.804C516.224 309.56 515.775 309.188 515.417 308.688C515.065 308.188 514.889 307.557 514.889 306.795V293.773ZM522.265 310V296.909H524.208V298.886H524.345C524.583 298.239 525.015 297.713 525.64 297.31C526.265 296.906 526.97 296.705 527.754 296.705C527.902 296.705 528.086 296.707 528.308 296.713C528.529 296.719 528.697 296.727 528.811 296.739V298.784C528.743 298.767 528.586 298.741 528.342 298.707C528.103 298.668 527.85 298.648 527.583 298.648C526.947 298.648 526.379 298.781 525.879 299.048C525.385 299.31 524.993 299.673 524.703 300.139C524.419 300.599 524.277 301.125 524.277 301.716V310H522.265ZM538.989 304.648V296.909H541V310H538.989V307.784H538.853C538.546 308.449 538.068 309.014 537.421 309.48C536.773 309.94 535.955 310.17 534.966 310.17C534.148 310.17 533.421 309.991 532.784 309.634C532.148 309.27 531.648 308.724 531.284 307.997C530.921 307.264 530.739 306.341 530.739 305.227V296.909H532.75V305.091C532.75 306.045 533.017 306.807 533.551 307.375C534.091 307.943 534.779 308.227 535.614 308.227C536.114 308.227 536.622 308.099 537.14 307.844C537.662 307.588 538.1 307.196 538.452 306.668C538.81 306.139 538.989 305.466 538.989 304.648ZM549.546 310.273C548.319 310.273 547.262 309.983 546.376 309.403C545.49 308.824 544.808 308.026 544.331 307.009C543.853 305.991 543.615 304.83 543.615 303.523C543.615 302.193 543.859 301.02 544.348 300.003C544.842 298.98 545.529 298.182 546.41 297.608C547.296 297.028 548.331 296.739 549.512 296.739C550.433 296.739 551.262 296.909 552.001 297.25C552.74 297.591 553.345 298.068 553.816 298.682C554.288 299.295 554.581 300.011 554.694 300.83H552.683C552.529 300.233 552.188 299.705 551.66 299.244C551.137 298.778 550.433 298.545 549.546 298.545C548.762 298.545 548.075 298.75 547.484 299.159C546.899 299.562 546.441 300.134 546.112 300.872C545.788 301.605 545.626 302.466 545.626 303.455C545.626 304.466 545.785 305.347 546.103 306.097C546.427 306.847 546.882 307.429 547.467 307.844C548.058 308.259 548.751 308.466 549.546 308.466C550.069 308.466 550.544 308.375 550.97 308.193C551.396 308.011 551.757 307.75 552.052 307.409C552.348 307.068 552.558 306.659 552.683 306.182H554.694C554.581 306.955 554.299 307.651 553.85 308.27C553.407 308.884 552.819 309.372 552.086 309.736C551.359 310.094 550.512 310.273 549.546 310.273ZM562.872 296.909V298.614H556.088V296.909H562.872ZM558.065 293.773H560.076V306.25C560.076 306.818 560.159 307.244 560.323 307.528C560.494 307.807 560.71 307.994 560.971 308.091C561.238 308.182 561.519 308.227 561.815 308.227C562.036 308.227 562.218 308.216 562.36 308.193C562.502 308.165 562.616 308.142 562.701 308.125L563.11 309.932C562.974 309.983 562.784 310.034 562.539 310.085C562.295 310.142 561.985 310.17 561.61 310.17C561.042 310.17 560.485 310.048 559.94 309.804C559.4 309.56 558.951 309.188 558.593 308.688C558.241 308.188 558.065 307.557 558.065 306.795V293.773ZM573.691 304.648V296.909H575.703V310H573.691V307.784H573.555C573.248 308.449 572.771 309.014 572.123 309.48C571.475 309.94 570.657 310.17 569.669 310.17C568.85 310.17 568.123 309.991 567.487 309.634C566.85 309.27 566.35 308.724 565.987 307.997C565.623 307.264 565.441 306.341 565.441 305.227V296.909H567.453V305.091C567.453 306.045 567.72 306.807 568.254 307.375C568.794 307.943 569.481 308.227 570.316 308.227C570.816 308.227 571.325 308.099 571.842 307.844C572.365 307.588 572.802 307.196 573.154 306.668C573.512 306.139 573.691 305.466 573.691 304.648ZM578.931 310V296.909H580.874V298.886H581.01C581.249 298.239 581.681 297.713 582.306 297.31C582.931 296.906 583.635 296.705 584.419 296.705C584.567 296.705 584.752 296.707 584.973 296.713C585.195 296.719 585.362 296.727 585.476 296.739V298.784C585.408 298.767 585.252 298.741 585.007 298.707C584.769 298.668 584.516 298.648 584.249 298.648C583.612 298.648 583.044 298.781 582.544 299.048C582.05 299.31 581.658 299.673 581.368 300.139C581.084 300.599 580.942 301.125 580.942 301.716V310H578.931ZM592.494 310.273C591.233 310.273 590.145 309.994 589.23 309.438C588.321 308.875 587.619 308.091 587.125 307.085C586.637 306.074 586.392 304.898 586.392 303.557C586.392 302.216 586.637 301.034 587.125 300.011C587.619 298.983 588.307 298.182 589.188 297.608C590.074 297.028 591.108 296.739 592.29 296.739C592.972 296.739 593.645 296.852 594.31 297.08C594.975 297.307 595.58 297.676 596.125 298.188C596.671 298.693 597.105 299.364 597.429 300.199C597.753 301.034 597.915 302.062 597.915 303.284V304.136H587.824V302.398H595.869C595.869 301.659 595.722 301 595.426 300.42C595.137 299.841 594.722 299.384 594.182 299.048C593.648 298.713 593.017 298.545 592.29 298.545C591.489 298.545 590.796 298.744 590.21 299.142C589.631 299.534 589.185 300.045 588.872 300.676C588.56 301.307 588.404 301.983 588.404 302.705V303.864C588.404 304.852 588.574 305.69 588.915 306.378C589.262 307.06 589.742 307.58 590.355 307.938C590.969 308.29 591.682 308.466 592.494 308.466C593.023 308.466 593.5 308.392 593.926 308.244C594.358 308.091 594.73 307.864 595.043 307.562C595.355 307.256 595.597 306.875 595.767 306.42L597.71 306.966C597.506 307.625 597.162 308.205 596.679 308.705C596.196 309.199 595.6 309.585 594.889 309.864C594.179 310.136 593.381 310.273 592.494 310.273ZM505.521 346L500.749 328.545H502.896L506.544 342.761H506.715L510.43 328.545H512.817L516.533 342.761H516.703L520.351 328.545H522.499L517.726 346H515.544L511.692 332.091H511.555L507.703 346H505.521ZM528.673 346.273C527.412 346.273 526.324 345.994 525.409 345.438C524.5 344.875 523.798 344.091 523.304 343.085C522.815 342.074 522.571 340.898 522.571 339.557C522.571 338.216 522.815 337.034 523.304 336.011C523.798 334.983 524.486 334.182 525.366 333.608C526.253 333.028 527.287 332.739 528.469 332.739C529.151 332.739 529.824 332.852 530.489 333.08C531.153 333.307 531.759 333.676 532.304 334.188C532.849 334.693 533.284 335.364 533.608 336.199C533.932 337.034 534.094 338.062 534.094 339.284V340.136H524.003V338.398H532.048C532.048 337.659 531.901 337 531.605 336.42C531.315 335.841 530.901 335.384 530.361 335.048C529.827 334.713 529.196 334.545 528.469 334.545C527.668 334.545 526.974 334.744 526.389 335.142C525.81 335.534 525.364 336.045 525.051 336.676C524.739 337.307 524.582 337.983 524.582 338.705V339.864C524.582 340.852 524.753 341.69 525.094 342.378C525.44 343.06 525.92 343.58 526.534 343.938C527.148 344.29 527.861 344.466 528.673 344.466C529.202 344.466 529.679 344.392 530.105 344.244C530.537 344.091 530.909 343.864 531.222 343.562C531.534 343.256 531.776 342.875 531.946 342.42L533.889 342.966C533.685 343.625 533.341 344.205 532.858 344.705C532.375 345.199 531.778 345.585 531.068 345.864C530.358 346.136 529.56 346.273 528.673 346.273ZM536.97 346V328.545H538.982V334.989H539.152C539.3 334.761 539.504 334.472 539.766 334.119C540.033 333.761 540.413 333.443 540.908 333.165C541.408 332.881 542.084 332.739 542.936 332.739C544.038 332.739 545.01 333.014 545.851 333.565C546.692 334.116 547.348 334.898 547.82 335.909C548.291 336.92 548.527 338.114 548.527 339.489C548.527 340.875 548.291 342.077 547.82 343.094C547.348 344.105 546.695 344.889 545.859 345.446C545.024 345.997 544.061 346.273 542.97 346.273C542.129 346.273 541.456 346.134 540.95 345.855C540.445 345.571 540.055 345.25 539.783 344.892C539.51 344.528 539.3 344.227 539.152 343.989H538.913V346H536.97ZM538.947 339.455C538.947 340.443 539.092 341.315 539.382 342.071C539.672 342.821 540.095 343.409 540.652 343.835C541.209 344.256 541.891 344.466 542.697 344.466C543.538 344.466 544.24 344.244 544.803 343.801C545.371 343.352 545.797 342.75 546.081 341.994C546.371 341.233 546.516 340.386 546.516 339.455C546.516 338.534 546.374 337.705 546.089 336.966C545.811 336.222 545.388 335.634 544.82 335.202C544.257 334.764 543.55 334.545 542.697 334.545C541.879 334.545 541.192 334.753 540.635 335.168C540.078 335.577 539.658 336.151 539.374 336.889C539.089 337.622 538.947 338.477 538.947 339.455Z" fill="black"/> +<path d="M527.887 431.827C527.887 430.447 526.768 429.327 525.387 429.327C524.007 429.327 522.887 430.447 522.887 431.827H527.887ZM514.287 501C512.906 501 511.93 502.691 512.62 503.887L523.721 523.113C524.411 524.309 526.364 524.309 527.054 523.113L538.154 503.887C538.845 502.691 537.868 501 536.488 501H514.287ZM522.887 431.827V503.5H527.887V431.827H522.887Z" fill="#757575"/> +<rect x="217" y="807" width="280" height="247" rx="6" fill="white"/> +<path d="M268.22 870.5V848.682H276.828C278.475 848.682 279.882 848.977 281.046 849.566C282.218 850.148 283.11 850.976 283.72 852.048C284.338 853.114 284.647 854.367 284.647 855.809C284.647 857.258 284.335 858.504 283.71 859.548C283.085 860.585 282.179 861.381 280.993 861.935C279.814 862.489 278.387 862.766 276.71 862.766H270.947V859.058H275.965C276.845 859.058 277.577 858.937 278.159 858.696C278.742 858.455 279.175 858.092 279.459 857.609C279.75 857.126 279.896 856.526 279.896 855.809C279.896 855.085 279.75 854.474 279.459 853.977C279.175 853.479 278.738 853.103 278.149 852.847C277.566 852.585 276.831 852.453 275.943 852.453H272.833V870.5H268.22ZM280.002 860.571L285.425 870.5H280.333L275.027 860.571H280.002ZM294.356 870.82C292.672 870.82 291.224 870.479 290.009 869.797C288.802 869.108 287.871 868.135 287.218 866.878C286.564 865.614 286.238 864.119 286.238 862.393C286.238 860.71 286.564 859.232 287.218 857.961C287.871 856.69 288.791 855.699 289.977 854.989C291.17 854.278 292.569 853.923 294.175 853.923C295.254 853.923 296.259 854.097 297.189 854.445C298.127 854.786 298.944 855.301 299.64 855.99C300.343 856.679 300.89 857.545 301.28 858.589C301.671 859.626 301.866 860.841 301.866 862.233V863.479H288.049V860.667H297.594C297.594 860.013 297.452 859.435 297.168 858.93C296.884 858.426 296.49 858.032 295.986 857.748C295.488 857.457 294.91 857.311 294.249 857.311C293.56 857.311 292.949 857.471 292.417 857.79C291.891 858.103 291.479 858.526 291.181 859.058C290.883 859.584 290.73 860.17 290.723 860.816V863.49C290.723 864.3 290.872 864.999 291.17 865.589C291.476 866.178 291.905 866.633 292.459 866.952C293.013 867.272 293.67 867.432 294.43 867.432C294.934 867.432 295.396 867.361 295.815 867.219C296.234 867.077 296.593 866.864 296.891 866.58C297.189 866.295 297.417 865.947 297.573 865.536L301.77 865.812C301.557 866.821 301.121 867.702 300.46 868.455C299.807 869.2 298.961 869.783 297.925 870.202C296.895 870.614 295.705 870.82 294.356 870.82ZM308.834 870.809C307.79 870.809 306.86 870.628 306.043 870.266C305.226 869.896 304.58 869.353 304.104 868.636C303.635 867.911 303.401 867.009 303.401 865.93C303.401 865.021 303.568 864.257 303.902 863.639C304.235 863.021 304.69 862.524 305.265 862.148C305.841 861.771 306.494 861.487 307.225 861.295C307.964 861.104 308.738 860.969 309.548 860.891C310.5 860.791 311.267 860.699 311.849 860.614C312.431 860.521 312.854 860.386 313.117 860.209C313.38 860.031 313.511 859.768 313.511 859.42V859.357C313.511 858.682 313.298 858.16 312.872 857.79C312.453 857.421 311.856 857.237 311.082 857.237C310.265 857.237 309.615 857.418 309.132 857.78C308.649 858.135 308.33 858.582 308.174 859.122L303.976 858.781C304.189 857.787 304.608 856.928 305.233 856.203C305.858 855.472 306.664 854.911 307.652 854.52C308.646 854.122 309.797 853.923 311.103 853.923C312.012 853.923 312.882 854.03 313.713 854.243C314.551 854.456 315.294 854.786 315.94 855.234C316.593 855.681 317.108 856.256 317.485 856.96C317.861 857.656 318.049 858.49 318.049 859.463V870.5H313.745V868.231H313.618C313.355 868.742 313.003 869.193 312.563 869.584C312.122 869.967 311.593 870.269 310.975 870.489C310.358 870.702 309.644 870.809 308.834 870.809ZM310.134 867.677C310.801 867.677 311.391 867.545 311.902 867.283C312.414 867.013 312.815 866.651 313.106 866.196C313.397 865.741 313.543 865.227 313.543 864.651V862.915C313.401 863.007 313.206 863.092 312.957 863.17C312.716 863.241 312.442 863.309 312.137 863.373C311.831 863.43 311.526 863.483 311.221 863.533C310.915 863.575 310.638 863.614 310.39 863.65C309.857 863.728 309.392 863.852 308.994 864.023C308.596 864.193 308.287 864.424 308.067 864.715C307.847 864.999 307.737 865.354 307.737 865.781C307.737 866.398 307.961 866.871 308.408 867.197C308.863 867.517 309.438 867.677 310.134 867.677ZM326.94 870.766C325.697 870.766 324.572 870.447 323.563 869.808C322.562 869.161 321.766 868.213 321.177 866.963C320.594 865.706 320.303 864.165 320.303 862.339C320.303 860.464 320.605 858.906 321.209 857.663C321.812 856.413 322.615 855.479 323.616 854.861C324.625 854.236 325.729 853.923 326.929 853.923C327.846 853.923 328.609 854.08 329.22 854.392C329.838 854.697 330.335 855.081 330.711 855.543C331.095 855.997 331.386 856.445 331.585 856.885H331.724V848.682H336.251V870.5H331.777V867.879H331.585C331.372 868.334 331.07 868.785 330.679 869.232C330.296 869.673 329.795 870.038 329.177 870.33C328.567 870.621 327.821 870.766 326.94 870.766ZM328.378 867.155C329.11 867.155 329.728 866.956 330.232 866.558C330.743 866.153 331.134 865.589 331.404 864.864C331.681 864.14 331.819 863.291 331.819 862.318C331.819 861.345 331.684 860.5 331.415 859.783C331.145 859.065 330.754 858.511 330.243 858.121C329.731 857.73 329.11 857.535 328.378 857.535C327.633 857.535 327.004 857.737 326.493 858.142C325.981 858.547 325.594 859.108 325.331 859.825C325.069 860.543 324.937 861.374 324.937 862.318C324.937 863.27 325.069 864.112 325.331 864.843C325.601 865.567 325.988 866.136 326.493 866.548C327.004 866.952 327.633 867.155 328.378 867.155ZM342.124 876.636C341.549 876.636 341.009 876.59 340.505 876.498C340.008 876.413 339.596 876.303 339.269 876.168L340.292 872.78C340.825 872.943 341.304 873.032 341.73 873.046C342.163 873.06 342.536 872.961 342.849 872.748C343.168 872.535 343.428 872.173 343.627 871.661L343.893 870.969L338.023 854.136H342.796L346.183 866.153H346.354L349.774 854.136H354.578L348.218 872.268C347.913 873.149 347.497 873.916 346.972 874.57C346.453 875.23 345.796 875.738 345.001 876.093C344.205 876.455 343.247 876.636 342.124 876.636ZM371.228 854.136V857.545H361.373V854.136H371.228ZM363.611 850.216H368.149V865.472C368.149 865.891 368.213 866.217 368.341 866.452C368.469 866.679 368.646 866.839 368.873 866.931C369.108 867.023 369.378 867.07 369.683 867.07C369.896 867.07 370.109 867.052 370.322 867.016C370.535 866.974 370.699 866.942 370.812 866.92L371.526 870.298C371.299 870.369 370.979 870.45 370.567 870.543C370.155 870.642 369.655 870.702 369.065 870.724C367.971 870.766 367.013 870.621 366.189 870.287C365.372 869.953 364.736 869.435 364.282 868.732C363.827 868.028 363.604 867.141 363.611 866.068V850.216ZM380.742 870.82C379.087 870.82 377.656 870.468 376.449 869.765C375.248 869.055 374.321 868.067 373.668 866.803C373.015 865.532 372.688 864.058 372.688 862.382C372.688 860.692 373.015 859.214 373.668 857.95C374.321 856.679 375.248 855.692 376.449 854.989C377.656 854.278 379.087 853.923 380.742 853.923C382.397 853.923 383.824 854.278 385.025 854.989C386.232 855.692 387.162 856.679 387.816 857.95C388.469 859.214 388.796 860.692 388.796 862.382C388.796 864.058 388.469 865.532 387.816 866.803C387.162 868.067 386.232 869.055 385.025 869.765C383.824 870.468 382.397 870.82 380.742 870.82ZM380.763 867.304C381.516 867.304 382.145 867.091 382.649 866.665C383.153 866.232 383.533 865.642 383.789 864.896C384.052 864.151 384.183 863.302 384.183 862.35C384.183 861.398 384.052 860.55 383.789 859.804C383.533 859.058 383.153 858.469 382.649 858.036C382.145 857.602 381.516 857.386 380.763 857.386C380.003 857.386 379.364 857.602 378.846 858.036C378.334 858.469 377.947 859.058 377.684 859.804C377.429 860.55 377.301 861.398 377.301 862.35C377.301 863.302 377.429 864.151 377.684 864.896C377.947 865.642 378.334 866.232 378.846 866.665C379.364 867.091 380.003 867.304 380.763 867.304ZM407.864 863.533V854.136H412.402V870.5H408.045V867.528H407.874C407.505 868.487 406.891 869.257 406.031 869.839C405.179 870.422 404.139 870.713 402.91 870.713C401.816 870.713 400.854 870.464 400.023 869.967C399.192 869.47 398.542 868.763 398.073 867.847C397.612 866.931 397.377 865.834 397.37 864.555V854.136H401.909V863.746C401.916 864.712 402.175 865.475 402.686 866.036C403.198 866.597 403.883 866.878 404.742 866.878C405.289 866.878 405.801 866.754 406.276 866.505C406.752 866.249 407.136 865.873 407.427 865.376C407.725 864.879 407.871 864.264 407.864 863.533ZM428.987 858.803L424.833 859.058C424.762 858.703 424.609 858.384 424.374 858.099C424.14 857.808 423.831 857.577 423.448 857.407C423.071 857.229 422.62 857.141 422.095 857.141C421.392 857.141 420.798 857.29 420.316 857.588C419.833 857.879 419.591 858.27 419.591 858.76C419.591 859.151 419.747 859.481 420.06 859.751C420.372 860.021 420.909 860.237 421.668 860.401L424.63 860.997C426.221 861.324 427.407 861.849 428.188 862.574C428.97 863.298 429.36 864.25 429.36 865.429C429.36 866.501 429.044 867.442 428.412 868.252C427.787 869.062 426.928 869.694 425.834 870.148C424.747 870.596 423.494 870.82 422.073 870.82C419.907 870.82 418.181 870.369 416.896 869.467C415.617 868.558 414.868 867.322 414.648 865.759L419.112 865.525C419.247 866.185 419.573 866.69 420.092 867.038C420.61 867.379 421.274 867.549 422.084 867.549C422.879 867.549 423.519 867.396 424.002 867.091C424.492 866.778 424.74 866.377 424.747 865.887C424.74 865.475 424.566 865.138 424.225 864.875C423.884 864.605 423.359 864.399 422.649 864.257L419.815 863.692C418.217 863.373 417.027 862.819 416.246 862.031C415.472 861.242 415.085 860.237 415.085 859.016C415.085 857.964 415.369 857.059 415.937 856.299C416.512 855.539 417.318 854.953 418.355 854.541C419.399 854.129 420.621 853.923 422.02 853.923C424.087 853.923 425.713 854.36 426.899 855.234C428.092 856.107 428.789 857.297 428.987 858.803ZM439.015 870.82C437.332 870.82 435.883 870.479 434.669 869.797C433.461 869.108 432.531 868.135 431.878 866.878C431.224 865.614 430.898 864.119 430.898 862.393C430.898 860.71 431.224 859.232 431.878 857.961C432.531 856.69 433.451 855.699 434.637 854.989C435.83 854.278 437.229 853.923 438.834 853.923C439.914 853.923 440.919 854.097 441.849 854.445C442.787 854.786 443.603 855.301 444.3 855.99C445.003 856.679 445.55 857.545 445.94 858.589C446.331 859.626 446.526 860.841 446.526 862.233V863.479H432.709V860.667H442.254C442.254 860.013 442.112 859.435 441.828 858.93C441.544 858.426 441.15 858.032 440.645 857.748C440.148 857.457 439.569 857.311 438.909 857.311C438.22 857.311 437.609 857.471 437.076 857.79C436.551 858.103 436.139 858.526 435.841 859.058C435.542 859.584 435.39 860.17 435.383 860.816V863.49C435.383 864.3 435.532 864.999 435.83 865.589C436.135 866.178 436.565 866.633 437.119 866.952C437.673 867.272 438.33 867.432 439.09 867.432C439.594 867.432 440.056 867.361 440.475 867.219C440.894 867.077 441.253 866.864 441.551 866.58C441.849 866.295 442.076 865.947 442.233 865.536L446.43 865.812C446.217 866.821 445.78 867.702 445.12 868.455C444.466 869.2 443.621 869.783 442.584 870.202C441.554 870.614 440.365 870.82 439.015 870.82ZM298.767 906.5H293.38V889.045H299.005C300.698 889.045 302.147 889.395 303.352 890.094C304.556 890.787 305.48 891.784 306.122 893.085C306.764 894.381 307.085 895.932 307.085 897.739C307.085 899.557 306.761 901.122 306.113 902.435C305.465 903.741 304.522 904.747 303.284 905.452C302.045 906.151 300.539 906.5 298.767 906.5ZM295.494 904.625H298.63C300.073 904.625 301.269 904.347 302.218 903.79C303.167 903.233 303.875 902.44 304.34 901.412C304.806 900.384 305.039 899.159 305.039 897.739C305.039 896.33 304.809 895.116 304.349 894.099C303.889 893.077 303.201 892.293 302.287 891.747C301.372 891.196 300.233 890.92 298.869 890.92H295.494V904.625ZM313.682 906.807C312.852 906.807 312.099 906.651 311.423 906.338C310.747 906.02 310.21 905.562 309.812 904.966C309.415 904.364 309.216 903.636 309.216 902.784C309.216 902.034 309.364 901.426 309.659 900.96C309.955 900.489 310.349 900.119 310.844 899.852C311.338 899.585 311.884 899.386 312.48 899.256C313.082 899.119 313.687 899.011 314.295 898.932C315.091 898.83 315.736 898.753 316.23 898.702C316.73 898.645 317.094 898.551 317.321 898.42C317.554 898.29 317.67 898.062 317.67 897.739V897.67C317.67 896.83 317.44 896.176 316.98 895.71C316.526 895.244 315.835 895.011 314.909 895.011C313.949 895.011 313.196 895.222 312.651 895.642C312.105 896.062 311.722 896.511 311.5 896.989L309.591 896.307C309.932 895.511 310.386 894.892 310.955 894.449C311.528 894 312.153 893.687 312.83 893.511C313.511 893.33 314.182 893.239 314.841 893.239C315.261 893.239 315.744 893.29 316.29 893.392C316.841 893.489 317.372 893.69 317.884 893.997C318.401 894.304 318.83 894.767 319.17 895.386C319.511 896.006 319.682 896.835 319.682 897.875V906.5H317.67V904.727H317.568C317.432 905.011 317.205 905.315 316.886 905.639C316.568 905.963 316.145 906.239 315.616 906.466C315.088 906.693 314.443 906.807 313.682 906.807ZM313.989 905C314.784 905 315.455 904.844 316 904.531C316.551 904.219 316.966 903.815 317.244 903.321C317.528 902.827 317.67 902.307 317.67 901.761V899.92C317.585 900.023 317.398 900.116 317.108 900.202C316.824 900.281 316.494 900.352 316.119 900.415C315.75 900.472 315.389 900.523 315.037 900.568C314.69 900.608 314.409 900.642 314.193 900.67C313.67 900.739 313.182 900.849 312.727 901.003C312.278 901.151 311.915 901.375 311.636 901.676C311.364 901.972 311.227 902.375 311.227 902.886C311.227 903.585 311.486 904.114 312.003 904.472C312.526 904.824 313.187 905 313.989 905ZM332.098 896.341L330.291 896.852C330.177 896.551 330.01 896.259 329.788 895.974C329.572 895.685 329.277 895.446 328.902 895.259C328.527 895.071 328.047 894.977 327.461 894.977C326.66 894.977 325.993 895.162 325.458 895.531C324.93 895.895 324.666 896.358 324.666 896.92C324.666 897.42 324.848 897.815 325.211 898.105C325.575 898.395 326.143 898.636 326.916 898.83L328.859 899.307C330.03 899.591 330.902 900.026 331.476 900.611C332.049 901.19 332.336 901.937 332.336 902.852C332.336 903.602 332.12 904.273 331.689 904.864C331.262 905.455 330.666 905.92 329.899 906.261C329.132 906.602 328.24 906.773 327.223 906.773C325.887 906.773 324.782 906.483 323.907 905.903C323.032 905.324 322.478 904.477 322.245 903.364L324.155 902.886C324.336 903.591 324.68 904.119 325.186 904.472C325.697 904.824 326.365 905 327.189 905C328.126 905 328.87 904.801 329.422 904.403C329.978 904 330.257 903.517 330.257 902.955C330.257 902.5 330.098 902.119 329.78 901.812C329.461 901.5 328.973 901.267 328.314 901.114L326.132 900.602C324.933 900.318 324.052 899.878 323.49 899.281C322.933 898.679 322.655 897.926 322.655 897.023C322.655 896.284 322.862 895.631 323.277 895.062C323.697 894.494 324.268 894.048 324.99 893.724C325.717 893.401 326.541 893.239 327.461 893.239C328.757 893.239 329.774 893.523 330.512 894.091C331.257 894.659 331.785 895.409 332.098 896.341ZM336.847 898.625V906.5H334.836V889.045H336.847V895.455H337.018C337.325 894.778 337.785 894.241 338.399 893.844C339.018 893.44 339.842 893.239 340.87 893.239C341.762 893.239 342.543 893.418 343.214 893.776C343.884 894.128 344.404 894.67 344.774 895.403C345.149 896.131 345.336 897.057 345.336 898.182V906.5H343.325V898.318C343.325 897.278 343.055 896.474 342.515 895.906C341.981 895.332 341.239 895.045 340.291 895.045C339.631 895.045 339.041 895.185 338.518 895.463C338.001 895.741 337.592 896.148 337.291 896.682C336.995 897.216 336.847 897.864 336.847 898.625ZM348.76 906.5V889.045H350.772V895.489H350.942C351.09 895.261 351.295 894.972 351.556 894.619C351.823 894.261 352.204 893.943 352.698 893.665C353.198 893.381 353.874 893.239 354.726 893.239C355.829 893.239 356.8 893.514 357.641 894.065C358.482 894.616 359.138 895.398 359.61 896.409C360.081 897.42 360.317 898.614 360.317 899.989C360.317 901.375 360.081 902.577 359.61 903.594C359.138 904.605 358.485 905.389 357.65 905.946C356.814 906.497 355.851 906.773 354.76 906.773C353.92 906.773 353.246 906.634 352.741 906.355C352.235 906.071 351.846 905.75 351.573 905.392C351.3 905.028 351.09 904.727 350.942 904.489H350.704V906.5H348.76ZM350.738 899.955C350.738 900.943 350.883 901.815 351.172 902.571C351.462 903.321 351.885 903.909 352.442 904.335C352.999 904.756 353.681 904.966 354.488 904.966C355.329 904.966 356.03 904.744 356.593 904.301C357.161 903.852 357.587 903.25 357.871 902.494C358.161 901.733 358.306 900.886 358.306 899.955C358.306 899.034 358.164 898.205 357.88 897.466C357.601 896.722 357.178 896.134 356.61 895.702C356.047 895.264 355.34 895.045 354.488 895.045C353.67 895.045 352.982 895.253 352.425 895.668C351.868 896.077 351.448 896.651 351.164 897.389C350.88 898.122 350.738 898.977 350.738 899.955ZM368.184 906.773C367.002 906.773 365.965 906.491 365.073 905.929C364.187 905.366 363.494 904.58 362.994 903.568C362.499 902.557 362.252 901.375 362.252 900.023C362.252 898.659 362.499 897.469 362.994 896.452C363.494 895.435 364.187 894.645 365.073 894.082C365.965 893.52 367.002 893.239 368.184 893.239C369.366 893.239 370.4 893.52 371.286 894.082C372.178 894.645 372.872 895.435 373.366 896.452C373.866 897.469 374.116 898.659 374.116 900.023C374.116 901.375 373.866 902.557 373.366 903.568C372.872 904.58 372.178 905.366 371.286 905.929C370.4 906.491 369.366 906.773 368.184 906.773ZM368.184 904.966C369.082 904.966 369.821 904.736 370.4 904.276C370.98 903.815 371.409 903.21 371.687 902.46C371.965 901.71 372.105 900.898 372.105 900.023C372.105 899.148 371.965 898.332 371.687 897.577C371.409 896.821 370.98 896.21 370.4 895.744C369.821 895.278 369.082 895.045 368.184 895.045C367.286 895.045 366.548 895.278 365.968 895.744C365.389 896.21 364.96 896.821 364.681 897.577C364.403 898.332 364.264 899.148 364.264 900.023C364.264 900.898 364.403 901.71 364.681 902.46C364.96 903.21 365.389 903.815 365.968 904.276C366.548 904.736 367.286 904.966 368.184 904.966ZM380.511 906.807C379.681 906.807 378.928 906.651 378.252 906.338C377.576 906.02 377.039 905.562 376.641 904.966C376.244 904.364 376.045 903.636 376.045 902.784C376.045 902.034 376.192 901.426 376.488 900.96C376.783 900.489 377.178 900.119 377.672 899.852C378.167 899.585 378.712 899.386 379.309 899.256C379.911 899.119 380.516 899.011 381.124 898.932C381.92 898.83 382.565 898.753 383.059 898.702C383.559 898.645 383.922 898.551 384.15 898.42C384.383 898.29 384.499 898.062 384.499 897.739V897.67C384.499 896.83 384.269 896.176 383.809 895.71C383.354 895.244 382.664 895.011 381.738 895.011C380.778 895.011 380.025 895.222 379.479 895.642C378.934 896.062 378.55 896.511 378.329 896.989L376.42 896.307C376.761 895.511 377.215 894.892 377.783 894.449C378.357 894 378.982 893.687 379.658 893.511C380.34 893.33 381.011 893.239 381.67 893.239C382.09 893.239 382.573 893.29 383.119 893.392C383.67 893.489 384.201 893.69 384.712 893.997C385.229 894.304 385.658 894.767 385.999 895.386C386.34 896.006 386.511 896.835 386.511 897.875V906.5H384.499V904.727H384.397C384.261 905.011 384.033 905.315 383.715 905.639C383.397 905.963 382.974 906.239 382.445 906.466C381.917 906.693 381.272 906.807 380.511 906.807ZM380.817 905C381.613 905 382.283 904.844 382.829 904.531C383.38 904.219 383.795 903.815 384.073 903.321C384.357 902.827 384.499 902.307 384.499 901.761V899.92C384.414 900.023 384.226 900.116 383.937 900.202C383.653 900.281 383.323 900.352 382.948 900.415C382.579 900.472 382.218 900.523 381.866 900.568C381.519 900.608 381.238 900.642 381.022 900.67C380.499 900.739 380.011 900.849 379.556 901.003C379.107 901.151 378.744 901.375 378.465 901.676C378.192 901.972 378.056 902.375 378.056 902.886C378.056 903.585 378.315 904.114 378.832 904.472C379.354 904.824 380.016 905 380.817 905ZM389.654 906.5V893.409H391.597V895.386H391.733C391.972 894.739 392.404 894.213 393.029 893.81C393.654 893.406 394.358 893.205 395.142 893.205C395.29 893.205 395.475 893.207 395.696 893.213C395.918 893.219 396.086 893.227 396.199 893.239V895.284C396.131 895.267 395.975 895.241 395.73 895.207C395.492 895.168 395.239 895.148 394.972 895.148C394.336 895.148 393.767 895.281 393.267 895.548C392.773 895.81 392.381 896.173 392.091 896.639C391.807 897.099 391.665 897.625 391.665 898.216V906.5H389.654ZM402.6 906.773C401.509 906.773 400.546 906.497 399.711 905.946C398.876 905.389 398.222 904.605 397.751 903.594C397.279 902.577 397.043 901.375 397.043 899.989C397.043 898.614 397.279 897.42 397.751 896.409C398.222 895.398 398.879 894.616 399.719 894.065C400.56 893.514 401.532 893.239 402.634 893.239C403.487 893.239 404.16 893.381 404.654 893.665C405.154 893.943 405.535 894.261 405.796 894.619C406.063 894.972 406.271 895.261 406.418 895.489H406.589V889.045H408.6V906.5H406.657V904.489H406.418C406.271 904.727 406.06 905.028 405.788 905.392C405.515 905.75 405.126 906.071 404.62 906.355C404.114 906.634 403.441 906.773 402.6 906.773ZM402.873 904.966C403.68 904.966 404.362 904.756 404.918 904.335C405.475 903.909 405.898 903.321 406.188 902.571C406.478 901.815 406.623 900.943 406.623 899.955C406.623 898.977 406.481 898.122 406.197 897.389C405.913 896.651 405.492 896.077 404.935 895.668C404.379 895.253 403.691 895.045 402.873 895.045C402.021 895.045 401.31 895.264 400.742 895.702C400.18 896.134 399.756 896.722 399.472 897.466C399.194 898.205 399.055 899.034 399.055 899.955C399.055 900.886 399.197 901.733 399.481 902.494C399.771 903.25 400.197 903.852 400.759 904.301C401.327 904.744 402.032 904.966 402.873 904.966ZM421.308 896.341L419.501 896.852C419.387 896.551 419.22 896.259 418.998 895.974C418.782 895.685 418.487 895.446 418.112 895.259C417.737 895.071 417.257 894.977 416.672 894.977C415.87 894.977 415.203 895.162 414.669 895.531C414.14 895.895 413.876 896.358 413.876 896.92C413.876 897.42 414.058 897.815 414.422 898.105C414.785 898.395 415.353 898.636 416.126 898.83L418.069 899.307C419.24 899.591 420.112 900.026 420.686 900.611C421.26 901.19 421.547 901.937 421.547 902.852C421.547 903.602 421.331 904.273 420.899 904.864C420.473 905.455 419.876 905.92 419.109 906.261C418.342 906.602 417.45 906.773 416.433 906.773C415.098 906.773 413.993 906.483 413.118 905.903C412.243 905.324 411.689 904.477 411.456 903.364L413.365 902.886C413.547 903.591 413.89 904.119 414.396 904.472C414.907 904.824 415.575 905 416.399 905C417.336 905 418.081 904.801 418.632 904.403C419.189 904 419.467 903.517 419.467 902.955C419.467 902.5 419.308 902.119 418.99 901.812C418.672 901.5 418.183 901.267 417.524 901.114L415.342 900.602C414.143 900.318 413.262 899.878 412.7 899.281C412.143 898.679 411.865 897.926 411.865 897.023C411.865 896.284 412.072 895.631 412.487 895.062C412.907 894.494 413.478 894.048 414.2 893.724C414.927 893.401 415.751 893.239 416.672 893.239C417.967 893.239 418.984 893.523 419.723 894.091C420.467 894.659 420.995 895.409 421.308 896.341ZM285.695 925.045L290.877 939.739H291.082L296.263 925.045H298.479L292.07 942.5H289.888L283.479 925.045H285.695ZM300.397 942.5V929.409H302.409V942.5H300.397ZM301.42 927.227C301.028 927.227 300.69 927.094 300.406 926.827C300.127 926.56 299.988 926.239 299.988 925.864C299.988 925.489 300.127 925.168 300.406 924.901C300.69 924.634 301.028 924.5 301.42 924.5C301.812 924.5 302.147 924.634 302.426 924.901C302.71 925.168 302.852 925.489 302.852 925.864C302.852 926.239 302.71 926.56 302.426 926.827C302.147 927.094 301.812 927.227 301.42 927.227ZM314.837 932.341L313.03 932.852C312.917 932.551 312.749 932.259 312.528 931.974C312.312 931.685 312.016 931.446 311.641 931.259C311.266 931.071 310.786 930.977 310.201 930.977C309.4 930.977 308.732 931.162 308.198 931.531C307.67 931.895 307.405 932.358 307.405 932.92C307.405 933.42 307.587 933.815 307.951 934.105C308.315 934.395 308.883 934.636 309.655 934.83L311.599 935.307C312.769 935.591 313.641 936.026 314.215 936.611C314.789 937.19 315.076 937.937 315.076 938.852C315.076 939.602 314.86 940.273 314.428 940.864C314.002 941.455 313.405 941.92 312.638 942.261C311.871 942.602 310.979 942.773 309.962 942.773C308.627 942.773 307.522 942.483 306.647 941.903C305.772 941.324 305.218 940.477 304.985 939.364L306.894 938.886C307.076 939.591 307.42 940.119 307.925 940.472C308.437 940.824 309.104 941 309.928 941C310.866 941 311.61 940.801 312.161 940.403C312.718 940 312.996 939.517 312.996 938.955C312.996 938.5 312.837 938.119 312.519 937.812C312.201 937.5 311.712 937.267 311.053 937.114L308.871 936.602C307.673 936.318 306.792 935.878 306.229 935.281C305.673 934.679 305.394 933.926 305.394 933.023C305.394 932.284 305.601 931.631 306.016 931.062C306.437 930.494 307.008 930.048 307.729 929.724C308.457 929.401 309.28 929.239 310.201 929.239C311.496 929.239 312.513 929.523 313.252 930.091C313.996 930.659 314.525 931.409 314.837 932.341ZM325.826 937.148V929.409H327.837V942.5H325.826V940.284H325.689C325.382 940.949 324.905 941.514 324.257 941.98C323.61 942.44 322.792 942.67 321.803 942.67C320.985 942.67 320.257 942.491 319.621 942.134C318.985 941.77 318.485 941.224 318.121 940.497C317.757 939.764 317.576 938.841 317.576 937.727V929.409H319.587V937.591C319.587 938.545 319.854 939.307 320.388 939.875C320.928 940.443 321.615 940.727 322.451 940.727C322.951 940.727 323.459 940.599 323.976 940.344C324.499 940.088 324.936 939.696 325.289 939.168C325.647 938.639 325.826 937.966 325.826 937.148ZM334.845 942.807C334.016 942.807 333.263 942.651 332.587 942.338C331.911 942.02 331.374 941.562 330.976 940.966C330.578 940.364 330.379 939.636 330.379 938.784C330.379 938.034 330.527 937.426 330.822 936.96C331.118 936.489 331.513 936.119 332.007 935.852C332.501 935.585 333.047 935.386 333.644 935.256C334.246 935.119 334.851 935.011 335.459 934.932C336.254 934.83 336.899 934.753 337.394 934.702C337.894 934.645 338.257 934.551 338.484 934.42C338.717 934.29 338.834 934.062 338.834 933.739V933.67C338.834 932.83 338.604 932.176 338.144 931.71C337.689 931.244 336.999 931.011 336.072 931.011C335.112 931.011 334.359 931.222 333.814 931.642C333.269 932.062 332.885 932.511 332.663 932.989L330.754 932.307C331.095 931.511 331.55 930.892 332.118 930.449C332.692 930 333.317 929.687 333.993 929.511C334.675 929.33 335.345 929.239 336.004 929.239C336.425 929.239 336.908 929.29 337.453 929.392C338.004 929.489 338.536 929.69 339.047 929.997C339.564 930.304 339.993 930.767 340.334 931.386C340.675 932.006 340.845 932.835 340.845 933.875V942.5H338.834V940.727H338.732C338.595 941.011 338.368 941.315 338.05 941.639C337.732 941.963 337.308 942.239 336.78 942.466C336.251 942.693 335.607 942.807 334.845 942.807ZM335.152 941C335.947 941 336.618 940.844 337.163 940.531C337.715 940.219 338.129 939.815 338.408 939.321C338.692 938.827 338.834 938.307 338.834 937.761V935.92C338.749 936.023 338.561 936.116 338.271 936.202C337.987 936.281 337.658 936.352 337.283 936.415C336.913 936.472 336.553 936.523 336.2 936.568C335.854 936.608 335.572 936.642 335.357 936.67C334.834 936.739 334.345 936.849 333.891 937.003C333.442 937.151 333.078 937.375 332.8 937.676C332.527 937.972 332.391 938.375 332.391 938.886C332.391 939.585 332.649 940.114 333.166 940.472C333.689 940.824 334.351 941 335.152 941ZM346 925.045V942.5H343.988V925.045H346ZM349.156 942.5V929.409H351.167V942.5H349.156ZM350.178 927.227C349.786 927.227 349.448 927.094 349.164 926.827C348.886 926.56 348.747 926.239 348.747 925.864C348.747 925.489 348.886 925.168 349.164 924.901C349.448 924.634 349.786 924.5 350.178 924.5C350.57 924.5 350.906 924.634 351.184 924.901C351.468 925.168 351.61 925.489 351.61 925.864C351.61 926.239 351.468 926.56 351.184 926.827C350.906 927.094 350.57 927.227 350.178 927.227ZM353.948 942.5V940.966L361.38 931.42V931.284H354.187V929.409H363.971V931.011L356.743 940.489V940.625H364.209V942.5H353.948ZM370.632 942.807C369.802 942.807 369.049 942.651 368.373 942.338C367.697 942.02 367.16 941.562 366.762 940.966C366.365 940.364 366.166 939.636 366.166 938.784C366.166 938.034 366.313 937.426 366.609 936.96C366.904 936.489 367.299 936.119 367.794 935.852C368.288 935.585 368.833 935.386 369.43 935.256C370.032 935.119 370.637 935.011 371.245 934.932C372.041 934.83 372.686 934.753 373.18 934.702C373.68 934.645 374.044 934.551 374.271 934.42C374.504 934.29 374.62 934.062 374.62 933.739V933.67C374.62 932.83 374.39 932.176 373.93 931.71C373.475 931.244 372.785 931.011 371.859 931.011C370.899 931.011 370.146 931.222 369.6 931.642C369.055 932.062 368.671 932.511 368.45 932.989L366.541 932.307C366.882 931.511 367.336 930.892 367.904 930.449C368.478 930 369.103 929.687 369.779 929.511C370.461 929.33 371.132 929.239 371.791 929.239C372.211 929.239 372.694 929.29 373.24 929.392C373.791 929.489 374.322 929.69 374.833 929.997C375.35 930.304 375.779 930.767 376.12 931.386C376.461 932.006 376.632 932.835 376.632 933.875V942.5H374.62V940.727H374.518C374.382 941.011 374.154 941.315 373.836 941.639C373.518 941.963 373.095 942.239 372.566 942.466C372.038 942.693 371.393 942.807 370.632 942.807ZM370.938 941C371.734 941 372.404 940.844 372.95 940.531C373.501 940.219 373.916 939.815 374.194 939.321C374.478 938.827 374.62 938.307 374.62 937.761V935.92C374.535 936.023 374.348 936.116 374.058 936.202C373.774 936.281 373.444 936.352 373.069 936.415C372.7 936.472 372.339 936.523 371.987 936.568C371.64 936.608 371.359 936.642 371.143 936.67C370.62 936.739 370.132 936.849 369.677 937.003C369.228 937.151 368.865 937.375 368.586 937.676C368.313 937.972 368.177 938.375 368.177 938.886C368.177 939.585 368.436 940.114 368.953 940.472C369.475 940.824 370.137 941 370.938 941ZM385.468 929.409V931.114H378.684V929.409H385.468ZM380.661 926.273H382.673V938.75C382.673 939.318 382.755 939.744 382.92 940.028C383.09 940.307 383.306 940.494 383.567 940.591C383.834 940.682 384.116 940.727 384.411 940.727C384.633 940.727 384.815 940.716 384.957 940.693C385.099 940.665 385.212 940.642 385.298 940.625L385.707 942.432C385.57 942.483 385.38 942.534 385.136 942.585C384.891 942.642 384.582 942.67 384.207 942.67C383.638 942.67 383.082 942.548 382.536 942.304C381.996 942.06 381.548 941.688 381.19 941.188C380.837 940.688 380.661 940.057 380.661 939.295V926.273ZM387.966 942.5V929.409H389.977V942.5H387.966ZM388.988 927.227C388.596 927.227 388.258 927.094 387.974 926.827C387.696 926.56 387.556 926.239 387.556 925.864C387.556 925.489 387.696 925.168 387.974 924.901C388.258 924.634 388.596 924.5 388.988 924.5C389.38 924.5 389.716 924.634 389.994 924.901C390.278 925.168 390.42 925.489 390.42 925.864C390.42 926.239 390.278 926.56 389.994 926.827C389.716 927.094 389.38 927.227 388.988 927.227ZM398.451 942.773C397.269 942.773 396.232 942.491 395.34 941.929C394.454 941.366 393.761 940.58 393.261 939.568C392.766 938.557 392.519 937.375 392.519 936.023C392.519 934.659 392.766 933.469 393.261 932.452C393.761 931.435 394.454 930.645 395.34 930.082C396.232 929.52 397.269 929.239 398.451 929.239C399.633 929.239 400.667 929.52 401.553 930.082C402.445 930.645 403.139 931.435 403.633 932.452C404.133 933.469 404.383 934.659 404.383 936.023C404.383 937.375 404.133 938.557 403.633 939.568C403.139 940.58 402.445 941.366 401.553 941.929C400.667 942.491 399.633 942.773 398.451 942.773ZM398.451 940.966C399.349 940.966 400.087 940.736 400.667 940.276C401.247 939.815 401.675 939.21 401.954 938.46C402.232 937.71 402.372 936.898 402.372 936.023C402.372 935.148 402.232 934.332 401.954 933.577C401.675 932.821 401.247 932.21 400.667 931.744C400.087 931.278 399.349 931.045 398.451 931.045C397.553 931.045 396.815 931.278 396.235 931.744C395.656 932.21 395.227 932.821 394.948 933.577C394.67 934.332 394.531 935.148 394.531 936.023C394.531 936.898 394.67 937.71 394.948 938.46C395.227 939.21 395.656 939.815 396.235 940.276C396.815 940.736 397.553 940.966 398.451 940.966ZM408.937 934.625V942.5H406.925V929.409H408.868V931.455H409.039C409.346 930.79 409.812 930.256 410.437 929.852C411.062 929.443 411.868 929.239 412.857 929.239C413.743 929.239 414.519 929.42 415.184 929.784C415.848 930.142 416.366 930.688 416.735 931.42C417.104 932.148 417.289 933.068 417.289 934.182V942.5H415.277V934.318C415.277 933.29 415.01 932.489 414.476 931.915C413.942 931.335 413.209 931.045 412.277 931.045C411.635 931.045 411.062 931.185 410.556 931.463C410.056 931.741 409.661 932.148 409.371 932.682C409.081 933.216 408.937 933.864 408.937 934.625ZM429.709 932.341L427.902 932.852C427.789 932.551 427.621 932.259 427.399 931.974C427.183 931.685 426.888 931.446 426.513 931.259C426.138 931.071 425.658 930.977 425.073 930.977C424.271 930.977 423.604 931.162 423.07 931.531C422.541 931.895 422.277 932.358 422.277 932.92C422.277 933.42 422.459 933.815 422.823 934.105C423.186 934.395 423.754 934.636 424.527 934.83L426.47 935.307C427.641 935.591 428.513 936.026 429.087 936.611C429.661 937.19 429.948 937.937 429.948 938.852C429.948 939.602 429.732 940.273 429.3 940.864C428.874 941.455 428.277 941.92 427.51 942.261C426.743 942.602 425.851 942.773 424.834 942.773C423.499 942.773 422.394 942.483 421.519 941.903C420.644 941.324 420.09 940.477 419.857 939.364L421.766 938.886C421.948 939.591 422.291 940.119 422.797 940.472C423.308 940.824 423.976 941 424.8 941C425.737 941 426.482 940.801 427.033 940.403C427.59 940 427.868 939.517 427.868 938.955C427.868 938.5 427.709 938.119 427.391 937.812C427.073 937.5 426.584 937.267 425.925 937.114L423.743 936.602C422.544 936.318 421.664 935.878 421.101 935.281C420.544 934.679 420.266 933.926 420.266 933.023C420.266 932.284 420.473 931.631 420.888 931.062C421.308 930.494 421.879 930.048 422.601 929.724C423.328 929.401 424.152 929.239 425.073 929.239C426.368 929.239 427.385 929.523 428.124 930.091C428.868 930.659 429.396 931.409 429.709 932.341ZM257.87 978.5H255.654L262.063 961.045H264.245L270.654 978.5H268.438L263.222 963.807H263.086L257.87 978.5ZM258.688 971.682H267.62V973.557H258.688V971.682ZM274.583 970.625V978.5H272.572V965.409H274.515V967.455H274.686C274.993 966.79 275.458 966.256 276.083 965.852C276.708 965.443 277.515 965.239 278.504 965.239C279.39 965.239 280.166 965.42 280.831 965.784C281.495 966.142 282.012 966.688 282.382 967.42C282.751 968.148 282.936 969.068 282.936 970.182V978.5H280.924V970.318C280.924 969.29 280.657 968.489 280.123 967.915C279.589 967.335 278.856 967.045 277.924 967.045C277.282 967.045 276.708 967.185 276.203 967.463C275.703 967.741 275.308 968.148 275.018 968.682C274.728 969.216 274.583 969.864 274.583 970.625ZM291.401 978.773C290.219 978.773 289.183 978.491 288.291 977.929C287.404 977.366 286.711 976.58 286.211 975.568C285.717 974.557 285.469 973.375 285.469 972.023C285.469 970.659 285.717 969.469 286.211 968.452C286.711 967.435 287.404 966.645 288.291 966.082C289.183 965.52 290.219 965.239 291.401 965.239C292.583 965.239 293.617 965.52 294.504 966.082C295.396 966.645 296.089 967.435 296.583 968.452C297.083 969.469 297.333 970.659 297.333 972.023C297.333 973.375 297.083 974.557 296.583 975.568C296.089 976.58 295.396 977.366 294.504 977.929C293.617 978.491 292.583 978.773 291.401 978.773ZM291.401 976.966C292.299 976.966 293.038 976.736 293.617 976.276C294.197 975.815 294.626 975.21 294.904 974.46C295.183 973.71 295.322 972.898 295.322 972.023C295.322 971.148 295.183 970.332 294.904 969.577C294.626 968.821 294.197 968.21 293.617 967.744C293.038 967.278 292.299 967.045 291.401 967.045C290.504 967.045 289.765 967.278 289.185 967.744C288.606 968.21 288.177 968.821 287.898 969.577C287.62 970.332 287.481 971.148 287.481 972.023C287.481 972.898 287.62 973.71 287.898 974.46C288.177 975.21 288.606 975.815 289.185 976.276C289.765 976.736 290.504 976.966 291.401 976.966ZM299.875 978.5V965.409H301.819V967.455H301.989C302.262 966.756 302.702 966.213 303.31 965.827C303.918 965.435 304.648 965.239 305.5 965.239C306.364 965.239 307.083 965.435 307.657 965.827C308.236 966.213 308.688 966.756 309.012 967.455H309.148C309.483 966.778 309.986 966.241 310.657 965.844C311.327 965.44 312.131 965.239 313.069 965.239C314.239 965.239 315.196 965.605 315.941 966.338C316.685 967.065 317.057 968.199 317.057 969.739V978.5H315.046V969.739C315.046 968.773 314.782 968.082 314.253 967.668C313.725 967.253 313.103 967.045 312.387 967.045C311.466 967.045 310.753 967.324 310.248 967.881C309.742 968.432 309.489 969.131 309.489 969.977V978.5H307.444V969.534C307.444 968.79 307.202 968.19 306.719 967.736C306.236 967.276 305.614 967.045 304.853 967.045C304.33 967.045 303.841 967.185 303.387 967.463C302.938 967.741 302.574 968.128 302.296 968.622C302.023 969.111 301.887 969.676 301.887 970.318V978.5H299.875ZM324.059 978.807C323.23 978.807 322.477 978.651 321.801 978.338C321.124 978.02 320.587 977.562 320.19 976.966C319.792 976.364 319.593 975.636 319.593 974.784C319.593 974.034 319.741 973.426 320.036 972.96C320.332 972.489 320.727 972.119 321.221 971.852C321.715 971.585 322.261 971.386 322.857 971.256C323.46 971.119 324.065 971.011 324.673 970.932C325.468 970.83 326.113 970.753 326.607 970.702C327.107 970.645 327.471 970.551 327.698 970.42C327.931 970.29 328.048 970.062 328.048 969.739V969.67C328.048 968.83 327.818 968.176 327.357 967.71C326.903 967.244 326.212 967.011 325.286 967.011C324.326 967.011 323.573 967.222 323.028 967.642C322.482 968.062 322.099 968.511 321.877 968.989L319.968 968.307C320.309 967.511 320.764 966.892 321.332 966.449C321.906 966 322.531 965.687 323.207 965.511C323.889 965.33 324.559 965.239 325.218 965.239C325.639 965.239 326.122 965.29 326.667 965.392C327.218 965.489 327.749 965.69 328.261 965.997C328.778 966.304 329.207 966.767 329.548 967.386C329.889 968.006 330.059 968.835 330.059 969.875V978.5H328.048V976.727H327.945C327.809 977.011 327.582 977.315 327.264 977.639C326.945 977.963 326.522 978.239 325.994 978.466C325.465 978.693 324.82 978.807 324.059 978.807ZM324.366 977C325.161 977 325.832 976.844 326.377 976.531C326.928 976.219 327.343 975.815 327.622 975.321C327.906 974.827 328.048 974.307 328.048 973.761V971.92C327.962 972.023 327.775 972.116 327.485 972.202C327.201 972.281 326.872 972.352 326.497 972.415C326.127 972.472 325.766 972.523 325.414 972.568C325.068 972.608 324.786 972.642 324.57 972.67C324.048 972.739 323.559 972.849 323.105 973.003C322.656 973.151 322.292 973.375 322.014 973.676C321.741 973.972 321.605 974.375 321.605 974.886C321.605 975.585 321.863 976.114 322.38 976.472C322.903 976.824 323.565 977 324.366 977ZM335.214 961.045V978.5H333.202V961.045H335.214ZM339.665 983.409C339.324 983.409 339.02 983.381 338.753 983.324C338.486 983.273 338.301 983.222 338.199 983.17L338.71 981.398C339.199 981.523 339.631 981.568 340.006 981.534C340.381 981.5 340.713 981.332 341.003 981.031C341.299 980.736 341.568 980.256 341.813 979.591L342.188 978.568L337.347 965.409H339.529L343.142 975.841H343.279L346.892 965.409H349.074L343.517 980.409C343.267 981.085 342.958 981.645 342.588 982.088C342.219 982.537 341.79 982.869 341.301 983.085C340.818 983.301 340.273 983.409 339.665 983.409ZM362.366 978.773C361.275 978.773 360.312 978.497 359.477 977.946C358.642 977.389 357.988 976.605 357.517 975.594C357.045 974.577 356.809 973.375 356.809 971.989C356.809 970.614 357.045 969.42 357.517 968.409C357.988 967.398 358.645 966.616 359.485 966.065C360.326 965.514 361.298 965.239 362.4 965.239C363.252 965.239 363.926 965.381 364.42 965.665C364.92 965.943 365.301 966.261 365.562 966.619C365.829 966.972 366.037 967.261 366.184 967.489H366.355V961.045H368.366V978.5H366.423V976.489H366.184C366.037 976.727 365.826 977.028 365.554 977.392C365.281 977.75 364.892 978.071 364.386 978.355C363.88 978.634 363.207 978.773 362.366 978.773ZM362.639 976.966C363.446 976.966 364.127 976.756 364.684 976.335C365.241 975.909 365.664 975.321 365.954 974.571C366.244 973.815 366.389 972.943 366.389 971.955C366.389 970.977 366.247 970.122 365.963 969.389C365.679 968.651 365.258 968.077 364.701 967.668C364.145 967.253 363.457 967.045 362.639 967.045C361.787 967.045 361.076 967.264 360.508 967.702C359.946 968.134 359.522 968.722 359.238 969.466C358.96 970.205 358.821 971.034 358.821 971.955C358.821 972.886 358.963 973.733 359.247 974.494C359.537 975.25 359.963 975.852 360.525 976.301C361.093 976.744 361.798 976.966 362.639 976.966ZM377.29 978.773C376.028 978.773 374.94 978.494 374.026 977.938C373.117 977.375 372.415 976.591 371.921 975.585C371.432 974.574 371.188 973.398 371.188 972.057C371.188 970.716 371.432 969.534 371.921 968.511C372.415 967.483 373.102 966.682 373.983 966.108C374.869 965.528 375.903 965.239 377.085 965.239C377.767 965.239 378.44 965.352 379.105 965.58C379.77 965.807 380.375 966.176 380.921 966.688C381.466 967.193 381.901 967.864 382.224 968.699C382.548 969.534 382.71 970.562 382.71 971.784V972.636H372.619V970.898H380.665C380.665 970.159 380.517 969.5 380.222 968.92C379.932 968.341 379.517 967.884 378.977 967.548C378.443 967.213 377.813 967.045 377.085 967.045C376.284 967.045 375.591 967.244 375.006 967.642C374.426 968.034 373.98 968.545 373.668 969.176C373.355 969.807 373.199 970.483 373.199 971.205V972.364C373.199 973.352 373.369 974.19 373.71 974.878C374.057 975.56 374.537 976.08 375.151 976.438C375.764 976.79 376.477 976.966 377.29 976.966C377.818 976.966 378.296 976.892 378.722 976.744C379.153 976.591 379.526 976.364 379.838 976.062C380.151 975.756 380.392 975.375 380.563 974.92L382.506 975.466C382.301 976.125 381.957 976.705 381.474 977.205C380.992 977.699 380.395 978.085 379.685 978.364C378.974 978.636 378.176 978.773 377.29 978.773ZM390.935 965.409V967.114H384.151V965.409H390.935ZM386.128 962.273H388.14V974.75C388.14 975.318 388.222 975.744 388.387 976.028C388.557 976.307 388.773 976.494 389.035 976.591C389.302 976.682 389.583 976.727 389.878 976.727C390.1 976.727 390.282 976.716 390.424 976.693C390.566 976.665 390.679 976.642 390.765 976.625L391.174 978.432C391.037 978.483 390.847 978.534 390.603 978.585C390.358 978.642 390.049 978.67 389.674 978.67C389.106 978.67 388.549 978.548 388.003 978.304C387.464 978.06 387.015 977.688 386.657 977.188C386.304 976.688 386.128 976.057 386.128 975.295V962.273ZM398.781 978.773C397.519 978.773 396.431 978.494 395.516 977.938C394.607 977.375 393.906 976.591 393.411 975.585C392.923 974.574 392.678 973.398 392.678 972.057C392.678 970.716 392.923 969.534 393.411 968.511C393.906 967.483 394.593 966.682 395.474 966.108C396.36 965.528 397.394 965.239 398.576 965.239C399.258 965.239 399.931 965.352 400.596 965.58C401.261 965.807 401.866 966.176 402.411 966.688C402.957 967.193 403.391 967.864 403.715 968.699C404.039 969.534 404.201 970.562 404.201 971.784V972.636H394.11V970.898H402.156C402.156 970.159 402.008 969.5 401.713 968.92C401.423 968.341 401.008 967.884 400.468 967.548C399.934 967.213 399.303 967.045 398.576 967.045C397.775 967.045 397.082 967.244 396.497 967.642C395.917 968.034 395.471 968.545 395.159 969.176C394.846 969.807 394.69 970.483 394.69 971.205V972.364C394.69 973.352 394.86 974.19 395.201 974.878C395.548 975.56 396.028 976.08 396.641 976.438C397.255 976.79 397.968 976.966 398.781 976.966C399.309 976.966 399.786 976.892 400.213 976.744C400.644 976.591 401.016 976.364 401.329 976.062C401.641 975.756 401.883 975.375 402.053 974.92L403.997 975.466C403.792 976.125 403.448 976.705 402.965 977.205C402.482 977.699 401.886 978.085 401.176 978.364C400.465 978.636 399.667 978.773 398.781 978.773ZM412.051 978.773C410.824 978.773 409.767 978.483 408.881 977.903C407.994 977.324 407.312 976.526 406.835 975.509C406.358 974.491 406.119 973.33 406.119 972.023C406.119 970.693 406.363 969.52 406.852 968.503C407.346 967.48 408.034 966.682 408.915 966.108C409.801 965.528 410.835 965.239 412.017 965.239C412.937 965.239 413.767 965.409 414.506 965.75C415.244 966.091 415.849 966.568 416.321 967.182C416.792 967.795 417.085 968.511 417.199 969.33H415.187C415.034 968.733 414.693 968.205 414.165 967.744C413.642 967.278 412.937 967.045 412.051 967.045C411.267 967.045 410.579 967.25 409.988 967.659C409.403 968.062 408.946 968.634 408.616 969.372C408.292 970.105 408.131 970.966 408.131 971.955C408.131 972.966 408.29 973.847 408.608 974.597C408.932 975.347 409.386 975.929 409.971 976.344C410.562 976.759 411.256 976.966 412.051 976.966C412.574 976.966 413.048 976.875 413.474 976.693C413.9 976.511 414.261 976.25 414.557 975.909C414.852 975.568 415.062 975.159 415.187 974.682H417.199C417.085 975.455 416.804 976.151 416.355 976.77C415.912 977.384 415.324 977.872 414.591 978.236C413.863 978.594 413.017 978.773 412.051 978.773ZM425.304 965.409V967.114H418.52V965.409H425.304ZM420.497 962.273H422.509V974.75C422.509 975.318 422.591 975.744 422.756 976.028C422.926 976.307 423.142 976.494 423.404 976.591C423.671 976.682 423.952 976.727 424.247 976.727C424.469 976.727 424.651 976.716 424.793 976.693C424.935 976.665 425.049 976.642 425.134 976.625L425.543 978.432C425.407 978.483 425.216 978.534 424.972 978.585C424.728 978.642 424.418 978.67 424.043 978.67C423.475 978.67 422.918 978.548 422.372 978.304C421.833 978.06 421.384 977.688 421.026 977.188C420.674 976.688 420.497 976.057 420.497 975.295V962.273ZM427.802 978.5V965.409H429.813V978.5H427.802ZM428.825 963.227C428.432 963.227 428.094 963.094 427.81 962.827C427.532 962.56 427.393 962.239 427.393 961.864C427.393 961.489 427.532 961.168 427.81 960.901C428.094 960.634 428.432 960.5 428.825 960.5C429.217 960.5 429.552 960.634 429.83 960.901C430.114 961.168 430.256 961.489 430.256 961.864C430.256 962.239 430.114 962.56 429.83 962.827C429.552 963.094 429.217 963.227 428.825 963.227ZM438.287 978.773C437.105 978.773 436.069 978.491 435.177 977.929C434.29 977.366 433.597 976.58 433.097 975.568C432.603 974.557 432.355 973.375 432.355 972.023C432.355 970.659 432.603 969.469 433.097 968.452C433.597 967.435 434.29 966.645 435.177 966.082C436.069 965.52 437.105 965.239 438.287 965.239C439.469 965.239 440.503 965.52 441.39 966.082C442.282 966.645 442.975 967.435 443.469 968.452C443.969 969.469 444.219 970.659 444.219 972.023C444.219 973.375 443.969 974.557 443.469 975.568C442.975 976.58 442.282 977.366 441.39 977.929C440.503 978.491 439.469 978.773 438.287 978.773ZM438.287 976.966C439.185 976.966 439.924 976.736 440.503 976.276C441.083 975.815 441.512 975.21 441.79 974.46C442.069 973.71 442.208 972.898 442.208 972.023C442.208 971.148 442.069 970.332 441.79 969.577C441.512 968.821 441.083 968.21 440.503 967.744C439.924 967.278 439.185 967.045 438.287 967.045C437.39 967.045 436.651 967.278 436.071 967.744C435.492 968.21 435.063 968.821 434.784 969.577C434.506 970.332 434.367 971.148 434.367 972.023C434.367 972.898 434.506 973.71 434.784 974.46C435.063 975.21 435.492 975.815 436.071 976.276C436.651 976.736 437.39 976.966 438.287 976.966ZM448.773 970.625V978.5H446.761V965.409H448.705V967.455H448.875C449.182 966.79 449.648 966.256 450.273 965.852C450.898 965.443 451.705 965.239 452.693 965.239C453.58 965.239 454.355 965.42 455.02 965.784C455.685 966.142 456.202 966.688 456.571 967.42C456.94 968.148 457.125 969.068 457.125 970.182V978.5H455.114V970.318C455.114 969.29 454.847 968.489 454.313 967.915C453.778 967.335 453.046 967.045 452.114 967.045C451.472 967.045 450.898 967.185 450.392 967.463C449.892 967.741 449.497 968.148 449.207 968.682C448.918 969.216 448.773 969.864 448.773 970.625ZM244.851 1014.5H239.465V997.045H245.09C246.783 997.045 248.232 997.395 249.437 998.094C250.641 998.787 251.564 999.784 252.206 1001.09C252.848 1002.38 253.169 1003.93 253.169 1005.74C253.169 1007.56 252.846 1009.12 252.198 1010.43C251.55 1011.74 250.607 1012.75 249.368 1013.45C248.13 1014.15 246.624 1014.5 244.851 1014.5ZM241.579 1012.62H244.715C246.158 1012.62 247.354 1012.35 248.303 1011.79C249.252 1011.23 249.959 1010.44 250.425 1009.41C250.891 1008.38 251.124 1007.16 251.124 1005.74C251.124 1004.33 250.894 1003.12 250.434 1002.1C249.973 1001.08 249.286 1000.29 248.371 999.747C247.456 999.196 246.317 998.92 244.954 998.92H241.579V1012.62ZM261.403 1014.77C260.141 1014.77 259.053 1014.49 258.139 1013.94C257.23 1013.38 256.528 1012.59 256.034 1011.59C255.545 1010.57 255.301 1009.4 255.301 1008.06C255.301 1006.72 255.545 1005.53 256.034 1004.51C256.528 1003.48 257.215 1002.68 258.096 1002.11C258.982 1001.53 260.016 1001.24 261.198 1001.24C261.88 1001.24 262.553 1001.35 263.218 1001.58C263.883 1001.81 264.488 1002.18 265.034 1002.69C265.579 1003.19 266.014 1003.86 266.337 1004.7C266.661 1005.53 266.823 1006.56 266.823 1007.78V1008.64H256.732V1006.9H264.778C264.778 1006.16 264.63 1005.5 264.335 1004.92C264.045 1004.34 263.63 1003.88 263.09 1003.55C262.556 1003.21 261.926 1003.05 261.198 1003.05C260.397 1003.05 259.704 1003.24 259.119 1003.64C258.539 1004.03 258.093 1004.55 257.781 1005.18C257.468 1005.81 257.312 1006.48 257.312 1007.2V1008.36C257.312 1009.35 257.482 1010.19 257.823 1010.88C258.17 1011.56 258.65 1012.08 259.264 1012.44C259.877 1012.79 260.59 1012.97 261.403 1012.97C261.931 1012.97 262.409 1012.89 262.835 1012.74C263.266 1012.59 263.639 1012.36 263.951 1012.06C264.264 1011.76 264.505 1011.37 264.676 1010.92L266.619 1011.47C266.414 1012.12 266.07 1012.7 265.587 1013.2C265.105 1013.7 264.508 1014.09 263.798 1014.36C263.087 1014.64 262.289 1014.77 261.403 1014.77ZM269.355 1019.41V1001.41H271.298V1003.49H271.537C271.684 1003.26 271.889 1002.97 272.15 1002.62C272.417 1002.26 272.798 1001.94 273.292 1001.66C273.792 1001.38 274.469 1001.24 275.321 1001.24C276.423 1001.24 277.395 1001.51 278.236 1002.07C279.077 1002.62 279.733 1003.4 280.204 1004.41C280.676 1005.42 280.912 1006.61 280.912 1007.99C280.912 1009.38 280.676 1010.58 280.204 1011.59C279.733 1012.61 279.079 1013.39 278.244 1013.95C277.409 1014.5 276.446 1014.77 275.355 1014.77C274.514 1014.77 273.841 1014.63 273.335 1014.36C272.829 1014.07 272.44 1013.75 272.167 1013.39C271.895 1013.03 271.684 1012.73 271.537 1012.49H271.366V1019.41H269.355ZM271.332 1007.95C271.332 1008.94 271.477 1009.82 271.767 1010.57C272.057 1011.32 272.48 1011.91 273.037 1012.34C273.594 1012.76 274.275 1012.97 275.082 1012.97C275.923 1012.97 276.625 1012.74 277.187 1012.3C277.756 1011.85 278.182 1011.25 278.466 1010.49C278.756 1009.73 278.9 1008.89 278.9 1007.95C278.9 1007.03 278.758 1006.2 278.474 1005.47C278.196 1004.72 277.773 1004.13 277.204 1003.7C276.642 1003.26 275.934 1003.05 275.082 1003.05C274.264 1003.05 273.577 1003.25 273.02 1003.67C272.463 1004.08 272.042 1004.65 271.758 1005.39C271.474 1006.12 271.332 1006.98 271.332 1007.95ZM288.941 1014.77C287.679 1014.77 286.591 1014.49 285.676 1013.94C284.767 1013.38 284.066 1012.59 283.571 1011.59C283.083 1010.57 282.838 1009.4 282.838 1008.06C282.838 1006.72 283.083 1005.53 283.571 1004.51C284.066 1003.48 284.753 1002.68 285.634 1002.11C286.52 1001.53 287.554 1001.24 288.736 1001.24C289.418 1001.24 290.091 1001.35 290.756 1001.58C291.421 1001.81 292.026 1002.18 292.571 1002.69C293.117 1003.19 293.551 1003.86 293.875 1004.7C294.199 1005.53 294.361 1006.56 294.361 1007.78V1008.64H284.27V1006.9H292.316C292.316 1006.16 292.168 1005.5 291.872 1004.92C291.583 1004.34 291.168 1003.88 290.628 1003.55C290.094 1003.21 289.463 1003.05 288.736 1003.05C287.935 1003.05 287.242 1003.24 286.656 1003.64C286.077 1004.03 285.631 1004.55 285.318 1005.18C285.006 1005.81 284.85 1006.48 284.85 1007.2V1008.36C284.85 1009.35 285.02 1010.19 285.361 1010.88C285.708 1011.56 286.188 1012.08 286.801 1012.44C287.415 1012.79 288.128 1012.97 288.941 1012.97C289.469 1012.97 289.946 1012.89 290.372 1012.74C290.804 1012.59 291.176 1012.36 291.489 1012.06C291.801 1011.76 292.043 1011.37 292.213 1010.92L294.156 1011.47C293.952 1012.12 293.608 1012.7 293.125 1013.2C292.642 1013.7 292.046 1014.09 291.335 1014.36C290.625 1014.64 289.827 1014.77 288.941 1014.77ZM298.904 1006.62V1014.5H296.893V1001.41H298.836V1003.45H299.006C299.313 1002.79 299.779 1002.26 300.404 1001.85C301.029 1001.44 301.836 1001.24 302.825 1001.24C303.711 1001.24 304.486 1001.42 305.151 1001.78C305.816 1002.14 306.333 1002.69 306.702 1003.42C307.072 1004.15 307.256 1005.07 307.256 1006.18V1014.5H305.245V1006.32C305.245 1005.29 304.978 1004.49 304.444 1003.91C303.91 1003.34 303.177 1003.05 302.245 1003.05C301.603 1003.05 301.029 1003.18 300.523 1003.46C300.023 1003.74 299.628 1004.15 299.339 1004.68C299.049 1005.22 298.904 1005.86 298.904 1006.62ZM315.347 1014.77C314.256 1014.77 313.293 1014.5 312.458 1013.95C311.623 1013.39 310.969 1012.61 310.498 1011.59C310.026 1010.58 309.79 1009.38 309.79 1007.99C309.79 1006.61 310.026 1005.42 310.498 1004.41C310.969 1003.4 311.625 1002.62 312.466 1002.07C313.307 1001.51 314.279 1001.24 315.381 1001.24C316.233 1001.24 316.907 1001.38 317.401 1001.66C317.901 1001.94 318.282 1002.26 318.543 1002.62C318.81 1002.97 319.017 1003.26 319.165 1003.49H319.336V997.045H321.347V1014.5H319.404V1012.49H319.165C319.017 1012.73 318.807 1013.03 318.534 1013.39C318.262 1013.75 317.873 1014.07 317.367 1014.36C316.861 1014.63 316.188 1014.77 315.347 1014.77ZM315.62 1012.97C316.426 1012.97 317.108 1012.76 317.665 1012.34C318.222 1011.91 318.645 1011.32 318.935 1010.57C319.225 1009.82 319.37 1008.94 319.37 1007.95C319.37 1006.98 319.228 1006.12 318.944 1005.39C318.659 1004.65 318.239 1004.08 317.682 1003.67C317.125 1003.25 316.438 1003.05 315.62 1003.05C314.767 1003.05 314.057 1003.26 313.489 1003.7C312.926 1004.13 312.503 1004.72 312.219 1005.47C311.941 1006.2 311.801 1007.03 311.801 1007.95C311.801 1008.89 311.944 1009.73 312.228 1010.49C312.517 1011.25 312.944 1011.85 313.506 1012.3C314.074 1012.74 314.779 1012.97 315.62 1012.97ZM330.271 1014.77C329.009 1014.77 327.921 1014.49 327.006 1013.94C326.097 1013.38 325.396 1012.59 324.901 1011.59C324.413 1010.57 324.168 1009.4 324.168 1008.06C324.168 1006.72 324.413 1005.53 324.901 1004.51C325.396 1003.48 326.083 1002.68 326.964 1002.11C327.85 1001.53 328.884 1001.24 330.066 1001.24C330.748 1001.24 331.421 1001.35 332.086 1001.58C332.751 1001.81 333.356 1002.18 333.901 1002.69C334.447 1003.19 334.881 1003.86 335.205 1004.7C335.529 1005.53 335.691 1006.56 335.691 1007.78V1008.64H325.6V1006.9H333.646C333.646 1006.16 333.498 1005.5 333.202 1004.92C332.913 1004.34 332.498 1003.88 331.958 1003.55C331.424 1003.21 330.793 1003.05 330.066 1003.05C329.265 1003.05 328.572 1003.24 327.987 1003.64C327.407 1004.03 326.961 1004.55 326.648 1005.18C326.336 1005.81 326.18 1006.48 326.18 1007.2V1008.36C326.18 1009.35 326.35 1010.19 326.691 1010.88C327.038 1011.56 327.518 1012.08 328.131 1012.44C328.745 1012.79 329.458 1012.97 330.271 1012.97C330.799 1012.97 331.276 1012.89 331.702 1012.74C332.134 1012.59 332.506 1012.36 332.819 1012.06C333.131 1011.76 333.373 1011.37 333.543 1010.92L335.487 1011.47C335.282 1012.12 334.938 1012.7 334.455 1013.2C333.972 1013.7 333.376 1014.09 332.666 1014.36C331.955 1014.64 331.157 1014.77 330.271 1014.77ZM340.234 1006.62V1014.5H338.223V1001.41H340.166V1003.45H340.336C340.643 1002.79 341.109 1002.26 341.734 1001.85C342.359 1001.44 343.166 1001.24 344.155 1001.24C345.041 1001.24 345.817 1001.42 346.481 1001.78C347.146 1002.14 347.663 1002.69 348.032 1003.42C348.402 1004.15 348.586 1005.07 348.586 1006.18V1014.5H346.575V1006.32C346.575 1005.29 346.308 1004.49 345.774 1003.91C345.24 1003.34 344.507 1003.05 343.575 1003.05C342.933 1003.05 342.359 1003.18 341.853 1003.46C341.353 1003.74 340.959 1004.15 340.669 1004.68C340.379 1005.22 340.234 1005.86 340.234 1006.62ZM357.052 1014.77C355.825 1014.77 354.768 1014.48 353.882 1013.9C352.995 1013.32 352.313 1012.53 351.836 1011.51C351.359 1010.49 351.12 1009.33 351.12 1008.02C351.12 1006.69 351.364 1005.52 351.853 1004.5C352.347 1003.48 353.035 1002.68 353.916 1002.11C354.802 1001.53 355.836 1001.24 357.018 1001.24C357.938 1001.24 358.768 1001.41 359.507 1001.75C360.245 1002.09 360.85 1002.57 361.322 1003.18C361.793 1003.8 362.086 1004.51 362.2 1005.33H360.188C360.035 1004.73 359.694 1004.2 359.166 1003.74C358.643 1003.28 357.938 1003.05 357.052 1003.05C356.268 1003.05 355.58 1003.25 354.989 1003.66C354.404 1004.06 353.947 1004.63 353.617 1005.37C353.293 1006.11 353.132 1006.97 353.132 1007.95C353.132 1008.97 353.291 1009.85 353.609 1010.6C353.933 1011.35 354.387 1011.93 354.972 1012.34C355.563 1012.76 356.257 1012.97 357.052 1012.97C357.575 1012.97 358.049 1012.88 358.475 1012.69C358.901 1012.51 359.262 1012.25 359.558 1011.91C359.853 1011.57 360.063 1011.16 360.188 1010.68H362.2C362.086 1011.45 361.805 1012.15 361.356 1012.77C360.913 1013.38 360.325 1013.87 359.592 1014.24C358.864 1014.59 358.018 1014.77 357.052 1014.77ZM365.908 1019.41C365.567 1019.41 365.263 1019.38 364.996 1019.32C364.729 1019.27 364.544 1019.22 364.442 1019.17L364.953 1017.4C365.442 1017.52 365.873 1017.57 366.248 1017.53C366.623 1017.5 366.956 1017.33 367.246 1017.03C367.541 1016.74 367.811 1016.26 368.055 1015.59L368.43 1014.57L363.589 1001.41H365.771L369.385 1011.84H369.521L373.135 1001.41H375.317L369.76 1016.41C369.51 1017.09 369.2 1017.64 368.831 1018.09C368.461 1018.54 368.033 1018.87 367.544 1019.09C367.061 1019.3 366.515 1019.41 365.908 1019.41ZM383.665 1014.5V1001.41H385.609V1003.45H385.779C386.052 1002.76 386.492 1002.21 387.1 1001.83C387.708 1001.43 388.438 1001.24 389.29 1001.24C390.154 1001.24 390.873 1001.43 391.447 1001.83C392.026 1002.21 392.478 1002.76 392.802 1003.45H392.938C393.273 1002.78 393.776 1002.24 394.447 1001.84C395.117 1001.44 395.921 1001.24 396.859 1001.24C398.029 1001.24 398.986 1001.61 399.731 1002.34C400.475 1003.07 400.847 1004.2 400.847 1005.74V1014.5H398.836V1005.74C398.836 1004.77 398.572 1004.08 398.043 1003.67C397.515 1003.25 396.893 1003.05 396.177 1003.05C395.256 1003.05 394.543 1003.32 394.038 1003.88C393.532 1004.43 393.279 1005.13 393.279 1005.98V1014.5H391.234V1005.53C391.234 1004.79 390.992 1004.19 390.509 1003.74C390.026 1003.28 389.404 1003.05 388.643 1003.05C388.12 1003.05 387.631 1003.18 387.177 1003.46C386.728 1003.74 386.364 1004.13 386.086 1004.62C385.813 1005.11 385.677 1005.68 385.677 1006.32V1014.5H383.665ZM407.849 1014.81C407.02 1014.81 406.267 1014.65 405.591 1014.34C404.914 1014.02 404.378 1013.56 403.98 1012.97C403.582 1012.36 403.383 1011.64 403.383 1010.78C403.383 1010.03 403.531 1009.43 403.826 1008.96C404.122 1008.49 404.517 1008.12 405.011 1007.85C405.505 1007.59 406.051 1007.39 406.647 1007.26C407.25 1007.12 407.855 1007.01 408.463 1006.93C409.258 1006.83 409.903 1006.75 410.397 1006.7C410.897 1006.64 411.261 1006.55 411.488 1006.42C411.721 1006.29 411.838 1006.06 411.838 1005.74V1005.67C411.838 1004.83 411.608 1004.18 411.147 1003.71C410.693 1003.24 410.003 1003.01 409.076 1003.01C408.116 1003.01 407.363 1003.22 406.818 1003.64C406.272 1004.06 405.889 1004.51 405.667 1004.99L403.758 1004.31C404.099 1003.51 404.554 1002.89 405.122 1002.45C405.696 1002 406.321 1001.69 406.997 1001.51C407.679 1001.33 408.349 1001.24 409.008 1001.24C409.429 1001.24 409.912 1001.29 410.457 1001.39C411.008 1001.49 411.539 1001.69 412.051 1002C412.568 1002.3 412.997 1002.77 413.338 1003.39C413.679 1004.01 413.849 1004.84 413.849 1005.88V1014.5H411.838V1012.73H411.735C411.599 1013.01 411.372 1013.32 411.054 1013.64C410.735 1013.96 410.312 1014.24 409.784 1014.47C409.255 1014.69 408.61 1014.81 407.849 1014.81ZM408.156 1013C408.951 1013 409.622 1012.84 410.167 1012.53C410.718 1012.22 411.133 1011.82 411.412 1011.32C411.696 1010.83 411.838 1010.31 411.838 1009.76V1007.92C411.753 1008.02 411.565 1008.12 411.275 1008.2C410.991 1008.28 410.662 1008.35 410.287 1008.41C409.917 1008.47 409.556 1008.52 409.204 1008.57C408.858 1008.61 408.576 1008.64 408.36 1008.67C407.838 1008.74 407.349 1008.85 406.895 1009C406.446 1009.15 406.082 1009.37 405.804 1009.68C405.531 1009.97 405.395 1010.37 405.395 1010.89C405.395 1011.59 405.653 1012.11 406.17 1012.47C406.693 1012.82 407.355 1013 408.156 1013ZM416.992 1019.41V1001.41H418.935V1003.49H419.174C419.322 1003.26 419.526 1002.97 419.788 1002.62C420.055 1002.26 420.435 1001.94 420.93 1001.66C421.43 1001.38 422.106 1001.24 422.958 1001.24C424.06 1001.24 425.032 1001.51 425.873 1002.07C426.714 1002.62 427.37 1003.4 427.842 1004.41C428.313 1005.42 428.549 1006.61 428.549 1007.99C428.549 1009.38 428.313 1010.58 427.842 1011.59C427.37 1012.61 426.717 1013.39 425.881 1013.95C425.046 1014.5 424.083 1014.77 422.992 1014.77C422.151 1014.77 421.478 1014.63 420.972 1014.36C420.467 1014.07 420.077 1013.75 419.805 1013.39C419.532 1013.03 419.322 1012.73 419.174 1012.49H419.004V1019.41H416.992ZM418.97 1007.95C418.97 1008.94 419.114 1009.82 419.404 1010.57C419.694 1011.32 420.117 1011.91 420.674 1012.34C421.231 1012.76 421.913 1012.97 422.72 1012.97C423.56 1012.97 424.262 1012.74 424.825 1012.3C425.393 1011.85 425.819 1011.25 426.103 1010.49C426.393 1009.73 426.538 1008.89 426.538 1007.95C426.538 1007.03 426.396 1006.2 426.112 1005.47C425.833 1004.72 425.41 1004.13 424.842 1003.7C424.279 1003.26 423.572 1003.05 422.72 1003.05C421.901 1003.05 421.214 1003.25 420.657 1003.67C420.1 1004.08 419.68 1004.65 419.396 1005.39C419.112 1006.12 418.97 1006.98 418.97 1007.95ZM431.089 1019.41V1001.41H433.032V1003.49H433.271C433.419 1003.26 433.623 1002.97 433.885 1002.62C434.152 1002.26 434.532 1001.94 435.027 1001.66C435.527 1001.38 436.203 1001.24 437.055 1001.24C438.157 1001.24 439.129 1001.51 439.97 1002.07C440.811 1002.62 441.467 1003.4 441.939 1004.41C442.41 1005.42 442.646 1006.61 442.646 1007.99C442.646 1009.38 442.41 1010.58 441.939 1011.59C441.467 1012.61 440.814 1013.39 439.978 1013.95C439.143 1014.5 438.18 1014.77 437.089 1014.77C436.248 1014.77 435.575 1014.63 435.069 1014.36C434.564 1014.07 434.174 1013.75 433.902 1013.39C433.629 1013.03 433.419 1012.73 433.271 1012.49H433.101V1019.41H431.089ZM433.067 1007.95C433.067 1008.94 433.211 1009.82 433.501 1010.57C433.791 1011.32 434.214 1011.91 434.771 1012.34C435.328 1012.76 436.01 1012.97 436.817 1012.97C437.657 1012.97 438.359 1012.74 438.922 1012.3C439.49 1011.85 439.916 1011.25 440.2 1010.49C440.49 1009.73 440.635 1008.89 440.635 1007.95C440.635 1007.03 440.493 1006.2 440.209 1005.47C439.93 1004.72 439.507 1004.13 438.939 1003.7C438.376 1003.26 437.669 1003.05 436.817 1003.05C435.998 1003.05 435.311 1003.25 434.754 1003.67C434.197 1004.08 433.777 1004.65 433.493 1005.39C433.209 1006.12 433.067 1006.98 433.067 1007.95ZM445.186 1014.5V1001.41H447.198V1014.5H445.186ZM446.209 999.227C445.817 999.227 445.479 999.094 445.195 998.827C444.916 998.56 444.777 998.239 444.777 997.864C444.777 997.489 444.916 997.168 445.195 996.901C445.479 996.634 445.817 996.5 446.209 996.5C446.601 996.5 446.936 996.634 447.215 996.901C447.499 997.168 447.641 997.489 447.641 997.864C447.641 998.239 447.499 998.56 447.215 998.827C446.936 999.094 446.601 999.227 446.209 999.227ZM452.365 1006.62V1014.5H450.354V1001.41H452.297V1003.45H452.467C452.774 1002.79 453.24 1002.26 453.865 1001.85C454.49 1001.44 455.297 1001.24 456.285 1001.24C457.172 1001.24 457.947 1001.42 458.612 1001.78C459.277 1002.14 459.794 1002.69 460.163 1003.42C460.533 1004.15 460.717 1005.07 460.717 1006.18V1014.5H458.706V1006.32C458.706 1005.29 458.439 1004.49 457.905 1003.91C457.371 1003.34 456.638 1003.05 455.706 1003.05C455.064 1003.05 454.49 1003.18 453.984 1003.46C453.484 1003.74 453.089 1004.15 452.8 1004.68C452.51 1005.22 452.365 1005.86 452.365 1006.62ZM469.149 1019.68C468.177 1019.68 467.342 1019.56 466.643 1019.31C465.944 1019.06 465.362 1018.74 464.896 1018.34C464.436 1017.94 464.069 1017.51 463.796 1017.06L465.399 1015.93C465.581 1016.17 465.811 1016.44 466.089 1016.75C466.367 1017.06 466.748 1017.33 467.231 1017.56C467.72 1017.79 468.359 1017.91 469.149 1017.91C470.206 1017.91 471.078 1017.65 471.765 1017.14C472.453 1016.63 472.796 1015.83 472.796 1014.74V1012.08H472.626C472.478 1012.32 472.268 1012.61 471.995 1012.97C471.728 1013.31 471.342 1013.62 470.836 1013.89C470.336 1014.16 469.66 1014.3 468.808 1014.3C467.751 1014.3 466.802 1014.05 465.961 1013.55C465.126 1013.05 464.464 1012.32 463.975 1011.36C463.492 1010.41 463.251 1009.25 463.251 1007.89C463.251 1006.55 463.487 1005.38 463.958 1004.38C464.43 1003.38 465.086 1002.61 465.927 1002.07C466.768 1001.51 467.74 1001.24 468.842 1001.24C469.694 1001.24 470.37 1001.38 470.87 1001.66C471.376 1001.94 471.762 1002.26 472.029 1002.62C472.302 1002.97 472.512 1003.26 472.66 1003.49H472.865V1001.41H474.808V1014.88C474.808 1016 474.552 1016.91 474.041 1017.62C473.535 1018.33 472.853 1018.85 471.995 1019.18C471.143 1019.51 470.194 1019.68 469.149 1019.68ZM469.081 1012.49C469.887 1012.49 470.569 1012.3 471.126 1011.93C471.683 1011.57 472.106 1011.03 472.396 1010.34C472.686 1009.65 472.831 1008.82 472.831 1007.85C472.831 1006.91 472.688 1006.08 472.404 1005.36C472.12 1004.63 471.7 1004.07 471.143 1003.66C470.586 1003.25 469.899 1003.05 469.081 1003.05C468.228 1003.05 467.518 1003.26 466.95 1003.69C466.387 1004.12 465.964 1004.7 465.68 1005.43C465.402 1006.16 465.262 1006.97 465.262 1007.85C465.262 1008.76 465.404 1009.57 465.688 1010.26C465.978 1010.96 466.404 1011.5 466.967 1011.9C467.535 1012.29 468.24 1012.49 469.081 1012.49Z" fill="black" fill-opacity="0.8"/> +<rect x="548" y="807" width="280" height="247" rx="6" fill="white"/> +<path d="M595.327 856.32H590.66C590.575 855.717 590.401 855.18 590.138 854.712C589.876 854.236 589.538 853.831 589.126 853.497C588.714 853.163 588.239 852.908 587.699 852.73C587.166 852.553 586.587 852.464 585.962 852.464C584.833 852.464 583.849 852.744 583.011 853.305C582.173 853.859 581.523 854.669 581.062 855.734C580.6 856.793 580.369 858.078 580.369 859.591C580.369 861.146 580.6 862.453 581.062 863.511C581.531 864.57 582.184 865.369 583.022 865.908C583.86 866.448 584.83 866.718 585.93 866.718C586.548 866.718 587.12 866.636 587.646 866.473C588.178 866.31 588.651 866.072 589.062 865.759C589.474 865.44 589.815 865.053 590.085 864.598C590.362 864.143 590.554 863.625 590.66 863.043L595.327 863.064C595.206 864.065 594.904 865.031 594.421 865.962C593.945 866.885 593.303 867.712 592.493 868.444C591.69 869.168 590.731 869.744 589.616 870.17C588.508 870.589 587.255 870.798 585.856 870.798C583.91 870.798 582.17 870.358 580.636 869.477C579.109 868.597 577.901 867.322 577.013 865.653C576.133 863.984 575.692 861.963 575.692 859.591C575.692 857.212 576.14 855.188 577.035 853.518C577.93 851.849 579.144 850.578 580.678 849.705C582.212 848.824 583.938 848.384 585.856 848.384C587.12 848.384 588.292 848.561 589.371 848.916C590.458 849.271 591.42 849.79 592.258 850.472C593.097 851.146 593.778 851.974 594.304 852.954C594.837 853.934 595.178 855.056 595.327 856.32ZM608.383 863.533V854.136H612.921V870.5H608.564V867.528H608.394C608.024 868.487 607.41 869.257 606.551 869.839C605.698 870.422 604.658 870.713 603.429 870.713C602.335 870.713 601.373 870.464 600.542 869.967C599.711 869.47 599.061 868.763 598.592 867.847C598.131 866.931 597.896 865.834 597.889 864.555V854.136H602.428V863.746C602.435 864.712 602.694 865.475 603.205 866.036C603.717 866.597 604.402 866.878 605.261 866.878C605.808 866.878 606.32 866.754 606.796 866.505C607.271 866.249 607.655 865.873 607.946 865.376C608.244 864.879 608.39 864.264 608.383 863.533ZM629.506 858.803L625.352 859.058C625.281 858.703 625.128 858.384 624.894 858.099C624.659 857.808 624.35 857.577 623.967 857.407C623.59 857.229 623.139 857.141 622.614 857.141C621.911 857.141 621.318 857.29 620.835 857.588C620.352 857.879 620.11 858.27 620.11 858.76C620.11 859.151 620.266 859.481 620.579 859.751C620.891 860.021 621.428 860.237 622.188 860.401L625.149 860.997C626.74 861.324 627.926 861.849 628.707 862.574C629.489 863.298 629.879 864.25 629.879 865.429C629.879 866.501 629.563 867.442 628.931 868.252C628.306 869.062 627.447 869.694 626.353 870.148C625.266 870.596 624.013 870.82 622.592 870.82C620.426 870.82 618.7 870.369 617.415 869.467C616.136 868.558 615.387 867.322 615.167 865.759L619.631 865.525C619.766 866.185 620.092 866.69 620.611 867.038C621.129 867.379 621.793 867.549 622.603 867.549C623.399 867.549 624.038 867.396 624.521 867.091C625.011 866.778 625.259 866.377 625.266 865.887C625.259 865.475 625.085 865.138 624.744 864.875C624.404 864.605 623.878 864.399 623.168 864.257L620.334 863.692C618.736 863.373 617.546 862.819 616.765 862.031C615.991 861.242 615.604 860.237 615.604 859.016C615.604 857.964 615.888 857.059 616.456 856.299C617.031 855.539 617.837 854.953 618.874 854.541C619.918 854.129 621.14 853.923 622.539 853.923C624.606 853.923 626.232 854.36 627.418 855.234C628.612 856.107 629.308 857.297 629.506 858.803ZM640.781 854.136V857.545H630.927V854.136H640.781ZM633.164 850.216H637.702V865.472C637.702 865.891 637.766 866.217 637.894 866.452C638.022 866.679 638.199 866.839 638.427 866.931C638.661 867.023 638.931 867.07 639.236 867.07C639.449 867.07 639.662 867.052 639.875 867.016C640.088 866.974 640.252 866.942 640.365 866.92L641.079 870.298C640.852 870.369 640.532 870.45 640.12 870.543C639.709 870.642 639.208 870.702 638.618 870.724C637.525 870.766 636.566 870.621 635.742 870.287C634.925 869.953 634.289 869.435 633.835 868.732C633.38 868.028 633.157 867.141 633.164 866.068V850.216ZM650.295 870.82C648.64 870.82 647.209 870.468 646.002 869.765C644.801 869.055 643.875 868.067 643.221 866.803C642.568 865.532 642.241 864.058 642.241 862.382C642.241 860.692 642.568 859.214 643.221 857.95C643.875 856.679 644.801 855.692 646.002 854.989C647.209 854.278 648.64 853.923 650.295 853.923C651.95 853.923 653.377 854.278 654.578 854.989C655.785 855.692 656.715 856.679 657.369 857.95C658.022 859.214 658.349 860.692 658.349 862.382C658.349 864.058 658.022 865.532 657.369 866.803C656.715 868.067 655.785 869.055 654.578 869.765C653.377 870.468 651.95 870.82 650.295 870.82ZM650.316 867.304C651.069 867.304 651.698 867.091 652.202 866.665C652.706 866.232 653.086 865.642 653.342 864.896C653.605 864.151 653.736 863.302 653.736 862.35C653.736 861.398 653.605 860.55 653.342 859.804C653.086 859.058 652.706 858.469 652.202 858.036C651.698 857.602 651.069 857.386 650.316 857.386C649.556 857.386 648.917 857.602 648.399 858.036C647.887 858.469 647.5 859.058 647.237 859.804C646.982 860.55 646.854 861.398 646.854 862.35C646.854 863.302 646.982 864.151 647.237 864.896C647.5 865.642 647.887 866.232 648.399 866.665C648.917 867.091 649.556 867.304 650.316 867.304ZM660.64 870.5V854.136H664.965V857.023H665.157C665.498 856.065 666.066 855.308 666.862 854.754C667.657 854.2 668.609 853.923 669.717 853.923C670.839 853.923 671.794 854.204 672.582 854.765C673.371 855.319 673.896 856.072 674.159 857.023H674.33C674.663 856.086 675.267 855.337 676.141 854.776C677.021 854.207 678.062 853.923 679.262 853.923C680.789 853.923 682.028 854.41 682.98 855.383C683.939 856.349 684.418 857.719 684.418 859.495V870.5H679.891V860.39C679.891 859.481 679.649 858.799 679.166 858.344C678.683 857.89 678.08 857.663 677.355 857.663C676.531 857.663 675.889 857.925 675.427 858.451C674.965 858.969 674.734 859.655 674.734 860.507V870.5H670.335V860.294C670.335 859.491 670.104 858.852 669.642 858.376C669.188 857.901 668.587 857.663 667.842 857.663C667.337 857.663 666.883 857.79 666.478 858.046C666.08 858.295 665.764 858.646 665.53 859.101C665.295 859.548 665.178 860.074 665.178 860.678V870.5H660.64ZM701.02 870.82C699.344 870.82 697.902 870.464 696.695 869.754C695.494 869.037 694.571 868.043 693.925 866.771C693.286 865.5 692.966 864.037 692.966 862.382C692.966 860.706 693.289 859.236 693.936 857.972C694.589 856.7 695.516 855.71 696.716 854.999C697.916 854.282 699.344 853.923 700.999 853.923C702.426 853.923 703.676 854.183 704.749 854.701C705.821 855.219 706.67 855.947 707.295 856.885C707.92 857.822 708.264 858.923 708.328 860.188H704.046C703.925 859.371 703.605 858.714 703.087 858.217C702.575 857.712 701.904 857.46 701.073 857.46C700.37 857.46 699.756 857.652 699.23 858.036C698.712 858.412 698.307 858.962 698.016 859.687C697.725 860.411 697.579 861.288 697.579 862.318C697.579 863.362 697.721 864.25 698.005 864.982C698.296 865.713 698.705 866.271 699.23 866.654C699.756 867.038 700.37 867.229 701.073 867.229C701.592 867.229 702.057 867.123 702.469 866.91C702.888 866.697 703.232 866.388 703.502 865.983C703.779 865.571 703.96 865.077 704.046 864.502H708.328C708.257 865.752 707.916 866.853 707.306 867.805C706.702 868.749 705.867 869.488 704.802 870.021C703.737 870.553 702.476 870.82 701.02 870.82ZM721.068 863.533V854.136H725.606V870.5H721.249V867.528H721.078C720.709 868.487 720.095 869.257 719.235 869.839C718.383 870.422 717.342 870.713 716.114 870.713C715.02 870.713 714.058 870.464 713.227 869.967C712.396 869.47 711.746 868.763 711.277 867.847C710.815 866.931 710.581 865.834 710.574 864.555V854.136H715.112V863.746C715.119 864.712 715.379 865.475 715.89 866.036C716.401 866.597 717.087 866.878 717.946 866.878C718.493 866.878 719.004 866.754 719.48 866.505C719.956 866.249 720.34 865.873 720.631 865.376C720.929 864.879 721.075 864.264 721.068 863.533ZM728.576 870.5V854.136H732.976V856.991H733.146C733.445 855.976 733.945 855.209 734.649 854.69C735.352 854.165 736.161 853.902 737.078 853.902C737.305 853.902 737.55 853.916 737.813 853.945C738.075 853.973 738.306 854.012 738.505 854.062V858.089C738.292 858.025 737.997 857.968 737.621 857.918C737.244 857.869 736.9 857.844 736.587 857.844C735.92 857.844 735.323 857.989 734.798 858.281C734.279 858.565 733.867 858.962 733.562 859.474C733.264 859.985 733.114 860.575 733.114 861.242V870.5H728.576ZM744.389 870.809C743.345 870.809 742.415 870.628 741.598 870.266C740.781 869.896 740.135 869.353 739.659 868.636C739.19 867.911 738.956 867.009 738.956 865.93C738.956 865.021 739.123 864.257 739.456 863.639C739.79 863.021 740.245 862.524 740.82 862.148C741.395 861.771 742.049 861.487 742.78 861.295C743.519 861.104 744.293 860.969 745.103 860.891C746.054 860.791 746.821 860.699 747.404 860.614C747.986 860.521 748.409 860.386 748.672 860.209C748.934 860.031 749.066 859.768 749.066 859.42V859.357C749.066 858.682 748.853 858.16 748.427 857.79C748.008 857.421 747.411 857.237 746.637 857.237C745.82 857.237 745.17 857.418 744.687 857.78C744.204 858.135 743.885 858.582 743.728 859.122L739.531 858.781C739.744 857.787 740.163 856.928 740.788 856.203C741.413 855.472 742.219 854.911 743.206 854.52C744.201 854.122 745.351 853.923 746.658 853.923C747.567 853.923 748.437 854.03 749.268 854.243C750.106 854.456 750.848 854.786 751.495 855.234C752.148 855.681 752.663 856.256 753.04 856.96C753.416 857.656 753.604 858.49 753.604 859.463V870.5H749.3V868.231H749.172C748.91 868.742 748.558 869.193 748.118 869.584C747.677 869.967 747.148 870.269 746.53 870.489C745.912 870.702 745.199 870.809 744.389 870.809ZM745.689 867.677C746.356 867.677 746.946 867.545 747.457 867.283C747.969 867.013 748.37 866.651 748.661 866.196C748.952 865.741 749.098 865.227 749.098 864.651V862.915C748.956 863.007 748.76 863.092 748.512 863.17C748.27 863.241 747.997 863.309 747.692 863.373C747.386 863.43 747.081 863.483 746.775 863.533C746.47 863.575 746.193 863.614 745.944 863.65C745.412 863.728 744.946 863.852 744.549 864.023C744.151 864.193 743.842 864.424 743.622 864.715C743.402 864.999 743.292 865.354 743.292 865.781C743.292 866.398 743.515 866.871 743.963 867.197C744.417 867.517 744.993 867.677 745.689 867.677ZM765.169 854.136V857.545H755.315V854.136H765.169ZM757.552 850.216H762.09V865.472C762.09 865.891 762.154 866.217 762.282 866.452C762.41 866.679 762.587 866.839 762.815 866.931C763.049 867.023 763.319 867.07 763.624 867.07C763.837 867.07 764.05 867.052 764.263 867.016C764.476 866.974 764.64 866.942 764.753 866.92L765.467 870.298C765.24 870.369 764.92 870.45 764.508 870.543C764.096 870.642 763.596 870.702 763.006 870.724C761.913 870.766 760.954 870.621 760.13 870.287C759.313 869.953 758.677 869.435 758.223 868.732C757.768 868.028 757.545 867.141 757.552 866.068V850.216ZM774.747 870.82C773.064 870.82 771.615 870.479 770.4 869.797C769.193 869.108 768.262 868.135 767.609 866.878C766.956 865.614 766.629 864.119 766.629 862.393C766.629 860.71 766.956 859.232 767.609 857.961C768.262 856.69 769.182 855.699 770.368 854.989C771.561 854.278 772.961 853.923 774.566 853.923C775.645 853.923 776.65 854.097 777.581 854.445C778.518 854.786 779.335 855.301 780.031 855.99C780.734 856.679 781.281 857.545 781.672 858.589C782.062 859.626 782.258 860.841 782.258 862.233V863.479H768.44V860.667H777.985C777.985 860.013 777.843 859.435 777.559 858.93C777.275 858.426 776.881 858.032 776.377 857.748C775.88 857.457 775.301 857.311 774.64 857.311C773.951 857.311 773.341 857.471 772.808 857.79C772.282 858.103 771.87 858.526 771.572 859.058C771.274 859.584 771.121 860.17 771.114 860.816V863.49C771.114 864.3 771.263 864.999 771.561 865.589C771.867 866.178 772.297 866.633 772.851 866.952C773.405 867.272 774.061 867.432 774.821 867.432C775.326 867.432 775.787 867.361 776.206 867.219C776.625 867.077 776.984 866.864 777.282 866.58C777.581 866.295 777.808 865.947 777.964 865.536L782.162 865.812C781.949 866.821 781.512 867.702 780.851 868.455C780.198 869.2 779.353 869.783 778.316 870.202C777.286 870.614 776.096 870.82 774.747 870.82ZM790.589 870.766C789.346 870.766 788.22 870.447 787.212 869.808C786.21 869.161 785.415 868.213 784.825 866.963C784.243 865.706 783.952 864.165 783.952 862.339C783.952 860.464 784.254 858.906 784.857 857.663C785.461 856.413 786.264 855.479 787.265 854.861C788.274 854.236 789.378 853.923 790.578 853.923C791.495 853.923 792.258 854.08 792.869 854.392C793.487 854.697 793.984 855.081 794.36 855.543C794.744 855.997 795.035 856.445 795.234 856.885H795.372V848.682H799.9V870.5H795.426V867.879H795.234C795.021 868.334 794.719 868.785 794.328 869.232C793.945 869.673 793.444 870.038 792.826 870.33C792.215 870.621 791.47 870.766 790.589 870.766ZM792.027 867.155C792.759 867.155 793.377 866.956 793.881 866.558C794.392 866.153 794.783 865.589 795.053 864.864C795.33 864.14 795.468 863.291 795.468 862.318C795.468 861.345 795.333 860.5 795.063 859.783C794.794 859.065 794.403 858.511 793.892 858.121C793.38 857.73 792.759 857.535 792.027 857.535C791.281 857.535 790.653 857.737 790.142 858.142C789.63 858.547 789.243 859.108 788.98 859.825C788.718 860.543 788.586 861.374 788.586 862.318C788.586 863.27 788.718 864.112 788.98 864.843C789.25 865.567 789.637 866.136 790.142 866.548C790.653 866.952 791.281 867.155 792.027 867.155ZM658.821 906.5H656.606L663.015 889.045H665.196L671.606 906.5H669.39L664.174 891.807H664.037L658.821 906.5ZM659.64 899.682H668.571V901.557H659.64V899.682ZM675.535 889.045V906.5H673.524V889.045H675.535ZM684.179 906.773C682.918 906.773 681.83 906.494 680.915 905.938C680.006 905.375 679.304 904.591 678.81 903.585C678.322 902.574 678.077 901.398 678.077 900.057C678.077 898.716 678.322 897.534 678.81 896.511C679.304 895.483 679.992 894.682 680.873 894.108C681.759 893.528 682.793 893.239 683.975 893.239C684.657 893.239 685.33 893.352 685.995 893.58C686.66 893.807 687.265 894.176 687.81 894.688C688.356 895.193 688.79 895.864 689.114 896.699C689.438 897.534 689.6 898.562 689.6 899.784V900.636H679.509V898.898H687.554C687.554 898.159 687.407 897.5 687.111 896.92C686.822 896.341 686.407 895.884 685.867 895.548C685.333 895.213 684.702 895.045 683.975 895.045C683.174 895.045 682.481 895.244 681.895 895.642C681.316 896.034 680.87 896.545 680.557 897.176C680.245 897.807 680.089 898.483 680.089 899.205V900.364C680.089 901.352 680.259 902.19 680.6 902.878C680.947 903.56 681.427 904.08 682.04 904.438C682.654 904.79 683.367 904.966 684.179 904.966C684.708 904.966 685.185 904.892 685.611 904.744C686.043 904.591 686.415 904.364 686.728 904.062C687.04 903.756 687.282 903.375 687.452 902.92L689.395 903.466C689.191 904.125 688.847 904.705 688.364 905.205C687.881 905.699 687.285 906.085 686.574 906.364C685.864 906.636 685.066 906.773 684.179 906.773ZM692.132 906.5V893.409H694.075V895.386H694.211C694.45 894.739 694.882 894.213 695.507 893.81C696.132 893.406 696.836 893.205 697.62 893.205C697.768 893.205 697.953 893.207 698.174 893.213C698.396 893.219 698.563 893.227 698.677 893.239V895.284C698.609 895.267 698.453 895.241 698.208 895.207C697.97 895.168 697.717 895.148 697.45 895.148C696.813 895.148 696.245 895.281 695.745 895.548C695.251 895.81 694.859 896.173 694.569 896.639C694.285 897.099 694.143 897.625 694.143 898.216V906.5H692.132ZM707.047 893.409V895.114H700.263V893.409H707.047ZM702.24 890.273H704.251V902.75C704.251 903.318 704.334 903.744 704.498 904.028C704.669 904.307 704.885 904.494 705.146 904.591C705.413 904.682 705.695 904.727 705.99 904.727C706.212 904.727 706.393 904.716 706.535 904.693C706.677 904.665 706.791 904.642 706.876 904.625L707.285 906.432C707.149 906.483 706.959 906.534 706.714 906.585C706.47 906.642 706.16 906.67 705.785 906.67C705.217 906.67 704.66 906.548 704.115 906.304C703.575 906.06 703.126 905.688 702.768 905.188C702.416 904.688 702.24 904.057 702.24 903.295V890.273ZM718.583 896.341L716.776 896.852C716.662 896.551 716.495 896.259 716.273 895.974C716.057 895.685 715.762 895.446 715.387 895.259C715.012 895.071 714.532 894.977 713.946 894.977C713.145 894.977 712.478 895.162 711.943 895.531C711.415 895.895 711.151 896.358 711.151 896.92C711.151 897.42 711.333 897.815 711.696 898.105C712.06 898.395 712.628 898.636 713.401 898.83L715.344 899.307C716.515 899.591 717.387 900.026 717.961 900.611C718.534 901.19 718.821 901.937 718.821 902.852C718.821 903.602 718.605 904.273 718.174 904.864C717.747 905.455 717.151 905.92 716.384 906.261C715.617 906.602 714.725 906.773 713.708 906.773C712.372 906.773 711.267 906.483 710.392 905.903C709.517 905.324 708.963 904.477 708.73 903.364L710.64 902.886C710.821 903.591 711.165 904.119 711.671 904.472C712.182 904.824 712.85 905 713.674 905C714.611 905 715.355 904.801 715.907 904.403C716.463 904 716.742 903.517 716.742 902.955C716.742 902.5 716.583 902.119 716.265 901.812C715.946 901.5 715.458 901.267 714.799 901.114L712.617 900.602C711.418 900.318 710.537 899.878 709.975 899.281C709.418 898.679 709.14 897.926 709.14 897.023C709.14 896.284 709.347 895.631 709.762 895.062C710.182 894.494 710.753 894.048 711.475 893.724C712.202 893.401 713.026 893.239 713.946 893.239C715.242 893.239 716.259 893.523 716.997 894.091C717.742 894.659 718.27 895.409 718.583 896.341ZM670.199 930.5H668.086C667.961 929.892 667.742 929.358 667.43 928.898C667.123 928.438 666.748 928.051 666.305 927.739C665.867 927.42 665.381 927.182 664.847 927.023C664.313 926.864 663.756 926.784 663.177 926.784C662.12 926.784 661.163 927.051 660.305 927.585C659.452 928.119 658.773 928.906 658.268 929.946C657.768 930.986 657.518 932.261 657.518 933.773C657.518 935.284 657.768 936.56 658.268 937.599C658.773 938.639 659.452 939.426 660.305 939.96C661.163 940.494 662.12 940.761 663.177 940.761C663.756 940.761 664.313 940.682 664.847 940.523C665.381 940.364 665.867 940.128 666.305 939.815C666.748 939.497 667.123 939.108 667.43 938.648C667.742 938.182 667.961 937.648 668.086 937.045H670.199C670.04 937.937 669.751 938.736 669.33 939.44C668.91 940.145 668.387 940.744 667.762 941.239C667.137 941.727 666.435 942.099 665.657 942.355C664.884 942.611 664.057 942.739 663.177 942.739C661.688 942.739 660.364 942.375 659.205 941.648C658.046 940.92 657.134 939.886 656.469 938.545C655.805 937.205 655.472 935.614 655.472 933.773C655.472 931.932 655.805 930.341 656.469 929C657.134 927.659 658.046 926.625 659.205 925.898C660.364 925.17 661.688 924.807 663.177 924.807C664.057 924.807 664.884 924.935 665.657 925.19C666.435 925.446 667.137 925.821 667.762 926.315C668.387 926.804 668.91 927.401 669.33 928.105C669.751 928.804 670.04 929.602 670.199 930.5ZM676.666 942.807C675.837 942.807 675.084 942.651 674.408 942.338C673.732 942.02 673.195 941.562 672.797 940.966C672.399 940.364 672.201 939.636 672.201 938.784C672.201 938.034 672.348 937.426 672.644 936.96C672.939 936.489 673.334 936.119 673.828 935.852C674.323 935.585 674.868 935.386 675.465 935.256C676.067 935.119 676.672 935.011 677.28 934.932C678.076 934.83 678.72 934.753 679.215 934.702C679.715 934.645 680.078 934.551 680.306 934.42C680.539 934.29 680.655 934.062 680.655 933.739V933.67C680.655 932.83 680.425 932.176 679.965 931.71C679.51 931.244 678.82 931.011 677.894 931.011C676.934 931.011 676.181 931.222 675.635 931.642C675.09 932.062 674.706 932.511 674.485 932.989L672.576 932.307C672.916 931.511 673.371 930.892 673.939 930.449C674.513 930 675.138 929.687 675.814 929.511C676.496 929.33 677.166 929.239 677.826 929.239C678.246 929.239 678.729 929.29 679.274 929.392C679.826 929.489 680.357 929.69 680.868 929.997C681.385 930.304 681.814 930.767 682.155 931.386C682.496 932.006 682.666 932.835 682.666 933.875V942.5H680.655V940.727H680.553C680.416 941.011 680.189 941.315 679.871 941.639C679.553 941.963 679.13 942.239 678.601 942.466C678.073 942.693 677.428 942.807 676.666 942.807ZM676.973 941C677.769 941 678.439 940.844 678.985 940.531C679.536 940.219 679.951 939.815 680.229 939.321C680.513 938.827 680.655 938.307 680.655 937.761V935.92C680.57 936.023 680.382 936.116 680.093 936.202C679.809 936.281 679.479 936.352 679.104 936.415C678.735 936.472 678.374 936.523 678.022 936.568C677.675 936.608 677.394 936.642 677.178 936.67C676.655 936.739 676.166 936.849 675.712 937.003C675.263 937.151 674.899 937.375 674.621 937.676C674.348 937.972 674.212 938.375 674.212 938.886C674.212 939.585 674.47 940.114 674.988 940.472C675.51 940.824 676.172 941 676.973 941ZM695.082 932.341L693.276 932.852C693.162 932.551 692.994 932.259 692.773 931.974C692.557 931.685 692.261 931.446 691.886 931.259C691.511 931.071 691.031 930.977 690.446 930.977C689.645 930.977 688.977 931.162 688.443 931.531C687.915 931.895 687.651 932.358 687.651 932.92C687.651 933.42 687.832 933.815 688.196 934.105C688.56 934.395 689.128 934.636 689.901 934.83L691.844 935.307C693.014 935.591 693.886 936.026 694.46 936.611C695.034 937.19 695.321 937.937 695.321 938.852C695.321 939.602 695.105 940.273 694.673 940.864C694.247 941.455 693.651 941.92 692.884 942.261C692.116 942.602 691.224 942.773 690.207 942.773C688.872 942.773 687.767 942.483 686.892 941.903C686.017 941.324 685.463 940.477 685.23 939.364L687.139 938.886C687.321 939.591 687.665 940.119 688.17 940.472C688.682 940.824 689.349 941 690.173 941C691.111 941 691.855 940.801 692.406 940.403C692.963 940 693.241 939.517 693.241 938.955C693.241 938.5 693.082 938.119 692.764 937.812C692.446 937.5 691.957 937.267 691.298 937.114L689.116 936.602C687.918 936.318 687.037 935.878 686.474 935.281C685.918 934.679 685.639 933.926 685.639 933.023C685.639 932.284 685.847 931.631 686.261 931.062C686.682 930.494 687.253 930.048 687.974 929.724C688.702 929.401 689.526 929.239 690.446 929.239C691.741 929.239 692.759 929.523 693.497 930.091C694.241 930.659 694.77 931.409 695.082 932.341ZM703.309 942.773C702.048 942.773 700.96 942.494 700.045 941.938C699.136 941.375 698.434 940.591 697.94 939.585C697.451 938.574 697.207 937.398 697.207 936.057C697.207 934.716 697.451 933.534 697.94 932.511C698.434 931.483 699.122 930.682 700.003 930.108C700.889 929.528 701.923 929.239 703.105 929.239C703.787 929.239 704.46 929.352 705.125 929.58C705.789 929.807 706.395 930.176 706.94 930.688C707.485 931.193 707.92 931.864 708.244 932.699C708.568 933.534 708.73 934.562 708.73 935.784V936.636H698.639V934.898H706.684C706.684 934.159 706.537 933.5 706.241 932.92C705.951 932.341 705.537 931.884 704.997 931.548C704.463 931.213 703.832 931.045 703.105 931.045C702.304 931.045 701.61 931.244 701.025 931.642C700.446 932.034 700 932.545 699.687 933.176C699.375 933.807 699.218 934.483 699.218 935.205V936.364C699.218 937.352 699.389 938.19 699.73 938.878C700.076 939.56 700.557 940.08 701.17 940.438C701.784 940.79 702.497 940.966 703.309 940.966C703.838 940.966 704.315 940.892 704.741 940.744C705.173 940.591 705.545 940.364 705.858 940.062C706.17 939.756 706.412 939.375 706.582 938.92L708.525 939.466C708.321 940.125 707.977 940.705 707.494 941.205C707.011 941.699 706.414 942.085 705.704 942.364C704.994 942.636 704.196 942.773 703.309 942.773ZM720.534 932.341L718.727 932.852C718.614 932.551 718.446 932.259 718.225 931.974C718.009 931.685 717.713 931.446 717.338 931.259C716.963 931.071 716.483 930.977 715.898 930.977C715.097 930.977 714.429 931.162 713.895 931.531C713.367 931.895 713.102 932.358 713.102 932.92C713.102 933.42 713.284 933.815 713.648 934.105C714.011 934.395 714.58 934.636 715.352 934.83L717.296 935.307C718.466 935.591 719.338 936.026 719.912 936.611C720.486 937.19 720.773 937.937 720.773 938.852C720.773 939.602 720.557 940.273 720.125 940.864C719.699 941.455 719.102 941.92 718.335 942.261C717.568 942.602 716.676 942.773 715.659 942.773C714.324 942.773 713.219 942.483 712.344 941.903C711.469 941.324 710.915 940.477 710.682 939.364L712.591 938.886C712.773 939.591 713.117 940.119 713.622 940.472C714.134 940.824 714.801 941 715.625 941C716.563 941 717.307 940.801 717.858 940.403C718.415 940 718.693 939.517 718.693 938.955C718.693 938.5 718.534 938.119 718.216 937.812C717.898 937.5 717.409 937.267 716.75 937.114L714.568 936.602C713.369 936.318 712.489 935.878 711.926 935.281C711.369 934.679 711.091 933.926 711.091 933.023C711.091 932.284 711.298 931.631 711.713 931.062C712.134 930.494 712.705 930.048 713.426 929.724C714.154 929.401 714.977 929.239 715.898 929.239C717.193 929.239 718.21 929.523 718.949 930.091C719.693 930.659 720.222 931.409 720.534 932.341ZM604.514 966.5H602.401C602.276 965.892 602.057 965.358 601.744 964.898C601.438 964.438 601.063 964.051 600.619 963.739C600.182 963.42 599.696 963.182 599.162 963.023C598.628 962.864 598.071 962.784 597.492 962.784C596.435 962.784 595.477 963.051 594.619 963.585C593.767 964.119 593.088 964.906 592.582 965.946C592.082 966.986 591.832 968.261 591.832 969.773C591.832 971.284 592.082 972.56 592.582 973.599C593.088 974.639 593.767 975.426 594.619 975.96C595.477 976.494 596.435 976.761 597.492 976.761C598.071 976.761 598.628 976.682 599.162 976.523C599.696 976.364 600.182 976.128 600.619 975.815C601.063 975.497 601.438 975.108 601.744 974.648C602.057 974.182 602.276 973.648 602.401 973.045H604.514C604.355 973.937 604.065 974.736 603.645 975.44C603.225 976.145 602.702 976.744 602.077 977.239C601.452 977.727 600.75 978.099 599.972 978.355C599.199 978.611 598.372 978.739 597.492 978.739C596.003 978.739 594.679 978.375 593.52 977.648C592.361 976.92 591.449 975.886 590.784 974.545C590.119 973.205 589.787 971.614 589.787 969.773C589.787 967.932 590.119 966.341 590.784 965C591.449 963.659 592.361 962.625 593.52 961.898C594.679 961.17 596.003 960.807 597.492 960.807C598.372 960.807 599.199 960.935 599.972 961.19C600.75 961.446 601.452 961.821 602.077 962.315C602.702 962.804 603.225 963.401 603.645 964.105C604.065 964.804 604.355 965.602 604.514 966.5ZM612.447 978.773C611.265 978.773 610.228 978.491 609.336 977.929C608.45 977.366 607.757 976.58 607.257 975.568C606.763 974.557 606.515 973.375 606.515 972.023C606.515 970.659 606.763 969.469 607.257 968.452C607.757 967.435 608.45 966.645 609.336 966.082C610.228 965.52 611.265 965.239 612.447 965.239C613.629 965.239 614.663 965.52 615.549 966.082C616.442 966.645 617.135 967.435 617.629 968.452C618.129 969.469 618.379 970.659 618.379 972.023C618.379 973.375 618.129 974.557 617.629 975.568C617.135 976.58 616.442 977.366 615.549 977.929C614.663 978.491 613.629 978.773 612.447 978.773ZM612.447 976.966C613.345 976.966 614.084 976.736 614.663 976.276C615.243 975.815 615.672 975.21 615.95 974.46C616.228 973.71 616.368 972.898 616.368 972.023C616.368 971.148 616.228 970.332 615.95 969.577C615.672 968.821 615.243 968.21 614.663 967.744C614.084 967.278 613.345 967.045 612.447 967.045C611.549 967.045 610.811 967.278 610.231 967.744C609.652 968.21 609.223 968.821 608.944 969.577C608.666 970.332 608.527 971.148 608.527 972.023C608.527 972.898 608.666 973.71 608.944 974.46C609.223 975.21 609.652 975.815 610.231 976.276C610.811 976.736 611.549 976.966 612.447 976.966ZM622.933 970.625V978.5H620.921V965.409H622.865V967.455H623.035C623.342 966.79 623.808 966.256 624.433 965.852C625.058 965.443 625.865 965.239 626.853 965.239C627.74 965.239 628.515 965.42 629.18 965.784C629.845 966.142 630.362 966.688 630.731 967.42C631.1 968.148 631.285 969.068 631.285 970.182V978.5H629.274V970.318C629.274 969.29 629.007 968.489 628.472 967.915C627.938 967.335 627.205 967.045 626.274 967.045C625.632 967.045 625.058 967.185 624.552 967.463C624.052 967.741 623.657 968.148 623.367 968.682C623.078 969.216 622.933 969.864 622.933 970.625ZM640.126 965.409V967.114H633.341V965.409H640.126ZM635.319 962.273H637.33V974.75C637.33 975.318 637.413 975.744 637.577 976.028C637.748 976.307 637.964 976.494 638.225 976.591C638.492 976.682 638.773 976.727 639.069 976.727C639.29 976.727 639.472 976.716 639.614 976.693C639.756 976.665 639.87 976.642 639.955 976.625L640.364 978.432C640.228 978.483 640.038 978.534 639.793 978.585C639.549 978.642 639.239 978.67 638.864 978.67C638.296 978.67 637.739 978.548 637.194 978.304C636.654 978.06 636.205 977.688 635.847 977.188C635.495 976.688 635.319 976.057 635.319 975.295V962.273ZM647.971 978.773C646.71 978.773 645.622 978.494 644.707 977.938C643.798 977.375 643.096 976.591 642.602 975.585C642.113 974.574 641.869 973.398 641.869 972.057C641.869 970.716 642.113 969.534 642.602 968.511C643.096 967.483 643.784 966.682 644.664 966.108C645.551 965.528 646.585 965.239 647.767 965.239C648.448 965.239 649.122 965.352 649.787 965.58C650.451 965.807 651.056 966.176 651.602 966.688C652.147 967.193 652.582 967.864 652.906 968.699C653.23 969.534 653.392 970.562 653.392 971.784V972.636H643.301V970.898H651.346C651.346 970.159 651.198 969.5 650.903 968.92C650.613 968.341 650.198 967.884 649.659 967.548C649.125 967.213 648.494 967.045 647.767 967.045C646.965 967.045 646.272 967.244 645.687 967.642C645.108 968.034 644.662 968.545 644.349 969.176C644.037 969.807 643.88 970.483 643.88 971.205V972.364C643.88 973.352 644.051 974.19 644.392 974.878C644.738 975.56 645.218 976.08 645.832 976.438C646.446 976.79 647.159 976.966 647.971 976.966C648.5 976.966 648.977 976.892 649.403 976.744C649.835 976.591 650.207 976.364 650.519 976.062C650.832 975.756 651.073 975.375 651.244 974.92L653.187 975.466C652.983 976.125 652.639 976.705 652.156 977.205C651.673 977.699 651.076 978.085 650.366 978.364C649.656 978.636 648.858 978.773 647.971 978.773ZM657.072 965.409L660.208 970.761L663.344 965.409H665.663L661.435 971.955L665.663 978.5H663.344L660.208 973.42L657.072 978.5H654.754L658.913 971.955L654.754 965.409H657.072ZM673.698 965.409V967.114H666.914V965.409H673.698ZM668.891 962.273H670.902V974.75C670.902 975.318 670.985 975.744 671.15 976.028C671.32 976.307 671.536 976.494 671.797 976.591C672.064 976.682 672.346 976.727 672.641 976.727C672.863 976.727 673.044 976.716 673.186 976.693C673.329 976.665 673.442 976.642 673.527 976.625L673.936 978.432C673.8 978.483 673.61 978.534 673.365 978.585C673.121 978.642 672.811 978.67 672.436 978.67C671.868 978.67 671.311 978.548 670.766 978.304C670.226 978.06 669.777 977.688 669.419 977.188C669.067 976.688 668.891 976.057 668.891 975.295V962.273ZM684.445 973.148V965.409H686.457V978.5H684.445V976.284H684.309C684.002 976.949 683.525 977.514 682.877 977.98C682.23 978.44 681.411 978.67 680.423 978.67C679.604 978.67 678.877 978.491 678.241 978.134C677.604 977.77 677.104 977.224 676.741 976.497C676.377 975.764 676.195 974.841 676.195 973.727V965.409H678.207V973.591C678.207 974.545 678.474 975.307 679.008 975.875C679.548 976.443 680.235 976.727 681.07 976.727C681.57 976.727 682.079 976.599 682.596 976.344C683.119 976.088 683.556 975.696 683.908 975.168C684.266 974.639 684.445 973.966 684.445 973.148ZM693.465 978.807C692.635 978.807 691.883 978.651 691.206 978.338C690.53 978.02 689.993 977.562 689.596 976.966C689.198 976.364 688.999 975.636 688.999 974.784C688.999 974.034 689.147 973.426 689.442 972.96C689.738 972.489 690.133 972.119 690.627 971.852C691.121 971.585 691.667 971.386 692.263 971.256C692.866 971.119 693.471 971.011 694.079 970.932C694.874 970.83 695.519 970.753 696.013 970.702C696.513 970.645 696.877 970.551 697.104 970.42C697.337 970.29 697.454 970.062 697.454 969.739V969.67C697.454 968.83 697.224 968.176 696.763 967.71C696.309 967.244 695.618 967.011 694.692 967.011C693.732 967.011 692.979 967.222 692.434 967.642C691.888 968.062 691.505 968.511 691.283 968.989L689.374 968.307C689.715 967.511 690.17 966.892 690.738 966.449C691.312 966 691.937 965.687 692.613 965.511C693.295 965.33 693.965 965.239 694.624 965.239C695.045 965.239 695.527 965.29 696.073 965.392C696.624 965.489 697.155 965.69 697.667 965.997C698.184 966.304 698.613 966.767 698.954 967.386C699.295 968.006 699.465 968.835 699.465 969.875V978.5H697.454V976.727H697.351C697.215 977.011 696.988 977.315 696.67 977.639C696.351 977.963 695.928 978.239 695.4 978.466C694.871 978.693 694.226 978.807 693.465 978.807ZM693.772 977C694.567 977 695.238 976.844 695.783 976.531C696.334 976.219 696.749 975.815 697.027 975.321C697.312 974.827 697.454 974.307 697.454 973.761V971.92C697.368 972.023 697.181 972.116 696.891 972.202C696.607 972.281 696.277 972.352 695.902 972.415C695.533 972.472 695.172 972.523 694.82 972.568C694.474 972.608 694.192 972.642 693.976 972.67C693.454 972.739 692.965 972.849 692.51 973.003C692.062 973.151 691.698 973.375 691.42 973.676C691.147 973.972 691.01 974.375 691.01 974.886C691.01 975.585 691.269 976.114 691.786 976.472C692.309 976.824 692.971 977 693.772 977ZM704.62 961.045V978.5H702.608V961.045H704.62ZM723.27 968.341L721.463 968.852C721.35 968.551 721.182 968.259 720.961 967.974C720.745 967.685 720.449 967.446 720.074 967.259C719.699 967.071 719.219 966.977 718.634 966.977C717.833 966.977 717.165 967.162 716.631 967.531C716.103 967.895 715.838 968.358 715.838 968.92C715.838 969.42 716.02 969.815 716.384 970.105C716.747 970.395 717.316 970.636 718.088 970.83L720.032 971.307C721.202 971.591 722.074 972.026 722.648 972.611C723.222 973.19 723.509 973.937 723.509 974.852C723.509 975.602 723.293 976.273 722.861 976.864C722.435 977.455 721.838 977.92 721.071 978.261C720.304 978.602 719.412 978.773 718.395 978.773C717.06 978.773 715.955 978.483 715.08 977.903C714.205 977.324 713.651 976.477 713.418 975.364L715.327 974.886C715.509 975.591 715.853 976.119 716.358 976.472C716.87 976.824 717.537 977 718.361 977C719.299 977 720.043 976.801 720.594 976.403C721.151 976 721.429 975.517 721.429 974.955C721.429 974.5 721.27 974.119 720.952 973.812C720.634 973.5 720.145 973.267 719.486 973.114L717.304 972.602C716.105 972.318 715.225 971.878 714.662 971.281C714.105 970.679 713.827 969.926 713.827 969.023C713.827 968.284 714.034 967.631 714.449 967.062C714.87 966.494 715.441 966.048 716.162 965.724C716.89 965.401 717.713 965.239 718.634 965.239C719.929 965.239 720.946 965.523 721.685 966.091C722.429 966.659 722.958 967.409 723.27 968.341ZM726.009 978.5V965.409H728.02V978.5H726.009ZM727.031 963.227C726.639 963.227 726.301 963.094 726.017 962.827C725.739 962.56 725.599 962.239 725.599 961.864C725.599 961.489 725.739 961.168 726.017 960.901C726.301 960.634 726.639 960.5 727.031 960.5C727.423 960.5 727.759 960.634 728.037 960.901C728.321 961.168 728.463 961.489 728.463 961.864C728.463 962.239 728.321 962.56 728.037 962.827C727.759 963.094 727.423 963.227 727.031 963.227ZM736.46 983.682C735.488 983.682 734.653 983.557 733.954 983.307C733.255 983.062 732.673 982.739 732.207 982.335C731.747 981.938 731.38 981.511 731.108 981.057L732.71 979.932C732.892 980.17 733.122 980.443 733.4 980.75C733.679 981.062 734.059 981.332 734.542 981.56C735.031 981.793 735.67 981.909 736.46 981.909C737.517 981.909 738.389 981.653 739.076 981.142C739.764 980.631 740.108 979.83 740.108 978.739V976.08H739.937C739.789 976.318 739.579 976.614 739.307 976.966C739.039 977.312 738.653 977.622 738.147 977.895C737.647 978.162 736.971 978.295 736.119 978.295C735.062 978.295 734.113 978.045 733.272 977.545C732.437 977.045 731.775 976.318 731.287 975.364C730.804 974.409 730.562 973.25 730.562 971.886C730.562 970.545 730.798 969.378 731.27 968.384C731.741 967.384 732.397 966.611 733.238 966.065C734.079 965.514 735.051 965.239 736.153 965.239C737.005 965.239 737.682 965.381 738.182 965.665C738.687 965.943 739.074 966.261 739.341 966.619C739.613 966.972 739.824 967.261 739.971 967.489H740.176V965.409H742.119V978.875C742.119 980 741.863 980.915 741.352 981.619C740.846 982.33 740.164 982.849 739.307 983.179C738.454 983.514 737.505 983.682 736.46 983.682ZM736.392 976.489C737.199 976.489 737.88 976.304 738.437 975.935C738.994 975.565 739.417 975.034 739.707 974.341C739.997 973.648 740.142 972.818 740.142 971.852C740.142 970.909 740 970.077 739.716 969.355C739.432 968.634 739.011 968.068 738.454 967.659C737.897 967.25 737.21 967.045 736.392 967.045C735.539 967.045 734.829 967.261 734.261 967.693C733.699 968.125 733.275 968.705 732.991 969.432C732.713 970.159 732.574 970.966 732.574 971.852C732.574 972.761 732.716 973.565 733 974.264C733.289 974.957 733.716 975.503 734.278 975.901C734.846 976.293 735.551 976.489 736.392 976.489ZM747.284 970.625V978.5H745.273V965.409H747.216V967.455H747.386C747.693 966.79 748.159 966.256 748.784 965.852C749.409 965.443 750.216 965.239 751.205 965.239C752.091 965.239 752.867 965.42 753.531 965.784C754.196 966.142 754.713 966.688 755.083 967.42C755.452 968.148 755.636 969.068 755.636 970.182V978.5H753.625V970.318C753.625 969.29 753.358 968.489 752.824 967.915C752.29 967.335 751.557 967.045 750.625 967.045C749.983 967.045 749.409 967.185 748.904 967.463C748.404 967.741 748.009 968.148 747.719 968.682C747.429 969.216 747.284 969.864 747.284 970.625ZM762.636 978.807C761.807 978.807 761.054 978.651 760.378 978.338C759.702 978.02 759.165 977.562 758.767 976.966C758.369 976.364 758.17 975.636 758.17 974.784C758.17 974.034 758.318 973.426 758.613 972.96C758.909 972.489 759.304 972.119 759.798 971.852C760.292 971.585 760.838 971.386 761.434 971.256C762.037 971.119 762.642 971.011 763.25 970.932C764.045 970.83 764.69 970.753 765.184 970.702C765.684 970.645 766.048 970.551 766.275 970.42C766.508 970.29 766.625 970.062 766.625 969.739V969.67C766.625 968.83 766.395 968.176 765.934 967.71C765.48 967.244 764.79 967.011 763.863 967.011C762.903 967.011 762.15 967.222 761.605 967.642C761.059 968.062 760.676 968.511 760.454 968.989L758.545 968.307C758.886 967.511 759.341 966.892 759.909 966.449C760.483 966 761.108 965.687 761.784 965.511C762.466 965.33 763.136 965.239 763.795 965.239C764.216 965.239 764.699 965.29 765.244 965.392C765.795 965.489 766.327 965.69 766.838 965.997C767.355 966.304 767.784 966.767 768.125 967.386C768.466 968.006 768.636 968.835 768.636 969.875V978.5H766.625V976.727H766.523C766.386 977.011 766.159 977.315 765.841 977.639C765.523 977.963 765.099 978.239 764.571 978.466C764.042 978.693 763.398 978.807 762.636 978.807ZM762.943 977C763.738 977 764.409 976.844 764.954 976.531C765.505 976.219 765.92 975.815 766.199 975.321C766.483 974.827 766.625 974.307 766.625 973.761V971.92C766.54 972.023 766.352 972.116 766.062 972.202C765.778 972.281 765.449 972.352 765.074 972.415C764.704 972.472 764.344 972.523 763.991 972.568C763.645 972.608 763.363 972.642 763.148 972.67C762.625 972.739 762.136 972.849 761.682 973.003C761.233 973.151 760.869 973.375 760.591 973.676C760.318 973.972 760.182 974.375 760.182 974.886C760.182 975.585 760.44 976.114 760.957 976.472C761.48 976.824 762.142 977 762.943 977ZM773.791 961.045V978.5H771.779V961.045H773.791ZM786.219 968.341L784.413 968.852C784.299 968.551 784.131 968.259 783.91 967.974C783.694 967.685 783.398 967.446 783.023 967.259C782.648 967.071 782.168 966.977 781.583 966.977C780.782 966.977 780.114 967.162 779.58 967.531C779.052 967.895 778.788 968.358 778.788 968.92C778.788 969.42 778.969 969.815 779.333 970.105C779.697 970.395 780.265 970.636 781.038 970.83L782.981 971.307C784.151 971.591 785.023 972.026 785.597 972.611C786.171 973.19 786.458 973.937 786.458 974.852C786.458 975.602 786.242 976.273 785.81 976.864C785.384 977.455 784.788 977.92 784.021 978.261C783.253 978.602 782.361 978.773 781.344 978.773C780.009 978.773 778.904 978.483 778.029 977.903C777.154 977.324 776.6 976.477 776.367 975.364L778.276 974.886C778.458 975.591 778.802 976.119 779.307 976.472C779.819 976.824 780.486 977 781.31 977C782.248 977 782.992 976.801 783.543 976.403C784.1 976 784.378 975.517 784.378 974.955C784.378 974.5 784.219 974.119 783.901 973.812C783.583 973.5 783.094 973.267 782.435 973.114L780.253 972.602C779.055 972.318 778.174 971.878 777.611 971.281C777.055 970.679 776.776 969.926 776.776 969.023C776.776 968.284 776.984 967.631 777.398 967.062C777.819 966.494 778.39 966.048 779.111 965.724C779.839 965.401 780.663 965.239 781.583 965.239C782.878 965.239 783.896 965.523 784.634 966.091C785.378 966.659 785.907 967.409 786.219 968.341ZM634.325 1002.5H632.211C632.086 1001.89 631.867 1001.36 631.555 1000.9C631.248 1000.44 630.873 1000.05 630.43 999.739C629.992 999.42 629.507 999.182 628.973 999.023C628.438 998.864 627.882 998.784 627.302 998.784C626.245 998.784 625.288 999.051 624.43 999.585C623.578 1000.12 622.899 1000.91 622.393 1001.95C621.893 1002.99 621.643 1004.26 621.643 1005.77C621.643 1007.28 621.893 1008.56 622.393 1009.6C622.899 1010.64 623.578 1011.43 624.43 1011.96C625.288 1012.49 626.245 1012.76 627.302 1012.76C627.882 1012.76 628.438 1012.68 628.973 1012.52C629.507 1012.36 629.992 1012.13 630.43 1011.82C630.873 1011.5 631.248 1011.11 631.555 1010.65C631.867 1010.18 632.086 1009.65 632.211 1009.05H634.325C634.166 1009.94 633.876 1010.74 633.455 1011.44C633.035 1012.14 632.512 1012.74 631.887 1013.24C631.262 1013.73 630.561 1014.1 629.782 1014.36C629.009 1014.61 628.183 1014.74 627.302 1014.74C625.813 1014.74 624.49 1014.38 623.33 1013.65C622.171 1012.92 621.259 1011.89 620.595 1010.55C619.93 1009.2 619.598 1007.61 619.598 1005.77C619.598 1003.93 619.93 1002.34 620.595 1001C621.259 999.659 622.171 998.625 623.33 997.898C624.49 997.17 625.813 996.807 627.302 996.807C628.183 996.807 629.009 996.935 629.782 997.19C630.561 997.446 631.262 997.821 631.887 998.315C632.512 998.804 633.035 999.401 633.455 1000.11C633.876 1000.8 634.166 1001.6 634.325 1002.5ZM645.19 1009.15V1001.41H647.201V1014.5H645.19V1012.28H645.053C644.746 1012.95 644.269 1013.51 643.621 1013.98C642.974 1014.44 642.155 1014.67 641.167 1014.67C640.349 1014.67 639.621 1014.49 638.985 1014.13C638.349 1013.77 637.849 1013.22 637.485 1012.5C637.121 1011.76 636.94 1010.84 636.94 1009.73V1001.41H638.951V1009.59C638.951 1010.55 639.218 1011.31 639.752 1011.88C640.292 1012.44 640.979 1012.73 641.815 1012.73C642.315 1012.73 642.823 1012.6 643.34 1012.34C643.863 1012.09 644.3 1011.7 644.653 1011.17C645.011 1010.64 645.19 1009.97 645.19 1009.15ZM659.63 1004.34L657.823 1004.85C657.709 1004.55 657.542 1004.26 657.32 1003.97C657.104 1003.68 656.809 1003.45 656.434 1003.26C656.059 1003.07 655.578 1002.98 654.993 1002.98C654.192 1002.98 653.524 1003.16 652.99 1003.53C652.462 1003.89 652.198 1004.36 652.198 1004.92C652.198 1005.42 652.38 1005.82 652.743 1006.11C653.107 1006.39 653.675 1006.64 654.448 1006.83L656.391 1007.31C657.561 1007.59 658.434 1008.03 659.007 1008.61C659.581 1009.19 659.868 1009.94 659.868 1010.85C659.868 1011.6 659.652 1012.27 659.221 1012.86C658.794 1013.45 658.198 1013.92 657.431 1014.26C656.664 1014.6 655.772 1014.77 654.755 1014.77C653.419 1014.77 652.314 1014.48 651.439 1013.9C650.564 1013.32 650.01 1012.48 649.777 1011.36L651.686 1010.89C651.868 1011.59 652.212 1012.12 652.718 1012.47C653.229 1012.82 653.897 1013 654.721 1013C655.658 1013 656.402 1012.8 656.953 1012.4C657.51 1012 657.789 1011.52 657.789 1010.95C657.789 1010.5 657.63 1010.12 657.311 1009.81C656.993 1009.5 656.505 1009.27 655.846 1009.11L653.664 1008.6C652.465 1008.32 651.584 1007.88 651.022 1007.28C650.465 1006.68 650.186 1005.93 650.186 1005.02C650.186 1004.28 650.394 1003.63 650.809 1003.06C651.229 1002.49 651.8 1002.05 652.522 1001.72C653.249 1001.4 654.073 1001.24 654.993 1001.24C656.289 1001.24 657.306 1001.52 658.044 1002.09C658.789 1002.66 659.317 1003.41 659.63 1004.34ZM668.061 1001.41V1003.11H661.277V1001.41H668.061ZM663.254 998.273H665.266V1010.75C665.266 1011.32 665.348 1011.74 665.513 1012.03C665.683 1012.31 665.899 1012.49 666.161 1012.59C666.428 1012.68 666.709 1012.73 667.004 1012.73C667.226 1012.73 667.408 1012.72 667.55 1012.69C667.692 1012.66 667.805 1012.64 667.891 1012.62L668.3 1014.43C668.163 1014.48 667.973 1014.53 667.729 1014.59C667.484 1014.64 667.175 1014.67 666.8 1014.67C666.232 1014.67 665.675 1014.55 665.129 1014.3C664.59 1014.06 664.141 1013.69 663.783 1013.19C663.43 1012.69 663.254 1012.06 663.254 1011.3V998.273ZM675.736 1014.77C674.554 1014.77 673.517 1014.49 672.625 1013.93C671.739 1013.37 671.046 1012.58 670.546 1011.57C670.052 1010.56 669.804 1009.37 669.804 1008.02C669.804 1006.66 670.052 1005.47 670.546 1004.45C671.046 1003.43 671.739 1002.64 672.625 1002.08C673.517 1001.52 674.554 1001.24 675.736 1001.24C676.918 1001.24 677.952 1001.52 678.839 1002.08C679.731 1002.64 680.424 1003.43 680.918 1004.45C681.418 1005.47 681.668 1006.66 681.668 1008.02C681.668 1009.37 681.418 1010.56 680.918 1011.57C680.424 1012.58 679.731 1013.37 678.839 1013.93C677.952 1014.49 676.918 1014.77 675.736 1014.77ZM675.736 1012.97C676.634 1012.97 677.373 1012.74 677.952 1012.28C678.532 1011.82 678.961 1011.21 679.239 1010.46C679.517 1009.71 679.657 1008.9 679.657 1008.02C679.657 1007.15 679.517 1006.33 679.239 1005.58C678.961 1004.82 678.532 1004.21 677.952 1003.74C677.373 1003.28 676.634 1003.05 675.736 1003.05C674.839 1003.05 674.1 1003.28 673.52 1003.74C672.941 1004.21 672.512 1004.82 672.233 1005.58C671.955 1006.33 671.816 1007.15 671.816 1008.02C671.816 1008.9 671.955 1009.71 672.233 1010.46C672.512 1011.21 672.941 1011.82 673.52 1012.28C674.1 1012.74 674.839 1012.97 675.736 1012.97ZM684.21 1014.5V1001.41H686.154V1003.45H686.324C686.597 1002.76 687.037 1002.21 687.645 1001.83C688.253 1001.43 688.983 1001.24 689.835 1001.24C690.699 1001.24 691.418 1001.43 691.992 1001.83C692.571 1002.21 693.023 1002.76 693.347 1003.45H693.483C693.818 1002.78 694.321 1002.24 694.992 1001.84C695.662 1001.44 696.466 1001.24 697.404 1001.24C698.574 1001.24 699.531 1001.61 700.276 1002.34C701.02 1003.07 701.392 1004.2 701.392 1005.74V1014.5H699.381V1005.74C699.381 1004.77 699.117 1004.08 698.588 1003.67C698.06 1003.25 697.438 1003.05 696.722 1003.05C695.801 1003.05 695.088 1003.32 694.583 1003.88C694.077 1004.43 693.824 1005.13 693.824 1005.98V1014.5H691.779V1005.53C691.779 1004.79 691.537 1004.19 691.054 1003.74C690.571 1003.28 689.949 1003.05 689.188 1003.05C688.665 1003.05 688.176 1003.18 687.722 1003.46C687.273 1003.74 686.909 1004.13 686.631 1004.62C686.358 1005.11 686.222 1005.68 686.222 1006.32V1014.5H684.21ZM712.775 997.045V1014.5H710.764V997.045H712.775ZM715.931 1014.5V1001.41H717.942V1014.5H715.931ZM716.954 999.227C716.562 999.227 716.224 999.094 715.94 998.827C715.661 998.56 715.522 998.239 715.522 997.864C715.522 997.489 715.661 997.168 715.94 996.901C716.224 996.634 716.562 996.5 716.954 996.5C717.346 996.5 717.681 996.634 717.959 996.901C718.244 997.168 718.386 997.489 718.386 997.864C718.386 998.239 718.244 998.56 717.959 998.827C717.681 999.094 717.346 999.227 716.954 999.227ZM723.11 1006.62V1014.5H721.098V1001.41H723.042V1003.45H723.212C723.519 1002.79 723.985 1002.26 724.61 1001.85C725.235 1001.44 726.042 1001.24 727.03 1001.24C727.917 1001.24 728.692 1001.42 729.357 1001.78C730.022 1002.14 730.539 1002.69 730.908 1003.42C731.277 1004.15 731.462 1005.07 731.462 1006.18V1014.5H729.451V1006.32C729.451 1005.29 729.184 1004.49 728.65 1003.91C728.115 1003.34 727.382 1003.05 726.451 1003.05C725.809 1003.05 725.235 1003.18 724.729 1003.46C724.229 1003.74 723.834 1004.15 723.544 1004.68C723.255 1005.22 723.11 1005.86 723.11 1006.62ZM736.484 1009.73L736.45 1007.24H736.859L742.587 1001.41H745.075L738.973 1007.58H738.803L736.484 1009.73ZM734.609 1014.5V997.045H736.621V1014.5H734.609ZM742.928 1014.5L737.814 1008.02L739.246 1006.62L745.484 1014.5H742.928ZM756.409 1004.34L754.602 1004.85C754.488 1004.55 754.321 1004.26 754.099 1003.97C753.883 1003.68 753.588 1003.45 753.213 1003.26C752.838 1003.07 752.358 1002.98 751.773 1002.98C750.971 1002.98 750.304 1003.16 749.77 1003.53C749.241 1003.89 748.977 1004.36 748.977 1004.92C748.977 1005.42 749.159 1005.82 749.523 1006.11C749.886 1006.39 750.454 1006.64 751.227 1006.83L753.17 1007.31C754.341 1007.59 755.213 1008.03 755.787 1008.61C756.361 1009.19 756.648 1009.94 756.648 1010.85C756.648 1011.6 756.432 1012.27 756 1012.86C755.574 1013.45 754.977 1013.92 754.21 1014.26C753.443 1014.6 752.551 1014.77 751.534 1014.77C750.199 1014.77 749.094 1014.48 748.219 1013.9C747.344 1013.32 746.79 1012.48 746.557 1011.36L748.466 1010.89C748.647 1011.59 748.991 1012.12 749.497 1012.47C750.008 1012.82 750.676 1013 751.5 1013C752.437 1013 753.182 1012.8 753.733 1012.4C754.29 1012 754.568 1011.52 754.568 1010.95C754.568 1010.5 754.409 1010.12 754.091 1009.81C753.772 1009.5 753.284 1009.27 752.625 1009.11L750.443 1008.6C749.244 1008.32 748.363 1007.88 747.801 1007.28C747.244 1006.68 746.966 1005.93 746.966 1005.02C746.966 1004.28 747.173 1003.63 747.588 1003.06C748.008 1002.49 748.579 1002.05 749.301 1001.72C750.028 1001.4 750.852 1001.24 751.773 1001.24C753.068 1001.24 754.085 1001.52 754.824 1002.09C755.568 1002.66 756.096 1003.41 756.409 1004.34Z" fill="black" fill-opacity="0.8"/> +<path d="M523.5 733C523.5 734.381 524.619 735.5 526 735.5C527.381 735.5 528.5 734.381 528.5 733H523.5ZM537.1 674C538.481 674 539.457 672.309 538.767 671.113L527.667 651.887C526.976 650.691 525.024 650.691 524.333 651.887L513.233 671.113C512.543 672.309 513.519 674 514.9 674H537.1ZM528.5 733V671.5H523.5V733H528.5Z" fill="#757575"/> +<path d="M802.635 108.182H808.324L814.332 122.841H814.588L820.596 108.182H826.285V130H821.811V115.799H821.63L815.983 129.893H812.936L807.29 115.746H807.109V130H802.635V108.182ZM836.888 130.32C835.205 130.32 833.756 129.979 832.541 129.297C831.334 128.608 830.404 127.635 829.75 126.378C829.097 125.114 828.77 123.619 828.77 121.893C828.77 120.21 829.097 118.732 829.75 117.461C830.404 116.19 831.323 115.199 832.509 114.489C833.703 113.778 835.102 113.423 836.707 113.423C837.786 113.423 838.791 113.597 839.722 113.945C840.659 114.286 841.476 114.801 842.172 115.49C842.875 116.179 843.422 117.045 843.813 118.089C844.203 119.126 844.399 120.341 844.399 121.733V122.979H830.581V120.167H840.127C840.127 119.513 839.985 118.935 839.7 118.43C839.416 117.926 839.022 117.532 838.518 117.248C838.021 116.957 837.442 116.811 836.781 116.811C836.093 116.811 835.482 116.971 834.949 117.29C834.423 117.603 834.012 118.026 833.713 118.558C833.415 119.084 833.262 119.67 833.255 120.316V122.99C833.255 123.8 833.404 124.499 833.703 125.089C834.008 125.678 834.438 126.133 834.992 126.452C835.546 126.772 836.203 126.932 836.963 126.932C837.467 126.932 837.928 126.861 838.347 126.719C838.767 126.577 839.125 126.364 839.423 126.08C839.722 125.795 839.949 125.447 840.105 125.036L844.303 125.312C844.09 126.321 843.653 127.202 842.992 127.955C842.339 128.7 841.494 129.283 840.457 129.702C839.427 130.114 838.237 130.32 836.888 130.32ZM855.494 113.636V117.045H845.64V113.636H855.494ZM847.877 109.716H852.415V124.972C852.415 125.391 852.479 125.717 852.607 125.952C852.735 126.179 852.912 126.339 853.14 126.431C853.374 126.523 853.644 126.57 853.949 126.57C854.162 126.57 854.375 126.552 854.589 126.516C854.802 126.474 854.965 126.442 855.079 126.42L855.792 129.798C855.565 129.869 855.246 129.95 854.834 130.043C854.422 130.142 853.921 130.202 853.331 130.224C852.238 130.266 851.279 130.121 850.455 129.787C849.638 129.453 849.003 128.935 848.548 128.232C848.094 127.528 847.87 126.641 847.877 125.568V109.716ZM857.88 130V113.636H862.28V116.491H862.451C862.749 115.476 863.25 114.709 863.953 114.19C864.656 113.665 865.466 113.402 866.382 113.402C866.609 113.402 866.854 113.416 867.117 113.445C867.38 113.473 867.611 113.512 867.809 113.562V117.589C867.596 117.525 867.302 117.468 866.925 117.418C866.549 117.369 866.204 117.344 865.892 117.344C865.224 117.344 864.628 117.489 864.102 117.781C863.584 118.065 863.172 118.462 862.866 118.974C862.568 119.485 862.419 120.075 862.419 120.742V130H857.88ZM869.586 130V113.636H874.124V130H869.586ZM871.866 111.527C871.191 111.527 870.612 111.303 870.129 110.856C869.653 110.401 869.415 109.858 869.415 109.226C869.415 108.601 869.653 108.065 870.129 107.617C870.612 107.163 871.191 106.935 871.866 106.935C872.54 106.935 873.116 107.163 873.591 107.617C874.074 108.065 874.316 108.601 874.316 109.226C874.316 109.858 874.074 110.401 873.591 110.856C873.116 111.303 872.54 111.527 871.866 111.527ZM884.583 130.32C882.907 130.32 881.465 129.964 880.258 129.254C879.058 128.537 878.134 127.543 877.488 126.271C876.849 125 876.529 123.537 876.529 121.882C876.529 120.206 876.852 118.736 877.499 117.472C878.152 116.2 879.079 115.21 880.279 114.499C881.479 113.782 882.907 113.423 884.562 113.423C885.989 113.423 887.239 113.683 888.312 114.201C889.384 114.719 890.233 115.447 890.858 116.385C891.483 117.322 891.827 118.423 891.891 119.688H887.609C887.488 118.871 887.168 118.214 886.65 117.717C886.138 117.212 885.467 116.96 884.636 116.96C883.933 116.96 883.319 117.152 882.793 117.536C882.275 117.912 881.87 118.462 881.579 119.187C881.288 119.911 881.142 120.788 881.142 121.818C881.142 122.862 881.284 123.75 881.568 124.482C881.859 125.213 882.268 125.771 882.793 126.154C883.319 126.538 883.933 126.729 884.636 126.729C885.155 126.729 885.62 126.623 886.032 126.41C886.451 126.197 886.795 125.888 887.065 125.483C887.342 125.071 887.523 124.577 887.609 124.002H891.891C891.82 125.252 891.479 126.353 890.869 127.305C890.265 128.249 889.43 128.988 888.365 129.521C887.3 130.053 886.039 130.32 884.583 130.32ZM907.842 118.303L903.687 118.558C903.616 118.203 903.464 117.884 903.229 117.599C902.995 117.308 902.686 117.077 902.302 116.907C901.926 116.729 901.475 116.641 900.949 116.641C900.246 116.641 899.653 116.79 899.17 117.088C898.687 117.379 898.446 117.77 898.446 118.26C898.446 118.651 898.602 118.981 898.915 119.251C899.227 119.521 899.763 119.737 900.523 119.901L903.485 120.497C905.076 120.824 906.262 121.349 907.043 122.074C907.824 122.798 908.215 123.75 908.215 124.929C908.215 126.001 907.899 126.942 907.267 127.752C906.642 128.562 905.782 129.194 904.689 129.648C903.602 130.096 902.349 130.32 900.928 130.32C898.762 130.32 897.036 129.869 895.751 128.967C894.472 128.058 893.723 126.822 893.503 125.259L897.966 125.025C898.101 125.685 898.428 126.19 898.947 126.538C899.465 126.879 900.129 127.049 900.939 127.049C901.734 127.049 902.373 126.896 902.856 126.591C903.346 126.278 903.595 125.877 903.602 125.387C903.595 124.975 903.421 124.638 903.08 124.375C902.739 124.105 902.214 123.899 901.503 123.757L898.67 123.192C897.072 122.873 895.882 122.319 895.101 121.531C894.326 120.742 893.939 119.737 893.939 118.516C893.939 117.464 894.224 116.559 894.792 115.799C895.367 115.039 896.173 114.453 897.21 114.041C898.254 113.629 899.476 113.423 900.875 113.423C902.942 113.423 904.568 113.86 905.754 114.734C906.947 115.607 907.643 116.797 907.842 118.303ZM817.635 154H815.522C815.397 153.392 815.178 152.858 814.866 152.398C814.559 151.938 814.184 151.551 813.741 151.239C813.303 150.92 812.817 150.682 812.283 150.523C811.749 150.364 811.192 150.284 810.613 150.284C809.556 150.284 808.599 150.551 807.741 151.085C806.888 151.619 806.209 152.406 805.704 153.446C805.204 154.486 804.954 155.761 804.954 157.273C804.954 158.784 805.204 160.06 805.704 161.099C806.209 162.139 806.888 162.926 807.741 163.46C808.599 163.994 809.556 164.261 810.613 164.261C811.192 164.261 811.749 164.182 812.283 164.023C812.817 163.864 813.303 163.628 813.741 163.315C814.184 162.997 814.559 162.608 814.866 162.148C815.178 161.682 815.397 161.148 815.522 160.545H817.635C817.476 161.437 817.187 162.236 816.766 162.94C816.346 163.645 815.823 164.244 815.198 164.739C814.573 165.227 813.871 165.599 813.093 165.855C812.32 166.111 811.493 166.239 810.613 166.239C809.124 166.239 807.8 165.875 806.641 165.148C805.482 164.42 804.57 163.386 803.905 162.045C803.241 160.705 802.908 159.114 802.908 157.273C802.908 155.432 803.241 153.841 803.905 152.5C804.57 151.159 805.482 150.125 806.641 149.398C807.8 148.67 809.124 148.307 810.613 148.307C811.493 148.307 812.32 148.435 813.093 148.69C813.871 148.946 814.573 149.321 815.198 149.815C815.823 150.304 816.346 150.901 816.766 151.605C817.187 152.304 817.476 153.102 817.635 154ZM825.64 166.273C824.459 166.273 823.422 165.991 822.53 165.429C821.643 164.866 820.95 164.08 820.45 163.068C819.956 162.057 819.709 160.875 819.709 159.523C819.709 158.159 819.956 156.969 820.45 155.952C820.95 154.935 821.643 154.145 822.53 153.582C823.422 153.02 824.459 152.739 825.64 152.739C826.822 152.739 827.856 153.02 828.743 153.582C829.635 154.145 830.328 154.935 830.822 155.952C831.322 156.969 831.572 158.159 831.572 159.523C831.572 160.875 831.322 162.057 830.822 163.068C830.328 164.08 829.635 164.866 828.743 165.429C827.856 165.991 826.822 166.273 825.64 166.273ZM825.64 164.466C826.538 164.466 827.277 164.236 827.856 163.776C828.436 163.315 828.865 162.71 829.143 161.96C829.422 161.21 829.561 160.398 829.561 159.523C829.561 158.648 829.422 157.832 829.143 157.077C828.865 156.321 828.436 155.71 827.856 155.244C827.277 154.778 826.538 154.545 825.64 154.545C824.743 154.545 824.004 154.778 823.424 155.244C822.845 155.71 822.416 156.321 822.138 157.077C821.859 157.832 821.72 158.648 821.72 159.523C821.72 160.398 821.859 161.21 822.138 161.96C822.416 162.71 822.845 163.315 823.424 163.776C824.004 164.236 824.743 164.466 825.64 164.466ZM836.198 158.125V166H834.187V152.909H836.13V154.955H836.3C836.607 154.29 837.073 153.756 837.698 153.352C838.323 152.943 839.13 152.739 840.118 152.739C841.005 152.739 841.78 152.92 842.445 153.284C843.11 153.642 843.627 154.188 843.996 154.92C844.365 155.648 844.55 156.568 844.55 157.682V166H842.539V157.818C842.539 156.79 842.272 155.989 841.738 155.415C841.204 154.835 840.471 154.545 839.539 154.545C838.897 154.545 838.323 154.685 837.817 154.963C837.317 155.241 836.922 155.648 836.633 156.182C836.343 156.716 836.198 157.364 836.198 158.125ZM853.463 152.909V154.614H846.679V152.909H853.463ZM848.656 149.773H850.667V162.25C850.667 162.818 850.75 163.244 850.914 163.528C851.085 163.807 851.301 163.994 851.562 164.091C851.829 164.182 852.11 164.227 852.406 164.227C852.628 164.227 852.809 164.216 852.951 164.193C853.093 164.165 853.207 164.142 853.292 164.125L853.701 165.932C853.565 165.983 853.375 166.034 853.13 166.085C852.886 166.142 852.576 166.17 852.201 166.17C851.633 166.17 851.076 166.048 850.531 165.804C849.991 165.56 849.542 165.188 849.184 164.688C848.832 164.188 848.656 163.557 848.656 162.795V149.773ZM859.885 166.307C859.055 166.307 858.302 166.151 857.626 165.838C856.95 165.52 856.413 165.062 856.015 164.466C855.618 163.864 855.419 163.136 855.419 162.284C855.419 161.534 855.566 160.926 855.862 160.46C856.157 159.989 856.552 159.619 857.047 159.352C857.541 159.085 858.086 158.886 858.683 158.756C859.285 158.619 859.89 158.511 860.498 158.432C861.294 158.33 861.939 158.253 862.433 158.202C862.933 158.145 863.297 158.051 863.524 157.92C863.757 157.79 863.873 157.562 863.873 157.239V157.17C863.873 156.33 863.643 155.676 863.183 155.21C862.728 154.744 862.038 154.511 861.112 154.511C860.152 154.511 859.399 154.722 858.853 155.142C858.308 155.562 857.924 156.011 857.703 156.489L855.794 155.807C856.135 155.011 856.589 154.392 857.157 153.949C857.731 153.5 858.356 153.187 859.032 153.011C859.714 152.83 860.385 152.739 861.044 152.739C861.464 152.739 861.947 152.79 862.493 152.892C863.044 152.989 863.575 153.19 864.086 153.497C864.603 153.804 865.032 154.267 865.373 154.886C865.714 155.506 865.885 156.335 865.885 157.375V166H863.873V164.227H863.771C863.635 164.511 863.407 164.815 863.089 165.139C862.771 165.463 862.348 165.739 861.819 165.966C861.291 166.193 860.646 166.307 859.885 166.307ZM860.191 164.5C860.987 164.5 861.657 164.344 862.203 164.031C862.754 163.719 863.169 163.315 863.447 162.821C863.731 162.327 863.873 161.807 863.873 161.261V159.42C863.788 159.523 863.6 159.616 863.311 159.702C863.027 159.781 862.697 159.852 862.322 159.915C861.953 159.972 861.592 160.023 861.24 160.068C860.893 160.108 860.612 160.142 860.396 160.17C859.873 160.239 859.385 160.349 858.93 160.503C858.481 160.651 858.118 160.875 857.839 161.176C857.566 161.472 857.43 161.875 857.43 162.386C857.43 163.085 857.689 163.614 858.206 163.972C858.728 164.324 859.39 164.5 860.191 164.5ZM869.1 166V152.909H871.111V166H869.1ZM870.122 150.727C869.73 150.727 869.392 150.594 869.108 150.327C868.83 150.06 868.691 149.739 868.691 149.364C868.691 148.989 868.83 148.668 869.108 148.401C869.392 148.134 869.73 148 870.122 148C870.515 148 870.85 148.134 871.128 148.401C871.412 148.668 871.554 148.989 871.554 149.364C871.554 149.739 871.412 150.06 871.128 150.327C870.85 150.594 870.515 150.727 870.122 150.727ZM876.35 158.125V166H874.339V152.909H876.282V154.955H876.453C876.76 154.29 877.225 153.756 877.85 153.352C878.475 152.943 879.282 152.739 880.271 152.739C881.157 152.739 881.933 152.92 882.598 153.284C883.262 153.642 883.779 154.188 884.149 154.92C884.518 155.648 884.703 156.568 884.703 157.682V166H882.691V157.818C882.691 156.79 882.424 155.989 881.89 155.415C881.356 154.835 880.623 154.545 879.691 154.545C879.049 154.545 878.475 154.685 877.97 154.963C877.47 155.241 877.075 155.648 876.785 156.182C876.495 156.716 876.35 157.364 876.35 158.125ZM893.411 166.273C892.149 166.273 891.061 165.994 890.147 165.438C889.237 164.875 888.536 164.091 888.041 163.085C887.553 162.074 887.308 160.898 887.308 159.557C887.308 158.216 887.553 157.034 888.041 156.011C888.536 154.983 889.223 154.182 890.104 153.608C890.99 153.028 892.024 152.739 893.206 152.739C893.888 152.739 894.561 152.852 895.226 153.08C895.891 153.307 896.496 153.676 897.041 154.188C897.587 154.693 898.022 155.364 898.345 156.199C898.669 157.034 898.831 158.062 898.831 159.284V160.136H888.74V158.398H896.786C896.786 157.659 896.638 157 896.343 156.42C896.053 155.841 895.638 155.384 895.098 155.048C894.564 154.713 893.933 154.545 893.206 154.545C892.405 154.545 891.712 154.744 891.127 155.142C890.547 155.534 890.101 156.045 889.789 156.676C889.476 157.307 889.32 157.983 889.32 158.705V159.864C889.32 160.852 889.49 161.69 889.831 162.378C890.178 163.06 890.658 163.58 891.272 163.938C891.885 164.29 892.598 164.466 893.411 164.466C893.939 164.466 894.416 164.392 894.843 164.244C895.274 164.091 895.647 163.864 895.959 163.562C896.272 163.256 896.513 162.875 896.683 162.42L898.627 162.966C898.422 163.625 898.078 164.205 897.595 164.705C897.112 165.199 896.516 165.585 895.806 165.864C895.095 166.136 894.297 166.273 893.411 166.273ZM901.435 166V152.909H903.378V154.886H903.514C903.753 154.239 904.185 153.713 904.81 153.31C905.435 152.906 906.139 152.705 906.924 152.705C907.071 152.705 907.256 152.707 907.477 152.713C907.699 152.719 907.867 152.727 907.98 152.739V154.784C907.912 154.767 907.756 154.741 907.512 154.707C907.273 154.668 907.02 154.648 906.753 154.648C906.117 154.648 905.549 154.781 905.049 155.048C904.554 155.31 904.162 155.673 903.872 156.139C903.588 156.599 903.446 157.125 903.446 157.716V166H901.435ZM810.119 202H804.733V184.545H810.358C812.051 184.545 813.5 184.895 814.705 185.594C815.909 186.287 816.833 187.284 817.475 188.585C818.117 189.881 818.438 191.432 818.438 193.239C818.438 195.057 818.114 196.622 817.466 197.935C816.818 199.241 815.875 200.247 814.636 200.952C813.398 201.651 811.892 202 810.119 202ZM806.847 200.125H809.983C811.426 200.125 812.622 199.847 813.571 199.29C814.52 198.733 815.227 197.94 815.693 196.912C816.159 195.884 816.392 194.659 816.392 193.239C816.392 191.83 816.162 190.616 815.702 189.599C815.242 188.577 814.554 187.793 813.639 187.247C812.725 186.696 811.585 186.42 810.222 186.42H806.847V200.125ZM825.107 202.307C824.277 202.307 823.524 202.151 822.848 201.838C822.172 201.52 821.635 201.062 821.237 200.466C820.84 199.864 820.641 199.136 820.641 198.284C820.641 197.534 820.788 196.926 821.084 196.46C821.379 195.989 821.774 195.619 822.269 195.352C822.763 195.085 823.308 194.886 823.905 194.756C824.507 194.619 825.112 194.511 825.72 194.432C826.516 194.33 827.161 194.253 827.655 194.202C828.155 194.145 828.519 194.051 828.746 193.92C828.979 193.79 829.095 193.562 829.095 193.239V193.17C829.095 192.33 828.865 191.676 828.405 191.21C827.95 190.744 827.26 190.511 826.334 190.511C825.374 190.511 824.621 190.722 824.075 191.142C823.53 191.562 823.146 192.011 822.925 192.489L821.016 191.807C821.357 191.011 821.811 190.392 822.379 189.949C822.953 189.5 823.578 189.187 824.254 189.011C824.936 188.83 825.607 188.739 826.266 188.739C826.686 188.739 827.169 188.79 827.715 188.892C828.266 188.989 828.797 189.19 829.308 189.497C829.825 189.804 830.254 190.267 830.595 190.886C830.936 191.506 831.107 192.335 831.107 193.375V202H829.095V200.227H828.993C828.857 200.511 828.629 200.815 828.311 201.139C827.993 201.463 827.57 201.739 827.041 201.966C826.513 202.193 825.868 202.307 825.107 202.307ZM825.413 200.5C826.209 200.5 826.879 200.344 827.425 200.031C827.976 199.719 828.391 199.315 828.669 198.821C828.953 198.327 829.095 197.807 829.095 197.261V195.42C829.01 195.523 828.823 195.616 828.533 195.702C828.249 195.781 827.919 195.852 827.544 195.915C827.175 195.972 826.814 196.023 826.462 196.068C826.115 196.108 825.834 196.142 825.618 196.17C825.095 196.239 824.607 196.349 824.152 196.503C823.703 196.651 823.34 196.875 823.061 197.176C822.788 197.472 822.652 197.875 822.652 198.386C822.652 199.085 822.911 199.614 823.428 199.972C823.95 200.324 824.612 200.5 825.413 200.5ZM840.015 188.909V190.614H833.231V188.909H840.015ZM835.208 185.773H837.22V198.25C837.22 198.818 837.302 199.244 837.467 199.528C837.637 199.807 837.853 199.994 838.114 200.091C838.381 200.182 838.663 200.227 838.958 200.227C839.18 200.227 839.362 200.216 839.504 200.193C839.646 200.165 839.759 200.142 839.845 200.125L840.254 201.932C840.117 201.983 839.927 202.034 839.683 202.085C839.438 202.142 839.129 202.17 838.754 202.17C838.185 202.17 837.629 202.048 837.083 201.804C836.543 201.56 836.095 201.188 835.737 200.688C835.384 200.188 835.208 199.557 835.208 198.795V185.773ZM846.437 202.307C845.607 202.307 844.854 202.151 844.178 201.838C843.502 201.52 842.965 201.062 842.567 200.466C842.17 199.864 841.971 199.136 841.971 198.284C841.971 197.534 842.119 196.926 842.414 196.46C842.71 195.989 843.104 195.619 843.599 195.352C844.093 195.085 844.639 194.886 845.235 194.756C845.837 194.619 846.442 194.511 847.05 194.432C847.846 194.33 848.491 194.253 848.985 194.202C849.485 194.145 849.849 194.051 850.076 193.92C850.309 193.79 850.425 193.562 850.425 193.239V193.17C850.425 192.33 850.195 191.676 849.735 191.21C849.281 190.744 848.59 190.511 847.664 190.511C846.704 190.511 845.951 190.722 845.406 191.142C844.86 191.562 844.477 192.011 844.255 192.489L842.346 191.807C842.687 191.011 843.141 190.392 843.71 189.949C844.283 189.5 844.908 189.187 845.585 189.011C846.266 188.83 846.937 188.739 847.596 188.739C848.016 188.739 848.499 188.79 849.045 188.892C849.596 188.989 850.127 189.19 850.639 189.497C851.156 189.804 851.585 190.267 851.925 190.886C852.266 191.506 852.437 192.335 852.437 193.375V202H850.425V200.227H850.323C850.187 200.511 849.96 200.815 849.641 201.139C849.323 201.463 848.9 201.739 848.371 201.966C847.843 202.193 847.198 202.307 846.437 202.307ZM846.744 200.5C847.539 200.5 848.21 200.344 848.755 200.031C849.306 199.719 849.721 199.315 849.999 198.821C850.283 198.327 850.425 197.807 850.425 197.261V195.42C850.34 195.523 850.153 195.616 849.863 195.702C849.579 195.781 849.249 195.852 848.874 195.915C848.505 195.972 848.144 196.023 847.792 196.068C847.445 196.108 847.164 196.142 846.948 196.17C846.425 196.239 845.937 196.349 845.482 196.503C845.033 196.651 844.67 196.875 844.391 197.176C844.119 197.472 843.982 197.875 843.982 198.386C843.982 199.085 844.241 199.614 844.758 199.972C845.281 200.324 845.942 200.5 846.744 200.5ZM855.925 202V184.545H857.936V190.989H858.107C858.254 190.761 858.459 190.472 858.72 190.119C858.987 189.761 859.368 189.443 859.862 189.165C860.362 188.881 861.038 188.739 861.891 188.739C862.993 188.739 863.964 189.014 864.805 189.565C865.646 190.116 866.303 190.898 866.774 191.909C867.246 192.92 867.482 194.114 867.482 195.489C867.482 196.875 867.246 198.077 866.774 199.094C866.303 200.105 865.649 200.889 864.814 201.446C863.979 201.997 863.016 202.273 861.925 202.273C861.084 202.273 860.41 202.134 859.905 201.855C859.399 201.571 859.01 201.25 858.737 200.892C858.464 200.528 858.254 200.227 858.107 199.989H857.868V202H855.925ZM857.902 195.455C857.902 196.443 858.047 197.315 858.337 198.071C858.626 198.821 859.05 199.409 859.607 199.835C860.163 200.256 860.845 200.466 861.652 200.466C862.493 200.466 863.195 200.244 863.757 199.801C864.325 199.352 864.751 198.75 865.035 197.994C865.325 197.233 865.47 196.386 865.47 195.455C865.47 194.534 865.328 193.705 865.044 192.966C864.766 192.222 864.342 191.634 863.774 191.202C863.212 190.764 862.504 190.545 861.652 190.545C860.834 190.545 860.146 190.753 859.589 191.168C859.033 191.577 858.612 192.151 858.328 192.889C858.044 193.622 857.902 194.477 857.902 195.455ZM873.955 202.307C873.125 202.307 872.372 202.151 871.696 201.838C871.02 201.52 870.483 201.062 870.085 200.466C869.687 199.864 869.489 199.136 869.489 198.284C869.489 197.534 869.636 196.926 869.932 196.46C870.227 195.989 870.622 195.619 871.116 195.352C871.611 195.085 872.156 194.886 872.753 194.756C873.355 194.619 873.96 194.511 874.568 194.432C875.364 194.33 876.008 194.253 876.503 194.202C877.003 194.145 877.366 194.051 877.594 193.92C877.827 193.79 877.943 193.562 877.943 193.239V193.17C877.943 192.33 877.713 191.676 877.253 191.21C876.798 190.744 876.108 190.511 875.182 190.511C874.222 190.511 873.469 190.722 872.923 191.142C872.378 191.562 871.994 192.011 871.773 192.489L869.864 191.807C870.205 191.011 870.659 190.392 871.227 189.949C871.801 189.5 872.426 189.187 873.102 189.011C873.784 188.83 874.455 188.739 875.114 188.739C875.534 188.739 876.017 188.79 876.562 188.892C877.114 188.989 877.645 189.19 878.156 189.497C878.673 189.804 879.102 190.267 879.443 190.886C879.784 191.506 879.955 192.335 879.955 193.375V202H877.943V200.227H877.841C877.705 200.511 877.477 200.815 877.159 201.139C876.841 201.463 876.418 201.739 875.889 201.966C875.361 202.193 874.716 202.307 873.955 202.307ZM874.261 200.5C875.057 200.5 875.727 200.344 876.273 200.031C876.824 199.719 877.239 199.315 877.517 198.821C877.801 198.327 877.943 197.807 877.943 197.261V195.42C877.858 195.523 877.67 195.616 877.381 195.702C877.097 195.781 876.767 195.852 876.392 195.915C876.023 195.972 875.662 196.023 875.31 196.068C874.963 196.108 874.682 196.142 874.466 196.17C873.943 196.239 873.455 196.349 873 196.503C872.551 196.651 872.187 196.875 871.909 197.176C871.636 197.472 871.5 197.875 871.5 198.386C871.5 199.085 871.758 199.614 872.276 199.972C872.798 200.324 873.46 200.5 874.261 200.5ZM892.442 191.841L890.636 192.352C890.522 192.051 890.354 191.759 890.133 191.474C889.917 191.185 889.621 190.946 889.246 190.759C888.871 190.571 888.391 190.477 887.806 190.477C887.005 190.477 886.337 190.662 885.803 191.031C885.275 191.395 885.011 191.858 885.011 192.42C885.011 192.92 885.192 193.315 885.556 193.605C885.92 193.895 886.488 194.136 887.261 194.33L889.204 194.807C890.374 195.091 891.246 195.526 891.82 196.111C892.394 196.69 892.681 197.437 892.681 198.352C892.681 199.102 892.465 199.773 892.033 200.364C891.607 200.955 891.011 201.42 890.244 201.761C889.476 202.102 888.584 202.273 887.567 202.273C886.232 202.273 885.127 201.983 884.252 201.403C883.377 200.824 882.823 199.977 882.59 198.864L884.499 198.386C884.681 199.091 885.025 199.619 885.53 199.972C886.042 200.324 886.709 200.5 887.533 200.5C888.471 200.5 889.215 200.301 889.766 199.903C890.323 199.5 890.601 199.017 890.601 198.455C890.601 198 890.442 197.619 890.124 197.312C889.806 197 889.317 196.767 888.658 196.614L886.476 196.102C885.278 195.818 884.397 195.378 883.834 194.781C883.278 194.179 882.999 193.426 882.999 192.523C882.999 191.784 883.207 191.131 883.621 190.562C884.042 189.994 884.613 189.548 885.334 189.224C886.062 188.901 886.886 188.739 887.806 188.739C889.101 188.739 890.119 189.023 890.857 189.591C891.601 190.159 892.13 190.909 892.442 191.841ZM900.741 202.273C899.48 202.273 898.392 201.994 897.477 201.438C896.568 200.875 895.866 200.091 895.372 199.085C894.883 198.074 894.639 196.898 894.639 195.557C894.639 194.216 894.883 193.034 895.372 192.011C895.866 190.983 896.554 190.182 897.435 189.608C898.321 189.028 899.355 188.739 900.537 188.739C901.219 188.739 901.892 188.852 902.557 189.08C903.221 189.307 903.827 189.676 904.372 190.188C904.917 190.693 905.352 191.364 905.676 192.199C906 193.034 906.162 194.062 906.162 195.284V196.136H896.071V194.398H904.116C904.116 193.659 903.969 193 903.673 192.42C903.383 191.841 902.969 191.384 902.429 191.048C901.895 190.713 901.264 190.545 900.537 190.545C899.736 190.545 899.042 190.744 898.457 191.142C897.878 191.534 897.432 192.045 897.119 192.676C896.807 193.307 896.65 193.983 896.65 194.705V195.864C896.65 196.852 896.821 197.69 897.162 198.378C897.508 199.06 897.989 199.58 898.602 199.938C899.216 200.29 899.929 200.466 900.741 200.466C901.27 200.466 901.747 200.392 902.173 200.244C902.605 200.091 902.977 199.864 903.29 199.562C903.602 199.256 903.844 198.875 904.014 198.42L905.957 198.966C905.753 199.625 905.409 200.205 904.926 200.705C904.443 201.199 903.846 201.585 903.136 201.864C902.426 202.136 901.628 202.273 900.741 202.273ZM831.126 238V220.545H833.239V228.318H842.546V220.545H844.66V238H842.546V230.193H833.239V238H831.126ZM853.481 238.273C852.299 238.273 851.262 237.991 850.37 237.429C849.484 236.866 848.79 236.08 848.29 235.068C847.796 234.057 847.549 232.875 847.549 231.523C847.549 230.159 847.796 228.969 848.29 227.952C848.79 226.935 849.484 226.145 850.37 225.582C851.262 225.02 852.299 224.739 853.481 224.739C854.663 224.739 855.697 225.02 856.583 225.582C857.475 226.145 858.168 226.935 858.663 227.952C859.163 228.969 859.413 230.159 859.413 231.523C859.413 232.875 859.163 234.057 858.663 235.068C858.168 236.08 857.475 236.866 856.583 237.429C855.697 237.991 854.663 238.273 853.481 238.273ZM853.481 236.466C854.379 236.466 855.117 236.236 855.697 235.776C856.276 235.315 856.705 234.71 856.984 233.96C857.262 233.21 857.401 232.398 857.401 231.523C857.401 230.648 857.262 229.832 856.984 229.077C856.705 228.321 856.276 227.71 855.697 227.244C855.117 226.778 854.379 226.545 853.481 226.545C852.583 226.545 851.844 226.778 851.265 227.244C850.685 227.71 850.256 228.321 849.978 229.077C849.7 229.832 849.56 230.648 849.56 231.523C849.56 232.398 849.7 233.21 849.978 233.96C850.256 234.71 850.685 235.315 851.265 235.776C851.844 236.236 852.583 236.466 853.481 236.466ZM871.3 227.841L869.493 228.352C869.379 228.051 869.212 227.759 868.99 227.474C868.774 227.185 868.479 226.946 868.104 226.759C867.729 226.571 867.249 226.477 866.663 226.477C865.862 226.477 865.195 226.662 864.66 227.031C864.132 227.395 863.868 227.858 863.868 228.42C863.868 228.92 864.05 229.315 864.413 229.605C864.777 229.895 865.345 230.136 866.118 230.33L868.061 230.807C869.232 231.091 870.104 231.526 870.678 232.111C871.251 232.69 871.538 233.437 871.538 234.352C871.538 235.102 871.322 235.773 870.891 236.364C870.464 236.955 869.868 237.42 869.101 237.761C868.334 238.102 867.442 238.273 866.425 238.273C865.089 238.273 863.984 237.983 863.109 237.403C862.234 236.824 861.68 235.977 861.447 234.864L863.357 234.386C863.538 235.091 863.882 235.619 864.388 235.972C864.899 236.324 865.567 236.5 866.391 236.5C867.328 236.5 868.072 236.301 868.624 235.903C869.18 235.5 869.459 235.017 869.459 234.455C869.459 234 869.3 233.619 868.982 233.312C868.663 233 868.175 232.767 867.516 232.614L865.334 232.102C864.135 231.818 863.254 231.378 862.692 230.781C862.135 230.179 861.857 229.426 861.857 228.523C861.857 227.784 862.064 227.131 862.479 226.562C862.899 225.994 863.47 225.548 864.192 225.224C864.919 224.901 865.743 224.739 866.663 224.739C867.959 224.739 868.976 225.023 869.714 225.591C870.459 226.159 870.987 226.909 871.3 227.841ZM879.803 224.909V226.614H873.019V224.909H879.803ZM874.996 221.773H877.008V234.25C877.008 234.818 877.09 235.244 877.255 235.528C877.425 235.807 877.641 235.994 877.903 236.091C878.17 236.182 878.451 236.227 878.746 236.227C878.968 236.227 879.15 236.216 879.292 236.193C879.434 236.165 879.548 236.142 879.633 236.125L880.042 237.932C879.905 237.983 879.715 238.034 879.471 238.085C879.227 238.142 878.917 238.17 878.542 238.17C877.974 238.17 877.417 238.048 876.871 237.804C876.332 237.56 875.883 237.188 875.525 236.688C875.173 236.188 874.996 235.557 874.996 234.795V221.773ZM824.264 256.545V274H822.218L812.707 260.295H812.537V274H810.423V256.545H812.468L822.014 270.284H822.184V256.545H824.264ZM833.253 274.273C831.992 274.273 830.904 273.994 829.989 273.438C829.08 272.875 828.378 272.091 827.884 271.085C827.395 270.074 827.151 268.898 827.151 267.557C827.151 266.216 827.395 265.034 827.884 264.011C828.378 262.983 829.066 262.182 829.946 261.608C830.833 261.028 831.867 260.739 833.049 260.739C833.731 260.739 834.404 260.852 835.069 261.08C835.733 261.307 836.338 261.676 836.884 262.188C837.429 262.693 837.864 263.364 838.188 264.199C838.512 265.034 838.674 266.062 838.674 267.284V268.136H828.583V266.398H836.628C836.628 265.659 836.481 265 836.185 264.42C835.895 263.841 835.481 263.384 834.941 263.048C834.407 262.713 833.776 262.545 833.049 262.545C832.248 262.545 831.554 262.744 830.969 263.142C830.39 263.534 829.944 264.045 829.631 264.676C829.319 265.307 829.162 265.983 829.162 266.705V267.864C829.162 268.852 829.333 269.69 829.674 270.378C830.02 271.06 830.5 271.58 831.114 271.938C831.728 272.29 832.441 272.466 833.253 272.466C833.782 272.466 834.259 272.392 834.685 272.244C835.117 272.091 835.489 271.864 835.802 271.562C836.114 271.256 836.356 270.875 836.526 270.42L838.469 270.966C838.265 271.625 837.921 272.205 837.438 272.705C836.955 273.199 836.358 273.585 835.648 273.864C834.938 274.136 834.14 274.273 833.253 274.273ZM846.971 260.909V262.614H840.186V260.909H846.971ZM842.164 257.773H844.175V270.25C844.175 270.818 844.257 271.244 844.422 271.528C844.593 271.807 844.809 271.994 845.07 272.091C845.337 272.182 845.618 272.227 845.914 272.227C846.135 272.227 846.317 272.216 846.459 272.193C846.601 272.165 846.715 272.142 846.8 272.125L847.209 273.932C847.073 273.983 846.882 274.034 846.638 274.085C846.394 274.142 846.084 274.17 845.709 274.17C845.141 274.17 844.584 274.048 844.039 273.804C843.499 273.56 843.05 273.188 842.692 272.688C842.34 272.188 842.164 271.557 842.164 270.795V257.773ZM852.506 274L848.517 260.909H850.631L853.461 270.932H853.597L856.392 260.909H858.54L861.301 270.898H861.438L864.267 260.909H866.381L862.392 274H860.415L857.551 263.943H857.347L854.483 274H852.506ZM873.457 274.273C872.275 274.273 871.238 273.991 870.346 273.429C869.46 272.866 868.767 272.08 868.267 271.068C867.772 270.057 867.525 268.875 867.525 267.523C867.525 266.159 867.772 264.969 868.267 263.952C868.767 262.935 869.46 262.145 870.346 261.582C871.238 261.02 872.275 260.739 873.457 260.739C874.639 260.739 875.673 261.02 876.559 261.582C877.451 262.145 878.144 262.935 878.639 263.952C879.139 264.969 879.389 266.159 879.389 267.523C879.389 268.875 879.139 270.057 878.639 271.068C878.144 272.08 877.451 272.866 876.559 273.429C875.673 273.991 874.639 274.273 873.457 274.273ZM873.457 272.466C874.355 272.466 875.093 272.236 875.673 271.776C876.252 271.315 876.681 270.71 876.96 269.96C877.238 269.21 877.377 268.398 877.377 267.523C877.377 266.648 877.238 265.832 876.96 265.077C876.681 264.321 876.252 263.71 875.673 263.244C875.093 262.778 874.355 262.545 873.457 262.545C872.559 262.545 871.821 262.778 871.241 263.244C870.662 263.71 870.233 264.321 869.954 265.077C869.676 265.832 869.537 266.648 869.537 267.523C869.537 268.398 869.676 269.21 869.954 269.96C870.233 270.71 870.662 271.315 871.241 271.776C871.821 272.236 872.559 272.466 873.457 272.466ZM882.003 274V260.909H883.946V262.886H884.083C884.321 262.239 884.753 261.713 885.378 261.31C886.003 260.906 886.708 260.705 887.492 260.705C887.639 260.705 887.824 260.707 888.046 260.713C888.267 260.719 888.435 260.727 888.549 260.739V262.784C888.48 262.767 888.324 262.741 888.08 262.707C887.841 262.668 887.588 262.648 887.321 262.648C886.685 262.648 886.117 262.781 885.617 263.048C885.122 263.31 884.73 263.673 884.441 264.139C884.157 264.599 884.014 265.125 884.014 265.716V274H882.003ZM892.352 269.227L892.318 266.739H892.727L898.454 260.909H900.943L894.84 267.08H894.67L892.352 269.227ZM890.477 274V256.545H892.488V274H890.477ZM898.795 274L893.681 267.523L895.113 266.125L901.352 274H898.795ZM823.402 296.909C823.3 296.045 822.885 295.375 822.158 294.898C821.43 294.42 820.538 294.182 819.482 294.182C818.709 294.182 818.033 294.307 817.453 294.557C816.879 294.807 816.43 295.151 816.107 295.588C815.788 296.026 815.629 296.523 815.629 297.08C815.629 297.545 815.74 297.946 815.962 298.281C816.189 298.611 816.479 298.886 816.831 299.108C817.183 299.324 817.553 299.503 817.939 299.645C818.325 299.781 818.68 299.892 819.004 299.977L820.777 300.455C821.232 300.574 821.737 300.739 822.294 300.949C822.857 301.159 823.394 301.446 823.905 301.81C824.422 302.168 824.848 302.628 825.183 303.19C825.519 303.753 825.686 304.443 825.686 305.261C825.686 306.205 825.439 307.057 824.945 307.818C824.456 308.58 823.74 309.185 822.797 309.634C821.859 310.082 820.72 310.307 819.379 310.307C818.129 310.307 817.047 310.105 816.132 309.702C815.223 309.298 814.507 308.736 813.984 308.014C813.467 307.293 813.175 306.455 813.107 305.5H815.288C815.345 306.159 815.567 306.705 815.953 307.136C816.345 307.562 816.84 307.881 817.436 308.091C818.038 308.295 818.686 308.398 819.379 308.398C820.186 308.398 820.911 308.267 821.553 308.006C822.195 307.739 822.703 307.369 823.078 306.898C823.453 306.42 823.641 305.864 823.641 305.227C823.641 304.648 823.479 304.176 823.155 303.812C822.831 303.449 822.405 303.153 821.877 302.926C821.348 302.699 820.777 302.5 820.163 302.33L818.016 301.716C816.652 301.324 815.573 300.764 814.777 300.037C813.982 299.31 813.584 298.358 813.584 297.182C813.584 296.205 813.848 295.352 814.377 294.625C814.911 293.892 815.627 293.324 816.524 292.92C817.428 292.511 818.436 292.307 819.55 292.307C820.675 292.307 821.675 292.509 822.55 292.912C823.425 293.31 824.118 293.855 824.629 294.548C825.146 295.241 825.419 296.028 825.448 296.909H823.402ZM834.126 296.909V298.614H827.342V296.909H834.126ZM829.319 293.773H831.33V306.25C831.33 306.818 831.413 307.244 831.577 307.528C831.748 307.807 831.964 307.994 832.225 308.091C832.492 308.182 832.774 308.227 833.069 308.227C833.291 308.227 833.472 308.216 833.614 308.193C833.756 308.165 833.87 308.142 833.955 308.125L834.364 309.932C834.228 309.983 834.038 310.034 833.793 310.085C833.549 310.142 833.239 310.17 832.864 310.17C832.296 310.17 831.739 310.048 831.194 309.804C830.654 309.56 830.205 309.188 829.847 308.688C829.495 308.188 829.319 307.557 829.319 306.795V293.773ZM841.873 310.273C840.691 310.273 839.654 309.991 838.762 309.429C837.876 308.866 837.183 308.08 836.683 307.068C836.188 306.057 835.941 304.875 835.941 303.523C835.941 302.159 836.188 300.969 836.683 299.952C837.183 298.935 837.876 298.145 838.762 297.582C839.654 297.02 840.691 296.739 841.873 296.739C843.055 296.739 844.089 297.02 844.975 297.582C845.867 298.145 846.56 298.935 847.055 299.952C847.555 300.969 847.805 302.159 847.805 303.523C847.805 304.875 847.555 306.057 847.055 307.068C846.56 308.08 845.867 308.866 844.975 309.429C844.089 309.991 843.055 310.273 841.873 310.273ZM841.873 308.466C842.771 308.466 843.509 308.236 844.089 307.776C844.668 307.315 845.097 306.71 845.376 305.96C845.654 305.21 845.793 304.398 845.793 303.523C845.793 302.648 845.654 301.832 845.376 301.077C845.097 300.321 844.668 299.71 844.089 299.244C843.509 298.778 842.771 298.545 841.873 298.545C840.975 298.545 840.237 298.778 839.657 299.244C839.077 299.71 838.648 300.321 838.37 301.077C838.092 301.832 837.952 302.648 837.952 303.523C837.952 304.398 838.092 305.21 838.37 305.96C838.648 306.71 839.077 307.315 839.657 307.776C840.237 308.236 840.975 308.466 841.873 308.466ZM850.419 310V296.909H852.362V298.886H852.499C852.737 298.239 853.169 297.713 853.794 297.31C854.419 296.906 855.124 296.705 855.908 296.705C856.055 296.705 856.24 296.707 856.462 296.713C856.683 296.719 856.851 296.727 856.964 296.739V298.784C856.896 298.767 856.74 298.741 856.496 298.707C856.257 298.668 856.004 298.648 855.737 298.648C855.101 298.648 854.533 298.781 854.033 299.048C853.538 299.31 853.146 299.673 852.857 300.139C852.572 300.599 852.43 301.125 852.43 301.716V310H850.419ZM862.745 310.307C861.915 310.307 861.163 310.151 860.486 309.838C859.81 309.52 859.273 309.062 858.876 308.466C858.478 307.864 858.279 307.136 858.279 306.284C858.279 305.534 858.427 304.926 858.722 304.46C859.018 303.989 859.413 303.619 859.907 303.352C860.401 303.085 860.947 302.886 861.543 302.756C862.146 302.619 862.751 302.511 863.359 302.432C864.154 302.33 864.799 302.253 865.293 302.202C865.793 302.145 866.157 302.051 866.384 301.92C866.617 301.79 866.734 301.562 866.734 301.239V301.17C866.734 300.33 866.504 299.676 866.043 299.21C865.589 298.744 864.898 298.511 863.972 298.511C863.012 298.511 862.259 298.722 861.714 299.142C861.168 299.562 860.785 300.011 860.563 300.489L858.654 299.807C858.995 299.011 859.45 298.392 860.018 297.949C860.592 297.5 861.217 297.187 861.893 297.011C862.575 296.83 863.245 296.739 863.904 296.739C864.325 296.739 864.807 296.79 865.353 296.892C865.904 296.989 866.435 297.19 866.947 297.497C867.464 297.804 867.893 298.267 868.234 298.886C868.575 299.506 868.745 300.335 868.745 301.375V310H866.734V308.227H866.631C866.495 308.511 866.268 308.815 865.95 309.139C865.631 309.463 865.208 309.739 864.68 309.966C864.151 310.193 863.506 310.307 862.745 310.307ZM863.052 308.5C863.847 308.5 864.518 308.344 865.063 308.031C865.614 307.719 866.029 307.315 866.307 306.821C866.592 306.327 866.734 305.807 866.734 305.261V303.42C866.648 303.523 866.461 303.616 866.171 303.702C865.887 303.781 865.557 303.852 865.182 303.915C864.813 303.972 864.452 304.023 864.1 304.068C863.754 304.108 863.472 304.142 863.256 304.17C862.734 304.239 862.245 304.349 861.79 304.503C861.342 304.651 860.978 304.875 860.7 305.176C860.427 305.472 860.29 305.875 860.29 306.386C860.29 307.085 860.549 307.614 861.066 307.972C861.589 308.324 862.251 308.5 863.052 308.5ZM877.244 315.182C876.273 315.182 875.437 315.057 874.739 314.807C874.04 314.562 873.457 314.239 872.991 313.835C872.531 313.438 872.165 313.011 871.892 312.557L873.494 311.432C873.676 311.67 873.906 311.943 874.185 312.25C874.463 312.562 874.844 312.832 875.327 313.06C875.815 313.293 876.454 313.409 877.244 313.409C878.301 313.409 879.173 313.153 879.861 312.642C880.548 312.131 880.892 311.33 880.892 310.239V307.58H880.722C880.574 307.818 880.364 308.114 880.091 308.466C879.824 308.812 879.437 309.122 878.932 309.395C878.432 309.662 877.756 309.795 876.903 309.795C875.847 309.795 874.898 309.545 874.057 309.045C873.222 308.545 872.56 307.818 872.071 306.864C871.588 305.909 871.347 304.75 871.347 303.386C871.347 302.045 871.582 300.878 872.054 299.884C872.525 298.884 873.182 298.111 874.023 297.565C874.864 297.014 875.835 296.739 876.937 296.739C877.79 296.739 878.466 296.881 878.966 297.165C879.472 297.443 879.858 297.761 880.125 298.119C880.398 298.472 880.608 298.761 880.756 298.989H880.96V296.909H882.903V310.375C882.903 311.5 882.648 312.415 882.136 313.119C881.631 313.83 880.949 314.349 880.091 314.679C879.239 315.014 878.29 315.182 877.244 315.182ZM877.176 307.989C877.983 307.989 878.665 307.804 879.222 307.435C879.778 307.065 880.202 306.534 880.491 305.841C880.781 305.148 880.926 304.318 880.926 303.352C880.926 302.409 880.784 301.577 880.5 300.855C880.216 300.134 879.795 299.568 879.239 299.159C878.682 298.75 877.994 298.545 877.176 298.545C876.324 298.545 875.614 298.761 875.045 299.193C874.483 299.625 874.06 300.205 873.775 300.932C873.497 301.659 873.358 302.466 873.358 303.352C873.358 304.261 873.5 305.065 873.784 305.764C874.074 306.457 874.5 307.003 875.062 307.401C875.631 307.793 876.335 307.989 877.176 307.989ZM891.618 310.273C890.356 310.273 889.268 309.994 888.354 309.438C887.444 308.875 886.743 308.091 886.248 307.085C885.76 306.074 885.516 304.898 885.516 303.557C885.516 302.216 885.76 301.034 886.248 300.011C886.743 298.983 887.43 298.182 888.311 297.608C889.197 297.028 890.231 296.739 891.413 296.739C892.095 296.739 892.768 296.852 893.433 297.08C894.098 297.307 894.703 297.676 895.248 298.188C895.794 298.693 896.229 299.364 896.552 300.199C896.876 301.034 897.038 302.062 897.038 303.284V304.136H886.947V302.398H894.993C894.993 301.659 894.845 301 894.55 300.42C894.26 299.841 893.845 299.384 893.305 299.048C892.771 298.713 892.141 298.545 891.413 298.545C890.612 298.545 889.919 298.744 889.334 299.142C888.754 299.534 888.308 300.045 887.996 300.676C887.683 301.307 887.527 301.983 887.527 302.705V303.864C887.527 304.852 887.697 305.69 888.038 306.378C888.385 307.06 888.865 307.58 889.479 307.938C890.092 308.29 890.805 308.466 891.618 308.466C892.146 308.466 892.623 308.392 893.05 308.244C893.481 308.091 893.854 307.864 894.166 307.562C894.479 307.256 894.72 306.875 894.891 306.42L896.834 306.966C896.629 307.625 896.285 308.205 895.802 308.705C895.319 309.199 894.723 309.585 894.013 309.864C893.302 310.136 892.504 310.273 891.618 310.273Z" fill="black"/> +<path d="M498.84 42H491.106V20.1818H498.904C501.099 20.1818 502.988 20.6186 504.572 21.4922C506.156 22.3587 507.374 23.6051 508.226 25.2315C509.085 26.858 509.515 28.804 509.515 31.0696C509.515 33.3423 509.085 35.2955 508.226 36.929C507.374 38.5625 506.148 39.8161 504.55 40.6896C502.959 41.5632 501.056 42 498.84 42ZM495.719 38.0476H498.648C500.012 38.0476 501.159 37.8061 502.089 37.3232C503.027 36.8331 503.73 36.0767 504.199 35.054C504.675 34.0241 504.913 32.696 504.913 31.0696C504.913 29.4574 504.675 28.1399 504.199 27.1172C503.73 26.0945 503.031 25.3416 502.1 24.8587C501.17 24.3757 500.023 24.1342 498.659 24.1342H495.719V38.0476ZM516.943 42.3089C515.899 42.3089 514.969 42.1278 514.152 41.7656C513.335 41.3963 512.689 40.853 512.213 40.1357C511.744 39.4112 511.51 38.5092 511.51 37.4297C511.51 36.5206 511.677 35.7571 512.01 35.1392C512.344 34.5213 512.799 34.0241 513.374 33.6477C513.949 33.2713 514.603 32.9872 515.334 32.7955C516.073 32.6037 516.847 32.4688 517.657 32.3906C518.608 32.2912 519.375 32.1989 519.958 32.1136C520.54 32.0213 520.963 31.8864 521.226 31.7088C521.488 31.5312 521.62 31.2685 521.62 30.9205V30.8565C521.62 30.1818 521.407 29.6598 520.981 29.2905C520.562 28.9212 519.965 28.7365 519.191 28.7365C518.374 28.7365 517.724 28.9176 517.241 29.2798C516.758 29.6349 516.439 30.0824 516.282 30.6222L512.085 30.2812C512.298 29.2869 512.717 28.4276 513.342 27.7031C513.967 26.9716 514.773 26.4105 515.76 26.0199C516.755 25.6222 517.905 25.4233 519.212 25.4233C520.121 25.4233 520.991 25.5298 521.822 25.7429C522.66 25.956 523.402 26.2862 524.049 26.7337C524.702 27.1811 525.217 27.7564 525.594 28.4595C525.97 29.1555 526.158 29.9901 526.158 30.9631V42H521.854V39.7308H521.726C521.464 40.2422 521.112 40.6932 520.672 41.0838C520.231 41.4673 519.702 41.7692 519.084 41.9893C518.466 42.2024 517.753 42.3089 516.943 42.3089ZM518.243 39.1768C518.91 39.1768 519.5 39.0455 520.011 38.7827C520.522 38.5128 520.924 38.1506 521.215 37.696C521.506 37.2415 521.652 36.7266 521.652 36.1513V34.4148C521.51 34.5071 521.314 34.5923 521.066 34.6705C520.824 34.7415 520.551 34.8089 520.245 34.8729C519.94 34.9297 519.635 34.983 519.329 35.0327C519.024 35.0753 518.747 35.1143 518.498 35.1499C517.966 35.228 517.5 35.3523 517.103 35.5227C516.705 35.6932 516.396 35.924 516.176 36.2152C515.956 36.4993 515.846 36.8544 515.846 37.2805C515.846 37.8984 516.069 38.3707 516.517 38.6974C516.971 39.017 517.547 39.1768 518.243 39.1768ZM537.813 25.6364V29.0455H527.959V25.6364H537.813ZM530.196 21.7159H534.734V36.9716C534.734 37.3906 534.798 37.7173 534.926 37.9517C535.054 38.179 535.231 38.3388 535.459 38.4311C535.693 38.5234 535.963 38.5696 536.268 38.5696C536.481 38.5696 536.694 38.5518 536.907 38.5163C537.12 38.4737 537.284 38.4418 537.397 38.4205L538.111 41.7976C537.884 41.8686 537.564 41.9503 537.152 42.0426C536.74 42.142 536.24 42.2024 535.65 42.2237C534.557 42.2663 533.598 42.1207 532.774 41.7869C531.957 41.4531 531.321 40.9347 530.867 40.2315C530.412 39.5284 530.189 38.6406 530.196 37.5682V21.7159ZM544.865 42.3089C543.821 42.3089 542.891 42.1278 542.074 41.7656C541.257 41.3963 540.611 40.853 540.135 40.1357C539.667 39.4112 539.432 38.5092 539.432 37.4297C539.432 36.5206 539.599 35.7571 539.933 35.1392C540.267 34.5213 540.721 34.0241 541.297 33.6477C541.872 33.2713 542.525 32.9872 543.257 32.7955C543.995 32.6037 544.77 32.4688 545.579 32.3906C546.531 32.2912 547.298 32.1989 547.88 32.1136C548.463 32.0213 548.885 31.8864 549.148 31.7088C549.411 31.5312 549.542 31.2685 549.542 30.9205V30.8565C549.542 30.1818 549.329 29.6598 548.903 29.2905C548.484 28.9212 547.887 28.7365 547.113 28.7365C546.297 28.7365 545.647 28.9176 545.164 29.2798C544.681 29.6349 544.361 30.0824 544.205 30.6222L540.007 30.2812C540.221 29.2869 540.64 28.4276 541.265 27.7031C541.89 26.9716 542.696 26.4105 543.683 26.0199C544.677 25.6222 545.828 25.4233 547.135 25.4233C548.044 25.4233 548.914 25.5298 549.745 25.7429C550.583 25.956 551.325 26.2862 551.971 26.7337C552.625 27.1811 553.14 27.7564 553.516 28.4595C553.892 29.1555 554.081 29.9901 554.081 30.9631V42H549.777V39.7308H549.649C549.386 40.2422 549.034 40.6932 548.594 41.0838C548.154 41.4673 547.625 41.7692 547.007 41.9893C546.389 42.2024 545.675 42.3089 544.865 42.3089ZM546.165 39.1768C546.833 39.1768 547.422 39.0455 547.934 38.7827C548.445 38.5128 548.846 38.1506 549.137 37.696C549.429 37.2415 549.574 36.7266 549.574 36.1513V34.4148C549.432 34.5071 549.237 34.5923 548.988 34.6705C548.747 34.7415 548.473 34.8089 548.168 34.8729C547.863 34.9297 547.557 34.983 547.252 35.0327C546.946 35.0753 546.669 35.1143 546.421 35.1499C545.888 35.228 545.423 35.3523 545.025 35.5227C544.628 35.6932 544.319 35.924 544.098 36.2152C543.878 36.4993 543.768 36.8544 543.768 37.2805C543.768 37.8984 543.992 38.3707 544.439 38.6974C544.894 39.017 545.469 39.1768 546.165 39.1768Z" fill="black"/> +<path d="M464.246 779V757.182H478.692V760.985H468.859V766.184H477.733V769.987H468.859V779H464.246ZM487.396 779.32C485.712 779.32 484.264 778.979 483.049 778.297C481.842 777.608 480.911 776.635 480.258 775.378C479.604 774.114 479.278 772.619 479.278 770.893C479.278 769.21 479.604 767.732 480.258 766.461C480.911 765.19 481.831 764.199 483.017 763.489C484.21 762.778 485.609 762.423 487.215 762.423C488.294 762.423 489.299 762.597 490.229 762.945C491.167 763.286 491.984 763.801 492.68 764.49C493.383 765.179 493.93 766.045 494.32 767.089C494.711 768.126 494.906 769.341 494.906 770.733V771.979H481.089V769.167H490.634C490.634 768.513 490.492 767.935 490.208 767.43C489.924 766.926 489.53 766.532 489.026 766.248C488.528 765.957 487.95 765.811 487.289 765.811C486.6 765.811 485.989 765.971 485.457 766.29C484.931 766.603 484.519 767.026 484.221 767.558C483.923 768.084 483.77 768.67 483.763 769.316V771.99C483.763 772.8 483.912 773.499 484.21 774.089C484.516 774.678 484.945 775.133 485.499 775.452C486.053 775.772 486.71 775.932 487.47 775.932C487.974 775.932 488.436 775.861 488.855 775.719C489.274 775.577 489.633 775.364 489.931 775.08C490.229 774.795 490.457 774.447 490.613 774.036L494.81 774.312C494.597 775.321 494.161 776.202 493.5 776.955C492.847 777.7 492.001 778.283 490.965 778.702C489.935 779.114 488.745 779.32 487.396 779.32ZM501.964 779.309C500.92 779.309 499.99 779.128 499.173 778.766C498.356 778.396 497.71 777.853 497.234 777.136C496.765 776.411 496.531 775.509 496.531 774.43C496.531 773.521 496.698 772.757 497.032 772.139C497.365 771.521 497.82 771.024 498.395 770.648C498.971 770.271 499.624 769.987 500.355 769.795C501.094 769.604 501.868 769.469 502.678 769.391C503.63 769.291 504.397 769.199 504.979 769.114C505.561 769.021 505.984 768.886 506.247 768.709C506.51 768.531 506.641 768.268 506.641 767.92V767.857C506.641 767.182 506.428 766.66 506.002 766.29C505.583 765.921 504.986 765.737 504.212 765.737C503.395 765.737 502.745 765.918 502.262 766.28C501.779 766.635 501.46 767.082 501.304 767.622L497.106 767.281C497.319 766.287 497.738 765.428 498.363 764.703C498.988 763.972 499.794 763.411 500.782 763.02C501.776 762.622 502.926 762.423 504.233 762.423C505.142 762.423 506.012 762.53 506.843 762.743C507.681 762.956 508.424 763.286 509.07 763.734C509.723 764.181 510.238 764.756 510.615 765.46C510.991 766.156 511.179 766.99 511.179 767.963V779H506.875V776.731H506.747C506.485 777.242 506.133 777.693 505.693 778.084C505.252 778.467 504.723 778.769 504.105 778.989C503.488 779.202 502.774 779.309 501.964 779.309ZM503.264 776.177C503.931 776.177 504.521 776.045 505.032 775.783C505.544 775.513 505.945 775.151 506.236 774.696C506.527 774.241 506.673 773.727 506.673 773.151V771.415C506.531 771.507 506.336 771.592 506.087 771.67C505.846 771.741 505.572 771.809 505.267 771.873C504.961 771.93 504.656 771.983 504.35 772.033C504.045 772.075 503.768 772.114 503.52 772.15C502.987 772.228 502.522 772.352 502.124 772.523C501.726 772.693 501.417 772.924 501.197 773.215C500.977 773.499 500.867 773.854 500.867 774.281C500.867 774.898 501.091 775.371 501.538 775.697C501.993 776.017 502.568 776.177 503.264 776.177ZM522.834 762.636V766.045H512.98V762.636H522.834ZM515.217 758.716H519.755V773.972C519.755 774.391 519.819 774.717 519.947 774.952C520.075 775.179 520.252 775.339 520.48 775.431C520.714 775.523 520.984 775.57 521.289 775.57C521.502 775.57 521.715 775.552 521.929 775.516C522.142 775.474 522.305 775.442 522.419 775.42L523.132 778.798C522.905 778.869 522.586 778.95 522.174 779.043C521.762 779.142 521.261 779.202 520.671 779.224C519.578 779.266 518.619 779.121 517.795 778.787C516.978 778.453 516.343 777.935 515.888 777.232C515.434 776.528 515.21 775.641 515.217 774.568V758.716ZM535.714 772.033V762.636H540.252V779H535.895V776.028H535.725C535.355 776.987 534.741 777.757 533.882 778.339C533.029 778.922 531.989 779.213 530.76 779.213C529.666 779.213 528.704 778.964 527.873 778.467C527.042 777.97 526.392 777.263 525.924 776.347C525.462 775.431 525.228 774.334 525.22 773.055V762.636H529.759V772.246C529.766 773.212 530.025 773.975 530.536 774.536C531.048 775.097 531.733 775.378 532.593 775.378C533.139 775.378 533.651 775.254 534.127 775.005C534.603 774.749 534.986 774.373 535.277 773.876C535.576 773.379 535.721 772.764 535.714 772.033ZM543.313 779V762.636H547.712V765.491H547.883C548.181 764.476 548.682 763.709 549.385 763.19C550.088 762.665 550.898 762.402 551.814 762.402C552.041 762.402 552.286 762.416 552.549 762.445C552.812 762.473 553.043 762.512 553.242 762.562V766.589C553.028 766.525 552.734 766.468 552.357 766.418C551.981 766.369 551.636 766.344 551.324 766.344C550.656 766.344 550.06 766.489 549.534 766.781C549.016 767.065 548.604 767.462 548.298 767.974C548 768.485 547.851 769.075 547.851 769.742V779H543.313ZM561.714 779.32C560.03 779.32 558.581 778.979 557.367 778.297C556.16 777.608 555.229 776.635 554.576 775.378C553.922 774.114 553.596 772.619 553.596 770.893C553.596 769.21 553.922 767.732 554.576 766.461C555.229 765.19 556.149 764.199 557.335 763.489C558.528 762.778 559.927 762.423 561.532 762.423C562.612 762.423 563.617 762.597 564.547 762.945C565.485 763.286 566.302 763.801 566.998 764.49C567.701 765.179 568.248 766.045 568.638 767.089C569.029 768.126 569.224 769.341 569.224 770.733V771.979H555.407V769.167H564.952C564.952 768.513 564.81 767.935 564.526 767.43C564.242 766.926 563.848 766.532 563.344 766.248C562.846 765.957 562.268 765.811 561.607 765.811C560.918 765.811 560.307 765.971 559.775 766.29C559.249 766.603 558.837 767.026 558.539 767.558C558.241 768.084 558.088 768.67 558.081 769.316V771.99C558.081 772.8 558.23 773.499 558.528 774.089C558.834 774.678 559.263 775.133 559.817 775.452C560.371 775.772 561.028 775.932 561.788 775.932C562.292 775.932 562.754 775.861 563.173 775.719C563.592 775.577 563.951 775.364 564.249 775.08C564.547 774.795 564.775 774.447 564.931 774.036L569.128 774.312C568.915 775.321 568.478 776.202 567.818 776.955C567.165 777.7 566.319 778.283 565.282 778.702C564.253 779.114 563.063 779.32 561.714 779.32ZM585.231 767.303L581.076 767.558C581.005 767.203 580.852 766.884 580.618 766.599C580.384 766.308 580.075 766.077 579.691 765.907C579.315 765.729 578.864 765.641 578.338 765.641C577.635 765.641 577.042 765.79 576.559 766.088C576.076 766.379 575.835 766.77 575.835 767.26C575.835 767.651 575.991 767.981 576.303 768.251C576.616 768.521 577.152 768.737 577.912 768.901L580.874 769.497C582.465 769.824 583.651 770.349 584.432 771.074C585.213 771.798 585.604 772.75 585.604 773.929C585.604 775.001 585.288 775.942 584.656 776.752C584.031 777.562 583.171 778.194 582.078 778.648C580.991 779.096 579.737 779.32 578.317 779.32C576.151 779.32 574.425 778.869 573.139 777.967C571.861 777.058 571.112 775.822 570.891 774.259L575.355 774.025C575.49 774.685 575.817 775.19 576.335 775.538C576.854 775.879 577.518 776.049 578.328 776.049C579.123 776.049 579.762 775.896 580.245 775.591C580.735 775.278 580.984 774.877 580.991 774.387C580.984 773.975 580.81 773.638 580.469 773.375C580.128 773.105 579.602 772.899 578.892 772.757L576.058 772.192C574.46 771.873 573.271 771.319 572.489 770.531C571.715 769.742 571.328 768.737 571.328 767.516C571.328 766.464 571.612 765.559 572.181 764.799C572.756 764.039 573.562 763.453 574.599 763.041C575.643 762.629 576.864 762.423 578.264 762.423C580.33 762.423 581.957 762.86 583.143 763.734C584.336 764.607 585.032 765.797 585.231 767.303Z" fill="black"/> +</svg> diff --git a/docs/en/serverless/images/services-inventory.png b/docs/en/serverless/images/services-inventory.png new file mode 100644 index 0000000000..d32dd4e71d Binary files /dev/null and b/docs/en/serverless/images/services-inventory.png differ diff --git a/docs/en/serverless/images/slo-action-frequency.png b/docs/en/serverless/images/slo-action-frequency.png new file mode 100644 index 0000000000..cef8d4307e Binary files /dev/null and b/docs/en/serverless/images/slo-action-frequency.png differ diff --git a/docs/en/serverless/images/slo-alerts-create-rule.png b/docs/en/serverless/images/slo-alerts-create-rule.png new file mode 100644 index 0000000000..e3c6a8ce1f Binary files /dev/null and b/docs/en/serverless/images/slo-alerts-create-rule.png differ diff --git a/docs/en/serverless/images/slo-burn-rate-breach.png b/docs/en/serverless/images/slo-burn-rate-breach.png new file mode 100644 index 0000000000..cdedd2d722 Binary files /dev/null and b/docs/en/serverless/images/slo-burn-rate-breach.png differ diff --git a/docs/en/serverless/images/slo-dashboard-panel.png b/docs/en/serverless/images/slo-dashboard-panel.png new file mode 100644 index 0000000000..87c330d10f Binary files /dev/null and b/docs/en/serverless/images/slo-dashboard-panel.png differ diff --git a/docs/en/serverless/images/slo-dashboard.png b/docs/en/serverless/images/slo-dashboard.png new file mode 100644 index 0000000000..6c08697da5 Binary files /dev/null and b/docs/en/serverless/images/slo-dashboard.png differ diff --git a/docs/en/serverless/images/slo-detailed-view.png b/docs/en/serverless/images/slo-detailed-view.png new file mode 100644 index 0000000000..3cfb080a3d Binary files /dev/null and b/docs/en/serverless/images/slo-detailed-view.png differ diff --git a/docs/en/serverless/images/slo-filtering-options.png b/docs/en/serverless/images/slo-filtering-options.png new file mode 100644 index 0000000000..a4580a933e Binary files /dev/null and b/docs/en/serverless/images/slo-filtering-options.png differ diff --git a/docs/en/serverless/images/slo-group-by.png b/docs/en/serverless/images/slo-group-by.png new file mode 100644 index 0000000000..d13fdb9a4d Binary files /dev/null and b/docs/en/serverless/images/slo-group-by.png differ diff --git a/docs/en/serverless/images/synthetic-monitor-lifecycle.png b/docs/en/serverless/images/synthetic-monitor-lifecycle.png new file mode 100644 index 0000000000..711fb1a6f0 Binary files /dev/null and b/docs/en/serverless/images/synthetic-monitor-lifecycle.png differ diff --git a/docs/en/serverless/images/synthetics-analyze-individual-monitor-details.png b/docs/en/serverless/images/synthetics-analyze-individual-monitor-details.png new file mode 100644 index 0000000000..08349dabf5 Binary files /dev/null and b/docs/en/serverless/images/synthetics-analyze-individual-monitor-details.png differ diff --git a/docs/en/serverless/images/synthetics-analyze-individual-monitor-errors.png b/docs/en/serverless/images/synthetics-analyze-individual-monitor-errors.png new file mode 100644 index 0000000000..3ee9d9b99b Binary files /dev/null and b/docs/en/serverless/images/synthetics-analyze-individual-monitor-errors.png differ diff --git a/docs/en/serverless/images/synthetics-analyze-individual-monitor-header.png b/docs/en/serverless/images/synthetics-analyze-individual-monitor-header.png new file mode 100644 index 0000000000..0e8d3a6d8c Binary files /dev/null and b/docs/en/serverless/images/synthetics-analyze-individual-monitor-header.png differ diff --git a/docs/en/serverless/images/synthetics-analyze-individual-monitor-history.png b/docs/en/serverless/images/synthetics-analyze-individual-monitor-history.png new file mode 100644 index 0000000000..7253ff3840 Binary files /dev/null and b/docs/en/serverless/images/synthetics-analyze-individual-monitor-history.png differ diff --git a/docs/en/serverless/images/synthetics-analyze-journeys-over-time.png b/docs/en/serverless/images/synthetics-analyze-journeys-over-time.png new file mode 100644 index 0000000000..b9acdffd23 Binary files /dev/null and b/docs/en/serverless/images/synthetics-analyze-journeys-over-time.png differ diff --git a/docs/en/serverless/images/synthetics-analyze-one-run-code-executed.png b/docs/en/serverless/images/synthetics-analyze-one-run-code-executed.png new file mode 100644 index 0000000000..f65f26934d Binary files /dev/null and b/docs/en/serverless/images/synthetics-analyze-one-run-code-executed.png differ diff --git a/docs/en/serverless/images/synthetics-analyze-one-run-compare-steps.png b/docs/en/serverless/images/synthetics-analyze-one-run-compare-steps.png new file mode 100644 index 0000000000..28a663c74b Binary files /dev/null and b/docs/en/serverless/images/synthetics-analyze-one-run-compare-steps.png differ diff --git a/docs/en/serverless/images/synthetics-analyze-one-step-metrics.png b/docs/en/serverless/images/synthetics-analyze-one-step-metrics.png new file mode 100644 index 0000000000..d9d0d1bc83 Binary files /dev/null and b/docs/en/serverless/images/synthetics-analyze-one-step-metrics.png differ diff --git a/docs/en/serverless/images/synthetics-analyze-one-step-network.png b/docs/en/serverless/images/synthetics-analyze-one-step-network.png new file mode 100644 index 0000000000..b448e474b1 Binary files /dev/null and b/docs/en/serverless/images/synthetics-analyze-one-step-network.png differ diff --git a/docs/en/serverless/images/synthetics-analyze-one-step-object.png b/docs/en/serverless/images/synthetics-analyze-one-step-object.png new file mode 100644 index 0000000000..4846992088 Binary files /dev/null and b/docs/en/serverless/images/synthetics-analyze-one-step-object.png differ diff --git a/docs/en/serverless/images/synthetics-analyze-one-step-screenshot.png b/docs/en/serverless/images/synthetics-analyze-one-step-screenshot.png new file mode 100644 index 0000000000..97a687d6f7 Binary files /dev/null and b/docs/en/serverless/images/synthetics-analyze-one-step-screenshot.png differ diff --git a/docs/en/serverless/images/synthetics-analyze-one-step-timing.png b/docs/en/serverless/images/synthetics-analyze-one-step-timing.png new file mode 100644 index 0000000000..0bd844384f Binary files /dev/null and b/docs/en/serverless/images/synthetics-analyze-one-step-timing.png differ diff --git a/docs/en/serverless/images/synthetics-create-test-script-recorder.png b/docs/en/serverless/images/synthetics-create-test-script-recorder.png new file mode 100644 index 0000000000..6d488b8276 Binary files /dev/null and b/docs/en/serverless/images/synthetics-create-test-script-recorder.png differ diff --git a/docs/en/serverless/images/synthetics-get-started-projects.png b/docs/en/serverless/images/synthetics-get-started-projects.png new file mode 100644 index 0000000000..8632f5708d Binary files /dev/null and b/docs/en/serverless/images/synthetics-get-started-projects.png differ diff --git a/docs/en/serverless/images/synthetics-get-started-ui-lightweight.png b/docs/en/serverless/images/synthetics-get-started-ui-lightweight.png new file mode 100644 index 0000000000..1d1223bea9 Binary files /dev/null and b/docs/en/serverless/images/synthetics-get-started-ui-lightweight.png differ diff --git a/docs/en/serverless/images/synthetics-get-started-ui.png b/docs/en/serverless/images/synthetics-get-started-ui.png new file mode 100644 index 0000000000..e94e4ceacd Binary files /dev/null and b/docs/en/serverless/images/synthetics-get-started-ui.png differ diff --git a/docs/en/serverless/images/synthetics-monitor-management-api-key.png b/docs/en/serverless/images/synthetics-monitor-management-api-key.png new file mode 100644 index 0000000000..84956e8e4b Binary files /dev/null and b/docs/en/serverless/images/synthetics-monitor-management-api-key.png differ diff --git a/docs/en/serverless/images/synthetics-monitor-page.png b/docs/en/serverless/images/synthetics-monitor-page.png new file mode 100644 index 0000000000..bda0383851 Binary files /dev/null and b/docs/en/serverless/images/synthetics-monitor-page.png differ diff --git a/docs/en/serverless/images/synthetics-params-secrets-kibana-define.png b/docs/en/serverless/images/synthetics-params-secrets-kibana-define.png new file mode 100644 index 0000000000..e07aa48064 Binary files /dev/null and b/docs/en/serverless/images/synthetics-params-secrets-kibana-define.png differ diff --git a/docs/en/serverless/images/synthetics-params-secrets-kibana-use-browser.png b/docs/en/serverless/images/synthetics-params-secrets-kibana-use-browser.png new file mode 100644 index 0000000000..2755e7b47d Binary files /dev/null and b/docs/en/serverless/images/synthetics-params-secrets-kibana-use-browser.png differ diff --git a/docs/en/serverless/images/synthetics-params-secrets-kibana-use-lightweight.png b/docs/en/serverless/images/synthetics-params-secrets-kibana-use-lightweight.png new file mode 100644 index 0000000000..52fb703128 Binary files /dev/null and b/docs/en/serverless/images/synthetics-params-secrets-kibana-use-lightweight.png differ diff --git a/docs/en/serverless/images/synthetics-retest.png b/docs/en/serverless/images/synthetics-retest.png new file mode 100644 index 0000000000..b55b96615d Binary files /dev/null and b/docs/en/serverless/images/synthetics-retest.png differ diff --git a/docs/en/serverless/images/synthetics-settings-alerting.png b/docs/en/serverless/images/synthetics-settings-alerting.png new file mode 100644 index 0000000000..37e77bdaa9 Binary files /dev/null and b/docs/en/serverless/images/synthetics-settings-alerting.png differ diff --git a/docs/en/serverless/images/synthetics-settings-api-keys.png b/docs/en/serverless/images/synthetics-settings-api-keys.png new file mode 100644 index 0000000000..5990883241 Binary files /dev/null and b/docs/en/serverless/images/synthetics-settings-api-keys.png differ diff --git a/docs/en/serverless/images/synthetics-settings-data-retention.png b/docs/en/serverless/images/synthetics-settings-data-retention.png new file mode 100644 index 0000000000..6d49753fa9 Binary files /dev/null and b/docs/en/serverless/images/synthetics-settings-data-retention.png differ diff --git a/docs/en/serverless/images/synthetics-settings-disable-default-rules.png b/docs/en/serverless/images/synthetics-settings-disable-default-rules.png new file mode 100644 index 0000000000..a58d9a1457 Binary files /dev/null and b/docs/en/serverless/images/synthetics-settings-disable-default-rules.png differ diff --git a/docs/en/serverless/images/synthetics-settings-global-parameters.png b/docs/en/serverless/images/synthetics-settings-global-parameters.png new file mode 100644 index 0000000000..830f9a9777 Binary files /dev/null and b/docs/en/serverless/images/synthetics-settings-global-parameters.png differ diff --git a/docs/en/serverless/images/synthetics-settings-private-locations.png b/docs/en/serverless/images/synthetics-settings-private-locations.png new file mode 100644 index 0000000000..62ba5f7ecb Binary files /dev/null and b/docs/en/serverless/images/synthetics-settings-private-locations.png differ diff --git a/docs/en/serverless/images/synthetics-ui-inline-script.png b/docs/en/serverless/images/synthetics-ui-inline-script.png new file mode 100644 index 0000000000..d819c4ed72 Binary files /dev/null and b/docs/en/serverless/images/synthetics-ui-inline-script.png differ diff --git a/docs/en/serverless/images/table-view-icon.png b/docs/en/serverless/images/table-view-icon.png new file mode 100644 index 0000000000..c761abfb38 Binary files /dev/null and b/docs/en/serverless/images/table-view-icon.png differ diff --git a/docs/en/serverless/infra-monitoring/analyze-hosts.mdx b/docs/en/serverless/infra-monitoring/analyze-hosts.mdx new file mode 100644 index 0000000000..4584f07d94 --- /dev/null +++ b/docs/en/serverless/infra-monitoring/analyze-hosts.mdx @@ -0,0 +1,268 @@ +--- +id: serverlessObservabilityAnalyzeHosts +slug: /serverless/observability/analyze-hosts +title: Analyze and compare hosts +description: Get a metrics-driven view of your hosts backed by an easy-to-use interface called Lens. +tags: [ 'serverless', 'observability', 'how to' ] +--- +<p><DocBadge template="technical preview" /></p> + +import HostDetails from '../transclusion/host-details.mdx' + +<div id="analyze-hosts"></div> + +<DocCallOut template="beta" /> +We'd love to get your feedback! +[Tell us what you think!](https://docs.google.com/forms/d/e/1FAIpQLScRHG8TIVb1Oq8ZhD4aks3P1TmgiM58TY123QpDCcBz83YC6w/viewform) + +The **Hosts** page provides a metrics-driven view of your infrastructure backed +by an easy-to-use interface called Lens. On the **Hosts** page, you can view +health and performance metrics to help you quickly: + +* Analyze and compare hosts without having to build new dashboards. +* Identify which hosts trigger the most alerts. +* Troubleshoot and resolve issues quickly. +* View historical data to rule out false alerts and identify root causes. +* Filter and search the data to focus on the hosts you care about the most. + +To access the **Hosts** page, in your ((observability)) project, go to +**Infrastructure** → **Hosts**. + +![Screenshot of the Hosts page](../images/hosts.png) + +To learn more about the metrics shown on this page, refer to the <DocLink id="serverlessObservabilityMetricsReference" /> documentation. + +<DocCallOut title="Don't see any metrics?"> + +If you haven't added data yet, click **Add data** to search for and install an Elastic integration. + +Need help getting started? Follow the steps in +<DocLink id="serverlessObservabilityGetStartedWithMetrics">Get started with system metrics</DocLink>. + +</DocCallOut> + +The **Hosts** page provides several ways to view host metrics: + +* Overview tiles show the number of hosts returned by your search plus + averages of key metrics, including CPU usage, memory usage, and throughput. + +* The Host limit controls the maximum number of hosts shown on the page. The + default is 50, which means the page shows data for the top 50 hosts based on the + most recent timestamps. You can increase the host limit to see data for more + hosts, but doing so may impact query performance. + +* The Hosts table shows a breakdown of metrics for each host along with an alert count + for any hosts with active alerts. You may need to page through the list + or change the number of rows displayed on each page to see all of your hosts. + +* Each host name is an active link to a <DocLink id="serverlessObservabilityAnalyzeHosts" section="view-host-details" text="host details" /> page, + which includes metrics, host metadata, alerts, processes, logs, and anomalies. + You can optionally open the host details in an overlay. + +* Table columns are sortable, but note that the sorting behavior is applied to + the already returned data set. + +* The tabs at the bottom of the page show an overview of the metrics, logs, + and alerts for all hosts returned by your search. + +<DocCallOut title="Tip"> + For more information about creating and viewing alerts, refer to <DocLink id="serverlessObservabilityAlerting" />. +</DocCallOut> + +<div id="analyze-hosts-filter-view"></div> + +## Filter the Hosts view + +The **Hosts** page provides several mechanisms for filtering the data on the +page: + +* Enter a search query using [((kib)) Query Language](((kibana-ref))/kuery-query.html) to show metrics that match your search criteria. For example, + to see metrics for hosts running on linux, enter `host.os.type : "linux"`. + Otherwise you’ll see metrics for all your monitored hosts (up to the number of + hosts specified by the host limit). + +* Select additional criteria to filter the view: + * In the **Operating System** list, select one or more operating systems + to include (or exclude) metrics for hosts running the selected operating systems. + + * In the **Cloud Provider** list, select one or more cloud providers to + include (or exclude) metrics for hosts running on the selected cloud providers. + + * In the **Service Name** list, select one or more service names to + include (or exclude) metrics for the hosts running the selected services. + Services must be instrumented by APM to be filterable. + This filter is useful for comparing different hosts to determine whether a problem lies + with a service or the host that it is running on. + + <DocCallOut title="Tip"> + Filtered results are sorted by _document count_. + Document count is the number of events received by Elastic for the hosts that match your filter criteria. + </DocCallOut> + +* Change the date range in the time filter, or click and drag on a + visualization to change the date range. + +* Within a visualization, click a point on a line and apply filters to set other + visualizations on the page to the same time and/or host. + +<div id="analyze-hosts-inspect-data"></div> + +## View metrics + +On the **Metrics** tab of the **Hosts** page, view metrics trending over time, including normalized load, +CPU usage, memory usage, network inbound, network outbound, disk read IOPS, and +disk write IOPS. Place your cursor over a line to view metrics at a specific +point in time. + +To see metrics for a specific host, refer to <DocLink id="serverlessObservabilityAnalyzeHosts" section="view-host-details" text="View host details"/>. + +<div id="inspect-metrics"></div> + +### Inspect and download metrics + +You can access a text-based view of the data underlying +your metrics visualizations and optionally download the data to a +comma-separated (CSV) file. + +Hover your cursor over a visualization, then in the upper-right corner, click +the ellipsis icon to inspect the data. + +![Screenshot showing option to inspect data](../images/hosts-inspect.png) + +In the flyout, click **Download CSV** to download formatted or raw data to a CSV +file. + +Click **View: Data** and notice that you can change the view to **Requests** to explore the request +used to fetch the data and the response returned from ((es)). On the **Request** tab, click links +to further inspect and analyze the request in the Dev Console or Search Profiler. + +<div id="analyze-hosts-open-in-lens"></div> + +### Open in Lens + +Metrics visualizations are powered by Lens, meaning you can continue your +analysis in Lens if you require more flexibility. Hover your cursor over a +visualization, then click the ellipsis icon in the upper-right corner to open +the visualization in Lens. + +![Screenshot showing option to open in Lens](../images/hosts-open-in-lens.png) + +In Lens, you can examine all the fields and formulas used to create the +visualization, make modifications to the visualization, and save your changes. + +For more information about using Lens, refer to the +[((kib)) documentation about Lens](((kibana-ref))/lens.html). + +<div id="analyze-hosts-view-logs"></div> + +## View logs + +On the **Logs** tab of the **Hosts** page, view logs for the systems you are monitoring and search +for specific log entries. This view shows logs for all of the hosts returned by +the current query. + +![Screenshot showing Logs view](../images/hosts-logs.png) + +To see logs for a specific host, refer to <DocLink id="serverlessObservabilityAnalyzeHosts" section="view-host-details" text="View host details" />. + +<div id="analyze-hosts-view-alerts"></div> + +## View alerts + +On the **Alerts** tab of the **Hosts** page, view active alerts to pinpoint problems. Use this view +to figure out which hosts triggered alerts and identify root causes. This view +shows alerts for all of the hosts returned by the current query. + +From the **Actions** menu, you can choose to: + +* Add the alert to a new or existing case. +* View rule details. +* View alert details. + +![Screenshot showing Alerts view](../images/hosts-view-alerts.png) + +To see alerts for a specific host, refer to <DocLink id="serverlessObservabilityAnalyzeHosts" section="view-host-details" text="View host details" />. + + +<DocCallOut title="Why are alerts missing from the Hosts page?"> + If your rules are triggering alerts that don't appear on the **Hosts** page, + edit the rules and make sure they are correctly configured to associate the host name with the alert: + + * For Metric threshold or Custom threshold rules, select `host.name` in the **Group alerts by** field. + * For Inventory rules, select **Host** for the node type under **Conditions**. + + To learn more about creating and managing rules, refer to <DocLink id="serverlessObservabilityAlerting" />. +</DocCallOut> + +<div id="view-host-details"></div> + +## View host details + +Without leaving the **Hosts** page, you can view enhanced metrics relating to +each host running in your infrastructure. In the list of hosts, find the host +you want to monitor, then click the **Toggle dialog with details** +icon <DocImage flatImage alt="" url="../images/expand-icon.png" /> to display the host details overlay. + +<DocCallOut title="Tip"> +To expand the overlay and view more detail, click **Open as page** in the upper-right corner. +</DocCallOut> + +The host details overlay contains the following tabs: + +<HostDetails /> + +<DocCallOut title="Note"> +These metrics are also available when viewing hosts on the **Inventory** +page. +</DocCallOut> + +<div id="analyze-hosts-why-dashed-lines"></div> + +## Why am I seeing dashed lines in charts? + +There are a few reasons why you may see dashed lines in your charts. + +* <DocLink id="serverlessObservabilityAnalyzeHosts" section="the-chart-interval-is-too-short">The chart interval is too short</DocLink> +* <DocLink id="serverlessObservabilityAnalyzeHosts" section="data-is-missing">Data is missing</DocLink> +* <DocLink id="serverlessObservabilityAnalyzeHosts" section="the-chart-interval-is-too-short-and-data-is-missing">The chart interval is too short and data is missing</DocLink> + +<div id="dashed-interval"></div> + +### The chart interval is too short + +In this example, the data emission rate is lower than the Lens chart interval. +A dashed line connects the known data points to make it easier to visualize trends in the data. + +![Screenshot showing dashed chart](../images/hosts-dashed.png) + +The chart interval is automatically set depending on the selected time duration. +To fix this problem, change the selected time range at the top of the page. + +<DocCallOut title="Tip"> +Want to dig in further while maintaining the selected time duration? +Hover over the chart you're interested in and select **Options** → **Open in Lens**. +Once in Lens, you can adjust the chart interval temporarily. +Note that this change is not persisted in the **Hosts** view. +</DocCallOut> + +<div id="dashed-missing"></div> + +### Data is missing + +A solid line indicates that the chart interval is set appropriately for the data transmission rate. +In this example, a solid line turns into a dashed line—indicating missing data. +You may want to investigate this time period to determine if there is an outage or issue. + +![Screenshot showing missing data](../images/hosts-missing-data.png) + +### The chart interval is too short and data is missing + +In the example shown in the screenshot, +the data emission rate is lower than the Lens chart interval **and** there is missing data. + +This missing data can be hard to spot at first glance. +The green boxes outline regular data emissions, while the missing data is outlined in pink. +Similar to the above scenario, you may want to investigate the time period with the missing data +to determine if there is an outage or issue. + +![Screenshot showing dashed lines and missing data](../images/hosts-dashed-and-missing.png) diff --git a/docs/en/serverless/infra-monitoring/aws-metrics.mdx b/docs/en/serverless/infra-monitoring/aws-metrics.mdx new file mode 100644 index 0000000000..32829da971 --- /dev/null +++ b/docs/en/serverless/infra-monitoring/aws-metrics.mdx @@ -0,0 +1,84 @@ +--- +id: serverlessObservabilityAwsMetrics +slug: /serverless/observability/aws-metrics +title: AWS metrics +description: Learn about key metrics used for AWS monitoring. +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="aws-metrics"></div> + +<DocCallOut title="Important" color="warning"> + +Additional AWS charges for GetMetricData API requests are generated using this module. + +</DocCallOut> + +<div id="monitor-ec2-instances"></div> + +## Monitor EC2 instances + +To analyze EC2 instance metrics, +you can select view filters based on the following predefined metrics, +or you can add <DocLink id="serverlessObservabilityViewInfrastructureMetrics" section="add-custom-metrics">custom metrics</DocLink>. + +| | | +|---|---| +| **CPU Usage** | Average of `aws.ec2.cpu.total.pct`. | +| **Inbound Traffic** | Average of `aws.ec2.network.in.bytes_per_sec`. | +| **Outbound Traffic** | Average of `aws.ec2.network.out.bytes_per_sec`. | +| **Disk Reads (Bytes)** | Average of `aws.ec2.diskio.read.bytes_per_sec`. | +| **Disk Writes (Bytes)** | Average of `aws.ec2.diskio.write.bytes_per_sec`. | + +<div id="monitor-s3-buckets"></div> + +## Monitor S3 buckets + +To analyze S3 bucket metrics, +you can select view filters based on the following predefined metrics, +or you can add <DocLink id="serverlessObservabilityViewInfrastructureMetrics" section="add-custom-metrics">custom metrics</DocLink>. + +| | | +|---|---| +| **Bucket Size** | Average of `aws.s3_daily_storage.bucket.size.bytes`. | +| **Total Requests** | Average of `aws.s3_request.requests.total`. | +| **Number of Objects** | Average of `aws.s3_daily_storage.number_of_objects`. | +| **Downloads (Bytes)** | Average of `aws.s3_request.downloaded.bytes`. | +| **Uploads (Bytes)** | Average of `aws.s3_request.uploaded.bytes`. | + +<div id="monitor-sqs-queues"></div> + +## Monitor SQS queues + +To analyze SQS queue metrics, +you can select view filters based on the following predefined metrics, +or you can add <DocLink id="serverlessObservabilityViewInfrastructureMetrics" section="add-custom-metrics">custom metrics</DocLink>. + +| | | +|---|---| +| **Messages Available** | Max of `aws.sqs.messages.visible`. | +| **Messages Delayed** | Max of `aws.sqs.messages.delayed`. | +| **Messages Added** | Max of `aws.sqs.messages.sent`. | +| **Messages Returned Empty** | Max of `aws.sqs.messages.not_visible`. | +| **Oldest Message** | Max of `aws.sqs.oldest_message_age.sec`. | + +<div id="monitor-rds-databases"></div> + +## Monitor RDS databases + +To analyze RDS database metrics, +you can select view filters based on the following predefined metrics, +or you can add <DocLink id="serverlessObservabilityViewInfrastructureMetrics" section="add-custom-metrics">custom metrics</DocLink>. + +| | | +|---|---| +| **CPU Usage** | Average of `aws.rds.cpu.total.pct`. | +| **Connections** | Average of `aws.rds.database_connections`. | +| **Queries Executed** | Average of `aws.rds.queries`. | +| **Active Transactions** | Average of `aws.rds.transactions.active`. | +| **Latency** | Average of `aws.rds.latency.dml`. | + +For information about the fields used by the Infrastructure UI to display AWS services metrics, see the +<DocLink id="serverlessObservabilityMetricsFields" />. \ No newline at end of file diff --git a/docs/en/serverless/infra-monitoring/configure-infra-settings.mdx b/docs/en/serverless/infra-monitoring/configure-infra-settings.mdx new file mode 100644 index 0000000000..aabd6c3a83 --- /dev/null +++ b/docs/en/serverless/infra-monitoring/configure-infra-settings.mdx @@ -0,0 +1,41 @@ +--- +id: serverlessObservabilityConfigureInfraSettings +slug: /serverless/observability/configure-intra-settings +title: Configure settings +description: Learn how to configure infrastructure UI settings. +tags: [ 'serverless', 'observability', 'how to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Editor" goal="configure settings" /> + +<div id="configure-settings"></div> + +From the main ((observability)) menu, go to **Infrastructure** → **Inventory** or **Hosts**, +and click the **Settings** link at the top of the page. +The following settings are available: + +<DocTable columns={[{ title: "Setting" }, { title: "Description" }]}> + <DocRow> + <DocCell>**Name**</DocCell> + <DocCell>Name of the source configuration.</DocCell> + </DocRow> + <DocRow> + <DocCell>**Indices**</DocCell> + <DocCell>((ipm-cap)) or patterns used to match ((es)) indices that contain metrics. The default patterns are `metrics-*,metricbeat-*`.</DocCell> + </DocRow> + <DocRow> + <DocCell>**Machine Learning**</DocCell> + <DocCell>The minimum severity score required to display anomalies in the Infrastructure UI. The default is 50.</DocCell> + </DocRow> + <DocRow> + <DocCell>**Features**</DocCell> + <DocCell>Turn new features on and off. </DocCell> + </DocRow> +</DocTable> +Click **Apply** to save your changes. + +If the fields are grayed out and cannot be edited, you may not have sufficient privileges to change the source configuration. diff --git a/docs/en/serverless/infra-monitoring/detect-metric-anomalies.mdx b/docs/en/serverless/infra-monitoring/detect-metric-anomalies.mdx new file mode 100644 index 0000000000..21c76421d6 --- /dev/null +++ b/docs/en/serverless/infra-monitoring/detect-metric-anomalies.mdx @@ -0,0 +1,78 @@ +--- +id: serverlessObservabilityDetectMetricAnomalies +slug: /serverless/observability/detect-metric-anomalies +title: Detect metric anomalies +description: Detect and inspect memory usage and network traffic anomalies for hosts and Kubernetes pods. +tags: [ 'serverless', 'observability', 'how to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Editor" goal="create ((ml)) jobs" /> + +<div id="inspect-metric-anomalies"></div> + +You can create ((ml)) jobs to detect and inspect memory usage and network traffic anomalies for hosts and Kubernetes pods. + +You can model system memory usage, along with inbound and outbound network traffic across hosts or pods. +You can detect unusual increases in memory usage and unusually high inbound or outbound traffic across hosts or pods. + +<div id="ml-jobs-hosts"></div> + +## Enable ((ml)) jobs for hosts or Kubernetes pods + +Create a ((ml)) job to detect anomalous memory usage and network traffic automatically. + +After creating ((ml)) jobs, you cannot change the settings. +You can recreate these jobs later. +However, you will remove any previously detected anomalies. + +{/* lint ignore anomaly-detection observability */} +1. In your ((observability)) project, go to **Infrastructure** → **Inventory** +and click the **Anomaly detection** link at the top of the page. +1. Under **Hosts** or **Kubernetes Pods**, click **Enable** to create a ((ml)) job. +1. Choose a start date for the ((ml)) analysis. ((ml-cap)) jobs analyze the last four weeks of data and continue to run indefinitely. +1. Select a partition field. + Partitions allow you to create independent models for different groups of data that share similar behavior. + For example, you may want to build separate models for machine type or cloud availability zone so that anomalies are not weighted equally across groups. +1. By default, ((ml)) jobs analyze all of your metric data. + You can filter this list to view only the jobs or metrics that you are interested in. + For example, you can filter by job name and node name to view specific ((anomaly-detect)) jobs for that host. +1. Click **Enable jobs**. +1. You're now ready to explore your metric anomalies. Click **Anomalies**. + +![Infrastructure ((ml-app)) anomalies](../images/metrics-ml-jobs.png) + +The **Anomalies** table displays a list of each single metric ((anomaly-detect)) job for the specific host or Kubernetes pod. +By default, anomaly jobs are sorted by time to show the most recent job. + +Along with each anomaly job and the node name, +detected anomalies with a severity score equal to 50 or higher are listed. +These scores represent a severity of "warning" or higher in the selected time period. +The **summary** value represents the increase between the actual value and the expected ("typical") value of the metric in the anomaly record result. + +To drill down and analyze the metric anomaly, +select **Actions → Open in Anomaly Explorer** to view the Anomaly Explorer. +You can also select **Actions** → **Show in Inventory** to view the host or Kubernetes pods Inventory page, +filtered by the specific metric. + +<DocCallOut title="Note"> + +These predefined ((anomaly-jobs)) use [custom rules](((ml-docs))/ml-rules.html). +To update the rules in the Anomaly Explorer, select **Actions** → **Configure rules**. +The changes only take effect for new results. +If you want to apply the changes to existing results, clone and rerun the job. + +</DocCallOut> + +<div id="history-chart"></div> + +## History chart + +On the **Inventory** page, click **Show history** to view the metric values within the selected time frame. +Detected anomalies with an anomaly score equal to 50 or higher are highlighted in red. +To examine the detected anomalies, use the Anomaly Explorer. + +![History](../images/metrics-history-chart.png) diff --git a/docs/en/serverless/infra-monitoring/docker-container-metrics.mdx b/docs/en/serverless/infra-monitoring/docker-container-metrics.mdx new file mode 100644 index 0000000000..70c30370da --- /dev/null +++ b/docs/en/serverless/infra-monitoring/docker-container-metrics.mdx @@ -0,0 +1,25 @@ +--- +id: serverlessObservabilityDockerContainerMetrics +slug: /serverless/observability/docker-container-metrics +title: Docker container metrics +description: Learn about key metrics used for Docker container monitoring. +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="docker-container-metrics"></div> + +To analyze Docker container metrics, +you can select view filters based on the following predefined metrics, +or you can add <DocLink id="serverlessObservabilityViewInfrastructureMetrics" section="add-custom-metrics">custom metrics</DocLink>. + +| | | +|---|---| +| **CPU Usage** | Average of `docker.cpu.total.pct`. | +| **Memory Usage** | Average of `docker.memory.usage.pct`. | +| **Inbound Traffic** | Derivative of the maximum of `docker.network.in.bytes` scaled to a 1 second rate. | +| **Outbound Traffic** | Derivative of the maximum of `docker.network.out.bytes` scaled to a 1 second rate. | + +For information about the fields used by the Infrastructure UI to display Docker container metrics, see the +<DocLink id="serverlessObservabilityMetricsFields" />. \ No newline at end of file diff --git a/docs/en/serverless/infra-monitoring/get-started-with-metrics.mdx b/docs/en/serverless/infra-monitoring/get-started-with-metrics.mdx new file mode 100644 index 0000000000..009761eb48 --- /dev/null +++ b/docs/en/serverless/infra-monitoring/get-started-with-metrics.mdx @@ -0,0 +1,58 @@ +--- +id: serverlessObservabilityGetStartedWithMetrics +slug: /serverless/observability/get-started-with-metrics +title: Get started with system metrics +description: Learn how to onboard your system metrics data quickly. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Admin" goal="onboard system metrics data" /> + +In this guide you'll learn how to onboard system metrics data from a machine or server, +then observe the data in Elastic ((observability)). + +To onboard system metrics data: + +1. <DocLink id="serverlessObservabilityCreateAnObservabilityProject">Create a new ((observability)) project</DocLink>, or open an existing one. +1. In your ((observability)) project, go to **Project Settings** → **Integrations**. +1. Type **System** in the search bar, then select the integration to see more details about it. +1. Click **Add System**. +1. Follow the in-product steps to install the System integration and deploy an ((agent)). +The sequence of steps varies depending on whether you have already installed an integration. + + * When configuring the System integration, make sure that **Collect metrics from System instances** is turned on. + * Expand each configuration section to verify that the settings are correct for your host. + For example, you may want to turn on **System core metrics** to get a complete view of your infrastructure. + +Notice that you can also configure the integration to collect logs. + +<DocCallOut title="What if ((agent)) is already running on my host?"> + Do not try to deploy a second ((agent)) to the same system. + You have a couple options: + + * **Use the System integration to collect system logs and metrics.** To do this, + uninstall the standalone agent you deployed previously, + then follow the in-product steps to install the System integration and deploy an ((agent)). + * **Configure your existing standalone agent to collect metrics.** To do this, + edit the deployed ((agent))'s YAML file and add metric inputs to the configuration manually. + Manual configuration is a time-consuming process. + To save time, you can follow the in-product steps that describe how to deploy a standalone ((agent)), + and use the generated configuration as source for the input configurations that you need to add to your standalone config file. +</DocCallOut> + +After the agent is installed and successfully streaming metrics data, +go to **Infrastructure** → **Inventory** or **Hosts** to see a metrics-driven view of your infrastructure. +To learn more, refer to <DocLink id="serverlessObservabilityViewInfrastructureMetrics" /> or <DocLink id="serverlessObservabilityAnalyzeHosts" />. + +## Next steps + +Now that you've added metrics and explored your data, +learn how to onboard other types of data: + +* <DocLink id="serverlessObservabilityGetStartedWithLogs" /> +* <DocLink id="serverlessObservabilityStreamLogFiles"/> +* <DocLink id="serverlessObservabilityApmGetStarted"/> diff --git a/docs/en/serverless/infra-monitoring/host-metrics.mdx b/docs/en/serverless/infra-monitoring/host-metrics.mdx new file mode 100644 index 0000000000..362446787e --- /dev/null +++ b/docs/en/serverless/infra-monitoring/host-metrics.mdx @@ -0,0 +1,194 @@ +--- +id: serverlessObservabilityHostMetrics +slug: /serverless/observability/host-metrics +title: Host metrics +description: Learn about key host metrics used for host monitoring. +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="host-metrics"></div> + +Learn about key host metrics displayed in the Infrastructure UI: + +* <DocLink id="serverlessObservabilityHostMetrics" section="hosts-metrics">Hosts</DocLink> +* <DocLink id="serverlessObservabilityHostMetrics" section="cpu-usage-metrics">CPU usage</DocLink> +* <DocLink id="serverlessObservabilityHostMetrics" section="memory-metrics">Memory</DocLink> +* <DocLink id="serverlessObservabilityHostMetrics" section="log-metrics">Log</DocLink> +* <DocLink id="serverlessObservabilityHostMetrics" section="network-metrics">Network</DocLink> +* <DocLink id="serverlessObservabilityHostMetrics" section="network-metrics">Disk</DocLink> + +<div id="key-metrics-hosts"></div> + +## Hosts metrics + +| Metric | Description | +|---|---| +| **Hosts** | Number of hosts returned by your search criteria. | + +<div id="key-metrics-cpu"></div> + +## CPU usage metrics + +<DocTable columns={[ + { + "title": "Metric", + "width": "50%" + }, + { + "title": "Description", + "width": "50%" + } +]}> + <DocRow> + <DocCell>**CPU Usage (%)** </DocCell> + <DocCell> + Percentage of CPU time spent in states other than Idle and IOWait, normalized by the number of CPU cores. This includes both time spent on user space and kernel space. + + 100% means all CPUs of the host are busy. + </DocCell> + </DocRow> + <DocRow> + <DocCell>**CPU Usage - iowait (%)**</DocCell> + <DocCell>The percentage of CPU time spent in wait (on disk).</DocCell> + </DocRow> + <DocRow> + <DocCell>**CPU Usage - irq (%)** </DocCell> + <DocCell>The percentage of CPU time spent servicing and handling hardware interrupts.</DocCell> + </DocRow> + <DocRow> + <DocCell>**CPU Usage - nice (%)** </DocCell> + <DocCell>The percentage of CPU time spent on low-priority processes.</DocCell> + </DocRow> + <DocRow> + <DocCell>**CPU Usage - softirq (%)**</DocCell> + <DocCell>The percentage of CPU time spent servicing and handling software interrupts.</DocCell> + </DocRow> + <DocRow> + <DocCell>**CPU Usage - steal (%)** </DocCell> + <DocCell>The percentage of CPU time spent in involuntary wait by the virtual CPU while the hypervisor was servicing another processor. Available only on Unix.</DocCell> + </DocRow> + <DocRow> + <DocCell>**CPU Usage - system (%)** </DocCell> + <DocCell>The percentage of CPU time spent in kernel space.</DocCell> + </DocRow> + <DocRow> + <DocCell>**CPU Usage - user (%)** </DocCell> + <DocCell>The percentage of CPU time spent in user space. On multi-core systems, you can have percentages that are greater than 100%. For example, if 3 cores are at 60% use, then the system.cpu.user.pct will be 180%.</DocCell> + </DocRow> + <DocRow> + <DocCell>**Load (1m)** </DocCell> + <DocCell> + 1 minute load average. + + Load average gives an indication of the number of threads that are runnable (either busy running on CPU, waiting to run, or waiting for a blocking IO operation to complete). + </DocCell> + </DocRow> + <DocRow> + <DocCell>**Load (5m)** </DocCell> + <DocCell> + 5 minute load average. + + Load average gives an indication of the number of threads that are runnable (either busy running on CPU, waiting to run, or waiting for a blocking IO operation to complete). + </DocCell> + </DocRow> + <DocRow> + <DocCell>**Load (15m)** </DocCell> + <DocCell> + 15 minute load average. + + Load average gives an indication of the number of threads that are runnable (either busy running on CPU, waiting to run, or waiting for a blocking IO operation to complete). + </DocCell> + </DocRow> + <DocRow> + <DocCell>**Normalized Load** </DocCell> + <DocCell> + 1 minute load average normalized by the number of CPU cores. + + Load average gives an indication of the number of threads that are runnable (either busy running on CPU, waiting to run, or waiting for a blocking IO operation to complete). + + 100% means the 1 minute load average is equal to the number of CPU cores of the host. + + Taking the example of a 32 CPU cores host, if the 1 minute load average is 32, the value reported here is 100%. If the 1 minute load average is 48, the value reported here is 150%. + </DocCell> + </DocRow> +</DocTable> + +<div id="key-metrics-memory"></div> + +## Memory metrics + +<DocTable columns={[ + { + "title": "Metric", + "width": "50%" + }, + { + "title": "Description", + "width": "50%" + } +]}> + <DocRow> + <DocCell>**Memory Cache** </DocCell> + <DocCell>Memory (page) cache.</DocCell> + </DocRow> + <DocRow> + <DocCell>**Memory Free** </DocCell> + <DocCell>Total available memory.</DocCell> + </DocRow> + <DocRow> + <DocCell>**Memory Free (excluding cache)**</DocCell> + <DocCell>Total available memory excluding the page cache.</DocCell> + </DocRow> + <DocRow> + <DocCell>**Memory Total** </DocCell> + <DocCell>Total memory capacity.</DocCell> + </DocRow> + <DocRow> + <DocCell>**Memory Usage (%)** </DocCell> + <DocCell> + Percentage of main memory usage excluding page cache. + + This includes resident memory for all processes plus memory used by the kernel structures and code apart from the page cache. + + A high level indicates a situation of memory saturation for the host. For example, 100% means the main memory is entirely filled with memory that can't be reclaimed, except by swapping out. + </DocCell> + </DocRow> + <DocRow> + <DocCell>**Memory Used** </DocCell> + <DocCell>Main memory usage excluding page cache.</DocCell> + </DocRow> +</DocTable> + +<div id="key-metrics-log"></div> + +## Log metrics + +| Metric | Description | +|---|---| +| **Log Rate** | Derivative of the cumulative sum of the document count scaled to a 1 second rate. This metric relies on the same indices as the logs. | + +<div id="key-metrics-network"></div> + +## Network metrics + +| Metric | Description | +|---|---| +| **Network Inbound (RX)** | Number of bytes that have been received per second on the public interfaces of the hosts. | +| **Network Inbound (TX)** | Number of bytes that have been sent per second on the public interfaces of the hosts. | + +<div id="key-metrics-disk"></div> + +## Disk metrics + +| Metric | Description | +|---|---| +| **Disk Latency** | Time spent to service disk requests. | +| **Disk Read IOPS** | Average count of read operations from the device per second. | +| **Disk Read Throughput** | Average number of bytes read from the device per second. | +| **Disk Usage - Available (%)** | Percentage of disk space available. | +| **Disk Usage - Max (%)** | Percentage of disk space used. A high percentage indicates that a partition on a disk is running out of space. | +| **Disk Write IOPS** | Average count of write operations from the device per second. | +| **Disk Write Throughput** | Average number of bytes written from the device per second. | + diff --git a/docs/en/serverless/infra-monitoring/infra-monitoring.mdx b/docs/en/serverless/infra-monitoring/infra-monitoring.mdx new file mode 100644 index 0000000000..69542ac125 --- /dev/null +++ b/docs/en/serverless/infra-monitoring/infra-monitoring.mdx @@ -0,0 +1,36 @@ +--- +id: serverlessObservabilityInfrastructureMonitoring +slug: /serverless/observability/infrastructure-monitoring +title: Infrastructure monitoring +description: Monitor metrics from your servers, Docker, Kubernetes, Prometheus, and other services and applications. +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="analyze-metrics"></div> + +Elastic ((observability)) allows you to visualize infrastructure metrics to help diagnose problematic spikes, +identify high resource utilization, automatically discover and track pods, +and unify your metrics with logs and APM data. + +Using ((agent)) integrations, you can ingest and analyze metrics from servers, +Docker containers, Kubernetes orchestrations, explore and analyze application +telemetry, and more. + +For more information, refer to the following links: + +* <DocLink id="serverlessObservabilityGetStartedWithMetrics" />: +Learn how to onboard your system metrics data quickly. +* <DocLink id="serverlessObservabilityViewInfrastructureMetrics" />: +Use the **Inventory page** to get a metrics-driven view of your infrastructure grouped by resource type. +* <DocLink id="serverlessObservabilityAnalyzeHosts" />: +Use the **Hosts** page to get a metrics-driven view of your infrastructure backed by an easy-to-use interface called Lens. +* <DocLink id="serverlessObservabilityDetectMetricAnomalies" />: Detect and inspect memory usage and network traffic anomalies for hosts and Kubernetes pods. +* <DocLink id="serverlessObservabilityConfigureInfraSettings" />: Learn how to configure infrastructure UI settings. +* <DocLink id="serverlessObservabilityMetricsReference" />: Learn about key metrics used for infrastructure monitoring. +* <DocLink id="serverlessObservabilityMetricsFields" />: Learn about the fields required to display data in the Infrastructure UI. + +By default, the Infrastructure UI displays metrics from ((es)) indices that +match the `metrics-*` and `metricbeat-*` index patterns. To learn how to change +this behavior, refer to <DocLink id="serverlessObservabilityConfigureInfraSettings">Configure settings</DocLink>. diff --git a/docs/en/serverless/infra-monitoring/kubernetes-pod-metrics.mdx b/docs/en/serverless/infra-monitoring/kubernetes-pod-metrics.mdx new file mode 100644 index 0000000000..6c3925f840 --- /dev/null +++ b/docs/en/serverless/infra-monitoring/kubernetes-pod-metrics.mdx @@ -0,0 +1,26 @@ +--- +id: serverlessObservabilityKubernetesPodMetrics +slug: /serverless/observability/kubernetes-pod-metrics +title: Kubernetes pod metrics +description: Learn about key metrics used for Kubernetes monitoring. +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="kubernetes-pod-metrics"></div> + +To analyze Kubernetes pod metrics, +you can select view filters based on the following predefined metrics, +or you can add <DocLink id="serverlessObservabilityViewInfrastructureMetrics" section="add-custom-metrics">custom metrics</DocLink>. + + +| | | +|---|---| +| **CPU Usage** | Average of `kubernetes.pod.cpu.usage.node.pct`. | +| **Memory Usage** | Average of `kubernetes.pod.memory.usage.node.pct`. | +| **Inbound Traffic** | Derivative of the maximum of `kubernetes.pod.network.rx.bytes` scaled to a 1 second rate. | +| **Outbound Traffic** | Derivative of the maximum of `kubernetes.pod.network.tx.bytes` scaled to a 1 second rate. | + +For information about the fields used by the Infrastructure UI to display Kubernetes pod metrics, see the +<DocLink id="serverlessObservabilityMetricsFields" />. diff --git a/docs/en/serverless/infra-monitoring/metrics-app-fields.mdx b/docs/en/serverless/infra-monitoring/metrics-app-fields.mdx new file mode 100644 index 0000000000..e7845bc1b7 --- /dev/null +++ b/docs/en/serverless/infra-monitoring/metrics-app-fields.mdx @@ -0,0 +1,452 @@ +--- +id: serverlessObservabilityMetricsFields +slug: /serverless/observability/infrastructure-monitoring-required-fields +title: Required fields +description: Learn about the fields required to display data in the Infrastructure UI. +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +This section lists the fields the Infrastructure UI uses to display data. +Please note that some of the fields listed here are not [ECS fields](((ecs-ref))/ecs-reference.html#_what_is_ecs). + +## Additional field details + +The `event.dataset` field is required to display data properly in some views. This field +is a combination of `metricset.module`, which is the ((metricbeat)) module name, and `metricset.name`, +which is the metricset name. + +To determine each metric's optimal time interval, all charts use `metricset.period`. +If `metricset.period` is not available, then it falls back to 1 minute intervals. + +<div id="base-fields"></div> + +## Base fields + +The `base` field set contains all fields which are on the top level. These fields are common across all types of events. + +<DocTable + columns={[ + { title: "Field", width: "30%" }, + { title: "Description", width: "50%" }, + { title: "Type", width: "20%" } + ]} +> + + <DocRow> + <DocCell>`@timestamp`</DocCell> + <DocCell> + Date/time when the event originated. + + This is the date/time extracted from the event, typically representing when the source generated the event. + If the event source has no original timestamp, this value is typically populated by the first time the pipeline received the event. + Required field for all events. + + Example: `May 27, 2020 @ 15:22:27.982` + </DocCell> + <DocCell>date</DocCell> + </DocRow> + + <DocRow> + <DocCell>`message`</DocCell> + <DocCell> + For log events the message field contains the log message, optimized for viewing in a log viewer. + + For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. + + If multiple messages exist, they can be combined into one message. + + Example: `Hello World` + </DocCell> + <DocCell>text</DocCell> + </DocRow> + </DocTable> + +<div id="host-fields"></div> + +## Hosts fields + +These fields must be mapped to display host data in the ((infrastructure-app)). + +<DocTable + columns={[ + { title: "Field", width: "30%" }, + { title: "Description", width: "50%" }, + { title: "Type", width: "20%" } + ]} +> + + <DocRow> + <DocCell>`host.name`</DocCell> + <DocCell> + Name of the host. + + It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use. + + Example: `MacBook-Elastic.local` + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + <DocRow> + <DocCell>`host.ip`</DocCell> + <DocCell> + IP of the host that records the event. + </DocCell> + <DocCell>ip</DocCell> + </DocRow> + </DocTable> + +<div id="docker-fields"></div> + +## Docker container fields + +These fields must be mapped to display Docker container data in the ((infrastructure-app)). + +<DocTable + columns={[ + { title: "Field", width: "30%" }, + { title: "Description", width: "50%" }, + { title: "Type", width: "20%" } + ]} +> + <DocRow> + <DocCell>`container.id`</DocCell> + <DocCell> + Unique container id. + + Example: `data` + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`container.name`</DocCell> + <DocCell> + Container name. + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`container.ip_address`</DocCell> + <DocCell> + IP of the container. + + *Not an ECS field* + </DocCell> + <DocCell>ip</DocCell> + </DocRow> +</DocTable> + + +<div id="kubernetes-fields"></div> + +## Kubernetes pod fields + +These fields must be mapped to display Kubernetes pod data in the ((infrastructure-app)). + +<DocTable + columns={[ + { title: "Field", width: "30%" }, + { title: "Description", width: "50%" }, + { title: "Type", width: "20%" } + ]} +> + + <DocRow> + <DocCell>`kubernetes.pod.uid`</DocCell> + <DocCell> + Kubernetes Pod UID. + + Example: `8454328b-673d-11ea-7d80-21010a840123` + + *Not an ECS field* + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`kubernetes.pod.name`</DocCell> + <DocCell> + Kubernetes pod name. + + Example: `nginx-demo` + + *Not an ECS field* + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`kubernetes.pod.ip`</DocCell> + <DocCell> + IP of the Kubernetes pod. + + *Not an ECS field* + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + </DocTable> + +<div id="aws-ec2-fields"></div> + +## AWS EC2 instance fields + +These fields must be mapped to display EC2 instance data in the ((infrastructure-app)). + +<DocTable + columns={[ + { title: "Field", width: "30%" }, + { title: "Description", width: "50%" }, + { title: "Type", width: "20%" } + ]} +> + + <DocRow> + <DocCell>`cloud.instance.id`</DocCell> + <DocCell> + Instance ID of the host machine. + + Example: `i-1234567890abcdef0` + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`cloud.instance.name`</DocCell> + <DocCell> + Instance name of the host machine. + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`aws.ec2.instance.public.ip`</DocCell> + <DocCell> + Instance public IP of the host machine. + + *Not an ECS field* + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> +</DocTable> + +<div id="aws-s3-fields"></div> + +## AWS S3 bucket fields + +These fields must be mapped to display S3 bucket data in the ((infrastructure-app)). + +<DocTable + columns={[ + { title: "Field", width: "30%" }, + { title: "Description", width: "50%" }, + { title: "Type", width: "20%" } + ]} +> + <DocRow> + <DocCell>`aws.s3.bucket.name`</DocCell> + <DocCell> + The name or ID of the AWS S3 bucket. + + *Not an ECS field* + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> +</DocTable> + +<div id="aws-sqs-fields"></div> + +## AWS SQS queue fields + +These fields must be mapped to display SQS queue data in the ((infrastructure-app)). + +<DocTable + columns={[ + { title: "Field", width: "30%" }, + { title: "Description", width: "50%" }, + { title: "Type", width: "20%" } + ]} +> + + <DocRow> + <DocCell>`aws.sqs.queue.name`</DocCell> + <DocCell> + The name or ID of the AWS SQS queue. + + *Not an ECS field* + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> +</DocTable> + +<div id="aws-rds-fields"></div> + +## AWS RDS database fields + +These fields must be mapped to display RDS database data in the ((infrastructure-app)). + +<DocTable + columns={[ + { title: "Field", width: "30%" }, + { title: "Description", width: "50%" }, + { title: "Type", width: "20%" } + ]} +> + + <DocRow> + <DocCell>`aws.rds.db_instance.arn`</DocCell> + <DocCell> + Amazon Resource Name (ARN) for each RDS. + + *Not an ECS field* + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`aws.rds.db_instance.identifier`</DocCell> + <DocCell> + Contains a user-supplied database identifier. This identifier is the unique key that identifies a DB instance. + + *Not an ECS field* + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> +</DocTable> + +<div id="group-inventory-fields"></div> + +## Additional grouping fields + +Depending on which entity you select in the **Inventory** view, these additional fields can be mapped to group entities by. + +<DocTable + columns={[ + { title: "Field", width: "30%" }, + { title: "Description", width: "50%" }, + { title: "Type", width: "20%" } + ]} +> + + <DocRow> + <DocCell>`cloud.availability_zone`</DocCell> + <DocCell> + Availability zone in which this host is running. + + Example: `us-east-1c` + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`cloud.machine.type`</DocCell> + <DocCell> + Machine type of the host machine. + + Example: `t2.medium` + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`cloud.region`</DocCell> + <DocCell> + Region in which this host is running. + + Example: `us-east-1` + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`cloud.instance.id`</DocCell> + <DocCell> + Instance ID of the host machine. + + Example: `i-1234567890abcdef0` + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`cloud.provider`</DocCell> + <DocCell> + Name of the cloud provider. Example values are `aws`, `azure`, `gcp`, or `digitalocean`. + + Example: `aws` + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`cloud.instance.name`</DocCell> + <DocCell> + Instance name of the host machine. + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`cloud.project.id`</DocCell> + <DocCell> + Name of the project in Google Cloud. + + *Not an ECS field* + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`service.type`</DocCell> + <DocCell> + The type of service data is collected from. + + The type can be used to group and correlate logs and metrics from one service type. + + For example, the service type for metrics collected from ((es)) is `elasticsearch`. + + Example: `elasticsearch` + + *Not an ECS field* + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`host.hostname`</DocCell> + <DocCell> + Name of the host. This field is required if you want to use ((ml-features)) + + It normally contains what the `hostname` command returns on the host machine. + + Example: `Elastic.local` + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`host.os.name`</DocCell> + <DocCell> + Operating system name, without the version. + + Multi-fields: + + os.name.text (type: text) + + Example: `Mac OS X` + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> + + <DocRow> + <DocCell>`host.os.kernel`</DocCell> + <DocCell> + Operating system kernel version as a raw string. + + Example: `4.4.0-112-generic` + </DocCell> + <DocCell>keyword</DocCell> + </DocRow> +</DocTable> diff --git a/docs/en/serverless/infra-monitoring/metrics-reference.mdx b/docs/en/serverless/infra-monitoring/metrics-reference.mdx new file mode 100644 index 0000000000..f0f4e4b12d --- /dev/null +++ b/docs/en/serverless/infra-monitoring/metrics-reference.mdx @@ -0,0 +1,19 @@ +--- +id: serverlessObservabilityMetricsReference +slug: /serverless/observability/metrics-reference +title: Metrics reference +description: Learn about key metrics used for infrastructure monitoring. +tags: [ 'serverless', 'observability', 'reference' ] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="metrics-reference"></div> + +Learn about the key metrics displayed in the Infrastructure UI and how they +are calculated. + +* <DocLink id="serverlessObservabilityHostMetrics">Host metrics</DocLink> +* <DocLink id="serverlessObservabilityKubernetesPodMetrics">Kubernetes pod metrics</DocLink> +* <DocLink id="serverlessObservabilityDockerContainerMetrics">Docker container metrics</DocLink> +* <DocLink id="serverlessObservabilityAwsMetrics">AWS metrics</DocLink> \ No newline at end of file diff --git a/docs/en/serverless/infra-monitoring/view-infrastructure-metrics.mdx b/docs/en/serverless/infra-monitoring/view-infrastructure-metrics.mdx new file mode 100644 index 0000000000..70141b27c9 --- /dev/null +++ b/docs/en/serverless/infra-monitoring/view-infrastructure-metrics.mdx @@ -0,0 +1,117 @@ +--- +id: serverlessObservabilityViewInfrastructureMetrics +slug: /serverless/observability/view-infrastructure-metrics +title: View infrastructure metrics by resource type +description: Get a metrics-driven view of your infrastructure grouped by resource type. +tags: [ 'serverless', 'observability', 'how to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import HostDetails from '../transclusion/host-details.mdx' + +<div id="view-infrastructure-metrics"></div> + +The **Inventory** page provides a metrics-driven view of your entire infrastructure grouped by +the resources you are monitoring. All monitored resources emitting +a core set of infrastructure metrics are displayed to give you a quick view of the overall health +of your infrastructure. + +To access the **Inventory** page, in your ((observability)) project, +go to **Infrastructure** → **Inventory**. + +![Infrastructure UI in ((kib))](../images/metrics-app.png) + +To learn more about the metrics shown on this page, refer to the <DocLink id="serverlessObservabilityMetricsReference" />. + +<DocCallOut title="Don't see any metrics?"> + +If you haven't added data yet, click **Add data** to search for and install an Elastic integration. + +Need help getting started? Follow the steps in +<DocLink id="serverlessObservabilityGetStartedWithMetrics">Get started with system metrics</DocLink>. + +</DocCallOut> + +<div id="filter-resources"></div> + +## Filter the Inventory view + +To get started with your analysis, select the type of resources you want to show +in the high-level view. From the **Show** menu, select one of the following: + +* **Hosts** (the default) +* **Kubernetes Pods** +* **Docker Containers** +* **AWS**, which includes EC2 instances, S3 buckets, RDS databases, and SQS queues + +When you hover over each resource in the waffle map, the metrics specific to +that resource are displayed. + +You can sort by resource, group the resource by specific fields related to it, and sort by +either name or metric value. For example, you can filter the view to display the memory usage +of your Kubernetes pods, grouped by namespace, and sorted by the memory usage value. + +![Kubernetes pod filtering](../images/kubernetes-filter.png) + +You can also use the search bar to create structured queries using [((kib)) Query Language](((kibana-ref))/kuery-query.html). +For example, enter `host.hostname : "host1"` to view only the information for `host1`. + +To examine the metrics for a specific time, use the time filter to select the date and time. + +<div id="analyze-hosts-inventory"></div> + +## View host metrics + +By default the **Inventory** page displays a waffle map that shows the hosts you +are monitoring and the current CPU usage for each host. +Alternatively, you can click the **Table view** icon <DocImage flatImage alt="Table view icon" url="../images/table-view-icon.png" /> +to switch to a table view. + +Without leaving the **Inventory** page, you can view enhanced metrics relating to each host +running in your infrastructure. On the waffle map, select a host to display the host details +overlay. + +<DocCallOut title="Tip"> +To expand the overlay and view more detail, click **Open as page** in the upper-right corner. +</DocCallOut> + +The host details overlay contains the following tabs: + +<HostDetails /> + +<DocCallOut title="Note"> +These metrics are also available when viewing hosts on the **Hosts** +page. +</DocCallOut> + +<div id="analyze-resource-metrics"></div> + +## View metrics for other resources + +When you have searched and filtered for a specific resource, you can drill down to analyze the +metrics relating to it. For example, when viewing Kubernetes Pods in the high-level view, +click the Pod you want to analyze and select **Kubernetes Pod metrics** to see detailed metrics: + +![Kubernetes pod metrics](../images/pod-metrics.png) + +<div id="custom-metrics"></div> + +## Add custom metrics + +If the predefined metrics displayed on the Inventory page for each resource are not +sufficient for your specific use case, you can add and define custom metrics. + +Select your resource, and from the **Metric** filter menu, click **Add metric**. + +![Add custom metrics](../images/add-custom-metric.png) + +<div id="apm-uptime-integration"></div> + +## Integrate with Logs and APM + +Depending on the features you have installed and configured, you can view logs or traces relating to a specific resource. +For example, in the high-level view, when you click a Kubernetes Pod resource, you can choose: + +* **Kubernetes Pod logs** to <DocLink id="serverlessObservabilityLogMonitoring" text="view corresponding logs" /> in the ((logs-app)). +* **Kubernetes Pod APM traces** to <DocLink id="serverlessObservabilityApm" text="view corresponding APM traces" /> in the ((apm-app)). diff --git a/docs/en/serverless/logging/correlate-application-logs.mdx b/docs/en/serverless/logging/correlate-application-logs.mdx new file mode 100644 index 0000000000..ccbb21365e --- /dev/null +++ b/docs/en/serverless/logging/correlate-application-logs.mdx @@ -0,0 +1,90 @@ +--- +id: serverlessObservabilityCorrelateApplicationLogs +slug: /serverless/observability/correlate-application-logs +title: Stream application logs +description: Learn about application logs and options for ingesting them. +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import CorrelateLogs from '../transclusion/observability/application-logs/correlate-logs.mdx' + +Application logs provide valuable insight into events that have occurred within your services and applications. + +The format of your logs (structured or plaintext) influences your log ingestion strategy. + +## Plaintext logs vs. structured Elastic Common Schema (ECS) logs + +Logs are typically produced as either plaintext or structured. +Plaintext logs contain only text and have no special formatting, for example: + +```log +2019-08-06T12:09:12.375Z INFO:spring-petclinic: Tomcat started on port(s): 8080 (http) with context path, org.springframework.boot.web.embedded.tomcat.TomcatWebServer +2019-08-06T12:09:12.379Z INFO:spring-petclinic: Started PetClinicApplication in 7.095 seconds (JVM running for 9.082), org.springframework.samples.petclinic.PetClinicApplication +2019-08-06T14:08:40.199Z DEBUG:spring-petclinic: init find form, org.springframework.samples.petclinic.owner.OwnerController +``` + +Structured logs follow a predefined, repeatable pattern or structure. +This structure is applied at write time — preventing the need for parsing at ingest time. +The Elastic Common Schema (ECS) defines a common set of fields to use when structuring logs. +This structure allows logs to be easily ingested, +and provides the ability to correlate, search, and aggregate on individual fields within your logs. + +For example, the previous example logs might look like this when structured with ECS-compatible JSON: + +```json +{"@timestamp":"2019-08-06T12:09:12.375Z", "log.level": "INFO", "message":"Tomcat started on port(s): 8080 (http) with context path ''", "service.name":"spring-petclinic","process.thread.name":"restartedMain","log.logger":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer"} +{"@timestamp":"2019-08-06T12:09:12.379Z", "log.level": "INFO", "message":"Started PetClinicApplication in 7.095 seconds (JVM running for 9.082)", "service.name":"spring-petclinic","process.thread.name":"restartedMain","log.logger":"org.springframework.samples.petclinic.PetClinicApplication"} +{"@timestamp":"2019-08-06T14:08:40.199Z", "log.level":"DEBUG", "message":"init find form", "service.name":"spring-petclinic","process.thread.name":"http-nio-8080-exec-8","log.logger":"org.springframework.samples.petclinic.owner.OwnerController","transaction.id":"28b7fb8d5aba51f1","trace.id":"2869b25b5469590610fea49ac04af7da"} +``` + +## Ingesting logs + +There are several ways to ingest application logs into your project. +Your specific situation helps determine the method that's right for you. + +### Plaintext logs + +With ((filebeat)) or ((agent)), you can ingest plaintext logs, including existing logs, from any programming language or framework without modifying your application or its configuration. + +For plaintext logs to be useful, you need to use ((filebeat)) or ((agent)) to parse the log data. + +**<DocIcon type="documentation" title="documentation icon" /> Learn more in <DocLink id="serverlessObservabilityPlaintextApplicationLogs">Plaintext logs</DocLink>** + +### ECS formatted logs + +Logs formatted in ECS don't require manual parsing and the configuration can be reused across applications. They also include log correlation. You can format your logs in ECS by using ECS logging plugins or ((apm-agent)) ECS reformatting. + +#### ECS logging plugins + +Add ECS logging plugins to your logging libraries to format your logs into ECS-compatible JSON that doesn't require parsing. + +To use ECS logging, you need to modify your application and its log configuration. + +**<DocIcon type="documentation" title="documentation icon" /> Learn more in <DocLink id="serverlessObservabilityECSApplicationLogs">ECS formatted logs</DocLink>** + +#### ((apm-agent)) log reformatting + +Some Elastic ((apm-agent))s can automatically reformat application logs to ECS format +without adding an ECS logger dependency or modifying the application. + +This feature is supported for the following ((apm-agent))s: + +* [Ruby](((apm-ruby-ref))/log-reformat.html) +* [Python](((apm-py-ref))/logs.html#log-reformatting) +* [Java](((apm-java-ref))/logs.html#log-reformatting) + +**<DocIcon type="documentation" title="documentation icon" /> Learn more in <DocLink id="serverlessObservabilityECSApplicationLogs">ECS formatted logs</DocLink>** + +### ((apm-agent)) log sending + +Automatically capture and send logs directly to the managed intake service using the ((apm-agent)) without using ((filebeat)) or ((agent)). + +Log sending is supported in the Java ((apm-agent)). + +**<DocIcon type="documentation" title="documentation icon" /> Learn more in <DocLink id="serverlessObservabilitySendApplicationLogs">((apm-agent)) log sending</DocLink>** + +## Log correlation + +<CorrelateLogs /> \ No newline at end of file diff --git a/docs/en/serverless/logging/ecs-application-logs.mdx b/docs/en/serverless/logging/ecs-application-logs.mdx new file mode 100644 index 0000000000..17776d3efc --- /dev/null +++ b/docs/en/serverless/logging/ecs-application-logs.mdx @@ -0,0 +1,186 @@ +--- +id: serverlessObservabilityECSApplicationLogs +slug: /serverless/observability/ecs-application-logs +title: ECS formatted application logs +description: Use an ECS logger or an ((apm-agent)) to format your logs in ECS format. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import InstallWidget from '../transclusion/observability/tab-widgets/filebeat-install/widget.mdx' +import SetupWidget from '../transclusion/observability/tab-widgets/filebeat-setup/widget.mdx' +import StartWidget from '../transclusion/observability/tab-widgets/filebeat-start/widget.mdx' +import ConfigureFilebeat from '../transclusion/observability/tab-widgets/filebeat-logs/widget.mdx' + +<div id="ecs-logging-logs"></div> + +Logs formatted in Elastic Common Schema (ECS) don't require manual parsing, and the configuration can be reused across applications. ECS-formatted logs, when paired with an ((apm-agent)), allow you to correlate logs to easily view logs that belong to a particular trace. + +You can format your logs in ECS format the following ways: +* <DocLink id="serverlessObservabilityECSApplicationLogs" section="ecs-loggers">**ECS loggers:**</DocLink> plugins for your logging libraries that reformat your logs into ECS format. +* <DocLink id="serverlessObservabilityECSApplicationLogs" section="apm-agent-ecs-reformatting">**((apm-agent)) ECS reformatting:**</DocLink> Java, Ruby, and Python ((apm-agent))s automatically reformat application logs to ECS format without a logger. + +## ECS loggers + +ECS loggers reformat your application logs into ECS-compatible JSON, removing the need for manual parsing. +ECS loggers require ((filebeat)) or ((agent)) configured to monitor and capture application logs. +In addition, pairing ECS loggers with your framework's ((apm-agent)) allows you to correlate logs to easily view logs that belong to a particular trace. + +### Get started + +For more information on adding an ECS logger to your application, refer to the guide for your framework: + +* [.NET](((ecs-logging-dotnet-ref))/setup.html) +* Go: [zap](((ecs-logging-go-zap-ref))/setup.html), [logrus](((ecs-logging-go-logrus-ref))/setup.html) +* [Java](((ecs-logging-java-ref))/setup.html) +* Node.js: [morgan](((ecs-logging-nodejs-ref))/morgan.html), [pino](((ecs-logging-nodejs-ref))/pino.html), [winston](((ecs-logging-nodejs-ref))/winston.html) +* [PHP](((ecs-logging-php-ref))/setup.html) +* [Python](((ecs-logging-python-ref))/installation.html) +* [Ruby](((ecs-logging-ruby-ref))/setup.html) + +<div id="reformatting-logs"></div> + +## APM agent ECS reformatting + +Java, Ruby, and Python ((apm-agent))s can automatically reformat application logs to ECS format without an ECS logger or the need to modify your application. The ((apm-agent)) also allows for log correlation so you can easily view logs that belong to a particular trace. + +To set up log ECS reformatting: + +1. <DocLink id="serverlessObservabilityECSApplicationLogs" section="enable-log-ecs-reformatting">Enable ((apm-agent)) reformatting</DocLink> +1. <DocLink id="serverlessObservabilityECSApplicationLogs" section="ingest-logs">Ingest logs with ((filebeat)) or ((agent)).</DocLink> +1. <DocLink id="serverlessObservabilityECSApplicationLogs" section="view-logs">View logs in Logs Explorer</DocLink> + +### Enable log ECS reformatting + +Log ECS reformatting is controlled by the `log_ecs_reformatting` configuration option, and is disabled by default. Refer to the guide for your framework for information on enabling: + +* [Java](((apm-java-ref))/config-logging.html#config-log-ecs-reformatting) +* [Ruby](((apm-ruby-ref))/configuration.html#config-log-ecs-formatting) +* [Python](((apm-py-ref))/configuration.html#config-log_ecs_reformatting) + +### Ingest logs + +After enabling log ECS reformatting, send your application logs to your project using one of the following shipping tools: + +* <DocLink id="serverlessObservabilityECSApplicationLogs" section="ingest-logs-with-filebeat">**((filebeat)):**</DocLink> A lightweight data shipper that sends log data to your project. +* <DocLink id="serverlessObservabilityECSApplicationLogs" section="ingest-logs-with-agent">**((agent)):**</DocLink> A single agent for logs, metrics, security data, and threat prevention. With Fleet, you can centrally manage ((agent)) policies and lifecycles directly from your project. + +### Ingest logs with ((filebeat)) + +<DocCallOut title="Important"> +Use ((filebeat)) version 8.11+ for the best experience when ingesting logs with ((filebeat)). +</DocCallOut> + +Follow these steps to ingest application logs with ((filebeat)). + +#### Step 1: Install ((filebeat)) + +Install ((filebeat)) on the server you want to monitor by running the commands that align with your system: + +<InstallWidget /> + +#### Step 2: Connect to your project + +Connect to your project using an API key to set up ((filebeat)). Set the following information in the `filebeat.yml` file: + +```yaml +output.elasticsearch: + hosts: ["your-projects-elasticsearch-endpoint"] + api_key: "id:api_key" +``` + +1. Set the `hosts` to your project's ((es)) endpoint. Locate your project's endpoint by clicking the help icon (<DocIcon type="help" title="Help icon" />) and selecting **Endpoints**. Add the **((es)) endpoint** to your configuration. +1. From **Developer tools**, run the following command to create an API key that grants `manage` permissions for the `cluster` and the `filebeat-*` indices using: + + ```shell + POST /_security/api_key + { + "name": "filebeat_host001", + "role_descriptors": { + "filebeat_writer": { + "cluster": ["manage"], + "index": [ + { + "names": ["filebeat-*"], + "privileges": ["manage"] + } + ] + } + } + } + ``` + + Refer to [Grant access using API keys](((filebeat-ref))/beats-api-keys.html) for more information. + +#### Step 3: Configure ((filebeat)) + +Add the following configuration to your `filebeat.yaml` file to start collecting log data. + +<ConfigureFilebeat + plaintext={false} + ecs_logs={true} + intro_text={false} +/> + +#### Step 4: Set up and start ((filebeat)) + +From the ((filebeat)) installation directory, set the [index template](((ref))/index-templates.html) by running the command that aligns with your system: + +<SetupWidget /> + +From the ((filebeat)) installation directory, start filebeat by running the command that aligns with your system: + +<StartWidget /> + +### Ingest logs with ((agent)) + +Add the custom logs integration to ingest and centrally manage your logs using ((agent)) and ((fleet)): + +#### Step 1: Add the custom logs integration to your project + +To add the custom logs integration to your project: + +1. In your ((observability)) project, go to **Project Settings** → **Integrations**. +1. Type `custom` in the search bar and select **Custom Logs**. +1. Click **Install ((agent))** at the bottom of the page, and follow the instructions for your system to install the ((agent)). If you've already installed an ((agent)), you'll be taken directly to configuring your integration. +1. After installing the ((agent)), click **Save and continue** to configure the integration from the **Add Custom Logs integration** page. +1. Give your integration a meaningful name and description. +1. Add the **Log file path**. For example, `/var/log/your-logs.log`. +1. Under **Custom log file**, click **Advanced options**. + <DocImage size="2" url="../images/custom-logs-advanced-options.png" alt="Screenshot of advanced options location" /> +1. In the **Processors** text box, add the following YAML configuration to add processors that enhance your data. See [processors](((filebeat-ref))/filtering-and-enhancing-data.html) to learn more. + + ```yaml + processors: + - add_host_metadata: ~ + - add_cloud_metadata: ~ + - add_docker_metadata: ~ + - add_kubernetes_metadata: ~ + ``` +1. Under **Custom configurations**, add the following YAML configuration to collect data. + + ```yaml + json: + overwrite_keys: true [^1] + add_error_key: true [^2] + expand_keys: true [^3] + keys_under_root: true [^4] + fields_under_root: true [^5] + fields: + service.name: your_service_name [^6] + service.version: your_service_version [^6] + service.environment: your_service_environment [^6] + ``` + [^1]: Values from the decoded JSON object overwrite the fields that ((agent)) normally adds (type, source, offset, etc.) in case of conflicts. + [^2]: ((agent)) adds an "error.message" and "error.type: json" key in case of JSON unmarshalling errors. + [^3]: ((agent)) will recursively de-dot keys in the decoded JSON, and expand them into a hierarchical object structure. + [^4]: By default, the decoded JSON is placed under a "json" key in the output document. When set to `true`, the keys are copied top level in the output document. + [^5]: When set to `true`, custom fields are stored as top-level fields in the output document instead of being grouped under a fields sub-dictionary. + [^6]: The `service.name` (required), `service.version` (optional), and `service.environment` (optional) of the service you're collecting logs from, used for <DocLink id="serverlessObservabilityCorrelateApplicationLogs" section="log-correlation">Log correlation</DocLink>. +1. An agent policy is created that defines the data your ((agent)) collects. If you've previously installed an ((agent)) on the host you're collecting logs from, you can select the **Existing hosts** tab and use an existing agent policy. +1. Click **Save and continue**. + +## View logs + +Use <DocLink id="serverlessObservabilityDiscoverAndExploreLogs">Logs Explorer</DocLink> to search, filter, and visualize your logs. Refer to the <DocLink id="serverlessObservabilityFilterAndAggregateLogs">filter and aggregate logs</DocLink> documentation for more information. \ No newline at end of file diff --git a/docs/en/serverless/logging/filter-and-aggregate-logs.mdx b/docs/en/serverless/logging/filter-and-aggregate-logs.mdx new file mode 100644 index 0000000000..7d003a7746 --- /dev/null +++ b/docs/en/serverless/logging/filter-and-aggregate-logs.mdx @@ -0,0 +1,342 @@ +--- +id: serverlessObservabilityFilterAndAggregateLogs +slug: /serverless/observability/filter-and-aggregate-logs +title: Filter and aggregate logs +# description: Description to be written +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Filter and aggregate your log data to find specific information, gain insight, and monitor your systems more efficiently. You can filter and aggregate based on structured fields like timestamps, log levels, and IP addresses that you've extracted from your log data. + +This guide shows you how to: + +* <DocLink id="serverlessObservabilityFilterAndAggregateLogs" section="filter-logs">Filter logs</DocLink>: Narrow down your log data by applying specific criteria. +* <DocLink id="serverlessObservabilityFilterAndAggregateLogs" section="aggregate-logs">Aggregate logs</DocLink>: Analyze and summarize data to find patterns and gain insight. + +<div id="logs-filter-and-aggregate-prereq"></div> + +## Before you get started + +import Roles from '../partials/roles.mdx' + +<Roles role="Admin" goal="create ingest pipelines and set the index template" /> + +The examples on this page use the following ingest pipeline and index template, which you can set in **Developer Tools**. If you haven't used ingest pipelines and index templates to parse your log data and extract structured fields yet, start with the <DocLink id="serverlessObservabilityParseLogData">Parse and organize logs</DocLink> documentation. + +Set the ingest pipeline with the following command: + +```console +PUT _ingest/pipeline/logs-example-default +{ + "description": "Extracts the timestamp log level and host ip", + "processors": [ + { + "dissect": { + "field": "message", + "pattern": "%{@timestamp} %{log.level} %{host.ip} %{message}" + } + } + ] +} +``` + +Set the index template with the following command: + +```console +PUT _index_template/logs-example-default-template +{ + "index_patterns": [ "logs-example-*" ], + "data_stream": { }, + "priority": 500, + "template": { + "settings": { + "index.default_pipeline":"logs-example-default" + } + }, + "composed_of": [ + "logs-mappings", + "logs-settings", + "logs@custom", + "ecs@dynamic_templates" + ], + "ignore_missing_component_templates": ["logs@custom"] +} +``` + +<div id="logs-filter"></div> + +## Filter logs + +Filter your data using the fields you've extracted so you can focus on log data with specific log levels, timestamp ranges, or host IPs. You can filter your log data in different ways: + +- <DocLink id="serverlessObservabilityFilterAndAggregateLogs" section="filter-logs-in-logs-explorer">Filter logs in Logs Explorer</DocLink>: Filter and visualize log data in Logs Explorer. +- <DocLink id="serverlessObservabilityFilterAndAggregateLogs" section="filter-logs-with-query-dsl">Filter logs with Query DSL</DocLink>: Filter log data from Developer Tools using Query DSL. + +<div id="logs-filter-logs-explorer"></div> + +### Filter logs in Logs Explorer + +Logs Explorer is a tool that automatically provides views of your log data based on integrations and data streams. To open Logs Explorer, go to **Discover** and select the **Logs Explorer** tab. + +From Logs Explorer, you can use the [((kib)) Query Language (KQL)](((kibana-ref))/kuery-query.html) in the search bar to narrow down the log data that's displayed. +For example, you might want to look into an event that occurred within a specific time range. + +Add some logs with varying timestamps and log levels to your data stream: + +1. In your Observability project, go to **Developer Tools**. +1. In the **Console** tab, run the following command: + +```console +POST logs-example-default/_bulk +{ "create": {} } +{ "message": "2023-09-15T08:15:20.234Z WARN 192.168.1.101 Disk usage exceeds 90%." } +{ "create": {} } +{ "message": "2023-09-14T10:30:45.789Z ERROR 192.168.1.102 Critical system failure detected." } +{ "create": {} } +{ "message": "2023-09-10T14:20:45.789Z ERROR 192.168.1.105 Database connection lost." } +{ "create": {} } +{ "message": "2023-09-20T09:40:32.345Z INFO 192.168.1.106 User logout initiated." } +``` + +For this example, let's look for logs with a `WARN` or `ERROR` log level that occurred on September 14th or 15th. From Logs Explorer: + +1. Add the following KQL query in the search bar to filter for logs with log levels of `WARN` or `ERROR`: + + ```text + log.level: ("ERROR" or "WARN") + ``` + +1. Click the current time range, select **Absolute**, and set the **Start date** to `Sep 14, 2023 @ 00:00:00.000`. + + <DocImage size="l" url="../images/logs-start-date.png" alt="Set the time range start date" /> + +1. Click the end of the current time range, select **Absolute**, and set the **End date** to `Sep 15, 2023 @ 23:59:59.999`. + + <DocImage size="l" url="../images/logs-end-date.png" alt="Set the time range end date" /> + +Under the **Documents** tab, you'll see the filtered log data matching your query. + +![](../images/logs-kql-filter.png) + +For more on using Logs Explorer, refer to the [Discover](((kibana-ref))/discover.html) documentation. + +<div id="logs-filter-qdsl"></div> + +### Filter logs with Query DSL + +[Query DSL](((ref))/query-dsl.html) is a JSON-based language that sends requests and retrieves data from indices and data streams. You can filter your log data using Query DSL from **Developer Tools**. + +For example, you might want to troubleshoot an issue that happened on a specific date or at a specific time. To do this, use a boolean query with a [range query](((ref))/query-dsl-range-query.html) to filter for the specific timestamp range and a [term query](((ref))/query-dsl-term-query.html) to filter for `WARN` and `ERROR` log levels. + +First, from **Developer Tools**, add some logs with varying timestamps and log levels to your data stream with the following command: + +```console +POST logs-example-default/_bulk +{ "create": {} } +{ "message": "2023-09-15T08:15:20.234Z WARN 192.168.1.101 Disk usage exceeds 90%." } +{ "create": {} } +{ "message": "2023-09-14T10:30:45.789Z ERROR 192.168.1.102 Critical system failure detected." } +{ "create": {} } +{ "message": "2023-09-10T14:20:45.789Z ERROR 192.168.1.105 Database connection lost." } +{ "create": {} } +{ "message": "2023-09-20T09:40:32.345Z INFO 192.168.1.106 User logout initiated." } +``` + +Let's say you want to look into an event that occurred between September 14th and 15th. The following boolean query filters for logs with timestamps during those days that also have a log level of `ERROR` or `WARN`. + +```console +POST /logs-example-default/_search +{ + "query": { + "bool": { + "filter": [ + { + "range": { + "@timestamp": { + "gte": "2023-09-14T00:00:00", + "lte": "2023-09-15T23:59:59" + } + } + }, + { + "terms": { + "log.level": ["WARN", "ERROR"] + } + } + ] + } + } +} +``` + +The filtered results should show `WARN` and `ERROR` logs that occurred within the timestamp range: + +```JSON +{ + ... + "hits": { + ... + "hits": [ + { + "_index": ".ds-logs-example-default-2023.09.25-000001", + "_id": "JkwPzooBTddK4OtTQToP", + "_score": 0, + "_source": { + "message": "192.168.1.101 Disk usage exceeds 90%.", + "log": { + "level": "WARN" + }, + "@timestamp": "2023-09-15T08:15:20.234Z" + } + }, + { + "_index": ".ds-logs-example-default-2023.09.25-000001", + "_id": "A5YSzooBMYFrNGNwH75O", + "_score": 0, + "_source": { + "message": "192.168.1.102 Critical system failure detected.", + "log": { + "level": "ERROR" + }, + "@timestamp": "2023-09-14T10:30:45.789Z" + } + } + ] + } +} +``` + +<div id="logs-aggregate"></div> + +## Aggregate logs +Use aggregation to analyze and summarize your log data to find patterns and gain insight. [Bucket aggregations](((ref))/search-aggregations-bucket.html) organize log data into meaningful groups making it easier to identify patterns, trends, and anomalies within your logs. + +For example, you might want to understand error distribution by analyzing the count of logs per log level. + +First, from **Developer Tools**, add some logs with varying log levels to your data stream using the following command: + +```console +POST logs-example-default/_bulk +{ "create": {} } +{ "message": "2023-09-15T08:15:20.234Z WARN 192.168.1.101 Disk usage exceeds 90%." } +{ "create": {} } +{ "message": "2023-09-14T10:30:45.789Z ERROR 192.168.1.102 Critical system failure detected." } +{ "create": {} } +{ "message": "2023-09-15T12:45:55.123Z INFO 192.168.1.103 Application successfully started." } +{ "create": {} } +{ "message": "2023-09-14T15:20:10.789Z WARN 192.168.1.104 Network latency exceeding threshold." } +{ "create": {} } +{ "message": "2023-09-10T14:20:45.789Z ERROR 192.168.1.105 Database connection lost." } +{ "create": {} } +{ "message": "2023-09-20T09:40:32.345Z INFO 192.168.1.106 User logout initiated." } +{ "create": {} } +{ "message": "2023-09-21T15:20:55.678Z DEBUG 192.168.1.102 Database connection established." } +``` + +Next, run this command to aggregate your log data using the `log.level` field: + +```console +POST logs-example-default/_search?size=0&filter_path=aggregations +{ +"size": 0, [^1] +"aggs": { + "log_level_distribution": { + "terms": { + "field": "log.level" + } + } + } +} +``` +[^1]: Searches with an aggregation return both the query results and the aggregation, so you would see the logs matching the data and the aggregation. Setting `size` to `0` limits the results to aggregations. + +The results should show the number of logs in each log level: + +```JSON +{ + "aggregations": { + "error_distribution": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "ERROR", + "doc_count": 2 + }, + { + "key": "INFO", + "doc_count": 2 + }, + { + "key": "WARN", + "doc_count": 2 + }, + { + "key": "DEBUG", + "doc_count": 1 + } + ] + } + } +} +``` + +You can also combine aggregations and queries. For example, you might want to limit the scope of the previous aggregation by adding a range query: + +```console +GET /logs-example-default/_search +{ + "size": 0, + "query": { + "range": { + "@timestamp": { + "gte": "2023-09-14T00:00:00", + "lte": "2023-09-15T23:59:59" + } + } + }, + "aggs": { + "my-agg-name": { + "terms": { + "field": "log.level" + } + } + } +} +``` + +The results should show an aggregate of logs that occurred within your timestamp range: + +```JSON +{ + ... + "hits": { + ... + "hits": [] + }, + "aggregations": { + "my-agg-name": { + "doc_count_error_upper_bound": 0, + "sum_other_doc_count": 0, + "buckets": [ + { + "key": "WARN", + "doc_count": 2 + }, + { + "key": "ERROR", + "doc_count": 1 + }, + { + "key": "INFO", + "doc_count": 1 + } + ] + } + } +} +``` + +For more on aggregation types and available aggregations, refer to the [Aggregations](((ref))/search-aggregations.html) documentation. diff --git a/docs/en/serverless/logging/get-started-with-logs.mdx b/docs/en/serverless/logging/get-started-with-logs.mdx new file mode 100644 index 0000000000..a03f38ad12 --- /dev/null +++ b/docs/en/serverless/logging/get-started-with-logs.mdx @@ -0,0 +1,46 @@ +--- +id: serverlessObservabilityGetStartedWithLogs +slug: /serverless/observability/get-started-with-logs +title: Get started with system logs +description: Learn how to onboard your system log data quickly. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Admin" goal="onboard log data" /> + +In this guide you'll learn how to onboard system log data from a machine or server, +then observe the data in **Logs Explorer**. + +To onboard system log data: + +1. <DocLink id="serverlessObservabilityCreateAnObservabilityProject">Create a new ((observability)) project</DocLink>, or open an existing one. +1. In your ((observability)) project, go to **Add data**. +1. Under **Collect and analyze logs**, click **Stream host system logs**. +When the page loads, the system integration is installed automatically, and a new API key is created. +Make sure you copy the API key and store it in a secure location. +1. Follow the in-product steps to install and configure the ((agent)). +Notice that you can choose to download the agent's config automatically to avoid adding it manually. + +After the agent is installed and successfully streaming log data, you can view the data in the UI: + +1. From the navigation menu, go to **Discover** and select the **Logs Explorer** tab. The view shows all log datasets. +Notice you can add fields, change the view, expand a document to see details, +and perform other actions to explore your data. +1. Click **All log datasets** and select **System** → **syslog** to show syslog logs. + +![Screen capture of the Logs Explorer showing syslog dataset selected](../images/log-explorer-select-syslogs.png) + +## Next steps + +Now that you've added system logs and explored your data, +learn how to onboard other types of data: + +* <DocLink id="serverlessObservabilityStreamLogFiles"/> +* <DocLink id="serverlessObservabilityApmGetStarted"/> + +To onboard other types of data, select **Add Data** from the main menu. + diff --git a/docs/en/serverless/logging/log-monitoring.mdx b/docs/en/serverless/logging/log-monitoring.mdx new file mode 100644 index 0000000000..4b95b5e6dd --- /dev/null +++ b/docs/en/serverless/logging/log-monitoring.mdx @@ -0,0 +1,91 @@ +--- +id: serverlessObservabilityLogMonitoring +slug: /serverless/observability/log-monitoring +title: Log monitoring +description: Use Elastic to deploy and manage logs at a petabyte scale, and get insights from your logs in minutes. +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Elastic Observability allows you to deploy and manage logs at a petabyte scale, giving you insights into your logs in minutes. You can also search across your logs in one place, troubleshoot in real time, and detect patterns and outliers with categorization and anomaly detection. For more information, refer to the following links: + +- <DocLink id="serverlessObservabilityGetStartedWithLogs">Get started with system logs</DocLink>: Onboard system log data from a machine or server. +- <DocLink id="serverlessObservabilityStreamLogFiles">Stream any log file</DocLink>: Send log files to your Observability project using a standalone ((agent)). +- <DocLink id="serverlessObservabilityParseLogData">Parse and route logs</DocLink>: Parse your log data and extract structured fields that you can use to analyze your data. +- <DocLink id="serverlessObservabilityFilterAndAggregateLogs" section="filter-logs">Filter and aggregate logs</DocLink>: Filter and aggregate your log data to find specific information, gain insight, and monitor your systems more efficiently. +- <DocLink id="serverlessObservabilityDiscoverAndExploreLogs">Explore logs</DocLink>: Find information on visualizing and analyzing logs. +- <DocLink id="serverlessObservabilityRunLogPatternAnalysis">Run pattern analysis on log data</DocLink>: Find patterns in unstructured log messages and make it easier to examine your data. +- <DocLink id="serverlessObservabilityTroubleshootLogs">Troubleshoot logs</DocLink>: Find solutions for errors you might encounter while onboarding your logs. + +## Send logs data to your project + +You can send logs data to your project in different ways depending on your needs: + +- ((agent)) +- ((filebeat)) + +When choosing between ((agent)) and ((filebeat)), consider the different features and functionalities between the two options. +See [((beats)) and ((agent)) capabilities](((fleet-guide))/beats-agent-comparison.html) for more information on which option best fits your situation. + +### ((agent)) + +((agent)) uses [integrations](https://www.elastic.co/integrations/data-integrations) to ingest logs from Kubernetes, MySQL, and many more data sources. +You have the following options when installing and managing an ((agent)): + +#### ((fleet))-managed ((agent)) + +Install an ((agent)) and use ((fleet)) to define, configure, and manage your agents in a central location. + +See [install ((fleet))-managed ((agent))](((fleet-guide))/install-fleet-managed-elastic-agent.html). + +#### Standalone ((agent)) + +Install an ((agent)) and manually configure it locally on the system where it’s installed. +You are responsible for managing and upgrading the agents. + +See [install standalone ((agent))](((fleet-guide))/install-standalone-elastic-agent.html). + +#### ((agent)) in a containerized environment + +Run an ((agent)) inside of a container — either with ((fleet-server)) or standalone. + +See [install ((agent)) in containers](((fleet-guide))/install-elastic-agents-in-containers.html). + +### ((filebeat)) + +((filebeat)) is a lightweight shipper for forwarding and centralizing log data. +Installed as a service on your servers, ((filebeat)) monitors the log files or locations that you specify, collects log events, and forwards them to your Observability project for indexing. + +- [((filebeat)) overview](((filebeat-ref))/filebeat-overview.html): General information on ((filebeat)) and how it works. +- [((filebeat)) quick start](((filebeat-ref))/filebeat-installation-configuration.html): Basic installation instructions to get you started. +- [Set up and run ((filebeat))](((filebeat-ref))/setting-up-and-running.html): Information on how to install, set up, and run ((filebeat)). + +## Configure logs + +The following resources provide information on configuring your logs: + +- [Data streams](((ref))/data-streams.html): Efficiently store append-only time series data in multiple backing indices partitioned by time and size. +- [Data views](((kibana-ref))/data-views.html): Query log entries from the data streams of specific datasets or namespaces. +- [Index lifecycle management](((ref))/example-using-index-lifecycle-policy.html): Configure the built-in logs policy based on your application's performance, resilience, and retention requirements. +- [Ingest pipeline](((ref))/ingest.html): Parse and transform log entries into a suitable format before indexing. +- [Mapping](((ref))/mapping.html): Define how data is stored and indexed. + +## View and monitor logs + +Use **Logs Explorer** to search, filter, and tail all your logs ingested into your project in one place. + +The following resources provide information on viewing and monitoring your logs: + +- <DocLink id="serverlessObservabilityDiscoverAndExploreLogs">Discover and explore</DocLink>: Discover and explore all of the log events flowing in from your servers, virtual machines, and containers in a centralized view. +- <DocLink id="serverlessObservabilityAiopsDetectAnomalies">Detect log anomalies</DocLink>: Use ((ml)) to detect log anomalies automatically. + +## Application logs + +Application logs provide valuable insight into events that have occurred within your services and applications. +See <DocLink id="serverlessObservabilityCorrelateApplicationLogs">Application logs</DocLink>. + +{/* ## Create a logs threshold alert + +You can create a rule to send an alert when the log aggregation exceeds a threshold. +See <DocLink id="serverlessObservabilityCreateLogThresholdRule">Create a logs threshold rule</DocLink>. */} diff --git a/docs/en/serverless/logging/parse-log-data.mdx b/docs/en/serverless/logging/parse-log-data.mdx new file mode 100644 index 0000000000..7d8a40880c --- /dev/null +++ b/docs/en/serverless/logging/parse-log-data.mdx @@ -0,0 +1,845 @@ +--- +id: serverlessObservabilityParseLogData +slug: /serverless/observability/parse-log-data +title: Parse and route logs +# description: Description to be written +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Admin" goal="create ingest pipelines that parse and route logs" /> + +If your log data is unstructured or semi-structured, you can parse it and break it into meaningful fields. You can use those fields to explore and analyze your data. For example, you can find logs within a specific timestamp range or filter logs by log level to focus on potential issues. + +After parsing, you can use the structured fields to further organize your logs by configuring a reroute processor to send specific logs to different target data streams. + +Refer to the following sections for more on parsing and organizing your log data: + +* <DocLink id="serverlessObservabilityParseLogData" section="extract-structured-fields">Extract structured fields</DocLink>: Extract structured fields like timestamps, log levels, or IP addresses to make querying and filtering your data easier. +* <DocLink id="serverlessObservabilityParseLogData" section="reroute-log-data-to-specific-data-streams">Reroute log data to specific data streams</DocLink>: Route data from the generic data stream to a target data stream for more granular control over data retention, permissions, and processing. + +## Extract structured fields + +Make your logs more useful by extracting structured fields from your unstructured log data. Extracting structured fields makes it easier to search, analyze, and filter your log data. + +Follow the steps below to see how the following unstructured log data is indexed by default: + +```log +2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%. +``` + +Start by storing the document in the `logs-example-default` data stream: + +1. In your Observability project, go to **Developer Tools**. +1. In the **Console** tab, add the example log to your project using the following command: + + ```console + POST logs-example-default/_doc + { + "message": "2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%." + } + ``` + +1. Then, you can retrieve the document with the following search: + + ```console + GET /logs-example-default/_search + ``` + +The results should look like this: + +```json +{ + ... + "hits": { + ... + "hits": [ + { + "_index": ".ds-logs-example-default-2023.08.09-000001", + ... + "_source": { + "message": "2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%.", + "@timestamp": "2023-08-09T17:19:27.73312243Z" + } + } + ] + } +} +``` + +Your project indexes the `message` field by default and adds a `@timestamp` field. Since there was no timestamp set, it's set to `now`. +At this point, you can search for phrases in the `message` field like `WARN` or `Disk usage exceeds`. +For example, run the following command to search for the phrase `WARN` in the log's `message` field: + +```console +GET logs-example-default/_search +{ + "query": { + "match": { + "message": { + "query": "WARN" + } + } + } +} +``` + +While you can search for phrases in the `message` field, you can't use this field to filter log data. Your message, however, contains all of the following potential fields you can extract and use to filter and aggregate your log data: + +- **@timestamp** (`2023-08-08T13:45:12.123Z`): Extracting this field lets you sort logs by date and time. This is helpful when you want to view your logs in the order that they occurred or identify when issues happened. +- **log.level** (`WARN`): Extracting this field lets you filter logs by severity. This is helpful if you want to focus on high-severity WARN or ERROR-level logs, and reduce noise by filtering out low-severity INFO-level logs. +- **host.ip** (`192.168.1.101`): Extracting this field lets you filter logs by the host IP addresses. This is helpful if you want to focus on specific hosts that you’re having issues with or if you want to find disparities between hosts. +- **message** (`Disk usage exceeds 90%.`): You can search for phrases or words in the message field. + +<DocCallOut title="Note"> +These fields are part of the [Elastic Common Schema (ECS)](((ecs-ref))/ecs-reference.html). The ECS defines a common set of fields that you can use across your project when storing data, including log and metric data. +</DocCallOut> + +### Extract the `@timestamp` field + +When you added the log to your project in the previous section, the `@timestamp` field showed when the log was added. The timestamp showing when the log actually occurred was in the unstructured `message` field: + +```json + ... + "_source": { + "message": "2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%.", [^1] + "@timestamp": "2023-08-09T17:19:27.73312243Z" [^2] + } + ... +``` +[^1]: The timestamp in the `message` field shows when the log occurred. +[^2]: The timestamp in the `@timestamp` field shows when the log was added to your project. + +When looking into issues, you want to filter for logs by when the issue occurred not when the log was added to your project. +To do this, extract the timestamp from the unstructured `message` field to the structured `@timestamp` field by completing the following: + +1. <DocLink id="serverlessObservabilityParseLogData" section="use-an-ingest-pipeline-to-extract-the-timestamp-field">Use an ingest pipeline to extract the `@timestamp` field</DocLink> +1. <DocLink id="serverlessObservabilityParseLogData" section="test-the-pipeline-with-the-simulate-pipeline-api">Test the pipeline with the simulate pipeline API</DocLink> +1. <DocLink id="serverlessObservabilityParseLogData" section="configure-a-data-stream-with-an-index-template">Configure a data stream with an index template</DocLink> +1. <DocLink id="serverlessObservabilityParseLogData" section="create-a-data-stream">Create a data stream</DocLink> + +#### Use an ingest pipeline to extract the `@timestamp` field + +Ingest pipelines consist of a series of processors that perform common transformations on incoming documents before they are indexed. +To extract the `@timestamp` field from the example log, use an ingest pipeline with a [dissect processor](((ref))/dissect-processor.html). +The dissect processor extracts structured fields from unstructured log messages based on a pattern you set. + +Your project can parse string timestamps that are in `yyyy-MM-dd'T'HH:mm:ss.SSSZ` and `yyyy-MM-dd` formats into date fields. +Since the log example's timestamp is in one of these formats, you don't need additional processors. +More complex or nonstandard timestamps require a [date processor](((ref))/date-processor.html) to parse the timestamp into a date field. + +Use the following command to extract the timestamp from the `message` field into the `@timestamp` field: + +```console +PUT _ingest/pipeline/logs-example-default +{ + "description": "Extracts the timestamp", + "processors": [ + { + "dissect": { + "field": "message", + "pattern": "%{@timestamp} %{message}" + } + } + ] +} +``` + +The previous command sets the following values for your ingest pipeline: + +- `_ingest/pipeline/logs-example-default`: The name of the pipeline,`logs-example-default`, needs to match the name of your data stream. You'll set up your data stream in the next section. For more information, refer to the [data stream naming scheme](((fleet-guide))/data-streams.html#data-streams-naming-scheme). +- `field`: The field you're extracting data from, `message` in this case. +- `pattern`: The pattern of the elements in your log data. The `%{@timestamp} %{message}` pattern extracts the timestamp, `2023-08-08T13:45:12.123Z`, to the `@timestamp` field, while the rest of the message, `WARN 192.168.1.101 Disk usage exceeds 90%.`, stays in the `message` field. The dissect processor looks for the space as a separator defined by the pattern. + +#### Test the pipeline with the simulate pipeline API + +The [simulate pipeline API](((ref))/simulate-pipeline-api.html#ingest-verbose-param) runs the ingest pipeline without storing any documents. +This lets you verify your pipeline works using multiple documents. + +Run the following command to test your ingest pipeline with the simulate pipeline API. + +```console +POST _ingest/pipeline/logs-example-default/_simulate +{ + "docs": [ + { + "_source": { + "message": "2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%." + } + } + ] +} +``` + +The results should show the `@timestamp` field extracted from the `message` field: + +```console +{ + "docs": [ + { + "doc": { + "_index": "_index", + "_id": "_id", + "_version": "-3", + "_source": { + "message": "WARN 192.168.1.101 Disk usage exceeds 90%.", + "@timestamp": "2023-08-08T13:45:12.123Z" + }, + ... + } + } + ] +} +``` + +<DocCallOut title="Note"> +Make sure you've created the ingest pipeline using the `PUT` command in the previous section before using the simulate pipeline API. +</DocCallOut> + +#### Configure a data stream with an index template + +After creating your ingest pipeline, run the following command to create an index template to configure your data stream's backing indices: + +```console +PUT _index_template/logs-example-default-template +{ + "index_patterns": [ "logs-example-*" ], + "data_stream": { }, + "priority": 500, + "template": { + "settings": { + "index.default_pipeline":"logs-example-default" + } + }, + "composed_of": [ + "logs@mappings", + "logs@settings", + "logs@custom", + "ecs@mappings" + ], + "ignore_missing_component_templates": ["logs@custom"] +} +``` + +The previous command sets the following values for your index template: + +- `index_pattern`: Needs to match your log data stream. Naming conventions for data streams are `<type>-<dataset>-<namespace>`. In this example, your logs data stream is named `logs-example-*`. Data that matches this pattern will go through your pipeline. +- `data_stream`: Enables data streams. +- `priority`: Sets the priority of your index templates. Index templates with a higher priority take precedence. If a data stream matches multiple index templates, your project uses the template with the higher priority. Built-in templates have a priority of `200`, so use a priority higher than `200` for custom templates. +- `index.default_pipeline`: The name of your ingest pipeline. `logs-example-default` in this case. +- `composed_of`: Here you can set component templates. Component templates are building blocks for constructing index templates that specify index mappings, settings, and aliases. Elastic has several built-in templates to help when ingesting your log data. + +The example index template above sets the following component templates: + +- `logs@mappings`: general mappings for log data streams that include disabling automatic date detection from `string` fields and specifying mappings for [`data_stream` ECS fields](((ecs-ref))/ecs-data_stream.html). +- `logs@settings`: general settings for log data streams including the following: + * The default lifecycle policy that rolls over when the primary shard reaches 50 GB or after 30 days. + * The default pipeline uses the ingest timestamp if there is no specified `@timestamp` and places a hook for the `logs@custom` pipeline. If a `logs@custom` pipeline is installed, it's applied to logs ingested into this data stream. + * Sets the [`ignore_malformed`](((ref))/ignore-malformed.html) flag to `true`. When ingesting a large batch of log data, a single malformed field like an IP address can cause the entire batch to fail. When set to true, malformed fields with a mapping type that supports this flag are still processed. + * `logs@custom`: a predefined component template that is not installed by default. Use this name to install a custom component template to override or extend any of the default mappings or settings. + * `ecs@mappings`: dynamic templates that automatically ensure your data stream mappings comply with the [Elastic Common Schema (ECS)](((ecs-ref))/ecs-reference.html). + +#### Create a data stream + +Create your data stream using the [data stream naming scheme](((fleet-guide))/data-streams.html#data-streams-naming-scheme). Name your data stream to match the name of your ingest pipeline, `logs-example-default` in this case. Post the example log to your data stream with this command: + +```console +POST logs-example-default/_doc +{ + "message": "2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%." +} +``` + +View your documents using this command: + +```console +GET /logs-example-default/_search +``` + +You should see the pipeline has extracted the `@timestamp` field: + +```json +{ + ... + { + ... + "hits": { + ... + "hits": [ + { + "_index": ".ds-logs-example-default-2023.08.09-000001", + "_id": "RsWy3IkB8yCtA5VGOKLf", + "_score": 1, + "_source": { + "message": "WARN 192.168.1.101 Disk usage exceeds 90%.", + "@timestamp": "2023-08-08T13:45:12.123Z" [^1] + } + } + ] + } + } +} +``` +[^1]: The extracted `@timestamp` field. + +You can now use the `@timestamp` field to sort your logs by the date and time they happened. + +#### Troubleshoot the `@timestamp` field + +Check the following common issues and solutions with timestamps: + +- **Timestamp failure:** If your data has inconsistent date formats, set `ignore_failure` to `true` for your date processor. This processes logs with correctly formatted dates and ignores those with issues. +- **Incorrect timezone:** Set your timezone using the `timezone` option on the [date processor](((ref))/date-processor.html). +- **Incorrect timestamp format:** Your timestamp can be a Java time pattern or one of the following formats: ISO8601, UNIX, UNIX_MS, or TAI64N. For more information on timestamp formats, refer to the [mapping date format](((ref))/mapping-date-format.html). + +### Extract the `log.level` field + +Extracting the `log.level` field lets you filter by severity and focus on critical issues. This section shows you how to extract the `log.level` field from this example log: + +```log +2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%. +``` + +To extract and use the `log.level` field: + +1. <DocLink id="serverlessObservabilityParseLogData" section="add-loglevel-to-your-ingest-pipeline">Add the `log.level` field to the dissect processor pattern in your ingest pipeline.</DocLink> +1. <DocLink id="serverlessObservabilityParseLogData" section="test-the-pipeline-with-the-simulate-api">Test the pipeline with the simulate API.</DocLink> +1. <DocLink id="serverlessObservabilityParseLogData" section="query-logs-based-on-loglevel">Query your logs based on the `log.level` field.</DocLink> + +#### Add `log.level` to your ingest pipeline + +Add the `%{log.level}` option to the dissect processor pattern in the ingest pipeline you created in the <DocLink id="serverlessObservabilityParseLogData" section="use-an-ingest-pipeline-to-extract-the-timestamp-field">Extract the `@timestamp` field</DocLink> section with this command: + +```console +PUT _ingest/pipeline/logs-example-default +{ + "description": "Extracts the timestamp and log level", + "processors": [ + { + "dissect": { + "field": "message", + "pattern": "%{@timestamp} %{log.level} %{message}" + } + } + ] +} +``` + +Now your pipeline will extract these fields: + +- The `@timestamp` field: `2023-08-08T13:45:12.123Z` +- The `log.level` field: `WARN` +- The `message` field: `192.168.1.101 Disk usage exceeds 90%.` + +In addition to setting an ingest pipeline, you need to set an index template. Use the index template created in the <DocLink id="serverlessObservabilityParseLogData" section="configure-a-data-stream-with-an-index-template">Extract the `@timestamp` field</DocLink> section. + +#### Test the pipeline with the simulate API + +Test that your ingest pipeline works as expected with the [simulate pipeline API](((ref))/simulate-pipeline-api.html#ingest-verbose-param): + +```console +POST _ingest/pipeline/logs-example-default/_simulate +{ + "docs": [ + { + "_source": { + "message": "2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%." + } + } + ] +} +``` + +The results should show the `@timestamp` and the `log.level` fields extracted from the `message` field: + +```json +{ + "docs": [ + { + "doc": { + "_index": "_index", + "_id": "_id", + "_version": "-3", + "_source": { + "message": "192.168.1.101 Disk usage exceeds 90%.", + "log": { + "level": "WARN" + }, + "@timestamp": "2023-8-08T13:45:12.123Z", + }, + ... + } + } + ] +} +``` + +#### Query logs based on `log.level` + +Once you've extracted the `log.level` field, you can query for high-severity logs like `WARN` and `ERROR`, which may need immediate attention, and filter out less critical `INFO` and `DEBUG` logs. + +Let's say you have the following logs with varying severities: + +```log +2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%. +2023-08-08T13:45:14.003Z ERROR 192.168.1.103 Database connection failed. +2023-08-08T13:45:15.004Z DEBUG 192.168.1.104 Debugging connection issue. +2023-08-08T13:45:16.005Z INFO 192.168.1.102 User changed profile picture. +``` + +Add them to your data stream using this command: + +```console +POST logs-example-default/_bulk +{ "create": {} } +{ "message": "2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%." } +{ "create": {} } +{ "message": "2023-08-08T13:45:14.003Z ERROR 192.168.1.103 Database connection failed." } +{ "create": {} } +{ "message": "2023-08-08T13:45:15.004Z DEBUG 192.168.1.104 Debugging connection issue." } +{ "create": {} } +{ "message": "2023-08-08T13:45:16.005Z INFO 192.168.1.102 User changed profile picture." } +``` + +Then, query for documents with a log level of `WARN` or `ERROR` with this command: + +```console +GET logs-example-default/_search +{ + "query": { + "terms": { + "log.level": ["WARN", "ERROR"] + } + } +} +``` + +The results should show only the high-severity logs: + +```json +{ +... + }, + "hits": { + ... + "hits": [ + { + "_index": ".ds-logs-example-default-2023.08.14-000001", + "_id": "3TcZ-4kB3FafvEVY4yKx", + "_score": 1, + "_source": { + "message": "192.168.1.101 Disk usage exceeds 90%.", + "log": { + "level": "WARN" + }, + "@timestamp": "2023-08-08T13:45:12.123Z" + } + }, + { + "_index": ".ds-logs-example-default-2023.08.14-000001", + "_id": "3jcZ-4kB3FafvEVY4yKx", + "_score": 1, + "_source": { + "message": "192.168.1.103 Database connection failed.", + "log": { + "level": "ERROR" + }, + "@timestamp": "2023-08-08T13:45:14.003Z" + } + } + ] + } +} +``` + +### Extract the `host.ip` field + +Extracting the `host.ip` field lets you filter logs by host IP addresses allowing you to focus on specific hosts that you're having issues with or find disparities between hosts. + +The `host.ip` field is part of the [Elastic Common Schema (ECS)](((ecs-ref))/ecs-reference.html). Through the ECS, the `host.ip` field is mapped as an [`ip` field type](((ref))/ip.html). `ip` field types allow range queries so you can find logs with IP addresses in a specific range. You can also query `ip` field types using Classless Inter-Domain Routing (CIDR) notation to find logs from a particular network or subnet. + +This section shows you how to extract the `host.ip` field from the following example logs and query based on the extracted fields: + +```log +2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%. +2023-08-08T13:45:14.003Z ERROR 192.168.1.103 Database connection failed. +2023-08-08T13:45:15.004Z DEBUG 192.168.1.104 Debugging connection issue. +2023-08-08T13:45:16.005Z INFO 192.168.1.102 User changed profile picture. +``` + +To extract and use the `host.ip` field: + +1. <DocLink id="serverlessObservabilityParseLogData" section="add-hostip-to-your-ingest-pipeline">Add the `host.ip` field to your dissect processor in your ingest pipeline.</DocLink> +1. <DocLink id="serverlessObservabilityParseLogData" section="test-the-pipeline-with-the-simulate-api">Test the pipeline with the simulate API.</DocLink> +1. <DocLink id="serverlessObservabilityParseLogData" section="query-logs-based-on-hostip">Query your logs based on the `host.ip` field.</DocLink> + +#### Add `host.ip` to your ingest pipeline + +Add the `%{host.ip}` option to the dissect processor pattern in the ingest pipeline you created in the <DocLink id="serverlessObservabilityParseLogData" section="use-an-ingest-pipeline-to-extract-the-timestamp-field">Extract the `@timestamp` field</DocLink> section: + +```console +PUT _ingest/pipeline/logs-example-default +{ + "description": "Extracts the timestamp log level and host ip", + "processors": [ + { + "dissect": { + "field": "message", + "pattern": "%{@timestamp} %{log.level} %{host.ip} %{message}" + } + } + ] +} +``` + +Your pipeline will extract these fields: + +- The `@timestamp` field: `2023-08-08T13:45:12.123Z` +- The `log.level` field: `WARN` +- The `host.ip` field: `192.168.1.101` +- The `message` field: `Disk usage exceeds 90%.` + +In addition to setting an ingest pipeline, you need to set an index template. Use the index template created in the <DocLink id="serverlessObservabilityParseLogData" section="configure-a-data-stream-with-an-index-template">Extract the `@timestamp` field</DocLink> section. + +#### Test the pipeline with the simulate API + +Test that your ingest pipeline works as expected with the [simulate pipeline API](((ref))/simulate-pipeline-api.html#ingest-verbose-param): + +```console +POST _ingest/pipeline/logs-example-default/_simulate +{ + "docs": [ + { + "_source": { + "message": "2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%." + } + } + ] +} +``` + +The results should show the `host.ip`, `@timestamp`, and `log.level` fields extracted from the `message` field: + +```json +{ + "docs": [ + { + "doc": { + ... + "_source": { + "host": { + "ip": "192.168.1.101" + }, + "@timestamp": "2023-08-08T13:45:12.123Z", + "message": "Disk usage exceeds 90%.", + "log": { + "level": "WARN" + } + }, + ... + } + } + ] +} +``` + +#### Query logs based on `host.ip` + +You can query your logs based on the `host.ip` field in different ways, including using CIDR notation and range queries. + +Before querying your logs, add them to your data stream using this command: + +```console +POST logs-example-default/_bulk +{ "create": {} } +{ "message": "2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%." } +{ "create": {} } +{ "message": "2023-08-08T13:45:14.003Z ERROR 192.168.1.103 Database connection failed." } +{ "create": {} } +{ "message": "2023-08-08T13:45:15.004Z DEBUG 192.168.1.104 Debugging connection issue." } +{ "create": {} } +{ "message": "2023-08-08T13:45:16.005Z INFO 192.168.1.102 User changed profile picture." } +``` + +##### CIDR notation + +You can use [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation) to query your log data using a block of IP addresses that fall within a certain network segment. CIDR notations uses the format of `[IP address]/[prefix length]`. The following command queries IP addresses in the `192.168.1.0/24` subnet meaning IP addresses from `192.168.1.0` to `192.168.1.255`. + +```console +GET logs-example-default/_search +{ + "query": { + "term": { + "host.ip": "192.168.1.0/24" + } + } +} +``` + +Because all of the example logs are in this range, you'll get the following results: + +```json +{ + ... + }, + "hits": { + ... + { + "_index": ".ds-logs-example-default-2023.08.16-000001", + "_id": "ak4oAIoBl7fe5ItIixuB", + "_score": 1, + "_source": { + "host": { + "ip": "192.168.1.101" + }, + "@timestamp": "2023-08-08T13:45:12.123Z", + "message": "Disk usage exceeds 90%.", + "log": { + "level": "WARN" + } + } + }, + { + "_index": ".ds-logs-example-default-2023.08.16-000001", + "_id": "a04oAIoBl7fe5ItIixuC", + "_score": 1, + "_source": { + "host": { + "ip": "192.168.1.103" + }, + "@timestamp": "2023-08-08T13:45:14.003Z", + "message": "Database connection failed.", + "log": { + "level": "ERROR" + } + } + }, + { + "_index": ".ds-logs-example-default-2023.08.16-000001", + "_id": "bE4oAIoBl7fe5ItIixuC", + "_score": 1, + "_source": { + "host": { + "ip": "192.168.1.104" + }, + "@timestamp": "2023-08-08T13:45:15.004Z", + "message": "Debugging connection issue.", + "log": { + "level": "DEBUG" + } + } + }, + { + "_index": ".ds-logs-example-default-2023.08.16-000001", + "_id": "bU4oAIoBl7fe5ItIixuC", + "_score": 1, + "_source": { + "host": { + "ip": "192.168.1.102" + }, + "@timestamp": "2023-08-08T13:45:16.005Z", + "message": "User changed profile picture.", + "log": { + "level": "INFO" + } + } + } + ] + } +} +``` + +##### Range queries + +Use [range queries](((ref))/query-dsl-range-query.html) to query logs in a specific range. + +The following command searches for IP addresses greater than or equal to `192.168.1.100` and less than or equal to `192.168.1.102`. + +```console +GET logs-example-default/_search +{ + "query": { + "range": { + "host.ip": { + "gte": "192.168.1.100", [^1] + "lte": "192.168.1.102" [^2] + } + } + } +} +``` +[^1]: Greater than or equal to `192.168.1.100`. +[^2]: Less than or equal to `192.168.1.102`. + +You'll get the following results only showing logs in the range you've set: + +```json +{ + ... + }, + "hits": { + ... + { + "_index": ".ds-logs-example-default-2023.08.16-000001", + "_id": "ak4oAIoBl7fe5ItIixuB", + "_score": 1, + "_source": { + "host": { + "ip": "192.168.1.101" + }, + "@timestamp": "2023-08-08T13:45:12.123Z", + "message": "Disk usage exceeds 90%.", + "log": { + "level": "WARN" + } + } + }, + { + "_index": ".ds-logs-example-default-2023.08.16-000001", + "_id": "bU4oAIoBl7fe5ItIixuC", + "_score": 1, + "_source": { + "host": { + "ip": "192.168.1.102" + }, + "@timestamp": "2023-08-08T13:45:16.005Z", + "message": "User changed profile picture.", + "log": { + "level": "INFO" + } + } + } + ] + } +} +``` + +## Reroute log data to specific data streams + +By default, an ingest pipeline sends your log data to a single data stream. To simplify log data management, use a [reroute processor](((ref))/reroute-processor.html) to route data from the generic data stream to a target data stream. For example, you might want to send high-severity logs to a specific data stream to help with categorization. + +This section shows you how to use a reroute processor to send the high-severity logs (`WARN` or `ERROR`) from the following example logs to a specific data stream and keep the regular logs (`DEBUG` and `INFO`) in the default data stream: + +```log +2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%. +2023-08-08T13:45:14.003Z ERROR 192.168.1.103 Database connection failed. +2023-08-08T13:45:15.004Z DEBUG 192.168.1.104 Debugging connection issue. +2023-08-08T13:45:16.005Z INFO 192.168.1.102 User changed profile picture. +``` + +<DocCallOut title="Note"> +When routing data to different data streams, we recommend picking a field with a limited number of distinct values to prevent an excessive increase in the number of data streams. For more details, refer to the [Size your shards](((ref))/size-your-shards.html) documentation. +</DocCallOut> + +To use a reroute processor: + +1. <DocLink id="serverlessObservabilityParseLogData" section="add-a-reroute-processor-to-the-ingest-pipeline">Add a reroute processor to your ingest pipeline.</DocLink> +1. <DocLink id="serverlessObservabilityParseLogData" section="add-logs-to-a-data-stream">Add the example logs to your data stream.</DocLink> +1. <DocLink id="serverlessObservabilityParseLogData" section="verify-the-reroute-processor-worked">Query your logs and verify the high-severity logs were routed to the new data stream.</DocLink> + +### Add a reroute processor to the ingest pipeline + +Add a reroute processor to your ingest pipeline with the following command: + +```console +PUT _ingest/pipeline/logs-example-default +{ + "description": "Extracts fields and reroutes WARN", + "processors": [ + { + "dissect": { + "field": "message", + "pattern": "%{@timestamp} %{log.level} %{host.ip} %{message}" + } + }, + { + "reroute": { + "tag": "high_severity_logs", + "if" : "ctx.log?.level == 'WARN' || ctx.log?.level == 'ERROR'", + "dataset": "critical" + } + } + ] +} +``` + +The previous command sets the following values for your reroute processor: + +- `tag`: Identifier for the processor that you can use for debugging and metrics. In the example, the tag is set to `high_severity_logs`. +- `if`: Conditionally runs the processor. In the example, `"ctx.log?.level == 'WARN' || ctx.log?.level == 'ERROR'",` means the processor runs when the `log.level` field is `WARN` or `ERROR`. +- `dataset`: the data stream dataset to route your document to if the previous condition is `true`. In the example, logs with a `log.level` of `WARN` or `ERROR` are routed to the `logs-critical-default` data stream. + +In addition to setting an ingest pipeline, you need to set an index template. Use the index template created in the <DocLink id="serverlessObservabilityParseLogData" section="configure-a-data-stream-with-an-index-template">Extract the `@timestamp` field</DocLink> section. + +### Add logs to a data stream + +Add the example logs to your data stream with this command: + +```console +POST logs-example-default/_bulk +{ "create": {} } +{ "message": "2023-08-08T13:45:12.123Z WARN 192.168.1.101 Disk usage exceeds 90%." } +{ "create": {} } +{ "message": "2023-08-08T13:45:14.003Z ERROR 192.168.1.103 Database connection failed." } +{ "create": {} } +{ "message": "2023-08-08T13:45:15.004Z DEBUG 192.168.1.104 Debugging connection issue." } +{ "create": {} } +{ "message": "2023-08-08T13:45:16.005Z INFO 192.168.1.102 User changed profile picture." } +``` + +### Verify the reroute processor worked + +The reroute processor should route any logs with a `log.level` of `WARN` or `ERROR` to the `logs-critical-default` data stream. Query the data stream using the following command to verify the log data was routed as intended: + +```console +GET logs-critical-default/_search +``` + +Your should see similar results to the following showing that the high-severity logs are now in the `critical` dataset: + +```json +{ + ... + "hits": { + ... + "hits": [ + ... + "_source": { + "host": { + "ip": "192.168.1.101" + }, + "@timestamp": "2023-08-08T13:45:12.123Z", + "message": "Disk usage exceeds 90%.", + "log": { + "level": "WARN" + }, + "data_stream": { + "namespace": "default", + "type": "logs", + "dataset": "critical" + }, + { + ... + "_source": { + "host": { + "ip": "192.168.1.103" + }, + "@timestamp": "2023-08-08T13:45:14.003Z", + "message": "Database connection failed.", + "log": { + "level": "ERROR" + }, + "data_stream": { + "namespace": "default", + "type": "logs", + "dataset": "critical" + } + } + } + ] + } +} +``` diff --git a/docs/en/serverless/logging/plaintext-application-logs.mdx b/docs/en/serverless/logging/plaintext-application-logs.mdx new file mode 100644 index 0000000000..29ce023fc6 --- /dev/null +++ b/docs/en/serverless/logging/plaintext-application-logs.mdx @@ -0,0 +1,252 @@ +--- +id: serverlessObservabilityPlaintextApplicationLogs +slug: /serverless/observability/plaintext-application-logs +title: Plaintext application logs +description: Parse and ingest raw, plain-text application logs using a log shipper like Filebeat. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import ApplicationLogsCorrelateLogs from '../transclusion/observability/application-logs/correlate-logs.mdx' +import InstallWidget from '../transclusion/observability/tab-widgets/filebeat-install/widget.mdx' +import SetupWidget from '../transclusion/observability/tab-widgets/filebeat-setup/widget.mdx' +import StartWidget from '../transclusion/observability/tab-widgets/filebeat-start/widget.mdx' + +<div id="plaintext-logs"></div> + +Ingest and parse plaintext logs, including existing logs, from any programming language or framework without modifying your application or its configuration. + +Plaintext logs require some additional setup that structured logs do not require: + +* To search, filter, and aggregate effectively, you need to parse plaintext logs using an ingest pipeline to extract structured fields. Parsing is based on log format, so you might have to maintain different settings for different applications. +* To <DocLink id="serverlessObservabilityPlaintextApplicationLogs" section="correlate-logs">correlate plaintext logs</DocLink>, you need to inject IDs into log messages and parse them using an ingest pipeline. + +To ingest, parse, and correlate plaintext logs: + +1. Ingest plaintext logs with <DocLink id="serverlessObservabilityPlaintextApplicationLogs" section="ingest-logs-with-filebeat">((filebeat))</DocLink> or <DocLink id="serverlessObservabilityPlaintextApplicationLogs" section="ingest-logs-with-agent">((agent))</DocLink> and parse them before indexing with an ingest pipeline. +1. <DocLink id="serverlessObservabilityPlaintextApplicationLogs" section="correlate-logs">Correlate plaintext logs with an ((apm-agent)).</DocLink> +1. <DocLink id="serverlessObservabilityPlaintextApplicationLogs" section="view-logs">View logs in Logs Explorer</DocLink> + +## Ingest logs + +Send application logs to your project using one of the following shipping tools: + +* <DocLink id="serverlessObservabilityPlaintextApplicationLogs" section="ingest-logs-with-filebeat">**((filebeat)):**</DocLink> A lightweight data shipper that sends log data to your project. +* <DocLink id="serverlessObservabilityPlaintextApplicationLogs" section="ingest-logs-with-agent">**((agent)):**</DocLink> A single agent for logs, metrics, security data, and threat prevention. With Fleet, you can centrally manage ((agent)) policies and lifecycles directly from your project. + +### Ingest logs with ((filebeat)) + +<DocCallOut title="Important"> +Use ((filebeat)) version 8.11+ for the best experience when ingesting logs with ((filebeat)). +</DocCallOut> + +Follow these steps to ingest application logs with ((filebeat)). + +#### Step 1: Install ((filebeat)) + +Install ((filebeat)) on the server you want to monitor by running the commands that align with your system: + +<InstallWidget /> + +#### Step 2: Connect to your project + +Connect to your project using an API key to set up ((filebeat)). Set the following information in the `filebeat.yml` file: + +```yaml +output.elasticsearch: + hosts: ["your-projects-elasticsearch-endpoint"] + api_key: "id:api_key" +``` + +1. Set the `hosts` to your project's ((es)) endpoint. Locate your project's endpoint by clicking the help icon (<DocIcon type="help" title="Help icon" />) and selecting **Endpoints**. Add the **((es)) endpoint** to your configuration. +1. From **Developer tools**, run the following command to create an API key that grants `manage` permissions for the `cluster` and the `filebeat-*` indices using: + + ```shell + POST /_security/api_key + { + "name": "your_api_key", + "role_descriptors": { + "filebeat_writer": { + "cluster": ["manage"], + "index": [ + { + "names": ["filebeat-*"], + "privileges": ["manage", "create_doc"] + } + ] + } + } + } + ``` + + Refer to [Grant access using API keys](((filebeat-ref))/beats-api-keys.html) for more information. + +#### Step 3: Configure ((filebeat)) + +Add the following configuration to the `filebeat.yaml` file to start collecting log data. + +```yaml +filebeat.inputs: +- type: filestream [^1] + enabled: true + paths: /path/to/logs.log [^2] +``` +[^1]: Reads lines from an active log file. +[^2]: Paths that you want ((filebeat)) to crawl and fetch logs from. + +You can add additional settings to the `filebeat.yml` file to meet the needs of your specific set up. For example, the following settings would add a parser to manage messages that span multiple lines and add service fields: + +```yaml + parsers: + - multiline: + type: pattern + pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' + negate: true + match: after + fields_under_root: true + fields: + service.name: your_service_name + service.environment: your_service_environment + event.dataset: your_event_dataset +``` + +#### Step 4: Set up and start ((filebeat)) + +From the ((filebeat)) installation directory, set the [index template](((ref))/index-templates.html) by running the command that aligns with your system: + +<SetupWidget /> + +from the ((filebeat)) installation directory, start filebeat by running the command that aligns with your system: + +<StartWidget /> + +#### Step 5: Parse logs with an ingest pipeline + +Use an ingest pipeline to parse the contents of your logs into structured, [Elastic Common Schema (ECS)](((ecs-ref))/ecs-reference.html)-compatible fields. + +Create an ingest pipeline with a [dissect processor](((ref))/dissect-processor.html) to extract structured ECS fields from your log messages. In your project, go to **Developer Tools** and use a command similar to the following example: + +```shell +PUT _ingest/pipeline/filebeat* [^1] +{ + "description": "Extracts the timestamp log level and host ip", + "processors": [ + { + "dissect": { [^2] + "field": "message", [^3] + "pattern": "%{@timestamp} %{log.level} %{host.ip} %{message}" [^4] + } + } + ] +} +``` +[^1]: `_ingest/pipeline/filebeat*`: The name of the pipeline. Update the pipeline name to match the name of your data stream. For more information, refer to [Data stream naming scheme](((fleet-guide))/data-streams.html#data-streams-naming-scheme). +[^2]: `processors.dissect`: Adds a [dissect processor](((ref))/dissect-processor.html) to extract structured fields from your log message. +[^3]: `field`: The field you're extracting data from, `message` in this case. +[^4]: `pattern`: The pattern of the elements in your log data. The pattern varies depending on your log format. `%{@timestamp}`, `%{log.level}`, `%{host.ip}`, and `%{message}` are common [ECS](((ecs-ref))/ecs-reference.html) fields. This pattern would match a log file in this format: `2023-11-07T09:39:01.012Z ERROR 192.168.1.110 Server hardware failure detected.` + +Refer to <DocLink id="serverlessObservabilityParseLogData" section="extract-structured-fields">Extract structured fields</DocLink> for more on using ingest pipelines to parse your log data. + +After creating your pipeline, specify the pipeline for filebeat in the `filebeat.yml` file: + +```yaml +output.elasticsearch: + hosts: ["your-projects-elasticsearch-endpoint"] + api_key: "id:api_key" + pipeline: "your-pipeline" [^1] +``` +[^1]: Add the pipeline output and the name of your pipeline to the output. + +### Ingest logs with ((agent)) + +Follow these steps to ingest and centrally manage your logs using ((agent)) and ((fleet)). + +#### Step 1: Add the custom logs integration to your project + +To add the custom logs integration to your project: + +1. In your ((observability)) project, go to **Project Settings** → **Integrations**. +1. Type `custom` in the search bar and select **Custom Logs**. +1. Click **Add Custom Logs**. +1. Click **Install ((agent))** at the bottom of the page, and follow the instructions for your system to install the ((agent)). +1. After installing the ((agent)), configure the integration from the **Add Custom Logs integration** page. +1. Give your integration a meaningful name and description. +1. Add the **Log file path**. For example, `/var/log/your-logs.log`. +1. An agent policy is created that defines the data your ((agent)) collects. If you've previously installed an ((agent)) on the host you're collecting logs from, you can select the **Existing hosts** tab and use an existing agent policy. +1. Click **Save and continue**. + +You can add additional settings to the integration under **Custom log file** by clicking **Advanced options** and adding YAML configurations to the **Custom configurations**. For example, the following settings would add a parser to manage messages that span multiple lines and add service fields. Service fields are used for <DocLink id="serverlessObservabilityCorrelateApplicationLogs" section="log-correlation">Log correlation</DocLink>. + +```yaml + parsers: + - multiline: + type: pattern + pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' + negate: true + match: after + fields_under_root: true + fields: + service.name: your_service_name [^1] + service.version: your_service_version [^1] + service.environment: your_service_environment [^1] +``` +[^1]: for <DocLink id="serverlessObservabilityCorrelateApplicationLogs" section="log-correlation">Log correlation</DocLink>, add the `service.name` (required), `service.version` (optional), and `service.environment` (optional) of the service you're collecting logs from. + +#### Step 2: Add an ingest pipeline to your integration + +To aggregate or search for information in plaintext logs, use an ingest pipeline with your integration to parse the contents of your logs into structured, [Elastic Common Schema (ECS)](((ecs-ref))/ecs-reference.html)-compatible fields. + +1. From the custom logs integration, select **Integration policies** tab. +1. Select the integration policy you created in the previous section. +1. Click **Change defaults** → **Advanced options**. +1. Under **Ingest pipelines**, click **Add custom pipeline**. +1. Create an ingest pipeline with a [dissect processor](((ref))/dissect-processor.html) to extract structured fields from your log messages. + + Click **Import processors** and add a similar JSON to the following example: + + ```JSON + { + "description": "Extracts the timestamp log level and host ip", + "processors": [ + { + "dissect": { [^1] + "field": "message", [^2] + "pattern": "%{@timestamp} %{log.level} %{host.ip} %{message}" [^3] + } + } + ] + } + ``` + [^1]: `processors.dissect`: Adds a [dissect processor](((ref))/dissect-processor.html) to extract structured fields from your log message. + [^2]: `field`: The field you're extracting data from, `message` in this case. + [^3]: `pattern`: The pattern of the elements in your log data. The pattern varies depending on your log format. `%{@timestamp}`, `%{log.level}`, `%{host.ip}`, and `%{message}` are common [ECS](((ecs-ref))/ecs-reference.html) fields. This pattern would match a log file in this format: `2023-11-07T09:39:01.012Z ERROR 192.168.1.110 Server hardware failure detected.` +1. Click **Create pipeline**. +1. Save and deploy your integration. + +## Correlate logs +Correlate your application logs with trace events to: + +* view the context of a log and the parameters provided by a user +* view all logs belonging to a particular trace +* easily move between logs and traces when debugging application issues + +Log correlation works on two levels: + +- at service level: annotation with `service.name`, `service.version`, and `service.environment` allow you to link logs with APM services +- at trace level: annotation with `trace.id` and `transaction.id` allow you to link logs with traces + +Learn about correlating plaintext logs in the agent-specific ingestion guides: + +* [Go](((apm-go-ref))/logs.html) +* [Java](((apm-java-ref))/logs.html#log-correlation-ids) +* [.NET](((apm-dotnet-ref))/log-correlation.html) +* [Node.js](((apm-node-ref))/log-correlation.html) +* [Python](((apm-py-ref))/logs.html#log-correlation-ids) +* [Ruby](((apm-ruby-ref))/log-correlation.html) + +## View logs + +To view logs ingested by ((filebeat)), go to **Discover**. Create a data view based on the `filebeat-*` index pattern. Refer to [Create a data view](((kibana-ref))/data-views.html) for more information. + +To view logs ingested by ((agent)), go to **Discover** and select the <DocLink id="serverlessObservabilityDiscoverAndExploreLogs">**Logs Explorer**</DocLink> tab. Refer to the <DocLink id="serverlessObservabilityFilterAndAggregateLogs">Filter and aggregate logs</DocLink> documentation for more on viewing and filtering your log data. \ No newline at end of file diff --git a/docs/en/serverless/logging/run-log-pattern-analysis.mdx b/docs/en/serverless/logging/run-log-pattern-analysis.mdx new file mode 100644 index 0000000000..55d4d93d75 --- /dev/null +++ b/docs/en/serverless/logging/run-log-pattern-analysis.mdx @@ -0,0 +1,39 @@ +--- +id: serverlessObservabilityRunLogPatternAnalysis +slug: /serverless/observability/run-log-pattern-analysis +title: Run a pattern analysis on log data +description: Find patterns in unstructured log messages. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +<DocCallOut template="technical_preview" /> + +Log pattern analysis helps you find patterns in unstructured log messages and makes it easier to examine your data. +When you run a pattern analysis, it performs categorization analysis on a selected field, +creates categories based on the data, and then displays them together in a chart that shows the distribution of each category and an example document that matches the category. +Log pattern analysis is useful when you want to examine how often different types of logs appear in your data set. +It also helps you group logs in ways that go beyond what you can achieve with a terms aggregation. + +Log pattern analysis works on every text field. + +To run a log pattern analysis: + +1. In your ((observability)) project, go to **Discover** and select the **Logs Explorer** tab. + +1. Select an integration, for example **Elastic APM error_logs**, and apply any filters that you want. + +1. If you don't see any results, expand the time range, for example, to **Last 15 days**. + +1. In the **Available fields** list, select the text field you want to analyze, then click **Run pattern analysis**. + + <DocImage size="l" url="../images/run-log-pattern-analysis.png" alt="Run log pattern analysis" /> + + The results of the analysis are shown in a table: + + ![Log pattern analysis of the message field ](../images/log-pattern-analysis.png) + +1. (Optional) Select one or more patterns, then choose to filter for (or filter out) documents that match the selected patterns. +**Logs Explorer** only displays documents that match (or don't match) the selected patterns. +The filter options enable you to remove unimportant messages and focus on the more important, actionable data during troubleshooting. diff --git a/docs/en/serverless/logging/send-application-logs.mdx b/docs/en/serverless/logging/send-application-logs.mdx new file mode 100644 index 0000000000..408249b8f5 --- /dev/null +++ b/docs/en/serverless/logging/send-application-logs.mdx @@ -0,0 +1,19 @@ +--- +id: serverlessObservabilitySendApplicationLogs +slug: /serverless/observability/send-application-logs +title: ((apm-agent)) log sending +description: Use the Java ((apm-agent)) to capture and send logs. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import ApplicationLogsApmAgentLogSending from '../transclusion/observability/application-logs/apm-agent-log-sending.mdx' + +<div id="apm-agent-log-sending"></div> + +<ApplicationLogsApmAgentLogSending /> + +## Get started + +See the [Java agent](((apm-java-ref))/logs.html#log-sending) documentation to get started. \ No newline at end of file diff --git a/docs/en/serverless/logging/stream-log-files.mdx b/docs/en/serverless/logging/stream-log-files.mdx new file mode 100644 index 0000000000..c82d5d6ded --- /dev/null +++ b/docs/en/serverless/logging/stream-log-files.mdx @@ -0,0 +1,290 @@ +--- +id: serverlessObservabilityStreamLogFiles +slug: /serverless/observability/stream-log-files +title: Stream any log file +description: Send a log file to your Observability project using the standalone ((agent)). +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import DownloadWidget from '../transclusion/fleet/tab-widgets/download-widget.mdx' +import RunStandaloneWidget from '../transclusion/fleet/tab-widgets/run-standalone-widget.mdx' +import AgentLocationWidget from '../transclusion/observability/tab-widgets/logs/agent-location/widget.mdx' +import StopWidget from '../transclusion/fleet/tab-widgets/stop-widget.mdx' +import StartWidget from '../transclusion/fleet/tab-widgets/start-widget.mdx' +import Roles from '../partials/roles.mdx' + +<Roles role="Admin" goal="onboard log data" /> + +This guide shows you how to send a log file to your Observability project using a standalone ((agent)) and configure the ((agent)) and your data streams using the `elastic-agent.yml` file, and query your logs using the data streams you've set up. + +The quickest way to get started is to: + +1. Open your Observability project. If you don't have one, <DocLink id="serverlessObservabilityCreateAnObservabilityProject" text="create an observability project"/>. +1. Go to **Add Data**. +1. Under **Collect and analyze logs**, click **Stream log files**. + +This will kick off a set of guided instructions that walk you through configuring the standalone ((agent)) and sending log data to your project. + +To install and configure the ((agent)) manually, refer to <DocLink id="serverlessObservabilityStreamLogFiles" section="manually-install-agent-logs">Manually install and configure the standalone ((agent))</DocLink>. + +## Configure inputs and integration + +Enter a few configuration details in the guided instructions. + +{/* Do we want to include a screenshot or will it be too difficult to maintain? */} +![Configure inputs and integration in the Stream log files guided instructions](../images/logs-stream-logs-config.png) + +**Configure inputs** + +* **Log file path**: The path to your log files. + You can also use a pattern like `/var/log/your-logs.log*`. + Click **Add row** to add more log file paths. + + This will be passed to the `paths` field in the generated `elastic-agent.yml` file in a future step. + <br /> + +* **Service name**: Provide a service name to allow for distributed services running on + multiple hosts to correlate the related instances. + +{/* Advanced settings? */} + +**Configure integration** + +Elastic creates an integration to streamline connecting your log data to Elastic. + +* **Integration name**: Give your integration a name. + This is a unique identifier for your stream of log data that you can later use to filter data in Logs Explorer. + The value must be unique within your project, all lowercase, and max 100 chars. Special characters will be replaced with `_`. + + This will be passed to the `streams.id` field in the generated `elastic-agent.yml` file in a future step. + + The integration name will be used in Logs Explorer. + It will appear in the "All logs" dropdown menu. + + <DocImage url="../images/logs-stream-logs-service-name.png" alt="All logs dropdown menu on Logs Explorer page" size="l" /> + <br /> + +* **Dataset name**: Give your integration's dataset a name. + The name for your dataset data stream. Name this data stream anything that signifies the source of the data. + The value must be all lowercase and max 100 chars. Special characters will be replaced with `_`. + + This will be passed to the `data_stream.dataset` field in the generated `elastic-agent.yml` file in a future step. + +## Install the ((agent)) + +After configuring the inputs and integration, you'll continue in the guided instructions to +install and configure the standalone ((agent)). + +Run the command under **Install the ((agent))** that corresponds with your system to download, extract, and install the ((agent)). +Turning on **Automatically download the agent's config** includes your updated ((agent)) configuration file in the download. + +If you do not want to automatically download the configuration, click **Download config file** to download it manually and +add it to `/opt/Elastic/Agent/elastic-agent.yml` on the host where you installed the ((agent)). +The values you provided in <DocLink id="serverlessObservabilityStreamLogFiles" section="configure-inputs-and-integration">Configure inputs and integration</DocLink> will be prepopulated in the generated configuration file. + +<div id="manually-install-agent-logs"></div> + +## Manually install and configure the standalone ((agent)) + +If you're not using the guided instructions, follow these steps to manually install and configure your the ((agent)). + +### Step 1: Download and extract the ((agent)) installation package + +On your host, download and extract the installation package that corresponds with your system: + +<DownloadWidget /> + +### Step 2: Install and start the ((agent)) +After downloading and extracting the installation package, you're ready to install the ((agent)). +From the agent directory, run the install command that corresponds with your system: + +<DocCallOut title="Note"> +On macOS, Linux (tar package), and Windows, run the `install` command to +install and start ((agent)) as a managed service and start the service. The DEB and RPM +packages include a service unit for Linux systems with +systemd, For these systems, you must enable and start the service. +</DocCallOut> + +<RunStandaloneWidget /> + +<br /> + +During installation, you'll be prompted with some questions: + +1. When asked if you want to install the agent as a service, enter `Y`. +1. When asked if you want to enroll the agent in Fleet, enter `n`. + +### Step 3: Configure the ((agent)) + +After your agent is installed, configure it by updating the `elastic-agent.yml` file. + +#### Locate your configuration file + +You'll find the `elastic-agent.yml` in one of the following locations according to your system: + +<AgentLocationWidget /> + +#### Update your configuration file + +Update the default configuration in the `elastic-agent.yml` file manually. +It should look something like this: + +```yaml +outputs: + default: + type: elasticsearch + hosts: '<your-elasticsearch-endpoint>:<port>' + api_key: 'your-api-key' +inputs: + - id: your-log-id + type: filestream + streams: + - id: your-log-stream-id + data_stream: + dataset: example + paths: + - /var/log/your-logs.log +``` + +You need to set the values for the following fields: + +<DocTable columns={[ + { title: "Field", width: "25%" }, + { title: "Value", width: "75%" } +]}> + <DocRow> + <DocCell>`hosts`</DocCell> + <DocCell> + Copy the ((es)) endpoint from your project's page and add the port (the default port is `443`). For example, `https://my-deployment.es.us-central1.gcp.cloud.es.io:443`. + + If you're following the guided instructions in your project, + the ((es)) endpoint will be prepopulated in the configuration file. + + <DocCallOut title="Tip"> + If you need to find your project's ((es)) endpoint outside the guided instructions: + + 1. Go to the **Projects** page that lists all your projects. + 1. Click **Manage** next to the project you want to connect to. + 1. Click **View** next to _Endpoints_. + 1. Copy the _Elasticsearch endpoint_. + + <br /> + + ![Copy a project's Elasticsearch endpoint](../images/log-copy-es-endpoint.png) + </DocCallOut> + </DocCell> + </DocRow> + <DocRow> + <DocCell>`api-key`</DocCell> + <DocCell> + Use an API key to grant the agent access to your project. + The API key format should be `<id>:<key>`. + + If you're following the guided instructions in your project, an API key will be autogenerated + and will be prepopulated in the downloadable configuration file. + + <div id="api-key-beats"></div> + + If configuring the ((agent)) manually, create an API key: + + 1. Navigate to **Project settings** → **Management** → **API keys** and click **Create API key**. + 1. Select **Restrict privileges** and add the following JSON to give privileges for ingesting logs. + ```json + { + "standalone_agent": { + "cluster": [ + "monitor" + ], + "indices": [ + { + "names": [ + "logs-*-*" + ], + "privileges": [ + "auto_configure", "create_doc" + ] + } + ] + } + } + ``` + 1. You _must_ set the API key to configure ((beats)). + Immediately after the API key is generated and while it is still being displayed, click the + **Encoded** button next to the API key and select **Beats** from the list in the tooltip. + Base64 encoded API keys are not currently supported in this configuration. + + ![](../images/logs-stream-logs-api-key-beats.png) + </DocCell> + </DocRow> + <DocRow> + <DocCell>`inputs.id`</DocCell> + <DocCell> + A unique identifier for your input. + </DocCell> + </DocRow> + <DocRow> + <DocCell>`type`</DocCell> + <DocCell> + The type of input. For collecting logs, set this to `filestream`. + </DocCell> + </DocRow> + <DocRow> + <DocCell>`streams.id`</DocCell> + <DocCell> + A unique identifier for your stream of log data. + + If you're following the guided instructions in your project, this will be prepopulated with + the value you specified in <DocLink id="serverlessObservabilityStreamLogFiles" section="configure-inputs-and-integration">Configure inputs and integration</DocLink>. + </DocCell> + </DocRow> + <DocRow> + <DocCell>`data_stream.dataset`</DocCell> + <DocCell> + The name for your dataset data stream. Name this data stream anything that signifies the source of the data. In this configuration, the dataset is set to `example`. The default value is `generic`. + + If you're following the guided instructions in your project, this will be prepopulated with + the value you specified in <DocLink id="serverlessObservabilityStreamLogFiles" section="configure-inputs-and-integration">Configure inputs and integration</DocLink>. + </DocCell> + </DocRow> + <DocRow> + <DocCell>`paths`</DocCell> + <DocCell> + The path to your log files. You can also use a pattern like `/var/log/your-logs.log*`. + + If you're following the guided instructions in your project, this will be prepopulated with + the value you specified in <DocLink id="serverlessObservabilityStreamLogFiles" section="configure-inputs-and-integration">Configure inputs and integration</DocLink>. + </DocCell> + </DocRow> +</DocTable> + +#### Restart the ((agent)) + +After updating your configuration file, you need to restart the ((agent)). + +First, stop the ((agent)) and its related executables using the command that works with your system: + +<StopWidget /> + +<br /> + +Next, restart the ((agent)) using the command that works with your system: + +<StartWidget /> + +## Troubleshoot your ((agent)) configuration + +If you're not seeing your log files in your project, verify the following in the `elastic-agent.yml` file: + +- The path to your logs file under `paths` is correct. +- Your API key is in `<id>:<key>` format. If not, your API key may be in an unsupported format, and you'll need to create an API key in **Beats** format. + +If you're still running into issues, refer to [((agent)) troubleshooting](((fleet-guide))/fleet-troubleshooting.html) and [Configure standalone Elastic Agents](((fleet-guide))/elastic-agent-configuration.html). + +## Next steps + +After you have your agent configured and are streaming log data to your project: + +- Refer to the <DocLink id="serverlessObservabilityParseLogData">Parse and organize logs</DocLink> documentation for information on extracting structured fields from your log data, rerouting your logs to different data streams, and filtering and aggregating your log data. +- Refer to the <DocLink id="serverlessObservabilityFilterAndAggregateLogs">Filter and aggregate logs</DocLink> documentation for information on filtering and aggregating your log data to find specific information, gain insight, and monitor your systems more efficiently. diff --git a/docs/en/serverless/logging/troubleshoot-logs.mdx b/docs/en/serverless/logging/troubleshoot-logs.mdx new file mode 100644 index 0000000000..c7aefbbb47 --- /dev/null +++ b/docs/en/serverless/logging/troubleshoot-logs.mdx @@ -0,0 +1,114 @@ +--- +id: serverlessObservabilityTroubleshootLogs +slug: /serverless/observability/troubleshoot-logs +title: Troubleshoot logs +description: Find solutions to errors you might encounter while onboarding your logs. +tags: [ 'serverless', 'observability', 'troubleshooting' ] +--- + +<p><DocBadge template="technical preview" /></p> + +This section provides possible solutions for errors you might encounter while onboarding your logs. + +## User does not have permissions to create API key + +When adding a new data using the guided instructions in your project (**Add data** → **Collect and analyze logs** → **Stream log files**), +if you don't have the required privileges to create an API key, you'll see the following error message: + +>You need permission to manage API keys + +### Solution + +You need to either: + +* Ask an administrator to update your user role to at least **Deployment access** → **Admin**. Read more about user roles in <DocLink id="serverlessGeneralAssignUserRoles" />. After your use role is updated, restart the onboarding flow. +* Get an API key from an administrator and manually add the API to the ((agent)) configuration. See <DocLink id="serverlessObservabilityStreamLogFiles" section="step-3-configure-the-agent">Configure the ((agent))</DocLink> for more on manually updating the configuration and adding the API key. + +{/* Not sure if these are different in serverless... */} + +{/* ## Failed to create API key + +If you don't have the privileges to create `savedObjects` in a project, you'll see the following error message: + +```plaintext +Failed to create API key + +Something went wrong: Unable to create observability-onboarding-state +``` + +### Solution + +You need an administrator to give you the `Saved Objects Management` ((kib)) privilege to generate the required `observability-onboarding-state` flow state. +Once you have the necessary privileges, restart the onboarding flow. */} + +## Observability project not accessible from host + +If your Observability project is not accessible from the host, you'll see the following error message after pasting the **Install the ((agent))** instructions into the host: + +```plaintext +Failed to connect to {host} port {port} after 0 ms: Connection refused +``` + +### Solution + +The host needs access to your project. Port `443` must be open and the project's ((es)) endpoint must be reachable. You can locate your project's endpoint by clicking the help icon (<DocIcon type="help" title="Help icon" />) and selecting **Endpoints**. Run the following command, replacing the URL with your endpoint, and you should get an authentication error with more details on resolving your issue: + +```shell +curl https://your-endpoint.elastic.cloud +``` + +## Download ((agent)) failed + +If the host was able to download the installation script but cannot connect to the public artifact repository, you'll see the following error message: + +```plaintext +Download Elastic Agent + +Failed to download Elastic Agent, see script for error. +``` + +### Solutions + +* If the combination of the ((agent)) version and operating system architecture is not available, you'll see the following error message: + + ```plaintext + The requested URL returned error: 404 + ``` + + To fix this, update the ((agent)) version in the installation instructions to a known version of the ((agent)). + +* If the ((agent)) was fully downloaded previously, you'll see the following error message: + + ```plaintext + Error: cannot perform installation as Elastic Agent is already running from this directory + ``` + + To fix this, delete previous downloads and restart the onboarding. + +* You're an Elastic Cloud Enterprise user without access to the Elastic downloads page. + +## Install ((agent)) failed + +If an ((agent)) already exists on your host, you'll see the following error message: + +```plaintext +Install Elastic Agent + +Failed to install Elastic Agent, see script for error. +``` + +### Solution + +You can uninstall the current ((agent)) using the `elastic-agent uninstall` command, and run the script again. + +<DocCallOut title="Warning" color="warning"> +Uninstalling the current ((agent)) removes the entire current setup, including the existing configuration. +</DocCallOut> + +## Waiting for Logs to be shipped... step never completes + +If the **Waiting for Logs to be shipped...** step never completes, logs are not being shipped to your Observability project, and there is most likely an issue with your ((agent)) configuration. + +### Solution + +Inspect the ((agent)) logs for errors. See the [Debug standalone ((agent))s](((fleet-guide))/debug-standalone-agents.html#inspect-standalone-agent-logs) documentation for more on finding errors in ((agent)) logs. diff --git a/docs/en/serverless/logging/view-and-monitor-logs.mdx b/docs/en/serverless/logging/view-and-monitor-logs.mdx new file mode 100644 index 0000000000..0378428335 --- /dev/null +++ b/docs/en/serverless/logging/view-and-monitor-logs.mdx @@ -0,0 +1,81 @@ +--- +id: serverlessObservabilityDiscoverAndExploreLogs +slug: /serverless/observability/discover-and-explore-logs +title: Explore logs +description: Visualize and analyze logs. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +With **Logs Explorer**, based on Discover, you can quickly search and filter your log data, get information about the structure of log fields, and display your findings in a visualization. +You can also customize and save your searches and place them on a dashboard. +Instead of having to log into different servers, change directories, and view individual files, all your logs are available in a single view. + +Go to Logs Explorer by opening **Discover** from the navigation menu, and selecting the **Logs Explorer** tab. + +![Screen capture of the Logs Explorer](../images/log-explorer.png) + +## Required ((kib)) privileges + +Viewing data in Logs Explorer requires `read` privileges for **Discover** and **Integrations**. +For more on assigning Kibana privileges, refer to the [((kib)) privileges](((kibana-ref))/kibana-privileges.html) docs. + +## Find your logs + +By default, Logs Explorer shows all of your logs. +If you need to focus on logs from a specific integrations, select the integration from the logs menu: + +<DocImage size="l" url="../images/log-menu.png" alt="Screen capture of log menu" /> + +Once you have the logs you want to focus on displayed, you can drill down further to find the information you need. +For more on filtering your data in Logs Explorer, refer to <DocLink id="serverlessObservabilityFilterAndAggregateLogs" section="filter-logs-in-logs-explorer">Filter logs in Log Explorer</DocLink>. + +## Review log data in the documents table + +The documents table in Logs Explorer functions similarly to the table in Discover. +You can add fields, order table columns, sort fields, and update the row height in the same way you would in Discover. + +Refer to the [Discover](((kibana-ref))/discover.html) documentation for more information on updating the table. + +### Analyze data with smart fields + +Smart fields are dynamic fields that provide valuable insight on where your log documents come from, what information they contain, and how you can interact with them. +The following sections detail the smart fields available in Logs Explorer. + +#### Resource smart field + +The resource smart field shows where your logs are coming from by displaying fields like `service.name`, `container.name`, `orchestrator.namespace`, `host.name`, and `cloud.instance.id`. +Use this information to see where issues are coming from and if issues are coming from the same source. + +#### Content smart field + +The content smart field shows your logs' `log.level` and `message` fields. +If neither of these fields are available, the content smart field will show the `error.message` or `event.original` field. +Use this information to see your log content and inspect issues. + +#### Actions smart field + +The actions smart field provides access to additional information about your logs. + +**Expand:** (<DocIcon type="expand" title="expand icon" />) Open the log details to get an in-depth look at an individual log file. + +**Degraded document indicator:** (<DocIcon type="pagesSelect" title="degraded document indicator icon" />) Shows if any of the document's fields were ignored when it was indexed. +Ignored fields could indicate malformed fields or other issues with your document. Use this information to investigate and determine why fields are being ignored. + +**Stacktrace indicator:** (<DocIcon type="apmTrace" title="stacktrace indicator icon" />) Shows if the document contains stack traces. +This indicator makes it easier to navigate through your documents and know if they contain additional information in the form of stack traces. + +## View log details + +Click the expand icon (<DocIcon type="expand" title="expand icon" />) in the **Actions** column to get an in-depth look at an individual log file. + +These details provide immediate feedback and context for what's happening and where it's happening for each log. +From here, you can quickly debug errors and investigate the services where errors have occurred. + +The following actions help you filter and focus on specific fields in the log details: + +* **Filter for value (<DocIcon type="plusInCircle" title="filter for value icon" />):** Show logs that contain the specific field value. +* **Filter out value (<DocIcon type="minusInCircle" title="filter out value icon" />):** Show logs that do _not_ contain the specific field value. +* **Filter for field present (<DocIcon type="filter" title="filter for present icon" />):** Show logs that contain the specific field. +* **Toggle column in table (<DocIcon type="listAdd" title="toggle column in table icon" />):** Add or remove a column for the field to the main Logs Explorer table. \ No newline at end of file diff --git a/docs/en/serverless/observability-overview.mdx b/docs/en/serverless/observability-overview.mdx new file mode 100644 index 0000000000..dc50701bf2 --- /dev/null +++ b/docs/en/serverless/observability-overview.mdx @@ -0,0 +1,137 @@ +--- +id: serverlessObservabilityOverview +slug: /serverless/observability/serverless-observability-overview +title: Observability overview +description: Learn how to accelerate problem resolution with open, flexible, and unified observability powered by advanced machine learning and analytics. +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="observability-introduction"></div> + +((observability)) provides granular insights and context into the behavior of applications running in your environments. +It's an important part of any system that you build and want to monitor. +Being able to detect and fix root cause events quickly within an observable system is a minimum requirement for any analyst. + +Elastic ((observability)) provides a single stack to unify your logs, metrics, and application traces. +Ingest your data directly to your Observability project, where you can further process and enhance the data, +before visualizing it and adding alerts. + +<DocImage size="xl" flatImage url="./images/serverless-capabilities.svg" alt="Elastic ((observability)) overview diagram"/> + +<div id="apm-overview"></div> + +## Log monitoring + +Analyze log data from your hosts, services, Kubernetes, Apache, and many more. + +In **Logs Explorer** (powered by Discover), you can quickly search and filter your log data, +get information about the structure of the fields, and display your findings in a visualization. + +![Logs Explorer showing log events](images/log-explorer-overview.png) + +<DocLink id="serverlessObservabilityLogMonitoring">Learn more about log monitoring →</DocLink> + +<div id="synthetic-monitoring-overview"></div> + +{/* RUM is not supported for this release. */} + +{/* Synthetic monitoring is not supported for this release. */} + +{/* Universal Profiling is not supported for this release. */} + +## Application performance monitoring (APM) + +Instrument your code and collect performance data and errors at runtime by installing APM agents like Java, Go, .NET, and many more. +Then use ((observability)) to monitor your software services and applications in real time: + +* Visualize detailed performance information on your services. +* Identify and analyze errors. +* Monitor host-level and APM agent-specific metrics like JVM and Go runtime metrics. + +The **Service** inventory provides a quick, high-level overview of the health and general performance of all instrumented services. + +![Service inventory showing health and performance of instrumented services](images/services-inventory.png) + +<DocLink id="serverlessObservabilityApm">Learn more about Application performance monitoring (APM) →</DocLink> + +<div id="metrics-overview"></div> + +## Infrastructure monitoring + +Monitor system and service metrics from your servers, Docker, Kubernetes, Prometheus, and other services and applications. + +The **Infrastructure** UI provides a couple ways to view and analyze metrics across your infrastructure: + +The **Inventory** page provides a view of your infrastructure grouped by resource type. + +![((infrastructure-app)) in ((kib))](images/metrics-app.png) + +The **Hosts** page provides a dashboard-like view of your infrastructure and is backed by an easy-to-use interface called Lens. + +![Screenshot of the Hosts page](images/hosts.png) + +From either page, you can view health and performance metrics to get visibility into the overall health of your infrastructure. +You can also drill down into details about a specific host, including performance metrics, host metadata, running processes, +and logs. + +<DocLink id="serverlessObservabilityInfrastructureMonitoring">Learn more about infrastructure monitoring → </DocLink> + +## Synthetic monitoring + +Simulate actions and requests that an end user would perform on your site at predefined intervals and in a controlled environment. +The end result is rich, consistent, and repeatable data that you can trend and alert on. + +For more information, see <DocLink id="serverlessObservabilityMonitorSynthetics">Synthetic monitoring</DocLink>. + +## Alerting + +Stay aware of potential issues in your environments with ((observability))’s alerting +and actions feature that integrates with log monitoring and APM. +It provides a set of built-in actions and specific threshold rules +and enables central management of all rules. + +On the **Alerts** page, the **Alerts** table provides a snapshot of alerts occurring within the specified time frame. The table includes the alert status, when it was last updated, the reason for the alert, and more. + +![Summary of Alerts on the ((observability)) overview page](images/observability-alerts-overview.png) + +<DocLink id="serverlessObservabilityAlerting">Learn more about alerting → </DocLink> + +## Service-level objectives (SLOs) + +Set clear, measurable targets for your service performance, +based on factors like availability, response times, error rates, and other key metrics. +Then monitor and track your SLOs in real time, +using detailed dashboards and alerts that help you quickly identify and troubleshoot issues. + +From the SLO overview list, you can see all of your SLOs and a quick summary of what’s happening in each one: + +![Dashboard showing list of SLOs](images/slo-dashboard.png) + +<DocLink id="serverlessObservabilitySlos">Learn more about SLOs → </DocLink> + +## Cases + +Collect and share information about observability issues by creating cases. +Cases allow you to track key investigation details, +add assignees and tags to your cases, set their severity and status, and add alerts, +comments, and visualizations. You can also send cases to third-party systems, +such as ServiceNow and Jira. + +![Screenshot showing list of cases](images/cases.png) + +<DocLink id="serverlessObservabilityCases">Learn more about cases → </DocLink> + +## AIOps + +Reduce the time and effort required to detect, understand, investigate, and resolve incidents at scale +by leveraging predictive analytics and machine learning: + +* Detect anomalies by comparing real-time and historical data from different sources to look for unusual, problematic patterns. +* Find and investigate the causes of unusual spikes or drops in log rates. +* Detect distribution changes, trend changes, and other statistically significant change points in a metric of your time series data. + +![Log rate analysis page showing log rate spike ](images/log-rate-analysis.png) + +<DocLink id="serverlessObservabilityAiops">Learn more about AIOps →</DocLink> diff --git a/docs/en/serverless/partials/apm-agent-warning.mdx b/docs/en/serverless/partials/apm-agent-warning.mdx new file mode 100644 index 0000000000..49b4b09d1d --- /dev/null +++ b/docs/en/serverless/partials/apm-agent-warning.mdx @@ -0,0 +1,3 @@ +<DocCallOut color="warning" title="Important"> + Not all APM agent configuration options are compatible with Elastic Cloud serverless. +</DocCallOut> \ No newline at end of file diff --git a/docs/en/serverless/partials/feature-beta.mdx b/docs/en/serverless/partials/feature-beta.mdx new file mode 100644 index 0000000000..3736786360 --- /dev/null +++ b/docs/en/serverless/partials/feature-beta.mdx @@ -0,0 +1,3 @@ +<DocCallOut color="warning" title={`${props.feature} is in beta`}> + The {props.feature} functionality is in beta and is subject to change. The design and code is less mature than official generally available features and is being provided as-is with no warranties. +</DocCallOut> \ No newline at end of file diff --git a/docs/en/serverless/partials/roles.mdx b/docs/en/serverless/partials/roles.mdx new file mode 100644 index 0000000000..06bda64b93 --- /dev/null +++ b/docs/en/serverless/partials/roles.mdx @@ -0,0 +1,3 @@ +<DocCallOut title="Required role"> + The **{props.role}** role or higher is required to {props.goal}. To learn more, refer to <DocLink id="serverlessGeneralAssignUserRoles" />. +</DocCallOut> \ No newline at end of file diff --git a/docs/en/serverless/projects/billing.mdx b/docs/en/serverless/projects/billing.mdx new file mode 100644 index 0000000000..77c1993241 --- /dev/null +++ b/docs/en/serverless/projects/billing.mdx @@ -0,0 +1,23 @@ +--- +id: serverlessObservabilityBilling +slug: /serverless/observability/observability-billing +title: Observability billing dimensions +description: Learn about how Observability usage affects pricing. +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Elastic Observability severless projects provide you with all the capabilities of Elastic Observability to monitor critical applications. +Projects are provided using a Software as a Service (SaaS) model, and pricing is entirely consumption-based. + +Your monthly bill is based on the capabilities you use. +When you use Elastic Observability, your bill is calculated based on data volume, which has these components: + +* **Ingest** — Measured by the number of GB of log/event/info data that you send to your Observability project over the course of a month. +* **Storage/Retention** — This is known as Search AI Lake. +* In addition to the core ingest and retention dimensions, there is an optional charge to execute synthetic monitors on our testing infrastructure. +Browser (journey) based tests are charged on a per-test-run basis, +and Ping (lightweight) tests have an all-you-can-use model per location used. + +For detailed Observability serverless project rates, refer to the [Elastic Cloud pricing table](https://cloud.elastic.co/cloud-pricing-table?productType=serverless&project=observability). diff --git a/docs/en/serverless/projects/create-an-observability-project.mdx b/docs/en/serverless/projects/create-an-observability-project.mdx new file mode 100644 index 0000000000..1d95b532ef --- /dev/null +++ b/docs/en/serverless/projects/create-an-observability-project.mdx @@ -0,0 +1,40 @@ +--- +id: serverlessObservabilityCreateAnObservabilityProject +slug: /serverless/observability/create-an-observability-project +title: Create an Elastic ((observability)) project +description: Create a fully-managed Elastic ((observability)) project to monitor the health of your applications. +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +import Roles from '../partials/roles.mdx' + +<Roles role="Admin" goal="create projects" /> + +<p><DocBadge template="technical preview" /></p> + +An ((observability)) project allows you to run Elastic ((observability)) in an autoscaled and fully-managed environment, +where you don't have to manage the underlying ((es)) cluster or ((kib)) instances. + +1. Navigate to [cloud.elastic.co](https://cloud.elastic.co/) and log in to your account. +1. Within **Serverless projects**, click **Create project**. +1. Under **Observability**, click **Next**. +1. Enter a name for your project. +1. (Optional) Click **Edit settings** to change your project settings: + * **Cloud provider**: The cloud platform where you’ll deploy your project. We currently support Amazon Web Services (AWS). + * **Region**: The region where your project will live. The region should be as close as possible to the location of your data. +1. Click **Create project**. It takes a few minutes to create your project. +1. When the project is ready, click **Continue**. + +From here, you can start adding logs and other observability data. + +<DocCallOut title="Tip"> + To return to the onboarding page later, select **Add data** from the main menu. +</DocCallOut> + +## Next steps + +Learn how to add data to your project and start using ((observability)) features: + +* <DocLink id="serverlessObservabilityGetStartedWithLogs"/> +* <DocLink id="serverlessObservabilityApmGetStarted"/> +* <DocLink id="serverlessObservabilityGetStartedWithMetrics"/> diff --git a/docs/en/serverless/serverless-observability.docnav.json b/docs/en/serverless/serverless-observability.docnav.json new file mode 100644 index 0000000000..aa79c73fb1 --- /dev/null +++ b/docs/en/serverless/serverless-observability.docnav.json @@ -0,0 +1,635 @@ +{ + "mission": "Elastic Observability", + "id": "serverless-observability", + "landingPageId": "serverlessObservabilityWhatIsObservabilityServerless", + "icon": "logoObservability", + "description": "Description to be written", + "items": [ + { + "pageId": "serverlessObservabilityOverview", + "classic-sources": [ "enObservabilityObservabilityIntroduction" ], + "classic-skip": true + }, + { + "pageId": "serverlessObservabilityBilling" + }, + { + "label": "Create an Observability project", + "pageId": "serverlessObservabilityCreateAnObservabilityProject" + }, + { + "pageId": "serverlessObservabilityLogMonitoring", + "classic-sources": ["enObservabilityLogsObservabilityOverview"], + "items": [ + { + "id": "serverlessObservabilityGetStartedWithLogs" + }, + { + "id": "serverlessObservabilityStreamLogFiles", + "classic-sources": ["enObservabilityLogsStream"] + }, + { + "id": "serverlessObservabilityCorrelateApplicationLogs", + "classic-sources": [ "enObservabilityApplicationLogs" ], + "items": [ + { + "id": "serverlessObservabilityPlaintextApplicationLogs", + "classic-sources": [ + "enObservabilityPlaintextLogs" + ] + }, + { + "id": "serverlessObservabilityECSApplicationLogs", + "classic-sources": [ + "enObservabilityEcsLoggingLogs" + ] + }, + { + "id": "serverlessObservabilitySendApplicationLogs", + "classic-sources": [ + "enObservabilityApmAgentLogSending" + ] + } + ] + }, + { + "id": "serverlessObservabilityParseLogData", + "classic-sources": ["enObservabilityLogsParse"] + }, + { + "id": "serverlessObservabilityFilterAndAggregateLogs", + "classic-sources": ["enObservabilityLogsFilterAndAggregate"] + }, + { + "id": "serverlessObservabilityDiscoverAndExploreLogs", + "classic-sources": ["enObservabilityMonitorLogs"], + "classic-skip": true + }, + { + "id": "serverlessObservabilityRunLogPatternAnalysis", + "classic-sources": ["enKibanaRunPatternAnalysisDiscover"] + }, + { + "id": "serverlessObservabilityTroubleshootLogs", + "classic-sources": ["enObservabilityLogsTroubleshooting"] + } + ] + }, + { + "pageId": "serverlessObservabilityApm", + "classic-sources": [ "enApmGuideApmOverview" ], + "items": [ + { + "id": "serverlessObservabilityApmGetStarted", + "classic-sources": [ "enObservabilityIngestTraces" ], + "classic-skip": true + }, + { + "id": "serverlessObservabilityApmSendTracesToElastic", + "classic-sources": [], + "items": [ + { + "id": "serverlessObservabilityApmAgents" + }, + { + "id": "serverlessObservabilityApmAgentsOtel", + "classic-sources": [ "enApmGuideOpenTelemetry" ], + "items": [ + { + "id": "serverlessObservabilityApmAgentsOtelApisdkWithElasticApmAgents", + "classic-sources": [ + "enApmGuideOpenTelemetryWithElastic" + ] + }, + { + "id": "serverlessObservabilityApmAgentsOtelNativeSupport", + "classic-sources": [ + "enApmGuideOpenTelemetryDirect" + ] + }, + { + "id": "serverlessObservabilityOtelLambdaSupport", + "classic-sources": [ + "enApmGuideOpenTelemetryOtherEnv" + ] + }, + { + "id": "serverlessObservabilityApmAgentsOtelCollectMetrics", + "classic-sources": [ + "enApmGuideOpenTelemetryCollectMetrics" + ] + }, + { + "id": "serverlessObservabilityApmAgentsOtelLimitations", + "classic-sources": [ + "enApmGuideOpenTelemetryKnownLimitations" + ] + }, + { + "id": "serverlessObservabilityApmAgentsOtelResourceAttributes", + "classic-sources": [ + "enApmGuideOpenTelemetryResourceAttributes" + ] + } + ] + }, + { + "id": "serverlessObservabilityApmAgentsAwsLambdaFunctions", + "classic-sources": [ + "enApmGuideMonitoringAwsLambda", + "enApmLambdaAwsLambdaArch" + ] + } + ] + }, + { + "id": "serverlessObservabilityApmViewAndAnalyzeTraces", + "classic-sources": [ + "enKibanaXpackApm" + ], + "items": [ + { + "id": "serverlessObservabilityApmFindTransactionLatencyAndFailureCorrelations", + "classic-sources": [ + "enKibanaCorrelations" + ] + }, + { + "id": "serverlessObservabilityApmIntegrateWithMachineLearning", + "classic-sources": [ + "enKibanaMachineLearningIntegration" + ] + }, + { + "id": "serverlessObservabilityApmCreateCustomLinks", + "classic-sources": [ + "enKibanaCustomLinks" + ] + }, + { + "id": "serverlessObservabilityApmTrackDeploymentsWithAnnotations", + "classic-sources": [ + "enKibanaTransactionsAnnotations" + ] + }, + { + "id": "serverlessObservabilityApmQueryYourData", + "classic-sources": [ + "enKibanaAdvancedQueries" + ] + }, + { + "id": "serverlessObservabilityApmFilterYourData", + "classic-sources": [ + "enKibanaFilters" + ] + }, + { + "id": "serverlessObservabilityApmObserveLambdaFunctions", + "classic-sources": [ + "enKibanaApmLambda" + ] + }, + { + "id": "serverlessObservabilityApmUiOverview", + "classic-sources": [ + "enKibanaApmGettingStarted" + ], + "items": [ + { + "id": "serverlessObservabilityApmServices", + "classic-sources": [ + "enKibanaServices" + ] + }, + { + "id": "serverlessObservabilityApmTraces", + "classic-sources": [ + "enKibanaTraces" + ] + }, + { + "id": "serverlessObservabilityApmDependencies", + "classic-sources": [ + "enKibanaDependencies" + ] + }, + { + "id": "serverlessObservabilityApmServiceMap", + "classic-sources": [ + "enKibanaServiceMaps" + ] + }, + { + "id": "serverlessObservabilityApmServiceOverview", + "classic-sources": [ + "enKibanaServiceOverview" + ] + }, + { + "id": "serverlessObservabilityApmTransactions", + "classic-sources": [ + "enKibanaTransactions" + ] + }, + { + "id": "serverlessObservabilityApmTraceSampleTimeline", + "classic-sources": [ + "enKibanaSpans" + ] + }, + { + "id": "serverlessObservabilityApmErrors", + "classic-sources": [ + "enKibanaErrors" + ] + }, + { + "id": "serverlessObservabilityApmMetrics", + "classic-sources": [ + "enKibanaMetrics" + ] + }, + { + "id": "serverlessObservabilityApmInfrastructure", + "classic-sources": [ + "enKibanaInfrastructure" + ] + }, { + "id": "serverlessObservabilityApmLogs", + "classic-sources": [ + "enKibanaLogs" + ] + } + ] + } + ] + }, + { + "id": "serverlessObservabilityApmDataTypes", + "classic-sources": [ "" ] + }, + { + "id": "serverlessObservabilityApmDistributedTracing", + "classic-sources": [ + "enApmGuideApmDistributedTracing" + ] + }, + { + "id": "serverlessObservabilityApmReduceYourDataUsage", + "classic-sources": [ "" ], + "items": [ + { + "id": "serverlessObservabilityApmTransactionSampling", + "classic-sources": [ + "enApmGuideSampling", + "enApmGuideConfigureHeadBasedSampling" + ] + }, + { + "id": "serverlessObservabilityApmCompressSpans", + "classic-sources": [ + "enApmGuideSpanCompression" + ] + }, + { + "id": "serverlessObservabilityApmReduceStackTrace" + } + ] + }, + { + "id": "serverlessObservabilityApmKeepDataSecure", + "classic-sources": [ "enApmGuideSecureAgentCommunication" ] + }, + { + "id": "serverlessObservabilityApmTroubleshooting", + "classic-sources": [ + "enApmGuideTroubleshootApm", + "enApmGuideCommonProblems", + "enApmGuideServerEsDown", + "enApmGuideCommonResponseCodes", + "enApmGuideProcessingAndPerformance" + ] + }, + { + "id": "serverlessObservabilityApmReference", + "classic-sources": [], + "items": [ + { + "id": "serverlessObservabilityApmKibanaSettings" + }, + { + "id": "serverlessObservabilityApmServerApi", + "classic-sources": [ + "enApmGuideApi", + "enApmGuideApiEvents", + "enApmGuideApiMetadata", + "enApmGuideApiTransaction", + "enApmGuideApiSpan", + "enApmGuideApiError", + "enApmGuideApiMetricset", + "enApmGuideApiConfig", + "enApmGuideApiInfo", + "enApmGuideApiOtlp" + ] + } + ] + } + ] + }, + { + "pageId": "serverlessObservabilityInfrastructureMonitoring", + "classic-sources": ["enObservabilityAnalyzeMetrics"], + "items": [ + { + "id": "serverlessObservabilityGetStartedWithMetrics" + }, + { + "id": "serverlessObservabilityViewInfrastructureMetrics", + "classic-sources": ["enObservabilityViewInfrastructureMetrics"] + }, + { + "id": "serverlessObservabilityAnalyzeHosts", + "classic-sources": ["enObservabilityAnalyzeHosts"] + }, + { + "id": "serverlessObservabilityDetectMetricAnomalies", + "classic-sources": ["enObservabilityInspectMetricAnomalies"] + }, + { + "id": "serverlessObservabilityConfigureInfraSettings", + "classic-sources": ["enObservabilityConfigureSettings"] + }, + { + "pageId": "serverlessObservabilityMetricsReference", + "classic-sources": ["enObservabilityMetricsReference"], + "items": [ + { + "id": "serverlessObservabilityHostMetrics", + "classic-sources": ["enObservabilityHostMetrics"] + }, + { + "id": "serverlessObservabilityKubernetesPodMetrics", + "classic-sources": ["enObservabilityKubernetesPodMetrics"] + }, + { + "id": "serverlessObservabilityDockerContainerMetrics", + "classic-sources": ["enObservabilityDockerContainerMetrics"] + }, + { + "id": "serverlessObservabilityAwsMetrics", + "classic-sources": ["enObservabilityAwsMetrics"] + } + ] + }, + { + "id": "serverlessObservabilityMetricsFields", + "classic-sources": ["enObservabilityMetricsAppFields"] + } + ] + }, + { + "label": "Synthetic monitoring", + "pageId": "serverlessObservabilityMonitorSynthetics", + "classic-sources": ["enObservabilityMonitorUptimeSynthetics"], + "items": [ + { + "label": "Get started", + "id": "serverlessObservabilitySyntheticsGetStarted", + "classic-sources": ["enObservabilitySyntheticsGetStarted"], + "items": [ + { + "label": "Use a Synthetics project", + "id": "serverlessObservabilitySyntheticsGetStartedProject", + "classic-sources": ["enObservabilitySyntheticsGetStartedProject"] + }, + { + "label": "Use the Synthetics UI", + "id": "serverlessObservabilitySyntheticsGetStartedUi", + "classic-sources": ["enObservabilitySyntheticsGetStartedUi"] + } + ] + }, + { + "label": "Scripting browser monitors", + "id": "serverlessObservabilitySyntheticsJourneys", + "classic-sources": ["enObservabilitySyntheticsJourneys"], + "items": [ + { + "label": "Write a synthetic test", + "id": "serverlessObservabilitySyntheticsCreateTest", + "classic-sources": ["enObservabilitySyntheticsCreateTest"] + }, + { + "label": "Configure individual monitors", + "id": "serverlessObservabilitySyntheticsMonitorUse", + "classic-sources": ["enObservabilitySyntheticsMonitorUse"] + }, + { + "label": "Use the Synthetics Recorder", + "id": "serverlessObservabilitySyntheticsRecorder", + "classic-sources": ["enObservabilitySyntheticsRecorder"] + } + ] + }, + { + "label": "Configure lightweight monitors", + "id": "serverlessObservabilitySyntheticsLightweight", + "classic-sources": ["enObservabilitySyntheticsLightweight"] + }, + { + "label": "Manage monitors", + "id": "serverlessObservabilitySyntheticsManageMonitors", + "classic-sources": ["enObservabilitySyntheticsManageMonitors"] + }, + { + "label": "Work with params and secrets", + "id": "serverlessObservabilitySyntheticsParamsSecrets", + "classic-sources": ["enObservabilitySyntheticsParamsSecrets"] + }, + { + "label": "Analyze monitor data", + "id": "serverlessObservabilitySyntheticsAnalyze", + "classic-sources": ["enObservabilitySyntheticsAnalyze"] + }, + { + "label": "Monitor resources on private networks", + "id": "serverlessObservabilitySyntheticsPrivateLocation", + "classic-sources": ["enObservabilitySyntheticsPrivateLocation"] + }, + { + "label": "Use the CLI", + "id": "serverlessObservabilitySyntheticsCommandReference", + "classic-sources": ["enObservabilitySyntheticsCommandReference"] + }, + { + "label": "Configure a Synthetics project", + "id": "serverlessObservabilitySyntheticsConfiguration", + "classic-sources": ["enObservabilitySyntheticsConfiguration"] + }, + { + "label": "Configure Synthetics settings", + "id": "serverlessObservabilitySyntheticsSettings", + "classic-sources": ["enObservabilitySyntheticsSettings"] + }, + { + "label": "Grant users access to secured resources", + "id": "serverlessObservabilitySyntheticsFeatureRoles", + "classic-sources": ["enObservabilitySyntheticsFeatureRoles"] + }, + { + "label": "Manage data retention", + "id": "serverlessObservabilitySyntheticsManageRetention", + "classic-sources": ["enObservabilitySyntheticsManageRetention"] + }, + { + "label": "Scale and architect a deployment", + "id": "serverlessObservabilitySyntheticsScaleAndArchitect", + "classic-sources": ["enObservabilitySyntheticsScaleAndArchitect"] + }, + { + "label": "Synthetics Encryption and Security", + "id": "serverlessObservabilitySyntheticsSecurityEncryption", + "classic-sources": ["enObservabilitySyntheticsSecurityEncryption"] + }, + { + "label": "Troubleshooting", + "id": "serverlessObservabilitySyntheticsTroubleshooting", + "classic-sources": ["enObservabilitySyntheticsTroubleshooting"] + } + ] + }, + { + "pageId": "serverlessObservabilityDashboards" + }, + { + "pageId": "serverlessObservabilityAlerting", + "classic-sources": ["enObservabilityCreateAlerts"], + "items": [ + { + "id": "serverlessObservabilityCreateRules", + "classic-sources": ["enKibanaCreateAndManageRules"], + "items": [ + { + "label": "Anomaly detection", + "id": "serverlessObservabilityGenerateAnomalyAlerts" + }, + { + "label": "APM anomaly", + "id": "serverlessObservabilityCreateAnomalyAlertRule" + }, + { + "label": "Custom threshold", + "id": "serverlessObservabilityCreateCustomThresholdAlertRule" + }, + { + "label": "Elasticsearch query", + "id": "serverlessObservabilityCreateElasticsearchQueryRule", + "classic-sources": ["enKibanaRuleTypeEsQuery"] + }, + { + "label": "Error count threshold", + "id": "serverlessObservabilityCreateErrorCountThresholdAlertRule" + }, + { + "label": "Failed transaction rate threshold", + "id": "serverlessObservabilityCreateFailedTransactionRateThresholdAlertRule" + }, + { + "label": "Inventory", + "id": "serverlessObservabilityCreateInventoryThresholdAlertRule", + "classic-sources": ["enObservabilityInfrastructureThresholdAlert"] + }, + { + "label": "Latency threshold", + "id": "serverlessObservabilityCreateLatencyThresholdAlertRule" + }, + { + "label": "SLO burn rate", + "id": "serverlessObservabilityCreateSloBurnRateAlertRule", + "classic-sources": [ "enObservabilitySloBurnRateAlert" ] + } + ] + }, + { + "pageId": "serverlessObservabilityAggregationOptions", + "items": [ + { + "id": "serverlessObservabilityRateAggregation" + } + ] + }, + { + "pageId": "serverlessObservabilityViewAlerts", + "classic-sources": ["enObservabilityViewObservabilityAlerts"], + "items": [ + { + "id": "serverlessObservabilitySloBurnRateBreaches", + "label": "SLO burn rate breaches" + }, + { + "id": "serverlessObservabilityThresholdBreaches", + "label": "Threshold breaches" + } + ] + } + ] + }, + { + "pageId": "serverlessObservabilitySlos", + "classic-sources": [ "enObservabilitySlo" ], + "items": [ + { + "id": "serverlessObservabilityCreateAnSlo", + "classic-sources": [ "enObservabilitySloCreate" ] + } + ] + }, + { + "pageId": "serverlessObservabilityCases", + "classic-sources": [ "enObservabilityCreateCases" ], + "items": [ + { + "id": "serverlessObservabilityCreateANewCase", + "classic-sources": [ "enObservabilityManageCases" ] + }, + { + "id": "serverlessObservabilitySendCasesToAnExternalSystem", + "classic-sources": [ "enObservabilityCasesExternalConnectors" ] + } + ] + }, + { + "pageId": "serverlessObservabilityAiops", + "items": [ + { + "pageId": "serverlessObservabilityAiopsDetectAnomalies", + "classic-sources": [ "enMachineLearningMlAdFindingAnomalies" ], + "classic-skip": true, + "items": [ + { + "id": "serverlessObservabilityAiopsTuneAnomalyDetectionJob" + }, + { + "id": "serverlessObservabilityAiopsDetectAnomaliesForecast" + } + ] + }, + { + "id": "serverlessObservabilityAiopsAnalyzeSpikes", + "classic-sources": [ "enKibanaXpackMlAiops" ] + }, + { + "id": "serverlessObservabilityAiopsDetectChangePoints" + } + ] + }, + { + "pageId": "serverlessObservabilityAiAssistant", + "classic-sources": [ "enObservabilityObsAiAssistant" ] + }, + { + "pageId": "serverlessObservabilityTechnicalPreviewLimitations" + } + ] +} \ No newline at end of file diff --git a/docs/en/serverless/slos/create-an-slo.mdx b/docs/en/serverless/slos/create-an-slo.mdx new file mode 100644 index 0000000000..7f97a7825f --- /dev/null +++ b/docs/en/serverless/slos/create-an-slo.mdx @@ -0,0 +1,216 @@ +--- +id: serverlessObservabilityCreateAnSlo +slug: /serverless/observability/create-an-slo +title: Create an SLO +description: Learn how to define a service-level indicator (SLI), set an objective, and create a service-level objective (SLO). +tags: [ 'serverless', 'observability', 'how-to' ] +--- + +<p><DocBadge template="technical preview" /></p> + +import Roles from '../partials/roles.mdx' + +<Roles role="Admin" goal="create SLOs" /> + +To create an SLO, in your ((observability)) project, go to **Observability** → **SLOs**: + +* If you're creating your first SLO, you'll see an introductory page. Click the **Create SLO** button. +* If you've created SLOs before, click the **Create new SLO** button in the upper-right corner of the page. + +From here, complete the following steps: + +1. <DocLink id="serverlessObservabilityCreateAnSlo" section="define-your-sli">Define your service-level indicator (SLI)</DocLink>. +1. <DocLink id="serverlessObservabilityCreateAnSlo" section="set-your-objectives">Set your objectives</DocLink>. +1. <DocLink id="serverlessObservabilityCreateAnSlo" section="describe-your-slo">Describe your SLO</DocLink>. + +<div id="define-sli"></div> + +## Define your SLI + +The type of SLI to use depends on the location of your data: + +* <DocLink id="serverlessObservabilityCreateAnSlo" section="custom-kql">Custom KQL</DocLink>: Create an SLI based on raw logs coming from your services. +* <DocLink id="serverlessObservabilityCreateAnSlo" section="timeslice-metric">Timeslice metric</DocLink>: Create an SLI based on a custom equation that uses multiple aggregations. +* <DocLink id="serverlessObservabilityCreateAnSlo" section="custom-metric">Custom metric</DocLink>: Create an SLI to define custom equations from metric fields in your indices. +* <DocLink id="serverlessObservabilityCreateAnSlo" section="histogram-metric">Histogram metric</DocLink>: Create an SLI based on histogram metrics. +* <DocLink id="serverlessObservabilityCreateAnSlo" section="apm-latency-and-apm-availability">APM latency and APM availability</DocLink>: Create an SLI based on services using application performance monitoring (APM). + +<div id="custom-kql"></div> + +### Custom KQL + +Create an indicator based on any of your ((es)) indices or data views. You define two queries: one that yields the good events from your index, and one that yields the total events from your index. + +**Example:** You can define a custom KQL indicator based on the `service-logs` index with the **good query** defined as `nested.field.response.latency <= 100 and nested.field.env : “production”` and the **total query** defined as `nested.field.env : “production”`. + +When defining a custom KQL SLI, set the following fields: + +* **Index:** The data view or index pattern you want to base the SLI on. For example, `service-logs`. +* **Timestamp field:** The timestamp field used by the index. +* **Query filter:** A KQL filter to specify relevant criteria by which to filter the index documents. +* **Good query:** The query yielding events that are considered good or successful. For example, `nested.field.response.latency <= 100 and nested.field.env : “production”`. +* **Total query:** The query yielding all events to take into account for computing the SLI. For example, `nested.field.env : “production”`. +* **Group by:** The field used to group the data based on the values of the specific field. For example, you could group by the `url.domain` field, which would create individual SLOs for each value of the selected field. + +<div id="custom-metric"></div> + +### Custom metric + +Create an indicator to define custom equations from metric fields in your indices. + +**Example:** You can define **Good events** as the sum of the field `processor.processed` with a filter of `"processor.outcome: \"success\""`, and the **Total events** as the sum of `processor.processed` with a filter of `"processor.outcome: *"`. + +When defining a custom metric SLI, set the following fields: + +* **Source** + * **Index:** The data view or index pattern you want to base the SLI on. For example, `my-service-*`. + * **Timestamp field:** The timestamp field used by the index. + * **Query filter:** A KQL filter to specify relevant criteria by which to filter the index documents. For example, `'field.environment : "production" and service.name : "my-service"'`. +* **Good events** + * **Metric [A-Z]:** The field that is aggregated using the `sum` aggregation for good events. For example, `processor.processed`. + * **Filter [A-Z]:** The filter to apply to the metric for good events. For example, `"processor.outcome: \"success\""`. + * **Equation:** The equation that calculates the good metric. For example, `A`. +* **Total events** + * **Metric [A-Z]:** The field that is aggregated using the `sum` aggregation for total events. For example, `processor.processed`. + * **Filter [A-Z]:** The filter to apply to the metric for total events. For example, `"processor.outcome: *"`. + * **Equation:** The equation that calculates the total metric. For example, `A`. +* **Group by:** The field used to group the data based on the values of the specific field. For example, you could group by the `url.domain` field, which would create individual SLOs for each value of the selected field. + +<div id="timeslice-metric"></div> + +### Timeslice metric + +Create an indicator based on a custom equation that uses statistical aggregations and a threshold to determine whether a slice is good or bad. +Supported aggregations include `Average`, `Max`, `Min`, `Sum`, `Cardinality`, `Last value`, `Std. deviation`, `Doc count`, and `Percentile`. +The equation supports basic math and logic. + +<DocCallOut title="Note"> + This indicator requires you to use the `Timeslices` budgeting method. +</DocCallOut> + +**Example:** You can define an indicator to determine whether a Kubernetes StatefulSet is healthy. +First you set the query filter to `orchestrator.cluster.name: "elastic-k8s" AND kubernetes.namespace: "my-ns" AND data_stream.dataset: "kubernetes.state_statefulset"`. +Then you define an equation that compares the number of ready (healthy) replicas to the number of observed replicas: +`A == B ? 1 : 0`, where `A` retrieves the last value of `kubernetes.statefulset.replicas.ready` and `B` retrieves the last value of `kubernetes.statefulset.replicas.observed`. +The equation returns `1` if the condition `A == B` is true (indicating the same number of replicas) or `0` if it's false. If the value is less than 1, you can determine that the Kubernetes StatefulSet is unhealthy. + +When defining a timeslice metric SLI, set the following fields: + +* **Source** + * **Index:** The data view or index pattern you want to base the SLI on. For example, `metrics-*:metrics-*`. + * **Timestamp field:** The timestamp field used by the index. + * **Query filter:** A KQL filter to specify relevant criteria by which to filter the index documents. For example, `orchestrator.cluster.name: "elastic-k8s" AND kubernetes.namespace: "my-ns" AND data_stream.dataset: "kubernetes.state_statefulset"`. +* **Metric definition** + * **Aggregation [A-Z]:** The type of aggregation to use. + * **Field [A-Z]:** The field to use in the aggregation. For example, `kubernetes.statefulset.replicas.ready`. + * **Filter [A-Z]:** The filter to apply to the metric. + * **Equation:** The equation that calculates the total metric. For example, `A == B ? 1 : 0`. + * **Comparator:** The type of comparison to perform. + * **Threshold:** The value to use along with the comparator to determine if the slice is good or bad. + +<div id="histogram-metric"></div> + +### Histogram metric + +Histograms record data in a compressed format and can record latency and delay metrics. You can create an SLI based on histogram metrics using a `range` aggregation or a `value_count` aggregation for both the good and total events. Filtering with KQL queries is supported on both event types. + +When using a `range` aggregation, both the `from` and `to` thresholds are required for the range and the events are the total number of events within that range. The range includes the `from` value and excludes the `to` value. + +**Example:** You can define your **Good events** using the `processor.latency` field with a filter of `"processor.outcome: \"success\""`, and your **Total events** using the `processor.latency` field with a filter of `"processor.outcome: *"`. + +When defining a histogram metric SLI, set the following fields: + +* **Source** + * **Index:** The data view or index pattern you want to base the SLI on. For example, `my-service-*`. + * **Timestamp field:** The timestamp field used by the index. + * **Query filter:** A KQL filter to specify relevant criteria by which to filter the index documents. For example, `field.environment : "production" and service.name : "my-service"`. +* **Good events** + * **Aggregation:** The type of aggregation to use for good events, either **Value count** or **Range**. + * **Field:** The field used to aggregate events considered good or successful. For example, `processor.latency`. + * **From:** (`range` aggregation only) The starting value of the range for good events. For example, `0`. + * **To:** (`range` aggregation only) The ending value of the range for good events. For example, `100`. + * **KQL filter:** The filter for good events. For example, `"processor.outcome: \"success\""`. +* **Total events** + * **Aggregation:** The type of aggregation to use for total events, either **Value count** or **Range**. + * **Field:** The field used to aggregate total events. For example, `processor.latency`. + * **From:** (`range` aggregation only) The starting value of the range for total events. For example, `0`. + * **To:** (`range` aggregation only) The ending value of the range for total events. For example, `100`. + * **KQL filter:** The filter for total events. For example, `"processor.outcome : *"`. +* **Group by:** The field used to group the data based on the values of the specific field. For example, you could group by the `url.domain` field, which would create individual SLOs for each value of the selected field. + +<div id="apm-latency-and-availability"></div> + +### APM latency and APM availability + +There are two types of SLI you can create based on services using application performance monitoring (APM): APM latency and APM availability. + +Use **APM latency** to create an indicator based on the APM data that you received from your instrumented services and a latency threshold. + +**Example:** You can define an indicator on an APM service named `banking-service` for the `production` environment, and the transaction name `POST /deposit` with a latency threshold value of 300ms. + +Use **APM availability** to create an indicator based on the APM data received from your instrumented services. + +**Example:** You can define an indicator on an APM service named `search-service` for the `production` environment, and the transaction name `POST /search`. + +When defining either an APM latency or APM availability SLI, set the following fields: + +* **Service name:** The APM service name. +* **Service environment:** Either `all` or the specific environment. +* **Transaction type:** Either `all` or the specific transaction type. +* **Transaction name:** Either `all` or the specific transaction name. +* **Threshold (APM latency only):** The latency threshold in milliseconds (ms) to consider the request as good. +* **Query filter:** An optional query filter on the APM data. + +<div id="set-slo"></div> + +## Set your objectives + +After defining your SLI, you need to set your objectives. To set your objectives, complete the following: + +1. <DocLink id="serverlessObservabilityCreateAnSlo" section="select-your-budgeting-method">Select your budgeting method</DocLink> +1. <DocLink id="serverlessObservabilityCreateAnSlo" section="set-your-time-window-and-duration">Set your time window</DocLink> +1. <DocLink id="serverlessObservabilityCreateAnSlo" section="set-your-targetslo-percent">Set your target/SLO percentage</DocLink> + +<div id="slo-time-window"></div> + +### Set your time window and duration + +Select the durations over which you want to compute your SLO. You can select either a **rolling** or **calendar aligned** time window: + +| | | +|---|---| +| **Rolling** | Uses data from a specified duration that depends on when the SLO was created, for example the last 30 days. | +| **Calendar aligned** | Uses data from a specified duration that aligns with calendar, for example weekly or monthly. | + +<div id="slo-budgeting-method"></div> + +### Select your budgeting method + +You can select either an **occurrences** or a **timeslices** budgeting method: + +| | | +|---|---| +| **Occurrences** | Uses the number of good events and the number of total events to compute the SLI. | +| **Timeslices** | Breaks the overall time window into smaller slices of a defined duration, and uses the number of good slices over the number of total slices to compute the SLI. | + +<div id="slo-target"></div> + +### Set your target/SLO (%) + +The SLO target objective as a percentage. + +<div id="slo-describe"></div> + +## Describe your SLO + +After setting your objectives, give your SLO a name, a short description, and add any relevant tags. + +<div id="slo-alert-checkbox"></div> + +## SLO burn rate alert rule + +When you use the UI to create an SLO, a default SLO burn rate alert rule is created automatically. +The burn rate rule will use the default configuration and no connector. +You must configure a connector if you want to receive alerts for SLO breaches. + +For more information about configuring the rule, see <DocLink id="serverlessObservabilityCreateSloBurnRateAlertRule">Create an SLO burn rate rule</DocLink>. diff --git a/docs/en/serverless/slos/slos.mdx b/docs/en/serverless/slos/slos.mdx new file mode 100644 index 0000000000..c5daf0dfbf --- /dev/null +++ b/docs/en/serverless/slos/slos.mdx @@ -0,0 +1,91 @@ +--- +id: serverlessObservabilitySlos +slug: /serverless/observability/slos +title: SLOs +description: Set clear, measurable targets for your service performance with service-level objectives (SLOs). +tags: [ 'serverless', 'observability', 'overview' ] +--- + +<p><DocBadge template="technical preview" /></p> + +Service-level objectives (SLOs) allow you to set clear, measurable targets for your service performance, based on factors like availability, response times, error rates, and other key metrics. +You can define SLOs based on different types of data sources, such as custom KQL queries and APM latency or availability data. + +Once you've defined your SLOs, you can monitor them in real time, with detailed dashboards and alerts that help you quickly identify and troubleshoot any issues that may arise. +You can also track your progress against your SLO targets over time, with a clear view of your error budgets and burn rates. + +<div id="slo-important-concepts"></div> + +## Important concepts +The following table lists some important concepts related to SLOs: + +| | | +|---|---| +| **Service-level indicator (SLI)** | The measurement of your service's performance, such as service latency or availability. | +| **SLO** | The target you set for your SLI. It specifies the level of performance you expect from your service over a period of time. | +| **Error budget** | The amount of time that your SLI can fail to meet the SLO target before it violates your SLO. | +| **Burn rate** | The rate at which your service consumes your error budget. | + +<div id="slo-in-elastic"></div> + +## SLO overview + +From the SLO overview, you can see all of your SLOs and a quick summary of what's happening in each one: + +![Dashboard showing list of SLOs](../images/slo-dashboard.png) + +Select an SLO from the overview to see additional details including: + +* **Burn rate:** the percentage of bad events over different time periods (1h, 6h, 24h, 72h) and the risk of exhausting your error budget within those time periods. +* **Historical SLI:** the SLI value and how it's trending over the SLO time window. +* **Error budget burn down:** the remaining error budget and how it's trending over the SLO time window. +* **Alerts:** active alerts if you've set any <DocLink id="serverlessObservabilityCreateSloBurnRateAlertRule">SLO burn rate alert rules</DocLink> for the SLO. + +![Detailed view of a single SLO](../images/slo-detailed-view.png) + +<div id="filter-SLOs"></div> + +## Search and filter SLOs + +You can apply searches and filters to quickly find the SLOs you're interested in. + +![Options for filtering SLOs in the overview](../images/slo-filtering-options.png) + +* **Apply structured filters:** Next to the search field, click the **Add filter** <DocIcon type="plusInCircleFilled" size="m" title="Add filter icon" /> icon to add a custom filter. Notice that you can use `OR` and `AND` to combine filters. The structured filter can be disabled, inverted, or pinned across all apps. +* **Enter a semi-structured search:** In the search field, start typing a field name to get suggestions for field names and operators that you can use to build a structured query. The semi-structured search will filter SLOs for matches, and only return matching SLOs. +* Use the **Status** and **Tags** menus to include or exclude SLOs from the view based on the status or defined tags. + +There are also options to sort and group the SLOs displayed in the overview: + +![SLOs sorted by SLO status and grouped by tags](../images/slo-group-by.png) + +* **Sort by**: SLI value, SLO status, Error budget consumed, or Error budget remaining. +* **Group by**: None, Tags, Status, or SLI type. +* Click icons to switch between a card view (<DocIcon type="apps" size="m" title="Card view icon" />), list view (<DocIcon type="list" size="m" title="List view icon" />), or compact view (<DocIcon type="tableDensityCompact" size="m" title="Compact view icon]" />). + +## SLO dashboard panels + +SLO data is also available as Dashboard _panels_. +Panels allow you to curate custom data views and visualizations to bring clarity to your data. + +Available SLO panels include: + +* **SLO Overview**: Visualize a selected SLO's health, including name, current SLI value, target, and status. +* **SLO Alerts**: Visualize one or more SLO alerts, including status, rule name, duration, and reason. In addition, configure and update alerts, or create cases directly from the panel. + +![Detailed view of an SLO dashboard panel](../images/slo-dashboard-panel.png) + +To learn more about Dashboards, see <DocLink id="serverlessObservabilityDashboards">Dashboards</DocLink>. + +<div id="slo-overview-next-steps"></div> + +## Next steps + +Get started using SLOs to measure your service performance: + +{/* TODO: Find out if any special privileges are required to grant access to SLOs and document as required. Classic doclink was <DocLink id="enObservabilitySloPrivileges">Configure SLO access</DocLink> */} + +* <DocLink id="serverlessObservabilityCreateAnSlo"/> +* <DocLink id="serverlessObservabilityCreateSloBurnRateAlertRule"/> +* <DocLink id="serverlessObservabilityViewAlerts"/> +* <DocLink id="serverlessObservabilitySloBurnRateBreaches"/> diff --git a/docs/en/serverless/synthetics/synthetics-analyze.mdx b/docs/en/serverless/synthetics/synthetics-analyze.mdx new file mode 100644 index 0000000000..0ca1857e02 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-analyze.mdx @@ -0,0 +1,373 @@ +--- +id: serverlessObservabilitySyntheticsAnalyze +slug: /serverless/observability/synthetics-analyze +title: Analyze data from synthetic monitors +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="synthetics-analyze"></div> + +The Synthetics UI in Observability projects both provides a high-level overview of your service's +availability and allows you to dig into details to diagnose what caused downtime. + +<div id="synthetics-analyze-overview"></div> + +## Overview + +The Synthetics **Overview** tab provides you with a high-level view of all the services you are monitoring +to help you quickly diagnose outages and other connectivity issues within your network. + +To access this page in your Observability project, go to **Synthetics** → **Overview**. + +This overview includes a snapshot of the current status of all monitors, the number of errors that +occurred over the last 6 hours, and the number of alerts over the last 12 hours. +All monitors created using a Synthetics project or using the UI will be listed below with information +about the location, current status, and duration average. + +<DocCallOut title="Note"> + +When you use a single monitor configuration to create monitors in multiple locations, each location +is listed as a separate monitor as they run as individual monitors and the status and duration average +can vary by location. + +</DocCallOut> + +![Synthetics UI in an Observability project](../images/synthetics-monitor-page.png) + +To get started with your analysis in the Overview tab, you can search for monitors or +use the filter options including current status (up, down, or disabled), +monitor type (for example, journey or HTTP), location, and more. + +Then click an individual monitor to see some details in a flyout. +From there, you can click **Go to monitor** to go to an individual monitor's page +to see more details (as described below). + +<div id="synthetics-analyze-individual-monitors"></div> + +## All monitor types + +When you go to an individual monitor's page, you'll see much more detail about the monitor's +performance over time. The details vary by monitor type, but for every monitor at the top of the +page you'll see: + +* The monitor's **name** with a down arrow icon that you can use to quickly move between monitors. +* The **location** of the monitor. If the same monitor configuration was used to create monitors in + multiple locations, you'll also see a down arrow icon that you can use to quickly move between + locations that use the same configuration. + +* The latest **status** and when the monitor was **last run**. +* The **<DocIcon type="beaker" title="Experiment" /> Run test manually** button that allows you to run the test on + demand before the next scheduled run. + + <DocCallOut title="Note"> + + This is only available for monitors running on Elastic's global managed testing infrastructure. + It is not available for monitors running on ((private-location))s. + + </DocCallOut> + +* The **<DocIcon type="pencil" title="Edit" /> Edit monitor** button that allows you to edit the monitor's + configuration. + +![Header at the top of the individual monitor page for all monitor types in the Synthetics UI](../images/synthetics-analyze-individual-monitor-header.png) + +Each individual monitor's page has three tabs: Overview, History, and Errors. + +<div id="synthetics-analyze-individual-monitors-overview"></div> + +### Overview + +The **Overview** tab has information about the monitor availability, duration, and any errors +that have occurred since the monitor was created. +The _Duration trends_ chart displays the timing for each check that was performed in the last 30 days. +This visualization helps you to gain insights into how quickly requests resolve by the targeted endpoint +and gives you a sense of how frequently a host or endpoint was down. + +![Details in the Overview tab on the individual monitor page for all monitor types in the Synthetics UI](../images/synthetics-analyze-individual-monitor-details.png) + +<div id="synthetics-analyze-individual-monitors-history"></div> + +### History + +The **History** tab has information on every time the monitor has run. +It includes some high-level stats and a complete list of all test runs. +Use the calendar icon (<DocIcon type="calendar" title="Calendar" />) and search bar +to filter for runs that occurred in a specific time period. + +{/* What you might do with this info */} +{/* ... */} + +For browser monitors, you can click on any run in the **Test runs** list +to see the details for that run. Read more about what information is +included the in <DocLink id="serverlessObservabilitySyntheticsAnalyze" section="details-for-one-run">Details for one run</DocLink> section below. + +![The History tab on the individual monitor page for all monitor types in the Synthetics UI](../images/synthetics-analyze-individual-monitor-history.png) + +If the monitor is configured to <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="monitor">retest on failure</DocLink>, +you'll see retests listed in the **Test runs** table. Runs that are retests include a +rerun icon (image:images/icons/refresh.svg[Refresh icon]) next to the result badge. + +![A failed run and a retest in the table of test runs in the Synthetics UI](../images/synthetics-retest.png) + +<div id="synthetics-analyze-individual-monitors-errors"></div> + +### Errors + +The **Errors** tab has information on failed runs. +If the monitor is configured to <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="monitor">retest on failure</DocLink>, +failed runs will only result in an error if both the initial run and the rerun fail. +This can reduce noise related to transient problems. + +The Errors tab includes a high-level overview of all alerts and a complete list of all failures. +Use the calendar icon (<DocIcon type="calendar" title="Calendar" />) and search bar +to filter for runs that occurred in a specific time period. + +{/* What you might do with this info */} +{/* ... */} + +For browser monitors, you can click on any run in the **Error** list +to open an **Error details** page that includes most of the same information +that is included the in <DocLink id="serverlessObservabilitySyntheticsAnalyze" section="details-for-one-run">Details for one run</DocLink> section below. + +![The Errors tab on the individual monitor page for all monitor types in the Synthetics UI](../images/synthetics-analyze-individual-monitor-errors.png) + +<div id="synthetics-analyze-journeys"></div> + +## Browser monitors + +For browser monitors, you can look at results at various levels of granularity: + +* See an overview of journey runs over time. +* Drill down into the details of a single run. +* Drill down further into the details of a single _step_ within a journey. + +<div id="journey_runs_over_time"></div> + +### Journey runs over time + +The journey page on the Overview tab includes: + +* An overview of the **last test run** including high-level information for each step. +* **Alerts** to date including both active and recovered alerts. +* **Duration by step** over the last 24 hours. +* A list of the **last 10 test runs** that link to the <DocLink id="serverlessObservabilitySyntheticsAnalyze" section="details-for-one-run">details for each run</DocLink>. + +![Individual journey page for browser monitors in the Synthetics UI](../images/synthetics-analyze-journeys-over-time.png) + +From here, you can either drill down into: + +* The latest run of the full journey by clicking **<DocIcon type="inspect" title="Inspect" /> View test run** + or a past run in the list of **Last 10 test runs**. + This will take you to the view described below in <DocLink id="serverlessObservabilitySyntheticsAnalyze" section="details-for-one-run">Details for one run</DocLink>. + +* An individual step in this run by clicking the performance breakdown icon + (<DocIcon type="apmTrace" title="APM trace" />) next to one of the steps. + This will take you to the view described below in <DocLink id="serverlessObservabilitySyntheticsAnalyze" section="details-for-one-step">Details for one step</DocLink>. + +<div id="synthetics-analyze-one-run"></div> + +### Details for one run + +The page detailing one run for a journey includes more information on each step in the current run +and opportunities to compare each step to the same step in previous runs. + +{/* What info it includes */} +At the top of the page, see the _Code executed_ and any _Console_ output for each step. +If the step failed, this will also include a _Stacktrace_ tab that you can use to +diagnose the cause of errors. + +Navigate through each step using **<DocIcon type="arrowLeft" title="Previous" /> Previous** and +**Next <DocIcon type="arrowRight" title="Next" />**. + +{/* Screenshot of the viz */} +![Step carousel on a page detailing one run of a browser monitor in the Synthetics UI](../images/synthetics-analyze-one-run-code-executed.png) + +{/* What info it includes */} +Scroll down to dig into the steps in this journey run. +Click the <DocIcon type="arrowRight" title="Next" /> icon next to the step number to show details. +The details include metrics for the step in the current run and the step in the last successful run. +Read more about step-level metrics below in <DocLink id="serverlessObservabilitySyntheticsAnalyze" section="timing">Timing</DocLink> and +<DocLink id="serverlessObservabilitySyntheticsAnalyze" section="metrics">Metrics</DocLink>. + +{/* What you might do with this info */} +This is particularly useful to compare the metrics for a failed step to the last time it completed successfully +when trying to diagnose the reason it failed. + +{/* Screenshot of the viz */} +![Step list on a page detailing one run of a browser monitor in the Synthetics UI](../images/synthetics-analyze-one-run-compare-steps.png) + +Drill down to see even more details for an individual step by clicking the performance breakdown icon +(<DocIcon type="apmTrace" title="APM trace" />) next to one of the steps. +This will take you to the view described below in <DocLink id="serverlessObservabilitySyntheticsAnalyze" section="details-for-one-step">Details for one step</DocLink>. + +<div id="synthetics-analyze-one-step"></div> + +### Details for one step + +After clicking the performance breakdown icon (<DocIcon type="apmTrace" title="APM trace" />) +you'll see more detail for an individual step. + +<div id="synthetics-analyze-one-step-screenshot"></div> + +#### Screenshot + +{/* What info it includes */} +By default the synthetics library will capture a screenshot for each step regardless of +whether the step completed or failed. + +<DocCallOut title="Note"> + +Customize screenshot behavior for all monitors in the <DocLink id="serverlessObservabilitySyntheticsConfiguration">configuration file</DocLink>, +for one monitor using <DocLink id="serverlessObservabilitySyntheticsMonitorUse">`monitor.use`</DocLink>, or for a run using +the <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics">CLI</DocLink>. + +</DocCallOut> + +{/* What you might do with this info */} +Screenshots can be particularly helpful to identify what went wrong when a step fails because of a change to the UI. +You can compare the failed step to the last time the step successfully completed. + +{/* Screenshot of the viz */} +![Screenshot for one step in a browser monitor in the Synthetics UI](../images/synthetics-analyze-one-step-screenshot.png) + +<div id="synthetics-analyze-one-step-timing"></div> + +#### Timing + +The **Timing** visualization shows a breakdown of the time spent in each part of +the resource loading process for the step including: + +* **Blocked**: The request was initiated but is blocked or queued. +* **DNS**: The DNS lookup to convert the hostname to an IP Address. +* **Connect**: The time it took the request to connect to the server. + Lengthy connections could indicate network issues, connection errors, or an overloaded server. + +* **TLS**: If your page is loading resources securely over TLS, this is the time it took to set up that connection. +* **Wait**: The time it took for the response generated by the server to be received by the browser. + A lengthy Waiting (TTFB) time could indicate server-side issues. + +* **Receive**: The time it took to receive the response from the server, + which can be impacted by the size of the response. + +* **Send**: The time spent sending the request data to the server. + +Next to each network timing metric, there's an icon that indicates whether the value is +higher (<DocIcon type="sortUp" title="Arrow up" />), +lower (<DocIcon type="sortDown" title="Arrow down" />), +or the same (<DocIcon type="minus" title="Minus" />) +compared to the median of all runs in the last 24 hours. +Hover over the icon to see more details in a tooltip. + +{/* What you might do with this info */} +This gives you an overview of how much time is spent (and how that time is spent) loading resources. +This high-level information may not help you diagnose a problem on its own, but it could act as a +signal to look at more granular information in the <DocLink id="serverlessObservabilitySyntheticsAnalyze" section="network-requests">Network requests</DocLink> section. + +{/* Screenshot of the viz */} +![Network timing visualization for one step in a browser monitor in the Synthetics UI](../images/synthetics-analyze-one-step-timing.png) + +<div id="synthetics-analyze-one-step-metrics"></div> + +#### Metrics + +{/* What info it includes */} +The **Metrics** visualization gives you insight into the performance of the web page visited in +the step and what a user would experience when going through the current step. +Metrics include: + +* **First contentful paint (FCP)** focuses on the initial rendering and measures the time from + when the page starts loading to when any part of the page's content is displayed on the screen. + +* **Largest contentful paint (LCP)** measures loading performance. To provide a good user experience, + LCP should occur within 2.5 seconds of when the page first starts loading. + +* **Cumulative layout shift (CLS)** measures visual stability. To provide a good user experience, + pages should maintain a CLS of less than 0.1. + +* **`DOMContentLoaded` event (DCL)** is triggered when the browser completes parsing the document. + Helpful when there are multiple listeners, or logic is executed: + `domContentLoadedEventEnd - domContentLoadedEventStart`. + +* **Transfer size** represents the size of the fetched resource. The size includes the response header + fields plus the response payload body. + +<DocCallOut title="Note"> + +Largest contentful paint and Cumulative layout shift are part of Google's +[Core Web Vitals](https://web.dev/vitals/), an initiative that introduces a set of metrics +that help categorize good and bad sites by quantifying the real-world user experience. + +</DocCallOut> + +Next to each metric, there's an icon that indicates whether the value is +higher (<DocIcon type="sortUp" title="Arrow up" />), +lower (<DocIcon type="sortDown" title="Arrow down" />), +or the same (<DocIcon type="minus" title="Minus" />) +compared to all runs over the last 24 hours. +Hover over the icon to see more details in a tooltip. + +{/* Screenshot of the viz */} +![Metrics visualization for one step in a browser monitor in the Synthetics UI](../images/synthetics-analyze-one-step-metrics.png) + +<div id="synthetics-analyze-one-step-object"></div> + +#### Object weight and count + +{/* What info it includes */} +The **Object weight** visualization shows the cumulative size of downloaded resources by type, +and **Object count** shows the number of individual resources by type. + +{/* What you might do with this info */} +This provides a different kind of analysis. +For example, you might have a large number of JavaScript files, +each of which will need a separate download, but they may be collectively small. +This could help you identify an opportunity to improve efficiency by combining multiple files into one. + +{/* Screenshot of the viz */} +![Object visualization for one step in a browser monitor in the Synthetics UI](../images/synthetics-analyze-one-step-object.png) + +<div id="synthetics-analyze-one-step-network"></div> + +#### Network requests + +{/* What info it includes */} +The **Network requests** visualization is a waterfall chart that shows every request +the page made when a user executed it. +Each line in the chart represents an HTTP network request and helps you quickly identify +what resources are taking the longest to load and in what order they are loading. + +The colored bars within each line indicate the time spent per resource. +Each color represents a different part of that resource's loading process +(as defined in the <DocLink id="serverlessObservabilitySyntheticsAnalyze" section="timing">Timing</DocLink> section above) and +includes the time spent downloading content for specific +Multipurpose Internet Mail Extensions (MIME) types: +HTML, JS, CSS, Media, Font, XHR, and Other. + +Understanding each phase of a request can help you improve your site's speed by +reducing the time spent in each phase. + +{/* Screenshot of the viz */} +![Network requests waterfall visualization for one step in a browser monitor in the Synthetics UI](../images/synthetics-analyze-one-step-network.png) + +Without leaving the waterfall chart, you can view data points relating to each resource: +resource details, request headers, response headers, and certificate headers. +On the waterfall chart, select a resource name, or any part of each row, +to display the resource details overlay. + +For additional analysis, whether to check the content of a CSS file or to view a specific image, +click the <DocIcon type="popout" title="Popout" /> icon located beside each resource, +to view its content in a new tab. + +You can also navigate between steps and checks at the top of the page to +view the corresponding waterfall charts. + +{/* [discrete] */} +{/* <span id="synthetics-analyze-anomalies"></span> */} +{/* = Anomalies */} + +{/* [discrete] */} +{/* <span id="synthetics-analyze-alerts"></span> */} +{/* = Alerts */} diff --git a/docs/en/serverless/synthetics/synthetics-command-reference.mdx b/docs/en/serverless/synthetics/synthetics-command-reference.mdx new file mode 100644 index 0000000000..83950f2b79 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-command-reference.mdx @@ -0,0 +1,357 @@ +--- +id: serverlessObservabilitySyntheticsCommandReference +slug: /serverless/observability/synthetics-command-reference +title: Use the Synthetics CLI +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="synthetics-command-reference"></div> + +<div id="elastic-synthetics-command"></div> + +## `@elastic/synthetics` + +Elastic uses the [@elastic/synthetics](https://www.npmjs.com/package/@elastic/synthetics[@elastic/synthetics) +library to run synthetic browser tests and report the test results. +The library also provides a CLI to help you scaffold, develop/run tests locally, and push tests to Elastic. + +```sh +npx @elastic/synthetics [options] [files] [dir] +``` + +You will not need to use most command line flags. +However, there are some you may find useful: + +<DocDefList> + <DocDefTerm>`--match <string>`</DocDefTerm> + <DocDefDescription> + Run tests with a name or tags that match the given glob pattern. + </DocDefDescription> + + <DocDefTerm>`--tags Array<string>`</DocDefTerm> + <DocDefDescription> + Run tests with the given tags that match the given glob pattern. + </DocDefDescription> + + <DocDefTerm>`--pattern <string>`</DocDefTerm> + <DocDefDescription> + RegExp pattern to match journey files in the current working directory. Defaults + to `/*.journey.(ts|js)$/`, which matches files ending with `.journey.ts` or `.journey.js`. + </DocDefDescription> + + <DocDefTerm>`--params <jsonstring>`</DocDefTerm> + <DocDefDescription> + JSON object that defines any variables your tests require. + Read more in <DocLink id="serverlessObservabilitySyntheticsParamsSecrets">Work with params and secrets</DocLink>. + + Params passed will be merged with params defined in your + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="params">`synthetics.config.js` file</DocLink>. + Params defined via the CLI take precedence. + </DocDefDescription> + + <DocDefTerm>`--playwright-options <jsonstring>`</DocDefTerm> + <DocDefDescription> + JSON object to pass in custom Playwright options for the agent. + For more details on relevant Playwright options, refer to the + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="playwrightoptions">the configuration docs</DocLink>. + + Options passed will be merged with Playwright options defined in your + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="playwrightoptions">`synthetics.config.js` file</DocLink>. + Options defined via the CLI take precedence. + </DocDefDescription> + + <DocDefTerm>`--screenshots <on|off|only-on-failure>`</DocDefTerm> + <DocDefDescription> + Control whether or not to capture screenshots at the end of each step. + Options include `'on'`, `'off'`, or `'only-on-failure'`. + + This can also be set in the configuration file using + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="monitor">`monitor.screenshot`</DocLink>. + The value defined via the CLI will take precedence. + </DocDefDescription> + + <DocDefTerm>`-c, --config <string>`</DocDefTerm> + <DocDefDescription> + Path to the configuration file. By default, test runner looks for a + `synthetics.config.(js|ts)` file in the current directory. Synthetics + configuration provides options to configure how your tests are run and pushed to + Elastic. Allowed options are described in the <DocLink id="serverlessObservabilitySyntheticsConfiguration" text="configuration file"/> + </DocDefDescription> + + <DocDefTerm>`--reporter <json|junit|buildkite-cli|default>`</DocDefTerm> + <DocDefDescription> + One of `json`, `junit`, `buildkite-cli`, or `default`. Use the JUnit or Buildkite + reporter to provide easily parsed output to CI systems. + </DocDefDescription> + + <DocDefTerm>`--inline`</DocDefTerm> + <DocDefDescription> + Instead of reading from a file, `cat` inline scripted journeys and pipe them through `stdin`. + For example, `cat path/to/file.js | npx @elastic/synthetics --inline`. + </DocDefDescription> + + <DocDefTerm>`--no-throttling`</DocDefTerm> + <DocDefDescription> + Does not apply throttling. + + Throttling can also be disabled in the configuration file using + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="monitor">`monitor.throttling`</DocLink>. + The value defined via the CLI will take precedence. + + <DocCallOut title="Note"> + Network throttling for browser based monitors is disabled. + See this [documention](https://github.com/elastic/synthetics/blob/main/docs/throttling.md) for more details. + </DocCallOut> + </DocDefDescription> + + <DocDefTerm>`--no-headless`</DocDefTerm> + <DocDefDescription> + Runs with the browser in headful mode. + + This is the same as setting [Playwright's `headless` option](https://playwright.dev/docs/api/class-testoptions#test-options-headless) to `false` by running `--playwright-options '{"headless": false}'`. + + <DocCallOut title="Note"> + Headful mode should only be used locally to see the browser and interact with DOM elements directly for testing purposes. Do not attempt to run in headful mode when running through Elastic's global managed testing infrastructure or ((private-location))s as this is not supported. + </DocCallOut> + </DocDefDescription> + + <DocDefTerm>`-h, --help`</DocDefTerm> + <DocDefDescription> + Shows help for the `npx @elastic/synthetics` command. + </DocDefDescription> + +</DocDefList> + +<DocCallOut title="Note"> + The `--pattern`, `--tags`, and `--match` flags for filtering are only supported when you + run synthetic tests locally or push them to Elastic. Filtering is _not_ supported in any other subcommands + like `init` and `locations`. +</DocCallOut> + +<DocCallOut title="Note"> + For debugging synthetic tests locally, you can set an environment variable, + `DEBUG=synthetics npx @elastic/synthetics`, to capture Synthetics agent logs. +</DocCallOut> + +<div id="elastic-synthetics-init-command"></div> + +## `@elastic/synthetics init` + +Scaffold a new Synthetics project using Elastic Synthetics. + +This will create a template Node.js project that includes the synthetics agent, required dependencies, +a synthetics configuration file, and example browser and lightweight monitor files. +These files can be edited and then pushed to Elastic to create monitors. + +```sh +npx @elastic/synthetics init <name-of-synthetics-project> +``` + +Read more about what's included in a template Synthetics project in <DocLink id="serverlessObservabilitySyntheticsGetStartedProject" section="create-a-synthetics-project">Create a Synthetics project</DocLink>. + +<div id="elastic-synthetics-push-command"></div> + +## `@elastic/synthetics push` + +Create monitors in by using your local journeys. By default, running +`push` command will use the `project` settings field from the `synthetics.config.ts` +file, which is set up using the `init` command. However, you can override these +settings using the CLI flags. + +```sh +SYNTHETICS_API_KEY=<api-key> npx @elastic/synthetics push --url <kibana-url> --id <id|name> +``` + +<DocCallOut title="Note"> + The `push` command includes interactive prompts to prevent you from accidentally deleting or duplicating monitors. + You will see a prompt when: + + * You `push` a project that used to contain one or more monitors but either no longer + contains previously running monitors or has any monitors. + Select `yes` to delete the monitors associated with the project ID being pushed. + * You `push` a Synthetics project that's already been pushed using one Synthetics project ID and then try to `push` + it using a _different_ ID. + Select `yes` to create duplicates of all monitors in the project. + You can set `DEBUG=synthetics` environment variable to capture the deleted monitors. +</DocCallOut> + +<DocCallOut title="Note"> + If the journey contains external NPM packages other than the `@elastic/synthetics`, + those packages will be bundled along with the journey code when the `push` command is invoked. + However there are some limitations when using external packages: + + * Bundled journeys after compression should not be more than 1500 Kilobytes. + * Native node modules will not work as expected due to platform inconsistency. + * Uploading files in journey scripts(via locator.setInputFiles) is not supported. +</DocCallOut> + +<DocDefList> + <DocDefTerm>`--auth <string>`</DocDefTerm> + <DocDefDescription> + API key used for authentication. You can also set the API key via the `SYNTHETICS_API_KEY` environment variable. + + To create an API key, you must be logged in as a user with + <DocLink id="serverlessObservabilitySyntheticsFeatureRoles">Editor</DocLink> access. + </DocDefDescription> + + <DocDefTerm>`--id <string>`</DocDefTerm> + <DocDefDescription> + A unique id associated with your Synthetics project. + It will be used for logically grouping monitors. + + If you used <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-init">`init` to create a Synthetics project</DocLink>, this is the `<name-of-synthetics-project>` you specified. + + This can also be set in the configuration file using + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="project">`project.id`</DocLink>. + The value defined via the CLI will take precedence. + </DocDefDescription> + + <DocDefTerm>`--url <string>`</DocDefTerm> + <DocDefDescription> + The URL for the Observability project to which you want to upload the monitors. + + This can also be set in the configuration file using + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="project">`project.url`</DocLink>. + The value defined via the CLI will take precedence. + </DocDefDescription> + + <DocDefTerm>`--schedule <number>`</DocDefTerm> + <DocDefDescription> + The interval (in minutes) at which the monitor should run. + + This can also be set in the configuration file using + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="monitor">`monitor.schedule`</DocLink>. + The value defined via the CLI will take precedence. + </DocDefDescription> + + <DocDefTerm>[`--locations Array<SyntheticsLocationsType>`](https://github.com/elastic/synthetics/blob/((synthetics_version))/src/locations/public-locations.ts#L28-L37)</DocDefTerm> + <DocDefDescription> + Where to deploy the monitor. Monitors can be deployed in multiple locations so that you can detect differences in availability and response times across those locations. + + To list available locations, refer to <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-locations">`@elastic/synthetics locations`</DocLink>. + + This can also be set in the configuration file using + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="monitor">`monitor.locations` in the configuration file</DocLink>. + The value defined via the CLI will take precedence. + </DocDefDescription> + + <DocDefTerm>`--private-locations Array<string>`</DocDefTerm> + <DocDefDescription> + The <DocLink id="serverlessObservabilitySyntheticsPrivateLocation">((private-location))s</DocLink> to which the monitors will be deployed. These ((private-location))s refer to locations hosted and managed by you, whereas + `locations` are hosted by Elastic. You can specify a ((private-location)) using the location's name. + + To list available ((private-location))s, refer to <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-locations">`@elastic/synthetics locations`</DocLink>. + + This can also be set in the configuration file using + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="monitor">`monitor.privateLocations` in the configuration file</DocLink>. + The value defined via the CLI will take precedence. + </DocDefDescription> + + <DocDefTerm>`--yes`</DocDefTerm> + <DocDefDescription> + The `push` command includes interactive prompts to prevent you from accidentally deleting or duplicating monitors. + If running the CLI non-interactively, you can override these prompts using the `--yes` option. + When the `--yes` option is passed to `push`: + + * If you `push` a Synthetics project that used to contain one or more monitors but no longer contains any monitors, + all monitors associated with the Synthetics project ID being pushed will be deleted. + + * If you `push` a Synthetics project that's already been pushed using one Synthetics project ID and then try to `push` + it using a _different_ ID, it will create duplicates of all monitors in the Synthetics project. + </DocDefDescription> +</DocDefList> + + +## Tag monitors + +Synthetics journeys can be tagged with one or more tags. Use tags to +filter journeys when running tests locally or pushing them to Elastic. + +To add tags to a single journey, add the `tags` parameter to the `journey` function or +use the `monitor.use` method. + +```js +import {journey, monitor} from "@elastic/synthetics"; +journey({name: "example journey", tags: ["env:qa"] }, ({ page }) => { + monitor.use({ + tags: ["env:qa"] + }) + // Add steps here +}); +``` + +For lightweight monitors, use the `tags` field in the yaml configuration file. +```yaml +name: example monitor +tags: + - env:qa +``` + +To apply tags to all browser and lightweight monitors, configure using the `monitor.tags` field in the `synthetics.config.ts` file. + +## Filter monitors + +When running the `npx @elastic/synthetics push` command, you can filter the monitors that are pushed to Elastic using the following flags: + +<DocDefList> + <DocDefTerm>`--tags Array<string>`</DocDefTerm> + <DocDefDescription> + Push monitors with the given tags that match the glob pattern. + </DocDefDescription> + + <DocDefTerm>`--match <string>`</DocDefTerm> + <DocDefDescription> + Push monitors with a name or tags that match the glob pattern. + </DocDefDescription> + + <DocDefTerm>`--pattern <string>`</DocDefTerm> + <DocDefDescription> + RegExp pattern to match the journey files in the current working directory. + Defaults to `/*.journey.(ts|js)$/` for browser monitors and `/.(yml|yaml)$/` for + lightweight monitors. + </DocDefDescription> +</DocDefList> + +You can combine these techniques and push the monitors to different projects based on the tags by using multiple configuration files. + +```sh +npx @elastic/synthetics push --config synthetics.qa.config.ts --tags env:qa +npx @elastic/synthetics push --config synthetics.prod.config.ts --tags env:prod +``` + +<div id="elastic-synthetics-locations-command"></div> + +## `@elastic/synthetics locations` + +List all available locations for running synthetics monitors. + +```sh +npx @elastic/synthetics locations --url <observability-project-host> --auth <api-key> +``` + +Run `npx @elastic/synthetics locations` with no flags to list all the available global locations managed by Elastic for running synthetics monitors. + +To list both locations on Elastic's global managed infrastructure and ((private-location))s, include: + +<DocDefList> + <DocDefTerm>`--url <string>`</DocDefTerm> + <DocDefDescription> + The URL for the Observability project from which to fetch all available public and ((private-location))s. + </DocDefDescription> + + <DocDefTerm>`--auth <string>`</DocDefTerm> + <DocDefDescription> + API key used for authentication. + </DocDefDescription> +</DocDefList> + +{/* <DocCallOut title="Note"> + If an administrator has disabled Elastic managed locations for the role you are assigned + and you do _not_ include `--url` and `--auth`, all global locations managed by Elastic will be listed. + However, you will not be able to push to these locations with your API key and will see an error: + _You don't have permission to use Elastic managed global locations_. For more details, refer to the + <DocLink id="serverlessObservabilitySyntheticsTroubleshooting" section="you-do-not-have-permission-to-use-elastic-managed-locations">troubleshooting docs</DocLink>. +</DocCallOut> */} diff --git a/docs/en/serverless/synthetics/synthetics-configuration.mdx b/docs/en/serverless/synthetics/synthetics-configuration.mdx new file mode 100644 index 0000000000..bfeec9e22b --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-configuration.mdx @@ -0,0 +1,178 @@ +--- +id: serverlessObservabilitySyntheticsConfiguration +slug: /serverless/observability/synthetics-configuration +title: Configure a Synthetics project +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +import Snippet1 from '../transclusion/synthetics/configuration/monitor-config-options.mdx' + +<div id="synthetics-configuration"></div> + +Synthetic tests support the configuration of dynamic parameters that can be +used in Synthetics projects. In addition, the Synthetics agent, which is built on top +of Playwright, supports configuring browser and context options that are available +in Playwright-specific methods, for example, `ignoreHTTPSErrors`, `extraHTTPHeaders`, and `viewport`. + +<div id="synthetics-config-file"></div> + +Create a `synthetics.config.js` or `synthetics.config.ts` file in the root of the +Synthetics project and specify the options. For example: + +```ts +import type { SyntheticsConfig } from '@elastic/synthetics'; + +export default env => { + const config: SyntheticsConfig = { + params: { + url: 'https://www.elastic.co', + }, + playwrightOptions: { + ignoreHTTPSErrors: false, + }, + /** + * Configure global monitor settings + */ + monitor: { + schedule: 10, + locations: [ 'us_east' ], + }, + /** + * Synthetic project monitors settings + */ + project: { + id: 'my-synthetics-project', + url: 'https://abc123', + }, + }; + if (env !== 'development') { + /** + * Override configuration specific to environment + * For example, config.params.url = "" + */ + } + return config; +}; +``` + +<DocCallOut title="Note"> + `env` in the example above is the environment you are pushing from + _not_ the environment where monitors will run. In other words, `env` + corresponds to the configured `NODE_ENV`. +</DocCallOut> + +The configuration file can either export an object, or a function that when +called should return the generated configuration. To know more about configuring +the tests based on environments, look at the <DocLink id="serverlessObservabilitySyntheticsParamsSecrets" section="synthetics-project-config-file">dynamic configuration</DocLink> documentation. + +<div id="synthetics-configuration-params"></div> + +## `params` + +A JSON object that defines any variables your tests require. +Read more in <DocLink id="serverlessObservabilitySyntheticsParamsSecrets">Work with params and secrets</DocLink>. + +<div id="synthetics-configuration-playwright-options"></div> + +## `playwrightOptions` + +For all available options, refer to the [Playwright documentation](https://playwright.dev/docs/test-configuration). + +<DocCallOut title="Note"> + Do not attempt to run in headful mode (using `headless:false`) when running through Elastic's global managed testing infrastructure or Private Locations as this is not supported. +</DocCallOut> + +Below are details on a few Playwright options that are particularly relevant to Elastic Synthetics including timeouts, timezones, and device emulation. + +<div id="synthetics-configuration-playwright-options-timeouts"></div> + +### Timeouts + +Playwright has two types of timeouts that are used in Elastic Synthetics: +[action and navigation timeouts](https://playwright.dev/docs/test-timeouts#action-and-navigation-timeouts). + +Elastic Synthetics uses a default action and navigation timeout of 50 seconds. +You can override this default using [`actionTimeout`](https://playwright.dev/docs/api/class-testoptions#test-options-action-timeout) and [`navigationTimeout`](https://playwright.dev/docs/api/class-testoptions#test-options-navigation-timeout) +in `playwrightOptions`. + +<div id="synthetics-configuration-playwright-options-timezones"></div> + +### Timezones and locales + +The Elastic global managed testing infrastructure does not currently set the timezone. +For ((private-location))s, the monitors will use the timezone of the host machine running +the ((agent)). This is not always desirable if you want to test how a web application +behaves across different timezones. To specify what timezone to use when the monitor runs, +you can use `playwrightOptions` on a per monitor or global basis. + +To use a timezone and/or locale for all monitors in the Synthetics project, set +[`locale` and/or `timezoneId`](https://playwright.dev/docs/emulation#locale%2D%2Dtimezone) +in the configuration file: + +```js +playwrightOptions: { + locale: 'en-AU', + timezoneId: 'Australia/Brisbane', +} +``` + +To use a timezone and/or locale for a _specific_ monitor, add these options to a +journey using <DocLink id="serverlessObservabilitySyntheticsMonitorUse">`monitor.use`</DocLink>. + +<div id="synthetics-config-device-emulation"></div> + +### Device emulation + +Users can emulate a mobile device using the configuration file. +The example configuration below runs tests in "Pixel 5" emulation mode. + +```js +import { SyntheticsConfig } from "@elastic/synthetics" +import { devices } from "playwright-chromium" + +const config: SyntheticsConfig = { + playwrightOptions: { + ...devices['Pixel 5'] + } +} + +export default config; +``` + +<div id="synthetics-configuration-project"></div> + +## `project` + +Information about the Synthetics project. + +<DocDefList> + <DocDefTerm>`id` (`string`)</DocDefTerm> + <DocDefDescription> + A unique id associated with your Synthetics project. + It will be used for logically grouping monitors. + + If you used <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-init">`init` to create a Synthetics project</DocLink>, this is the `<name-of-synthetics-project>` you specified. + </DocDefDescription> + + <DocDefTerm>`url` (`string`)</DocDefTerm> + <DocDefDescription> + The URL for the Observability project to which you want to upload the monitors. + </DocDefDescription> +</DocDefList> + +<div id="synthetics-configuration-monitor"></div> + +## `monitor` + +Default values to be applied to _all_ monitors when using the <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-push">`@elastic/synthetics` `push` command</DocLink>. + +<Snippet1 /> + +For information on configuring monitors individually, refer to: + +* <DocLink id="serverlessObservabilitySyntheticsMonitorUse">Configure individual browser monitors</DocLink> for browser monitors +* <DocLink id="serverlessObservabilitySyntheticsLightweight">Configure lightweight monitors</DocLink> for lightweight monitors + diff --git a/docs/en/serverless/synthetics/synthetics-create-test.mdx b/docs/en/serverless/synthetics/synthetics-create-test.mdx new file mode 100644 index 0000000000..005e81d86a --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-create-test.mdx @@ -0,0 +1,498 @@ +--- +id: serverlessObservabilitySyntheticsCreateTest +slug: /serverless/observability/synthetics-create-test +title: Write a synthetic test +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="synthetics-create-test"></div> + +After <DocLink id="serverlessObservabilitySyntheticsGetStartedProject">setting up a Synthetics project</DocLink>, you can start writing synthetic tests that check critical actions and requests that an end-user might make +on your site. + +<div id="synthetics-syntax"></div> + +## Syntax overview + +To write synthetic tests for your application, you'll need to know basic JavaScript and +[Playwright](https://playwright.dev/) syntax. + +<DocCallOut title="Tip"> +[Playwright](https://playwright.dev/) is a browser testing library developed by Microsoft. +It's fast, reliable, and features a modern API that automatically waits for page elements to be ready. +</DocCallOut> + +The synthetics agent exposes an API for creating and running tests, including: + +<DocTable columns={[ + { title: "", width: "20%" }, + { title: "", width: "80%" } +]}> + <DocRow> + <DocCell>`journey`</DocCell> + <DocCell> + Tests one discrete unit of functionality. Takes two parameters: a `name` (string) and a `callback` (function). + + Learn more in <DocLink id="serverlessObservabilitySyntheticsCreateTest" section="create-a-journey">Create a journey</DocLink>. + </DocCell> + </DocRow> + <DocRow> + <DocCell>`step`</DocCell> + <DocCell> + Actions within a journey that should be completed in a specific order. Takes two parameters: a `name` (string) and a `callback` (function). + + Learn more in <DocLink id="serverlessObservabilitySyntheticsCreateTest" section="add-steps">Add steps</DocLink>. + </DocCell> + </DocRow> + <DocRow> + <DocCell>`expect`</DocCell> + <DocCell> + Check that a value meets a specific condition. There are several supported checks. + + Learn more in <DocLink id="serverlessObservabilitySyntheticsCreateTest" section="make-assertions">Make assertions</DocLink>. + </DocCell> + </DocRow> + <DocRow> + <DocCell>`beforeAll`</DocCell> + <DocCell> + Runs a provided function once, before any `journey` runs. If the provided function is a promise, the runner will wait for the promise to resolve before invoking the `journey`. Takes one parameter: a `callback` (function). + + Learn more in <DocLink id="serverlessObservabilitySyntheticsCreateTest" section="set-up-and-remove-a-global-state">Set up and remove a global state</DocLink>. + </DocCell> + </DocRow> + <DocRow> + <DocCell>`before`</DocCell> + <DocCell> + Runs a provided function before a single `journey` runs. Takes one parameter: a `callback` (function). + + Learn more in <DocLink id="serverlessObservabilitySyntheticsCreateTest" section="set-up-and-remove-a-global-state">Set up and remove a global state</DocLink>. + </DocCell> + </DocRow> + <DocRow> + <DocCell>`afterAll`</DocCell> + <DocCell> + Runs a provided function once, after all the `journey` runs have completed. Takes one parameter: a `callback` (function). + + Learn more in <DocLink id="serverlessObservabilitySyntheticsCreateTest" section="set-up-and-remove-a-global-state">Set up and remove a global state</DocLink>. + </DocCell> + </DocRow> + <DocRow> + <DocCell>`after`</DocCell> + <DocCell> + Runs a provided function after a single `journey` has completed. Takes one parameter: a `callback` (function). + + Learn more in <DocLink id="serverlessObservabilitySyntheticsCreateTest" section="set-up-and-remove-a-global-state">Set up and remove a global state</DocLink>. + </DocCell> + </DocRow> + <DocRow> + <DocCell>`monitor`</DocCell> + <DocCell> + The `monitor.use` method allows you to determine a monitor's configuration on a journey-by-journey basis. If you want two journeys to create monitors with different intervals, for example, you should call `monitor.use` in each of them and set the `schedule` property to different values in each. Note that this is only relevant when using the `push` command to create monitors in your Observability project. + + Learn more in <DocLink id="serverlessObservabilitySyntheticsMonitorUse">Configure individual browser monitors</DocLink>. + </DocCell> + </DocRow> +</DocTable> + +<div id="synthetics-create-journey"></div> + +## Create a journey + +Create a new file using the `.journey.ts` or `.journey.js` file extension or edit one of the example journey files. + +A _journey_ tests one discrete unit of functionality. +For example, logging into a website, adding something to a cart, or joining a mailing list. + +The journey function takes two parameters: a `name` and a `callback`. +The `name` helps you identify an individual journey. +The `callback` argument is a function that encapsulates what the journey does. +The callback provides access to fresh Playwright `page`, `params`, `browser`, and `context` instances. + +```js +journey('Journey name', ({ page, browser, context, params, request }) => { + // Add steps here +}); +``` + +<div id="synthetics-journey-ref"></div> + +### Arguments + +<DocTable columns={[ + { + "title": "", + "width": "20%" + }, + { + "title": "", + "width": "80%" + } +]}> + <DocRow> + <DocCell> + **`name`**<br />(_string_) + + </DocCell> + <DocCell> + A user-defined string to describe the journey. + + + </DocCell> + </DocRow> + <DocRow> + <DocCell> + **`callback`** (_function_) + + </DocCell> + <DocCell> + A function where you will add steps. + + **Instances**: + + `page` + : A [page](https://playwright.dev/docs/api/class-page) object from Playwright + that lets you control the browser's current page. + + `browser` + : A [browser]({book['playwright-api-docs']}) object created by Playwright. + + `context` + : A [browser context](https://playwright.dev/docs/api/class-browsercontext) + that doesn't share cookies or cache with other browser contexts. + + `params` + : User-defined variables that allow you to invoke the Synthetics suite with custom parameters. + For example, if you want to use a different homepage depending on the `env` + (`localhost` for `dev` and a URL for `prod`). See <DocLink id="serverlessObservabilitySyntheticsParamsSecrets">Work with params and secrets</DocLink> + for more information. + + `request` + : A request object that can be used to make API requests independently of the browser + interactions. For example, to get authentication credentials or tokens in service of a + browser-based test. See <DocLink id="serverlessObservabilitySyntheticsCreateTest" section="make-api-requests">Make API requests</DocLink> for more information. + + + </DocCell> + </DocRow> +</DocTable> + +<div id="synthetics-create-step"></div> + +## Add steps + +A journey consists of one or more _steps_. Steps are actions that should be completed in a specific order. +Steps are displayed individually in the Synthetics UI along with screenshots for convenient debugging and error tracking. + +A basic two-step journey would look like this: + +```js +journey('Journey name', ({ page, browser, client, params, request }) => { + step('Step 1 name', () => { + // Do something here + }); + step('Step 2 name', () => { + // Do something else here + }); +}); +``` + +Steps can be as simple or complex as you need them to be. +For example, a basic first step might load a web page: + +```js +step('Load the demo page', () => { + await page.goto('https://elastic.github.io/synthetics-demo/'); [^1] +}); +``` +[^1]: Go to the [`page.goto` reference](https://playwright.dev/docs/api/class-page#page-goto) for more information. + +<div id="synthetics-step-ref"></div> + +### Arguments + +<DocTable columns={[ + { + "title": "", + "width": "20%" + }, + { + "title": "", + "width": "80%" + } +]}> + <DocRow> + <DocCell>**`name`**<br />(_string_)</DocCell> + <DocCell> + A user-defined string to describe the journey. + </DocCell> + </DocRow> + <DocRow> + <DocCell>**`callback`** (_function_)</DocCell> + <DocCell> + A function where you simulate user workflows using Synthetics and <DocLink id="serverlessObservabilitySyntheticsCreateTest" section="playwright-syntax">Playwright</DocLink> syntax. + </DocCell> + </DocRow> +</DocTable> + +<DocCallOut id="synthetics-create-test-script-recorder" title="Note"> + +If you want to generate code by interacting with a web page directly, you can use the **Synthetics Recorder**. + +The recorder launches a [Chromium browser](https://www.chromium.org/Home/) that will listen to each interaction you have with the web page and record them internally using Playwright. +When you're done interacting with the browser, the recorder converts the recorded actions into JavaScript code that you can use with Elastic Synthetics or ((heartbeat)). + +For more details on getting started with the Synthetics Recorder, refer to <DocLink id="serverlessObservabilitySyntheticsRecorder">Use the Synthetics Recorder</DocLink>. + +</DocCallOut> + +<div id="synthetics-playwright"></div> + +### Playwright syntax + +Inside the callback for each step, you'll likely use a lot of Playwright syntax. +Use Playwright to simulate and validate user workflows including: + +* Interacting with the [browser](https://playwright.dev/docs/api/class-browser) + or the current [page](https://playwright.dev/docs/api/class-page) (like in the example above). + +* Finding elements on a web page using [locators](https://playwright.dev/docs/api/class-locator). +* Simulating [mouse](https://playwright.dev/docs/api/class-mouse), + [touch](https://playwright.dev/docs/api/class-touchscreen), or + [keyboard](https://playwright.dev/docs/api/class-keyboard) events. + +* Making assertions using [`@playwright/test`'s `expect` function](https://playwright.dev/docs/test-assertions). Read more in <DocLink id="serverlessObservabilitySyntheticsCreateTest" section="make-assertions">Make assertions</DocLink>. + +Visit the [Playwright documentation](https://playwright.dev/docs) for information. + +<DocCallOut title="Note"> + +Do not attempt to run in headful mode (using `headless:false`) when running through Elastic's global managed testing infrastructure or Private Locations as this is not supported. + +</DocCallOut> + +However, not all Playwright functionality should be used with Elastic Synthetics. +In some cases, there are alternatives to Playwright functionality built into the +Elastic Synthetics library. These alternatives are designed to work better for +synthetic monitoring. Do _not_ use Playwright syntax to: + +* **Make API requests.** Use Elastic Synthetic's `request` + parameter instead. Read more in <DocLink id="serverlessObservabilitySyntheticsCreateTest" section="make-api-requests">Make API requests</DocLink>. + +There is also some Playwright functionality that is not supported out-of-the-box +in Elastic Synthetics including: + +* [Videos](https://playwright.dev/docs/api/class-video) +* The [`toHaveScreenshot`](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-screenshot-1) and [`toMatchSnapshot`](https://playwright.dev/docs/api/class-snapshotassertions) assertions + +<DocCallOut title="Note"> + Captures done programmatically via https://playwright.dev/docs/api/class-page#page-screenshot[`screenshot`] or https://playwright.dev/docs/api/class-page#page-video[`video`] are not stored and are not shown in the Synthetics application. Providing a `path` will likely make the monitor fail due to missing permissions to write local files. +</DocCallOut> + +<div id="synthetics-make-assertions"></div> + +## Make assertions + +A more complex `step` might wait for a page element to be selected +and then make sure that it matches an expected value. + +Elastic Synthetics uses `@playwright/test`'s `expect` function to make assertions +and supports most [Playwright assertions](https://playwright.dev/docs/test-assertions). +Elastic Synthetics does _not_ support [`toHaveScreenshot`](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-screenshot-1) +or any [Snapshot Assertions](https://playwright.dev/docs/api/class-snapshotassertions). + +For example, on a page using the following HTML: + +```html +<header class="header"> + <h1>todos</h1> + <input class="new-todo" + autofocus autocomplete="off" + placeholder="What needs to be done?"> +</header> +``` + +You can verify that the `input` element with class `new-todo` has the expected `placeholder` value +(the hint text for `input` elements) with the following test: + +```js +step('Assert placeholder text', async () => { + const input = await page.locator('input.new-todo'); [^1] + expect(await input.getAttribute('placeholder')).toBe( + 'What needs to be done?' + ); [^2] +}); +``` +[^1]: Find the `input` element with class `new-todo`. +[^2]: Use the assertion library provided by the Synthetics agent to check that +the value of the `placeholder` attribute matches a specific string. + +<div id="synthetics-request-param"></div> + +## Make API requests + +You can use the `request` parameter to make API requests independently of browser interactions. +For example, you could retrieve a token from an HTTP endpoint and use it in a subsequent webpage request. + +```js +step('make an API request', async () => { + const response = await request.get(params.url); + // Do something with the response +}) +``` + +The Elastic Synthetics `request` parameter is similar to [other request objects that are exposed by Playwright](https://playwright.dev/docs/api/class-apirequestcontext) +with a few key differences: + +* The Elastic Synthetics `request` parameter comes built into the library so it doesn't + have to be imported separately, which reduces the amount of code needed and allows you to + make API requests in <DocLink id="serverlessObservabilitySyntheticsGetStartedUi" section="add-a-browser-monitor">inline journeys</DocLink>. + +* The top level `request` object exposed by Elastic Synthetics has its own isolated cookie storage + unlike Playwright's `context.request` and `page.request`, which share cookie storage + with the corresponding [`BrowserContext`](https://playwright.dev/docs/api/class-browsercontext). + +* If you want to control the creation of the `request` object, you can do so by passing options + via <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics">`--playwright-options`</DocLink> or in the + <DocLink id="serverlessObservabilitySyntheticsConfiguration">`synthetics.config.ts` file</DocLink>. + +For a full example that shows how to use the `request` object, refer to the [Elastic Synthetics demo repository](https://github.com/elastic/synthetics-demo/blob/main/advanced-examples/journeys/api-requests.journey.ts). + +<DocCallOut title="Note"> +The `request` parameter is not intended to be used for writing pure API tests. Instead, it is a way to support +writing plain HTTP requests in service of a browser-based test. +</DocCallOut> + +<div id="before-after"></div> + +## Set up and remove a global state + +If there are any actions that should be done before or after journeys, you can use `before`, `beforeAll`, `after`, or `afterAll`. + +To set up global state or a server that will be used for a **single** `journey`, for example, +use a `before` hook. To perform this setup once before **all** journeys, use a `beforeAll` hook. + +```js +before(({ params }) => { + // Actions to take +}); + +beforeAll(({ params }) => { + // Actions to take +}); +``` + +You can clean up global state or close a server used for a **single** `journey` using an `after` hook. +To perform this cleanup once after all journeys, use an `afterAll` hook. + +```js +after(({ params }) => { + // Actions to take +}); + +afterAll(({ params }) => { + // Actions to take +}); +``` + +<div id="synthetics-import-packages"></div> + +## Import NPM packages + +You can import and use other NPM packages inside journey code. +Refer to the example below using the external NPM package `is-positive`: + +```js +import { journey, step, monitor, expect } from '@elastic/synthetics'; +import isPositive from 'is-positive'; + +journey('bundle test', ({ page, params }) => { + step('check if positive', () => { + expect(isPositive(4)).toBe(true); + }); +}); +``` + +When you <DocLink id="serverlessObservabilitySyntheticsGetStartedProject">create a monitor</DocLink> from a journey that uses +external NPM packages, those packages will be bundled along with the +journey code when the `push` command is invoked. + +However there are some limitations when using external packages: + +* Bundled journeys after compression should not be more than 800 Kilobytes. +* Native node modules will not work as expected due to platform inconsistency. + +<div id="synthetics-sample-test"></div> + +## Sample synthetic test + +A complete example of a basic synthetic test might look like this: + +```js +import { journey, step, expect } from '@elastic/synthetics'; + +journey('Ensure placeholder is correct', ({ page }) => { + step('Load the demo page', async () => { + await page.goto('https://elastic.github.io/synthetics-demo/'); + }); + step('Assert placeholder text', async () => { + const placeholderValue = await page.getAttribute( + 'input.new-todo', + 'placeholder' + ); + expect(placeholderValue).toBe('What needs to be done?'); + }); +}); +``` + +You can find more complex examples in the [Elastic Synthetics demo repository](https://github.com/elastic/synthetics-demo/blob/main/advanced-examples/journeys/api-requests.journey.ts). + +<div id="synthetics-test-locally"></div> + +## Test locally + +As you write journeys, you can run them locally to verify they work as expected. Then, you can create monitors to run your journeys at a regular interval. + +To test all the journeys in a Synthetics project, navigate into the directory containing the Synthetics project and run the journeys in there. +By default, the `@elastic/synthetics` runner will only run files matching the filename `*.journey.(ts|js)*`. + +```sh +# Run tests on the current directory. The dot `.` indicates +# that it should run all tests in the current directory. +npx @elastic/synthetics . +``` + +<div id="synthetics-test-inline"></div> + +### Test an inline monitor + +To test an inline monitor's journey locally, pipe the inline journey into the `npx @elastic/synthetics` command. + +Assume, for example, that your inline monitor includes the following code: + +```js +step('load homepage', async () => { + await page.goto('https://www.elastic.co'); +}); +step('hover over products menu', async () => { + await page.hover('css=[data-nav-item=products]'); +}); +``` + +To run that journey locally, you can save that code to a file and pipe the file's contents into `@elastic-synthetics`: + +```sh +cat path/to/sample.js | npx @elastic/synthetics --inline +``` + +And you'll get a response like the following: + +```sh +Journey: inline + ✓ Step: 'load homepage' succeeded (1831 ms) + ✓ Step: 'hover over products menu' succeeded (97 ms) + + 2 passed (2511 ms) +``` diff --git a/docs/en/serverless/synthetics/synthetics-feature-roles.mdx b/docs/en/serverless/synthetics/synthetics-feature-roles.mdx new file mode 100644 index 0000000000..c4bab058b3 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-feature-roles.mdx @@ -0,0 +1,46 @@ +--- +id: serverlessObservabilitySyntheticsFeatureRoles +slug: /serverless/observability/synthetics-feature-roles +title: Grant users access to secured resources +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="synthetics-feature-roles"></div> + +You can use role-based access control to grant users access to secured +resources. The roles that you set up depend on your organization's security +requirements and the minimum privileges required to use specific features. + +<DocTable + columns={[ + { title: "Role", width: "20%" }, + { title: "Synthetics functionality", width: "80%" } + ]} +> +<DocRow> + <DocCell>Viewer</DocCell> + <DocCell> + * View and create visualizations that access Synthetics data. + </DocCell> +</DocRow> +<DocRow> + <DocCell>Editor</DocCell> + <DocCell> + * Create, modify, and delete monitors. + * View and create visualizations that access Synthetics data. + </DocCell> +</DocRow> +<DocRow> + <DocCell>Admin</DocCell> + <DocCell> + * Full access to project management, properties, and security privileges. + * Create, modify, and delete monitors. + * View and create visualizations that access Synthetics data. + </DocCell> +</DocRow> +</DocTable> + +Read more about user roles in <DocLink id="serverlessGeneralAssignUserRoles" />. diff --git a/docs/en/serverless/synthetics/synthetics-get-started-project.mdx b/docs/en/serverless/synthetics/synthetics-get-started-project.mdx new file mode 100644 index 0000000000..a48fbd6f4c --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-get-started-project.mdx @@ -0,0 +1,209 @@ +--- +id: serverlessObservabilitySyntheticsGetStartedProject +slug: /serverless/observability/synthetics-get-started-project +title: Create monitors with a Synthetics project +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +A Synthetics project is the most powerful and sophisticated way to configure synthetic monitors. +A Synthetics project lets you define your infrastructure as code, more commonly known as IaaC or Git-ops. +With monitors created and managed in Synthetics projects, you organize your YAML configuration and +JavaScript- or TypeScript-defined monitors on the filesystem, use Git for version control, +and deploy via a CLI tool, usually executed on a CI/CD platform. + +<DocImage url="../images/synthetics-get-started-projects.png" alt="Diagram showing which pieces of software are used to configure monitors, create monitors, and view results when using Synthetic project monitors." flatImage /> + +This is one of <DocLink id="serverlessObservabilitySyntheticsGetStarted">two approaches</DocLink> you can use to set up a synthetic monitor. + +## Prerequisites + +You must be signed in as a user with <DocLink id="serverlessObservabilitySyntheticsFeatureRoles">Editor</DocLink> access. +{/* and Monitor Management must be enabled by an administrator as described in <DocLink id="serverlessObservabilitySyntheticsFeatureRoles">Setup role</DocLink>. */} + +Working with a Synthetics project requires working with the Elastic Synthetics CLI tool, which +can be invoked via the `npx @elastic/synthetics` command. Before getting started +you'll need to: + +1. Install [Node.js](https://nodejs.dev/en/) +1. Install the package: + + ```sh + npm install -g @elastic/synthetics + ``` + +1. Confirm your system is setup correctly: + + ```sh + npx @elastic/synthetics -h + ``` + +You should also decide where you want to run the monitors before getting started. +You can run monitors in Synthetics projects on one or both of the following: + +* **Elastic's global managed testing infrastructure**: + With Elastic's global managed testing infrastructure, you can create and run monitors in multiple + locations without having to manage your own infrastructure. + Elastic takes care of software updates and capacity planning for you. + +* **((private-location))s**: ((private-location))s allow you to run monitors from your own premises. + To use ((private-location))s you must create a ((private-location)) before continuing. + For step-by-step instructions, refer to <DocLink id="serverlessObservabilitySyntheticsPrivateLocation">Monitor resources on private networks</DocLink>. + +## Create a Synthetics project + +Start by creating your first Synthetics project. Run the command below to create a new +Synthetics project named `synthetic-project-test` in the current directory. + +```sh +npx @elastic/synthetics init synthetic-project-test +``` + +Then, follow the prompts on screen to set up the correct default variables for your Synthetics project. +When complete, set the `SYNTHETICS_API_KEY` environment variable in your terminal, which is used +to connect to your Observability project: + +1. To generate an API key: + 1. Go to **Synthetics** in your Observability project. + 1. Click **Settings**. + 1. Switch to the **Project API Keys** tab. + 1. Click **Generate Project API key**. + + <DocCallOut title="Important" color="warning"> + + To generate a Project API key, you must be logged in as a user with <DocLink id="serverlessObservabilitySyntheticsFeatureRoles">Editor</DocLink> access. + + </DocCallOut> + + ![Project API Keys tab in Synthetics settings](../images/synthetics-monitor-management-api-key.png) + + <DocCallOut title="Note"> + + To use an API key to push to Elastic's global managed testing infrastructure, + the _Elastic managed locations enabled_ toggle must be on when generating the API key. + If the _Elastic managed locations enabled_ toggle is disabled, an administrator has restricted + access to Elastic's global managed testing infrastructure. + {/* Read more in the <DocLink id="serverlessObservabilitySyntheticsFeatureRoles" section="to-restrict-using-elastics-global-managed-infrastructure">writer role documentation</DocLink>. */} + + </DocCallOut> + +1. Set the `SYNTHETICS_API_KEY` environment variable in your terminal. + You will most likely want to set this permanently. + This is done differently in [Powershell](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment_variables?view=powershell-7.2#saving-changes-to-environment-variables) and [Bash](https://unix.stackexchange.com/a/117470). + +Then, take a look at key files and directories inside your Synthetics project: + +* `journeys` is where you'll add `.ts` and `.js` files defining your browser monitors. + When you create a new Synthetics project, this directory will contain files defining sample monitors. +* `lightweight` is where you'll add `.yaml` files defining your lightweight monitors. +When you create a new Synthetics project, this directory will contain a file defining sample monitors. +* `synthetics.config.ts` contains settings for your Synthetics project. + When you create a new Synthetics project, it will contain some basic configuration options that you can customize later. + + <DocCallOut title="Note"> + + The `synthetics.config.ts` in the sample Synthetics project uses a location on Elastic's global managed testing infrastructure. + Administrators can restrict access to Elastic's global managed testing infrastructure. + When you attempt to <DocLink id="serverlessObservabilitySyntheticsGetStartedProject" section="test-and-connect-to-your-observability-project">`push` the sample monitors</DocLink>, + if you see an error stating that you don't have permission to use Elastic managed global locations, + refer to the <DocLink id="serverlessObservabilitySyntheticsTroubleshooting" section="no-locations-are-available">troubleshooting guide</DocLink> for guidance. + + </DocCallOut> + +* `package.json` contains NPM settings for your Synthetics project. Learn more in the [NPM documentation](https://docs.npmjs.com/about-packages-and-modules). +* `.github` contains sample workflow files to use with GitHub Actions. + +## Examine sample monitors + +Inside the `lightweight` directory you'll find sample lightweight monitors. +Here's an example of a YAML file defining a lightweight monitor: + +```yml +# lightweight.yml +heartbeat.monitors: +- type: http + name: Todos Lightweight + id: todos-lightweight + urls: "https://elastic.github.io/synthetics-demo/" + schedule: '@every 1m' +``` + +For more details on lightweight monitor configuration options, +refer to <DocLink id="serverlessObservabilitySyntheticsLightweight">Configure lightweight monitors</DocLink>. + +Inside the `journeys` directory you'll find sample browser monitors. +Here's an example of a TypeScript file defining a browser monitor: + +```ts +// example.journey.ts +import { journey, step, monitor, expect } from '@elastic/synthetics'; +journey('My Example Journey', ({ page, params }) => { + // Only relevant for the push command to create + // monitors in your Observability project + monitor.use({ + id: 'example-monitor', + schedule: 10, + }); + step('launch application', async () => { + await page.goto(params.url); + }); + step('assert title', async () => { + const header = await page.locator('h1'); + expect(await header.textContent()).toBe('todos'); + }); +}); +``` + +For more details on writing journeys and configuring browser monitors, +refer to <DocLink id="serverlessObservabilitySyntheticsJourneys">Scripting browser monitors</DocLink>. + +## Test and connect to your Observability project + +While inside the Synthetics project directory you can do two things with the `npx @elastic/synthetics` command: + +* Test browser-based monitors locally. To run all journeys defined in `.ts` and `.js` files: + + ```sh + npx @elastic/synthetics journeys + ``` + +* Push all monitor configurations to an Elastic Observability project. + Run the following command from inside your Synthetics project directory: + + ```sh + npx @elastic/synthetics push --auth $SYNTHETICS_API_KEY --url <observability-project-url> + ``` + +One monitor will appear in the Synthetics UI for each journey or +lightweight monitor, and you'll manage all monitors from your local environment. +For more details on using the `push` command, refer to <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-push">`@elastic/synthetics push`</DocLink>. + +<DocCallOut title="Note"> + +If you've <DocLink id="serverlessObservabilitySyntheticsPrivateLocation">added a ((private-location))</DocLink>, +you can `push` to that ((private-location)). + +To list available ((private-location))s, +run the <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-locations">`elastic-synthetics locations` command</DocLink> +with the URL for the Observability project from which to fetch available locations. + +</DocCallOut> + +## View in your Observability project + +Then, go to **Synthetics** in your Observability project. You should see your newly pushed monitors running. +You can also go to the **Management** tab to see the monitors' configuration settings. + +<DocCallOut title="Note"> + When a monitor is created or updated, the first run might not occur immediately, but the time it takes for the first run to occur will be less than the monitor's configured frequency. For example, if you create a monitor and configure it to run every 10 minutes, the first run will occur within 10 minutes of being created. After the first run, the monitor will begin running regularly based on the configured frequency. You can run a manual test if you want to see the results more quickly. +</DocCallOut> + +## Next steps + +Learn more about: + +* <DocLink id="serverlessObservabilitySyntheticsLightweight">Configuring lightweight monitors</DocLink> +* <DocLink id="serverlessObservabilitySyntheticsCreateTest">Configuring browser monitors</DocLink> +* <DocLink id="serverlessObservabilitySyntheticsManageMonitors" section="implement-best-practices-for-synthetics-projects">Implementing best practices for working with Synthetics projects</DocLink> diff --git a/docs/en/serverless/synthetics/synthetics-get-started-ui.mdx b/docs/en/serverless/synthetics/synthetics-get-started-ui.mdx new file mode 100644 index 0000000000..e5beda9372 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-get-started-ui.mdx @@ -0,0 +1,134 @@ +--- +id: serverlessObservabilitySyntheticsGetStartedUi +slug: /serverless/observability/synthetics-get-started-ui +title: Create monitors in the Synthetics UI +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +import GlobalManagedPaidFor from '../transclusion/synthetics/global-managed-paid-for.mdx' + +You can create synthetic monitors directly in the UI by opening an Observability project and navigating to **Synthetics**. + +<DocImage url="../images/synthetics-get-started-ui.png" alt="Diagram showing which pieces of software are used to configure monitors, create monitors, and view results when using Synthetics projects." flatImage /> + +This is one of <DocLink id="serverlessObservabilitySyntheticsGetStarted">two approaches</DocLink> you can use to set up a synthetic monitor. + +## Prerequisites + +You must be signed in as a user with <DocLink id="serverlessObservabilitySyntheticsFeatureRoles">Editor</DocLink> access. +{/* and Monitor Management must be enabled by an administrator as described in <DocLink id="serverlessObservabilitySyntheticsFeatureRoles">Setup role</DocLink>. */} + +<div id="private-locations"></div> + +You should decide where you want to run the monitors before getting started. +You can run monitors on one or both of the following: + +* **Elastic's global managed testing infrastructure**: + With Elastic's global managed testing infrastructure, you can create and run monitors in multiple + locations without having to manage your own infrastructure. + Elastic takes care of software updates and capacity planning for you. + +* **((private-location))s**: ((private-location))s allow you to run monitors from your own premises. + To use ((private-location))s you must create a ((private-location)) before continuing. + For step-by-step instructions, refer to <DocLink id="serverlessObservabilitySyntheticsPrivateLocation">Monitor resources on private networks</DocLink>. + +<GlobalManagedPaidFor /> + +## Add a lightweight monitor + +To use the UI to add a lightweight monitor: + +1. Go to **Synthetics** in your Observability project. +1. Click **Create monitor**. +1. Set the monitor type to **HTTP Ping**, **TCP Ping**, or **ICMP Ping**. +1. In _Locations_, select one or more locations. + + <DocCallOut title="Note"> + If you don't see any locations listed, refer to the + <DocLink id="serverlessObservabilitySyntheticsTroubleshooting" section="no-locations-are-available">troubleshooting guide</DocLink> for guidance. + </DocCallOut> + + <DocCallOut title="Note"> + If you've <DocLink id="serverlessObservabilitySyntheticsPrivateLocation">added a ((private-location))</DocLink>, + you'll see your the ((private-location)) in the list of _Locations_. + + ![Screenshot of Monitor locations options including a ((private-location))](../images/private-locations-monitor-locations.png) + </DocCallOut> + +1. Set the _Frequency_, and configure the monitor as needed. +1. Click **Advanced options** to see more ways to configure your monitor. +1. (Optional) Click **Run test** to verify that the test is valid. +1. Click **Create monitor**. + + ![Synthetics Create monitor UI](../images/synthetics-get-started-ui-lightweight.png) + +## Add a browser monitor + +You can also create a browser monitor in the UI using an **Inline script**. + +An inline script contains a single journey that you manage individually. +Inline scripts can be quick to set up, but can also be more difficult to manage. +Each browser monitor configured using an inline script can contain only _one_ journey, +which must be maintained directly in the UI. + +If you depend on external packages, have your journeys next to your code repository, +or want to embed and manage more than one journey from a single monitor configuration, +use a <DocLink id="serverlessObservabilitySyntheticsGetStartedProject">Synthetics project</DocLink> instead. + +To use the UI to add a browser monitor: + +1. Click **Create monitor**. +1. Set the monitor type to **Multistep**. +1. In _Locations_, select one or more locations. + + <DocCallOut title="Note"> + If you don't see any locations listed, refer to the + <DocLink id="serverlessObservabilitySyntheticsTroubleshooting" section="no-locations-are-available">troubleshooting guide</DocLink> for guidance. + </DocCallOut> + +1. Set the _Frequency_. +1. Add steps to the **Script editor** code block directly. + The `journey` keyword isn't required, and variables like `page` and `params` will be part of your script's scope. + You cannot `import` any dependencies when using inline browser monitors. + + ![Configure a synthetic monitor using an inline script](../images/synthetics-ui-inline-script.png) + + <DocCallOut title="Note"> + Alternatively, you can use the **Script recorder** option. + You can use the Elastic Synthetics Recorder to interact with a web page, export + journey code that reflects all the actions you took, and upload the results in the UI. + For more information, refer to <DocLink id="serverlessObservabilitySyntheticsRecorder">Use the Synthetics Recorder</DocLink>. + </DocCallOut> + +1. Click **Advanced options** to see more ways to configure your monitor. + + * Use **Data options** to add context to the data coming from your monitors. + * Use the **Synthetics agent options** to provide fine-tuned configuration for the synthetics agent. + Read more about available options in <DocLink id="serverlessObservabilitySyntheticsCommandReference">Use the Synthetics CLI</DocLink>. + +1. (Optional) Click **Run test** to verify that the test is valid. +1. Click **Create monitor**. + +## View in your Observability project + +Navigate to **Synthetics** in your Observability project, where you can see screenshots of each run, +set up alerts in case of test failures, and more. + +If a test does fail (shown as `down` in the Synthetics UI), you'll be able to view the step script that failed, +any errors, and a stack trace. +For more information, refer to <DocLink id="serverlessObservabilitySyntheticsAnalyze" section="browser-monitors">Analyze data from synthetic monitors</DocLink>. + +<DocCallOut title="Note"> + When a monitor is created or updated, the first run might not occur immediately, but the time it takes for the first run to occur will be less than the monitor's configured frequency. For example, if you create a monitor and configure it to run every 10 minutes, the first run will occur within 10 minutes of being created. After the first run, the monitor will begin running regularly based on the configured frequency. You can run a manual test if you want to see the results more quickly. +</DocCallOut> + +## Next steps + +Learn more about: + +* <DocLink id="serverlessObservabilitySyntheticsCreateTest">Writing user journeys</DocLink> to use as inline scripts +* Using the <DocLink id="serverlessObservabilitySyntheticsRecorder">Synthetics Recorder</DocLink> +* <DocLink id="serverlessObservabilitySyntheticsLightweight">Configuring lightweight monitors</DocLink> diff --git a/docs/en/serverless/synthetics/synthetics-get-started.mdx b/docs/en/serverless/synthetics/synthetics-get-started.mdx new file mode 100644 index 0000000000..4e331a5712 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-get-started.mdx @@ -0,0 +1,42 @@ +--- +id: serverlessObservabilitySyntheticsGetStarted +slug: /serverless/observability/synthetics-get-started +title: Get started +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +To set up a synthetic monitor, you need to configure the monitor, run it, and send data back to Elastic. +After setup is complete, the data will be available in your Observability project to view, analyze, and alert on. + +There are two ways to set up a synthetic monitor: + +* Synthetics project +* The Synthetics UI + +Read more about each option below, and choose the approach that works best for you. + +## Synthetics project + +With a Synthetics project, you write tests in an external version-controlled Node.js project +using YAML for lightweight monitors and JavaScript or TypeScript for browser monitors. +Then, you use the `@elastic/synthetics` NPM library's `push` command to create +monitors in your Observability project. + +This approach works well if you want to create both browser monitors and lightweight +monitors. It also allows you to configure and update monitors using a GitOps workflow. + +Get started in <DocLink id="serverlessObservabilitySyntheticsGetStartedProject">Create monitors in a Synthetics project</DocLink>. + +<DocImage url="../images/synthetics-get-started-projects.png" alt="Diagram showing which pieces of software are used to configure monitors, create monitors, and view results when using Synthetics projects." flatImage /> + +## Synthetics UI + +You can create monitors directly in the user interface. +This approach works well if you want to create and manage your monitors in the browser. + +Get started in <DocLink id="serverlessObservabilitySyntheticsGetStartedUi">Create monitors in the Synthetics UI</DocLink>. + +<DocImage url="../images/synthetics-get-started-ui.png" alt="Diagram showing which pieces of software are used to configure monitors, create monitors, and view results when using the Synthetics UI." flatImage /> diff --git a/docs/en/serverless/synthetics/synthetics-intro.mdx b/docs/en/serverless/synthetics/synthetics-intro.mdx new file mode 100644 index 0000000000..08ebc42de3 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-intro.mdx @@ -0,0 +1,59 @@ +--- +id: serverlessObservabilityMonitorSynthetics +slug: /serverless/observability/monitor-synthetics +title: Synthetic monitoring +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +<DocCallOut title="Note"> + +The Synthetics UI is for viewing result data from monitors created and managed +directly in the <DocLink id="serverlessObservabilitySyntheticsGetStartedUi">Synthetics UI</DocLink> or managed externally +using a <DocLink id="serverlessObservabilitySyntheticsGetStartedProject">Synthetics project</DocLink>. +This can include both lightweight and browser-based monitors, and can include monitors +running from either Elastic's global managed testing infrastructure or from +<DocLink id="serverlessObservabilitySyntheticsPrivateLocation">((private-location))s</DocLink>. + +</DocCallOut> + +Synthetics periodically checks the status of your services and applications. +Monitor the availability of network endpoints and services using the following types of monitors: + +* <DocLink id="serverlessObservabilityMonitorSynthetics" section="lightweight-https-tcp-and-icmp-monitors">Lightweight HTTP/S, TCP, and ICMP monitors</DocLink> +* <DocLink id="serverlessObservabilityMonitorSynthetics" section="browser-monitors">Browser monitors</DocLink> + +![Synthetics UI](../images/synthetics-monitor-page.png) + +## Lightweight HTTP/S, TCP, and ICMP monitors + +You can monitor the status of network endpoints using the following lightweight checks: + +{/* lint ignore v4 v6 */} +| | | +|---|---| +| **HTTP monitor** | Monitor your website. The HTTP monitor checks to make sure specific endpoints return the correct status code and display the correct text. | +| **ICMP monitor** | Check the availability of your hosts. The ICMP monitor uses ICMP (v4 and v6) Echo Requests to check the network reachability of the hosts you are pinging. This will tell you whether the host is available and connected to the network, but doesn't tell you if a service on the host is running or not. | +| **TCP monitor** | Monitor the services running on your hosts. The TCP monitor checks individual ports to make sure the service is accessible and running. | + +To set up your first monitor, refer to <DocLink id="serverlessObservabilitySyntheticsGetStarted">Get started</DocLink>. + +## Browser monitors + +Real browser synthetic monitoring enables you to test critical actions and requests that an end-user would make +on your site at predefined intervals and in a controlled environment. +Synthetic monitoring extends traditional end-to-end testing techniques because it allows your tests to run continuously on the cloud. +The result is rich, consistent, and repeatable data that you can trend and alert on. + +For example, you can test popular user journeys, like logging in, adding items to a cart, and checking +out — actions that need to work for your users consistently. + +You can run an automated Synthetics project on a real Chromium browser and +view each synthetic monitoring journey in your Observability project side-by-side with your other monitors. + +Alerting helps you detect degraded performance or broken actions before your users do. +By receiving alerts early, you can fix issues before they impact your bottom line or customer experience. + +To set up your first monitor, refer to <DocLink id="serverlessObservabilitySyntheticsGetStarted">Get started</DocLink>. diff --git a/docs/en/serverless/synthetics/synthetics-journeys.mdx b/docs/en/serverless/synthetics/synthetics-journeys.mdx new file mode 100644 index 0000000000..b5e5d748fd --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-journeys.mdx @@ -0,0 +1,30 @@ +--- +id: serverlessObservabilitySyntheticsJourneys +slug: /serverless/observability/synthetics-journeys +title: Scripting browser monitors +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="synthetics-journeys"></div> + +Browser monitors are a type of synthetic monitor. +Synthetic monitoring extends traditional end-to-end testing techniques because it allows your tests to run continuously on the cloud. +With synthetic monitoring, you can assert that your application continues to work after a deployment by reusing +the same journeys that you used to validate the software on your machine. + +You can use synthetic monitors to detect bugs caused by invalid states you couldn't predict and didn't write tests for. +Synthetic monitors can also help you catch bugs in features that don't get much traffic by allowing you to periodically simulate users' actions. + +Start by learning the basics of synthetic monitoring, including how to: + +* <DocLink id="serverlessObservabilitySyntheticsCreateTest">Write a synthetic test</DocLink> +* <DocLink id="serverlessObservabilitySyntheticsCreateTest" section="test-locally">Test locally</DocLink> +* <DocLink id="serverlessObservabilitySyntheticsMonitorUse">Configure individual browser monitors</DocLink> +* <DocLink id="serverlessObservabilitySyntheticsParamsSecrets">Work with params and secrets</DocLink> +* <DocLink id="serverlessObservabilitySyntheticsRecorder">Use the Synthetics Recorder</DocLink> + +![Diagram of the lifecycle of a synthetic monitor: write a test, test it locally, create a monitor, manage a monitor, delete a monitor](../images/synthetic-monitor-lifecycle.png) + diff --git a/docs/en/serverless/synthetics/synthetics-lightweight.mdx b/docs/en/serverless/synthetics/synthetics-lightweight.mdx new file mode 100644 index 0000000000..f030dca442 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-lightweight.mdx @@ -0,0 +1,233 @@ +--- +id: serverlessObservabilitySyntheticsLightweight +slug: /serverless/observability/synthetics-lightweight +title: Configure lightweight monitors +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +import LightweightConfigCommon from '../transclusion/synthetics/reference/lightweight-config/common.mdx' +import LightweightConfigHttp from '../transclusion/synthetics/reference/lightweight-config/http.mdx' +import LightweightConfigIcmp from '../transclusion/synthetics/reference/lightweight-config/icmp.mdx' +import LightweightConfigTcp from '../transclusion/synthetics/reference/lightweight-config/tcp.mdx' + +<div id="synthetics-lightweight"></div> + +Monitor the status of network endpoints using the following lightweight checks: + +* **HTTP**: Monitor your website. The HTTP monitor checks to make sure specific endpoints return the correct + status code and display the correct text. + +* **ICMP**: Check the availability of your hosts. The ICMP monitor uses ICMP (v4 and v6) Echo + Requests to check the network reachability of the hosts you are pinging. This will tell you whether the + host is available and connected to the network, but doesn't tell you if a service on the host is running or + not. + +* **TCP**: Monitor the services running on your hosts. The TCP monitor checks individual ports + to make sure the service is accessible and running. + +Lightweight monitors can be configured using either the <DocLink id="serverlessObservabilitySyntheticsLightweight" section="synthetics-ui">Synthetics UI</DocLink> +or a <DocLink id="serverlessObservabilitySyntheticsLightweight" section="synthetics-project">Synthetics project</DocLink>. + +<div id="synthetics-lightweight-ui"></div> + +## Synthetics UI + +To use the UI, go to **Synthetics** in your Observability project to create and configure monitors. +For step-by-step instructions, refer to <DocLink id="serverlessObservabilitySyntheticsGetStartedUi">Create monitors in the Synthetics UI</DocLink>. + +![Synthetics Create monitor UI](../images/synthetics-get-started-ui-lightweight.png) + +## Synthetics project + +To use YAML files to create lightweight monitors in a Synthetics project, <DocLink id="serverlessObservabilitySyntheticsGetStartedProject">set up the Synthetics project</DocLink> +and configure monitors in YAML files in the `lightweight` directory. + +In each YAML file, define a set of `monitors` to check your remote hosts. +Each `monitor` item is an entry in a YAML list and begins with a dash (`-`). +You can define the type of monitor to use, the hosts to check, and other +optional settings. + +The following example configures three monitors checking via the `http`, `icmp`, and `tcp` +protocols and demonstrates how to use TCP Echo response verification: + +```yaml +heartbeat.monitors: +- type: http + name: Todos Lightweight + id: todos-lightweight + urls: "https://elastic.github.io/synthetics-demo/" + schedule: '@every 1m' +- type: icmp + id: ping-myhost + name: My Host Ping + hosts: "myhost" + schedule: '@every 5m' +- type: tcp + id: myhost-tcp-echo + name: My Host TCP Echo + hosts: "myhost:777" # default TCP Echo Protocol + check.send: "Check" + check.receive: "Check" + schedule: '@every 60s' +``` + +<div id="synthetics-monitor-options"></div> + +There are some common monitor configuration options that are the same for all lightweight monitor types. +For a complete list, refer to <DocLink id="serverlessObservabilitySyntheticsLightweight" section="common-options">Common options</DocLink>. + +Each monitor type also has additional configuration options that are specific to that type. +Refer to: + +* <DocLink id="serverlessObservabilitySyntheticsLightweight" section="http-options">HTTP options</DocLink> +* <DocLink id="serverlessObservabilitySyntheticsLightweight" section="icmp-options">ICMP options</DocLink> +* <DocLink id="serverlessObservabilitySyntheticsLightweight" section="tcp-options">TCP options</DocLink> + +The `tcp` and `http` monitor types both support SSL/TLS and some proxy settings. + +<div id="synthetics-lightweight-common-options"></div> + +### Common options + +You can specify the following options when defining a synthetic monitor in any location. +These options are the same for all monitors. Each monitor type has additional configuration +options that are specific to that monitor type. + +{/* Reference table */} +<LightweightConfigCommon /> + +<div id="synthetics-lightweight-http"></div> + +### HTTP options + +The options described here configure Synthetics to connect via HTTP and +optionally verify that the host returns the expected response. + +Valid options for HTTP monitors include <DocLink id="serverlessObservabilitySyntheticsLightweight" section="common-options">all common options</DocLink> +and the following HTTP-specific options: + +{/* Reference table */} +<LightweightConfigHttp /> + +<div id="synthetics-lightweight-icmp"></div> + +### ICMP options + +The options described here configure Synthetics to use ICMP (v4 and v6) Echo +Requests to check the configured hosts. On most platforms you must execute +Synthetics with elevated permissions to perform ICMP pings. + +On Linux, regular users may perform pings if the right file capabilities are set. Run +`sudo setcap cap_net_raw+eip /path/to/heartbeat` to grant Synthetics ping capabilities on Linux. +Alternatively, you can grant ping permissions to the user being used to run Synthetics. +To grant ping permissions in this way, run `sudo sysctl -w net.ipv4.ping_group_range='myuserid myuserid'`. + +Other platforms may require Synthetics to run as root or administrator to execute pings. + +Valid options for ICMP monitors include <DocLink id="serverlessObservabilitySyntheticsLightweight" section="common-options">all common options</DocLink> +and the following ICMP-specific options: + +{/* Reference table */} +<LightweightConfigIcmp /> + +<div id="synthetics-lightweight-tcp"></div> + +### TCP options + +The options described here configure Synthetics to connect via TCP and +optionally verify the endpoint by sending and/or receiving a custom payload. + +Valid options for TCP monitors include <DocLink id="serverlessObservabilitySyntheticsLightweight" section="common-options">all common options</DocLink> +and the following TCP-specific options: + +{/* Reference table */} +<LightweightConfigTcp /> + +<div id="synthetics-lightweight-data-types"></div> + +### Data types reference + +Values of configuration settings are interpreted as required by Synthetics. +If a value can't be correctly interpreted as the required type - for example a +string is given when a number is required - Synthetics will fail to start up. + +<div id="synthetics-lightweight-data-bool"></div> + +#### Boolean + +Boolean values can be either `true` or `false`. Alternative names for `true` are +`yes` and `on`. Instead of `false` the values `no` and `off` can be used. + +```yaml +enabled: true +disabled: false +``` + +<div id="synthetics-lightweight-data-numbers"></div> + +#### Number + +Number values require you to enter the number _without_ single or +double quotes. + +```yaml +integer: 123 +negative: -1 +float: 5.4 +``` + +<DocCallOut title="Note"> +Some settings only support a restricted number range. +</DocCallOut> + +<div id="synthetics-lightweight-data-string"></div> + +#### String + +In [YAML](http://www.yaml.org), multiple styles of string definitions are supported: +double-quoted, single-quoted, unquoted. + +The double-quoted style is specified by surrounding the string with `"`. This +style provides support for escaping unprintable characters using `\`, but comes +at the cost of having to escape `\` and `"` characters. + +The single-quoted style is specified by surrounding the string with `'`. This +style supports no escaping (use `''` to quote a single quote). Only printable +characters can be used when using this form. + +Unquoted style requires no quotes, but does not support any escaping and can't +include any symbol that has a special meaning in YAML. + +<DocCallOut title="Note"> +Single-quoted style is recommended when defining regular expressions, +event format strings, windows file paths, or non-alphabetical symbolic characters. +</DocCallOut> + +<div id="synthetics-lightweight-data-duration"></div> + +#### Duration + +Durations require a numeric value with optional fraction and required unit. +Valid time units are `ns`, `us`, `ms`, `s`, `m`, `h`. Sometimes features based +on durations can be disabled by using zero or negative durations. + +```yaml +duration1: 2.5s +duration2: 6h +duration_disabled: -1s +``` + +<div id="synthetics-lightweight-data-regex"></div> + +#### Regular expression + +Regular expressions are special strings that are compiled into regular +expressions at load time. + +As regular expressions and YAML use `\` for escaping +characters in strings, it's highly recommended to use single quoted strings when +defining regular expressions. When single quoted strings are used, the `\` character +is not interpreted by YAML parser as an escape symbol. diff --git a/docs/en/serverless/synthetics/synthetics-manage-monitors.mdx b/docs/en/serverless/synthetics/synthetics-manage-monitors.mdx new file mode 100644 index 0000000000..0395924e2e --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-manage-monitors.mdx @@ -0,0 +1,99 @@ +--- +id: serverlessObservabilitySyntheticsManageMonitors +slug: /serverless/observability/synthetics-manage-monitors +title: Manage monitors +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +import SyntheticsManageMonitorsUpdateMonitorWidget from '../transclusion/synthetics/tab-widgets/manage-monitors-update-monitor-widget.mdx' +import SyntheticsManageMonitorsDeleteMonitorWidget from '../transclusion/synthetics/tab-widgets/manage-monitors-delete-monitor-widget.mdx' + +<div id="synthetics-manage-monitors"></div> + +After you've <DocLink id="serverlessObservabilitySyntheticsGetStarted">created a synthetic monitor</DocLink>, +you'll need to manage that monitor over time. This might include updating +or permanently deleting an existing monitor. + +<DocCallOut title="Tip"> + If you're using a Synthetics project to manage monitors, you should also set up a workflow that uses + <DocLink id="serverlessObservabilitySyntheticsManageMonitors" section="implement-best-practices-for-synthetics-projects">best practices for managing monitors effectively</DocLink> + in a production environment. +</DocCallOut> + +<div id="manage-monitors-config"></div> + +## Update a monitor + +You can update a monitor's configuration, for example, changing the interval at which +the monitor runs a test. + +You can also update the journey used in a browser monitor. +For example, if you update the UI used in your application, you may want to update +your journey's selectors and assertions. + +<SyntheticsManageMonitorsUpdateMonitorWidget /> + +<div id="manage-monitors-delete"></div> + +## Delete a monitor + +Eventually you might want to delete a monitor altogether. +For example, if the user journey you were validating no longer exists. + +<SyntheticsManageMonitorsDeleteMonitorWidget /> + +<br /> + +Alternatively, you can temporarily disable a monitor by updating the monitor's +configuration in your journey's code or in the Synthetics UI using the _Enabled_ toggle. + +<div id="synthetics-projects-best-practices"></div> + +## Implement best practices for Synthetics projects + +<DocCallOut title="Important" color="warning"> +This is only relevant to monitors created using a Synthetics project. +</DocCallOut> + +After you've <DocLink id="serverlessObservabilitySyntheticsGetStartedProject">set up a Synthetics project</DocLink>, +there are some best practices you can implement to manage the Synthetics project effectively. + +<div id="synthetics-version-control"></div> + +### Use version control + +First, it's recommended that you version control all files in Git. +If your Synthetics project is not already in a version controlled directory add it +and push it to your Git host. + +<div id="synthetics-workflow"></div> + +### Set up recommended workflow + +While it can be convenient to run the `push` command directly from your workstation, +especially when setting up a new Synthetics project, it is not recommended for production environments. + +Instead, we recommended that you: + +1. Develop and test changes locally. +1. Create a pull request for all config changes. +1. Have your CI service automatically verify the PR by running `npx @elastic/synthetics .` + + Elastic's synthetics runner can output results in a few different formats, + including JSON and JUnit (the standard format supported by most CI platforms). + + If any of your journeys fail, it will yield a non-zero exit code, which most CI systems pick up as a failure by default. + +1. Have a human approve the pull request. +1. Merge the pull request. +1. Have your CI service automatically deploy the change by running `npx @elastic/synthetics push` after changes are merged. + +The exact implementation details will depend on the CI system and Git host you use. +You can reference the sample GitHub configuration file that is included in the `.github` +directory when you create a new Synthetics project. + +{/* or find an example in the */} +{/* [elastic/synthetics-demo](https://github.com/elastic/synthetics-demo/blob/main/.github/workflows/run-synthetics.yml) repository. */} diff --git a/docs/en/serverless/synthetics/synthetics-manage-retention.mdx b/docs/en/serverless/synthetics/synthetics-manage-retention.mdx new file mode 100644 index 0000000000..9efe9633a0 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-manage-retention.mdx @@ -0,0 +1,51 @@ +--- +id: serverlessObservabilitySyntheticsManageRetention +slug: /serverless/observability/synthetics-manage-retention +title: Manage data retention +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +When you set up a synthetic monitor, data from the monitor is saved in +[((es)) data streams](((ref))/data-streams.html), +an append-only structure in ((es)). + +There are six data streams recorded by synthetic monitors: `http`, `tcp`, `icmp`, `browser`, `browser.network`, `browser.screenshot`. +Elastic will retain data from each data stream for some time period, +and the default time period varies by data stream. +If you want to reduce the amount of storage required or store data for longer, +you can customize how long to retain data for each data stream. + +## Synthetics data streams + +There are six data streams recorded by synthetic monitors: + +| Data stream | Data includes | Default retention period | | +|---|---|---|---| +| `http` | The URL that was checked, the status of the check, and any errors that occurred | 1 year | | +| `tcp` | The URL that was checked, the status of the check, and any errors that occurred | 1 year | | +| `icmp` | The URL that was checked, the status of the check, and any errors that occurred | 1 year | | +| `browser` | The URL that was checked, the status of the check, and any errors that occurred | 1 year | | +| `browser.screenshot` | Binary image data used to construct a screenshot and metadata with information related to de-duplicating this data | 14 days | | +| `browser.network` | Detailed metadata around requests for resources required by the pages being checked | 14 days | | + +All types of checks record core metadata. +Browser-based checks store two additional types of data: network and screenshot documents. +These browser-specific indices are usually many times larger than the core metadata. +The relative sizes of each vary depending on the sites being +checked with network data usually being the larger of the two by a significant factor. + +## Customize data stream lifecycles + +If Synthetics browser data streams are storing data longer than necessary, +you can opt to retain data for a shorter period. + +To find Synthetics data streams: + +1. Navigate to **Project settings** → **Management** → **Index Management** → **Data Streams**. +1. Filter the list of data streams for those containing the term `synthetics`. + 1. In the UI there will be three types of browser data streams: `synthetics-browser-*`, `synthetics-browser.network-*`, and `synthetics-browser.screenshot-*`. + +Then, you can refer to [Tutorial: Customize data retention for integrations](((fleet-guide))/data-streams-ilm-tutorial.html) to learn how to apply a custom ((ilm-init)) policy to the browser data streams. diff --git a/docs/en/serverless/synthetics/synthetics-monitor-use.mdx b/docs/en/serverless/synthetics/synthetics-monitor-use.mdx new file mode 100644 index 0000000000..a638d8d782 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-monitor-use.mdx @@ -0,0 +1,65 @@ +--- +id: serverlessObservabilitySyntheticsMonitorUse +slug: /serverless/observability/synthetics-monitor-use +title: Configure individual browser monitors +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="synthetics-monitor-use"></div> + +<DocCallOut title="Note"> + +This is only relevant for monitors that are created and managed using a <DocLink id="serverlessObservabilitySyntheticsGetStarted" section="synthetics-project">Synthetics project</DocLink>. +For more information on configuring browser monitors added in the UI, +refer to <DocLink id="serverlessObservabilitySyntheticsGetStartedUi">Create monitors in the Synthetics UI</DocLink>. + +</DocCallOut> + +After <DocLink id="serverlessObservabilitySyntheticsCreateTest">writing synthetic journeys</DocLink>, you can use `monitor.use` +to configure the browser monitors that will run your tests. + +You'll need to set a few configuration options: + +* **Give your monitor a name.** Provide a human readable name and a unique ID for the monitor. This will appear in your Observability project where you can view and manage monitors after they're created. +* **Set the schedule.** Specify the interval at which your tests will run. +* **Specify where the monitors should run.** You can run monitors on Elastic's global managed testing infrastructure + or <DocLink id="serverlessObservabilitySyntheticsPrivateLocation">create a ((private-location))</DocLink> to run monitors from your own premises. + +* **Set other options as needed.** There are several other options you can set to customize your implementation including params, tags, screenshot options, throttling options, and more. + +Configure each monitor directly in your `journey` code using `monitor.use`. +The `monitor` API allows you to set unique options for each journey's monitor directly through code. +For example: + +```js +import { journey, step, monitor, expect } from '@elastic/synthetics'; + +journey('Ensure placeholder is correct', ({ page, params }) => { + monitor.use({ + id: 'example-monitor', + schedule: 10, + throttling: { + download: 10, + upload: 5, + latency: 100, + }, + }); + step('Load the demo page', async () => { + await page.goto('https://elastic.github.io/synthetics-demo/'); + }); + step('Assert placeholder text', async () => { + const placeholderValue = await page.getAttribute( + 'input.new-todo', + 'placeholder' + ); + expect(placeholderValue).toBe('What needs to be done?'); + }); +}); +``` + +For each journey, you can specify its `schedule` and the `locations` in which it runs. +When those options are not set, Synthetics will use the default values in the global configuration file. +For more details, refer to <DocLink id="serverlessObservabilitySyntheticsConfiguration">Configure a Synthetics project</DocLink>. diff --git a/docs/en/serverless/synthetics/synthetics-params-secrets.mdx b/docs/en/serverless/synthetics/synthetics-params-secrets.mdx new file mode 100644 index 0000000000..9f7d7492a0 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-params-secrets.mdx @@ -0,0 +1,180 @@ +--- +id: serverlessObservabilitySyntheticsParamsSecrets +slug: /serverless/observability/synthetics-params-secrets +title: Work with params and secrets +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +{/* lint disable params */} +<div id="synthetics-params-secrets"></div> + +Params allow you to use dynamically defined values in your synthetic monitors. +For example, you may want to test a production website with a particular +demo account whose password is only known to the team managing the synthetic monitors. + +For more information about security-sensitive use cases, refer to <DocLink id="serverlessObservabilitySyntheticsParamsSecrets" section="synthetics-secrets-sensitive" />. + +<div id="synthetics-params-secrets-define"></div> + +## Define params + +Param values can be declared by any of the following methods: + +* In the _Global parameters_ tab of the <DocLink id="serverlessObservabilitySyntheticsSettings" section="global-parameters">Synthetics Settings page in an Observability project</DocLink>. +* Declaring a default value for the parameter in a <DocLink id="serverlessObservabilitySyntheticsParamsSecrets" section="synthetics-project-config-file">configuration file</DocLink>. +* Passing the `--params` <DocLink id="serverlessObservabilitySyntheticsParamsSecrets" section="cli-argument">CLI argument</DocLink>. + +<DocCallOut title="Note"> +If you are creating and managing synthetic monitors using a +<DocLink id="serverlessObservabilitySyntheticsGetStartedProject">Synthetics project</DocLink>, you can also use regular environment +variables via the standard node `process.env` global object. +</DocCallOut> + +The values in the configuration file are read in the following order: + +1. **Global parameters in an Observability project**: The _Global parameters_ set using the + Observability project's UI are read first. +1. **Configuration file**: Then the _Global parameters_ are merged with any parameters defined in a configuration file. + If a parameter is defined in both the Observability project **and** a Synthetics project configuration file, + the value in the configuration file will be used. +1. **CLI**: Then the parameters defined in the configuration are merged with any parameters passed to the CLI `--params` argument. + If a parameter is defined in a Synthetics project configuration file **and** using the CLI argument, + the value defined using the CLI will be used. + When running a script using the CLI, _Global parameters_ defined in the Observability project have no impact + on the test because it won't have access to the Observability project. + +### Global parameters in your Observability project + +From any page in the Observability project's **Synthetics** section: + +1. Go to **Settings**. +1. Go to the **Global parameters** tab. +1. Define parameters. + +![Global parameters tab on the Synthetics Settings page in an Observability project](../images/synthetics-params-secrets-kibana-define.png) + +<div id="synthetics-dynamic-configs"></div> + +### Synthetics project config file + +Use a `synthetics.config.js` or `synthetics.config.ts` file to define variables required by your tests. +This file should be placed in the root of your Synthetics project. + +```js +export default (env) => { + let my_url = "http://localhost:8080"; + if (env === "production") { + my_url = "https://elastic.github.io/synthetics-demo/" + } + return { + params: { + my_url, + }, + }; +}; +``` + +The example above uses the `env` variable, which corresponds to the value of the `NODE_ENV` environment variable. + +<div id="synthetics-cli-params"></div> + +### CLI argument + +To set parameters when running <DocLink id="serverlessObservabilitySyntheticsCommandReference">`npx @elastic/synthetics` on the command line</DocLink>, +use the `--params` or `-p` flag. The provided map is merged over any existing variables defined in the `synthetics.config.{js,ts}` file. + +For example, to override the `my_url` parameter, you would run: + +```sh +npx @elastic/synthetics . --params '{"my_url": "http://localhost:8080"}' +``` + +<div id="synthetics-params-secrets-use"></div> + +## Use params + +You can use params in both lightweight and browser monitors created in +either a Synthetics project or the Synthetics UI in your Observability project. + +### In a Synthetics project + +For lightweight monitors in a Synthetics project, wrap the name of the param in `${}` (for example, `${my_url}`). + +```yaml +- type: http + name: Todos Lightweight + id: todos-lightweight + urls: ["${my_url}"] + schedule: '@every 1m' +``` + +In browser monitors, parameters can be referenced via the `params` property available within the +argument to a `journey`, `before`, `beforeAll`, `after`, or `afterAll` callback function. + +Add `params.` before the name of the param (for example, `params.my_url`): + +```js +beforeAll(({params}) => { + console.log(`Visiting ${params.my_url}`) +}) + +journey("My Journey", ({ page, params }) => { + step('launch app', async () => { + await page.goto(params.my_url) [^1] + }) +}) +``` +[^1]: If you are using TypeScript, replace `params.my_url` with `params.my_url as string`. + +<div id="synthetics-params-secrets-use-ui"></div> + +### In the UI + +To use a param in a lightweight monitor that is created in the Synthetics UI, +wrap the name of the param in `${}` (for example, `${my_url}`). + +![Use a param in a lightweight monitor created in the Synthetics UI](../images/synthetics-params-secrets-kibana-use-lightweight.png) + +To use a param in a browser monitor that is created in the Synthetics UI, +add `params.` before the name of the param (for example, `params.my_url`). + +![Use a param in a browser monitor created in the Synthetics UI](../images/synthetics-params-secrets-kibana-use-browser.png) + +<div id="synthetics-secrets-sensitive"></div> + +## Working with secrets and sensitive values + +Your synthetics scripts may require the use of passwords or other sensitive secrets that are not known until runtime. + +<DocCallOut title="Warning" color="warning"> + +Params are viewable in plain-text by administrators and other users with `all` privileges for +the Synthetics app. +Also note that synthetics scripts have no limitations on accessing these values, and a malicious script author could write a +synthetics journey that exfiltrates `params` and other data at runtime. +Do **not** use truly sensitive passwords (for example, an admin password or a real credit card) +in **any** synthetics tools. +Instead, set up limited demo accounts, or fake credit cards with limited functionality. +If you want to limit access to parameters, ensure that users who are not supposed to access those values +do not have `all` privileges for the Synthetics app, and that any scripts that use those values +do not leak them in network requests or screenshots. + +</DocCallOut> + +If you are managing monitors with a Synthetics project, you can use environment variables +in your `synthetics.config.ts` or `synthetics.config.js` file. + +The example below uses `process.env.MY_URL` to reference a variable named `MY_URL` +defined in the environment and assigns its value to a param. That param can then +be used in both lightweight and browser monitors that are managed in the Synthetics project: + +```js +export default { + params: { + my_url: process.env.MY_URL + } +}; +``` diff --git a/docs/en/serverless/synthetics/synthetics-private-location.mdx b/docs/en/serverless/synthetics/synthetics-private-location.mdx new file mode 100644 index 0000000000..ce5e1ad7da --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-private-location.mdx @@ -0,0 +1,184 @@ +--- +id: serverlessObservabilitySyntheticsPrivateLocation +slug: /serverless/observability/synthetics-private-location +title: Monitor resources on private networks +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="synthetics-private-location"></div> + +To monitor resources on private networks you can either: + +* Allow Elastic's global managed infrastructure to access your private endpoints. +* Use ((agent)) to create a ((private-location)). + +((private-location))s via Elastic Agent require only outbound connections from your network, +while allowing Elastic's global managed infrastructure to access a private endpoint requires +inbound access, thus posing an additional risk that users must assess. + +<div id="monitor-via-access-control"></div> + +## Allow access to your private network + +To give Elastic's global managed infrastructure access to a private endpoint, use IP address filtering, HTTP authentication, or both. + +To grant access via IP, use [this list of egress IPs](https://manifest.synthetics.elastic-cloud.com/v1/ip-ranges.json). +The addresses and locations on this list may change, so automating updates to +filtering rules is recommended. IP filtering alone will allow all users of Elastic's global managed infrastructure access to your endpoints, if this +is a concern consider adding additional protection via user/password authentication via a proxy like nginx. + +<div id="monitor-via-private-agent"></div> + +## Monitor via a private agent + +((private-location))s allow you to run monitors from your own premises. +Before running a monitor on a ((private-location)), you'll need to: + +* <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="set-up-agent">Set up ((agent))</DocLink>. +* <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="connect-to-your-observability-project">Connect ((fleet)) to your Observability project</DocLink> and enroll an ((agent)) in ((fleet)). +* <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="add-a-private-location">Add a ((private-location))</DocLink> in the Synthetics UI. + +<DocCallOut title="Important" color="warning"> + +((private-location))s running through ((agent)) must have a direct connection to ((es)). +Do not configure any ingest pipelines, or output via Logstash as this will prevent Synthetics from working properly and is not supported. + +</DocCallOut> + +<div id="synthetics-private-location-fleet-agent"></div> + +## Set up ((agent)) + +Start by setting up ((agent)) and creating an agent policy**. For more information on agent policies and creating them, refer to [((agent)) policy](((fleet-guide))/agent-policy.html#create-a-policy). + +<DocCallOut title="Important" color="warning"> + +A ((private-location)) should be set up against an agent policy that runs on a single ((agent)). +The ((agent)) must be **enrolled in Fleet** (((private-location))s cannot be set up using **standalone** ((agents))). +Do _not_ run the same agent policy on multiple agents being used for ((private-location))s, as you may +end up with duplicate or missing tests. ((private-location))s do not currently load balance tests across +multiple ((agents)). See <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="scaling-private-locations">Scaling ((private-location))s</DocLink> for information on increasing the capacity +within a ((private-location)). + +By default ((private-location))s are configured to allow two simultaneous browser tests and an unlimited number of lightweight checks. +As a result, if more than two browser tests are assigned to a particular ((private-location)), there may be a delay to run them. + +</DocCallOut> + +<div id="synthetics-private-location-connect"></div> + +## Connect to your Observability project + +After setting up ((fleet)), you'll connect ((fleet)) to the your Observability project +and enroll an ((agent)) in ((fleet)). + +<div id="synthetics-private-location-docker"></div> + +Elastic provides Docker images that you can use to run ((fleet)) and an ((agent)) more easily. +For monitors running on ((private-location))s, you _must_ use the `elastic-agent-complete` +Docker image to create a self-hosted ((agent)) node. The standard ((ecloud)) or self-hosted +((agent)) will not work. + +<DocIf condition={ "((release-state))" === "unreleased" }> + +Version ((version)) has not yet been released. + +</DocIf> + +<DocIf condition={ "((release-state))" !== "unreleased" }> + +To pull the Docker image run: + +```sh +docker pull docker.elastic.co/beats/elastic-agent-complete:((version)) +``` + +</DocIf> + +Then enroll and run an ((agent)). +You'll need an enrollment token and the URL of the ((fleet-server)). +You can use the default enrollment token for your policy or create new policies +and [enrollment tokens](((fleet-guide))/fleet-enrollment-tokens.html) as needed. + +For more information on running ((agent)) with Docker, refer to +[Run ((agent)) in a container](((fleet-guide))/elastic-agent-container.html). + +<DocIf condition={ "((release-state))" === "unreleased" }> + +Version ((version)) has not yet been released. + +</DocIf> + +<DocIf condition={ "((release-state))" !== "unreleased" }> + +```sh +docker run \ + --env FLEET_ENROLL=1 \ + --env FLEET_URL={fleet_server_host_url} \ + --env FLEET_ENROLLMENT_TOKEN={enrollment_token} \ + --cap-add=NET_RAW \ + --cap-add=SETUID \ + --rm docker.elastic.co/beats/elastic-agent-complete:((version)) +``` + +</DocIf> + +<DocCallOut title="Important" color="warning"> + +The `elastic-agent-complete` Docker image requires additional capabilities to operate correctly. Ensure +`NET_RAW` and `SETUID` are enabled on the container. + +</DocCallOut> + +<DocCallOut title="Note"> + +You may need to set other environment variables. +Learn how in [((agent)) environment variables guide](((fleet-guide))/agent-environment-variables.html). + +</DocCallOut> + +<div id="synthetics-private-location-add"></div> + +## Add a ((private-location)) + +When the ((agent)) is running you can add a new ((private-location)) in your Observability project's **Synthetics** section: + +1. Go to **Settings**. +1. Go to the **((private-location))s** tab. +1. Click **Add location**. +1. Give your new location a unique _Location name_ and select the _Agent policy_ you created above. +1. Click **Save**. + +<DocCallOut color="warning" title="Important"> + It is not currently possible to use custom CAs for synthetics browser tests in private locations without following a workaround. + To learn more about the workaround, refer to the following GitHub issue: + [elastic/synthetics#717](https://github.com/elastic/synthetics/issues/717). +</DocCallOut> + +<div id="synthetics-private-location-scaling"></div> + +## Scaling ((private-location))s + +By default ((private-location))s are configured to allow two simultaneous browser tests, and an unlimited number of lightweight checks. +These limits can be set via the environment variables `SYNTHETICS_LIMIT_{TYPE}`, where `{TYPE}` is one of `BROWSER`, `HTTP`, `TCP`, and `ICMP` +for the container running the ((agent)) docker image. + +It is critical to allocate enough memory and CPU capacity to handle configured limits. +Start by allocating at least 2 GiB of memory and two cores per browser instance to ensure consistent +performance and avoid out-of-memory errors. Then adjust as needed. Resource requirements will vary depending on workload. +Much less memory is needed for lightweight monitors. Start by allocating at least 512MiB of memory and two cores for +lightweight checks. Then increase allocated memory and CPU based on observed usage patterns. + +These limits are for simultaneous tests, not total tests. For example, if +60 browser tests were scheduled to run once per hour and each took 1 minute to run, that would fully occupy one execution slot. +However, it is a good practice to set up execution slots with extra capacity. A good starting point would be to over-allocate by +a factor of 5. In the previous example that would mean allocating 5 slots. + +<div id="synthetics-private-location-next"></div> + +## Next steps + +Now you can add monitors to your ((private-location)) in <DocLink id="serverlessObservabilitySyntheticsGetStartedUi">the Synthetics UI</DocLink> or using the <DocLink id="serverlessObservabilitySyntheticsGetStartedProject">Elastic Synthetics library's `push` method</DocLink>. diff --git a/docs/en/serverless/synthetics/synthetics-recorder.mdx b/docs/en/serverless/synthetics/synthetics-recorder.mdx new file mode 100644 index 0000000000..840bf6b28a --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-recorder.mdx @@ -0,0 +1,150 @@ +--- +id: serverlessObservabilitySyntheticsRecorder +slug: /serverless/observability/synthetics-recorder +title: Use the Synthetics Recorder +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="synthetics-recorder"></div> + +<DocCallOut title="Important" color="warning"> +As with any script recording technology, the Elastic Synthetics Recorder should be used as a tool to help create the main structure of the script. For simpler sites, you may be able to use the Synthetics Recorder's output directly to create a synthetic monitor, but for more complex and dynamic sites, or to limit flakiness, you'll likely need to edit its output before using it to create a monitor. +</DocCallOut> + +You can use the Synthetics Recorder to <DocLink id="serverlessObservabilitySyntheticsCreateTest">write a synthetic test</DocLink> by interacting with a web page and exporting journey code that reflects all the actions you took. + +![Elastic Synthetics Recorder after recording a journey and clicking Export](../images/synthetics-create-test-script-recorder.png) + +<div id="synthetics-recorder-set-up"></div> + +## Set up + +For information on how to download the Elastic Synthetics Recorder, go to the [download page](https://github.com/elastic/synthetics-recorder/blob/main/docs/DOWNLOAD.md). + +<div id="synthetics-recorder-record-a-journey"></div> + +# Record a journey + +To record a journey: + +1. Enter a starting URL in the search box. This URL will be the starting point of the journey script the recorder will create. +1. Click **Start** or press Enter on your keyboard. This will launch a Chromium window open to the page you specified and start recording. +1. Start interacting with the browser. This can include clicking on text, navigation, focusing on inputs like buttons and text fields, and more. + 1. (Optional) You can click **Pause** to temporarily stop recording actions while you continue to interact with the browser. Click again to start recording actions again. Note: It's especially important to <DocLink id="serverlessObservabilitySyntheticsRecorder" section="test-the-journey">test the journey</DocLink> if you paused recording at any point. +1. When you're done interacting with the browser window, click **Stop** or close the browser to stop recording. + +<div id="synthetics-recorder-edit-a-journey"></div> + +# Edit a journey + +Once you've started recording, you can use the Synthetics Recorder UI to edit steps and individual actions before generating the journey code. +You can also edit the journey after you've stopped recording. + +<div id="synthetics-recorder-name-steps"></div> + +## Name steps + +Naming steps can help make the resulting journey code easier to understand. +If you provide a step name, the name will be used in both the UI and the resulting code. +If you don't name steps, the UI will show "Step 1", "Step 2", and so on, and the resulting code will use the first action in the step as the step text. + +To edit a step name: + +1. Hover over the current step name and click the pencil icon that appears. +1. Edit the text in the text box. +1. Click Return or Enter on your keyboard to save the updated name. + +<div id="synthetics-recorder-split-into-multiple-steps"></div> + +## Split into multiple steps + +Steps represent groups of actions that should be completed in a specific order. +Breaking a journey into steps can make it easier to read the resulting code. +It can also make it easier to interpret results in the Synthetics UI since each step is +displayed individually in the UI along with screenshots for convenient debugging and error tracking. + +By default, the Synthetics Recorder will group all actions in a single step, +but you can break actions into any number of steps. + +To add a step: + +1. Click the plus icon between two actions to create a new step. +1. (Optional) Consider naming the step. + +Use the trash can icon to delete the step divider, adding the actions from the deleted step into the previous step. + +<div id="synthetics-recorder-edit-or-delete-recorded-actions"></div> + +## Edit or delete recorded actions + +You can fine-tune a journey by editing actions that were generated by the recorder. +You can't change the type of command (for example, "click" or "navigate"), but you can change the value that is passed to the command. + +To edit an action: + +1. Hover over an action and click the pencil icon that appears. +1. Edit the value as needed. +1. Click **Save**. + +To delete an action: + +1. Hover over the action you want to delete and click the three dots for more options. +1. Click **Delete action**. + +<DocCallOut title="Important" color="warning"> +If you changed or deleted any actions to ensure the journey still works, it's especially important to <DocLink id="serverlessObservabilitySyntheticsRecorder" section="test-the-journey">test the journey</DocLink>. +</DocCallOut> + +<div id="synthetics-recorder-add-assertions"></div> + +## Add assertions + +Assertions can play an important role in effective synthetic journeys by making determinations about the state of the page you are testing. +This can include checking if an element is visible or checking the contents of a text field. +You can't generate an assertion just from interacting with the browser window. +Instead, you can add assertions between generated actions. + +To add an assertion: + +1. Find the generated action that should be done right before you want to assert a condition. +1. Hover over that action and click the three dots for more options. +1. Click **Add assertion**. This will add a new "assert" action in the UI. +1. Provide the type of assertion, selector, and value. +1. Click **Save**. + +<DocCallOut title="Important" color="warning"> +If you added any assertions after you've finished recording to ensure the journey still works, it's especially important to <DocLink id="serverlessObservabilitySyntheticsRecorder" section="test-the-journey">test the journey</DocLink>. +</DocCallOut> + +<div id="synthetics-recorder-test-the-journey"></div> + +# Test the journey + +At any point during or after the recording process concludes, you can test your script. + +When you click the **Test** button, Elastic Synthetics will run the journey. +As the test runs, the recorder will display results on a per-step basis. +If there are any errors that prevent the journey from running, the recorder will display the relevant error message to help you debug. + +<DocCallOut title="Important" color="warning"> +If you paused recording, updated actions, or added assertions manually in the recorder it is especially important that you test the journey to verify that the actions work in sequence. +</DocCallOut> + +<div id="synthetics-recorder-export"></div> + +# Export + +When you are satisfied with journey you've created, you can export it from the recorder. + +Click **Export** to view the final journey code. +From there you can use the code by: + +* Copy and pasting code containing all steps into a new or existing <DocLink id="serverlessObservabilitySyntheticsGetStartedProject">Synthetics project</DocLink> or an <DocLink id="serverlessObservabilitySyntheticsGetStartedUi">inline monitor</DocLink>. +* Click **Export** to save a JavaScript file containing all steps. + +You can also check **Export as project** and either copy and paste or **Export** +to get the full journey code including `journey` and imports for all dependencies. + diff --git a/docs/en/serverless/synthetics/synthetics-scale-and-architect.mdx b/docs/en/serverless/synthetics/synthetics-scale-and-architect.mdx new file mode 100644 index 0000000000..42a71e2995 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-scale-and-architect.mdx @@ -0,0 +1,27 @@ +--- +id: serverlessObservabilitySyntheticsScaleAndArchitect +slug: /serverless/observability/synthetics-scale-and-architect +title: Scale and architect a Synthetics deployment +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="synthetics-scale-and-architect"></div> + +Use these advanced considerations when using Elastic Synthetics +for large and complex use cases. + +<div id="synthetics-tagging"></div> + +## Manage large numbers of Synthetic monitors with tags + +When managing larger numbers of synthetic monitors, use tags to keep them organized. +Many of the views in the Synthetics UI are tag-aware and can group data by tag. + +<div id="synthetics-custom-dashboards"></div> + +## Create custom dashboards + +If we don't provide a UI for your exact needs, you can use <DocLink id="serverlessObservabilityDashboards">dashboards</DocLink> to build custom visualizations. diff --git a/docs/en/serverless/synthetics/synthetics-security-encryption.mdx b/docs/en/serverless/synthetics/synthetics-security-encryption.mdx new file mode 100644 index 0000000000..2871abfb40 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-security-encryption.mdx @@ -0,0 +1,34 @@ +--- +id: serverlessObservabilitySyntheticsSecurityEncryption +slug: /serverless/observability/synthetics-security-encryption +title: Synthetics Encryption and Security +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="synthetics-security-encryption"></div> + +Elastic Synthetics was designed with security in mind encrypting both persisted and transmitted data. +This page catalogs the points within Elastic Synthetics where data is either stored or transmitted in an encrypted fashion. + +## Synthetics UI + +Data is stored in [Kibana Secure Saved Objects](((kibana-ref))/xpack-security-secure-saved-objects.html), +with sensitive fields encrypted. These fields include your script source, params, and global params. + +<div id="synthetics_service"></div> + +## Synthetics Service + +The Global Elastic Synthetics Service performs all communication of sensitive data (both internally, and with Kibana) over encrypted connections +and encrypts all data persisted to disk as well. + +<div id="synthetics_private_locations"></div> + +## Synthetics Private Locations + +In Kibana configuration for private locations is stored in two places, Synthetics saved objects which always encrypt sensitive fields using [Kibana Secure Saved Objects](((kibana-ref))/xpack-security-secure-saved-objects.html) and also in Fleet, which uses unencrypted saved objects restricted by user permissions. For Elastic Cloud customers all data is secured on disk regardless of whether additional saved object encryption is present. See our [Cloud Security Statement](https://www.elastic.co/cloud/security) for more information. We recommend that self-managed customers encrypt disks for their Elasticsearch instances if this is a concern. + +All data is encrypted in transit. See [Elastic Agent configuration encryption](((fleet-guide))/_elastic_agent_configuration_encryption.html) for more details. diff --git a/docs/en/serverless/synthetics/synthetics-settings.mdx b/docs/en/serverless/synthetics/synthetics-settings.mdx new file mode 100644 index 0000000000..46609f117b --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-settings.mdx @@ -0,0 +1,120 @@ +--- +id: serverlessObservabilitySyntheticsSettings +slug: /serverless/observability/synthetics-settings +title: Configure Synthetics settings +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +<div id="synthetics-settings"></div> + +There are several Synthetics settings you can adjust in your Observability project. + +<div id="synthetics-settings-alerting"></div> + +## Alerting + +Alerting enables you to detect complex conditions using **rules** across Observability apps +and send a notification using **connectors**. + +When you create a new synthetic monitor, new default synthetics rules will be applied. +To edit the default rules: + +1. Click **Alerts and rules** in the top bar. +1. Select a rule to open a panel where you can edit the rule's configuration: + * **Monitor status rule** for receiving notifications for errors and outages. + * **TLS certificate rule** for receiving notifications when one or more of your HTTP or TCP + lightweight monitors has a TLS certificate expiring within a specified threshold or when + it exceeds an age limit. + +However, the automatically created Synthetics internal alert is intentionally preconfigured, +and some configuration options can't be changed. +For example, you can't change how often it checks the rule. + +If you need specific alerting behavior, set up a different rule. +To view all existing rules or create a new rule: + +1. Click **Alerts and rules** in the top bar. +1. Click **Manage rules** to go to the _Rules_ page. + +On the _Rules_ page, you can manage the default synthetics rules including snoozing rules, +disabling rules, deleting rules, and more. + +![Rules page with default Synthetics rules](../images/synthetics-settings-disable-default-rules.png) + +<DocCallOut title="Note"> + +You can enable and disable default alerts for individual monitors in a few ways: + +* In the UI when you <DocLink id="serverlessObservabilitySyntheticsGetStartedUi">create a monitor</DocLink>. +* In the UI _after_ a monitor is already created, on the **Monitors** page + or on the **Edit monitor** page for the monitor. +* In a Synthetics project when <DocLink id="serverlessObservabilitySyntheticsLightweight">configuring a lightweight monitor</DocLink>. + +</DocCallOut> + +In the **Alerting** tab on the Synthetics Settings page, you can add and configure connectors. +If you are running in Elastic Cloud, then an SMTP connector will automatically be configured, +allowing you to easily set up email alerts. +Read more about all available connectors in <DocLink id="serverlessObservabilityCreateAnomalyAlertRule" section="action-types">Action types</DocLink>. + +![Alerting tab on the Synthetics Settings page in an Observability project](../images/synthetics-settings-alerting.png) + +<div id="synthetics-settings-private-locations"></div> + +## ((private-location))s + +((private-location))s allow you to run monitors from your own premises. + +In the **((private-location))s** tab, you can add and manage ((private-location))s. +After you <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="set-up-agent">Set up ((agent))</DocLink> and <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="connect-to-your-observability-project">Connect to your Observability project</DocLink>, +this is where you will add the ((private-location)) so you can specify it as the location for +a monitor created using the Synthetics UI or a Synthetics project. + +![((private-location))s tab on the Synthetics Settings page in an Observability project](../images/synthetics-settings-private-locations.png) + +<div id="synthetics-settings-global-parameters"></div> + +## Global parameters + +Global parameters can be defined once and used across the configuration of lightweight and browser-based monitors. + +In the **Global parameters** tab, you can define variables and parameters. +This is one of several methods you can use to define variables and parameters. +To learn more about the other methods and which methods take precedence over others, see <DocLink id="serverlessObservabilitySyntheticsParamsSecrets">Work with params and secrets</DocLink>. + +![Global parameters tab on the Synthetics Settings page in an Observability project](../images/synthetics-settings-global-parameters.png) + +<div id="synthetics-settings-data-retention"></div> + +## Data retention + +When you set up a synthetic monitor, data from the monitor is saved in [Elasticsearch data streams](((ref))/data-streams.html), +an append-only structure in Elasticsearch. +You can customize how long synthetics data is stored by creating your own index lifecycle policy +and attaching it to the relevant custom Component Template in Stack Management. + +In the **Data retention** tab, use the links to jump to the relevant policy for each data stream. +Learn more about the data included in each data stream in <DocLink id="serverlessObservabilitySyntheticsManageRetention">Manage data retention</DocLink>. + +![Data retention tab on the Synthetics Settings page in an Observability project](../images/synthetics-settings-data-retention.png) + +<div id="synthetics-settings-api-keys"></div> + +## Project API keys + +Project API keys are used to push monitors created and managed in a Synthetics project remotely from a CLI or CD pipeline. + +In the **Project API keys** tab, you can generate API keys to use with your Synthetics project. +Learn more about using API keys in <DocLink id="serverlessObservabilitySyntheticsGetStartedProject">Create monitors with a Synthetics project</DocLink>. + +<DocCallOut title="Important" color="warning"> + +To create a Project API key, you must be logged in as a user with +<DocLink id="serverlessObservabilitySyntheticsFeatureRoles">Editor</DocLink> access. + +</DocCallOut> + +![Project API keys tab on the Synthetics Settings page in an Observability project](../images/synthetics-settings-api-keys.png) diff --git a/docs/en/serverless/synthetics/synthetics-troubleshooting.mdx b/docs/en/serverless/synthetics/synthetics-troubleshooting.mdx new file mode 100644 index 0000000000..a50a5c9f20 --- /dev/null +++ b/docs/en/serverless/synthetics/synthetics-troubleshooting.mdx @@ -0,0 +1,138 @@ +--- +id: serverlessObservabilitySyntheticsTroubleshooting +slug: /serverless/observability/synthetics-troubleshooting +title: Troubleshooting Synthetics +# description: Description to be written +tags: [] +--- + +<p><DocBadge template="technical preview" /></p> + +import Support from '../transclusion/support.mdx' + +<div id="synthetics-troubleshooting"></div> + +<div id="synthetics-troubleshooting-local-debugging"></div> + +## Local debugging + +For debugging synthetic tests locally, you can set an environment variable, +`DEBUG=synthetics`, to capture Synthetics agent logs when using the +<DocLink id="serverlessObservabilitySyntheticsCommandReference">Synthetics CLI</DocLink>. + +<div id="synthetics-troubleshooting-common-issues"></div> + +## Common issues + +<div id="synthetics-troubleshooting-no-agent-running"></div> + +### No results from a monitor configured to run on a ((private-location)) + +If you have created a ((private-location)) and configured a monitor to run on that ((private-location)), +but don't see any results for that monitor in the Synthetics UI, make sure there is an agent +configured to run against the agent policy. + +<DocCallOut title="Note"> + +If you attempt to assign an agent policy to a ((private-location)) _before_ configuring an agent to run +against the agent policy, you will see a note in the Synthetics UI that the selected agent policy +has no agents. + +</DocCallOut> + +When creating a ((private-location)), you have to: + +1. <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="set-up-agent">Set up ((agent))</DocLink>. +1. <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="connect-to-your-observability-project">Connect ((fleet)) to your Observability project</DocLink> and enroll an ((agent)) in ((fleet)). +1. <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="add-a-private-location">Add a ((private-location))</DocLink> in the Synthetics UI. + +If you do not complete the second item, no agents will be configured to run against the agent policy, and +any monitors configured to run on that ((private-location)) won't be able to run so there will be no results +in the Synthetics UI. + +To fix this, make sure there is an agent configured to run against the agent policy. + +<div id="synthetics-troubleshooting-no-direct-es-connection"></div> + +### No results from a monitor + +If you have configured a monitor but don't see any results for that monitor in the Synthetics UI, whether running them from Elastic's global managed testing infrastructure or from ((private-location))s, ensure Synthetics has a direct connection to ((es)). + +Do not configure any ingest pipelines or output via Logstash as this will prevent Synthetics from working properly and is not supported. + +<div id="synthetics-troubleshooting-missing-browser-schedules"></div> + +### Browser monitor configured to run on a ((private-location)) not running to schedule + +If you have browser monitors configured to run on a ((private-location)) but notice one or more of them are not running as scheduled, this could be because: + +* The time it takes for your monitor to run is longer than the frequency you have set +* There may be too many monitors trying to run concurrently, causing some of them to skip their scheduled run + +You may also see a message in the logs such as `2 tasks have missed their schedule deadlines by more than 1 second in the last 15s`. These will be visible from inside the Agent diagnostic ZIP file, and the numbers and time periods may be different in your logs. + +Start by identifying the cause of the issue. First, check if the time it takes the monitor to run is less than the scheduled frequency: + +1. Go to the Synthetics UI. +1. Click the monitor, then click **Go to monitor**. +1. Go to the <DocLink id="serverlessObservabilitySyntheticsAnalyze" section="overview">Overview tab</DocLink> to see the _Avg. duration_. You can also view the duration for individual runs in the <DocLink id="serverlessObservabilitySyntheticsAnalyze" section="history">History tab</DocLink>. +1. Compare the duration to the scheduled frequency. If the duration is _greater than_ the scheduled frequency, for example if the monitor that takes 90 seconds to run and its scheduled frequency is 1 minute, the next scheduled run will not occur because the current one is still running so you may see results for every other scheduled run. + + To fix this, you can either: + +* Change the frequency so the monitor runs less often. +* Refactor the monitor so it can run in a shorter amount of time. + +If the duration is _less than_ the scheduled frequency or the suggestion above does not fix the issue, then there may be too many browser monitors attempting to run on the ((private-location)). Due to the additional hardware overhead of running browser monitors, we limit each ((private-location)) to only run two browser monitors at the same time. Depending on how many browser monitors you have configured to run on the ((private-location)) and their schedule, the ((private-location)) may not be able to run them all because it would require more than two browser tests to be running simultaneously. + +To fix this issue, you can either: + +* Increase the number of concurrent browser monitors allowed (as described in <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="scaling-private-locations">Scaling Private Locations</DocLink>), paying attention to the scaling and hardware requirements documented. +* Create multiple ((private-location))s and spread your browser monitors across them more evenly (effectively horizontally scaling your ((private-location))s). + +<div id="synthetics-troubleshooting-no-locations"></div> + +### No locations are available + +When using ((ecloud)), if there are no options available in the _Locations_ dropdown when you +try to create a monitor in the Synthetics UI _or_ if no locations are listed when using the +<DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-locations">`location` command</DocLink>, it might be because you do not have permission to +use Elastic managed locations _and_ there are no <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="monitor-via-a-private-agent">Private Locations</DocLink> +available yet. + +There are a few ways to fix this: + +* If you have <DocLink id="serverlessObservabilitySyntheticsFeatureRoles">Editor</DocLink> access, you can <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="monitor-via-a-private-agent">create a new Private Location</DocLink>. Then try creating the monitor again. +* If you do _not_ have the right privileges to create a Private Location, you can ask an <DocLink id="serverlessObservabilitySyntheticsFeatureRoles">Admin</DocLink> to create a Private Location or give you the necessary privileges so you can <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="monitor-via-a-private-agent">create a new Private Location</DocLink>. Then try creating the monitor again. +{/* * If you want to create a monitor to run on Elastic's global managed infrastructure, ask an <DocLink id="serverlessObservabilitySyntheticsFeatureRoles">Admin</DocLink> to update <DocLink id="serverlessObservabilitySyntheticsFeatureRoles" section="to-restrict-using-elastics-global-managed-infrastructure">`Synthetics and Uptime` sub-feature privileges</DocLink> for the role you're currently assigned. Then try creating the monitor again. */} + +<div id="synthetics-troubleshooting-public-locations-disabled"></div> + +{/* ### You do not have permission to use Elastic managed locations + +If you try to create or edit a monitor hosted on Elastic's global managed infrastructure but see a note that you do not have permission to use Elastic managed locations, an administrator has restricted the use of public locations. + +To fix this you can either: + +* Ask an <DocLink id="serverlessObservabilitySyntheticsFeatureRoles">Admin</DocLink> to update + <DocLink id="serverlessObservabilitySyntheticsFeatureRoles" section="to-restrict-using-elastics-global-managed-infrastructure">`Synthetics and Uptime` sub-feature privileges</DocLink> for the role you're + currently assigned or assign you a role that allows using Elastic's global managed infrastructure. + +* Use a <DocLink id="serverlessObservabilitySyntheticsPrivateLocation" section="monitor-via-a-private-agent">Private Location</DocLink>. */} + +<div id="synthetics-troubleshooting-get-help"></div> + +## Get help + +<div id="synthetics-troubleshooting-support"></div> + +### Elastic Support + +<Support /> + +<div id="synthetics-troubleshooting-discussion"></div> + +### Discussion forum + +For other questions and feature requests, visit our +[discussion forum](((forum))/c/observability/synthetics/75). diff --git a/docs/en/serverless/technical-preview-limitations.mdx b/docs/en/serverless/technical-preview-limitations.mdx new file mode 100644 index 0000000000..fc3ecd036c --- /dev/null +++ b/docs/en/serverless/technical-preview-limitations.mdx @@ -0,0 +1,11 @@ +--- +id: serverlessObservabilityTechnicalPreviewLimitations +slug: /serverless/observability/observability-technical-preview-limitations +title: Technical preview limitations +description: Review the limitations that apply to Elastic Observability projects in technical preview. +tags: [ 'serverless', 'observability' ] +--- + +<DocBadge template="technical preview" /> + +Currently, the maximum ingestion rate for the Managed Intake Service (APM and OpenTelemetry ingest) is 11.5 MB/s of uncompressed data (roughly 1TB/d uncompressed equivalent). Ingestion at a higher rate may experience rate limiting or ingest failures. \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/about/go.mdx b/docs/en/serverless/transclusion/apm/guide/about/go.mdx new file mode 100644 index 0000000000..111e0c9253 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/about/go.mdx @@ -0,0 +1,44 @@ +import APMAgentWarning from '../../../../partials/apm-agent-warning.mdx' + +**Elastic APM Go agent** + +The Elastic APM Go agent enables you to trace the execution of operations in your [Go](https://golang.org/) +applications. +It has built-in support for popular frameworks and toolkits, +like [Gorilla](http://www.gorillatoolkit.org/) and [Gin](https://gin-gonic.com/), +as well as support for instrumenting Go's built-in [net/http](https://golang.org/pkg/net/http/), +[database/sql](https://golang.org/pkg/database/sql/) drivers. + +The Agent includes instrumentation modules for supported technologies, +each providing middleware or wrappers for recording interesting events, such as incoming HTTP requests, outgoing HTTP requests, and database queries. + +To collect data about incoming HTTP requests, install router middleware for one of the supported web frameworks. +Incoming requests will be recorded as transactions, along with any related panics or errors. + +To collect data for outgoing HTTP requests, instrument an `http.Client` or `http.Transport` using `module/apmhttp`. +To collect data about database queries, use `module/apmsql`, +which provides instrumentation for well-known database drivers. + +In order to connect transactions with related spans and errors, and propagate traces between services (distributed tracing), +the agent relies on Go's built-in [context](https://golang.org/pkg/context/) package: +transactions and spans are stored in context objects. +For example, for incoming HTTP requests, in-flight trace data will be recorded in the `context` object accessible through +[net/http.Context](https://golang.org/pkg/net/http/#Request.Context). + +In addition to capturing events like those mentioned here, +the agent also collects system and application metrics at regular intervals. +This collection happens in a background goroutine that is automatically started when the agent is initialized. + +**Learn more** + +If you're ready to give Elastic APM a try, see <DocLink id="serverlessObservabilityApmGetStarted">Get started with traces and APM</DocLink>. + +See the [Go agent reference](((apm-go-ref))/introduction.html) for full documentation, including: + +* [Supported technologies](((apm-go-ref))/supported-tech.html) +* [Set up](((apm-go-ref))/getting-started.html) +* [Configuration reference](((apm-go-ref))/configuration.html) +* [API reference](((apm-go-ref))/api.html) + + +<APMAgentWarning /> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/about/java.mdx b/docs/en/serverless/transclusion/apm/guide/about/java.mdx new file mode 100644 index 0000000000..bb7c5acbea --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/about/java.mdx @@ -0,0 +1,26 @@ +import APMAgentWarning from '../../../../partials/apm-agent-warning.mdx' + +**Elastic APM Java agent** + +The Elastic APM Java agent auto-instruments supported technologies and records interesting events, +like spans for database queries and transactions for incoming HTTP requests. +To do this, it leverages the capability of the JVM to instrument the bytecode of classes. +This means that for the supported technologies, there are no code changes required. + +Spans are grouped in transactions—by default, one for each incoming HTTP request. +But it's possible to create custom transactions not associated with an HTTP request. +Transactions and Spans are sent to Elastic, where they're transformed, stored, and ready to be visualized. + +**Learn more** + +If you're ready to give Elastic APM a try, see <DocLink id="serverlessObservabilityApmGetStarted">Get started with traces and APM</DocLink>. + +See the [Java agent reference](((apm-java-ref))/intro.html) for full documentation, including: + +* [Supported technologies](((apm-java-ref))/supported-technologies-details.html) +* [Set up](((apm-java-ref))/setup.html) +* [Configuration reference](((apm-java-ref))/configuration.html) +* [API reference](((apm-java-ref))/apis.html) + + +<APMAgentWarning /> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/about/net.mdx b/docs/en/serverless/transclusion/apm/guide/about/net.mdx new file mode 100644 index 0000000000..4412ab2c2e --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/about/net.mdx @@ -0,0 +1,28 @@ +import APMAgentWarning from '../../../../partials/apm-agent-warning.mdx' + +**Elastic APM .NET agent** + +The Elastic APM .NET agent auto-instruments supported technologies and records interesting events, like HTTP requests and database queries. +To do this, it uses built-in capabilities of the instrumented frameworks like +[Diagnostic Source](https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.diagnosticsource?view=netcore-3.0), +an HTTP module for IIS, or +[IDbCommandInterceptor](https://docs.microsoft.com/en-us/dotnet/api/system.data.entity.infrastructure.interception.idbcommandinterceptor?view=entity-framework-6.2.0) for Entity Framework. +This means that for the supported technologies, there are no code changes required beyond enabling auto-instrumentation. + +The Agent automatically registers callback methods for built-in Diagnostic Source events. +With this, the supported frameworks trigger Agent code for relevant events to measure their duration and collect metadata, like DB statements, as well as HTTP related information, like the URL, parameters, and headers. +These events, called Transactions and Spans, are sent to Elastic, where they're transformed, stored, and ready to be visualized. + +**Learn more** + +If you're ready to give Elastic APM a try, see <DocLink id="serverlessObservabilityApmGetStarted">Get started with traces and APM</DocLink>. + +See the [.NET agent reference](((apm-dotnet-ref))/intro.html) for full documentation, including: + +* [Supported technologies](((apm-dotnet-ref))/supported-technologies.html) +* [Set up](((apm-dotnet-ref))/setup.html) +* [Configuration reference](((apm-dotnet-ref))/configuration.html) +* [API reference](((apm-dotnet-ref))/public-api.html) + + +<APMAgentWarning /> diff --git a/docs/en/serverless/transclusion/apm/guide/about/node.mdx b/docs/en/serverless/transclusion/apm/guide/about/node.mdx new file mode 100644 index 0000000000..c79c741649 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/about/node.mdx @@ -0,0 +1,26 @@ +import APMAgentWarning from '../../../../partials/apm-agent-warning.mdx' + +**Elastic APM Node.js agent** + +The Elastic APM Node.js agent auto-instruments supported frameworks and records interesting events, +like HTTP requests and database queries. To do this, it patches modules as they are loaded to capture when module functions and callbacks are called. Additionally, there are some cases where a module will be patched to allow tracing context to be propagated through the asynchronous continuation. +This means that for the supported technologies, there are no code changes required. + +The Agent automatically links module function calls to callback calls to measure their duration and metadata (like the DB statement), +as well as HTTP-related information (like the URL, parameters, and headers). + +These events, called Transactions and Spans, are sent to Elastic, where they're transformed, stored, and ready to be visualized. + +**Learn more** + +If you're ready to give Elastic APM a try, see <DocLink id="serverlessObservabilityApmGetStarted">Get started with traces and APM</DocLink>. + +See the [Node.js agent reference](((apm-node-ref))/intro.html) for full documentation, including: + +* [Supported technologies](((apm-node-ref))/supported-technologies.html) +* [Set up](((apm-node-ref))/set-up.html) +* [Configuration reference](((apm-node-ref))/advanced-setup.html) +* [API reference](((apm-node-ref))/api.html) + + +<APMAgentWarning /> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/about/php.mdx b/docs/en/serverless/transclusion/apm/guide/about/php.mdx new file mode 100644 index 0000000000..21e146b22a --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/about/php.mdx @@ -0,0 +1,20 @@ +import APMAgentWarning from '../../../../partials/apm-agent-warning.mdx' + +**Elastic APM PHP agent** + +The Elastic APM PHP agent measures application performance and tracks errors. +This extension must be installed in your PHP environment. + +**Learn more** + +If you're ready to give Elastic APM a try, see <DocLink id="serverlessObservabilityApmGetStarted">Get started with traces and APM</DocLink>. + +See the [PHP agent reference](((apm-php-ref))/intro.html) for full documentation, including: + +* [Supported technologies](((apm-php-ref))/supported-technologies.html) +* [Set up](((apm-php-ref))/setup.html) +* [Configuration reference](((apm-php-ref))/configuration.html) +* [API reference](((apm-php-ref))/public-api.html) + + +<APMAgentWarning /> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/about/python.mdx b/docs/en/serverless/transclusion/apm/guide/about/python.mdx new file mode 100644 index 0000000000..065276a194 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/about/python.mdx @@ -0,0 +1,32 @@ +import APMAgentWarning from '../../../../partials/apm-agent-warning.mdx' + +**Elastic APM Python agent** + +The Elastic APM Python agent has built-in support for Django and Flask performance metrics and error logging, as well as generic support of other WSGI frameworks for error logging. + +It instruments your application to collect APM events in a few different ways: + +To collect data about incoming requests and background tasks, the Agent integrates with supported technologies to make use of hooks and signals provided by the framework. +These framework integrations require limited code changes in your application. + +To collect data from database drivers, HTTP libraries, and so on, +Elastic APM agents instrument certain functions and methods in these libraries. +Instrumentations are set up automatically and do not require any code changes. + +In addition to APM and error data, +the Python agent also collects system and application metrics in regular intervals. +This collection happens in a background thread that is started by the agent. + +**Learn more** + +If you're ready to give Elastic APM a try, see <DocLink id="serverlessObservabilityApmGetStarted">Get started with traces and APM</DocLink>. + +See the [Python agent reference](((apm-py-ref))/getting-started.html) for full documentation, including: + +* [Supported technologies](((apm-py-ref))/supported-technologies.html) +* [Set up](((apm-py-ref))/set-up.html) +* [Configuration reference](((apm-py-ref))/configuration.html) +* [API reference](((apm-py-ref))/api.html) + + +<APMAgentWarning /> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/about/ruby.mdx b/docs/en/serverless/transclusion/apm/guide/about/ruby.mdx new file mode 100644 index 0000000000..13fccf8e34 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/about/ruby.mdx @@ -0,0 +1,26 @@ +import APMAgentWarning from '../../../../partials/apm-agent-warning.mdx' + +**Elastic APM Ruby agent** + +The Elastic APM Ruby agent auto-instruments supported technologies and records interesting events, +like HTTP requests and database queries. To do this, it uses relevant public APIs when they are provided by the libraries. Otherwise, it carefully wraps the necessary internal methods. +This means that for the supported technologies, there are no code changes required. + +The APM agent automatically keeps track of queries to your data stores to measure their duration and metadata (like the DB statement), +as well as HTTP-related information (like the URL, parameters, and headers). + +These events, called Transactions and Spans, are sent to Elastic, where they're transformed, stored, and ready to be visualized. + +**Learn more** + +If you're ready to give Elastic APM a try, see <DocLink id="serverlessObservabilityApmGetStarted">Get started with traces and APM</DocLink>. + +See the [Ruby agent reference](((apm-ruby-ref))/introduction.html) for full documentation, including: + +* [Supported technologies](((apm-ruby-ref))/supported-technologies.html) +* [Set up](((apm-ruby-ref))/set-up.html) +* [Configuration reference](((apm-ruby-ref))/configuration.html) +* [API reference](((apm-ruby-ref))/api.html) + + +<APMAgentWarning /> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/diagrams/apm-otel-architecture.mdx b/docs/en/serverless/transclusion/apm/guide/diagrams/apm-otel-architecture.mdx new file mode 100644 index 0000000000..93ef2a916b --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/diagrams/apm-otel-architecture.mdx @@ -0,0 +1,258 @@ + +{/* ++++ */} +{/* <div style="width:100%;margin-bottom:30px" > */} +{/* <!-- This SVG was created in Figma. Find the source in the obs-docs team space. --> */} +{/* <svg viewBox="0 0 1089 653" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> */} +{/* <rect x="506" y="182.744" width="577" height="344.513" rx="7" fill="white" fill-opacity="0.5" stroke="#69707D" stroke-width="2" stroke-linejoin="round" stroke-dasharray="4 4"/> */} +{/* <text fill="#343741" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="24" font-weight="bold" letter-spacing="0em"><tspan x="710.083" y="166.505">Elastic Observability</tspan></text> */} +{/* <rect x="900" y="198.722" width="166.474" height="310.56" rx="7" fill="#0077CC" fill-opacity="0.24" stroke="#69707D" stroke-width="2" stroke-linejoin="round"/> */} +{/* <text fill="#343741" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="24" letter-spacing="0em"><tspan x="942.418" y="243.275">Kibana </tspan><tspan x="906.711" y="272.275">Observability </tspan><tspan x="953.844" y="301.275">apps</tspan></text> */} +{/* <rect x="712" y="198.722" width="166.474" height="310.56" rx="7" fill="#0077CC" fill-opacity="0.24" stroke="#69707D" stroke-width="2" stroke-linejoin="round"/> */} +{/* <text fill="#343741" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="24" letter-spacing="0em"><tspan x="718.465" y="242.918">Elasticsearch</tspan></text> */} +{/* <rect x="524" y="198.722" width="166.474" height="310.56" rx="7" fill="#0077CC" fill-opacity="0.24" stroke="#69707D" stroke-width="2" stroke-linejoin="round"/> */} +{/* <text fill="#343741" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="24" letter-spacing="0em"><tspan x="568.539" y="243.275">Elastic </tspan><tspan x="571.715" y="280.275">Agent</tspan></text> */} +{/* <rect x="534" y="297.583" width="146" height="194.723" rx="7" fill="white" fill-opacity="0.5" stroke="#69707D" stroke-width="2" stroke-linejoin="round" stroke-dasharray="4 4"/> */} +{/* <text fill="#343741" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="24" letter-spacing="0em"><tspan x="580.212" y="341.381">APM </tspan><tspan x="545.22" y="378.381">Integration</tspan></text> */} +{/* <g clip-path="url(#clip0_19_150)"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M676 173.756H673.238C669.793 173.756 667 170.625 667 166.763V156.78H676V173.756Z" fill="#F04E98"/> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M676 173.756H685V149.789H676V173.756Z" fill="#343741"/> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M697 173.756H688V141.801L689.973 141.825C693.866 141.872 697 145.527 697 150.017V164.085V173.756Z" fill="#0077CC"/> */} +{/* </g> */} +{/* <g clip-path="url(#clip1_19_150)"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M1009.25 402.435H954.562V428.648C964.023 428.648 972.905 431.079 980.666 435.304L1009.25 402.435Z" fill="#F04E98"/> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M954.562 428.648V465.32L980.666 435.304C972.905 431.079 964.023 428.648 954.562 428.648Z" fill="#343741"/> */} +{/* <mask id="mask0_19_150" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="957" y="438" width="52" height="35"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M957.154 438.815H1008.15V472.336H957.154V438.815Z" fill="white"/> */} +{/* </mask> */} +{/* <g mask="url(#mask0_19_150)"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M986.305 438.815L959.519 469.62L957.154 472.337H1008.15C1005.36 458.567 997.352 446.699 986.305 438.815Z" fill="#00BFB3"/> */} +{/* </g> */} +{/* </g> */} +{/* <g clip-path="url(#clip2_19_150)"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M928 347.512V360.493C932.971 360.493 937 364.517 937 369.481H950C950 357.348 940.15 347.512 928 347.512Z" fill="#0077CC"/> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M940 351.071V369.481H950C950 361.77 946.019 354.992 940 351.071Z" fill="#343741"/> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M940 337.526V347.587C947.74 351.835 953 360.055 953 369.481H956V353.503C956 344.679 948.837 337.526 940 337.526Z" fill="#00BFB3"/> */} +{/* </g> */} +{/* <g clip-path="url(#clip3_19_150)"> */} +{/* <mask id="mask1_19_150" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="968" y="355" width="28" height="16"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M968 355.57H996V370.479H968V355.57Z" fill="white"/> */} +{/* </mask> */} +{/* <g mask="url(#mask1_19_150)"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M986 358.496C983.238 358.496 980.738 357.378 978.929 355.57L968 366.485V370.479H996V358.496L993.071 355.57C991.262 357.378 988.762 358.496 986 358.496Z" fill="#F04E98"/> */} +{/* </g> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M982.465 352.041L978.929 355.571C980.738 357.378 983.238 358.496 986 358.496C988.762 358.496 991.262 357.378 993.071 355.571L989.535 352.041C987.583 350.09 984.417 350.09 982.465 352.041Z" fill="#343741"/> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M980.343 349.922C981.855 348.413 983.864 347.582 986 347.582C988.137 347.582 990.146 348.413 991.657 349.922L994.864 353.124C995.586 351.743 996 350.176 996 348.51C996 342.995 991.523 338.524 986 338.524C980.478 338.524 976 342.995 976 348.51C976 350.176 976.414 351.743 977.137 353.124L980.343 349.922Z" fill="#FEC514"/> */} +{/* </g> */} +{/* <g filter="url(#filter0_d_19_150)"> */} +{/* <path d="M17 620.128L415 620.128" stroke="black" stroke-linecap="round"/> */} +{/* </g> */} +{/* <text fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="20" font-weight="100" letter-spacing="0em"><tspan x="149" y="648.256">Edge machines</tspan></text> */} +{/* <text transform="translate(423 628.117)" fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="20" font-weight="100" letter-spacing="0em"><tspan x="0" y="19.2559">Protocol</tspan></text> */} +{/* <g filter="url(#filter1_d_19_150)"> */} +{/* <path d="M505 620.128L1084 620.128" stroke="black" stroke-linecap="round"/> */} +{/* </g> */} +{/* <g filter="url(#filter2_d_19_150)"> */} +{/* <path d="M435 620L487 620" stroke="black" stroke-linecap="round"/> */} +{/* </g> */} +{/* <text fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="20" font-weight="100" letter-spacing="0em"><tspan x="685" y="647.373">Hosted on Elastic Cloud</tspan></text> */} +{/* <g clip-path="url(#clip4_19_150)"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M1006 348.51H1038V338.523H1006V348.51Z" fill="#F04E98"/> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M1025 370.479H1038V361.492H1025V370.479Z" fill="#0077CC"/> */} +{/* <path d="M1016 348.51H1038C1038 354.025 1033.53 358.496 1028.01 358.496H1016V348.51Z" fill="#343741"/> */} +{/* </g> */} +{/* <g clip-path="url(#clip5_19_150)"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M572 424.278H642V402.432H572V424.278Z" fill="#F04E98"/> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M613.562 472.336H642V452.676H613.562V472.336Z" fill="#0077CC"/> */} +{/* <path d="M593.875 424.278H642V426.123C642 437.168 633.046 446.123 622 446.123H593.875V424.278Z" fill="#343741"/> */} +{/* </g> */} +{/* <g clip-path="url(#clip6_19_150)"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M762.188 437.386C762.188 440.409 762.612 443.325 763.334 446.123H805.938C810.77 446.123 814.688 442.211 814.688 437.386C814.688 432.558 810.77 428.648 805.938 428.648H763.334C762.612 431.444 762.188 434.362 762.188 437.386Z" fill="#343741"/> */} +{/* <mask id="mask2_19_150" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="765" y="402" width="60" height="21"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M765.783 402.435H824.485V422.095H765.783V402.435Z" fill="white"/> */} +{/* </mask> */} +{/* <g mask="url(#mask2_19_150)"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M821.083 419.17C822.306 418.045 823.444 416.837 824.487 415.542C818.071 407.558 808.234 402.435 797.187 402.435C783.36 402.435 771.46 410.467 765.783 422.095H813.617C816.387 422.095 819.049 421.044 821.083 419.17Z" fill="#FEC514"/> */} +{/* </g> */} +{/* <mask id="mask3_19_150" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="765" y="452" width="60" height="21"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M765.783 452.677H824.485V472.336H765.783V452.677Z" fill="white"/> */} +{/* </mask> */} +{/* <g mask="url(#mask3_19_150)"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M813.617 452.677H765.783C771.462 464.302 783.36 472.337 797.187 472.337C808.234 472.337 818.071 467.212 824.487 459.23C823.443 457.932 822.306 456.725 821.083 455.6C819.049 453.723 816.387 452.677 813.617 452.677Z" fill="#00BFB3"/> */} +{/* </g> */} +{/* </g> */} +{/* <rect x="6" y="100.859" width="396" height="165.764" rx="7" fill="white" fill-opacity="0.5" stroke="#69707D" stroke-width="2" stroke-linejoin="round" stroke-dasharray="4 4"/> */} +{/* <rect x="185" y="110.845" width="203" height="48.9284" rx="7" fill="#0077CC" fill-opacity="0.24" stroke="#69707D" stroke-width="2" stroke-linejoin="round"/> */} +{/* <text fill="#343741" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="24" letter-spacing="0em"><tspan x="256.215" y="144.037">API/SDK</tspan></text> */} +{/* <rect x="185" y="187.737" width="203" height="67.9017" rx="7" fill="#FEC514" stroke="#69707D" stroke-width="2" stroke-linejoin="round"/> */} +{/* <text fill="#343741" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="24" letter-spacing="0em"><tspan x="236.262" y="215.915">Elastic APM </tspan><tspan x="270.562" y="244.915">agent</tspan></text> */} +{/* <text fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="24" font-weight="bold" letter-spacing="0em"><tspan x="31.8555" y="25.2273">OpenTelemetry API/SDK with </tspan><tspan x="90.4141" y="54.2273">Elastic APM agents</tspan></text> */} +{/* <rect x="28" y="128" width="74" height="41" fill="url(#pattern0)"/> */} +{/* <g clip-path="url(#clip7_19_150)"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M224.86 218.821C225.605 219.887 226.003 221.157 226 222.457C225.994 223.763 225.588 225.035 224.838 226.104C224.089 227.171 223.031 227.984 221.806 228.432C222.163 229.411 222.193 230.479 221.892 231.476C221.59 232.474 220.974 233.347 220.134 233.966C219.295 234.582 218.278 234.908 217.237 234.894C216.195 234.881 215.187 234.529 214.364 233.892C213.254 235.446 211.678 236.608 209.864 237.209C208.052 237.81 206.094 237.818 204.277 237.232C202.458 236.645 200.873 235.496 199.751 233.95C198.627 232.402 198.022 230.537 198.024 228.624C198.024 228.047 198.077 227.47 198.184 226.902C196.955 226.462 195.893 225.652 195.145 224.584C194.395 223.514 193.995 222.238 194 220.931C194.007 219.626 194.413 218.353 195.163 217.284C195.913 216.217 196.972 215.405 198.198 214.958C197.836 213.978 197.802 212.908 198.101 211.907C198.4 210.907 199.016 210.03 199.856 209.408C200.696 208.79 201.714 208.462 202.758 208.474C203.801 208.487 204.812 208.84 205.636 209.478C206.838 207.803 208.577 206.588 210.566 206.037C212.553 205.487 214.669 205.635 216.56 206.456C218.454 207.278 220.009 208.722 220.967 210.548C221.927 212.377 222.235 214.478 221.84 216.505C223.062 216.947 224.117 217.756 224.86 218.821ZM206.58 219.478L213.582 222.685L220.648 216.481C220.75 215.969 220.801 215.448 220.8 214.926C220.801 213.236 220.261 211.59 219.26 210.228C218.261 208.869 216.852 207.865 215.24 207.363C213.629 206.863 211.9 206.894 210.308 207.449C208.714 208.006 207.34 209.058 206.388 210.452L205.214 216.561L206.581 219.477L206.58 219.478ZM199.333 226.909C199.112 227.996 199.121 229.118 199.36 230.202C199.599 231.286 200.062 232.308 200.72 233.202C201.724 234.566 203.14 235.572 204.76 236.072C206.378 236.571 208.113 236.537 209.71 235.975C211.309 235.412 212.685 234.352 213.636 232.949L214.802 226.856L213.247 223.875L206.217 220.669L199.332 226.908L199.333 226.909ZM204.088 215.9L199.288 214.765L199.29 214.763C199.012 213.993 198.99 213.154 199.226 212.371C199.462 211.587 199.945 210.9 200.602 210.411C201.259 209.925 202.057 209.664 202.875 209.668C203.693 209.672 204.488 209.941 205.14 210.434L204.088 215.9ZM198.872 215.91C197.833 216.254 196.927 216.91 196.277 217.79C195.626 218.67 195.262 219.73 195.237 220.825C195.212 221.92 195.525 222.995 196.135 223.905C196.744 224.814 197.619 225.513 198.64 225.902L205.373 219.81L204.138 217.164L198.872 215.91ZM217.158 233.733C216.33 233.732 215.527 233.456 214.873 232.949L215.91 227.503L220.71 228.626C220.92 229.2 220.988 229.815 220.91 230.421C220.831 231.026 220.608 231.604 220.259 232.106C219.912 232.606 219.449 233.016 218.909 233.299C218.369 233.583 217.768 233.732 217.158 233.733ZM215.848 226.245L221.128 227.481C222.183 227.125 223.099 226.448 223.75 225.546C224.402 224.642 224.756 223.558 224.763 222.444C224.763 221.371 224.436 220.323 223.827 219.438C223.219 218.555 222.355 217.878 221.352 217.497L214.448 223.559L215.848 226.245Z" fill="white"/> */} +{/* <path d="M206.58 219.478L213.582 222.685L220.648 216.481C220.75 215.969 220.801 215.448 220.8 214.926C220.801 213.236 220.261 211.59 219.26 210.228C218.261 208.869 216.852 207.865 215.24 207.363C213.629 206.863 211.9 206.894 210.308 207.449C208.713 208.006 207.34 209.058 206.388 210.452L205.214 216.561L206.581 219.477L206.58 219.478Z" fill="#FEC514"/> */} +{/* <path d="M199.333 226.909C199.112 227.996 199.121 229.118 199.36 230.202C199.599 231.286 200.062 232.308 200.72 233.202C201.724 234.566 203.14 235.572 204.76 236.072C206.378 236.571 208.113 236.537 209.71 235.975C211.309 235.412 212.685 234.352 213.636 232.949L214.802 226.856L213.247 223.875L206.217 220.669L199.332 226.908L199.333 226.909Z" fill="#00BFB3"/> */} +{/* <path d="M199.288 214.765L204.088 215.9L205.14 210.434C204.488 209.941 203.693 209.672 202.875 209.668C202.057 209.664 201.259 209.925 200.602 210.411C199.945 210.9 199.462 211.587 199.226 212.371C198.99 213.154 199.012 213.993 199.29 214.763" fill="#F04E98"/> */} +{/* <path d="M198.872 215.91C197.833 216.254 196.927 216.911 196.277 217.79C195.626 218.67 195.262 219.73 195.237 220.825C195.212 221.92 195.525 222.995 196.135 223.905C196.744 224.814 197.619 225.513 198.64 225.902L205.373 219.81L204.138 217.164L198.872 215.91Z" fill="#1BA9F5"/> */} +{/* <path d="M214.873 232.949C215.527 233.456 216.33 233.732 217.158 233.733C217.768 233.732 218.369 233.583 218.909 233.299C219.449 233.016 219.912 232.606 220.259 232.105C220.608 231.604 220.831 231.026 220.91 230.421C220.988 229.815 220.92 229.2 220.71 228.626L215.91 227.503L214.873 232.949Z" fill="#93C90E"/> */} +{/* <path d="M215.848 226.245L221.128 227.481C222.183 227.125 223.099 226.448 223.75 225.546C224.402 224.642 224.756 223.558 224.763 222.444C224.763 221.371 224.436 220.323 223.827 219.438C223.219 218.555 222.355 217.878 221.352 217.497L214.448 223.559L215.848 226.245Z" fill="#0077CC"/> */} +{/* </g> */} +{/* <rect x="195" y="119.832" width="32" height="31.9551" fill="url(#pattern1)"/> */} +{/* <rect x="7" y="372.478" width="396" height="69.8989" rx="7" fill="white" fill-opacity="0.5" stroke="#69707D" stroke-width="2" stroke-linejoin="round" stroke-dasharray="4 4"/> */} +{/* <rect x="186" y="382.463" width="203" height="48.9284" rx="7" fill="#0077CC" fill-opacity="0.24" stroke="#69707D" stroke-width="2" stroke-linejoin="round"/> */} +{/* <text fill="#343741" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="24" letter-spacing="0em"><tspan x="257.215" y="415.655">API/SDK</tspan></text> */} +{/* <text fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="24" font-weight="bold" letter-spacing="0em"><tspan x="69" y="325.781">OpenTelemetry Agents</tspan></text> */} +{/* <rect x="196" y="391.449" width="32" height="31.9551" fill="url(#pattern2)"/> */} +{/* <rect x="51" y="401.533" width="37" height="37" transform="rotate(-35.5889 51 401.533)" fill="url(#pattern3)"/> */} +{/* <rect x="12" y="528.258" width="396" height="69.8989" rx="7" fill="white" fill-opacity="0.5" stroke="#69707D" stroke-width="2" stroke-linejoin="round" stroke-dasharray="4 4"/> */} +{/* <rect x="24" y="538.244" width="370" height="48.9284" rx="7" fill="#0077CC" fill-opacity="0.24" stroke="#69707D" stroke-width="2" stroke-linejoin="round"/> */} +{/* <text fill="#343741" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="24" letter-spacing="0em"><tspan x="149.094" y="571.436">OTLP Collector</tspan></text> */} +{/* <text fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="24" font-weight="bold" letter-spacing="0em"><tspan x="56" y="512.519">OpenTelemetry Collectors</tspan></text> */} +{/* <rect x="109" y="545.233" width="32" height="31.9551" fill="url(#pattern4)"/> */} +{/* <text fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="20" font-weight="300" letter-spacing="0em"><tspan x="16.0996" y="355.782">Click </tspan><tspan x="108.814" y="355.782"> to see all supported languages</tspan></text> */} +{/* <text fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="20" font-weight="300" letter-spacing="0em" text-decoration="underline"><tspan x="67.1152" y="355.782"><a href="https://opentelemetry.io/docs/instrumentation/">here</a></tspan></text> */} +{/* <text fill="black" xml:space="preserve" style="white-space: pre" font-family="Inter" font-size="20" font-weight="300" letter-spacing="0em"><tspan x="0.378906" y="86.1616">Available in Java, .NET, Node.js, and Python</tspan></text> */} +{/* <path d="M286 186.737L291.774 176.737H280.226L286 186.737ZM285 160.774V177.737H287V160.774H285Z" fill="#69707D"/> */} +{/* <path d="M533 337.525L513 325.978V349.072L533 337.525ZM387 224.687H446V220.687H387V224.687ZM454 232.687V327.525H458V232.687H454ZM466 339.525H515V335.525H466V339.525ZM454 327.525C454 334.153 459.373 339.525 466 339.525V335.525C461.582 335.525 458 331.944 458 327.525H454ZM446 224.687C450.418 224.687 454 228.268 454 232.687H458C458 226.059 452.627 220.687 446 220.687V224.687Z" fill="#69707D"/> */} +{/* <g clip-path="url(#clip8_19_150)"> */} +{/* <path fill-rule="evenodd" clip-rule="evenodd" d="M468.86 276.74C469.605 277.806 470.003 279.075 470 280.376C469.994 281.681 469.588 282.953 468.838 284.022C468.089 285.09 467.031 285.902 465.806 286.35C466.163 287.329 466.193 288.397 465.892 289.395C465.59 290.392 464.974 291.266 464.134 291.884C463.295 292.5 462.278 292.826 461.237 292.813C460.195 292.799 459.187 292.448 458.364 291.811C457.254 293.365 455.678 294.526 453.864 295.128C452.052 295.728 450.094 295.736 448.277 295.151C446.458 294.564 444.873 293.414 443.751 291.868C442.627 290.32 442.022 288.456 442.024 286.543C442.024 285.965 442.077 285.388 442.184 284.82C440.955 284.381 439.893 283.571 439.145 282.503C438.395 281.432 437.995 280.156 438 278.85C438.007 277.544 438.413 276.272 439.163 275.203C439.913 274.136 440.972 273.324 442.198 272.876C441.836 271.897 441.802 270.826 442.101 269.826C442.4 268.825 443.016 267.948 443.856 267.327C444.696 266.708 445.714 266.38 446.758 266.393C447.801 266.405 448.812 266.758 449.636 267.397C450.838 265.721 452.577 264.507 454.566 263.956C456.553 263.406 458.669 263.554 460.56 264.374C462.454 265.196 464.009 266.64 464.967 268.466C465.927 270.295 466.235 272.396 465.84 274.423C467.062 274.865 468.117 275.675 468.86 276.74ZM450.58 277.397L457.582 280.603L464.648 274.399C464.75 273.887 464.801 273.366 464.8 272.844C464.801 271.155 464.261 269.509 463.26 268.147C462.261 266.787 460.852 265.783 459.24 265.282C457.629 264.782 455.9 264.812 454.308 265.368C452.714 265.924 451.34 266.977 450.388 268.37L449.214 274.48L450.581 277.396L450.58 277.397ZM443.333 284.827C443.112 285.915 443.121 287.037 443.36 288.12C443.599 289.204 444.062 290.226 444.72 291.12C445.724 292.484 447.14 293.49 448.76 293.99C450.378 294.489 452.113 294.455 453.71 293.894C455.309 293.331 456.685 292.27 457.636 290.868L458.802 284.774L457.247 281.794L450.217 278.587L443.332 284.826L443.333 284.827ZM448.088 273.819L443.288 272.683L443.29 272.681C443.012 271.911 442.99 271.073 443.226 270.289C443.462 269.505 443.945 268.818 444.602 268.33C445.259 267.843 446.057 267.582 446.875 267.587C447.693 267.591 448.488 267.859 449.14 268.353L448.088 273.819ZM442.872 273.829C441.833 274.172 440.927 274.829 440.277 275.708C439.626 276.589 439.262 277.649 439.237 278.743C439.212 279.838 439.525 280.914 440.135 281.824C440.744 282.732 441.619 283.431 442.64 283.821L449.373 277.728L448.138 275.082L442.872 273.829ZM461.158 291.652C460.33 291.65 459.527 291.375 458.873 290.868L459.91 285.421L464.71 286.545C464.92 287.118 464.988 287.734 464.91 288.339C464.831 288.945 464.608 289.523 464.259 290.024C463.912 290.525 463.449 290.935 462.909 291.218C462.369 291.501 461.768 291.65 461.158 291.652ZM459.848 284.163L465.128 285.4C466.183 285.043 467.099 284.367 467.75 283.464C468.402 282.561 468.756 281.476 468.763 280.363C468.763 279.289 468.436 278.241 467.827 277.357C467.219 276.474 466.355 275.797 465.352 275.416L458.448 281.477L459.848 284.163Z" fill="white"/> */} +{/* <path d="M450.58 277.397L457.582 280.603L464.648 274.399C464.75 273.887 464.801 273.366 464.8 272.844C464.801 271.155 464.261 269.509 463.26 268.147C462.261 266.787 460.852 265.783 459.24 265.282C457.629 264.782 455.9 264.812 454.308 265.368C452.713 265.924 451.34 266.977 450.388 268.37L449.214 274.48L450.581 277.396L450.58 277.397Z" fill="#FEC514"/> */} +{/* <path d="M443.333 284.827C443.112 285.915 443.121 287.037 443.36 288.121C443.599 289.204 444.062 290.226 444.72 291.121C445.724 292.484 447.14 293.49 448.76 293.99C450.378 294.489 452.113 294.455 453.71 293.894C455.309 293.331 456.685 292.27 457.636 290.868L458.802 284.774L457.247 281.794L450.217 278.587L443.332 284.826L443.333 284.827Z" fill="#00BFB3"/> */} +{/* <path d="M443.288 272.683L448.088 273.819L449.14 268.352C448.488 267.859 447.693 267.591 446.875 267.586C446.057 267.582 445.259 267.843 444.602 268.329C443.945 268.818 443.462 269.505 443.226 270.289C442.99 271.073 443.012 271.911 443.29 272.681" fill="#F04E98"/> */} +{/* <path d="M442.872 273.829C441.833 274.172 440.927 274.829 440.277 275.708C439.626 276.589 439.262 277.649 439.237 278.743C439.212 279.838 439.525 280.914 440.135 281.824C440.744 282.732 441.619 283.431 442.64 283.821L449.373 277.728L448.138 275.082L442.872 273.829Z" fill="#1BA9F5"/> */} +{/* <path d="M458.873 290.868C459.527 291.374 460.33 291.65 461.158 291.652C461.768 291.65 462.369 291.501 462.909 291.218C463.449 290.934 463.912 290.525 464.259 290.024C464.608 289.523 464.831 288.945 464.91 288.339C464.988 287.734 464.92 287.118 464.71 286.545L459.91 285.421L458.873 290.868Z" fill="#93C90E"/> */} +{/* <path d="M459.848 284.163L465.128 285.399C466.183 285.043 467.099 284.366 467.75 283.464C468.402 282.56 468.756 281.476 468.763 280.363C468.763 279.289 468.436 278.241 467.827 277.357C467.219 276.474 466.355 275.797 465.352 275.416L458.448 281.477L459.848 284.163Z" fill="#0077CC"/> */} +{/* </g> */} +{/* <path d="M534 407.926L514 396.379V419.473L534 407.926ZM388.5 409.926H516V405.926H388.5V409.926Z" fill="#69707D"/> */} +{/* <path d="M394 563.208H446C451.523 563.208 456 558.731 456 553.208V408.426" stroke="#69707D" stroke-width="4"/> */} +{/* <rect x="438" y="391.449" width="32" height="31.9551" fill="white"/> */} +{/* <rect x="438" y="391.449" width="32" height="31.9551" fill="url(#pattern5)"/> */} +{/* <path d="M57.4724 198C56.0143 198.007 54.6218 198.136 53.3963 198.359C49.7862 199.017 49.1308 200.394 49.1308 202.934V206.288H57.6614V207.406H45.9296C43.4502 207.406 41.2795 208.943 40.6005 211.867C39.8173 215.219 39.7826 217.311 40.6005 220.811C41.2069 223.416 42.6548 225.273 45.1342 225.273H48.0672V221.252C48.0672 218.347 50.5033 215.785 53.3963 215.785H61.9164C64.2885 215.785 66.1818 213.771 66.1818 211.313V202.934C66.1818 200.549 64.2315 198.757 61.9167 198.359C60.4513 198.108 58.9308 197.993 57.4724 198V198ZM52.8592 200.698C53.7405 200.698 54.4598 201.452 54.4598 202.38C54.4598 203.304 53.7405 204.052 52.8595 204.052C51.9751 204.052 51.2586 203.304 51.2586 202.38C51.2586 201.452 51.9751 200.698 52.8592 200.698V200.698Z" fill="url(#paint0_linear_19_150)"/> */} +{/* <path d="M67.8961 206.727V210.605C67.8961 213.612 65.4114 216.142 62.578 216.142H54.075C51.7458 216.142 49.8182 218.188 49.8182 220.58V228.896C49.8182 231.263 51.8245 232.655 54.075 233.334C56.7696 234.147 59.3537 234.294 62.5777 233.334C64.7211 232.698 66.8344 231.416 66.8344 228.896V225.568H58.3314V224.459H71.0908C73.5651 224.459 74.4872 222.688 75.3476 220.031C76.2363 217.295 76.1985 214.664 75.3476 211.155C74.7361 208.628 73.5683 206.727 71.0908 206.727H67.8961ZM63.1136 227.787C63.9963 227.787 64.7113 228.529 64.7113 229.446C64.7113 230.367 63.9963 231.115 63.1136 231.115C62.2341 231.115 61.5166 230.367 61.5166 229.446C61.5166 228.529 62.2341 227.787 63.1136 227.787Z" fill="url(#paint1_linear_19_150)"/> */} +{/* <path opacity="0.444" d="M69.4545 239.455C69.4545 240.033 68.2477 240.588 66.0996 240.997C63.9514 241.406 61.0379 241.636 58 241.636C54.9621 241.636 52.0485 241.406 49.9004 240.997C47.7523 240.588 46.5454 240.033 46.5454 239.455C46.5454 238.876 47.7523 238.321 49.9004 237.912C52.0485 237.503 54.9621 237.273 58 237.273C61.0379 237.273 63.9514 237.503 66.0996 237.912C68.2477 238.321 69.4545 238.876 69.4545 239.455V239.455Z" fill="url(#paint2_radial_19_150)"/> */} +{/* <rect x="108" y="195" width="44" height="44" fill="url(#pattern6)"/> */} +{/* <rect x="13" y="407.457" width="41.5122" height="23" transform="rotate(-36.0975 13 407.457)" fill="url(#pattern7)"/> */} +{/* <path d="M107.464 397.844C106.718 398.389 106.051 398.973 105.505 399.544C103.896 401.224 104.072 402.175 105.016 403.478L106.264 405.2L110.643 402.028L111.059 402.602L105.036 406.965C103.763 407.887 103.22 409.483 103.959 411.237C104.804 413.249 105.564 414.336 107.285 415.829C108.565 416.941 109.999 417.355 111.272 416.433L112.778 415.343L111.282 413.278C110.202 411.787 110.5 409.566 111.985 408.49L116.359 405.322C117.577 404.439 117.8 402.701 116.886 401.439L113.77 397.138C112.883 395.913 111.216 395.719 109.879 396.375C109.033 396.791 108.21 397.298 107.464 397.844V397.844ZM106.099 400.944C106.551 400.616 107.201 400.736 107.546 401.212C107.89 401.687 107.799 402.338 107.346 402.666C106.892 402.995 106.246 402.877 105.903 402.403C105.558 401.927 105.645 401.273 106.099 400.944V400.944Z" fill="url(#paint3_linear_19_150)"/> */} +{/* <path d="M116.061 398.448L117.503 400.439C118.621 401.982 118.287 404.205 116.832 405.259L112.467 408.421C111.271 409.287 111.042 411.054 111.932 412.282L115.024 416.552C115.904 417.767 117.452 417.735 118.86 417.247C120.545 416.662 121.927 415.777 123.225 414.085C124.089 412.961 124.697 411.518 123.76 410.224L122.522 408.515L118.157 411.677L117.744 411.108L124.295 406.363C125.565 405.442 125.38 404.191 124.834 402.506C124.273 400.772 123.275 399.435 121.533 397.95C120.279 396.88 118.973 396.338 117.701 397.26L116.061 398.448ZM121.437 411.038C121.89 410.71 122.533 410.825 122.874 411.295C123.217 411.768 123.128 412.418 122.675 412.747C122.223 413.074 121.577 412.956 121.234 412.484C120.893 412.013 120.986 411.365 121.437 411.038Z" fill="url(#paint4_linear_19_150)"/> */} +{/* <path opacity="0.444" d="M129.032 414.67C129.247 414.967 128.834 415.701 127.883 416.71C126.932 417.718 125.522 418.92 123.962 420.05C122.403 421.179 120.821 422.145 119.566 422.734C118.311 423.322 117.485 423.486 117.27 423.189C117.055 422.892 117.468 422.158 118.419 421.15C119.37 420.141 120.78 418.939 122.34 417.809C123.899 416.68 125.48 415.714 126.735 415.125C127.99 414.537 128.816 414.373 129.032 414.67V414.67Z" fill="url(#paint5_radial_19_150)"/> */} +{/* <rect x="135.317" y="406.092" width="26.7839" height="25.7569" transform="rotate(-33.1845 135.317 406.092)" fill="url(#pattern8)"/> */} +{/* <rect x="102" y="123" width="58" height="58" fill="url(#pattern9)"/> */} +{/* <defs> */} +{/* <filter id="filter0_d_19_150" x="12.5" y="619.628" width="407" height="9" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> */} +{/* <feFlood flood-opacity="0" result="BackgroundImageFix"/> */} +{/* <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> */} +{/* <feOffset dy="4"/> */} +{/* <feGaussianBlur stdDeviation="2"/> */} +{/* <feComposite in2="hardAlpha" operator="out"/> */} +{/* <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/> */} +{/* <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_19_150"/> */} +{/* <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_19_150" result="shape"/> */} +{/* </filter> */} +{/* <filter id="filter1_d_19_150" x="500.5" y="619.628" width="588" height="9" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> */} +{/* <feFlood flood-opacity="0" result="BackgroundImageFix"/> */} +{/* <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> */} +{/* <feOffset dy="4"/> */} +{/* <feGaussianBlur stdDeviation="2"/> */} +{/* <feComposite in2="hardAlpha" operator="out"/> */} +{/* <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/> */} +{/* <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_19_150"/> */} +{/* <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_19_150" result="shape"/> */} +{/* </filter> */} +{/* <filter id="filter2_d_19_150" x="430.5" y="619.5" width="61" height="9" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> */} +{/* <feFlood flood-opacity="0" result="BackgroundImageFix"/> */} +{/* <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> */} +{/* <feOffset dy="4"/> */} +{/* <feGaussianBlur stdDeviation="2"/> */} +{/* <feComposite in2="hardAlpha" operator="out"/> */} +{/* <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/> */} +{/* <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_19_150"/> */} +{/* <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_19_150" result="shape"/> */} +{/* </filter> */} +{/* <pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> */} +{/* <use xlink:href="#image0_19_150" transform="matrix(0.000244141 0 0 0.000440644 0 -0.00519841)"/> */} +{/* </pattern> */} +{/* <pattern id="pattern1" patternContentUnits="objectBoundingBox" width="1" height="1"> */} +{/* <use xlink:href="#image1_19_150" transform="translate(0 -0.00070325) scale(0.0005)"/> */} +{/* </pattern> */} +{/* <pattern id="pattern2" patternContentUnits="objectBoundingBox" width="1" height="1"> */} +{/* <use xlink:href="#image1_19_150" transform="translate(0 -0.00070325) scale(0.0005)"/> */} +{/* </pattern> */} +{/* <pattern id="pattern3" patternContentUnits="objectBoundingBox" width="1" height="1"> */} +{/* <use xlink:href="#image2_19_150" transform="scale(0.001)"/> */} +{/* </pattern> */} +{/* <pattern id="pattern4" patternContentUnits="objectBoundingBox" width="1" height="1"> */} +{/* <use xlink:href="#image1_19_150" transform="translate(0 -0.00070325) scale(0.0005)"/> */} +{/* </pattern> */} +{/* <pattern id="pattern5" patternContentUnits="objectBoundingBox" width="1" height="1"> */} +{/* <use xlink:href="#image1_19_150" transform="translate(0 -0.00070325) scale(0.0005)"/> */} +{/* </pattern> */} +{/* <pattern id="pattern6" patternContentUnits="objectBoundingBox" width="1" height="1"> */} +{/* <use xlink:href="#image3_19_150" transform="scale(0.000488281)"/> */} +{/* </pattern> */} +{/* <pattern id="pattern7" patternContentUnits="objectBoundingBox" width="1" height="1"> */} +{/* <use xlink:href="#image0_19_150" transform="matrix(0.000244141 0 0 0.000440644 0 -0.00519841)"/> */} +{/* </pattern> */} +{/* <pattern id="pattern8" patternContentUnits="objectBoundingBox" width="1" height="1"> */} +{/* <use xlink:href="#image3_19_150" transform="matrix(0.000488281 0 0 0.00050775 0 -0.0199362)"/> */} +{/* </pattern> */} +{/* <pattern id="pattern9" patternContentUnits="objectBoundingBox" width="1" height="1"> */} +{/* <use xlink:href="#image2_19_150" transform="scale(0.001)"/> */} +{/* </pattern> */} +{/* <linearGradient id="paint0_linear_19_150" x1="39.9999" y1="198" x2="60.1826" y2="214.671" gradientUnits="userSpaceOnUse"> */} +{/* <stop stop-color="#5A9FD4"/> */} +{/* <stop offset="1" stop-color="#306998"/> */} +{/* </linearGradient> */} +{/* <linearGradient id="paint1_linear_19_150" x1="62.909" y1="229.166" x2="55.6262" y2="219.218" gradientUnits="userSpaceOnUse"> */} +{/* <stop stop-color="#FFD43B"/> */} +{/* <stop offset="1" stop-color="#FFE873"/> */} +{/* </linearGradient> */} +{/* <radialGradient id="paint2_radial_19_150" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(58 239.454) rotate(-90) scale(2.18171 9.7629)"> */} +{/* <stop stop-color="#B8B8B8" stop-opacity="0.498"/> */} +{/* <stop offset="1" stop-color="#7F7F7F" stop-opacity="0"/> */} +{/* </radialGradient> */} +{/* <linearGradient id="paint3_linear_19_150" x1="98.4939" y1="404.341" x2="115.055" y2="405.395" gradientUnits="userSpaceOnUse"> */} +{/* <stop stop-color="#5A9FD4"/> */} +{/* <stop offset="1" stop-color="#306998"/> */} +{/* </linearGradient> */} +{/* <linearGradient id="paint4_linear_19_150" x1="121.845" y1="411.822" x2="114.407" y2="409.423" gradientUnits="userSpaceOnUse"> */} +{/* <stop stop-color="#FFD43B"/> */} +{/* <stop offset="1" stop-color="#FFE873"/> */} +{/* </linearGradient> */} +{/* <radialGradient id="paint5_radial_19_150" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(123.151 418.929) rotate(-125.918) scale(1.38304 6.18893)"> */} +{/* <stop stop-color="#B8B8B8" stop-opacity="0.498"/> */} +{/* <stop offset="1" stop-color="#7F7F7F" stop-opacity="0"/> */} +{/* </radialGradient> */} +{/* <clipPath id="clip0_19_150"> */} +{/* <rect width="32" height="31.9551" fill="white" transform="translate(666 141.801)"/> */} +{/* </clipPath> */} +{/* <clipPath id="clip1_19_150"> */} +{/* <rect width="70" height="69.9017" fill="white" transform="translate(948 402.434)"/> */} +{/* </clipPath> */} +{/* <clipPath id="clip2_19_150"> */} +{/* <rect width="32" height="31.9551" fill="white" transform="translate(926 337.525)"/> */} +{/* </clipPath> */} +{/* <clipPath id="clip3_19_150"> */} +{/* <rect width="32" height="31.9551" fill="white" transform="translate(966 338.524)"/> */} +{/* </clipPath> */} +{/* <clipPath id="clip4_19_150"> */} +{/* <rect width="32" height="31.9551" fill="white" transform="translate(1006 338.524)"/> */} +{/* </clipPath> */} +{/* <clipPath id="clip5_19_150"> */} +{/* <rect width="70" height="69.9017" fill="white" transform="translate(572 402.434)"/> */} +{/* </clipPath> */} +{/* <clipPath id="clip6_19_150"> */} +{/* <rect width="70" height="69.9017" fill="white" transform="translate(760 402.434)"/> */} +{/* </clipPath> */} +{/* <clipPath id="clip7_19_150"> */} +{/* <rect width="32" height="31.9551" fill="white" transform="translate(194 205.711)"/> */} +{/* </clipPath> */} +{/* <clipPath id="clip8_19_150"> */} +{/* <rect width="32" height="31.9551" fill="white" transform="translate(438 263.629)"/> */} +{/* </clipPath> */} +{/* <image id="image0_19_150" width="4096" height="2293" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAEAAAAAj1CAYAAADjzX4UAAAAAXNSR0IArs4c6QAAIABJREFUeF7s3HuQ3Wd5H/DnPbsrY2OBvNqVjC/aXens2giSJijEGdoSLqlDMc3UmQ6XAKVg7sEYY2MsIWyMhG1sY4gde0qGumUIY0iA0jQzQClkaC7NAIICibD3oj0ry7Kt3ZXwTcja3d/bcZq2gdiWdnUuv3POx//q/J7L53n/0sjfFP4jQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEWi6QWj6BAQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEQAOARECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEggIACjBEYxAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQEAHgDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgBAICAEpwBCMQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBAN4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAogYAAgBIcwQgECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAAgDdAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKICAAoARHMAIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAA4A0QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESCAgAKMERjECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAQAeAMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAEAgIASnAEIxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQEA3gABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECiBgACAEhzBCAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQACAN0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEogIACgBEcwAgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEADgDRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIICAAowRGMQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBAB4AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAQCAgBKcAQjECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAQDeAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKIGAAIASHMEIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAIA3QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESiAgAKAERzACAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAOANECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEggIACjBEYxAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQEAHgDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgBAICAEpwBCMQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBAN4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAogYAAgBIcwQgECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAAgDdAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKICAAoARHMAIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAA4A0QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESCAgAKMERjECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAQAeAMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAEAgIASnAEIxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQEA3gABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECiBgACAEhzBCAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQACAN0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEogIACgBEcwAgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEADgDRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIICAAowRGMQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBAB4AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAQCAgBKcAQjECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAQDeAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKIGAAIASHMEIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAIA3QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESiAgAKAERzACAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAOANECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEggIACjBEYxAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQEAHgDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgBAICAEpwBCMQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBAN4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAogYAAgBIcwQgECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAAgDdAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKICAAoARHMAIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAA4A0QIECAAAECBAgQIECAAAECBAi0rUCO6IktWyqxa9diishtu4jBCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgEBECADwDAgQIECBAgAABAgQIECBAgACBthPYf8YZp/T1nXJuRHpWJVdOibR472MLPePP2j8+Lwig7c5pYAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE/l5AAICnQIAAAQIECBAgQIAAAQIECBAg0HYC8xuqm3Ml/WFEnBsRqyJiMnJ8ZiH1fPZZtbtqbbeQgQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIBARAgA8AwIECBAgQIAAAQIECBAgQIAAgbYSyBGVueHqC1OkP/uHg6eI+Yh066re4vbVk5OzbbWUYQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAAwBsgQIAAAQIECBAgQIAAAQIECBBoN4G8ZUvfgbmHX9GT8pd+fvYcMZFS2rl4+GlfPP2BHz7abruZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB7hZI3b2+7QkQIECAAAECBAgQIECAAAECBNpNIG/evGr2kaP/ulJJn3+i2XPkr1Ry3tk/sOY7adeuhXbbz7wECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHSvgACA7r29zQkQIECAAAECBAgQIECAAAECbSmQI3oOjlRfmnP6SkRUfn6JFPlQpLgjL1Q+PrBv/N62XNLQBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh0pYAAgK48u6UJECBAgAABAgQIECBAgAABAu0tMDtUfV5K6asRMfhEm+SIqRSxMz9S+eLg3N0Pt/e2pidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFsEBAB0y6XtSYAAAQIECBAgQIAAAQIECBDoIIH5DdXNRSXdmSJ+8UnWWoqIbxYp7RjsX/3XadeuhQ5a3yoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHSogACADj2stQgQIECAAAECBAgQIECAAAECnSxw4KxN1UpP5d9Hipc+6Z4pHkk5vrAUC1vX1Wr3d7KH3QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6AwBAQCdcUdbECBAgAABAgQIECBAgAABAgS6SmD+zOpZubdybaT8+mMs/mARcdXi0Uc/dcb+/Ye7CsmyBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAi0nYAAgLY7mYEJECBAgAABAgQIECBAgAABAgQeOvPctUdXFe+NnLcdh8b3llLeum568hspYuk4fu8nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaImAAICWsGtKgAABAgQIECBAgAABAgQIECBwIgL3r1//9N6TV//biHT7MeukWMw5fSGW0mWD99y9/5i/9wMCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAi0SEAAQIvgtSVAgAABAgQIECBAgAABAgQIEFi5QI6oHBwZfWkUcWdOsfY4Ki2kFDv6pyd2poh8HL/3EwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRdQABA08k1JECAAAECBAgQIECAAAECBAgQqIfA7MaNv1LJlTtyTr9wnPXui0jvHKiNf/k4f+9nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaKqAAICmcmtGgAABAgQIECBAgAABAgQIECBQL4G5odFnp5RuzpFfdrw1c07fjMXFdwzeu2f8eL/xOwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRLQABAs6T1IUCAAAECBAgQIECAAAECBAgQqKvA/o0bN6wqeq6OiDctp3DK+eb7nr5q63N37z66nO/8lgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAo0WEADQaGH1CRAgQIAAAQIECBAgQIAAAQIEGiLw0Lnnrl14bOk9Ocf2ZTVIcc9Szm9ZX5v82rK+82MCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0WEAAQIOBlSdAgAABAgQIECBAgAABAgQIEGiMwD1nnXXyKb0nvz6nuC1y9C6jy1JEfCb15kvWTk4+tIzv/JQAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINFRAA0FBexQkQIECAAAECBAgQIECAAAECBBopMD9SPT/ndEdEnLnMPrM5x3sGZiY+lyKKZX7r5wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGiIgACAhrAqSoAAAQIECBAgQIAAAQIECBAg0AyB+eHqrxU5/X5KsWWZ/RYi4k/T0eKStfun7lnmt35OgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBhggIAGgIq6IECBAgQIAAAQIECBAgQIAAAQLNEJjfUH1O0ZM+mnJcsNx+KWI+53T1ob7iU6OTk48t93u/J0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQL0FBADUW1Q9AgQIECBAgAABAgQIECBAgACBpgnsHxkZ6ou+D6acL1pu0xRxNEd8ayml962fHv/Bcr/3ewIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRbQABAvUXVI0CAAAECBAgQIECAAAECBAgQaJrA9PDwmlOj9z0p0tUra5oO5YhbB9au3pl27VpYWQ1fESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoD4CAgDq46gKAQIECBAgQIAAAQIECBAgQIBACwRyRM/sUPUNlRS3RqRTVjBCkSK+myvpXQN7xr+zgu99QoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboJCACoG6VCBAgQIECAAAECBAgQIECAAAECrRCYGxr97Uj5toh0+kr6p4gHi5T/w5GFI9vP3rfvpyup4RsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjUQ0AAQD0U1SBAgAABAgQIECBAgAABAgQIEGiZwPyG0X+RU3w8UjxnhUPkiPjuUk9x6fqpqb9cYQ2fESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4IQFBACcMKECBAgQIECAAAECBAgQIECAAAECrRSYGx49LyI+GhG/fgJzHIgUtxYn931i3e7dj5xAHZ8SIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgxQICAFZM50MCBAgQIECAAAECBAgQIECAAIEyCNy3ofqcvkraEREXrnSelGIx5/hmT85XnjYz+f2V1vEdAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIETkRAAMCJ6PmWAAECBAgQIECAAAECBAgQIECg5QIHN27eUBQLV0fEm05kmBwxnSJdM1Ab//SJ1PEtAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEViogAGClcr4jQIAAAQIECBAgQIAAAQIECBAohcCDZ23uX+xZ2JpTXH5CA6VYTDl/sadI29bsndhzQrV8TIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRUICABYAZpPCBAgQIAAAQIECBAgQIAAAQIEyiOQN29edfDI4rtykT8SEU87kclyxA+jiA8M7p340xOp41sCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAisREAAwErUfEOAAAECBAgQIECAAAECBAgQIFAqgbmR6utyTjeliPUnMlhO8UhE/uRSJd9w+tTUgROp5VsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgsV0AAwHLF/J4AAQIECBAgQIAAAQIECBAgQKB0AodGqr+1lNMNEXHOiQ6XI/5H0VNsWz819ZcnWsv3BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWI6AAIDlaPktAQIECBAgQIAAAQIECBAgQIBAKQVmh6svSpGuj4jzTnTAHPn+lNK1i4dPvuP0B3746InW8z0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTYfWpPAAAgAElEQVQIECBAgAABAgQIECBAgAABAgSOV0AAwPFK+R0BAgQIECBAgAABAgQIECBAgEBpBWaHqs97/H/aj4jfrM+Q6b9Uepa2909N/U196qlCgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBYwsIADi2kV8QIECAAAECBAgQIECAAAECBAiUXOCBs6ubenvSjhzxmnqMmiJqS0W+YnDv5JdSxFI9aqpBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBYwkIADiWkD8nQIAAAQIECBAgQIAAAQIECBAovcDD1ergkcX04RTx9noMmyMeSzluXLXY84ln3HvXfD1qqkGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFjCQgAOJaQPydAgAABAgQIECBAgAABAgQIECi9QN6ypW9u/uHtKfIHIqKnTgN/KXJsH5iZ+HGd6ilDgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBpxQQAOCBECBAgAABAgQIECBAgAABAgQIdITA/PDoJTniwxHxjDot9OMUxXv7a1NfTxFLdaqpDAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJ5UQACAx0GAAAECBAgQIECAAAECBAgQINARAvNDY2/OKXZE5NPrsVCOOJwif7gnFj95Wq32k3rUVIMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJPJSAAwPsgQIAAAQIECBAgQIAAAQIECBDoCIHZ4dHXRMTOFLGxXguliM/1LOXta+6ZnKpXTXUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDwZAICALwNAgQIECBAgAABAgQIECBAgACBjhA4OFL9V0UR10ZKz63XQjnihznFxYPTE3+RIop61VWHAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECTyQgAMC7IECAAAECBAgQIECAAAECBAgQ6AiBuaFzXpJTcV2K+NV6LZQjHk0pXZlXpU8P3n33w/Wqqw4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeSEAAgHdBgAABAgQIECBAgAABAgQIECDQEQJzw6PnRaTrIvKL67lQiviPJ/fmq06ZnNxXz7pqESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4OcFBAB4EwQIECBAgAABAgQIECBAgAABAh0hcP/Zm57b01u5PuW4oL4L5V1FpDcP1iZ+kCJyfWurRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgf8vIADAayBAgAABAgQIECBAgAABAgQIEOgIgUMjzx5azAs3pEivrPNCh1OR39B/6qo/Sbt3H61zbeUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDw/wQEAHgMBAgQIECAAAECBAgQIECAAAECHSHwcLU6eHQx3ZAj/l29F0opbuo72nP9M+69a77etdUjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA/xUQAOAtECBAgAABAgQIECBAgAABAgQIdITA/jO2nLKq78EbIqV3RkRd/94rR/5qT6V4W/+ePXs7AssSBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUUqCu/xC6lBsaigABAgQIECBAgAABAgQIECBAoCsEckSaG65eHZGuSBEn13fpVOvJxW//3szkDz4UUdS3tmoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4PwICALwEAgQIECBAgAABAgQIECBAgACBjhGYHRq7LKW8LSL667xUThEXPRQLd47UakfqXFs5AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI/J2AAAAPgQABAgQIECBAgAABAgQIECBAoGME5odH35pzXBUpzqz3Uinnj6WeYkf/nj0P1ru2egQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHhcQACAd0CAAAECBAgQIECAAAECBAgQINAxAgc3Vl9bFOmaiNjUgKW+VcTCq9fVavc3oLaSBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEADgDRAgQIAAAQIECBAgQIAAAQIECHSOwNzQ2IWR8s6I2NyAre45qcgvO3Xv5I9TRG5AfSUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOhygdTl+1ufAAECBAgQIECAAAECBAgQIECggwQODI29vCflj+SIX2rEWktFesO6wdV3pl27FhpRX00CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBLpbQABAd9/f9gQIECBAgAABAgQIECBAgACBjhKYGzrnJZGK6yPi+Y1YLKf8sYXHDl91xv79hxtRX00CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBLpbQABAd9/f9gQIECBAgAABAgQIECBAgACBjhKYH9r0gqKSbkg5/dNGLJYi/luqLL2yf8+eBxtRX00CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBLpbQABAd9/f9gQIECBAgAABAgQIECBAgACBjhKY3bBpS1QqN6WIFzVmsXRfTunFg9N3j0dEbkwPVQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6FYBAQDdenl7EyBAgAABAgQIECBAgAABAgQ6UGB+Q/U5uZJujojzG7VezvHagZmJz6WIolE91CVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoDsFBAB0591tTYAAAQIECBAgQIAAAQIECBDoSIGfnF3dtNCbfi/luKBRC6YcN/XPTFyZIpYa1UNdAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgS6U0AAQHfe3dYECBAgQIAAAQIECBAgQIAAgY4UmK9Wz8qL6ZaIuLBhC6b4xtr+Z/zLtGvXQsN6KEyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQFcKCADoyrNbmgABAgQIECBAgAABAgQIECDQmQIPjY0NPHa0uC1FemUDN5xf6s3nrZ+cnGpgD6UJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOhCAQEAXXh0KxMgQIAAAQIECBAgQIAAAQIEOlXgroFzVg88Pd8eKb+ukTvmSK8ZrI1/rpE91CZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoPsEBAB0381tTIAAAQIECBAgQIAAAQIECBDoWIHvbtnSN3Lw4dtyzhdFRKVRi+acPzY4M3l5o+qrS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAdwoIAOjOu9uaAAECBAgQIECAAAECBAgQINCRAjkizQ+Pfjwi3hERqxq1ZI741mBt4kWNqq8uAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLdKSAAoDvvbmsCBAgQIECAAAECBAgQIECAQMcKzA2PXReRL46IpzdqyRzp0VxZ/OV1e/ZMNKqHugQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIdJ+AAIDuu7mNCRAgQIAAAQIECBAgQIAAAQIdLTA3NLojUlwSEasbuWiR8qvWTU/+USN7qE2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHcJCADornvblgABAgQIECBAgAABAgQIECDQ8QIHRka3V3J6b0Q+rZHLphQ3rZ2eeF8je6hNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEB3CQgA6K5725YAAQIECBAgQIAAAQIECBAg0PECc0Nj2yLlyyKiv5HLViL9WX9t/CWN7KE2AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLdJSAAoLvubVsCBAgQIECAAAECBAgQIECAQMcLzA2PXRmRL4+ItY1cNud49Gmr4vmrJyZ+3Mg+ahMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0D0CAgC659Y2JUCAAAECBAgQIECAAAECBAh0hcDsyOjlKcf7ImJdgxdeWIriletrU19ucB/lCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoEgEBAF1yaGsSIECAAAECBAgQIECAAAECBLpFYH5k7LKc8xWNDgBIKS0WRb5ucGbiqm6xtScBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAo0VEADQWF/VCRAgQIAAAQIECBAgQIAAAQIEmiwwP1y9NEd6f0Ssb3DrIkX6Yn9t/FUpIje4l/IECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHSBgACALjiyFQkQIECAAAECBAgQIECAAAEC3SQwPzx6SY58ZUQ6vcF750jpb1JP8c/WTk4+1OBeyhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0AUCAgC64MhWJECAAAECBAgQIECAAAECBAh0k8DcyOjFkWNrRDyr0XunSIeKpcXzB+/Z891G91KfAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHOFxAA0Pk3tiEBAgQIECBAgAABAgQIECBAoKsE5obGfjelvDVHnNmExR+uRLytvzZxZxN6aUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQIcLCADo8ANbjwABAgQIECBAgAABAgQIECDQbQJzw9V3RErbIsdZjd49R/w0In90sDZ5TaN7qU+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQOcLCADo/BvbkAABAgQIECBAgAABAgQIECDQVQKzw6NvSxEfiIizm7D4Qo7444HaxOtSRG5CPy0IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOhgAQEAHXxcqxEgQIAAAQIECBAgQIAAAQIEulFgfmTsLTnn7RGxoQn7FxH5+32LR85/5r59B5vQTwsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDpYQABABx/XagQIECBAgAABAgQIECBAgACBbhSYHzrnopzyByPyUJP2vzcq6cKBPePfaVI/bQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6FABAQAdelhrESBAgAABAgQIECBAgAABAgS6VWB+ePSNOeKqiBhuhkGOmM2RLl5XG/98M/rpQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA5woIAOjc29qMAAECBAgQIECAAAECBAgQINCVAgeGqhdVUnwwIg01CeDByHHjwMzER5rUTxsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDpUQABAhx7WWgQIECBAgAABAgQIECBAgACBbhU4ODz6thzxgRxxdjMMcsSRFPG5gdrEG5vRTw8CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDpXQABA597WZgQIECBAgAABAgQIECBAgACBrhSYGxl7V+S8NSLOaBJAERHfWewpfuv0qakDTeqpDQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECHSggAKADj2olAgQIECBAgAABAgQIECBAgEA3C8wPVy/Nkd4fEeub6DARKb1uYHr8203sqRUBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAh0mIACgww5qHQIECBAgQIAAAQIECBAgQIBAtwvMDY9eERGXR8Rg0yxy7CtSunxdbfzzTeupEQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECHScgAKDjTmohAgQIECBAgAABAgQIECBAgEB3C8wNVbdFSpdFRH8TJeaLSDetq41f38SeWhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0GECAgA67KDWIUCAAAECBAgQIECAAAECBAh0u8DscPXqFOnSiHhmEy0Op4jPrK1NvL2JPbUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDDBAQAdNhBrUOAAAECBAgQIECAAAECBAgQ6HaBuaHRnZHi3RGxuokWRY74ixx9r1pX231/E/tqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBABwkIAOigY1qFAAECBAgQIECAAAECBAgQIEAgYm549PqIuDgiTmmuR/pRpHjzwPT4t5vbVzcCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDpFQABAp1zSHgQIECBAgAABAgQIECBAgAABAn8nMDsy9rHI+XdTxEnNJEkRe6LI71+7d/ILzeyrFwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECnSMgAKBzbmkTAgQIECBAgAABAgQIECBAgACBiJgbGr0lUrw9IvqaDPJATunGwenxjzW5r3YECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHSIgACADjmkNQgQIECAAAECBAgQIECAAAECBCJyRJofHr09It4aEZWmmqR4JIr8n2ozz3zvr8Suhab21owAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgY4QEADQEWe0BAECBAgQIECAAAECBAgQIECAwOMCOaIyNzL2Bynni5otkiKWIsdXVx0p3rT6gakDze6vHwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7S8gAKD9b2gDAgQIECBAgAABAgQIECBAgACBvxfIW7b0zc8/9MmIeGNrUNJfpaJ469q9k3/bmv66EiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQzgICANr5emYnQIAAAQIECBAgQIAAAQIECBD4GYGfbNhw2lLlpNtzxKtbQ5N/FEV678Deif/emv66EiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQzgICANr5emYnQIAAAQIECBAgQIAAAQIECBD4GYG5s8bOjN58a0Rc2AqaHLEncr5qcGbys63orycBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0tIACgve9negIECBAgQIAAAQIECBAgQIAAgX8gcOCsTdWevsonco4LWgOT708RH11bm/xEa/rrSoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAOwsIAGjn65mdAAECBAgQIECAAAECBAgQIEDgZwQObjz3F4qlpZsjxW+0iOahiHzbQG1yW4v6a0uAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBsLCABo4+MZnQABAgQIECBAgAABAgQIECBA4GcF5kbGfjXlfGOOeGGLbJYipzuLw73vWDe7+5EWzaAtAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJtKiAAoE0PZ2wCBAgQIECAAAECBAgQIECAAIF/LDA7XP31SqTrc8SvtconRf7K0eh957Nqd9VaNYO+BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAi0p4AAgPa8m6kJECBAgAABAgQIECBAgAABAgSeQODA8KaXVaJybUT8cquAUsSf9xTFpWv2Tu1q1Qz6EiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQngICANrzbqYmQIAAAQIECBAgQIAAAQIECBB4AoG5obELI+UdEfGcVgHliP9ViZ4r19bu+lqrZtCXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIH2FBAA0J53MzUBAgQIECBAgAABAgQIECBAgMATCMwOjf5OVOKalKPaMqAckznyhwZnJj/bshk0JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgLQUEALTl2QxNgAABAgQIECBAgAABAgQIECDwRAIHRqoXVXK6KiI2tE4o3R+RrxuoTdzSuhl0JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgHQUEALTj1cxMgAABAgQIECBAgAABAgQIECDwhAJzI5velXPaniKtbxVRjni0kuPmtTMTjwcR+I8AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLHLSAA4Lip/JAAAQIECBAgQIAAAQIECBAgQKDsArMjo+9LOW2NyKe1ctac0x8eWeq95Ox9uw+2cg69CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBoLwEBAO11L9MSIECAAAECBAgQIECAAAECBAg8hcDscPXqFOmKiDillVA58p/kxXzZun1Tk62cQ28CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNpLQABAe93LtAQIECBAgAABAgQIECBAgAABAk8ikCMqB4fHbsqRL209Uv5mb5GvWLN3alfrZzEBAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtIiAAoF0uZU4CBAgQIECAAAECBAgQIECAAIGnFDg0PLymSKtuzDm/uQRU30uRt62tTX6tBLMYgQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBNhEQANAmhzImAQIECBAgQIAAAQIECBAgQIDAUwvMb9p0dixVbsgRr265VY7JnOKqwdrEnS2fxQAECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLSNgACAtjmVQQkQIECAAAECBAgQIECAAAECBJ5KYH5DdXPRkz6acryiBFIHIqcPD8yM31aCWYxAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECbCAgAaJNDGZMAAQIECBAgQIAAAQIECBAgQOCpBeaGR8+LSNdF5BeXwOpI5LjpUF/eOTo5+VgJ5jECAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJtICAAoA2OZEQCBAgQIECAAAECBAgQIECAAIFjC8xtHP2NKOLaiHj+sX/dlF/ccVJPsXX11NSBpnTThAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJw1IKwAACAASURBVCBAgACBthcQAND2J7QAAQIECBAgQIAAAQIECBAgQIDA4wJzQ2MXppR35ojNZRBJKb5YpKVtg3v2jJdhHjMQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFB+AQEA5b+RCQkQIECAAAECBAgQIECAAAECBI5DYG6k+vrIaWdEbDiOnzf8JynFN3KkbQPT499ueDMNCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoCAEBAB1xRksQIECAAAECBAgQIECAAAECBAjMjYxeHDl2RMQzS6Lx/SKKbetqU18tyTzGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg5AICAEp+IOMRIECAAAECBAgQIECAAAECBAgcWyBv2dI3N//wByqRt+WIvmN/0fhf5IipSspb105P/nHju+lAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAnCAgA6IQr2oEAAQIECBAgQIAAAQIECBAg0OUCh4aH1yxF34ci4t0RUZa/87ovIm0dqI1/usvPY30CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBI5ToCz/GPo4x/UzAgQIECBAgAABAgQIECBAgAABAv9YYG5s7Mw4mndExBtL5PNg5LxtYGby9hLNZBQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEosIACgxMcxGgECBAgQIECAAAECBAgQIECAwPEJzI6cc06KYmfk+DfH90UTfpVjsYi45sDT+2547u7dR5vQUQsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBNpcQABAmx/Q+AQIECBAgAABAgQIECBAgAABAhE/Gao+bzGlayPiN8vkkXPc1NOztLN/z54HyzSXWQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKKeAAIBy3sVUBAgQIECAAAECBAgQIECAAAECyxA4NDL6wiKn63LkFyzjs8b/NKXbl2Lhw+unpx9ofDMdCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBodwEBAO1+QfMTIECAAAECBAgQIECAAAECBAjEwY2jryiKuCEinl0qjpw+0xvp6jUzd0+Xai7DECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQSgEBAKU8i6EIECBAgAABAgQIECBAgAABAgSWIzA3Un1d5MqNEfn05XzXhN/+55OKvH313sndTeilBQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECbS4gAKDND2h8AgQIECBAgAABAgQIECBAgEC3C0wPDz/t1NR3ceTYkSJOKpnH1/NSZdvgPXd/t2RzGYcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIKCAAo4VGMRIAAAQIECBAgQIAAAQIECBAgcPwC91Wrg6sWK1tz5EuP/6um/fJ/VlJ6f//0+J83raNGBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAi0rYAAgLY9ncEJECBAgAABAgQIECBAgAABAgQeF/jJhtGNiyl9KFJ+fflE8o+WIt63vjb5tfLNZiICBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMomIACgbBcxDwECBAgQIECAAAECBAgQIECAwLIEDo2M/ZMi52tzxMuX9WETfpwi9uRIlw3Uxr/chHZaECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQ5gICANr8gMYnQIAAAQIECBAgQIAAAQIECHS7wIGRsX9eyfnGiDivhBYHKhHv6a9N3FnC2YxEgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDJBAQAlOwgxiFAgAABAgQIECBAgAABAgQIEFiewIGhsZenlG9JEZuW92Uzfp0P50iXDtQmPpUiimZ01IMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgfYVEADQvrczOQECBAgQIECAAAECBAgQIECg6wVyRM/8yNjvRM63RMSaEoIUlcjbHl08csvZ+/b9tITzGYkAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIJCAAo0TGMQoAAAQIECBAgQIAAAQIECBAgsDyBvHnzqfOHj74rIu2MiJ7lfd2sX+freoujN67Zu/dQszrqQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAewoIAGjPu5maAAECBAgQIECAAAECBAgQIEAgIg4MD5+eou/9KeI9pQXJ+fdzLFw7ODNzX2lnNBgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqUQEABQijMYggABAgQIECBAgAABAgQIECBAYCUCD5xd3dTTm66JHK9dyfdN+ubTvblyzZqZu6eb1E8bAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTaVEAAQJseztgECBAgQIAAAQIECBAgQIAAAQIRB0fO+cUiFzdGxPkl9vhS5Ng+MDPx4xLPaDQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEogIACgBEcwAgECBAgQIECAAAECBAgQIECAwMoE5oc2vSBS5bYc8Usrq9CUr76ec75ycGbye03ppgkBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAm0rIACgbU9ncAIECBAgQIAAAQIECBAgQIBAdwv8UUTPi0eqF6Sc/iAi1pdY46+XcnHZ+pmpvyrxjEYjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAEAgIASnAEIxAgQIAAAQIECBAgQIAAAQIECCxfIG/efOrc4aNvSZFujIie5Vdo2hd/G7ny7oGZu7/ZtI4aESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQlgICANrybIYmQIAAAQIECBAgQIAAAQIECBC4f9Omdb1Llcsi4oqSa+zPKb99cHryv5Z8TuMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBiAQEALT6A9gQIECBAgAABAgQIECBA4H+zc+fRdZ/lncCf915JThxIiCU5QXEs2ZZsx8PSqctQppQGugEtpS3QaSG0JU2HNSSBJGRPSEIIk4V0SFgKlJatlALdgJmhzGk6FBjKUgaGJJautTiOS2xJdkJIbEv3vnPock4Pk8XWvbq6v/v7/P97lu/n9V/3yA8BAgSWJnBgdHTT4kJcHym9eGkd2lWV5iPHWQMz43/WronmECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQTAEHAIr5brYmQIAAAQIECBAgQIAAAQIECJReYP+GzU9t5PzuHPHjHY7xvdTIZ/bvqn2iw/e0HgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECKyzgAMAKP4DxBAgQIECAAAECBAgQIECAAAECSxOYX7/lJxqVxp9ExClL69CeqhxxKCL99uD0+MfaM9EUAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSKKuAAQFFfzt4ECBAgQIAAAQIECBAgQIAAgRIL3L1u3bGre1e/LOf8+xHR2b9x5VyPHK/o31X7cIrIJX420QkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeAyBzv7jaM9HgAABAgQIECBAgAABAgQIECBA4GEEdp+ytf+Ynvp5keLSIgClnH73WzNDf/jsuH2xCPvakQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBlRFwAGBl3E0lQIAAAQIECBAgQIAAAQIECBBoQmDulNF1uSeui5Re3kSb9pXm/Nr9vfH+sVrtUPuGmkSAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQNEEHAAo2ovZlwABAgQIECBAgAABAgQIECBAIPZu3DiWGtX3pYhnFYEjRz5vYPHge9Lu3Q8VYV87EiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwMgIOAKyMu6kECBAgQIAAAQIECBAgQIAAAQJLFMgRaXbjlu2pUf9ERBpeYpu2llVSXLh4bO+71t5xxwNtHWwYAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFEnAAoFDPZVkCBAgQIECAAAECBAgQIECAAIG8bVvf/AP1X2pUGh9OEasKIZLiskqq37pmcvK+QuxrSQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEVkTAAYAVYTeUAAECBAgQIECAAAECBAgQIEBgqQJzo6PH58XKayPydUvt0e66HOnqg4s9v3fq7jvm2z3bPAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEiiPgAEBx3sqmBAgQIECAAAECBAgQIECAAAECEfG90dHBQwvp+khxZnFA8vULPXHzE2u1fcXZ2aYECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLRbwAGAdoubR4AAAQIECBAgQIAAAQIECBAg0JTA3KZNpzYW0x+nlH6iqUZtLE4p37QY9RtOmpq6t41jjSJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoGACDgAU7MGsS4AAAQIECBAgQIAAAQIECBAos8DHI6o/PTz6Hxop/UWKGCyMRY535Ebl+sG7d+wpzM4WJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg7QIOALSd3EACBAgQIECAAAECBAgQIECAAIGlCkyNjBzzuNx3Rkr5PRFRWWqfFah7d+rJb+mv1XavwGwjCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoiIADAAV5KGsSIECAAAECBAgQIECAAAECBAhE7Nuy5fFxKL85RT6vYB5/UE09V584dedMwfa2LgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECbRRwAKCN2EYRIECAAAECBAgQIECAAAECBAg0J7D7lK39q3oXP5wiPbe5Tm2uzvlDizlddfKuick2TzaOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIECCTgAUKDHsioBAgQIECBAgAABAgQIECBAoMwCOSLt2bBl86pc/1xEWl8kixz5T3KlcfnaycmJIu1tVwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE2ivgAEB7vU0jQIAAAQIECBAgQIAAAQIECBBYokCOqM4Nb/6lSI0/jUjVJbZZkbIU8alGqlwyOLVjx4osYCgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUQcACgEM9kSQIECBAgQIAAAQIECBAgQIAAgbxtW9/sA4sXpUp+c+E0cnw65fym/l21Owq3u4UJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGibgAMAbaM2iAABAgQIECBAgAABAgQIECBAoBmBu9etO3Z1zzF/lCO9pJk+K1T7ucVK/fyTJye/vULzjSVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoAACDgAU4JGsSIAAAQIECBAgQIAAAQIECBAgEHHXwJbHDzyu8ZWIOK14Hvlvqqly3olT4/+neLvbmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBdgk4ANAuaXMIECBAgAABAgQIECBAgAABAgSaEti7YexZlRx/21STFSrOOX8xIl4/OFP7xgqtYCwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgUQcACgAI9kRQIECBAgQIAAAQIECBAgQIAAgYh9I2OvTBHvLqJFjvhCzvmctTO1fyji/nYmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKA9Ag4AtMfZFAIECBAgQIAAAQIECBAgQIAAgSYF5kbG3p8jzmyyzYqUp4gvVHI+50QHAFbE31ACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECRRFwAKAoL2VPAgQIECBAgAABAgQIECBAgECJBfLQ9tWzffd/KUU8tYgMKae/a0TjnMGZ2jeKuL+dCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBoj4ADAO1xNoUAAQIECBAgQIAAAQIECBAgQKAJgfmNm5+ZG/l/5oi+JtqsZOntjYjz1k5PfHMllzCbAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHOFnAAoLPfx3YECBAgQIAAAQIECBAgQIAAAQIRsW947IKU4r8UFiPF5+tReeNJUzu+VdgMFidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYNkFHABYdmIDCBAgQIAAAQIECBAgQIAAAQIEmhHIEZX5kbE/zRG/2kyflaxNkf5bNBoX9O+qfWcl9zCbAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHOFnAAoLPfx3YECBAgQIAAAQIECBAgQIAAgdILzK7bfEr05K9ExCkFxviryPGmgZmJOwucweoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCyzgAMAywysPQECBAgQIECAAAECBAgQIECAQHMC+0c2/XI9Kn/WXJeVrU4Rn2qkyiWDUzt2rOwmphMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0MkCDgB08uvYjQABAgQIECBAgAABAgQIECBAIGZHRq+LSBcXmSJF+ni9snjZ2snJiSLnsDsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAssr4ADA8vrqToAAAQIECBAgQIAAAQIECBAg0ITAnqHtq/tW3f+XkeOnm2iz4qU54qONer7ipLtrO1d8GQsQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCxAg4AdOzTWIwAAQIECBAgQIAAAQIECBAgQGD/hs1PXcz5cylibcE1/mgxV9588syOqYLnsD4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsso4ADAMuJqTYAAAQIECBAgQIAAAQIECBAg0JzA3PDomTml2yLimOY6rWx1zun9C5WFa4ampmZWdhPTCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoZAEHADr5dexGgAABAgQIECBAgAABAgQIECi5wN7hzbdVUv7diOgtOMW700J+S/89td0Fz2F9AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSWUcABgGXE1ZoAAQIECBAgQIAAAQIECBAgQGDpAt/dtGltT7366Yi8PSIqS+/UAZUp35oXq28dvHvHng7YxgoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHSogAMAHfow1iJAgAABAgQIECBAgAABAgQIlF1gdtOm50S98scRsbboFjnyLTkW37Z2evq7Rc9ifwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIElk/AAYDls9WZAAECBAgQIECAAAECBAgQIECgCYF9G8bOTzmuiIjHN9GmI0pTjhsWeho3nrxz596OWMgSBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh0pIADAB35LJYiQIAAAQIECBAgQIAAAQIECJRbIG/f3js3d99HUqQX5oi+4mvkt/Ydrtx8/J7x2eJnkYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgeUScABguWT1JUCAAAECBAgQIECAAAECBAgQWLLA7MjY0yPi4xGxfslNOqgwRbq6Z/HB3zth9+75DlrLKgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIdJiAAwAd9iDWIUCAAAECBAgQIECAAAECBAgQiJgfGXtVznFNTjHQDR4pxxWVtPCOE6enD3RDHhkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgeAQcAlsdVVwIECBAgQIAAAQIECBAgQIAAgSUK5G3b+ua/v3hbTvmlEbF6iW06qqwR6ZL7ehq3jdVq93fUYpYhQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCjBBwA6KjnsAwBAgQIECBAgAABAgQIECBAgMD+DZufupjzB1PEkyOiK36/yikuqD947LtOvvdb3/fCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQeCSBrvgDas9LgAABAgQIECBAgAABAgQIECDQPQKzG0ZfHpGuixzruiVVjnzewcWD7zl19+6HuiWTHAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQItF7AAYDWm+pIgAABAgQIECBAgAABAgQIECCwRIGPR1SfMzJ2c85xZkrxuCW26byynF63v7fxvrFa7VDnLWcjAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQ6RcABgE55CXsQIECAAAECBAgQIECAAAECBAjE/NDG9fXeykdTSv8xIrrlt6t6yvk/f2um9sFnRyx6ZgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDySQLf8EbUXJkCAAAECBAgQIECAAAECBAgQ6AKBueGxF+VKXB85Rrsgzr9GuL+RKr87OLXjT1NE7qJcohAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0GIBBwBaDKodAQIECBAgQIAAAQIECBAgQIDA0gTy6Oiq+cXKJRH5tTmif2ldOrJqT6USr1wzOfHpjtzOUgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIdIyAAwAd8xQWIUCAAAECBAgQIECAAAECBAiUW+DA+rGNi5W4JUU8N0f0dpHGjmjE6wZ2TXy+izKJQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAMgg4ALAMqFoSIECAAAECBAgQIECAAAECBAgcvcDe4c3Pr0R+W6R40tFXd3BFjq83Kum8tVPjX+jgLa1GgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAHCDgA0AGPYAUCBAgQIECAAAECBAgQIECAAIGIvcNjl1ZTnJcj+rvM4/aopAsHJse/2mW5ukvfVAAAIABJREFUxCFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoMUCDgC0GFQ7AgQIECBAgAABAgQIECBAgACBoxfYP7J1pB71m1PEL+WI6tF36OCKHJ+uVKuXrJm869sdvKXVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoAAEHADrgEaxAgAABAgQIECBAgAABAgQIECi7wPzw5ufllK/LET/SbRY54mNRqV85ODk53m3Z5CFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoLUCDgC01lM3AgQIECBAgAABAgQIECBAgACBoxTYMzS0uq9v9TkR6byIGDzK8o7/POX83lRtXLtmcnJXxy9rQQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEVlTAAYAV5TecAAECBAgQIECAAAECBAgQIEBgdnjstEjprRH5BRFR6TaRHPnt9Wq+/uSdO/d2WzZ5CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBorYADAK311I0AAQIECBAgQIAAAQIECBAgQOAoBeY3jv1izuktOeenHGVpIT5Pka6OnsZN/bXa/YVY2JIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECKyYgAMAK0ZvMAECBAgQIECAAAECBAgQIECAwM6NG084vtFzXop8bkSc0IUiOaW4cL6a3zFWqx3qwnwiESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQQgEHAFqIqRUBAgQIECBAgAABAgQIECBAgMDRCdy7YcNTKo2e61KKXzi6yoJ8neOBlOL1/dMTHyjIxtYkQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAFBRwAWEF8owkQIECAAAECBAgQIECAAAECZRa4KqLyupEtL8jReGuKOK1LLe6tRDp3zfT4x7o0n1gECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLRQwAGAFmJqRYAAAQIECBAgQIAAAQIECBAgcOQC9w9tHjjc13hDjjgnRVp95JXF+TJHTKaovGFgesdfFGdrmxIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFICDgCslLy5BAgQIECAAAECBAgQIECAAIGSC+wdGfuRasRbcsTzu5cifzulOL9/qva57s0oGQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECrRJwAKBVkvoQIECAAAECBAgQIECAAAECBAgcsUCO03vmh+95YSPF21LEpiMuLN6HX66k9KY1U+NfKN7qNiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoN0CDgC0W9w8AgQIECBAgAABAgQIECBAgACB2DsycnLKPedXUjo7R/R1LUmKz0dKlwxMjn+1azMKRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAywQcAGgZpUYECBAgQIAAAQIECBAgQIAAAQJHKrBv/abtqVK5MSJOP9KaYn6X/qJSrV+2ZufO/1vM/W1NgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEA7BRwAaKe2WQQIECBAgAABAgQIECBAgAABApFHRo6Zi95fj4ibImJNN5PkiD/O1cYVa3furHVzTtkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGiNgAMArXHUhQABAgQIECBAgAABAgQIECBA4AgF5jduXJ9z5fKc01lHWFLYz1LE7zfqlTcP3r1jT2FDWJwAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbYJOADQNmqDCBAgQIAAAQIECBAgQIAAAQIEckTaO7zpGdVUeW9EbOt2kZTSzZV8+JoTp6cPdHtW+QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaF7AAYDmDXUgQIAAAQIECBAgQIAAAQIECBA4QoG50dHjYyHOyildHxG9R1hW1M8ORY5r+nvzjalWO1TUEPYmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKB9Ag4AtM/aJAIECBAgQIAAAQIECBAgQIBA6QUODG/ZsJjy2yPyC0uAsTendNnA1Pj7UkQuQV4RCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBoUsABgCYBlRMgQIAAAQIECBAgQIAAAQIECByZQB4dXbV3If1CNcWtEfHEI6sq8ldpPHK+eGBm4lNFTmF3AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTaJ+AAQPusTSJAgAABAgQIECBAgAABAgQIlFpgz9Dmgb6+fFlEnB0RlRJgfKWaKxefOLPjb0qQVUQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBFog4ABACxC1IECAAAECBAgQIECAAAECBAgQeHSBqyIqZ68fPS1X0gci4mll8EqR/ns9Ny5ZO1P7hzLklZEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgeYFHABo3lAHAgQIECBAgAABAgQIECBAgACBxxDI69YdO9e7+syU8805oq8MYDniYz1RvfjE6bumy5BXRgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmhdwAKB5Qx0IECBAgAABAgQIECBAgAABAgQeQ+C+ddvWLPQsvjsiv6QMWCmikVN+1/fy4mUbpqcPlCGzjAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINC/gAEDzhjoQIECAAAECBAgQIECAAAECBAg8ikCOqM5t2vJTUa9/NCKdVBKs+3KOawdnJm4sSV4xCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBogYADAC1A1IIAAQIECBAgQIAAAQIECBAgQOCRBaZGRo45LvqurES+qCxOKWJXRFzVPz3xgbJklpMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgeYFHABo3lAHAgQIECBAgAABAgQIECBAgACBRxHYMzQ00Nd33Kcj4ullgUqRvt1IjcsGp2p/WZbMchIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0LyAAwDNG+pAgAABAgQIECBAgAABAgQIECDwCAI5Is0Nj/1KpPhkmZByjr9r5MpFJ+3a8cUy5ZaVAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHmBBwAaM5PNQECBAgQIECAAAECBAgQIECAwKMI7B3c9rjKcQsfjIhfKRNUjvhsynH+wMzEnWXKLSsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAs0JOADQnJ9qAgQIECBAgAABAgQIECBAgACBRxGYG9n03IjKR3LEmrJApYhGzumjq3rqb3z8zp17y5JbTgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmhdwAKB5Qx0IECBAgAABAgQIECBAgAABAgQeRmBqZOSY42PVLTkarywZ0IM5x20Dx/Velu6443DJsotLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEATAg4ANIGnlAABAgQIECBAgAABAgQIECBA4JEF9q3fuj1VGp+IyCMlc7o3R75+cLp2S8lyi0uAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQJMCDgA0CaicAAECBAgQIECAAAECBAgQIEDg4QXmRjZflSNfWTafnGNnI+erTtpV+3DZsstLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBzAg4ANOenmgABAgQIECBAgAABAgQIECBA4GEEvju8ZUM1NT6VIn6kbEA54puNyBedNF37H2XLLi8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAs0JOADQnJ9qAgQIECBAgAABAgQIECBAgACBhxGYHxl9dSPSLRHRVzagHPGFyPncwZnaN8qWXV4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJoTcACgOT/VBAgQIECAAAECBAgQIECAAAECPySwb3j4iZH63pcinhsRlbIB5YjPLlTqrx6anNxVtuzyEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQnIADAM35qSZAgAABAgQIECBAgAABAgQIEPghgbn1oy/OlXhHRDq5bDgp4nAjpw8drD949qm7dz9UtvzyEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQnIADAM35qSZAgAABAgQIECBAgAABAgQIEPg3AnOjo8dHvXJTI+eXp4hVZcNJkfY3It4xMD1+VYrIZcsvLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECzQk4ANCcn2oCBAgQIECAAAECBAgQIECAAIF/I7BveMuzIzXekyJGI6KMvz3dEzlfNzBTe6d/GAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDhagTL+EfbRGvmeAAECBAgQIECAAAECBAgQIEDgCAX2jWx+c4p8bkQcf4Ql3fbZXRHp4oHp8T/vtmDyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCw/AIOACy/sQkECBAgQIAAAQIECBAgQIAAgVIIHDh1dNNiJT4WKf1oRFRKEfqHQqZIX1qoV1958t13/t8y5peZAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHmBBwAaM5PNQECBAgQIECAAAECBAgQIECAwL8IzI2MnZMjLomItWVESSkt5hyfOdwXZw2Nj8+W0UBmAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaE3AAoDk/1QQIECBAgAABAgQIECBAgAABAhExv3Hrk3OjfmuO+ImIqJYU5b6I9K7+6fFLUkQuqYHYBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0IeAAQBN4SgkQIECAAAECBAgQIECAAAECBP7pf7qn2ZGxV6aIyyLilBKb3JMjrh6cnvj9EhuIToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAEwIOADSBp5QAAQIECBAgQIAAAQIECBAgQCBidmTz1sj5hpTi53JEX4lNdqQUZ/dPTfx1iQ1EJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgCQEHAJrAU0qAAAECBAgQIECAAAECBAgQKLtAjqjOjYy9PEdckSI2lNgjR8RXG4v1M9bunpwosYPoBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0IeAAQBN4SgkQIECAAAECBAgQIECAAAECZRfYu2nTaKpXrk4RvxwRx5bY42Dk/MnvpcWzNkxPHyyxg+gECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDQh4ABAE3hKCRAgQIAAAQIECBAgQIAAAQJlFvja9u29w3P3vzgirkwRW8psEZH354hbBqdrV5fbQXoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJoRcACgGT21BAgQIECAAAECBAgQIECAAIESC+zfsGF4sVG9NEX6jUjxuBJT/CD6PZUcF66ZmfhoyR3EJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgCQEHAJrAU0qAAAECBAgQIECAAAECBAgQKKtAjtN75kb2/GKO/OYU8ZSyOvxr7pyilnKcMTA98ZWyW8hPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMDSBRwAWLqdSgIECBAgQIAAAQIECBAgQIBAaQVm120+JfXk83PEmRFxfGkh/jl4PUV86VBf+tWh8fHZkluIT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAEwIOADSBp5QAAQIECBAgQIAAAQIECBAgUEaBHFGdHxn9mRzpmoh4WhkNfijzgxHxwYHpiVezIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQDMCDgA0o6eWAAECBAgQIECAAAECBAgQIFBCgQdGRk4+GH3nROQf/If3E0pI8MORD+Scrxmcqd3MggABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAs0IOADQjJ5aAgQIECBAgAABAgQIECBAgEDJBHKc3jO3/p7ToxLXRMSPlyz+I8W9NzfirMFdE5/mQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWYEHABoRk8tAQIECBAgQIAAAQIECBAgQKBkAt8fPu2JD6XFcyLi1RFxfMniP1zcHJEmcmXxBYOTk+M8CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0IyAAwDN6KklQIAAAQIECBAgQIAAAQIECJRIIJ9+es/c5J6fSpX8lhzx9BJFf+SoKRZzjs89EAsv2jA9fZAJAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmhFwAKAZPbUECBAgQIAAAQIECBAgQIAAgRIJfH/4tCcerCy+Ied4TUSsLlH0R4t6MKW4tX9q4gIeBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaFbAAYBmBdUTIECAAAECBAgQIECAAAECBEogkLdv753b971nRWq8LVLaXoLIRxYxxQONRj537Uzt/UdW4CsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg8soADAP51ECBAgAABAgQIECBAgAABAgQIPKbA3pGRk6vRc2GO9NqI6HvMgvJ8cKCvJz//+Frty+WJLCkBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAssl4ADAcsnqS4AAAQIECBAgQIAAAQIECBDoEoG8fXvv3OyBn8yp8vYU8ZQuidWKGDlyfKcnH3rWE3bt2t+KhnoQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBuAQcAyv3+0hMgQIAAAQIECBAgQIAAAQIEHlPg/s2bBw4dzpemiNdHROUxC8rzQSMi/VX/9PivpIhcntiSEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwXAIOACyXrL4ECBAgQIAAAQIECBAgQIAAgS4Q+Nr27b2bZh94Zj013hkRW7sgUusipFjMEZcMTk3c0LqmOhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUGYBBwDK/PqyEyBAgAABAgQIECBAgAABAgQeQ2D3KVv7j+lbvDpyeg2s/0/gYI7q8wan77qdDQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBFoh4ABAKxT1IECAAAECBAgQIECAAAECBAh0ocDfRPQ8eePY6ZHjXZFjtAsjNhWpkeJbPan+rDWTk/c11UgxAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE/kXAAQD/FAgQIECAAAECBAgQIECAAAECBB5WYM/Q5oHe3sZbU0pnIXpYgT8cmJ54BRsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAi0SsABgFZJ6kOAAAECBAgQIECAAAECBAgQ6CKBHFGZHdn8aynyTREx1EXRWhnlFQPTE3/YyoZ6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQbgEHAMr9/tITIECAAAECBAgQIECAAAECBB5WYN+pW4ai2nhving+oocVuD8iPX1gevwuPgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGiVgAMArZLUhwABAgQIECBAgAABAgQIECDQJQI5Tu+ZH97z+pzytRFxbJfEam2MFJ/vn5r4uRSRW9tYNwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEyizgAECZX192AgQIECBAgAABAgQIECBAgMDDCNy7YfNTqzl/ICL+PaBHEEhx7cDUxOV8CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0EoBBwBaqakXAQIECBAgQIAAAQIECBAgQKDgAvMbN56QGz1X5sjnFTzKsq2fIg43cvzq4MzEZ5ZtiMYECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJRSwAGAUj670AQIECBAgAABAgQIECBAgACBhxfYt3HsF6MR/zVFbGD0SAJpPOfq6YMzd/4jIwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLRSwAGAVmrqRYAAAQIECBAgQIAAAQIECBAosMD8xo0n1OvVj6QUz4uISoGjLO/qOT7y7ZmJ3352xOLyDtKdAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGyCTgAULYXl5cAAQIECBAgQIAAAQIECBAg8AgCs+tHz4hKujUiToD0KAI5v65/pvauFNHgRIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgVYKOADQSk29CBAgQIAAAQIECBAgQIAAAQIFFbh3w+anVhr51pTiGRFRLWiM5V87xz31SvqFtVPj30oRefkHmkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQJkEHAAo02vLSoAAAQIECBAgQIAAAQIECBB4GIE9Q9tX9/bdd0El0rk54gmQHlkgR/xVTyz85onT0wc4ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoNUCDgC0WlQ/AgQIECBAgAABAgQIECBAgEDBBGbXj/1MVPLNEenfRUSlYOu3d90cl/enhRvT9PTB9g42jQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBMgg4AFCGV5aRAAECBAgQIECAAAECBAgQIPAIAvuGh5+YUt8VEfGyiHg8qEcVmI9G+rX+XeO3p4g6KwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLRawAGAVovqR4AAAQIECBAgQIAAAQIECBAokMDcyOb/1Mj52pRiU0T4rejR3+72hxbTGafuHr+nQE9sVQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIHoESgAAAgAElEQVQECiTgj7oL9FhWJUCAAAECBAgQIECAAAECBAi0UmB2eOy0SPm6iPTciDimlb27sVdK+aaUGtesmZy8rxvzyUSAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwMoLOACw8m9gAwIECBAgQIAAAQIECBAgQIDAigjsGxl7ZYq4NCJOXZEFijV0IUfjNw/0pD8bq9UOFWt12xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUBQBBwCK8lL2JECAAAECBAgQIECAAAECBAi0SCBHpPnhrT+eU/2miHhGi9p2d5uUv1ZfjF8/6e7azu4OKh0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAisp4ADASuqbTYAAAQIECBAgQIAAAQIECBBYAYH71m1bc7hn8fUp8qsjYu0KrFC4kTnn9zYq9ctPmpq6t3DLW5gAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcIIOABQmKeyKAECBAgQIECAAAECBAgQIECgeYEc0bNvePPPViKujpR/rPmOpehwOOd85gNp8ZMbpqcPliKxkAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrIiAAwArwm4oAQIECBAgQIAAAQIECBAgQGBlBA4Mb9mwmBoXRMTLIuL4ldmicFO/0cj5rMGZ2jdTRC7c9hYmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAwAg4AFOapLEqAAAECBAgQIECAAAECBAgQaE4gj4wcM5t7XpRSujQiTmuuW6mqP5B68hX9tdruUqUWlgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtgs4ANB2cgMJECBAgAABAgQIECBAgAABAu0XyBFp/8atT8qNxuUR+YU5oq/9WxRvYk7xQMr5wsbqvg+tveOOB4qXwMYECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBRJwAGAIr2WXQkQIECAAAECBAgQIECAAAECSxTYuXHjCY/PPS+v5nxhjjh1iW3KWPb3CymdffLU+FdTRC4jgMwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLRPwAGA9lmbRIAAAQIECBAgQIAAAQIECBBYEYE8OrpqrpF+Mjfi0hRx+oosUdChKaf3H6pUrxmaunOmoBGsTYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAgQQcACjQY1mVAAECBAgQIECAAAECBAgQILAUgQNjYxsXF+KCiHhpRBy/lB4lrZlPjbh44dD9Hzn53nu/X1IDsQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaKOAAwBtxDaKAAECBAgQIECAAAECBAgQINBugfmNG09o1CtnRCVdFDnWtXt+wed9uZ7zG0+aqX254DmsT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAQQQcACjIQ1mTAAECBAgQIECAAAECBAgQIHC0AhOjo6tOPJx+Mqe4MqV45tHW+z4+UI3q1SdO3zXNggABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0QcACgHcpmECBAgAABAgQIECBAgAABAgTaL5B2j46ecuxiuixHnBERx7V/hUJP3JtyvnRNWvxwmp4+WOgklidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoDACDgAU5qksSoAAAQIECBAgQIAAAQIECBA4coE9Q0Ore1c97mUp57dExOCRV/ryBwIp5S/W642L1u6a/DsiBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJeAAwDtkjaHAAECBAgQIECAAAECBAgQINAmgRyn98yO7H5mirguIj2jTWO7Z0yKxdzIH6hWG9eumZzc1T3BJCFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoNMFHADo9BeyHwECBAgQIECAAAECBAgQIEDgKAXuXrdtzbE9CzdExBkR0XeU5aX/PEdMpZSv6J9a97EUty+WHgQAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJtE3AAoG3UBhEgQIAAAQIECBAgQIAAAQIEll8gR1TnNoy9JnK+PiKtXv6JXTghx+d7qpWLnzC542tdmE4kAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQ6WMABgA5+HKsRIECAAAECBAgQIECAAAECBI5WYO/6zc9M1bgt5fyUo631/T8JfC8i33bwmJ4b19111xwTAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQItFPAAYB2aptFgAABAgQIECBAgAABAgQIEFhGgTwycsxc7nlvpPSyiPC7z9Ksv1OPxmUnTe/886WVqyJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMDSBfwh+NLtVBIgQIAAAQIECBAgQIAAAQIEOkYgR1TmR0ZfnyO9vWOWKt4iOef4TIq4cGBm4s7irW9jAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSKLuAAQNFf0P4ECBAgQIAAAQIECBAgQIBA6QVyRJod2fpTKervjIjTSg+ydIB7c4obD1TzO8ZqtUNLb6OSAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSxNwAGBpbqoIECBAgAABAgQIECBAgAABAh0j8L3R0cGDC+mWSopfzxGVjlmsaIvk+HrKcXH/rom/Ltrq9iVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoDsEHADojneUggABAgQIECBAgAABAgQIECipwJ6hodW9q457bcrx5og4tqQMrYh9KFJ8IlXzRf212u5WNNSDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECRyvgAMDRivmeAAECBAgQIECAAAECBAgQINBBAvMbRl+Qc7omRzw5IiodtFrBVskzKcfV/TO1PyjY4tYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCLBBwA6KLHFIUAAQIECBAgQIAAAQIECBAol8Dsus2nRE9+V4r4+RzRV670LU1bj8j/K+c4f3Cm9o2WdtaMAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECRyHgAMBRYPmUAAECBAgQIECAAAECBAgQINApAvtHRp5Qj55XpZzemFMMdMpeBd1jPiK/J/XE9f212v0FzWBtAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgS6QMABgC54RBEIECBAgAABAgQIECBAgACBcgnkl7ykOvv1bz6v0ojLc44fjRQ95RJoadqcIu6s53TB2pnxz7a0s2YECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBA4SgEHAI4SzOcECBAgQIAAAQIECBAgQIAAgZUWmB3ZvDVHvjwiXpgijlvpfYo8P0c8lHL65DGVhfMfNzV1b5Gz2J0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgeILOABQ/DeUgAABAgQIECBAgAABAgQIECiRwJ6h7at7e+9/Y6Q4O0UMlij68kTNcU+O/KbBmdpHlmeArgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDhyAQcAjtzKlwQIECBAgAABAgQIECBAgACBFRW4e926Y4+rrn52I+WrIuLHIsJvO028SIpYyDn+tt7Irzrp7trOJlopJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQEsE/JF4Sxg1IUCAAAECBAgQIECAAAECBAgsv8Dsxs1PS418USPyc1Ok1cs/sesn3Bc5bvjucb03POmOOw53fVoBCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoeAEHADr+iSxIgAABAgQIECBAgAABAgQIEIi499TRTdWeynkpx0tz5BOZNC2Qc8SOarVy1pqdO77YdDcNCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0AIBBwBagKgFAQIECBAgQIAAAQIECBAgQGA5Bb67adPa3sXKbzZSvCZFjESE33SaBz+YI/5o4fDxbxja8/UHm2+nAwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJoX8MfizRvqQIAAAQIECBAgQIAAAQIECBBYNoE9Q0OrV/Ue97xIcUGktD3n3LNsw8rV+L7IcebAzMSnyhVbWgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEOlnAAYBOfh27ESBAgAABAgQIECBAgAABAqUX2Hfqlh+rVBvX5ojnRERv6UFaA9CInP734YUHfnZoz54HW9NSFwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDQv4ABA84Y6ECBAgAABAgQIECBAgAABAgSWReAfR7aO9KXGJZHzb+WIvmUZUs6mh6OSzhuYHH9nOeNLTYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBApwo4ANCpL2MvAgQIECBAgAABAgQIECBAoNQC95+ytf9wtf47uZLOS5FPLjVGi8PniL+vVBsv7t+58+4Wt9aOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECTQk4ANAUn2ICBAgQIECAAAECBAgQIECAQOsF7l637thje1b/fI58VYp4ausnlLpjrkS6ZM30+PWlVhCeAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGOFHAAoCOfxVIECBAgQIAAAQIECBAgQIBAWQVyRGX/ptO2NeqLN0bEz5fVYbly5xw7Kzm/sH9X7TvLNUNfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFXAAYClyqkjQIAAAQIECBAgQIAAAQIECLRYIEek/Rs3ntqoV6+MFGe2uL12ETkibhiYnngTDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHSigAMAnfgqdiJAgAABAgQIECBAgAABAgRKKXDfum1rFqqLr4rIb4gU/aVEWNbQ6bv1av1FJ+3c+aVlHaM5AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIElijgAMAS4ZQRIECAAAECBAgQIECAAAECBFopkLdt65t/qP7LOTeuiojTWtlbr38WyDm/d2Cm9qoU0WBCgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBThRwAKATX8VOBAgQIECAAAECBAgQIECAQOkE9q3fur1Sqd+cI55VuvBtCJwi5ho5fmtgZuKzKSK3YaQRBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQOGoBBwCOmkwBAQIECBAgQIAAAQIECBAgQKC1Ans2nDbclxevi4iXtrazbv8qkCJ9/P44/MoN09MHqBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBTBRwA6NSXsRcBAgQIECBAgAABAgQIECBQCoGpkZFjjo/et+aI34mIx5cidJtD5oiDEekVAyNDn0i3377Y5vHGESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4IgFHAA4YiofEiBAgAABAgQIECBAgAABAgRaK5BHR1fNLVSeHyn/QUQ8obXddfs3An+bc89vDM7c+Y9UCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0MkCDgB08uvYjQABAgQIECBAgAABAgQIEOhqgdnhTc+JVLk+Ip7W1UFXMFxKMdvIcenBxYc+dOru3Q+t4CpGEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4DEFHAB4TCIfECBAgAABAgQIECBAgAABAgRaLzC/adOTcr1ydU7xgsjR0/oJOv5AIKX4TM7p/P7p8fEU0aBCgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBThZwAKCTX8duBAgQIECAAAECBAgQIECAQFcKzJ0yui564txIcWaOdGJXhuyAUDnHbIp0ZePBng+u3XfHAx2wkhUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDwqAIOAPgHQoAAAQIECBAg8P/Yu/doPc+6Tvjf6372zrGHpGnSNt1Nd5LdNA2lIClQEFgtyCuIOoyMVMADBxn1lSIvJ0EU8YSKMirioVIOHnBEGXiZGRwPIOjMvB6GwqBYSLOT7KRpaY5NTznt/dzXrKCsFx2H1RyevZ/Dp2v1v+e+ru/383tWs7rXvn8hQIAAAQIECMyjQE2aQ+uuem2a+n8n5YokzTxeP1JX1dQ/6jZjr79k5xf+viTtSJVXlgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBgRSwAGAgxyY0AQIECBAgQIAAAQIECBAgMIgCNRk7Mnn1c9q0P16TRyXpDGKPQchcSw6Wmp9omu5vXrRz5/2DkFlGAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIWADgO0CAAAECBAgQIECAAAECBAgQmCeBIxs2PaNb61tqzROTjM/TtaN6zR93kjesmNn+tyVpRxVBbwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBkvAAoDBmpe0BAgQIECAAAECBAgQIECAwIAKHJy86ok1eXNJnp5kyYDWGIjYpeZQm/LT4/X4e1bs2XPfQIQWkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkksAPA1IECAAAECBAgQIECAAAECBAj0WODwxmuubbvd1yX1uUku6PF1jk/+tLbtGy/es+PTJalACBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMCgCFgAMyqTkJECAAAECBAgQIECAAAECBAZS4N4rr17fabqvKLV8e5I1A1ligEKX5HA39ecXzx2/9cK9ew8PUHRRCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgEAsAfAkIECBAgAABAgQIECBAgAABAj0SuGft1mWLFt1/S0l5fU0u6tE1jv2nAn9eUt+wamb6r8AQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBg0AQsABi0iclLgAABAgQIECBAgAABAgQIDITArsnJFcvr2POaUl6T5JqBCD34Ifc1qb/QmVv0rgv33nF48OtoQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAqAlYADBqE9eXAAECBAgQIECAAAECBAgQ6LnAXRMTS5eOLf+/UuoPp9bre36hC04JdGvKn6YpP7J657ZPISFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAgClgAMIhTk5kAAQIECBAgQIAAAQIECBDoW4HPbdmy6JKjJ59cUn40yY19G3TIgpXkrqT+u9K0771o5877h6yeOgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjIiABQAjMmg1CRAgQIAAAQIECBAgQIAAgd4LfGrr1vHJww9+TWr7xlKab6y1jvX+Vjckma3JH9Vaf3TN7unPECFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCgClgAMKiTk5sAAQIECBAgQIAAAQIECBDoK4FPJGOP2bhxc3eu86rS1Oen5vy+CjjcYWaS+ra5Yw/+1qX79j083FW1I0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgmAUsABjm6epGgAABAgQIECBAgAABAgQIzItATZr711012S353lryXUnWzMvFLjklcDwlHy2d+qOrpqf/HgkBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQGWcACgEGenuwECBAgQIAAAQIECBAgQIDAggvUpByYnLykyaIXJ/X7kqxb8FAjFKAmO2utP3X/eN5/1fT0iRGqrioBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkMoYAHAEA5VJQIECBAgQIAAAQIECBAgQGD+BO695LrlnaXHXlRSXpPUTfN3s5uSHC3JR7pz7ZvX7N0xTYQAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKDLmABwKBPUH4CBAgQIECAAAECBAgQIEBgQQUObrjqW9KWtyT10QsaZAQvL8nOtuZHLt69/QMl6Y4ggcoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAyZgAUAQzZQdQgQIECAAAECBAgQIECAAIH5E9h35dSTOqW8M8nj5u9WN50SqMnxpH4k3c6rV9+17R4qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGAYBCwCGYYo6ECBAgAABAgQIECBAgAABAvMucHDyqifW1B8tKc+e98td2CbZ1rb1zWv2TH8QBwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBIZFwAKAYZmkHgQIECBAgAABAgQIECBAgMC8CRye2Pzo7tjcm5Ly3JIsnreLXfRlgQdKzW906om3rtiz5z4sBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGBYBCwCGZZJ6ECBAgAABAgQIECBAgAABAvMicGTdVRvmSnlNKfWFNVkxL5e65CsFukk+VWr76lW7d/x/aAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBMAhYADNM0dSFAgAABAgQIECBAgAABAgR6KlCnphYfnitvq8kLklycxM9Weir+Lx7+YK358YvL7DvLzMzx+b/ejQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOidgF9S752tkwkQIECAAAECBAgQIECAAIEhEtg/ueXSJnMvSeotSS718v+CDLfbJh+rY/X7L5me3rEgCVxKgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBHgpYANBDXEcTIECAAAECBAgQIECAAAECwyHwwNpNF88tqi9tk1ckmfDy/4LN9XiS71s1s/23StIuWAoXEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoEcCFgD0CNaxBAgQIECAAAECBAgQIECAwHAIHFm3bmW3WfRdNXlVUtZ5+X8B51rr+1d1j+k4Z/wAACAASURBVL+87N17bAFTuJoAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQI9E7AAoGe0DiZAgAABAgQIECBAgAABAgQGXeDQ1NQFdS4vqimvK8n6Qe8z2PnLfeNpX3DhzPQfD3YP6QkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPB/FrAAwLeDAAECBAgQIECAAAECBAgQIPAvCJx6+b872/nWUurrS+omSAsqUEvN21ft3v66BU3hcgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECPRYwAKAHgM7ngABAgQIECBAgAABAgQIEBg8gV2Tk0vObxd9a5q8KalXD16DIUtc88XZ8fqYy6anDwxZM3UIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDwTwQsAPCFIECAAAECBAgQIECAAAECBAh8hcD+1VvO6yyfe05S31CTx8JZcIGHS/KmVTPbf2nBkwhAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBHgtYANBjYMcTIECAAAECBAgQIECAAAECgyNQ165ddmh8+bPS1DemlusHJ/nQJm1L6geX1NlXLd+9+4tD21IxAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI/KOABQC+CgQIECBAgAABAgQIECBAgACBJPesXbtsfPGyryu1vDHJDVAWXqAku9pSX3XxrumPlqS78IkkIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQG8FLADora/TCRAgQIAAAQIECBAgQIAAgQEQuGtiYunyRUufXtv8YE2eksTPTBZ4brXmoVLqL696eNFby4E7HlrgOK4nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAvAj4ZfZ5YXYJAQIECBAgQIAAAQIECBAg0K8CuyYnl1yQzo1J53UpeVqtdaxfs45Srpr6Z6Vp3rBq552fLkl3lLrrSoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA6ApYADC6s9ecAAECBAgQIECAAAECBAiMvMDntmxZdOlDs09Lk9cnuTHJ+Mij9AfA3bWUH+seXfK7l+7724f7I5IUBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6L2ABQC9N3YDAQIECBAgQIAAAQIECBAg0IcCNekcmdz81LnMvT4pTy/J4j6MOXKRanKiJO+fq81PXrJ720xJ6sghKEyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwMgKWAAwsqNXnAABAgQIECBAgAABAgQIjK5ATcqB9Zue0qS+PjXPSLJ0dDX6rHnN7W3Km1ePtx8v09Mn+iydOAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOipgAUAPeV1OAECBAgQIECAAAECBAgQINCPAocmp26oad5QU59ZkmX9mHFEM+1PyS8v7tRbz5+ePjCiBmoTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDDCAhYAjPDwVSdAgAABAgQIECBAgAABAqMocGDD5k2l7f5GkuuTLB9Fg77tXPOhNvUn/373xN/dlE/O9W1OwQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINAjAQsAegTrWAIECBAgQIAAAQIECBAgQKD/BI5s3Lh1dq7zqpL2BSml038JRzrRF0qpb36gzv2n9TMzx0daQnkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEZWwAKAkR294gQIECBAgAABAgQIECBAYLQE7pu86rHdktem5puTnD9a7fu+7eFa63s7nfYdF+3cuafv0wpIgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBHglYANAjWMcSIECAAAECBAgQIECAAAEC/SNwZOPGrXNz5QdSyqmX/y/sn2SSnBKoKZ/oNHnzZ3fe+Vc3JXNUCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMKoCFgCM6uT1JkCAAAECBAgQIECAAAECIyJwaHLqhiSvrilfn+T8JH4e0l+z357krcfmjn3gir17j/VXNGkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwvwJ+4X1+vd1GgAABAgQIECBAgAABAgQIzKPA/vWbntrU+rqaPL0ky+fxalc9MoEHavLvu23edume7Tsf2SM+RYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgeEVsABgeGerGQECBAgQIECAAAECBAgQGGmBA5NTN5aUH0ry1CRLRhqjT8uX5K+b1DesnJn+ZJ9GFIsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLzKmABwLxyu4wAAQIECBAgQIAAAQIECBDotUBNOvvXTz2jU8sbkzw5yaJe3+n80xcoyUyt9edWlbn3lJmZ46d/gicIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwfAIWAAzfTDUiQIAAAQIECBAgQIAAAQIjK1C3bFl03/HZZ9ZufWNNeWJKxkYWo5+LlzzUtOXD3c7cT67eufPOfo4qGwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOZTwAKA+dR2FwECBAgQIECAAAECBAgQINATgZqUfZdct2xsybGvLyU/mOT6mjQ9ucyhZyvQTfI/S+qbVs1M//HZHuZ5AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDJOABQDDNE1dCBAgQIAAAQIECBAgQIDACAqcevn//nWPXjFbjj87Ja8pyeNGkGFQKtfU3F2Td9Tl47+25o47HhqU4HISIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgPgQsAJgPZXcQIECAAAECBAgQIECAAAECPRGoSbNv48aLx7vNc5K8siaP7clFDj0nAjU5Wmo+XJvmJ1bv2rbtnBzqEAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAyRgAUAQzRMVQgQIECAAAECBAgQIECAwCgJnHr5/+AVV19aOt1/leT7kvLoUeo/aF1LKXO11k+ntm+8ePeOPxu0/PISIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgPgQsAJgPZXcQIECAAAECBAgQIECAAAEC51Tg1Mv/923YMFHb5nk15eVJrjmnFzjsXAvUpO7pJj+7ZizvKdPTJ871Bc4jQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAMAhYADAMU9SBAAECBAgQIECAAAECBAiMkMCpl//3rbtqsinl20ppX1xSrhqh+oNa9WRqfdfxufzMxN3Tewe1hNwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDotYAFAL0Wdj4BAgQIECBAgAABAgQIECBwzgRqUg5s2DDV6Xa+IyXfXpP15+xwB/VKoJbkv86V8spLdt352V5d4lwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMg4AFAMMwRR0IECBAgAABAgQIECBAgMCICByc3LS5lva7S1tuTsnEiNQe7Jo1O9qm/tCaXdO/P9hFpCdAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDvBSwA6L2xGwgQIECAAAECBAgQIECAAIFzIHB4w4ZHt23n+5J8S5JLzsGRjui9wLGS8nNNTv7CypmZI72/zg0ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYbAELAAZ7ftITIECAAAECBAgQIECAAIGRELhnw4brF7WdVyT5piQXjUTp4Sj54abpvuqinTv3DEcdLQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBbAQsAeuvrdAIECBAgQIAAAQIECBAgQOAsBQ5duflJKe2raurXJ7nwLI/z+PwJfKZT29es3L3jE/N3pZsIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAw2AIWAAz2/KQnQIAAAQIECBAgQIAAAQJDLXDPFRuuH+903l5qHpeS84a67HCVm01bX3Zy7uh/WHvPPUeHq5o2BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6J2ABQC9s3UyAQIECBAgQIAAAQIECBAgcIYCNSn3XbnxWW3TvLrWPLUki8/wKI8tgECt9bbFs80bL7jnzoMLcL0rCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMLACFgAM7OgEJ0CAAAECBAgQIECAAAECwymwf8uW88rDs9+ckh8syTVJxoez6XC2qil/VJL/Z9XMnXeWpB3OlloRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgNwIWAPTG1akECBAgQIAAAQIECBAgQIDAGQjcu3HjmrG28/zU3JLUqSTNGRzjkYUSKPXvUuubH0z3j9bPzBxfqBjuJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwKAKWAAwqJOTmwABAgQIECBAgAABAgQIDJnAfeuvuXKudl/cpL60JuuGrN7Q1yk1h2opPz/WLr51xZ6/u2/oCytIgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBHghYANADVEcSIECAAAECBAgQIECAAAECj1zgLUlzy7qpzbXpfE/S3pzkkkf+tE/2iUCb5H1N0/2xi3bu3NMnmcQgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAwAlYADBwIxOYAAECBAgQIECAAAECBAgMj0DNjWOHNtzzNbXb/kApeU5SVgxPu5Fp0k3ysdp0f/jinTs/XZJTywD8Q4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJnIGABwBmgeYQAAQIECBAgQIAAAQIECBA4O4GalL0TE0uWdBbf0JTmtW3y9JIsObtTPb0AAm1NPpda35Ylnf+4etu2BxcggysJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwNAIWAAzNKBUhQIAAAQIECBAgQIAAAQKDIfCWpPnuyzevXLpo7qa0eVUt5WsHI7mU/7tAubckt7b1xK2rd+/+IiECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQODsBCwDOzs/TBAgQIECAAAECBAgQIECAwGkI1KTs27hx9Vjb3JyaFyd53Gk87qP9JXAsKX9QS3nr6l3btvVXNGkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwmAIWAAzm3KQmQIAAAQIECBAgQIAAAQIDJ1CTZt+VV1851nS/odTypppcNnAlBP6ywPEkfz3W5CdX7Nz+MSwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcG4ELAA4N45OIUCAAAECBAgQIECAAAECBL6KQE3Kvg0bru20zUtLyvOSXAFsQAVKmau1fq5J3vFAZj+8fmbmyIA2EZsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ9J2ABQN+NRCACBAgQIECAAAECBAgQIDB8AgfXb3pCbesrS8mzkqwavoYj1Kjm7iS/vjRj716++/NfHKHmqhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDnAhYA9JzYBQQIECBAgAABAgQIECBAYHQF7pqYWLqks/iGUpo31uQpJVk6uhpD0fxIST7Q6dafW3HX9I6haKQEAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE+kjAAoA+GoYoBAgQIECAAAECBAgQIEBgmAT2Xr551bLx9pk19ZU1edIwdRvFLjX1aEn54yQ/e/HM9r8eRQOdCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0GsBCwB6Lex8AgQIECBAgAABAgQIECAwggJHL5+aODpevqUkL63JdUn8DGKwvwezST6VWn5uVTn5X8rMzPHBriM9AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE+lPAL9/351ykIkCAAAECBAgQIECAAAECAytwYP36q9OOvaiUcnNSp5I0A1tG8FMCNSl72pKfH68nf2flzMwRLAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQGwELAHrj6lQCBAgQIECAAAECBAgQIDCSAgcu37CpjHd+KMkzk1zq5f/B/xrUmodKya/Mddp/d+mOHfsHv5EGBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6F8BCwD6dzaSESBAgAABAgQIECBAgACBgRH4RDL2qPVXPblT8701eXaSC5P4ucPATPBfDlqSk7WU3x/r1h9dsWf7zgGvIz4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgT6XsAv4vf9iAQkQIAAAQIECBAgQIAAAQL9LVCnpi443JZn1ja3JPXxSVnq5f/+ntkjTFeT+snSGfvhi3Z84a9K0j7C53yMAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBM5QwAKAM4TzGAECBAgQIECAAAECBAgQIJDsX73lvGbZiRenNK9IsiHJOJfhECjJ/aVtn7Ny9Yq/KbffPjscrbQgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAfwtYANDf85GOAAECBAgQIECAAAECBAj0rcCRK69e3037krbkRSWZTNL0bVjBTkug1ByqqW9etXv61pJ0T+thHyZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBMxawAOCM6TxIgAABAgQIECBAgAABAgRGV+DglVddk5LXJeW5SV2RxM8YhunrUPIjq3Ztf2tJ2mGqpQsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgT6XcAv5/f7hOQjQIAAAQIECBAgQIAAAQJ9JFAnJ5ccydgT2+QHa/L1SWn6KJ4oZylQkm5NfmXVzAWvLbl99iyP8zgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQInKaABQCnCebjBAgQIECAAAECBAgQIEBgFAVqUvZObFm5pDP7rFLyiiRPGkWHIe88m5rf7zRzb1qxa9eektQh76seAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE+k7AAoC+G4lABAgQIECAAAECBAgQIECgvwROvfx/aGLT2tKpL6glL0mypb8SSnO2AiU5meRjNfnxVTPbP1WS7tme6XkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQOH0BCwBO38wTBAgQIECAAAECBAgQIEBgZARqvrWz/4rPTDadfH9JuTnJ2pEpPypFa+aS+je1yc9c3MmflOnpE6NSXU8CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAj0m4AFAP02EXkIECBAgAABAgQIECBAgECfCNw1MbF0SXPeljTd1yb5VyVZ2ifRxDhHAiVpa/KFNvn5srj54Opt2x48R0c7hgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTOQMACgDNA8wgBAgQIECBAgAABAgQIEBh2gfsntlw0O3byqbWWV5SSrxv2viPc765a844Tc533Ttz9hUMj7KA6AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE+kLAAoC+GIMQBAgQIECAAAECBAgQIECgfwQOXT41URc1z01bX5ySrf2TTJJzLLA/pdx2bDa/esXeO+8+x2c7jgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTOQMACgDNA8wgBAgQIECBAgAABAgQIEBhWgSPrrtow2+SWknxTko3D2lOvPJhSfrstnV9cvfPzO0rSMiFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBhRewAGDhZyABAQIECBAgQIAAAQIECBBYcIG7JiaWLh1f9ujStt/dprywlCxf8FAC9ESgpNxXk48l9e3vnNn+P97i5f+eODuUAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECZyJgAcCZqHmGAAECBAgQIECAAAECBAgMkcD9E1sumh3rPrWmfVmSryvJ0iGqp8o/FXggJX+Stvm1Vd2H/7Ls3XsMEAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAj0j4AFAP0zC0kIECBAgAABAgQIECBAgMC8Cxyc2HR5HavfmORFSR5fkiXzHsKF8yJQk4ebkk+WUn515cNL/rzs+9uH5+VilxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAIxawAOARU/kgAQIECBAgQIAAAQIECBAYLoH9GzdOlW55UUnzvKRenWTRcDXU5isEjiXlr1LrO+uS5k9Xb9v2IB0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6D8BCwD6byYSESBAgAABAgQIECBAgACBngp8auvW8Y0H77+2W8rLS/KNtZTLUutYTy91+IIJlORkTT5Ta97RjNf/vGp6+oEFC+NiAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPiqAhYA+IIQIECAAAECBAgQIECAAIEREti/est5naWzT0pTXl5Tn5nkwiR+PjC834FuSj7flvoLD6b9Dxt37rx/eKtqRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcEX8Av+gz9DDQgQIECAAAECBAgQIECAwCMSuGtiy0VLm5PfkCYvScoNSZY9ogd9aFAFakl2l9S31bG8f9X09AODWkRuAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjIqABQCjMmk9CRAgQIAAAQIECBAgQGCkBe7duHFNp813NLX5zppsTrJopEFGoHxJOZyan+oeHfuNNQfueGgEKqtIgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBgRewAGDgR6gAAQIECBAgQIAAAQIECBD4qgLlrolNa5d06qtKyYtKsqYmHWbDLlCPtqX89InZY2+/Yu/eY8PeVj8CBAgQIECAAAECBAgQIECAAAECBAgQutZnGAAAIABJREFUIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMi4AFAMMyST0IECBAgAABAgQIECBAgMA/Ezj1ov/+9Zuubdr6uqbJzW3NmB8EjMDXpGSuqeXn5h6+761rDhx4aAQaq0iAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGhEfB7/0MzSkUIECBAgAABAgQIECBAgMD/L/APL/+vv3asjv9WTb2OzcgItE0t71+5e+1LSz45NzKtFSVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCQCFgAMCSDVIMAAQIECBAgQIAAAQIECHxZoE5OLjlcx17YlnJLSR5LZmQETiS5ddXYeT9Zpj9zYGRaK0qAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEhErAAYIiGqQoBAgQIECBAgAABAgQIjLZATZojk5MXtHXxLWnaf1trJkZbZHTa1+ThJrmtm/GfWTNzx72j01xTAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDJeABQDDNU9tCBAgQIAAAQIECBAgQGBEBbZPTS1eOdesr2lfWVJelmTRiFKMYu37k7yvnGzfvuqeHXeNIoDOBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGBYBCwCGZZJ6ECBAgAABAgQIECBAgMDIChy4+urzy2z7xHTzPaXJc2vN2MhijF7xw23yO22bX7pkz/ZdJamjR6AxAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEhkfAAoDhmaUmBAgQIECAAAECBAgQIDCCAg9s2nTxydk8OzUvSepTkoyPIMNIVq41B5uS97eznV+9+O4vTJekHUkIpQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBEAhYADNEwVSFAgAABAgQIECBAgACB0RGoSTm8ceNE2zbf1tS8KMmW6uX/0fkCJPuT/PuM59ZV27ffWZLuKJXXlQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAsMqYAHAsE5WLwIECBAgQIAAAQIECBAYWoE6NbX4vlqvqnPNd6Xk+TWZSNIMbWHF/rnAviS/N9dpb7vkiiu+UD75yTlEBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDAcAhYADMcctSBAgAABAgQIECBAgACBERE4NDV1QZ3tXJ/SfkeSb0qyakSqq/klgXJvSf1Aabrv3rly5Reuv/32WTAECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMDwCFgAMzyw1IUCAAAECBAgQIECAAIEhF7hn06aLx0/m60rqC5M8LcmFQ15ZvX8iUO9Nyu93S3nPmovOv6N4+d/3gwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkMnYAHA0I1UIQIECBAgQIAAAQIECBAYRoEDV15zWW3m/k1T84Ik1yVZPow9dfo/CuxLze93mvLuFV7+9zUhQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA0ApYADC0o1WMAAECBAgQIECAAAECBIZBoN5449jBPfduSLf77Ule0JSsq8miYeimwyMTqMn+UvOBUy//37107PPX3nHHyUf2pE8RIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwKAJWAAwaBOTlwABAgQIECBAgAABAgRGRmDX5OSSC+rY19RSvrMm/7oka5L4f/mR+QYkteZgSf29btPctuai8+8ot98+O0L1VSVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMDICXhpYORGrjABAgQIECBAgAABAgQIDILAPWvXLhtfvOwZpZaXJLkpyYpByC3jORU4nHrq5f/OrWsuOu/zXv4/p7YOI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQF8KWADQl2MRigABAgQIECBAgAABAgRGWeDUy/+LFy2/uSYvT+pjkrJslD1GtPv9SX636ba/uvOuFduuz+2zI+qgNgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEZKwAKAkRq3sgQIECBAgAABAgQIECDQ7wL3TT52RTcPfW9J+Z6aXJ5kvN8zy3eOBUoeqjXvb9r6jr/dM33nTcncOb7BcQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQpwIWAPTpYMQiQIAAAQIECBAgQIAAgdET2Dc1tXFsrtxSS16WmuVJ/H/7iH0NanK8KfW3x9N5+x/t2jb9/KQ7YgTqEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKQFvEgw0uNXngABAgQIECBAgAABAgT6ReDQlVNPqimvKSXfXJPxfsklxzwKlMyVlN/slrmfXb1z53RJ6jze7ioCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6AMBCwD6YAgiECBAgAABAgQIECBAgMDoCtSkHLpy03OT9vUp5YbRldC8Td7XtvmJS/ds30mDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEZTwAKA0Zy71gQIECBAgAABAgQIECDQBwK7JieXnN92np/S/EJKLuqDSCIsjEC3pH5s9tiy5126728fXpgIbiVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBfhCwAKAfpiADAQIECBAgQIAAAQIECIyUQM2NYw9M7L9gdmzutUn9/iQXjBSAsl8pcLTUfLJ7dPzmNQfueAgNAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIy2gAUAoz1/7QkQIECAAAECBAgQIEBgngV2TU4uOb8suq7U+tIkN9dkxTxHcF2fCJTk/lrq+9vZ9hfX7N25vU9iiUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyhgAcAC4ruaAAECBAgQIECAAAECBEZL4MDVV5/fOd4+rS059fL/M5OcP1oC2n6FwKFS6m/OjpVfuWT79l0lqXQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAFAL4DBAgQIECAAAECBAgQIECgxwI1KV9cu2nVokV5Tk19WUmuT7K0x9c6vm8Fyr1J3tspnVtX7Pr8XSVp+zaqYAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwrwIWAMwrt8sIECBAgAABAgQIECBAYNQE6tat4/sOPjQxnvottdSXllI21VrHRs1B338QKDV721Le3XS67/7lHTvufouX/301CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOArBCwA8HUgQIAAAQIECBAgQIAAAQI9EqiTk0sOtp1HlaZ5fkm5uaZe2aOrHNv/Am2SPanlXbUt77v4rm1fLEnt/9gSEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMB8ClgAMJ/a7iJAgAABAgQIECBAgACBkRHYv3rLeZ3zZp+UmhfW1Gcl5dKRKa/oPxfoJtlea97dNnO/fcmuXfsQESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBf0nAAgDfCwIECBAgQIAAAQIECBAgcI4FDk1NXZBuntXWvLikPCnJinN8heMGRKAks0n5fE19d7fMfcDL/wMyODEJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwQAIWACwQvGsJECBAgAABAgQIECBAYPgE3pI0r52cXHMs488tyctrsqUkS4avqUaPUOBkav6uKbntZKf90KU7dux/hM/5GAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMqIAFACM6eLUJECBAgAABAgQIECBA4NwK1KQ5uP7qq5ravbmmfGeSDUn8f/e5ZR6Y02pyoiSfaWu9bW5x85G1d955cGDCC0qAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCybgRYQFo3cxAQIECBAgQIAAAQIECAyLQE3KvsmpJ3ZSXlySb05y2bB00+OMBI6Xkv9RU951bHbso1fsvePwGZ3iIQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYOQELAEZu5AoTIECAAAECBAgQIECAwLkW2H/lxmc3TfN9qXlqkhXn+nznDY5ATY6XlL8spfx6KbN/fNHOnfcPTnpJCRAg0N8CdevW8YOHH9rQrd2Vn5+Z/tRNyVx/J5aOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIHD6AhYAnL6ZJwgQIECAAAECBAgQIECAwJcETr2IeOjAQzfXpn1NSa5OshTNSAscT8l/TW1+pX248/E1B+54aKQ1lCdAgMBZCnxuy5ZFa0+c2NR2m+tr6nUlzWNKsrpN7m5q++Ordk//5Vle4XECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQN8JWADQdyMRiAABAgQIECBAgAABAgQGQWDf+msvGWuPfXstzauTXJKkMwi5ZeyZwMma8vEmzS8dnXvoL67Yu/dYz25yMAECBIZY4IuTmyfH2/appalPqcn1NVlZkuUpWZaaZUmaJPenLb+6as+dP1ySdog5VCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRGUMACgBEcusoECBAgQIAAAQIECBAgcHYCB6+86ppaysubWr+jllx8dqd5eggEujX5w6Tz9n3Lmr+89o47Tg5BJxUIECAwLwI1Gbt33dTVi5rydUl5Vk3dkuSCJEuSLE7yz3+GXUvNTFvbn969esX7rr/99tl5CeoSAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMA8CVgAME/QriFAgAABAgQIECBAgACB4RDYt27j1zZN55aS+g1Jzh+OVlqcjUCbfLjpdn961V07P12S7tmc5VkCBAiMgsCRdY9eOTd2fGtp65OT8rU19bqkrEgynqTzVQweTPLBWtvf3rd88X+3cGUUvi06EiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB0ROwAGD0Zq4xAQIECBAgQIAAAQIECJyhwIENVz0nbX6wJE/4x7+V+AxP8tiwCJTUD2QsP75qevqOYemkBwECBM61QE3K3Zs3X7TkWPu0WurTklP/li0lWfJI7jq1XKUmny61uTXj3T9YNT39wCN5zmcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoMoYAHAIE5NZgIECBAgQIAAAQIECBCYN4FTLy0emZy8sK1j31JLeV1JNtWkmbcALupLgZLM1uR3x8bqT6yYnt7RlyGFIkCAwAIIfOnPyK1bO3v37RtbvGjRRKfbPDWlfG2SJ9dk82lG6qaUY7Vtbx1rmt9euevOz57m8z5OgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBg4AQsABm5kAhMgQIAAAQIECBAgQIDAfAnUpLP/iqnJTlO+LaW+PClXztfd7ulfgZocS/Jb47X52RW7t+3q36SSESBAYH4EPrV16/jE3tlFS8fnFh9vTlzTdDo3lLbeUEqeUJN1Z5CiTcnR2ubPm6a+b9Wu6Q+ewRkeIUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMpIAFAAM5NqEJECBAgAABAgQIECBAoNcCdcuWRfefOPHouba8OLU8L8llvb7T+QMh8ECS954sc79w2a5de0pSByK1kAQIEDjHAqf+nHzggZx3dKy9YHGZe3Sb8oRSy/U19fE1WXWmP3iuyYkm5Qs17Qfm2vKBS/ds33mOozuOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINDXAmf6e5h9XUo4AgQIECBAgAABAgQIECBwNgL3rF27bNHYeU8qTf5tTfvMpKw8m/M8OzQCh5K8u3Tad160Y8deL/8PzVwVIUDgEQjUpNl3yXVLO0tmLyiZW5GUzaW0T03KTW1yTUkWP4JjvtpHTiY59d/Zv8xc+dlVe++8vSTdszzT4wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBgROwAGDgRiYwAQIECBAgQIAAAQIECPRK4NTLjXdfvnnl0kVzN9Vavj/JDUmW9Oo+5w6MQE3qvtRyW22bX7v4rm1f9PL/wMxOUAIEzkLg1J+Lh6emzmu64yvbOntZUq5ra3lCadrHpJark5x/Fsd/+dGa5L7UfDqlfqh2Ox+5+K5t95akPQdnO4IAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMHACFgAM3MgEJkCAAAECBAgQIECAAIFeCHwiN45dc+UXr2ia9hs7NS+ryWN6cY8zB06gTereUspti+vsu86bmbl34BoITIAAgdMU2DU5uWJ506wubbO2pDwmqVuTcm2SqSQXnOZxX+3jDyfZXWs+2qR++MTs0c+uveeeo+fwfEcRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAZOwAKAgRuZwAQIECBAgAABAgQIECBwrgXqjTeO3bf7i1vatntzTXl+KV96wdE/Iy9QuzXZWZL3LMnc+7z8P/JfCAAEhlrgyLp1K7tZdFkdK2vT1uv/4cX/bK4lG1Nz/jktXzKXmn019b910vy/42Ptx8+fnj5wTu9wGAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgQAUsABjQwYlNgAABAgQIECBAgAABAudGoObGsQPr7rmhaepLkzwryWXn5mSnDLjAbCl1W9q8t1vmfnfNzMy9A95HfAIECPxvAnsv37xqfFE7MV7qRLctTyip16bUq2qbjaWUZT0ie7DWfLaU+ofd0vnomnrizjIzc7xHdzmWAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBwAhYADNzIBCZAgAABAgQIECBAgACBcyVQJyaW3tdZdlO35JaS+uQkF5yrs50z0AInk/x9St7b1tk/8PL/QM9SeAIE/pnAqZf+Fy+ZnWxqM1naPL4teVRqNiRZn2RpD8Fmk8yU5M9S6odOnGg+vfaeOw/28D5HEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQGUsACgIEcm9AECBAgQIAAAQIECBAgcLYC927cuGas23xDavn+NHlsah072zM9P/gCNTlRks82yXtOdtoPX7pjx/7Bb6UBAQKjLFCT5sHLN688Od6dqrVOpZTrS/KoJOuSXJFkWY99apIHU/IXpdv+x7la/mzNDV8zU/7gD7o9vtfxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGBFLAAYCDHJjQBAgQIECBAgAABAgQInI3A/olrrsr43M1NLd+R1E1nc5Znh0rgeFI/XVJuG19U/tMFd/qbqYdqusoQGDGBey+5bnln0YlrStN9wqmX/msylWRtSb0sKb1+6f/L2m2pmWmT9yX1o814pldNTz8wYqNQlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBwWgIWAJwWlw8TIECAAAEC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ECBAgAABAgQInKuAAQDnKmcdAQIECBAgQIAAAQIECEyrwLbx8cUXtd3n1U55a/7mm5gXTGsBmw2KQC01/6Umvz51YsFnV+z9xtFBCSYHAQLnT6CuXLnwwPz5N5a2+4ykPqdNrirJRUkuOH9VZ3HnkiNJPlfafHhkqnPXoqtWHC533TU1ix0pTYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcIYCBgCcIZTHCBAgQIAAAQIECBAgQOD8CexZu/ay0V7zIzX56SRPqMno+atm534WqMmXalP+7dH21OdXb99+op+z6J0AgfMv8J3VV199srbPapJn1+RZSS4spSyotXbPf/VZqdBLcm9SPth2ence7fV2+ayclXNQlAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBwzgIGAJwznYUECBAgQIAAAQIECBAgMB0C+8fWXV5G6k+3yRtLzeoknenY1x6DKFA/X2v9V0tXX/El32Q9iOcrE4HpEXj4yisv6TULntLW+vyS+qKUXJFkfpKR6akwZ3fppeQj6eX9R5rJL49v336yJHXOdqsxAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB7ylgAIAXgwABAgQIECBAgAABAgRmTeDgmjVXTvWa/7WT8tpacmkS/06dtdOY84U/16vt/3HZji1fcaF1zp+VBgnMhkDZt2bNVbXtvLhJXlxSnlxTL/7u3ysD/3dLW+u30pT3LHtk5Pbs23jU5+RsvIJqEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSmR2Dgf/l1epjsQoAAAQIECBAgQIAAAQLTKfC1DRtG1h48uL6tnX+WWl5VS7rTub+9BkqgTfKZlPKvLt1271ddah2osxWGwDkL1L8ZGNPsXb58frPwog1NzU8neXGSy8550z5bWJLTn4+91PzBqZP1Zx+zZ/O+PougXQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAge8hYACA14IAAQIECBAgQIAAAQIEZlSgrtyw8OC8w8+oKb+YmhfMaHHF+k3gVEo+nVJ+9dKt9/55OX3R1R8CBIZaoObm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BAgQIECAAAECBGZf4OCaNRf32s5LSvKWmjylJPNnvysd9ItATU40yZ+VmneXMvlHl7j83y9Hp885LlCTsnf5tQvnzz952alSn1xS31iSm5IsmuOtD0J7R5PsSOoHeqX3/uXbtu0dhFAyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDJeAAQDDdd7SEiBAgAABAgQIECAwAAKnL5fuWTGxdHR+eWVN3pLkh5KMDEA0EWZMoB5LKV9pa3vr0fQ+u9rl/xmTV2iwBer69aP7j/dWp1efWTr1hanlaUl9zGCnnhPpak32l1o+2yYfPlpO/anPtTlxLpogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBA4BwEDAM4BzRICBAgQIECAAAECBAjMlkDNzd0949vHRjLymqS8KakTSZrZ6kfd/hOoydEm9Uu1llubTu9Plmzderj/UuiYwNwSqOPj8/eXeavatn18p5QfS+oLklw8t7oc2G6OlWRzrfnUVM3tK+6/b+vAJhWMAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgKAQMABiKYxaSAAECBAgQIECAAIFBELhvYmLeora7rtubem1KXp+UVYOQS4YZFKh5pCZfSFPfndHOXcs2bToyg9WVIjBwAqeHshxY9cBVNbm+lHJLUp+UZHzggs7NQG2SA0m+VEr98GRTv7hiy5aH5maruiJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBw5gIGAJy5lScJECBAgAABAgQIECAwawI7x8YWLOzMv642zetT6yuTrJy1ZhTuT4GSR2otf9KkvKu3sPPlyzZufKQ/g+iawOwL1KQ5ML5uXSnl2tT6o23qE0uydvY7G44OSnKqltxb2vy/nXQ/cqgc37h6+/YTw5FeSgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUEXMABg0E9YPgIECBAgQIAAAQIE+l6grtyw8OC87zy9prwxtb4wybK+DyXAzAqUnL7s/9m0zTtOTR75ryt37z42sw2oRmAwBGpSdq++et1Irdc1tb66llxbkqsGI12/pKjHapovltSPlk77J5du2bKzXzrXJwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEzETAA4EyUPEOAAAECBAgQIECAAIFZEtiz/NoLuvNPvKCmvqkpeXpNFs9SK8r2qUBNPX3Z/9O1ad5+tD31Nd+S3acHqe1ZF3ho7dqJTq+zoSavSuq1SdYl8bO1mTuZWpLtST5Xk9vrvGbjsk2bjsxceZUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzIyAX1KeGWdVCBAgQIAAAQIECBAgcNYCdeWGhQe6R16V0r61llxXUhae9SYWDLvAidR8Ip3ym3vmd//y8Rs3nhp2EPkJnK3AofFrxifTPqWTektNrk/N2pR0z3Yfzz86gVrz5dKUj0716h+tuP++rY9uN6sJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzF0BAwDm7tnojAABAgQIECBAgACBIRZ4+MorL5nqjv542ubnkro2ycgQc4h+DgIlmazJHU2v/bVLdm65pyRT57CNJQSGVuDAxMRYenlabcvLU3JDklVJ5g8tyCwFryX7S/LZpte8s8nxjYvvv//QLLWiLAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEZETAAYEaYFSFAgAABAgQIECBAgMCZC+wfW3d5O1J/sql5S5KxJP7tduZ8nvwbgbaWcvvIVPtvLt65eVtJWjAECJyZwN7Vq5d3e52bSpMfblNuTHJ5koVnttpT0yzw9aR+rNuWj118/3U7Su7sTfP+tiNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAw5wRcIplzR6IhAgQIECBAgAABAgSGWWDfmjXrmtq8pa3lJ0qybJgtZD9ngVNJ3pep8q8v3XXv7pLUc97JQgJDJLBzbGzJgs7CZ6XUl9fkppKs+O7Ffz8/m/H3oB5L8rm2NrdOTebPVu6+d/+Mt6AgAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgVkS8AvMswSvLAECBAgQIECAAAECBP5HgX1XXH1D6fR+Lim3JLmIEIGzFaipx5qU94ycKv/6Ihdmz5bP80MqUNevH933yNSTS5OfK6k3JfXipCxI4udms/NOHKipvzXSze/tS3ZdtXnzydlpQ1UCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECsyPgF5lnx11VAgQIECBAgAABAgQI/C2BPavWPqfTdP5xqfU5SU5fPPWHwNkKHE7y7hOTnf977IF7DpztYs8TGDaBr23YMLLm4UeeXHvtj7Y1LyslVyYZHTaHuZK3JmmSL9a23jp5Kp9dsWfz/pKc/r/9IUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBUAgYADNVxC0uAAAECBAgQIECAwFwUOLT66pf3avvLJdlQXT6di0fUDz0dKDXvPNYb+fUrdm082A8N65HAbArsH193Ta31dU3Jj9ZkIkk3iZ+TzdKh1NS9SfmDTtN5+yVXrvh27rqr5/L/LB2GsgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABArMu4BebZ/0INECAAAECBAgQIECAwLAK1KTsXzXxulKaf57Uq/7my4/9IXC2AnVvTd7ZzdRvXrJ9+8Nnu9rzBIZJ4KHx9StGMvXjvdSfSHL9MGWfq1lLybdqyrvn1+7HL9y+cc9c7VNfBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBGZKwACAmZJWhwABAgQIECBAgAABAt8VOH3xf9fY+ksWNJOvT5NfSnI5HALnIFBLyv21tu8Zneq++6IH7jlwDntYQmDgBWrS2bV+/cXzjvdeWWp9fUm9OYmfic3uydckh5N8PrX9nUMj5b9ctXnzydltSXUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECc0PALzvPjXPQBQECBAgQIECAAAECQyJw+iLqw+PXXDGVqTeWlLckWTkk0cWcXoFeSrY2ya0jnfr+RZs375ve7e1GoP8F6oYNI4cOHVo4VUde2LTta2rJS0syv/+T9XmCmqmUbCspd7SlfHjZtk2b+jyR9gkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhMq4ABANPKaTMCBAgQIECAAAECBAh8f4FvrV8/uuz41GObmr9X0v54UlbwInC2AiWZTMmm1Pq+0U69Y9GWLQ+d7R6eJzDIAqc/a6883C6a6vRubJv8SJJXJFkyyJn7JFstyeE25eu1tO8aqVOfu2T79of7pHdtEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJgxAQMAZoxaIQIECBAgQIAAAQIEhlmgjo/PP9R2NrRN89O15uWlZOkwe8h+zgKnkvxVarltXrf3MZf/z9nRwgEU+NqGDSPrHjxy8an59bq0eVny1/8bT9IZwLj9FqmtyY4m+dSpXvm9x+y896v9FkC/BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBGZKwACAmZJWhwABAgQIECBAgACBoRXYs/zaC0YWHHtGreXvp+S5SRYPLYbg5yxQk5Ml+cua3N7rtJ9csWXLQ+e8mYUEBkigJuXQmjUX9drm+pLmhUl9YZLHJpk/QDH7OcpkTf6i1vruptf88dJd9z7Qz2H0ToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOB8CxgAcL6F7U+AAAECBAgQIECAwFALHJiYuCiT5fk1+ZlacmNJFg41iPDnJFCTEyX1z0vNbaMj+dSizZv3ndNGFhEYIIFfSZqfX7Nm0VTbWd2U3FTb+sZSyhOSjAxQzH6P8mCt+Xqb9l8v37HlT/s9jP4JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzISAAQAzoawGAQIECBAgQIAAAQJDJ1CTZu/atUu7vc6Lk/oPU3N9SrpDByHwdAgcL8lXa2nfd+pk549W7r53/3Rsag8C/Sywc2xswbzugqubUp9eavnhtmZDKVnaz5kGrPdekk2p5feS+vtLd9z37QHLJw4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB8yZgAMB5o7UxAQIECBAgQIAAAQLDKlCTzp7xa67oZuqWkvLmJI8bVgu5H7XA8aT815p664mpkc9esWvjwUe9ow0I9LFATcrhVVePT5b2hUleUkquT81YH0cauNZrcrJJ+Xza9rZj7YnPX7Frl8+tgTtlgQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBM6ngAEA51PX3gQIECBAgAABAgQIDJ3A6cv/B1Zdta6W8tpS6utSMzF0CAJPl8CJknwpNe8und5/WrJ16+Hp2tg+BPpR4IGVa6+YN1qemJRbkvKipK7oxxyD3HNNtjXJF2op7/z8tnvvfk3SG+S8shEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBA4HwIGAJwPVXsSIECAAAECBAgQIDCUAjVp9q9de31nqvl7bfLKFN9KPZQvwvSEPllT/nOa+jsZab6wbNOmI9OzrV0I9J/AtvHxxYtq54lJc0sp5eZa8tjU2u2/JIPbcU1OluQbKfngSOn+8UVbv721uPw/uAcuGQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwHkVMADgvPLanAABAgQIECBAgACBYRJ4aPW6m5pa31prXlBKlg5TdlmnUaBmqiafbZr85uSx7/zpir17j07j7rYi0DcCH0s6L1g18YSp0rwwqS9Psj7JRX0TYEgarcm+UvLFmuYDJyY7Xx7btfFQSeqQxBeTAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwLQLGAAw7aQ2JECAAAECBAgQIEBgGAUOjK99Ua80/7ipeWqSRcNoIPO0CNSa+ulaer+2rNavlu3bT0zLrjYh0GcCe6+YWNtt8qya8uMpeVySFUn8HGuOnWNNtpTk4ynlk8cnj33zil27js+xFrVDgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoO8E/OJ03x2ZhgkQIECAAAECBAgQmEsCdf360YPHe7ektv+sTR5bknlzqT+99J3AJ7udzv+1a17zzcdv3Hiq77rXMIFHKfDgxMSybi83lra8ppbcWEquTE33UW5r+fQLHE/K12tpb2+a+tklixfvKXffPTn9ZexIgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYPgEDAAYvjOXmAABAgQIECBAgACBaRJ4+MofumSyOfGakvxikrVJmmna2jZDKFCSj4zW/J9f23H5fc/OXVNDSCDyEAvU8fH5D9Xu9d2UH6mlvjApa5IsTOJnV3PsvSg1+0vKH9fSfijdfGXJ5s1HSlLnWJvaIUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINC3An6Jum+PTuMECBAgQIAAAQIECMymwIG1a6/otZ2faGr7D5JypUuqs3ka/V+7qeWDp2r9leX337e9JG3/J5KAwJkL7Fl19epOeq8sJa9KyuOSXJikc+Y7eHIGBXbWlNuatr1zyWg2l82bT85gbaUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDIWAAQBDccxCEiBAgAABAgQIECAwnQLfWX311ZNp31xrXp9khcv/06k7ZHvVTKXkA6Vb/8WSzZsf8C3aQ3b+Qx531+XXXLpgpH1eTX19Up+RUhalpjvkLHMyfk1ONjVfbTv1XRnpfGrppk3HStKbk81qigABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECfCxgA0OcHqH0CBAgQIECAAAECBGZW4NCqiet7pfyjkryiJktc/p9Z/0GqVpMTTfK7dar8y0t33bvb5f9BOl1Z/i6BbePj8y/udDbUXvMTtealabLCxf85/M6UPNLWfCJNee+ySxb9t3L33ZNzuFutESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOh7AQMA+v4IBSBAgAABAgQIECBAYKYE9o5dfW2n2/671DwnxbdUz5T7QNaptZdS3t4rU/9m+bZtewcyo1AE/geBmpQDY+tWdkbqT03V/HhJHmuIypx+TWqSfUn5jfk5dfsF27fvNahkTp+X5ggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAZEwACAATlIMQgQIECAAAECBAgQOH8CNekcvGLiuaXT/HKb+rQk885fNTsPukBNPVxSfrdM1n936QObdw16XvkI1KTZt2z9wuaCyR+tKW8sqc+mMscFSqZKzVc6Nb+5eMd9n5jj3WqPAAECBAgQIECAAAECBAgQIECAAAECBAgQ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mrf25uarizZuvK0kFRoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgT+q4ALALwTBAgQIECAAAECBAj0jUBNyg3L1z6409TXJfXY4f9O34QTZKAFas0VnZQ3zO8e/ELZufPQQJcRvtUCNWn2j61ZU1NfWJInJjkjid/fDPbUb0ktn246zZvnb732X0vSG+w60hMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcCIF/APyE6lrbQIECBAgQIAAAQIE7rBATTo3rVrzoPTyul7qRXf4QR8k8J0Faim5olfyxsNHD11+nsP/3pc+Fqjr14/u33/gkSn1F1LzQ30cVbQ7JlBLcl1J+UgzWt975ubNW+/YYz5FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAwC7gAYJinrzsBAgQIECBAgACBPhHYPD4+98zpPKikeU0c/u+TqbQgRsl0aq6oTd46dfj2y5fu2nWwBa1UaKHAsQtQ9px94bxm3u0vLqV5RklWtbDmsFXqJmVDr9T3nlyn/vjUycndwwagLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECd03ABQB3zc1TBAgQIECAAAECBAgcJ4Hrli076aQ5Jz84vd4rk3LRcVrWMgSOJvWK2iuXdo/c+oUle/bcjoRAPwrUZctOurEz73tqk+emlqf2Y0aZ7pRATXKklnJlKfVtdbT5/OKNGw/cqRV8mAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoRZwAcBQj195AgQIECBAgAABArMrsPvsC08ZPeno99d0X57kobObxu4tEjickq/W1Hd0D558+ZI9Vzn836LhtqVKTZoD514w//DI9GM6TfnZWvP9bek2xD16SfaXlMu7vbzrrB2brhhiC9UJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIELiLAi4AuItwHiNAgAABAgQIECBA4O4J3LBu3akjh6d+sPbyspo85O6t5mkC/5/AoZRcUVPf2T144PIle/Y4/O/l6DuBXUuXnjx35OSVtSlPSfKkJMuS+B1N303qTgXq1mRHSvlkL+UPzt628ao79bQPEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4N8F/ONyrwIBAgQIECBAgAABAjMusHft2tPKkTyslN4v+9brGedv84YHk1xRm7xz0eHbLy+7dh373/4Q6CuBnedesHB0tPcDnZInpdYfS3JKXwUU5q4IdJO6odbmA1NN5xNLt12z/a4s4hkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgcE3ABgPeAAAECBAgQIECAAIEZFajr1s3Zd3DqsU3ygpo8aEY3t1mbBQ4n+Urp1rcc6R68YqnD/22e9UB2q0m5adWq87rdzk+VksfX5MKSzB3IMkL/H4FauynN35de79KmOfWv5k/+8814CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcHcEXABwd/Q8S4AAAQIECBAgQIDAnRLYPz5+eu9oeUjp1DeklnvdqYd9mMC3FziUmq/WWi9btGPiMyWpsAj0k8Dusy88Ze7Jh8ene72nlNI8OalL+imfLHdZ4JaS/EMv9TcWT0586S6v4kECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAj8JwEXAHgdCBAgQIAAAQIECBCYEYGbl997/nTn4I+nNi9O8r0zsqlNWi9QkyMl+XKvlrcf6R78wnk7dx5qfWkFB0rg5uXL5083cx5SUn66Jg9PsnCgCgj73wqUlOt7NZ8d7ZTfPnPrxq9jIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwPEScAHA8ZK0DgECBAgQIECAAAEC31Zg15o1i+YeyWNS6gtqciEqAsdJYColX54ueXvv8O2XL9216+BxWtcyBI6LwA1jY0tKRn+iJE9MyX1Tc9pxWdgisy2wpSnlY71e/fCi7Zuvme0w9idAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoF0CLgBo1zy1IUCAAAECBAgQINB3ArtXrz5rpJbHpdc8N6n3SuLv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VXbuPNSyfuoQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgOwq4AMALQoAAAQIECBAgQKClAntWrH5wpzRvTfLAllZUa3YE9taSd45k5IPzt12zfXYi2HWYBfaOjf9gSXlRkp9w+L91b8Khkny9pnnr0aMHPr90166DrWuoEAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBL6LgAsAvCIECBAgQIAAAQIEWiiwZ8X4g5qS15SUH2lhPZVmTaDenNQ/qN2RNy2+buOuWYth46EV2Ldi7cNS6quS+uAkc4cWop3FD6Xmb5LyW3Ve+avFGzceaGdNrQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCdBVwA4A0hQIAAAQIECBAg0DKBG8bO/55Oyitq6qOTzGtZPXVmT+BwSnlfpzZvmT957eTsxbDzsArsXzn+w71eeXUpeUCS0WF1aGnvw0n529T6rjqv+bzD/y2dsloECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNwhARcA3CEmHyJAgAABAgQIECAwGAJ7V12wJr3uS0rKT9XU+f6DfzDmNgApay3l/VPp/PrSbddsH4C8IrZM4MYVq3+0lubVSe5XHf5v2XRzpCZ/3zS5rDfa/KXD/20brz4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNxZAeeB7qyYzxMgQIAAAQIECBDoU4Gd544vmzdSnpuSpyc5J4n/3u/TWQ1crFo+PFWaV58zee3kwGUXeOAF9i4//1GlybHD/98bh/8Hfp7/pcDRWsrXanpvz21zPnfW3g23ta2gPgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIELizAg4E3VkxnydAgAABAgQIECDQhwI3L7/3/G5z6GeT8vyajCVp+jCmSAMoUFI/Nj2SV541MbG1JHUAK4g8wAJ7V44/utTympJcWB3+H+BJ/rfRp0pyZUp965EjBz+7dNeug20rqA8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTuioALAO6KmmcIECBAgAABAgQI9JnA/pXjz6q1vCzJaof/+2w4Axyn1Pz1Sd3ytDft3HT9xUlvgKuIPmACNWn2j615dEm9uCb3StIZsArifieBmumk/kup+c1bm+nPrJycPAyMAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBL4l4AIAbwIBAgQIECBAgACBARfYu+L8R6bk9ce+Idvh/wEfZn/F/3ySVy+c3Py14vB/f02m5Wnq4x/f2f8P//LoWurF5VuH/5uWVx62et2SXJ1e8/pti0/91P2uvHJq2AD0JUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwHcScAGA94MAAQIECBAgQIDAAAvcuHLND9Raf6Mm3+eQ7AAPsu+i178ZacqvnTH/9C8Vh3P7bjptDlST0f0rzv/xUsrFNfXebe46pN16STaVUl+zYNvEn5SkDqmD2gQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPi2Ai4A8HIQIECAAAECBAgQGECBmpR9qy+4b+l1X1Fr/bGSctIA1hC5/wRqTf6lKfWSg1OHP3Pezp2H+i+iRG0VuG7ZspNOHp33yF4try7JhW3tOcS9eiVlopu85qzJTR8bYgfVCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8B0FXADgBSFAgAABAgQIECAwYAI1aXYvH79gtCkvSMpPJXX+gFUQtz8FvvXN3L3ytszpfWzhxMSt/RlTqjYK3LB43amdU6YfmdSX1+R72thx6DvVTNSS1yye3PzRobcAQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAge8g4AIArwcBAgQIECBAgACBARI4dvj/5rELlvdq95m15BlJlg5QfFH7V6AmZXut9d1TU+X3l+7atK9/o0rWNoE6Pj53/3TnR5Lea5Lct2399Mmxy0X2TicvWeLwv9eBAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC31XABQDflcgHCBAgQIAAAQIECPSHwLET2nvHxs4uGXliKeV5qRnvj2RSDL5A2Z1af6/2mvcsvm7jrsHvo8GgCGwbG5t3Sp3zsKbUVyV50KDklvMOCxw7/L+l1ly8ePvmj9zhp3yQAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECQyzgAoAhHr7qBAgQIECAAAECgyWwf3z89NptHlOSX6613nuw0kvbrwIl5caa+qFOOm+fP3ntZL/mlKt9AscO/59eRn+g1rwyyQ+2r+HQNzp2+H9TberrF2+d+MOh1wBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBOyjgAoA7COVjBAgQIECAAAECBGZToI6NzdvXjP5Q08ura3L/2cxi71YJ3FxL/ZNSm7cumtx0bauaKdPXApvHx+eeOZ0HNWl+paY+PEmnrwMLd2cFjh3+vzal/ubCbRMfKUn3zi7g8wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBhWARcADOvk9SZAgAABAgQIEBgYga+vXz+6fO+BBzRNfb1vyR6YsfV90Jp6sEn5VLfWNy++//deVf74jx3Q7fuptSNgXb9+9Ka9N98/TfnlbsqPlmRuO5pp8e8CvdRsSFPevLDT+1iZmDhChgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTuuIALAO64lU8SIECAAAECBAgQmHGBmnT2jp1/707y4po8JUkz4yFs2D6BkttKzZdrL5cu3LH5r0tS21dSo34UOPYzbf/KNetL7f1iTXlUklP6MadMd1mgJuXqJG9dePS2Py67dh28yyt5kAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkMq4AKAIR282gQIECBAgAABAv0vcOwU5S0r1o51S++FSXlqTV3Q/6klHACBYwdyr6ilvqt78OTLl+y56vYByCxiCwSO/Uzbu2L8e0ZK8+Je6mOSnN6CWir8H4Fakm/U5NI6t/nE4o0bD8AhQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA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L3D7inucc6iZen5qeZYDs4M/z9luUGp21ia/U3sj71u8/ZrrZzuP/YdH4Obly+d3y9yX1OTpKVk2PM2HpulfpvbeuPCUuVeUDRuODk1rRQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBnAi4A6LOBiEOAAAECBAgQINAugf3j46f3pvKElPLykqxuVzttZkFgb03+sNet7zr7uokts7C/LYdUoI6Pz93fzRNKr1xSHf5v41vwT7XUX1tUpz9fJicPt7GgTgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgUARcADMqk5CRAgAABAgQIEKc1Qj4AACAASURBVBg4gc3j43MXHC0PqU1emeQHkjQDV0LgfhK4NbV+uvY677j6unP++aJ8cbqfwsnSXoGPJ52HrTr/ovTy+iQPaG/ToW12Ta/Wt3ZG88cLJyZuHVoFxQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINAnAi4A6JNBiEGAAAECBAgQINAugZo0e1evXtV0m1fV1MeXlJPb1VCbGRY4VFK+lFLfdmud+spK39A9w/zDvd2+FeffozT1tbWWn0gyZ7g12tW+JttK8tsn1ZEPnbz9mt0lqe1qqA0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQGT8AFAIM3M4kJECBAgAABAgQGQGDv2rWn5Uj3JSV5cVLmD0BkEftVoGS61nyjSXnj1KF5n1my56rb+zWqXO0TuGHx4lM7J5/5ml7Jc0tyWvsaDnOjujspH+w13d9bvHXr1pJ0h1lDdwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECPSLgAsA+mUSchAgQIAAAQIECLRGoK5fP3rTvlsfX0teX5OVrSmmyGwJ7Eqtv9E7OOeDZ+3dcNtshbDvcArcOHb+c2pySU0WDKdAa1vfkuRPO8llZ06ee3XJF6db21QxAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDJiACwAGbGDiEiBAgAABAgQI9LdATcr+89bcr3bqm0rykCRNfyeWrs8Fbqmpb6u3z3mbw/99PqkWxtu97PwHdEbqp0rK2S2sN8yValI/3al57ZZFZ1x9vyuvnBpmDN0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQbwIuAOi3ichDgAABAgQIECAw0AJ7F609LafVS5tan1qT0YEuI/ysCtTkcCn1fbU3+huLt19z/ayGsfnQCdy4cuWFtTfyhlryo0n87qBdb8A/Nk159fytm/6iJN12VdOGAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECgy/gH/EP/gw1IECAAAECBAgQ6COBfWPnvyzJJUk6fRRLlMETOHYo91MZzasWbt58bUnq4FWQeFAFrlu2bMFJnXmvraX8XEnmDmoPuf9bgS2lNG9YUI/8YZmcPMyIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPpPwAUA/TcTiQgQIECAAAECBAZQoCZl/9jaR6f2fisl5w5gBZH7SKAkf1ea8tIFWzdd0UexRBkCgWM/y24eO/+F3eR1SU4fgsrDVPGGptTf6/am3rV4+/brh6m4rgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgkARcADNK0ZCVAgAABAgQIEOhbgf3j4/es3XJpah7etyEFGxCBMtmp+cX52zd9ckACi9kSgZp0blxx/mNq8saUrEridwZtmW3N7U3y51PdziVLdl77jZbUUoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKtFPCP+Vs5VqUIECBAgAABAgRmUmDv2rWnlaPdN5SU59SakZnc216tE7il9vKyxTs2/27rminU1wI1aW4cG79/kl+rKRclmdvXgYW7wwKlZrqWXNlJ5+XzJ6/94h1+0AcJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYFYEXAAwK+w2JUCAAAECBAgQaItAXbr05H1zTn52KeXXU3NqW3rpMSsCt9TUty2anHh9SXqzksCmQytw/dgFY6Nl+qWp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T/lqufLKqROxhzUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYGYFXAAws952I0CAAAECBAgQGDCBm5evXj9dmjem5KIkzYDFF7c/BDZ0a1593aLT//x+Duj2x0SGLMWt516w8Oho9zUleW5N5gxZ/TbXvb405S0jR0c+cMbODTe2uahuBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCYBFwAM07R1JUCAAAECBAgQuFMCe89bu7R0ei8ryc87NHun6Hz4PwRqdjalXjJ/cuL3SuLbub0ZMy5Qx8bm3diMPKn2yuuTnDPjAWx44gRK+XCv6b528ZYtW0pST9xGViZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBmRRwAcBMatuLAAECBAgQIEBgYATq+Pjcfd08oqnlkprcc2CCC9o3AiXlptT6vrnN9FtO3bZtT98EE2RoBC5Omhcuu+CevZHuO5P84NAUH4qi5W+6nfL/snfvUXbedb34P9+9Z5Km1zQzk5SQZmaSmUkbCgXL/aAWEUVFwOsPFBAURRQoByilQKEXoFekFBBqQUCoCIgeUDgHuVV/KooGgbrSJjOZ2ZO26WVmkjZt02Rm9vM9q+jxgkIzyczsvZ/nlb9YK8/3+3m/X89es5JF9yeve9+uHV+7MKKoRGUlCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUBEBCwAq8qLVJECAAAECBAgQWJjAnacObe6q1y7NkX9hYSc9TeA7/xT3wZzj87lWu2jdxI5vMyHQCoE71j3quK5VD1wZES9rxXwzl0YgRZqMyO88MN/90VNv3b53aaa4lQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRaJWABQKvkzSVAgAABAgQIEGhbgVs2bFh1bNeq50bEtTmiu22DCtauAjkibpprphc97Jad/9CuIeUqt0COSFP9Iz9Ri+KzkVK93G2r0y5FzBYRH6rXmm9fMz6+uzrNNSVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA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TSBv3bpi+v65n08p3hwRW9otnzxtJ3AoIj49dzC/6mF3jE21XTqBKilw38DWUw7F3OtzxEsj4phKIpSv9NeKFK/fPXHi1x4b2+bKV08jAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDgaAQsAjkbPWQIECBAgQIAAgbYW2DN4ev+KPH9ejnhRiljV1mGFa7VAERHfSinO65kY/WKrw5hP4EGBB5eY7D1w6Edy1K6KiEdQKYXA/shxTbM2/551ExN3lqKREgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwqAIWACwqp8sIECBAgAABAgTaSWCqf/NTU6pdHhGPa6dcsrSfQI44lHK6uOe4rmvS9u33tV9CiaoosH9kpHd2Nl8QES+NiJVVNChh56/lXLyxd/DU/z/dcMN8CfupRIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgvPGUjAAAIABJREFUQIAAAQIECBAgQIAAAQIECBAgQIAAAQJHKWABwFECOk6AAAECBAgQINCeAt/54uyhfE5O8T9TxHHtmVKqdhHIEX9Wm8u/1XPb2K3tkkmOagvks87q3rv3nqfmnK6JiC3V1ihN+/0R6b0519/dN3nT7aVppQgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKqABQCLyukyAgQIECBAgACBdhG4u3/oB+ZTuiwint4umeRoT4EUeXeO+it7Gjs+myJye6aUqmoCezdtOqlo1i+JFL8ZEd1V61/Svn83X8QFN+1++A1PjRvmS9pRLQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBA4SgELAI4S0HECBAgQIECAAIH2E5jasuWEfLD5wpTSm1PE2vZLKFF7CeTLZ2cPXLx+z54D7ZVLmqoK5IjazMDw4yLH5yJFT1UdSta7GZGv7Cpmr1i9e/e+knVThwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWUcACgEXEdBUBAgQIECBAgEB7CExtOm0kiuLiFPkXIqLWHqmkaE+B9JV61H7t5MbNjfbMJ1UVBW7ZsGHVMfVjLkkpvaaK/UvZOed/TLX0hjUTo19KEbmUHZUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUURsABgURhdQoAAAQIECBAg0C4CeevWFTMH5n8yR74qRWxul1xytJ9AyrE31/I5PRNj1/tCbvu9nyonunNwcF09d30rItZV2aFE3Zsp5aujHhf3jI3tL1EvVQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgCQQsAFgCVFcSIECAAAECBAi0TuD+U7esf6BevCkiXta6FCZ3gkCOeN99MffqwUbjYCfklbEaAhdG1F7RP/SqnNI7qtG4/C1TxLdTLd64Znz0z8vfVkMCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQOFoBCwCOVtB5AgQIECBAgACBthLY1z/0mGakD0SKH2irYMK0m8DfddWLl5+0a9c/pYii3cLJU12BvHXrir33z30up/jR6iqUp3mK3IyIT9eb8YbVt4ztKk8zTQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgqQQsAFgqWfcSIECAAAECBAgsu8DUli0n1A42f92/nL3s9J028GAR8Vt9XfkP09jYoU4LL2+5BWb6h38up/hURPj7egledYoYz6m4qHdi1x+UoI4KBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILAMAr5QsAzIRhAgQIAAAQIECCyLQLp74/DgfD3eFTmeuSwTDelEgbmI/PH5ej73lF277urEAjKXVyBv3bpi5oHZ6yKnF5a3ZaWaNSPiy/WI805ujH6zUs2VJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEjFrAA4IjpHCRAgAABAgQIEGgngXzWWd1T0/c+vRb5ukixvp2yydI+ArUc35iPdME93cWXh8fGDrVPMkkIREwPDD8hRfxJDj/DyvF5SHdEFO+anT1wzfo9ew6Uo5MWBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILDUAhYALLWw+wkQIECAAAECBJZFYO+mTScVuet1kfMblmWgIZ0ocG9EvrSrmH3/6t2793ViAZnLK/DJiPqPDA5fGDneVN6WlWpWRMTXc+TX9zXG/rJSzZUlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaMSsADgqPgcJkCAAAECBAgQaAeBHJGmB7eM1HLxoRzxpHbIJENbCnwxF8X5vbt3fTNFNNsyoVCVFdg3eHp/M89/OiLOqixCuYrfExEfmZ1Nl6zfs3O6XNW0IUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGlFLAAYCl13U2AAAECBAgQILAsAqNDQytPns/PjVR7T+Q4flmGGtJRAjnirpTirbXU/IM14+MPfjHXLwJtJTDdP/RbkdLVEdHdVsGEOVKBm4taes3a8Z2fP9ILnCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBagpYAFDN9641AQIECBAgQKBUAlNbtpyQDhXXRMSLSlVMmUURSBGzEflPc9Qu7G3svHlRLnUJgUUU2LN+pHdld/5ITvGMiKgt4tWuao3AoYj02e75rt886dbte1sTwVQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6FQBCwA69c3JTYAAAQIECBAg8B2BHJHuHhg+cz7i0yliExYC/1Ug7YgUbyvu6/rTtVPb7yNEoN0EpjYNPzMVcW1ErG+3bPIckcCdEfH23sbog4tp/CJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgsSsABgQVweJkCAAAECBAgQaDeBHGd3TQ/e8qqUa5f7l7Pb7e20Pk/OcV9K8bGuIq5cvXt0vPWJJCDwnwX2rF9/7IoVx12aI34jRRzDp+MFHtxL88+1ovmyNbt3/U3Ht1GAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJZdwAKAZSc3kAABAgQIECBAYDEFJgYGVp8Y3dfniJ9czHvdVRaBvK2e4uLV9fhCGhs7VJZWepRHYHrTyONykT+QIs6wxKTz32uOeCBFfLJWa56zZnz8ns5vpAEBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILLeABQDLLW4eAQIECBAgQIDAogpMbxp5WhTFpyLSyYt6scs6XiClmM6Rfy8X3e/pm7zp9o4vpEApBaYGh19by+kNObKfYeV4w1M5FW/sm9h1XTnqaEGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECyy1gAcByi5tHgAABAgQIECCwqAIz/cNX5hSvXdRLXVYKgRz5K7Ucb1ozOfb1FNEsRSklSiVw56lDm+td6dqU44dyRHepylWzTBER36ql2ovWTOz4djUJtCZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBoxWwAOBoBZ0nQIAAAQIECBBomUAeGlq5d772lRz5yS0LYXC7CtyWIl+1Zvak30t7th1o15ByVVtgenDkhVHkt0WKDdWWKE37gxHx8Xtj7rcGG40H/7dfBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgwQIWACyYzAECBAgQIECAAIF2EZgeGH5CRHw1Ila1SyY52kJgLkd8sTvnC1ZPjn2jLRIJQeC7BPasP+vYFSvvvTKK/MJIcTygUgjcHSm/ondi7GOlaKMEAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLREwAKAlrAbSoAAAQIECBAgsBgCM4Mjr8k5X7UYd7mjPAIpYryZ89v7ek/6g7Rt21x5mmlSJoGpjZvPSim9P1I6KyL83bzzX24REf9YT/O/ePLExGTn19GAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBFol4EsGrZI3lwABAgQIECBA4KgFpgaG/leK9OyjvsgFZRK4P1L8r6JWXLh2166xMhXTpVwCM/1Dv5pTujAiTi1Xs8q2mcs53tU7OXpeinhwGYBfBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgiAQsADgiNocIECBAgAABAgRaLTA1OLglFV1/Eyl6Wp3F/HYSSDtTLb9hzfjon6SI3E7JZCHw/wT2btp0UrOoX5EifjkijiPT+QI54oGoxS/2jY/+eee30YAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEWilgAUAr9c0mQIAAAQIECBA4YoHpgZFfici/HxG1I77EwbIJ3BMRH1kxmy45cc/O6bKV06c8AlOnbnlsqhfviYgnlKdV1ZuknT2NM7em+FSz6hL6EyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMDRCVgAcHR+ThMgQIAAAQIECLRAIEek6YHh96WI34gIf6ZtwTtow5E5IrZHkc7p3b3zy22YTyQC3xH4zs+vjZtfkmrpTRFpI5aSCOT0u72TO3+7JG3UIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEWCviyVAvxjSZAgAABAgQIEDgygTsHz1hXy4e+EBFn+gPtkRmW71Tel1J655pV3Zen7dtny9dPo7II3LF589r6fP1tKeVfiohjy9Kr6j1Szr/WMzn2+1V30J8AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEjl7A96WO3tANBAgQIECAAAECyywwtWn4mSnHxyPH8cs82rj2FChyxD+nWvMlvePj/9CeEaUi8C8C+waHf6iZ48qIeDyTcgikiLn5+dpj192649vlaKQFAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECLRSwAKAVuqbTYAAAQIECBAgcEQCU/3DF0eK16WIlUd0gUNlE7g3R76qtzF2SYrIZSunT3kEckR9pn/opamWzs85NpSnWeWb3NTbGN1aeQUABAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILAoAhYALAqjSwgQIECAAAECBJZLIA8Nrdw7nz6bI54WEfXlmmtO2wo8+IX/sVwUz+vbvWtb26YUjEBE3Lt5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qghMD4ycFpHfFxFnV6VzlXrmWn5+7zErPpW2b5+tUm9dCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGDpBSwAWHpjEwgQIECAAAECBI5SYKp/+OJaSi/PkU8+yqsc7yyBbzQjv2FtY8OXU9ww31nRpa2yQI6oTQ0OP6WW46MRsbHKFqXtntPP9vSe8Odp27a50nZUjAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRaImABQEvYDSVAgAABAgQIEDhcgRxRnxkYfndEvCgiVh3uOc91vMChFPGRWtQvPblxc6Pj2yhQKYE969cf29197C+llN4bESsqVb4iZVMUP7GmceqXLCepyAtXkwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAssoYAHAMmIbRYAAAQIECBAgsHCBu/q2Hl8/bv6DOfLPR0Rt4Tc40YkCKaKRI114b8x+YrDRONiJHWSursD+h5/WM9fVPC+nOLe6CuVuniOf3dsY++sU0Sx3U+0IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYLkFLABYbnHzCBAgQIAAAQIEFiQwvWHk4bkrPpAiP2NBBz3c0QI54s/qteYb14yP39jRRYSvpMCeTZs2rsj190aOZ1YSoAKl6xGPWd0Y/VaKyBWoqyIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKOABQDLiG0UAQIECBAgQIDAwgWmBrdsSTm/LyI/deGnnehQgbuLFO/oSs13rxkfv6dDO4hdYYGpTZtGarn+6ZzjjAozlLn67IpIZ57Y2HlzmUvqRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKtEbAAoDXuphIgQIAAAQIECBymwB2bNj2yXtTfkyJ+6DCPeKzDBXLEt6IWb+odH/18iig6vI74FRP4ZET9RzeOPCnXij/LkVZXrH4l6qaIu4tUe2LfxI4dlSisJAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC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wk870QECe2o5zl0zOfqHHZBVRALfUyBHpOlNwz+ZivhzTFUQSDtyM/1I3y079lShrY4ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsHwCFgAsn7VJBAgQIECAAAECRyBwz4bNQ3PdtfdHjqcdwXFH2lsg54gbu1LXs06euGmyvaNKR+D7C+SI2r6B4V8vIt7PqhIC9+ei+OHe3bu+kSJyJRorSYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLLImABwLIwG0KAAAECBAgQIHCkAlOnbllfqzc/kCP9xJHe4VzbChyMiE/0NEZf7Au0bfuOBDtMgRxRnx4YeXOK/ObDPOKxThfI8XM9k6OfSRHNTq8iPwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAi0j4AFAO3zLiQhQIAAAQIECBD4bwT2DQysbsaKD0fkZwMqm0DeFzne1Ds59rtla6ZP9QQeXACwd2D4vTnipdVrX83GzSLOmzq+++oztm+fraaA1gQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwFAIWACyFqjsJECBAgAABAgQWTSDHWd0z/fs/FCmeGxH1RbvYRe0gcHvKxc/3TO7623YIIwOBoxHIcXbXTP9tn4gUP3s09zjbOQI55+vuS/OvHGw0DnZOakkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoN0FLABo9zckHwECBAgQIECg4gI5Iu0bGH5vEfHiiDim4hxlqt+MHF8tDtz9M2unpu4rUzFdqimQzz67a6Zx25ci4oerKVDB1jm+NDt3/7PX79lzoILtVSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJRKwAGCJYF1LgAABAgQIECCweAJT/cNXRsRvphTHL96tbmqlQI44mCJf3dsYO7+VOcwmsFgC+ayzumdm9v9TRDxise50T3sL5Ijx/fc0f2DzvvF72jupdAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQSQIWAHTS25KVAAECBAgQIFBRgZmBkbdE5FfmiDUVJShj7XuLlH9t7cTYp8pYTqfqCTy4AGB6Zv8tKWJd9dpXtnGziHjs2sboNysroDgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILLqABQCLTupCAgQIECBAgACBxRbYOzDy+iLyqyOib7Hvdl+rBPKdXcXs6at3797XqgTmElhMgTsHz1hXj9lbI+euxbzXXe0tUBT5F9buHvvj9k4pHQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh0koAFAJ30tmQlQIAAAQIECFRUYG//0C83U7okRQxWlKBstYsc8cm+xujzylZMn+oK3LXp9OFaMb+zugLVbJ5znNs3OXpVNdtrTYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLIWABwFKoupMAAQIECBAgQGBRBaY3jjwtUr46UpyxqBe7rCUCKaX5omi+vm9y1ztaEsBQAksgsG9g6IebkW5Ygqtd2d4Cf9LbGP259o4oHQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh0koAFAJ30tmQlQIAAAQIECFRUYLp/+PRI8fsR8cSKEpSt9mzUaz/Ru2vHV8pWTJ/qCkwNDj0r5fSZ6gpUs3mOuLf3gVUPS3d++/5qCmhNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAostYAHAYou6jwABAgQIECBAYNEF9g0MrJ5P3R9LOZ4REfVFH+DC5Ra4Kzdrj+m7Zcee5R5sHoGlEpgeHHlh5PyRpbrfve0rkFN+dt/E2GfbN6FkBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBJAhYAdNLbkpUAAQIECBAgUGGB6f7ha6IWL44cx1eYoRzVc3y5d3L0R8tRRgsC/yIwNTD8mynifTyqKJAu7W3sfEMVm+tMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB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gQQUACwQfHuvPZgjXdM3NnRJe691GwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRdQAFD3L8D8BAgQIECAAAEC/y6wf82mk3NP85Mpp5/H0haBiUbOzz1pfOR/t+U2lxBYAIHJgcEn5iiujsg/twDXu7LDBXLEvpTTpXlJ+uO+HTsOdfi4xiNAgAABAgQIECBAgAABAqUSUABQqnXMVxgFAPMl61wCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBH6igAIAHwgBAgQIECBAgACBHwkMDw4uPvFI8eJU5Csj4gQw8y2Qbotonr9ibOSD832T8wkslMCt69dvTM2uS1LECxYqg3s7WiBHxD925+6zTxi/4VspotHR0xqOAAECBAgQIECAAAECBAiUSEABQImWMX9RFADMn62TCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4CQIKAHweBAgQIECAAAECBH5M4NaBgVVFLHpvRD4TzLwL3NXM6aMrx4deM+83uYDAAgncvub05Y2e6bObOb8lIvw3+ALtoZOvvfdH/82Ia7uKxsXLd+26vZNnNRsBAgQIECBAgAABAgQIECiTgAKAMm1jfrKkiIPNSNf0jQ1dMj83OJUAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIPLuDHB74MAgQIECBAgAABAj8mMDowsOS4WPRrReSrc8RqOPMncO+PVnPkrx2K6f+2bmzs5vm7yckEFlZgX//gC4uU3psjli9sErd3sMCRZkpPu2506KvPi2h08JxGI0CAAAECBAgQIECAAAECpRFQAFCaVcxbkHsLACLSNb0KAObN2MEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDy4gAIAXwYBAgQIECBAgACB+wns6z/tkSlNXx4RL46IAtD8CaSI0Wbkl/aNjVw3f7c4mcDCChxYt+kXcs5X5IifXdgkbu9kgRz588dOxcuX3jSyt5PnNBsBAgQIECBAgAABAgQIECiLgAKAsmxi/nIoAJg/WycTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCTBRQA+EIIECBAgAABAgQI3E9gdGBgydLoekZXdF0RkTcBmleBW3LERX1jwx+e11scTmABBfat27w55bwtIp+5gDFcXQeBlC+/e+qey07Z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hRW4de36JxVF90ci8qaFTVL921PEV3LEm1eMDX+t+tOYgMCDC4wODCx5RPRc0Yx4eYpYwonAwgmkodRsnn9HMf3ZdWNj9yxcDjcTIECAAAECBAgQIECAAIFqCCgAqMae5phSAcAcAb1OgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMDsBBQAzM7NWwQIECBAgAABAgQeVCBHdE/2bzwvR5ybUhyHaU4CE5HyuYfy9F/4MeqcHL1ccoH9A5t+LSJ/OCJWljyqeB0ukFJ8rpHjbdeNDX/neRGNDh/XeAQIECBAgAABAgQIECBAYE4CCgDmxFeVl2/Pkd7TNzZ0UVUCy0mAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQGcIKADojD2aggABAgQIECBAoCQCOSJN9m88NVJcExFPL0msasZIaTpyfn9uFO/q27NjoppDSE3g4QUObdiw8nCj+HhEPC0iiod/wxME5k3g9kjxvtSV39U7MnLHvN3iYAIECBAgQIAAAQIECBAg0AECCgA6YIkPP4ICgIc38gQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvMgoABgHlAdSYAAAQIECBAgUG+BvGVLz22Tdzy3GbEtIjbUW2Ou06cvNSOftXJs+JtzPcn7BMosMNm/6ayc8jsjoqfMOWWrhcBY5Di7d3z4r1NEsxYTG5IAAQIECBAgQIAAAQIECMxCQAHALNCq94oCgOrtTGICBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECHSGgAKAj1mgIAgQIECBAgACBMgnkiLS//7RVRUydnVO8KiItLVO+imXZFym96e6pu/78lL17765YdnEJHLXAgTWbH93san46Ugwe9UseJDBPAjnSF4pm8+ze3SPb5+kKxxIgQIAAAQIECBAgQIAAgcoLKACo/AqPZgAFAEej5BkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBFouoACg5aQOJECAAAECBAgQIBCRI7r29Q8+uiuld+SIX2Yya4FmpPzBPN11ed+eHROzPsWLBEouMDw4uHj5dHpvjnh5yaOKVwOBnOPOVOT39D7usRemP//zRg1GNiIBAgQIECBAgAABAgQIEJixgAKAGZNV8QUFAFXcmswECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE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LdZsSAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLlE1AAUL6dSESAAAECBAgQIFATgT1r1hxzTPfS50XkcyNic0QUNRl9rmNO5Jyf3Tc+8i9zPcj7BMosMLF69dJFi447M0e+MkX0lTmrbPUSSBGNHPH1XMRltyzp+bsztm8/Ui8B0xIgQIAAAQIECBAgQIAAgQgFALX4Cm5POd7bOz58YS2mNSQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAqURUABQmlUIQoAAAQIECBAgUEeBPWs2nby0p3lWzumlEXFiHQ1mM3NOcU7f6PCVs3nXOwSqIpAj0v716zdGs+uqFPHsquSWszYCt+eIT+aicdXKXbuGazO1QQkQIECAAAECBAgQIECAwI8EFADU4lNQAFCLNRuSAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQPkEFACUbycSESBAgAABAgQI1EzgwCkbzshdxftzip+LHN01G39W46ac/2n5+MgvpojmrA7wEoGKCBxYv/6E6WbXS4ocF0aK3orEFrM+Ajsj53d3pelPLBsbO1ifsU1KgAABAgQIECBAgAABAgQiFADU4itQAFCLNRuSAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQPkEFACUbycSESBAgAABAgQI1Ezg3r/l+8DaTS+LIp+XIwYioqgZwWzGvScitq4YG/7abF72DoGqCOSIYv8pm38mdTffGTmeWpXcctZDIEUciUj/ELnYtnz8xv9fKUs99m5KAgQIECBAgAABAgQIEPg3AQUAtfgSFADUYs2GJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFA+AQUA5duJRAQIECBAgAABAjUU+P6qwb7uY+LcyOnVKeKYGhLMfOQirlixa/i8mb/oDQLVErhj9aYVU4vzq3KOsyPihGqll7YGAgdzjj8opvN7em8a2VuDeY1IgAABAgQIECBAgAABAgR+KKAAoBYfggKAWqzZkAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKJ6AAoHw7kYgAAQIECBAgQKCmAjevX/+o7mZxZYr0tBzRVVOGox87x3enc/zqqt3Du47+JU8SqJ7AlyK6zxgYfFKK9I6IeGL1JpC4BgLfKyLePr205zMrt2//QQ3mNSIBAgQIECBAgAAB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AgQIECBAgAABAgQIECDwQAEFALX4KhQA1GLNhiRAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQPgE/DijfTiQiQIAAAQIECBAg8JACk4ODa/J0el3K8dKcYgWq+wjkHPHNnOINK0eHv8yGQB0Eblu3rr8R3W+PHM+JiKV1mNmMVRRId+acL76ncff7T9m79+4qTiAzAQIECBAgQIAAAQIECBC4v4ACgFp8EwoAarFmQxIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAon4ACgPLtRCICBAgQIECAAAECDymQt27tnhyf+JnUzG/OKZ7pB78PoPp+yunq5T3N96WRkcM+JQJ1ELi1f9MzU+T3phQb6jCvGSsr8K/NNP07K0dHv1LZCQQnQIAAAQIECBAgQIAAAQI/JqAAoBafgwKAWqzZkAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKJ6AAoHw7kYgAAQIECBAgQIDATxS4te/047qOO/LMnNO5EfEzuO4jcCQiPpeLrvP6dt04xIZAHQQmBwcfkafTNTni+SnimDrMbMbqCaSIe/98/qNFXc0Lj9+589bqTSAxAQIECBAgQIAAAQIECBC4r4ACgFp8EQoAarFmQxIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAon4ACgPLtRCICBAgQIECAAAECDyswsXrTikWL8ksjxesix5qHfaFeD9yQclzQOz786XqNbdo6C+xbv/FXUjOuioiNEVHU2cLspRXIOWKsiOZbesd2frK0KQUjQIAAAQIECBAgQIAAAQJHKaAA4Cihqv2YAoBq7096AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABApUVUABQ2dUJToAAAQIECBAgUHeBiXXr+hfn7gtzxK9HxJK6e/zY/HfmSL/XuHvJBatu+fadXAjUQeDg2kctm053Xxop/VZEHFOHmc1YSYEjOfIXctF808pdu4YrOYHQBAgQIECAAAECBAgQIEDgRwIKADr/U0gRPywA6B0fvqDzpzUhAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJlElAAUKZtyEKAAAECBAgQIEBgBgI5otg3sOHpKRfnFymekCMWzeD1jn40RXwlcj63d3zkf3f0oIYj8GMC+/s3PCWl4toccVpE+O99X0cZBXJE3Bwp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AAECBAgQIECAAAECBAgQIECAAAECBAgQeACBeuGFw7snp59a2ryyJhcCG0iBnaXW1568fPhXy9atUwMpIDQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSSGADgMSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWTKAmZe9Zmx5eO81v1OQSn2VYsK1YyMJtavlU25n5T6feeuvNC9mI2gQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFhoAQMAFnoH1CdAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgMscPc552/spveiJM9KKZ0Bphjk6PtT8vo1229+TUnaQYaQnQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgYAeAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBBRG48cILh08/PHVlTXlukpMXpAlFF1agZCbJX9XSefbaW79w08I2ozoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWXsAAgIXfAx0QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGBFNi1cfOPpJb/nmTdQAIInZQcrDUvPmXDGW8r1147OwzAiwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgMtYADAQG+/8AQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYGEE7j5n0xM7pfnlknzTwnSg6iIQaJO8f7SMPHPF9hvvWQT9aIEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILLmAAwIJvgQYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBgCdy1YcMFwxl6dZLvTdIZrPTS/jOB6abWH1t927Z3lqSSIUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHEAABPAQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBvAjdv3rzypOnOz5fS/lSSsXkrrNCiEyjJ7508NvT0snXr1KJrTkMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYIAEDABYIXlkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDCIAns2nP+TNe2ra3LSIOaX+R8FDtVS/+Pa7dvex4QAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE/knAAABPAwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIHDCBSaS5qc3bn5qavOGkro5SXPCiyqwWAVqKeVta7bf9MzF2qC+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFACBgAslLy6BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBggAR2bTzvMbXWVyR5UklGBii6qP+XQKn5UpvmR9fe9sVr4BAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAvxQwAMATQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJxQgf1nXLBmamjmTUl+KCljJ7SYxRe7QC3JW07ecfMLStJb7M3qjwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvMtYADAfIurR4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBkSgJuXA+vPWTA3XFyf5iSQnD0h0Mb+OQCm5c2amPmHdHdtugUSAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECXytgAICnggABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDghAvdu2HBaN8M/1qb+dJIzTkgRi/aTwIEm9dX3ZebNG3fsmOynxvVKgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB+RIwAGC+pNUhQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIDJHDX+vNOGRlufyQpz6nJxgGKLurXESglf3q0zYtPv+3mL5akBUWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECXytgAICnggABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJhTgTvPuGDNaHfm36c0z03qeXO6uMX6VeCutPWla5qZ3y87dkz2awh9EyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4EQLGABwooWtT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBkhg39lnr+6V4e9PKc+pySOSNAMUX9R/XWCyJO/oZXri1B077oZEgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAl9fwAAATwcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwJwJ7zj13Va/XPLWU8uxS8q21ZmhOFrZInwvUG0ryc3u6uXbLtm1H+zyM9gkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIHBCBQwAOKG8FidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoMhsPP888ebqd6Tay0/U5NLSzIyGMmlfACB3TX1qpHh5tdW3nTTLloECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8I0FDADwhBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLHJXDX+vVjQ93lTyxNfqamfntJWXZcC7p5yQiUlA/Wkles2b7+UyXXziyZYIIQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgBAkYAHCCYC1LgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQGQaBu3jyye6r5tjT1OTV5UkmWD0JuGR+UwI5a66sy2nn32i9+8cCDusNFBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGHABAwAG/AEQnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIPFSB6y++eGjjrvseVUuen1K+OzXjD3Ut9y0tgZocLanvrqXz6lO2f/GmktSllVAaAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQInBgBAwBOjKtVCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAkhaoSdmzftOZGe78r5r6uMTh/yW94ccaruTGtHnF3qH6p1u2bTt6rLe7ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoMqYADAoO683AQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4DgEbj/r/PXLO703tynfW5KR41jKrUtNoOZQkl/u1qNvOun22/cutXjyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4EQKGABwInWtTYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIElqDArg1bLqnJc5P8gMP/S3CDjy9Sm+QvU8ovrNl+0ydLUo9vOXcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsAQMABis/ZaWAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgcl8Cuc7d8Z2peWmq+vSbDx7WYm5eiwNZS6sRnt5/5R5fn2pmlGFAmAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQInEgBAwBOpK61CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAEhLYdc6m76+l+bmSPDJJs4SiiTIHAqVmVy35zdprfmXtHV+8aw6WtAQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQGTsAAgIHbcoEJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCxCdSk2b3hvB9NaV+WWrYk8XmDYyMchKtrSf42qS9ds2PbxwchsIwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBA4EQL+h/yJULUmAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYAgJ19qD/+vXLdneX/3hKXpKSMxz+XwIbO/cRZh+Vm2ttf2ntbdt+d+6XtyIBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQGR8AAgMHZa0kJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCDFrg66Vx61vnrxpr6jJT6vCRrH/TNLhwogZKyt6b+dpmub1jzpW13DlR4YQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDDHAgYAzDGo5QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQL8L1IsvHtq9+8CmNvUZTfJjSU7t90z6P0ECJTOp9e96tb543W23fOwEVbEsAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBkbAAICB2WpBCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAAwts37BhdLwZfkRb22eUWn64JGsf+C5XDKhAW5MdTa2vOvm2bb9VknZAHcQmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAnAkYADBnlBYiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQL9LXDz5s0jq6c7j0tpfzzJk5Os6e9Euj+hAjUH29Tf6nTr69fccssdJ7SWxQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDAgAgYADMhGi0mAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBL6RwF3r148Nd1c8tnTq82vNdyYZIUbgGwj0SsonZkp+at32mz5DigABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTmRsAAgLlxtAoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOhLgYmkeeHmzWumenlCbcuzkvqElNLpyzCani+BmuSmpLzmlB03vWO+iqpDgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBQRAwAGAQdllGAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDwrwjUiy8e2r37wKam1Kf1an6kJBckGYZF4BsL1L01+ZXhmeG3rLpz6x5aBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDB3AgYAzJ2llQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQN8I1A0bRnele0kpzRWp9alJzu6b5jW6oAI1+b22V1++7o5ttyxoI4oTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgCQoYALAEN1UkAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDwjQTqhReu2HNk6ntSy9OTXFKTNcQIPEiBT5Zan7vmtm3XPcjrXUaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECxyBgAMAxYLmUAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAj0s0BNyr4NF5zTZub7aspPJNmUZLSfM+l9PgXqbUnzijVrxt9Zbrhhej4rq0WAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFBETAAYFB2Wk4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGHiBXedseVgt9RWllsel5MyBBwFwTAJtbV8+0hv5n6vu3LrnmG50MQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg8aAEDAB40lQsJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEB/CtQN33LS7nL4aWnr01NyWZJl/ZlE1wso8N6jnfZnzrjlljsWsAelCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsOQFDABY8lssIAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMssC9G7Z8S5P8hyT/KTWnp6Q7yB6yPwSBWq9Pba5cc/tN15ak9xBWcAsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIPEgBAwAeJJTLCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAvwnsOee8p9RSJ2pyQZKV/da/fhdeoCaHU/PfepP7/+S0e+45tPAd6YAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLW8AAgKW9v9IRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwAAK3Hvmps1Np3NFLfUnSnJ2ks4AMoh8nAL3H/5PeWtbpl+3bvv2e45zObcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwIMQMADgQSC5hAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI9IvAvWdtfHzTGZpI6mOTjCbx2YB+2bzF1mfNO7tpXr7qti/uKEldbO3phwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAktRwP/kX4q7KhMBAgQIECBAYLEK1FpSig8ILtb90RcBAgQIECBAgAABAgQIECBAgAABAn0rUJOyZ/PmC+tM/nNJ+c81Obtvw2h8MQjUUvPhTqf52VW3fvHTJekthqb0QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUEQMABgEHZZRgIECBAgQIDAfApM1Can39DJlw901i2f6kwfWtVpV400bW1PmelNPawMrfi7Q897xD3z2ZJaBAgQIECAAAECBAgQIECAAAECBAgQWKoCNensPvO809pO+92lKc9IzaNLMrJU88o1LwJtkr8vpb52+vDYB06757OH5qWqIgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBwv4ABAB4EAgQIECBAgACB4xP4yoH/0fHdvWWd0o73Sl3flrqppGxpmrIltWyuJeem5qSktkN1cuOel15+5/EVdTcBAgQIECBAgAABAgQIECBAgAABAgQGW6Amzb4NG1bO1JFHltJ7RpLvSsppg60i/RwI1JLsaGv5HzND7f85fdu2nXOwpiUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BgEDAA4BiyXEiBAgAABAgQIJJmozdq1nx87vO/u5d3h8RdGqacAACAASURBVLG21zs9KZemyWWllMfUmjOS2vxrVjX51LLDk9+xc+LygywJECBAgAABAgQIECBAgAABAgQIECBA4NgFJpLm2Zs3r5jpdTY0tf5AqfUHU3LRsa/kDgL/qsCemvyfmXR+5fQdX9jBiAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTmX8AAgPk3V5EAAQIECBAg0H8CE7VZMfy3a0pn2cm1mTm9qXlkrfXhaZoLU+v5SU5+wFAlNak/d+DQyjdm4qKpB7zeBQQIECBAgAABAgQIECBAgAABAgQIECDwLwT2nHvuqto0Z6bXfHdt2++pKZeUkuWYCMyFQE093KT8yXTTe81pt976ublY0xoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcOwCBgAcu5k7CBAgQIAAAQKDIXDVB0aWT56yunSzppmaObN2yuVJeWxq+01JOelYEUpyW9uU7zn4wkv+IaXUY73f9QQIECBAgAABAgQIECBAgAABAgQIEBhUgdmD/0eb5szhmfybmvKUJJcmWTmoHnKfEIHJJH+T2rxuzcbT/6Zce+3MCaliUQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4QAEDAB6QyAUECBAgQIAAgQESeOv1Q8uPzJycyenTuk3nvDbNY2rqN5eURyR1XZKH9v6xZH8t5Y3LDh55086Jyw8OkKioBAgQIECAAAECBAgQIECAAAECBAgQeMgCswf/U0bOanszT6yp313SXJrU1Q95QTcS+NcFppL8fUp9S+nkvWu2bdsPigABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWTuChHeBauH5VJkCAAAECBAgQmGuBiWu6K05etbo7OXPGTOqWkvZRtdZvTsnDSsr6JN3jLVmTD7XJSw9vuOMzueKK3vGu534CBAgQIECAAAECBAgQIECAAAECBAgsZYG71q8f6w6Nnd8t5d+0NY9PySVJ1i7lzLItmEBN8sWavLktM3+8bvv2exasE4UJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4H4BAwA8CAQIECBAgACBQRWYuKZ7Unf4jJnh8piScklKLkyyJTVnJhmdM5ZSdiXlyvGVnXfd9axHHZ6zdS1EgAABAgQIECBAgAABAgQIECBAgACBJSZwYNOmU49M1/PSdC4uyXeVkm9PzYolFlOcxSPQJvlSTfnNyZnuVWfduXXP4mlNJwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBhcAQMABnfvJSdAgAABAgQGUqCWU1730RWHO8MXdHoz35TSXJa0j0vKuUmG5pykZH+SP5juzUxMXvn42+d8fQsSIECAAAECBAgQIECAAAECBAgQIECgzwVq0tmzadP6Xi8P79TmiW3Jpal5WCk5OUnT5/G0v3gFak12dpK3H03n10/f8YUdi7dVnREgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCwBAwAGKz9lpYAAQIECBAYYIFlb/rYGUMzeUSSx9Q035HUTUnWn5CD/191LsmH29RXHjy88rpMXDQ1wPyiEyBAgAABAgQIECBAgAABAgQIECBA4F8I3Lx588iqdujsTtv71jb18pI8uiZbSjKOisA8CByoye8M9eobT7pj2y3zUE8JAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHiQAgYAPEgolxEgQIAAAQIE+lVg2Rv/+qzuzPAT05Sn1rZuKqWcldRTTnSekuyoTTMxVkd//54Xf/OhE13P+gQIECBAgAABAgQIECBAgAABAgQIEOgHgetz8dB55x7aON32nlJTL0/K+TU5qyTL+6F/Pfa/QE2ONskftU3vFWtvvfWm/k8kAQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJaWgAEAS2s/pSFAgAABAgQI/KPA8jd8/JtKet+fWi4rKVuSnJOkmSeiXkl+bXqqvu7Iyy/70jzVVIYAAQIECBAgQIAAAQIECBAgQIAAAQKLVaDs3rx5fLotj2lqLu3U8ria+ohSs66WdBdr0/paegKlZKbWvC9Nec0pt970yaWXUCICBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAj0v4ABAP2/hxIQIECAAAECBP5J4A1/vny8rHpkaesTas1TUnJBSlmdWuf1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kI0WkwABAgQIEFhcAidf9fGVM9O5sPbaf5fkaallS0qGF1eXx9ZNTX532eHJ/2fnxOUHj+1OVxMgQIAAAQIECBAgQIAAAQIECBAgQGCwBK7JE7rfsuFLF/WS55Xk39XkpMESkHaOBI6Ukhva1HeMNvW947fccu8crWsZAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFhAAQMAFhBfaQIECBAgQGAABd56/dBJe6bP6HXrk1LL9yW5LMnJS0Oi/J81h488a8fE5bM/bciLAAECBAgQIECAAAECBAgQIECAAAECBL6BQN2wYXR3HbkspT4nZfZ7xlkBjMCDF6iHU8p1ta1vH5npfnDll76w+8Hf60oCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWMwCBgAs5t3RGwECBAgQILC0BN70sWUrZvKYkuY/JnlCko1JHV4yIWvefuDI5DMzcfnMkskkCAECBAgQIECAAAECBAgQIECAAAECBE6gwM5Tzh9vlrffVUueXZNLSzJyAstZeokI1NTDSf661OY3OmXqmtU7duxbItHEIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEkBgB4DAgQIECAAAECJ1rgh6/uLHvU2ad3S76r1Pof2uRxpWTsRJed7/Vryru6h4/81L6Jy33QcL7x1SNAgAABAgQIECBAgAABAgQIECBAoG8F9p39iNW9MvUDbanPKakPT9Lp2zAanw+Bw0n9i5L8enuw87G1u754YD6KqkGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC8ydgAMD8WatEgAABAgQIDKLAxI3DK1cc/uZa6w+mbX8wqRtSSneJUnyg9Opz9//sZduWaD6xCBAgQIAAAQIECBAgQIAAAQIECBAgcEIEDmzevHZyujy9KeVnauo5J6SIRfteoCaTTeqflKb51UNTh2846847j/R9KAEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4GsEDADwUBAgQIAAAQIETpTAxNXD46NnPTklz0/JRUnWnqhSi2Tda5umvOi+F116wyLpRxsECBAgQIAAAQIECBAgQIAAAQIECBDoG4GdZ52/vtNtf6qt+W9JTu2bxjU6XwLTSXlnm/rme8eGtl60devUfBVWhwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTmV8AAgPn1Vo0AAQIECBAYFIGrbh4Zn9z57CQ/npTNSbpLPnrNZ0opL9v/kks/sOSzCkiAAAECBAgQIECAAAECBAgQIECAAIE5FqhJ2XPG5jNqt/xSkh9OyYo5LmG5fhWomWlLfq1t8yvrbr/5tpL0+jWKvgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDggQUMAHhgI1cQIECAAAECBI5JYPx1nzy/lpn/UpKfGKif0lTKl0vbvn7/kZW/lomL/OShY3pqXEyAAAECBAgQIECAAAECBAgQIECAAIFkdgjA7g1bHlNSXtim/tuSjHEZdIGyo9T6270y/Wun7thx96BryE+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFBEDAAYBB2WUYCBAgQIEBg3gTG//vHLkgtv5FaHpHUVfNWeFEUqr2kvGum03nZkRc+5o5F0ZImCBAgQIAAAQIECBAgQIAAAQIECBAg0GcCN1544fBpB2cenyYvK6nfVpPhPoug3bkSqLmh1vat3ab3ntU7duybq2WtQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKLW8AAgMW9P7ojQIAAAQIE+khg5Wuve0ptyouT+vgk3T5qfe5aLflkm7zs0Isf+6G5W9RKBAgQIECAAAECBAgQIECAAAECBAgQGCyB2SEAp09OP6328ospeViSZrAEpE3Nh2ry5t7ksmtPu+ezh4gQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwOAIGAAwOHstKQECBAgQIHACBVa87iOXl9K8LSnnJOmcwFKLeumacjglrz14yro35Mc2Ti7qZjVHgAABAgQIECBAgAABAgQIECBAgACBRSxQn/CE7q7tdz2jafKaWuspi7hVrc2tQK2p70nN6+5ZPnzjRVu3Ts3t8lYjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcUuYADAYt8h/REgQIAAAQKLXmDVG6/7920vE0nO81OYZrerXleTnz34ksv+etFvngYJECBAgAABAgQIECBAgAABAgQIECCwiAVqUvZuOP8lbdpXDfLw2UW8RXPaWkndW2v5nZrua9be9g9fntPFLUaAAAECBAgQIECAAAECBAgQIECAAAEC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QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnrmABgDP3MqVBAgQIECAwCYQ2PUzv/ed1eP/0ZUbNkG6UiRAgAABAgQIENhsApVZuo6n+6EacksyvHfL9h0fePwHX3V8s1HIlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMDlKKABwOW4K2IiQIAAAQIELpnA/l/87M7l40f/Raq+/5IFYWECBAgQIECAAAECF1ygxqRPJXkiyW+lxl87tuWq9+UdN56+4EtbgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBbyigAYCbgwABAgQIECDw1QLdtftffOJ1PZv9Tio74RAgQIAAAQIECBDY0AKVTvdKUsvp+lB/pQpKAAAgAElEQVSP/bPHf/yN79/QOUuOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGUsoAHAZbw5QiNAgAABAgQujcCVP/2hXadr8mNJfuLSRGBVAgQIECBAgAABApdEYEx6NVUfrdnsZ47+2Jt//ZJEYVECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECm1hAA4BNvPlSJ0CAAAECBL6BwNLSsHPrn/8zNUx+Mcl3cSJAgAABAgQIECCwCQXWKuNvdte/W1zI+548+psPZ2lp3IQOUiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBwUQU0ALio3BYjQIAAAQIE1ovA/l+8Zeep41v+q6r6x0n2rZe4xUmAAAECBAgQIEDg/Ar06WT4eGr81eks7zt04Jov5r2fWM17bp6d33XMRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAXEADAPcBAQIECBAgQOAbCGz7uY88f7pa/zRD/k46E1AECBAgQIAAAQIENrHA6XS+kKpf72H49enkxKcPH8nxLN20tolNpE6AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgvAtoAHDeSU1IgAABAgQIbBiBd797svO+a76zevovk35ZUpoAbJjNlQgBAgQIECBAgMBzEHiokv8w1viecbrlD/Zuz5GHHv615Swtjc9hTkMJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEiiAYDbgAABAgQIECDwJwjs+ecffN5ssvC3qsd3purFsAgQIECAAAECBAgQ+IrAwap8qDu/0UN9fDo59dDhI285mqXSCMBNQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOBZCmgA8CzhDCNAgAABAgQ2j8C2f/KR50+3DH8/3W9PsnvzZC5TAgQIECBAgAABAs9EoB6t9G2V+mD32vtr7DuO/PibDyfVz2S0awgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+EMBDQDcDQQIECBAgACBZyCw810fftXQk3/U6f8iyeIzGOISAgQIECBAgAABAptNYC3JbV31HydjPnZ6dXbn8u0PHsx7bp5tNgj5EiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHi2AhoAPFs54wgQIECAAIHNJfC2d092v+G6v9Cdn+jOt1ayfXMByJYAAQIECBAgQIDAOQh07krl/T2O/2no3D1Od953/Ede89g5zOBSAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAptSQAOATbntkiZAgAABAgSejcDen79l7+rpLW8dhvxAUt+WZOuzmccYAgQIECBAgAABAptGoPrh6vpcV/1+9fA7vXb6S3u2Th44+M43ndo0BhIlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcA4CGgCcA5ZLCRAgQIAAAQK7/tnvXZHJ7K+mzjQBeHWSRSoECBAgQIAAAQIECPypAqdSdWd3f27o8cM95PezOr3z2E+84ck/daQLCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGwiAQ0ANtFmS5UAAQIECBA4PwI7f+F392d58eaq/oF0vinJ9PzMbBYCBAgQIECAAAECG15gtZJHOrk7qVtT+VCtjZ87uuPwA3nHW09v+OwlSIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOBPEdAAwC1CgAABAgQIEHgWAjv+6ccO1ML41yt5Z2p4Ubq9r3oWjoYQIECAAAECBAhsWoFO6mjSDyR9V6o+OKZ++8SWK+7IO27UCGDT3hYSJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQUKjmHiBAgAABAgQIPEuBXf/s967o6exvDqkf6eT6JN5bPUtLwwgQIECAAAECBDa1wFq6H0/VnZ3615PZ6nuO/Ph3HtrUIpInQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYtAKK1Dbt1kucAAECBAgQOB8Ce3/+lr3jyra/laH/2+58c5Lp+ZjXHAQIECBAgAABAgQ2jUD3wxmGj6f7I7NJ/9bJhcOfzzveenrT5C9RAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAl8loAGA24EAAQIECBAg8BwFnvdTt+6ZTVb+cnf++6Ren2TyHKc0nAABAgQIECBAgMBGF1hO+ovV9cEe+reHycLtw0o9eei2Lx3Pe26ebfTk5UeAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgGwloAODeIECAAAECBAicD4FfunX7rqOr353OD6fylnS8zzofruYgQIAAAQIECBDYWAKVo536aI31nyqzD/RscvexnU8ezzveupKkN1aysiFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBw7gIK087dzAgCBAgQIECAwNcXWPrs4q6dh17f48I7Kv02TAQIECBAgAABAgQInBEYK3mgM/5Wd35j69qWDz+xmiP53JdO5z03zxgRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCHAhoAuBsIECBAgAABAudTYKmH5P3bd2/f/j93xh8+n1ObiwABAgQIECBAgMC6E6jcmR7/99WV/Jvl3Vc9kqtfupabS9H/uttIARMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFwsAQ0ALpa0dQgQIECAAIHNJbB0y3T39i0/2KkfTHLj5kpetgQIECBAgAABAptWoNLd/Znq+u2h6jeOnDz1O1m6aW3TekicAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwDkKaABwjmAuJ0CAAAECBAg8Y4Glzy7u3XH0L691/b1K3pJk+ozHupAAAQIECBAgQIDAuhDoWTqrqbonqQ92+ndSR285/iN/4fGkel2kIEgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECl5GABgCX0WYIhQABAgQIENiAAktLw65tf/7GDNN/ku6/mGRnEu/BNuBWS4kAAQIECBAgsIkE1pKcSnI0yW2p+v9mK9P3nVz9tUeztDRuIgepEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDjvAorPzjupCQkQIECAAAECf1xg18/eemVmq/9NUt+f9LWpbOVEgAABAgQIECBAYJ0IdHefrqoTSY4ndXd6fF8m+dVjx0/flaWb5g0BHAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQInAcBDQDOA6IpCBAgQIAAAQLPRGDv0i17Zzu23JSuv5vku5LsTTI8k7GuIUCAAAECBAgQIHBRBao643gilaOdeqIqn+4xn6iuTw67t3/uyN979aGLGo/FCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGwSAQ0ANslGS5MAAQIECBC4TAR+6daFHYdOvWKYLPyN9PjXknpJkoXLJDphECBAgAABAgQIbHKB7pys9CMZ6pEac2tX3T4bZp85efzIHVl669FNziN9AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhdcQAOAC05sAQIECBAgQIDAHxfY888/+LyeLP6VMbO/XalvS2VvOt6buVkIECBAgAABAgQutkAnOZzk4UodHNN3TDL5cDLceuR/fN3dFzsY6xEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDY7AKKzDb7HSB/AgQIECBA4NIJvO3dkx2vveZVwzD9u528pVLflPSOSxeQlQkQIECAAAECBDaJwKlKHu/kkaQfrq5P9TD+/tqkbj31w298KFXzpgAOAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQugYAGAJcA3ZIECBAgQIAAga8W2PmuD181zKbf0jX+jSTfkcqLk0wpESBAgAABAgQIEDgvApVO53gqD1bnwaS+MCafTueL08nsS4d3bXkob3/d6nlZyyQECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDwnAQ0AnhOfwQQIECBAgACB8yew52c+/JIxw3em+79M1euTXHX+ZjcTAQIECBAgQIDAJhMYkzxZyf1dua/Snxt7uH3Sdd9s28J9x6/+lqdyc802mYl0CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFz2AhoAXPZbJEACBAgQIEBgUwks3bp9+5aVlw/Temslb033G5KabCoDyRIgQIAAAQIECDxrgU7ur8qX0rmrqm+v1BdmYx5c3FYPPvWObz/6rCc2kAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBiyKgAcBFYbYIAQIECBAgQODcBHb+wu/ur+WFlyX1vcn4XUm9/NxmcDUBAgQIECBAgMBmEOj06Urdk+TOJF/s1EeH6oNDjY/sHOqxg+9806nN4CBHAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhtFQAOAjbKT8iBAgAABAgQ2pMDen/3kC9f69Buq8zeTfnNS+zdkopIiQIAAAQIECBA4B4E+nOSuVP4gmXymk9syW300k3r8+D940xOpGs9hMpcSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIHAZCWgAcBlthlAIECBAgAABAl9X4Oc+sm3XuPjC9Mp3JMP3pvtNSaa0CBAgQIAAAQIENpXAsSSfTvKxHvKRccy9iwt5qk4vHDr0o689mqreVBqSJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBBBTQA2KAbKy0CBAgQIEBgowl05V2f3r597cTLJpP6nkq+pzvflsqejZapfAgQIECAAAECBM4IrCY5mPTtVfWpZLi1x+Gu3jZ56vhTdx3J0s0rnAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ2HgCGgBsvD2VEQECBAgQILCRBZZ62Jff27mye7gu4+zPDWP+SievTzQC2MjbLjcCBAgQIEBg0wispvOFVG6roT6RyifX1tbu39JbTxx6Xk7m7a+bNwVwECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwgQU0ANjAmys1AgQIECBAYAMLLPWQ3LZ1167ZC3o2fnfSf7VS355k9wbOWmoECBAgQIAAgY0nUDmd5BOVfLyS30uGT9R08dDhPnU6Hz24kvfcPNt4ScuIAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFvJKABgHuDAAECBAgQILCeBborv3zbdO9Tq8+fVb6n03+9JvWmdHau57TEToAAAQIECBDY4AKPpvvWYVIfqc5HFk4s3/p4spb5ufSWWVK9wfOXHgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC30BAAwC3BgECBAgQIEBgwwh05Yd+fXHPtbv/6jhMfjzVr0pqsmHSkwgBAgQIECBAYH0LPFqp303lP4yZ/ebxE296Iktpxf7re1NFT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOB8C2gAcL5FzUeAAAECBAgQuBwElj67uHvr8ZvHof+HJK+oZCHJvBmA93+Xw/6IgQABAgQIENioAp1k9vR5Oqk7k/7NJO/dXts/9eiPvObERk1cXgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQInB8BBWDnx9EsBAgQIECAAIHLUuDAu35jx7HeddNQ9T3V+UvpXJPqrUlNL8uABUWAAAECBAgQWH8Cq0lWkix38lB1PpYhnxink0+c2D7cmbe/7uT6S0nEBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhcKgENAC6VvHUJECBAgAABAhdVoGvvv7j1z85mq9+d1Hcn+dbu7KzKtiTeE17UvbAYAQIECBAgsM4FZvNi/ySnkpxI+lPduW3oySdXq28/9aPffnCd5yd8AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQuoYBir0uIb2kCBAgQIECAwEUXWOph2/Sj1yxs6e/sntyU9JuTHEiyO8nCRY/HggQIECBAgACB9SEwL/g/nuRY0g91hlsr+fRsyO37Hhw/f/Dn3zRvBuAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAcxbQAOA5E5qAAAECBAgQILA+Ba786Q/tWh77tZlM3zykvrPTL69kf1dtS7f3ietzW0VNgAABAgQInB+BtaSPJ3U4nSNd+Wx13141fm6yuPWzhw6/9mCWajw/S5mFAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECfyigsMvdQIAAAQIECBDY7AJLt2zduXPbi2vW35Ya3twZv7WSG5LsTTJsdh75EyBAgAABAptFoNfS9WRXPVwZ70vqc1X1BzXWFxZ37vjC4z/4quObRUKeBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhcOgENAC6dvZUJECBAgAABApedwN6lW/au7dj6Z9Pjm6uGb0nnZZ28pJJtl12wAiJAgAABAgQIPDeBTjIv6j9Y3Q916t6q4XNj5fbu+vyJk9/2WJZqfG5LGE2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFzE9AA4Ny8XE2AAAECBAgQ2DQC2376Yy+YDnltur+rq19RXS9MMj81A9g0d4FECRAgQIDARhPow0k9kvSjnTyUYfhCxtnnUrnj+KTuzjvfdGqjZSwfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTWl4AGAOtrv0RLgAABAgQIELjoAlf+9Bd2nZoeeXGtrd2YTL6janx1Ui9Ocn2S4aIHZEECBAgQIECAwDMWqBNJP5KuB7vyYCWf7p7dNaQPrq4OD5xae+PDWarxGU/nQgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFxgAQ0ALjCw6QkQIECAAAECG0lg57s+fNWwOr5oNp28eNLD63vIG5J+ZTq7N1KeciFAgAABAgTWrUAneTLpu5P6YpLPdPqeSj001PDQkRMnH87STcvrNjuBEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCw4QU0ANjwWyxBAgQIECBAgMAFEFhaGnYu/rkrMkz+TKpeXalvzZCXZ8zLU7niAqxoSgIECBAgQIDA1xMYkxzKmSL/4Z7u/lIqX+hx/NKkFw8eufrKh/J9L1Lw794hQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGDdCGgAsG62SqAECBAgQIAAgctSoPJzH9m693QdGIe6uofxlRnrDRnyynRemWTPZRm1oAgQIECAAIF1LNCnk9yVDF9MjV/MWJ9L5a709IlM6sljd+ZIfvl1q+s4QaETIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCJBTQA2MSbL3UCBAgQIECAwHkWqCzdum3brvGKLakrZ7N+TWX2+q68Jl2vSXrHeV7PdAQIECBAgMDmEbgn6Tu6hi9U+vOVfLrH2eFxbfnwidXJkSzdtLx5KGRKgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBGFtAAYCPvrtwIECBAgAABApdSYOnW7dv3ZM+wsrq3enxZD3VTpb47ySuSDJcyNGsTIECAAAECl73AsSSf6/RtVX3brCafng7jkdmp4diJK6fH8vbXnbzsMxAgAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEnoWABgDPAs0QAgQIECBAgACBcxT4pVsXdh3LnhpW9mZteFn3+JaqekunXpP04jnO5nICBAgQIEBg4wkcS+pz3f3JynhrjflsTadPzFZPHz++dXo873zTqY2XsowIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDwxwU0AHBXECBAgAABAgQIXFyBpVum+/Zt2758am3n4nT68tnYr0/n25K8NskNFzcYqxEgQIAAAQIXX6DGpJ9K6tOd8TPV+cxsMnyqxuHBhYWF5cNHDi/nJ99yOlV98WOzIgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBC6tgAYAl9bf6gQIECBAgACBzS3w7ndP8si3TPc99cUtq4u7rs5k4TtS+fbu8Y2purGSrZsbSPYECBAgQGCjCNQTVflUdz5V3Z8ah/H2rWPf98SpQ7Pk1Fry+bUsLY0bJVt5ECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4NkKaADwbOWMI0CAAAECBAgQOP8CS0tDXvGKuvKea7efri2vTtbe2um3VurPJNly/hc0IwECBAgQIHBBBCqn0/3JTt8yVD4ynFj58OHkePKWMT+ZTp35kVRfkLVNSoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgXUsoAHAOt48oRMgQIAAAQIENoPADUu3bH18x+6XDb3y+nRe39VvSOqllSykMiQZ5mWEm8FCjgQIECBA4LIRqPSZ/yXj/OzUo9Xjp6uG27ryybVh+OSpY9/2YJZq/nkHAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDxDAYVSzxDKZQQIECBAgAABApeHwN6f//29a7PVVw/j7LVj8tpKvjWpazq9WOktSU0uj0hFQYAAAQIENpDA2YL/te6sVtVK0o+n6vbuvr3G3D7N2u2HltceytJNaxsoa6kQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgogtoAHDRyS1IgAABAgQIECBwPgX2L92yc2Xbljd0hjel+js7uTHJ9iTbkmxNsnA+1zMXAQIECBDYJAJjUqeSXk4yP48m9fn0eNs4nX586OH2Y//gdU9sEgtpEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4KIJaABw0agtRIAAAQIECBAgcMEF3vbuyfbXXXtgkuH1PQzfWj1+S1I3JNl5pilAZXv6THOA4YLHYgECBAgQILBeBCqzdC0nfbLTpyp1Ml2PdfpTldmnK8Nndu5d/OxDb3/dyfWSkjgJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwXgU0AFivOyduAgQIECBAgACBP11g6Zatu3dveUHGujGz8cYMw43d9cpkvKpSuzrZlbPn9E+fzBUECBAgQGDDCKwkOZ7KsXQfT+qxpO9M1Z1J3d2ztbuOL6/enaWbljdMxhIhQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAOhHQAGCdbJQwCRAgQIAAAQIEzoPA29492fbGF1w9XZu8OMP44pr1S3qoV6bz/KT3JsOeTu+pZNt5WM0UBAgQIEDgMhCoMekTSR1JciTVR2rM/RnyhXTf05ncs9Z9z6m7p4/ml1+3ehkELAQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIO/JXhUAACAASURBVECAAAECBAgQIECAAAECBAhsagENADb19kueAAECBAgQIEBg19ItV862b71+6NxQQ26ozo1JXppkX6evSGpfkp1JvHd2uxAgQIDAehBYS/ehVJ5K1/zxsaS+2D370jBM75vNZvcvZvH+Qz/2unlDAAcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIXGYCipgusw0RDgECBAgQIECAwCUVqP2/eMuOU8e3XjeZ1AvGMddVjzeMlZdUDy9I9TVJrtYQ4JLukcUJECBA4KsFOiupeiwZH0nqkU7fV2N9aZjk4Nh5cHUYDy4vXvVI3nHjaXAECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcPkLaABw+e+RCAkQIECAAAECBC6lwNIt0x3bc+Wkt92QITd054ZKX9/d16XqQJJrUtmfzpZLGaa1CRAgQGBTCKyk8nh3HqnuecH/Q1X9cNfk/nFcvX+YDQ/s2Zr7Dr7zTac2hYYkCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsAEFNADYgJsqJQIECBAgQIAAgQsosNTD7t0f3TvO+toeFg5MxvGa7r6+Os/v1FWp8UAyXJX0VUmedwEjMTUBAgQIbFyBTupkOo+mxkeTnDm76oGh6v7ZLI+kx0eG6eLDx67/0qHcfPNs41LIjAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAptLQAOAzbXfsiVAgAABAgQIELgQAj/03i07rt63d9gyPi9r2Zch+5JclaqXJbm6u65J+ppK5o/PS2pyIcIwJwECBAisW4ETqTyc1EPV/XAnD3Xl3krdl66nelpPjTU8dfLIsUNZuml53WYpcAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD4UwU0APhTiVxAgAABAgQIECBA4FkIvPvdk90HX7CnTs/2rmayZ5jWnnQOVOpFlb6+O8+vyvM7eX6SK5NMn8UqhhAgQIDAOhOoyvHuPNypg1U5mB4fTOruIeP93XW4p5PD43IfOXHtgSP5vhcp9l9n+ytcAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIPFcBDQCeq6DxBAgQIECAAAECBJ6pwNIt0+dtXduxXNNd08munZXTu7I2XJlpvah7vKHG4boe+vpKruvOdc90WtcRIECAwOUp0MnJ6swL/e/vse+vqvszDF8cqw72Wh+Z9sqxcWHb0WOLe47lHTeevjyzEBUBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIXEwBDQAupra1CBAgQIAAAQIECHytwNvePTnw+pdvPZHjO6Zrw/a1mu0Ypovbu8dre5y9qobhhdW5odMv7gzXVnobRAIECBC4LAVW0nVv1XjvmL57SN2xNtadGfLopKcn1jI7sXBqPHl03+ETecdfWkmqL8ssBEWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECl1RAA4BLym9xAgQIECBAgAABAt9AYOmW6fO27tqxMhzbtjDbunVtyLaa9vNqzA3dw/WVvr67r0/Vdam6Pp3dSQ88CRAgQOBCC9SJdD/YyX2VecF/35+q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auELGLmI+79l984kX9z/01q+2Fc+2fr6cmVi27D129bniG337n7MbGaaA3wjN34NESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBlSVgAcDKmpdqCRAYJYE3fmb1xr33n5D5+dP6weDUlpzWV//olnZKWja2ZKqS9Ummkjjsf0Czrwdba5/rq32+pf9cks9kvv9MrZq4b3J+budw1WDn9vWrduSyc77ht/weUAoXESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWScACgEWCFZYAAQJ/R6Bl5rb1G9bufHy1+ccng8cleWzSTk6yNi1rv/5r1f5f9x/29+fzgT1Cd1fVbV3LbdW6D8/3/ccmhsMH5weTuyaGbfeONcNd2f7HezMz0x9YOFcRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA6fgAOmh89eZgIERlxg49VbH9nX3Jlp7XFp/eNS3WOTOj7Jmr/8WZ1kYsQZFrK9+1P5dFo+mXSfSPWfTCY+NVzVtk/u2b1n23En7c6/O3VvWquFTCoWAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCpBCwAWCppeQgQGGmBE2a2rtu2Yd8jB8PBEyr9E1N5Qlo9OdXWJW0iqcm//LUbaYiFaq6yL2lfTFcfa8nH07qPDbvhbV2/967Vw8m9905289m+dy4zFw+TOPC/UO7iECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAodVwAKAw8ovOQECK1bgjdetnprf8Kg2XHVh+uFFae38pE5KMplk/yH/v/pZsS0ubeGtT+rjLbmhqrb2lf89O9jx+XxpOJ+9x/R59uf7XHJJn9Yc9l/awchGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKGABQBLiC0VAQIrTKCq5ZWvbHnc49rR9xy9ds+e1U/MfPYf9n9aWntqqo5fYR0d3nJbKtUqrWr//0rlE9VlS+trSz/f3Tz78vPvPrwFyk6AAAECBAgQIECAAAECBAgQIEBgNATWXHPraW1u3zG779rxobzpufsSizVHY7K6IECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgHAQsABiHKeuRAIEDE5jZMpGHnzpx1Ne+Mrlrvp8aTEycl5bz0roL09dT0jJ1YIFc9XWBlmGq5tPaXCp70tonU7k1Xbuh9u29cedLn35vmg8ee1oIECBAgAABAgQIECBAgAABAgQILLTA9KtvOiMT7cqkNlVrP7sz696X2SfuzkzrFzqXeAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwsAIWACysp2gECKwkgZktE0cfffSa3dvuXzu/arBuctidldZflOouTMs5SdaspHaWQa3DJHuS7EoyW619vtXwllR36zDDrbt2X/RVHzBeBlNSAgECBAgQIECAAAECBAgQIECAwOgLXHLtYPqpJ/3bpG1OMkjy9uGwf+uuvas/lp88e7fFnKP/COiQAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGVK2ABwMqdncoJEHioAjNbJjatmV6/Z9W+qcFc29C1dlqf/pyWdl6SpybtYUl1DzXs2F7fUqmvH/bfkcr26todrc+trYY3DrvJ989ece5Xx9ZG4wQIECBAgAABAgQIECBAgAABAgQOs8D06246o/Xdf6nU9ybpUvl0S97cWv+H2z67+kt56zlzh7lE6QkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgGwhYAOCxIEBgdAVmZrpNay6aTjZt3Dc53NTN9adUl7Na6pxKe3JLTkgyMboAi9LZ/m8HezBVD6blvpb60DB1a9fX+3bsvugzmWn9omQVlAABAgQIECBAgAABAgQIECBAgACBhyZwybWDqXNP+oFW7ZVJjv3Lm+eTXNenf/PaqpvvvfJpOx5aUFcTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGILWACw2MLiEyCwdALXXjvYcMdJG9ve4RFzq9ZsbMPh0V3qSa3qSdXak5I8Ksnk0hW08jNVsrv91YH/1INJ94lKPtDa8AMb7/zKh+54w6W7V36XOiBAgAABAgQIECBAgAABAgQIECAwmgLrr77xSV3aTyXtOX9zGWolX2rJT3Wte/e2y8/7wmh2rysCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAisTAELAFbm3FRNgMBfCczctmrt9K5jJ+f7E1PDU/tBd0Yqj2p/cdj/EUmOhvWQBCrJzlTuSsudSftUSz6RfvjZdINPb9848cVcds7cQ4roYgIECBAgQIAAAQIECBAgQIAAAQIEDovAkW+8ZcPcnvqRJP9PkmP+VhFVd6W1dw279nO7fvy8D6S1/e8NehEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYRawAOAwD0B6AgQeosDMlompVYNN1U0cN9G644apR7ZWT0rak1I5My1TDzGiy5P5VN3TWrurWr6StE9Wamv6fHTnZH0xL75wNyQCBAgQIECAAAECBAgQIECAAAECBFamwNQ1t35rS706ybmp+nt/L1Rpf1aV12Y+H5l9+fl3r8wuVU2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHREbAAYHRmqRMCoysws2XNmtVrjpsc5MTW2mmV/ompnJG0U1ur0yptfSr+PHtoT8BcS+6oSIdBqAAAIABJREFU1B2pfL512dqq+3Rl7xc2TEzecYdD/w9N09UECBAgQIAAAQIECBAgQIAAAQIElqnA1Bs/cHS3d+8rqvL9Saa/UZmt5YPV129nOHj7jped9+ll2oqyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMBYCDsyOxZg1SWAFCvzodaunTzr61HTDM1LtzEr/uJY6JWknJ3V80lavwK4Od8nzSW5P8vEkH219fay6dvtktdvv3737q5m5eP+/9yJAgAABAgQIECBAgAABAgQIECBAYMQEpjff/F1p9eqknfkPtFZJvpLKu/uqn5m96sKPjhiBdggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBiBCwAWDGjUiiB0RdYt/mGEwY18Yg2kdPS16Mr7YlJ/8i07uRUbRh9gUXp8L6W9oWkPpdWn+779qGq+szsYP3nc/lZs4uSUVACBAgQIECAAAECBAgQIECAAAECBJaVwJpr3nPaZFZfnarvSrLqHyquVXal5XfmB/X6XT9+4QeXVROKIUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwJgIWAAwJoPWJoHlKnDE6z7w8OFw11nVBk9sqXOSdmzSjknVMWmZWq51L++6am9a98lWdXP6urlPfbFNTnx1Ym773Q9c9W3bk+z/Ni8vAgQIECBAgAABAgQIECBAgAABAgTGReCN162e3nPki5J6UZJjvknbO1rlj7rWv+bBKy760LgQ6ZMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLLRcACgOUyCXUQGBeBmWtXHbHu1McNMzynJWcneVQlJyQ5LsmR48Kw8H3WMMntad17UnVTkk/MV7t99xETd+eyc+YWPp+IBAgQIECAAAECBAgQIECAAAECBAisJIGpq2/6lpb2xiRP/KZ1V3a25B1d6zdbAvBNtVxAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBBRWwAGBBOQUjQOAbCWx8zfWb+jZ4bHXtrFZ5Slqe0NJOqOqPTmtrqB20wFxSX2qtvb+qva9a+8D8cPDZPcc+7Gv5/tP2HHRUNxIgQIAAAQIECBAgQIAAAQIECBAgMHIC06++9WGZqNdX6pKWrD2ABrel6vcHbeL1D15x7ocO4HqXECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMACCFgAsACIQhAg8A0EZrasWbd69WMHXZ6d1p6R1OlJ21jJhr/8cKk/fw7ywWnJrlRuTpffb/Ptxn2ruq+tney33X/cebO5tA0PMqzbCBAgQIAAAQIECBAgQIAAAQIECBAYZYGZ6tavu/VHu+SqpI47gFYryc6qeke6evXOyy+67QDucQkBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIHKKAA7iHCOh2AgT+hsDM1nVT6+fObX3OS6vzkzwhaUcmmUoyyergBSptV5e6OVU3DVtu6ify0ante7fd85PPnE1r+z+I60WAAAECBAgQIECAAAECBAgQIECAAIF/VGDqZ265uA3z80k95iFQPdAqv5m+3rD9pRd+9iHc51ICBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQOAgBCwAOAs0tBAj8DYGqtvHqG8+uDP5Jtfb8pE5Ly+pUVqe1iVT5c+bQHpjb09q1w9b99mDf9s+vmzx6z92z9+/NzMXzhxbW3QQIECBAgAABAgQIECBAgAABAgQIjJ3ANR9eP93PXpfWnp7kQN+7raTdlxq+dscRq38+l52za+zcNEyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFDjQD3ctYUlSESCw3AU2vfZPNvbd9HlV9Yzq2tOr6pyWNpHU5EP40Ohyb/Nw1ndfqr+x0v3RfE1et2fdxrtz/9vmMjPTH86i5CZAgAABAgQIECBAgAABAgQIECBAYOULbLjm5ldV5UeSbDzgblqrVvXBavWqHYO8My++cPcB3+tCAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEHhIAhYAPCQuFxMYY4GZ21ZNr3ng3HQT/zSpFyTdyUl1YyyysK23Vqm6qyr/q6r75dlNg4/nsnPmFjaJaAQIECBAgAABAgQIECBAgAABAgQIjLvAxqtvuqRPfjZpJxyExZauuiu2XXne1oO41y0ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcAACFgAcAJJLCIydwMz+g/0fm9i05q61893aJ7Y28c8q+e6kTkllMHYei9NwJdl/wH93qj6c5Neqqz/YeflFX1ucdKISIECAAAECBAgQIECAAAECBAgQIEAgmdr8/se2tu/3kpx+UB5Vb53r22v2XHX+7dm/2NSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZUwAKABeUUjMAKFqhqedNnV03tvGtDm5h8dFV9a2t5ZtI9JakjVnBny630+SSzSX0prXtnG/bvzp68b/vMhfcvt0LVQ4AAAQIECBAgQIAAAQIECBAgQIDA6AlMv27rUa3mrqtqZyf7l8E+5Nfdrbqf77v5n7fQ9CHbuYEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLfVMACgG9K5AICIy7wlq2T0zuyseb3HNu6wVOTfE9ST0/aphHvfKnb213JPUl9ctB1b+/m5975wFVP/9JSFyEfAQIECBAgQIAAAQIECBAgQIAAAQIEpq+5+e2pfGeSyYPTaHd0Gf6Hbbv2/VlmLt6/9NSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZIwAKABYIUhsCKEnjL1smp+7oj2mDXkekGj07V85P27CSPXFF9LPdiWyqVB1K5Ny039TX4H7Of696bt54zt9xLVx8BAgQIECBAgAABAgQIECBAgAABAqMrMH31rZuT+uGk1h9sly15WyZqZvv2P/58Zmb6g43jPgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBD42wIWAHgiCIyLwMxMN73qaZsyWHNUJiZPz3z/zHTt7FSelNQR48KwRH3Op7V7WurO9PV7fd+uP279Azd/9oXP27tE+aUhQIAAAQIECBAgQIAAAQIECBAgQIDAPyiw4epbX1Spn0xq40EztXytVb16bVv/i3dfftbsQcdxIwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAj8LQELADwQBEZc4Mg33rJhfk+O7Wv+pK4bPKMqZ7fkrEpOGfHWD0d7e5K6u9J9qvX1rtbnxu0vPf9/p7U6HMXISYAAAQIECBAgQIAAAQIECBAgQIAAgW8kMH3NLd+fqp9JsukQhW7puvYj23ae98HMtP4QY7mdAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJJYAOAxIDCKAtdeO1j3hROO7Vp3emuDc6vvn9JaPT5pj0kyOYotH+ae5pL6Ulp3U6re2/fd+2Y3DT6ey86ZO8x1SU+AAAECBAgQIECAAAECBAgQIECAAIG/JzC1+cYXtNb9QpKHHRJPpU9r/31dW/vjd19+1uwhxXIzAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHxdwAIADwKBERI4avMN07u7idNa6oz0uShdLkrlsS1ZN0JtLp9WWranzxfS1UdS9Wfzg8l3777li3fmty8dLp8iVUKAAAECBAgQIECAAAECBAgQIECAAIG/LTD92pu/M11+OclRC2Bzd+sG37n9x5+6Na3VAsQTggABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmMtYAHAWI9f8yMhMFPd9NT7j0zmz8gw56Xl6Wl1ZqpOTtrqkehx2TXRtiX1iVRuSvKeQZ+PPHjk5Fdy2Tlzy65UBREgQIAAAQIECBAgQIAAAQIECBAgQODvCExfc8t3p/KLSS3EAoCk6jU7TrvgJ3JpsxzV00aAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFDFLAA4BAB3U7gsAlUtanXXH9UVk0+vatcXMmTUnlUkmOSdIetrtFOvDuVD1ZyXfr5G/uufXrXaRfd7UOtoz103REgQIAAAQIECBAgQIAAAQIECBAYNYEN19zyr6vqvyY5coF6++RwbvJbd738nLsWKJ4wBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGFsBCwDGdvQaX7ECVW3j6/73qcNW39b1/TMreWJVHtlaW7Nie1r+hc8l7ROt73+3uvbHg117PvbgzMUPLv+yVUiAAAECBAgQIECAAAECBAgQIECAAIG/LzB1za2XtarXJnXEAvlUJT+884oLfn6B4glDgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBsRWwAGBsR6/xlSZw7DUfXj9bs+e0yrmttW9N8rhKTkrSrbReVlC9fUs+WGl/3lX3R/1g9sM7XnLxvSuofqUSIECAAAECBAgQIECAAAECBAgQIEDg7wlMXX3Tf25pL0kyvVA8LXn39l17npOZi+cXKqY4BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGEcBCwDGcep6XlECa19104kTg5xbE90zWt8/K60dk+RoB/8Xe4z1sUr3p+m736kun5499Yv35NJLh4udVXwCBAgQIECAAAECBAgQIECAAAECBAgstsD05pt/OS3fl2TNAubaUV07f+dLzv/4AsYUigABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmMnYAHA2I1cwytFYO2r3n3ixOp1z2uVSyt5ZJKHJdmwUupfqXVWsqe1/Hpf/X/LqsFdsw/uvs83Vq3UaaqbAAECBAgQIECAAAECBAgQIECAAIG/J/BDWyenHzV3fZJzkyzo3xP1lX89e+UFb6NOgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgcvsKAf7Dr4MtxJgMDXBWb+YN2GtZueWG3wrUl7TpJHJ7X/4P8EoUUXqNby7kquHe6be8eulz/9q0mrRc8qAQECBAgQIECAAAECBAgQIECAAAECBJZQYO3mm86daN1vJvWIhU5blf+288oLfnih44pHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBcRKwAGCcpq3X5Stw7bWDDZ878SnVdZe1lmdV8rCk1iVtsHyLHqnK7m0tP9fN51cfPO64r+b7T9szUt1phgABAgQIECBAgAABAgQIECBAgAABAn8psOGam36sqnt5UkctAsrtO6644NRFiCskAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExkbAAoCxGbVGl6PACW/Zum7Htj1nV7rvbdWem5bT0jKRit+bSzGwyrbW6o8zMfHLExP9Tfe/8LwdSaulSC0HAQIECBAgQIAAAQIECBAgQIAAAQIEllrgqM2fnN7bPfjmVL0gydqFz9/u33HF+Q9b+LgiEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYHwEHDIen1nrdDkJzMx0GwYXPzKrV72oUt+X1jY69L/kA/pcWr95Yrjr2geu+rZtS55dQgIECBAgQIAAAQIECBAgQIAAAQIECCyxwIbNt5xfrX4pyeMWJ3Xt3XHFhWsWJ7aoBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGA8BCwDGY866XA4CVS2v++N1U8NNZ2cwvKSrPL+S05ZDaWNVQ2VnWr27WvvZnasfuDkvfN7esepfswQIECBAgAABAgQIECBAgAABAgQIjKfAGz+zesOee19RyX9KcuQiIezLrj0n7pi5+N5Fii8sAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIERl7AAoCRH7EGl4PA0TNbpnavX3Vqqv1Iq/av0jK1HOoasxr6JPdW6jfnu3rDnpdcdPuY9a9dAgQIECBAgAABAgQIECBAgAABAgTGWGD66huenhq8KS1nLSLDvsna88j7r7z4jkXMITQBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRGWsACgJEer+YOq8DMTHfkkc+Z2jVbR062uixd/u+kHXFYaxrH5C2Vyt4kn2nVfmF7t/ZXc/lZs+NIoWcCBAgQIECAAAECBAgQIECAAAECBMZT4KjNN0zva91rqrV/m1rUBbU7Nk7UsXe8+MLd4ymtawIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBy6gAUAh24oAoG/J3DkG2/ZsG9nTsqg/97W2ncmeSqmwyLQJ+3+pG5qqZ/fPpH3xAdPD8sgJCVAgAABAgQIECBAgAABAgQIECBA4DAJzGxZs2Hd6u+ptP+c5IxFruKWHVdccMEi5xCeAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECIy1gAcBIj1dzSy4ws2XN9PS6U1r1z0+f51XyjCSrlrwOCZOWSuWeJP/vIIPffPCKcz+EhQABAgQIECBAgAABAgQIECBAgAABAuMmsGHzLedXq5dV8uyWrF3M/iv5jZ1XXPCvFjOH2AQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBh1AQsARn3C+lsagZktExvXrXp4tVxQ6S5N5VuTrF+a5LJ8Y4F6sLX2a/3quVftfOEz9i8C8CJAgAABAgQIECBAgAABAgQIECBAgMBYCUxdc+MxrdrlSfvBJBsXu/nW8srtl18ws9h5xCdAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAoC1gAMMrT1dviC8xsmVi7YfWxk/vqSdW6702rf5LWjkrF763F1//HMtyZ1Dtqfv4VO1/m8P/hHYXsBAgQIECAAAECBAgQIECAAAECBAgcDoENr7/pyMx1/6Jafiyp0xe7hpY2m374z7dfddEfLnYu8QkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDDKAg4pj/J09baoApteu3XjXPae1Qbd81J5bqoendbWLGpSwQ9E4M609qtz83O/uOelT//8gdzgGgIECBAgQIAAAQIECBAgQIAAAQIECIySwJEz123Yt/7I57WqFyc5O0m3+P3VzbVm/rt3vtBS1sW3loEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgVEWsABglKert8URuPbawcbbH35Kn/57UvnOJE9McuTiJBP1oQi0ZLZSr5prg9/ac/l5X3go97qWAAECBAgQIECAAAECBAgQIECAAAECIyEwc9uqDWu2X1xdu6qS81qydkn6au1lOy4//zVLkksSAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjLCABQAjPFytLbzAUZtvmN6byWdV61/QUhcn7YSFzyLiQQm07Exfb2qTed32F194/0HFcBMBAgQIECBAgAABAgQIECBAgAABAgRWssDMbaum182el+pfmpZnJVm1JO1UdtagnbfzJed/fEnySUKAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIERFrAAYISHq7UFFJjZMnHEmokzh133L1Pdc9Py2CQTC5hBqEMQqGRfl1zdt/5NOy+/6GuHEMqtBAgQIECAAAECBAgQIECAAAECBAgQWJkCb9k6Ob1t7txW9RPV2sVLdvj/L7T+x45d0/8hM4/ftzLxVE2AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHlI2ABwPKZhUqWqcCRM7dsmF/X/5tq7QWpPDnJxmVa6viW1fKr8317xe4rz/tK0mp8IXROgAABAgQIECBAgAABAgQIECBAgMBYCrxl6+TUA3sv6LruJyrtGUmtWkKHr7Sqf7b9igvel+b92SV0l4oAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgREVsABgRAerrYURmHrdjc/ohoPvqVYvSHJiEr9nFoZ24aJUvXfY2ot2ve/LH85vXzpcuMAiESBAgAABAgQIECBAgAABAgQIECBAYAUIvPEzq6f23vvdXeUHKnlmksklq7q1uST/dUfWzuTys2aXLK9EBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGGEBh5lHeLhaO3iBqWtuPKalfWfSLku1Rye18eCjuXPxBNrHWtpPb981+L3MnLNr8fKITIAAAQIECBAgQIAAAQIECBAgQIAAgWUo8ENbJ6ceNf/9LfWjSU5PsnqJq/zz6toP79z5zk9mZqZf4tzSESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA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gAABAgQIECCwYgSqWl75scmjc8+qHavXHDXR5Tmta/9XVT25JWtWTB/fsNCaT9rtrdrrV2X+1++98mk7VnY/qidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMB4CFgAMB5zXvFdTr36vUe3wep/11r/o5WcvOIb0sBBC7Tki+nrdd3qtW978EVPfvCgA7mRAAECBAgQIECAAAECBAgQIECAAIHxFXjL1smN9++eGk50J7YanJvU09PytFSdmrSJFQ3TUqnsTPKe1ve/sHp643vu+eHH7///XgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwAgQsAFgBQxr7EmduWzW9fttz07efTmtnjr0HgCRta0t+cvtEvyUvvnA3EgIECBAgQIAAAQIECBAgQIAAAQIECHxTgR+9bvX0w9dOt7nVR2TQPzo1eH61fFvSHplU903vXxkXzCe5O2nvaNn7M9uv+JbPrIyyVUmAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECfyVgAYBnYXkLzMx066ef+4Ru2L8qLc9PxTO7vCe2dNW13JDk6unZe99958x37lq6xDIRIECAAAECBAgQIECAAAECBAgQILByBKptfM1Hjxh2s8cl/Zkt3QXp2jmpekKSTSunjwOqdF/SPlDJrwz3dX+0+xXnfvmA7nIRAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCwrAYepl9U4FPN3BTa+5vpN/WDiPyb5z0lWEyLwtwRau7lV/1/Wth3X3335d8zSIUCAAAECBAgQIECAAAECBAgQIECAQF5/09p1c2s2tdrzsDYYHJ0aPq2lPTNVT01rU6Mn1Pqk7k3L+7tqP7tt1zv/NDMz/ej1qSMCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMh4AFAOMx55XZ5Vu2Tm7cPvctfV8/m9bOXJlNqHrxBermqv51O3fPXZeZi/csfj4ZCBAgQIAAAQIECBAgQIAAAQIECBBYdgIzW9YcsXrNccPWTqpWj++6nJnKGZWckeSkZVfvwhVUSftsVX69au73Z696+ocXLrRIBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIHA4BCwAOBzqcn5zgZmZbuP65z687/uXpuUHv/kNrhhngZa8r0/bXOlunL3i3K+Os4XeCRAgQIAAAQIECBAgQIAAAQIECIyFwLXXDqY/e+QRNbn2+EEbHF/D9piq4ZNb185K2mMrtW70Hdq9SX00VW/bsXvvb2Xm4p2j37MOCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMPoCFgCM/oxXZodv2bpuetvcv0wyk+TEldmEqpdWoD6WtD/sM3iDJQBLKy8bAQIECBAgQIAAAQIECBAgQIAAgSURqGobX3vDEdUNTk/LGdXy+FQenbTTkuz/mV6SOpZDksqn09qvtFZbts/ueX9mLp5fDmWpgQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOXcACgEM3FGGhBS65drDxqSefVamrK+1ZCx1evNEVaMmOpH65T/6/nRtXvS+XnbNrdLvVGQECBAgQIECAAAECBAgQIECAAIExENj/fvFTjn/4cNXkw1vfPyJ9e1ylzkprp7fk+CSTY6Dw1y1W3ZWW93et/fq22cl3ZMZ7oGM1f80SIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDAWAhYAjMWYV1iTb9m6bvrBfa9Iaz8yVt/YtMLGtFzLbWmzlfpQS95e892v7XjZefct11rVRYAAAQIECBAgQIAAAQIECBAgQIDANxCYqW7j6q2n9hPDJ7S+nlytnpi0E5KcmOToJKvH0a2lfSjV/9KwhtfPvv+u2/Lblw7H0UHPBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGHUBCwBGfcIrr7+28eqtj+gz/ydJnbbyylfxMhGoJF9J8s6udb+5bcPg+lx2ztwyqU0ZBAgQIECAAAECBAgQIECAAAECBAj8XYGZLWvWr5l4TNe6p1Trntwqj0rqlLR2ikWxeSCV322trl1V/Y33Xvm0HR4gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBhdAQsARne2K7OzmS0T0+vWvDjJa5N4PlfmFJdT1bvz9W/Fqt/rW/+u2VO/8tFc6luxltOA1EKAAAECBAgQIECAAAECBAgQIDCeAkdtvmF6d3WnttZOb617VNI/NsnpSU5MclySNeMp89ddt8quSj6Q9L/b2uD3t+/a/YXMXDw/7i76J0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwKgLOGA96hNeYf2te8PW4yfm5m6q5NQVVrpyl61ADZN2X1KfSF9va6va27e/+ML7l225CiNAgAABAgQIECBAgAABAgQIECAwigIzWyY2rZk4Yb4NntJa9+RKPblaTmqVDcn+n9qQ1lalLIb9y/HfU+n/Z1f1G92quU8+uO2Z2zPT+lF8NPREgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn9bwAIAT8SyEpi+5tbLU/3mxIc8l9VgRqOY/d+M9bVqeW+St+yc/fJNmbl032i0pgsCBAgQIECAAAECBAgQIECAAAECy0ygqk296fqjul2Dc/vWPbV1eUoqp1Wyoe0/7J82lWRimVW9HMrZ3VLX9+neWnO5Yfb08+7NpW24HApTAwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgsjYAFAEvjLMsBCBz1SzdM77l3cFtrOeUALncJgYMV2JO0u1L9n3SD4Vu3TX/8I7nssrmDDeY+AgQIECBAgAABAgQIECBAgAABAgT+QuCozTdM7+4G57W0C7qq8yt1RtLWJdn/szbJJKt/SKD1SX2qkjcN9+17x+4Ns1/LC5+3lxcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjJ+ABQDjN/Nl2/H0a278dxl0v5zEc7lspzQihbVUqvYl7dNpua7ru/+1be19H/WB2hGZrzYIECBAgAABAgQIECBAgAABAgSWRGD9T99ybFbVE7pqT2qtnlyVpyQ5tpLVLVmVZGJJClnZSfokX07L/2x9/c723Xs/kpmL96zsllRPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoci4KD1oei5d0EFNmy+5R3V6vkLGlQwAv+4QCUZJrk3Vb8ynJ9/066XP/2rSdv/z70IECBAgAABAgQIECBAgAABAgQIEPibAjNb1hwxvfqxw75dnOSZqZyX1MakdUm6tHQpC14fwkOzN6nrBv3glQ9uGnw8P3T2fJr3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BBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgEwjQAGATLDIpIoAAAggggAACCCCAAAIIIIAAAggggAACG14gwvrYwyPjK8tTtfroxED1SbnclpQOROSDdhyQ0gEpDii0R1J9w+dMAutJoBvSSSuOhvzlpNrDpeKvl977pmfWU5DEggACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggsPEFaACw8deQDBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgeESeOeR+vShlYnk0cl+I0+myJMq00yO8qCtayUdlH2tIvZL2jJcyZPNOhJYkuKU5JO2nwjpwSQ/NP+eO364jmIkFAQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgSEToAHAkC0o6SCAAAIIIIAAAggggAACCCCAAAIIIIAAAhtK4OPfb050T06nKKZVljOupenI3i3FNWFdJWmPwlfJUd3ftqFyI9iNKLBi6WRIxy09GhFHXJaPjdanHjvxntctbcSEiBkBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQGBjCdAAYGOtF9EigAACCCCAAAIIIIAAAggggAACCCCAAAIbVCCsjz48MirNpp5mnTTrKLbY2heRD9qxO1QV/muX5F1yTCvEz7A36GpvrLCja/lkWE8p/FgoP2L57zRITyz2/vNZtVp5Y+VDtAgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAhtZgDdPbuTVI3YEEEAAAQQQQAABBBBAAAEEEEAAAQQQQGC9CnziSH323OLOshjdGVk7Q7EnQnttXSVph+QdrvaOHREalyj2X69LOaRxheR5Sd+JyI846VFF8b0y+k8ur/RPqnXPYEjzJi0EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIF1LkADgHW+QISHAAIIIIAAAggggAACCCCAAAIIIIAAAgisa4EPf3F8pBzbmlJtWz15awzydhXeFvIuRewLaafsHY7YLWmLpPq6zofghljAWYozCv297O9J+W+j9BHV8uPtpT87pVYrD3HypIYAAggggAACCCCAAAIIIIAAAggggAACCCCA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EEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEDgOAmciEKH4wROXxFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBB4LwECALgvEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEDgCAgQAHIFJoAsIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIEADAPYAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII/P/t3DENAAAAwjD/rmdjRx2Qwg0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwEHAAMChBBAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg4ADABggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwEDAAcCgBBEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIADABsgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIDAQcAgxJEIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDgBsgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDAQcAAxKEIEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDgAsAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDAQcAAwKEEEAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDgAMAGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQMABwKAEEQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAMAGyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgMBBwCDEkQgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIOAIi3leIAAAIKSURBVGyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMBBwADEoQgQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIOACwAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMBBwADAoQQQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIOAAwAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBAwAHAoAQRCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAwAbIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECA4EAN2ERZLhCO+sAAAAASUVORK5CYII="/> */} +{/* <image id="image1_19_150" width="2000" height="2000" xlink:href="data:image/png;base64,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"/> */} +{/* <image id="image2_19_150" width="1000" height="1000" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAAAgAElEQVR4nOzdebzt13w//tfNPJA0BIloKFUtiaHXmEEQgsSUIK2iP/MUQ79FzXJD0ZQOKhIN2m+FRg0ZTaWmGFu9voaYKYKEGoMEIe7vj3Wue+695+yz9zl777U+n8/z+XjsR87N2Xefd3LW+qz92mt91koAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOiPdbULAABg9davX79pqX+/ceNG7/MAOsaFGwCgo5YL54sJ6gDd4YINANBB44TzzYR0gG5wsQYA6KBJAvpmgjpA21ykAQA6aDUBfTNBHaBNLs4AAB20loC+maAO0BYXZQCADppGQN9MUAdoww61CwAAoK5phn0AVs+npQAAHTSrUG02HaAeF2AAgA6a9ay3oA4wfy68AAAdNK9l6YI6wPy4Bx0AgGW5Px1gfnwiCgDQQTWCs9l0gNlykQUA6KCaM9uCOsBsuLgCAHRQC0vPBXWA6XJRBQDooBYC+maCOsB02CQOAIA1aenDAoAu82knAEAHtRqKzaYDrJ4LKABAB7Ua0DcT1AEm58IJANBBrQf0zQR1gPG5YAIAdFBXAvpmgjrAymwSBwDAzHXtAwWAGnySCQDQQV0OvGbTAZZmBh0AgLnq8ocLALMkoAMAMHdCOsD2BHQAAKoQ0gG2JqADAABAAwR0AACqMYsOsIWADgAAAA0Q0AEAAKABAjoAAAA0QEAHAACABgjoAAAA0AABHQAAABogoAMAAEADBHQAAABogIAOAAAADRDQAQAAoAECOgAAADRAQAcAAIAGCOgAAADQAAEdAAAAGiCgAwAAQAMEdAAAAGiAgA4AAAANENABAACgAQI6AAAANEBABwAAgAYI6AAAANAAAR0AAAAaIKADAABAAwR0AAAAaICADgAAAA0Q0AEAAKABAjoAAAA0QEAHAACABgjoAAAA0AABHQAAABogoAMAAEADBHQAAABogIAOAAAADRDQAQAAoAECOgAAADRAQAcAAIAGCOgAAADQAAEdAAAAGiCgAwAAQAMEdAAAAGiAgA4AAAANENABAACgAQI6AAAANEBABwAAgAYI6AAAANAAAR0AAAAaIKADAABAAwR0AAAAaICADgAAAA0Q0AEAAKABAjoAAAA0QEAHAACABgjoAAAA0AABHQAAABogoAMAAEADBHQAAABogIAOAAAADRDQAQAAoAECOgAAADRAQAcAAIAGCOgAAADQAAEdAAAAGiCgAwAAQAMEdAAAAGiAgA4AAAANENABAACgAQI6AAAANEBABwAAgAbsVLsAaNH69es3jfr+xo0b182rFmjRhnev266PbDhyk34BALAG3kzBIisF820J6gzJUqF8yecJ6jAXk45ZLTOe9puJDxifzgBZ25scgwpDMG443+rvCOoMzLxDiIBO60x8wOR0AgZtmm9uDCr00WqC+XavIajTc7VCiIBOq0x8wOrpAAzWrN7YGFjog2kE8+1eU1CnZ2qHEAGd1pj4gLXT8Bmceb2hMbDQVbMI5795bSGdHmglhAjotMTEB0yHBs9g1HgjY1ChS2YZzLf7WYI6HdVSCBHQaYGJD5guDZ3ea+ENjEGFls0zmG/3swV1OqLFENLC+DYtxsnuMfEBs6GR02utvXkxsNCSmsF8MSGdlrUcQlob49bC+NgdLbQ77YU+07jppRYGj1EMLNTWSjhfTFCnNbXHkpXGitr1TZNxsRtaa3PaDX2kUdMrrQ0coxhUqKHFYL4tQZ3aWhtLlhsvWqtzLYyJbWu5rWk79I0GTW+0PHiMYmBhHroQzLclqDNvrY8ji8eL1mudlLGwTV1qZ9oQfaEh03ldGjxGMbAwC10M5osJ6cxDX8aRLjMGtqXLfUJbous0YDqry4PHKAYWpqXr4XwxQZ1Z6etY0jXGvnb0pU9oU3SVhkvn9GXgGMWgwlr0KZhvS1BnWoYwlnSJca++PvYJ7You0mjplD4OHqMYWJhEn4P5tgR1Vmto40hXGO/qGUKf0L7oEo2VThjC4DGKgYWVDCmcbyakM4mhjyOtM87VMbR+oZ3RBRopTRvawDGKQYWlDDGYb0tQZyXGkvYZ4+ZryH1CW6N1GihNGvLAsRIDC4lgvhRBnW0ZS7rD2DYf+sQW2hyt0jBpjsFjPAaWYRLMRxPSSYwjXWRMmy19YnnaHq3RIGmGwWN1DCzDIZyPT1AfLmNJNxnLZkefGI82SCs0RKozcKydQaXfBPPVE9SHw1jSbcax6dMnJqcd0gKNkGoMHNNnYOkXwXx6BPX+Mpb0g/FrevSJtdMeqUnjowqDx2wZWLpNMJ8NIb1fjCP9YtxaO31i+rRLatDomCuDx3wZWLpHOJ89Qb37jCX9Y7xaG31itrRP5kljYy4MHPUYVLpBMJ8/Qb17jCX9ZaxaHX1ifrRR5kVDY6YMHO0wsLRJMK9PUG+fsaT/jFGT0Sfq0VaZNQ2MmTF4tMnA0gbBvC1CepuMI8NhbBqfftEGbZZZ0bCYOgNHNxhY6hHO2yWot8NYMizGpJXpE+3RbpkFjYqpMXB0j4FlvgTz7hDU6zGWDJPxaHn6RPu0X6ZJY2IqDB7dZmCZLcG8uwT1+TGODJtxaHv6RPdox0yDRsSaGDz6xcAyfcJ59wnps2UcITH+bEu/6DbtmbXQeFgVA0d/GVSmQzDvH0F9+owlbGbsKfSJ/tCmWS0Nh4kYOIbDwLI6gnn/CeprZyxhW0Mfc/SJ/hp622ZyGgxjM3gMk4FlPIL5sAjpq2McYTlDHWv0ieEYahtnchoKKzJ4kBhYRhHOh0tQH5+xhFGGOMboE8MzxHbO5DQSlmXgYFsGlq0J5mwmqC/PWMI4hjS+6BMMqb0zOY2D7Rg4WMnQBxbBnOUI6lsYS5jEEMYVfYJtDaHdMzmNgq0YPJjE0AYWwZxxDD2kG0dYjT6PJ/oEK+lz+2dyGgNJDB6szRAGFuGcSQ0xqBtLWK2+jiP6BOPqax9gchoCBg+moq8Di2DOWg0hqBtHWKu+jSH6BKvVt77A5HaoXQB1GUBgecI509DndrR+/fpNxhHYmj7BWmg/COjAVBhQYFj0ediefsE0aEfDJqAPmM4Py+vzrCfz17f2ZPwAmC3X2eES0IGpMZgAMFTGQGAaBHSAbfRtthOmSQgBgNkR0AEAAKABAjoAAAA0QEAHAACABgjoAAAA0AABHQAAABogoAMAAEADBHQAAABogIAOAAAADRDQAQAAoAECOgAAADRAQAcAAIAGCOgAAADQgJ1qFwAt27hx47rFf16/fv2mWrUAAAD9JqDDErYN5tv+e0EdgFE2bty4zlgBWyz13kofge0J6LDIcsF8uecZWABYbPE4YqyA0e+tfJAF2xPQIeMH86X+noEFgMTqK1jMpAesjoDOoK02mC/1GgYWgGGaJIgYKxiC1by/8n4KCgGdwZpGOF/q9QwsAMMghMDWpjXxoX8wZAI6gzPtYL7c6xtcAPrJ6ivYmkkPmB4BncGYdTBf6ucZWAD6RRCBLUx6wPTtULsAmId5h/PFP7fWzwZgemZ9PTdW0DXzbLPeTzEkZtDptVYu5j4BBuimeYeQxFhB22q+t7I6kSEQ0OmlVoL5trz5AuiG2iEkMVbQllbeW+kf9J2ATq+0MnisxCfAAO1qZSwRRGjBtPrDhnev26odbzhy05peV/+gr9yDTm+08oZqXF2rF6DvWr3PtcWaGIZZhfPN/26pfz+pVvvtWvXxv4nxmEGHisykA9TXhTfCZguZp1kG8+WeM40Zdf2DPhDQ6YUuvLkCoD1dGz8EdWZtGn1iNTPj0wjqfQnpXbsuMV2WuENlLsIAdXT5+tvl2um3tS5bn8ay9y7TtzGDDgAMjjfBMF3TDNbTWvbeJa5JbCag03kuaAAAdcxyxnsIQd37WLYloAMAABOZ51L0vgZ14ZylCOgAAABzIpgzioAOAAAwY4I54xDQAQAAZkQwZxKOWQMAAJgB4ZxJmUEHAACYIsGc1RLQAQAApkAwZ60scQcAAFgj4ZxpMIMOAACwSoI50ySgAwAATEgwZxYEdAAAgDEJ5sySe9ABAADGIJwza2bQAQAARhDMmRcBHQAAYAmCOfNmiTsAAMA2hHNqMIMOAACwQDCnJgEdAAAYPMGcFljiDgAA9MJqQvbGjRvXCee0QkAHAAAGSTCnNZa4AwAAE9lw5KZ1SbLh3es2zetnTZNgTqvMoAMAAKsyi/C81tcfFb4tZ6d1ZtABAIBVm8Vs+lqDvxBOVwnoAADAmk0jqM96Rh5aZ4k7AAAwNasN2cI5COgAwACtX79+5htbQRdNq29sOHLTunED9yTPhb6zxB0AoGN8wMAsbW5f07iPe9Syd6EctiegAwCDNM0QMi+COfO0fv36TdPqH8I4jMcSdwBg0NavX7+pC8G3CzXSP13pH9AXAjoAQNoNwAISLdAOYT4scQcAWNDSsndhiBa11Eegj8ygAwBso+ZsoZlKukAbhdkQ0AEAljHvsCz00CU+TILpE9ABAFYw6xAi6NBl2i9Mj3vQAQDGMIt7b4Ua+sT96bB2ZtABACYwjdlCM470mbYNqyegAwCswmpDtvDCEPgQClZHQAcAWINxQ4jAwhBp9zAZAR0AYI1GhRABBawcgXEJ6AAAU7JtGBdKYAsfVsHK7OIOADBlQggsz27vsDwz6AAAwNyZUYftCegAAEA1QjpsIaADAABVmU2HQkAHAACaIKgzdAI6AADQFEGdoRLQAQCAJgnpDI2ADgAANMtsOkMioAMAAM0T1BkCAR0AAOgMQZ0+E9ABAIDOEdLpIwEdGrBx48Z1tWtgiw1HbvL7AIAOMJtO3wjoAABApwnq9IWATqf1aea5T/8twNasygCYD0GdrhPQ6SyBllkSqGBprr1MW1/aVF/+O/pCSKerBHQ6qa+DYF//u7pKSGcatCMYDuN4W8ym00UuIgPW1QvWUAY/v592bHj3uk7+Lqivz+G8q9co2tLHMSPRP1rV1/ZGv2ikA9a1wWOoF1W/p3YI6oyrz8F8sa5dn2hLn8eLzfSRNg2h7dFdGueAdWXQcBHtzu8qGcbvS1BnOUMJ5tvq0jWK+oYwTiymf7RpaO2Q7tAwB6z1AcOFc3ut/86S4fzehHQWG2owX6wL1yfqGsr4sBx9pE1Db5e0R4McsJYHChfL0fzu2iGoI5xvreXrE/UMbWwYRR9pkzZKKzTEAWtxgHBxnIzfYTsE9eERzEdr8frE/A11TBiHPtImbZbaNMABa2lgcDFcvZZ+j4nfpaDef4L5ZFq7RjEfQx8LxqV/tEn7pSaNb8BaGBRcAKenhd9n4neaCOl9JpyvTivXJ2bPGLA6+kibtGdq0OgGrPZg4KI3G36v7RDU+0Mwn47a1ydmy/V/7fSRNmnbzJPGNmC1BgEXufnw+22HoN5dgvlsCCH94ro/ffpIe7Rz5kVDG7B5X/xd2OavxgDv97w0Ib1bBPPZE0C6z/V+tvSRtmjvzIuGNmDzuvC7oNU3z0He73s0Qb19wvl8CSHd4zo/X/pIO7R95kEjG7B5XPBdyNrid94OQb09gnldQkg3uMbXo4/Up/0zDxrZgM3yQu8C1ja/+3YI6vUJ5m0RQtrk2t4OfaQe/YB50MgGbBYXeBeu7pjVAK8NTE5Ir0Mwb5cA0g7X9DbpI/OnLzAvGtqATfPi7qLVXdMe5LWF1RPU50c47wYhpC7X8/bpI/OjPzAvGtqATeui7oLVD9pDOwT12RHMu0kImS/X8e7RR2ZLn2CeNLYBW+vF3MWqn7SLdgjq0yOY94MQMluu392nj0yXPkENGt2ArfYi7mLVf2sZ4LWP6RLS10Yw7x8BZPpct/tFH1k7fYKaNL4Bm/QC7mI1PKsZ5LWT2RDUJyec95sQMh2u2f2lj0xOf6AFGuGATXLhdsEaNm2lHYL6ygTzYRFCVse1ejj0kfHoE7RCQxy4lS7aLlYspr20Q1DfnmA+bELIeFynh0sfWZo+QWs0SJa8YLtYsZzlBnhtZv6E9C2EcxIBZBTXaBJ9ZDF9glZpmAAdN+SgLpizFCFka4II2xpyH9EfaJ0GCtATQwrqgjnjGHIISQQRVjakPqI/0BUaKkCP9D2kC+ZMakgBZDNBhEn1vZ/oE3SJxgrQQ30M6sI5a9H3AJIIIaxNH/uIPkEXabQAPdaHoC6YM019DCGJIML09KGP6A90mcYLMABdDOqCObPUhxCSCCLMThf7iP5AH2jEAAPRlZAumDMvXQwgmwkizEsX+on+QJ9ozAAD03JQF86poQsBZDFhhHlruY/oD/SNBg0wUC0FdcGcFrQcQhJBhPpa6iP6A32lYQMMXM2gLpjTopZCSCKI0J6afUR/oO80cACqhHThnJa1ENIFEVo3z36iPzAUGjoAvzGPoC6Y0yW1growQlfMuo/oCwyNBg/AdmYR1AVzumxeQV0Yoatm0Uf0B4ZIowdgSdMK6YI5fTHLkC6I0BfT6Cf6A0Om8QMw0lqCunBOH00zqAsi9NVq+on+AAI6AGOaJKgL5gzBWoO6MELfjdtH9AXYQmcAYCKjgrpgzhBNGtSFEYZoqX6iL8D2dAoAgDUaJ6QLIwAAADBn69ev39TCWeoAdItPcgds0ybvGxjPSe/ZoXYJMHS3S/K7i/68a5JXruJ1np/kS4v+fMZaigJgdjYc6b36EO1UuwAAYFmnJdklyXFJfmsKr/ecbf58zyQ/Wfj6WUm+PYWfAQCskoAOAO24apI7JXlBkh2S/MGMf979F3195yT/leSRC3/+0Yx/NgCwDQEdAOq748I/X5/kmpVqOHDhcdzCn/8kyf9L8sVK9QDA4AjoAFDXaUkeU7uIRTZvOvH6JN9IcnqSl2bLUngAYEbs/AQAdTw2ybvTVjjf1m+nbCz3zpSN6QCAGTKDDgDzs2/KfeVnJbl6unOaym2TfCvJG5L8XbbeCR4AmBIz6AAwHwcmeV+SC1KCelfC+WZXT5n1/2KSP09ySN1yAKB/BHQAmL1Tk5yf5Ca1C5mSv0ny1iRH1C4EAPrEEncAmI3fSvJnSf4oye9XrmUWfivJuUm+muTuSb6X5FdVKwKAjhPQAWD67pXk7PR/pdreSW6ecn/62UlenuS9VSsCgA7r+xsHAJing5M8O8k5GdYYu0OS+yZ5T5LnVq4FADrLDDoArN3OKaH84JSjyYbspCSHJfnHJG+uXAsAdMqQPt0HgFm4Ycqy7qMjnG92lyRnpix9PzjJXnXLAYBuENABYHWOS9md/YtJDq1cS4t2TnLtJJ9Kcl7KpnIAwAiWuAPAZO6Q5IFJHlG5ji45IuWYuY8k+YvKtQBAswR0ABjPHklukXKv+d6Va+miwxYeR6fs9n5a3XIAoD0COgCMtmuS2yZ5Rfp5nvm83STl1oAk+VDKEngAIAI6AIzyxJTl2cfVLqSHTk3y0yQnJ/mXJN+oWw4A1GeTOABY2oYkL41wPktXSfL8JO9M8rrKtQBAdWbQAWCLA5LcOsnpSfatXMuQ/P7CY4+UTeS+VLccAKjDDDoAFAcl+e8kZ0U4r+U+KcfWPS/JUZVrAYC5E9ABGLrdkrwyyVuT7Fe5FornJHlbyu/loMq1AMDcCOgADNXeKTuzfzrlTPMD65bDNnZM+b38R5IbpeymDwC9JqADMESPTvL9hX/+buVaGO1aST6XEtSPqFwLAMyUgA7AkByR5KSUmfMdK9fC+NYlOSzJ+1J+dwDQS3ZxB2AIrpnkNSk7tO9TuRbWZvOqh7NSzlIHgN4wgw5An+2aEuQ+n+SuEc774sgkpyT5TpLDY9d9AHrCDDoAffWAJMclObZ2IczEupSVERck+UySo5NcVLUioGU7JfnjCZ7/niQXz6gWWJaADkDf3C/JMUkeUrkO5ucmSd6S5ANJTqhcC9CG3ZK8dNGfr5PyQd64Pp7kvxf9+W+SfHEKdcFIAjoAfXHDlOXsN4wjuYbo4IXHHZO8McnfJrm0akXAPO2RZOckf5LkcSkBfS2ndPzhwmOze6ac/pEkf59ynfnxGl4flrSudgHUs2nTptol0BEnvcd2FTRtnyQ3TfKmuBeZLa5MucXhvNqFADO1a5LbJjk9yQ0yvxM6LktynyS/TPLhhX9O1YYjvVcfIjPoAHTZ01M2f7tD5Tpoz45Jzk3yrJTl75+qWw4wA09Iuf4fV+Fn75nkXQtfvyHlGMjTKtRBzwjoAHTV6UkeWbsImveCJI9NCejHJrmibjnAFNwvySNSPqBtwfELj6ulXHNg1axbBaBLrptyDvZ3Ipwzvs2bQ70v5Z5Ut/hBN90gZWf1f0074Xyxv0wZn+6RZL/KtdBRZtAB6IIDk9w+yatiA7jlXJrk/IWv90ty54q1tOp2Sb6U5BVJ3pnk7LrlAGPaJ+V0jpckudYqX+NXSV4/wfPvlOTaq/g510y5Fn8zyVFJPreK12DABHQAWrd/yj3EB9cupGHPTPKhlDPBkzK+PyzJnyX5g1pFNewxC4/Tk5yZMrMOtGnPlM0eD1vF370wycsWvv5mkrdN8Hf/MMktF74+Jsm9JvzZ10kZu45O8oUJ/y4DZonXgNnFnXHZxZ1K9k7yz0nWp8ygs7UfJ/m3JP+Q8iZ0KfsluXGStyfZZU51dc2lKctRP57k8sq1AFvbNeWDx1tP8HcuTfIXKTurfzdlyfla7ZHk+inX1DeljE/juiTJZ1OC+kR7YNjFfZjMoAPQmlsnuVuS58Q4tZSLU97s3TsrB8pvLzyOSvL8JIfPtrRO2jslAHwxZV+D/0ryi6oVAUlZ1n5exg/nn0pZSfTElOXs03R5ygehF6Yc5/n4JPdPcsgYf3f/hcfbUzaqdHY6I5lBHzAz6IzLDDpzdJ+4L3iUb6XM9n5ilX//kSkh/cFTq6h/zkpZ8v6yFZ4HzM5eKeH8iDGee1GS1yZ5YcrZ5PN0Usp+H+ME9aQcy3afjLlaxwz6MHnXDUALfj9lduHfahfSsD9NmQlfbThPklcuvM7dk3xkGkX10HEptw1sqFwHDNWuKZs4jhPOv5uym/uzMv9wniQnpgTuuyf50RjPv0uSd8TqMEYQ0AGoaa+UJYn/lbKs3X3S23tByq7FZ6QsbZ+Gd6TM+nwoyfen9Jp9c2LKvavHZnU7OQOT2ytlBcttVnjeL1L65o2SfH7GNa3kuynX1EOT/GCM5x8eK8UYQUAHoJY/SVnCeEiSq1aupUXvTlk++ewk/zuD1788ZVfkO6WcKfzrGfyMrrtmypL3j6e0133qlgO9tvme89uu8Lxfpdymc06SH866qAl8NsmRKdfTldam3yRl5RhsR0AHYN4em+QNSV6X8ZYwDs3nkjw6ZUXBhjn8vE8leWDKpnMnz+HnddG1Utrr+Sm7OQPTdbWU/jXOmHBckjfOtpxV+0TK9fT4FZ73O0nemrICALbi/gcA5uXQJKcmuWntQhp1Rcp9jJ9LOZZn3t6y8LgiyZNSlpqytUNT3oC/N8lTYzdmmJbrpPSvUa5Mct+UIL+UPZPsOM2isvo+/qYkf5wym77chOj1U64lv5fkp6v8OfSQXdwHzC7ujMsu7qzRAUkOSgl/Phhe2gdSjpV7f+1CFuyU5MwkN0/yu5VradWvUo5zOq12IdBxByV5T5JrjHjOL1JuMzlrxHP+O8nNplhXkjwm5QjGpGysOenxbQ9I8pqMHvuOTtkkdTt2cR8mb5QAmKVnpMwimDVf2hlJPpjk9NqFbONXKWf8Xjflg5WD6pbTpJ1SVoRcK2UWrJUPV6Br/i6jw/mvU5aNjwrnSemT0842r1r09ZlJLkjyign+/pkp96OfnuX3Wjk/5Xpr4ziSuAcdgNk4KWVW+IURzpfyoZTl7H+a9sL5Yl9PckzK/em/rFxLq05MeWP99pSwDozv2Kw8632fJG8e47VmPd38gJQVM8+Y8O+9PqOXyu+YMlMPSQR0AKbr+imB5bkpO4Szte8n+XDKeebvqFzLuC5K2Vn5gCRPSPKVuuU0aZ+UTf0+mxLWd61bDnTGHTJ69vxhWf6e81pemORpE/6du2X0EWxHpCzhBwEdgKk4KMnDU8LbhrqlNOnKlM2C7piyEdLldctZle8mOSXlnvRXV66lVVdLme17bcqtHcDSdk5ZafXEEc+5KMnG+ZQzsb9K8vSMn6UuTDmC7QvLfH/XlFVVV1t7aXSdgA7AWuyZsuTvrdn6Xj22dv+Ueyg/XbuQKXlEynF5H6hdSKPul3Lv6T8tfA1sbdeUlVbL+WqSe6QcA9mqF6XcHz+uT2T0yqkHpaxUYuAEdABWa6+UnXcfk+TAyrW06MdJnpeyuqCPm/+8IuXe9Fsm+d+UVQJs7aEps+mfTDlKCSiukuX3tdiUctxk6x9o/jrJ6yb8O3+d5Gsjvj/p69FDdnEHYFKHpXzS//AYR5by5ZSZkgdk8iN5uuaHKUtQr53kuJQwukvVitqza8pGiR9O2RDrMxl9LyoMwbkpy9yXsi7lvPNp+3HKh2UrOXHvyOcAACAASURBVHzM19shkx9DeXGS/0i5t36pidKDktwmyX9O+Lr0iDdWAEziMXHu8ygXpux6flHtQubsyiRvXPj6DkkeV6+UZl095Yim9yd5W8pMGgzRXTN61dVpSa6Ywc/9ZJLbj/G8py087+gxnrt/kjulrCYb1yNTbhNayrqUW2NuMsHr0TOWuAMwjiNSjpESzpf2yyT3yjDD+WJvTHJCymZHfVzWPw1HJDk5yStrFwKVPCDJfiO+f3Imu7d7XONOTJ6csnfEOLvH/3bKHiOT2DHJk0Z8/6cTvh49I6ADsJxdk9wg5eiot6ccE8PWvpLk8Skb+5yfYYfzxd6Rsov5b2f0/ZZD9ogk307ZbM8eDgzFVTI6KD8tybfmVMsoP0tZjj6OSQP1lRm9weYt4jSUQRPQAVjKzinHgn05yR8k2b1uOU16Vcr9hy9POYKMrV2R5Jspx8r9a5JL65bTpGslOTXJF1POQL5u3XJg5u6dcqLFcq5IO3t3fDSz2y/iJ0k+vsz3dk6y94x+Lh0goAOwrWcmOSdl0y+2d0HKrOcjaxfSERenvCG/d5JnVK6lVbum7N78ljhmiX4bddrDfyd517wKGcP/TfKlGb32lzP6Npefz+jn0gE2iQMgKcsO75pyLu1NK9fSoiuTfD9l06CvJPlR3XI66f0Ljx+nnB+8V91ymnRQym7vG5M8JOX/FfTJqOD5mYVHK3ZbeKxk11W+/k4pqwWWymOPSPmwYpLN5+gJM+gA3DAldL4pwvlSrkhZfnxASnASztfm1CT7Jjk9Zdd7tnZgynFs30tyYpJb1S0Hpma3JDcb8f1rzKuQMZ2clcfEnyT5/Cpf/9SUEx2Wsm+SfVb5unScgA4wXHunLDl+X5Jr1i2lWaemLM9+Q9q5L7IPfpnk0UkOSZlN/2bdcpq0c8pGUf+VEtih666T5Tc/+1GSM+ZXylh+lXLs2SifTBknVuPXSTaN+P6o2wHoMUvcAYbplCS3TbK+diGNOjtlE7jlZjeYjp+k7Hnw2pTl7/vWLadZ/5ay3PUpST5XuRZYrVFHp303yevnVcgYDk1y3zGet8saf87Oa/z79JAZdIBhuUGSf0w5q1o4394lSc5NOSJMOJ+fzya5Ucob4q9UrqVFO6fsf/DRJB9K6ccrzexBl+w4h58xziqoq6eE83dmvFMV7rOmipJvxOostmEGHWAYbpcyY/63tQtp1KUpZ70/OeOffct0/SDJWQuPE5McnuTIqhW1Z6+U2wK+nOS0JI+rWw50yn4pH76O8qyUzRrH8bYk315TRcljkhyTsvwfkgjoAH13QJJnp2xyZtfspT0jZefsC2oXwm+clDKj9m8Zb5npED02ZbbvfSlhHRjthknOnNJrnZ3k+Iy+h3xcy62G+dkUXpsOssQdoJ92TJktuCDlE3rhfHs/SVnq/1cRzlt0ZZIHJbl5ylnEv6xbTpOOT9mg6hMpy3KB2fppkvNSNg+d9dL0V8z49WmUgA7QP4cleWPKvW3Xr1xLiy5MuQ//6ln97rvMx89Tdkn+gyR3TvLBuuU062YpM+l3jaWyMEv7Jbl35jO7fb05/AwaJKAD9MexSV6S5AMLX7uNaWvfSjnX9tCUVQVmZLvjypRVDofHfdfL2SnJO1Lui31abCIHs/CMJHeb0886a04/h8Z48wbQD/dP8ro4smU530tyVMpu4XTbaSk7vR+b8kELWzs45baNeyR5b5Ln1i0HeuVZSS5Pcr+UjUVn6ZQZvz6NMoMO0F1XTXkz/q0I58v5n5QPL34/wnmfvDNlJn3/lA3+flC3nCYdluQ5STYk+Z26pUCv7JHk9kl2ndLrLXc+/N5Ten06RkAH6KarJXlLkk8luXaE86U8P+W86Dcl+X7lWpi+TSlHHB2a5IiUPRfY3okpH1Q9POMfHwWM9vRMZ7+Hw5PsOYXXoUcscQfonr9KCSWH1S6kUWcneWuSV9cuhLm5MMk9U2a1/qFyLa16VZKLUvrGU5NcVrccqOJdKWPEKPsmed4Yr3VSkodkbbu5n5TygTv8hoAO0A1XTfLgJI9K2bGZrf0yyddSlrN/IWX3b4blkwuP96a0A/deb+/AlPPT16fsiv+TuuUwMKNW7u6QZPfMfnf0j6TsY7GSXyZ50QrPeWCSR2RtAf3Ha/i79JSADtC+26WEjmnd79Y3P0pyr5R7ka+sXAv1XbjwWJfk7kluWbecJt065baPVyd5bZIP1S2Hgbg85QPUGy3xvesmeWWSB824ht3HfN4HklySss/Fci5LudVmLX4x4nvG/IFyDzpAu66bclzSu2KgXs5Lktw35c2UcM5iz01yq5Sj9S6sXEuLdk7ZBf+DsRs+83Fxyu0VS1mXtq7hH0py5grP2ZTRAXslt8ry+0J8LK5bgyWgA7TpzCT/nnK/uQ1ktndayrFpT03ynsq10LanJzkmyb1Tlq2yvdNS7k2/Q+U66L+rjvjenVP6aitW+mB89yR/t4bXPzLJjZf53r8n+cwaXpsOs8QdoC3PS/LIJPvVLqRRH0tZzv6drH1pIcNx0cLjjklek+T6dctp0tEpAf0bC19/K2ubHYSl/HjhsdcS37v2wqMrdkwJ2auxa0Z/WLHvKl+XHjCDDtCGo5L8Zcq5xcL59r6R5PUpx2l9O8I5q/OhlKP3Hp/kvMq1tGiPlPuDv5KyisfxjUzbW1I+JFvObZP81pxqmYbVnoZw/STPXOZ73499IQZNQAeo66ZJTk1ZzvasyrW06gkpR2g9ILPf4ZdheHnKkvfHJbmgci2tOjbJOVk+RMBqjbpt62FJfmdehaxgtxm97k5JNoz4/hdTNm9koAR0gDp2SfL+JO9MOfaI7W1IcnCSU1KOz4JpOy0lqH84juZbytFJXpDkE0nuF/thMB3PTQmhy2llU9QTk3xuBq+7T5Ljl/neWjeeowcEdID5OyTJ+5LcPsm16pbSpI0py/1Pil1smb0fJTk8yR+mLCu9om45TbpZkjcm+VqSG9YthR74ZkbfPvHvSW4xp1pG+VZWXsK+mo0nzx7xvZ+lrBhjwAR0gPl5SJJ/SgkBt6tbSpM+nXIk1i1T7sWHefl1ykzZYUkemHLbCdvbN2Xlz9PSrfuEac9pKf1uKXulnInegpWy0nVTNp8c150zegn/Hkl+NcHr0UMCOsB8PD7JPyd5aO1CGvWFJPdIORILanpTkhOSPL92IY3aP+X4x/9IuZcfVuPFGb3Z5/WTPHhOtazFgVl+ufpSHpDRO9U/KVbxDJ6ADjA7+6YsY78kycsq19Kq/0lZXnyblGOwoBXPTQmj56acHMDW1qdssnd6HFvH5NZldLDdJ6s/wmzefjrGc3ZK8vAkfzziOd9Pcn6WX1nAQAjoANO3S5I/SvKBlOWgjk3b3vkpqwpukOSDSS6tWw4s6dtJ7pNyf/pnK9fSqkemHMv2Z3HrDuPblORTC4/l/H8pM+2z2k19HPuM8ZzLx3jOHkletfDP5bwoyVfHKYp+E9ABpu/slDO7f792IY06Pcm9Ynks3XFJyo7mj4uj/pbzdymbe52a5DqVa6EbvpzkX1Z4zlNSd1f352Tle8LvlXJk6igr3TLz+ZRTXUBAB5iSq6TsPP7plDfybO3nKUdZ3SLJoyvXAqvx9ZSNrW6REtTHWdY6NFdNOTbyAykrh3asWw4d8LqUkztGeUPKEvGVjJqd3myXMZ6z2OvG+Nk3T3KTEd//hyRPHPH9S1OW8396stLoq3EaOwDLu2HKvZivyehjY4bqiiQfS1kG+4W4t47u+8LC41VJTknyqLrlNOl6Sb6R5K1J/jrlwzlYyneSvDtlHF3OUUnekuR+Gf3B2EeSfHeFnzfq/PWl7JZyq9pKmemby/z7v0/yhBX+7oeSXDxhXfTYutoFUM+mTaM2z4QtTnqPxTbLuHnKG9BRO7IO3fEp5ydDXz0vyR1SNjtkaX+bMqt+Tu1CaNbfJvk/KzznrUnum+QXsy9nKl6WstfKKGenfPCw5IfXG470Xn2IvOsGmNzuSc5L+URfOF/a5tAinNN3z03ZSO6eWXn2bqj+POVa8Ee1C6FZf57kb1Z4zjFJ3jaHWqZhnHC++XlWlrEVAR1gfOtSNjj7Wsqb8QOqVtOe76QcSXXtJCemLAuEIfhBygd2N06Z4XOO8fZ2SnJGylLgg1PuV4fF3p7kyhWec6eUzQivN/NqVu+lGS+cvyhlWT5sRUAHGM+9UzaIemSSa1aupUWfTdk86z4pO17DEH0vyVlJHhyrR5ayc8oHm59KmQk1o85i707yiDGed1TKcWQvnm05E7tHSjgftSHcZi9M8syUDVRhKzaJAxjtyJQZscfWLqRRP0vy5JQ324I5FG9YeDw8yd1TriFs7bCFx1Ep/58gSf5vygqU143x3KeknBTw57MsaEwPT9k4chwvTPKsGdZCx5lBB1jaNVKOfnlzhPPlPC5l1vy0lCOogK29OsmDUvrJlyrX0qqHJfl/KUuCr1K5Ftrwryn9Zpwd0v5PSvt5UJI9Z1nUEnZNcpuFn//KMf/OCyKcswIBHWBruyc5JOW+sD9Msnfdcpr0kSQnpATzL1SuBVr38ySfSHJoynFKP6xbTpNunrJZ1vdSrr/wuiQPzcr3pCel/ZyRclTZ7TP729B2SWmnG1OOELx5xjsZ60VJnj3DuugJAR1gixNS3hR8KMkNKtfSogtSdmc/JMmplWuBrvluypLu+2bl3aqHatck70ry1LS9CRjz8S9JHjLB8/dK2Zz0vJQ2NAuPTvKalPcJN8n4WepFKfecw4rcgw5QNip6UMoGL2zvuynLUD+csls1sHrvXXh8KckrKtfSoj2S/HXKPb0fT/IndcuhstemLHV/7QR/5zYLj7sluXzh3z0+q78V6/ey5UO11bxPeEHMnDOBcZZj0FObNo1zaw8kJ72nt4tt9ktZdnpmyu7CbO2KlCWDR8X9szAL+yfZkOToJNepW0qzLknZfOu5tQuhqv1TNoVb7YZwP8yWHdP/IskHRzx3v5TTGDbbPclvreJnfj3lfvpVz5xvONJ79SEygw4M0dWT3DnJKUn2rVxLq9646AHMxiUpS2Z3S9m9+nZJDqxZUIP2T/KclKXE709ZAs/wXJJyYsgVKbdZ3X7Cv7/Poq/PmFZRI7wj5QQHmFhvp8UAlnFyknOTvD7C+VLOSjnr/fgI5zAvP0/yx0nuGccVLudZSd6Z8sHqzSrXQj3PSHLXlKM9W/T5lOX0965dCN1lBh0Yiqsk+bskj6hdSKMuT/LvSR6YLcsAgfn6VMrs4PqUGXXHjm3vhCT3SzlB4i4pM6oMy89TPkS+YZJzkhyQ+pnmp0mOTfLZlFvDYNXMoAN9d3DKG7rvRzhfyo9Sjk27QZLjIpxDbV9L8uaUW3Gen7JRGlu7VsoS5/el3BbA8FyWcnzhDVNWnnwkyccq1PGfSf4spb/+R4RzpsAmcQNmkzjG1eFN4u6Ysgxut9qFNOonKcvw3lu7EGCkc2LJ7Cj/lOQDKasOGLYXpYz9t5nhz7g45UjWX6TsjzAzNokbptrLQQBmYb8kpyc5PML5cp6UejMOwGSOT7nv9sVJblS5lhY9bOFx1SQvq1wLdT0jZYXFrRf+fPuU3d/X6twkr174+qtJLpzCa8KSzKAPmBl0xtWhGfTrpbw5u13KcjO29s2UFQUbYiMq6KK9k9w0yWtSrnds75IkD0jymSTfq1wLbdh/mz//dZLDRjz/2ym3fC32g5QZ87kygz5MZtCBvnh+kmfXLqJh/5nkDnGPOXTZpSlLuX8nZW+NU+qW06T9U+5N/0LK8uNzYyO5odv2A+kHV6kCxtSZaTGAZfxRyrIz4Xxpl6Qc+XLXCOfQJy9P8icpt/OwvRsleUPK0ZEAnSGgA120c5I/SLIxyb+k3HvI1i5LOYro0JQ38pfWLQeYgTOTPDrlWLaPVK6lVcekHF/3/CR7Vq4FYEUCOtA1V0tyQcobrj9Msmvdcpr0vJT/T29O2cwG6LePJzkijnlazsEpq6x+kLLq6oZ1ywFYnoAOdMlTkpyd5Laxh8ZSzkvytCQnxj2XMDS/THKXJEcneUnlWlq1S5LXJ3l/kptXrgVgSd7gAl3wxJRlikfVLqRRn0sJ5v8ewRyG7pMLj7eknAd9Yt1ymrR/yv+fj6fMqP+sbjkAWwjoQMuuk+ReSV5au5BG/TTJ3VPOY/1R5VqAtrx/4bEuyUOSHFi1mvYcsPD4apLzk/xlkq9XrQgglrgDbbpekuOT/E/KBmds741J7pnkgxHOgeWdmOS6Sf5vks/WLaVJ10ryiCRfSzm6DqAqM+hAa05JWZZ549qFNOofU2bFzqxdCNApD02ZRb9nkr9Oskfdcpp0SsrYc3bKhnsAcyegA63YM+XM2qNrF9Koy5KckeSxtQsBOuuilFVJH0/yrjh2bCmPS/KgJF9OuYXof+uWAwyNJe5AbbdMOZ/2BxHOl3JxykzONSKcA9PxkZSjGE9I8tHKtbRor5RjPD+S5HZJdq9bDjAkAjpQyy2SPDXJx1LOp92lbjnN+XXKUUl3Szk6yS7DwDRdkeTUlAD6/JRbZ9ja9ZN8OOWWIvenA3NhiTtQw0Epu+YeULuQht0n5f8RwKw9N8k+Sc5JcvvKtbTo3guPuyV5XcpZ6gAzYQYdmJcdUnYS/kjKzuPC+fYuSnJSyv8b4RyYpx+m3GZ0k5Tjxq6oW06T7pHkNUnul2S/yrUAPWUGHZiXVyR5ZO0iGvWZlKX+D61dCDBol6UcxXa9lBB6ZrxX3NbOKcdcfi/JnZJ8um45QN+YQQfm4VURzpdzYcqslXAOtORNSY5LcnLtQhq1b5K3JfmHJFetXAvQIwI6MEtPSDnO5+G1C2nQZSmzL3dJWdoO0Jrzkzw9yfokZ8Vmldu6Tso4994ku1auBegJAR2YlcenzCzconYhDTohydVT3tR9u3ItACv5eMqS9+sl+UrdUpq0Psn7Uo6uA1gTAR2YhccleVntIhp0RspS/1OT/KJyLQCT2JTkf1N2eX9JkkvrltOc26bsgr9P7UKAbhPQgWl7YpKX1y6iMR9IOTbtT1PuxwfoqouTPDXl9pwnVq6lNYcneVeS3WsXAnSXgA5M0+OTvLR2EQ35QcqRRXdPcm7lWgCm6WMpK6UOSPKPlWtpyfok70+yV+1CgG4S0IFpOSGWtW/2y5QdkA9PObLosrrlAMzMxUkek3L9/8/KtbTiVknenrLXCMBEBHRgGp6Y5JTaRTTi5JSjie6fEs4BhuCJSe668M9vVa6lBYekrJwykw5MREAHpsEZ3snZSW6ZciTRWyrXAlDDpSkz6YenfEj567rlVHdokv+oXQTQLQI6sBZ7Jzk9yU1rF1LRV5K8Mcl9k2ysXAtAC76acpvP/ZN8tHIttd0iye/VLgLoDgEdWIuDUo4NG+K15MdJ/jbJEUmOTzmCCIAtzkpyuyR/keS8yrXUslPKGemHVK4D6IghvqkGpmOPJC+uXUQlT0hy5yRPjnstAVby4iT3S1ltNET7p+xNArAiAR1YrXemzIwMyUVJHpuyId7HKtcC0CW/TPKgJAcm+UySn9YtZ+4elXIrlPfewEguEsBq3CrDuqfuP1POd79ukldUrgWgq65I8o2U26OOSblPfSiumvLfu652IUDbBHRgNZ6a5Bq1i5iT9yY5Ksmf1S4EoEcuSNlE7lG1C5mz59UuAGibgA5M6u5J7lS7iBn7dZLvJLl1yn2DP65bDkBvvTLliMpTk1xeuZZ5eFSSXWoXAbRLQAcmsXuSOya5eu1CZuijKbM6B6bcZ/6juuUA9N7GJCck2Tfl3PCL65YzU1dP8ve1iwDaJaADk7hGyvL2vtqQsvHdWSn3SgIwPz9LcpeUlVoXVa5lVtalrM46uHYhQJsEdGBc61J2L++jNya5T5KTahcCQD6V5G5JHly7kBlZn+Sw2kUAbdqpdgFAZ2xKecPUFz9N8vWU/6b/jRlzgJZ8buHx3iSPSPKwlFuP+uKqSXZOOX4O4DfMoAPjukP6E2J/mOTolKN+vpn+/HcB9M23UlY3XTfJeZVrmaaTk9yodhFAewR0YFwvSbJn7SKm4Fkpy9k/ULsQACZybJInJfl07UKm5Ke1CwDaI6AD49g5yWW1i1iDy5O8POUonxemnL8LQLf8Osk/JLlrynGfXT+W7fXxXhzYhnvQgXE8M93d0OajKW/kfla7EACm4pKFx9WTPDTlDPUuulntAoD2COjAOHZO9z7l/3qSNyd5ToRzgD76eZLTkvwqyeHp3q7vP0tZFQDwG117ww3U8avaBUzoT1PO0X1yur8EEoDRXply3T82yfsr1zKJqyR5fu0igLYI6MA4rla7gDFdlOTeSc5IOZ4HgOE4J8kxKZuA/qByLePYOeV+eoDfENCBcTyhdgEreE+SDenfMTwATOayJLdPcmiSs9L+OeN2cge24h50oMs+leTVKbv6AsBmn09y3yT3THJIkqfXLQdgPAI60FVfTHK3lJ18AWAp5y88fpbkpMq1AKxIQAe66MspMyLfr10IAJ3wvJRbO5+WZLfKtSzW+hJ8YM7cgw50zUeTHBHhHIDJbEh7Y8f1Uz5wBkgioAPdc1aSi2sXAUAnPT7JptpFLPK7Se5XuwigHQI60DV71i4AgM56a+0ClnBZ7QKAdgjoAAAMxVVrFwAwioAOAAAADRDQAQAAoAECOgAAADRAQAcAAIAGCOgAAADQAAEdAAAAGrBT7QIAgF67V9p4v3FOkl/XLgIARmlhwAQAuu3kJLss8e93SvL4OdeynLOSXLTM965M8pQ51gIASxLQAYBRdt/mz89LcsSiP++QZP38ylm141b4/p2S/GqJf39CkgsX/flnU6sIALYhoAMAi+2Z5MYLXx+W5AXbfH/bwN4Xt1jm338oWwf3P05yycLXv06ycZZFATAsAjoAcOskhyx8feckx1SspTU7Lzw2O3eb7z8jyc8Xvv77uVQEQG8J6AAwTE/OllB+SJL9KtbSZS9a9PUxSX688PXTknx5/uUA0GUCOgDTtnNK2Ds/ydXm+HO/neS+SS5O2fSLrf12ykZu70iy68Kfma47L/r6DkkuS9k9/sUL/+4nSX4055oA6BABHYBp2iHJPyd5YIWf/dspu3S/OskjKvz8Ft0sye8kuV2Sv6hcy9BcbeHxhIVHknwyyYYk58WRbwAsQUAHYJr+Lcn9Ktfw8JRZ/IdmuCHoakmek+QBSa5VuRa2uFmSsxceX0/yvmx/TzsAAyagAzAtr0/9cL7Zn6acv/2T2oXM0W4p/833T7J3khvVLYcRjl3456NSjnD7YZL7ZMtmcwAMlIAOwLQcXLuAbZyX5I61i5iDA1P+378x/T0Cra/2SNlBP0l+kOT0JGfE0W0Ag7VD7QIA6IU7pszatmS32gXM2K5JnpjkPUneEuG863ZP8qQk/52yA/zt6pYDQA1m0AGYhocnOaB2EdvYVLuAGfqrJIcmOax2IczEXyX5XpILUpbBf79uOQDMixl0AKZhSPd61/SglJ3qnxbhvO/2TXJcks+m3L7gWDyAARDQAaB9N0/yyJT7kwW1YblmyuaLFyV5ZuVaAJgxS9wBoF1XT/LslHPlr1G5Fup7QZLrJHlnknMq1wLADAjoANCmPVPOyT6och205bFJHpLk+CTvSvKLqtUAMFWWuANAW3ZMcqskH4hwztJ2T3Jukv9Jcr26pQAwTQI6ALTln5P8V5Jb1C6Epu2Q5NopqyxuXLcUAKZFQAeAdvxrkgfXLoJOuW6StyZ5Q5KdK9cCwBq5Bx0A6ntKkickObB2IXTS9RYe+yW5W5LLaxYDwOqZQQeAup6c/P/t3XeY7Wdd9u1PEggtFAUBBR4hJFhBkN47hF4DSAcFy6MoEKqIgEhJEFGkKE1aqIKkUBJAMEiR3qQkgMBDSyBAIAXS3j9+kzc7Ozt7z+w9M/cq53kc65i11owzlzvDzFzr/t33t4NSztl1N64OqS4+OggAO0dBB4BxHl09Z3QIFsotq7dUFxwdBIC1U9ABYIzHppyzMW7RNIJtj9FBAFgbBR0ANt+jq2ePDsFCu1H17upio4MAsHoKOgBsLpe1s1luVr252mtwDgBWSUEHgM3zmJRzNtetq3dkcg/AXFDQAWBz7FHdZXQIltKNqvdWlxgdBIDtU9ABYOPtVr2suuHoICytG1d/MzoEANunoAPAxjpfdXD1oNFBWHo3qX5jdAgAzpuCDgAb68LVfUaHgOpq1RHV3qODALBtCjoAbJwrVO8fHQK2cPnqP0aHAGDbFHQA2DgHVFcfHQK2csnqdqNDAHBuCjoAbIxrVbcfHQK24SLVWzNVAGDmKOgAsP4uVr272md0EDgPF6huPjoEAOd0vtEBAGAB3bm6+OgQM+ptm/i1rBBv359Xx1UHVqcOzgJACjoAbIQXjg4w0JlNe++35YTqpZuY5SHVL5zH+56dv4Oqnt5U0AGYAX4xAcD6ekbT5cOL7NTqjJX7f1L9zxbvO7n69KYn2rZXbOd9724agXeWfTrniwfnbzm2Ap5Zvar6vdFBAFDQAWA9Xaa6RbXn6CAb4FPV6Sv396++t3L/pDFxdtlntnr84eotWzy+QfWslfsXra6yGaEG2K26SfWr1dcHZwFYego6AKyfe1XXHR1iHX2/el3TivmjB2fZDFu+2PDuppP4qy5RPW3l/p9taqLN8SvVk6qHjQ4CsOwUdABYH1ep/mB0iHX0J9VHqk+MDjIDflQ9YuX+oU1XSTx+XJwNccumqwY+ODoIwDJbhr1VALAZLlxdbXSIXfSd6nnVFasXpZxvy5HVE5r+jfapjmnadz/vrlRdP4s3AEMp6ACw6/ZoWoGcV1+t3lxdvnpk9iKvxterr1T7Vndtc8fHbZTnVHuPDgGwzBR0ANh1F2gqN/PmtOox1R2aDn47Y/sfznk4oqmkP3J0kHXwk9EBAJaZv6ACewAAIABJREFUgg4Au+781c9Gh1ijM6rbN72w8MXBWRbF85ouE9/eeLdZd/DoAADLTEEHgF13ePM1+/yk6o5N+6lZXx+uHto0W3weXb9pbz0AAyjoALDrzj86wBr8rLpP9Y7RQRbcg6qDmgr7PLlA9fLRIQCWlYIOALvmIU0Hhc2LOzWNCmPjPba6S/Xfo4Os0U9HBwBYVgo6AOyaG1a/MDrEKpxS7ZfL2jfbsdVtmq+RdTer/mx0CIBlpKADwK75wegAq/DdplPa3zU6yJL6cXXT6iOjg6zShapfHB0CYBkp6ACw865W3Xp0iFX4WHXY6BBL7qfVE0aHWIMTRwcAWEYKOgDsvKtW1xgdYgd+XB0wOgRVfar5GcH2iGb/extg4SjoALDz5mH2+X9XXxodgqp+2Nkj2E4fnGVHrpC/EwE2nR+8ALDY7jc6AOfyoGqP0SFW4X5NY9cA2CQKOgDsvFlfBf277CWeRbtXjxwdYhUeWV14dAiAZaKgA8DO2aP6pdEhduDI6qTRITiXM6o3VyePDrIDp1dnjg4BsEwUdADYOZev/nl0iB0wKmt2/b/qrtW3RgfZgR+NDgCwTBR0AFhMRzWNV2N2HdF0lcOs2r36y9EhAJaJgg4Ai+kD1dGjQ7BDuze7l5HvVv3x6BAAy0RBB4DFdKHRAViVhzeNX5tVLnEH2EQKOgDAOD+rXjo6xHbM+qQCgIWioAMAjPXk0QG244rVH44OAbAsFHQAgLFOqx48OsR5uFh1k9EhAJaFgg4AMNbp1XGjQ2zHSaMDACwLBR0AYLwvVP8xOgQAYynoAADjfa167+gQAIyloAPAYjp5dADW7FKjAwAwloIOAIvpetXeo0OwJu+tvj06xDacMjoAwLJQ0AFgMd28utboEKzJIdXRo0Nsw+2rG48OAbAMFHQAWFwXrfYYHYI1+WF15ugQW9m7+u3RIQCWgYIOAIvrpdWFRodgTe5e/WR0iK18o/ri6BAAy0BBB4CdMy+/Q584OgBrske12+gQWzk0I+AANsW8/HEBALPm29WTRodYhSdUzx4dgjU5fXSArZxvdACAZaGgA8DO+Vn16dEhVumx1TNGh2BVTqtuWh03OsiKQ6s/Hx0CYFko6ACw8y44OsAaPKF61ugQrMpnqjtU3x2c47Dqzk0vRgGwCVyyBAA7b95e6H5ctU/179VrBmdh+z5a3a76tYEZ3jLwawMsJQUdAHbeSdWJ1UVGB1mDe1R3adrn/L6mE8N/OjIQ5+lTKzcAlsS8vfIPALPksOplo0PshPNVBzcddPee6o5j4wAAZQUdAHbVrI3EWqvrNB0E9vrqm9V7q3cOTQQAS0pBB4Bds+foAOvkPitv/6jpkLLvV/uvPHfqkEQAsGQUdADYNV9t2ot+4dFB1slFqxuu3D9+5e0fVv+zcv+zzd6cbgBYCAo6AOyaA5sOXrvO6CAbYK+Vt6/d4rl/rf57i8cvzxguAFgXCjoA7LoLjQ6wiR68cjvLvTvnvO6HNZ0MDwCskYIOALvu7tXnW5z96Gtx060e37D6+cr9U6v9qlO2eP9PM9YNALZJQQeAXfeNlrOcb8vlt3r8ta0ef7R62lbP/UfTPHkAWGoKOgDsujOr51d/NjrIHLh201i3Lb2j6eT4LX2jeuGmJAKAGaGgA8CuO7V6QfUn1R6Ds8yj263ctnbfrR6/uHrDNj7utKYXSQBgrinoALA+jqmeUf3V6CAL5IZbPb5+215V/6/q8dt4/tPrnggANpCCDgDr4/TqfdX9qyuNjbKwdm+a0761/VZuW/vr6rhtPP9v1bHrmAsA1oWCDgDr571Nq7YK+mx46nk8//vV0Vs997XqiRsbBwC2T0EHgPX1R9Wtqr1GB+E8XXPltrV7b/X4RdVrtnruuwHABlHQAWB9fa/pVPL9Rwdhzfbe6vFBK7ct/X7nLOnHVx/eyFAALA8FHQDW3x+moC+ql231+OfV32/x+HOde9UdAFZFQQeA9XdS9aTqaU0Hm7G49qwet8XjM5peoDnLIdXztnh86maEAmA+KegAsP5+Vv1t9etNp7qzPHavbrTF4xt1ztF7/9zZK+zfqr6/SbkAmAMKOgBsnEOaDh47/+ggDLXlaLgDVm5VH61esXL/K9URmxkKgNmjoAPAxnlT9dPq7aODMJOuvXKrOrl6W3V69YDqzFGhABjHvjgA2FjvqO5U/WR0EGbahar7VPdrmsn+lZXbNavLVnuMiwbAZlHQAWDjHVY9a3QI5savNo1827v6WPWd6uXV7avrD8wFwAZT0AFgcxxZfX10CObWA6vDq/c1vdjzrJxtALBwFHQA2BwfrW5ZfW90EObaWWPdHld9pPq7pqLuXCGABaCgA8Dm+UrTJcqfbjoUDHbFNapHVT+ojqtuUF1qaCIAdomCDgCb62vV1ZsOAzt1cBYWw0WrS1T/1TQx4I/GxgFgZynoADDGW6u7jA7Bwrl29aKmov7YwVkAWCMFHQDGeUd1x+xLZ/3drnp2dUx126YVdgBmnIIOAGMd3jTn+kmjg7CQrly9s/pMtc/gLADsgIIOALPhb6u/Gh2ChXWFpsven9F0EjwAM0hBB4DZ8fTqxtUbqtMGZ2Hx7Fs9oWlF3Qx1gBmkoAPAbPlA0wnvv1J9eXAWFtPNq+9XB40OAsA5KegAMHtOb5prfePqxdXxY+OwgC5WHVD9/eggAJxNQQeA2XVs9cfV7as/H5yFxfQX1Zuqh4wOAoCCDgDz4CPVPzadwv1PTWPZfjw0EYvkntVLqgeODgKw7BR0AJgfX6n+rGks27WbDvs6ZWgiFsUe1Sur+48OArDMzjc6AACwU46ublfdqfrt6urVvYYmYhG8euXta4amAFhSVtABYL4dWj2zaeXzJtXnM6KNXfPK6sGjQwAsIwUdABbDqdVR1bWqS1YPqz6zcvvOwFzMn92rl1cPaLr0HYBNoqADwGI5pTqhemn1Oyu3mzeNa3vpwFzMl92qV1VnjA4CsEzsQQeAxfelpnFtVUd29u//f6kuMiQR8+DM6jnVo0cHAVgWCjoALJc3bnH/qGrPlfsvqX5zi/ddZtMSMat2qx7VdMXlEzIxAGDDKegAsLy+ucX9W2z1vldWl165v0d1601JxCz6i+r91b+PDgKw6BR0AGBbHrTV40d39mr7JarHbm4cBnto0xUXPxgdBGCRKegAwGr83VaPD9vGxzyladTblvZoulSa+Xanpm0PCjrABlLQAYCdcdQ2ntuvutBWz/1a2z49fvfqt9c7FBvqiOrG1ddGBwFYVAo6ALBeTl25bemjTaPetuUfqwucx/suW915nXKxPi7X9GLLLUcHAVhUCjoAMMojdvD++57H83tXf7POWVid36zumgPjADaEgg4AzKqDt/O+15/H8/tW/7qN5y+9jedYu8tWV01BB9gQCjoAMI+O2c7z25rh/pzqt7Z67vLZB78z9ql+sTp+dBCARaOgAwDL4IBtPHfZpvFhW/r9pkvoOW8PrF5cfWh0EIBFo6ADAMvqu9UztnrudU0r62f5x865yu5vp8mLqhtVPx0dBGCR+CUDAHC2r3XOMWI3qPbc4vEbq19Zub9b575sfln8TnXS6BAAi0ZBBwA4byev3M5y263e/w/VBVfuP3xTEs2GM6v7V68aHQRgkSjoAAA778+3uH9YdfGm4rp1kV80u1XPTEEHWFcKOgDA+jh05e1bq19uOu38lSvPLeKYtx+MDgCwaBR0AID1dWLTuLctR769oqm0X6PFKesXa9qD//nRQQAWxe6jAwAALIGHVPtVd6mePDjLevnV6i9HhwBYJAo6AMDm+XD1N9UNq7+rTh8bZ5edODoAwCJR0AEANt8HqwOqS1bvqr49Ns5OO2V0AIBFoqADAIzz46ZL329cHT04y864erXv6BAAi0JBBwAY76vVHasHN80Ynxc3qm42OgTAonCKOwCszsWqa1b/Mujrf6+6TXXSoK/Pxvvyyu3bTSPbLjA2zqq5zB1gnSjoALBjv9FUmK48MMM+1ZHVnarjB+Zg4x1Z3b16adNoNgCWhEvcAWDH/rSx5fwsN6jeWl1+dBA23Nuro0aHAGBzKegAsH03a5pdPStuUl1hdAg2xVOqb44OsQo/Hx0AYFEo6ACwfb9cXW50iK38YHQANsUXqpuODrEKe1d7jg4BsAgUdADYvtNGB9iG+1V7jA7BppiHQwGfUV1pdAiARaCgA8D8eXJWLJfFj6uDRodYhTNGBwBYBAo6AMyfk5uvWdnsvFOqt40OAcDmUNABYP6cmdnTy+SSowMAsDkUdACYP3tW/3d0CDbN56v/HB0CgI2noAPA/Dlf9YjRIdg0X6mOHB0CgI2noAPAfPrR6ABsqguPDgDAxlPQAWA+nTo6AACwvhR0AJhPv9Y0Dx0AWBAKOgDMp0tV1xsdAgBYPwo6AMyvX6kuPToEm+Kk0QEA2HgKOgBs356jA2zH3aubjg7Bhtu32m90iB3wNyXAOvDDFAC278jqraNDbMdpowOw4X6juuHoENvxzOobo0MALAIFHQC279jqq6NDbMerq4uODsGG+vnoADvwyerk0SEAFoGCDgA7NsuXuV+keuDoEGyoH48OsAMXHB0AYFEo6ACwY7P++/KZowOwYS5e/c3oEABsjln/gwMAZsEJzfZe7xOqi40OwYY4s7rl6BAAbA4FHQB27InVZ0aH2I7LVS8eHYINcZPRAVbBJe4A60RBB4DFcI3q6qNDsO5ePjrADny8+vDoEACLQkEHgNU5Y3SAHfj16rDqSqODsG52a9q+MMs+VH12dAiARaGgA8Dq3LH62egQO3C56jqjQ7Bunt/sv+Di8naAdaSgA8DqzPpK5lleX911dAh22Vkvtsz632oXHR0AYJHM+g99AJgVu1cXGB1ild5c/d7oEOy0X6neXl17dJAd+Fb1D6NDACwSBR0AVufk6l6jQ6zSHtXtRodgp+1bXW10iFU4pWkPOgDrREEHgNU5o/rG6BBr8IDqqaNDsGa/27R6PuvOrI4aHQJg0SjoALB636qOGB1iDZ6ckj5PblS9u7rw6CCrcGb1+6NDACwaBR0AVu//VYeODrFGT67eW+0/Ogjbdd3q36tfGB1klXavLj46BMCiOd/oAAAwZ06sftJ8nV598+rG1WnVWwdn4dyuWf1HdaHRQdbga03fTwCsIyvoALA2r6g+MjrETjhf9Zbqj6rfGZyFyeWaLhN/X/NVzqse3PRCFQDrSEEHgLV7ZvMzF31rL2q6TP+3RwdZcpeqDq9eWu01OMtavaX68ugQAItIQQeAtXtv9c3RIXbBFZouqf7P6pLVbmPjLJVLVm+sPtn8Xsnwseq7o0MALCIFHQB2zh1GB9hFl2ral/796gVN+9TZONetntj0771/dfmxcXba8c3XuEGAueKQOADYOYv0Ivcfr9yeWZ1avSwlbL38ZnXv6kktxvfM56vXjg4BsKgUdADYOd+pnlL9dYtzifgTVt7+XvXppmJ5ljM2P85cOquEP69pn/8+TVsKFsEp1Z+NDgGwyBR0ANg5p1RPrfat7jc4y3rbd+X2/ZXHP69u1/T/8xerMwflmlV7Vldu2l9+yMpz8zLPfC0+2/TCDQAbREEHgF1zWHXbpj3di2bLkvmJlbcv6Zxj5l7VdFn8Mrloda8tHt+6c15tsKj2Hx0AYNEp6ACwa15fPb7FLOjb8rCV21nuXX17i8fHV4/a1EQb75eqg7Z4vHfTAXvL5KXVD0eHAFh0CjoA7Lr7VF8YHWKQW2/judufx8feo9WP5/p59ZOdSnRul1zlx92tOmAbz1+k+T11fb28tTphdAiARaegA8Cu+1L10erao4PMiF87j+c/t4bPcXT1J+uQ5brV09fh8yyrE6snV28fHQRgGSjoALDrzqxuVb2xaT86u27f6sjRIejY6rmjQwAsi0WYxwkAs+CE6i2jQ8A6Or1znjcAwAZT0AFg/byq+pfRIWCd3LN6z+gQAMtEQQeA9XNK9YdNo8hgnn2p+vzoEADLRkEHgPX38OqFo0PATjq6usPKWwA2kYIOABvj30YHgJ3w9eom1VdGBwFYRgo6AGyM91Z/OjoErNF+rX5WPQDrTEEHgI3zguqPR4eAVTq8aawaAIOYgw4AG+vF1W7Zk85sO7y6V3XS6CAAy0xBB4CN96Kmkv6C0UFgG95V3b36+eggAMtOQQeAzXHWCrqSziw5omnfOQAzwB50ANg8L8yedGbHodVdRocA4GxW0AFgc521J/3p1S8OzsJy+nrTqvk3qlMGZwFgC1bQAWDzvai6VPXS0UFYOl+tblh9MQfCAcwcBR0Axjizelj1ktFBWBpfrG5TfWt0EAC2TUEHgLEeXt2y+sDoICysM6s7N13W/pXBWQDYDgUdAMZ7b3Xr6qjquMFZWCw/rW7VdCDc1wdnAWAHFHQAmA2nVDepbl59c3AWFsMrqns0vQAEwBxwijsAzJbPV3esrt904jvsjD+v/nF0CADWRkEHgNnzmZXb96qXZRwbq/Oj6q3VgU0HwgEwZ1ziDgCz69+bxrH9TfXhwVmYXd+tjqyuUD005RxgbinoADDbzqye3HTJ+1Orz46Nw4x5anWnpvFpPx2cBYBd5BJ3AJgfT2m65P2qTZcy7zk0DSM9s3p7xvMBLBQFHQDmyzdXbpet7lM9ovr1oYnYLN+uPlE9qDp+cBYANoBL3AFgPv2welH1G9Vzq1dW3xiaiI1yYtN/3+s3Xc6unAMsKCvoADD/Hr3y9qrVtaorV385Lg7r5OVNl7B/tXr/4CwAbAIFHQAWx2c7+xC511bPqG5aXai64KhQrNrp1QnVMU2XsX+pOmNoIgA2lYIOAIvpC9Xdqt2qGzad9l3TTPWrjwrFNv130wnsL6te13RyPwBLSEEHgMV2ZtNl0rdceXzR6oCV+08ekoiqA6tTVu4/rWn1HIAlp6ADwHL5SfXXK/ffWV1k5f7zcxr8RvtI9aSmy9bfOzgLADNIQQeA5fWhLe5fu7rAyv2z9q6f5dc2LdFi+NLK27P2kp/l5OqkzY8DwLxQ0AGAmvZA/3Tl/h9u9b4nVfts8Xiv6h6bEWoOvK76+RaPP1H946AsAMw5BR0A2JGnb+O539/Gc39R/fYGZxnpZZ3zqoPTq38dEwWARaSgAwA742XbeO7Q6pLn8fFPr26+hs+/Z2fvj99VP1zDxz65es95vM/YMwA2lIIOAKyXY1du23KPavc1fK59qxftcqL6cNMl+qulgAMwjIIOAGyWtZTfL1W32KggADCL1vJKNsAsOG10AAAA2AgKOjBvLlNdeHQIAObSodVuo0Ns5UKjAwCzQ0EH5s2fVr81OgQAc+eanXNc4Cz4bvXB0SGA2aGgA/PoKaMDADBXrlUdVl16dJCtfKZ6y+gQwOxQ0IF5dPvqy9VBo4MAMNMuVF29emd12cFZtuX8owMAs8Up7sC82rc6oDq9OiSXCAJwTpeu3t50aTvAXLCCDsy7x1X/VT25us7gLADMhr+q3pZyDswZBR1YjYNHB1iFpzb9MXb10UEAGObR1fuqp1XXGxsFYO1c4g6sxhdGB1ily1YfqL5U3bc6pukSeAAW2y2qN1aXHB1kDX5c3X10CGC2WEEHVuMXRwdYg4tUv1t9sXpptf/YOABsoH2qB1ZHNF/lvOrM6kejQwCzRUEHVuO1TYV33jy4aUXlUYNzALD+XlYdXr2y2mNwlp1xofwtDmzFDwVgNT5efX90iF3wd9XnqltVew3OAsCuOahpK9NDq6sMzrIr7lmdMToEMFsUdGC1PlqdNjrELvit6sjqs9XNmy6FB2B+3LB6VtOIzXku5mc5ZnQAYPYo6MBqPar6yegQ6+CK1XurN1TnHxsFgFW4TtPYtA80jdZcBIdXx48OAcwep7gDq7V7tdvoEOvoDtVR1X9Wjx2cBYBtu0Z1SHWZ0UHW2cHVsaNDALPHCjqwWmdUdxkdYp1dt3pMdVzTWDYAxtuj2rf6WNMLqYtWzk+oTh0dAphNVtCBtfhy9aHq+qODrLNLNZ1Uf4nqI02H4gGw+e5V3b560OggG+jI6k2jQwCzyQo6sBbfrV44OsQGekF1WPWS6uKDswAsm0c2nQ+yyOX8+9U/jQ4BzC4FHVirw5te/V9Ul63+oPpk9ar8nATYSHs1jcD8XPXcwVk2w/9W7xucAZhhLnEH1uqH1burG1UXGpxlI11p5XZG9crqP8bGAVgoe1XXrl5R/ergLJvpjqMDALPNyhCwMw6sfjQ6xCZ5UNNYtmdWtx2cBWARnL96Y9PP1mUq5we3GONKgQ2koAM76w9GB9hkj6/eXB1RXWFwFoB5dWDTyey3Gx1kgOdVJ40OAcw2l7gDO+vdTTNcLz06yCbaq7p19cGmPZPfzB9bVXerHjw6BDCzrlDdpKmgXmpwlhFOqv62+vToIMDss4IO7KyfVzesvjo6yACXr77YdInmAwZnmQU/ry44OgQwk65ZfaZ6TctZzqu+UD2j6WclwHYp6MCuOKbpwJujRwcZ5A5NJ70fODrIQL9UPWp0iPOwyIcYwqy7RNPIysNX7i+zp4wOAMwPBR3YVV+oPjs6xGCPaRoRdP/qYoOzbLY9q1uMDrENJ1X3Hh0CltDuTS9cfrLprJLLjI0z1KlNe+0PGx0EmB8KOrAe7t106M8y+63q1dU3qpu1PHvzrz86wHk4o/ry6BCwZG5avbxp688Vx0YZ7uTq7tU7RwcB5ouCDqyH05pGkB05OsgMuHjTzPRDWo79lv86OsB27Dk6ACyJ/apnVe9rGk257H7Q9MK1lXNgzRR0YL2cXN2zaa4tdd3qPdXLRgfZQE9rmmcMLKf/07RC/KbqcYOzzJJjq0NHhwDmk4IOrKcTmg5Oe//oIDPiatVDq+OqR1d7j42zrh5e/VVWqWEZXbj6taaRk7dtGkHJ9EL10dXtRwcB5peCDqy3U5pmhC/7nvQtXap6TtOp9zcbG2VdnL9pHvws26vabXQIWED3b1ox/2J1ucFZZsnPqvtUV6n+d2wUYJ4p6MBGOK1pBeGI0UFmzG5NI4deUl1pcJZd8dam7Qyz7MlNJygD6+OBTbPMX50V4q2dWd2l6ewRgF2ioAMb5adNJe4/qhMHZ5klF24aPXRU9fbmaw/3+Zr2Vd5hdJBVeE3TSe7Arrlo06r5y6r7Dc4yi05rGqX2rtFBgMWgoAMb6SdNM7Kv2jR+jLNdrumPukOaRhPNugs2XdZ6x9FBVuniowPAnLt0dfPqm02r5ucbG2cmvb+6W8o5sI4UdGAzfK1pDM8zmlYbONt+TaOJ/qlp/+Is2qN6XXXX0UHWYI/RAWCOPbF6W9NUDi92bdsTms4UMUoNWFcKOrBZvlD9ZfNxefQI/7c6uGlk0e8OzrK1tzVf5fwF1ZdHh4A59drqb6vrjQ4yow7u7LnvAOtOQQc22xHVZZpWaI4ZnGXW7NY0suj91cerfRq7ErxP0yX48/aiyiebtlcAq3Ol6pHV96r7Ds4yq75QXbZ6UC5pBzaQgg6McGz1zGrfpn3NnNNeTavoRzcdzLT/Jn/92zatoB1d3WmTv/Z6+IXRAWCO3KL6SvXcpn3nnNP3mw6dvHHTCxi2aQEbyoEfwGj3qh5e/VF1jcFZZtGDVm4vbTqV/NnVVzfoa12t6VL7hzW/M8Q/Vr1jdAiYA3tXj6se0Pz+732jPbr6YPXh0UGA5aGgA7PgX5pma1+laU74xfIH49b+YOXtHaofrtw/sLPn7v6ktY8V2/Lwp0OqX2/+V9D+p/r86BAwwy5evb5pusblBmeZVc9runrpc6ODAMtHQQdmxXErt0tWD25aMebcLtfZf1S/qjp95f7BTX9QrtaFq3/v7D3ui3Lq+S+NDgAz7KCmveaL8r/39fbJpjNAHjk6CLC8FHRg1pzeVDRPbdrz9wfb//Cld9Yf2g9YuS2zH1evHB0CZtB9qhs1bWHh3L7adFXB06qfDc4CLDkFHZhVr1q5vbk6oLrV2DjMgR9UbxgdAmbI71bPqG6TbUPnZf/qU5kqAswIBR2Yde9quuTwck2H9cz7Hmk2zjyeOA8b4Req9zRNythrcJZZdUz159XbRwcB2JIxa8A8OKVpDNCNmsbdnDI2DjPq+NEBYAbcv+mFzWuknG/L26vHN714oZwDM8cKOjBPjm7aZ/3q6gbVX4+Nwwx5QXXC6BAw0KOaXsS82+ggM+zg6n6jQwBsjxV0YB4dUT2laUzQwWOjMAN+1vR9cNLoIDDAbarPVn+Xcr4tp1Sfafp98eCxUQB2zAo6MM8+17QacmZ1zaY53iyff6o+NDoEbLIrVler3jY4xyw7qnp09fHqjMFZAFbFCjqwCO5f3bTptGL7kJfPBZtepIFlcMHqidWRKefb8+DqJtVHU86BOWIFHVgUx1Z/2TSW7ajqImPjsEmOrp4/OgRskt2aDja7+eggM+x51aHVe0cHAdgZVtCBRfPJ6lerh2au7TL4WPWl0SFgg+1TPaf6Xsr5thzbNFbuMtUjU86BOWYFHVhEP6hesXI7sLpedeOhidgIb63uOzoEbKBrVtdtmlLAtn21um1ekAUWhIIOLLrHNl3u/pam045ZHAeMDgAb6LrVIdWlRweZYX/YtKVJOQcWhoIOLIMTq3tWV6oOry6bn3/z7sDqO6NDwDrbrbpE0z7zfatLjo0zk06o/rZpn/kXBmcBWHf2oAPL4idNs3CvWN2ladWF+fSz6v3VyaODwDq6cfWv1XFN23KU83N7Y9O/y4Ep58CCUtCBZXN60+rUTarHD87C2v24ul/Tf0NYFI+u/rN6YLXH4Cyz6GPVM6t7V6cNzgKwoVziCSyzZ1efbpqjfr/BWVid46t/Gx0C1sntqkdU+40OMqPO2p706WxpAZaEFXRg2b2zenDTvvT/GRuFHfhBU6GBeXbh6teqrzRNIlDOz+30pn+fmzT9jFbOgaVB3dIkAAAQnUlEQVShoANMl0x+r2kP6MFNe0CZLd+sbpqZ58y3i1Rvqr5Y7V1dYGycmfRv1cObZr9/YnAWgE3nEneAsx3fdKn79aobVs8ZG4cVX6vuWn1+dBDYBU9t+rlyy9FBZtQRTeMw/3l0EICRFHSAc/vwyu2I6iHVI8fGWXpfaDqBH+bRA5sOgbva6CAz6qSmn7f3bJq2AbDUFHSA8/bZ6lFNs4lvWl1jbJyl9JHq7qNDwE74zeo61StGB5lRJzZdwv6gpqtkAEhBB1iNRzbtFf3r6l7VlcfGWRrvr+7UNPcc5sWlq99vWjU3y3zb/qF6d3XY6CAAs0ZBB1idn1VPrF7etJL+xrFxFt5R1d1yySvz5eXVtaqrjg4ywx7fNOISgG1Q0AHW5piV2+2r52c1fb39oOk0/a837U2FeXDlpkPg7jc6yIz6VtOLbn/RNDEDgPOgoAPsnHc0jQF6bHWzzOdeD99oeuHjC6ODwCrdrLpB9beDc8yq46ojqz9rmpIBwA6Ygw6waw5sKpV/nJm9u+I71R0zSo35cOXqRU0v1Cnn2/bj6s5NVxUo5wCrZAUdYH28uPq3at/q8KYXQC82NNF8OL3p4L2PNa2gwyw7f3W5pgMMLzc4y6w6oXpE9YHqK4OzAMwdK+gA6+e46oPVL1WXqp5XfWpootn2gere1VtSzpl9N2o6dfyYlPPz8rymn32vTDkH2ClW0AHW32krbx/ZtOL21Gr/pj3rTJ7S9O8Cs+4+TeX8/44OMsOOqP4zl/sD7DIFHWBjnZrxbFv6t6Z/i7ePDgKr8KDqX0eHmGH/r/rDphPajUQEWAcKOsDmOGs822Wq3ZouBb1xy3Gp7E+q/2066f7YphctYFb9QtPVLoc2Xa7NuZ1c3aP6UPWjwVkAFoqCDrC5jl15+3tNReCFK4/vMybOhjqkaZb5P1fvGxsFVuWyTfvMrzk6yAx7fXVw0wn2AKwzBR1gnB82FfWqNzcdLneXar9hiXbdt6u/Wbn/4pFBYI2eV90w5fy8vKZppvmrRgcBWGQKOsBs+LeVt6+t9q4uX71u5bndqr1GhFqFE6szqudUb2u63PXrQxPB6l20+pPqvtXVBmeZVZ+r7l/9T7anAGw4BR1gtvyk+vTK7ZIrz12kqfyeNRrzRgNyneWz1Y+3eHyPpisB/OHOvLlV02GF5x8dZEYdV32hulPTbHMANoGCDjC7ziq9P6puusXzf9m08neWvZvGuK2nE6oXbeP5v2laNYd5dZXqbtXT83fQeXl20xkSHxwdBGDZ+MUEMH+2njW8e+s/Cup71cfX+XPCSLtVb2oad7j34Cyz6u+arip47+ggAMtKQQeYf2dkrjhsz3Oa9lFfZnSQGfX16t+rA0YHAVh2CjoAsKjuUN2ietToIDPqmOoj1QObXugDYDAFHQBYNNetHlT98eggM+x/mw6A++LgHABsQUEHABbFBarfqg7v7CkInNNPqvtUn6n+3+AsAGxFQQcA5t0e1fWrf6qu2tkjCTnbR6q3Vs/NWESAmaWgAwDz7OFNYwjvOzrIDHtD06o5ADNOQQcA5tXjq2eODjHDPlk9qXrn6CAArI6CDgDMk0tXv1u9orrs4Cyz6PSmsWn3rr7UtOccgDmhoAOwLLa8xPe71fsG5WDnXKTp1PFnVb86OMsse1jTixcAzCEFHYBF97Dq5tXvbfHcz6qXNx2YdcyIUKzJHtXbqluODjLD/qH6QPXm0UEA2HkKOgCL6nrVi6vf2cb7LtA0I/vO1eeaVmadbD17Llo9rdqv+vXBWWbRydV/VQdUnx6cBYB1oKADsGh+ufrNplnYF9jBx15u5XZ49ZTqgxuajNX6jeq61b9U5x+cZVZ9o+n0+q9XZw7OAsA6MScUgEXyuOrt1bvbcTnf0q2bViJfkHFUo12v6VLtV6Scb8vPq2c3fc/+b8o5wEKxgg7AIvirpv3JN93Fz/MnK7f7VU+tPraLn4/Vu3j1muo61S8OzjKrHl8dlSs9ABaWgg7AvLpsU5n759Z/3NYdq5s1lf6jqx+u8+fnbOerXlndprrU4Cyz6qtN3+cHjg4CwMZS0AGYNxdvOjTs75v2m2+UvaqPVB+vDqresIFfa1ndvbprdd/RQWbUp5q+B/9odBAANoeCDsA8eUZ1w+omm/g1r1m9vqlI/t4OPpbVuWPTyfkPHx1kRv2w+svqrdV3B2cBYBMp6ADMsgs0HRT2e017w68+MMt9mk6Hf231wuqnA7PMqytUh1T7VhcZnGUWnVmdUN08Y9MAlpJT3AGYRXtWN6g+WR3fNG5rZDk/y9WaTtA+vrrV4Czz5KJN/z0/1PTfUTk/t/+qHlr9Uso5wNKygg7ALLlT9evVtav9B2fZnvNX76ie2LQi/KWxcWbaX1S3bTo3gHM7svrP6umjgwAwnoIOwGh7Vm+s9mia7byW+eUjna/pVO0/alrp3z8zqbf00Oqe1e1GB5lh72r6N7JdAoBKQQdgjMs3FbenNm23uszYOLtk75XbkdUfVP87NM14v9J0+f+/NL3owjmdXH2r6fv/WyuPAaBS0AHYPOer7rFy/xXVhQZm2Qi3rL5WPbd6T/X2sXE23S83na7/kqY955zbG6rXVIeNDgLAbFLQAdgMj28aj3bH0UE2waNWbg+p/nVslE3z99WNm0bSsW2PqZ4zOgQAs80p7gBspPNVf109s+Uo51t6adPe9Gs2P/vq12qv6uCmg+CU83M7sWks3zVSzgFYBSvoAGyku1dPGR1ikD2aRor9d/XZppPMvzc00fq5RtOBfk9vOtGec/tcdaPqx6ODADA/rKADsJEWbZ/5zti9+p3q0KbLnOfdftXHmubBK+fn9v3qoOoWKecArJEVdAA20pHVOzMDu6bZ7tduOr37XU0Fd55cqfrHpuLpBf5te1j10erTo4MAMJ/8ggVgI327ulv13tFBZsjNq2c1/dvcZnCW1bhi9e7q403nCFx4aJrZ9Nym8XIvTTkHYBco6ABstFOa9iv/x+ggM+aXm1bS719dZXCW8/LcptFxt6x+YXCWWXRU05UQj66+MzgLAAtAQQdgM5zRtPr6p02Fj7O9ujq8+qdmZ0/3g6tXVY8cnGNWfa3pe/m2TSMEAWBd2IMOwGY5qXpBdUj1gaZLgv0emuyzcvut6k7VTwdkuEB11eol1dXyIv62nFbdpelU/m8OzgLAAvLLF4DN9s2mMnqn6kODs8yam1U/aJqZfZ1N/LqXqT5SfbhpNJy/D87tQ03fs29POQdgg/gFDMAIpzad7n6DFmP02Hras2lP80eqB2zC13tMdVjTKLg9NuHrzZs3Vo9o+l595+AsACw4BR2A0Z7TtD/91aODzKBXNW0JuPYGfO7HVe+pDqyutQGff959orpzde/q+YOzALAkFHQAZsHh1UOa9qV/bnCWWXOnpjF1n6wusQ6fb7+mEW/Papppzjn9uGmk3M2qQ8dGAWDZKOgAzIrTm0ZV3aR6U3Xs2DgzZa+mveHvqfbfyc9xlep+1TuaRrxxbm9qGgl4reong7MAsIScngvArPlhda+mQ9Ju3HQJPJPfbdoT/e9NM7ifu4r/mz1XPm6/6sobF23u3b967egQACw3BR2AWfXfK7f3NK38HjA2zky568ptz6b90Seex8ddpOkAuJttTqy5c2L1oqZi/qnBWQBAQQdg5n1q5bZ7dcum08aZPLN6atMVB1tvCbhn9adNJZ5z+kb1meoe1c8HZwGA/5+CDsC8eHTT761nNq0e7zM2zszYs+mSd1bnmOr21dGjgwDA1hwSB8A8Oa1pbvftmlZBYS3u3fS9o5wDMJMUdADm0THVNZoOPvv64CzMtq9Xj20a4ffGpu8dAJhJCjoA8+r46l3VFZsKGGztdU3fHwc1jfADgJlmDzoAi+Cg6nvVraoHDM7CeP9dvap6weggALAWVtABWBSvqh5aXbP69OAsbL4zqx9VN6rukHIOwBxS0AFYJKdVn2gqaf9ZHTc2Dpvk9OrB1WWq/6q+PzQNAOwkBR2ARfTT6qbVnavnDM7CxnpZ9ZCmKyjMNAdgrtmDDsAi+/DK7ZPVawdnYX29s3phdejoIACwXqygA7AMDq4uVz23+ubgLOya71dHVHdPOQdgwSjoACyLb1ePrv5P0/gt87Dny0nVm6prV7etTh4bBwDWn0vcAVhG962uUr2j2ntwFnbsqdUHm1bOAWBhKegALKsvVzerfrtpZfYiQ9OwLSdWT27amgAAC88l7gAss282raJfsnr84Cyc7cvVq5v+uyjnACwNK+gAUD+rnt20z/nG1f5j4yyt46pXVs+qfjA4CwBsOivoAHC251f3qu5afWJwlmVzQnWb6jEp5wAsKQUdAM7tbdXNq49XPx6cZdF9vXpAtW/1qcFZAGAoBR0Atu2E6lrVras3D86yiD5QHVhdsXpNdezQNAAwA+xBB4Dt+2jTnvT7Vq8dnGVRvKO6e3XK6CAAMEusoAPA6hxc/W71nKbD5Fib06tvNF2VcK+UcwA4FwUdAFbvk02HmP1idXhT4WTHflrdodqnaV//T8fGAYDZpKADwNr9rLpjdcvq6MFZZt3zq3tX76pOHZwFAGaaPegAsPOOqW7fdOn7GwZnmTWvbDpc77DRQQBgXijoALBrjlm5faDpILmDxsYZ7rPV7arvNu07BwBWSUEHgPXx7aYD5KpuVd12YJYRvlcdVf1+04g6AGCN7EEHgPX1nGq/6hHVRwZn2SwHVHdqGkennAPATrKCDgAb4/nV65sOR/vt6vxj42yIg6rXNZ1uDwDsIgUdADbOcdV1qqtWL6yuXe0xNNH6+HT17uqxo4MAwCJxiTsAbKzTmlaYr189ZHCWXfXl6rnVNZsuawcA1pEVdADYPK+uvlPdpnrM4CxrcWZ1n+rj1VcGZwGAhWUFHQA211mXhl++OrL6/tg4O/SNphcU3phyDgAbSkEHgDG+1VR8r1W9uTpxbJxzeVfTKv+vNr2oAABsMJe4A8BYX28aT3br6kbVkwdm+UH1tJX7/zgwBwAsJQUdAGbDkSu3Q1Ye/0v169WFqt026GueUp3RNBLuTdWPq2M26GsBADugoAPAbPn4ytvrNv2e3r/60y3e/5vVXjv5ub9c/WiLx/tXxzYVdQBgMAUdAGbTaSu3g6v3bfH8XzQV653xZ9UXtnj8zZ38PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACz5v8DVl63Mj73zDAAAAAASUVORK5CYII="/> */} +{/* <image id="image3_19_150" width="2048" height="2048" xlink:href="data:image/png;base64,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"/> */} +{/* </defs> */} +{/* </svg> */} +{/* </div> */} +{/* ++++ */} \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/install-agents/go.mdx b/docs/en/serverless/transclusion/apm/guide/install-agents/go.mdx new file mode 100644 index 0000000000..14deee9d2e --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/install-agents/go.mdx @@ -0,0 +1,41 @@ +{/* Comes from sandbox.elastic.dev/test-books/apm/guide/transclusion/tab-widgets/install-agents/go.mdx */} + +**1. Install the agent** + +Install the ((apm-agent)) package using `go get`: + +```go +go get -u go.elastic.co/apm/v2 +``` + +**2. Configure the agent** + +To simplify development and testing, +the agent defaults to sending data to Elastic at `http://localhost:8200`. +To send data to an alternative location, you must configure `ELASTIC_APM_SERVER_URL`. + +```go +# The APM integration host and port +export ELASTIC_APM_SERVER_URL= + +# If you do not specify `ELASTIC_APM_SERVICE_NAME`, the Go agent will use the +# executable name. For example, if your executable is called "my-app.exe", then your +# service will be identified as "my-app". +export ELASTIC_APM_SERVICE_NAME= + +# Secret tokens are used to authorize requests to the APM integration +export ELASTIC_APM_SECRET_TOKEN= +``` + +**3. Instrument your application** + +Instrumentation is the process of extending your application's code to report trace data to Elastic APM. Go applications must be instrumented manually at the source code level. To instrument your applications, use one of the following approaches: + +* [Built-in instrumentation modules](((apm-go-ref))/builtin-modules.html). +* [Custom instrumentation](((apm-go-ref))/custom-instrumentation.html) and context propagation with the Go Agent API. +<br /> +**Learn more in the ((apm-agent)) reference** + +* [Supported technologies](((apm-go-ref))/supported-tech.html) +* [Advanced configuration](((apm-go-ref))/configuration.html) +* [Detailed guide to instrumenting Go source code](((apm-go-ref))/getting-started.html) \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/install-agents/java.mdx b/docs/en/serverless/transclusion/apm/guide/install-agents/java.mdx new file mode 100644 index 0000000000..3bcdbcf70e --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/install-agents/java.mdx @@ -0,0 +1,42 @@ +{/* Comes from sandbox.elastic.dev/test-books/apm/guide/transclusion/tab-widgets/install-agents/java.mdx */} + +Manually set up and configure the agent with the `-javaagent` JVM option. No application code change is required, but this requires an +application restart. See below for more information on this setup method. + +**1. Download the ((apm-agent))** + +The first step in getting started with the Elastic APM Java agent is to retrieve a copy of the agent JAR. +Java agent releases are published to [Maven central](https://repo.maven.apache.org/maven2/). In order to get a copy you can either: + +* download the [latest agent](https://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=co.elastic.apm&a=elastic-apm-agent&v=LATEST) +or a [previous release](https://mvnrepository.com/artifact/co.elastic.apm/elastic-apm-agent) from Maven central. +* download with `curl`: + + ```bash + curl -o 'elastic-apm-agent.jar' -L 'https://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=co.elastic.apm&a=elastic-apm-agent&v=LATEST' + ``` + +**2. Add `-javaagent` flag** + +When starting your application, add the JVM flag: `-javaagent:/path/to/elastic-apm-agent-<version>.jar`. + +**3. Configure** + +Different application servers have different ways of setting the `-javaagent` flag and system properties. +Start your application (for example a Spring Boot application or other embedded servers) and add the `-javaagent` JVM flag. +Use the `-D` prefix to configure the agent using system properties: + +```bash +java -javaagent:/path/to/elastic-apm-agent-<version>.jar -Delastic.apm.service_name=my-cool-service -Delastic.apm.application_packages=org.example,org.another.example -Delastic.apm.server_url=http://127.0.0.1:8200 -jar my-application.jar +``` + +Refer to [Manual setup with `-javaagent` flag](((apm-java-ref))/setup-javaagent.html) to learn more. + +**Alternate setup methods** + +* **Automatic setup with `apm-agent-attach-cli.jar`** + Automatically set up the agent without needing to alter the configuration of your JVM or application server. This method requires no changes to application code + or JVM options, and allows attaching to a running JVM. Refer to the [Java agent documentation](((apm-java-ref))/setup-attach-cli.html) for more information on this setup method. +* **Programmatic API setup to self-attach** + Set up the agent with a one-line code change and an extra `apm-agent-attach` dependency. This method requires no changes to JVM options, and + the agent artifact is embedded within the packaged application binary. Refer to the [Java agent documentation](((apm-java-ref))/setup-attach-api.html) for more information on this setup method. diff --git a/docs/en/serverless/transclusion/apm/guide/install-agents/net.mdx b/docs/en/serverless/transclusion/apm/guide/install-agents/net.mdx new file mode 100644 index 0000000000..6bc72a769c --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/install-agents/net.mdx @@ -0,0 +1,20 @@ +{/* Comes from sandbox.elastic.dev/test-books/apm/guide/transclusion/tab-widgets/install-agents/net.mdx */} + +**Set up the ((apm-agent))** + +* **Profiler runtime instrumentation**: +The agent supports auto instrumentation without any code change and without +any recompilation of your projects. See [Profiler auto instrumentation](((apm-dotnet-ref))/setup-auto-instrumentation.html). +* **NuGet packages**: +The agent ships as a set of [NuGet packages](((apm-dotnet-ref))/packages.html) available on [nuget.org](https://nuget.org). +You can add the Agent and specific instrumentations to a .NET application by +referencing one or more of these packages and following the package documentation. +* **Host startup hook**: +On .NET Core 3.0+ or .NET 5+, the agent supports auto instrumentation without any code change and without +any recompilation of your projects. See [Zero code change setup on .NET Core](((apm-dotnet-ref))t/setup-dotnet-net-core.html) +for more details. +<br /> +**Learn more in the ((apm-agent)) reference** + +* [Supported technologies](((apm-dotnet-ref))/supported-technologies.html) +* [Advanced configuration](((apm-dotnet-ref))/configuration.html) diff --git a/docs/en/serverless/transclusion/apm/guide/install-agents/node.mdx b/docs/en/serverless/transclusion/apm/guide/install-agents/node.mdx new file mode 100644 index 0000000000..584f8c053f --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/install-agents/node.mdx @@ -0,0 +1,43 @@ +{/* Comes from sandbox.elastic.dev/test-books/apm/guide/transclusion/tab-widgets/install-agents/node.mdx */} + +**1. Install the ((apm-agent))** + +Install the ((apm-agent)) for Node.js as a dependency to your application. + +```js +npm install elastic-apm-node --save +``` + +**2. Initialization** + +It's important that the agent is started before you require *any* other modules in your Node.js application - i.e. before `http` and before your router etc. + +This means that you should probably require and start the agent in your application's main file (usually `index.js`, `server.js` or `app.js`). + +Here's a simple example of how Elastic APM is normally required and started: + +```js +// Add this to the VERY top of the first file loaded in your app +var apm = require('elastic-apm-node').start({ + // Override service name from package.json + // Allowed characters: a-z, A-Z, 0-9, -, _, and space + serviceName: '', + + // Use if APM integration requires a token + secretToken: '', + + // Use if APM integration uses API keys for authentication + apiKey: '', + + // Set custom APM integration host and port (default: http://127.0.0.1:8200) + serverUrl: '', +}) +``` + +The agent will now monitor the performance of your application and record any uncaught exceptions. + +**Learn more in the ((apm-agent)) reference** + +* [Supported technologies](((apm-node-ref))/supported-technologies.html) +* [Babel/ES Modules](((apm-node-ref))/advanced-setup.html) +* [Advanced configuration](((apm-node-ref))/configuring-the-agent.html) diff --git a/docs/en/serverless/transclusion/apm/guide/install-agents/php.mdx b/docs/en/serverless/transclusion/apm/guide/install-agents/php.mdx new file mode 100644 index 0000000000..66829ef901 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/install-agents/php.mdx @@ -0,0 +1,69 @@ +{/* Comes from sandbox.elastic.dev/test-books/apm/guide/transclusion/tab-widgets/install-agents/php.mdx */} + +**1. Install the agent** + +Install the PHP agent using one of the [published packages](https://github.com/elastic/apm-agent-php/releases/latest). + +To use the RPM Package (RHEL/CentOS and Fedora): + +```php +rpm -ivh <package-file>.rpm +``` + +To use the DEB package (Debian and Ubuntu): + +```php +dpkg -i <package-file>.deb +``` + +To use the APK package (Alpine): + +```php +apk add --allow-untrusted <package-file>.apk +``` + +If you can’t find your distribution, you can install the agent by building it from the source. +The following instructions will build the APM agent using the same docker environment that Elastic uses to build our official packages. + +<DocCallOut title="Note"> +The agent is currently only available for Linux operating system. +</DocCallOut> + +1. Download the [agent source](https://github.com/elastic/apm-agent-php/). +2. Execute the following commands to build the agent and install it: + +```bash +cd apm-agent-php +# for linux glibc - libc distributions (Ubuntu, Redhat, etc) +export BUILD_ARCHITECTURE=linux-x86-64 +# for linux with musl - libc distributions (Alpine) +export BUILD_ARCHITECTURE=linuxmusl-x86-64 +# provide a path to php-config tool +export PHP_CONFIG=php-config + +# build extensions +make -f .ci/Makefile build + +# run extension tests +PHP_VERSION=`$PHP_CONFIG --version | cut -d'.' -f 1,2` make -f .ci/Makefile run-phpt-tests + +# install agent extensions +sudo cp agent/native/_build/${BUILD_ARCHITECTURE}-release/ext/elastic_apm-*.so `$PHP_CONFIG --extension-dir` + +# install automatic loader +sudo cp agent/native/_build/${BUILD_ARCHITECTURE}-release/loader/code/elastic_apm_loader.so `$PHP_CONFIG --extension-dir` +``` + +**2. Enable and configure the APM agent** + +Enable and configure your agent inside of the `php.ini` file: + +```ini +extension=elastic_apm_loader.so +elastic_apm.bootstrap_php_part_file=<repo root>/agent/php/bootstrap_php_part.php +``` + +**Learn more in the ((apm-agent)) reference** + +* [Supported technologies](((apm-php-ref))/supported-technologies.html) +* [Configuration](((apm-py-ref))/configuration.html) diff --git a/docs/en/serverless/transclusion/apm/guide/install-agents/python.mdx b/docs/en/serverless/transclusion/apm/guide/install-agents/python.mdx new file mode 100644 index 0000000000..5e48eaa4bc --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/install-agents/python.mdx @@ -0,0 +1,96 @@ +{/* Comes from sandbox.elastic.dev/test-books/apm/guide/transclusion/tab-widgets/install-agents/python.mdx */} + +Django and Flask are two of several frameworks that the Elastic APM Python Agent +supports. For a complete list of supported technologies, refer to the +[Elastic APM Python Agent documentation](((apm-py-ref))/supported-technologies.html). + +<DocTabs> + <DocTab name="Django"> + ```python + $ pip install elastic-apm + ``` + + **1. Install the ((apm-agent))** + + Install the ((apm-agent)) for Python as a dependency. + + ```python + $ pip install elastic-apm + ``` + + **2. Configure the ((apm-agent))** + + Agents are libraries that run inside of your application process. + APM services are created programmatically based on the `SERVICE_NAME`. + + ```python + # Add the agent to the installed apps + INSTALLED_APPS = ( + 'elasticapm.contrib.django', + # ... + ) + + ELASTIC_APM = { + # Set required service name. Allowed characters: + # a-z, A-Z, 0-9, -, _, and space + 'SERVICE_NAME': '', + + # Use if APM integration requires a token + 'SECRET_TOKEN': '', + + # Set custom APM integration host and port (default: http://localhost:8200) + 'SERVER_URL': '', + } + + # To send performance metrics, add our tracing middleware: + MIDDLEWARE = ( + 'elasticapm.contrib.django.middleware.TracingMiddleware', + #... + ) + ``` + + </DocTab> + <DocTab name="Flask"> + **1. Install the ((apm-agent))** + + Install the ((apm-agent)) for Python as a dependency. + + ```python + $ pip install elastic-apm[flask] + ``` + + **2. Configure the ((apm-agent))** + + Agents are libraries that run inside of your application process. + APM services are created programmatically based on the `SERVICE_NAME`. + + ```python + # initialize using environment variables + from elasticapm.contrib.flask import ElasticAPM + app = Flask(__name__) + apm = ElasticAPM(app) + + # or configure to use ELASTIC_APM in your application settings + from elasticapm.contrib.flask import ElasticAPM + app.config['ELASTIC_APM'] = { + # Set required service name. Allowed characters: + # a-z, A-Z, 0-9, -, _, and space + 'SERVICE_NAME': '', + + # Use if APM integration requires a token + 'SECRET_TOKEN': '', + + # Set custom APM integration host and port (default: http://localhost:8200) + 'SERVER_URL': '', + } + + apm = ElasticAPM(app) + ``` + + </DocTab> +</DocTabs> + +**Learn more in the ((apm-agent)) reference** + +* [Supported technologies](((apm-py-ref))/supported-technologies.html) +* [Advanced configuration](((apm-py-ref))/configuration.html) \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/install-agents/ruby.mdx b/docs/en/serverless/transclusion/apm/guide/install-agents/ruby.mdx new file mode 100644 index 0000000000..a2ec22661c --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/install-agents/ruby.mdx @@ -0,0 +1,79 @@ +{/* Comes from sandbox.elastic.dev/test-books/apm/guide/transclusion/tab-widgets/install-agents/ruby.mdx */} + +**1. Install the ((apm-agent))** + +Add the agent to your Gemfile. + +```ruby +gem 'elastic-apm' +``` + +**2. Configure the agent** + +<DocTabs> + <DocTab name="Ruby on Rails"> + APM is automatically started when your app boots. + Configure the agent by creating the config file `config/elastic_apm.yml`: + + ```ruby + # config/elastic_apm.yml: + + # Set service name - allowed characters: a-z, A-Z, 0-9, -, _ and space + # Defaults to the name of your Rails app + service_name: 'my-service' + + # Use if APM integration requires a token + secret_token: '' + + # Set custom APM integration host and port (default: http://localhost:8200) + server_url: 'http://localhost:8200' + ``` + + </DocTab> + <DocTab name="Rack"> + For Rack or a compatible framework, like Sinatra, include the middleware in your app and start the agent. + + ```ruby + # config.ru + + app = lambda do |env| + [200, {'Content-Type' => 'text/plain'}, ['ok']] + end + + # Wraps all requests in transactions and reports exceptions + use ElasticAPM::Middleware + + # Start an instance of the Agent + ElasticAPM.start(service_name: 'NothingButRack') + + run app + + # Gracefully stop the agent when process exits. + # Makes sure any pending transactions are sent. + at_exit { ElasticAPM.stop } + ``` + + Create a config file `config/elastic_apm.yml`: + + ```ruby + # config/elastic_apm.yml: + + # Set service name - allowed characters: a-z, A-Z, 0-9, -, _ and space + # Defaults to the name of your Rack app's class. + service_name: 'my-service' + + # Use if APM integration requires a token + secret_token: '' + + # Set custom APM integration host and port (default: http://localhost:8200) + server_url: 'http://localhost:8200' + ``` + + </DocTab> +</DocTabs> + + +**Learn more in the ((apm-agent)) reference** + +* [Supported technologies](((apm-ruby-ref))/supported-technologies.html) +* [Advanced configuration](((apm-ruby-ref))/configuration.html) \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/open-telemetry/otel-get-started.mdx b/docs/en/serverless/transclusion/apm/guide/open-telemetry/otel-get-started.mdx new file mode 100644 index 0000000000..0f786ef726 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/open-telemetry/otel-get-started.mdx @@ -0,0 +1,6 @@ + +Elastic integrates with OpenTelemetry, allowing you to reuse your existing instrumentation +to easily send observability data to Elastic. + +For more information on how to combine Elastic and OpenTelemetry, +refer to <DocLink id="serverlessObservabilityApmAgentsOtel" />. diff --git a/docs/en/serverless/transclusion/apm/guide/spec/v2/error.mdx b/docs/en/serverless/transclusion/apm/guide/spec/v2/error.mdx new file mode 100644 index 0000000000..23b18ba8b1 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/spec/v2/error.mdx @@ -0,0 +1,1296 @@ +export const snippet = ` +{ + "$id": "docs/spec/v2/error", + "description": "errorEvent represents an error or a logged error message, captured by an APM agent in a monitored service.", + "type": "object", + "properties": { + "context": { + "description": "Context holds arbitrary contextual information for the event.", + "type": [ + "null", + "object" + ], + "properties": { + "cloud": { + "description": "Cloud holds fields related to the cloud or infrastructure the events are coming from.", + "type": [ + "null", + "object" + ], + "properties": { + "origin": { + "description": "Origin contains the self-nested field groups for cloud.", + "type": [ + "null", + "object" + ], + "properties": { + "account": { + "description": "The cloud account or organization id used to identify different entities in a multi-tenant environment.", + "type": [ + "null", + "object" + ], + "properties": { + "id": { + "description": "The cloud account or organization id used to identify different entities in a multi-tenant environment.", + "type": [ + "null", + "string" + ] + } + } + }, + "provider": { + "description": "Name of the cloud provider.", + "type": [ + "null", + "string" + ] + }, + "region": { + "description": "Region in which this host, resource, or service is located.", + "type": [ + "null", + "string" + ] + }, + "service": { + "description": "The cloud service name is intended to distinguish services running on different platforms within a provider.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "The cloud service name is intended to distinguish services running on different platforms within a provider.", + "type": [ + "null", + "string" + ] + } + } + } + } + } + } + }, + "custom": { + "description": "Custom can contain additional metadata to be stored with the event. The format is unspecified and can be deeply nested objects. The information will not be indexed or searchable in Elasticsearch.", + "type": [ + "null", + "object" + ] + }, + "message": { + "description": "Message holds details related to message receiving and publishing if the captured event integrates with a messaging system", + "type": [ + "null", + "object" + ], + "properties": { + "age": { + "description": "Age of the message. If the monitored messaging framework provides a timestamp for the message, agents may use it. Otherwise, the sending agent can add a timestamp in milliseconds since the Unix epoch to the message's metadata to be retrieved by the receiving agent. If a timestamp is not available, agents should omit this field.", + "type": [ + "null", + "object" + ], + "properties": { + "ms": { + "description": "Age of the message in milliseconds.", + "type": [ + "null", + "integer" + ] + } + } + }, + "body": { + "description": "Body of the received message, similar to an HTTP request body", + "type": [ + "null", + "string" + ] + }, + "headers": { + "description": "Headers received with the message, similar to HTTP request headers.", + "type": [ + "null", + "object" + ], + "additionalProperties": false, + "patternProperties": { + "[.*]*$": { + "type": [ + "null", + "array", + "string" + ], + "items": { + "type": "string" + } + } + } + }, + "queue": { + "description": "Queue holds information about the message queue where the message is received.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name holds the name of the message queue where the message is received.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "routing_key": { + "description": "RoutingKey holds the optional routing key of the received message as set on the queuing system, such as in RabbitMQ.", + "type": [ + "null", + "string" + ] + } + } + }, + "page": { + "description": "Page holds information related to the current page and page referers. It is only sent from RUM agents.", + "type": [ + "null", + "object" + ], + "properties": { + "referer": { + "description": "Referer holds the URL of the page that 'linked' to the current page.", + "type": [ + "null", + "string" + ] + }, + "url": { + "description": "URL of the current page", + "type": [ + "null", + "string" + ] + } + } + }, + "request": { + "description": "Request describes the HTTP request information in case the event was created as a result of an HTTP request.", + "type": [ + "null", + "object" + ], + "properties": { + "body": { + "description": "Body only contais the request bod, not the query string information. It can either be a dictionary (for standard HTTP requests) or a raw request body.", + "type": [ + "null", + "string", + "object" + ] + }, + "cookies": { + "description": "Cookies used by the request, parsed as key-value objects.", + "type": [ + "null", + "object" + ] + }, + "env": { + "description": "Env holds environment variable information passed to the monitored service.", + "type": [ + "null", + "object" + ] + }, + "headers": { + "description": "Headers includes any HTTP headers sent by the requester. Cookies will be taken by headers if supplied.", + "type": [ + "null", + "object" + ], + "additionalProperties": false, + "patternProperties": { + "[.*]*$": { + "type": [ + "null", + "array", + "string" + ], + "items": { + "type": "string" + } + } + } + }, + "http_version": { + "description": "HTTPVersion holds information about the used HTTP version.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "method": { + "description": "Method holds information about the method of the HTTP request.", + "type": "string", + "maxLength": 1024 + }, + "socket": { + "description": "Socket holds information related to the recorded request, such as whether or not data were encrypted and the remote address.", + "type": [ + "null", + "object" + ], + "properties": { + "encrypted": { + "description": "Encrypted indicates whether a request was sent as TLS/HTTPS request. DEPRECATED: this field will be removed in a future release.", + "type": [ + "null", + "boolean" + ] + }, + "remote_address": { + "description": "RemoteAddress holds the network address sending the request. It should be obtained through standard APIs and not be parsed from any headers like 'Forwarded'.", + "type": [ + "null", + "string" + ] + } + } + }, + "url": { + "description": "URL holds information sucha as the raw URL, scheme, host and path.", + "type": [ + "null", + "object" + ], + "properties": { + "full": { + "description": "Full, possibly agent-assembled URL of the request, e.g. https://example.com:443/search?q=elasticsearch#top.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "hash": { + "description": "Hash of the request URL, e.g. 'top'", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "hostname": { + "description": "Hostname information of the request, e.g. 'example.com'.\"", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "pathname": { + "description": "Path of the request, e.g. '/search'", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "port": { + "description": "Port of the request, e.g. '443'. Can be sent as string or int.", + "type": [ + "null", + "string", + "integer" + ], + "maxLength": 1024 + }, + "protocol": { + "description": "Protocol information for the recorded request, e.g. 'https:'.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "raw": { + "description": "Raw unparsed URL of the HTTP request line, e.g https://example.com:443/search?q=elasticsearch. This URL may be absolute or relative. For more details, see https://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.2.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "search": { + "description": "Search contains the query string information of the request. It is expected to have values delimited by ampersands.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + } + }, + "required": [ + "method" + ] + }, + "response": { + "description": "Response describes the HTTP response information in case the event was created as a result of an HTTP request.", + "type": [ + "null", + "object" + ], + "properties": { + "decoded_body_size": { + "description": "DecodedBodySize holds the size of the decoded payload.", + "type": [ + "null", + "integer" + ] + }, + "encoded_body_size": { + "description": "EncodedBodySize holds the size of the encoded payload.", + "type": [ + "null", + "integer" + ] + }, + "finished": { + "description": "Finished indicates whether the response was finished or not.", + "type": [ + "null", + "boolean" + ] + }, + "headers": { + "description": "Headers holds the http headers sent in the http response.", + "type": [ + "null", + "object" + ], + "additionalProperties": false, + "patternProperties": { + "[.*]*$": { + "type": [ + "null", + "array", + "string" + ], + "items": { + "type": "string" + } + } + } + }, + "headers_sent": { + "description": "HeadersSent indicates whether http headers were sent.", + "type": [ + "null", + "boolean" + ] + }, + "status_code": { + "description": "StatusCode sent in the http response.", + "type": [ + "null", + "integer" + ] + }, + "transfer_size": { + "description": "TransferSize holds the total size of the payload.", + "type": [ + "null", + "integer" + ] + } + } + }, + "service": { + "description": "Service related information can be sent per event. Information provided here will override the more generic information retrieved from metadata, missing service fields will be retrieved from the metadata information.", + "type": [ + "null", + "object" + ], + "properties": { + "agent": { + "description": "Agent holds information about the APM agent capturing the event.", + "type": [ + "null", + "object" + ], + "properties": { + "ephemeral_id": { + "description": "EphemeralID is a free format ID used for metrics correlation by agents", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "name": { + "description": "Name of the APM agent capturing information.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the APM agent capturing information.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "environment": { + "description": "Environment in which the monitored service is running, e.g. \`production\` or \`staging\`.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "framework": { + "description": "Framework holds information about the framework used in the monitored service.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the used framework", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the used framework", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "id": { + "description": "ID holds a unique identifier for the service.", + "type": [ + "null", + "string" + ] + }, + "language": { + "description": "Language holds information about the programming language of the monitored service.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the used programming language", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the used programming language", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "name": { + "description": "Name of the monitored service.", + "type": [ + "null", + "string" + ], + "maxLength": 1024, + "pattern": "^[a-zA-Z0-9 _-]+$" + }, + "node": { + "description": "Node must be a unique meaningful name of the service node.", + "type": [ + "null", + "object" + ], + "properties": { + "configured_name": { + "description": "Name of the service node", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "origin": { + "description": "Origin contains the self-nested field groups for service.", + "type": [ + "null", + "object" + ], + "properties": { + "id": { + "description": "Immutable id of the service emitting this event.", + "type": [ + "null", + "string" + ] + }, + "name": { + "description": "Immutable name of the service emitting this event.", + "type": [ + "null", + "string" + ] + }, + "version": { + "description": "The version of the service the data was collected from.", + "type": [ + "null", + "string" + ] + } + } + }, + "runtime": { + "description": "Runtime holds information about the language runtime running the monitored service", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the language runtime", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the language runtime", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "target": { + "description": "Target holds information about the outgoing service in case of an outgoing event", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Immutable name of the target service for the event", + "type": [ + "null", + "string" + ] + }, + "type": { + "description": "Immutable type of the target service for the event", + "type": [ + "null", + "string" + ] + } + }, + "anyOf": [ + { + "properties": { + "type": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + { + "properties": { + "name": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + ] + }, + "version": { + "description": "Version of the monitored service.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "tags": { + "description": "Tags are a flat mapping of user-defined tags. On the agent side, tags are called labels. Allowed value types are string, boolean and number values. Tags are indexed and searchable.", + "type": [ + "null", + "object" + ], + "additionalProperties": { + "type": [ + "null", + "string", + "boolean", + "number" + ], + "maxLength": 1024 + } + }, + "user": { + "description": "User holds information about the correlated user for this event. If user data are provided here, all user related information from metadata is ignored, otherwise the metadata's user information will be stored with the event.", + "type": [ + "null", + "object" + ], + "properties": { + "domain": { + "description": "Domain of the logged in user", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "email": { + "description": "Email of the user.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "id": { + "description": "ID identifies the logged in user, e.g. can be the primary key of the user", + "type": [ + "null", + "string", + "integer" + ], + "maxLength": 1024 + }, + "username": { + "description": "Name of the user.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + } + } + }, + "culprit": { + "description": "Culprit identifies the function call which was the primary perpetrator of this event.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "exception": { + "description": "Exception holds information about the original error. The information is language specific.", + "type": [ + "null", + "object" + ], + "properties": { + "attributes": { + "description": "Attributes of the exception.", + "type": [ + "null", + "object" + ] + }, + "cause": { + "description": "Cause can hold a collection of error exceptions representing chained exceptions. The chain starts with the outermost exception, followed by its cause, and so on.", + "type": [ + "null", + "array" + ], + "items": { + "type": "object" + }, + "minItems": 0 + }, + "code": { + "description": "Code that is set when the error happened, e.g. database error code.", + "type": [ + "null", + "string", + "integer" + ], + "maxLength": 1024 + }, + "handled": { + "description": "Handled indicates whether the error was caught in the code or not.", + "type": [ + "null", + "boolean" + ] + }, + "message": { + "description": "Message contains the originally captured error message.", + "type": [ + "null", + "string" + ] + }, + "module": { + "description": "Module describes the exception type's module namespace.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "stacktrace": { + "description": "Stacktrace information of the captured exception.", + "type": [ + "null", + "array" + ], + "items": { + "type": "object", + "properties": { + "abs_path": { + "description": "AbsPath is the absolute path of the frame's file.", + "type": [ + "null", + "string" + ] + }, + "classname": { + "description": "Classname of the frame.", + "type": [ + "null", + "string" + ] + }, + "colno": { + "description": "ColumnNumber of the frame.", + "type": [ + "null", + "integer" + ] + }, + "context_line": { + "description": "ContextLine is the line from the frame's file.", + "type": [ + "null", + "string" + ] + }, + "filename": { + "description": "Filename is the relative name of the frame's file.", + "type": [ + "null", + "string" + ] + }, + "function": { + "description": "Function represented by the frame.", + "type": [ + "null", + "string" + ] + }, + "library_frame": { + "description": "LibraryFrame indicates whether the frame is from a third party library.", + "type": [ + "null", + "boolean" + ] + }, + "lineno": { + "description": "LineNumber of the frame.", + "type": [ + "null", + "integer" + ] + }, + "module": { + "description": "Module to which the frame belongs to.", + "type": [ + "null", + "string" + ] + }, + "post_context": { + "description": "PostContext is a slice of code lines immediately before the line from the frame's file.", + "type": [ + "null", + "array" + ], + "items": { + "type": "string" + }, + "minItems": 0 + }, + "pre_context": { + "description": "PreContext is a slice of code lines immediately after the line from the frame's file.", + "type": [ + "null", + "array" + ], + "items": { + "type": "string" + }, + "minItems": 0 + }, + "vars": { + "description": "Vars is a flat mapping of local variables of the frame.", + "type": [ + "null", + "object" + ] + } + }, + "anyOf": [ + { + "properties": { + "classname": { + "type": "string" + } + }, + "required": [ + "classname" + ] + }, + { + "properties": { + "filename": { + "type": "string" + } + }, + "required": [ + "filename" + ] + } + ] + }, + "minItems": 0 + }, + "type": { + "description": "Type of the exception.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + }, + "anyOf": [ + { + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ] + }, + { + "properties": { + "type": { + "type": "string" + } + }, + "required": [ + "type" + ] + } + ] + }, + "id": { + "description": "ID holds the hex encoded 128 random bits ID of the event.", + "type": "string", + "maxLength": 1024 + }, + "log": { + "description": "Log holds additional information added when the error is logged.", + "type": [ + "null", + "object" + ], + "properties": { + "level": { + "description": "Level represents the severity of the recorded log.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "logger_name": { + "description": "LoggerName holds the name of the used logger instance.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "message": { + "description": "Message of the logged error. In case a parameterized message is captured, Message should contain the same information, but with any placeholders being replaced.", + "type": "string" + }, + "param_message": { + "description": "ParamMessage should contain the same information as Message, but with placeholders where parameters were logged, e.g. 'error connecting to %s'. The string is not interpreted, allowing differnt placeholders per client languange. The information might be used to group errors together.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "stacktrace": { + "description": "Stacktrace information of the captured error.", + "type": [ + "null", + "array" + ], + "items": { + "type": "object", + "properties": { + "abs_path": { + "description": "AbsPath is the absolute path of the frame's file.", + "type": [ + "null", + "string" + ] + }, + "classname": { + "description": "Classname of the frame.", + "type": [ + "null", + "string" + ] + }, + "colno": { + "description": "ColumnNumber of the frame.", + "type": [ + "null", + "integer" + ] + }, + "context_line": { + "description": "ContextLine is the line from the frame's file.", + "type": [ + "null", + "string" + ] + }, + "filename": { + "description": "Filename is the relative name of the frame's file.", + "type": [ + "null", + "string" + ] + }, + "function": { + "description": "Function represented by the frame.", + "type": [ + "null", + "string" + ] + }, + "library_frame": { + "description": "LibraryFrame indicates whether the frame is from a third party library.", + "type": [ + "null", + "boolean" + ] + }, + "lineno": { + "description": "LineNumber of the frame.", + "type": [ + "null", + "integer" + ] + }, + "module": { + "description": "Module to which the frame belongs to.", + "type": [ + "null", + "string" + ] + }, + "post_context": { + "description": "PostContext is a slice of code lines immediately before the line from the frame's file.", + "type": [ + "null", + "array" + ], + "items": { + "type": "string" + }, + "minItems": 0 + }, + "pre_context": { + "description": "PreContext is a slice of code lines immediately after the line from the frame's file.", + "type": [ + "null", + "array" + ], + "items": { + "type": "string" + }, + "minItems": 0 + }, + "vars": { + "description": "Vars is a flat mapping of local variables of the frame.", + "type": [ + "null", + "object" + ] + } + }, + "anyOf": [ + { + "properties": { + "classname": { + "type": "string" + } + }, + "required": [ + "classname" + ] + }, + { + "properties": { + "filename": { + "type": "string" + } + }, + "required": [ + "filename" + ] + } + ] + }, + "minItems": 0 + } + }, + "required": [ + "message" + ] + }, + "parent_id": { + "description": "ParentID holds the hex encoded 64 random bits ID of the parent transaction or span.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "timestamp": { + "description": "Timestamp holds the recorded time of the event, UTC based and formatted as microseconds since Unix epoch.", + "type": [ + "null", + "integer" + ] + }, + "trace_id": { + "description": "TraceID holds the hex encoded 128 random bits ID of the correlated trace.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "transaction": { + "description": "Transaction holds information about the correlated transaction.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name is the generic designation of a transaction in the scope of a single service, eg: 'GET /users/:id'.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "sampled": { + "description": "Sampled indicates whether or not the full information for a transaction is captured. If a transaction is unsampled no spans and less context information will be reported.", + "type": [ + "null", + "boolean" + ] + }, + "type": { + "description": "Type expresses the correlated transaction's type as keyword that has specific relevance within the service's domain, eg: 'request', 'backgroundjob'.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "transaction_id": { + "description": "TransactionID holds the hex encoded 64 random bits ID of the correlated transaction.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + }, + "required": [ + "id" + ], + "allOf": [ + { + "if": { + "properties": { + "transaction_id": { + "type": "string" + } + }, + "required": [ + "transaction_id" + ] + }, + "then": { + "properties": { + "parent_id": { + "type": "string" + } + }, + "required": [ + "parent_id" + ] + } + }, + { + "if": { + "properties": { + "trace_id": { + "type": "string" + } + }, + "required": [ + "trace_id" + ] + }, + "then": { + "properties": { + "parent_id": { + "type": "string" + } + }, + "required": [ + "parent_id" + ] + } + }, + { + "if": { + "properties": { + "transaction_id": { + "type": "string" + } + }, + "required": [ + "transaction_id" + ] + }, + "then": { + "properties": { + "trace_id": { + "type": "string" + } + }, + "required": [ + "trace_id" + ] + } + }, + { + "if": { + "properties": { + "parent_id": { + "type": "string" + } + }, + "required": [ + "parent_id" + ] + }, + "then": { + "properties": { + "trace_id": { + "type": "string" + } + }, + "required": [ + "trace_id" + ] + } + } + ], + "anyOf": [ + { + "properties": { + "exception": { + "type": "object" + } + }, + "required": [ + "exception" + ] + }, + { + "properties": { + "log": { + "type": "object" + } + }, + "required": [ + "log" + ] + } + ] +}` + +<DocCode children={snippet} /> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/spec/v2/metadata.mdx b/docs/en/serverless/transclusion/apm/guide/spec/v2/metadata.mdx new file mode 100644 index 0000000000..a4cfb12600 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/spec/v2/metadata.mdx @@ -0,0 +1,570 @@ +export const snippet = ` +{ + "$id": "docs/spec/v2/metadata", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud metadata about where the monitored service is running.", + "type": [ + "null", + "object" + ], + "properties": { + "account": { + "description": "Account where the monitored service is running.", + "type": [ + "null", + "object" + ], + "properties": { + "id": { + "description": "ID of the cloud account.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "name": { + "description": "Name of the cloud account.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "availability_zone": { + "description": "AvailabilityZone where the monitored service is running, e.g. us-east-1a", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "instance": { + "description": "Instance on which the monitored service is running.", + "type": [ + "null", + "object" + ], + "properties": { + "id": { + "description": "ID of the cloud instance.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "name": { + "description": "Name of the cloud instance.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "machine": { + "description": "Machine on which the monitored service is running.", + "type": [ + "null", + "object" + ], + "properties": { + "type": { + "description": "ID of the cloud machine.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "project": { + "description": "Project in which the monitored service is running.", + "type": [ + "null", + "object" + ], + "properties": { + "id": { + "description": "ID of the cloud project.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "name": { + "description": "Name of the cloud project.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "provider": { + "description": "Provider that is used, e.g. aws, azure, gcp, digitalocean.", + "type": "string", + "maxLength": 1024 + }, + "region": { + "description": "Region where the monitored service is running, e.g. us-east-1", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "service": { + "description": "Service that is monitored on cloud", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the cloud service, intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + } + }, + "required": [ + "provider" + ] + }, + "labels": { + "description": "Labels are a flat mapping of user-defined tags. Allowed value types are string, boolean and number values. Labels are indexed and searchable.", + "type": [ + "null", + "object" + ], + "additionalProperties": { + "type": [ + "null", + "string", + "boolean", + "number" + ], + "maxLength": 1024 + } + }, + "network": { + "description": "Network holds information about the network over which the monitored service is communicating.", + "type": [ + "null", + "object" + ], + "properties": { + "connection": { + "type": [ + "null", + "object" + ], + "properties": { + "type": { + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + } + } + }, + "process": { + "description": "Process metadata about the monitored service.", + "type": [ + "null", + "object" + ], + "properties": { + "argv": { + "description": "Argv holds the command line arguments used to start this process.", + "type": [ + "null", + "array" + ], + "items": { + "type": "string" + }, + "minItems": 0 + }, + "pid": { + "description": "PID holds the process ID of the service.", + "type": "integer" + }, + "ppid": { + "description": "Ppid holds the parent process ID of the service.", + "type": [ + "null", + "integer" + ] + }, + "title": { + "description": "Title is the process title. It can be the same as process name.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + }, + "required": [ + "pid" + ] + }, + "service": { + "description": "Service metadata about the monitored service.", + "type": "object", + "properties": { + "agent": { + "description": "Agent holds information about the APM agent capturing the event.", + "type": "object", + "properties": { + "activation_method": { + "description": "ActivationMethod of the APM agent capturing information.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "ephemeral_id": { + "description": "EphemeralID is a free format ID used for metrics correlation by agents", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "name": { + "description": "Name of the APM agent capturing information.", + "type": "string", + "maxLength": 1024, + "minLength": 1 + }, + "version": { + "description": "Version of the APM agent capturing information.", + "type": "string", + "maxLength": 1024 + } + }, + "required": [ + "name", + "version" + ] + }, + "environment": { + "description": "Environment in which the monitored service is running, e.g. \`production\` or \`staging\`.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "framework": { + "description": "Framework holds information about the framework used in the monitored service.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the used framework", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the used framework", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "id": { + "description": "ID holds a unique identifier for the running service.", + "type": [ + "null", + "string" + ] + }, + "language": { + "description": "Language holds information about the programming language of the monitored service.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the used programming language", + "type": "string", + "maxLength": 1024 + }, + "version": { + "description": "Version of the used programming language", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + }, + "required": [ + "name" + ] + }, + "name": { + "description": "Name of the monitored service.", + "type": "string", + "maxLength": 1024, + "minLength": 1, + "pattern": "^[a-zA-Z0-9 _-]+$" + }, + "node": { + "description": "Node must be a unique meaningful name of the service node.", + "type": [ + "null", + "object" + ], + "properties": { + "configured_name": { + "description": "Name of the service node", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "runtime": { + "description": "Runtime holds information about the language runtime running the monitored service", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the language runtime", + "type": "string", + "maxLength": 1024 + }, + "version": { + "description": "Name of the language runtime", + "type": "string", + "maxLength": 1024 + } + }, + "required": [ + "name", + "version" + ] + }, + "version": { + "description": "Version of the monitored service.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + }, + "required": [ + "agent", + "name" + ] + }, + "system": { + "description": "System metadata", + "type": [ + "null", + "object" + ], + "properties": { + "architecture": { + "description": "Architecture of the system the monitored service is running on.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "configured_hostname": { + "description": "ConfiguredHostname is the configured name of the host the monitored service is running on. It should only be sent when configured by the user. If given, it is used as the event's hostname.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "container": { + "description": "Container holds the system's container ID if available.", + "type": [ + "null", + "object" + ], + "properties": { + "id": { + "description": "ID of the container the monitored service is running in.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "detected_hostname": { + "description": "DetectedHostname is the hostname detected by the APM agent. It usually contains what the hostname command returns on the host machine. It will be used as the event's hostname if ConfiguredHostname is not present.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "hostname": { + "description": "Deprecated: Use ConfiguredHostname and DetectedHostname instead. DeprecatedHostname is the host name of the system the service is running on. It does not distinguish between configured and detected hostname and therefore is deprecated and only used if no other hostname information is available.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "kubernetes": { + "description": "Kubernetes system information if the monitored service runs on Kubernetes.", + "type": [ + "null", + "object" + ], + "properties": { + "namespace": { + "description": "Namespace of the Kubernetes resource the monitored service is run on.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "node": { + "description": "Node related information", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the Kubernetes Node", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "pod": { + "description": "Pod related information", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the Kubernetes Pod", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "uid": { + "description": "UID is the system-generated string uniquely identifying the Pod.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + } + } + }, + "platform": { + "description": "Platform name of the system platform the monitored service is running on.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "user": { + "description": "User metadata, which can be overwritten on a per event basis.", + "type": [ + "null", + "object" + ], + "properties": { + "domain": { + "description": "Domain of the logged in user", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "email": { + "description": "Email of the user.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "id": { + "description": "ID identifies the logged in user, e.g. can be the primary key of the user", + "type": [ + "null", + "string", + "integer" + ], + "maxLength": 1024 + }, + "username": { + "description": "Name of the user.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + } + }, + "required": [ + "service" + ] +}` + +<DocCode children={snippet} /> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/spec/v2/metricset.mdx b/docs/en/serverless/transclusion/apm/guide/spec/v2/metricset.mdx new file mode 100644 index 0000000000..5e47004d9a --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/spec/v2/metricset.mdx @@ -0,0 +1,304 @@ +export const snippet = ` +{ + "$id": "docs/spec/v2/metricset", + "type": "object", + "properties": { + "faas": { + "description": "FAAS holds fields related to Function as a Service events.", + "type": [ + "null", + "object" + ], + "properties": { + "coldstart": { + "description": "Indicates whether a function invocation was a cold start or not.", + "type": [ + "null", + "boolean" + ] + }, + "execution": { + "description": "The request id of the function invocation.", + "type": [ + "null", + "string" + ] + }, + "id": { + "description": "A unique identifier of the invoked serverless function.", + "type": [ + "null", + "string" + ] + }, + "name": { + "description": "The lambda function name.", + "type": [ + "null", + "string" + ] + }, + "trigger": { + "description": "Trigger attributes.", + "type": [ + "null", + "object" + ], + "properties": { + "request_id": { + "description": "The id of the origin trigger request.", + "type": [ + "null", + "string" + ] + }, + "type": { + "description": "The trigger type.", + "type": [ + "null", + "string" + ] + } + } + }, + "version": { + "description": "The lambda function version.", + "type": [ + "null", + "string" + ] + } + } + }, + "samples": { + "description": "Samples hold application metrics collected from the agent.", + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[^*\"]*$": { + "type": [ + "null", + "object" + ], + "properties": { + "counts": { + "description": "Counts holds the bucket counts for histogram metrics. These numbers must be positive or zero. If Counts is specified, then Values is expected to be specified with the same number of elements, and with the same order.", + "type": [ + "null", + "array" + ], + "items": { + "type": "integer", + "minimum": 0 + }, + "minItems": 0 + }, + "type": { + "description": "Type holds an optional metric type: gauge, counter, or histogram. If Type is unknown, it will be ignored.", + "type": [ + "null", + "string" + ] + }, + "unit": { + "description": "Unit holds an optional unit for the metric. - \"percent\" (value is in the range [0,1]) - \"byte\" - a time unit: \"nanos\", \"micros\", \"ms\", \"s\", \"m\", \"h\", \"d\" If Unit is unknown, it will be ignored.", + "type": [ + "null", + "string" + ] + }, + "value": { + "description": "Value holds the value of a single metric sample.", + "type": [ + "null", + "number" + ] + }, + "values": { + "description": "Values holds the bucket values for histogram metrics. Values must be provided in ascending order; failure to do so will result in the metric being discarded.", + "type": [ + "null", + "array" + ], + "items": { + "type": "number" + }, + "minItems": 0 + } + }, + "allOf": [ + { + "if": { + "properties": { + "counts": { + "type": "array" + } + }, + "required": [ + "counts" + ] + }, + "then": { + "properties": { + "values": { + "type": "array" + } + }, + "required": [ + "values" + ] + } + }, + { + "if": { + "properties": { + "values": { + "type": "array" + } + }, + "required": [ + "values" + ] + }, + "then": { + "properties": { + "counts": { + "type": "array" + } + }, + "required": [ + "counts" + ] + } + } + ], + "anyOf": [ + { + "properties": { + "value": { + "type": "number" + } + }, + "required": [ + "value" + ] + }, + { + "properties": { + "values": { + "type": "array" + } + }, + "required": [ + "values" + ] + } + ] + } + } + }, + "service": { + "description": "Service holds selected information about the correlated service.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the correlated service.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the correlated service.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "span": { + "description": "Span holds selected information about the correlated transaction.", + "type": [ + "null", + "object" + ], + "properties": { + "subtype": { + "description": "Subtype is a further sub-division of the type (e.g. postgresql, elasticsearch)", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "type": { + "description": "Type expresses the correlated span's type as keyword that has specific relevance within the service's domain, eg: 'request', 'backgroundjob'.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "tags": { + "description": "Tags are a flat mapping of user-defined tags. On the agent side, tags are called labels. Allowed value types are string, boolean and number values. Tags are indexed and searchable.", + "type": [ + "null", + "object" + ], + "additionalProperties": { + "type": [ + "null", + "string", + "boolean", + "number" + ], + "maxLength": 1024 + } + }, + "timestamp": { + "description": "Timestamp holds the recorded time of the event, UTC based and formatted as microseconds since Unix epoch", + "type": [ + "null", + "integer" + ] + }, + "transaction": { + "description": "Transaction holds selected information about the correlated transaction.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the correlated transaction.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "type": { + "description": "Type expresses the correlated transaction's type as keyword that has specific relevance within the service's domain, eg: 'request', 'backgroundjob'.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + } + }, + "required": [ + "samples" + ] +}` + +<DocCode children={snippet} /> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/spec/v2/span.mdx b/docs/en/serverless/transclusion/apm/guide/spec/v2/span.mdx new file mode 100644 index 0000000000..6ac47163fb --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/spec/v2/span.mdx @@ -0,0 +1,906 @@ +export const snippet = ` +{ + "$id": "docs/spec/v2/span", + "type": "object", + "properties": { + "action": { + "description": "Action holds the specific kind of event within the sub-type represented by the span (e.g. query, connect)", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "child_ids": { + "description": "ChildIDs holds a list of successor transactions and/or spans.", + "type": [ + "null", + "array" + ], + "items": { + "type": "string", + "maxLength": 1024 + }, + "minItems": 0 + }, + "composite": { + "description": "Composite holds details on a group of spans represented by a single one.", + "type": [ + "null", + "object" + ], + "properties": { + "compression_strategy": { + "description": "A string value indicating which compression strategy was used. The valid values are \`exact_match\` and \`same_kind\`.", + "type": "string" + }, + "count": { + "description": "Count is the number of compressed spans the composite span represents. The minimum count is 2, as a composite span represents at least two spans.", + "type": "integer", + "minimum": 2 + }, + "sum": { + "description": "Sum is the durations of all compressed spans this composite span represents in milliseconds.", + "type": "number", + "minimum": 0 + } + }, + "required": [ + "compression_strategy", + "count", + "sum" + ] + }, + "context": { + "description": "Context holds arbitrary contextual information for the event.", + "type": [ + "null", + "object" + ], + "properties": { + "db": { + "description": "Database contains contextual data for database spans", + "type": [ + "null", + "object" + ], + "properties": { + "instance": { + "description": "Instance name of the database.", + "type": [ + "null", + "string" + ] + }, + "link": { + "description": "Link to the database server.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "rows_affected": { + "description": "RowsAffected shows the number of rows affected by the statement.", + "type": [ + "null", + "integer" + ] + }, + "statement": { + "description": "Statement of the recorded database event, e.g. query.", + "type": [ + "null", + "string" + ] + }, + "type": { + "description": "Type of the recorded database event., e.g. sql, cassandra, hbase, redis.", + "type": [ + "null", + "string" + ] + }, + "user": { + "description": "User is the username with which the database is accessed.", + "type": [ + "null", + "string" + ] + } + } + }, + "destination": { + "description": "Destination contains contextual data about the destination of spans", + "type": [ + "null", + "object" + ], + "properties": { + "address": { + "description": "Address is the destination network address: hostname (e.g. 'localhost'), FQDN (e.g. 'elastic.co'), IPv4 (e.g. '127.0.0.1') IPv6 (e.g. '::1')", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "port": { + "description": "Port is the destination network port (e.g. 443)", + "type": [ + "null", + "integer" + ] + }, + "service": { + "description": "Service describes the destination service", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name is the identifier for the destination service, e.g. 'http://elastic.co', 'elasticsearch', 'rabbitmq' ( DEPRECATED: this field will be removed in a future release", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "resource": { + "description": "Resource identifies the destination service resource being operated on e.g. 'http://elastic.co:80', 'elasticsearch', 'rabbitmq/queue_name' DEPRECATED: this field will be removed in a future release", + "type": "string", + "maxLength": 1024 + }, + "type": { + "description": "Type of the destination service, e.g. db, elasticsearch. Should typically be the same as span.type. DEPRECATED: this field will be removed in a future release", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + }, + "required": [ + "resource" + ] + } + } + }, + "http": { + "description": "HTTP contains contextual information when the span concerns an HTTP request.", + "type": [ + "null", + "object" + ], + "properties": { + "method": { + "description": "Method holds information about the method of the HTTP request.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "request": { + "description": "Request describes the HTTP request information.", + "type": [ + "null", + "object" + ], + "properties": { + "id": { + "description": "ID holds the unique identifier for the http request.", + "type": [ + "null", + "string" + ] + } + } + }, + "response": { + "description": "Response describes the HTTP response information in case the event was created as a result of an HTTP request.", + "type": [ + "null", + "object" + ], + "properties": { + "decoded_body_size": { + "description": "DecodedBodySize holds the size of the decoded payload.", + "type": [ + "null", + "integer" + ] + }, + "encoded_body_size": { + "description": "EncodedBodySize holds the size of the encoded payload.", + "type": [ + "null", + "integer" + ] + }, + "headers": { + "description": "Headers holds the http headers sent in the http response.", + "type": [ + "null", + "object" + ], + "additionalProperties": false, + "patternProperties": { + "[.*]*$": { + "type": [ + "null", + "array", + "string" + ], + "items": { + "type": "string" + } + } + } + }, + "status_code": { + "description": "StatusCode sent in the http response.", + "type": [ + "null", + "integer" + ] + }, + "transfer_size": { + "description": "TransferSize holds the total size of the payload.", + "type": [ + "null", + "integer" + ] + } + } + }, + "status_code": { + "description": "Deprecated: Use Response.StatusCode instead. StatusCode sent in the http response.", + "type": [ + "null", + "integer" + ] + }, + "url": { + "description": "URL is the raw url of the correlating HTTP request.", + "type": [ + "null", + "string" + ] + } + } + }, + "message": { + "description": "Message holds details related to message receiving and publishing if the captured event integrates with a messaging system", + "type": [ + "null", + "object" + ], + "properties": { + "age": { + "description": "Age of the message. If the monitored messaging framework provides a timestamp for the message, agents may use it. Otherwise, the sending agent can add a timestamp in milliseconds since the Unix epoch to the message's metadata to be retrieved by the receiving agent. If a timestamp is not available, agents should omit this field.", + "type": [ + "null", + "object" + ], + "properties": { + "ms": { + "description": "Age of the message in milliseconds.", + "type": [ + "null", + "integer" + ] + } + } + }, + "body": { + "description": "Body of the received message, similar to an HTTP request body", + "type": [ + "null", + "string" + ] + }, + "headers": { + "description": "Headers received with the message, similar to HTTP request headers.", + "type": [ + "null", + "object" + ], + "additionalProperties": false, + "patternProperties": { + "[.*]*$": { + "type": [ + "null", + "array", + "string" + ], + "items": { + "type": "string" + } + } + } + }, + "queue": { + "description": "Queue holds information about the message queue where the message is received.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name holds the name of the message queue where the message is received.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "routing_key": { + "description": "RoutingKey holds the optional routing key of the received message as set on the queuing system, such as in RabbitMQ.", + "type": [ + "null", + "string" + ] + } + } + }, + "service": { + "description": "Service related information can be sent per span. Information provided here will override the more generic information retrieved from metadata, missing service fields will be retrieved from the metadata information.", + "type": [ + "null", + "object" + ], + "properties": { + "agent": { + "description": "Agent holds information about the APM agent capturing the event.", + "type": [ + "null", + "object" + ], + "properties": { + "ephemeral_id": { + "description": "EphemeralID is a free format ID used for metrics correlation by agents", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "name": { + "description": "Name of the APM agent capturing information.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the APM agent capturing information.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "environment": { + "description": "Environment in which the monitored service is running, e.g. \`production\` or \`staging\`.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "framework": { + "description": "Framework holds information about the framework used in the monitored service.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the used framework", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the used framework", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "id": { + "description": "ID holds a unique identifier for the service.", + "type": [ + "null", + "string" + ] + }, + "language": { + "description": "Language holds information about the programming language of the monitored service.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the used programming language", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the used programming language", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "name": { + "description": "Name of the monitored service.", + "type": [ + "null", + "string" + ], + "maxLength": 1024, + "pattern": "^[a-zA-Z0-9 _-]+$" + }, + "node": { + "description": "Node must be a unique meaningful name of the service node.", + "type": [ + "null", + "object" + ], + "properties": { + "configured_name": { + "description": "Name of the service node", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "origin": { + "description": "Origin contains the self-nested field groups for service.", + "type": [ + "null", + "object" + ], + "properties": { + "id": { + "description": "Immutable id of the service emitting this event.", + "type": [ + "null", + "string" + ] + }, + "name": { + "description": "Immutable name of the service emitting this event.", + "type": [ + "null", + "string" + ] + }, + "version": { + "description": "The version of the service the data was collected from.", + "type": [ + "null", + "string" + ] + } + } + }, + "runtime": { + "description": "Runtime holds information about the language runtime running the monitored service", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the language runtime", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the language runtime", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "target": { + "description": "Target holds information about the outgoing service in case of an outgoing event", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Immutable name of the target service for the event", + "type": [ + "null", + "string" + ] + }, + "type": { + "description": "Immutable type of the target service for the event", + "type": [ + "null", + "string" + ] + } + }, + "anyOf": [ + { + "properties": { + "type": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + { + "properties": { + "name": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + ] + }, + "version": { + "description": "Version of the monitored service.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "tags": { + "description": "Tags are a flat mapping of user-defined tags. On the agent side, tags are called labels. Allowed value types are string, boolean and number values. Tags are indexed and searchable.", + "type": [ + "null", + "object" + ], + "additionalProperties": { + "type": [ + "null", + "string", + "boolean", + "number" + ], + "maxLength": 1024 + } + } + } + }, + "duration": { + "description": "Duration of the span in milliseconds. When the span is a composite one, duration is the gross duration, including \"whitespace\" in between spans.", + "type": "number", + "minimum": 0 + }, + "id": { + "description": "ID holds the hex encoded 64 random bits ID of the event.", + "type": "string", + "maxLength": 1024 + }, + "links": { + "description": "Links holds links to other spans, potentially in other traces.", + "type": [ + "null", + "array" + ], + "items": { + "type": "object", + "properties": { + "span_id": { + "description": "SpanID holds the ID of the linked span.", + "type": "string", + "maxLength": 1024 + }, + "trace_id": { + "description": "TraceID holds the ID of the linked span's trace.", + "type": "string", + "maxLength": 1024 + } + }, + "required": [ + "span_id", + "trace_id" + ] + }, + "minItems": 0 + }, + "name": { + "description": "Name is the generic designation of a span in the scope of a transaction.", + "type": "string", + "maxLength": 1024 + }, + "otel": { + "description": "OTel contains unmapped OpenTelemetry attributes.", + "type": [ + "null", + "object" + ], + "properties": { + "attributes": { + "description": "Attributes hold the unmapped OpenTelemetry attributes.", + "type": [ + "null", + "object" + ] + }, + "span_kind": { + "description": "SpanKind holds the incoming OpenTelemetry span kind.", + "type": [ + "null", + "string" + ] + } + } + }, + "outcome": { + "description": "Outcome of the span: success, failure, or unknown. Outcome may be one of a limited set of permitted values describing the success or failure of the span. It can be used for calculating error rates for outgoing requests.", + "type": [ + "null", + "string" + ], + "enum": [ + "success", + "failure", + "unknown", + null + ] + }, + "parent_id": { + "description": "ParentID holds the hex encoded 64 random bits ID of the parent transaction or span.", + "type": "string", + "maxLength": 1024 + }, + "sample_rate": { + "description": "SampleRate applied to the monitored service at the time where this span was recorded.", + "type": [ + "null", + "number" + ] + }, + "stacktrace": { + "description": "Stacktrace connected to this span event.", + "type": [ + "null", + "array" + ], + "items": { + "type": "object", + "properties": { + "abs_path": { + "description": "AbsPath is the absolute path of the frame's file.", + "type": [ + "null", + "string" + ] + }, + "classname": { + "description": "Classname of the frame.", + "type": [ + "null", + "string" + ] + }, + "colno": { + "description": "ColumnNumber of the frame.", + "type": [ + "null", + "integer" + ] + }, + "context_line": { + "description": "ContextLine is the line from the frame's file.", + "type": [ + "null", + "string" + ] + }, + "filename": { + "description": "Filename is the relative name of the frame's file.", + "type": [ + "null", + "string" + ] + }, + "function": { + "description": "Function represented by the frame.", + "type": [ + "null", + "string" + ] + }, + "library_frame": { + "description": "LibraryFrame indicates whether the frame is from a third party library.", + "type": [ + "null", + "boolean" + ] + }, + "lineno": { + "description": "LineNumber of the frame.", + "type": [ + "null", + "integer" + ] + }, + "module": { + "description": "Module to which the frame belongs to.", + "type": [ + "null", + "string" + ] + }, + "post_context": { + "description": "PostContext is a slice of code lines immediately before the line from the frame's file.", + "type": [ + "null", + "array" + ], + "items": { + "type": "string" + }, + "minItems": 0 + }, + "pre_context": { + "description": "PreContext is a slice of code lines immediately after the line from the frame's file.", + "type": [ + "null", + "array" + ], + "items": { + "type": "string" + }, + "minItems": 0 + }, + "vars": { + "description": "Vars is a flat mapping of local variables of the frame.", + "type": [ + "null", + "object" + ] + } + }, + "anyOf": [ + { + "properties": { + "classname": { + "type": "string" + } + }, + "required": [ + "classname" + ] + }, + { + "properties": { + "filename": { + "type": "string" + } + }, + "required": [ + "filename" + ] + } + ] + }, + "minItems": 0 + }, + "start": { + "description": "Start is the offset relative to the transaction's timestamp identifying the start of the span, in milliseconds.", + "type": [ + "null", + "number" + ] + }, + "subtype": { + "description": "Subtype is a further sub-division of the type (e.g. postgresql, elasticsearch)", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "sync": { + "description": "Sync indicates whether the span was executed synchronously or asynchronously.", + "type": [ + "null", + "boolean" + ] + }, + "timestamp": { + "description": "Timestamp holds the recorded time of the event, UTC based and formatted as microseconds since Unix epoch", + "type": [ + "null", + "integer" + ] + }, + "trace_id": { + "description": "TraceID holds the hex encoded 128 random bits ID of the correlated trace.", + "type": "string", + "maxLength": 1024 + }, + "transaction_id": { + "description": "TransactionID holds the hex encoded 64 random bits ID of the correlated transaction.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "type": { + "description": "Type holds the span's type, and can have specific keywords within the service's domain (eg: 'request', 'backgroundjob', etc)", + "type": "string", + "maxLength": 1024 + } + }, + "required": [ + "id", + "trace_id", + "name", + "parent_id", + "type", + "duration" + ], + "anyOf": [ + { + "properties": { + "start": { + "type": "number" + } + }, + "required": [ + "start" + ] + }, + { + "properties": { + "timestamp": { + "type": "integer" + } + }, + "required": [ + "timestamp" + ] + } + ] +}` + +<DocCode children={snippet} /> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/spec/v2/transaction.mdx b/docs/en/serverless/transclusion/apm/guide/spec/v2/transaction.mdx new file mode 100644 index 0000000000..610c92fa2a --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/spec/v2/transaction.mdx @@ -0,0 +1,1134 @@ +export const snippet = ` +{ + "$id": "docs/spec/v2/transaction", + "type": "object", + "properties": { + "context": { + "description": "Context holds arbitrary contextual information for the event.", + "type": [ + "null", + "object" + ], + "properties": { + "cloud": { + "description": "Cloud holds fields related to the cloud or infrastructure the events are coming from.", + "type": [ + "null", + "object" + ], + "properties": { + "origin": { + "description": "Origin contains the self-nested field groups for cloud.", + "type": [ + "null", + "object" + ], + "properties": { + "account": { + "description": "The cloud account or organization id used to identify different entities in a multi-tenant environment.", + "type": [ + "null", + "object" + ], + "properties": { + "id": { + "description": "The cloud account or organization id used to identify different entities in a multi-tenant environment.", + "type": [ + "null", + "string" + ] + } + } + }, + "provider": { + "description": "Name of the cloud provider.", + "type": [ + "null", + "string" + ] + }, + "region": { + "description": "Region in which this host, resource, or service is located.", + "type": [ + "null", + "string" + ] + }, + "service": { + "description": "The cloud service name is intended to distinguish services running on different platforms within a provider.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "The cloud service name is intended to distinguish services running on different platforms within a provider.", + "type": [ + "null", + "string" + ] + } + } + } + } + } + } + }, + "custom": { + "description": "Custom can contain additional metadata to be stored with the event. The format is unspecified and can be deeply nested objects. The information will not be indexed or searchable in Elasticsearch.", + "type": [ + "null", + "object" + ] + }, + "message": { + "description": "Message holds details related to message receiving and publishing if the captured event integrates with a messaging system", + "type": [ + "null", + "object" + ], + "properties": { + "age": { + "description": "Age of the message. If the monitored messaging framework provides a timestamp for the message, agents may use it. Otherwise, the sending agent can add a timestamp in milliseconds since the Unix epoch to the message's metadata to be retrieved by the receiving agent. If a timestamp is not available, agents should omit this field.", + "type": [ + "null", + "object" + ], + "properties": { + "ms": { + "description": "Age of the message in milliseconds.", + "type": [ + "null", + "integer" + ] + } + } + }, + "body": { + "description": "Body of the received message, similar to an HTTP request body", + "type": [ + "null", + "string" + ] + }, + "headers": { + "description": "Headers received with the message, similar to HTTP request headers.", + "type": [ + "null", + "object" + ], + "additionalProperties": false, + "patternProperties": { + "[.*]*$": { + "type": [ + "null", + "array", + "string" + ], + "items": { + "type": "string" + } + } + } + }, + "queue": { + "description": "Queue holds information about the message queue where the message is received.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name holds the name of the message queue where the message is received.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "routing_key": { + "description": "RoutingKey holds the optional routing key of the received message as set on the queuing system, such as in RabbitMQ.", + "type": [ + "null", + "string" + ] + } + } + }, + "page": { + "description": "Page holds information related to the current page and page referers. It is only sent from RUM agents.", + "type": [ + "null", + "object" + ], + "properties": { + "referer": { + "description": "Referer holds the URL of the page that 'linked' to the current page.", + "type": [ + "null", + "string" + ] + }, + "url": { + "description": "URL of the current page", + "type": [ + "null", + "string" + ] + } + } + }, + "request": { + "description": "Request describes the HTTP request information in case the event was created as a result of an HTTP request.", + "type": [ + "null", + "object" + ], + "properties": { + "body": { + "description": "Body only contais the request bod, not the query string information. It can either be a dictionary (for standard HTTP requests) or a raw request body.", + "type": [ + "null", + "string", + "object" + ] + }, + "cookies": { + "description": "Cookies used by the request, parsed as key-value objects.", + "type": [ + "null", + "object" + ] + }, + "env": { + "description": "Env holds environment variable information passed to the monitored service.", + "type": [ + "null", + "object" + ] + }, + "headers": { + "description": "Headers includes any HTTP headers sent by the requester. Cookies will be taken by headers if supplied.", + "type": [ + "null", + "object" + ], + "additionalProperties": false, + "patternProperties": { + "[.*]*$": { + "type": [ + "null", + "array", + "string" + ], + "items": { + "type": "string" + } + } + } + }, + "http_version": { + "description": "HTTPVersion holds information about the used HTTP version.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "method": { + "description": "Method holds information about the method of the HTTP request.", + "type": "string", + "maxLength": 1024 + }, + "socket": { + "description": "Socket holds information related to the recorded request, such as whether or not data were encrypted and the remote address.", + "type": [ + "null", + "object" + ], + "properties": { + "encrypted": { + "description": "Encrypted indicates whether a request was sent as TLS/HTTPS request. DEPRECATED: this field will be removed in a future release.", + "type": [ + "null", + "boolean" + ] + }, + "remote_address": { + "description": "RemoteAddress holds the network address sending the request. It should be obtained through standard APIs and not be parsed from any headers like 'Forwarded'.", + "type": [ + "null", + "string" + ] + } + } + }, + "url": { + "description": "URL holds information sucha as the raw URL, scheme, host and path.", + "type": [ + "null", + "object" + ], + "properties": { + "full": { + "description": "Full, possibly agent-assembled URL of the request, e.g. https://example.com:443/search?q=elasticsearch#top.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "hash": { + "description": "Hash of the request URL, e.g. 'top'", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "hostname": { + "description": "Hostname information of the request, e.g. 'example.com'.\"", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "pathname": { + "description": "Path of the request, e.g. '/search'", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "port": { + "description": "Port of the request, e.g. '443'. Can be sent as string or int.", + "type": [ + "null", + "string", + "integer" + ], + "maxLength": 1024 + }, + "protocol": { + "description": "Protocol information for the recorded request, e.g. 'https:'.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "raw": { + "description": "Raw unparsed URL of the HTTP request line, e.g https://example.com:443/search?q=elasticsearch. This URL may be absolute or relative. For more details, see https://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.2.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "search": { + "description": "Search contains the query string information of the request. It is expected to have values delimited by ampersands.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + } + }, + "required": [ + "method" + ] + }, + "response": { + "description": "Response describes the HTTP response information in case the event was created as a result of an HTTP request.", + "type": [ + "null", + "object" + ], + "properties": { + "decoded_body_size": { + "description": "DecodedBodySize holds the size of the decoded payload.", + "type": [ + "null", + "integer" + ] + }, + "encoded_body_size": { + "description": "EncodedBodySize holds the size of the encoded payload.", + "type": [ + "null", + "integer" + ] + }, + "finished": { + "description": "Finished indicates whether the response was finished or not.", + "type": [ + "null", + "boolean" + ] + }, + "headers": { + "description": "Headers holds the http headers sent in the http response.", + "type": [ + "null", + "object" + ], + "additionalProperties": false, + "patternProperties": { + "[.*]*$": { + "type": [ + "null", + "array", + "string" + ], + "items": { + "type": "string" + } + } + } + }, + "headers_sent": { + "description": "HeadersSent indicates whether http headers were sent.", + "type": [ + "null", + "boolean" + ] + }, + "status_code": { + "description": "StatusCode sent in the http response.", + "type": [ + "null", + "integer" + ] + }, + "transfer_size": { + "description": "TransferSize holds the total size of the payload.", + "type": [ + "null", + "integer" + ] + } + } + }, + "service": { + "description": "Service related information can be sent per event. Information provided here will override the more generic information retrieved from metadata, missing service fields will be retrieved from the metadata information.", + "type": [ + "null", + "object" + ], + "properties": { + "agent": { + "description": "Agent holds information about the APM agent capturing the event.", + "type": [ + "null", + "object" + ], + "properties": { + "ephemeral_id": { + "description": "EphemeralID is a free format ID used for metrics correlation by agents", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "name": { + "description": "Name of the APM agent capturing information.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the APM agent capturing information.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "environment": { + "description": "Environment in which the monitored service is running, e.g. \`production\` or \`staging\`.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "framework": { + "description": "Framework holds information about the framework used in the monitored service.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the used framework", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the used framework", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "id": { + "description": "ID holds a unique identifier for the service.", + "type": [ + "null", + "string" + ] + }, + "language": { + "description": "Language holds information about the programming language of the monitored service.", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the used programming language", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the used programming language", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "name": { + "description": "Name of the monitored service.", + "type": [ + "null", + "string" + ], + "maxLength": 1024, + "pattern": "^[a-zA-Z0-9 _-]+$" + }, + "node": { + "description": "Node must be a unique meaningful name of the service node.", + "type": [ + "null", + "object" + ], + "properties": { + "configured_name": { + "description": "Name of the service node", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "origin": { + "description": "Origin contains the self-nested field groups for service.", + "type": [ + "null", + "object" + ], + "properties": { + "id": { + "description": "Immutable id of the service emitting this event.", + "type": [ + "null", + "string" + ] + }, + "name": { + "description": "Immutable name of the service emitting this event.", + "type": [ + "null", + "string" + ] + }, + "version": { + "description": "The version of the service the data was collected from.", + "type": [ + "null", + "string" + ] + } + } + }, + "runtime": { + "description": "Runtime holds information about the language runtime running the monitored service", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Name of the language runtime", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "version": { + "description": "Version of the language runtime", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "target": { + "description": "Target holds information about the outgoing service in case of an outgoing event", + "type": [ + "null", + "object" + ], + "properties": { + "name": { + "description": "Immutable name of the target service for the event", + "type": [ + "null", + "string" + ] + }, + "type": { + "description": "Immutable type of the target service for the event", + "type": [ + "null", + "string" + ] + } + }, + "anyOf": [ + { + "properties": { + "type": { + "type": "string" + } + }, + "required": [ + "type" + ] + }, + { + "properties": { + "name": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + ] + }, + "version": { + "description": "Version of the monitored service.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + }, + "tags": { + "description": "Tags are a flat mapping of user-defined tags. On the agent side, tags are called labels. Allowed value types are string, boolean and number values. Tags are indexed and searchable.", + "type": [ + "null", + "object" + ], + "additionalProperties": { + "type": [ + "null", + "string", + "boolean", + "number" + ], + "maxLength": 1024 + } + }, + "user": { + "description": "User holds information about the correlated user for this event. If user data are provided here, all user related information from metadata is ignored, otherwise the metadata's user information will be stored with the event.", + "type": [ + "null", + "object" + ], + "properties": { + "domain": { + "description": "Domain of the logged in user", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "email": { + "description": "Email of the user.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "id": { + "description": "ID identifies the logged in user, e.g. can be the primary key of the user", + "type": [ + "null", + "string", + "integer" + ], + "maxLength": 1024 + }, + "username": { + "description": "Name of the user.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + } + } + } + } + }, + "dropped_spans_stats": { + "description": "DroppedSpanStats holds information about spans that were dropped (for example due to transaction_max_spans or exit_span_min_duration).", + "type": [ + "null", + "array" + ], + "items": { + "type": "object", + "properties": { + "destination_service_resource": { + "description": "DestinationServiceResource identifies the destination service resource being operated on. e.g. 'http://elastic.co:80', 'elasticsearch', 'rabbitmq/queue_name'.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "duration": { + "description": "Duration holds duration aggregations about the dropped span.", + "type": [ + "null", + "object" + ], + "properties": { + "count": { + "description": "Count holds the number of times the dropped span happened.", + "type": [ + "null", + "integer" + ], + "minimum": 1 + }, + "sum": { + "description": "Sum holds dimensions about the dropped span's duration.", + "type": [ + "null", + "object" + ], + "properties": { + "us": { + "description": "Us represents the summation of the span duration.", + "type": [ + "null", + "integer" + ], + "minimum": 0 + } + } + } + } + }, + "outcome": { + "description": "Outcome of the span: success, failure, or unknown. Outcome may be one of a limited set of permitted values describing the success or failure of the span. It can be used for calculating error rates for outgoing requests.", + "type": [ + "null", + "string" + ], + "enum": [ + "success", + "failure", + "unknown", + null + ] + }, + "service_target_name": { + "description": "ServiceTargetName identifies the instance name of the target service being operated on", + "type": [ + "null", + "string" + ], + "maxLength": 512 + }, + "service_target_type": { + "description": "ServiceTargetType identifies the type of the target service being operated on e.g. 'oracle', 'rabbitmq'", + "type": [ + "null", + "string" + ], + "maxLength": 512 + } + } + }, + "minItems": 0 + }, + "duration": { + "description": "Duration how long the transaction took to complete, in milliseconds with 3 decimal points.", + "type": "number", + "minimum": 0 + }, + "experience": { + "description": "UserExperience holds metrics for measuring real user experience. This information is only sent by RUM agents.", + "type": [ + "null", + "object" + ], + "properties": { + "cls": { + "description": "CumulativeLayoutShift holds the Cumulative Layout Shift (CLS) metric value, or a negative value if CLS is unknown. See https://web.dev/cls/", + "type": [ + "null", + "number" + ], + "minimum": 0 + }, + "fid": { + "description": "FirstInputDelay holds the First Input Delay (FID) metric value, or a negative value if FID is unknown. See https://web.dev/fid/", + "type": [ + "null", + "number" + ], + "minimum": 0 + }, + "longtask": { + "description": "Longtask holds longtask duration/count metrics.", + "type": [ + "null", + "object" + ], + "properties": { + "count": { + "description": "Count is the total number of of longtasks.", + "type": "integer", + "minimum": 0 + }, + "max": { + "description": "Max longtask duration", + "type": "number", + "minimum": 0 + }, + "sum": { + "description": "Sum of longtask durations", + "type": "number", + "minimum": 0 + } + }, + "required": [ + "count", + "max", + "sum" + ] + }, + "tbt": { + "description": "TotalBlockingTime holds the Total Blocking Time (TBT) metric value, or a negative value if TBT is unknown. See https://web.dev/tbt/", + "type": [ + "null", + "number" + ], + "minimum": 0 + } + } + }, + "faas": { + "description": "FAAS holds fields related to Function as a Service events.", + "type": [ + "null", + "object" + ], + "properties": { + "coldstart": { + "description": "Indicates whether a function invocation was a cold start or not.", + "type": [ + "null", + "boolean" + ] + }, + "execution": { + "description": "The request id of the function invocation.", + "type": [ + "null", + "string" + ] + }, + "id": { + "description": "A unique identifier of the invoked serverless function.", + "type": [ + "null", + "string" + ] + }, + "name": { + "description": "The lambda function name.", + "type": [ + "null", + "string" + ] + }, + "trigger": { + "description": "Trigger attributes.", + "type": [ + "null", + "object" + ], + "properties": { + "request_id": { + "description": "The id of the origin trigger request.", + "type": [ + "null", + "string" + ] + }, + "type": { + "description": "The trigger type.", + "type": [ + "null", + "string" + ] + } + } + }, + "version": { + "description": "The lambda function version.", + "type": [ + "null", + "string" + ] + } + } + }, + "id": { + "description": "ID holds the hex encoded 64 random bits ID of the event.", + "type": "string", + "maxLength": 1024 + }, + "links": { + "description": "Links holds links to other spans, potentially in other traces.", + "type": [ + "null", + "array" + ], + "items": { + "type": "object", + "properties": { + "span_id": { + "description": "SpanID holds the ID of the linked span.", + "type": "string", + "maxLength": 1024 + }, + "trace_id": { + "description": "TraceID holds the ID of the linked span's trace.", + "type": "string", + "maxLength": 1024 + } + }, + "required": [ + "span_id", + "trace_id" + ] + }, + "minItems": 0 + }, + "marks": { + "description": "Marks capture the timing of a significant event during the lifetime of a transaction. Marks are organized into groups and can be set by the user or the agent. Marks are only reported by RUM agents.", + "type": [ + "null", + "object" + ], + "additionalProperties": { + "type": [ + "null", + "object" + ], + "additionalProperties": { + "type": [ + "null", + "number" + ] + } + } + }, + "name": { + "description": "Name is the generic designation of a transaction in the scope of a single service, eg: 'GET /users/:id'.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "otel": { + "description": "OTel contains unmapped OpenTelemetry attributes.", + "type": [ + "null", + "object" + ], + "properties": { + "attributes": { + "description": "Attributes hold the unmapped OpenTelemetry attributes.", + "type": [ + "null", + "object" + ] + }, + "span_kind": { + "description": "SpanKind holds the incoming OpenTelemetry span kind.", + "type": [ + "null", + "string" + ] + } + } + }, + "outcome": { + "description": "Outcome of the transaction with a limited set of permitted values, describing the success or failure of the transaction from the service's perspective. It is used for calculating error rates for incoming requests. Permitted values: success, failure, unknown.", + "type": [ + "null", + "string" + ], + "enum": [ + "success", + "failure", + "unknown", + null + ] + }, + "parent_id": { + "description": "ParentID holds the hex encoded 64 random bits ID of the parent transaction or span.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "result": { + "description": "Result of the transaction. For HTTP-related transactions, this should be the status code formatted like 'HTTP 2xx'.", + "type": [ + "null", + "string" + ], + "maxLength": 1024 + }, + "sample_rate": { + "description": "SampleRate applied to the monitored service at the time where this transaction was recorded. Allowed values are [0..1]. A SampleRate \u003c1 indicates that not all spans are recorded.", + "type": [ + "null", + "number" + ] + }, + "sampled": { + "description": "Sampled indicates whether or not the full information for a transaction is captured. If a transaction is unsampled no spans and less context information will be reported.", + "type": [ + "null", + "boolean" + ] + }, + "session": { + "description": "Session holds optional transaction session information for RUM.", + "type": [ + "null", + "object" + ], + "properties": { + "id": { + "description": "ID holds a session ID for grouping a set of related transactions.", + "type": "string", + "maxLength": 1024 + }, + "sequence": { + "description": "Sequence holds an optional sequence number for a transaction within a session. It is not meaningful to compare sequences across two different sessions.", + "type": [ + "null", + "integer" + ], + "minimum": 1 + } + }, + "required": [ + "id" + ] + }, + "span_count": { + "description": "SpanCount counts correlated spans.", + "type": "object", + "properties": { + "dropped": { + "description": "Dropped is the number of correlated spans that have been dropped by the APM agent recording the transaction.", + "type": [ + "null", + "integer" + ] + }, + "started": { + "description": "Started is the number of correlated spans that are recorded.", + "type": "integer" + } + }, + "required": [ + "started" + ] + }, + "timestamp": { + "description": "Timestamp holds the recorded time of the event, UTC based and formatted as microseconds since Unix epoch", + "type": [ + "null", + "integer" + ] + }, + "trace_id": { + "description": "TraceID holds the hex encoded 128 random bits ID of the correlated trace.", + "type": "string", + "maxLength": 1024 + }, + "type": { + "description": "Type expresses the transaction's type as keyword that has specific relevance within the service's domain, eg: 'request', 'backgroundjob'.", + "type": "string", + "maxLength": 1024 + } + }, + "required": [ + "trace_id", + "id", + "type", + "span_count", + "duration" + ] +}` + +<DocCode children={snippet} /> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive-widget.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive-widget.mdx new file mode 100644 index 0000000000..5823498486 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive-widget.mdx @@ -0,0 +1,32 @@ + +import Go from './distributed-trace-receive/go.mdx' +import Java from './distributed-trace-receive/java.mdx' +import Net from './distributed-trace-receive/net.mdx' +import Node from './distributed-trace-receive/node.mdx' +import Php from './distributed-trace-receive/php.mdx' +import Python from './distributed-trace-receive/python.mdx' +import Ruby from './distributed-trace-receive/ruby.mdx' + +<DocTabs hasBorder> + <DocTab name="Go"> + <Go /> + </DocTab> + <DocTab name="Java"> + <Java /> + </DocTab> + <DocTab name=".NET"> + <Net /> + </DocTab> + <DocTab name="Node.js"> + <Node /> + </DocTab> + <DocTab name="PHP"> + <Php /> + </DocTab> + <DocTab name="Python"> + <Python /> + </DocTab> + <DocTab name="Ruby"> + <Ruby /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/go.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/go.mdx new file mode 100644 index 0000000000..054ac7e6c4 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/go.mdx @@ -0,0 +1,31 @@ + + + +{/* Need help with this example */} + +1. Parse the incoming `TraceContext` with + [`ParseTraceparentHeader`](https://godoc.org/go.elastic.co/apm/module/apmhttp#ParseTraceparentHeader) or + [`ParseTracestateHeader`](https://godoc.org/go.elastic.co/apm/module/apmhttp#ParseTracestateHeader). + +1. Start a new transaction or span as a child of the incoming transaction with + [`StartTransactionOptions`](((apm-go-ref))/api.html#tracer-api-start-transaction-options) or + [`StartSpanOptions`](((apm-go-ref))/api.html#transaction-start-span-options). + +<br /> + +Example: + +```go +// Receive incoming TraceContext +traceContext, _ := apmhttp.ParseTraceparentHeader(r.Header.Get("Traceparent")) [^1] +traceContext.State, _ = apmhttp.ParseTracestateHeader(r.Header["Tracestate"]...) [^2] + +opts := apm.TransactionOptions{ + TraceContext: traceContext, [^3] +} +transaction := apm.DefaultTracer.StartTransactionOptions("GET /", "request", opts) [^4] +``` +[^1]: Parse the `TraceParent` header +[^2]: Parse the `Tracestate` header +[^3]: Set the parent trace context +[^4]: Start a new transaction as a child of the received `TraceContext` diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/java.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/java.mdx new file mode 100644 index 0000000000..c5cdd84e12 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/java.mdx @@ -0,0 +1,36 @@ + + + +1. Create a transaction as a child of the incoming transaction with + [`startTransactionWithRemoteParent()`](((apm-java-ref))/public-api.html#api-transaction-inject-trace-headers). + +1. Start and name the transaction with [`activate()`](((apm-java-ref))/public-api.html#api-transaction-activate) + and [`setName()`](((apm-java-ref))/public-api.html#api-set-name). + +<br /> + +Example: + +```java +// Hook into a callback provided by the framework that is called on incoming requests +public Response onIncomingRequest(Request request) throws Exception { + // creates a transaction representing the server-side handling of the request + Transaction transaction = ElasticApm.startTransactionWithRemoteParent(request::getHeader, request::getHeaders); [^1] + try (final Scope scope = transaction.activate()) { [^2] + String name = "a useful name like ClassName#methodName where the request is handled"; + transaction.setName(name); [^3] + transaction.setType(Transaction.TYPE_REQUEST); [^4] + return request.handle(); + } catch (Exception e) { + transaction.captureException(e); + throw e; + } finally { + transaction.end(); [^5] + } +} +``` +[^1]: Create a transaction as the child of a remote parent +[^2]: Activate the transaction +[^3]: Name the transaction +[^4]: Add a transaction type +[^5]: Eventually, end the transaction diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/net.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/net.mdx new file mode 100644 index 0000000000..65dd04cdca --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/net.mdx @@ -0,0 +1,15 @@ + + + +Deserialize the incoming distributed tracing context, and pass it to any of the +[`StartTransaction`](((apm-dotnet-ref))/public-api.html#api-start-transaction) or +[`CaptureTransaction`](((apm-dotnet-ref))/public-api.html#convenient-capture-transaction) APIs — +all of which have an optional `DistributedTracingData` parameter. +This will create a new transaction or span as a child of the incoming trace context. + +Example starting a new transaction: + +```csharp +var transaction2 = Agent.Tracer.StartTransaction("Transaction2", "TestTransaction", + DistributedTracingData.TryDeserializeFromString(serializedDistributedTracingData)); +``` diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/node.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/node.mdx new file mode 100644 index 0000000000..21e816756d --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/node.mdx @@ -0,0 +1,19 @@ + + + +1. Decode and store the `traceparent` in the receiving service. + +1. Pass in the `traceparent` as the `childOf` option to manually start a new transaction + as a child of the received `traceparent` with + [`apm.startTransaction()`](((apm-node-ref))/agent-api.html#apm-start-transaction). + +<br /> + +Example receiving a `traceparent` over raw UDP: + +```js +const traceparent = readTraceparentFromUDPPacket() [^1] +agent.startTransaction('my-service-b-transaction', { childOf: traceparent }) [^2] +``` +[^1]: Read the `traceparent` from the incoming request. +[^2]: Use the `traceparent` to initialize a new transaction that is a child of the original `traceparent`. diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/php.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/php.mdx new file mode 100644 index 0000000000..1bd497c7b3 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/php.mdx @@ -0,0 +1,26 @@ + +1. Receive the distributed tracing data on the server side. + +1. Begin a new transaction using the agent's public API. For example, use [`ElasticApm::beginCurrentTransaction`](((apm-php-ref))/public-api.html#api-elasticapm-class-begin-current-transaction) + and pass the received distributed tracing data (serialized as string) as a parameter. + This will create a new transaction as a child of the incoming trace context. + +1. Don't forget to eventually end the transaction on the server side. + +<br /> + +Example: + +```php +$receiverTransaction = ElasticApm::beginCurrentTransaction( [^1] + 'GET /data-api', + 'data-layer', + /* timestamp */ null, + $distDataAsString [^2] +); +``` +[^1]: Start a new transaction +[^2]: Pass in the received distributed tracing data (serialized as string) + +Once this new transaction has been created in the receiving service, +you can create child spans, or use any other agent API methods as you typically would. diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/python.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/python.mdx new file mode 100644 index 0000000000..c3e7aade68 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/python.mdx @@ -0,0 +1,21 @@ + + + +1. Create a `TraceParent` object from a string or HTTP header. + +1. Start a new transaction as a child of the `TraceParent` by passing in a `TraceParent` object. + +<br /> + +Example using HTTP headers: + +```python +parent = elasticapm.trace_parent_from_headers(headers_dict) [^1] +client.begin_transaction('processors', trace_parent=parent) [^2] +``` +[^1]: Create a `TraceParent` object from HTTP headers formed as a dictionary +[^2]: Begin a new transaction as a child of the received `TraceParent` + +<DocCallOut title="Tip"> +See the [`TraceParent` API](((apm-py-ref))/api.html#traceparent-api) for additional examples. +</DocCallOut> diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/ruby.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/ruby.mdx new file mode 100644 index 0000000000..c5adb62716 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-receive/ruby.mdx @@ -0,0 +1,22 @@ + + + +Start a new transaction or span as a child of the incoming transaction or span with +[`with_transaction`](((apm-ruby-ref))/api.html#api-agent-with_transaction) or +[`with_span`](((apm-ruby-ref))/api.html#api-agent-with_span). + +Example: + +```ruby +# env being a Rack env +context = ElasticAPM::TraceContext.parse(env: env) [^1] + +ElasticAPM.with_transaction("Do things", trace_context: context) do [^2] + ElasticAPM.with_span("Do nested thing", trace_context: context) do [^3] + end +end +``` +[^1]: Parse the incoming `TraceContext` +[^2]: Create a transaction as a child of the incoming `TraceContext` +[^3]: Create a span as a child of the newly created transaction. `trace_context` is optional here, +as spans are automatically created as a child of their parent's transaction's `TraceContext` when none is passed. diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send-widget.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send-widget.mdx new file mode 100644 index 0000000000..6a926c07e4 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send-widget.mdx @@ -0,0 +1,32 @@ + +import Go from './distributed-trace-send/go.mdx' +import Java from './distributed-trace-send/java.mdx' +import Net from './distributed-trace-send/net.mdx' +import Node from './distributed-trace-send/node.mdx' +import Php from './distributed-trace-send/php.mdx' +import Python from './distributed-trace-send/python.mdx' +import Ruby from './distributed-trace-send/ruby.mdx' + +<DocTabs hasBorder> + <DocTab name="Go"> + <Go /> + </DocTab> + <DocTab name="Java"> + <Java /> + </DocTab> + <DocTab name=".NET"> + <Net /> + </DocTab> + <DocTab name="Node.js"> + <Node /> + </DocTab> + <DocTab name="PHP"> + <Php /> + </DocTab> + <DocTab name="Python"> + <Python /> + </DocTab> + <DocTab name="Ruby"> + <Ruby /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/go.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/go.mdx new file mode 100644 index 0000000000..ea05ba3a89 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/go.mdx @@ -0,0 +1,26 @@ + + + +1. Start a transaction with + [`StartTransaction`](((apm-go-ref))/api.html#tracer-api-start-transaction) or a span with + [`StartSpan`](((apm-go-ref))/api.html#transaction-start-span). + +1. Get the active `TraceContext`. + +1. Send the `TraceContext` to the receiving service. + +<br /> + +Example: + +```go +transaction := apm.DefaultTracer.StartTransaction("GET /", "request") [^1] +traceContext := transaction.TraceContext() [^2] + +// Send TraceContext to receiving service +traceparent := apmhttp.FormatTraceparentHeader(traceContext)) [^3] +tracestate := traceContext.State.String() +``` +[^1]: Start a transaction +[^2]: Get `TraceContext` from current Transaction +[^3]: Format the `TraceContext` or `tracestate` as a `traceparent` header. \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/java.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/java.mdx new file mode 100644 index 0000000000..77051e5a2f --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/java.mdx @@ -0,0 +1,33 @@ + + + +1. Start a transaction with [`startTransaction`](((apm-java-ref))/public-api.html#api-start-transaction), + or a span with [`startSpan`](((apm-java-ref))/public-api.html#api-span-start-span). + +1. Inject the `traceparent` header into the request object with + [`injectTraceHeaders`](((apm-java-ref))/public-api.html#api-transaction-inject-trace-headers) + +<br /> + +Example of manually instrumenting an RPC framework: + +```java +// Hook into a callback provided by the RPC framework that is called on outgoing requests +public Response onOutgoingRequest(Request request) throws Exception { + Span span = ElasticApm.currentSpan() [^1] + .startSpan("external", "http", null) + .setName(request.getMethod() + " " + request.getHost()); + try (final Scope scope = transaction.activate()) { + span.injectTraceHeaders((name, value) -> request.addHeader(name, value)); [^2] + return request.execute(); + } catch (Exception e) { + span.captureException(e); + throw e; + } finally { + span.end(); [^3] + } +} +``` +[^1]: Create a span representing an external call +[^2]: Inject the `traceparent` header into the request object +[^3]: End the span diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/net.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/net.mdx new file mode 100644 index 0000000000..4a6e877bee --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/net.mdx @@ -0,0 +1,19 @@ + + + +1. Serialize the distributed tracing context of the active transaction or span with + [`CurrentTransaction`](((apm-dotnet-ref))/public-api.html#api-current-transaction) or + [`CurrentSpan`](((apm-dotnet-ref))/public-api.html#api-current-span). + +1. Send the serialized context the receiving service. + +<br /> + +Example: + +```csharp +string outgoingDistributedTracingData = + (Agent.Tracer.CurrentSpan?.OutgoingDistributedTracingData + ?? Agent.Tracer.CurrentTransaction?.OutgoingDistributedTracingData)?.SerializeToString(); +// Now send `outgoingDistributedTracingData` to the receiving service +``` diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/node.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/node.mdx new file mode 100644 index 0000000000..ed74e73e51 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/node.mdx @@ -0,0 +1,23 @@ + + + +1. Start a transaction with [`apm.startTransaction()`](((apm-node-ref))/agent-api.html#apm-start-transaction), + or a span with [`apm.startSpan()`](((apm-node-ref))/agent-api.html#apm-start-span). + +1. Get the serialized `traceparent` string of the started transaction/span with + [`currentTraceparent`](((apm-node-ref))/agent-api.html#apm-current-traceparent). + +1. Encode the `traceparent` and send it to the receiving service inside your regular request. + +<br /> + +Example using raw UDP to communicate between two services, A and B: + +```js +agent.startTransaction('my-service-a-transaction'); [^1] +const traceparent = agent.currentTraceparent; [^2] +sendMetadata(`traceparent: ${traceparent}\n`); [^3] +``` +[^1]: Start a transaction +[^2]: Get the current `traceparent` +[^3]: Send the `traceparent` as a header to service B. diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/php.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/php.mdx new file mode 100644 index 0000000000..8863b55059 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/php.mdx @@ -0,0 +1,15 @@ + + + +1. On the client side (i.e., the side sending the request) get the current distributed tracing context. + +1. Serialize the current distributed tracing context to a format supported by the request's transport and send it to the server side (i.e., the side receiving the request). + +<br /> + +Example: + +```php +$distDataAsString = ElasticApm::getSerializedCurrentDistributedTracingData(); [^1] +``` +[^1]: Get the current distributed tracing data serialized as string diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/python.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/python.mdx new file mode 100644 index 0000000000..a4a853c2c6 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/python.mdx @@ -0,0 +1,22 @@ + + + +1. Start a transaction with [`begin_transaction()`](((apm-py-ref))/api.html#client-api-begin-transaction). + +1. Get the `trace_parent` of the active transaction. + +1. Send the `trace_parent` to the receiving service. + +<br /> + +Example: + +```python +client.begin_transaction('new-transaction') [^1] + +elasticapm.get_trace_parent_header('new-transaction') [^2] + +# Send `trace_parent_str` to another service +``` +[^1]: Start a new transaction +[^2]: Return the string representation of the current transaction's `TraceParent` object \ No newline at end of file diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/ruby.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/ruby.mdx new file mode 100644 index 0000000000..eca0903936 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/distributed-trace-send/ruby.mdx @@ -0,0 +1,21 @@ + + + +1. Start a span with [`with_span`](((apm-ruby-ref))/api.html#api-agent-with_span). + +1. Get the active `TraceContext`. + +1. Send the `TraceContext` to the receiving service. + +<br /> + +Example: + +```ruby +ElasticAPM.with_span "Name" do |span| [^1] + header = span.trace_context.traceparent.to_header [^2] + # send the TraceContext Header to a receiving service... +end +``` +[^1]: Start a span +[^2]: Get the `TraceContext` diff --git a/docs/en/serverless/transclusion/apm/guide/tab-widgets/no-data-indexed/fleet-managed.mdx b/docs/en/serverless/transclusion/apm/guide/tab-widgets/no-data-indexed/fleet-managed.mdx new file mode 100644 index 0000000000..7c0e5bfc55 --- /dev/null +++ b/docs/en/serverless/transclusion/apm/guide/tab-widgets/no-data-indexed/fleet-managed.mdx @@ -0,0 +1,16 @@ + +**Are the URL and API key correct?** + +Double check that the intake URL and API key are correct in your APM agent configuration. +Reference the relevant [((apm-agent)) documentation](((apm-agents-ref))/index.html) for details on how to set these configuration variables. + +To create a new API key, see <DocLink id="serverlessObservabilityApmKeepDataSecure" section="create-a-new-api-key" text="Create a new API key" />. + +If you see requests coming through the managed intake service but they are not accepted (a response code other than `202`), +see <DocLink id="serverlessObservabilityApmTroubleshooting" section="common-response-codes">managed intake service response codes</DocLink> to narrow down the possible causes. + +**Are there instrumentation gaps?** + +APM agents provide auto-instrumentation for many popular frameworks and libraries. +If the ((apm-agent)) is not auto-instrumenting something that you were expecting, data won't be sent to Elastic. +Reference the relevant [((apm-agent)) documentation](((apm-agents-ref))/index.html) for details on what is automatically instrumented. diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/download-widget.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/download-widget.mdx new file mode 100644 index 0000000000..666f90a27b --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/download-widget.mdx @@ -0,0 +1,24 @@ + +import Mac from './download/mac.mdx' +import Linux from './download/linux.mdx' +import Win from './download/win.mdx' +import Deb from './download/deb.mdx' +import Rpm from './download/rpm.mdx' + +<DocTabs hasBorder> + <DocTab name="macOS"> + <Mac /> + </DocTab> + <DocTab name="Linux"> + <Linux /> + </DocTab> + <DocTab name="Windows"> + <Win /> + </DocTab> + <DocTab name="DEB"> + <Deb /> + </DocTab> + <DocTab name="RPM"> + <Rpm /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/download/deb.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/download/deb.mdx new file mode 100644 index 0000000000..dc0e25553e --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/download/deb.mdx @@ -0,0 +1,10 @@ + +<DocCallOut title="Important" color="warning"> +To simplify upgrading to future versions of ((agent)), we recommended +that you use the tarball distribution instead of the DEB distribution. +</DocCallOut> + +```sh +curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-((version))-amd64.deb +sudo dpkg -i elastic-agent-((version))-amd64.deb +``` diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/download/linux.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/download/linux.mdx new file mode 100644 index 0000000000..ea256b0146 --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/download/linux.mdx @@ -0,0 +1,5 @@ + +```sh +curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-((version))-linux-x86_64.tar.gz +tar xzvf elastic-agent-((version))-linux-x86_64.tar.gz +``` diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/download/mac.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/download/mac.mdx new file mode 100644 index 0000000000..c62795b922 --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/download/mac.mdx @@ -0,0 +1,5 @@ + +```sh +curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-((version))-darwin-x86_64.tar.gz +tar xzvf elastic-agent-((version))-darwin-x86_64.tar.gz +``` diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/download/rpm.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/download/rpm.mdx new file mode 100644 index 0000000000..586b8ad1ca --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/download/rpm.mdx @@ -0,0 +1,10 @@ + +<DocCallOut title="Important" color="warning"> +To simplify upgrading to future versions of ((agent)), we recommended +that you use the tarball distribution instead of the RPM distribution. +</DocCallOut> + +```sh +curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-((version))-x86_64.rpm +sudo rpm -vi elastic-agent-((version))-x86_64.rpm +``` diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/download/win.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/download/win.mdx new file mode 100644 index 0000000000..7306d3be5c --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/download/win.mdx @@ -0,0 +1,12 @@ + +```powershell +# PowerShell 5.0+ +wget https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-((version))-windows-x86_64.zip -OutFile elastic-agent-((version))-windows-x86_64.zip +Expand-Archive .\elastic-agent-((version))-windows-x86_64.zip +``` +Or manually: + +1. Download the ((agent)) Windows zip file from the + [download page](https://www.elastic.co/downloads/beats/elastic-agent). + +1. Extract the contents of the zip file. diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone-widget.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone-widget.mdx new file mode 100644 index 0000000000..f61e8a780c --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone-widget.mdx @@ -0,0 +1,24 @@ + +import Deb from './run-standalone/content/deb.mdx' +import Linux from './run-standalone/content/linux.mdx' +import Mac from './run-standalone/content/mac.mdx' +import Rpm from './run-standalone/content/rpm.mdx' +import Win from './run-standalone/content/win.mdx' + +<DocTabs hasBorder> + <DocTab name="macOS"> + <Mac /> + </DocTab> + <DocTab name="Linux"> + <Linux /> + </DocTab> + <DocTab name="Windows"> + <Win /> + </DocTab> + <DocTab name="DEB"> + <Deb /> + </DocTab> + <DocTab name="RPM"> + <Rpm /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/deb.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/deb.mdx new file mode 100644 index 0000000000..64b8f68795 --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/deb.mdx @@ -0,0 +1,13 @@ + +<DocCallOut title="Tip"> +You must run this command as the root user because some +integrations require root privileges to collect sensitive data. +</DocCallOut> + +```shell +sudo systemctl enable elastic-agent [^1] +sudo systemctl start elastic-agent +``` +[^1]: The DEB package includes a service unit for Linux systems with systemd. On +these systems, you can manage ((agent)) by using the usual systemd commands. If +you don't have systemd, run `sudo service elastic-agent start`. diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/linux.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/linux.mdx new file mode 100644 index 0000000000..ca3cb05e7c --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/linux.mdx @@ -0,0 +1,9 @@ + +<DocCallOut title="Tip"> +You must run this command as the root user because some +integrations require root privileges to collect sensitive data. +</DocCallOut> + +```shell +sudo ./elastic-agent install +``` diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/mac.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/mac.mdx new file mode 100644 index 0000000000..ca3cb05e7c --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/mac.mdx @@ -0,0 +1,9 @@ + +<DocCallOut title="Tip"> +You must run this command as the root user because some +integrations require root privileges to collect sensitive data. +</DocCallOut> + +```shell +sudo ./elastic-agent install +``` diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/rpm.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/rpm.mdx new file mode 100644 index 0000000000..2f802a5d2d --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/rpm.mdx @@ -0,0 +1,13 @@ + +<DocCallOut title="Tip"> +You must run this command as the root user because some +integrations require root privileges to collect sensitive data. +</DocCallOut> + +```shell +sudo systemctl enable elastic-agent [^1] +sudo systemctl start elastic-agent +``` +[^1]: The RPM package includes a service unit for Linux systems with systemd. On +these systems, you can manage ((agent)) by using the usual systemd commands. If +you don't have systemd, run `sudo service elastic-agent start`. diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/win.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/win.mdx new file mode 100644 index 0000000000..b824e4e15a --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/run-standalone/content/win.mdx @@ -0,0 +1,11 @@ + + +Open a PowerShell prompt as an Administrator (right-click the PowerShell icon +and select **Run As Administrator**). + +From the PowerShell prompt, change to the directory where you installed ((agent)), +and run: + +```shell +.\elastic-agent.exe install +``` diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/start-widget.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/start-widget.mdx new file mode 100644 index 0000000000..2d2883c17e --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/start-widget.mdx @@ -0,0 +1,24 @@ + +import Deb from './start/deb.mdx' +import Linux from './start/linux.mdx' +import Mac from './start/mac.mdx' +import Rpm from './start/rpm.mdx' +import Win from './start/win.mdx' + +<DocTabs hasBorder> + <DocTab name="macOS"> + <Mac /> + </DocTab> + <DocTab name="Linux"> + <Linux /> + </DocTab> + <DocTab name="Windows"> + <Win /> + </DocTab> + <DocTab name="DEB"> + <Deb /> + </DocTab> + <DocTab name="RPM"> + <Rpm /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/start/deb.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/start/deb.mdx new file mode 100644 index 0000000000..802c7dfa95 --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/start/deb.mdx @@ -0,0 +1,19 @@ + + + +The DEB package includes a service unit for Linux systems with systemd. On these +systems, you can manage ((agent)) by using the usual systemd commands. + +{/* tag::start-command[] */} +Use `systemctl` to start the agent: + +```shell +sudo systemctl start elastic-agent +``` + +Otherwise, use: + +```shell +sudo service elastic-agent start +``` +{/* end::start-command[] */} diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/start/linux.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/start/linux.mdx new file mode 100644 index 0000000000..83f9e5b1d7 --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/start/linux.mdx @@ -0,0 +1,5 @@ + + +```shell +sudo service elastic-agent start +``` diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/start/mac.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/start/mac.mdx new file mode 100644 index 0000000000..bd25182a0f --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/start/mac.mdx @@ -0,0 +1,5 @@ + + +```shell +sudo launchctl load /Library/LaunchDaemons/co.elastic.elastic-agent.plist +``` diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/start/rpm.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/start/rpm.mdx new file mode 100644 index 0000000000..ba66930736 --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/start/rpm.mdx @@ -0,0 +1,18 @@ + + +The RPM package includes a service unit for Linux systems with systemd. On these +systems, you can manage ((agent)) by using the usual systemd commands. + +{/* tag::start-command[] */} +Use `systemctl` to start the agent: + +```shell +sudo systemctl start elastic-agent +``` + +Otherwise, use: + +```shell +sudo service elastic-agent start +``` +{/* end::start-command[] */} diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/start/win.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/start/win.mdx new file mode 100644 index 0000000000..f036e6eaf3 --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/start/win.mdx @@ -0,0 +1,5 @@ + + +```shell +Start-Service Elastic Agent +``` diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/stop-widget.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/stop-widget.mdx new file mode 100644 index 0000000000..7d360db28f --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/stop-widget.mdx @@ -0,0 +1,24 @@ + +import Deb from './stop/deb.mdx' +import Linux from './stop/linux.mdx' +import Mac from './stop/mac.mdx' +import Rpm from './stop/rpm.mdx' +import Win from './stop/win.mdx' + +<DocTabs hasBorder> + <DocTab name="macOS"> + <Mac /> + </DocTab> + <DocTab name="Linux"> + <Linux /> + </DocTab> + <DocTab name="Windows"> + <Win /> + </DocTab> + <DocTab name="DEB"> + <Deb /> + </DocTab> + <DocTab name="RPM"> + <Rpm /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/stop/deb.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/stop/deb.mdx new file mode 100644 index 0000000000..8615ba363c --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/stop/deb.mdx @@ -0,0 +1,24 @@ + + + +The DEB package includes a service unit for Linux systems with systemd. On these +systems, you can manage ((agent)) by using the usual systemd commands. + +{/* tag::stop-command[] */} +Use `systemctl` to stop the agent: + +```shell +sudo systemctl stop elastic-agent +``` + +Otherwise, use: + +```shell +sudo service elastic-agent stop +``` + +<DocCallOut title="Note"> +((agent)) will restart automatically if the system is rebooted. +</DocCallOut> + +{/* end::stop-command[] */} diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/stop/linux.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/stop/linux.mdx new file mode 100644 index 0000000000..1d4bf8982d --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/stop/linux.mdx @@ -0,0 +1,10 @@ + + +```shell +sudo service elastic-agent stop +``` + +<DocCallOut title="Note"> +((agent)) will restart automatically if the system is rebooted. +</DocCallOut> + diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/stop/mac.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/stop/mac.mdx new file mode 100644 index 0000000000..5a6b734fc6 --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/stop/mac.mdx @@ -0,0 +1,10 @@ + + +```shell +sudo launchctl unload /Library/LaunchDaemons/co.elastic.elastic-agent.plist +``` + +<DocCallOut title="Note"> +((agent)) will restart automatically if the system is rebooted. +</DocCallOut> + diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/stop/rpm.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/stop/rpm.mdx new file mode 100644 index 0000000000..5c87b4d5f5 --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/stop/rpm.mdx @@ -0,0 +1,23 @@ + + +The RPM package includes a service unit for Linux systems with systemd. On these +systems, you can manage ((agent)) by using the usual systemd commands. + +{/* tag::stop-command[] */} +Use `systemctl` to stop the agent: + +```shell +sudo systemctl stop elastic-agent +``` + +Otherwise, use: + +```shell +sudo service elastic-agent stop +``` + +<DocCallOut title="Note"> +((agent)) will restart automatically if the system is rebooted. +</DocCallOut> + +{/* end::stop-command[] */} diff --git a/docs/en/serverless/transclusion/fleet/tab-widgets/stop/win.mdx b/docs/en/serverless/transclusion/fleet/tab-widgets/stop/win.mdx new file mode 100644 index 0000000000..44725fa737 --- /dev/null +++ b/docs/en/serverless/transclusion/fleet/tab-widgets/stop/win.mdx @@ -0,0 +1,13 @@ + + +```shell +Stop-Service Elastic Agent +``` + +If necessary, use Task Manager on Windows to stop ((agent)). This will kill the +`elastic-agent` process and any sub-processes it created (such as ((beats))). + +<DocCallOut title="Note"> +((agent)) will restart automatically if the system is rebooted. +</DocCallOut> + diff --git a/docs/en/serverless/transclusion/host-details.mdx b/docs/en/serverless/transclusion/host-details.mdx new file mode 100644 index 0000000000..1544498e4b --- /dev/null +++ b/docs/en/serverless/transclusion/host-details.mdx @@ -0,0 +1,92 @@ +{/* This is collapsed by default */} + +<DocAccordion buttonContent="Overview"> + +![Host metrics](../images/metrics-overlay.png) + +The **Overview** tab displays metrics about the selected host, including CPU usage, +normalized load, memory usage, disk usage, network traffic, and the log rate. + +Change the time range to view metrics over a specific period of time. + +Hover over a specific time period on a chart to compare the various metrics at that given time. + +Expand the **Alerts** section to see alerts related to the selected host. + +</DocAccordion> + +<DocAccordion buttonContent="Metadata"> + +![Host metadata](../images/metadata-overlay.png) + +The **Metadata** tab lists all the meta information relating to the host, +including host, cloud, and agent information. + +This information can help when investigating events—for example, +when filtering by operating system or architecture. + +</DocAccordion> + +<DocAccordion buttonContent="Processes"> + +![Host processes](../images/processes-overlay.png) + +The **Processes** tab lists the total number of processes (`system.process.summary.total`) running on the host, +along with the total number of processes in these various states: + +* Running (`system.process.summary.running`) +* Sleeping (`system.process.summary.sleeping`) +* Stopped (`system.process.summary.stopped`) +* Idle (`system.process.summary.idle`) +* Dead (`system.process.summary.dead`) +* Zombie (`system.process.summary.zombie`) +* Unknown (`system.process.summary.unknown`) + +The processes listed in the **Top processes** table are based on an aggregation of the top CPU and the top memory consuming processes. +The number of top processes is controlled by `process.include_top_n.by_cpu` and `process.include_top_n.by_memory`. + +| | | +|---|---| +| **Command** | Full command line that started the process, including the absolute path to the executable, and all the arguments (`system.process.cmdline`). | +| **PID** | Process id (`process.pid`). | +| **User** | User name (`user.name`). | +| **CPU** | The percentage of CPU time spent by the process since the last event (`system.process.cpu.total.pct`). | +| **Time** | The time the process started (`system.process.cpu.start_time`). | +| **Memory** | The percentage of memory (`system.process.memory.rss.pct`) the process occupied in main memory (RAM). | +| **State** | The current state of the process and the total number of processes (`system.process.state`). Expected values are: `running`, `sleeping`, `dead`, `stopped`, `idle`, `zombie`, and `unknown`. | + +</DocAccordion> + +<DocAccordion buttonContent="Logs"> + +![Host logs](../images/logs-overlay.png) + +The **Logs** tab displays logs relating to the host that you have selected. By default, the logs tab displays the following columns. + +| | | +|---|---| +| **Timestamp** | The timestamp of the log entry from the `timestamp` field. | +| **Message** | The message extracted from the document. The content of this field depends on the type of log message. If no special log message type is detected, the [Elastic Common Schema (ECS)](((ecs-ref))/ecs-base.html) base field, `message`, is used. | + +To view the logs in the ((logs-app)) for a detailed analysis, click **Open in Logs**. + +</DocAccordion> + +<DocAccordion buttonContent="Anomalies"> + +![Anomalies](../images/anomalies-overlay.png) + +The **Anomalies** table displays a list of each single metric ((anomaly-detect)) job for the specific host. By default, anomaly +jobs are sorted by time, showing the most recent jobs first. + +Along with the name of each anomaly job, detected anomalies with a severity score equal to 50 or higher are listed. These +scores represent a severity of "warning" or higher in the selected time period. The **summary** value represents the increase between +the actual value and the expected ("typical") value of the host metric in the anomaly record result. + +To drill down and analyze the metric anomaly, select **Actions** → **Open in Anomaly Explorer**. +You can also select **Actions** → **Show in Inventory** to view the host Inventory page, filtered by the specific metric. + +</DocAccordion> + +{/* TODO: Find out if OSQuery tab will be included in serverless. It does not currently appear in serverless builds */} + diff --git a/docs/en/serverless/transclusion/kibana/apm/service-overview/dependencies.mdx b/docs/en/serverless/transclusion/kibana/apm/service-overview/dependencies.mdx new file mode 100644 index 0000000000..f841ed1a6c --- /dev/null +++ b/docs/en/serverless/transclusion/kibana/apm/service-overview/dependencies.mdx @@ -0,0 +1,9 @@ + + +The **Dependencies** table displays a list of downstream services or external connections relevant +to the service at the selected time range. The table displays latency, throughput, failed transaction rate, and the impact of +each dependency. By default, dependencies are sorted by _Impact_ to show the most used and the slowest dependency. +If there is a particular dependency you are interested in, click **<DocLink id="serverlessObservabilityApmDependencies">View dependencies</DocLink>** to learn more about it. + +{/* TODO: FIX THIS IMAGE +![Dependencies view in the Applications UI](../../../../images/dependencies/spans-dependencies.png) */} diff --git a/docs/en/serverless/transclusion/kibana/apm/service-overview/ftr.mdx b/docs/en/serverless/transclusion/kibana/apm/service-overview/ftr.mdx new file mode 100644 index 0000000000..e137f47f3f --- /dev/null +++ b/docs/en/serverless/transclusion/kibana/apm/service-overview/ftr.mdx @@ -0,0 +1,16 @@ + + +The failed transaction rate represents the percentage of failed transactions from the perspective of the selected service. +It's useful for visualizing unexpected increases, decreases, or irregular patterns in a service's transactions. + +<DocCallOut title="Tip"> + +HTTP **transactions** from the HTTP server perspective do not consider a `4xx` status code (client error) as a failure +because the failure was caused by the caller, not the HTTP server. Thus, `event.outcome=success` and there will be no increase in failed transaction rate. + +HTTP **spans** from the client perspective however, are considered failures if the HTTP status code is ≥ 400. +These spans will set `event.outcome=failure` and increase the failed transaction rate. + +If there is no HTTP status, both transactions and spans are considered successful unless an error is reported. + +</DocCallOut> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/kibana/apm/service-overview/throughput-transactions.mdx b/docs/en/serverless/transclusion/kibana/apm/service-overview/throughput-transactions.mdx new file mode 100644 index 0000000000..07d79cf2dc --- /dev/null +++ b/docs/en/serverless/transclusion/kibana/apm/service-overview/throughput-transactions.mdx @@ -0,0 +1,14 @@ + + +The **Throughput** chart visualizes the average number of transactions per minute for the selected service. + +The **Transactions** table displays a list of _transaction groups_ for the +selected service and includes the latency, traffic, error rate, and the impact for each transaction. +Transactions that share the same name are grouped, and only one entry is displayed for each group. + +By default, transaction groups are sorted by _Impact_ to show the most used and slowest endpoints in your +service. If there is a particular endpoint you are interested in, click **View transactions** to view a +list of similar transactions on the <DocLink id="serverlessObservabilityApmTransactions">transactions overview</DocLink> page. + +{/* TODO: Figure out this image +![Traffic and transactions](../../../../images/services/traffic-transactions.png) */} \ No newline at end of file diff --git a/docs/en/serverless/transclusion/kibana/logs/log-overview.mdx b/docs/en/serverless/transclusion/kibana/logs/log-overview.mdx new file mode 100644 index 0000000000..17edc1fd1f --- /dev/null +++ b/docs/en/serverless/transclusion/kibana/logs/log-overview.mdx @@ -0,0 +1,8 @@ + + +Logs provide detailed information about specific events, and are crucial to successfully debugging slow or erroneous transactions. + +If you've correlated your application's logs and traces, you never have to search for relevant data; it's already available to you. Viewing log and trace data together allows you to quickly diagnose and solve problems. + +To learn how to correlate your logs with your instrumented services, +refer to <DocLink id="serverlessObservabilityCorrelateApplicationLogs" />. \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/application-logs/apm-agent-log-sending.mdx b/docs/en/serverless/transclusion/observability/application-logs/apm-agent-log-sending.mdx new file mode 100644 index 0000000000..1545c47fbf --- /dev/null +++ b/docs/en/serverless/transclusion/observability/application-logs/apm-agent-log-sending.mdx @@ -0,0 +1,25 @@ + + +Elastic APM agents can automatically capture and send logs directly to the managed intake service — enabling you to +easily ingest log events without needing a separate log shipper like ((filebeat)) or ((agent)). + +**Supported APM agents/languages** + +* Java + +**Requirements** + +The Elastic APM agent for Java. + +**Pros** + +* Simple to set up as it only relies on the APM agent. +* No modification of the application required. +* No need to deploy ((filebeat)). +* No need to store log files in the file system. + +**Cons** + +* Experimental feature. +* Limited APM agent support. +* Not resilient to outages. Log messages can be dropped when buffered in the agent or in the managed intake service. diff --git a/docs/en/serverless/transclusion/observability/application-logs/correlate-logs.mdx b/docs/en/serverless/transclusion/observability/application-logs/correlate-logs.mdx new file mode 100644 index 0000000000..46eac9ed79 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/application-logs/correlate-logs.mdx @@ -0,0 +1,15 @@ + +Correlate your application logs with trace events to: + +* view the context of a log and the parameters provided by a user +* view all logs belonging to a particular trace +* easily move between logs and traces when debugging application issues + +Learn more about log correlation in the agent-specific ingestion guides: + +* [Go](((apm-go-ref))/logs.html) +* [Java](((apm-java-ref))/logs.html#log-correlation-ids) +* [.NET](((apm-dotnet-ref))/log-correlation.html) +* [Node.js](((apm-node-ref))/log-correlation.html) +* [Python](((apm-py-ref))/logs.html#log-correlation-ids) +* [Ruby](((apm-ruby-ref))/log-correlation.html) diff --git a/docs/en/serverless/transclusion/observability/application-logs/ecs-logging-logs.mdx b/docs/en/serverless/transclusion/observability/application-logs/ecs-logging-logs.mdx new file mode 100644 index 0000000000..7c630454ed --- /dev/null +++ b/docs/en/serverless/transclusion/observability/application-logs/ecs-logging-logs.mdx @@ -0,0 +1,24 @@ + + +Elastic Common Schema (ECS) loggers format your logs into ECS-compatible JSON, +removing the need to manually parse logs. + +**Requirements** + +* (Optional) Elastic APM agent for your programming language (for log correlation) +* The Elastic ECS logger for your language or framework +* ((filebeat)) configured to monitor and capture application logs + +**Pros** + +* Popular logging frameworks supported +* Simplicity: no manual parsing with ((filebeat)), and a configuration can be reused across applications +* Decently human-readable JSON structure +* APM log correlation +* Resilient in case of outages + +**Cons** + +* Not all frameworks are supported +* Requires modification of the application and its log configuration + diff --git a/docs/en/serverless/transclusion/observability/application-logs/log-reformatting.mdx b/docs/en/serverless/transclusion/observability/application-logs/log-reformatting.mdx new file mode 100644 index 0000000000..5061a7431c --- /dev/null +++ b/docs/en/serverless/transclusion/observability/application-logs/log-reformatting.mdx @@ -0,0 +1,29 @@ + + +Elastic APM agents can automatically reformat application logs to Elastic Common Schema (ECS) format +without needing to add an ECS logger dependency or modify the application. + +**Requirements** + +* The Elastic APM agent for your programming language +* ((filebeat)) configured to monitor and capture application logs + +**Pros** + +All the benefits of using ECS logging, without having to modify the application or its configuration: + +* Simplicity: no manual parsing with ((filebeat)), and a configuration can be reused across applications +* Decently human-readable JSON structure +* APM log correlation + +**Cons** + +* Requires an Elastic APM agent +* Not all APM agents support this feature + +**Supported APM agents/languages** + +* Ruby +* Python +* Java + diff --git a/docs/en/serverless/transclusion/observability/application-logs/plaintext-logs.mdx b/docs/en/serverless/transclusion/observability/application-logs/plaintext-logs.mdx new file mode 100644 index 0000000000..d0aad15b40 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/application-logs/plaintext-logs.mdx @@ -0,0 +1,22 @@ + + +Use ((filebeat)) to parse and ingest raw, plain-text application logs. + +**Requirements** + +* (Optional) Elastic APM agent for your programming language (for log correlation) +* Raw, plain-text application logs stored on the file system +* ((filebeat)) configured to monitor and capture application logs + +**Pros** + +* All programming languages/frameworks are supported +* Existing application logs can be ingested +* Does not require modification of the application or its configuration, unless log correlation is required + +**Cons** + +* Must parse application logs to be useful—meaning writing and maintaining Grok patterns and spending CPU cycles on parsing +* Parsing is tied to the application log format, meaning it can differ per application and needs to be maintained over time +* Log correlation requires modifying the application log format and inject IDs in log messages + diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/deb.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/deb.mdx new file mode 100644 index 0000000000..252be7ac06 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/deb.mdx @@ -0,0 +1,4 @@ +```sh +curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-((version))-amd64.deb +sudo dpkg -i filebeat-((version))-amd64.deb +``` \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/linux.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/linux.mdx new file mode 100644 index 0000000000..f3ce2b82c3 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/linux.mdx @@ -0,0 +1,4 @@ +```sh +curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-((version))-linux-x86_64.tar.gz +tar xzvf filebeat-((version))-linux-x86_64.tar.gz +``` \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/macos.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/macos.mdx new file mode 100644 index 0000000000..1ebda0ce8c --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/macos.mdx @@ -0,0 +1,4 @@ +```sh +curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-((version))-darwin-x86_64.tar.gz +tar xzvf filebeat-((version))-darwin-x86_64.tar.gz +``` \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/rpm.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/rpm.mdx new file mode 100644 index 0000000000..e0adfff0cc --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/rpm.mdx @@ -0,0 +1,4 @@ +```sh +curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-((version))-x86_64.rpm +sudo rpm -vi filebeat-((version))-x86_64.rpm +``` \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/windows.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/windows.mdx new file mode 100644 index 0000000000..9a620b77ce --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/content/windows.mdx @@ -0,0 +1,21 @@ +1. Download the ((filebeat)) Windows zip file: https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-((version))-windows-x86_64.zip + +1. Extract the contents of the zip file into `C:\Program Files`. + +1. Rename the `filebeat-((version))-windows-x86_64` directory to `((filebeat))`. + +1. Open a PowerShell prompt as an Administrator (right-click the PowerShell icon +and select **Run As Administrator**). + +1. From the PowerShell prompt, run the following commands to install +((filebeat)) as a Windows service: + + ```powershell + PS > cd 'C:\Program Files\((filebeat))' + PS C:\Program Files\((filebeat))> .\install-service-filebeat.ps1 + ``` + +If script execution is disabled on your system, you need to set the +execution policy for the current session to allow the script to run. For +example: +`PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1`. diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/widget.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/widget.mdx new file mode 100644 index 0000000000..4e2364769c --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-install/widget.mdx @@ -0,0 +1,23 @@ +import Deb from './content/deb.mdx' +import Rpm from './content/rpm.mdx' +import Mac from './content/macos.mdx' +import Linux from './content/linux.mdx' +import Windows from './content/windows.mdx' + +<DocTabs hasBorder> + <DocTab name="macOS"> + <Mac /> + </DocTab> + <DocTab name="Linux"> + <Linux /> + </DocTab> + <DocTab name="Windows"> + <Windows /> + </DocTab> + <DocTab name="DEB"> + <Deb /> + </DocTab> + <DocTab name="RPM"> + <Rpm /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-logs/content/docker.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-logs/content/docker.mdx new file mode 100644 index 0000000000..bcdb7ad209 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-logs/content/docker.mdx @@ -0,0 +1,24 @@ + + +1. Make sure your application logs to stdout/stderr. + +1. Follow the [Run ((filebeat)) on Docker](((filebeat-ref))/running-on-docker.html) guide. + +1. Enable [hints-based autodiscover](((filebeat-ref))/configuration-autodiscover-hints.html). + +<DocIf condition={ props.ecs_logs === true }> +4. Add these labels to your containers that log using ECS-compatible JSON. This will make sure the logs are parsed appropriately. In `docker-compose.yml`: + +```yaml +labels: + co.elastic.logs/json.overwrite_keys: true [^1] + co.elastic.logs/json.add_error_key: true [^2] + co.elastic.logs/json.expand_keys: true [^3] +``` +[^1]: Values from the decoded JSON object overwrite the fields that ((filebeat)) normally adds (type, source, offset, etc.) in case of conflicts. +[^2]: ((filebeat)) adds an "error.message" and "error.type: json" key in case of JSON unmarshalling errors. +[^3]: ((filebeat)) will recursively de-dot keys in the decoded JSON, and expand them into a hierarchical object structure. +</DocIf> + +<DocIf condition={ props.plaintext === true }> +</DocIf> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-logs/content/kubernetes.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-logs/content/kubernetes.mdx new file mode 100644 index 0000000000..529bddf42c --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-logs/content/kubernetes.mdx @@ -0,0 +1,26 @@ + + +1. Make sure your application logs to stdout/stderr. + +1. Follow the [Run ((filebeat)) on Kubernetes](((filebeat-ref))/running-on-kubernetes.html) guide. + +1. Enable [hints-based autodiscover](((filebeat-ref))/configuration-autodiscover-hints.html) (uncomment the corresponding section in `filebeat-kubernetes.yaml`). + +<DocIf condition={ props.ecs_logs === true }> + +4. Add these annotations to your pods that log using ECS-compatible JSON. This will make sure the logs are parsed appropriately. + + ```yaml + annotations: + co.elastic.logs/json.overwrite_keys: true [^1] + co.elastic.logs/json.add_error_key: true [^2] + co.elastic.logs/json.expand_keys: true [^3] + ``` + [^1]: Values from the decoded JSON object overwrite the fields that ((filebeat)) normally adds (type, source, offset, etc.) in case of conflicts. + [^2]: ((filebeat)) adds an "error.message" and "error.type: json" key in case of JSON unmarshalling errors. + [^3]: ((filebeat)) will recursively de-dot keys in the decoded JSON, and expand them into a hierarchical object structure. + +</DocIf> + +<DocIf condition={ props.plaintext === true }> +</DocIf> diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-logs/content/logs.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-logs/content/logs.mdx new file mode 100644 index 0000000000..1216e00539 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-logs/content/logs.mdx @@ -0,0 +1,48 @@ +<DocIf condition={ props.intro_text === true }> +1. Follow the [Filebeat quick start](((filebeat-ref))/filebeat-installation-configuration.html) to learn how to + install ((filebeat)) and connect to Elastic. +</DocIf> +<DocIf condition={ props.ecs_logs === true }> +1. Add the following configuration to your `filebeat.yaml` file to start collecting log data. + +```yaml +filebeat.inputs: +- type: filestream [^1] + paths: /path/to/logs.json + parsers: + - ndjson: + overwrite_keys: true [^2] + add_error_key: true [^3] + expand_keys: true [^4] + fields: + service.name: your_service_name [^5] + service.version: your_service_version [^5] + service.environment: your_service_environment [^5] + +processors: [^6] + - add_host_metadata: ~ + - add_cloud_metadata: ~ + - add_docker_metadata: ~ + - add_kubernetes_metadata: ~ +``` +[^1]: Use the filestream input to read lines from active log files. +[^2]: Values from the decoded JSON object overwrite the fields that ((filebeat)) normally adds (type, source, offset, etc.) in case of conflicts. +[^3]: ((filebeat)) adds an "error.message" and "error.type: json" key in case of JSON unmarshalling errors. +[^4]: ((filebeat)) will recursively de-dot keys in the decoded JSON, and expand them into a hierarchical object structure. +[^5]: The `service.name` (required), `service.version` (optional) and `service.environment` (optional) of the service you're collecting logs from, used for <DocLink id="serverlessObservabilityCorrelateApplicationLogs" section="log-correlation">Log correlation</DocLink>. +[^6]: Processors enhance your data. See [processors](((filebeat-ref))/filtering-and-enhancing-data.html) to learn more. +</DocIf> + +<DocIf condition={ props.plaintext === true }> +2. Configure `filebeat.yaml` file to start collecting log data. + +3. Add the following configuration to your `filebeat.yaml` file to start collecting log data. + +```yaml +filebeat.inputs: +- type: filestream [^1] + paths: /path/to/logs.log [^2] +``` +[^1]: Reads lines from an active log file. +[^2]: A list of glob-based paths that will be crawled and fetched. +</DocIf> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-logs/widget.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-logs/widget.mdx new file mode 100644 index 0000000000..0ac6a99ace --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-logs/widget.mdx @@ -0,0 +1,25 @@ + +import ContentLogs from './content/logs.mdx' +import ContentKubernetes from './content/kubernetes.mdx' +import ContentDocker from './content/docker.mdx' + +<DocTabs hasBorder> + <DocTab name="Log file"> + <ContentLogs + plaintext={props.plaintext} + ecs_logs={props.ecs_logs} + /> + </DocTab> + <DocTab name="Kubernetes"> + <ContentKubernetes + plaintext={props.plaintext} + ecs_logs={props.ecs_logs} + /> + </DocTab> + <DocTab name="Docker"> + <ContentDocker + plaintext={props.plaintext} + ecs_logs={props.ecs_logs} + /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/deb.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/deb.mdx new file mode 100644 index 0000000000..c2697bf5bc --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/deb.mdx @@ -0,0 +1,3 @@ +```shell +filebeat setup --index-management +``` \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/linux.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/linux.mdx new file mode 100644 index 0000000000..23e3f86a0d --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/linux.mdx @@ -0,0 +1,3 @@ +```shell +./filebeat setup --index-management +``` \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/macos.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/macos.mdx new file mode 100644 index 0000000000..23e3f86a0d --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/macos.mdx @@ -0,0 +1,3 @@ +```shell +./filebeat setup --index-management +``` \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/rpm.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/rpm.mdx new file mode 100644 index 0000000000..b641d78823 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/rpm.mdx @@ -0,0 +1,3 @@ +```sh +filebeat setup --index-management +``` \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/windows.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/windows.mdx new file mode 100644 index 0000000000..9d773278a5 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/content/windows.mdx @@ -0,0 +1,3 @@ +```powershell +PS > .\filebeat.exe setup --index-management +``` \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/widget.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/widget.mdx new file mode 100644 index 0000000000..4e2364769c --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-setup/widget.mdx @@ -0,0 +1,23 @@ +import Deb from './content/deb.mdx' +import Rpm from './content/rpm.mdx' +import Mac from './content/macos.mdx' +import Linux from './content/linux.mdx' +import Windows from './content/windows.mdx' + +<DocTabs hasBorder> + <DocTab name="macOS"> + <Mac /> + </DocTab> + <DocTab name="Linux"> + <Linux /> + </DocTab> + <DocTab name="Windows"> + <Windows /> + </DocTab> + <DocTab name="DEB"> + <Deb /> + </DocTab> + <DocTab name="RPM"> + <Rpm /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/deb.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/deb.mdx new file mode 100644 index 0000000000..5ca29998ea --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/deb.mdx @@ -0,0 +1,9 @@ +```shell +sudo service filebeat start +``` + +<DocCallOut title="Note"> +If you use an init.d script to start ((filebeat)), you can't specify command line flags (refer to [Command reference](((filebeat-ref))/command-line-options.html)). To specify flags, start ((filebeat)) in the foreground. +</DocCallOut> + +Also, refer to [((filebeat)) and systemd](((filebeat-ref))/running-with-systemd.html). \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/linux.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/linux.mdx new file mode 100644 index 0000000000..fd3ea6e2f9 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/linux.mdx @@ -0,0 +1,8 @@ +```shell +sudo chown root filebeat.yml +sudo ./filebeat -e +``` + +<DocCallOut title="Note"> +You'll be running ((filebeat)) as root, so you need to change ownership of the configuration file and any configurations enabled in the `modules.d` directory, or run ((filebeat)) with `--strict.perms=false` specified. Refer to [Config file ownership and permissions](((beats-ref))/config-file-permissions.html). +</DocCallOut> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/macos.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/macos.mdx new file mode 100644 index 0000000000..fd3ea6e2f9 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/macos.mdx @@ -0,0 +1,8 @@ +```shell +sudo chown root filebeat.yml +sudo ./filebeat -e +``` + +<DocCallOut title="Note"> +You'll be running ((filebeat)) as root, so you need to change ownership of the configuration file and any configurations enabled in the `modules.d` directory, or run ((filebeat)) with `--strict.perms=false` specified. Refer to [Config file ownership and permissions](((beats-ref))/config-file-permissions.html). +</DocCallOut> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/rpm.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/rpm.mdx new file mode 100644 index 0000000000..5ca29998ea --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/rpm.mdx @@ -0,0 +1,9 @@ +```shell +sudo service filebeat start +``` + +<DocCallOut title="Note"> +If you use an init.d script to start ((filebeat)), you can't specify command line flags (refer to [Command reference](((filebeat-ref))/command-line-options.html)). To specify flags, start ((filebeat)) in the foreground. +</DocCallOut> + +Also, refer to [((filebeat)) and systemd](((filebeat-ref))/running-with-systemd.html). \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/windows.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/windows.mdx new file mode 100644 index 0000000000..b81ff66451 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/content/windows.mdx @@ -0,0 +1,5 @@ +```powershell +PS C:\Program Files\filebeat> Start-Service filebeat +``` + +By default, Windows log files are stored in `C:\ProgramData\filebeat\Logs`. \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/widget.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/widget.mdx new file mode 100644 index 0000000000..4e2364769c --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/filebeat-start/widget.mdx @@ -0,0 +1,23 @@ +import Deb from './content/deb.mdx' +import Rpm from './content/rpm.mdx' +import Mac from './content/macos.mdx' +import Linux from './content/linux.mdx' +import Windows from './content/windows.mdx' + +<DocTabs hasBorder> + <DocTab name="macOS"> + <Mac /> + </DocTab> + <DocTab name="Linux"> + <Linux /> + </DocTab> + <DocTab name="Windows"> + <Windows /> + </DocTab> + <DocTab name="DEB"> + <Deb /> + </DocTab> + <DocTab name="RPM"> + <Rpm /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/deb.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/deb.mdx new file mode 100644 index 0000000000..49020a1349 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/deb.mdx @@ -0,0 +1,6 @@ + + + +Main ((agent)) configuration file location: + +`/etc/elastic-agent/elastic-agent.yml` diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/linux.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/linux.mdx new file mode 100644 index 0000000000..1bae2d4fd6 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/linux.mdx @@ -0,0 +1,6 @@ + + + +Main ((agent)) configuration file location: + +`/opt/Elastic/Agent/elastic-agent.yml` diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/mac.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/mac.mdx new file mode 100644 index 0000000000..57fb0a7705 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/mac.mdx @@ -0,0 +1,7 @@ + + + +{/* lint disable */} +Main ((agent)) configuration file location: + +`/Library/Elastic/Agent/elastic-agent.yml` diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/rpm.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/rpm.mdx new file mode 100644 index 0000000000..49020a1349 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/rpm.mdx @@ -0,0 +1,6 @@ + + + +Main ((agent)) configuration file location: + +`/etc/elastic-agent/elastic-agent.yml` diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/win.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/win.mdx new file mode 100644 index 0000000000..a8cb44e7c2 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/content/win.mdx @@ -0,0 +1,6 @@ + + + +Main ((agent)) configuration file location: + +`C:\Program Files\Elastic\Agent\elastic-agent.yml` diff --git a/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/widget.mdx b/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/widget.mdx new file mode 100644 index 0000000000..070e9788b3 --- /dev/null +++ b/docs/en/serverless/transclusion/observability/tab-widgets/logs/agent-location/widget.mdx @@ -0,0 +1,24 @@ + +import Mac from './content/mac.mdx' +import Linux from './content/linux.mdx' +import Win from './content/win.mdx' +import Deb from './content/deb.mdx' +import Rpm from './content/rpm.mdx' + +<DocTabs hasBorder> + <DocTab name="macOS"> + <Mac /> + </DocTab> + <DocTab name="Linux"> + <Linux /> + </DocTab> + <DocTab name="Windows"> + <Win /> + </DocTab> + <DocTab name="DEB"> + <Deb /> + </DocTab> + <DocTab name="RPM"> + <Rpm /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/support.mdx b/docs/en/serverless/transclusion/support.mdx new file mode 100644 index 0000000000..b4c88139c5 --- /dev/null +++ b/docs/en/serverless/transclusion/support.mdx @@ -0,0 +1,3 @@ +We offer a support experience unlike any other. +Our team of professionals 'speak human and code' and love making your day. +[Learn more about subscriptions](https://www.elastic.co/subscriptions). diff --git a/docs/en/serverless/transclusion/synthetics/configuration/monitor-config-options.mdx b/docs/en/serverless/transclusion/synthetics/configuration/monitor-config-options.mdx new file mode 100644 index 0000000000..b6ba4d6b61 --- /dev/null +++ b/docs/en/serverless/transclusion/synthetics/configuration/monitor-config-options.mdx @@ -0,0 +1,79 @@ + + +<DocDefList> + <DocDefTerm>`id` (`string`)</DocDefTerm> + <DocDefDescription> + A unique identifier for this monitor. + </DocDefDescription> + + <DocDefTerm>`name` (`string`)</DocDefTerm> + <DocDefDescription> + A human readable name for the monitor. + </DocDefDescription> + + <DocDefTerm>`tags` (`Array<string>`)</DocDefTerm> + <DocDefDescription> + A list of tags that will be sent with the monitor event. Tags are displayed in the Synthetics UI and allow you to search monitors by tag. + </DocDefDescription> + + <DocDefTerm>`schedule` (`number`)</DocDefTerm> + <DocDefDescription> + The interval (in minutes) at which the monitor should run. + </DocDefDescription> + + <DocDefTerm>`enabled` (`boolean`)</DocDefTerm> + <DocDefDescription> + Enable or disable the monitor from running without deleting and recreating it. + </DocDefDescription> + + <DocDefTerm>`locations` ([`Array<SyntheticsLocationsType>`](https://github.com/elastic/synthetics/blob/((synthetics_version))/src/locations/public-locations.ts#L28-L37))</DocDefTerm> + <DocDefDescription> + Where to deploy the monitor. Monitors can be deployed in multiple locations so that you can detect differences in availability and response times across those locations. + + To list available locations you can: + + * Run the <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-locations">`elastic-synthetics locations` command</DocLink>. + * Go to **Synthetics** → **Management** and click **Create monitor**. + Locations will be listed in _Locations_. + </DocDefDescription> + + <DocDefTerm>`privateLocations` (`Array<string>`)</DocDefTerm> + <DocDefDescription> + The <DocLink id="serverlessObservabilitySyntheticsPrivateLocation">((private-location))s</DocLink> to which the monitors will be deployed. These ((private-location))s refer to locations hosted and managed by you, whereas + `locations` are hosted by Elastic. You can specify a ((private-location)) using the location's name. + + To list available ((private-location))s you can: + + * Run the <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-locations">`elastic-synthetics locations` command</DocLink> + with the URL for the Observability project from which to fetch available locations. + * Go to **Synthetics** → **Management** and click **Create monitor**. + ((private-location))s will be listed in _Locations_. + </DocDefDescription> + + <DocDefTerm>`throttling` (`boolean` | [`ThrottlingOptions`](https://github.com/elastic/synthetics/blob/((synthetics_version))/src/common_types.ts#L194-L198))</DocDefTerm> + <DocDefDescription> + Control the monitor's download speeds, upload speeds, and latency to simulate your application's behavior on slower or laggier networks. Set to `false` to disable throttling altogether. + </DocDefDescription> + + <DocDefTerm>`screenshot` ([`ScreenshotOptions`](https://github.com/elastic/synthetics/blob/((synthetics_version))/src/common_types.ts#L192))</DocDefTerm> + <DocDefDescription> + Control whether or not to capture screenshots. Options include `'on'`, `'off'`, or `'only-on-failure'`. + </DocDefDescription> + + <DocDefTerm>`alert.status.enabled` (`boolean`)</DocDefTerm> + <DocDefDescription> + Enable or disable monitor status alerts. Read more about alerts in <DocLink id="serverlessObservabilitySyntheticsSettings" section="alerting">Alerting</DocLink>. + </DocDefDescription> + + <DocDefTerm>`retestOnFailure` (`boolean`)</DocDefTerm> + <DocDefDescription> + Enable or disable retesting when a monitor fails. Default is `true`. + + By default, monitors are automatically retested if the monitor goes from "up" to "down". + If the result of the retest is also "down", an error will be created, and if configured, an alert sent. + Then the monitor will resume running according to the defined schedule. + + Using `retestOnFailure` can reduce noise related to transient problems. + </DocDefDescription> + +</DocDefList> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/synthetics/global-managed-paid-for.mdx b/docs/en/serverless/transclusion/synthetics/global-managed-paid-for.mdx new file mode 100644 index 0000000000..e3e131276b --- /dev/null +++ b/docs/en/serverless/transclusion/synthetics/global-managed-paid-for.mdx @@ -0,0 +1,2 @@ +Executing synthetic tests on Elastic's global managed testing infrastructure incurs an additional charge. Tests are charged under one of two new billing dimensions depending on the monitor type. For _browser monitor_ usage, there is a fee per test run. For _lightweight monitor_ usage, there is a fee per region in which you run any monitors regardless of the number of test runs. +{/* For more details, refer to [full details and current pricing](https://www.elastic.co/pricing). */} diff --git a/docs/en/serverless/transclusion/synthetics/reference/lightweight-config/common.mdx b/docs/en/serverless/transclusion/synthetics/reference/lightweight-config/common.mdx new file mode 100644 index 0000000000..c3d2c0c4ec --- /dev/null +++ b/docs/en/serverless/transclusion/synthetics/reference/lightweight-config/common.mdx @@ -0,0 +1,325 @@ + +<DocTable columns={[ + { + "title": "Option (type)", + "width": "25%" + }, + { + "title": "Description ", + "width": "75%" + } +]}> + <DocRow> + <DocCell> + <span id="monitor-type">**`type`**</span><br />(`"http"`, `"icmp"`, or `"tcp"`) + </DocCell> + <DocCell> + **Required**. The type of monitor to run. One of: + + * `http`: Connects via HTTP and optionally verifies that the host returns the expected response. + * `icmp`: Uses an ICMP (v4 and v6) Echo Request to ping the configured hosts. Requires special permissions or root access. + * `tcp`: Connects via TCP and optionally verifies the endpoint by sending and/or receiving a custom payload. + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-id">**`id`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>) + </DocCell> + <DocCell> + **Required**. A unique identifier for this configuration. This should not change with edits to the monitor configuration regardless of changes to any config fields. + + **Examples**: + + ```yaml + id: uploader-service + ``` + + ```yaml + id: http://example.net + ``` + + <DocCallOut title="Note"> + When querying against indexed monitor data this is the field you will be aggregating with. It appears in the exported fields as `monitor.id`. + + If you do not set an `id` explicitly, the monitor's config will be hashed and a generated value will be used. This value will change with any options change to this monitor making aggregations over time between changes impossible. For this reason, it's recommended that you set this manually. + </DocCallOut> + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-name">**`name`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>) + </DocCell> + <DocCell> + Human readable name for this monitor. + + **Examples**: + + ```yaml + name: Uploader service + ``` + + ```yaml + name: Example website + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-service_name">**`service.name`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>) + </DocCell> + <DocCell> + APM service name for this monitor. Corresponds to the `service.name` ECS field. Set this when monitoring an app that is also using APM to enable integrations between Synthetics and APM data in your Observability project. + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-enabled">**`enabled`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="boolean">boolean</DocLink>) + </DocCell> + <DocCell> + Whether the monitor is enabled. + + **Default**: `true` + + **Example**: + + ```yaml + enabled: false + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-schedule">**`schedule`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="duration">duration</DocLink>) + </DocCell> + <DocCell> + **Required**. The task schedule. + + <DocCallOut title="Note"> + Schedules with less than 1 minute resolution will be saved to the nearest minute. For example, `@every 5s` will be changed to `@every 60s` when the monitor is pushed using the CLI. + </DocCallOut> + + **Example**: + Run the task every 5 minutes from the time the monitor was started. + + ```yaml + schedule: @every 5m + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-timeout">**`timeout`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="duration">duration</DocLink>) + </DocCell> + <DocCell> + The total running time for each ping test. This is the total time allowed for testing the connection and exchanging data. + + **Default**: `16s` + + **Example**: + + ```yaml + timeout: 2m + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-tags">**`tags`**</span><br /> + (list of <DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>s) + </DocCell> + <DocCell> + A list of tags that will be sent with the monitor event. + + **Examples**: + + ```yaml + tags: + - tag one + - tag two + ``` + + ```yaml + tags: ["tag one", "tag two"] + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-mode">**`mode`**</span><br /> + (`"any"` \| `"all"`) + </DocCell> + <DocCell> + One of two modes in which to run the monitor: + + * `any`: The monitor pings only one IP address for a hostname. + * `all`: The monitor pings all resolvable IPs for a hostname. + + **Default**: `any` + + **Example**: + If you're using a DNS-load balancer and want to ping every IP address for the specified hostname, you should use `all`. + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-ipv4">**`ipv4`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="boolean">boolean</DocLink>) + </DocCell> + <DocCell> + Whether to ping using the ipv4 protocol if hostnames are configured. + + **Default**: `true` + + **Example**: + + ```yaml + ipv4: false + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-ipv6">**`ipv6`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="boolean">boolean</DocLink>) + </DocCell> + <DocCell> + Whether to ping using the ipv6 protocol if hostnames are configured. + + **Default**: `true` + + **Example**: + + ```yaml + ipv6: false + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-alert">**`alert`**</span> + </DocCell> + <DocCell> + Enable or disable alerts on this monitor. Read more about alerts in <DocLink id="serverlessObservabilitySyntheticsSettings" section="alerting">Alerting</DocLink>. + + <DocDefList> + <DocDefTerm>**`status.enabled`** (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="boolean">boolean</DocLink>)</DocDefTerm> + <DocDefDescription> + Enable monitor status alerts on this monitor. + + **Default**: `true` + + **Example**: + + ```yaml + alert.status.enabled: true + ``` + </DocDefDescription> + <DocDefTerm>**`tls.enabled`** (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="boolean">boolean</DocLink>)</DocDefTerm> + <DocDefDescription> + Enable TLS certificate alerts on this monitor. + + **Default**: `true` + + **Example**: + + ```yaml + alert.tls.enabled: true + ``` + </DocDefDescription> + </DocDefList> + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-retest_on_failure">**`retest_on_failure`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="boolean">boolean</DocLink>) + </DocCell> + <DocCell> + Enable or disable retesting when a monitor fails. Default is `true`. + + By default, monitors are automatically retested if the monitor goes from "up" to "down". If the result of the retest is also "down", an error will be created, and if configured, an alert sent. Then the monitor will resume running according to the defined schedule. Using `retestOnFailure` can reduce noise related to transient problems. + + **Example**: + + ```yaml + retest_on_failure: false + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-locations">**`locations`**</span><br /> + (list of [`SyntheticsLocationsType`](https://github.com/elastic/synthetics/blob/((synthetics_version))/src/locations/public-locations.ts#L28-L37)) + </DocCell> + <DocCell> + Where to deploy the monitor. You can deploy monitors in multiple locations to detect differences in availability and response times across those locations. + + To list available locations you can: + + * Run the <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-locations">`elastic-synthetics locations` command</DocLink>. + * Go to **Synthetics** → **Management** and click **Create monitor**. Locations will be listed in _Locations_. + + **Examples**: + + ```yaml + locations: ["japan", "india"] + ``` + + ```yaml + locations: + - japan + - india + ``` + + <DocCallOut title="Note"> + This can also be set using + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="monitor">`monitor.locations` in the Synthetics project configuration file</DocLink> + or via the CLI using the <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-push">`--location` flag on `push`</DocLink>. + + The value defined via the CLI takes precedence over the value defined in the lightweight monitor configuration, + and the value defined in the lightweight monitor configuration takes precedence over the value defined in Synthetics project configuration file. + </DocCallOut> + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-private_locations">**`private_locations`**</span><br /> + (list of <DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>s) + </DocCell> + <DocCell> + The <DocLink id="serverlessObservabilitySyntheticsPrivateLocation">((private-location))s</DocLink> to which the monitors will be deployed. These ((private-location))s refer to locations hosted and managed by you, whereas `locations` are hosted by Elastic. You can specify a ((private-location)) using the location's name. + + To list available ((private-location))s you can: + + * Run the <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-locations">`elastic-synthetics locations` command</DocLink> and specify the URL of the Observability project. This will fetch all available private locations associated with the deployment. + * Go to **Synthetics** → **Management** and click **Create monitor**. ((private-location))s will be listed in _Locations_. + + **Examples**: + + ```yaml + private_locations: ["Private Location 1", "Private Location 2"] + ``` + + ```yaml + private_locations: + - Private Location 1 + - Private Location 2 + ``` + + <DocCallOut title="Note"> + This can also be set using + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="monitor">`monitor.privateLocations` in the Synthetics project configuration file</DocLink> + or via the CLI using the <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-push">`--privateLocations` flag on `push`</DocLink>. + + The value defined via the CLI takes precedence over the value defined in the lightweight monitor configuration, + and the value defined in the lightweight monitor configuration takes precedence over the value defined in Synthetics project configuration file. + </DocCallOut> + </DocCell> + </DocRow> +</DocTable> diff --git a/docs/en/serverless/transclusion/synthetics/reference/lightweight-config/http.mdx b/docs/en/serverless/transclusion/synthetics/reference/lightweight-config/http.mdx new file mode 100644 index 0000000000..6db8ba09bf --- /dev/null +++ b/docs/en/serverless/transclusion/synthetics/reference/lightweight-config/http.mdx @@ -0,0 +1,301 @@ + +<DocTable columns={[ + { + "title": "Option (type)", + "width": "25%" + }, + { + "title": "Description ", + "width": "75%" + } +]}> + <DocRow> + <DocCell> + <span id="monitor-http-hosts">**`hosts`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>) + + </DocCell> + <DocCell> + **Required**. The URL to ping. + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-http-max_redirects">**`max_redirects`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="number">number</DocLink>) + + </DocCell> + <DocCell> + The total number of redirections Synthetics will follow. + + By default, Synthetics will not follow redirects, but will report the status of the redirect. If set to a number greater than `0`, Synthetics will follow that number of redirects. + + When this option is set to a value greater than `0`, the `monitor.ip` field will no longer be reported, as multiple DNS requests across multiple IPs may return multiple IPs. Fine-grained network timing data will also not be recorded, as with redirects that data will span multiple requests. Specifically the fields `http.rtt.content.us`, `http.rtt.response_header.us`, `http.rtt.total.us`, `http.rtt.validate.us`, `http.rtt.write_request.us` and `dns.rtt.us` will be omitted. + + **Default**: `0` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-http-proxy_headers">**`proxy_headers`**</span> + + </DocCell> + <DocCell> + Additional headers to send to proxies during `CONNECT` requests. + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-http-proxy_url">**`proxy_url`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>) + + </DocCell> + <DocCell> + The HTTP proxy URL. This setting is optional. + + **Example**: + + + ```yaml + http://proxy.mydomain.com:3128 + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-http-username">**`username`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>) + + </DocCell> + <DocCell> + The username for authenticating with the server. The credentials are passed with the request. This setting is optional. + + You need to specify credentials when your `check.response` settings require it. For example, you can check for a 403 response (`check.response.status: [403]`) without setting credentials. + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-http-password">**`password`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>) + + </DocCell> + <DocCell> + The password for authenticating with the server. This setting is optional. + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-http-ssl">**`ssl`**</span><br /> + ([SSL](((heartbeat-ref))/configuration-ssl.html)) + + </DocCell> + <DocCell> + The TLS/SSL connection settings for use with the HTTPS endpoint. If you don't specify settings, the system defaults are used. + + **Example**: + + ```yaml + - type: http + id: my-http-service + name: My HTTP Service + hosts: "https://myhost:443" + schedule: '@every 5s' + ssl: + certificate_authorities: ['/etc/ca.crt'] + supported_protocols: ["TLSv1.0", "TLSv1.1", "TLSv1.2"] + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-http-headers">**`headers`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="boolean">boolean</DocLink>) + + </DocCell> + <DocCell> + Controls the indexing of the HTTP response headers `http.response.body.headers` field. Set `response.include_headers` to `false` to disable. + + **Default**: `true` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-http-response">**`response`**</span><br /> + + </DocCell> + <DocCell> + Controls the indexing of the HTTP response body contents to the `http.response.body.contents` field. + + <DocDefList> + <DocDefTerm> + **`include_body`** (`"on_error"`, `"never"`, or `"always"`) + </DocDefTerm> + <DocDefDescription> + Set `response.include_body` to one of the following: + + * `on_error`: Include the body if an error is encountered during the check. This is the default. + * `never`: Never include the body. + * `always`: Always include the body with checks. + </DocDefDescription> + + <DocDefTerm> + **`include_body_max_bytes`** (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="number">number</DocLink>) + </DocDefTerm> + <DocDefDescription> + Set `response.include_body_max_bytes` to control the maximum size of the stored body contents. + + **Default**: `1024` + </DocDefDescription> + </DocDefList> + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-http-check">**`check`**</span><br /> + </DocCell> + <DocCell> + <DocDefList> + <DocDefTerm>**`request`**</DocDefTerm> + <DocDefDescription> + An optional `request` to send to the remote host. Under `check.request`, specify these options: + <DocDefList> + <DocDefTerm>**`method`** (`"HEAD"`, `"GET"`, `"POST"`, or `"OPTIONS"`)</DocDefTerm> + <DocDefDescription> + The HTTP method to use. + </DocDefDescription> + + <DocDefTerm>**`headers`** ([HTTP headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers))</DocDefTerm> + <DocDefDescription> + A dictionary of additional HTTP headers to send. By default Synthetics will set the 'User-Agent' header to identify itself. + </DocDefDescription> + + <DocDefTerm>**`body`** (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>)</DocDefTerm> + <DocDefDescription> + Optional request body content. + </DocDefDescription> + </DocDefList> + + **Example**: This monitor POSTs an `x-www-form-urlencoded` string to the endpoint `/demo/add`. + + ```yaml + check.request: + method: POST + headers: + 'Content-Type': 'application/x-www-form-urlencoded' + # urlencode the body: + body: "name=first&email=someemail%40someemailprovider.com" + ``` + </DocDefDescription> + <DocDefTerm>**`response`**</DocDefTerm> + <DocDefDescription> + The expected `response`. + + Under `check.response`, specify these options: + + <DocDefList> + <DocDefTerm>**`status`** (list of <DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>s)</DocDefTerm> + <DocDefDescription> + A list of expected status codes. 4xx and 5xx codes are considered `down` by default. Other codes are considered `up`. + + + **Example**: + + ```yaml + check.response: + status: [200, 201] + ``` + </DocDefDescription> + + <DocDefTerm>**`headers`** ([HTTP headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers))</DocDefTerm> + <DocDefDescription> + The required response headers. + </DocDefDescription> + + <DocDefTerm>**`body.positive`** (list of <DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>s)</DocDefTerm> + <DocDefDescription> + A list of regular expressions to match the body output. Only a single expression needs to match. + + **Example**: + + This monitor examines the response body for the strings 'foo' or 'Foo': + + ```yaml + check.response: + status: [200, 201] + body: + positive: + - foo + - Foo + ``` + </DocDefDescription> + + <DocDefTerm>**`body.negative`** (list of <DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>s)</DocDefTerm> + <DocDefDescription> + A list of regular expressions to match the body output negatively. Return match failed if single expression matches. HTTP response bodies of up to 100MiB are supported. + + + This monitor examines match successfully if there is no 'bar' or 'Bar' at all, examines match failed if there is 'bar' or 'Bar' in the response body: + + **Example**: + + ```yaml + check.response: + status: [200, 201] + body: + negative: + - bar + - Bar + ``` + + + **Example**: + + This monitor examines match successfully only when 'foo' or 'Foo' in body AND no 'bar' or 'Bar' in body: + + ```yaml + check.response: + status: [200, 201] + body: + positive: + - foo + - Foo + negative: + - bar + - Bar + ``` + </DocDefDescription> + + <DocDefTerm>**`json`**</DocDefTerm> + <DocDefDescription> + A list of expressions executed against the body when parsed as JSON. + Body sizes must be less than or equal to 100 MiB. + + <DocDefList> + <DocDefTerm>**`description`**</DocDefTerm> + <DocDefDescription> + A description of the check. + </DocDefDescription> + <DocDefTerm>**`expression`**</DocDefTerm> + <DocDefDescription> + The following configuration shows how to check the response using + [gval](https://github.com/PaesslerAG/gval/blob/master/README.md) expressions + when the body contains JSON: + + **Example**: + + ```yaml + check.response: + status: [200] + json: + - description: check status + expression: 'foo.bar == "myValue"' + ``` + </DocDefDescription> + </DocDefList> + </DocDefDescription> + </DocDefList> + </DocDefDescription> + </DocDefList> + </DocCell> + </DocRow> +</DocTable> diff --git a/docs/en/serverless/transclusion/synthetics/reference/lightweight-config/icmp.mdx b/docs/en/serverless/transclusion/synthetics/reference/lightweight-config/icmp.mdx new file mode 100644 index 0000000000..6f44c76824 --- /dev/null +++ b/docs/en/serverless/transclusion/synthetics/reference/lightweight-config/icmp.mdx @@ -0,0 +1,44 @@ + +<DocTable columns={[ + { + "title": "Option (type)", + "width": "25%" + }, + { + "title": "Description ", + "width": "75%" + } +]}> + <DocRow> + <DocCell> + <span id="monitor-icmp-hosts">**`hosts`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>) + </DocCell> + <DocCell> + **Required**. The host to ping. + + **Example**: + + ```yaml + hosts: "myhost" + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-icmp-wait">**`wait`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="duration">duration</DocLink>) + </DocCell> + <DocCell> + The duration to wait before emitting another ICMP Echo Request if no response is received. + + **Default**: `1s` + + **Example**: + + ```yaml + wait: 1m + ``` + </DocCell> + </DocRow> +</DocTable> diff --git a/docs/en/serverless/transclusion/synthetics/reference/lightweight-config/tcp.mdx b/docs/en/serverless/transclusion/synthetics/reference/lightweight-config/tcp.mdx new file mode 100644 index 0000000000..894ff7f6f3 --- /dev/null +++ b/docs/en/serverless/transclusion/synthetics/reference/lightweight-config/tcp.mdx @@ -0,0 +1,109 @@ + +<DocTable columns={[ + { + "title": "Option (type)", + "width": "25%" + }, + { + "title": "Description ", + "width": "75%" + } +]}> + <DocRow> + <DocCell> + <span id="monitor-tcp-hosts">**`hosts`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="string">string</DocLink>) + </DocCell> + <DocCell> + **Required**. The host to ping. The value can be: + + * **A hostname and port, such as `localhost:12345`.** + Synthetics connects to the port on the specified host. If the monitor is [configured to use SSL](((heartbeat-ref))/configuration-ssl.html), Synthetics establishes an SSL/TLS-based connection. Otherwise, it establishes a TCP connection. + * **A full URL using the syntax `scheme://<host>:[port]`**, where: + * `scheme` is one of `tcp`, `plain`, `ssl` or `tls`. If `tcp` or `plain` is specified, Synthetics establishes a TCP connection even if the monitor is configured to use SSL. If `tls` or `ssl` is specified, Synthetics establishes an SSL connection. However, if the monitor is not configured to use SSL, the system defaults are used (currently not supported on Windows). + * `host` is the hostname. + * `port` is the port number. + + **Examples**: + + ```yaml + hosts: "localhost:8000" + ``` + + ```yaml + hosts: "tcp://localhost:8000" + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-tcp-check">**`check`**</span> + </DocCell> + <DocCell> + An optional payload string to send to the remote host and the expected answer. If no payload is specified, the endpoint is assumed to be available if the connection attempt was successful. If `send` is specified without `receive`, any response is accepted as OK. If `receive` is specified without `send`, no payload is sent, but the client expects to receive a payload in the form of a "hello message" or "banner" on connect. + + **Example**: + + ```yaml + check.send: 'Hello World' + check.receive: 'Hello World' + ``` + + ```yaml + check: + send: 'Hello World' + receive: 'Hello World' + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-tcp-proxy_url">**`proxy_url`**</span> + </DocCell> + <DocCell> + The URL of the SOCKS5 proxy to use when connecting to the server. The value must be a URL with a scheme of socks5://. + + If the SOCKS5 proxy server requires client authentication, then a username and password can be embedded in the URL. + + When using a proxy, hostnames are resolved on the proxy server instead of on the client. You can change this behavior by setting the `proxy_use_local_resolver` option. + + **Examples**: + + A proxy URL that requires client authentication: + + ```yaml + proxy_url: socks5://user:password@socks5-proxy:2233 + ``` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-tcp-proxy_use_local_resolver">**`proxy_use_local_resolver`**</span><br /> + (<DocLink id="serverlessObservabilitySyntheticsLightweight" section="boolean">boolean</DocLink>) + </DocCell> + <DocCell> + A Boolean value that determines whether hostnames are resolved locally instead of being resolved on the proxy server. The default value is `false`, which means that name resolution occurs on the proxy server. + + **Default**: `false` + </DocCell> + </DocRow> + <DocRow> + <DocCell> + <span id="monitor-tcp-ssl">**`ssl`**</span><br /> + ([SSL](((heartbeat-ref))/configuration-ssl.html)) + </DocCell> + <DocCell> + The TLS/SSL connection settings. If the monitor is [configured to use SSL](((heartbeat-ref))/configuration-ssl.html), it will attempt an SSL handshake. If `check` is not configured, the monitor will only check to see if it can establish an SSL/TLS connection. This check can fail either at TCP level or during certificate validation. + + **Example**: + + ```yaml + ssl: + certificate_authorities: ['/etc/ca.crt'] + supported_protocols: ["TLSv1.0", "TLSv1.1", "TLSv1.2"] + ``` + + Also see [Configure SSL](((heartbeat-ref))/configuration-ssl.html) for a full description of the `ssl` options. + </DocCell> + </DocRow> +</DocTable> diff --git a/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-delete-monitor-content/project.mdx b/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-delete-monitor-content/project.mdx new file mode 100644 index 0000000000..5863bf056c --- /dev/null +++ b/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-delete-monitor-content/project.mdx @@ -0,0 +1,10 @@ + +If you <DocLink id="serverlessObservabilitySyntheticsGetStartedProject">set up the monitor using a Synthetics project</DocLink>, +you'll delete the monitor from the Synthetics project and push changes. + +For lightweight monitors, delete the monitor from the YAML file. + +For browser monitors, delete the full journey from the JavaScript or TypeScript file. + +Then, run the <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-push">`push` command</DocLink>. +The monitor associated with that journey that existed in your Observability project will be deleted. diff --git a/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-delete-monitor-content/ui.mdx b/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-delete-monitor-content/ui.mdx new file mode 100644 index 0000000000..242f733cfa --- /dev/null +++ b/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-delete-monitor-content/ui.mdx @@ -0,0 +1,9 @@ + + + +If you <DocLink id="serverlessObservabilitySyntheticsGetStartedUi">set up the monitor using the Synthetics UI</DocLink>, +you can delete a lightweight or browser monitor in the UI: + +1. In your Observability project, go to **Synthetics** → **Management**. +1. Click the trash can icon next to the monitor you want to delete. + diff --git a/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-delete-monitor-widget.mdx b/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-delete-monitor-widget.mdx new file mode 100644 index 0000000000..93c622345d --- /dev/null +++ b/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-delete-monitor-widget.mdx @@ -0,0 +1,12 @@ + +import ManageMonitorsDeleteMonitorContentProject from './manage-monitors-delete-monitor-content/project.mdx' +import ManageMonitorsDeleteMonitorContentUi from './manage-monitors-delete-monitor-content/ui.mdx' + +<DocTabs hasBorder> + <DocTab name="Synthetics project"> + <ManageMonitorsDeleteMonitorContentProject /> + </DocTab> + <DocTab name="Synthetics UI"> + <ManageMonitorsDeleteMonitorContentUi /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-update-monitor-content/project.mdx b/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-update-monitor-content/project.mdx new file mode 100644 index 0000000000..9566fa08f3 --- /dev/null +++ b/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-update-monitor-content/project.mdx @@ -0,0 +1,26 @@ + + + +If you <DocLink id="serverlessObservabilitySyntheticsGetStartedProject">set up the monitor using a Synthetics project</DocLink>, +you'll update the monitor in the Synthetics project and then `push` changes to your Observability project. + +For lightweight monitors, make changes to the YAML file. + +For browser monitors, you can update the configuration of one or more monitors: + +* To update the configuration of an individual monitor, edit the journey directly in + the JavaScript or TypeScript files, specifically the options in `monitor.use`. +* To update the configuration of _all_ monitors in a Synthetics project, edit the + <DocLink id="serverlessObservabilitySyntheticsConfiguration" section="monitor">global synthetics configuration file</DocLink>. + +To update the journey that a browser monitor runs, edit the journey code directly and +<DocLink id="serverlessObservabilitySyntheticsCreateTest" section="test-locally">test the updated journey locally</DocLink> to make sure it's valid. + +After making changes to the monitors, run the <DocLink id="serverlessObservabilitySyntheticsCommandReference" section="elasticsynthetics-push">`push` command</DocLink> +to replace the existing monitors with new monitors using the updated +configuration or journey code. + +<DocCallOut title="Note"> +Updates are linked to a monitor's `id`. To update a monitor you must keep its `id` the same. +</DocCallOut> + diff --git a/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-update-monitor-content/ui.mdx b/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-update-monitor-content/ui.mdx new file mode 100644 index 0000000000..74c4c97bd4 --- /dev/null +++ b/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-update-monitor-content/ui.mdx @@ -0,0 +1,14 @@ + + + +If you <DocLink id="serverlessObservabilitySyntheticsGetStartedUi">set up the monitor using the UI</DocLink>, +you can update the monitor configuration of both lightweight and browser monitors +in the UI: + +1. In your Observability project, go to **Synthetics** → **Management**. +1. Click the pencil icon next to the monitor you want to edit. +1. Update the _Monitor settings_ as needed. + 1. To update the journey used in a browser monitor, edit _Inline script_. + 1. Make sure to click **Run test** to validate the new journey before updating the monitor. +1. Click **Update monitor**. + diff --git a/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-update-monitor-widget.mdx b/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-update-monitor-widget.mdx new file mode 100644 index 0000000000..d88c40700e --- /dev/null +++ b/docs/en/serverless/transclusion/synthetics/tab-widgets/manage-monitors-update-monitor-widget.mdx @@ -0,0 +1,12 @@ + +import ManageMonitorsUpdateMonitorContentProject from './manage-monitors-update-monitor-content/project.mdx' +import ManageMonitorsUpdateMonitorContentUi from './manage-monitors-update-monitor-content/ui.mdx' + +<DocTabs hasBorder> + <DocTab name="Synthetics project"> + <ManageMonitorsUpdateMonitorContentProject /> + </DocTab> + <DocTab name="Synthetics UI"> + <ManageMonitorsUpdateMonitorContentUi /> + </DocTab> +</DocTabs> \ No newline at end of file diff --git a/docs/en/serverless/what-is-observability-serverless.mdx b/docs/en/serverless/what-is-observability-serverless.mdx new file mode 100644 index 0000000000..0cb37c8a04 --- /dev/null +++ b/docs/en/serverless/what-is-observability-serverless.mdx @@ -0,0 +1,87 @@ +--- +id: serverlessObservabilityWhatIsObservabilityServerless +slug: /serverless/observability/what-is-observability-serverless +title: What is Observability serverless? +# description: Description to be written +tags: [ 'serverless', 'observability', 'overview' ] +layout: landing +--- + +<p><DocBadge template="technical preview" /></p> + +<DocLandingHero + title="Elastic Observability" + description="Elastic Observability accelerates problem resolution with open, flexible, and unified observability powered by advanced machine learning and analytics. Elastic ingests all operational and business telemetry and correlates for faster root cause detection." + image="observability" + headerIcon="logoObservability" + display="align" +/> + +<DocCallOut color="warning" title="Production workloads">While in technical preview, Elastic Observability serverless projects should not be used for production workloads.</DocCallOut> + +<DocRelatedArticles + sectionTitle="Get started" + items={ + [ + { + "title": "Get started with Logs", + "pageId": "serverlessObservabilityGetStartedWithLogs", + "description": "Add your log data to Elastic Observability and start exploring your logs.", + }, + { + "title": "Get started with traces and APM", + "pageId": "serverlessObservabilityApmGetStarted", + "description": "Collect Application Performance Monitoring (APM) data and visualize it in real time.", + }, + { + "title": "Get started with metrics", + "pageId": "serverlessObservabilityGetStartedWithMetrics", + "description": "Add your metrics data to Elastic Observability and visualize it in real time.", + } + ] + } +/> + +<DocRelatedArticles + sectionTitle="How to" + items={ + [ + { + "title": "Explore log data", + "pageId": "serverlessObservabilityDiscoverAndExploreLogs", + "description": "Use Discover to explore your log data.", + }, + { + "title": "Trigger alerts and triage problems", + "description": "Create rules to detect complex conditions and trigger alerts.", + "pageId": "serverlessObservabilityCreateRules" + }, + { + "title": "Track and deliver on your SLOs", + "pageId": "serverlessObservabilitySlos", + "description": "Measure key metrics important to the business.", + }, + { + "title": "Detect anomalies and spikes", + "pageId": "serverlessObservabilityAiopsDetectAnomalies", + "description": "Find unusual behavior in time series data.", + }, + { + "title": "Monitor application performance", + "description": "Monitor your software services and applications in real time.", + "pageId": "serverlessObservabilityApm" + }, + { + "title": "Integrate with OpenTelemetry", + "pageId": "serverlessObservabilityApmAgentsOtel", + "description": "Reuse existing APM instrumentation to capture logs, traces, and metrics.", + }, + { + "title": "Monitor your hosts and services", + "pageId": "serverlessObservabilityAnalyzeHosts", + "description": "Get a metrics-driven view of your hosts backed by an interface called Lens.", + } + ] + } +/> +