From 90aa10519ee093719a3d1e54e95d1de996002222 Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Wed, 13 Jan 2021 17:17:33 +0200 Subject: [PATCH 01/14] Add stan package Signed-off-by: ChrsMark --- .../channels/agent/stream/stream.yml.hbs | 6 ++ .../channels/fields/base-fields.yml | 12 +++ .../data_stream/channels/fields/fields.yml | 28 +++++++ .../channels/fields/package-fields.yml | 11 +++ .../stan/data_stream/channels/manifest.yml | 15 ++++ .../stats/agent/stream/stream.yml.hbs | 6 ++ .../data_stream/stats/fields/base-fields.yml | 12 +++ .../stan/data_stream/stats/fields/fields.yml | 32 ++++++++ .../stats/fields/package-fields.yml | 11 +++ packages/stan/data_stream/stats/manifest.yml | 15 ++++ .../subscriptions/agent/stream/stream.yml.hbs | 6 ++ .../subscriptions/fields/base-fields.yml | 12 +++ .../subscriptions/fields/fields.yml | 32 ++++++++ .../subscriptions/fields/package-fields.yml | 11 +++ .../data_stream/subscriptions/manifest.yml | 15 ++++ packages/stan/docs/README.md | 1 + .../stan/img/metricbeat-stan-overview.png | Bin 0 -> 68134 bytes packages/stan/img/stan.svg | 1 + ...-b6a60340-4371-11ea-b0c6-cb14c0977bd1.json | 74 ++++++++++++++++++ ...-0e412fe0-4371-11ea-b0c6-cb14c0977bd1.json | 66 ++++++++++++++++ ...-46a07ac0-436d-11ea-b0c6-cb14c0977bd1.json | 66 ++++++++++++++++ packages/stan/manifest.yml | 42 ++++++++++ 22 files changed, 474 insertions(+) create mode 100644 packages/stan/data_stream/channels/agent/stream/stream.yml.hbs create mode 100644 packages/stan/data_stream/channels/fields/base-fields.yml create mode 100644 packages/stan/data_stream/channels/fields/fields.yml create mode 100644 packages/stan/data_stream/channels/fields/package-fields.yml create mode 100644 packages/stan/data_stream/channels/manifest.yml create mode 100644 packages/stan/data_stream/stats/agent/stream/stream.yml.hbs create mode 100644 packages/stan/data_stream/stats/fields/base-fields.yml create mode 100644 packages/stan/data_stream/stats/fields/fields.yml create mode 100644 packages/stan/data_stream/stats/fields/package-fields.yml create mode 100644 packages/stan/data_stream/stats/manifest.yml create mode 100644 packages/stan/data_stream/subscriptions/agent/stream/stream.yml.hbs create mode 100644 packages/stan/data_stream/subscriptions/fields/base-fields.yml create mode 100644 packages/stan/data_stream/subscriptions/fields/fields.yml create mode 100644 packages/stan/data_stream/subscriptions/fields/package-fields.yml create mode 100644 packages/stan/data_stream/subscriptions/manifest.yml create mode 100644 packages/stan/docs/README.md create mode 100644 packages/stan/img/metricbeat-stan-overview.png create mode 100644 packages/stan/img/stan.svg create mode 100644 packages/stan/kibana/dashboard/stan-b6a60340-4371-11ea-b0c6-cb14c0977bd1.json create mode 100644 packages/stan/kibana/visualization/stan-0e412fe0-4371-11ea-b0c6-cb14c0977bd1.json create mode 100644 packages/stan/kibana/visualization/stan-46a07ac0-436d-11ea-b0c6-cb14c0977bd1.json create mode 100644 packages/stan/manifest.yml diff --git a/packages/stan/data_stream/channels/agent/stream/stream.yml.hbs b/packages/stan/data_stream/channels/agent/stream/stream.yml.hbs new file mode 100644 index 00000000000..a2408250836 --- /dev/null +++ b/packages/stan/data_stream/channels/agent/stream/stream.yml.hbs @@ -0,0 +1,6 @@ +metricsets: ["channels"] +hosts: +{{#each hosts}} + - {{this}} +{{/each}} +period: {{period}} diff --git a/packages/stan/data_stream/channels/fields/base-fields.yml b/packages/stan/data_stream/channels/fields/base-fields.yml new file mode 100644 index 00000000000..7c798f4534c --- /dev/null +++ b/packages/stan/data_stream/channels/fields/base-fields.yml @@ -0,0 +1,12 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. diff --git a/packages/stan/data_stream/channels/fields/fields.yml b/packages/stan/data_stream/channels/fields/fields.yml new file mode 100644 index 00000000000..bd6aa8e92cd --- /dev/null +++ b/packages/stan/data_stream/channels/fields/fields.yml @@ -0,0 +1,28 @@ +- name: stan.channels + type: group + release: ga + fields: + - name: name + type: keyword + description: | + The name of the STAN streaming channel + - name: messages + type: long + description: | + The number of STAN streaming messages + - name: bytes + type: long + description: | + The number of STAN bytes in the channel + - name: first_seq + type: long + description: | + First sequence number stored in the channel. If first_seq > min([seq in subscriptions]) data loss has possibly occurred + - name: last_seq + type: long + description: | + Last sequence number stored in the channel + - name: depth + type: long + description: | + Queue depth based upon current sequence number and highest reported subscriber sequence number diff --git a/packages/stan/data_stream/channels/fields/package-fields.yml b/packages/stan/data_stream/channels/fields/package-fields.yml new file mode 100644 index 00000000000..3100be0e0bc --- /dev/null +++ b/packages/stan/data_stream/channels/fields/package-fields.yml @@ -0,0 +1,11 @@ +- name: stan + type: group + fields: + - name: server.id + type: keyword + description: | + The server ID + - name: cluster.id + type: keyword + description: | + The cluster ID diff --git a/packages/stan/data_stream/channels/manifest.yml b/packages/stan/data_stream/channels/manifest.yml new file mode 100644 index 00000000000..a17c39b1f6e --- /dev/null +++ b/packages/stan/data_stream/channels/manifest.yml @@ -0,0 +1,15 @@ +type: metrics +title: Stan channels metrics +release: experimental +streams: +- input: stan/metrics + vars: + - name: period + type: text + title: Period + multi: false + required: true + show_user: true + default: 60s + title: Stan channels metrics + description: Collect Stan channels metrics diff --git a/packages/stan/data_stream/stats/agent/stream/stream.yml.hbs b/packages/stan/data_stream/stats/agent/stream/stream.yml.hbs new file mode 100644 index 00000000000..3b06dd6d47b --- /dev/null +++ b/packages/stan/data_stream/stats/agent/stream/stream.yml.hbs @@ -0,0 +1,6 @@ +metricsets: ["stats"] +hosts: +{{#each hosts}} + - {{this}} +{{/each}} +period: {{period}} diff --git a/packages/stan/data_stream/stats/fields/base-fields.yml b/packages/stan/data_stream/stats/fields/base-fields.yml new file mode 100644 index 00000000000..7c798f4534c --- /dev/null +++ b/packages/stan/data_stream/stats/fields/base-fields.yml @@ -0,0 +1,12 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. diff --git a/packages/stan/data_stream/stats/fields/fields.yml b/packages/stan/data_stream/stats/fields/fields.yml new file mode 100644 index 00000000000..a8ad490292a --- /dev/null +++ b/packages/stan/data_stream/stats/fields/fields.yml @@ -0,0 +1,32 @@ +- name: stan.stats + type: group + release: ga + fields: + - name: state + type: keyword + description: | + The cluster / streaming configuration state (STANDALONE, CLUSTERED) + - name: role + type: keyword + description: | + If clustered, role of this node in the cluster (Leader, Follower, Candidate) + - name: clients + type: integer + description: | + The number of STAN clients + - name: subscriptions + type: integer + description: | + The number of STAN streaming subscriptions + - name: channels + type: integer + description: | + The number of STAN channels + - name: messages + type: long + description: | + Number of messages across all STAN queues + - name: bytes + type: long + description: | + Number of bytes consumed across all STAN queues diff --git a/packages/stan/data_stream/stats/fields/package-fields.yml b/packages/stan/data_stream/stats/fields/package-fields.yml new file mode 100644 index 00000000000..3100be0e0bc --- /dev/null +++ b/packages/stan/data_stream/stats/fields/package-fields.yml @@ -0,0 +1,11 @@ +- name: stan + type: group + fields: + - name: server.id + type: keyword + description: | + The server ID + - name: cluster.id + type: keyword + description: | + The cluster ID diff --git a/packages/stan/data_stream/stats/manifest.yml b/packages/stan/data_stream/stats/manifest.yml new file mode 100644 index 00000000000..ccddcf23d65 --- /dev/null +++ b/packages/stan/data_stream/stats/manifest.yml @@ -0,0 +1,15 @@ +type: metrics +title: Stan stats metrics +release: experimental +streams: +- input: stan/metrics + vars: + - name: period + type: text + title: Period + multi: false + required: true + show_user: true + default: 60s + title: Stan stats metrics + description: Collect Stan stats metrics diff --git a/packages/stan/data_stream/subscriptions/agent/stream/stream.yml.hbs b/packages/stan/data_stream/subscriptions/agent/stream/stream.yml.hbs new file mode 100644 index 00000000000..521aa4357fc --- /dev/null +++ b/packages/stan/data_stream/subscriptions/agent/stream/stream.yml.hbs @@ -0,0 +1,6 @@ +metricsets: ["subscriptions"] +hosts: +{{#each hosts}} + - {{this}} +{{/each}} +period: {{period}} diff --git a/packages/stan/data_stream/subscriptions/fields/base-fields.yml b/packages/stan/data_stream/subscriptions/fields/base-fields.yml new file mode 100644 index 00000000000..7c798f4534c --- /dev/null +++ b/packages/stan/data_stream/subscriptions/fields/base-fields.yml @@ -0,0 +1,12 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. diff --git a/packages/stan/data_stream/subscriptions/fields/fields.yml b/packages/stan/data_stream/subscriptions/fields/fields.yml new file mode 100644 index 00000000000..b225c893d4a --- /dev/null +++ b/packages/stan/data_stream/subscriptions/fields/fields.yml @@ -0,0 +1,32 @@ +- name: stan.subscriptions + type: group + release: ga + fields: + - name: id + type: keyword + description: | + The name of the STAN channel subscription (client_id) + - name: channel + type: keyword + description: | + The name of the STAN channel the subscription is associated with + - name: queue + type: keyword + description: | + The name of the NATS queue that the STAN channel subscription is associated with, if any + - name: last_sent + type: long + description: | + Last known sequence number of the subscription that was acked + - name: pending + type: long + description: | + Number of pending messages from / to the subscriber + - name: offline + type: boolean + description: | + Is the subscriber marked as offline? + - name: stalled + type: boolean + description: | + Is the subscriber known to be stalled? diff --git a/packages/stan/data_stream/subscriptions/fields/package-fields.yml b/packages/stan/data_stream/subscriptions/fields/package-fields.yml new file mode 100644 index 00000000000..3100be0e0bc --- /dev/null +++ b/packages/stan/data_stream/subscriptions/fields/package-fields.yml @@ -0,0 +1,11 @@ +- name: stan + type: group + fields: + - name: server.id + type: keyword + description: | + The server ID + - name: cluster.id + type: keyword + description: | + The cluster ID diff --git a/packages/stan/data_stream/subscriptions/manifest.yml b/packages/stan/data_stream/subscriptions/manifest.yml new file mode 100644 index 00000000000..6a5419dda35 --- /dev/null +++ b/packages/stan/data_stream/subscriptions/manifest.yml @@ -0,0 +1,15 @@ +type: metrics +title: Stan subscriptions metrics +release: experimental +streams: +- input: stan/metrics + vars: + - name: period + type: text + title: Period + multi: false + required: true + show_user: true + default: 60s + title: Stan subscriptions metrics + description: Collect Stan subscriptions metrics diff --git a/packages/stan/docs/README.md b/packages/stan/docs/README.md new file mode 100644 index 00000000000..30404ce4c54 --- /dev/null +++ b/packages/stan/docs/README.md @@ -0,0 +1 @@ +TODO \ No newline at end of file diff --git a/packages/stan/img/metricbeat-stan-overview.png b/packages/stan/img/metricbeat-stan-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ed419fe885b0b5756d6fefcef6c9b8dbcca7ee GIT binary patch literal 68134 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 literal 0 HcmV?d00001 diff --git a/packages/stan/img/stan.svg b/packages/stan/img/stan.svg new file mode 100644 index 00000000000..5a1d6e9a52f --- /dev/null +++ b/packages/stan/img/stan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/stan/kibana/dashboard/stan-b6a60340-4371-11ea-b0c6-cb14c0977bd1.json b/packages/stan/kibana/dashboard/stan-b6a60340-4371-11ea-b0c6-cb14c0977bd1.json new file mode 100644 index 00000000000..d0bdcff84df --- /dev/null +++ b/packages/stan/kibana/dashboard/stan-b6a60340-4371-11ea-b0c6-cb14c0977bd1.json @@ -0,0 +1,74 @@ +{ + "attributes": { + "description": "Metrics for STAN channels / subjects", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "" + } + } + }, + "optionsJSON": { + "hidePanelTitles": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": { + "enhancements": {} + }, + "gridData": { + "h": 15, + "i": "98c9a793-903a-47af-900b-8becd2493d0a", + "w": 24, + "x": 24, + "y": 0 + }, + "panelIndex": "98c9a793-903a-47af-900b-8becd2493d0a", + "panelRefName": "panel_0", + "version": "7.5.2" + }, + { + "embeddableConfig": { + "enhancements": {} + }, + "gridData": { + "h": 15, + "i": "d11727cf-8d05-45ae-9ae0-2f3b79ab7eda", + "w": 24, + "x": 0, + "y": 0 + }, + "panelIndex": "d11727cf-8d05-45ae-9ae0-2f3b79ab7eda", + "panelRefName": "panel_1", + "version": "7.5.2" + } + ], + "timeRestore": false, + "title": "[Metrics Stan] Channel Overview Metrics", + "version": 1 + }, + "id": "stan-b6a60340-4371-11ea-b0c6-cb14c0977bd1", + "migrationVersion": { + "dashboard": "7.11.0" + }, + "namespaces": [ + "default" + ], + "references": [ + { + "id": "stan-46a07ac0-436d-11ea-b0c6-cb14c0977bd1", + "name": "panel_0", + "type": "visualization" + }, + { + "id": "stan-0e412fe0-4371-11ea-b0c6-cb14c0977bd1", + "name": "panel_1", + "type": "visualization" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/stan/kibana/visualization/stan-0e412fe0-4371-11ea-b0c6-cb14c0977bd1.json b/packages/stan/kibana/visualization/stan-0e412fe0-4371-11ea-b0c6-cb14c0977bd1.json new file mode 100644 index 00000000000..23d6c642c80 --- /dev/null +++ b/packages/stan/kibana/visualization/stan-0e412fe0-4371-11ea-b0c6-cb14c0977bd1.json @@ -0,0 +1,66 @@ +{ + "attributes": { + "description": "Queue depth of STAN channels, summed per channel", + "kibanaSavedObjectMeta": { + "searchSourceJSON": {} + }, + "title": "Channel Queue Depth [Metrics Stan]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [], + "params": { + "axis_formatter": "number", + "axis_position": "left", + "axis_scale": "normal", + "default_index_pattern": "metrics-*", + "default_timefield": "@timestamp", + "id": "61ca57f0-469d-11e7-af02-69e470af7417", + "index_pattern": "metrics-*", + "interval": "", + "isModelInvalid": false, + "series": [ + { + "axis_position": "right", + "chart_type": "bar", + "color": "#68BC00", + "fill": 0.5, + "formatter": "number", + "id": "61ca57f1-469d-11e7-af02-69e470af7417", + "label": "Queue Depth", + "line_width": 1, + "metrics": [ + { + "field": "stan.channels.depth", + "id": "61ca57f2-469d-11e7-af02-69e470af7417", + "type": "max" + } + ], + "point_size": 1, + "separate_axis": 0, + "split_color_mode": "gradient", + "split_mode": "terms", + "stacked": "none", + "terms_field": "stan.channels.name", + "type": "timeseries" + } + ], + "show_grid": 1, + "show_legend": 1, + "time_field": "", + "type": "timeseries" + }, + "title": "Channel Queue Depth [Metrics Stan]", + "type": "metrics" + } + }, + "id": "stan-0e412fe0-4371-11ea-b0c6-cb14c0977bd1", + "migrationVersion": { + "visualization": "7.11.0" + }, + "namespaces": [ + "default" + ], + "references": [], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/stan/kibana/visualization/stan-46a07ac0-436d-11ea-b0c6-cb14c0977bd1.json b/packages/stan/kibana/visualization/stan-46a07ac0-436d-11ea-b0c6-cb14c0977bd1.json new file mode 100644 index 00000000000..656d6548d64 --- /dev/null +++ b/packages/stan/kibana/visualization/stan-46a07ac0-436d-11ea-b0c6-cb14c0977bd1.json @@ -0,0 +1,66 @@ +{ + "attributes": { + "description": "Number of messages in each channel / subject", + "kibanaSavedObjectMeta": { + "searchSourceJSON": {} + }, + "title": "Channel Messages [Metrics Stan]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [], + "params": { + "axis_formatter": "number", + "axis_position": "left", + "axis_scale": "normal", + "default_index_pattern": "metrics-*", + "default_timefield": "@timestamp", + "id": "61ca57f0-469d-11e7-af02-69e470af7417", + "index_pattern": "metrics-*", + "interval": "", + "isModelInvalid": false, + "series": [ + { + "axis_position": "right", + "chart_type": "bar", + "color": "#68BC00", + "fill": 0.5, + "formatter": "number", + "id": "61ca57f1-469d-11e7-af02-69e470af7417", + "label": "STAN Queue Messages", + "line_width": 1, + "metrics": [ + { + "field": "stan.channels.messages", + "id": "61ca57f2-469d-11e7-af02-69e470af7417", + "type": "max" + } + ], + "point_size": 1, + "separate_axis": 0, + "split_color_mode": "gradient", + "split_mode": "terms", + "stacked": "none", + "terms_field": "stan.channels.name", + "type": "timeseries" + } + ], + "show_grid": 1, + "show_legend": 1, + "time_field": "", + "type": "timeseries" + }, + "title": "Channel Messages [Metrics Stan]", + "type": "metrics" + } + }, + "id": "stan-46a07ac0-436d-11ea-b0c6-cb14c0977bd1", + "migrationVersion": { + "visualization": "7.11.0" + }, + "namespaces": [ + "default" + ], + "references": [], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/stan/manifest.yml b/packages/stan/manifest.yml new file mode 100644 index 00000000000..1481b33144c --- /dev/null +++ b/packages/stan/manifest.yml @@ -0,0 +1,42 @@ +name: stan +title: Stan +version: 0.0.1 +release: experimental +description: Stan Integration +type: integration +icons: +- src: /img/stan.svg + path: "" + title: stan + size: 32x32 + type: image/svg+xml +format_version: 1.0.0 +license: basic +categories: [] +conditions: + kibana.version: ^7.9.0 +screenshots: +- src: /img/metricbeat-stan-overview.png + path: "" + title: metricbeat stan overview + size: 1829x447 + type: image/png +policy_templates: +- name: stan + title: Stan metrics + description: Collect metrics from Stan instances + inputs: + - type: stan/metrics + vars: + - name: hosts + type: text + title: Hosts + multi: true + required: true + show_user: true + default: + - localhost:8222 + title: Collect Stan channels, stats and subscriptions metrics + description: Collecting channels, stats and subscriptions metrics from Stan instances +owner: + github: elastic/integrations From 9f73f6638a7f27a67ba7885cf3b34a27a363d8fb Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Thu, 14 Jan 2021 14:59:10 +0200 Subject: [PATCH 02/14] wip Signed-off-by: ChrsMark --- packages/stan/_dev/build/docs/README.md | 50 +++++ packages/stan/_dev/deploy/docker/Dockerfile | 26 +++ .../_dev/deploy/docker/docker-compose.yml | 11 + .../stan/_dev/deploy/docker/healthcheck.sh | 9 + packages/stan/_dev/deploy/docker/run.sh | 10 + packages/stan/_dev/deploy/variants.yml | 4 + .../_dev/test/system/test-default-config.yml | 5 + .../_dev/test/pipeline/test-log-sample.log | 69 ++++++ .../pipeline/test-log-sample.log-config.json | 11 + .../_dev/test/system/test-default-config.yml | 5 + .../data_stream/log/agent/stream/log.yml.hbs | 10 + .../elasticsearch/ingest_pipeline/default.yml | 197 ++++++++++++++++++ .../data_stream/log/fields/base-fields.yml | 23 ++ packages/stan/data_stream/log/fields/ecs.yml | 71 +++++++ .../stan/data_stream/log/fields/fields.yml | 47 +++++ packages/stan/data_stream/log/manifest.yml | 17 ++ .../stan/data_stream/log/sample_event.json | 89 ++++++++ .../_dev/test/system/test-default-config.yml | 5 + .../_dev/test/system/test-default-config.yml | 5 + packages/stan/manifest.yml | 23 +- 20 files changed, 677 insertions(+), 10 deletions(-) create mode 100644 packages/stan/_dev/build/docs/README.md create mode 100644 packages/stan/_dev/deploy/docker/Dockerfile create mode 100644 packages/stan/_dev/deploy/docker/docker-compose.yml create mode 100644 packages/stan/_dev/deploy/docker/healthcheck.sh create mode 100755 packages/stan/_dev/deploy/docker/run.sh create mode 100644 packages/stan/_dev/deploy/variants.yml create mode 100644 packages/stan/data_stream/channels/_dev/test/system/test-default-config.yml create mode 100644 packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log create mode 100644 packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log-config.json create mode 100644 packages/stan/data_stream/log/_dev/test/system/test-default-config.yml create mode 100644 packages/stan/data_stream/log/agent/stream/log.yml.hbs create mode 100644 packages/stan/data_stream/log/elasticsearch/ingest_pipeline/default.yml create mode 100644 packages/stan/data_stream/log/fields/base-fields.yml create mode 100644 packages/stan/data_stream/log/fields/ecs.yml create mode 100644 packages/stan/data_stream/log/fields/fields.yml create mode 100644 packages/stan/data_stream/log/manifest.yml create mode 100644 packages/stan/data_stream/log/sample_event.json create mode 100644 packages/stan/data_stream/stats/_dev/test/system/test-default-config.yml create mode 100644 packages/stan/data_stream/subscriptions/_dev/test/system/test-default-config.yml diff --git a/packages/stan/_dev/build/docs/README.md b/packages/stan/_dev/build/docs/README.md new file mode 100644 index 00000000000..ce5e17a3682 --- /dev/null +++ b/packages/stan/_dev/build/docs/README.md @@ -0,0 +1,50 @@ +# STAN integration + +This integration is used to collect logs and metrics from [STAN servers](https://github.com/nats-io/stan.go). +The integration collects metrics from [STAN monitoring server APIs](https://github.com/nats-io/nats-streaming-server/blob/master/server/monitor.go). + + +## Compatibility + +The STAN package is tested with Stan 0.15.1 + +## Logs + +### log + +The `log` dataset collects the STAN logs. + +{{event "log"}} + +{{fields "log"}} + +## Metrics + +The default datasets are `stats`, `channels`, and `subscriptions`. + +### stats + +This is the `stats` dataset of the STAN package, in charge of retrieving generic +metrics from a STAN instance. + +{{event "stats"}} + +{{fields "stats"}} + +### channels + +This is the `channels` dataset of the STAN package, in charge of retrieving +metrics about channels from a STAN instance. + +{{event "channels"}} + +{{fields "channels"}} + +### subscriptions + +This is the `subscriptions` dataset of the STAN package, in charge of retrieving +metrics about subscriptions from a STAN instance. + +{{event "subscriptions"}} + +{{fields "subscriptions"}} \ No newline at end of file diff --git a/packages/stan/_dev/deploy/docker/Dockerfile b/packages/stan/_dev/deploy/docker/Dockerfile new file mode 100644 index 00000000000..030427a7c00 --- /dev/null +++ b/packages/stan/_dev/deploy/docker/Dockerfile @@ -0,0 +1,26 @@ +ARG STAN_VERSION=0.15.1 +FROM nats-streaming:$STAN_VERSION + +# build stage +FROM golang:1.13-alpine3.11 AS build-env +RUN apk --no-cache add build-base git mercurial gcc +RUN cd src && go get -d github.com/nats-io/stan.go/ +RUN cd src/github.com/nats-io/stan.go/examples/stan-bench && git checkout tags/v0.5.2 && go build . + +# create an enhanced container with nc command available since nats is based +# on scratch image making healthcheck impossible +FROM alpine:latest +RUN apk add --no-cache --upgrade bash +COPY --from=0 nats-streaming-server /nats-streaming-server +COPY --from=build-env /go/src/github.com/nats-io/stan.go/examples/stan-bench/stan-bench /stan-bench +# Expose client, management, and cluster ports +EXPOSE 4222 8222 +ADD healthcheck.sh /healthcheck.sh +RUN ["chmod", "+x", "/healthcheck.sh"] +ADD run.sh /run.sh + +# Healthcheck waits until channels have been created by the benchmark that runs inside +HEALTHCHECK --interval=1s --retries=100 CMD /healthcheck.sh + +# Run with default memory based store +ENTRYPOINT ["/run.sh"] diff --git a/packages/stan/_dev/deploy/docker/docker-compose.yml b/packages/stan/_dev/deploy/docker/docker-compose.yml new file mode 100644 index 00000000000..3e3d0318a75 --- /dev/null +++ b/packages/stan/_dev/deploy/docker/docker-compose.yml @@ -0,0 +1,11 @@ +version: '2.3' +services: + stan: + # Commented out `image:` below until we have a process to refresh the hosted images from + # Dockerfiles in this repo. Until then, we build the image locally using `build:` below. + # image: docker.elastic.co/integrations-ci/beats-stan:${SERVICE_VERSION:-2.4.20}-1 + build: . + ports: + - 8222 + volumes: + - ${SERVICE_LOGS_DIR}:/var/log/stan \ No newline at end of file diff --git a/packages/stan/_dev/deploy/docker/healthcheck.sh b/packages/stan/_dev/deploy/docker/healthcheck.sh new file mode 100644 index 00000000000..28c652d9051 --- /dev/null +++ b/packages/stan/_dev/deploy/docker/healthcheck.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +res=$(wget -q -O - http://0.0.0.0:8222/streaming/channelsz | sed -n 's/"count": \([[:digit:]]\+\),/\1/p') + +if [[ $res -gt 0 ]]; then + exit 0 +fi + +exit 1 diff --git a/packages/stan/_dev/deploy/docker/run.sh b/packages/stan/_dev/deploy/docker/run.sh new file mode 100755 index 00000000000..de7445f32ad --- /dev/null +++ b/packages/stan/_dev/deploy/docker/run.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +/nats-streaming-server -DV -l /var/log/stan/stan.log -m 8222 & +sleep 2 +/stan-bench -np 0 -ns 100 -qgroup T -n 100000000 -ms 1024 foo & +/stan-bench -np 10 -ns 10 -n 1000000000 -ms 1024 bar & + +# Make sure the container keeps running +tail -f /dev/null + diff --git a/packages/stan/_dev/deploy/variants.yml b/packages/stan/_dev/deploy/variants.yml new file mode 100644 index 00000000000..17388bff92f --- /dev/null +++ b/packages/stan/_dev/deploy/variants.yml @@ -0,0 +1,4 @@ +variants: + v1: + SERVICE_VERSION: 0.15.1 +default: v1 diff --git a/packages/stan/data_stream/channels/_dev/test/system/test-default-config.yml b/packages/stan/data_stream/channels/_dev/test/system/test-default-config.yml new file mode 100644 index 00000000000..83fc84f62ea --- /dev/null +++ b/packages/stan/data_stream/channels/_dev/test/system/test-default-config.yml @@ -0,0 +1,5 @@ +vars: + hosts: + - http://{{Hostname}}:{{Port}} +data_stream: + vars: ~ diff --git a/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log b/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log new file mode 100644 index 00000000000..a900055d4b6 --- /dev/null +++ b/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log @@ -0,0 +1,69 @@ +[7] 2021/01/13 14.20:06.981022 [INF] STREAM: Starting nats-streaming-server[test-cluster] version 0.15.1 +[7] 2021/01/13 14.20:06.981055 [INF] STREAM: ServerID: tnudw5OA2pv04Sn0JpebGy +[7] 2021/01/13 14.20:06.981069 [INF] STREAM: Go version: go1.11.10 +[7] 2021/01/13 14.20:06.981082 [INF] STREAM: Git commit: [8e6aa7c] +[7] 2021/01/13 14.20:06.981951 [INF] Starting nats-server version 2.0.0 +[7] 2021/01/13 14.20:06.981983 [DBG] Go build version go1.11.10 +[7] 2021/01/13 14.20:06.981996 [INF] Git commit [not set] +[7] 2021/01/13 14.20:06.982082 [INF] Starting http monitor on 0.0.0.0:8222 +[7] 2021/01/13 14.20:06.982116 [INF] Listening for client connections on 0.0.0.0:4222 +[7] 2021/01/13 14.20:06.982127 [INF] Server id is NCE3NFAMOIJHIR6KK53KBPN6C44LXZ6G4ULGLIWIBLYOLG5Z5LVCQSOB +[7] 2021/01/13 14.20:06.982136 [INF] Server is ready +[7] 2021/01/13 14.20:06.982149 [DBG] Get non local IPs for "0.0.0.0" +[7] 2021/01/13 14.20:06.982402 [DBG] ip=192.168.240.2 +[7] 2021/01/13 14.20:07.008167 [DBG] 127.0.0.1:33150 - cid:1 - Client connection created +[7] 2021/01/13 14.20:07.009385 [DBG] 127.0.0.1:33152 - cid:2 - Client connection created +[7] 2021/01/13 14.20:07.010819 [DBG] 127.0.0.1:33154 - cid:3 - Client connection created +[7] 2021/01/13 14.20:07.011557 [INF] STREAM: Recovering the state... +[7] 2021/01/13 14.20:07.011583 [INF] STREAM: No recovered state +[7] 2021/01/13 14.20:07.263504 [INF] STREAM: Message store is MEMORY +[7] 2021/01/13 14.20:07.263623 [INF] STREAM: ---------- Store Limits ---------- +[7] 2021/01/13 14.20:07.263653 [INF] STREAM: Channels: 100 * +[7] 2021/01/13 14.20:07.263671 [INF] STREAM: --------- Channels Limits -------- +[7] 2021/01/13 14.20:07.263690 [INF] STREAM: Subscriptions: 1000 * +[7] 2021/01/13 14.20:07.263710 [INF] STREAM: Messages : 1000000 * +[7] 2021/01/13 14.20:07.263728 [INF] STREAM: Bytes : 976.56 MB * +[7] 2021/01/13 14.20:07.263749 [INF] STREAM: Age : unlimited * +[7] 2021/01/13 14.20:07.263767 [INF] STREAM: Inactivity : unlimited * +[7] 2021/01/13 14.20:07.263788 [INF] STREAM: ---------------------------------- +[7] 2021/01/13 14.20:08.988091 [DBG] 127.0.0.1:33160 - cid:4 - Client connection created +[7] 2021/01/13 14.20:09.010952 [INF] STREAM: Channel "bar" has been created +[7] 2021/01/13 14:22:50.499525 [TRC] 127.0.0.1:60748 - cid:3 - <<- [SUB _INBOX.mUz7h6B3wGNf7P7bhyQldF 43] +[7] 2021/01/13 14:22:50.497650 [DBG] 127.0.0.1:60800 - cid:27 - Client connection closed +[7] 2021/01/13 14:22:50.499560 [DBG] 127.0.0.1:60812 - cid:34 - Client connection closed +[7] 2021/01/13 14:22:50.499565 [DBG] 127.0.0.1:60818 - cid:36 - Client connection closed +[7] 2021/01/13 14:22:50.499560 [DBG] 127.0.0.1:60816 - cid:35 - Client connection closed +[7] 2021/01/13 14:22:50.499586 [TRC] 127.0.0.1:60748 - cid:3 - <<- [PING] +[7] 2021/01/13 14:22:50.499599 [DBG] 127.0.0.1:60820 - cid:38 - Client connection closed +[7] 2021/01/13 14:22:50.499607 [TRC] 127.0.0.1:60748 - cid:3 - ->> [PONG] +[7] 2021/01/13 14:22:50.499634 [DBG] 127.0.0.1:60804 - cid:30 - Client connection closed +[7] 2021/01/13 14:22:50.499651 [DBG] 127.0.0.1:60806 - cid:32 - Client connection closed +[7] 2021/01/13 14:22:50.499656 [DBG] 127.0.0.1:60814 - cid:42 - Client connection closed +[7] 2021/01/13 14:22:50.499694 [DBG] 127.0.0.1:60808 - cid:33 - Client connection closed +[7] 2021/01/13 14:22:50.499717 [DBG] 127.0.0.1:60802 - cid:31 - Client connection closed +[7] 2021/01/13 14:22:50.499727 [TRC] 127.0.0.1:60748 - cid:3 - <<- [SUB _INBOX.mUz7h6B3wGNf7P7bhyQlf6 44] +[7] 2021/01/13 14:22:50.499769 [TRC] 127.0.0.1:60748 - cid:3 - <<- [PING] +[7] 2021/01/13 14:22:50.488515 [TRC] 127.0.0.1:60910 - cid:83 - ->> [MSG _INBOX.ZXYA2FSF5VwytqOUdLsWfp.RdKmEViH 3 31] +[7] 2021/01/13 14:22:50.499782 [TRC] 127.0.0.1:60748 - cid:3 - ->> [PONG] +[7] 2021/01/13 14:22:50.499811 [TRC] 127.0.0.1:60744 - cid:1 - <<- [PUB _INBOX.ZXYA2FSF5VwytqOUdLsXOL.kiHXi6ux 31] +[7] 2021/01/13 14:22:50.499850 [TRC] 127.0.0.1:60744 - cid:1 - <<- MSG_PAYLOAD: ["\x12\x1d_INBOX.mUz7h6B3wGNf7P7bhyQlS7"] +[7] 2021/01/13 14:22:50.499850 [DBG] 127.0.0.1:60910 - cid:83 - Client connection closed +[7] 2021/01/13 14:22:50.499961 [TRC] 127.0.0.1:60744 - cid:1 - <<- [PUB _INBOX.ZXYA2FSF5VwytqOUdLsUbq.CeeDx8Zh 31] +[7] 2021/01/13 14:22:50.500004 [TRC] 127.0.0.1:60744 - cid:1 - <<- MSG_PAYLOAD: ["\x12\x1d_INBOX.mUz7h6B3wGNf7P7bhyQlTy"] +[7] 2021/01/13 14:22:50.500142 [DBG] 127.0.0.1:60810 - cid:29 - Client connection closed +[7] 2021/01/13 14:22:50.508653 [TRC] 127.0.0.1:60744 - cid:1 - <<- [PUB _INBOX.ZXYA2FSF5VwytqOUdLsUsX.7vrrWV3v 31] +[7] 2021/01/13 14:22:50.508725 [TRC] 127.0.0.1:60744 - cid:1 - <<- MSG_PAYLOAD: ["\x12\x1d_INBOX.mUz7h6B3wGNf7P7bhyQm1M"] +[7] 2021/01/13 14:22:50.508872 [TRC] 127.0.0.1:60748 - cid:3 - <<- [SUB _INBOX.mUz7h6B3wGNf7P7bhyQm3D 57] +[7] 2021/01/13 14:22:50.509016 [TRC] 127.0.0.1:60748 - cid:3 - <<- [PING] +[7] 2021/01/13 14:22:50.509046 [TRC] 127.0.0.1:60748 - cid:3 - ->> [PONG] +[7] 2021/01/13 14:22:50.509787 [TRC] 127.0.0.1:60744 - cid:1 - <<- [PUB _INBOX.ZXYA2FSF5VwytqOUdLsYyH.3U691ECJ 31] +[7] 2021/01/13 14:22:50.509825 [TRC] 127.0.0.1:60744 - cid:1 - <<- MSG_PAYLOAD: ["\x12\x1d_INBOX.mUz7h6B3wGNf7P7bhyQm3D"] +[7] 2021/01/13 14:22:50.509825 [TRC] 127.0.0.1:60748 - cid:3 - <<- [SUB _INBOX.mUz7h6B3wGNf7P7bhyQm54 58] +[7] 2021/01/13 14:22:50.509899 [TRC] 127.0.0.1:60748 - cid:3 - <<- [PING] +[7] 2021/01/13 14:22:50.509912 [TRC] 127.0.0.1:60748 - cid:3 - ->> [PONG] +[7] 2021/01/13 14:22:50.510036 [TRC] 127.0.0.1:60744 - cid:1 - <<- [PUB _INBOX.ZXYA2FSF5VwytqOUdLsYpN.R6hUgpF6 31] +[7] 2021/01/13 14:22:50.510073 [TRC] 127.0.0.1:60744 - cid:1 - <<- MSG_PAYLOAD: ["\x12\x1d_INBOX.mUz7h6B3wGNf7P7bhyQm54"] +[7] 2021/01/13 14:22:50.949500 [TRC] 127.0.0.1:60746 - cid:2 - <<- [PUB _INBOX.ZXYA2FSF5VwytqOUdLsWF7.IqlBSvhV 220] +[7] 2021/01/13 14:22:50.949675 [TRC] 127.0.0.1:60746 - cid:2 - <<- MSG_PAYLOAD: ["\n _STAN.pub.mUz7h6B3wGNf7P7bhyQkHm\x12 _STAN.sub.mUz7h6B3wGNf7P7bhyQkHm\x1a\"_STAN.unsub.mUz7h6B3wGNf7P7bhyQkHm\"\"_STAN.close.mUz7h6B3wGNf7P7bhyQkHm2%_STAN.subclose.mUz7h6B3wGNf7P7bhyQkHm:!_STAN.discover.test-cluster.pings@\x05H\x03P\x01"] +[7] 2021/01/13 14:22:50.949848 [TRC] 127.0.0.1:60748 - cid:3 - <<- [UNSUB 21 ] +[7] 2021/01/13 14:22:50.949912 [TRC] 127.0.0.1:60748 - cid:3 - <-> [DELSUB 21] \ No newline at end of file diff --git a/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log-config.json b/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log-config.json new file mode 100644 index 00000000000..f945a611272 --- /dev/null +++ b/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log-config.json @@ -0,0 +1,11 @@ +{ + "fields": { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + } + }, + "dynamic_fields": { + "event.ingested": ".*" + } +} \ No newline at end of file diff --git a/packages/stan/data_stream/log/_dev/test/system/test-default-config.yml b/packages/stan/data_stream/log/_dev/test/system/test-default-config.yml new file mode 100644 index 00000000000..9c2487cb7a6 --- /dev/null +++ b/packages/stan/data_stream/log/_dev/test/system/test-default-config.yml @@ -0,0 +1,5 @@ +vars: ~ +data_stream: + vars: + paths: + - "{{SERVICE_LOGS_DIR}}/stan.log*" diff --git a/packages/stan/data_stream/log/agent/stream/log.yml.hbs b/packages/stan/data_stream/log/agent/stream/log.yml.hbs new file mode 100644 index 00000000000..e6e2351f067 --- /dev/null +++ b/packages/stan/data_stream/log/agent/stream/log.yml.hbs @@ -0,0 +1,10 @@ +paths: +{{#each paths as |path i|}} + - {{path}} +{{/each}} +exclude_files: [".gz$"] +processors: + - add_fields: + target: '' + fields: + ecs.version: 1.6.0 \ No newline at end of file diff --git a/packages/stan/data_stream/log/elasticsearch/ingest_pipeline/default.yml b/packages/stan/data_stream/log/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 00000000000..7685d33c6da --- /dev/null +++ b/packages/stan/data_stream/log/elasticsearch/ingest_pipeline/default.yml @@ -0,0 +1,197 @@ +--- +description: Pipeline for parsing nats log logs +processors: +- set: + field: event.ingested + value: '{{_ingest.timestamp}}' +- grok: + field: message + patterns: + - \[%{POSINT:process.pid}\]( %{NATSTIME:nats.log.timestamp})? \[%{NATSLOGLEVEL:log.level}\] + %{GREEDYDATA:nats.log.info} + pattern_definitions: + NATSTIME: '%{YEAR}/%{MONTHNUM}/%{MONTHDAY} %{TIME}' + NATSLOGLEVEL: (INF|DBG|WRN|ERR|FTL|TRC) + ignore_missing: true +- grok: + field: nats.log.info + patterns: + - '%{IPV4:client.ip}:%{POSINT:client.port} - cid:%{POSINT:nats.log.client.id} + - %{GREEDYDATA:nats.log.msg.info}' + - '%{GREEDYDATA:nats.log.msg.data}' + ignore_missing: true +- grok: + field: nats.log.msg.info + patterns: + - '%{NATSDIRECTION:network.direction} %{NATSPAYLOAD:nats.log.msg.type}: \[%{GREEDYDATA:nats.log.msg.payload}\]' + - '%{NATSDIRECTION:network.direction} \[%{NATSNOINFO:nats.log.msg.type}\]' + - '%{NATSDIRECTION:network.direction} \[%{NATSUNSUB:nats.log.msg.type}\s+%{POSINT:nats.log.msg.sid}(\s+%{POSINT:nats.log.msg.max_messages})?\]' + - '%{NATSDIRECTION:network.direction} \[%{NATSPUB:nats.log.msg.type}\s+%{NOTSPACE:nats.log.msg.subject}(\s+%{NOTSPACE:nats.log.msg.reply_to})?\s+%{POSINT:nats.log.msg.bytes}\]' + - '%{NATSDIRECTION:network.direction} \[%{NATSSUB:nats.log.msg.type}\s+%{NOTSPACE:nats.log.msg.subject}(\s+%{NOTSPACE:nats.log.msg.queue_group})?\s+%{POSINT:nats.log.msg.sid}\]' + - '%{NATSDIRECTION:network.direction} \[%{NATSMSG:nats.log.msg.type}\s+%{NOTSPACE:nats.log.msg.subject}\s+%{POSINT:nats.log.msg.sid}(\s+%{NOTSPACE:nats.log.msg.reply_to})?\s+%{POSINT:nats.log.msg.bytes}\]' + - '%{NATSDIRECTION:network.direction} \[%{NATSCONNECTION:nats.log.msg.type}\s+%{GREEDYDATA:nats.log.msg.data}\]' + - '%{NATSDIRECTION:network.direction} \[%{NATSERROR:nats.log.msg.type}\s+%{GREEDYDATA:nats.log.msg.error\]' + - '%{GREEDYDATA:nats.log.msg.data}' + pattern_definitions: + NATSDIRECTION: (<<-|->>) + NATSMSG: MSG + NATSPUB: PUB + NATSSUB: SUB + NATSUNSUB: UNSUB + NATSPAYLOAD: MSG_PAYLOAD + NATSERROR: -ERROR + NATSPING: PING + NATSPONG: PONG + NATSOK: OK + NATSCONNECT: CONNECT + NATSINFO: INFO + NATSCONNECTION: (?:%{NATSCONNECT}|%{NATSINFO}) + NATSNOINFO: (?:%{NATSPING}|%{NATSPONG}|%{NATSOK}) + ignore_missing: true +- remove: + field: nats.log.info +- remove: + field: nats.log.msg.info + ignore_missing: true +- remove: + field: nats.log.msg.payload + ignore_missing: true +- remove: + field: message +- rename: + field: nats.log.msg.data + target_field: message + ignore_missing: true +- script: + lang: painless + source: |- + if (ctx.log.level == params.inf) { + ctx.log.level = params.info; + } else if (ctx.log.level == params.dbg) { + ctx.log.level = params.debug; + } else if (ctx.log.level == params.wrn) { + ctx.log.level = params.warning; + } else if (ctx.log.level == params.err) { + ctx.log.level = params.error; + } else if (ctx.log.level == params.ftl) { + ctx.log.level = params.fatal; + } else if (ctx.log.level == params.trc) { + ctx.log.level = params.trace; + } + params: + inf: INF + info: info + dbg: DBG + debug: debug + wrn: WRN + warning: warning + err: ERR + error: error + ftl: FTL + fatal: fatal + trc: TRC + trace: trace +- script: + lang: painless + source: |- + if (ctx.nats.log.msg.type == params.msg) { + ctx.nats.log.msg.type = params.message; + } else if (ctx.nats.log.msg.type == params.pub) { + ctx.nats.log.msg.type = params.publish; + } else if (ctx.nats.log.msg.type == params.sub) { + ctx.nats.log.msg.type = params.subscribe; + } else if (ctx.nats.log.msg.type == params.unsub) { + ctx.nats.log.msg.type = params.unsubscribe; + } else if (ctx.nats.log.msg.type == params.msg_payload) { + ctx.nats.log.msg.type = params.payload; + } else if (ctx.nats.log.msg.type == params.err) { + ctx.nats.log.msg.type = params.error; + } else if (ctx.nats.log.msg.type == params.pi) { + ctx.nats.log.msg.type = params.ping; + } else if (ctx.nats.log.msg.type == params.po) { + ctx.nats.log.msg.type = params.pong; + } else if (ctx.nats.log.msg.type == params.ok) { + ctx.nats.log.msg.type = params.acknowledge; + } else if (ctx.nats.log.msg.type == params.connect) { + ctx.nats.log.msg.type = params.connection; + } else if (ctx.nats.log.msg.type == params.info) { + ctx.nats.log.msg.type = params.information; + } + params: + msg: MSG + message: message + pub: PUB + publish: publish + sub: SUB + subscribe: subscribe + unsub: UNSUB + unsubscribe: unsubscribe + msg_payload: MSG_PAYLOAD + payload: payload + err: -ERROR + error: error + pi: PING + ping: ping + po: PONG + pong: pong + ok: OK + acknowledge: acknowledge + connect: CONNECT + connection: connection + info: INFO + information: information + if: ctx.nats.log.msg?.type != null +- script: + lang: painless + source: |- + if (ctx.network.direction == params.in) { + ctx.network.direction = params.inbound; + } else if (ctx.network.direction == params.out) { + ctx.network.direction = params.outbound; + } + params: + in: <<- + inbound: inbound + out: ->> + outbound: outbound + if: ctx.network?.direction != null +- rename: + field: '@timestamp' + target_field: event.created +- date: + field: nats.log.timestamp + target_field: '@timestamp' + formats: + - yyyy/MM/dd HH:mm:ss.SSSSSS +- remove: + field: nats.log.timestamp +- set: + field: event.kind + value: event +- append: + field: event.type + value: info +- append: + field: event.type + value: error + if: "ctx?.log?.level != null && (ctx.log.level == 'error' || ctx.log.level == 'fatal')" +- append: + field: related.ip + value: "{{client.ip}}" + if: "ctx?.client?.ip != null" +- convert: + ignore_missing: true + field: process.pid + type: long +- convert: + ignore_missing: true + field: client.port + type: long +- convert: + ignore_missing: true + field: nats.log.msg.bytes + type: long +on_failure: +- set: + field: error.message + value: '{{ _ingest.on_failure_message }}' diff --git a/packages/stan/data_stream/log/fields/base-fields.yml b/packages/stan/data_stream/log/fields/base-fields.yml new file mode 100644 index 00000000000..4bd35e76013 --- /dev/null +++ b/packages/stan/data_stream/log/fields/base-fields.yml @@ -0,0 +1,23 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. +- name: input.type + description: Type of Filebeat input. + type: keyword +- name: log.file.path + description: Full path to the log file this event came from. + example: /var/log/fun-times.log + ignore_above: 1024 + type: keyword +- name: log.offset + type: long + description: Offset of the entry in the log file. diff --git a/packages/stan/data_stream/log/fields/ecs.yml b/packages/stan/data_stream/log/fields/ecs.yml new file mode 100644 index 00000000000..a5e79097564 --- /dev/null +++ b/packages/stan/data_stream/log/fields/ecs.yml @@ -0,0 +1,71 @@ +- name: network + type: group + fields: + - name: direction + level: core + type: keyword + ignore_above: 1024 + description: "Direction of the network traffic.\nRecommended values are:\n * inbound\n * outbound\n * internal\n * external\n * unknown\n\nWhen mapping events from a host-based monitoring context, populate this field from the host's point of view.\nWhen mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of your network perimeter." + example: inbound +- name: related + type: group + fields: + - name: ip + level: extended + type: ip + description: All of the IPs seen on your event. +- name: error + type: group + fields: + - name: message + level: core + type: text + description: Error message. +- name: client + type: group + fields: + - name: ip + level: extended + type: ip + description: IP address of the client. + - name: port + level: core + type: long + description: Port of the client. +- name: event + type: group + fields: + - name: kind + description: The kind of the event. The highest categorization field in the hierarchy. + example: alert + ignore_above: 1024 + type: keyword + - name: type + description: Event type. The third categorization field in the hierarchy. + ignore_above: 1024 + type: keyword + - name: created + description: Time when the event was first read by an agent or by your pipeline. + example: '2016-05-23T08:05:34.857Z' + type: date +- name: log + type: group + fields: + - name: level + description: Log level of the log event. + type: keyword +- name: process.pid + type: long + description: Process id. +- name: ecs.version + type: keyword + description: ECS version +- name: message + level: core + type: text + description: '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 diff --git a/packages/stan/data_stream/log/fields/fields.yml b/packages/stan/data_stream/log/fields/fields.yml new file mode 100644 index 00000000000..36469135405 --- /dev/null +++ b/packages/stan/data_stream/log/fields/fields.yml @@ -0,0 +1,47 @@ +- name: nats.log + type: group + release: beta + fields: + - name: client + type: group + fields: + - name: id + type: integer + description: | + The id of the client + - name: msg + type: group + fields: + - name: bytes + type: long + format: bytes + description: | + Size of the payload in bytes + - name: type + type: keyword + description: | + The protocol message type + - name: subject + type: keyword + description: | + Subject name this message was received on + - name: sid + type: integer + description: | + The unique alphanumeric subscription ID of the subject + - name: reply_to + type: keyword + description: | + The inbox subject on which the publisher is listening for responses + - name: max_messages + type: integer + description: | + An optional number of messages to wait for before automatically unsubscribing + - name: error.message + type: text + description: | + Details about the error occurred + - name: queue_group + type: text + description: | + The queue group which subscriber will join diff --git a/packages/stan/data_stream/log/manifest.yml b/packages/stan/data_stream/log/manifest.yml new file mode 100644 index 00000000000..0cdeea6b28b --- /dev/null +++ b/packages/stan/data_stream/log/manifest.yml @@ -0,0 +1,17 @@ +type: logs +title: NATS logs +release: experimental +streams: + - input: logfile + vars: + - name: paths + type: text + title: Paths + multi: true + required: true + show_user: true + default: + - /var/log/nats/nats.log* + template_path: log.yml.hbs + title: NATS logs (log) + description: Collect NATS logs using log input diff --git a/packages/stan/data_stream/log/sample_event.json b/packages/stan/data_stream/log/sample_event.json new file mode 100644 index 00000000000..ce4ee4ddb54 --- /dev/null +++ b/packages/stan/data_stream/log/sample_event.json @@ -0,0 +1,89 @@ +{ + "nats": { + "log": { + "msg": { + "type": "payload" + }, + "client": { + "id": "86" + } + } + }, + "agent": { + "hostname": "5706c620a165", + "name": "5706c620a165", + "id": "25c804ef-d8c8-4a2e-9228-64213daef566", + "type": "filebeat", + "ephemeral_id": "4f1426bb-db10-4b5d-9e1c-ba6da401dc34", + "version": "7.11.0" + }, + "process": { + "pid": "6" + }, + "log": { + "file": { + "path": "/var/log/nats/nats.log" + }, + "offset": 36865655, + "level": "trace" + }, + "elastic_agent": { + "id": "5a7b52c1-66ae-47ce-ad18-70dadf1bedfa", + "version": "7.11.0", + "snapshot": true + }, + "network": { + "direction": "inbound" + }, + "input": { + "type": "log" + }, + "@timestamp": "2020-11-25T11:50:17.759Z", + "ecs": { + "version": "1.6.0" + }, + "related": { + "ip": [ + "192.168.192.3" + ] + }, + "data_stream": { + "namespace": "default", + "type": "logs", + "dataset": "nats.log" + }, + "host": { + "hostname": "5706c620a165", + "os": { + "kernel": "4.9.184-linuxkit", + "codename": "Core", + "name": "CentOS Linux", + "family": "redhat", + "version": "7 (Core)", + "platform": "centos" + }, + "containerized": true, + "ip": [ + "192.168.192.8" + ], + "name": "5706c620a165", + "id": "06c26569966fd125c15acac5d7feffb6", + "mac": [ + "02:42:c0:a8:c0:08" + ], + "architecture": "x86_64" + }, + "client": { + "port": "53482", + "ip": "192.168.192.3" + }, + "event": { + "ingested": "2020-11-25T11:53:10.021181400Z", + "created": "2020-11-25T11:53:04.192Z", + "kind": "event", + "type": [ + "info" + ], + "dataset": "nats.log" + } +} \ No newline at end of file diff --git a/packages/stan/data_stream/stats/_dev/test/system/test-default-config.yml b/packages/stan/data_stream/stats/_dev/test/system/test-default-config.yml new file mode 100644 index 00000000000..83fc84f62ea --- /dev/null +++ b/packages/stan/data_stream/stats/_dev/test/system/test-default-config.yml @@ -0,0 +1,5 @@ +vars: + hosts: + - http://{{Hostname}}:{{Port}} +data_stream: + vars: ~ diff --git a/packages/stan/data_stream/subscriptions/_dev/test/system/test-default-config.yml b/packages/stan/data_stream/subscriptions/_dev/test/system/test-default-config.yml new file mode 100644 index 00000000000..83fc84f62ea --- /dev/null +++ b/packages/stan/data_stream/subscriptions/_dev/test/system/test-default-config.yml @@ -0,0 +1,5 @@ +vars: + hosts: + - http://{{Hostname}}:{{Port}} +data_stream: + vars: ~ diff --git a/packages/stan/manifest.yml b/packages/stan/manifest.yml index 1481b33144c..6e731bb6bca 100644 --- a/packages/stan/manifest.yml +++ b/packages/stan/manifest.yml @@ -1,31 +1,34 @@ name: stan -title: Stan -version: 0.0.1 +title: STAN +version: 0.1.0 release: experimental -description: Stan Integration +description: STAN Integration type: integration icons: - src: /img/stan.svg path: "" - title: stan + title: STAN Logo size: 32x32 type: image/svg+xml format_version: 1.0.0 license: basic categories: [] conditions: - kibana.version: ^7.9.0 + kibana.version: ">=7.11.0" screenshots: - src: /img/metricbeat-stan-overview.png path: "" - title: metricbeat stan overview + title: Metricbeat STAN Dashboard size: 1829x447 type: image/png policy_templates: - name: stan - title: Stan metrics - description: Collect metrics from Stan instances + title: STAN Logs and Metrics + description: Collect logs and metrics from STAN instances inputs: + - type: logfile + title: 'Collect STAN application logs (input: logfile)' + description: 'Collecting application logs from STAN instances (input: logfile)' - type: stan/metrics vars: - name: hosts @@ -36,7 +39,7 @@ policy_templates: show_user: true default: - localhost:8222 - title: Collect Stan channels, stats and subscriptions metrics - description: Collecting channels, stats and subscriptions metrics from Stan instances + title: Collect STAN metrics + description: Collecting metrics about channels, stats and subscriptions from STAN instances owner: github: elastic/integrations From 6b645156480742f8cfe63501afdd3ddad47ce0d5 Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Thu, 14 Jan 2021 15:05:18 +0200 Subject: [PATCH 03/14] lint Signed-off-by: ChrsMark --- .../data_stream/channels/sample_event.json | 1 + .../stan/data_stream/log/sample_event.json | 90 +---------- .../stan/data_stream/stats/sample_event.json | 1 + .../subscriptions/sample_event.json | 1 + packages/stan/docs/README.md | 148 +++++++++++++++++- packages/stan/manifest.yml | 21 ++- 6 files changed, 161 insertions(+), 101 deletions(-) create mode 100644 packages/stan/data_stream/channels/sample_event.json create mode 100644 packages/stan/data_stream/stats/sample_event.json create mode 100644 packages/stan/data_stream/subscriptions/sample_event.json diff --git a/packages/stan/data_stream/channels/sample_event.json b/packages/stan/data_stream/channels/sample_event.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/packages/stan/data_stream/channels/sample_event.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/packages/stan/data_stream/log/sample_event.json b/packages/stan/data_stream/log/sample_event.json index ce4ee4ddb54..9e26dfeeb6e 100644 --- a/packages/stan/data_stream/log/sample_event.json +++ b/packages/stan/data_stream/log/sample_event.json @@ -1,89 +1 @@ -{ - "nats": { - "log": { - "msg": { - "type": "payload" - }, - "client": { - "id": "86" - } - } - }, - "agent": { - "hostname": "5706c620a165", - "name": "5706c620a165", - "id": "25c804ef-d8c8-4a2e-9228-64213daef566", - "type": "filebeat", - "ephemeral_id": "4f1426bb-db10-4b5d-9e1c-ba6da401dc34", - "version": "7.11.0" - }, - "process": { - "pid": "6" - }, - "log": { - "file": { - "path": "/var/log/nats/nats.log" - }, - "offset": 36865655, - "level": "trace" - }, - "elastic_agent": { - "id": "5a7b52c1-66ae-47ce-ad18-70dadf1bedfa", - "version": "7.11.0", - "snapshot": true - }, - "network": { - "direction": "inbound" - }, - "input": { - "type": "log" - }, - "@timestamp": "2020-11-25T11:50:17.759Z", - "ecs": { - "version": "1.6.0" - }, - "related": { - "ip": [ - "192.168.192.3" - ] - }, - "data_stream": { - "namespace": "default", - "type": "logs", - "dataset": "nats.log" - }, - "host": { - "hostname": "5706c620a165", - "os": { - "kernel": "4.9.184-linuxkit", - "codename": "Core", - "name": "CentOS Linux", - "family": "redhat", - "version": "7 (Core)", - "platform": "centos" - }, - "containerized": true, - "ip": [ - "192.168.192.8" - ], - "name": "5706c620a165", - "id": "06c26569966fd125c15acac5d7feffb6", - "mac": [ - "02:42:c0:a8:c0:08" - ], - "architecture": "x86_64" - }, - "client": { - "port": "53482", - "ip": "192.168.192.3" - }, - "event": { - "ingested": "2020-11-25T11:53:10.021181400Z", - "created": "2020-11-25T11:53:04.192Z", - "kind": "event", - "type": [ - "info" - ], - "dataset": "nats.log" - } -} \ No newline at end of file +{} \ No newline at end of file diff --git a/packages/stan/data_stream/stats/sample_event.json b/packages/stan/data_stream/stats/sample_event.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/packages/stan/data_stream/stats/sample_event.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/packages/stan/data_stream/subscriptions/sample_event.json b/packages/stan/data_stream/subscriptions/sample_event.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/packages/stan/data_stream/subscriptions/sample_event.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/packages/stan/docs/README.md b/packages/stan/docs/README.md index 30404ce4c54..98c0803465f 100644 --- a/packages/stan/docs/README.md +++ b/packages/stan/docs/README.md @@ -1 +1,147 @@ -TODO \ No newline at end of file +# STAN integration + +This integration is used to collect logs and metrics from [STAN servers](https://github.com/nats-io/stan.go). +The integration collects metrics from [STAN monitoring server APIs](https://github.com/nats-io/nats-streaming-server/blob/master/server/monitor.go). + + +## Compatibility + +The STAN package is tested with Stan 0.15.1 + +## Logs + +### log + +The `log` dataset collects the STAN logs. + +An example event for `log` looks as following: + +```$json +{} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| client.ip | IP address of the client. | ip | +| client.port | Port of the client. | long | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version | keyword | +| error.message | Error message. | text | +| event.created | Time when the event was first read by an agent or by your pipeline. | date | +| event.kind | The kind of the event. The highest categorization field in the hierarchy. | keyword | +| event.type | Event type. The third categorization field in the hierarchy. | keyword | +| input.type | Type of Filebeat input. | keyword | +| log.file.path | Full path to the log file this event came from. | keyword | +| log.level | Log level of the log event. | keyword | +| log.offset | Offset of the entry in the log file. | long | +| message | 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. | text | +| nats.log.client.id | The id of the client | integer | +| nats.log.msg.bytes | Size of the payload in bytes | long | +| nats.log.msg.error.message | Details about the error occurred | text | +| nats.log.msg.max_messages | An optional number of messages to wait for before automatically unsubscribing | integer | +| nats.log.msg.queue_group | The queue group which subscriber will join | text | +| nats.log.msg.reply_to | The inbox subject on which the publisher is listening for responses | keyword | +| nats.log.msg.sid | The unique alphanumeric subscription ID of the subject | integer | +| nats.log.msg.subject | Subject name this message was received on | keyword | +| nats.log.msg.type | The protocol message type | keyword | +| network.direction | Direction of the network traffic. Recommended values are: * inbound * outbound * internal * external * unknown When mapping events from a host-based monitoring context, populate this field from the host's point of view. When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of your network perimeter. | keyword | +| process.pid | Process id. | long | +| related.ip | All of the IPs seen on your event. | ip | + + +## Metrics + +The default datasets are `stats`, `channels`, and `subscriptions`. + +### stats + +This is the `stats` dataset of the STAN package, in charge of retrieving generic +metrics from a STAN instance. + +An example event for `stats` looks as following: + +```$json +{} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| stan.cluster.id | The cluster ID | keyword | +| stan.server.id | The server ID | keyword | +| stan.stats.bytes | Number of bytes consumed across all STAN queues | long | +| stan.stats.channels | The number of STAN channels | integer | +| stan.stats.clients | The number of STAN clients | integer | +| stan.stats.messages | Number of messages across all STAN queues | long | +| stan.stats.role | If clustered, role of this node in the cluster (Leader, Follower, Candidate) | keyword | +| stan.stats.state | The cluster / streaming configuration state (STANDALONE, CLUSTERED) | keyword | +| stan.stats.subscriptions | The number of STAN streaming subscriptions | integer | + + +### channels + +This is the `channels` dataset of the STAN package, in charge of retrieving +metrics about channels from a STAN instance. + +An example event for `channels` looks as following: + +```$json +{} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| stan.channels.bytes | The number of STAN bytes in the channel | long | +| stan.channels.depth | Queue depth based upon current sequence number and highest reported subscriber sequence number | long | +| stan.channels.first_seq | First sequence number stored in the channel. If first_seq > min([seq in subscriptions]) data loss has possibly occurred | long | +| stan.channels.last_seq | Last sequence number stored in the channel | long | +| stan.channels.messages | The number of STAN streaming messages | long | +| stan.channels.name | The name of the STAN streaming channel | keyword | +| stan.cluster.id | The cluster ID | keyword | +| stan.server.id | The server ID | keyword | + + +### subscriptions + +This is the `subscriptions` dataset of the STAN package, in charge of retrieving +metrics about subscriptions from a STAN instance. + +An example event for `subscriptions` looks as following: + +```$json +{} +``` + +**Exported fields** + +| Field | Description | Type | +|---|---|---| +| @timestamp | Event timestamp. | date | +| data_stream.dataset | Data stream dataset. | constant_keyword | +| data_stream.namespace | Data stream namespace. | constant_keyword | +| data_stream.type | Data stream type. | constant_keyword | +| stan.cluster.id | The cluster ID | keyword | +| stan.server.id | The server ID | keyword | +| stan.subscriptions.channel | The name of the STAN channel the subscription is associated with | keyword | +| stan.subscriptions.id | The name of the STAN channel subscription (client_id) | keyword | +| stan.subscriptions.last_sent | Last known sequence number of the subscription that was acked | long | +| stan.subscriptions.offline | Is the subscriber marked as offline? | boolean | +| stan.subscriptions.pending | Number of pending messages from / to the subscriber | long | +| stan.subscriptions.queue | The name of the NATS queue that the STAN channel subscription is associated with, if any | keyword | +| stan.subscriptions.stalled | Is the subscriber known to be stalled? | boolean | diff --git a/packages/stan/manifest.yml b/packages/stan/manifest.yml index 6e731bb6bca..bb67ed2ec48 100644 --- a/packages/stan/manifest.yml +++ b/packages/stan/manifest.yml @@ -5,22 +5,21 @@ release: experimental description: STAN Integration type: integration icons: -- src: /img/stan.svg - path: "" - title: STAN Logo - size: 32x32 - type: image/svg+xml + - src: /img/stan.svg + title: STAN Logo + size: 32x32 + type: image/svg+xml format_version: 1.0.0 license: basic -categories: [] +categories: + - message_queue conditions: kibana.version: ">=7.11.0" screenshots: -- src: /img/metricbeat-stan-overview.png - path: "" - title: Metricbeat STAN Dashboard - size: 1829x447 - type: image/png + - src: /img/metricbeat-stan-overview.png + title: Metricbeat STAN Dashboard + size: 1829x447 + type: image/png policy_templates: - name: stan title: STAN Logs and Metrics From 9983f802230246f469d2ce0bb9e8d0e16ae0e73e Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Thu, 14 Jan 2021 17:38:57 +0200 Subject: [PATCH 04/14] Add ecs fields Signed-off-by: ChrsMark --- packages/stan/data_stream/channels/fields/ecs.yml | 9 +++++++++ packages/stan/data_stream/stats/fields/ecs.yml | 9 +++++++++ packages/stan/data_stream/subscriptions/fields/ecs.yml | 9 +++++++++ packages/stan/docs/README.md | 9 +++++++++ 4 files changed, 36 insertions(+) create mode 100644 packages/stan/data_stream/channels/fields/ecs.yml create mode 100644 packages/stan/data_stream/stats/fields/ecs.yml create mode 100644 packages/stan/data_stream/subscriptions/fields/ecs.yml diff --git a/packages/stan/data_stream/channels/fields/ecs.yml b/packages/stan/data_stream/channels/fields/ecs.yml new file mode 100644 index 00000000000..d7ce11b7c16 --- /dev/null +++ b/packages/stan/data_stream/channels/fields/ecs.yml @@ -0,0 +1,9 @@ +- name: ecs.version + type: keyword + description: ECS version +- name: service.address + type: keyword + description: Service address +- name: service.type + type: keyword + description: Service type diff --git a/packages/stan/data_stream/stats/fields/ecs.yml b/packages/stan/data_stream/stats/fields/ecs.yml new file mode 100644 index 00000000000..d7ce11b7c16 --- /dev/null +++ b/packages/stan/data_stream/stats/fields/ecs.yml @@ -0,0 +1,9 @@ +- name: ecs.version + type: keyword + description: ECS version +- name: service.address + type: keyword + description: Service address +- name: service.type + type: keyword + description: Service type diff --git a/packages/stan/data_stream/subscriptions/fields/ecs.yml b/packages/stan/data_stream/subscriptions/fields/ecs.yml new file mode 100644 index 00000000000..d7ce11b7c16 --- /dev/null +++ b/packages/stan/data_stream/subscriptions/fields/ecs.yml @@ -0,0 +1,9 @@ +- name: ecs.version + type: keyword + description: ECS version +- name: service.address + type: keyword + description: Service address +- name: service.type + type: keyword + description: Service type diff --git a/packages/stan/docs/README.md b/packages/stan/docs/README.md index 98c0803465f..d3c53d78099 100644 --- a/packages/stan/docs/README.md +++ b/packages/stan/docs/README.md @@ -77,6 +77,9 @@ An example event for `stats` looks as following: | data_stream.dataset | Data stream dataset. | constant_keyword | | data_stream.namespace | Data stream namespace. | constant_keyword | | data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version | keyword | +| service.address | Service address | keyword | +| service.type | Service type | keyword | | stan.cluster.id | The cluster ID | keyword | | stan.server.id | The server ID | keyword | | stan.stats.bytes | Number of bytes consumed across all STAN queues | long | @@ -107,6 +110,9 @@ An example event for `channels` looks as following: | data_stream.dataset | Data stream dataset. | constant_keyword | | data_stream.namespace | Data stream namespace. | constant_keyword | | data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version | keyword | +| service.address | Service address | keyword | +| service.type | Service type | keyword | | stan.channels.bytes | The number of STAN bytes in the channel | long | | stan.channels.depth | Queue depth based upon current sequence number and highest reported subscriber sequence number | long | | stan.channels.first_seq | First sequence number stored in the channel. If first_seq > min([seq in subscriptions]) data loss has possibly occurred | long | @@ -136,6 +142,9 @@ An example event for `subscriptions` looks as following: | data_stream.dataset | Data stream dataset. | constant_keyword | | data_stream.namespace | Data stream namespace. | constant_keyword | | data_stream.type | Data stream type. | constant_keyword | +| ecs.version | ECS version | keyword | +| service.address | Service address | keyword | +| service.type | Service type | keyword | | stan.cluster.id | The cluster ID | keyword | | stan.server.id | The server ID | keyword | | stan.subscriptions.channel | The name of the STAN channel the subscription is associated with | keyword | From c54d25b1abacf81c2960d87005e5db39e5c1b38d Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Fri, 15 Jan 2021 10:20:55 +0200 Subject: [PATCH 05/14] Format pkg Signed-off-by: ChrsMark --- .../_dev/deploy/docker/docker-compose.yml | 2 +- .../data_stream/channels/fields/fields.yml | 48 ++++++++-------- .../channels/fields/package-fields.yml | 16 +++--- .../stan/data_stream/channels/manifest.yml | 22 ++++---- .../stan/data_stream/stats/fields/fields.yml | 56 +++++++++---------- .../stats/fields/package-fields.yml | 16 +++--- packages/stan/data_stream/stats/manifest.yml | 22 ++++---- .../subscriptions/fields/fields.yml | 56 +++++++++---------- .../subscriptions/fields/package-fields.yml | 16 +++--- .../data_stream/subscriptions/manifest.yml | 22 ++++---- packages/stan/manifest.yml | 38 ++++++------- 11 files changed, 157 insertions(+), 157 deletions(-) diff --git a/packages/stan/_dev/deploy/docker/docker-compose.yml b/packages/stan/_dev/deploy/docker/docker-compose.yml index 3e3d0318a75..f94ef1bc888 100644 --- a/packages/stan/_dev/deploy/docker/docker-compose.yml +++ b/packages/stan/_dev/deploy/docker/docker-compose.yml @@ -8,4 +8,4 @@ services: ports: - 8222 volumes: - - ${SERVICE_LOGS_DIR}:/var/log/stan \ No newline at end of file + - ${SERVICE_LOGS_DIR}:/var/log/stan diff --git a/packages/stan/data_stream/channels/fields/fields.yml b/packages/stan/data_stream/channels/fields/fields.yml index bd6aa8e92cd..f47d3ef50cb 100644 --- a/packages/stan/data_stream/channels/fields/fields.yml +++ b/packages/stan/data_stream/channels/fields/fields.yml @@ -2,27 +2,27 @@ type: group release: ga fields: - - name: name - type: keyword - description: | - The name of the STAN streaming channel - - name: messages - type: long - description: | - The number of STAN streaming messages - - name: bytes - type: long - description: | - The number of STAN bytes in the channel - - name: first_seq - type: long - description: | - First sequence number stored in the channel. If first_seq > min([seq in subscriptions]) data loss has possibly occurred - - name: last_seq - type: long - description: | - Last sequence number stored in the channel - - name: depth - type: long - description: | - Queue depth based upon current sequence number and highest reported subscriber sequence number + - name: name + type: keyword + description: | + The name of the STAN streaming channel + - name: messages + type: long + description: | + The number of STAN streaming messages + - name: bytes + type: long + description: | + The number of STAN bytes in the channel + - name: first_seq + type: long + description: | + First sequence number stored in the channel. If first_seq > min([seq in subscriptions]) data loss has possibly occurred + - name: last_seq + type: long + description: | + Last sequence number stored in the channel + - name: depth + type: long + description: | + Queue depth based upon current sequence number and highest reported subscriber sequence number diff --git a/packages/stan/data_stream/channels/fields/package-fields.yml b/packages/stan/data_stream/channels/fields/package-fields.yml index 3100be0e0bc..881b7127a50 100644 --- a/packages/stan/data_stream/channels/fields/package-fields.yml +++ b/packages/stan/data_stream/channels/fields/package-fields.yml @@ -1,11 +1,11 @@ - name: stan type: group fields: - - name: server.id - type: keyword - description: | - The server ID - - name: cluster.id - type: keyword - description: | - The cluster ID + - name: server.id + type: keyword + description: | + The server ID + - name: cluster.id + type: keyword + description: | + The cluster ID diff --git a/packages/stan/data_stream/channels/manifest.yml b/packages/stan/data_stream/channels/manifest.yml index a17c39b1f6e..3000a2c87e5 100644 --- a/packages/stan/data_stream/channels/manifest.yml +++ b/packages/stan/data_stream/channels/manifest.yml @@ -2,14 +2,14 @@ type: metrics title: Stan channels metrics release: experimental streams: -- input: stan/metrics - vars: - - name: period - type: text - title: Period - multi: false - required: true - show_user: true - default: 60s - title: Stan channels metrics - description: Collect Stan channels metrics + - input: stan/metrics + vars: + - name: period + type: text + title: Period + multi: false + required: true + show_user: true + default: 60s + title: Stan channels metrics + description: Collect Stan channels metrics diff --git a/packages/stan/data_stream/stats/fields/fields.yml b/packages/stan/data_stream/stats/fields/fields.yml index a8ad490292a..786b4ace439 100644 --- a/packages/stan/data_stream/stats/fields/fields.yml +++ b/packages/stan/data_stream/stats/fields/fields.yml @@ -2,31 +2,31 @@ type: group release: ga fields: - - name: state - type: keyword - description: | - The cluster / streaming configuration state (STANDALONE, CLUSTERED) - - name: role - type: keyword - description: | - If clustered, role of this node in the cluster (Leader, Follower, Candidate) - - name: clients - type: integer - description: | - The number of STAN clients - - name: subscriptions - type: integer - description: | - The number of STAN streaming subscriptions - - name: channels - type: integer - description: | - The number of STAN channels - - name: messages - type: long - description: | - Number of messages across all STAN queues - - name: bytes - type: long - description: | - Number of bytes consumed across all STAN queues + - name: state + type: keyword + description: | + The cluster / streaming configuration state (STANDALONE, CLUSTERED) + - name: role + type: keyword + description: | + If clustered, role of this node in the cluster (Leader, Follower, Candidate) + - name: clients + type: integer + description: | + The number of STAN clients + - name: subscriptions + type: integer + description: | + The number of STAN streaming subscriptions + - name: channels + type: integer + description: | + The number of STAN channels + - name: messages + type: long + description: | + Number of messages across all STAN queues + - name: bytes + type: long + description: | + Number of bytes consumed across all STAN queues diff --git a/packages/stan/data_stream/stats/fields/package-fields.yml b/packages/stan/data_stream/stats/fields/package-fields.yml index 3100be0e0bc..881b7127a50 100644 --- a/packages/stan/data_stream/stats/fields/package-fields.yml +++ b/packages/stan/data_stream/stats/fields/package-fields.yml @@ -1,11 +1,11 @@ - name: stan type: group fields: - - name: server.id - type: keyword - description: | - The server ID - - name: cluster.id - type: keyword - description: | - The cluster ID + - name: server.id + type: keyword + description: | + The server ID + - name: cluster.id + type: keyword + description: | + The cluster ID diff --git a/packages/stan/data_stream/stats/manifest.yml b/packages/stan/data_stream/stats/manifest.yml index ccddcf23d65..37f677c9bf8 100644 --- a/packages/stan/data_stream/stats/manifest.yml +++ b/packages/stan/data_stream/stats/manifest.yml @@ -2,14 +2,14 @@ type: metrics title: Stan stats metrics release: experimental streams: -- input: stan/metrics - vars: - - name: period - type: text - title: Period - multi: false - required: true - show_user: true - default: 60s - title: Stan stats metrics - description: Collect Stan stats metrics + - input: stan/metrics + vars: + - name: period + type: text + title: Period + multi: false + required: true + show_user: true + default: 60s + title: Stan stats metrics + description: Collect Stan stats metrics diff --git a/packages/stan/data_stream/subscriptions/fields/fields.yml b/packages/stan/data_stream/subscriptions/fields/fields.yml index b225c893d4a..54ab2816726 100644 --- a/packages/stan/data_stream/subscriptions/fields/fields.yml +++ b/packages/stan/data_stream/subscriptions/fields/fields.yml @@ -2,31 +2,31 @@ type: group release: ga fields: - - name: id - type: keyword - description: | - The name of the STAN channel subscription (client_id) - - name: channel - type: keyword - description: | - The name of the STAN channel the subscription is associated with - - name: queue - type: keyword - description: | - The name of the NATS queue that the STAN channel subscription is associated with, if any - - name: last_sent - type: long - description: | - Last known sequence number of the subscription that was acked - - name: pending - type: long - description: | - Number of pending messages from / to the subscriber - - name: offline - type: boolean - description: | - Is the subscriber marked as offline? - - name: stalled - type: boolean - description: | - Is the subscriber known to be stalled? + - name: id + type: keyword + description: | + The name of the STAN channel subscription (client_id) + - name: channel + type: keyword + description: | + The name of the STAN channel the subscription is associated with + - name: queue + type: keyword + description: | + The name of the NATS queue that the STAN channel subscription is associated with, if any + - name: last_sent + type: long + description: | + Last known sequence number of the subscription that was acked + - name: pending + type: long + description: | + Number of pending messages from / to the subscriber + - name: offline + type: boolean + description: | + Is the subscriber marked as offline? + - name: stalled + type: boolean + description: | + Is the subscriber known to be stalled? diff --git a/packages/stan/data_stream/subscriptions/fields/package-fields.yml b/packages/stan/data_stream/subscriptions/fields/package-fields.yml index 3100be0e0bc..881b7127a50 100644 --- a/packages/stan/data_stream/subscriptions/fields/package-fields.yml +++ b/packages/stan/data_stream/subscriptions/fields/package-fields.yml @@ -1,11 +1,11 @@ - name: stan type: group fields: - - name: server.id - type: keyword - description: | - The server ID - - name: cluster.id - type: keyword - description: | - The cluster ID + - name: server.id + type: keyword + description: | + The server ID + - name: cluster.id + type: keyword + description: | + The cluster ID diff --git a/packages/stan/data_stream/subscriptions/manifest.yml b/packages/stan/data_stream/subscriptions/manifest.yml index 6a5419dda35..c9eab51c606 100644 --- a/packages/stan/data_stream/subscriptions/manifest.yml +++ b/packages/stan/data_stream/subscriptions/manifest.yml @@ -2,14 +2,14 @@ type: metrics title: Stan subscriptions metrics release: experimental streams: -- input: stan/metrics - vars: - - name: period - type: text - title: Period - multi: false - required: true - show_user: true - default: 60s - title: Stan subscriptions metrics - description: Collect Stan subscriptions metrics + - input: stan/metrics + vars: + - name: period + type: text + title: Period + multi: false + required: true + show_user: true + default: 60s + title: Stan subscriptions metrics + description: Collect Stan subscriptions metrics diff --git a/packages/stan/manifest.yml b/packages/stan/manifest.yml index bb67ed2ec48..42519e1707c 100644 --- a/packages/stan/manifest.yml +++ b/packages/stan/manifest.yml @@ -21,24 +21,24 @@ screenshots: size: 1829x447 type: image/png policy_templates: -- name: stan - title: STAN Logs and Metrics - description: Collect logs and metrics from STAN instances - inputs: - - type: logfile - title: 'Collect STAN application logs (input: logfile)' - description: 'Collecting application logs from STAN instances (input: logfile)' - - type: stan/metrics - vars: - - name: hosts - type: text - title: Hosts - multi: true - required: true - show_user: true - default: - - localhost:8222 - title: Collect STAN metrics - description: Collecting metrics about channels, stats and subscriptions from STAN instances + - name: stan + title: STAN Logs and Metrics + description: Collect logs and metrics from STAN instances + inputs: + - type: logfile + title: 'Collect STAN application logs (input: logfile)' + description: 'Collecting application logs from STAN instances (input: logfile)' + - type: stan/metrics + vars: + - name: hosts + type: text + title: Hosts + multi: true + required: true + show_user: true + default: + - localhost:8222 + title: Collect STAN metrics + description: Collecting metrics about channels, stats and subscriptions from STAN instances owner: github: elastic/integrations From 3cd99fda47849f61681a9c7a3bd1a8ffd86fcb38 Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Fri, 15 Jan 2021 14:31:50 +0200 Subject: [PATCH 06/14] fix log datastream Signed-off-by: ChrsMark --- packages/stan/_dev/deploy/docker/run.sh | 6 +- .../data_stream/channels/sample_event.json | 75 +++++- .../elasticsearch/ingest_pipeline/default.yml | 126 ++++----- .../stan/data_stream/log/fields/fields.yml | 2 +- packages/stan/data_stream/log/manifest.yml | 8 +- .../stan/data_stream/stats/sample_event.json | 75 +++++- .../subscriptions/sample_event.json | 75 +++++- packages/stan/docs/README.md | 243 +++++++++++++++++- 8 files changed, 525 insertions(+), 85 deletions(-) diff --git a/packages/stan/_dev/deploy/docker/run.sh b/packages/stan/_dev/deploy/docker/run.sh index de7445f32ad..e2de463e057 100755 --- a/packages/stan/_dev/deploy/docker/run.sh +++ b/packages/stan/_dev/deploy/docker/run.sh @@ -2,8 +2,10 @@ /nats-streaming-server -DV -l /var/log/stan/stan.log -m 8222 & sleep 2 -/stan-bench -np 0 -ns 100 -qgroup T -n 100000000 -ms 1024 foo & -/stan-bench -np 10 -ns 10 -n 1000000000 -ms 1024 bar & +while true; do /stan-bench -np 0 -ns 100 -qgroup T -n 100000000 -ms 1024 foo; done & +while true; do /stan-bench -np 10 -ns 10 -n 1000000000 -ms 1024 bar; done & +/stan-bench -np 0 -ns 100 -qgroup T -n 100000000 -ms 1024 fooZ & +/stan-bench -np 10 -ns 10 -n 1000000000 -ms 1024 baz & # Make sure the container keeps running tail -f /dev/null diff --git a/packages/stan/data_stream/channels/sample_event.json b/packages/stan/data_stream/channels/sample_event.json index 9e26dfeeb6e..d7a04a66d5e 100644 --- a/packages/stan/data_stream/channels/sample_event.json +++ b/packages/stan/data_stream/channels/sample_event.json @@ -1 +1,74 @@ -{} \ No newline at end of file +{ + "@timestamp": "2021-01-15T12:23:32.592Z", + "service": { + "address": "http://elastic-package-service_stan_1:8222/streaming/channelsz?subs=1", + "type": "stan" + }, + "event": { + "duration": 8406132380, + "dataset": "stan.channels", + "module": "stan" + }, + "metricset": { + "name": "channels", + "period": 60000 + }, + "stan": { + "cluster": { + "id": "test-cluster" + }, + "server": { + "id": "kvQEpbFak88fHAnWCZxZDL" + }, + "channels": { + "depth": 3966, + "name": "bar", + "messages": 4990, + "bytes": 5214423, + "first_seq": 1, + "last_seq": 4990 + } + }, + "elastic_agent": { + "version": "7.11.0", + "id": "df58bff0-5714-11eb-b094-915beebb3c66", + "snapshot": true + }, + "ecs": { + "version": "1.7.0" + }, + "data_stream": { + "type": "metrics", + "dataset": "stan.channels", + "namespace": "default" + }, + "host": { + "architecture": "x86_64", + "os": { + "kernel": "4.9.184-linuxkit", + "codename": "Core", + "platform": "centos", + "version": "7 (Core)", + "family": "redhat", + "name": "CentOS Linux" + }, + "id": "88c3c3ec3afebed7631b44a69754359e", + "name": "ec072aa02d8b", + "containerized": true, + "ip": [ + "172.19.0.5" + ], + "mac": [ + "02:42:ac:13:00:05" + ], + "hostname": "ec072aa02d8b" + }, + "agent": { + "version": "7.11.0", + "hostname": "ec072aa02d8b", + "ephemeral_id": "8d73aff0-201b-4260-9e89-cd519348de03", + "id": "67b9c377-7d0c-4a69-9351-2befe6386fbd", + "name": "ec072aa02d8b", + "type": "metricbeat" + } +} \ No newline at end of file diff --git a/packages/stan/data_stream/log/elasticsearch/ingest_pipeline/default.yml b/packages/stan/data_stream/log/elasticsearch/ingest_pipeline/default.yml index 7685d33c6da..7a735cdfe54 100644 --- a/packages/stan/data_stream/log/elasticsearch/ingest_pipeline/default.yml +++ b/packages/stan/data_stream/log/elasticsearch/ingest_pipeline/default.yml @@ -1,5 +1,5 @@ --- -description: Pipeline for parsing nats log logs +description: Pipeline for parsing stan log logs processors: - set: field: event.ingested @@ -7,59 +7,59 @@ processors: - grok: field: message patterns: - - \[%{POSINT:process.pid}\]( %{NATSTIME:nats.log.timestamp})? \[%{NATSLOGLEVEL:log.level}\] - %{GREEDYDATA:nats.log.info} + - \[%{POSINT:process.pid}\]( %{STANTIME:stan.log.timestamp})? \[%{STANLOGLEVEL:log.level}\] + %{GREEDYDATA:stan.log.info} pattern_definitions: - NATSTIME: '%{YEAR}/%{MONTHNUM}/%{MONTHDAY} %{TIME}' - NATSLOGLEVEL: (INF|DBG|WRN|ERR|FTL|TRC) + STANTIME: '%{YEAR}/%{MONTHNUM}/%{MONTHDAY} %{TIME}' + STANLOGLEVEL: (INF|DBG|WRN|ERR|FTL|TRC) ignore_missing: true - grok: - field: nats.log.info + field: stan.log.info patterns: - - '%{IPV4:client.ip}:%{POSINT:client.port} - cid:%{POSINT:nats.log.client.id} - - %{GREEDYDATA:nats.log.msg.info}' - - '%{GREEDYDATA:nats.log.msg.data}' + - '%{IPV4:client.ip}:%{POSINT:client.port} - cid:%{POSINT:stan.log.client.id} + - %{GREEDYDATA:stan.log.msg.info}' + - '%{GREEDYDATA:stan.log.msg.data}' ignore_missing: true - grok: - field: nats.log.msg.info + field: stan.log.msg.info patterns: - - '%{NATSDIRECTION:network.direction} %{NATSPAYLOAD:nats.log.msg.type}: \[%{GREEDYDATA:nats.log.msg.payload}\]' - - '%{NATSDIRECTION:network.direction} \[%{NATSNOINFO:nats.log.msg.type}\]' - - '%{NATSDIRECTION:network.direction} \[%{NATSUNSUB:nats.log.msg.type}\s+%{POSINT:nats.log.msg.sid}(\s+%{POSINT:nats.log.msg.max_messages})?\]' - - '%{NATSDIRECTION:network.direction} \[%{NATSPUB:nats.log.msg.type}\s+%{NOTSPACE:nats.log.msg.subject}(\s+%{NOTSPACE:nats.log.msg.reply_to})?\s+%{POSINT:nats.log.msg.bytes}\]' - - '%{NATSDIRECTION:network.direction} \[%{NATSSUB:nats.log.msg.type}\s+%{NOTSPACE:nats.log.msg.subject}(\s+%{NOTSPACE:nats.log.msg.queue_group})?\s+%{POSINT:nats.log.msg.sid}\]' - - '%{NATSDIRECTION:network.direction} \[%{NATSMSG:nats.log.msg.type}\s+%{NOTSPACE:nats.log.msg.subject}\s+%{POSINT:nats.log.msg.sid}(\s+%{NOTSPACE:nats.log.msg.reply_to})?\s+%{POSINT:nats.log.msg.bytes}\]' - - '%{NATSDIRECTION:network.direction} \[%{NATSCONNECTION:nats.log.msg.type}\s+%{GREEDYDATA:nats.log.msg.data}\]' - - '%{NATSDIRECTION:network.direction} \[%{NATSERROR:nats.log.msg.type}\s+%{GREEDYDATA:nats.log.msg.error\]' - - '%{GREEDYDATA:nats.log.msg.data}' + - '%{STANDIRECTION:network.direction} %{STANPAYLOAD:stan.log.msg.type}: \[%{GREEDYDATA:stan.log.msg.payload}\]' + - '%{STANDIRECTION:network.direction} \[%{STANNOINFO:stan.log.msg.type}\]' + - '%{STANDIRECTION:network.direction} \[%{STANUNSUB:stan.log.msg.type}\s+%{POSINT:stan.log.msg.sid}(\s+%{POSINT:stan.log.msg.max_messages})?\]' + - '%{STANDIRECTION:network.direction} \[%{STANPUB:stan.log.msg.type}\s+%{NOTSPACE:stan.log.msg.subject}(\s+%{NOTSPACE:stan.log.msg.reply_to})?\s+%{POSINT:stan.log.msg.bytes}\]' + - '%{STANDIRECTION:network.direction} \[%{STANSUB:stan.log.msg.type}\s+%{NOTSPACE:stan.log.msg.subject}(\s+%{NOTSPACE:stan.log.msg.queue_group})?\s+%{POSINT:stan.log.msg.sid}\]' + - '%{STANDIRECTION:network.direction} \[%{STANMSG:stan.log.msg.type}\s+%{NOTSPACE:stan.log.msg.subject}\s+%{POSINT:stan.log.msg.sid}(\s+%{NOTSPACE:stan.log.msg.reply_to})?\s+%{POSINT:stan.log.msg.bytes}\]' + - '%{STANDIRECTION:network.direction} \[%{STANCONNECTION:stan.log.msg.type}\s+%{GREEDYDATA:stan.log.msg.data}\]' + - '%{STANDIRECTION:network.direction} \[%{STANERROR:stan.log.msg.type}\s+%{GREEDYDATA:stan.log.msg.error\]' + - '%{GREEDYDATA:stan.log.msg.data}' pattern_definitions: - NATSDIRECTION: (<<-|->>) - NATSMSG: MSG - NATSPUB: PUB - NATSSUB: SUB - NATSUNSUB: UNSUB - NATSPAYLOAD: MSG_PAYLOAD - NATSERROR: -ERROR - NATSPING: PING - NATSPONG: PONG - NATSOK: OK - NATSCONNECT: CONNECT - NATSINFO: INFO - NATSCONNECTION: (?:%{NATSCONNECT}|%{NATSINFO}) - NATSNOINFO: (?:%{NATSPING}|%{NATSPONG}|%{NATSOK}) + STANDIRECTION: (<<-|->>) + STANMSG: MSG + STANPUB: PUB + STANSUB: SUB + STANUNSUB: UNSUB + STANPAYLOAD: MSG_PAYLOAD + STANERROR: -ERROR + STANPING: PING + STANPONG: PONG + STANOK: OK + STANCONNECT: CONNECT + STANINFO: INFO + STANCONNECTION: (?:%{STANCONNECT}|%{STANINFO}) + STANNOINFO: (?:%{STANPING}|%{STANPONG}|%{STANOK}) ignore_missing: true - remove: - field: nats.log.info + field: stan.log.info - remove: - field: nats.log.msg.info + field: stan.log.msg.info ignore_missing: true - remove: - field: nats.log.msg.payload + field: stan.log.msg.payload ignore_missing: true - remove: field: message - rename: - field: nats.log.msg.data + field: stan.log.msg.data target_field: message ignore_missing: true - script: @@ -94,28 +94,28 @@ processors: - script: lang: painless source: |- - if (ctx.nats.log.msg.type == params.msg) { - ctx.nats.log.msg.type = params.message; - } else if (ctx.nats.log.msg.type == params.pub) { - ctx.nats.log.msg.type = params.publish; - } else if (ctx.nats.log.msg.type == params.sub) { - ctx.nats.log.msg.type = params.subscribe; - } else if (ctx.nats.log.msg.type == params.unsub) { - ctx.nats.log.msg.type = params.unsubscribe; - } else if (ctx.nats.log.msg.type == params.msg_payload) { - ctx.nats.log.msg.type = params.payload; - } else if (ctx.nats.log.msg.type == params.err) { - ctx.nats.log.msg.type = params.error; - } else if (ctx.nats.log.msg.type == params.pi) { - ctx.nats.log.msg.type = params.ping; - } else if (ctx.nats.log.msg.type == params.po) { - ctx.nats.log.msg.type = params.pong; - } else if (ctx.nats.log.msg.type == params.ok) { - ctx.nats.log.msg.type = params.acknowledge; - } else if (ctx.nats.log.msg.type == params.connect) { - ctx.nats.log.msg.type = params.connection; - } else if (ctx.nats.log.msg.type == params.info) { - ctx.nats.log.msg.type = params.information; + if (ctx.stan.log.msg.type == params.msg) { + ctx.stan.log.msg.type = params.message; + } else if (ctx.stan.log.msg.type == params.pub) { + ctx.stan.log.msg.type = params.publish; + } else if (ctx.stan.log.msg.type == params.sub) { + ctx.stan.log.msg.type = params.subscribe; + } else if (ctx.stan.log.msg.type == params.unsub) { + ctx.stan.log.msg.type = params.unsubscribe; + } else if (ctx.stan.log.msg.type == params.msg_payload) { + ctx.stan.log.msg.type = params.payload; + } else if (ctx.stan.log.msg.type == params.err) { + ctx.stan.log.msg.type = params.error; + } else if (ctx.stan.log.msg.type == params.pi) { + ctx.stan.log.msg.type = params.ping; + } else if (ctx.stan.log.msg.type == params.po) { + ctx.stan.log.msg.type = params.pong; + } else if (ctx.stan.log.msg.type == params.ok) { + ctx.stan.log.msg.type = params.acknowledge; + } else if (ctx.stan.log.msg.type == params.connect) { + ctx.stan.log.msg.type = params.connection; + } else if (ctx.stan.log.msg.type == params.info) { + ctx.stan.log.msg.type = params.information; } params: msg: MSG @@ -140,7 +140,7 @@ processors: connection: connection info: INFO information: information - if: ctx.nats.log.msg?.type != null + if: ctx.stan.log.msg?.type != null - script: lang: painless source: |- @@ -159,12 +159,12 @@ processors: field: '@timestamp' target_field: event.created - date: - field: nats.log.timestamp + field: stan.log.timestamp target_field: '@timestamp' formats: - yyyy/MM/dd HH:mm:ss.SSSSSS - remove: - field: nats.log.timestamp + field: stan.log.timestamp - set: field: event.kind value: event @@ -189,7 +189,7 @@ processors: type: long - convert: ignore_missing: true - field: nats.log.msg.bytes + field: stan.log.msg.bytes type: long on_failure: - set: diff --git a/packages/stan/data_stream/log/fields/fields.yml b/packages/stan/data_stream/log/fields/fields.yml index 36469135405..803aa5fbc7c 100644 --- a/packages/stan/data_stream/log/fields/fields.yml +++ b/packages/stan/data_stream/log/fields/fields.yml @@ -1,4 +1,4 @@ -- name: nats.log +- name: stan.log type: group release: beta fields: diff --git a/packages/stan/data_stream/log/manifest.yml b/packages/stan/data_stream/log/manifest.yml index 0cdeea6b28b..7f90c7de9ac 100644 --- a/packages/stan/data_stream/log/manifest.yml +++ b/packages/stan/data_stream/log/manifest.yml @@ -1,5 +1,5 @@ type: logs -title: NATS logs +title: STAN logs release: experimental streams: - input: logfile @@ -11,7 +11,7 @@ streams: required: true show_user: true default: - - /var/log/nats/nats.log* + - /var/log/stan/stan.log* template_path: log.yml.hbs - title: NATS logs (log) - description: Collect NATS logs using log input + title: STAN logs (log) + description: Collect STAN logs using log input diff --git a/packages/stan/data_stream/stats/sample_event.json b/packages/stan/data_stream/stats/sample_event.json index 9e26dfeeb6e..c5cae7f2290 100644 --- a/packages/stan/data_stream/stats/sample_event.json +++ b/packages/stan/data_stream/stats/sample_event.json @@ -1 +1,74 @@ -{} \ No newline at end of file +{ + "@timestamp": "2021-01-15T12:26:32.467Z", + "service": { + "address": "http://elastic-package-service_stan_1:8222/streaming/serverz", + "type": "stan" + }, + "data_stream": { + "namespace": "default", + "type": "metrics", + "dataset": "stan.stats" + }, + "ecs": { + "version": "1.7.0" + }, + "host": { + "mac": [ + "02:42:ac:13:00:05" + ], + "name": "ec072aa02d8b", + "hostname": "ec072aa02d8b", + "architecture": "x86_64", + "os": { + "version": "7 (Core)", + "family": "redhat", + "name": "CentOS Linux", + "kernel": "4.9.184-linuxkit", + "codename": "Core", + "platform": "centos" + }, + "id": "88c3c3ec3afebed7631b44a69754359e", + "containerized": true, + "ip": [ + "172.19.0.5" + ] + }, + "agent": { + "version": "7.11.0", + "hostname": "ec072aa02d8b", + "ephemeral_id": "8d73aff0-201b-4260-9e89-cd519348de03", + "id": "67b9c377-7d0c-4a69-9351-2befe6386fbd", + "name": "ec072aa02d8b", + "type": "metricbeat" + }, + "event": { + "dataset": "stan.stats", + "module": "stan", + "duration": 1252350 + }, + "metricset": { + "name": "stats", + "period": 60000 + }, + "stan": { + "cluster": { + "id": "test-cluster" + }, + "stats": { + "subscriptions": 4, + "channels": 4, + "messages": 4990, + "bytes": 5214423, + "state": "STANDALONE", + "clients": 100 + }, + "server": { + "id": "kvQEpbFak88fHAnWCZxZDL" + } + }, + "elastic_agent": { + "id": "df58bff0-5714-11eb-b094-915beebb3c66", + "snapshot": true, + "version": "7.11.0" + } +} \ No newline at end of file diff --git a/packages/stan/data_stream/subscriptions/sample_event.json b/packages/stan/data_stream/subscriptions/sample_event.json index 9e26dfeeb6e..eadb58f768d 100644 --- a/packages/stan/data_stream/subscriptions/sample_event.json +++ b/packages/stan/data_stream/subscriptions/sample_event.json @@ -1 +1,74 @@ -{} \ No newline at end of file +{ + "@timestamp": "2021-01-15T12:25:32.509Z", + "ecs": { + "version": "1.7.0" + }, + "agent": { + "ephemeral_id": "8d73aff0-201b-4260-9e89-cd519348de03", + "id": "67b9c377-7d0c-4a69-9351-2befe6386fbd", + "name": "ec072aa02d8b", + "type": "metricbeat", + "version": "7.11.0", + "hostname": "ec072aa02d8b" + }, + "metricset": { + "name": "subscriptions", + "period": 60000 + }, + "data_stream": { + "type": "metrics", + "dataset": "stan.subscriptions", + "namespace": "default" + }, + "elastic_agent": { + "version": "7.11.0", + "id": "df58bff0-5714-11eb-b094-915beebb3c66", + "snapshot": true + }, + "host": { + "architecture": "x86_64", + "name": "ec072aa02d8b", + "os": { + "kernel": "4.9.184-linuxkit", + "codename": "Core", + "platform": "centos", + "version": "7 (Core)", + "family": "redhat", + "name": "CentOS Linux" + }, + "id": "88c3c3ec3afebed7631b44a69754359e", + "containerized": true, + "ip": [ + "172.19.0.5" + ], + "mac": [ + "02:42:ac:13:00:05" + ], + "hostname": "ec072aa02d8b" + }, + "event": { + "dataset": "stan.subscriptions", + "module": "stan", + "duration": 935334325 + }, + "service": { + "address": "http://elastic-package-service_stan_1:8222/streaming/channelsz?subs=1", + "type": "stan" + }, + "stan": { + "subscriptions": { + "stalled": true, + "pending": 1024, + "id": "benchmark-sub-1", + "channel": "bar", + "last_sent": 1024, + "offline": true + }, + "server": { + "id": "kvQEpbFak88fHAnWCZxZDL" + }, + "cluster": { + "id": "test-cluster" + } + } +} \ No newline at end of file diff --git a/packages/stan/docs/README.md b/packages/stan/docs/README.md index d3c53d78099..2d2cac4f9d4 100644 --- a/packages/stan/docs/README.md +++ b/packages/stan/docs/README.md @@ -40,18 +40,18 @@ An example event for `log` looks as following: | log.level | Log level of the log event. | keyword | | log.offset | Offset of the entry in the log file. | long | | message | 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. | text | -| nats.log.client.id | The id of the client | integer | -| nats.log.msg.bytes | Size of the payload in bytes | long | -| nats.log.msg.error.message | Details about the error occurred | text | -| nats.log.msg.max_messages | An optional number of messages to wait for before automatically unsubscribing | integer | -| nats.log.msg.queue_group | The queue group which subscriber will join | text | -| nats.log.msg.reply_to | The inbox subject on which the publisher is listening for responses | keyword | -| nats.log.msg.sid | The unique alphanumeric subscription ID of the subject | integer | -| nats.log.msg.subject | Subject name this message was received on | keyword | -| nats.log.msg.type | The protocol message type | keyword | | network.direction | Direction of the network traffic. Recommended values are: * inbound * outbound * internal * external * unknown When mapping events from a host-based monitoring context, populate this field from the host's point of view. When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of your network perimeter. | keyword | | process.pid | Process id. | long | | related.ip | All of the IPs seen on your event. | ip | +| stan.log.client.id | The id of the client | integer | +| stan.log.msg.bytes | Size of the payload in bytes | long | +| stan.log.msg.error.message | Details about the error occurred | text | +| stan.log.msg.max_messages | An optional number of messages to wait for before automatically unsubscribing | integer | +| stan.log.msg.queue_group | The queue group which subscriber will join | text | +| stan.log.msg.reply_to | The inbox subject on which the publisher is listening for responses | keyword | +| stan.log.msg.sid | The unique alphanumeric subscription ID of the subject | integer | +| stan.log.msg.subject | Subject name this message was received on | keyword | +| stan.log.msg.type | The protocol message type | keyword | ## Metrics @@ -66,7 +66,80 @@ metrics from a STAN instance. An example event for `stats` looks as following: ```$json -{} +{ + "@timestamp": "2021-01-15T12:26:32.467Z", + "service": { + "address": "http://elastic-package-service_stan_1:8222/streaming/serverz", + "type": "stan" + }, + "data_stream": { + "namespace": "default", + "type": "metrics", + "dataset": "stan.stats" + }, + "ecs": { + "version": "1.7.0" + }, + "host": { + "mac": [ + "02:42:ac:13:00:05" + ], + "name": "ec072aa02d8b", + "hostname": "ec072aa02d8b", + "architecture": "x86_64", + "os": { + "version": "7 (Core)", + "family": "redhat", + "name": "CentOS Linux", + "kernel": "4.9.184-linuxkit", + "codename": "Core", + "platform": "centos" + }, + "id": "88c3c3ec3afebed7631b44a69754359e", + "containerized": true, + "ip": [ + "172.19.0.5" + ] + }, + "agent": { + "version": "7.11.0", + "hostname": "ec072aa02d8b", + "ephemeral_id": "8d73aff0-201b-4260-9e89-cd519348de03", + "id": "67b9c377-7d0c-4a69-9351-2befe6386fbd", + "name": "ec072aa02d8b", + "type": "metricbeat" + }, + "event": { + "dataset": "stan.stats", + "module": "stan", + "duration": 1252350 + }, + "metricset": { + "name": "stats", + "period": 60000 + }, + "stan": { + "cluster": { + "id": "test-cluster" + }, + "stats": { + "subscriptions": 4, + "channels": 4, + "messages": 4990, + "bytes": 5214423, + "state": "STANDALONE", + "clients": 100 + }, + "server": { + "id": "kvQEpbFak88fHAnWCZxZDL" + } + }, + "elastic_agent": { + "id": "df58bff0-5714-11eb-b094-915beebb3c66", + "snapshot": true, + "version": "7.11.0" + } +} ``` **Exported fields** @@ -99,7 +172,80 @@ metrics about channels from a STAN instance. An example event for `channels` looks as following: ```$json -{} +{ + "@timestamp": "2021-01-15T12:23:32.592Z", + "service": { + "address": "http://elastic-package-service_stan_1:8222/streaming/channelsz?subs=1", + "type": "stan" + }, + "event": { + "duration": 8406132380, + "dataset": "stan.channels", + "module": "stan" + }, + "metricset": { + "name": "channels", + "period": 60000 + }, + "stan": { + "cluster": { + "id": "test-cluster" + }, + "server": { + "id": "kvQEpbFak88fHAnWCZxZDL" + }, + "channels": { + "depth": 3966, + "name": "bar", + "messages": 4990, + "bytes": 5214423, + "first_seq": 1, + "last_seq": 4990 + } + }, + "elastic_agent": { + "version": "7.11.0", + "id": "df58bff0-5714-11eb-b094-915beebb3c66", + "snapshot": true + }, + "ecs": { + "version": "1.7.0" + }, + "data_stream": { + "type": "metrics", + "dataset": "stan.channels", + "namespace": "default" + }, + "host": { + "architecture": "x86_64", + "os": { + "kernel": "4.9.184-linuxkit", + "codename": "Core", + "platform": "centos", + "version": "7 (Core)", + "family": "redhat", + "name": "CentOS Linux" + }, + "id": "88c3c3ec3afebed7631b44a69754359e", + "name": "ec072aa02d8b", + "containerized": true, + "ip": [ + "172.19.0.5" + ], + "mac": [ + "02:42:ac:13:00:05" + ], + "hostname": "ec072aa02d8b" + }, + "agent": { + "version": "7.11.0", + "hostname": "ec072aa02d8b", + "ephemeral_id": "8d73aff0-201b-4260-9e89-cd519348de03", + "id": "67b9c377-7d0c-4a69-9351-2befe6386fbd", + "name": "ec072aa02d8b", + "type": "metricbeat" + } +} ``` **Exported fields** @@ -131,7 +277,80 @@ metrics about subscriptions from a STAN instance. An example event for `subscriptions` looks as following: ```$json -{} +{ + "@timestamp": "2021-01-15T12:25:32.509Z", + "ecs": { + "version": "1.7.0" + }, + "agent": { + "ephemeral_id": "8d73aff0-201b-4260-9e89-cd519348de03", + "id": "67b9c377-7d0c-4a69-9351-2befe6386fbd", + "name": "ec072aa02d8b", + "type": "metricbeat", + "version": "7.11.0", + "hostname": "ec072aa02d8b" + }, + "metricset": { + "name": "subscriptions", + "period": 60000 + }, + "data_stream": { + "type": "metrics", + "dataset": "stan.subscriptions", + "namespace": "default" + }, + "elastic_agent": { + "version": "7.11.0", + "id": "df58bff0-5714-11eb-b094-915beebb3c66", + "snapshot": true + }, + "host": { + "architecture": "x86_64", + "name": "ec072aa02d8b", + "os": { + "kernel": "4.9.184-linuxkit", + "codename": "Core", + "platform": "centos", + "version": "7 (Core)", + "family": "redhat", + "name": "CentOS Linux" + }, + "id": "88c3c3ec3afebed7631b44a69754359e", + "containerized": true, + "ip": [ + "172.19.0.5" + ], + "mac": [ + "02:42:ac:13:00:05" + ], + "hostname": "ec072aa02d8b" + }, + "event": { + "dataset": "stan.subscriptions", + "module": "stan", + "duration": 935334325 + }, + "service": { + "address": "http://elastic-package-service_stan_1:8222/streaming/channelsz?subs=1", + "type": "stan" + }, + "stan": { + "subscriptions": { + "stalled": true, + "pending": 1024, + "id": "benchmark-sub-1", + "channel": "bar", + "last_sent": 1024, + "offline": true + }, + "server": { + "id": "kvQEpbFak88fHAnWCZxZDL" + }, + "cluster": { + "id": "test-cluster" + } + } +} ``` **Exported fields** From 7ab33d08f73305bb07b484a007dff5a90157c15a Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Fri, 15 Jan 2021 15:57:07 +0200 Subject: [PATCH 07/14] Add expected file Signed-off-by: ChrsMark --- .../test-log-sample.log-expected.json | 1999 +++++++++++++++++ 1 file changed, 1999 insertions(+) create mode 100644 packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log-expected.json diff --git a/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log-expected.json b/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log-expected.json new file mode 100644 index 00000000000..8f5ef40b807 --- /dev/null +++ b/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log-expected.json @@ -0,0 +1,1999 @@ +{ + "expected": [ + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.981022 [INF] STREAM: Starting nats-streaming-server[test-cluster] version 0.15.1", + "event": { + "ingested": "2021-01-15T13:20:14.911369390Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981022 [INF] STREAM: Starting nats-streaming-server[test-cluster] version 0.15.1]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.981055 [INF] STREAM: ServerID: tnudw5OA2pv04Sn0JpebGy", + "event": { + "ingested": "2021-01-15T13:20:14.911374106Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981055 [INF] STREAM: ServerID: tnudw5OA2pv04Sn0JpebGy]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.981069 [INF] STREAM: Go version: go1.11.10", + "event": { + "ingested": "2021-01-15T13:20:14.911375767Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981069 [INF] STREAM: Go version: go1.11.10]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.981082 [INF] STREAM: Git commit: [8e6aa7c]", + "event": { + "ingested": "2021-01-15T13:20:14.911377240Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981082 [INF] STREAM: Git commit: [8e6aa7c]]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.981951 [INF] Starting nats-server version 2.0.0", + "event": { + "ingested": "2021-01-15T13:20:14.911386339Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981951 [INF] Starting nats-server version 2.0.0]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.981983 [DBG] Go build version go1.11.10", + "event": { + "ingested": "2021-01-15T13:20:14.911391029Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981983 [DBG] Go build version go1.11.10]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.981996 [INF] Git commit [not set]", + "event": { + "ingested": "2021-01-15T13:20:14.911393250Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981996 [INF] Git commit [not set]]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.982082 [INF] Starting http monitor on 0.0.0.0:8222", + "event": { + "ingested": "2021-01-15T13:20:14.911395027Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.982082 [INF] Starting http monitor on 0.0.0.0:8222]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.982116 [INF] Listening for client connections on 0.0.0.0:4222", + "event": { + "ingested": "2021-01-15T13:20:14.911396641Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.982116 [INF] Listening for client connections on 0.0.0.0:4222]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.982127 [INF] Server id is NCE3NFAMOIJHIR6KK53KBPN6C44LXZ6G4ULGLIWIBLYOLG5Z5LVCQSOB", + "event": { + "ingested": "2021-01-15T13:20:14.911398109Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.982127 [INF] Server id is NCE3NFAMOIJHIR6KK53KBPN6C44LXZ6G4ULGLIWIBLYOLG5Z5LVCQSOB]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.982136 [INF] Server is ready", + "event": { + "ingested": "2021-01-15T13:20:14.911399500Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.982136 [INF] Server is ready]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.982149 [DBG] Get non local IPs for \"0.0.0.0\"", + "event": { + "ingested": "2021-01-15T13:20:14.911401132Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.982149 [DBG] Get non local IPs for \\\"0.0.0.0\\\"]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:06.982402 [DBG] ip=192.168.240.2", + "event": { + "ingested": "2021-01-15T13:20:14.911402562Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.982402 [DBG] ip=192.168.240.2]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.008167 [DBG] 127.0.0.1:33150 - cid:1 - Client connection created", + "event": { + "ingested": "2021-01-15T13:20:14.911403960Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.008167 [DBG] 127.0.0.1:33150 - cid:1 - Client connection created]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.009385 [DBG] 127.0.0.1:33152 - cid:2 - Client connection created", + "event": { + "ingested": "2021-01-15T13:20:14.911405391Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.009385 [DBG] 127.0.0.1:33152 - cid:2 - Client connection created]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.010819 [DBG] 127.0.0.1:33154 - cid:3 - Client connection created", + "event": { + "ingested": "2021-01-15T13:20:14.911406812Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.010819 [DBG] 127.0.0.1:33154 - cid:3 - Client connection created]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.011557 [INF] STREAM: Recovering the state...", + "event": { + "ingested": "2021-01-15T13:20:14.911408317Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.011557 [INF] STREAM: Recovering the state...]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.011583 [INF] STREAM: No recovered state", + "event": { + "ingested": "2021-01-15T13:20:14.911409733Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.011583 [INF] STREAM: No recovered state]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.263504 [INF] STREAM: Message store is MEMORY", + "event": { + "ingested": "2021-01-15T13:20:14.911411154Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263504 [INF] STREAM: Message store is MEMORY]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.263623 [INF] STREAM: ---------- Store Limits ----------", + "event": { + "ingested": "2021-01-15T13:20:14.911412569Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263623 [INF] STREAM: ---------- Store Limits ----------]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.263653 [INF] STREAM: Channels: 100 *", + "event": { + "ingested": "2021-01-15T13:20:14.911413978Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263653 [INF] STREAM: Channels: 100 *]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.263671 [INF] STREAM: --------- Channels Limits --------", + "event": { + "ingested": "2021-01-15T13:20:14.911415384Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263671 [INF] STREAM: --------- Channels Limits --------]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.263690 [INF] STREAM: Subscriptions: 1000 *", + "event": { + "ingested": "2021-01-15T13:20:14.911416795Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263690 [INF] STREAM: Subscriptions: 1000 *]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.263710 [INF] STREAM: Messages : 1000000 *", + "event": { + "ingested": "2021-01-15T13:20:14.911418382Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263710 [INF] STREAM: Messages : 1000000 *]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.263728 [INF] STREAM: Bytes : 976.56 MB *", + "event": { + "ingested": "2021-01-15T13:20:14.911419829Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263728 [INF] STREAM: Bytes : 976.56 MB *]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.263749 [INF] STREAM: Age : unlimited *", + "event": { + "ingested": "2021-01-15T13:20:14.911421244Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263749 [INF] STREAM: Age : unlimited *]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.263767 [INF] STREAM: Inactivity : unlimited *", + "event": { + "ingested": "2021-01-15T13:20:14.911422640Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263767 [INF] STREAM: Inactivity : unlimited *]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:07.263788 [INF] STREAM: ----------------------------------", + "event": { + "ingested": "2021-01-15T13:20:14.911424047Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263788 [INF] STREAM: ----------------------------------]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:08.988091 [DBG] 127.0.0.1:33160 - cid:4 - Client connection created", + "event": { + "ingested": "2021-01-15T13:20:14.911425541Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:08.988091 [DBG] 127.0.0.1:33160 - cid:4 - Client connection created]" + } + }, + { + "@timestamp": "2020-04-28T11:07:58.223Z", + "ecs": { + "version": "1.5.0" + }, + "message": "[7] 2021/01/13 14.20:09.010952 [INF] STREAM: Channel \"bar\" has been created", + "event": { + "ingested": "2021-01-15T13:20:14.911426989Z" + }, + "error": { + "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:09.010952 [INF] STREAM: Channel \\\"bar\\\" has been created]" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "subscribe", + "subject": "_INBOX.mUz7h6B3wGNf7P7bhyQldF", + "sid": "43" + }, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911428375Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.497Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "debug" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "27" + } + } + }, + "client": { + "port": 60800, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911429797Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "Client connection closed" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "debug" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "34" + } + } + }, + "client": { + "port": 60812, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911431203Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "Client connection closed" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "debug" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "36" + } + } + }, + "client": { + "port": 60818, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911432630Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "Client connection closed" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "debug" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "35" + } + } + }, + "client": { + "port": 60816, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911434162Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "Client connection closed" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "ping" + }, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911435552Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "debug" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "38" + } + } + }, + "client": { + "port": 60820, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911436958Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "Client connection closed" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "pong" + }, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911438353Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "outbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "debug" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "30" + } + } + }, + "client": { + "port": 60804, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911439751Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "Client connection closed" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "debug" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "32" + } + } + }, + "client": { + "port": 60806, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911441204Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "Client connection closed" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "debug" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "42" + } + } + }, + "client": { + "port": 60814, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911442596Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "Client connection closed" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "debug" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "33" + } + } + }, + "client": { + "port": 60808, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911443990Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "Client connection closed" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "debug" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "31" + } + } + }, + "client": { + "port": 60802, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911445402Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "Client connection closed" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "subscribe", + "subject": "_INBOX.mUz7h6B3wGNf7P7bhyQlf6", + "sid": "44" + }, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911446833Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "ping" + }, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911448238Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.488Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "message", + "bytes": 31, + "subject": "_INBOX.ZXYA2FSF5VwytqOUdLsWfp.RdKmEViH", + "sid": "3" + }, + "client": { + "id": "83" + } + } + }, + "client": { + "port": 60910, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911449645Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "outbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "pong" + }, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911451987Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "outbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "publish", + "bytes": 31, + "subject": "_INBOX.ZXYA2FSF5VwytqOUdLsXOL.kiHXi6ux" + }, + "client": { + "id": "1" + } + } + }, + "client": { + "port": 60744, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911453553Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "payload" + }, + "client": { + "id": "1" + } + } + }, + "client": { + "port": 60744, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911454982Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "debug" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "83" + } + } + }, + "client": { + "port": 60910, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911456393Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "Client connection closed" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.499Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "publish", + "bytes": 31, + "subject": "_INBOX.ZXYA2FSF5VwytqOUdLsUbq.CeeDx8Zh" + }, + "client": { + "id": "1" + } + } + }, + "client": { + "port": 60744, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911457908Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.500Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "payload" + }, + "client": { + "id": "1" + } + } + }, + "client": { + "port": 60744, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911459306Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.500Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "debug" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "29" + } + } + }, + "client": { + "port": 60810, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911460699Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "Client connection closed" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.508Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "publish", + "bytes": 31, + "subject": "_INBOX.ZXYA2FSF5VwytqOUdLsUsX.7vrrWV3v" + }, + "client": { + "id": "1" + } + } + }, + "client": { + "port": 60744, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911462091Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.508Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "payload" + }, + "client": { + "id": "1" + } + } + }, + "client": { + "port": 60744, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911463500Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.508Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "subscribe", + "subject": "_INBOX.mUz7h6B3wGNf7P7bhyQm3D", + "sid": "57" + }, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911464921Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.509Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "ping" + }, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911466316Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.509Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "pong" + }, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911467741Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "outbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.509Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "publish", + "bytes": 31, + "subject": "_INBOX.ZXYA2FSF5VwytqOUdLsYyH.3U691ECJ" + }, + "client": { + "id": "1" + } + } + }, + "client": { + "port": 60744, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911469149Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.509Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "payload" + }, + "client": { + "id": "1" + } + } + }, + "client": { + "port": 60744, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911470558Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.509Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "subscribe", + "subject": "_INBOX.mUz7h6B3wGNf7P7bhyQm54", + "sid": "58" + }, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911471967Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.509Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "ping" + }, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911473420Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.509Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "pong" + }, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911474825Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "outbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.510Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "publish", + "bytes": 31, + "subject": "_INBOX.ZXYA2FSF5VwytqOUdLsYpN.R6hUgpF6" + }, + "client": { + "id": "1" + } + } + }, + "client": { + "port": 60744, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911476235Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.510Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "payload" + }, + "client": { + "id": "1" + } + } + }, + "client": { + "port": 60744, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911477633Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.949Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "publish", + "bytes": 220, + "subject": "_INBOX.ZXYA2FSF5VwytqOUdLsWF7.IqlBSvhV" + }, + "client": { + "id": "2" + } + } + }, + "client": { + "port": 60746, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911479042Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.949Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": { + "type": "payload" + }, + "client": { + "id": "2" + } + } + }, + "client": { + "port": 60746, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911480580Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "network": { + "direction": "inbound" + } + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.949Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911481983Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "\u003c\u003c- [UNSUB 21 ]" + }, + { + "process": { + "pid": 7 + }, + "@timestamp": "2021-01-13T14:22:50.949Z", + "ecs": { + "version": "1.5.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "log": { + "level": "trace" + }, + "stan": { + "log": { + "msg": {}, + "client": { + "id": "3" + } + } + }, + "client": { + "port": 60748, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:20:14.911483417Z", + "type": [ + "info" + ], + "created": "2020-04-28T11:07:58.223Z", + "kind": "event" + }, + "message": "\u003c-\u003e [DELSUB 21]" + } + ] +} \ No newline at end of file From 2e513331da9489b1c329e006e1694156d280f399 Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Fri, 15 Jan 2021 16:13:03 +0200 Subject: [PATCH 08/14] Fix log Signed-off-by: ChrsMark --- .../stan/data_stream/log/sample_event.json | 93 ++++++++++++++++++- packages/stan/docs/README.md | 93 ++++++++++++++++++- 2 files changed, 184 insertions(+), 2 deletions(-) diff --git a/packages/stan/data_stream/log/sample_event.json b/packages/stan/data_stream/log/sample_event.json index 9e26dfeeb6e..63dbd6d8177 100644 --- a/packages/stan/data_stream/log/sample_event.json +++ b/packages/stan/data_stream/log/sample_event.json @@ -1 +1,92 @@ -{} \ No newline at end of file +{ + "agent": { + "hostname": "4d0d8c0f4097", + "name": "4d0d8c0f4097", + "id": "10a38439-cfb3-4e2f-b4a3-b06707eed149", + "type": "filebeat", + "ephemeral_id": "39abf1ff-8ee3-41b5-a553-0af2f121da94", + "version": "7.11.0" + }, + "process": { + "pid": 7 + }, + "log": { + "file": { + "path": "/tmp/service_logs/stan.log" + }, + "offset": 2064548, + "level": "trace" + }, + "elastic_agent": { + "id": "d5178560-572f-11eb-a5fc-9bbf29f84abb", + "version": "7.11.0", + "snapshot": true + }, + "network": { + "direction": "inbound" + }, + "input": { + "type": "log" + }, + "@timestamp": "2021-01-15T13:12:07.170Z", + "ecs": { + "version": "1.6.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "data_stream": { + "namespace": "default", + "type": "logs", + "dataset": "stan.log" + }, + "host": { + "hostname": "4d0d8c0f4097", + "os": { + "kernel": "4.9.184-linuxkit", + "codename": "Core", + "name": "CentOS Linux", + "family": "redhat", + "version": "7 (Core)", + "platform": "centos" + }, + "containerized": true, + "ip": [ + "172.21.0.6" + ], + "name": "4d0d8c0f4097", + "id": "88c3c3ec3afebed7631b44a69754359e", + "mac": [ + "02:42:ac:15:00:06" + ], + "architecture": "x86_64" + }, + "stan": { + "log": { + "msg": { + "reply_to": "_INBOX.1wOArhLwRni1eXXhnUaD8i.LMRmCG50", + "bytes": 79, + "subject": "_STAN.discover.test-cluster", + "type": "publish" + }, + "client": { + "id": "930" + } + } + }, + "client": { + "port": 50558, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:12:08.891587159Z", + "created": "2021-01-15T13:12:07.260Z", + "kind": "event", + "type": [ + "info" + ], + "dataset": "stan.log" + } +} \ No newline at end of file diff --git a/packages/stan/docs/README.md b/packages/stan/docs/README.md index 2d2cac4f9d4..69022d02857 100644 --- a/packages/stan/docs/README.md +++ b/packages/stan/docs/README.md @@ -17,7 +17,98 @@ The `log` dataset collects the STAN logs. An example event for `log` looks as following: ```$json -{} +{ + "agent": { + "hostname": "4d0d8c0f4097", + "name": "4d0d8c0f4097", + "id": "10a38439-cfb3-4e2f-b4a3-b06707eed149", + "type": "filebeat", + "ephemeral_id": "39abf1ff-8ee3-41b5-a553-0af2f121da94", + "version": "7.11.0" + }, + "process": { + "pid": 7 + }, + "log": { + "file": { + "path": "/tmp/service_logs/stan.log" + }, + "offset": 2064548, + "level": "trace" + }, + "elastic_agent": { + "id": "d5178560-572f-11eb-a5fc-9bbf29f84abb", + "version": "7.11.0", + "snapshot": true + }, + "network": { + "direction": "inbound" + }, + "input": { + "type": "log" + }, + "@timestamp": "2021-01-15T13:12:07.170Z", + "ecs": { + "version": "1.6.0" + }, + "related": { + "ip": [ + "127.0.0.1" + ] + }, + "data_stream": { + "namespace": "default", + "type": "logs", + "dataset": "stan.log" + }, + "host": { + "hostname": "4d0d8c0f4097", + "os": { + "kernel": "4.9.184-linuxkit", + "codename": "Core", + "name": "CentOS Linux", + "family": "redhat", + "version": "7 (Core)", + "platform": "centos" + }, + "containerized": true, + "ip": [ + "172.21.0.6" + ], + "name": "4d0d8c0f4097", + "id": "88c3c3ec3afebed7631b44a69754359e", + "mac": [ + "02:42:ac:15:00:06" + ], + "architecture": "x86_64" + }, + "stan": { + "log": { + "msg": { + "reply_to": "_INBOX.1wOArhLwRni1eXXhnUaD8i.LMRmCG50", + "bytes": 79, + "subject": "_STAN.discover.test-cluster", + "type": "publish" + }, + "client": { + "id": "930" + } + } + }, + "client": { + "port": 50558, + "ip": "127.0.0.1" + }, + "event": { + "ingested": "2021-01-15T13:12:08.891587159Z", + "created": "2021-01-15T13:12:07.260Z", + "kind": "event", + "type": [ + "info" + ], + "dataset": "stan.log" + } +} ``` **Exported fields** From ecef253cbd28501ba725c54a30e36e61e231fb8a Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Fri, 15 Jan 2021 17:55:27 +0200 Subject: [PATCH 09/14] Add wip dashboard Signed-off-by: ChrsMark --- .../dashboard/stan-Logs-stan-overview.json | 245 ++++++++++++++++++ ...-04083600-41af-11e9-a4da-b1df688edbcd.json | 131 ++++++++++ ...-0b2061d0-41ad-11e9-a4da-b1df688edbcd.json | 130 ++++++++++ ...-3f6cca40-41ae-11e9-a4da-b1df688edbcd.json | 69 +++++ ...-4a6d9ec0-41a8-11e9-a4da-b1df688edbcd.json | 130 ++++++++++ ...-6987a800-41a8-11e9-a4da-b1df688edbcd.json | 133 ++++++++++ ...-7716c780-41ad-11e9-a4da-b1df688edbcd.json | 69 +++++ ...-7ed62870-41ae-11e9-a4da-b1df688edbcd.json | 69 +++++ ...-c3d1ab80-41a8-11e9-a4da-b1df688edbcd.json | 123 +++++++++ ...-c669ae20-41ed-11e9-ac5c-71ffa38a62e3.json | 150 +++++++++++ 10 files changed, 1249 insertions(+) create mode 100644 packages/stan/kibana/dashboard/stan-Logs-stan-overview.json create mode 100644 packages/stan/kibana/visualization/stan-04083600-41af-11e9-a4da-b1df688edbcd.json create mode 100644 packages/stan/kibana/visualization/stan-0b2061d0-41ad-11e9-a4da-b1df688edbcd.json create mode 100644 packages/stan/kibana/visualization/stan-3f6cca40-41ae-11e9-a4da-b1df688edbcd.json create mode 100644 packages/stan/kibana/visualization/stan-4a6d9ec0-41a8-11e9-a4da-b1df688edbcd.json create mode 100644 packages/stan/kibana/visualization/stan-6987a800-41a8-11e9-a4da-b1df688edbcd.json create mode 100644 packages/stan/kibana/visualization/stan-7716c780-41ad-11e9-a4da-b1df688edbcd.json create mode 100644 packages/stan/kibana/visualization/stan-7ed62870-41ae-11e9-a4da-b1df688edbcd.json create mode 100644 packages/stan/kibana/visualization/stan-c3d1ab80-41a8-11e9-a4da-b1df688edbcd.json create mode 100644 packages/stan/kibana/visualization/stan-c669ae20-41ed-11e9-ac5c-71ffa38a62e3.json diff --git a/packages/stan/kibana/dashboard/stan-Logs-stan-overview.json b/packages/stan/kibana/dashboard/stan-Logs-stan-overview.json new file mode 100644 index 00000000000..6bcec1a8905 --- /dev/null +++ b/packages/stan/kibana/dashboard/stan-Logs-stan-overview.json @@ -0,0 +1,245 @@ +{ + "attributes": { + "description": "Overview of NATS server statistics", + "hits": 0, + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "query": { + "language": "kuery", + "query": "data_stream.dataset: nats.log" + } + } + }, + "optionsJSON": { + "darkTheme": false, + "hidePanelTitles": false, + "useMargins": true + }, + "panelsJSON": [ + { + "embeddableConfig": { + "hidePanelTitles": false, + "title": "Message Types Timeline" + }, + "gridData": { + "h": 11, + "i": "1", + "w": 17, + "x": 0, + "y": 0 + }, + "panelIndex": "1", + "panelRefName": "panel_0", + "title": "Message Types Timeline", + "version": "7.10.0" + }, + { + "embeddableConfig": { + "hidePanelTitles": false, + "title": "Communication Directions" + }, + "gridData": { + "h": 11, + "i": "2", + "w": 17, + "x": 31, + "y": 0 + }, + "panelIndex": "2", + "panelRefName": "panel_1", + "title": "Communication Directions", + "version": "7.10.0" + }, + { + "embeddableConfig": { + "hidePanelTitles": false, + "title": "Topics Timeline" + }, + "gridData": { + "h": 12, + "i": "3", + "w": 25, + "x": 0, + "y": 20 + }, + "panelIndex": "3", + "panelRefName": "panel_2", + "title": "Topics Timeline", + "version": "7.10.0" + }, + { + "embeddableConfig": { + "hidePanelTitles": false, + "title": " Bytes Timeline", + "vis": { + "legendOpen": false + } + }, + "gridData": { + "h": 9, + "i": "4", + "w": 12, + "x": 11, + "y": 11 + }, + "panelIndex": "4", + "panelRefName": "panel_3", + "title": " Bytes Timeline", + "version": "7.10.0" + }, + { + "embeddableConfig": { + "hidePanelTitles": false, + "title": "Communication Directions Distribution", + "vis": { + "legendOpen": false + } + }, + "gridData": { + "h": 9, + "i": "5", + "w": 11, + "x": 0, + "y": 11 + }, + "panelIndex": "5", + "panelRefName": "panel_4", + "title": "Communication Directions Distribution", + "version": "7.10.0" + }, + { + "embeddableConfig": { + "hidePanelTitles": false, + "title": "Log Level Distribution", + "vis": { + "legendOpen": false + } + }, + "gridData": { + "h": 9, + "i": "6", + "w": 11, + "x": 37, + "y": 11 + }, + "panelIndex": "6", + "panelRefName": "panel_5", + "title": "Log Level Distribution", + "version": "7.10.0" + }, + { + "embeddableConfig": { + "hidePanelTitles": false, + "title": "Message Type Distribution", + "vis": { + "legendOpen": false + } + }, + "gridData": { + "h": 11, + "i": "7", + "w": 14, + "x": 17, + "y": 0 + }, + "panelIndex": "7", + "panelRefName": "panel_6", + "title": "Message Type Distribution", + "version": "7.10.0" + }, + { + "embeddableConfig": { + "hidePanelTitles": false, + "title": "Log Level Timeline" + }, + "gridData": { + "h": 9, + "i": "8", + "w": 14, + "x": 23, + "y": 11 + }, + "panelIndex": "8", + "panelRefName": "panel_7", + "title": "Log Level Timeline", + "version": "7.10.0" + }, + { + "embeddableConfig": { + "hidePanelTitles": false, + "title": "Client IP Count Timeline" + }, + "gridData": { + "h": 12, + "i": "9", + "w": 22, + "x": 25, + "y": 20 + }, + "panelIndex": "9", + "panelRefName": "panel_8", + "title": "Client IP Count Timeline", + "version": "7.10.0" + } + ], + "timeRestore": false, + "title": "[Logs NATS] Overview", + "version": 1 + }, + "id": "nats-Logs-nats-overview", + "migrationVersion": { + "dashboard": "7.9.3" + }, + "namespaces": [ + "default" + ], + "references": [ + { + "id": "nats-6987a800-41a8-11e9-a4da-b1df688edbcd", + "name": "panel_0", + "type": "visualization" + }, + { + "id": "nats-0b2061d0-41ad-11e9-a4da-b1df688edbcd", + "name": "panel_1", + "type": "visualization" + }, + { + "id": "nats-4a6d9ec0-41a8-11e9-a4da-b1df688edbcd", + "name": "panel_2", + "type": "visualization" + }, + { + "id": "nats-c3d1ab80-41a8-11e9-a4da-b1df688edbcd", + "name": "panel_3", + "type": "visualization" + }, + { + "id": "nats-7716c780-41ad-11e9-a4da-b1df688edbcd", + "name": "panel_4", + "type": "visualization" + }, + { + "id": "nats-3f6cca40-41ae-11e9-a4da-b1df688edbcd", + "name": "panel_5", + "type": "visualization" + }, + { + "id": "nats-7ed62870-41ae-11e9-a4da-b1df688edbcd", + "name": "panel_6", + "type": "visualization" + }, + { + "id": "nats-04083600-41af-11e9-a4da-b1df688edbcd", + "name": "panel_7", + "type": "visualization" + }, + { + "id": "nats-c669ae20-41ed-11e9-ac5c-71ffa38a62e3", + "name": "panel_8", + "type": "visualization" + } + ], + "type": "dashboard" +} \ No newline at end of file diff --git a/packages/stan/kibana/visualization/stan-04083600-41af-11e9-a4da-b1df688edbcd.json b/packages/stan/kibana/visualization/stan-04083600-41af-11e9-a4da-b1df688edbcd.json new file mode 100644 index 00000000000..3eb11f23a3b --- /dev/null +++ b/packages/stan/kibana/visualization/stan-04083600-41af-11e9-a4da-b1df688edbcd.json @@ -0,0 +1,131 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", + "query": { + "language": "kuery", + "query": "data_stream.dataset: stan.log" + } + } + }, + "title": "Log Level Timeline [Logs STAN]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "schema": "segment", + "type": "date_histogram" + }, + { + "enabled": true, + "id": "3", + "params": { + "field": "log.level", + "size": 10 + }, + "schema": "group", + "type": "significant_terms" + } + ], + "params": { + "addLegend": true, + "addTimeMarker": false, + "addTooltip": true, + "categoryAxes": [ + { + "id": "CategoryAxis-1", + "labels": { + "show": true, + "truncate": 100 + }, + "position": "bottom", + "scale": { + "type": "linear" + }, + "show": true, + "style": {}, + "title": {}, + "type": "category" + } + ], + "grid": { + "categoryLines": false, + "style": { + "color": "#eee" + } + }, + "legendPosition": "right", + "seriesParams": [ + { + "data": { + "id": "1", + "label": "Count" + }, + "drawLinesBetweenPoints": true, + "interpolate": "linear", + "mode": "stacked", + "show": "true", + "showCircles": true, + "type": "area", + "valueAxis": "ValueAxis-1" + } + ], + "times": [], + "type": "area", + "valueAxes": [ + { + "id": "ValueAxis-1", + "labels": { + "filter": false, + "rotate": 0, + "show": true, + "truncate": 100 + }, + "name": "LeftAxis-1", + "position": "left", + "scale": { + "mode": "normal", + "type": "linear" + }, + "show": true, + "style": {}, + "title": { + "text": "Count" + }, + "type": "value" + } + ] + }, + "title": "Log Level Timeline [Logs STAN]", + "type": "area" + } + }, + "id": "stan-04083600-41af-11e9-a4da-b1df688edbcd", + "migrationVersion": { + "visualization": "7.10.0" + }, + "namespaces": [ + "default" + ], + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/stan/kibana/visualization/stan-0b2061d0-41ad-11e9-a4da-b1df688edbcd.json b/packages/stan/kibana/visualization/stan-0b2061d0-41ad-11e9-a4da-b1df688edbcd.json new file mode 100644 index 00000000000..921ad9ef6e8 --- /dev/null +++ b/packages/stan/kibana/visualization/stan-0b2061d0-41ad-11e9-a4da-b1df688edbcd.json @@ -0,0 +1,130 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", + "query": { + "language": "kuery", + "query": "data_stream.dataset: stan.log" + } + } + }, + "title": "Communication Directions [Logs STAN]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "schema": "segment", + "type": "date_histogram" + }, + { + "enabled": true, + "id": "3", + "params": { + "field": "network.direction", + "size": 2 + }, + "schema": "group", + "type": "significant_terms" + } + ], + "params": { + "addLegend": true, + "addTimeMarker": false, + "addTooltip": true, + "categoryAxes": [ + { + "id": "CategoryAxis-1", + "labels": { + "show": true, + "truncate": 100 + }, + "position": "bottom", + "scale": { + "type": "linear" + }, + "show": true, + "style": {}, + "title": {}, + "type": "category" + } + ], + "grid": { + "categoryLines": false, + "style": { + "color": "#eee" + } + }, + "legendPosition": "right", + "seriesParams": [ + { + "data": { + "id": "1", + "label": "Count" + }, + "drawLinesBetweenPoints": true, + "mode": "normal", + "show": "true", + "showCircles": true, + "type": "line", + "valueAxis": "ValueAxis-1" + } + ], + "times": [], + "type": "line", + "valueAxes": [ + { + "id": "ValueAxis-1", + "labels": { + "filter": false, + "rotate": 0, + "show": true, + "truncate": 100 + }, + "name": "LeftAxis-1", + "position": "left", + "scale": { + "mode": "normal", + "type": "linear" + }, + "show": true, + "style": {}, + "title": { + "text": "Count" + }, + "type": "value" + } + ] + }, + "title": "Communication Directions [Logs STAN]", + "type": "line" + } + }, + "id": "stan-0b2061d0-41ad-11e9-a4da-b1df688edbcd", + "migrationVersion": { + "visualization": "7.10.0" + }, + "namespaces": [ + "default" + ], + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/stan/kibana/visualization/stan-3f6cca40-41ae-11e9-a4da-b1df688edbcd.json b/packages/stan/kibana/visualization/stan-3f6cca40-41ae-11e9-a4da-b1df688edbcd.json new file mode 100644 index 00000000000..e36918518f9 --- /dev/null +++ b/packages/stan/kibana/visualization/stan-3f6cca40-41ae-11e9-a4da-b1df688edbcd.json @@ -0,0 +1,69 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", + "query": { + "language": "kuery", + "query": "data_stream.dataset: stan.log" + } + } + }, + "title": "Log Level Distribution [Logs STAN]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "field": "log.level", + "size": 10 + }, + "schema": "segment", + "type": "significant_terms" + } + ], + "params": { + "addLegend": true, + "addTooltip": true, + "isDonut": true, + "labels": { + "last_level": true, + "show": true, + "truncate": 100, + "values": true + }, + "legendPosition": "right", + "type": "pie" + }, + "title": "Log Level Distribution [Logs STAN]", + "type": "pie" + } + }, + "id": "stan-3f6cca40-41ae-11e9-a4da-b1df688edbcd", + "migrationVersion": { + "visualization": "7.10.0" + }, + "namespaces": [ + "default" + ], + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/stan/kibana/visualization/stan-4a6d9ec0-41a8-11e9-a4da-b1df688edbcd.json b/packages/stan/kibana/visualization/stan-4a6d9ec0-41a8-11e9-a4da-b1df688edbcd.json new file mode 100644 index 00000000000..f575473609e --- /dev/null +++ b/packages/stan/kibana/visualization/stan-4a6d9ec0-41a8-11e9-a4da-b1df688edbcd.json @@ -0,0 +1,130 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", + "query": { + "language": "kuery", + "query": "data_stream.dataset: stan.log" + } + } + }, + "title": "Topics Timeline [Logs STAN]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "schema": "segment", + "type": "date_histogram" + }, + { + "enabled": true, + "id": "3", + "params": { + "field": "stan.log.msg.subject", + "size": 5 + }, + "schema": "group", + "type": "significant_terms" + } + ], + "params": { + "addLegend": true, + "addTimeMarker": false, + "addTooltip": true, + "categoryAxes": [ + { + "id": "CategoryAxis-1", + "labels": { + "show": true, + "truncate": 100 + }, + "position": "bottom", + "scale": { + "type": "linear" + }, + "show": true, + "style": {}, + "title": {}, + "type": "category" + } + ], + "grid": { + "categoryLines": false, + "style": { + "color": "#eee" + } + }, + "legendPosition": "right", + "seriesParams": [ + { + "data": { + "id": "1", + "label": "Count" + }, + "drawLinesBetweenPoints": true, + "mode": "normal", + "show": "true", + "showCircles": true, + "type": "line", + "valueAxis": "ValueAxis-1" + } + ], + "times": [], + "type": "line", + "valueAxes": [ + { + "id": "ValueAxis-1", + "labels": { + "filter": false, + "rotate": 0, + "show": true, + "truncate": 100 + }, + "name": "LeftAxis-1", + "position": "left", + "scale": { + "mode": "normal", + "type": "linear" + }, + "show": true, + "style": {}, + "title": { + "text": "Count" + }, + "type": "value" + } + ] + }, + "title": "Topics Timeline [Logs STAN]", + "type": "line" + } + }, + "id": "stan-4a6d9ec0-41a8-11e9-a4da-b1df688edbcd", + "migrationVersion": { + "visualization": "7.10.0" + }, + "namespaces": [ + "default" + ], + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/stan/kibana/visualization/stan-6987a800-41a8-11e9-a4da-b1df688edbcd.json b/packages/stan/kibana/visualization/stan-6987a800-41a8-11e9-a4da-b1df688edbcd.json new file mode 100644 index 00000000000..a10eeed3fb5 --- /dev/null +++ b/packages/stan/kibana/visualization/stan-6987a800-41a8-11e9-a4da-b1df688edbcd.json @@ -0,0 +1,133 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", + "query": { + "language": "kuery", + "query": "data_stream.dataset: stan.log" + } + } + }, + "title": "Message Types Timeline [Logs STAN]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": { + "customLabel": "" + }, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "schema": "segment", + "type": "date_histogram" + }, + { + "enabled": true, + "id": "3", + "params": { + "field": "stan.log.msg.type", + "size": 15 + }, + "schema": "group", + "type": "significant_terms" + } + ], + "params": { + "addLegend": true, + "addTimeMarker": false, + "addTooltip": true, + "categoryAxes": [ + { + "id": "CategoryAxis-1", + "labels": { + "show": true, + "truncate": 100 + }, + "position": "bottom", + "scale": { + "type": "linear" + }, + "show": true, + "style": {}, + "title": {}, + "type": "category" + } + ], + "grid": { + "categoryLines": false, + "style": { + "color": "#eee" + } + }, + "legendPosition": "right", + "seriesParams": [ + { + "data": { + "id": "1", + "label": "Count" + }, + "drawLinesBetweenPoints": true, + "interpolate": "cardinal", + "mode": "normal", + "show": "true", + "showCircles": true, + "type": "line", + "valueAxis": "ValueAxis-1" + } + ], + "times": [], + "type": "line", + "valueAxes": [ + { + "id": "ValueAxis-1", + "labels": { + "filter": false, + "rotate": 0, + "show": true, + "truncate": 100 + }, + "name": "LeftAxis-1", + "position": "left", + "scale": { + "mode": "normal", + "type": "linear" + }, + "show": true, + "style": {}, + "title": { + "text": "Count" + }, + "type": "value" + } + ] + }, + "title": "Message Types Timeline [Logs STAN]", + "type": "line" + } + }, + "id": "stan-6987a800-41a8-11e9-a4da-b1df688edbcd", + "migrationVersion": { + "visualization": "7.10.0" + }, + "namespaces": [ + "default" + ], + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/stan/kibana/visualization/stan-7716c780-41ad-11e9-a4da-b1df688edbcd.json b/packages/stan/kibana/visualization/stan-7716c780-41ad-11e9-a4da-b1df688edbcd.json new file mode 100644 index 00000000000..683a14db028 --- /dev/null +++ b/packages/stan/kibana/visualization/stan-7716c780-41ad-11e9-a4da-b1df688edbcd.json @@ -0,0 +1,69 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", + "query": { + "language": "kuery", + "query": "data_stream.dataset: stan.log" + } + } + }, + "title": "Communication Directions Distribution [Logs STAN]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "field": "network.direction", + "size": 2 + }, + "schema": "segment", + "type": "significant_terms" + } + ], + "params": { + "addLegend": true, + "addTooltip": true, + "isDonut": true, + "labels": { + "last_level": true, + "show": true, + "truncate": 100, + "values": true + }, + "legendPosition": "right", + "type": "pie" + }, + "title": "Communication Directions Distribution [Logs STAN]", + "type": "pie" + } + }, + "id": "stan-7716c780-41ad-11e9-a4da-b1df688edbcd", + "migrationVersion": { + "visualization": "7.10.0" + }, + "namespaces": [ + "default" + ], + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/stan/kibana/visualization/stan-7ed62870-41ae-11e9-a4da-b1df688edbcd.json b/packages/stan/kibana/visualization/stan-7ed62870-41ae-11e9-a4da-b1df688edbcd.json new file mode 100644 index 00000000000..d3a54c015c7 --- /dev/null +++ b/packages/stan/kibana/visualization/stan-7ed62870-41ae-11e9-a4da-b1df688edbcd.json @@ -0,0 +1,69 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", + "query": { + "language": "kuery", + "query": "data_stream.dataset: stan.log" + } + } + }, + "title": "Message Type Distribution [Logs STAN]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "params": { + "field": "stan.log.msg.type", + "size": 15 + }, + "schema": "segment", + "type": "significant_terms" + } + ], + "params": { + "addLegend": true, + "addTooltip": true, + "isDonut": true, + "labels": { + "last_level": true, + "show": true, + "truncate": 100, + "values": true + }, + "legendPosition": "right", + "type": "pie" + }, + "title": "Message Type Distribution [Logs STAN]", + "type": "pie" + } + }, + "id": "stan-7ed62870-41ae-11e9-a4da-b1df688edbcd", + "migrationVersion": { + "visualization": "7.10.0" + }, + "namespaces": [ + "default" + ], + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/stan/kibana/visualization/stan-c3d1ab80-41a8-11e9-a4da-b1df688edbcd.json b/packages/stan/kibana/visualization/stan-c3d1ab80-41a8-11e9-a4da-b1df688edbcd.json new file mode 100644 index 00000000000..a877cca4650 --- /dev/null +++ b/packages/stan/kibana/visualization/stan-c3d1ab80-41a8-11e9-a4da-b1df688edbcd.json @@ -0,0 +1,123 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", + "query": { + "language": "kuery", + "query": "data_stream.dataset: stan.log" + } + } + }, + "title": " Bytes Timeline [Logs STAN]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": { + "customLabel": "Sum of Message Bytes", + "field": "stan.log.msg.bytes" + }, + "schema": "metric", + "type": "sum" + }, + { + "enabled": true, + "id": "2", + "schema": "segment", + "type": "date_histogram" + } + ], + "params": { + "addLegend": true, + "addTimeMarker": false, + "addTooltip": true, + "categoryAxes": [ + { + "id": "CategoryAxis-1", + "labels": { + "show": true, + "truncate": 100 + }, + "position": "bottom", + "scale": { + "type": "linear" + }, + "show": true, + "style": {}, + "title": {}, + "type": "category" + } + ], + "grid": { + "categoryLines": false, + "style": { + "color": "#eee" + } + }, + "legendPosition": "right", + "seriesParams": [ + { + "data": { + "id": "1", + "label": "Sum of Message Bytes" + }, + "drawLinesBetweenPoints": true, + "mode": "normal", + "show": "true", + "showCircles": true, + "type": "line", + "valueAxis": "ValueAxis-1" + } + ], + "times": [], + "type": "line", + "valueAxes": [ + { + "id": "ValueAxis-1", + "labels": { + "filter": false, + "rotate": 0, + "show": true, + "truncate": 100 + }, + "name": "LeftAxis-1", + "position": "left", + "scale": { + "mode": "normal", + "type": "linear" + }, + "show": true, + "style": {}, + "title": { + "text": "Sum of Message Bytes" + }, + "type": "value" + } + ] + }, + "title": " Bytes Timeline [Logs STAN]", + "type": "line" + } + }, + "id": "stan-c3d1ab80-41a8-11e9-a4da-b1df688edbcd", + "migrationVersion": { + "visualization": "7.10.0" + }, + "namespaces": [ + "default" + ], + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file diff --git a/packages/stan/kibana/visualization/stan-c669ae20-41ed-11e9-ac5c-71ffa38a62e3.json b/packages/stan/kibana/visualization/stan-c669ae20-41ed-11e9-ac5c-71ffa38a62e3.json new file mode 100644 index 00000000000..c3485a2b3ab --- /dev/null +++ b/packages/stan/kibana/visualization/stan-c669ae20-41ed-11e9-ac5c-71ffa38a62e3.json @@ -0,0 +1,150 @@ +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": { + "filter": [], + "indexRefName": "kibanaSavedObjectMeta.searchSourceJSON.index", + "query": { + "language": "kuery", + "query": "data_stream.dataset: stan.log" + } + } + }, + "title": "Client IP Count Timeline [Logs STAN]", + "uiStateJSON": {}, + "version": 1, + "visState": { + "aggs": [ + { + "enabled": true, + "id": "1", + "params": {}, + "schema": "metric", + "type": "count" + }, + { + "enabled": true, + "id": "2", + "schema": "segment", + "type": "date_histogram" + }, + { + "enabled": true, + "id": "3", + "params": { + "field": "client.ip", + "ipRangeType": "fromTo", + "ranges": { + "fromTo": [ + { + "from": "0.0.0.0", + "to": "127.255.255.255" + }, + { + "from": "128.0.0.0", + "to": "191.255.255.255" + } + ], + "mask": [ + { + "mask": "0.0.0.0/1" + }, + { + "mask": "128.0.0.0/2" + } + ] + } + }, + "schema": "group", + "type": "ip_range" + } + ], + "params": { + "addLegend": true, + "addTimeMarker": false, + "addTooltip": true, + "categoryAxes": [ + { + "id": "CategoryAxis-1", + "labels": { + "show": true, + "truncate": 100 + }, + "position": "bottom", + "scale": { + "type": "linear" + }, + "show": true, + "style": {}, + "title": {}, + "type": "category" + } + ], + "grid": { + "categoryLines": false, + "style": { + "color": "#eee" + } + }, + "legendPosition": "right", + "seriesParams": [ + { + "data": { + "id": "1", + "label": "Count" + }, + "drawLinesBetweenPoints": true, + "mode": "normal", + "show": "true", + "showCircles": true, + "type": "line", + "valueAxis": "ValueAxis-1" + } + ], + "times": [], + "type": "line", + "valueAxes": [ + { + "id": "ValueAxis-1", + "labels": { + "filter": false, + "rotate": 0, + "show": true, + "truncate": 100 + }, + "name": "LeftAxis-1", + "position": "left", + "scale": { + "mode": "normal", + "type": "linear" + }, + "show": true, + "style": {}, + "title": { + "text": "Count" + }, + "type": "value" + } + ] + }, + "title": "Client IP Count Timeline [Logs STAN]", + "type": "line" + } + }, + "id": "stan-c669ae20-41ed-11e9-ac5c-71ffa38a62e3", + "migrationVersion": { + "visualization": "7.10.0" + }, + "namespaces": [ + "default" + ], + "references": [ + { + "id": "logs-*", + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern" + } + ], + "type": "visualization" +} \ No newline at end of file From 031585dfd8f01016ab4e49a73b9903672a4f10ea Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Mon, 18 Jan 2021 15:39:05 +0200 Subject: [PATCH 10/14] final fixups Signed-off-by: ChrsMark --- packages/stan/_dev/deploy/docker/run.sh | 6 ++-- packages/stan/img/filebeat-stan-overview.png | Bin 0 -> 234370 bytes .../dashboard/stan-Logs-stan-overview.json | 26 +++++++++--------- packages/stan/manifest.yml | 4 +++ 4 files changed, 19 insertions(+), 17 deletions(-) create mode 100644 packages/stan/img/filebeat-stan-overview.png diff --git a/packages/stan/_dev/deploy/docker/run.sh b/packages/stan/_dev/deploy/docker/run.sh index e2de463e057..cf6dc302d6f 100755 --- a/packages/stan/_dev/deploy/docker/run.sh +++ b/packages/stan/_dev/deploy/docker/run.sh @@ -2,10 +2,8 @@ /nats-streaming-server -DV -l /var/log/stan/stan.log -m 8222 & sleep 2 -while true; do /stan-bench -np 0 -ns 100 -qgroup T -n 100000000 -ms 1024 foo; done & -while true; do /stan-bench -np 10 -ns 10 -n 1000000000 -ms 1024 bar; done & -/stan-bench -np 0 -ns 100 -qgroup T -n 100000000 -ms 1024 fooZ & -/stan-bench -np 10 -ns 10 -n 1000000000 -ms 1024 baz & +#while true; do /stan-bench -np 0 -ns 100 -qgroup T -n 100000000 -ms 1024 foo; done & +#while true; do /stan-bench -np 10 -ns 10 -n 1000000000 -ms 1024 bar; done & # Make sure the container keeps running tail -f /dev/null diff --git a/packages/stan/img/filebeat-stan-overview.png b/packages/stan/img/filebeat-stan-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..7d0cca6cb2c12ce9b685d3f0e569dd7a8fa46244 GIT binary patch literal 234370 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≪W7QWo)>S&Sgkk)wnqftT-4hs;y++ zx;r;yz0zK-@#JVfa(U`G(hnAuPM<5wd-V-vP!>yDf0T+qd3&LfM*o9!5`%cw5`WAH zhYqtG3=H7DNRBaEYD$TA?+wM`C=}sL&T03|NfXy)9c()aceqfxR+#>=2mLy1uj3)nz`YGj7Bv*F4R_hQSsTdz>G+e&6%4actec6eaziF9} zOwcfkqGo2A2>vD^UR8P5sGdGX;qjim@Z_?tMM+61COTTru3Yn{RUw}PTj9pP3JQJZ zdO|Z@vw;K()BuSdQb}dG-{QqE9KT6nxzQ@KSKHXz*C%9d{%&n;tt501bPD^k#B6&kA2d55ZLYI^;3!YoyZd-ds-n+(X<0I7jdCYxU%?HQ9+4B7e@F*OX zJ8_@cE+i2y85g!Ev&bl2NPH9aS<@|c(m+K-$ew4G6kfW$V_sLH67`}aD4K;MH{w@& zozbv}@X>;w|K!iSY2q&Ye?TQw!Qoidit)9xQKs} z>hG6tW6}&y3S7g76+UY9-d5YgU=$EQh{RKK&vngg@00QE2gc?6!SGGKK7+H{)Ey)+ z{;wxBNDLn7+4SQX1-J~FUPqeaGYb{P2JP_Iwu~9bngo1 z(?17FO4hIUGswjpA`54jpA5`9;*YINZ>44~`Gi`MLJYwHhqNi2{E&hY+8>+~gz?QZ zD`<(U=<{2>v!Waz58F+IU{W(XEhrx>>po&1*tC9bTglFePD--D8pQm!)^A^eie~I# z{?lqlwS3}tsewQ&c}+UUOIb)@*r!JvlGXf`O#Ue5q4w>skbEz&$rl_gT>ij`-&!I!1%z_A6~dSlHNPY-|&x z(`De$P=vfJ9`TV``-b39DS+J#!#V9i~I z#PrUm1jH)6PGu-pcCmW8Y$cLt+BT5gRK$gMVS%s&yKOWoa^`oYI%j!o+4pE)3xS^D z;o;kD_Bm;|B1xVRfk6c#U%njf;ARenHU8OkH^jc=fu|SEX-BW=Q~?cz`Dzwn|I5{Z z#sLliuLcUq)HZzVHgMfzPxJM{?#R}WkqNer>$xXVgUhQQviMqorS!pk~8Y!W@sW?3H2_K)qPw0PX0%Q8V4+|D&Rc!1XR2bq2G6;x?JN%*}9SF<{+ zCIbd}nerw3lzL{uGDZ}|`G`ROJQ`>}qG&*gsLZ!7{-K|2@2KY9SQQm2*!rv!h`bI` zoiwwjZN5*{P4({`mL*$yV@w8-MNP{8P#SQ*6m7CNL#;ct^z(C2$4C69TwnRbnVD{v z6JK{CuiH;}ga7`E6)|WmFsRZ7DU5^UvM)k8kM^xzqEARA*a}r;v#H^FrLk4p?=@mp z7X>O<+}0tVAH87YK8(c3RWg@ zu(OMb5K!NHpp557h>IHMiCkJR3iq&?*!&4|8%hNRVV8ak+`{XX;)dZb&xo0xJf2ls zsfSH}Huni3_k-@iyvD+e==fMfp$uV470##lLuwb(J@cc7yB|{r z@&qwXJ^PJu+8x4}KMJ{Di7l>UKzu1>$n zpIt@@!48p9E{`474ca5O!+3Fk=6~l0LVq17H2xf{2x?PFZA)T|;7Ba%)!YAY28>z#( z_kXV5S^?L*uWgJZ;q10H)E#Q?i8TG@9L3PRmz+$K-rp~lHuXNCG3PsfnF^wz`#|E5 z?Lj$a|JGQHTW#g>NVbTW>%WAe4auULMeqA@ON8CO*zW3yGL_{BG%b1_qdN9EF|2mM8(xe z_E6Q{pzwmDtH%sWYrcIz+krzO)=L%pJ=W;0S&NU#cVkw%Wt$Y4U0II(M)eO5=YrsS zwkD+SrURDc zz0+wgmo38LFDJ#ot*xzWmEt{t{<%8Kuw(Bcl*3qCa!fyeYP|-RxIy68>x6`a>`8Av zT-Jg#;Ex4 z?Ryo%7)qT*+)o`(fB==tDWj+u9l=m{!9 z#c15nTi{Eq`1d6jt@ur|e1|!gJ%WORzYKbxc(IvdSQcP&-xp;ed6Q| zyTDi8-pZj&S%3ntGeZVp6I_v@kq@TH7RaO4gVldEu}e!-G%c*w{~tKOIAMT%zqLLj%v z6}DRS*CXCOKoXX4%Juy_!4=@*3GA;@P^ZzX5AuER{>=jDoz1U)@bRaSY@38$TTgA! zd_61=X)P)L14H?`FYW8D6>E-44x?Fa$G2VJ~=z(ZtPc7H)!aKVssEjH1X5A zQtW=I=l+!K&Ca^KZL!2L2F`Rp&2dc77S9D=FIP16-}42S-W>V?AnX9~1BTO&mg~dH zrn3O2*x%!g)U*!_?)f2W-tW(%`l}HL6;Kd|a~yRz2MQ_@QrpA537t)F05oi;Jk=x` z<+(C;qobtaFe463%R9_&n(eCAY%Wb3+#dPAfF&9_oco?0m_pH$?#aC$MbMcp`u6wt zKD256FATJ_V#dalUc_KRQF)RIBvm} z4YaVlxZh0Dt+alG;cMAJzjWw#J#OinNp6I(X+F0}2lGc!XStN9l4!)VxTEU0Zf3b0 zFWaPkHqGOJW?`vDC&DxSm<;6nFuz$rNMgB_>(6srn@7`m@Ki|V>#NEOYL7GRr)IY1 z7*$?;1tGC2jkM|LFs(QHZkFUx!V+x+@IcnfsyyDM#(7t$YQX}BS{`|)Tpcm}@A)4= zCs%_PkI^oxgMb5FKG3n^a_YLle*2`~(k3OL`AfS;5a0bELg7bleJiO5e4T%S?@#EW z2+yrfm%!IMx=IXow!V<8;+W2w^sTedh7Hkd#m2AS`85>6vKhV!%s#h6AFgy5h z?*edkFv5@s-UZ5cf@lu^o`FQN9AxUvsEK&oQj&!Nv38w^EgE>1TPcqi8^2okH_hn| zw`|g>8Z5Uw)-ut%TnJU)cWDx-yx}$llTq;?K#(VdW%o80mDpg+&)}Z+jhNiL%zGTelKgW4#;e014rhWpb-R^`V)FPHDT@v@E- zR@0GUQ&fObQVI?YWh<&O>Pw=bq3I&3TMm7pf}c7O6F6Jue@67|m$wvL3=9nPAaf3N z{QS(z`CsBO++(!zGoh}jDFRtROclpewd5>yaVl_Nok=huNJ~$)#o3*gsy#PTF#foVz+*o3R2V#HE zw^a0k-f@8&xNw$d{|+L%DRiY-aSA*qN5QT{dfb1I%0FB1q8y$h(>i|N^#AU zT1&G1?#yWavHh){$@mX8WmVNwOv946C6C9u%a7fI$zFI*GdKB_rCT8vNFLjZ*Kcxk zx8)>5slOeJ7aC$TIv*GDeZvD;!8zp}7jnl>U%q8BthyZ82C~FnA!JaT&nJu#7JpN_ z@-5ua*1S(;;{*u^5n&&yM~T=zX)ZB*?rgC5f%`f}5DKkgb2V#Wxh35bogC}OYKlS_ z_E1dn42pECW@JZ)@GmuH;|{Y0F8ju@)`|*s|LKWVuFMuwfmql}rM)=VtIo2;dl{n_ z>xs~#J7QFupo5GBDjv5m{ssLc36}#j(OjL1aDZ4?0hVM4{EYWXMTm^fAEX)W^Hvb3 z$FU`5wglnZB8eyafBH93j8^lr$=|ydiB%HF56;&JBCy zzo|u)b@OEYZ-Gep?;oHZ(8hWnq*ro3KxP768pU-4H<#XZI6Bb zyvkH}WyD|ZaUn)9;N$?YCc0dHkH7?AZ+06i1kfcbopP#y!24Fcx6K|}Ql3=aB?@)- zuC>+uVka=m>+W@)v9bD9Ehs*=9WI%n>BJ~f!1ev|LZTsk0*cl(lTa#;Pz@$o=~;7E3?q5pZN-RAz|PRv*hx zC$CPGV4FoLytyB;bP|49^eGy%RDnDiNiRC5~l--@(3!$}wd<1aRo+B}1x)%MJxC*1ik!JyiKtUS@*ArTW*d0Dim zP=MXp|JCy=^q<+y7>NU8xKsbQ#$Ol(MI+f&1%yJX;hth(kao&I;;50tC;#8#^Mms^ zQylm}x{Qq;!6tdwrl9wFFlYNbhh@`pS~cd_aZ{Q6d?JiQ$Obw6cxaI~43B#m%C zCw9Sl{ra`U!3cy+(`oF-rh}Y^Un6yYDQ+ouBcr!Zw|CM~!IbN-T!l>$FbR zY=>38w<8MBQ=hr>W|jHl@F|#=s;)~+Fh451hm;Mf>kMH$Wc@IKua!e?V~U*`VWpds znDqAlkoDGKQFY%RsFZ+ocS;Eok^(~rQX(x~A|fCt-3%e!AdSF)NOyO44&9A3(w+BE z@Ar4_{l~}0VCL+z_g?E0YpwaKdjzmdFvk5SwK-8fF$4sXbAZ_zFRTxZhWPX)@KMvW zIM13$e+cmR#}l0!8KO_og^;&>pQ*M63Jfx197Z^EbgE%)(cNTMHxp%f-2QoS>fFbc zf`CH18!FE4q$z)Ylzo5yYnKPW^Ad0C$gNx1B`sn4bad2evmRr|{P|q|` zo-y574ZD$Xm!qi4a&1{-9C%q+pg~9(C-#82>0}d8>G-9$Zfab6<;G#NS9KuWPEMap z?w*{KY`{V4z)UPsJJ_=Fi3cmTw^XyXF0L%P~Tk5lf^^3mG*N9&)Whn zt06A??$}*QD{o?XPRLV@d)C52eE?3ptxn{vpEJF85!fWlk`ZXI*fsvD$kqR6yXwqI z^G%J(+7F;T63qU`fe2w|Ee;^x28c5_cRO;Tz!@K_TPbSEf-${9R+?ly;U;JVIsU1~ zC&U2xL}H?gzSM+%;phI8Fwo}!%haAuGp1<~OTW`sy{-CNkkIq$Vupv!eEvyuYA+PP zi*Ju(i%$;^@Vc(~TolpUPX)_MAKA5YipMZ?a3jw1~;WN1CGm%EAY4EETqF5st zSlbnL?ntHhZcf`3QpP)jF9uA(^752zL6z_rtd2VCJjRzslF+yK51>OHhk=>FN45q@ z7AnYvm+15i=7=2HGM;XGR$LO()%9*#=!B}Jjk^uNvcE;N^3@8lPiBNDOkB?T2HE~Q z1e(~l`cGk0v0RzYDPnTJmmVk;UBsZ3=Z&BeDp)D~{ac(c4l@ARF%D3XI*?m0^{j_V z^kS2cc&I{jeSiK`^z>G7LirL8@`_mKM8bSphq#^K1z==Pq?CkdtFBL(I%P7yIPt^V zf_|n`TZ7&9J0F?BBsxk_fSkkcB@h|bvfn1Uy@V4yeF_vx(O0@d zUy;(dDBNHM{ETKm#NRZ(A8wT zRqW||L@oj_4fNXArnN`RR>z(DXRFd!1ddBry5#Kg~t^1@sBkzcA8J}vK!|7u|Yc3=vd7UYn{!KDW(u3ESKCa~4%~sd5vJ%zGA=P_jq( zbA#X+919BaDKX##HDjJW@#ee;1V`%%D!)4Jbu~)HT8OXya^Mge_VnT21qBK3Ie;Ar z00E$cUjj^fe}@>dCIT{UV?)5X{zb6%?#YR0eI2;JI2}wyv6bL)^>Ae;Q6T}YavqyE zVWZ9V@1S+@`#-$p{j5TTZ}GsuL5A%7>kboSQU*SQlgVH_!==cSxfed9xI~2BR6+bp z8&MvwN-PLUmRxmhi><{ag!Xt0jWz+U<2)rxM0MvymsP+fvj?nX!w`}r#too)9jR0+ zwbM8k{?#{?obk0z7n~ zU_KH=bn>RqMuHUGdcjluC5Ytvt&f@fn~!FaTx7y#d+|wvw&G{XyEr#$k_|IRJu&g0 zj)K5W#}32+Pa|dh<^G4OJq-QCs8?Yja=1y3rK(>~jZsV- zl`4?l>X;~WcgW*5ZeD+_P3?x1QlmNPvn2euxm?xPFJINQM*zCXHZ44t2(tMPDaujJ zOA^Xerit)$O|8BN%rtDq?C9tz;|l{Mm61kM8W;?kd0#_F>2fI!6~Jf|i)SnVrdhcF zMfDHp+UlwJzZpE>YrGrgVMc?%k&%%xRwtlon-i_p6gd{>b=B@ymp`Qo?RH%97aF|o zmm83cJ`rCy@1!}c`^y0S*=49krR%n+uP;(N;DHF5Ns~$NZEB(h?XP|MKT%!@DPncA z+5YJy($Wh7{?9Ld7ebZ3=R(&jKerNRo0OG8i}_-LZcWS9%F5JRmV$rm67f^DV~z-@ zOJh9Px1Iwl{7qMa-!T$`GYej<1}x!qB7h0qbz{Xko1sqo3~ux$(Le0D1SL1O$~wRE zsr)k0fIbSOgfA-Skr?WO_qSrTKWJ?|6G=SZ&sWW(Z{2qw4C%=|+HTXyX5#k;^C9`w_#9zubR zI|<2$j#8%@QUo|*_IDM_<%vVeL-ZR!c{cRMt?4ttQxm@76mHcx4X+G zwjB1NnF@mZPskke?5yY84CYCg)%{W%$t9iET+{Bd0psJzS!nqZZm|_$bu#<{fX^?l zhR*_8*8j8KNx^SnEM=Z-r4&NLxAV-_i76yJJk4e-@Yy7EAdeKX5{Ee37U2Sc# zVHP|I(i8~gGLwInhq%`9t$$I-;m6L%_i>e%Pr@F_OjBUJ=pizwbSD2BY?r_ncIUAf z7fpIyPU_xxjf9R-lFok->ZXY$zq9wguJLQMkQH$^W+KFO4^N}SC^!I7+Y<=3Ve!0p zB;1$of?&sFg%t4>@510mNE0P2rt{*mrJK<`D96VHsS>lTxIpBlEqaQ@*Z=ILJ5jh& zsP4zJ3u6<=YVmx9c|MK&@9ch4ZEcd$(f9ZWBMEMKHP{-C$C1naY>6*#jdphim-577 zV6xd%}|rmfcX7P}JUW zi1{e9^gdq&U<5DqPR$kZtrKzfbd|qLZ|!-IYY403uzBYrX|_vv2V6h+%78^LkLuZD zi=lLkw&qywfjy>gCB)U^XGR5~i^ANYZiv_nBatR)HeJ{-t z9Id!x+~jaH{8uc%$|V&oWMT$B*_eQnuD`@3;kowHUa!W&CG;d;M9XXRU=;^!Ii;S( zKOPr9R(N|QoPl36u%Y84E*Y=S?r{)vmdW8(cF7j6fki?XH6)6=u!xn1tTP^P33&Zof-DH5>NesB-lxS)~m5zZXXP$`Xg?+Xl^Y z!LZNKMdKRzCfHEFd?k`f&TBp zY9y6mqbVAdhbHw`4ryBK)fCr9Oh)yDZ|VR#vIWr5=lAFnTjO-=lyZa9HEwmB^j1*B z8`y2(+o$!D^*ll@Am5lE8{PWH*AY6Uyl7XZ(kc{_7^hMAhZIWrfAwkA^_`s%z2>J( zK887Q8jt+54eW%^egrz|l5ql#=1eqj)K_=vzAAD&1POB%ci4qqLxy&{FGRAvE>#|e zbF1ALOGB&}BkYG#UQCSErx2rXuxVsg7Gp%z$gvTdYW~oAt@_tvo?&S@P;;fDj=HXb z!W3M}3aRDRl-UhQdQlPOlsGDd|8jR!hM4-WvTasobf+*ywQq>YiarxS_cgG)W1|5f zUfpGpA|L?y^z2P~Y9Xs{n;^lQg6v!afI@`;kHx(KPngSn8b@sWu#+lvF`t?Dbxq^B zRq{p{=sC;@)jiiX%;LJ8!ou~a2Crhi9>@u!uJ~Y&g3A?Dz~@J0sGA(nWKYf)=aV`| zTAGz&dbu%`5(;LHjAU|c=or8WW48ot*PX!N;^H!B*K42E7GBp?VkB2osAcX*0zF+(9G5^ksBc{4D^mb2>`ptpd+JZvOx)ABnk(6a_*}=CjVyvq37*% z;e~bfVPTnu`o{mJSJkPT9nEOuv$FrGYmM1NeVDv`C0D}N<_@E|LUjK2C1BJ)F%UGy* z?p2vuI~{K0n%ERj>4s+qf-6_0b2rkzmkirY9g`9A(GUSIS^VQi%0J29HX{5&kHYDK zB>>qG2??ozYfS5ffv$5U>Vlr$c&%YRyH8~$T2T);??wP`Oou}>wp!HZ_?@rZ`UrghCuWz8r>Eyf zU$vn`fr}o$-OMUlrcpI*))NPny@G*mB%{paZ*O>aCsrf*d1$^iV}C~nLw_5qVMnYow6BMc9t1y1 z7&97kZaFjIfFSh3${KN)|D4v#9$G?mPlvZGNim=b=v9QFJCKreLcc%kXVXJYJ z2u9(MXcn=~PG{U38}in6Xv*%mLquYiT?~@I1*v!&47n^&&aq0M=Hg%~s=-ItHPmdz zK5{Q*n#TyIOKb3gyx}Ap5*~;sJH?+>kBFfd`LEV)R6tNs^Eg2Uk7?wZ*3v@Qu;4Qb z=4Olih$F)NJG=ei#)LL<(2Ij@o3(z~_hnd;wm`Q-LjLFE?Ry*x=$;cCv6)%{!wj(bwb%HQr6wrSR^9yxZ<_dbx73LoOFaB8Z%aJZRhi7E za(SqhTBI(|H~D%hO}H)l{>B_Gc_rSmQ@;U#Tp^q!lVM}_O+t8Jd=-g#^%(6tb}*gj zWL&~qRUN;s-U;B@k@y#jeC0`pfVHB|REQsawS*xp{|_TGwp%V|Cn zbaEG?#81wg9dSZ8F4J~5qNk>v(eFl@+Q~(-qnLY$FFr65dtXei26nzsnHygfgs#?M z3s%qjGma>V^NCg@Nw_Z_{E* z?^i{2b!4JvC0S}awBO5cn4}t{Z*S&wRY>%#JxjntrX<;reVb#r(55az^{_6oL~4+U zCOXOtJygT70;FYR#DG)K$quyf&HRhP{-5c$9mjs_U+(F82+rxg7j8?rZ$VX}nVebU zUuNi1RmH+-##n;N1>a;$cz6oo#I5lcy|;(4sVK6&z;ZCW**X0<-lBJyGTNIS2euE5Z z#ehxm1z#)&%jni-_t?ESB9hc0y3U#d`5BEm&;?Fpb!Bq4`e#t}3>SrUD+XdV2>)2u zNms=1#|3_S{7P_E@H$+bD#(KxlVFfAwzo1@&(BZfc_Thg5SZV{3Jf0r--N)_AREt4&v(cIaS z31ugn_a0Fqp$N~9%!2qn)kwWQR*&U-b6YVz7|2hHOi*__0H`V1fzN~CnwO@!QJWw9D zwe-aQ<5}t4zCC7{Xz+c0HG=LVHPEm1z_jjAwpJrj!7}r1N?l+ zhE*h^hoAOrxIK?tfN_|SoZFEKW_==E zc_P9|o=G7>NdlIHs|InfIK&IyIS42xyZL)P14ct0lYR(Uz&eu4-2-s|$2@Y}yFfXI zE`;-R!eooX@mP6qd=+I5LrzOy{7ac~X(hDS-zP{%l2S)he=ZN!d*Av<^|RBpLhpyQ zSq2>rb=KN!WFmkj2s28%as!C@G zdaRuQ@?ke9_AN3F1OvzzlG^O`V7P?`R)$_0hd&4m<8qC3fPsJZ1F$LK=wbqN)`^3T zy;3Dj06b%sHQ}HdzrOC*ZI}pEWsUd{v_4vSFGgp(FWGeAr;Ql3)W%yw@N{1GxVISq z$)M5JK?cb?g9k$Ewtf=x{=@%>KCE$_2<7SzLkQ5prc=y&|K-3yF;ungd16`LX~mbs zH1;D}m~<>8TvnsE@SY!qtr2BbUTZ~oEvvhJr4A4wr7r+6q45zpX?hHnDwx2ZAsA8m zQA;)y-`3w0ZxfW>L+Lw8*XbeB0uWl@$GFeKEeeVhP6z}8u4iN`z-7&R;#h0=Ube7G z{2^DyCd8dlD2`+nN=S=+`OGq~K~P!3)x$m&#_s5}0h+&%;z&US{oGq+Zhe=UBY_v7Z2R%GRQM9q<;u%LNXJV7 z!~~=lorC7^@7|tnrK`04A>UHzoEi9jpf;kZ8%Agq!?#GXLz(~ zbRrJt0r6%p(In=lhJGo0$aH;^URT_8S)KChFejfdm>wpC=5AAQ0L%3^D0T3^{VOQ* zA7Q2SCZnVT6~W7^O*DOIL{YR1aQ2K;*F`;fFn*rmx)&3GE;P81i=Ae$n#R*{Zr*uC zyJrVDpPuzB7>>HP6?BTY)u^KEB z*CiQGrGsn74gx?fQ~$T&T6Yk}-anpTKqLl4lJawDVAz{bb0QcK3qS3oD29JkrNnfg zNAe;Z8nqCu>#CZ^N+tlSDhJ7l=hra9?RenCA+(fM$6h{9sVN&=FoFu)K60&?>#mKJIU|E?O%aGnI@RTU+WG3(AGZ1AoEfd za`6D{pVHcDW{B>m6&nKKWHS@Mt>fL06caoi=BgEbbZz|wv22A*Y%aq#t|JAr`}VK_ zoUZp}ZMrhiSV@S=Zw4QDP%v;KQb2xgSvV@`{dfNYzv;e9o9=|><%K?z&MrX@hm&b< z0*K>V-eK=LfblXNuRzGJD?rKz)nnFQNBILa0uFE-kpVp@LT2D)Y?~+(dSH; z?RdS5lsH}4@T|eAD~jMN(fOZCK-q|SIr*m@QmUw&3guE({EeZnQEZmHo5W*3+Fj>; z?d{^t-CVj*TvUX;pP~NQ^~I3Z3r0qjtX_w$UzmB}H_>On_$rhhyA08Pw1qPpZ2qE>4g9xt9CF*xc<`)6 zdgVje3h>~%x3LFs%K!*I?}_C~5AS8o7lB!a8`tsbn^3=Jh!|vIil1PCx_K-dGOw0n zZey0kh)#Xnt(q6A$z zCNs$Udg(JjJnV0*gTR2h&={KBTN21nAwu#NGWM@zLx%P3b2a5!Ba_mRoCkz}; z+Xu|JG^H)y(_07o4!tKw2y-jPA_Td$37S=>YhgUHAZ}(4gq&)Wv^SbaISbi9il*V^ zQqW1Lg~-hl#SQC2`=^TbK2@0_-2~^iT=a+6RL|;oSMASuTdp;CE-qEs$TYKKXP6W!n4a&sy-MmoG=B zR%LIW-+UfZ@anJ7=~X!dFb%o4Xx#zW&sxK>lKm)t!^>&l43FAOdo_j8sP4&%)a{$@(XXZO{RlIZ9ZGh%d0Dk z)@7waDf^wy-Cu*dsyZs(Jagv+QTb|qO6uy=5Ivx*CBYM@({x9zthAkR3?$blX0#lF z{IcjBQDv;Wpr)oaKN=Y-bm&$w*y`ocPLHp@>>?R2`-UhB>1(st+m{7w9zVkoso2;s zhtlPWowT>qgkbY#S4ZTWg6Z6=a6*$oH~2g`+ps->mur9doTF<;-lJrfP!`bcAn9PW z2{NOI+JBV_F9L<#20S$5yjRDa!!IMLx2lsnGO!FS`$nJ9ni)ky457=vYidNaQ{y$W zqN$cpUV296(|Y3l7bk9Ilv_)TK7?tElE)6?rTx=Y%Yz7+nMTp}{u*^0gCTkzS2BJY z1}gqyS;(7}%%RtG$$DOO=sU1T0(@$9M_$S|@@s2|CtKJb~rS7qvTspk3-C~UA zi}ZR!fY#6vf%T4_C@!d#_tpi@E5Vlf)6M60Sr7v-gW2QLqn0O{bxmFb7kz;LlbruS zH7_f3Zasrez}$Ff_6VnGfM$LHe!90=cg03_&gqHWY`wh0=<~hAzP?7lt?rK?SM$d? zv5Or|K}SKs-AnEU4)Cdy11)=yj5Tc;>{=CTO)n1*mMcuQMS5bZktkft-mgO+W&c}P z%={lL&QB&Fp(IBSCgVjtAO~wqY_+zveH5Nc9IvsVzdqZRKte}v8&_ya%rM`(k$mU_PAMYFcXCexg0RH9>% zbFFhKc9xRk_`j)git_6#@jx;TZ2Aw0hY6m0te}^ugZyUue~?R~rt5VnUTRlq)o5!6 z|NM#VytmALxH(2(*wP#q8j9JIXcMrzNa72Jh|Z`#)mGjJSZM>vy>!8)HBs+XhJ%3Q zJWVH>E49KBqN+ro6Yj=@q(#E>cF1@PGL>C<5}WqSF{1zo4!fP5bDSgB=dZ6&=;NNH zvfcJ)xwD<~nDz;tVW0R%W@BQJf1x=$AjT4-HXxjJ_(!yS24%F!WvM4D+)Hix_sjKuZ=hu=k=-tsbe+L;e*m91JA0g=~on z*Nx8#J`s5C#nXTk`NT?^uA4SOM_0BJx1L{UFd`#=+iP?cY+7uGhyxPe-U1f!J3qS>eEbJwXXfd(&RKqO10vvdvu}jOyCJ-2IVDu@{crzV zz!x9KeGB~u^1n^lr)qmY1z(L2>@{2>FyLWmK1HiSVlT;vXuS_Hx28mf79bc0_!qjv z6Z_@+O8^XLNFTM`is@zRhW$VAwx% z@aDq3YIHOgI%=&)0_0%sjc~-H<70ezwB(6Sh=~sCGS9aU1uiVwzl|}Cb;4aNjFbzq zm34+6&Ro38a5baFb#DK2+|k`laM8&gaD<3X_QvPokc#J%Ys>uI zf0T!S?F&?l0*;2N%gXayGoov0a&PLnN#gPPkOjrP6%L&Y+2J-J<ElJ@y}iW-jt2M0PT-u#QHk$0!E zu{SjAMPZ%02df9>X9h|UJeg={Q{`#IvW4?uh*HMK%U6R zXm5OX`*|W@;Li1c0Hz=>uV%s`O5wsMdkflbX@~&089j)h0xx%{FdSAz*$5^mC%JIv z^Exkx71h_wy1LR`WxjSuQgqIWnsX!HF#Dj)q)@|nEgYygVm4CrrpGBb%Ap68DdNfM zd^%`&th&*J2t`zl*g+cg+yPNIi-Z_o^nadDsl6W+%jY=0CL>Mbx``D0E=@*T{MKus zg+Y(?D7V}EmdUUAnjNR+2QY5h_}qG?&*Hd^w^%mhG43-YR!aGVVki*p3xHZcu`2dx z`IzAvp}O@GNCjgE6}^WnzQ0Y6W|IWtg~Y#6)c$L2z#wk_WR z(%%ox)6SnS_Kz~rY>HSE?AHx4ntCCfyaC)6xjCcR%|nLquT$;MrPPaP=;-1E4s$Ob zYgB+BwfzA1E9*CgLm#q$4LM2)`(p(7Q>rS3((+gV#ndtPmwEeJ;a1WfbJq*`jN%ip;iG2 zq(?X*6diZhxcEtYD(V0tu(wl-TD{<|m;q@bXXtaVdo!Qn5KxR%R5NcCK$ z1DCA`QhELd{h#?-$E$d3@8*{awD$6zM_V!DeKW7*h3?<;?XLyDZnGW0M*uj6$~kRm z?v!Z2u?(0CFXF^~{6QAMFUY^M9anY~%jM>Bo_98fQ45?bE=`RKyj>aF9I8&AxtbUN zdP2RIedFRT_%@eUrUJ?#;bl`NIX~-(eEQM~t}l|nsOmD7f41S6ij{g;m!eNiX+ei& ztLs}nW&Q8BL&{xq6NBO5fPqU`4lq&FXN%Zp9dL&L(eAcZVH8PJx1^)Ee7=#_e;@Kv z-CKqEm;U=M`L|qOJ^8n_pSTvv)vgBria2IT!0sKD7M-tn6+OQo24%XU3!(`6sBGjQ zKy>~1SiloQ@A{tIp@+n3(AP(gToiJLq>kaiyMbJA;Ib^f2GFlXdws(24HwYT_t;0gR1>v+Gn^!(Tw#WI8tUO3Vuws7rwjU|Y#R2D9sJlE$zQf@YwJ_9k1Qh6k{+JmtE9i&)}z!b<&Z4j zDDwE*G-l-9c48;fSN9do;js$mcCF_bZrA@WDgt)W&x5X2sRyx&vagHx=~>Wah4|`$NV7z{HV1Zw|qt@I5B_LA#aKp zhNzE&j*S%MCrkNg?(Dal^G(Cn@#US>RV#9rcK_m6dIwggyDgKBRwZ=vjmJu%n4`FF zWS@0^{q`N`N=1KL6H`wW)Fvob5%SQ`MVKFUdC{xn=ASFZ&D4omP0f*oY3FQ4g84gY z_ookJ2eFZh>?487@*Lo(#5@tGIbSEq@^#dJQJ2)|tx5lWhTXI1jR(QChP$0$1G$Dg zXlk7}okgCwI&b2d*s?ny!XeAKp?ha3eAB!$t-X-XFj{FM`1>G^9etqP1}UyAY@)0i z`E{ZTVy4jjiyDOwUM6c=|NTB?d}~pu%_=d}E&YMc1-N86b=0HBn^gj-gDtUl1G8y} z4N>3%mF9H)`yKg{g?+CYw(7{r9b%FS5ljmIQZcY%nKi7e~isR--S9V1874 zXYriOY%ybZ%j%0UppQjYX(1B*j0D0$!`-dZc?H;-*agb&MN|9dFqIS-$VkdjqufOT zaXzJoZ3dPyInH&E)guK@^Z`^^X9HNw3*`+o6F@yc@^Gik( zoToQ?gtOgh|2_miT`==^8s%q)VW(jN>?guAfGI#&Uw3BRg64h=>9NNxzHq!_k~X*K zUa;5es9u{g4W(!C;0t#PbL-T73oN8Q#^c5A7LD1_GwLI2qJsey1l+JcSv?3?^lt?K z)z-W7NCWfSo%Lec3}m;`Io0l}SaW%8XIZOCn6=O3Z!xxwVct3#U6{Z7hhu=qKsuyu zotc$e=KwGa-mhWium9H?lDPlacfQ;ov+F8Kv#scwifTVP#r)q@O-26LC@uu^wN2Su zb>jdvaEy1=%U_9Lo8-1v+rn-aAiD~b;YJ*!5;PP4xu*iNlv(dm#^-En+%;`$J@jSK z?bdq`zzIk6-eww}JRvu0J;v`pL!}6PD*w^N4(|b3{{0ub)eVZ@hde}vS-@3x-WL(y zwsz`gL@_e(f4|tOC~C!r`|}EPc#Txb$*D33uL4?Vp$>;clA{75m+W0pcR1fL(5xn| zp}$Rg_tR=U*Eq3Yhnk0bX2`tk0@2Cl#7vum4Rv%7d{Hi| zp2YRuQzaXKez&jPlmQHLJmc~4zVM)gCjyrOSLlka_aC2&gsY0Xuv%ZI+!EvuNs3hK zqJoLOJsq$k#Qz^(1Eu*p6n)(W1bv9_=6AMB2RM?v#si>8A^r!@fG7Y3kgBMO0e7A{ zERa^TvGP{$HphPZGF6%f(vI>e_cV+LvH1P-X40h7_kJDsRDw~dGv5B%<$U^w2J~A9 z$oOw~B^oqhS(KPwNU#!p9f9Z=b)+Pu2U=b;2iK3RukY&`npX585WXh%Kk1_P1Y&Y8 zU1ZQv)}9vy6t9h_26-BizyI$5f$YH_?k`X`_@3JfJI?#pxAJs$c6kce4|`iE#->or zV=DKjRCmP!9Si|h!1axVMk3ij?Y@Hu3XG5m`DH()zLlc~RAq&?FM8-ArOdVZFUS!; zAt{p7kE_?Up(I?dJlXTJIh7d8QPR>XIfYqIPary2>5shtZY?cg@Gr5|ILxsWKWQIeY7vjj@?D32GT#DPV_ny6 zYS%ytiJhLwstuR3py4$Ys8W(UXLLJY<(&s8xz1nLQc#_RAgmo+c-WtXY8wUOmjOODqhRiw!?dRrxBn!9T;O1DrIcyoTwPIXF6AnU#neFXcAfJ6|OfEG*KO z;!8Ww%qs!jx%yJ`Ig-J_M)^d+qsaMBw~PiL*hU06L+2aSL|==iaC=hXpbAt_*DVg@AAD)LcV) z?B)z?!`@F0f0n0U*eh5}GQ!}Pq}?0C9nh1Mj50wN$sJ@`7+Cjy{vU@=2H(V~4bcCF zrhj6U1D8R6_^Uk;%Na-Ur^FY2qreBBD#jKZ}3wmPHp{y)j1cV#NpP8Wlz*hTN#nu zgw>IKeQrA5fV(tM&+bP!3peN^>2_yKy}`5(qfg9TVLz?m zc<82d%s;cC8%ERvF~MVcF$Fc87J6(2kNd={8m}o>pi%FR(4K^&p2vWw1AMMxw~;t zQmk2gkrKVvv$BN~E%Z286Da*?SL)0D&gIW|;|x}G|FYH1zy_J>z==(k+ZLmI^`iB= z2i59Ct49LmJe&Io|MZ)XmSBt5LhMl?4S{7m&Hbu^)(i+h3uMf(TE`VSW>tL!q`RSu zPvE;Gg@0w6N%k0h#UITIObsK0pZ0KzEtJ!`4t~Y_Ga$S?Ug<+#8`Jq&jLU?@xJLl>{SoL<#RPThVpUl}zvXeN-DHj70_w3Wkwzku@| zo6$zGN8V7`&k^{%cSwYQv|{F6h(UmIH}=@g5W9b6gJj$YzUCZsfIGIPvwr*0xl1$2O7S=^7q<9-Q8D?FACTfh$G-zb%Fo%`}s`%fYB?Y3SReQ8~y=*a_C@6 zZ(EgvTvq*=s`yb-qyQw9gycB;x-AKTa^4-7l)mFmkEeYLlQm2Z9}=h3qykC!fLIPtp^I52i6tNUG-<31B$x;phTvly1?G$w;LLLnf3m z58+ZwLLuAGnI)0F;s8YcH%Zg*u(el48oz$6`Q(Ktw)e+ajwvaj`18z>d^1a?U;#%| zdA5#zKwaZO`oIVC9OFiChRskn6#`HC%1@7~NAdoMD?N{7HN*wV+x)ri{7Z4(^L>Mno78mfkz1Dn?r z6Sy@(=1}z^Xx8JXciUq=4IY2%MzPe{w0Lv61ks2ai4dp1+g`A3B20ff-)HSaD7*tY z7Eo25FY)TgWBt82%km1IqP&~jI(@%S(+_aw_X;70kt{JQR{=@srI4ZiL^NaT`nKUb zbx*1unVUa@i(Kst|Fp=DHnGK)e7HDXJ}1I|DfHf?JW;WoVusb*(axXqW%;Tk-&GAu zSk#rp5Aj34G!k!~bnhcrwC>zV%b)mpf?1QVJuhsBI`F*>XqsybeAWn7uv+5th{rv> zkNvq{+R+I_*PSm@ew%ah)@bt_h`A2R)DM{SUcR0L$Kk(fA1)#F-y{{|(V3kt2>g6% zF{1GE8sWf!Y@{6P=%3O zS0r85@PG?X3`c_BHgB0&r;=BybZ@^xoO6Egsdqb{^&%Z0x{7j1?RmsqD*y37X^i}X&{%etdG4kgWW~^0T<#7b(g3v-DW3`2?qDYfukY5Z( zOmUaFqS}1Z94pXjYUDiETgKuGvrKff_Wh$tW}2d<+RZ~}L1MBeFzL&(tlxP=y~=Um zESLa&@h2x9_L@ar$Hb=TGP9t-*Om;Z`=V#hR1RmWvXy*UYA&+&u31*)jkmyb{?2I) z*@}65?{85f8eL88Nx}o&<93U~crugm;0dH9b%h9qozJkZ2HK!5^c2`5 zx8vuj=9Lzg$6hC)*G_(cogthF`9h}t4ni||Qdg=Nxj?t`TjOsl1f>+USjEY^!gti# zWa*8y(^6wv*{S1#%`iM13Z;A}d`q+I-z33EXWS2u6J7J(d{p*R)y+S@S{PX+PKVFU zpaCLpzKZPkMugbz49fb@LH0o@Gvu5NOe?{=29I6wZO1 zBnY_18)hbROL=?{mA3>VWUD9o%V`9|TISQ`*c(Iwx7d;9feC%lHr>{(uF=J>Do%Mo zeC)n1F*;eFOL{gt9Lb%iPFa5mi*DNfo^u5Klf-HU0nHZDrl+<1gSpA!_0)*ihmBxY z*{wR;$28ISvRdInSPB9WdGp0}vDa!)u+%Kh%?u7TV`?UhbDwn`tLT7 zBs%#VGm}P`GyQCR##iEEz*>s9u`(8NmZj%vSWG$o4Cn<~FUN&f{IqTknCiEXSXHhvsAqMhoso8TI*i3~F zp?a@k^`${8B{Wp0)FMH=&qVbyQ)QV=!t+B4Kjy76kjE|78bq`-zdKJ$TumQ-k?2X}yiFsvUx_cLl=4B%-d$j&FQ$kq06le5uZ>ixZ>7IbNj=T- zlROrNYD$Smh;l=F1kGx9Sij$*1?_B_#@AjQW2!d#+#l=*1am;@#2aQ^x$EAmmIMh}lH5!=UoF@#lP_Ild6xbuOk$#<(R5?j;lvoI7Rf&%Gt7K*jE3 zW&a*|ZdLL;N>s$(JzF#Y$*0-k`;3)$NMufvy{)lQd-AT&AU-ky<2z?$Fk>>8lXb?b zB+fbsdWxf4C8y!_V&#$~cC){ye5ARL!0W?}d2%$e7vg)kN$)iuxdr;og}R>vVxiVDwy=0mraCu{00E`9KyvwE`MVABX( zxG!_kzcYwPWP^SZo<~_SbQTjiY*g9N9A*ult9Ae)-uXHjl`UIo+3=@l0V2UTv%&8sYSpims+^VFF4BwzQatfok6z`Zt zk3v&7G3_gmbcYu2nD$ws#q9@F#zGH>(N8x1DF=wwa{ukmZlf}luzWqpEz@*%F84uC zbD10%!_rp!?eZ6OJ=(7`t2KMzNKG<}o4=YbGbT<8oN}d*O!<5~SncVmTH2qDU1WWA ztaNxLhiKFmU%!44>9g*N!yoICz3GM6Ul^{wVb?Iw-yz=fqxR|rZT@hFSp>z!nmmLme9Uu9TJ_y1f@3Be+x-5|#DnMA}a+1B$xreBa54%?#uDil%0@FQr zU+!Cy>Cg2BJuL_`qeROY(y@^OEgB@DqJo!sn;GC>`<{RNvpG>f>wa#%IbQ?!o9+P} zWzfN*9D_51oo%{*Wo06~eu?yf45l{F5WnrfBOib8xm|F6RaC`%Scy5B!lf?c~YIl zrFT@g zh=dR=qv)J+^hkPl)u`RYbrKv9A-DqEJn8UQC*k}?Ho>+L0vj}>tN6#1_;O;%XxVa$ z>kJE0tp#JT0vu$>W?8KHx={s9<+>Abd1TnqX1!BlLb(Fs^#$qH&5mz4mlMCA=iuq! zL+k!b7e^?^NEZdd!{!N7(oMdSGgCEUntTFFDgQ1>{Ugm4k8R1h>HE3-K$pe66T6kd z!S^arH8h^|{D*id;i?e(?Vt=hq z`~bIl6y+Pkv zHW*|d#zIDypc?+7njL0U!(84|eGWg+ZrXkY~8_ z@R;W!-s+!ot?)ADlKdT1v{SJCf_--GC11Oi7);*uc|Ke|u`%b57%Yq`C7a6@<<9}F zGVH$~&Cdm7@LADME*9d5`#EZ8I}P7ulNhOQ*iQbm@Gbj8@dwS=X&oMeeIR`!Cg1GC zXVog|EdHP+Ik=lewtoaIi@w0~&+o$rCrFk}iF@vr1hjAWMf%nECzilx5nzgW5QijH zU4Dx||Fe@^uXz0@VoPb5v4$DVgncx_cd~wc*l{wh$nW{<(0z?{a=cafN&^Xk0T;n9 zA3nlWac1#wVVD@G$xfDSoaS58(ML{>ZcD-uqwxUQ_qAYcBsYEg!B8&#QO;b*^U_ivu}>;_6ziX{ zQIC;N@X=~#X^DUhNBKatr@om_*Old83BH)Z5Mp>Srr<(7X4LKkKGz>A6gM&!rqHnu zH*3kaI3akLxrEjMPA+6ow07epox79_MfLKc5MnH3<+o_XO#1wClaSoZY*J{$5fuLG z-8X8!{?HhO+y6;HKgJL&INg>PRvRP5>eIz+5bP79-<%}AQTLr#qd0}h^mS#Ni$Ia& z6?uzy*`Fw^Z)A(U?z8{^*JH{Z;eJfLS z7woHM8E*`cL?pyAj${^21NcX5Ve}`VpcREbv$+oU3yX7(;wtvET~%{cAM9ChB)iD% zQ?3KvrBrLN8Hy#>Ic#VK0%2$@W*Q>ZDe*SEn~QEv)q>ZP^H>XOw+myST^2gQ0>#o8< zV+U0pr_B|Dl!rIjv1ZR0STwS?QgYTvv^KwdNAu3`=y#21@eY!u4<||&iL!DD!|Jkm zQ?>p1hFiX-gMMXF!&{w<3eUul|Gi*2PNVo>t^A-bi1M>T7!|!qF12)h;3bQ;IZA))r z{ZwZO0~*Np^+wuJpMJEZ4kN8*cjmfxo1L9_gdWvy4lWZ$PxX8pILBYrUO2Kcv>iR- ziq1cQ6{c_I=#YJD^%CS!PP_^U;G<5;+hdEV(2kAdvElN&@=KgHrwOPyo4h8j;Y=;- zJ{P4j(`R0AKl?#AFvOEr+kcLQ`(xIutp>dzZKHKs&Qm&F06cNhv|D$ll)aT3dB>e| z+7g@EJ4mwp#Vu|>YKKpHtuzm7zmx!~iXG_b{DYSnJbBq!b}zMyYGWj^Ox|cNaU4$d zrAqmTQotJNnU@LS(Ty@JljR&?;)4w0&Y_Q0R}*5MJm4wnuS9R$_YMj8Oa~v4CD-L3E?<*9?FO!Vr`RX%eKhMSxn0uv=378 zf1}>-!+u-L`z@CN^4lSl^}hfWGxQ5b}(7^xON_bjJr9V7|p;3 zY|l(^l>Hz>Z*f~4-L>nr+%u2$g|txToWWMKVX<0-FF$lUQ?ahpUa{IGv}O?kTV{li zAgh(AqXTfDl3J{2Qx`4|xo%;Xz}>~6n|p(wH!8^=H%>a@Cu4kCdOg2FwWt`^`faogCx>4t(;RkvbUl|-zp8l;PzCd?(Y#7)^k(w$0;3uLX{ z`ks0QHg|wFzOhvIWBE6m5>MthVT%UzitpIx6{$;nFRZ?8iR$DNGa6P)7U$RGKv9#Q zuf6*2HgD|$=bsj$q|Z?<+fI&aFiHxmPo8QU^;n3(`VvWU;4 z)5a#mo-A&nl#!Dn@m0#(aBOk8914}(u?@`E+3?VV(bDXjgr zh>_$mw}#u5I{JYkXx1mohm~0j% z9ICX$DqX5AJz+%<@F-GXEZGGWyb^B=DKV4l^J;oTFOHvAJ#%oSV_&8y32urEyBJek9rbC=(g;kF|=dtKl9voGKA z4l0)@-(%C;JzKQeSLtj$Z`>d=!NdK;ct97r3pdIwVAl6!6J@@zaJHZc#MBx^IEVB^ z4sVC!Qp9|9OPyziQ-d5VS)9NFV{rv!mXcS8W+dx7P;4Tu=02xpEZl{o@-+A7CGiRu z$H%!sWALDwUaBw@Wwk*+2i+Ft#zLWx`OI6V zRreZ2a%K7zV?U67m;7!`td8`w{xc|)*PiX&zx2Lg8kz6WQ2%hw70+X4LK&AZ3gS&5 zzz|_t_P(F4%RsaBD}rTU@&45hr7FyaPs^lv^1{n%OsC6Xp*Hg^kIz~vT%PX};5X6^ zrQx-XsLaOr(W=E+~{DP|AUN&CdV>LN?tupjY;?C z`TB0V^SsB^>y`!^Tyu)EOsa%6-L*0Yh>G}hX&!}Zm@KzHt#h#`u_mioxxmKKgF7T&5`?)v8$iH4qs*aTF!ONFWIqMNG5Wj+zdjom9x}I> zVPhLdo5kK6Rq)a_*`ad^4NY&)*#1i8!?0Sb9}C80<``k?**g3Thh4G$?qhnv#8$i##y+F->N{{CXDi`@=Hrh%;O&hMvfkP%wiZf{vzPX@!Q zt9Q<;m&`HW-XCs%PxR|%XUQ~PvK-t#6%d{D@u1aeb$L4#_7OqY8MIA2d}EH@y``DH z%Ex^+6gtB`*@Nz3mL2bSki}$)?~<-#p2%iXFR;O_amEP#8YLQhL96pqM z?_qs5q($R;@`k%CGNc5OYc4|Cw{8`$uo2WqzoI za=ai0&E<9m9e`^-o+F;*^rODV@vJnMz;LnOr4`%!sDH`w+VF7io830e=7$m}@I0#ip6T-;R4PtKys+Q3tkY)#59oX? zCoI9K5&`%f!6^Jg&VFcsf0CF+bWSY#i(g_0*mPts6AFi{2%JSkmoqajk=_GkPZ6@V zg}*YEi@1Lia*@I#D$UXsWns+3yU~e{WQE~%tov#Xx8hLLCbjBo1|E`?GBm&$x`W$0 zGc%*v)E#Nh$E}<`1PEG zM*J#u1QSE}IHEyxVfvsiO=?ebYKG#?DJAzk+j}6h3Qs_=B;4b#WtEg?MT`dCqX~6*Na|N;SLdH@9hA)gi)`TyD$z zg|ZU{Bf0cM{xVH0H2W+zBV{bX4K$_9koZab(#olqY_n#`pXDzycEaj6a zFGC7_GPpB1Fyz_cc0xt@K|8ffgxmdOxUE^xtbFkJB-0GRG-?x{*V*hNjcL%G@2BqbwhZ^!0|NF=H)Jm&-sw2Z~al;k`4k?P?|KcSdjb$s|}oeoH9>QJPMOn{ z=}Crc+;fYi@aC(<=de!_^G9fV+&VlZ^|oJh(QqOy;TLer9eLiz1+%7&AcOV^(2)cT zh-F={oKPArOZB}Ps!ah2Pq8aGHQRu`3r1hYSlUQlhC=Wh>9k)My-i)TWb9MN`EDl}QsQ*9U zdvYJHi;h`!x|o)Woyy)N#-fJ|y%VJ=$5XoWUENIb6!iSC z|5huU^!Fiiy7653<3c{bOf7KdOmVN5a&=Tw3_`8g7atBtI`(2tLO(O8FmjL!a%JSac1>U~@xHm{PaYrT-Ip`$~1 z9S|>xUL#9yU2QqCLXK-&Zuw5we)>H%(f!x}5UFUjRB{sOBQwn~tI=(EB}{6ZV>#|% zD!QA*$gaj2W;PK>>%HV`Z25M=>~X|;i9Vp(yZh)u8ylPcv{#xc2hm5jwfu$V%MHP5OqTqF z-@a`ag>GT=kJ8Dc*b<+$Y{~JC0*icrpMaEOz@q-}YB<$!&vdL9_P*M#0apI!aWs?7 z?6ZkRYLy8%N#pa@DD^|x+_x(EEYNJMQ+`VaUPU|28rUq6J-$oX z^Is^Ui$Xtq8Q2019)LvU5pup$JWQ@DC~gU13E(S4msOu!Y61=i_U(Xn&Tg#PR5L}3 z{Yv>8OZl$V<*@QRZCjRSJMu{^=4VAF*g@055izFE+2Y{Tb1*xc3+%c!xSx$kHjF8n zd@JOpvjGt!k<)p7h4h_Z2(n|6lp8KX-9S#Anal^|(JfXVy#2RR5L>fZwVXFI8{^7? zl(i5NGY+Sl@N)R$(rV7yH6L>i;vGoo*Co@=p#-Ok1fngN(~3BPw**tTcLg}y*1uA+ z7_7@Q8vNKWQ4Mh`vlamx3m~~Fhi_e5y+RC-_tr}VZ`*UYvZTycn@C-rT7R{??Rkih%8ScU6SF5;5Sv4d|<)8odpO8pX6s45)$HLr1uS5)RgW?wHcl` zQ0tQsohLWR8-4!@LAI#Lf_^tGM=QT@!=tLl>H8bD#)JN@2J2y4@6(@&TY_qez=Vc* zzkuE#{1;qsqOd2Xe|L9hbQLiO0jw|C;l`by!MUu!<n}8wq4Mo_+ww-7m-k@@*>d zR>RFUsz3s!>rv25?G=vtK>C;b$d4g>eBHL6#JLk*iQs5b!O)q{RhHE@uTbw!4v4B( zM}*I_3?AxJO@F6h)yiTC9+Mhy<978^#gUU6{jMu5t(fX;zdKo5{Exe4tKT5{_@1i# z_E`dxOS1ma;LU}C-?s)h3l;DuLz8 zVD}6IN!^$XX#@s48STc~Z;x3;s&R<4tM+5xOjrDxn?WZR7fLg#@O#{iKsH|n0a^&} z0o-U$E?iQo*)=ocPm9kIk-E-D9HmDP1PS_!!~tL$?eedG17zy&oaIn*+R?N83TRa+ zRY3)5kl(PDUlT=4nj_UPz!4EfrsK z=d{(5MX=&r&et0Ag>yUQo#-{0480E8U6kDLfE;5&Ha#>YGcvyATBHsRWhxsqi<3o3 zMGj3kOu#Ew(wD>!bL2eu^3Y}BW75gnR~wA7tBbyME>XuglmC+V|jPH6B3bldL}M z%FTP<|E4wonT7hb&WJ=Z@#Ba=O)B};++H!CnE%rRnp6Ya1IlgB5Ny;PungRg)CcdDHa{KXfTJDXTHLRiRMKWz+vOu zGR!g3$KJ}IMqz=ULKeL3vd}_}sqpF`%MtES_%r@@ux`HrQoxpUdiUhw8thFp-8rk} z;qD`ncG$(l+`Fw9rAgcGcRLr*p7iu~H_#g>;IbFqG%K7R7kX2Kse)e+Y$?**LfyN_ z?gxC49&81>l*cc-Gt;H|y^Ujqolh9Qk4$)M%Eh92&ul%6m#BG1c2 zF#+|}AZrWCka9W7cIN`LVyS}a!VyVD++GS9nLu&m-&vG+6Own&|E%1n^$S4#zCuL& zPe15xpstVy=M?Da?}oi_alOD~a#%;w&*pTd6x@K-J#2`h`LaDKscwAlM{@>w?g(%; z(i}5+=B_Ia2Gd%#)b7NDpzMs12lB~nLI(T$6@?h+d2gIB+dlMx{sDOVa|MLMuoVTw z-8DrW7agK0CJoeFU`h-uy8-_=XCMe!R&GDQ%A{SWb!{(&yoXz~>0&Q$pVQG=WJ2_8 z+|+V{d5u;%)z`B5BxK%$n^S%GK2PcG!wVRg2)93SZRig$bBOiJ{s(B8S}mU!I8V#& z*H7asU^-FZ_6)*L12y|rw`0{N9|**7u)!7yVaLrhm7_{1f-yr?QStG4m3`#LEzPCi zC@Inf%AkD&6eK?sQgJy9|FZGffw~&otdV}N&gyWU%3>1rg_`>-T282j1Hp^}l7w&( zP9A_-Vu~dRynD#}gU-MxxmGUKRcIvMX$+u%Oq};}?eT$zqvid4H_PXs4#hr7ii(5vNI+{f?RjE1phZbj5+C@l5UIv7LfMJ zxPDR05aGf`!|XroA}B;_ocL~hh)cFqDO*Q5=UF=i4X+tzJEg_*qU04{E12Uh|CWdP zWS`epm-CVgN9L3rTy1CLEe7Yct2Zw{9a8lq^OIi*4;2+^JH@pqwOHkha@BZi-&_*Q3zai1I{R=UW@0j@(LbI(b+u6m4Ig zAB-vD{+Pa~tb0r1<2lrHHhr5`b;8Iu+)KQW>U4oFw(80|GR$`o1DR?GHe*?2jk|nz zfa%+7>@navDv|OKmMAaQaYS=(9{Yxetj)IGFxkOGCKB~Epp)|(Mw*?%*c!NN4C&WF zWbHJ%=u|TnE4IkI%Wh2~*bO(`=Q4!UMC{p{nIvsvj({1VXvz|imX_w?E?z(2cTTk3 zn-(|LxB6VtCK79B9hK4x=7yYKY&zF@O?ceWLN@Njx}Z!#m4p}B?Y z)>f_3j6{&Nxa_SHir8spS7p*$10+?+=KZh}xV=|tBZ`&$>T$QFZ4T7Vv3(A=v*ceR zBSjbIAGQ0bu09TXKB3snqF7*~6i#D&C^7m(dE8i6)sD$V;^{rYx zaVaD0h3^?I5e1tlv$fIZ{FXyX3szj@VPAGLuu2G^h5 z#lS0~m)sAUDa*wi7#X3DWmXJ%>Hj()QnBNk$H|79{Ooyn+t*%(8ErctI+^2&l#&G5 zuRi_YQs0~EoX}-e;naUO-t z$lHQLM9hJ}oR{Ds;)KG+Y^6qe1%#h+5w)of#+8u-ejf*{j~|RZ^^sX`o-DJfkEuUT z{AHIFtzdo}A$eG-6c|Y2XiuJ8a^FP(h1h!Yv^rmx+%8d{>>!h*p{5fWIG_(<&{l9{ zC`Cb@s8HU*8(ICrw{U(h)(LGPBAM9Q3HZXB-Pl}T$_w1w-Jv8KA7K+YuIZzkE%nX@ zhLnQ^bo(J-WJs6y(7eOYE8Py2&6o5)x|u9QdQqYkRCSU^wRGZU9{$0PC-1!Wc3c*F zTCDL5x^?R5pi7C@ZD>>BLD>tI4O&z8?T@5YWRg)QD&M$tForHoQgAbhNZ;Vq~Qe<+MZuHC)j5d)+eE?OTb4$*y#ge9~l%-o) zXm$`nAUnx*vD~C!RLpgYC|86r9P^P}j2XGy@sN|Zw$}9gXVcz`QY_{e7)>P(x}Jop z?ZPPKWv6h1O2?d#%4jCN&)V-iri^OLoXb|-WmS?d@_=PUKAJ;vnc$-wYvqtxY$3z* z<}zer>ki46@s{)@u&|nbJfLMU$Pb8XGVA4WD_8O3Tw-G0ZP&y?OhQHO|z(iedv4Ma-Q~d zow5+ma=R8-hQ~10#r!$T6hJQg4t%>ddNy8N z=PU&=H)#SQMR;HoK0dkUVYGxgAN1SfO71G4SGC zX;`mWEhwf>@5`^0bGE3Ib!9}5|Ez<76s(&rnO3K580h+&A+wTNI01n!~?~?6&RfvqlFt5qaPQV_{ zi;vLnd>sMxlyfl}tW7zaprcaQIQfjy{qq<#kDRiyblX!l@_h0KPi<`y!G@T~>$Qtztq)kTT!lF2PZW2zC)nYxa`JJhir7Oc zLS01%!!42WO#t|Cq#{`4{V0rAlVwwZL`MF);E4y~qUhu1QJl!;3n2uYeEx_;%kFo- zeEDAmIXoz@*`hsjF&jg<`p!fj-HWz;{SddyMl(Spz`v)T@h`pq=V90}1C!yo!nfFp zEWdoDlb?ZS+sW6}k1INgS-F@fnkm3Xc-|*Xnn#YCTCVi_ z(to%mrWd_d+R)m=>U|xmOo1y7M@O<8c2{5DCD^2LX|X)k2-xqngl~Q)0m+GUpooF= z0_ACle7l?ovk2Fr90x;ZA|%E`)lZn}waL#|r-u8)v-v$8+o0`Oyb5Ph0krVYIKZv;{;*%>!hb@z-D5&?HFsp)W zda?P;$!gQj7k~(aZMqmwU^G@jOrKG`3qE&Kcb2jw-a;vN7!3$>orv2vc;#}}<~Z@n zvSlc>N_^@LTzf!L#jgV8B}V#hfJn^Zd7+~%^suh(ENTIF;4{Y?z|uq1=J2oQ96@Cq zy?r2?YQi(KLs^Sj?;jaaI*r@d*gE}`YdYCg8D-4Vi-Cwp2YKkE+k~JOSgeUi=|dHl^!CgNYTR^A7Ql7=I@I4hQc04m-;AhFiTQXxK%h zeyuo5Sjk zSCCTL!UAvCH%wkjt3pep!&Qu<&xH^h%M|-v^BxU9ETK%-jh{cBhnJkHGTC8i(M+E=7(?^O1CW`7K6UK0hF7?X@>}VJgBi_m8OgMhuXx^DX5}XC@H>JLnMI{ zf}Jn{kT2*8?5y*RhMx>M9{tl4OT^lnx-0Te0Q0u_7u#Z%?weh@!fr%+XKq~}6CmxZcI;%xFudX-On9NC-C$el%oO2y( zE1Rl9jv_y8jG^^FYXFY?_$2n>c=m0Yo=%59UgITCuA55!Gq0$*a^Y|+i3w*Leb^}i zzsWqj7UkgvM$>sc`3)lWkevw-YeaTYX}t!leWjUc)1E*fn-?kl*krj*OydPuHKO$< z2pR1iikW?s{=Qb{y&NF6Os$SmBQeuRL$kI=UIlwB%-0xyYtz-7I>bD{PO_`WdiR8y zjUtuAGCb`=k3BU5I#2&rAi$AUx?N-{AF}90-_x~Eofx&_mVq=!YWHPmcLgvmD$^X>QI+6%zXfnS8WHJCy<5 zL=T>755h%s8I!|}cqswjq@q#YM2bE7a>2kvPD(1w7#l8C_?chp09T%nTer7T2a^h^ z`U1_VPRrekVptfV8tfG5tdm(wiS~esA2`!mF;=5kRf1uKgh;5NR#H1tII+xy`#1yDd znJO6zA7YCOq{(z}$yb%4EAN&7IUrlAF(8b=pLOc&&ic2y^H(LCF7#S2LS<6_6d)@? zyQTghte-*Up|Cl8n6m(Hz^@wDjlbFR;m(IXl0o|;OL)_Jeygh1uaNwA&!KQ%{&{EM zdg%{9!NHe0&L@5F?e7iq$ACgR$NaH-;jKS4uut*5McA*{w`V}pj3xSN{J*ybfY~Td zF2MXg?f)acK#9NW<6!X?J?s$v`)`0t5Ex)mj^g3TR&ki+a%(ieSzaI*ycv^_AovOq zuTs_ibaPliD+#;&`F~gOrfa-NrrAp2j28t6(6S(Y@Z=ngg!^+<;UoG6YUb)m(0cVq&wEP>{Nl%_v2=B9ti%*rp5j7(esb^pR z7cKMq4e=Z;*JEceTds)SnJLpY+Z!CnG+%I>Ef)0QrGNXui&v5~BGOul;*;rAp<*;W zTg~C;9fjolx4;w$!ghTURx%zON#PU*5d4dgyR0(=yPRZLi_rN-|o? zk}U=a1jkqffbM^8vQ$7?{Tv0bLTYSm;Aqh_>v>;Z`^LmYN}(r=l8}&0ZF2>O6mOkz z0Hx##FTH?%yBzJQ#gD{$x!~JNd5N{2$yNb%lZ9OP>+9>pM60_i*b~H~JOHyGXJhjQ z9>@BnWaAo--65Cb*Aq5ZJ|AJ(aUmh0#G3B8UTfc*@(T(a_mQU>wAo7o=qE4?fCQ=~jMx!m^Bo$|059Gd}$qV@fi;-#YZ znzD~45l044RwX9MC5eo@iuV4!L>ry9XgKHwt>y7RVrL>xSrEapt~hrMXn;eky)1Vh zv&e7JC_e$a=)OQ>_Xu{3Ey9f3D$s~cM|ygy0?Kb#l`^tGT1hSU9VB`(O2BE!_7a!U ztP|)LqDMuwXgjk%u-1~~`XXi0Tr-seEt3AireRGQhoN5S-_;BxST;fn)HcU zNi5M9HY(Dl+aBTEPXuR`wQvjng*!cYo#DZ?iL^SLf{%=Dvqy zwuD6H-DvK z70D7+*_+K`$L)#HtqA<^R+GiX9R8|=&>%+ka5HHMkd)?JI%I84z;wDeZw}vG4BzAA zB`#-NU(ocliF?jA<5KqC-uw9mMn3E{{jPOG4W+l9!5DNIKp!5Hg<58y3;eeX7Pt1^ zujd!H8nofLt)P@_E?my)E%%s_(P{_t=0fpJ`Z8`Zh_vWbsW?L`5`8FR4t0N!p1`zJ&4 zsUqcgbTr%;1_88pH_}xG73+tVv}>x<{`P-$j@JMY!D{RCyXR&DupawA zAMykTH+SxpV7}FwF7)VVMnrgW=bx0mn$&Q9@#f7NNU1BHoJ%C4VVj`$D@5YsbQ~@h zpK)08#aiz;>g!mc@Wy03mn&-^;T(#9$5Cv@c3m8-dN(0QqJ6mR@jW{nIi>4xP&r}S z=hGI^=@;?wT`~X-AmQCeW6%HP(~l}g9%GISKvv5YDbe)#pMS`laSlG`0CW_P@`$j&Hs2OJ(!c<*oG{D_n|2vccI2DKMrmV{=5^VU!4TKN~gRzYgI zjwm@YWTvH6cYHS8&f%{agvUyZ_e}?Yjd$&KGxt8naCfnYlj~vK)?lkZz88Tdp$PRK zo+n#U#`ibWaJd4tU&^wFB;Jl;isCr(d^ZhjQ0TEfR$x7u$E>^K&<~29wYN z$CJtv+VGXejpgW=W69>bu6o5L2lI_%vK|Ix5sr#6I&yLm8hkDniO}jOmv!6g0G(>f zWp|gI?X3cj$5y+ObUdU3sg^4IBYM91?eDkCh>QSH!2c1t& zXkoZ$zS&9>d0GBh(NyV{4`?6fnvV*fkbL0a)bhfy&`7Ux*Lq*Zus5@^PSO3-C9NF$%Q91u4)39n17T2H!XqCL4B4nCY9&dN|sX{8hyd08wnmq%% zoiLd0{>v~0;yFNKrl=B;RtH3);Y|#?MzCAUU5O9-;zvrm!v%RXvF%ad$BXr~aGATt z4Y8|;{r!cSSh^@=1(XX3xl@A*yWy#|$;yp1f4t^+gVu+_dFoV?vepx5$>wcs6HOtH z5`#l7Q50HMAbtL>Dns0d))L>cMlxMzd0h_m@3*!Gri&EJoPc;Om!(7xUtU51LIEGA@A;+57Q_O$W`PS}w<` zjfYE|QwFg9M{wbgsL5j0;*-K?efno6q9M*dN!Xo^o|#8)s|y9R9^X)bMpsKr79R1O zBec?vE7dSY1x-bL)@HO)GH*z3_4QIpCIf^ERZkd9%1Ro6A~Ha0Q$~A+Y!(g>>wqkq z?(vw71jDFwK>CaG!Y3d8MXe~{KOv_Tx4$vphkvq*Bz7T${8M;_w(@!E6R#at6!AY% zpNw4gJP;{56LLq9EEz>%ANO*tL2Rl~PT_NjS<+|pnQIZ>)=JcC6dK>s&x)dWCu;E! z;u%MMO3M_Kny}-a$ZPo&&UK-kgSsE7j%;dYs<s>o3KNNnl!7cZkrlY9*O@CXPe1e} z`^9bbW7wK*RKWk5q@>>nP8=SG^oj6$4xW$I#6*f`yYmii-kxO05o4+-sV8P?6*3cb z+V~_ffxVqQl1c27dO8V>I2ag(Li&N9F*{IM#NWJq%QThYD?zc26o*o(b5;J$L>u=4 zQ&Vq-aQ*`ygCfV@(J%UDoyBMnQ=fK@ zfRKsU*B`x3(nG2m*;Fk_Ea)rP_|~juhMH07$$U!>dL4q#*>?~CeiA|&w^vz?k}ar$ zFaXZ{4|d5E1t9To%vDZ9DxZA(0a&Z0urMXiP-LhgAa{*zpYic=#o>GBQns;J5iE83 zhrqnA#5C)zY89u#9UH-UsSx&m#Bw>_P>&Uf(3{@C2CfjhPykBJskfik1RS+3)3a>F zh_g9TC?bc_D&Jwa6D={8S))E7ZfribHDRatjiixk>@vVHg*%WenOGh#)umerzuJa@ zB&H;L+Xq_Aj-RiX?zHafhk?psQ8F~yV$`T@+iKtxL-AX!nG>uUDk_<0Y zF70)E+;%X#?Nlzi_OSf2`9ig$Ih$dt~_c->gm3$izrBtjTNtp4CQX}t^LgU3e6|mRcGeE;K`b&EE@lNm$t!_Ev_Nq7% z4;#sr`52G4m7iEAQ=R8_1R8MU!v0B=f<#NV5;%{JHAm$XBBi$SMmeNvWV96WUHyWX zV7wUWa01|})F3yyK7yY>6A!7#rFvVk@2x~+jqE89?4yHn1(L7na!d*$l9o= z5VP3TOY9VTM1T0cp`q-4x)_&lmFV9mU9!fsP_i^T@B==QWK2Xkx3+)d@J_!ARa#_NK+Zw^gu$$AJN@@(FC_YCIVRThs^~5I zVaLnJZL#QL_1l=u_J4OWul*Ap&vH3Q21=qnEg3JS0&IY6&LA@6hv)<>O%BET(vwjh zR*L6|xu`cQozf!wssm_rneoVAZ=Xe=3E#DtaJIe3nP3>PBoF=Cd7Z=!T0&l_ViAVP zQY$_tt&$)27%b465w&n&P}qnggUN^3= zebLHwAY^=!Ol*OGY%Yq8R=3IsKxYJk3}=68mEvzdQh*|htK^+QDang4ldqulNshJ+ zZH-97mrydyffl-yO0HV&c!2NRZhNY!gW)H?LrYDqFd%ELpsX5Bb}iVDn39s!ApjX1 zyeKZFjw*+X6YVe?0C_}Z!=soklE28+$E|z-T7*&_hD}k$7v59@rHcA!NfH1XSEzCU zzAHh{3MF2^4RLS0Rkjcz=9zwS3-x>Ig&bUgQSsUae%G4XRh%dF0>m4oqe(-E@U<;Z zeqyRRJI5M&R;`1OepTZ?nSfT7Pb@A}f>QZ!0k6f6yRW6JF7by;Al6yWP+hE)(GVn( zScix?B?9YbHH8e5Py;9@kk0j*-DG8AV7twHo9z7*Z2vQ>gtStSIg(~L#7(J0W#Fdt zS#+xCGPfkzSMHz;mDqpE;$y zH^5$w?$20oQ#RIURA3ne=b`TAu(2 zUJ|`Jrx1YctsM9)`efVLLO-_ZLj#!MB0K&|o~wN0Jcy4UJg!~jK@axx)ZgQcHC(AH z&~1Dv-V$gLZ#<^?XK3=m6~CNKMc${vOXrIm{cL%`P20$R!_(8#l=+t->o$~93QF)V z);EMVKfYNRleBk^(nGEW(dg?X6CJx0^>!4O0Lq#Ew81vveI{eE#*%kx&)fT_SgY3n zL3-$B<>s8SEPENld@#qq5z0b8PuUlqDNUF1&RhGOwwuL4Xlr|^y!h*8nfYZLuLIj^*3FBE z5NPXKpow{V79Df6r&AEK#gD!$PP&dnw>^?$gX%M*>UjLy-?5niA%JGjw?m-Q45KhV z*|6#h5KQ{(UbsSUFrSI`l5|KYO*?;bvAHdJhMWHunt`BEHVZP4Kd-+N!?!3T3VL{d ze8X7y>h|}z%uqij?JH_LP(~5c+8P<<2OVofy2xPsZ)nu)#U_oKaUHMV2B;}km+W6l zLL3!9L8mWXn9oLic5G`&$!tdiYF-DbkuJi#!T)}G;E&D!yv|Mb!3qqd6=`?(?o;cz zH(SbKCbBR7_hHa4k_opISB}X4($5jdgaRxN+8y8pvEwAveCaxbS_d49nPvyQcW|z! z={QP0Z~ymM2)}AaQo#r_pCe>L+&-RR^LAMLnWCpn_~8kyNH*3j;w2SWOHngEaR{cmvU|4=FZ`f8U%ze3|<|9@yap2x>96vqD#0pOG6<{6Cik?{f` zdDF-S8^Qc{?@1@AKq#U5oSDyuvi<<_2zd3@SMl4hd$={o{+sI+i$B5aMUH>}u-pub1o0={J;12d?MZDN(0h(!oPA)cwRrzoxJox zea<6>q3{045`Z}@z)<^>O1&gI;k^b7vqeC}%7KH{nAYDp^GcL#m*_!7qvS<FV}hz5@z@eq-N&t< zb7c2u8;tkw*-4qFl+hRCk@2!JESUA?cP_H&3xA#+73isouR#soXv34-l)EK4G%YmGB=!{yW)FNJo0mTUEBk7s=f*)?pj0aa%$A;BGv37k0~0ueG!3yk&ur)Ae8| z@L$45IB1{~A==8JaF*X$EfraI@(4jf9UakWvmm_6|Kz@qteBw_Ls%W0mgTVNSj&!} z$(YAE>3GsmF7R?aF5Ux(xA&4iq4T@%%zk`~DsB6MROEV=k6U1gZ4;m z>|QKpqB5g;u+nHVEzfmuu$;#2%WdwJP7q(GBb4a&kIuw516*^b2UVn7q4=B;9sJ(L zJ$u)r&gVd-cagpsk<}^{)C?3>A0l+=^N;QJD-WYRLhw6d0bVUC+($MlQb-960!b?R zcj6Lak%PRFw$V=MTZeO)>xO#aCHrX9>*>E6{PZ=i)KRl-5Z=G>7f(;3Cw3RmU!17929iIA6|BrNGhMv{~;hSRXC)Etq zo_yi_-@Du*c_wdhZ@r=Uvjn{gNuRN26b7z25y(jJ3Mx|FKd1h)!#?wQ-roj2s+-Yi z)tKx}bbwT8yh8t+ODB@S(|?xA$l>{Cn^}oN>w_Ow=eFYVutWctvtBmHAEQu%%v~_0 z6ZI^1o18ov-g)!?zJrBSI&pwu30&9Xc4nRcP3p9-s}WF|(dLQ4qahX?OWVMX$@DwF zo6i4243Dnc{-`rsuR~d@jz{||TDxs77S6-(O zzV{VTN~A$L6p-$25RhC-I;C4W7eomK3F%(C8F$*7?)ts3e!lbnJ3EXsEW7u; z_uLcDdCobR$x>{kn&Vx~Ju9X#ksd$wB2HhuKZUroCL~lzh@+?QP zeUXMq77^uQfhmLtl{|s4AqO`5q?e5JpIoU3`2h3?uN#i! z=_(tOaI7}E^tRvuqm7>K{?vt(pu#(pCkzk13_y`uELi_pT+FnJhdY#avCA&+SnBup zRL$yuj^(U0fz_W)iLLWkdXFLxW>#}v!S%a0f0${guLs!l-+{6_8m6WX$xJsa z-qBq-nEa-B%d*R{FqtBFYASf0A@6qg$75_bDq-V_&R_TBrnMaO1|a>xeBjSuxR2!2 zX4veZf^L#$=g0nxs?WYX{_;Q{uHUQQ*Vi`;NJ5peLEQ18gmejner(lP^-)>l{O9E? zqWe%dulMx#XSp<8{DQpQg0@@m@S7HV`Y)f(MM*Xwq_?j*S|ur&Fd)Q#J$tf}Hudk? zD2TvC+kc%(D0}I@dPPpHg3cQFAhE)zRAC7T`HrRSAgmX^2XL7<{;EV@8gm#7ED`)f z(1Gm)P=WdNt7!LX&Gm{#ny#kN_fJwS4if)M9f01D4KziU1~a-p+(L6xg2zDRVcW~F zm?N;-nzIEdPrFz_Kc4DXP1U5q!wyf;z@U_|@;ii*HjzN=P*MNl>6@AVYWRc^fth*} z*rfN=0qZZbfVem?Xj_~MR6m3s!Y|{B{UZ>^IvRffpN&WzMn3@{B`m6Wz-~;a1@pOW zVS`UsJN;3Unp|-P+(=vwkAYDVV$Ki!LLOgx?^7u3zgBGuXaMcp0z_2!RmPJLQwm|f zj1o^Ns8v5Ci+MYM2}}duFoJgc*$4+(1z6<20!y*ze10(? z->RbPtMCLPs!r0-iYROV?OxmjNvZn1W3=bnGSFC6t4|;f7~A3Z*;wZ zu6W2ozJB}mj;SfEzM=lYCAu^6KoUaa*8hFc6Bvw}w;*~cpncV2%b!9KQ|r80P`s74 z3bkA|->%#pt+d__I*T%HU22syZ%*lv>x|(vgRJ#^G9UU&DSusfv$>w>ICsjW4CE^} z0!VRr3g^pC@Z28GIE4zM#PdvQVFA4V=IUZ(VC>j>Y>UHjK*vQPi5H3!jqWwxmw5WB z-FET=khl5{@iX1T;Rd4UKJ5OyP z#jq1|v&`qs=whc}gGanGDgkTYeC%cACVrlPj5y+&2RtQ2)}2RpQytErXYkpe78he~+dG zjA45b@%_HqH-+VBZ>GW=WzJ)v75OgbSL^2cVX0HYI6KCOEP1znN2Rvyfq{vMj2(s$ znZ5}4GR*3f6d=)6mI06xj*gE%_N@M)e$G)Po~ztcP|OFArNG?R3>IT~nY__wlKjU7 z_|-;rO-)U?Xp$jBnd`~kKklvv!J~P`Ce>#Sa3yQ_O=gd1>xe%*qeSqnrxg|;E3kjM08tvCp zN^x!jb5$c}yL`DK->xjkT9RCZQus->CPG=AECGl6p|^uuVq|@DtaGk)2)`*X3fmhc z0FAJ>X^deb8{(ZAXWQ7?RIZa_7;u&+x;vFR=Wyh4afzoll-1`wgmc4}wHwnLJwQR1r=Ch|-013= zV|~I~+mc3IttQH7C-d7Du15>-Wf^{@rqZxe-u=FTODfqf9O#5#k|&(($0X}DU2$7f zN17qS>r%UcpF0n^STeo5iExqxR9+nu4bz14D7H+TI!+kt4aw^Aa^XB`2FWcOP#(oF zKXp>pNYrXSH-4;Kxjo`-(-5~JV7%PXw{_{c%b^zD^%5WxrRfUPCCsOu4DfsGf7hHl z3n}(S8=T08_RY*_r)tgZjo>bbCZ-853QmZ0I z5{5FZBuRS|l4S~wB!7=KTWm{;X_%=yKDh8Y+CIMVmDc{r)zL${(;PSW#N42Uh zZ{o>JS<#wC}TrKkP=)_DJ2I-)QWhuY4KAF->tfR zaL!Q>*ZT<@aMb#TDw5mW1>@F@^Hn-23DuJgCww_?uxi|qKu@xt(!x}^dEV@5dQlo( z@m-8239Hr1ImhGOJYuEuXK1&f4Rx#^BqC?+)^AS^sUi8E-nY=;qS`fytua&dKN};f zJ!-kTe+8)0g^cQ4{rhg$w7R>vC9CG_il>>)G?w@}a`u>=zfTtX?VBDl70 zSh7R;ocFTU5$ZqmhC?tCUK{rjn$vC8cYW(w88 zMp_F2ckF#!JL0F_o7&dcy+&rD=!+Ks_48adSd4Cz+P~y?SQ9dA=Z`kA;$I4WtF2l* zA72{NXMI%Nz5kKloAb2sP<@F47&N}Vsyu&*#6baqijRPlyCzG{hxla1Vh0T+E4Z|)( zfFUMI_(D1H3Hs*e_YI`$UJ=ie$tKbK)(8U50;clgJw@CL>)Dcc*NL{tbHR*f2xucY zTzctLas)#y;xgu~ka#@0#-*Jphm&x0Ghkk|)Y4dlK%H_NYo__-5rl?*r?C=gZEa+p zjN;~R7JOrqX#3Gjq^V208dESf6t#8?h~$!8q1SFU78Zdy*CaN-R(An z|H^$YZ@Q3fOjxa;cewK5hs7|@1D>oQUG0yICsL~$g2N_MP@g3jG0_y@l(s)j_Bfa& z%WsaJ<1X0_K3^D7uTehAFMQ@8Xt;mUeaj618{C{vEeqSXkgi8%U60-@CuXC2GX+7R-6dhB5_bOHST5}nB<1cvz zJ)EDcGVkR}U&$QF9@sLz+@E!GyVJfm%^N*VEvLmwImQNoCMfP+nVjgZt9{;=GNf?8Fu) z<~roHsYHltT)NUh*D`6s#UcxXW^6U*7_OTbuJ=oCnMjs#^`^3SFJfT+ye#@+u)WLP zY{Z=fPmh$rutV1(-pWM>VXtfX>ufuKf{$JrU9&XVIWg+IlE8Onr%@{s*HaF%KAXAi zKEPXDUG4-8Z@xrr9QyQ)GL(;>B%ZL0095O;PZ6|Ks#>bs;^4k|+k60So#h=n%5At_ zt?)8wjfVUBZKlTs#Y?EiT*Cs~4CB)Jd=+ozJ%%s5^TWkmL(;^ScoVHnx`M23{;37Q zaJ9B#&mCIYoxpDMF5+7tZl+1g%NiR6Erhjt|NWEN^EW`cU~v+@0E)Yv7xb|Y9(CP% zzCM>dw+k-f#V3qdj){&Yp&xrlh4mV2f+Gy_+vPNJlFRZFF-e#%4kMQS^kOv~)Y95q z5DF`!W7ft-LDA*6{($FFaavBp*{@vv8R(U0^H!%qi;EixRowI!1p4fn|F*uK{d4p2 zXo(28FQ^D(DQoXG5JHowqfLU~T-_s5D8L%gPdYExqe)TlG5x}4xQ4#Ruu%F{F1}!q z`n!(PkV4(yn;XwRDx^+5EVydj%2zFJ*yK!|!KazVJ!`|H6qX8Q<|N~c_3pd1;}bXw zrmxGkmaC4}hXD5C>ess}lo)hx=iRPRbPjr%^C?2zo-KY}F=ZNBTH1W8X-kWNI5u~b zR73<22vo@PG46{HSr`P7zY!unu|%q`&~^9{qFyn=%6-yAU4;TWkz6_WX_#t>rA5a;05mr_t4QgW7DUQWfp zv7AIj$tuOl^hqjmvlsJ6f?H(nN+=8Hj_zdf8}D7H*}h&;e?c`>_r5-`S`3 z-{-R!JJ9~}EhaXGjy&6#=6o4exUyIcPtOBVX!DAt{vNEXQQ-3lJZN{{l)6r~_!-{5 z6t~9^d7&tK$}|Ki{%+tbDlwpuTl8vykmlyN^mF$6!@o)+c_QE3hgW)rjfIefFbTZP z=*cP^bF`{}G53HaH6QMTNJW@W<)*6^#3LJ1iCtU~+KwDx++#J~QW$Fl6LMh3 zOVdmYOsGkm2PHMoe;+}u|I)kEQ;dr^5}a?Af3W_W;PYxv)L35@fnMofykNJH z?5jWZOildnPf5nfmeA>}KnOSt6yTR-5~;a@M<`yZU;{bsSH01g+_x<~53v{lj zc!EG_6EG?>Bz4&n`<7k0Zk!c?Nf5{LB09l&f@;-vMr4 z+647CeoH+`K&_L7RCaBB*zbYO{Ng6cb}kCNfxzI*WVVTK4+i!N7^9>TZeM$)Id7%l zSLNc&zOO_pzS~b+LR#$dr0!RejUcXG-5i_B@kBfSp4m4Qmy_=gRhBFR#5RX1S4$<& zi;lSB<&Fete0{q8U)?pVHgg_dKL5$lS^NVP;qI<+_>wc>d2mo@_Rfv!A2^3g>ikNh zDl?hrsJYr-k9a#W#Zz(R2B-YBGLO^ku_(>G`lX+JlgHeh=0x0RmQcbFu&120WMhpX zX_HEr&h&9U7W$Y@dFAD|S~ZJ0 zS=Z;Jk^4^sJj~c%$Tir$&L1E!k1kjUH`Yimeg~^MZ5BkFG)WGV58(%uoL-T6ms5e_ zB$TuJ!ncv@X{uFn!|l@}N>4@RS9&c2OnrmGp0#ZG*fd|IFru~r&SIHNbD3pn_Zh}B z14uj)fepLm=e{@rxoNt!80j;y(PBNlrEKf3J0rcD5KNRC^$(60U5e(KrBxx`e8!S_ zWrh*9_QP9Gx+zvjp`JUSkX!CjGHR&{{T!9tPiuW9ZR*Ftea>ZPID9ruF8d^Xv7CP0 z(F|{Hc}u3M?}OcAx{GWZHd$Z`39k8wOh{aC9)lPYio zopj2l27R<)al5&U8EaWzBHs)M1ix@LTNpReU4=^sT^6_1jV0x}6U!s>R4dITRR$Yb zW3)ED)8w7Sy z2lT^EraHZFZ08yoQB^4)SVn>uSC3wB~C>eSmf&nt#vgGS4+k#B$#R-W^jjIxJ+xHM-1@^v`7pX*%!} zGT(~v_MW`o#w!<$X%fStl8R;mYPiflfvt1C*egYLi zkwcUA|_!HZKU(wp9iH$>UeHUh}w!dpFIQbrhG-AH+bfukb>8 zRnSY29-E!(z`;N{!~eWwN|mG@wP)SF{8L2Cz|^eZ8&X6g@x{Aagz26e%;Wyp^UN=y z-gJ9`$5*FYX2oy<+e#9=X2dI=i18wXMnY&Uc(Kr?tsr$T~8OviVb1mWMF$ z;7FyAVGI&qSL^W?9h%hG;`L$?s*4({(Ww>XOc>9dsQHOUOz4hXl#lgQEHC13VazJo z-jt6{W{(Tq)G~Rui6*5H(vOn_D&)ZAP z&?@r+^khWiA_>g4UQ_7zxrv^?Vpsv<-RB)YBHiGMrNCA8VwK~cf)yQn-M(gyBgE;| zms}ZE+r*7sk?Ad)uF;NvMSYgNKE_*Op!FG$7ySiz$4-2iqV`v$DT-E~@SNOR8YLBf zWmK|_HU3I&)- zwgy-_R%wvVrn;8l&XrJV z7Ofc+{4*p*vpW>&+OvMndW>uIk;+RJ76AVe;q_b=P?whmUJ`zQjs?y*-*6F;oS^4ZAMuN^PL6%<{dc2P%+H`x3HmGjU9nmUFzF|0$ z6bKTEGg}FbFJa;`g#6k%3E!J-pq5)GhkS0Yg6h6V{2xsvR=hd>*tftJ>?Jr}{?gy= zt41hE+=GBMQ^A)Jn7*9QMIDgi2%GpMhkVVs%bl{NKdO?@w63ym9k_g#FLZWa{AAOhXcLD?4;`ig;dS+v&o@0>s(hI))slrq zoSvAR%6H^E!8hRB6ZRRFv)oT&FJSLRFQJ120?CWZi}=x#EBB9 z5;}~76MA}%83vvD=@8GK;ApClqlbk(eAp2@GpK}LITGfahDkLOEdN~6EJ(%&af$$L z);}$c&A1~{uoM#(Cj95mAI@#&4*Z1F#{r1I?_a?4^Ya@?Yiskz8A`M-o)JMl?ewtl z&cZ(N2^{B}FK%D^6w)akp62rhxXRb2iI|wm!y~@;S&=I$(-q545?gpz)KHTE==rk> zT;PJ>*;335v&T{~`zL+dP1jisL`;p?E*~)br^G)DIr!|$}e*4zmox$Tyy8#=l6xG&j{*{zIb>rH~D6z<(I{P zJ{gp0oH^1gnBOXjM~dgq{_+BLM(UAIP%i1oH`uBaUz_$)`guO=#uK>lxB4_9q*aP? z4rqoD4#?Z?|2WA#Sk3&uk7N}o9`gmlR8M6>*y1w78%sdvaDQQc`~Uvbz`Ag1?JrXhs$g!Mzt^-$!8lTQHz$r0JI!0@%{PeqY`4R^e# zQnG3SN|}U&bSfUJmw;onmwa;UJA2qV2m87#q}N3-fMhV15m)Ws(F-R%>A-iA=z0n} zv9Xj;^tcL$OB*;9hC7fLm_hD%O$Rc1ss?tMz-ScJsF%fTrSfZ>B{bDB(j9vs2 zz!feyi+GRM*GDs0;vTR&CERTPAYVi>kuXwS3aI%rgDPk;J4>@j54->0O2|Cmnfr}G z@$6xrGb!{GN__eHdgmTL&F|la=`#RVKs|`Q8%D-qew#wQ!&d*@;ooV)C=34};FKEE zc+{f*wlw|WP==bGZU{X*$7INt(81->x~qy*3@iCxEq41Q3dKKzvW8`$IOhRpr1)4#Gm{+-W_tgxH|Q*lQl#7jf$-oqsv zcX!U?d~<9FYhyXrVfCqms?5S?vEwwNTSYddTB@~^#OXHF^U zh}q%g;kuBK7XbVJTTa(o{o-TaUR;XDD?=8h_n$1O^c-7e5B=i;Uz2^Y>kv$SrU?@! zeI7UqzN6z$J17m#-{cdoLbVgw^v>_5prN%+HlX8m*;MM<=OdL#*C%9&b?BlbdwVCR zJ2dR(H}9^%b5w3~D!i8W#N3XFYyB7B*ZOW^Uyzd&_X`v zng4nLa9^>B+&|uu6wEHqYq}hP_f7xg3#RHGw4F5kk+j2rip%8t^_%vdP3Y3MuBmqM zgxy|myjfTq9WP`bThZ-_wt?Fc!EzD%{Y}(9tvUGXBO1p_Dek@3eL=j`1X5Gz{1N3BJs+&)vf^}iOveAUJCZie>8fvL`i9GPE-Kz@ z8XlwO^HPf;>0Buj1snlWZ9O`0MM{L=ezfqj3`~rDWf6hcqoF*(Ll#NN4NFdzPpGm= zeTAW)K#aOW&*ndTIhpVXCly9 z+%Cn(YmF@n=Pz#%d^-HAGp;*|E@G+k^_vWs314A)P=S?1*WnS$IZi!Uj(2~JdA*M4 zGXvZIvYB$M@mfw4Nbmt%RTc6lvyGNQV?~)mf0sR!l$2I3@5DOa>C(S0Phlo&h5(H< zcdEn0d~S=_FI5O?Srn6{`0T zspa@cJ=6Ng3BF#J79ppN+?gB$`$T+lbmti$+A@3JY+TWGedhost)Z|3;q_^GAc30}k>``gd*4R3?(%U`F zk|P}H#fM1uH45F|B&gn1{OpcllEI>uOMRd}Iov{0C+1y)BtqSjlDAHMu@Q@IR=KY9 zZ(b9ej;qICZAy;jC_cL~Z)aj(Eyu60`U7V@^?fqr$pBVbTCkhww0DO^0O{E?rEGkM-gJb^&&s0F%IWQ!I95m3f^7rqN`WOaAXiiBs0?ye% z*hF}ExNnD8UT<+iTn`mB1)7UX?(<)fk+Smg@+-@`l%ch57%>0&T{XPAL$Ty%nYx|D zaN8`)8JyP}Act&F8oWVxNGBuZEOwT_w;5=p;or$B38hb;!qKN|%sW|0=z=qkZ^6ks z(je#kw?Xz!U{BePTg@1cV#MmxwP93VYic8yS)vO%BU}G@9vkD2ngz7N8QKyW2ioCe z=cp?v*18=>U-ZdGeiiIL-(dr<6mr?jX2iz6ei%$}b5J*MxJ(`S$*zLsX)?9r{$NW7 zH0@!kD)5qgu-D4U3@-15Hy$h0zI<_mpQN!;jYriEEbPGN)Nt~IE$K{ z=zM8?w7?EbaN?;Kf4cgq)>|l%pMRD{8xiIDd{=6Yw`wFh7!h_#zbOHrV?osrQse9N z9P9~-Q=-fftzn&>nVSo?T#u6u2m=MZdSJ98P%f@7o2U-l_Vs3Cul-G%D!F*a8t#4$ z4tep)H6)(Pn&ONwkT`%MBh&omn&vXfFpzno7pRL@`QwRTF)OPgIB(u~mDXKYS7JqC+nk<91k=e{DTm|E=ElEZIii+8>zULg8)D*vqWl zXdeuyaw&*6e~5|K+0(+g67dATeLnY_$g`UQ^tXb6z3dYajJg$)jr?IIvThI)uPedZ zT9b56CJLAb6C&5FYN#hqgGM;YlwI{#5caJiDK^l~1%{tKxyoaXjiNR-*d!zdJDl!h zoH(^8!8>Y_jj{|{oatdKrpZ zwSV0RXT}QDhrsWEll38^gS4BR2Cet&Fso(^Rj_8t40_l$(Sp%8O)f60PFqwo=srOt{8Qx%w@z-@ z8ho8U(eLuPMoJ^zivxIK?pJgY8#Q_Jk!a#J^IGzc6>)N2$^2mX_@mJVfA0UCeO8U> z-lW=Rq*T*~odHa832EaNPDA<5TRpC|Vo*)4WsLmE@=+A~oHLUomw=0u2dx{$~v#$jyNASScIDN^-IL}?&zf#HG z_{Ou_bXAe9Jbl`Wb@YTc@6oG6AlI+P%{T2(23%2**Qx(X`&23P_qdO*Nw?d2w%{!2 zb)`*v6X~=Z&USdFkIrj}s&=F|oOqqq`1|5{eX{z-cls8|70GiC&quLzDmK5v^b@ufT>Tp% zpnEPriFlrX>5lLa4m?k2{(gsJHdL&(DQebhNNg;!&~+EL_l%^64AWvXN5aF!Hq)ro zC#?04H(J-5dxO+@V5kO=(}|z;n|b1L*q`bPw51yCK+Vqt*^@$KeGCB}pb_u&-tk$# ztlD1dkTbk%GCEF@ewk=5mTcPZ=Z{k2V}%LmPUB-;BbcIl@-!cv+jRr6;XqV~*W*k` z;||c`Lz8w`zIyct*l!bu*57(U4-hQoGoB{#pF*&^lIlMH=#F9#_iqdmyjx_*ojV`* zi1^{>N#qK$K4;uDKd#jIYdjUiTVX9#RCFb_kx-19KFyKWom9Esc#jXY8B)*JaJ^*h zUHcFQGcM1=o>=akBHCy?@$hGaS@>9)=7E{ujz*QJSBc+KM#vRgyyaO-Lj^hK;-VxV zHkb6HBRDIYy35tY#i0h_XWD9m*>czzh*ys0D{_hJNOOD@T?yR}oxmQ#Ju!?yty~pA zExu#jpod9kB@k9k7O)dmGdpzR+cGiLIvsN+@jCfWSJ==b4rF&%#=8ID$WC>#_?Z5B zDd+CuPr3d2c6%7zXps|JZlRjUMcrhjA=4agyoVS9znG0p{1OWbi&=>&zD+u0}XlZG21pTuyT>i+A&rOVH#EpxXaD z#1got4xMq%yP6}hrC3HNCb9{lK-wcEnj!vIK!9YWX1gdCWj+524<&7{?R@q;$e9wC zwvo*X8GJRQZb4OXXVS0pp*ZADICelPlkvATEBi6Kv8x+y)|HbbvX24%^A{JEJxUbE zjT*GjTXp8CG;^_BjvVdQNBbt+%nNVRCXj-CSf@2qSM5YwBAg3|J8llLIP4N2!foP{ zHb3#X5e5S1n}f(fiHB$DB87iIDts|Tc{AT;4`&f0^p4kdkzAuhtjDABs0teO5?s# zXd3Dz0^Dd(EdF@uDB7r1;(Eh{g$a=DP0!|JjIsFhm9)Ld&IDJuXU|YR3=Eeo}2~*1_M{By?i6X9Tu9`=A zZ6aS)!?~Qx2Ar$rqWi(hPt<*ze+e0Kd#znz`mVyl}gflI?x=XVftQ_!n!YP!>7 zGxv`IuJ8LLEGL7n)Qc1jaYX=dC*F%w$66t-AyEx2!oe;ICz86JHF*N6sPm)pc#6*L zd;>2av?zXMa!0}Iw#8nkUK7|6G7@_VPyFv4`fy`l8A}n@>T1QXy5h6h=wATPR$=Uv zgYw`62@CrP*RrqVh9kv@G)p|d78qtKFtAnFy+x2aw37?&@qJ|3fa_AA$?TG-LFakG zVWtr3-^8zid)dp@U_MdQ5E-WLE}5Y@SN$)?QG%#)#F)A}7)t>DGr(ZmOP0Ue#pSXy z;`{<;_kFZ6KDbEtjNMk_!_!MWIfj=Rey;(u*tPI4CqA9}ft*hr&+&-@lSMuO5qo$0-3H?VCl7lR>)U!-l=<`tLE#r_%5X7Y^_k zH0yufU7AuiTwQ6Y6k6aMou8}a!%e_01Cej@VL%L2AQ&Vy+F?zsI5NxTvQzF zf~^8)u2haDc#XVu+-G~+!cX2Lz*2$tu%Ab0k0Aw+g|u+H+oaNjRVwR;!uJxJCU4)r zY~Xezqokrzdfz5yKJ2iUxOp~7Sph4rB@0C)dWAMLP81XG(jo|eM!=<>?k9uAn_+Zt z%*%0fp4C$=4~NODfch?2D^xQQGtmlu= zPB*Xl{Q@Lk)8U%K1mTs$;zEF$QK;ob^smmzNMHUp0O*&^dA6$2s>t%NL;(EVWHeuS zn*qi^+ncEmKm!S;BoK;jc7xV8J8J2$-R{US=mV#3cqWzoVyP$3%-x1fyW z{6!i2GbLx+1dir_T8#Xtw3!#ad1XY;?|Sg%#Y^|N%A1D%N#l&wHxGc}nZa$zUzfm; zAE_+q5-YX(xQ&HVC4PeUMv3&>qFp%g$EPmXco1P@nV1Ya+a_tRMnU(}jKIF`1+Vi6 z?0%lQYK8kofn2S1XV!t>gevnhwFSktR>_t9b(#GTcfal!201iR@gYeFScD$lb1#lM z7o4!hI?$=SJ{*a*5ancbXUgT~TCJRQ2(JnQ{)d|-eiNt z^3Q~PLZ_X{WI%W4xE_9D?Oz9-x_@2s76?d8I`wBT{7ClLcuBbVDIyUvP}#+}H_Dt6 zzGH1AJ%72QJTj|Hcullumm2hFu9e};TYgeo0(m8YGL43b`)XM=@0yF)lu*LYr|UtE z#+Po=GVDdr^qH>em%$m6ld{TVo=JYMXlQ6^HE4KR`<`k6vwsVoXXGnJQu(6Q`V35Q z@glTZ)?T7ly#&O&Y~WW@6B1I#y0iZ#z4pj0Fi7Ks{?>Lyp+Oq;e*Ybw1`2cj=f5Z3 zE6dB2e%9IpJ4|>ZDeKq6Xeg%2Q>>Y0hv#t#5mEM))(bLfMY`F~9fZ>VV9jUgsTOBz zRqc28=rLXW0tVwq^x*bpEIKoo1HLQkZCh^nXo;6K!Sy)ebfrVF?Df_R>Bf{G$jtAD zK%G;@NAH_lm2Zz#@gLy)|Fc#4|K%ZS$Wu7`5BkS=%Cm>I#w>HRYs!GeVG*+`0sp{i zWU{C2dU^>d@hh8Kj2^KuCj4%aUXDLE+bN)>#ZLq&93Pd=QKWFK120cDkD{z>q}()y z-Cw~u_4FZbu8&L51<|f1c?{a=-s-HS9}(H+Ep4EUwLY!U1}!{m7W$J|fpxm+>O+0e-VwQ^tln4eQ5M0~+;^K?S@*XqyLmsG(7 zrvzj9S^=uJSA2cf_KmXpvox`cI*p=q-kN!ZXc#?Mi*BMS6^+8GRk)II)bAz4M-mJL z)5P__@<b?)+CJPZx@bN_xegB;fK3mr+Mbum2|YZoV=|wQxMP@8tYEU20iU@eB7W z{KHpcIjV8}diAnc9gQM%UOJM3y1I_KW-~S4<$lxqT29pB7v5VYurKpCHnSZicc5-z zqKs4*3>BlLBd>OUkgGM<>&@nKY0dCYs`DVv^_i%!1J6l{0f1d*e46|#Z6=gSttvB7 z0N4OZLA9FiZYG>1iHca1@EjDKa`O+sR-yP*(U)we$d8zs^2MX z7d2%$S-#PaPmXIl&uLaX4#>X#_2ZF!)hVC&OOzQmQRh{I1Vq+TGX75@iwpVgtV7t< z*%sAtX|v@GU$HsE-CGpviRTVkgNG5O=9%bsr6mK*kqpY=cjsFQS9jS9zMrkRf<4Wj zFkIO1jO8gt3EsOB5#OG(gBzHS?-TcK>0hpJI#l12C3b%=Qy=V1O=NERvow_cftG?E zi)Km075-zcwg^vV9!0-7(R76sZ76-4Ua18Gw4d8nrRmjNgNxoMhKN9IMYb(2L-wX} zM^Ak>Deeb%l%=(~lI!r`aGR|zV|)w5gzf~=;UHX8>{~9Iac-dsQfv69S{Plk?qn7~ z@Kp6NT>%YdK#oE}d!3Q*O@vBvq}=W>kpF1~Xzz-LReFpCa`^ zB=XJ~N;V@>kE>^8zy7Oya{FcqGXO}EI&=zZRpL86m~3Gms>QZ=Fe5hPwPA#fgpRA3 zssM{xdhlAE*KHOv&W0EOk5H?rskxs`2~K+gbqz6^!V3(S$zE9FAb!8Fy(Wis=mZ3u z6Zl$0jwMyamb%#9rK!7=oDk|aS+nzcFHm(V1I-U zs9nVmDnBE=zUbK}RWoBD@TdpC9fn75u1}ELZ_Hj4){CYY`N5ad^)g3%@a2*Ok4bl@ zp#jm1TJivGIEo>js(0jMBiVeq1G(@0FW3chmR)ph!`Un@uC+A}>^T_2O9%iG4mp4) zJKFvGUsGErxFOLV3Hl_IK0!R`59MPLBDa2?r>a})=p<(+SdRUZ6R%O$@>GUmF;@)R zkyoAUHzYN<$=#XcZfVs1{#`bXltb`0HG6F*s-!e;-cD!T`m5{L8d4ttR|?3~lg7`U z{(_EP_M^>QsamX9XwP*$tRGxmJaoemTQA1`4v)!^v!#{u9Go(iF z5KbeisHv!ag;v@9&QNN!KRL(RJyPyJ+W*yrg~1EAa5IBdK?H9lCcLkP*}rW4j2Qah ziwcXpeY_u}eZ;0D0`BjD&W_o7-q&JRQHy1h5IsAVDdPLPw@O44g!#|@IiAmBnxT`| z*vZ&(1!J8-aeg}Ng4chQ*iBN7($;}Y2jFkJ4LOfK&fk6>EZo-m*Cf zY#S_GzI9l%XvnTtQ)ayJ`x}D2gQ0~5?d@SFuXSTbFyZj-j7yIAan`7Y*?yA1H3S{i z1R3F8y<7yD*?D)K?#8u7vGkM3u zG3T^2-Aa(^+?O}JLw((BNa}5ezxEz=n^vccTL)e6DbHw*s(9sY3HoTM0{FVW6)I=vOA1!+m>9 zQ*m;=iv6a-nAh0~o_Q-5;k-SX{NVAtkpzzm9$FD)7?*|dW$pl9Vb&vjput( zCo+rWn0})^!Z)%Q0FD{g?fV!;11?AjrO!0fLaB4{?5NemGEyPinL)GE6X_!+Q#B&& zxI-it)!+L!H9iS02}N>6-ff(G>5%Lu;>&UF4qw$9lqWa-hp*p_%MGIxeP?Sct*>(} zpTt+_EvNXZRm%#_^;ZKd#lR`LRTJgS`X?Q{R9QE3FlOWvxJoi~Vg_Gu!Bota#GlQq z=k(E5GWy@hXlJTeb*>rOj7nFpKV}MJwFoxmN<~OifM+BEG1gw9a(GdBF^6;nyJ=aR z)S%oO5e4GXi1OWC%5^Z%0L8+gaaZT_pi)Nm(_hTHVY8~ydxcbd>fah z9#YnAlnb&kUMK3p*}ja#Gnm&eR+_VTI)4(7!=FpF-K|ZULNFa?(lcl}YeuMP6lt}x zu)%EW%F;O2h7eyO=RKYeAfYk21cXO0hFJn&RRQD_n}R3*GP+-$VCiRx*YkP165)Qo5PtYL!D$84;Qgn1c?Z*MG$xI<1s@f<>Ka+ zJX*x3iuKBn902z*-6=OpmM#TzVI&eR^IlqhGZV_KyRy;)7hUCY!-+!*i3k0dHAw$@$pvrswo+gjO)uGz3H z;Ky}*jeHg9>F2xHsxpXkvbi>db7IF^CmMS`2B%qeB6);CNQ*|yE2`I>aH$I0o9mQ z|LFca5*a=)`vwI`hZP=N|0Bo`@_Tp3(jl$}Eb@?!+QwLfPIj3E+v*mHgC^HM$Qu*} zyrzV)f?_Fv@Xc4ZK>~aw$YiTWd2?Etbe+J(;e17k%y+TCaMz(S^p9cqZV|qy)BNTX zikg>c+VMvQ@!lref5v)$tV2+S>qc)0VLkKrZ3a#5EkY=g9=ld%$v#BqI!9~$>_m2d zui|Wgp+XLE^M%lYn$~R%3i+_(=tOz;;K$NKlc6$5X32mG@4mXw=MC<@q{CnAF&tjQ zj$8MRAPxUYh4+u=-vR#@^Z)32>!_&SFM3!Il#oUckyJ`jx>Gua?nX*Fq=%A_2I-J4 zrMm~DVdw_wj-i_&-iv;|zcO}77ar_X;?&<$K@=w?q{7~-CJE;v^i{?ptNj@XV_jj10ndzHfX`Okj6z42`fIY? zI1p>oX$ot4a7tZKZN*AbII;mxlk3~!H9O{!FSH+lV2AXI;r12fV|4cgmNwgn+mn_B zp-+XJv7p}gV^x@ zV+=6h*k^RZel<}58AUx9Bsx-{SaC4A2q+cyZSLuQ+!;?5si<7R=&i=80Zb9&5mQ_) z{0pYC!zTb0+soHC``k!l%42k#lzzq?cyvsZN}U{J3-ubAe8)X(YlRVnE6!MsE*w2Z zn9P`U7~RR_}0y+k%ifNd>Z` zleLT-WnPPSmMuGNyxm_SxxT+4BbdJWHgb_j(!h?( zaa=2mgF&c@x>GoF84n0^FK-XBgUK^N^+c9k4#t5jL)7@uwSN9vFhi` zNjCzy+RR6l&;yhQaHBu3gu0f+&O-f{;N6Kalv~mONkxF_m(M?amUixAGd>1!-(x!8 z9@F<6ih(9_%mLimKOGl6u;VS{t+^3JC*7pp6|AboEaPQUQ1&U^KV<`DMlI>!GrxH} z7JP_+TauK9ZTBco#WPQRFH-)AOQ&BtYkR|{L-2<=FzE8TezS!z#V@74;Lo9;Jl1sl zclhjaZQV1@pTcBVBgqxXQGsS{;7+2yLvZdlLdgyJL8*bYlqlNbNtm-8iG9!|nM|ta zh(@go<6Ie@mFN0|Ln>&i+8iVlU$`Qfw}-6UwJ9PB2Mzn%DipPY$qhCB(^brC0`bc8 zvVHq>r>X`#9$|%t^G~W}Pm8E?ke+#zYw?*-RcF|MOzg<{Jet8+#bzs2nh^3>{B{d2 zoH!Ccd|ttts8$j%R{0UQun_p5GidC(pE7CDlm3;x+{bS2QNJ{Vy$b}X-i1l8d+6@@ zM3xOYuj@T7uzD;On9?+0&hSGX9HigERP!*yFi&MPRkd3rcAjF;;Aq<7B#4TR?#Y0G z`j`P3(joTkpo)%cy$=Li4$&pNC)n^6jzpdL!%xve@;ib&S`5*s{d3C103ISFOv7Y* z2t1xr%2Oaem?T13pdI>lWA&ZM=H#&Hxz|^7te>Kz?Kl)?mB=91mpCf6`Y^5DYDD05NZNBhXaz8>* zH04B{@koyz+@#<``4lGnt9)vG74}iO&(e8&U5wZ3CTn6Ds!l=BJAf#D597_I3+K2` znZ(H4JbzjkoytbHUoEUgi--gZ1$dJvHK?Pd&}ui{`jh8XT!svHo#*Pf%!)hQt># z{~Y6-oOw;ihrZn8{qj{K$jm^O)biqIix3cK8o?DGn?J{gvil6-?`)~N#>yFH3Jn7D z?g2e$pP0oh-AX>oKGA$BRRc5vddIQ&@w81eq(z9Unt2Nl&8?@A9Q+l8NK%b(m!sV|e@TRS z_qDHf%~yRRMH_xGC@4mesZULx{*NTxnw%-1-yYwGlx9YaL*w3y0F}|GnS(1==@0Yw zB%*?hypNFp<}3W33e70vibVFSSq2F|Cc6ms-vZ0BD$tz+)YgH3Ad7o-shf*`LV_bI z=!wbT`)SGN*77})H^Z5g=J;@WYIv=ma4ibpnJT}~uzvOZfvxzarIKLD&y;XS#G?8~ z^}wxJx#4#qbFPKlgpOa*zca>|Ph~|EumL3?Zs3K8mnfpUr+Z8heNeIgWx(j$N2jhx zGxEy<%WS}9l_met6b#nq#n7D z6bX1F21)Wsy5zJme!7J|S&NH2tx`ikQqJ?P?KI$kM0@?ncK#XSg)}*bTGF1gLw4-e zTg#52CT9+;dFqXX7wFX2DkAkd9@%;hpH-n5aozwh26Pd)iwoOrRQr@+x=&(Gpd-#w zXQFga+VzaxQxWDFK&%Ok&AG}m9XoPOoJ}7DKA$^stSkZhtWgdth}7d?#Wfa~DBJ(5 z4Qv6i2EmE^tv%}_Byn@TCwqL1Izd-20Ps2bt;%Wts6TEb1Pyb-_vBkpU&g!SSh3_a21aSq?Wq{d@x6E;KLNQD?#H3p9i$d~Va!lpi zZ!n+C_jGep3|YO$_mN!+Z>6F)71_AW5c_FzO1`^Lf#mMK8zRe~^|BukAq?*^uikdE zY4BLme+1@4-jQJ&BFt2%X>2b?QQ*@|l%p$i!!PC01n?yogH-dnhkyHMiFnjTE)oKw zjmH@t$l%Fe>M_0Z0qRTDLV!R z{Dj|svYE>8)!@ZhM4D}ttEwll@SeN%drDv5mdEe&`S-lTW@q2{MC;P{+1WU#k21sOK&#P} zIs9PBCsQ4{^k02}FO2x14|RRb3~&iqvxypl@Co)y0B=NFHWB+fgrIE`aIKP-fdT3n zEZ4Ai1M4%~x}n@6@Y1pZ#>9m2MJubFxg4iBru$j3QQ4{!b8H6#n)TR6RB)48emoU)m$?7(Wk* zeWj^T+#sQ2p8kHhWe}#n{hMWV7>|rIb55Witt#FBDa^wRQIx>|2T%pj8I-=*pY`

+hTn8ff_&4>3>MiDYW#h95yVI8%vaolanE+XUt9H~ z@X(<>PZK&e{5kfRxOd#!_!Y7ek-v}DEJ zNQ@Nl`Jifjh zs2|Ny;BuB1bb@eWd4_E5DjVI}e~gD!9p1*HG5Eg4mI4r=0_TWX^8#lYk1O)DTQ6|Q z+IrFcw|8Ijiei{~T)7tD{6bz@`WZ+g_>9;Y0$rE0DB3a5}X z=CvPu$m4lX4T}wsESVJ>?f?zYd3IeKJ${c;yy%#Ezvwi4|JtmBU?0xqzly7D`SAg5 zeG{#PjyPLV%?$f5^f0)oIaGRy5vZcchC(Tuj;(p#`V^CSTcxeaWo>g9^uB=GUl{UN zrMcBDFIsd6LPPf?mvhe_8O?bZ<2ofA2h{f}s;bVB@U-Y?Dc8e=>4Q%k478k_3b6Z# zgp9)NSMEI0ux}Az&^O%ip7q56;Us0p#;%M@J(sjipW?k92igF|{CcFYTxj-efmSmI z!yubj6*E&;eRqJ7w@wCNr?ZWEg;F6G2ql@gW=rbUAz9W0 z`&AxU>BN7#V^RZ-h`NUb7&(p z2NcasNH+Y$HPkan>cb@-t+tmj={v>Zt4@Aw%hgvdAC&WTntl{;>K4E?vMoneIj2g| zHop4K0`(9K7|&fbV0XY>WxD4AOspy!t-QanVq?@l`%(+mD1ERZzN>NPyS}-Ra>|UQ zX$EAI9v$QnKdyLy5!?Nh3!Pyn1+m>D`6YaoYfF3i+sa!X-A6`oq^3U_mzQryp$Ph@5aF77`a%p?lD z@5Oi&+>#rHKY{Pax}L-(rj7jwtW7;fR-b-5Ol;L}V(DrkN+!F8G}VrNFrx7J4+*cc zs>N)J0@UXwS)b&(61z<=TLNP*?2>?M_f8emaD9ApPV9WB|4IM_i-vPp3mA6vORp%u z*1Gn)a+TQ^_r=C9vOn*7Hui!__4r~kG9=b2yze}eh27v6B)imOVT8=oRTn!8VGx~@ zmIIq_TfV?>CLZ4)os+aS*P^n~-?39m48KXv-ve1pzo*hhrT+Tio&-d{bUpU?_;Tus zw?um=%q;w;{Al|ekxzE#mXa!~UL&a(g@y^8;OLEL{WxJxZd(+`Z9N!;+z<=NjnU=G zSAQ;l8_YJT3axRaKt$xEJQ5F%h)apHEL$9#taKki8}u(UJ|%y@#QrT*{Y0t6AKCks zPJM9LViBI0LwhFtN>Av**ET&gbKPz41-I*vU~a>Y`|P@V_jU`uXcWW?skV8Cd|-7W z5Pi4-cn!Y3btq}zT_X%>0|s{`m<^`W7}(0j(b~EYYCW}E=q_Qm>wb4~aguG9Se#kH zcQJye_qE2fTteT=i+?bKO*}RK>ch8uK}2u1KO4U8tJIp zQo!plDkJVZ9u;e^p%VX@?-us49uD8}S&?FfsvtekTVZx;{aU&6*#* zG&ql{%00N&gbnW|Y9l-LuoYs6F^0?WF0eqxqEd?<3B^ypi&bCsXE=>o(Kcgb$`Y)2 z*U7~pTewy9Bqsw@#pEnb8yltQ2o?h%T|R*E1i@dML8*&8mxkwNzB3n)qmqz!4=4|J0H^PBPk^Dyf3$^mfTsdv!6l=MKow!Ayj_ zXK^mNIy;q&vcB~A3u2neBxa5jaedOg?r7&TKlX33-;sH*+8fd6Y73&0wQ#9X|EcQ7 ziB=*k4ov-mVy?0;M5lZgwLUpr-*H-BD-qP1Z27?ToDN7YQ9GBDn#=9Kcz>kyEOftMqR9a_p60vgsnP{uGKCaM1D9D1gB|6(?coR?=%(r~ z>l^V|P0ug_)MyAZ1a9;)o>?b!%6di===~al?lQjq>qMmed8`$V_$jEWW-P#~R+h+AOmOJLb8IP?rfl((Y-$yVo!MiohINPMqr01gA z{Lp*9<=cArquX5zYOikArAkl zVtH7(U1I8$?&%`VE?)~>US4iYl~umM2dfJ#)33rVs7ZW7FMKRfNU*7`r|hm|b-K1k z%Tz43IbO56`8q3IBR0=o_GD820J`)LsD-1IR2^=eeI_f+kAa$E(-+ z-^Z#UY3zd35cg7>hX{ejLRHTe+l4vjlclF~P6P)f22G)ql%(HV?VZ|)U&bGGR0hh# z0h`Ii8@Ikb7bt7VkK=MXLZ4%g^x|>N=LgBlzdYn-dek1f51D;@`2c1`@F^B;OLO;E zdoPhiPL5KZyo6*F4@-^L*zVSY-syXI)Q_l;$STA0#d`-0BgRtv1v`TK=e%L)<)DJ^ z)j)Bj-MYrqMWflhFc!ggTx~z8_WIIM?Zn=-;@6Y$as%$?2r5Xd=Fcgg7bU!XydH)k zOEK|@JIh!U1XiK|jJF+lT~hex>ZTKLrn(?~q&)ql)j&EoRh!rKg&31C?KxxlhUzUQ z8~ExABrw6-Q2)xuM&@7002s2U)@Zp#R(&&_u^oI!IC|gmph&!;d*5(BJkoU7{8N3< zWI8rh#p0yeeWF%PWq0l;$sLW?0Ub4uR%XxrjV+1|B&uL2uezE&G%T!uC98%|m0eLs z-M&e^`eDRjuGXZCHm8Jhfu&v4%ba2!B-8Ir<9`mr6VdBUx)m~ii|NOZ5u5?zPJt#AOA7M??Z~FbsxZ?K z#|@u?6P#<#ROzMl$y>?U$U7>LPtG2ig4?OmHm)&2cq_j z(t*Uu>aW7}GwNd>t}Vl^69ZzwlwQscg9q~%1y3}NV6vZ|>#1g0ecCCGQ{c8--;Y1Cr*;|raKSnp5q?Ej6m zlEeEJ>h;lK^{n=Pvj7wN;$ zW>tDmhJbG>cH}&<1O*qBn~t)N5=rs!#K^$h`W85X_lqWncja{#$G}9FxwA_}n{-3F zI}uMbOauZ&62bFmmp6@eF$#2ZUJUCh{*=}#L#MmF#Fad8IB2izUKD=(gE?Pt{^t;- zwX|XS#Kc<->aJAfk#H%Vq|vNscmLRI0c~9nhMw~Io&K>M-`pu+7>mH=xXYt9sQ49i zSXd>6Ou&@;8U9_hIE8Hg>VzQ>)|k3C<~k@O2~(ej8(59R&|OmL+` zCZH8F>r3Kki89Gtb>>A$s)~%vuOp`{qWi0Q=ihP_=(23bo@?4NuflwUOpWfpFfRU?ZMM&K^b>fw4t$s-tU9e`BmF=*ROZf4H6R=u4DKEUG!`b(a-Tk zGL$1Jw^fEP%IJ6gSHNRDX8aG)#Q|=xswgqt&)I{-KY^Cxw2G*jE65L_M1^#Id0>|R z_@3C3U`ywWsg8|!%d_Rbf$Id-Z{~^?z#uJIhv+6Fly$$KNbijf_{+56o(A~$KfCKE zMhv}HAW#exU-v$k*SYH0o6P#S=uAymlYpBrstL6Nul%*+k5XtK6tVse zrenVkmvowZvDv4~*Q!FJv9WB1UC#d4%Qu!MJ32XHHBm4eTMY>MCm=RfmaF0NKai1M z);L!wlK#WrNbtT9nDL|YG?`f<4$=cqh9DNem23mZYEaY_8HtehYQ?ID;3!5rq^FSl zuY8J>20H^-1yw!_T)Q4=imr5&BtB4i0cQ^5bt-WB1Hsn{@Q0V)3Qj~fU+Co*=J27W zbnc#f=v$&`r0_i*lhIas|2A~*{5-}L3j<6Ua z9JjpZa;hf7in=wz?3NJv0th!BKQ&S+=d1XaZiuc2 zG@6}WTfXV0j|X+1VJLrd^oeMLy+?BDz~sM^{;%1g_Vc@4hbM^bUgnJ>#6njlQl)(G zDIrj_&Wc>qZ3EK?CfX76zPR1}LIh+N!lO}Q1c}!s7{7WuUjGiN<_;(c9c3R&Wvwde zYL`Lg#}NwJSNn;M2xlRr3)S9dj(|`5H+?DE2ckaZ(s>}S|(^GC)j>>?ldQ;-!d|CAdv^XNdp+q zc!GoI76`PGGk87Yr09rfBoZGeF*8mz3Ourr`*aGd~v2fF$5F z+pn<75V!txDM#1p{0oszqRceo4E5dTFZ5zxG8j^em=UZlKiDB*mvaJ@RuKUpvUWL` z6Jv&)y@{1Nqi;kV$B$7322YyY}Et3);n^|m`O%;Tnxrmx5@XS|R*87}-=nzO< zC~!tRGqfPth)m6fII8M0=ouMzu!5C_t$S44y662+C>kp2a3CrR0(BeG81|82v!IN2 z0$7PFT|ndumzHHC(TJGG0a&F#!EZx$N&QVQI^#UghsQro^5yg+ziPv;>_U^ER6x-Y ztpG0?B8tWMrf&sgaoduPA5jWpwocjF1gG%si1WV9Xn;Qz4r{ieo75^6jS4+G~*p?(}-xWKq@ zr@Od!I!;rBy>P#u#X$+CI;{*H?ADW2NYzB-(&s@A?NW}|bRVBoF@AinEkg-r#G8v=P zd)e7-0|K0%Ji`MmCz&IEF?!L_x7{+F=DIk0)EV1~&vrWmUh-YK-Na%sAF_VM z@p*zJjRPzB-?t9OJwl>_0+TqBzWzupF+F1=90+58!(*k}@~n4Z%Z`ypQgl zYaB0Gro8wzaHE4LMz_;Qxo!ZX-zZ18}9DO8KVaH7@L?KR@HAd9i#{ze7oG$eEhyDEa(N zA;-Pr6o!Uekg{$pW5Op-kX}5&OOKFH?!cNE1XMo2n!j53tQ5W#Bd1e3sXd{ z#rjurR|e)9gd;9Go_zC8!-T;n(eBod*8qW<1=t>YXUkK=0N4Ehg{X#ABfLr|mad#{ zx~LSdY?gD)mrq4|Nxx=npyA5Je=`GgJr6O^G7b(zn0KXM*l!XQpsd(jF5VrjTG^ph z*zNRl*q^^lY@;DCc=~XE2tT3-b5-eqDBj4*b)c(|wQ6s+;8 zyw}laKu-7Gl{9RB8FMIb`_Aj6J1UgZIO60P@LuJ}qmbG+pJ-pKpqDCCAGByU#-KiDuv>+sabB16>|!TIsVV%w%LMk|DrwWHczXR zh)leBY1rxWcEdVxJB6T>RT(*9LWEhhd{gbxB5|fpz=6zMu6)@3%(6-5F%Ztm4Nu^) z)MmaFWA|A#e1~%hhVE)@vmr+9ZBs_S!B_wJeGwksVHgxEH!Ff zx{Qq@>Ep=(Yh^-koroxyOm_J`ngsr8G+S^k0ZI4Fn6(bVdE0N2@l%Dm!x{g{!}V$r zrM}Hv9}P+KeIvawfr~8&D=uE9blG)(7AtH>k6ebC-y8upr$SZKV0DPVeOWv{dNPdI zlhr%3upcCtfi-c0r8?b~Hp^!CE`oS%hm^~eT6JIOomH&szsva!oAvo`{8}1ktx#M3 zH5YHx=Wem6>k-0C>3Aocng@l;DA6Nz?yfX2zI9Iax;69otS^7ovmKU_U(f|GDfWSP znv=Vyj6?X2>$GRKDU%rww}OO$L5*^-waoGczk!lMyh726J_~L8aRzd(^sY3E`_A7M z{Xwmxf(@j2QtvV^1*?ork>`)EnL8>>&h7u~yZ(OQKL%RXnuMgRL+g?sEl4gC1?A&{ zTY_c%ak$RK&!+J=47z|ZOYTMfHYICdx@b6BrC+J>xqD8nkoJU%Y9~;k#+`$suH7KR z2if*+9V1)H#DuMuOWzvwN{Ark*vux=j-68H(%*uX}VJ~_W_M< z*MwPFw_`AI^BP{w!`@ zo4}-Ud7hDWLhp;n{5d%P%{QSB>wtxd02aD~N}3TR;y@NCotf82j9J2AcENw0t7N|^ zUxkh*7gR-w+1VjQc^?693|HOYl@pE?c2v~NL-ROfgKDU@1rjp&_xH4|7WFMDD_X3!-*NW((~>Td={fU0lbTa z{kqzk4)$smxl{u}pO~@(&7ATxJd(4Avc|^O--SYY+*AL)D_KM%^boM}3ysfQpNRZy z`DZJc6T=%y22j^mc_>cx8=m1kF^Z^j^5KHAMJ*(=bo8|D)Al^ft|9m(G5nM&q~B@Ex9L)^Zz0q>kC6)v@?dND7yk zW)K;0)uxs#V{8bSk+sAeUKHx!?>1b@izw{_-MqfQ)&_3-%+~`1Y;RoWb;;|dlBvt; z2uZ=K(?>s3O9?CB+2eCx3R1>9f{w~~tCjWG%`h>)CrpuR(C+Go)grsLJVM5R z7C2`6_GnIn$AybFZ`}N zs+ABLAG*f>SI{*A zwjVp#8~k?z>yhSv>woZd)R|{Yo%<$Jf_e08Qk<*CV|FukW3eWYvA>o`v#t~u;x*h- z;UXiecQjzM)I#HkSfUgXgK=?{Y{n_O_eZ%1W)bt^44=9OC@In^kEuKB>n#ol>MR z@*KvuSdYz4)4yKM10@kIMeH|A(Mmg3nZ|#}uVDWH!;>8J}1|Ia?I5g7pk|lAZT@3%m;)Vq{dW_ ztVu%_O-CIfOz|TO^9#E-8zBB~VK^0KHQgBdlKd=YK_5;}w_jbQqQ1k+%q-twATDfP zgbze)H@;|T7yEyP-q@yf@M8k{1drAp@j$qBrU0iZiX~3-4K`y2h(X(KeXrp%P?X~8 z;tuO~(ubUtwP}OrzYVeVA1+hvmt08$fJAo4g4cE418;m0e*%Xr349BIj9R z_NVf)hPxAVVwUgu3I4sd-lqs4MeWR2rp%MD!N3G?1ehdc<3vvw$bs|o2|PTSkJcn1 zSQ`2c4X;+iiN;rsAFg@WIXF5xL+~6qVIQ-iUjN`U#T`h&xy%+x@RgBf%n%o((oX9^ zN@_F2j%I+bU!tqb1cVuOFU(+c^VbirQf6-PWYvE=vUU>jMaly|(^H5fF%1qIGA2xy z+48IR@+BRg<7LAlDaVR1Oe(@v8-h|HI2oIG`1jBxY}rs}CJL|Vn_x||4HK2sg=I5v zZF!lX3!U=?FN$g^rMDrbIzNViot>89iD|C3FJy2euX}U@KdwbD9R?S{Q@9WvN8f)@ zK(P&}H=>}!U)_v%(T`Ca3Sp6eTn3*KFRA^l0iujAlstCwrZcmR85s;JWHc|77V90J zHqAJ0*>I_FrTw*%j&$Kpe7|pi`b7*X2m(!)XApx7uW)<2oZ63m2t;|YpuS<j=2C<9s+aB=_RhW`#&TdQC(i%K7-*XBbw^F8`vZ+6!VE=6`yB+#V)u zJH-93A`?EwCa+7|;MH}*#i@klOvG;0ga4UBgD#c*um%K$n9Ihm47~Qo{;-bJx5Z-N zegS^?@_?hO^UCL+kBUwZ?hN<y14yR^) z1}U^}C>xSPlmsP)C2b`JOYqSVl4mp+VmIA46Q6`AM|iTcnBH2fl(~*J_>5OTOVS);BhK0D?;RgduE$fuzF;QbYTWNIjsWo*~YP*U8=KM^L z7q(3pn;Z&ZEmF}K$FGX|&h?3bGo(}jA8n^%UZpVM`*~iI5SGs!lx$_u&if?SJ*UffA$-`5q}GI__0bJ-Aq7__gI34J;fPjokn`? zLR{6E?9+hX^lo~MuKHqA&-(FBc9!y^?`yxpJRSASXgHtJG3*ZCDK~|3&iE{6+M8ZX z#0n8%s;qxt{fiO^N1{02UmVmJwsMoUl7WgOBoK%=g)whe0=FIz%UVvbuAmtYPpmYU1JRi^ zb0^+y{by%>xa5TCac7OkZ;F$^+6kW8mk_(92khwcoAYS{LcUn8Mf(GO? zXPF&EU9V*0i80L(8fXQ_HXM21qkID7b*(XupumsI7GEn8-^>ISK#JOE3*J5(4udE; z{4{-F`W0&kZ2z@IbdHHy}B2?@Y;?0L_-Y?W;Su>Jx*Np0oi%a~GORUQj& z-6j{N_poFPY>&4~`$~r@dyCWKYk_4x`_S^MHL?hdwW^FecGVoUrM(AlyvC*l7GtDV zQ%S;$qya2{N8B;XLb5H<4&uktO4V3Z%u}6|?{uW2X&r~Ai>))PVWt}ObeVGhp zYC)+5wjHmY#f-Q@Y3%%o?QXf{GC0*LKtrGYrQz*Vz~?y#KGVKvxG}kK7rWM*nDlsS zu(!x%Helhl5kGCzesx@KzrwS8d7Wi^uB{1d3r}a zW!yCHP}c%Xh5Xu1u!I~FMMPW$tJ*TLKpqdS;&;-|GJNH4VQX8Pq6DLVh0h-&@=kGj z1o16YGMB_}3T!r-eY*VeHhTGTn9#tl^>%5gYil)($ydkr8mVVrRyGmquZutn6P~Cn zoBuToc49Zn;7T&60EIP9wH!`^gpdvH`?*$Pu--|$V!Gb^iItj3 z#|z1Vv6g>jLvgm%xMcabD>%$NjnR(#N=AgRh2)l~R+iZ|MIsEShCZnPZ#&;+uK5 zMussc=(-j*UO7MBc=-dUx{l_GnA@Vrt_A14PI2q^r*xK&GXxQt?@sMlOuEmEd`R8@ zeSa_PZFINaZqX*fUO(`C-kFyFe4q^1`+t7;CT5yMlo%#Is7ulK)k zb?V3&`l15hq2fG*(7*#@(PK~VL-y&g0ZN7_RIo_R<X;-XR+lx)_;kw? zn^{S_^#Ui8lC4E9_py)lM#nv!<}ArhOOJo)w<6O3uXiRbXu3Q`)0km?-`!`;_tCW zJ^E!?i`3w)jVNH#Jx@#YvTO`9-xurk#s-jrMNVt95lW;NaN3+)6?^I$G~lG)pR<*_ z+QpY|H=RcQS?;DHGlvEh_c=cOcPvTr-ENgu(~R{4wxtB{rv}%3)36{iL(&g_J&7+0 zQoA6F$S!UoPj~{DfB=rRt%}w3bHu5gBa!J1Af86RGC-7AYX=Sy#QYN`VXOLP|2)vQ zgtp3LxMuBdZU++8&fhpTa|`K(TKM`}RO_+vt1&TMhn3{xUP zDsxGfOT$`4h^aBz^FR`o1MxrhJDMg;lo6fR^xD1L4mr(lOgX=0W>~~_CGEI>VB2aa zzy-3HN24Z{>K$zymJ{VNqeSale|3f^on2gF&Wi^md$}3Wh8NGkr1q5ko z++8Y6m~wfgq)))Nc?qX@^}-KIRYwck>*)IACFsQaX5`QGb8n%>F7XeQ&Bdx-SZ8nQ z|JI$tS$Ou(bFVmaV0n%CufJT*#+pL~OO`;|mx6k+Yoh;*1W2Su0)|&0WwS)6>s)!HZi#bOXR%N~* z1_(7LxbDwWtcNoV!y4_(mK^kh=6&jV`%#{wq386=C9a7bWZriwV6=cl|k=_HiCJEIclAChTJM|b9B=sD<}1GbnQOX_LHq^tc;Cvj zHz78*F{mhrc_yr`8?#%S7tgCSV*sZvLNT>l?HlrdhQDVTd+JW}Jdk5dFA!FZ3^`g)D#ENg3mrF-eK-~0H42#E+4!_y?ROj24yQz*B+rug!zv+j&e03)xGMe9!^LF}P_YHJk3gmyhsFB=T zQ5?jXDR<|S`@#P~eY2jYYPsYxq3dGF-G@g}-xv+~>vsP*)*sh{m!tI>AQ`Y{r_1?0PS>sAZ!>dnso>K5VDCtVwCfhq>ub8q`Cn@*2#MmQ^YBrHyn6T#gps-#p_^XnXe{=!1zwN6cGE(|zzY)YY#e z{ieILIJzG*#LMTdr|9VD5`r2}T$dl0!fo^>+H_^S^#MIvc6fNfL#23tsNe_EA+sJb zM#P|^@@l}>$>34s?V6E^`PcLSOd#;w&P-sHMkNl%aQ&lbtQN<<1o?yr=1 zyJFa#0L~+L&VK$S*N%T!vgQEnPKxOYARho2C533@IQjG4g_aV`1Pbxz-wI@<^H!jZ zW8!E*Yo=s zei?%IY@-q?Dr~R?9V)BCQs#LhO_=9O{6pKBWo*`g=F>Mni-HYVkVIvw(hGI;V zwJ_p$_{z5suXl`4ff7#x!R}u0-&_gp#}lm!5$^MJ9L^Q!H|km#{n@Ed+*Z#ps@OFQ z|6nFuJDQ{JS`#+zpaqnxecSFI#t5hBFcGT>Jg3b|qvX{u&^3Yl=Fw3KKSPp`b1_xq z)vx}nB{0zHCBy%j?V2C zvDnPzg8wMp%F2CGGiQ%EBEXb1gkCHtE{!0GR8v~pS_TS}Kgp4ZcvATusrp?=KFdL{ z=s41IcqXg2kPa=4ky_!nn$2J(9gH! zr!ym?Vs1PcNSpzZrzU}2p)24TCEKr5{)-%$a^%*SIr#<4H?wl1R&pbwi^w@W;i{zr z4RVH0P)D3Z>vROtS%hd_kl#|;dcdSiNMkT3-HnFM#we)^>~`T+d4zc9@sWwF9{Q_{ zM+A6MAfTekWA2ws_WgjUqL5Jhe{uDeL0PqJ*r;?#gP=&?bc1x4bazX4r*wC>bazX4 zr?k@D-JN@(&-?9f?|;n5FwR=nI^(Fzh_PI&uFR*82X_KV5gYx{D1%#Dqf9;2fYnm=QGE3gC#;CSJ)BE?H3RW_*w3;>L^h4}C-o`x3z^WUI0 z6&{NGZw>F{Ll2I|84tb)>o0%}^{^}l82Br(wHr*}A-&CNid_9a0FON^b{#=!iER&N zm`j`NVe4l$3)v$aLrMQXpOEqCw84kWtN(V|R+sAYUq1=yfm>X|{=Corwj}UX#tne_ z_b8OF48zrLqo;CY<_oH$;o^L*cVz;aN>ZGow%_3--u2rn$r<6is?!)v=m>~*2gE+4gm2&=N-M|NJf`4v#t#7oz- zI#ch2dfT-gP4^Wb*wZv>!tmwrqA+8YNdJ9_&?$V7G>`8Td)uo%>JWTZKi7mwfob4% zfPKFWC^ZB_L}Jas6-bS4x;1NGOFronDc5>3xWh1P#mkMfo5qEwC+V#X+kg4`cNsjt zOZ&SFe)1cxn?k40o(&fxi}2OwT$sj^yX*;4<#dbh0L+yl6a)KzKYEHMf&W0g4FAEwpY$6yA256?dH8; zh1&o=sk3t8;Hl--6K-cb6(T~4=Il(ylcH?GuZ!U6?r}A=FEPIz!sPsAFRmjnF_Go$ z<_4^7&2DAhxM)Wq{XdCa$R#M|{+IJi1@B0NiixMQp z3NIPHyF1~P#x4R(1_1bP?-A0Z7@)!bNVL}jhv5GPlquTNt1AVC`EG$scycs8^BLCC z&r+G(m!DaNWMqP)J`nFl(G&?1DnVlcip#B3Fd1D zRJ1;;uLlf`CkG>IJ)SYN>Xz1jz_PHkJ#WJXys2k&9>+O1qSf2ScY_=gG}iVDJs~?@ z=83C3dz5u?@hzkNy{vl>3WErNp0a25AB=kMfy1#~n?^cP6k>XeOmscJ%?Mvon<>rh zju7>@73&G%eC3t^yQj4nJV6BpSDyEd{RyG}QRD!`Lib6WYcdTz*+3QmAO|bBrqja( z%_BlQ6r`Cyh%hXx-eIFp02z@UMmyoARYu3IF1KyS-{vlCO{^$P)2eyLk*1Inoo0ziAUJ2DwTYLV3 zFIYaoaD6-yPf$Uk*T(`pb=*iXWgQ(3I9;qj==x-L;b?nzX;gdRTzDtuYG0CPe z5oe#of8XyZD~g$S%)+Txar7C=Q_gX@3>mT7(g&rxwpL&2=FwFsaQ)q)8U8}iFzDl7 zW+8>b8`-xfT*)sR_Ul{KA?)eG=|Eeq7CqJ6Kl>ni`$Th8J@k!wJ?=l5`W@1Pk$_`h z%p8kZi)G*P*gv&yuKh{M#G3KI#Z9-_@ts~j`Z=z6ka+p`la|bS2iNEqtEyr(N*&xb zqKEaR^?U7Kq{i(OXK$L#a>1ae(%OH2x_}R&|5O6wpy;&8B;WZ;6(Y@U%AFw|D89)o zhBaoMI+@5TE{{EPRfmzx-E}J3Xp4mr2M1>JJg0vPJG3vKu?S8wQ6r_Lvi1*B){OQn zXM*M(mLJ}vKI<20S?s8^^kuNovMSnUnANxB{h9@)fBIS2JYEJROEKNQZ|H$=c}w2| zW8=quQ6|kGxV*Q0nAVv~yX_ymlg|wB4IfdGf0_tD=WhxlTbuYSpU(6#xk#K50AW^X zml5eOe^Gv-x5^<;di#T-vC{?M2G>sLR)z#JKdADI{heaz!RMRLj}W)%j50qwNS=78 zTN>IwZJ|d6ZDSr1V!(I(rSU!G=ult<=&>;#&8b*(OIvv6YAmtB@wnkFSW3-!njXs7 z-Gx+NnX?nt_#F<}txu@uQFh1D5r**9z*hc#gj?QxA|gSco8nqSB(*O5P&)r&j7Sk~=tD$mc8H!{Er#MYY2cLOd+gE8a)g z+Y7GcnHPMtGAZS!V(Gy}IuD&cOMZ6$<$8jT8Lv)@995 z4l<$41dbT>ZQyX*X~_sJ8qtcDj>kI|>t#3#Dl!TiTrnp*g+_Ba=8v0kq!IEz4Q zf85z2L?6jhCT?!-J3fr4d9}c>=zp}OWY!s6Bg9nBk%^m;*R9qEivCR2_?2=8TDU2k z`~4+VW7pG>?K!-MF%|vM{|_r3EhNXG8dSke*WwZr9Om}grURZi9+i`hxLGTDaz?IQ zA3 z{hdA&J@5+~o~AVHuXH(hrozUodLDa~emMyir(L-2;mM->&9Y+Jb!lcYvUnU_@K2Dx zbv&ku27`V8K^T{GnRSa8}E*)1IeymJ`H^%UdOfQu|ymQUAKYUyIeW=g{YEqIU49yiwI!ZW`C=l z-kX$1JvVI}@(PV@J+zqKu13PzR;}rV7;o-sicn3v`gr0g#4ko@NrtbQ*_V|9;7$o( zWo1>%^KN-ApLn%>1%u4ix)DBfInHWhKA!32e9-;xlYS4V6Ii+VS&eMtJMb_SrtL>j6@hYS=tfczH`_7)d zXeKEGJv=e+Jon>Lw%Z?9&DSTrmMYXDv3bvL-5e4guUGMYE1gu*J&CI{Ij_8^EZE_e zTW+M`E_u;gHg$2_jdXa3%ral!**jAuUOsS{_VFmpArabtt11|H{=n|D{*orURai+- z;5Ed)>F<~sGX%(h)*=ie?ue3O7J51&=Pi7_Jm%g#BI9U;r3WY{U}bV6`4Vb};l8N! zOr-JuPq!y{nTI)5ROZA4Y??Le6iPhK?+%Qb$PoOuY{VpWAhtIGMtqyahx=3bQfYfVYXF--AB)NMn zXr*@B$#OMt`(3k#rRhky>P-f@bEB!wg54o2HRd*D1GS9CiR`kI+)2;vYihlwhz@#U zSm(?r&Q#*1NNbL!zM$ZO9id%N(PkQ)E!4efel!Uz>dzZyf(p!5q+0pj&)w#HyLCCc zDc#ipzxd0opjxW>nYWM6zcp1AB+S2XKMJ{VcU^UOs8njw4l_G^7UyjLW6q1RYcUd; zU^;?0!(Y=ped)~il&aKtL8o<>B#q5N6Nk`QOV4!~*le#(FvLu+tFhhoFn-KN`uMD>Q5> zyj@8;H$cb|c#h$~FziOD$?xch;}h8St-rFmE4evBReXxPvg!by3F(I0HOKTom-f#S z2!dO$<@)~GT4%*_D2WO9aAmd~X*zh8`%+=IKckCN z^|MGK!cAH*l+%faHGekUX{svhOc(65-C&Xhj0nydwJsLj&Z^*?PUkWzup!GqSN_>; zx!jgb(ac#AXNb8j*!2Ziy8>PBgk<*+%rxDCki~Z?_eAOLlq)nyv=kywYVB2dRa-(*%_)qmQati?6>UNtaDdFOHW zl4`1P!ERIiG2yx#XM47WZjP!#>(8*od|_xH@_Q~YPibtI{v|&aAB(cbB1g2RP>L9m zj21H3N-tGwmjw)}n6ihtt`uE=O*xpq5Fzkf)hlv6XuBc5z=iW#L4J0g1dZC6K}8;0 zh;&&uEUf$fdL0)`&Dtb?R%J;HzU@W-`l<9+T{0ii8=ckqG~D66arykXYTXTp9GPz5 zpr`1Twrq-)F#e&r@6o`V`P3EZ8jNUfeoPLa^gUeeOhy#W;M}{OdieRf$+j%lnzPTf z<(vG$4D1Q|4ON9n9zExd1iRqDM--vH5DFerJ`M+F?5bN(Vue2Es}GJ|o?w!TP;f6H0zpt_B5uO?qd)t)n@EAqHbI5N+2 z{Llhxlh~GC>wsz>ZClhrGRd6;uZp+>;#y-06QW}}Y&RFO{!|0_U?#~9T%m0)n7RQ6nwc2tw+t&tTL6_VdE73GK%yZ6>sk>#*?H((2AhG0-q#+J` zu(>L(7lyg{ZGmBbos{=FsyyAUP<3glrLaOttpdFgdzI)>p53$Y3HaX@;OZ3CNvADZ zMVM1s5<|GiYAW1WAAhrV)t%GvJ=d&W8aueInY`<1Bj+ouK0@Fmu-I5dWi)AxV}1L8 zS${9ZK>JA41TSMb?iNo9cYP+6X!Y`tMZO;0KYiUNbrs5_?H2VW;j&ijZr|I|K;t&oxf7i zaKnhqbpG6WpPA&dau(sKS@8?Y^XEsHS;K!+>Jz$6ZU8h1u@zUbHbwvONa5T-qMOjN zs@eNv2;*57!U@ZzcJaEH9!pNy333?oPNWgpJUNN$mFG2wDE?{~8ZVY18ZWfN+8j(p zv0X@Ak{O#a+Vg0OmT9~9;v5CwA#(d@YNqU*1#q@hTI`iS5l5t8&{(GOwK0~(IgGLf zlUFXH7bvE)`MS(^HwsE@L9k_npUDVJj(%}EPn z!KE$hXIINCr&!ESHB5$1LL;5RvQ1Sh)U`RLCc#aP&S=0ZiLe$YE_zhS!#1(#z*#IS zWvf>-n{tMJb&HP4*iR8y z=ZOB=cv8cx}-4r53RFZ3|MI6*Wbu@vH;-drYteh3IM1~Gx}d=OL2icA9>%NVsK>VfpIU8-e@ zH`Rc%KU+R?14G$D`ZR+ZxNb<9XeJxFH825X!GT}`ln!Ko&HsEO3cTsap@n;5_p*=Y|FRH# z0F&vMGwzKbi?PY38h7viZ@Z%^`&neok}+je^?fHNniWk;xkN+PF?o`5h>0K86Eszn zZ-w#G;$(>YCcax5!{c`>j4-SD_!mOF^3^;%tV*mtmQv>mlw4(MFO_okv!>?iB~zCr zf1+9CKX#sE{g{Vss=<4d>m-cc>5{SH!(jo*+KhjWw)l)xO9!1gp!Dw9*5zwi(lK5Gj^TpMwQQP*v z_6@M+eIen-+ys#HFAq7KJ6-V#BF2B75OmZbFa|176m%N!S01V#^n5bd(RDV$>G$O!;=pJz(niTdzRlbcs}DxH{b8(u37tdv?~pcvwySvPq(FuVgmzmW;cXhazXP! zE9I^PM&aK8@>9D&(Ypy!^p`>iNS?A(a#jKK3YfPbVd7`;ZFJu3K@Gzy9uv#aFSZOzbpU*+p2+F>aF9-MQWjjs{1e0r7x`{nyEM8@Ay2o3KVFV?~pd` zKS3G2YGQm`HtX|8kZ&=jR&_Pb9xSq=nJ_fvBXssfG37SZRE~u;IQ-#DvhV4l+D}n0)|9Tc!(%jG zoT#HvcM{mzx|&tAPC&7hdbu|lB6m*u^yU71Rq9hUoqV^R4&E4vvu^l1UNY>>{3QSDS5X-#X&PR(;T(n`aot2i41VV#0t%__U2KN&gd)Wx3W*#m4RT^JK6L z`K(g!nQFx0MWlr#3O|}i6+A8B!w2~Dq19$m^y0Cqt5f9XikNSJ!-a~N(NeKmX%a)m zW}(wS$%UIK*s6)0Lk?jY%o(9>0GD{z3^smTj+cMp5O*3EbxP=z* zhK8Gf*2Gdr+~9o(*;V~80hX_~#~8l>C(TcIrTKK%i7)FEus~c!T_}hRRpnrN?y9Br zZ9kPbB;0gkBZgBV?$w1pdoPuiHUq!17&cVm!|AVD+w;LX(+N9LRc?i@TstXdR%X6I zG$DkM>6lTFEP6$Q^&)IRFr2S6#>dInYFsT>%6!9-)x;OeIq@^~kBDZ~AE<`vDEf=? zw$8%6bG3$NsyUIB;3uPp<;sR3L=pnbIe4&(mxU5rHVI`Jv07BHDq1W}n!*xudfCHU z7Z*15tYDw+PMJqf{e#hg$-rIAg?{Yg?T?Rd9VZ+s3C{&Qj4l(>koKCb(Dkcqu&>T` zB$5l_=9OXGuta&)-Nn%SmoCR2d|&_1(*6A_x2-N|mS5)*0%^Bzs?j0&kM_Y!=kmZh zuL^M;ljP6bRW)EQ4nJKdzPC*iRP-jHqhpIhUac6@Hr)v{-WT8~@FM!E_BjA4;T^2tREoDXh6Dnb#nuD)&R8p+$)b$&0&{ux9beQzFf~7C?l^ zi|@-a^?M#-Egxl2l+aQ|T}LZTiB3W`fsXkmB`NB%!o<;*$tRu7i)CCD|iz*(JviKR+Xj zjt<>$gj+wkCCy}XIshE6ph`avMM=3rvW{a>3>;3KSPs5%q6T3)gS*&Q$&t9vGmd)s z2?@ikjDOFmP#tVW*Mct;Rg^+#1GV`;Q5@rO^yCDY9fb$3JThKOxn2-AG;vcHo%EGU zDJDj*BgR}zJa$CfFs2%&e1M$vBS|UBM~yzGi&xil44EpOG<4hZ4Q1&N!vMZ1kq-(W zSfH7pVaYUZy-z0?hD%ByG)zk9M$Ete{bGl0J{kAWo!>C)r3Q=xH0**)^OB+n1!)HMNgBoHAScvkJy)-?{kxe z+h9;h2~s>5q7w~d z+^ksn$qGZ%f_qx1!E^S!(FWb;;Gk_%x3|5G5ef z^Ib__AA0p5_;W{uth+*37#SoQn^djwSBCLj$%rs4bkU<&J^@=~F_5IRNTeb{X(8W! z$VN1xmU8S~avF<;D#->MbUGR@8l70Lq%@UE8iP=KYt7%XN35Y_bD5$BTys@4%{Y%%d{m-n2{|FX1~ttR z(&g*wtpy+-)HZ8)^P0Lt;D9)(@1?|+QTIp#^`*-0kK52F+-w0$?Mog8X2tD^7$*OI z3Q@L7JTa9pMny}rJPp}{>=Jr~RP{HG^^{%#rqIB6$?WeXA3}5ZGF}@T&GQYK4r5=+ z)t2MVQ_RFa1~e87YFWLmI^#4;9Df|Jn;E%37aFdIK+^Gl1df zJ(vCoArtsyoj{EM4l~gsbKv$G>Ae zdeCxrWK|UgM!BG!#LVC+X~~`_%_ZTAr7GqDV4<){{vw*V0HTRwb%*VKxKbH1E{N1sN8w>_Ta~&GlFRLWpVulOF({o9I#DIRe1!As*^S|3>e;O(nOR&;aL5V*VpR zxqM+lTD(5bpG_n_{@Br?(-Wx&HB(`I#7ko2%=brJ+#pn7Ks&O)+_)(0m*^2t@RaRMFWl?ELvpNV9_@z z;2P~FmWVJbR16#scv`C4&kNZ0mg3LJa;>0@q2dB4ty#oOBd%EY#laoZf0$w2w$CIofK@o^e_s0~6 zzdFY%o)7hv6BW~!93C`J;u8UQs6}(@la$e^g+o#(-TSLT`ufV}B7B_HOO{Ja|sr#KHj=P`lE`#9o5csj#$0A@K|A$`|1?dG%Oyh9YD z@jFC6f45w-cEFMztnJ_6g`b*u*f+Qh?b~S@X55{x!%0CV<;LmWoxh92JNF)F#dcFh z6*#7I({QgI24Oaf^WT4^#_do@uQoM^S-;=SJ8L*J578$v=~zA@IDCg+{0zT*gADsP zI8p-$(8y!_F^WI;_Z`N#tVlJk6;~!WD>YROLT^ z=ZwFAQYwOTNSTzQs_L5~#FZ-47?G;d%VcA|%iqL@R?i+#)W9faP-YcA;F$~UTTv_k zTBV2xqHMEu zEOJXvHA$~yG;ABFnjynOV!eA3KxINSD- zx^e%-kRG#IV+996Q^6Hr7b{gvt|;y~Zqd6o(Z4=Ge%OQ~Rc*_$X=`x$+4{L3*hdPt z7QUpAuPi?xj^woXJuL4fX`Db?8VgP&QffAcMCL@}bQA~}g;+z~_&d9PkykEi*Sy#P8 z`FU~ZwVK~+_7 zH+Wkatw6;Be`;LscDc>h+sNt#C0-Xl{T~08XVS4O)mHVy+Om%CTp8GQT1d->jk{=z zCFM(X!U@&Qe;;L;du+>1N{{lkF=*fIj-2`7^HB0c@!UWj@!FtRwSR|e)I4t(gVA$e zBK;4O=J6@QkpT+jTRhDQSKra}-_^nTY-raS($WYcq8X$TU9Ig$R?vv$aO;r8hbClR z3stT6fmbaKz$i;@Bm{yxsA;1`ZO=LM-=2R;5g#LEqO~yUP#i{2nO-?4I$BBTOANX2 zhN9j=y*16;qh^R2xp)K&S_|5=PaqA&25E@V=!;-T-x@4XiVmxLg&sxZ!X+fT>r8$3 zz7E7|D#QEa@!n|Ew&Q9kp9qq?;w;Coi;Fw^?AIzrqsFf-|ADyci zoLoBLOV1F~X>>gnZV08t6hPkWb~~erX9-K#uv$lP9M>qWY>caAw=NZI)rDRZEXrRS z4Vq+OhhliqYXp7)H_V@cHsdLOxShw^i>s?~uK>fmdgly`5CkQ@JJ4KxGh9Bj*ZDAv zDbK~Pq8VI6kedNiK1}r;HHHiVHLtI6h?T_#>#m1m@U;$cyr;2Y6Vh={&YSJI=PtgJ zH=jX_qW3)48QlEIAA2)tef3yu?T zG}fzEPyMh~EBtoqe?L01SmKl~PVHlD-cMTJf=AG)n0AE_uSb$hG0DUmS1jx}B?DCV zIhho3T@w=eAR(CjYt(*Ny94-VXWgl&SL(<4^L|v9mkM~*^A_$ku`@zkIOMXkq&Xf- z>pKzVr_HcZ-RZEPvjO9ihYU6^5cT(q&-_DaXAq1M7MkgB20}pbwD_732k-SVwz#g+ z;X-tCKYmEpg^c%LB~P*PA8alFLa77fk}@4Or7X8^{CKoZxv2Ezyd9l=+DZ*emCF|0 z9n`Qi%Es_Iu`O0QW+`tko2i`-=o`C4Ff(XDXnIDg7+efeT9{w-Mftv+xELHRD;U(9 zXQF?nwb;%nOu!H`B5v#~K*3j9W>(7*s-Zl|Z$ADD!@Q=Rz8_uEMv!7SyEBHG(Mk7x zjSy?RVkCfGVJ9VX?H$BYe@2gk5N>k{*GNtlb@-W$Fxo4$X?cY!`Afh#*lxDKVPgFw zSe=%e!S)~`3FO8`5_wSfooRv!ngZ6*``*!PK5( z7sq-*LW|K)DRx)!T^T7-IjX&qbgjd}Q@s!Jgy;^AdChTB6a#=CXy6Tc9pGzfN<*hl zl{)K7HSVIg+@cFIn3h99q~Xz=1&?~phSzrMz*}g!xYW$xGCD|l@Vffpp~v;5LNi|> z2Fo_ApYNAa%Mx(<{QsrZ08+g1JYw1r$Qr_`tzvuKEew4GF0*IoXWh9wfjX3Dp1XPJ zBK4VfJYN{_2QlFN*S`tpqI?{RwcchTXQ>~?!mT-8WnMsPcwOzAXX&~A!8h|4ieoO? z<@pI%h}o2#-@mOc$!wCs_H2<5{WTMa}-bQrCk1_Y@#ud_<-;pBO=x0eoHv1iGhoeQ)7t^ z8j^$rgoyP%{_GWI%{<|ZAMgCFW&i=LIP1Ul-8y{rp|U?f}&7fA|GO6Tnq1I(kNE9 z<8e%h2}A8o`~Z3$1QElB!>t26!8|_^<6yxr=lhS{CLt;87?0VQiYgMTMHq2g5YDgMT>y(%2p`>?k zp`O;%=KdZ*TPq*!7Ssgvm6-7+@vkMGcZUs)Ys1iuk`T0=+ymEoA)({mj^|P6Z$=vY zUq1G$eIjcoD!kwyTIaVouCu&$EGzK?Sv{-ZJe`-_&JH{hs_ydzCsJ~8q$M0#EnHp* zS|7@8`2JqTAz7JA zwoOY_GJx>!P*Q@@Gq_llg>r4l z9m{`^?59t)1m3=ax^FGL2>L@gh$I(3^#%!pX3?`5e*pX-Ee=!xHUt z{@|*u3M(|^qXsNBCVcynSy8;qd~Uy}FEU#&l!NnubltTlQEAdlKvTlOQXIyAM7&m0 zE5b@YcPNO~j7BWc%Ani?N$uOnOrv3*gH$?7Ica-t_jPrDPqllEkYqTSD2%|4f^0P2 zQ%98fOuqWb)Ln2~1ISYfpjV)U7k^{E&Pc|fJ)<>s#HZsr8vXt%VvOIXV z=bN97-&qIAG=e+ka>~|B9d<<(VqTuLeD}hV_2ik_iWBLv^lGNZ*RsWb%V>j#ce^bQ zn@;@GJnr7;&{X7gyPO#m8p`~(B@K8zz*;Odeq4F|M&aM1OP^~0ipICVf64#0wgc{Q zDj#VtvwjfD!-+wNuh*`K!8q&i2T1L*8 z<5F+*9CUVm$b)b=Lx--cpN-a(pxS8QkFu$pJLs|wr4n`ll8$9o*MoZLCcjq`M~_q$LlmYJ5ep z{M`2}v@uN^u-|`Fa`W}EpYrXh=_oZ-tTd5WwY|tJ7UaP`V8Hp&-mgwa>r=u{kkpN3aZ-8 z_09G`4yf3Cg~sm9*tdn%NuT;MXos`(JfwE^3xU}tuZxo)_jC`bGY}VdRNazH)_bNH+!y!~8Zqjqie6y@qF@a&!{c=amgrmay*+1;(=^77WB-yms? zsfPLl$(@hDHdm653`{+&?T~49Kzs!62auPeU+3Znw-wWgrPKad`(c5DttQ{G)6J3f z7ThDymE-u~qs_HnF#?L9#}XG0X_jNAshL?Ix=b4KPvcR4z&?l&pV+*%U|si+ByhuhBAo$JL=@J;2zoDHeM=L2`x7x2FMEO!#f{D-BeR-ob%l28*ko_X44`l%1lIG@0a&cW#&1cjerRy zswNghwe6X>FXS~Fhaa1y!YhmGq(jM6V<|W0xyczL6DksLIcE{f$NA=e&$Z^@+?T>b(YAc9UNEJ(=eT=$6m~BC_l5Hy>58SBm zJA_d>GH3mheZ2)49)O)s=n-clWtBF>;rQ}2?X$Ga!MP(q02kKrzE4#$=x}dU7IHkm z7n??0^p&`}a-5Z(4wcNICsmRl;J*Mlc)+@gVUWf!2-zQ5(~~57_ShrAEIZ3~W}X)m z_1%X@kXtHMk*E;`h=m2xjG{Y`*c3&EHi1Bph9@i3H22ZkoL#) z5lDxIHJG{u%wf_B#A&8Z`Be3UCWi0TplPwnUvS#U(YeRIaYHEOu0x+Jnbh;;h$d-F z#4(q_X(?z|sviU=R_6U@rBV7irqNQ-7QqhHOlWoo=Ek+>ep*X(?6DB%Yl7S<)uF`0 z&P!)EnFEI9i$G$!z3K&>?ik1{v*I;CJ7gQb~Bj4Z`GcWyRR6tdBQqf>Uk z4s{>loM_|9GTk2MWLgk|;SQ&+QBds9} zPKb6PNpl*0TCduEPV3;i=ZU>U3Ucx5^>IPL0?rgU>OXNSppFqVCE`llAmTe=sdRGz zqkc+TdX}=4dv`bJQ3wkiW6;6Y2kpDd`S*w^eaZte571d@|N5n=DqCqwRv&(7eA_Ph zQ)N5-LDf!hiCU}J@?R)2kktWfRnd@Xs4Uw7w%kk(YWWS8ZP`!3|GB-deicU#C-;1S zoin18rr4uICmKn)#_zl-5m%a|k>ycnBwT9oqWWwhB9C<;+=&S4iz+heVB%3&;}@ zQX7b4PVXh#sLlUGZf;)8bMcK-w2d5&VRJ1qh55`?i+(GKQuixIKV&E}F`ToMYSM5Y zraQp2NRfZ8d(H>6QnA|lc|?wjA7eQdm~T@-;Bj@I>*^fG)q#?$IHtoR4C}Kv313-) zvZnv1m^`1qP8b?0Hd-OzcbS`U85V+= z)M@0yMa9#xWhMa8SZt)4t5{>A(ATJ3C=2f58GpsGz>RDi;26QPO$?*auqU9Y4a~S9 zdpFDyFKt6x7*k*hCUu$&1<&F&k@QJWS~6w_A0ddndQN}X^83Fw{Z>>0tdz_SThb-F zW5uibymJv2>)c^$kuRq*TAWfqhG<%Hr!4WmoG&)=BUw%@t_*T8^mZQ!UwpMXt?wNd z$i61?0?+LyLB^dwSVzA$Frkt}(FAZaT#+sf>vrhZ$AQ((g+KV+ zSNqdz{`UhtVRTQJClB4b@hMw>Ss%a^PXKl927o?iarsd25TyZ&RJ7}!-a?eYsid}=evC& zR`!3R`kFb3&3EM)8raTkwjaL)vFRdgq)-y z1qu`Zps;bf3f)+qa3Vd(Ze6-An?j*|VvTqmtcFnK1qVyIKu7@bphZQbDvMS~Nem1< zgq;L8x+IdSQc*7h@1*=L9xWss6l=9mt&X;=ID;54BCdl7xDovYDryo)>gY6;a}qQx z7ilr<5`0uEH4fym(u?La zQOd!~JzG#d0?agAwYV5s#b{Nb+0S4y(e4U)qIC`nIDQQgi00;Fa3=L!%KYf>{F03~ z+2#s-5<>X~H*szX4O7{zTb9e!AAXUy-;a<|+>ljJXrNyZk7(7_IFx89n4Ftff++~q z*XGZWs@>f898_RnQrVKC138fY>Q6Tc*u@9j{<^uhkltI56E;+haaqBh+NmQ`T82}q zF??jgt*kX}x8$+#AT80q1dfc5g}SzAVe{FJfG>VNQ{pdwnb&pjuU}+R zPKRd2PaGxPo#nE6)qv1fsDMA>t|v^iDnQD>>F4lSGMbY#yJ0b+$V}zM|M^q{dEb&L zgJ~Kl2H2*VdTL%=yzXoM>NV|8r0al}u!o4dnX%?xW59t1s6K?PjmH#?hyzlsAbI^dIpOu1 znsG49gwt#UG5pXk2pEe9IW9(U>g#@?Di8V{=|!qzI^vrlom0$}@K{MNjD|iG-*_d0 z-Kl1uRbWB7m_DFzJ;IQ{gj5x8T>S>0;l+m-ZxG{2iJY^gI0Q@fnNas6p@ZcCA6B** z1tsGQ&|4hXOA^aKj5&NW0_TuQLaZecGnSx@SaSs&_z<&@-Zd7CfT6mQ(Q=FZua4;$ z=94NB;AG7#$8t`V;@hHC6~}Xa-DX(oYLsDCier%<3Y7-x;lsGlo8y%vwnFU|PwKks zDAXP(@&OvqsV4~dvl!R$@>LH0C>5(Z=QR#e>Z;utuYH#4drHc6c8?!X@MGb^0$2wd*)m>vI(Q$A>)) zx69Zr%fw~Y`Y^!w|JP2*NQC0JskTBlXQ6TeaR! zKFe4iz*2=_Og?~WqUSb5CP%jvJ}ehehp>QFq7iyUMb!wh?VQ4OXTSzPK0?9{xpp8% zmH?!yFsp;(7`LuZr^*yJi?D_bsX5#jZB7k}uvoEO@{Z>zn#xw}&7Uo>Z>1@2aO#Bh zK8M()Mo|lbQ7}iQk^8+8+eVdTIen=Vr)rK-1xT0@w+TDih`kRE=>#snVPw;K8hy+t zEVvbdQ*dR2TK@<)&}WdLiM5nVxxB<{rH1mzTI4sn;Gr#Z9pt2b)Kb1-Zwa7M40BFg zIIBVgAWB-bn&L*5{9zDnizSWAadzoIR?V6CwosX{J@;524B=0p8YS2}MEUL5)Ky)) zXOqsS?h~3-EVqVHFZ@9u%OX+z-jIXaMXIinp8=U>S$srkg#GN(ymHhmMjyJOjioqd zkI~OY7L{^$nYwfzt_klPGmepE?_)_q&4zbsYLprPj^dj*EhmW#@1zb)RTe1VLt2%} zYJl0yPAqFK6WwkocJY%YxO5Pdl@1q#RhuVAIIu0Be1k5!1=9H&5qF&*H}=I ztP^bJgQ=b6Q>bZ`rrNRSIfN{|V%3 zA4xJDCd9GV?sIxGGYWW^yZWO}C)Q|%_4=^jH|w)NnyZ36)zewEj`tt403fC_ipzmc z@&^~H=SwOtKLWhBbRops9R_g{Jn$+ywzh;sYyWPvfQ|=D@`a;6lz3^wATGB1d z+AQRhH*qTxGTqJ{RqOR4uwM+5(vTax9{P_8(b!P?5)JQ`B2Gxs55Pl0G?klKLRGbV zF4Rh%V_|PHo~WMgbE5oenlKr}9p3OqUH{x*#>)M_Y29ZoUQrSAT{Ir-U6ZT=Vt zz%M7$ecxwN@x&=fOC{%j)tI8II4uzFL(Yr0jF6)O9U8VvVd+*8UQyugQ}%fl!zS}Rsk$S-KdU}5xw6!E+K5CppFmpnABG9 z#aV(+p7IBZ9TAi+#xtL?yqysx!)UO|K758)hwBF)vEkc7j3|xh133BM%srJnL_AcJ&?tBsU3*C z#j?xt7Cd%3F*!N;+T4-reYFmHsREaDfVl?-oi4o#Dh81?P(+N@6zB=mkE(y$j-qUa zr1ckTCBL6DaqU!nLcv5|}4haJj5=T+b zekgzN3vPAD#3050RblM?DxQ`!tn`;(K7VN!W7B78$)Gxi`6L?F%A~d9P;6gvR(9!n z6Ao(b_K-srV%42aJ7A~mkL!-s;zr@(YE?*KhI@`7_g8M@6arYJ57|D`cXmrE=^Q9- zqS$gB4dEC`7{ae=T{9b>{(MpReQC;)&|IZIyzc+BH@HH^lvwZhQkd&PE+k<>`J-6B zsrQ}_q~0=m8}p(@!6?1IAMAl>bj{1a7fx{moc3J@CRug?Kkw6 zk~10I0a~feBWSsMflKXDw-zKR2&onFMA=P!GeV#nT|5d|oAO!4@@fACWnZn4;7U&G zAD4Q1)Cs z(p;Ch+G*OO2WqiSY*RVOqjl)o8rDZ4P9tZj7PDvbdQp2(pJ|>Fp5f5j_EVO_-X}e! z;I~RjeUa_qAud)>U} zDBLKWcI;jAi3C75Pv5Aql+i4&Rb;ndOQ)n%<{ZP8&ys%1j28l>}vuW#iJ2Bb!hcAWrqB*-o>w8Er9l;LF!0}w}I zUsM=R0V(et+Brq2G|E%3+hwpk=WiRAGx1Z=Y38S}x))n!nE9*f+VG#Hw>`NvY$?wf z_Kk%`s#^@P)b+hJ+rA!ua@Wn&bIoo`uRPEc3vsCpkptCB|3K$X$`MZt(_}$*zGTPZ zL8{#8kFLicBF8g~I^&^K&wnvY@ux>Dw$PhjJ9;Qk;ilLS5-Uti%%EIS&0W*x3p_Yh z@ab<4-2*l|e?0>3)h8q;kS87?aEYkl_Q|eSb=M~mpMU;7_IIL*fpId<-m$WOd#=;0 z3xBbMJ{{Y+Qjfh0ka~;XB|+XTGs-7bQx2b0TY8aOEJH96w9PMYCSBgx63lOVlUL9> z8EHU^EO7kPQSxIB&Bmj%DXFz7tW0>uHcCjx;8t__#NGe1wwab7ePr$G&5x75t_dzp z`}DZW$F7nBtI4>VHAFH0!FtxSk9e6f1scdHi+A7D!p3t``GfoKKk@CP@Vl5C*i>As z&_oBWGZSQXl~ASDMtUzXBF?Qyq$t%#T~lz%>2wzF9#@^oCTng*d;|2nU=RCgpgELt|tzC?c?C(s_*ui-RK z-5dunLk~e?zJvRS!_D{m4s{y}dt=&_Nys}=*{*91`gBcyvrh%j!8V8Ksi`!9Ecz6Y z$mj#{uEptLw(1+HfZLn&9V|lmlCJ)M#$)9Nx1sZrYl0i!;qs<zkv*OWY zfJjnqCSnXxmwr6o5Is?$LT1;a>Ca)=xX5%O{d@-;$G7sCBZi5HnRiiXwt8rol@VA+ zhx7S_)heHqtc0iOB?~oroeMkdHTk@(8`No7*awM4c*(_nvo~7@HlPlyt)fMbLoT_N zhr?ohviAl?UljM^;b_*D(0nrYrdr-u&K+Mzm@ukWbi?OPZPG+m>otVeZnJe?HE|VQ zP$o}1VmHPpHQ6b1H~xMp6+bf5ICx`Rv8 zR6#N-KER7Iq)$0FcuiCND;DX|v~T*dFVVjD8o17F-ve$hnOBijfk(j!$EfjI+?9xQ zH2{6Z0)42NuVC_X+e4)7mNYR)u6bmebpWc%43*6fX)+^bn*)7$wPi>cdD6yih$*-3 zdtgQas?#b$&cfVL6ohf&H^brLHY43a^7>FdOm6YCr;Q!I`P)JYd4*cGkS)9m8J#zl zuS0duYND1nj_)|fZe0b+l;{YwYO+V(ypCBRi2(`W3&)J5^UkQofwg;d4|dr*0mAC% zmd82WRqhh1F`PfPE@xUwBr=}{2OVz$3>_e+cMUIkpEmr0yje89N8z5_ft!p7itlfH zL^ge-dK=&tJ-Y%RZh!tfH>4%jyp8*;v{=~cG8?F%A14y;xy3G_x9LmgY6(Xb3IlCt zwf&inHF_d#j~*BLV#IM4=aRF!<u1eUgo&7o8B;bIu1QCyM_}-| z4iA2a3a|S6GLjwDPtCGXINmJZ%rweM$SS#5rDXBgQUkQBlH*QM=stL@ENBa-FeMTO zqC^oGG1QpE)L}(KEJ(F#ojsBm_2z(#%h|eFn$>FZrX)D2iQo8k4b?r|ESc{r7-uz> z4kT(a^EZ@IRjw2Tdw@nY@VZs=#oIiD%C(Wo=0;{x9L#so5{LVyl>o-7#4}IudQBL% zpdg8Yo1Q_HWA3h$JLEs%Kvg&16J(|d@i+X*u8Cci(~xw;-*VIV4nO64O&TclTbEi< z-rKMh$)@_TxDkWePVHeOz({iZWJJbY{{zZrBjhO2MrQUgPjJq+(LsB&6rP60kX$nw zPC#o3){X3;keG8W8Jl)ZFyW6j`5NSfXzxU_Pm3j8)#XS{aTC$NvP-y|EXXBNtni$u z8i?hxt=qUtr`sFMsOhR{eJUN9UM{D-R6Mkq;JChwovW&P45{gl9*$0Z(bOLO$!fq_ z1tMcDMH2?eq-Jzn&w6giO=0`u>kgq}A>jo(`70ygu`cLyBbD)3C09@n4KKYv8i_Qh z82gb=EZ3bwY@}9W*SMhup+KNWb9E)LZ#Kb6i`A;frQXbcH)w+G4x5uo$G+aCTIJQ)Z0rACa3v~Xu!OkQKODzh!m-=hgV6a_>89%*mhyU`I z+Af|a5s0|5sLrTpZcgK>Tz|0z0?Tm=prdIY?siJ@$0NEsj~CXrGP#Krw9L@G85Fpp z=`xWd@L6U!lQalWZawgH_cizoR$TmI<0pBSqOwDwS@K2p=uDgsxuh1WrL;c_quit< ziTF=o6NiAdrJ1y3TPo-^fl;ku^tI7BY|l-FZgj#2AbUrYs-}Ev9_NxaHZr1qw^se3 zl)8%5B@ksPU%iZJcycoNQ_H;-J$_w#I&ngB&W*Wsw}940Y9&r;F7u^(iR}6UrpxE% z@>FI5T`)_X3FDq!+TZ0Gna5^Z4TiF)rjV4(R66Inuv7WTCsl|oOWK?PPdRLPf<#&~ z>%u}8qbiw<;XJO3@#2J*=DvV_JkOvKey=GiKm3Qhb4#Po! za8h!qyrErI^OSq{r{rHxKU1+likijdal~$b(t#M7CQTNx8knL`0fXa)1^tZ@U_j9V z&&VkIxl10@d~bG>>d*Bo`NkohWY6;bO+TWhU&_<@#=v9%tqfb5s^$~r?qOZ@(1PE; z!-i~9qxq+Sx90h$Oa}ohl`e_C{9~`ruahp4)#a;#ku^89yAEWu*1y9Ro-%zD2bQ)m zXm-maJ%$d|ye+YRmc^Qw80@DMU$%EIA)Y^F9rO!C=V4c0Mnj?asi!G_|piYs=YaLYT-| zQqBAf2K&=@bwdkL<|ihaeDje57WKH+&dMM-xlE|P4aE`L3^H7@oU%KP=UaO-w4}CE z1yfPJgC`XBeX}*+et3DB$6M+ic#G+#TDE56t_Id5G2R~`Z$mWgHOjnM2TPd5VJVc! z=k^p{9^Ey{TOA0 zKRC?s8pH5gsVnW(@Hl1_HYJV~IOr3q7N-o8*CGky>(O;_6u1rX$LHCwDYboo%C+mY z))1cLzZXX7RA>=m&1;2oG81n$L!zHLJ*tj{FWYq+EDU*uV*HF8DkThVy#+2TZ07H_ z=#2QZ9oOp(5N^&-pJU;b>(8@X0p&?$7k*&7&1dIy*O5DM;dOiE$Gdi8Z zyUxWnAGEdqND3#Rv!w2sR-i)$6 z49Ml94nMx(EzF3uwjXtO0vKFp*_6>-Feub2wInHNHsUGnoYcQ_36F%6lY4iL%ur5X z$b+$X2UmkQj{8;iR~C+XyB<8)$?E;#;?MABFeIq*l~wUoH=8j7$GuT4mk@V1!yDmQ9Xo9(qhBsY7FQfofVttWvj5xVQ< zMzuAH_d$8lq5=zDXOAll!nHe2CX$pZ-rFP{Go?8XoVTMxFoF#AIcpt_-r2@#G1<* z8dhKb^~vG1+dO(5)=fZxMk(m^Rr1$H%(F_m|GJWvft>!zltGB@6HAV8Wq^{8bD>YDLo&DNVWm( z7`61rI<fH4jby#g*t5Ae5UaYiI}-_6aM4nLHIIK6(o2aKT!VAuQerbd3i%`9DHA?; zR`wD9KyYq^2Y>K`i-k+@|GqOt6k6CD(Oq6sl#V6@zbGXBwHmvruVHSD`@eiY=hcK?cBZwz(@cvtK=RHv4 z2CSH({S>~_3D&sQO?e=RgI1Z@87iM>$0e5#XCY3x-h^><$wN3^uqtyj3zhVdT%3P9 zvnN?@jI$8-*Xiafv=aOKy%uxv(Ym(U^15XTh(CH=^+~dyg=`7Oa{_l`41OP61%Z?P z^Pc1<$oI!0VbLd79+c&~S5n~*|NYt2n;Y$lt=)7Ngyb-uu$T@zRXP}91~-h(Y7()G zCx^z%6ib}~VxKSh8R}FDgV|M%yer1k^E#DSl0|tjf9ah3NtDQq*u~<7Vn5gwz>*-^ zihV)uBBR@Gp_?(qZZNW7Ns z3AC{h<2Ne2IC~ynYI`{Ss+kveBQu4giyKeQhZ~PA2cM)#e$4oaS!>q%ano14HAj|I zx)zzZI_b=546*&CG9PXf76#wkNZ0D)%71K_`ePQ{YG`lxzH06K|31{o3+^*j{{J)I zAUHwHP2UhY#&IebEOHnuBsiG6IvsqTyjS2f+z%M@rnpXDF1+k4xCpi7MsLu#_aPei zp!wLJTY!#Ey92y<+04Sjqy6JY)Zp5%HqoI`pb@PBzxxGPxtbaVi$3sQxqo9^GWDKy z%4Lu)!==$>?J@RWL6J@sj;gfC`~Bu<&Sj+K&55-^)!bMre8(qRgYJ1Eo4X#Lb#ZK^ z`8J$s@K3d8x}{EwBWYR|-cV@jC6ivNDI2SVk7N zgOwtURj10Zy+@Xsjl%F~uKMuVo|*UzT-OYU-_X_7t+%~1EZ1&n=6l{=y<#XwG=B+K zw8%c1ui&lQ0@~j@HgGy<7$qfR^qSe(XBj4O@#(!x+s&#slX&rIQj|fT3)LX4 zW*AC@od2f%b@%P3KSFCD7I|E)qxn?Vi_5xhSTzN--A2vA(k#Q}?d_eEo_?-* zZfu{Bn`=6%V~VCF+|_wV+p%YwjSE=(>+32MSyS}2b=138=OlQ}jV`Qg}&Pe3+OnFp^s)6$bo4 zNZ!o>eNu<(dpef6d+so-n?`|mKNb94;@qqjr3y~&w@QuniWk=tPX#=Qv_?iE)ml85 zf9BMG5@Fl%rn(CRKDJltH7NOb9GiXg8Dp*SI~{r%st?@V8nVbdzRp-+Hk(@acUcTo z&hVrKCVLrKt<`5HUv1?OJq3&&v*W-jPh{EBX58@AMf7Z*=C$PE|Gii%J?}i^N8Y^g zCX+eUKN&02eFm+0ORk=Y`z&)Lr{&e7gdE!Ojbb_mSRYeT#i z*WHOsTI*-pjt_V%DsRnW-{Vf>+5B(M1D_@Lmv?y{H{5OJ-RdE3%;8rz-&}!7wxbM0 z8Z6!1=Mq1yYCy?jy)RiGZhR?MmmSx!ms?yq=rTfG`-6LYVeUQ z3DCMJ0=-y%APRSMUWbXc#qa86hBA39#J~A-=FRWYyyUS#pz+|{bodjQx7>R68~8UF z@nT&SAHJ7I=k?JFWOp1N{_%Sie^2X`^C`{DL<{5O+Iw}&;jx--0GZ!&@o#`mawoUr z5{swsMTU1^`1%j$9fU{0N{hVcJEcq($HV*ICCn=^ldy6F0%y6j^C0b1Juc8#QgQc4 z{T`s$e?_ZDN^SpmNXHInS80qTIOqjrdK$G=(HXz+w^GKHo$xv0p_#O*~rjf8_Pq&2;gLXJJ2nSk#cc4_|eAc+d|v>HUSSsaWR!Y(6aqb_D9DkLB7i9$Y_%d zA0CL6T-AXcl8YhiT2~nnL*h9<0r_Q+oRfxeW`6MlF%uO$pds@v*>wSQqlV@W(>yb2 z(7vaU3&&};Iii*39bflJTMGcAb0Z|Yhu-k|sDH+hTmF3*DgGgq*LBh<#H2A&FH#p7 z&#E@ct(*2-3!Z$vxZoZz39dT=oNsi$fq`@l^J%f!&4f7XXAdnKZyL-Edul~vjHF*AXMuAVJzXT>;neOPHdJm!uOOxe4 zgO&`^nBP2`>^ADgXvjkG{gqD`{FRTa--)Jas)of1oh~;?vvmITv!1KX6B1xbd%Hi* zH(4Lb|AgYUIt2CVRT?3-^QFTgeZWM)bXKka`EqIKby?N-;i3L68L;0 zCgG^7JSo8WW-07>?zeu8RyLGv`2M)SRz@L)hyR^dk(ZeJdmiN+@`-FN?opvnq-$QM zUOz4GC57IEpwp+V#|$t8tHY%>Mt`aM{3NvO?cb5BD9gQ?lc<-VBUkQvW9uiHQK|_2#AnjV^!$kEtw-lO>2+ebvj(4>l^1YLO5nRU!Ty?*SYh`pel%CkK(gG- z?Vj%giF6t0AK@Q4($IbA~akGnK~E``Ttz{G6EeQ!}}jyHFiUCILrs+wp1IxlAX zTs}>i19sz{N-{N*&jU3`z5UXb{@sb=J*G}@PYj(!SHV-4?x0eJS>v3=`xcSE3MQX1 zv^Zt%*4R`XIxjz1GFWZDJw6$olIK`8wy7M6Ik&pZ>pf_T=tz-rcD0JVKKh1jiY26^ zkpJyBNuc3lkQIJ9vUOF@bMxb|T>JE;M?pc5IOAWEzUhRNV#(*qo6}pzv?`MCyYMmh zx87e$!n2C5m#^i~zDNosnQm+57R`9PUW}pmB1H`G6LY$jQ={Rr*%RlGS44-c!Pj$O zDXxf@D00*FqR4nVn#Imm?!ctiUWNP24_)k^-^1AP4BuVkZ8CRva5Tq}ageMuIyk(f zzoZD1C@`JnH}^RH#b?`1_1}=Rn9d zd9TDLt9NvRqTTbCso8FQZkH8$b}fHJF#wCnurLML%|@lAY)tD(nEvU6Q`{GPRd;IM zpIKdxiv8ul%IE@8hu=2b%Jy@L>rN!@Pm=jTzR)=QyH%F1o7W-!od@fO!vhiELfB*c z*V5c=cG0~6vY#T6b2U?!lTUvFy0^Oq9H|{2EX+SW_n^9a5(L}!r9a>P7wTuBQ2(L6 zFbrKqoSW&;)`vBLSud|G*3qLEWN_yTTH?b=S%g2} zZaBbL^fr0>ZC$|E<$CvaL6^6xBMxq9ht`__KL6qJ@b?bvz|EF&wTb!^-~C9$n0=q7 zHdAk#pVK=yd=#TlP zqO4NDp7;*gi*Az?XTevtngRwfICH9#GChXyD~_TEZH9&kjk39ksY#5T1Bj#dV*BnF zmGW_Ajjxd2n*L47qGKyh7?DjYr{85$%S1FM!Wh$F_DybSco(&Pd0N}w@TQeI>}&&`-Yn&|7-HgLon8tXRFSiIa=F{L>u)%}&ou_~l-2b40H)m=y6TlTJ0J384@_71o(#02 zPwzyk$JqD@-X}AjShwDCRK3orHyC08e{K#2oJs>BgnKmRz1z@ zcjcP5GPjR?w<19zvPs^^i)#@yQ09Hz2CCB^FcKk9i~;rYs<|4H0{^KyF7iIt#`iIM z2Z1cysZ|`1ib{w%Nv*_Rf(nZ&a)6u&HBZplxp#PAEs3~^yw?KVu#ZN67ZrRrJ$49? z7tS(1!8-Ez z7JSjc0rZGPw$ZY){)^dMUWd6$-$D5bc`}lMiHxke=!L9dh{)$Db$kohvP8o~FbMG# zU)}GXyGJ(Vu|6vPILi0;a{`OXIRHrv(ih)7s+XJMy1s;d%-O%yx4XRY`mA3K-o~13 z=`vZhD(y*b!sw82T)d5H6J?zm@n>3)T!NCf9UVcT@w&i%nbul16jVYB>i(0^!3XNt zhKm{7b3*tPqp`Qto{Hk;aj7j9+su7$wcAX&53j#8Y5D!WYX*J7sAU2c61rq`^qSNJ zGam7itSodz+VgdPCj+j?88E3Z9-&#%wC;xdz<6VpBwNsxbgS4LDJzhybRvD7E}CqWXTD=2V(KqjZRI}+Q7@*m9At0<#eUs4h=H^M64ZkyCm$afFBE&rY0hf@TSuoltc zgJ}&tj{3~Tl!c9owlF8z>m)Xj2csfh??eEKF>`_1HC*+m zFNN;MJjg)GDlKnB`6IEHCti$_bJnqmLShB1nEOpLX*c;{}DZD!g^hu?o# z?_+nFH;`FT@lV*dp^BlSm{;Z4`l+Oi42tu-(b=1CrmT}(VJ>NQI-MS&=%0ig#amN` zY(Fq%#QlS4Vv@5}TQAI@o|w|l+Jzn|XJ_0Pr7vr4lr{4;Cx5zP3EHIozu?hu;f>unX4mV(S5l(4fAIVL|gF6k4%k>y=&AG_S0E@q#4ocuX; zd(suQ_7SmZMTl@0jjtZcBnWV~S^VtK$~-uc#hKJ}%$+5sIahCJ;2kPN3+p|4*HsGX z+>eIe_*8>}Z{XBiIs57Rr=b4+3gzx+JsP{aw7TDogFoW86g79B~M`u&BLh)XH zPWBk)WEQ0!$1|#QEAI1m7k)3i{6FpWTTcs~)O&HUzkHDWUaR=|G4=O>e*1 z*8D^0TPQ-KFF93aevf^^UC&M!-QhAv&j}o*{+C~j%=Sv9V!|TxI|N~1U!$oiq1JRg zbP?1HwVOtGROMDrZKX~+Y?|69fc&ZK9P?#TcfSJ3wETTPT%#pqIvHWaMH5BxlmA2|9xT9qvb<()lH z_?+rl|JhWJ;Ucr}6JO%lno+gTd`nhN@GVu~scTK1H=o?iu5RW={?j5d)=8D<-|lgW zt|MSN2k!zOTmCiw&!^haF>A>L^`BEBv)znQM2tghPQeSJ0h0dMm&+aY>mP-fwk)HhRx{WaFx8t&_*>O7dB48+MB8*4Q z@eMOeITn+57l^9qDZ5XJqz_{rox1a!IwE`(aYw^FJ4X?onk+0w&9RVhf{nZA;3{G( zBj98T>@dIo7N((v{Nngl>goCEENAA;6^G43= z$KavFqwj;9x28nWTHrw}EjQPC@K!x3@{YjgZ#FY!!Gk5Q{q%c-wnUpzIN>rv?lUds z@8CU)GIBZs`e^xzM%x)v0onXctIAV(wmAL~b05p&lzfi-#XY@`JC(8Xq zEWVEiwZ{bP!**WYBF^_#g*!8cOhVkXYbGc!&1yCD`Tejji4(k# zpZ!#V%Y8W zGIxaO{%UxqA!f-=+uc1J4qt!RSB`66#t9IrgYac|xI=%9Ixt!kXVl~huYpf#&! zj2Ypr!qyLN{9Q(w^M@^>mL`PVZ~G+fU!c32e$_^ft zH_t2vuz%%yv17P?|8ToAeDnn@_@78xz&{DI_!GX~d9@A!*Q@D1?sDzD@tZ{cR3@k4 z>g%B6Es3=Lo*N>}zTTAYZyx|Ai57aa3}+?}u9tsjdakm&R%l56`ut>s?+-tCLpFQ! z`CV_3p_f4B!~Kg?56=t1yz2AbwCb-Ly1{!kVMO?il?tZNxOd6L%mzWZ@63);vFWm> zkup+liU;5MN#lB`^f%f3)}TEy(*ku1JcTWqjVN~$6jO^Q^_bIPEyvz1gIL;S)YLFW zcWls*qJlZI25!i%$6ophq*o=d$UZT9^UJ?~oIMjJZdw>F!(zPT=rBRO;(=sTWuj|0PG1VQW{3=2}XlpHWgyP{Qjm zlJVG<;{P9+LVo|BVnP{%@hK!e%a=U3mg=3s`}MV|k?Y&{{a!C(^QzRK`YEBW0@Sul z8+!4=A6AXDX8s(k&q(JpbKc~6HuveFu8?zP7VkDVBJLF|CxI0RrM#(qv)R0n&xB9C zOA=niPAvLO?$S^AQRzQ)zg^;kUq|a+xlx{OpkDc>CBo8t<2B{IxY6&gfoR0PVYb7= ze5tLD{TV3Zt>{)W;AF_nkX!Y+H$^X2Ynh(tEyZu=>bL&O3>hMM)!SkG_p`7+f~<)h zY5x&I|E}OoY^b2Vm@2|s^R~FC#D$6bzBJhPA6rBPi&VPMWe>nUqKH8U^+&jnbFG!1 zxJE8XOBzLHre&iQ29udb%d0w|=OD_#Qg5b1IY(ML+6N|Sz8!1~?Ih@OzeD~;5nNCE zw7LKPFJyt;M|#_HWb@Du`eOgwZXFqwcaQoUFt$V(GeB#TfdBy0KgCgdb!Zko-LZB* zmjt(97i)s>k}3l9w5#<_4f`M3HOKI1Wm-5w|3~LiNW3fA*Y*4l1qxA9eO`Jp_Yi0+fx(_%03-xc=QpRF@{GPN)B*At}1vadshB zE8tg`rSMfH9>rGXS#MQ2ptX{$EZ!)!c_lv&7nDEa2iJ%kbv8+7Ikq7 zku0F{L$@X=f$E@Ff3L!S{|Xg#5W$0!=_xb3-tFn1Itjy^rwUZw8=P`~8-atS}?r~la! z!KBUCHOseCV9&pfGSmhV=v2CuV%0~&UPp^+bd+P;VLh`4^SzNY^@k;*F;BMrKX;aEzQOqDzIR%ByD|QvpCQ^1Z zas@3(SPB`azT*AUHGNZBLp;!?3{3U!sk}%3_FnvS=r)BIJSw8jnUM`2h| zZ4F|-XM*#4O#SC?C=0m}?&)yv`Dk;+`*FvsO=03&#H6=-UIb=o2_{2VWws7S;kZy1oLQLZ)s zr#!g-Pc~#ar1V05>(5?(E!~#H^YW^Yy!1~f?5$!J%)1% zG24^c-a&rg%?AXw^v}@={{=nrYbfbv=VFpH6^^JkSyaNmE4Rp!8&mn9ZQ#{wA6fc^ zU?=j!Rfr_HkdQ%jmq!wl!DF@WM-Q=RsxTC1u8$hM`%xAo1C#v%U6 zo6%WvwHAnl)OaG0kwzQ%{E+T;GQHk^qTk@r$$0PKWft8U5VLfEsiL@%q>{$MpXaaPzQUzAP~vSwet&Awn;0MsT^W@I-V zM&V#|5)AlX86TjQX*OATXv3DsTw7$jP#O7rv*?m}x6qDNs^!Pp^;w>USV-$1PBpoS zzHUdeq&(gnjWkSkQ!fJD!9~R+>|+v$80>g~wLz_qM`Pw^tBYnY;cvSq4NB>S5(t^5 z0njs6_r_}Q2#%XxORrNg4|1#_-4FY|4=2$zW}#^jse^x2srI5-@kf(qEi)eDg_=VJ zZ+1C@T_E#|>o^KC6M!uhb3B04F?_M@&Q1`QVcRm$L^OdMn?UyOiT210*-wo zgvg=5D0n|=$yWPQp$}>#W(bm z#IqG3^Vwv{blUrpe&zP+eej)Ue{#^daP^~TW$vi#2n&Q&r5s{-+--hwUy z(jW8bhKBr^%r0Fi1TO0to!8eVva6gbjq)EIuSX~@2L^Z9mfW<(*8<>pp!a~+RSYp_ zLH8U;dr`0<;_nrv3zZ@B+X?&MoCf7|3da0|lPO0X71NmyW@&T;jn1u$xoc@FR$G#TSHlL8Wa)Yr(jKE6E4g-W( zuvbcEOz6$6R;aG%b|vbl;xDu73^4Shh-C0#5bwY6ox>$xpaEZvBEAw`13 zc)8_VHr%m0*>`MI)7EV0mc#{GSs0j2H!Yv-#2wR5bzju`y-awz9R7*kjT^aZyEv+3 zA6557$r@mV1_^d4D2!*|LyT5b&ty1lwWDsDdo_; zL&|sAZ&+{KV*=IDMJNcb)~>z%q8bc)j{vM`+ea{!^;#}~fegkhvhl<5kc@KpjY?n6p%e?A3UM8QUbiun%VS`-caqtdIiH3nY_O4SmhptI}&zF`^ zIf{e#P7}T&Un8!=Qk?ayobban3RF#*+rf2ieo%M5)-pwmvAnLG>OkgyUH)9~p|_?h zgZ0U6EknNMv%O?H+c4OE1)ao;)UsJ@t<&e`^IcnmxWWBZjrpiq{`LIr=6c{}Px*`t zpULKZ=iLElY;H6}%*1ZPuu8h#ZJKE8K8Px%pw{KvUh%wetu&Ma0WqX!XKU{Yc3zz! zl4eT4jA^_g8A}Bmi46&DAO3yM{L~BrO|o|B6ikJA%%~c?22_tZtsOGtRxEnkYX)(o zlEHcqTrU$j;wFmKjQcMra6&_z;{H;&CtYj$;4a27LF9qCq$bj~?x7;Wn#Yrn4W?I! z-9}gE@Re^nW8Fvj8ECL$biWQekZ&kajDb|_)SbeoMYNO)>UTYpm7)>~oXORheOykc zO14N?HJ{Gw^o3`~b+A*NWC{JufB+ehTi{qXKw!Ri>0+Gk@)Vv0R1kNbzedCo5AEw!a!p?H{?#w@=P1t{22Y$On=BR31o`>2Rc6h%*`nX{US$&b3v-=m|G z<&JF7%1tDPc+$SYe20rhEs~#O*41<$uwK>e;?-Z*Mrnx`d05pM>tTnHTtzXic<9JFi`#+Yqjs3tYmqP9rW%e?40Q3&HeEBD_6&(}SIqIRQNiEXF2!kAs1BN|N2~Au@J%vFM&YAYnDJ0orCrp9%P`EGkP7P z;G8O&fQe3EW}jbZE+{k$(gf{Sw(+vlSBEGf;0{w+!aJZS5v1hUE$BdSMVJW8nnvu^ zuV(cu)1Pi{eU`($p5#{*PX(@1i4u8-G8ZwcBnoXo}ZrSmfhk6&bpWc zW!%OH?9${+vA5d30&DTuWHaB(oGt?Gu|i=&Jox{#wpM(mBdLWpB=C|Oeer@UAg!v~ zKX9X;;&n0z;9yUen-dp}0>@gDzTCtMT{aGiAK7nHZr$Zr8uh1pA4JA^bVR*WRI@Ad zAHpREwgwuPBcdSC&u4KuFmYH40Xmzi=Ru1{LYEnC=L?!UlWWZQ@nE2FSa3?whc87B zM{?Mg7n`tX)t{#pJ}Ed&Xw6*rCv(KW_iCfy5y*e>9Tx^orW<)n?4*8yN~k&<>f=-m zWo2ch2qI&4+>L$C#%c)iuWBm*RdW@^J0#Z+2M2_US5C23G`2x2{L1SY`g;$GupZE| z)xR~~(yHv6`qLf9nU&>u4wdaf!9c zmz@xT?)+IxVyrxGm3s=q4LN_$kg@%wewP!s)w=x$5?q2qzW}PPjX)a`bb@aOd!dY> zEOjH~3MOKD1q7GbnOfKG`tlsaB=?+;R_P} zvz^MNITe`V|Ct%%dR$!xqRU#EVF24gu#UCB@!wkW8*MO;2#|V*<$?r2J?%1>1W0=h z>Yd6uJyH72xRW=vLH*GRmSnkwLsLA_Bfsr~??qv`#isMcX0U~*>ut`#{N64N;YxKA z10skR6)Hy6o$XhyU&bzn&PJB?S`49CZAbgrMtT&r5oukX}ECdj_)A8|I_!m&bsS(FK5S`nc1^{6FW{x z;e6p0xOU<5XmgR;+#J+-!Dbk%_+rv|*xK3#)@~bJ^GCz8r|0=+$F}VqgaDQSl;M*X2!j{Qcdl!U`NCFL^OT2xX~WteiE;!T#H_bZoNFj0;Q3DB56 z7x~g}+hz~;IV|2KBH;XxT6EfUBTkg&e$8OGLyV*>VS8EAPw+vc%R)R%((Oc44&B;z zE8@LmpO654Df{vY3jL7b!4GZL{ z#@&~2z`4mu35L{g-Bxe{9p;97Htbn`4-u!XGNW=drP&`!glNvSMCDHq?n&hf%N2I`SX&aKc3s>zT?F8tzNuI&#sLkR zDP?%;crLaApWCaLS@JvztGYXM7T&F%9CI=e7Kgl(F)m_!&oXd702=ZR1~8N2&mp_z1EG%x1o1J4mkcx$hs%}k zp;dsT5Rjq`DXm-;X^uKeEL@9-}E;4*AHp)D3(aDYWq(PJVjfDmNV|v3EmYb zF`^?VsoQwlAW$z}rH zbItii3YwXKmll8tL!di&*PI#Z!N+TJy9dm=UyoeSDOs@Z%P9HR>@& z<+8=9?{X)0Q500Wn7J(p1V6>dsJ}{Dq<*Fq8S&*y!QmyU`U}VY>GU$THtz#&JS2J;!p)!>Eg^mAPk7*r2X*@f z=zdZ&Bk52$VE6ax8QL0Rcu}OS_{%{AP*5+vHBxy$ zW~E(w?Dw2JAt87@!7xufdng~j;ryN8bP41+D-$z5PE&*zCW)h{R1-0p(H*7y7k~*+ z4dsA^IJJVVLy|mE{J{VLuBUH+T!1HSx(bi~rTtx>1|D{|Er{o_15-%FqL0LYC(feZ zN?kx&*(1=p3!kv$adPA)kT<e;S`wvFSjDCO5 z3*q&~vhEkw4869mg7FB##iO#~TtYzZ>y*>>aeL&fYxPC=3;vqjvTv*Rn7*Tm9253? zEjc88bak!%^rZ6d%S4Y)CXiUN9u23iVup+Nm*VD1S0Qp5dyh6*FRo) z*V;_}vR>aHPyWiTiXf1Y2`g8Qi+6*^!=Kztf%^3(-;+Fq42}(v8vuw3AhHh%f*kEJ z1*Xp+&g>u2ASMR*k9f7a`0*t*J_y>oK5oWJf%^-a_p42+K+NIekVw)hI_T9#VqUC= zP$AtB{rVOf9|B=#@`U{UA(k8GSmd{iq-8-iHj%OJ1TQO_ihj4|c$78>2w&oIS^%Nu z|MfC>AxIv^Sd(>X`S=F_nnVIoH4m3v*;(`GxQXE1Mm;!7k!EF5`?j~T_}F@zzvnx2 zliruP6;hd0fjnbJ2j5$XfBW>9fCva*>cd!agT_cL?tfG0CxA(tY0n0oG)KmhC` zEZKU>m2T*fpi?e96#woQeEeoa(`U2v46I-%R!H&kA_$?%&GE=VFG6G*70 z%or*<4!g~wAlT$`72oyt_dBTdrv7G0AW4hhzCcm(h#H^?-*HyO#6Ld}KyWXi!Jf$! z!***w^GTfe)nz@=r!MU&b8EJZ9%x&>$XA$zRFkIBEZoZEP)OMgFMlHaW`_fzWohS} z)_0;}1$~GyBoP!5G>R4d2{9(MJyc+KQ8u0LD=d%G?LqD79gKmsDz{c`!4q7=*VF7t zQDlD9qk!(>Yu$DEy#1EL-pl-$r|@o7*_1b+67``MavsQ{^66(3M!w7#lyXE2mDb1a zFvWw5K&C3q#@;uT*2y8bY}1f|)vn_0_hbVQTJA%f49h@~@2A7w`0gsS;_m9^DOp?` zwJ{p%vkav;49X|BU{obS$=MoHqH=nAR2bh>i5Y*m4uzp2CAP}Nx-dzxkT}2v&z61I zaY#JCaP0H(L~PlP_k|w_qy9xWi z_dFT4*MQPR9-8vH>ZMYV?{ynyBw1y*X+FO5bb;1@ zn)Zlal5PJ#$!2AMXkJ9i_#rjPUCuuRrI&g)&U2x=t87{m*4c)uR^zAGH)s>msR~9B zo}@IFcvQ=HkT^QU`qYXB;T;_U*mR8a?C98;3|)?~<ImAV!N)>2r=H+M}8&BVH~8wQC8c(G{$gb(xVBT@G~9Gw)`ADjCasBDli)e+%TY zWNZ2s0NvgvT6ggf$3D`Fya7^-2$0;q{Y%~c-`WgVx8|47LJEe{zuS;slrfT@Q~Rct zpHTHwVtqcHWN3NRoP8uu8525QtF#XAMP<)>lW2ag=p9oSS%j{KBe7VIm-DF`pMt#S`>ZcUySS#=T{=mLs5^ zd(fbN?g`4GCd_ZLX_h zby{C2&2q`D87)xZFP>_WGse7UyUHwWKF_`ZCp`s);~iptdj6Z)ALUA#8wRq1Cn_e2 zYWHrAHhH!-dY&_09b<18GS%7(QxnBk^Lq+h(KT$e+YYhn940mzMPy{`t>!^u57)zL z_4gG`1L3uW(|{wR8|_+QnXihGqW!t2q5H5MBzGpP9&iZt_XE5zFp%GPqT=Jp0k?aG zpAFtMBZ=uoq=mlCN?;#RF%}ByS+IqBjr&pJFUfec@c;P?i|73ypH*cjtLc(d^F+YB zx`Joth0kw5?zfl%xIUy;NC>=>>5v-tHDmUebo|-(in8U^nlVGhU|GiF<0IY6J_Lp` zDVAEI8`0nL_$Pf3A#60=CAjaky~axv#B0FQgwG`R$TEdPPlCueIOaM$d7@KDF0mSr z^j%}^@UJs9%B_Ae>%WBIMTS04G#dV=7C>|skIvVp4sWnZp7ibv$K&g*NmUv7Gmq9` z(-4PhGyZSj|GViUeM)|Xmwc5rUZ5ZcL=#g?Em;Oj>EVZI_m=i&yCtHd1|n7r3D}8( z!oMvq|6?5dmNu_t6mn6I7sXzPgE}6hjuKo&Umv3_riqkjuD`x3Anpx3^jG*EiGKI9 z-xn2MQxp{yHLQxVbPmb{zvcce7qr;aZEM}MpY+Qc@(=AF21nonjl*u+lU==Ze-Ooa zxb{J%*1XB}_O#Y`L`hCk!Gt@@$Hy_M1&9_q+5|99Y>Q@{$*B_c{_L=Dbn2KPTvgHN zA)o5`p=mfAbB~wkUNbXnsL#dUBT>-MNHpIVM>3g8Yi4BP+I-}C$w8@-prV4hm%SjI z{k|r-0&MF2UGNW0<`wY{Tl+ zE_d$x8>-YfXVrSUUFLeLQM04ILJLP#bxC$ewM7t!95=1ppA$=|)4((=WW6w?F zc5E-hWyy81!VT%4S`)bUDkHKy`1Exko=t6tQzzbb>xYK%WD#MUrhR@t{ZE#oasaJK zxvKlr&@ORzm6?Zh$gtmJ5tQWG_i20f_RSc}^=U27KneHNh1?k3$0FF?&fu09HH!vu z_nUlOtLsPJBGP9n}Y)QBAXDNoCW zDCC2810(E0CN26wnX354^N^8F#~A&SjP|YhXjOUd z@ZjJCGW;cNCE18fg=@UNQKMhow6a`{`2stG!KAIxNJjmo+3kC%5?i|7N8p`oGl6S{hO9C5|Y zhkMOZ9f>^y0}O&GU%3aJk`$X*hkj1#Eg?OGH~&va9&XZ#P#l3EhYuf`SAj!jBr2N$ zZli;maHb^$f|%c#{QTKv10;=p-UC_PINO_>TqSL}d}BKlP^wbCl{u*|NpuVbe6Mvv zp;%(zD9H!__aul5ss9L6XI1DO9Aq>bkh^EUy*iCF018qJC37Tj-W*OS*@3&$LCFqF zbYwV7V<&XPaN0I$DLCr>(Yd!8CQjpd$Du?=#kGr3sR}c-%l((KP0n_5h#n~}?j@XT zZaIg>HfJii*dzcQBqr|6iju6Zqz%~4?{Wi;@~+FzEbh%T?ZMve*9+%ICn0P{NAqm5 z3T(>xK;&DF6jCf>s*~c*R4G}zKLT@MBD2}gQJ&hXI%UkQX2zWk`ubYzOObsXocf!8 zV1-Au<}XYjeVYK7*u8adeu>S&E*={PsxKQyflXLq&HhP!ZeI*lf1NlTGkzWa`wDlK zv9RxMNSxGUXWRda=d)ZKR68l)ecniAXsRYDvVZavdhJ?-McTEsZG z=@Py@0LUkM4qt7-GgAXUJ_4$tSF`E@`?x_ZoZGrfg;;N;tyH4K$iI(PN4yuPI!rdx5?~#Fb4HM$JeO`9>d!H5L$9#NaUztuC+E|<9e3EF13dk znSt6Su(y6DXH8|UhB{ETj_h(bobNldpk}SP`r567W?aL5qr!d*STb|Ky0(=cC#;|J zBh`{yO9%PoCj`S&1+pclRLar{x3g8D+hMJyfW2Y%O+FqP3^s=j73=HbsI@P_!U+}q zcX!?O2v^ODsptK}JkcEHEutwN_I@x>hl90CiPkOoc0^a-wmdSV>Vas4sQZ;0sSh5` zD;X987C2B>Q@|3Bjsq2&%YBu#?VZA?9Zh|2;Olz5ha@!Ok02Da7sH=df`s(ER9PDs5>^JT-| z^XGE+Mj92uYiBrGcPYCmG`IpR0+f%pp@Y$yThA4wTP|z1 z%j)GVU-SGxY5cTSuMcEo$tjj3nd+O;URvdE!)MU+fJZM`op?FI3zbSE=l1Km!FUf5 z6PU~=OpN^}>q?8rbzC$?>h2C*|8KoU)`hSfVLM-+dLG35#+BF)KiX_8hx=1=%k`ab z+$lMDf5!$`G{ft%`{PRA+C9YVjEy2_XrR+vbaV#&a1-7tY-2>AMj+Ghh&g<5{8PM? zJ=kfdTiszVMxQHMr*_`9sj{f_`3K}%eswLPi87T_v-vue(NV;NX6r^(KB9@yI)6>q zGcQi&Jwm{<785+dj?!17X5Re0gRt?=Pfd5VOCqPJg=crlEJ6k&g{-h@>1xO1I7=ci zwhIew?ja;#v}BL|uHfJsx3Zf-Qh%2OmMD0U%n+vsthpgS-P z)1^IX@~r+5bpJ;gx*|i%dvtZv_6<;C=%vzOq}-|AEI5dNh*Yzve_vAX{5e7Wa?gQ> zmBmJRNu4Olyl!&s_B77K0GylM^7W>$1c#1zh)r(M^_HZ5C+Lv0)M{1ev+}b_eI7cR ziS&DO1JQf4*-_(pGFy`4I?uTo05S428A&v6lr*oqGp;<>>yHiYe2TeL z2*JiOyh3}rrZ=+qGn04;EVGu(7xmM24E)LQ64*6%{l7 zWc#qYm7K=+;6?>J-1LCYbocwJErp@ZNG%Z?*e% zwrYRuVD=up*+e)Q#~82kL>IW9W8lRmHMWJE6ceo8R=Mj}z+t%^A>=>wHr6*q zqwo0HZOI2+bx@03DyB1UEv2w}UKTYoULC#W$O8iYD(f$I_Fv{pste=e+#Za*K(GvC z+xoAbCx78J3L1Wy$@ZS+r}hks#obR-@Ib{Ez#D6H1bD+kNi={!q~ue=p+yiIT~9mK z($jo5m#KIJ^#*(9%dyn2BoFb7NjCe2PB(|Sq5Ti~K6C$_M>Kt02y?6(d3>adt6)a{ z#oIgOO4gO(YMJ&IN9#&(6AFXjfYZX|bv0|yi;9x=MK+fIZFm2%#EA(!FI+7>W{MKp zzalMlpYPD-raGm_D6U|)?ClDNvoDcD?=|er%>0kdnN23gm1hVAI-vLHh)f~1q1s5+ zth(*03Mh^iDur31;_SB~RCg4jrj{JV)pgBjWrtFp3d*~>l3co6@<8}zv@q%R5U^br zjb-y++tUVdn_}d{3cVG;V!HT{aCD$!-8)US7S40`JM!|+=_3j~^m}b*8OL_`t#BYqy2DMlf_k-R{cyFb$3D4-?Kr_; z(D{SBZ^Hn8!Od~(kMoABzW(*zT>U=4vLeDC_Lx%}(OxH>=g)F3yVm zAtQ&D`JSXQCNbdL5eCK40UXVz=ph0GX@@le1zIYUb>xnMqrIplva+($m{~JX`>|aC5jO{ylas-S3C@VGEJZqDn0>73^y(Wr#WpvD zijwGD>)xMzKHRtBdjZnO5!|{rc+p=POGWz8_-L}=3pixVzrJou0MkdkEZSXaIG(st zpL<(Yf3OR8v_!$?mqTSjQU#XyBuZ=)e{hVOtW9WoftMY7Pw#tE=}vaMI5QtxTIg9B z676%b17ZoCb{*8h-00ZYjdHpWcU#dmUfq{<2&Yx0yc^HIwd@AV5X=pJ`*Un<;k<9J z7;To+$yaG#Yh>}r#clyvDrdPk$R1Xxh_#3IdibCHen*S^yZr|sN_B{{A$rxz&D4Hf zAjqbWp)?yqPRwpw^VVkcztD0P$Q`?*_0l^7*j4!^ReMngP z?dx|!$V)i;q=&cul+QHXF4;`%0$aRC@M)}c>InaSl2;j-ycpOT`mJYx_<2u& zgc-;x3Cnjttn#tvWN+V}#Cg1jka`kpAD{%qlCX&SvrD4!P*LG*LRN1H5lwhVO@*q( zV6$d2V+#D~M7U``0R8W=$7b^~l}>U6be;TtPR@p>zA+5dh_)!&?D@ z$F+EGp!|o`A2KH_WzIrh&*nzk_b>c4xnB|yjRC=P^HX!C`_9m*9?LQ5uf_pqGieyU z%my|n1Ej-y!r;+7&HGZ z%jXq~Bu4S$r}^_BCLI*Radx^lQQc3*1@@%e}!Epa>4 zg7-n7eel-tyso_g?-NK=FVC(Sf1j;DUK}~kC(wUgys*T}suR{j+|!v9ApGYwa1aDf z{=GzfJgAJhEXpGvovW5zV+f(bnq&C7NHR0>`Ru zx~tbB2)WjWqXOW|p{Xm;V2VLvWx4U8h)` zR7qF9Cqr7Uf2%m_(G$$6I28A3x|ij$;kmAbg)rgI zvnPD-Sguhy2(N}(&g4q>aSb=3W#s3oDQ_Lt>RwDv;(EZW8ne<^rHY|MqO7@WHiK9u zhgfchl8)2Cn;&v6D@jM1y;Dv$2C+lAIsZT5-*7*zHI7Yo3p5K~Y_Qg7rl>hO}y z2Jx(k4ko(4G5f(xgEhvzk|h_{uT&b9nfZ(+nI|+S1eeb=(VBh&4;@{yTQUjgN;2KI zl5`XXd@N)ES+L2A`v=GV;vsEuUYkm~8t+v~%_@=iN8B!vuxrEOai#NVlY`j13f3ag z%ge}=vUQ%Og{t|S>ZpDScQ;NUH7&5P8K^^o*(>YhLTiIj!Ta+rypq0fJ9ZiWc}Eck zkSTW#J`h8iSrOMr>$;e*8@bf4`ecT#>=s?DxqC41P~LBY_LkIyT@g>tJw7-ct%XU& z^s2_i)gr}Et(!8stTCbXD;B4hUb%}^qTi%xPIZb;8Cu>i9@Xnti&cHvmb&6D`Pk^1 zT%eTCYt%v0q%8A!ukF)iPzGIFwROiVuF8)RT&pV zI-SOk!%H~Br5+jEJ0&FTT>O@y`>R4zj^p9Yd_%ju_{jV+a+SLGAnm*yX}XuydEkv|ongNF zV$(IEh+2X3p!3OTL}Z8kI0cxI-n3#!-Fc_mvU8f%yv2$i=QCs3wnhu$3N03gc}0%J zB@$1c{b?dalX1dD0TOtLq*Kb-|jV6j>cFtn{Dy%8=gp`4y%e{VYaW>RelXXB_PBQ6)lsW!> z`kPmy6kZN#DE4Sa?-+&pH(T5NkT}=VOQ77(@u^b9zLRdMJU+$7wa&HV_IQKi;TQM5 zEtZi{@)Tybu;xM83lDCJJ~Erk45GkO{lPE3i1+76uP9GwgG3As^E6VwwMmNV_=XzT zY31g8JNP=jtIf4zkexb}osxJ;je*!Je0N8`HeucOk$U)APE1<*ts9FCEoO=Ewp7n> zM}=@|i=*hAz{OxicJg*r08=~L(y-?E?P1oZ@2+jku5W64p(G|QujIQRbI4*xs z&gJRPEiGEEAD;UT_OU=rtnW+|>RvDye^kV-*SUjyDyu7@wT5hr99H*QQ zYwbqMG0ZwrR%(u0Zul^!id|S*(>8Wp;^sF!q!L+5(r;ZH0s|1IjB>xfXTQ7Uc3oq| z;xT`N%hedy7fm4nhfYiXLtw4>6McPMbR+|@pN9m$e|X>uYn4z}v|C!GMTYi3KLSpt zPjZOCP)gJpQf)a6y=w=n>Nj2PWY#-;Hg?t@R|tvusuO+A4Iz7#r7uo0gNVd3Wj}h`P|RG1f?x^ZF*Dfh#>Yo;5BVyy(K&}<_} zYxMB48Sg4OjQ*Uq&#^Z4!h0hZ{IoXEO zvR$7r&DG8SqI)q4z5Mhqt-t8)xjD&UyPe0Ae7E^jogb0P&6ix|z^fa3c{wJ}oFJ6gX!==RU5+1i z56+E_8&zhRO!8XIt&)?8#FaUkMf z@(?2Ks$|qf`3dIBX7?OqqqIKzgGqTmqdB_Yva8S5jr`<{V>Zv&WHEmoGv~2PFp<9} z_8fLC7dRMNE_g#?yR_xpSeGuqJK#MLiAvMAY6^t{`SEXdHnWGD=Ap#lxKA-S55PE#<@@BMrJ@Tx7%wYJ$#%g_k z!DaNWffOgFQK?;9vNYY)m9wGL(LsiW`-H>?@lg|=?=6Jt52*=hA|#8nSj}k*|q)Hi4ofNP_m1x{(hrxv=k2a{5e?i%4$MZ^>mDGRAl|^3rX^JPrApp zzaE@XTUI_%MlYK2RLQHond4HNe&8@adz0}zA!^Nh+2>9f4l|>^M*?*BR-XM$*GOB# zdx^bni}05N7HDK4IbTSUj3$Ce#w+v~e~xtqqtoS9DplterIaJao}2#A&yC}k;m^=KXHg>UpGM_rxm7kF6F#^9;X_R=uF zVqV8wc>?0FWO7Qa=as;ojM+0`G0$v*3YXnR?IgG93SqLG7Eqs#O>9N5MT9V)QIw#KxxcRf5wb`{P15%t>VCg4QtT+(g`-tlDdiUzyf9 zv~%Cgz1snJR+W}yV$8i~P!TO~@UjzTa4h&O=f{%Zs4x=omoavds?E-qAC2NG8Ko$4 zW;v=&Xp>weI(gi`z>K|ea{c^20z7Qh_)sl(rF~oxujQP(tK=*EXqS}uh75wg=|lz7 zF;|?O*;l!4LpbS#A&j`+LdnDp;r6@@3H}O$o!W4I!w+O9p|F%`1gm+mZRh1;yt~Lt z(FnoSzHQm!j}j31;Y4YWpusCI8C>=*nWH)mk)fGnx=hQ>uC}OhWRUGSV{qP^YIPG? zajki4HrI|Q_mA~H3;@C`)lyLz(I1(qQ6ikYu&dSAUE_F1|5vavjT)_1Yh4{c>;Y-{u^Xzh(w3nURxtxhtA8sev3=2}{iX&H;U{Y;&iySuWb|(WHrBdmQcV8z4 z?*(cRclD_SyEaHsB%!(OSzsIXZ!ATV4(66ynU0;_YFao=ANVdWrOP=Oj}_Fj;;4K^ z#Jx#mFc^B{VNrTF!;kanqY&J@fsyTzH+>VmkE}?0gNK54dtd^x`k<24i52!{hT(~f znH$T!juOXJG@{&|DQ9`Q@86r8K*2P{M52?H`geKV(UfblWK!A^CUVEqYL@Kz7}(e< z%vTq>2EIq@x*FW}UvJBPk_}35RhyT9=R6{S!;*yh0mwclxGdHb{{Tj@ee`%tN*7uf zDcsIa{pd0j8f=&^U!a^)bJrXO8!%RQj6t2QQn}erXgc+pao%nZTy<33NglcADfjw7 zbf#T6tgjJoP_PG|mO7PA6VKY7mR8ed(^c51lMw^a#5n%|9|PngCx*FHpl5S+GG=Z) zo#AVfXOX&SE9awNHkFbbaQMa#YTG!atMQg`QI*Q=cj)!1~HPE;G_hUT3K^ z-@Zm}Ws6Y=%j{o_N+8AphD86;rSpLTNF)!}_AQl}Y5i+cqqlInN z@n4f4>>%sqWkM`Q`wCmW$?pxD;eROxEzMk9_&tHaZ}+I zAhRpCL{1~;)h?Q!A016Ytgq2g@S;Oa5!;=lL8Twrl5gAD*rv65*xp`j5XOD8Ge+a! z#CDaBD+rFNOiAe`=XX{gb*4Bt3$=jf_PFEYF1G<++Nf`(0wwcUUu)F2fo<_o9^;GG5pKqq*+R+gz0$mg4~c5EGk*x<-zr)D;QqLllV1&xM9ZWC-nYdw@XRNv#Y@Udv5 zuuT8br$);WQH|n}D{5l~b#VXX^jO)kloWVb6z^H2(uAIqlR|wJ3})7iZp-*J#;Ckt<%Gy8DVMI=53?QF=_@%m`H1 z%XE_HHBVxTNW$Gam!@U2bE?9#0uOp)@j48T>jOI)HnX{Clk<6|C|Y+WjI1JZ3cW-@$A_*&$tFe(0FWEzn0^)i(-_`vr=-zhU_N2329%WYg zTIs`|orWC;7I}rr9^OJUhPySmM8YD^oub}0uyV~63Az}G98;_SM>mKs>Sl$tDdvMDycofs^EDhNzqmxtGWKeLZ-SJtBGqEY)tUE7x%7lmvTlHKGNu z!ua^GOo~}ehm#uzhxOFQyN6GEC?|HLJNrtGc!|ST50Y`-3%C_Zl}inT?oL!T*oG(; z%1F%$WeULq2jalWP8O+b&-JcuGg^JBkZdAl=w2>M_g+IS1{i4Lsa3hwnvccOyppLb z&#W$&f}!$SqM??uu#mt=-%^d7Y+cyv)Hh9yjd>y{V}YA&DlR1-!6n^YoAW=O|FQl( zf#?n7&08XNCO0p>+`9=T>e!aFD<6&xJ*q+No#m)XKM~?EAOBu`&9*(fO4~(i@FE&(*`m4S38^lM{+PV3(=g zLuG^IeuOoeD}})yPGnHGac}^=^6^8llvV33Az}JxLT<>46!!==CMJaqT)`YaKmYo+ zR(9xlC;Nq5ejz4>^#=Dd?>6#cb*uz&ft3!)#c0#;uRryMBnL_FG=F}KApcW(Vqp$w z=-sV)Q+Zluo_ZnSjjj(SZq1(IzC2=<^lsZTmB~kxVmq7vS(sU#WgkJX5V0H2l9}>6G`(UCU+cOFrg|vhmFc;fPRD&typFJ%4$G6nkA6Zq=}(6k z{5r>HFVIuUwF?&FscThKy;r^>v?p1&l(Ws$vFI-sA{YawlCzE5WiQR={z5Rb;UtVD z5#9bI5Wzt@v@WU)k1;$Z-(`VfCRBI$Sg;z)x@^TOD#_=@6IpzAJId8eHR|w4um#Dk zL8v+{hX@`9Eu|q0{zpcJ_?A1KKGc5KZ&~8#=e*Zd{IycwIZqT#9PNCoKYcU79a=dY zi<&{EkfzM?$L8}1be1gyXq<6#T7278_U9d!l#2b?cRY!}dxkQDf7d|(jPu=@By>;r z^yKp-*0#<&Wy6*^m0vf41Y&ZP3l?Qm$D_Z=~aS?ru z^ppeYZyf!Jmk$x(Zt2W0p3X!^`Ey};aB(a@LtajDtI=T6;skTKn(pp)Uj5he@dWbA zYXBjqMQ>kh#gow1q>TN;VM7TaMW>!)pj0aTjami3ai1w56#y?F@I5df@emk#sK4m) z0KW6~{dU3h5q)0x*W%|rB0M-cGn+l@C9~$ov|dXq>I{-qB+Ff^d=G+z{PN_f#A~TH z0#Xo5uVbPA5^JD0(Gbr~3jAOyKcM^$${#AQl@vz6&u3@q)e#8uGMPQwL+Cl=muFrp zw++)b%uGYvZv<*D!EkVp|0S5N=#w+UiW}8(ihtfhn2+gPPo7C!VFWIR&C7 zjOMfF;Df6v0(n8d8G{<~kDhj07jk<0fryFul@ z&qO~tS{Kg_gm~tih3CePLkS>ABdHwc%HyqmU;sJG1J*zJYG-w5{B!(kTDbS2j%*pl-G`AJ+ZDHrF}+7^({ zpN~YOXXXRo{V3w)=F+Y6D=0*~FJ`8ju6Hd@Pu6GQrjhL?>%jc#U;PReHm^~V|3eD z@+>o_{Y}j^;LoESH;ZV#I*NrEX{k_zFC;URY8R$t!aXYv})Ixjp zG`twQ=Xy=cc(jgCB8fA3G+SJFbI7q*DRtOoltt5nWH&|ltd~nrNN5y)&Owa$`e zm77pYV65L>)wa!vnXy4yvy6P5x>LDK0d3Goeia3~qXu_i->oTiA|+r(5i{S^TFi++ zorBY5Ns{x=H*W*GZ4y|mD4z$QjbcyTiwPs%if4<*WYM)?WjOR5I@f_i&Sk!`=>*O1 z-re4-yivXMh>4`YM!6jsUWyBu1u!R3*F7}JbJX#mKl{#3s(}+g#6CzRv-cz zwF*z6Ff1w8gK!Uv@YDmE!4$R_$y9belBD1|qfndnwC6mFQpgRKqx(9>~CN~T$ zwF1RAxe#!fg;GTHGHu7VU^-SD>f}pQ)v&fd@~pf0HDfV_6jmGrDmIsQ=UNyHCX}{V z<(}}k-}r<%<7FDjk;wwsFojx85z~YH{Y}BfsUcjd3y*C_a4c6M1K6?4g4Ddw!<^#gT4A@#cgcG9zpjGl~A# zQrT}mZ?+W&D=LxB43p^jpZ+WTuE-EOiEg4ZGv{kts=+rYj$dPey`#t8qEJ{EqB9q; zMa?bk{4T&L!QI-gQT zynyBKHzRC*m4`zsKdd=7sK9=@Gnrp(p>Lq!k7$;Ct628wsqu6gck)Yr)|oS{+;xmw z?y3F)Dkq;kMu#C=BYeHyFA0><4k%}XXcTQj+~y6gmj!n}h#WYbPvV1KQhYcUykBVe zR#s@7Op#w=1r&D<)hYdp2>_iS>}dhQY#1?Meb(QxVXt}XY)27eX=n$!$%j{P`VDVO zn}rx4@{Hx!!5PnHp#a5*#lcxR-vNKY2uMXv?{$(t(yexg0!tFBQ;_0aS^OQxL7eTZ zQ;|yUKC^0z({at+N%3%JKRx^r5YsQWF7_(>`!MXZS5NJe>(kp0SVu}FAIDCpqU1{z z6KK_&GdN}Qp!ND{k0pcA$^b2!1L&eJ+2yXQmRn^bOz)F+))T(~nEA-Aj`z~$=qn>n z@O*g!A`YwWc-j?OJqBbqUkK~C@L<`&Eys53;L;2*f1`A4l}pLG~5FD&yI_m@ltIS z<$I-gcswYn5YH&GKP1Q=`6V6=q)zr+@EpaRJ?FTpJJ1rN^-JgEa#yEFj%>KQNe+S~ zTbp-+%g+knZHp9gSFVX5{qR-H)lx>C6)9co4%h$(i*Dlemq$e+X>+5Rd}1Exk*AQ) zOIvHd1&y!rM+4QyB7TB^1k_LEoF97q(a-le24?Qz#@4Qr21cae%#O+DYnCF$kjo^2K%hLE+_R2! zJ?a?1?Ykwl1f(a%0{SBtvyEkI+ygS6kZ+yIV#dq(8#D6mof`YAiQB$U%o!6a?^>`} z1?F2#NRAZ_2AjXx&3_0Z5hJc?ht(%in)*6Q4j#`>&PZX^-630G7k@TCG7|X> zIQitvb;^O=i>&V8kMx;U*o*B3z~eW*>q^=B?X^6X(#I0z?GVo*6@Cpb1+W* zs{bpV5hj!-Z#a&u$>OCCr#lm|Evv`t{Zu&0K+63Ujh%6_x1^EW+%vI6I|lH__d#P) zm=-%xQ}ee`w4?vW*;hwZ)pgw~qKF{f4bmyy-Q8URA`Q}cK_n%mySuwnx;v$$>jKgZ zzk|MTvo88 zim(<#b$Z3*mp3Swa7*nnOeE)>k-e*1t<4KWjv^G4pLtsv({fIZ#npyxzYy9rHVwb% z&ZtQDRk^QCWD{NPmd1wG)uA-;KHlRoEYy)xVw--ti?05Baxk8w^EfVi=ops^(|#ItM5su(OW&ZI?EYO?tRTD@x(7=*$owZ^0j;&9`P=_5uC4(6%ISx z3)iqW=QxJF%%s%U;tJpMnt8s)u-`%7ATn4{=Jl|P(=A|}l_4IHE%_u0HwHlB!k~Bi zqiJZ4PbN{s*K?#UWqdEzB1%(EE)v~@ov?;x_0-swmg1Rrw-;}r;>&QN$%u)CydjT1 zFT3Zf77$r+@_?=)WfIv)rpxVj9h&O%^<^7%bf`FAvk%BcQAQc^rtB!U-MmJ2;IWyd z69AQ`S>*lTy}_U5k_2r1QC-iyLRiaz2~5cnLo7$H$*(2uYy@rFpp;`3gF@O=`pZ|h z69_Ymo8NC7e&NbmLmCw=2F!R9RXzyrxjN(Ke0Π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

TvDJwC) z8TPvf=<|auYRq+OZ#ozKf>;3|Xet+`K}}>GZVprLv&-Wb8&l0QpOUrKB9n6}s^}i} zN_m9|BL_Y#pAv#Ek;$jL+N-aKi;$#Ag0gxbC9RivSKB;ii>~RBhQpMr?B3PY4(b?7 z*V(I=f0Ku<`=J0l-HLIM(m`u0sNs~9K7%Y|!KYlSLS-@ki%m}XRPAmlcy+sLzxpFn z1E7OetK9}!I6<7mvOpKbqlIIZAbCEQ8}-I&&%&)BY7d(-Q^=}RR@Qk3sfKZ)3i(mT zi+H^~seT7xmF})-H3+*4l7FL+NK753hkeWZS+iDIP_@!J!CGJdir^MQDt8nYc&!u~ z7WzNq7F8^@;e&)d#qcB)q2GVp-;cNG;n<7K)g)}tppS_1h*_quyfP}4NR^^D*a;NU zrpRO^(%YM9QmFG}s`JJ}_bac%8l;_+59x&g zh6P~fN;4C7JLS@rGaz2B^H|&g$9*g~Lt8i!eErMez;aNtOns;l zs**XS(Bs+95|w}6N+MdOqXmPa77iHmYS+;3x>6W_vUOHJA}*k}9)dwVrUnC_zdA1^ ziJmJbQy+aaB351e?@R60PZ{L&A3-b!VWYc&LOR1Zv0EOo^N~qAS~ViH z9YlJrEx#Xu{ z{o=f1clE%%t8aEx&I%D@W8NE&q9%5Eo+v%vq%_JmIW+Y-;!N$5Gju z$^;PH7d}BM6YOxO;JY;$&!WY|M6RV}BQ$KK(z@%-&(=}nxvbi{O#%f#m>`y9L@J6`9N-K7!{q9mpbtcvrHTP&# ytU1M3LdNJpSwX3X)cL~?o9YWcN1>LMFD@6?95xaX7Fk@vf0Pw8 Date: Mon, 18 Jan 2021 15:53:58 +0200 Subject: [PATCH 11/14] fix service script Signed-off-by: ChrsMark --- packages/stan/_dev/deploy/docker/run.sh | 2 +- .../test-log-sample.log-expected.json | 138 +++++++++--------- 2 files changed, 70 insertions(+), 70 deletions(-) diff --git a/packages/stan/_dev/deploy/docker/run.sh b/packages/stan/_dev/deploy/docker/run.sh index cf6dc302d6f..75c1cf19693 100755 --- a/packages/stan/_dev/deploy/docker/run.sh +++ b/packages/stan/_dev/deploy/docker/run.sh @@ -2,7 +2,7 @@ /nats-streaming-server -DV -l /var/log/stan/stan.log -m 8222 & sleep 2 -#while true; do /stan-bench -np 0 -ns 100 -qgroup T -n 100000000 -ms 1024 foo; done & +while true; do /stan-bench -np 0 -ns 100 -qgroup T -n 100000000 -ms 1024 foo; done #while true; do /stan-bench -np 10 -ns 10 -n 1000000000 -ms 1024 bar; done & # Make sure the container keeps running diff --git a/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log-expected.json b/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log-expected.json index 8f5ef40b807..6990fce24c2 100644 --- a/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log-expected.json +++ b/packages/stan/data_stream/log/_dev/test/pipeline/test-log-sample.log-expected.json @@ -7,7 +7,7 @@ }, "message": "[7] 2021/01/13 14.20:06.981022 [INF] STREAM: Starting nats-streaming-server[test-cluster] version 0.15.1", "event": { - "ingested": "2021-01-15T13:20:14.911369390Z" + "ingested": "2021-01-18T13:40:04.742504300Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981022 [INF] STREAM: Starting nats-streaming-server[test-cluster] version 0.15.1]" @@ -20,7 +20,7 @@ }, "message": "[7] 2021/01/13 14.20:06.981055 [INF] STREAM: ServerID: tnudw5OA2pv04Sn0JpebGy", "event": { - "ingested": "2021-01-15T13:20:14.911374106Z" + "ingested": "2021-01-18T13:40:04.742522500Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981055 [INF] STREAM: ServerID: tnudw5OA2pv04Sn0JpebGy]" @@ -33,7 +33,7 @@ }, "message": "[7] 2021/01/13 14.20:06.981069 [INF] STREAM: Go version: go1.11.10", "event": { - "ingested": "2021-01-15T13:20:14.911375767Z" + "ingested": "2021-01-18T13:40:04.742533Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981069 [INF] STREAM: Go version: go1.11.10]" @@ -46,7 +46,7 @@ }, "message": "[7] 2021/01/13 14.20:06.981082 [INF] STREAM: Git commit: [8e6aa7c]", "event": { - "ingested": "2021-01-15T13:20:14.911377240Z" + "ingested": "2021-01-18T13:40:04.742543Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981082 [INF] STREAM: Git commit: [8e6aa7c]]" @@ -59,7 +59,7 @@ }, "message": "[7] 2021/01/13 14.20:06.981951 [INF] Starting nats-server version 2.0.0", "event": { - "ingested": "2021-01-15T13:20:14.911386339Z" + "ingested": "2021-01-18T13:40:04.742553100Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981951 [INF] Starting nats-server version 2.0.0]" @@ -72,7 +72,7 @@ }, "message": "[7] 2021/01/13 14.20:06.981983 [DBG] Go build version go1.11.10", "event": { - "ingested": "2021-01-15T13:20:14.911391029Z" + "ingested": "2021-01-18T13:40:04.742563200Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981983 [DBG] Go build version go1.11.10]" @@ -85,7 +85,7 @@ }, "message": "[7] 2021/01/13 14.20:06.981996 [INF] Git commit [not set]", "event": { - "ingested": "2021-01-15T13:20:14.911393250Z" + "ingested": "2021-01-18T13:40:04.742573200Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.981996 [INF] Git commit [not set]]" @@ -98,7 +98,7 @@ }, "message": "[7] 2021/01/13 14.20:06.982082 [INF] Starting http monitor on 0.0.0.0:8222", "event": { - "ingested": "2021-01-15T13:20:14.911395027Z" + "ingested": "2021-01-18T13:40:04.742583100Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.982082 [INF] Starting http monitor on 0.0.0.0:8222]" @@ -111,7 +111,7 @@ }, "message": "[7] 2021/01/13 14.20:06.982116 [INF] Listening for client connections on 0.0.0.0:4222", "event": { - "ingested": "2021-01-15T13:20:14.911396641Z" + "ingested": "2021-01-18T13:40:04.742592Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.982116 [INF] Listening for client connections on 0.0.0.0:4222]" @@ -124,7 +124,7 @@ }, "message": "[7] 2021/01/13 14.20:06.982127 [INF] Server id is NCE3NFAMOIJHIR6KK53KBPN6C44LXZ6G4ULGLIWIBLYOLG5Z5LVCQSOB", "event": { - "ingested": "2021-01-15T13:20:14.911398109Z" + "ingested": "2021-01-18T13:40:04.742595900Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.982127 [INF] Server id is NCE3NFAMOIJHIR6KK53KBPN6C44LXZ6G4ULGLIWIBLYOLG5Z5LVCQSOB]" @@ -137,7 +137,7 @@ }, "message": "[7] 2021/01/13 14.20:06.982136 [INF] Server is ready", "event": { - "ingested": "2021-01-15T13:20:14.911399500Z" + "ingested": "2021-01-18T13:40:04.742599400Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.982136 [INF] Server is ready]" @@ -150,7 +150,7 @@ }, "message": "[7] 2021/01/13 14.20:06.982149 [DBG] Get non local IPs for \"0.0.0.0\"", "event": { - "ingested": "2021-01-15T13:20:14.911401132Z" + "ingested": "2021-01-18T13:40:04.742603100Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.982149 [DBG] Get non local IPs for \\\"0.0.0.0\\\"]" @@ -163,7 +163,7 @@ }, "message": "[7] 2021/01/13 14.20:06.982402 [DBG] ip=192.168.240.2", "event": { - "ingested": "2021-01-15T13:20:14.911402562Z" + "ingested": "2021-01-18T13:40:04.742609700Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:06.982402 [DBG] ip=192.168.240.2]" @@ -176,7 +176,7 @@ }, "message": "[7] 2021/01/13 14.20:07.008167 [DBG] 127.0.0.1:33150 - cid:1 - Client connection created", "event": { - "ingested": "2021-01-15T13:20:14.911403960Z" + "ingested": "2021-01-18T13:40:04.742620500Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.008167 [DBG] 127.0.0.1:33150 - cid:1 - Client connection created]" @@ -189,7 +189,7 @@ }, "message": "[7] 2021/01/13 14.20:07.009385 [DBG] 127.0.0.1:33152 - cid:2 - Client connection created", "event": { - "ingested": "2021-01-15T13:20:14.911405391Z" + "ingested": "2021-01-18T13:40:04.742631Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.009385 [DBG] 127.0.0.1:33152 - cid:2 - Client connection created]" @@ -202,7 +202,7 @@ }, "message": "[7] 2021/01/13 14.20:07.010819 [DBG] 127.0.0.1:33154 - cid:3 - Client connection created", "event": { - "ingested": "2021-01-15T13:20:14.911406812Z" + "ingested": "2021-01-18T13:40:04.742641100Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.010819 [DBG] 127.0.0.1:33154 - cid:3 - Client connection created]" @@ -215,7 +215,7 @@ }, "message": "[7] 2021/01/13 14.20:07.011557 [INF] STREAM: Recovering the state...", "event": { - "ingested": "2021-01-15T13:20:14.911408317Z" + "ingested": "2021-01-18T13:40:04.742688300Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.011557 [INF] STREAM: Recovering the state...]" @@ -228,7 +228,7 @@ }, "message": "[7] 2021/01/13 14.20:07.011583 [INF] STREAM: No recovered state", "event": { - "ingested": "2021-01-15T13:20:14.911409733Z" + "ingested": "2021-01-18T13:40:04.742696200Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.011583 [INF] STREAM: No recovered state]" @@ -241,7 +241,7 @@ }, "message": "[7] 2021/01/13 14.20:07.263504 [INF] STREAM: Message store is MEMORY", "event": { - "ingested": "2021-01-15T13:20:14.911411154Z" + "ingested": "2021-01-18T13:40:04.742703700Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263504 [INF] STREAM: Message store is MEMORY]" @@ -254,7 +254,7 @@ }, "message": "[7] 2021/01/13 14.20:07.263623 [INF] STREAM: ---------- Store Limits ----------", "event": { - "ingested": "2021-01-15T13:20:14.911412569Z" + "ingested": "2021-01-18T13:40:04.742714500Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263623 [INF] STREAM: ---------- Store Limits ----------]" @@ -267,7 +267,7 @@ }, "message": "[7] 2021/01/13 14.20:07.263653 [INF] STREAM: Channels: 100 *", "event": { - "ingested": "2021-01-15T13:20:14.911413978Z" + "ingested": "2021-01-18T13:40:04.742723200Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263653 [INF] STREAM: Channels: 100 *]" @@ -280,7 +280,7 @@ }, "message": "[7] 2021/01/13 14.20:07.263671 [INF] STREAM: --------- Channels Limits --------", "event": { - "ingested": "2021-01-15T13:20:14.911415384Z" + "ingested": "2021-01-18T13:40:04.742727200Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263671 [INF] STREAM: --------- Channels Limits --------]" @@ -293,7 +293,7 @@ }, "message": "[7] 2021/01/13 14.20:07.263690 [INF] STREAM: Subscriptions: 1000 *", "event": { - "ingested": "2021-01-15T13:20:14.911416795Z" + "ingested": "2021-01-18T13:40:04.742730800Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263690 [INF] STREAM: Subscriptions: 1000 *]" @@ -306,7 +306,7 @@ }, "message": "[7] 2021/01/13 14.20:07.263710 [INF] STREAM: Messages : 1000000 *", "event": { - "ingested": "2021-01-15T13:20:14.911418382Z" + "ingested": "2021-01-18T13:40:04.742734400Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263710 [INF] STREAM: Messages : 1000000 *]" @@ -319,7 +319,7 @@ }, "message": "[7] 2021/01/13 14.20:07.263728 [INF] STREAM: Bytes : 976.56 MB *", "event": { - "ingested": "2021-01-15T13:20:14.911419829Z" + "ingested": "2021-01-18T13:40:04.742741100Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263728 [INF] STREAM: Bytes : 976.56 MB *]" @@ -332,7 +332,7 @@ }, "message": "[7] 2021/01/13 14.20:07.263749 [INF] STREAM: Age : unlimited *", "event": { - "ingested": "2021-01-15T13:20:14.911421244Z" + "ingested": "2021-01-18T13:40:04.742751900Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263749 [INF] STREAM: Age : unlimited *]" @@ -345,7 +345,7 @@ }, "message": "[7] 2021/01/13 14.20:07.263767 [INF] STREAM: Inactivity : unlimited *", "event": { - "ingested": "2021-01-15T13:20:14.911422640Z" + "ingested": "2021-01-18T13:40:04.742757900Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263767 [INF] STREAM: Inactivity : unlimited *]" @@ -358,7 +358,7 @@ }, "message": "[7] 2021/01/13 14.20:07.263788 [INF] STREAM: ----------------------------------", "event": { - "ingested": "2021-01-15T13:20:14.911424047Z" + "ingested": "2021-01-18T13:40:04.742765800Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:07.263788 [INF] STREAM: ----------------------------------]" @@ -371,7 +371,7 @@ }, "message": "[7] 2021/01/13 14.20:08.988091 [DBG] 127.0.0.1:33160 - cid:4 - Client connection created", "event": { - "ingested": "2021-01-15T13:20:14.911425541Z" + "ingested": "2021-01-18T13:40:04.742853300Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:08.988091 [DBG] 127.0.0.1:33160 - cid:4 - Client connection created]" @@ -384,7 +384,7 @@ }, "message": "[7] 2021/01/13 14.20:09.010952 [INF] STREAM: Channel \"bar\" has been created", "event": { - "ingested": "2021-01-15T13:20:14.911426989Z" + "ingested": "2021-01-18T13:40:04.742865300Z" }, "error": { "message": "Provided Grok expressions do not match field value: [[7] 2021/01/13 14.20:09.010952 [INF] STREAM: Channel \\\"bar\\\" has been created]" @@ -423,7 +423,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911428375Z", + "ingested": "2021-01-18T13:40:04.742877300Z", "type": [ "info" ], @@ -463,7 +463,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911429797Z", + "ingested": "2021-01-18T13:40:04.742887500Z", "type": [ "info" ], @@ -501,7 +501,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911431203Z", + "ingested": "2021-01-18T13:40:04.742897800Z", "type": [ "info" ], @@ -539,7 +539,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911432630Z", + "ingested": "2021-01-18T13:40:04.742908300Z", "type": [ "info" ], @@ -577,7 +577,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911434162Z", + "ingested": "2021-01-18T13:40:04.742918800Z", "type": [ "info" ], @@ -617,7 +617,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911435552Z", + "ingested": "2021-01-18T13:40:04.742928900Z", "type": [ "info" ], @@ -657,7 +657,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911436958Z", + "ingested": "2021-01-18T13:40:04.742939100Z", "type": [ "info" ], @@ -697,7 +697,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911438353Z", + "ingested": "2021-01-18T13:40:04.742949200Z", "type": [ "info" ], @@ -737,7 +737,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911439751Z", + "ingested": "2021-01-18T13:40:04.742959700Z", "type": [ "info" ], @@ -775,7 +775,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911441204Z", + "ingested": "2021-01-18T13:40:04.742966200Z", "type": [ "info" ], @@ -813,7 +813,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911442596Z", + "ingested": "2021-01-18T13:40:04.742973700Z", "type": [ "info" ], @@ -851,7 +851,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911443990Z", + "ingested": "2021-01-18T13:40:04.742984300Z", "type": [ "info" ], @@ -889,7 +889,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911445402Z", + "ingested": "2021-01-18T13:40:04.742995300Z", "type": [ "info" ], @@ -931,7 +931,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911446833Z", + "ingested": "2021-01-18T13:40:04.743002900Z", "type": [ "info" ], @@ -973,7 +973,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911448238Z", + "ingested": "2021-01-18T13:40:04.743013700Z", "type": [ "info" ], @@ -1018,7 +1018,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911449645Z", + "ingested": "2021-01-18T13:40:04.743039800Z", "type": [ "info" ], @@ -1060,7 +1060,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911451987Z", + "ingested": "2021-01-18T13:40:04.743049600Z", "type": [ "info" ], @@ -1104,7 +1104,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911453553Z", + "ingested": "2021-01-18T13:40:04.743056800Z", "type": [ "info" ], @@ -1146,7 +1146,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911454982Z", + "ingested": "2021-01-18T13:40:04.743066900Z", "type": [ "info" ], @@ -1186,7 +1186,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911456393Z", + "ingested": "2021-01-18T13:40:04.743076800Z", "type": [ "info" ], @@ -1228,7 +1228,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911457908Z", + "ingested": "2021-01-18T13:40:04.743084400Z", "type": [ "info" ], @@ -1270,7 +1270,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911459306Z", + "ingested": "2021-01-18T13:40:04.743091600Z", "type": [ "info" ], @@ -1310,7 +1310,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911460699Z", + "ingested": "2021-01-18T13:40:04.743098900Z", "type": [ "info" ], @@ -1352,7 +1352,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911462091Z", + "ingested": "2021-01-18T13:40:04.743107200Z", "type": [ "info" ], @@ -1394,7 +1394,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911463500Z", + "ingested": "2021-01-18T13:40:04.743116200Z", "type": [ "info" ], @@ -1438,7 +1438,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911464921Z", + "ingested": "2021-01-18T13:40:04.743150600Z", "type": [ "info" ], @@ -1480,7 +1480,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911466316Z", + "ingested": "2021-01-18T13:40:04.743160300Z", "type": [ "info" ], @@ -1522,7 +1522,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911467741Z", + "ingested": "2021-01-18T13:40:04.743253600Z", "type": [ "info" ], @@ -1566,7 +1566,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911469149Z", + "ingested": "2021-01-18T13:40:04.743272300Z", "type": [ "info" ], @@ -1608,7 +1608,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911470558Z", + "ingested": "2021-01-18T13:40:04.743284400Z", "type": [ "info" ], @@ -1652,7 +1652,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911471967Z", + "ingested": "2021-01-18T13:40:04.743294100Z", "type": [ "info" ], @@ -1694,7 +1694,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911473420Z", + "ingested": "2021-01-18T13:40:04.743300900Z", "type": [ "info" ], @@ -1736,7 +1736,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911474825Z", + "ingested": "2021-01-18T13:40:04.743311400Z", "type": [ "info" ], @@ -1780,7 +1780,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911476235Z", + "ingested": "2021-01-18T13:40:04.743318900Z", "type": [ "info" ], @@ -1822,7 +1822,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911477633Z", + "ingested": "2021-01-18T13:40:04.743326400Z", "type": [ "info" ], @@ -1866,7 +1866,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911479042Z", + "ingested": "2021-01-18T13:40:04.743336500Z", "type": [ "info" ], @@ -1908,7 +1908,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911480580Z", + "ingested": "2021-01-18T13:40:04.743349700Z", "type": [ "info" ], @@ -1948,7 +1948,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911481983Z", + "ingested": "2021-01-18T13:40:04.743358500Z", "type": [ "info" ], @@ -1986,7 +1986,7 @@ "ip": "127.0.0.1" }, "event": { - "ingested": "2021-01-15T13:20:14.911483417Z", + "ingested": "2021-01-18T13:40:04.743365400Z", "type": [ "info" ], From f4652e3a66e63d5115f0bc221a757bb464bbf18e Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Mon, 18 Jan 2021 16:23:36 +0200 Subject: [PATCH 12/14] move to beta Signed-off-by: ChrsMark --- packages/stan/manifest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stan/manifest.yml b/packages/stan/manifest.yml index 9b94e01e06c..42a801b3acb 100644 --- a/packages/stan/manifest.yml +++ b/packages/stan/manifest.yml @@ -1,7 +1,7 @@ name: stan title: STAN version: 0.1.0 -release: experimental +release: beta description: STAN Integration type: integration icons: From 215b0fcf6e4918dc9ff8c4a5023cd6a71210186a Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Mon, 18 Jan 2021 17:13:11 +0200 Subject: [PATCH 13/14] review changes Signed-off-by: ChrsMark --- packages/stan/_dev/build/docs/README.md | 2 +- packages/stan/_dev/deploy/docker/run.sh | 4 ---- packages/stan/docs/README.md | 2 +- packages/stan/kibana/dashboard/stan-Logs-stan-overview.json | 4 ++-- .../stan-c3d1ab80-41a8-11e9-a4da-b1df688edbcd.json | 4 ++-- packages/stan/manifest.yml | 4 ++-- 6 files changed, 8 insertions(+), 12 deletions(-) diff --git a/packages/stan/_dev/build/docs/README.md b/packages/stan/_dev/build/docs/README.md index ce5e17a3682..3a0e4afba26 100644 --- a/packages/stan/_dev/build/docs/README.md +++ b/packages/stan/_dev/build/docs/README.md @@ -6,7 +6,7 @@ The integration collects metrics from [STAN monitoring server APIs](https://gith ## Compatibility -The STAN package is tested with Stan 0.15.1 +The STAN package is tested with Stan 0.15.1. ## Logs diff --git a/packages/stan/_dev/deploy/docker/run.sh b/packages/stan/_dev/deploy/docker/run.sh index 75c1cf19693..a37326f9fea 100755 --- a/packages/stan/_dev/deploy/docker/run.sh +++ b/packages/stan/_dev/deploy/docker/run.sh @@ -4,7 +4,3 @@ sleep 2 while true; do /stan-bench -np 0 -ns 100 -qgroup T -n 100000000 -ms 1024 foo; done #while true; do /stan-bench -np 10 -ns 10 -n 1000000000 -ms 1024 bar; done & - -# Make sure the container keeps running -tail -f /dev/null - diff --git a/packages/stan/docs/README.md b/packages/stan/docs/README.md index 69022d02857..2ca40d3454a 100644 --- a/packages/stan/docs/README.md +++ b/packages/stan/docs/README.md @@ -6,7 +6,7 @@ The integration collects metrics from [STAN monitoring server APIs](https://gith ## Compatibility -The STAN package is tested with Stan 0.15.1 +The STAN package is tested with Stan 0.15.1. ## Logs diff --git a/packages/stan/kibana/dashboard/stan-Logs-stan-overview.json b/packages/stan/kibana/dashboard/stan-Logs-stan-overview.json index 8c0187c7d75..7854176b68b 100644 --- a/packages/stan/kibana/dashboard/stan-Logs-stan-overview.json +++ b/packages/stan/kibana/dashboard/stan-Logs-stan-overview.json @@ -71,7 +71,7 @@ { "embeddableConfig": { "hidePanelTitles": false, - "title": " Bytes Timeline", + "title": "Bytes Timeline", "vis": { "legendOpen": false } @@ -85,7 +85,7 @@ }, "panelIndex": "4", "panelRefName": "panel_3", - "title": " Bytes Timeline", + "title": "Bytes Timeline", "version": "7.10.0" }, { diff --git a/packages/stan/kibana/visualization/stan-c3d1ab80-41a8-11e9-a4da-b1df688edbcd.json b/packages/stan/kibana/visualization/stan-c3d1ab80-41a8-11e9-a4da-b1df688edbcd.json index a877cca4650..6b696a1039f 100644 --- a/packages/stan/kibana/visualization/stan-c3d1ab80-41a8-11e9-a4da-b1df688edbcd.json +++ b/packages/stan/kibana/visualization/stan-c3d1ab80-41a8-11e9-a4da-b1df688edbcd.json @@ -11,7 +11,7 @@ } } }, - "title": " Bytes Timeline [Logs STAN]", + "title": "Bytes Timeline [Logs STAN]", "uiStateJSON": {}, "version": 1, "visState": { @@ -101,7 +101,7 @@ } ] }, - "title": " Bytes Timeline [Logs STAN]", + "title": "Bytes Timeline [Logs STAN]", "type": "line" } }, diff --git a/packages/stan/manifest.yml b/packages/stan/manifest.yml index 42a801b3acb..8e547a93005 100644 --- a/packages/stan/manifest.yml +++ b/packages/stan/manifest.yml @@ -17,11 +17,11 @@ conditions: kibana.version: ">=7.11.0" screenshots: - src: /img/metricbeat-stan-overview.png - title: Metricbeat STAN Dashboard + title: Metrics STAN Dashboard size: 1829x447 type: image/png - src: /img/filebeat-stan-overview.png - title: Filebeat STAN Dashboard + title: Logs STAN Dashboard size: 1829x447 type: image/png policy_templates: From f200279977ae93ee704ff666b8deff05dae9b20a Mon Sep 17 00:00:00 2001 From: ChrsMark Date: Mon, 18 Jan 2021 17:18:47 +0200 Subject: [PATCH 14/14] fix file names Signed-off-by: ChrsMark --- ...eat-stan-overview.png => logs-stan-overview.png} | Bin ...-stan-overview.png => metrics-stan-overview.png} | Bin packages/stan/manifest.yml | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename packages/stan/img/{filebeat-stan-overview.png => logs-stan-overview.png} (100%) rename packages/stan/img/{metricbeat-stan-overview.png => metrics-stan-overview.png} (100%) diff --git a/packages/stan/img/filebeat-stan-overview.png b/packages/stan/img/logs-stan-overview.png similarity index 100% rename from packages/stan/img/filebeat-stan-overview.png rename to packages/stan/img/logs-stan-overview.png diff --git a/packages/stan/img/metricbeat-stan-overview.png b/packages/stan/img/metrics-stan-overview.png similarity index 100% rename from packages/stan/img/metricbeat-stan-overview.png rename to packages/stan/img/metrics-stan-overview.png diff --git a/packages/stan/manifest.yml b/packages/stan/manifest.yml index 8e547a93005..ca63df759a5 100644 --- a/packages/stan/manifest.yml +++ b/packages/stan/manifest.yml @@ -16,11 +16,11 @@ categories: conditions: kibana.version: ">=7.11.0" screenshots: - - src: /img/metricbeat-stan-overview.png + - src: /img/metrics-stan-overview.png title: Metrics STAN Dashboard size: 1829x447 type: image/png - - src: /img/filebeat-stan-overview.png + - src: /img/logs-stan-overview.png title: Logs STAN Dashboard size: 1829x447 type: image/png